亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript的ExtJS框架中表格的編寫教程

2019-11-20 09:58:34
字體:
來源:轉載
供稿:網友

ExtJS中表格的特性簡介
表格由類Ext.grid.GridPanel定義,繼承自Ext.Panel,xtype為grid
表格的列信息由Ext.grid.ColumnModel定義
表格的數據存儲器由Ext.data.Store定義,根據解析數據的不同,數據存儲器可具體分為如下幾種:

JsonStore,SimpleStore,GroupingStore…

一個表格的基本編寫過程:

1、創建表格列模型

var cm = new Ext.grid.ColumnModel({ {header: '角色', dataIndex: 'role'}, {header: '等級', dataIndex: 'grade'}, {header: '創建日期', dataIndex: 'createDate', type: 'date', renderer: Ext.util.Format.dateRenderer('Y年m月d日')} //創建日期類型的數據});

2、創建數據數組

var data = [  ['士兵','7','2011-07-2412:34:56'],  ['將軍','10','2011-07-2412:34:56'],];

3、創建一個數據存儲對象store,包含兩部分:proxy,獲取數據的方式;reader,解析數據的方式

ArrayReader的mapping用來設置列的排列順序

var store = new Ext.data.Store({  proxy: new Ext.data.MemoryProxy(data),  reader: new Ext.data.ArrayReader({}, [    {name: 'role', mapping: 1},    {name: 'grade', mapping: 0}    {name: 'createDate', mapping: 2, type:'date', dateFormat:'Y-m-dH:i:s'} //創建日期列和顯示格式  ])});store.load();

4、創建GridPanel,裝配ColumnModel和store

var grid = new Ext.grid.GridPanel({ renderTo: 'grid', store: store, cm: cm});

另外獲取遠程數據可以使用ScriptTagProxy,如下所示

var store = new Ext.data.Store({  proxy: new Ext.data.ScriptTagProxy({   url:'http://...'}),  reader: new Ext.data.ArrayReader({}, [    {name: 'role', mapping: 1},    {name: 'grade', mapping: 0}  ]),  sortInfo: {field: "role", direction: "ASC"} //設置默認排序列,ASC/DESC});


表格的常用屬性功能

var grid = new Ext.grid.GridPanel({ enableColumnMove: false, //禁止拖放列 enableColumnResize: false, //禁止改變列的寬度 stripeRows: true, //斑馬線效果 loadMask: true, //讀取數據時的遮罩和提示功能 renderTo: 'grid', store: store cm: cm});var cm = new Ext.grid.ColumnModel({ {header: '角色', dataIndex: 'role', width:90, sortable: true}, //width設置列寬度,默認為100px,sortable設置排序功能 {id:'grade', header: '等級', dataIndex: 'grade', width:40}});var grid = new Ext.grid.GridPanel({ renderTo: 'grid', store: store, cm: cm viewConfig:{  //讓每列自動填充滿表格 forceFit: true } autoExpandColumn: 'grade' //自動延伸列,列的id在ColumnModel中定義});

渲染表格,為表格設置特殊樣式
只需要在cm里面增加一個renderer屬性,添加一個自定義函數來渲染傳進來(由EXT自動傳遞)的參數的樣式即可,即在返回value之前拼裝上相應的HTML和CSS或者JS響應事件。

function renderSex(value) {  if (value == 'male') {    return "<span style='color:blue;'>男</span><img src='images/icon_male.png' />";  } else {    return "<span style='color:red;'>女</span><img src='images/icon_female.png' />";  }}var cm = new Ext.grid.ColumnModel([  {header:'id',dataIndex:'id'},  {header:'name',dataIndex:'name'},  {header:'sex',dataIndex:'sex',renderer:renderSex},]);var data = [  ['1','Jason','male'],  ['2','Kate','female']];var store = new Ext.data.Store({  proxy: new Ext.data.MemoryProxy(data),  reader: new Ext.data.ArrayReader({}, [    {name: 'id'},    {name: 'name'},    {name: 'sex'}  ])});store.load();var grid = new Ext.grid.GridPanel({  autoHeight: true,  renderTo: 'grid',  store: store,  cm: cm});

自動顯示行號,只要在創建cm時創建一個RowNumberer就可以了

var cm = new Ext.grid.ColumnModel([ new Ext.grid.RowNumberer(),  //顯示行號  {header:'id',dataIndex:'id'},  {header:'name',dataIndex:'name'},  {header:'sex',dataIndex:'sex',renderer:renderSex},]);

刪除列

store.remove(store.getAt(i));

刷新表格

grid.view.refresh();

為表格添加復選框
需要使用CheckboxSelectionModel
SelectionModel sm在使用時要放到cm和表格中

var sm = new Ext.grid.CheckboxSelectionModel();var cm = new Ext.grid.ColumnModel([  new Ext.grid.RowNumberer(),  sm,  {header:'編號',dataIndex:'id'},  {header:'名稱',dataIndex:'name'}]);var data = [  ['1','name1'],  ['2','name2']];var store = new Ext.data.Store({  proxy: new Ext.data.MemoryProxy(data),  reader: new Ext.data.ArrayReader({}, [    {name: 'id'},    {name: 'name'}  ])});store.load();var grid = new Ext.grid.GridPanel({  autoHeight: true,  renderTo: 'grid',  store: store,  cm: cm,  sm: sm});

通過RowSelectionModel設置只選擇一行:

var grid = new Ext.grid.GridPanel({  autoHeight: true,  renderTo: 'grid',  store: store,  cm: cm,  sm: new Ext.grid.RowSelectionModel({singleSelect:true})});

使用選擇模型獲取數據

grid.on('click', function() {  var selections = grid.getSelectionModel().getSelections();  for (var i = 0; i < selections.length; i++) {    var record = selections[i];    Ext.Msg.alert(record.get("id"));  }});

表格視圖
從MVC的思想來看表格控件:
* Ext.data.Store可看做模型
* Ext.grid.GridPanel可看做控制器
* Ext.grid.GridView可看做視圖
* 一般GridView由GridPanell自動生成,如果想設置GridView的屬性時,可以通過Ext.grid.GridPanel的getView()獲得視圖實例

Ext.get('button1').on('click', function() { grid.getView().scrollToTop();  grid.getView().focusCell(0, 0);  var cell = grid.getView().getCell(0, 0);  cell.style.backgroundColor = 'red';});

使用GridPanel的viewConfig在創建表格時設置GridView的初始化參數

var grid = new Ext.grid.GridPanel({  height: 100,  width: 400,  renderTo: 'grid',  store: new Ext.data.Store({    autoLoad: true,    proxy: new Ext.data.MemoryProxy(data),    reader: new Ext.data.ArrayReader({}, meta)  }),  columns: meta,  viewConfig: {    columnsText: '顯示的列', //設置下拉菜單提示文字    scrollOffset: 30,  //設置右側滾動條的預留寬度    sortAscText: '升序',  //設置下拉菜單提示文字    sortDescText: '降序',  //設置下拉菜單提示文字    forceFit: true  //自動延展每列的長度  }});

為表格添加分頁工具條
* 可以使用GridPanel的bbar屬性,并創建Ext.PagingToolbar分頁工具條對象
* 注意,如果配置了分頁工具條,store.load()就必須在構造表格以后執行。

var grid = new Ext.grid.GridPanel({  renderTo: 'grid',  autoHeight: true,  store: store,  cm: cm,  bbar: new Ext.PagingToolbar({    pageSize: 10,  //每頁顯示10條數據    store: store,    displayInfo: true,  //顯示數據信息    displayMsg: '顯示第 {0} 條到 {1} 條記錄,一共 {2} 條',    emptyMsg: "沒有記錄"  //沒有數據時顯示的信息  })});store.load();

從后臺腳本獲取分頁數據

使用HttpProxy傳遞請求,獲取服務器的JSON數據,交給JsonReader解析

var cm = new Ext.grid.ColumnModel([  {header:'編號',dataIndex:'id'},  {header:'名稱',dataIndex:'name'}]);var store = new Ext.data.Store({  proxy: new Ext.data.HttpProxy({url:'page.jsp'}),  reader: new Ext.data.JsonReader({    totalProperty: 'totalProperty',    root: 'root'  }, [    {name: 'id'},    {name: 'name'}  ])});var grid = new Ext.grid.GridPanel({  renderTo: 'grid',  autoHeight: true,  //數據傳回來之前高度未知,所以要使用自適應高度  store: store,  cm: cm,  bbar: new Ext.PagingToolbar({    pageSize: 10,    store: store,    displayInfo: true,    displayMsg: '顯示第 {0} 條到 {1} 條記錄 / 共 {2} 條',    emptyMsg: "沒有記錄"  })});store.load({params:{start:0,limit:10}});

如果想讓分頁工具條顯示在表格的頂部,可以使用GridPanel的tbar屬性設置添加工具條

讓ExtJS在對返回的數據進行分頁

* 需要在頁面中引入examples/locale目錄下的PagingMemoryProxy.js文件
* 再使用PagingMemoryProxy設置代理

var store = new Ext.data.Store({  proxy: new Ext.data.PagingMemoryProxy(data),  reader: new Ext.data.ArrayReader({}, [    {name: 'id'},    {name: 'name'},    {name: 'descn'}  ])});//在創建GridPanel之后調用store.load({params:{start:0,limit:3}});

可編輯表格控件EditorGrid的使用

制作一個簡單的EditorGrid的步驟:

1、定義列ColumnModel,在里面添加editor屬性

var cm = new Ext.grid.ColumnModel([{  header: '編號',  dataIndex: 'id',  editor: new Ext.grid.GridEditor(    new Ext.form.TextField({      allowBlank: false //不允許在TextField中輸入空值    })  )}, {  header: '名稱',  dataIndex: 'name',  editor: new Ext.grid.GridEditor(    new Ext.form.TextField({      allowBlank: false    })  )}]);

2、準備一個數組

var data = [  ['1','Jason'],  ['2','Jay']];

3、創建Ext.data.Store,設置內存代理,設置ArrayReader解析數組

var store = new Ext.data.Store({  proxy: new Ext.data.MemoryProxy(data),  reader: new Ext.data.ArrayReader({}, [    {name: 'id'},    {name: 'name'}  ])});

4、加載數據,創建EditorGridPanel

store.load();var grid = new Ext.grid.EditorGridPanel({  autoHeight: true,  renderTo: 'grid',  store: store,  cm: cm});

為可編輯表格添加和刪除數據

1、使用Record的create方法創建一個記錄集MyRecord,MyRecord相當于一個類

var MyRecord = Ext.data.Record.create([  {name: 'id', type: 'string'},  {name: 'name', type: 'string'}]);store.load();

2、創建EditorGridPanel面板,在屬性tbar中創建Ext.Toolbar

var grid = new Ext.grid.EditorGridPanel({  autoHeight: true,  renderTo: 'grid',  store: store,  cm: cm,  tbar: new Ext.Toolbar(['-', { //-表示菜單分隔符    text: '添加一行',    handler: function(){      var p = new MyRecord({        id:'',        name:''      });      grid.stopEditing(); //關閉表格的編輯狀態      store.insert(0, p); //創建的Record插入store的第一行      grid.startEditing(0, 0); //激活第一行第一列的編輯狀態    }  }, '-', {    text: '刪除一行',    handler: function(){      Ext.Msg.confirm('信息', '確定要刪除?', function(btn){        if (btn == 'yes') {          var sm = grid.getSelectionModel(); //獲取表格的選擇模型          var cell = sm.getSelectedCell();  //獲取選中的單元格          var record = store.getAt(cell[0]); //通過行號得到store這一行對應的Record          store.remove(record);  //移除數據        }      });    }  }, '-'])});

為可編輯表格保存修改的結果

在上面例子的基礎之上,添加一個保存按鈕

text: '保存',handler: function(){  var m = store.modified.slice(0); //獲得store中修改過得數據  for (var i = 0; i < m.length; i++) { //驗證表格信息是否正確,是否包含空格    var record = m[i];    var fields = record.fields.keys;    for (var j = 0; j < fields.length; j++) {      var name = fields[j];      var value = record.data[name];      var colIndex = cm.findColumnIndex(name);      var rowIndex = store.indexOfId(record.id);      var editor = cm.getCellEditor(colIndex).field;      if (!editor.validateValue(value)) {        Ext.Msg.alert('提示', '請檢查輸入的數據是否正確!', function(){          grid.startEditing(rowIndex, colIndex);        });        return;      }    }  }  var jsonArray = [];  Ext.each(m, function(item) {    jsonArray.push(item.data); //把修改過得數據放到jsonArray中  });  Ext.lib.Ajax.request(  //使用Ajax請求提交給后臺    'POST',    'save_data.jsp',    {success: function(response){ //返回成功      Ext.Msg.alert('信息', response.responseText, function(){        store.reload();      });    },failure: function(){  //返回失敗      Ext.Msg.alert("錯誤", "服務器保存數據出錯!");    }},    'data=' + encodeURIComponent(Ext.encode(jsonArray))  );}

另外store可以設置屬性pruneModifiedRecords: true。這樣,每次remove或load操作時store會自動清除modified標記,可以避免出現下次提交時還會把上次那些modified信息都帶上的現象。


限制表格輸入的數據類型

NumberField

{  header:'ID',  dataIndex:'id',  editor:new Ext.grid.GridEditor(new Ext.form.NumberField({ //NumberField限制只能輸入數字    allowBlank: false,    allowNegative: false, //不能輸入減號    maxValue: 10  }))}

ComboBox

var comboData = [  ['0','Java'],  ['1','Android']];{  header:'ComboBox',  dataIndex:'combo',  editor:new Ext.grid.GridEditor(new Ext.form.ComboBox({    store: new Ext.data.SimpleStore({      fields:['value','text'],      data: comboData    }),    emptyText: '請選擇',    mode: 'local',    triggerAction: 'all',    valueField: 'value',    displayField: 'text',    readOnly:true  })),  renderer: function(value){    return comboData[value][1];  }}

DateField

{  header:'Date',  dataIndex:'date',  editor:new Ext.grid.GridEditor(new Ext.form.DateField({    format: 'Y-m-d',    minValue: '2011-07-24',    disabledDays: [0, 6],    disabledDaysText: '選擇周一到周六之間的日期'  })),  renderer: function(value) {    return value.format("Y-m-d");  }}

屬性表格控件PropertyGrid的使用
是在EditorGrid的基礎上開發的更智能的高級表格組件

var grid = new Ext.grid.PropertyGrid({  title: '屬性表格控件PropertyGrid',  autoHeight: true,  width: 400,  renderTo: 'grid',  viewConfig: {    forceFit: true  },  source: {    "String": "String",    "Date": new Date(Date.parse('07/24/2011')),    "boolean": false,    "float": .01  }});

禁用PropertyGrid編輯功能的方法

grid.on('beforeedit', function(e){ e.cancel = true; return false;});

根據表格的name獲取value

grid.store.getById('Jason').get(value);


ExtJS中實現嵌套表格
先看效果:

2016521104833438.jpg (433×300)

代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>test</title><script type="text/javascript"></script><link rel="stylesheet" type="text/css" href="Lib/ExtJs/2_2/resources/css/ext-all.css" /><script type="text/javascript" src="Lib/ExtJs/2_2/adapter/ext/ext-base.js"></script><script type="text/javascript" src="Lib/ExtJs/2_2/ext-all-debug.js"></script><script type="text/javascript" src="Lib/ExtJs/2_2/source/locale/ext-lang-zh_CN.js"></script><script type="text/javascript" src="Lib/ExtJs/plus/RowExpander.js"></script><script type="text/javascript">Ext.onReady(function(){var testData=[  ["lugreen","男",26,[["數學",100],["語文",150]]]  ,["lisi","男",25,[["數學",100],["語文",150]]]  ,["zhangsan","男",27,[["數學",120],["語文",158]]]  ];//storeTest= new Ext.data.SimpleStore({  fields: ["name","sex","age","grade"]  ,data: testData});var expander = new Ext.grid.RowExpander({    tpl : new Ext.XTemplate(    '<div class="detailData">',    '',    '</div>'    )    });expander.on("expand",function(expander,r,body,rowIndex){ //查找 grid  window.testEle=body; //alert(body.id); if (Ext.DomQuery.select("div.x-panel-bwrap",body).length==0){   //alert("a");   var data=r.json[3];   var store=new Ext.data.SimpleStore({      fields: ["class","degrade"]      ,data:data     });   var cm = new Ext.grid.ColumnModel([   {header: "科目",dataIndex: 'class',width: 130,hideable:false,sortable:false,resizable:true}   ,{header: "成績",dataIndex: 'degrade',width: 130,hideable:false,sortable:false,resizable:true}   ]);   Ext.DomQuery.select("div.detailData")[0]; var grid = new Ext.grid.GridPanel( {  store:store,  cm:cm,  renderTo:Ext.DomQuery.select("div.detailData",body)[0],  autoWidth:true,  autoHeight:true  } );  }});//var sm=new Ext.grid.CheckboxSelectionModel({singleSelect:true});  var cm = new Ext.grid.ColumnModel([  expander  ,{header: "姓名",dataIndex: 'name',width: 50,hideable:false,sortable:false}  ,{header: "性別",dataIndex: 'sex',width: 130,hideable:false,sortable:false,resizable:true}  ,{header: "年齡",dataIndex: 'age',width: 130,hideable:false,sortable:false,resizable:true}  ]); var grid = new Ext.grid.GridPanel( {  id:'testgrid',  store:storeTest,  cm:cm,  renderTo:"grid1",  width:780,  autoHeight:false,  height:300,  listeners:{},   plugins:[expander]  }  );});</script><style type="text/css">#div2 h2 {  font-weight:200;  font-size:12px;}.c1 h2 {  font-weight:200;}</style></head><body><div id="grid1"> </div><div id="grid2"> </div></body></html>

其中使用到的"RowExpander.js"為extjs官方示例中自帶的。

實現這個嵌套表格要注意兩點技巧:
1.提供給外層表格的dataStore的數據源以嵌套數組的形式表示細節區的數據,如下面的黑體所示。

var testData=[  ["lugreen","男",26,[["數學",100],["語文",150]]]  ,["lisi","男",25,[["數學",100],["語文",150]]]  ,["zhangsan","男",27,[["數學",120],["語文",158]]]  ];

使用數組集中record對象的json屬性來獲取以細節區數據

var data=r.json[3];

2.在rowExpander的 expand事件中添加嵌套表格.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品一区二区| 久久精品国产久精国产一老狼| 亚洲天堂av电影| 国产一区二区黑人欧美xxxx| 国产精品亚洲视频在线观看| 欧美中文在线观看国产| 成人在线一区二区| 成人av电影天堂| 欧美成人午夜剧场免费观看| 情事1991在线| 久久久精品欧美| 国产精品成熟老女人| 欧美在线亚洲一区| 欧美野外wwwxxx| 午夜免费在线观看精品视频| 在线免费观看羞羞视频一区二区| 色综合久久88色综合天天看泰| 亚洲日本成人女熟在线观看| 国产精品狼人色视频一区| 这里只有精品丝袜| 国产精品美女免费视频| 亚洲国产日韩欧美在线动漫| 亚洲精品720p| 亚洲精品www久久久久久广东| 国产视频精品免费播放| 欧美激情一级欧美精品| 国产精品久久久久久av福利软件| 人人做人人澡人人爽欧美| 成人午夜激情免费视频| 欧美日韩在线免费| 国产精品高清在线| 国产精品视频xxxx| 欧美日韩精品国产| 精品免费在线观看| 日韩中文在线不卡| 久久久久日韩精品久久久男男| 亚洲精品黄网在线观看| 国产精品久久久久999| 91av国产在线| 国产婷婷97碰碰久久人人蜜臀| 欧美精品国产精品日韩精品| 欧美激情影音先锋| 国产精品久久不能| 精品日韩中文字幕| 欧美一区在线直播| 一本久久综合亚洲鲁鲁| 日韩欧美一区二区三区| 日韩精品在线第一页| 亚洲精品国产精品国自产观看浪潮| 国产精品视频精品| 国产精品99免视看9| 精品五月天久久| 久久青草福利网站| 久久久亚洲网站| 欧美中文字幕视频| 色噜噜狠狠狠综合曰曰曰| 青青草原一区二区| 久久97精品久久久久久久不卡| 欧美极品在线播放| 日韩精品在线观看网站| 亚洲成人在线网| 亚洲第一av网站| 亚洲最大激情中文字幕| 欧美激情一区二区三区久久久| 国产性猛交xxxx免费看久久| 国产区精品在线观看| 色偷偷91综合久久噜噜| 日韩性xxxx爱| 精品福利一区二区| 欧美精品videofree1080p| 97精品在线视频| www.日韩免费| 国产成人在线播放| 一本色道久久88精品综合| 尤物yw午夜国产精品视频| 亚洲第一男人天堂| 亚洲色图50p| 欧美另类交人妖| 日韩精品免费在线| 亚洲欧洲自拍偷拍| 久久亚洲精品中文字幕冲田杏梨| 亚洲电影免费观看| 欧美亚洲成人精品| 日韩在线视频线视频免费网站| 57pao精品| 国产精品视频自拍| 精品视频www| 亚洲综合在线中文字幕| 精品国产一区二区三区久久狼黑人| 国产视频精品在线| 亚洲人精品午夜在线观看| 亚洲人成伊人成综合网久久久| 国产精品va在线播放我和闺蜜| 精品久久久久久久久中文字幕| 国产亚洲美女精品久久久| 91亚洲精品在线观看| 亚洲精品国产免费| 久久精品成人动漫| 日本精品视频在线| 亚洲天堂视频在线观看| 91经典在线视频| 日韩精品欧美国产精品忘忧草| 91视频九色网站| 欧美大尺度激情区在线播放| 97国产成人精品视频| 亚洲免费高清视频| 欧美性高潮床叫视频| 亚洲天堂第一页| 国产精品三级在线| 久久久久亚洲精品国产| 91丝袜美腿美女视频网站| 久久久久国产精品一区| 亚洲精品天天看| 国产精品xxxxx| 成人免费高清完整版在线观看| 国产视频在线一区二区| 中文字幕国产亚洲2019| 欧美高清激情视频| 98精品国产高清在线xxxx天堂| 国产精品羞羞答答| 精品久久久久久中文字幕一区奶水| 亚洲国产精品久久久| 欧美日韩中文字幕在线视频| 日韩免费看的电影电视剧大全| 日韩在线播放一区| 国产精品久久91| 久久天堂av综合合色| 国产极品精品在线观看| 久久精品免费播放| 日韩av免费在线| www.99久久热国产日韩欧美.com| 亚洲成人在线视频播放| 国产97色在线| 亚洲精品美女久久| 亚洲欧美日韩在线一区| 欧美一区二区三区免费视| 人妖精品videosex性欧美| 日本免费在线精品| 欧美精品午夜视频| 亚洲性无码av在线| 亚洲国产欧美一区二区丝袜黑人| 亚洲精品福利视频| 久久久噜噜噜久久中文字免| 亚洲激情视频在线| 国产成人精品免费久久久久| 亚洲a级在线观看| 一区二区三区视频在线| 国产婷婷97碰碰久久人人蜜臀| 亚洲成人激情视频| 国产成人精品国内自产拍免费看| 欧美性猛交xxxx偷拍洗澡| 欧美成人午夜影院| 一本色道久久综合狠狠躁篇的优点| 欧美国产视频一区二区| 日韩精品视频观看| 成人网在线免费观看| 精品成人久久av| 国产视频亚洲精品| 深夜福利91大全| 国外成人在线播放| 久久久久久亚洲精品中文字幕| 一色桃子一区二区| 国产成人精品久久亚洲高清不卡| 亚洲国产精品久久久久久|