zoukankan      html  css  js  c++  java
  • 刚写的B/S高级查询界面(基于ExtJs框架)

    这几天赶着做一个B/S系统,基于ExtJs框架,从中学了不少东西,今天写的高级查询界面感觉比较有意义,很多人应该也用得着,特拿出来共享一下。当然没正式完工,余下与服务器交互、Lookup列表、取生成查询条件一部分没有完成,做得有点腻了,先放出来,曾经做过的不妨交流一下。

    界面:

    查询界面

    代码:

    1. <DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html><head><title>XXXX系统V1.0</title>
    3. <meta name="Author" contect="彭国辉">
    4. <meta. name="Keywords" content="blog:http://blog.csdn.net/nhconch" />
    5. <meta http-equiv="Content-Type" content="text/html; charset=utf8">
    6. <link rel="stylesheet" type="text/css" href="resources/css/ext-all.css">
    7. <link rel="stylesheet" type="text/css" href="resources/css/hndc.css">
    8. <script type="text/javascript" src="adapter/ext/ext-base.js"></script>
    9. <script type="text/javascript" src="ext-all.js"></script>
    10. <script type="text/javascript" src="source/locale/ext-lang-zh_CN.js"></script>
    11. <script type="text/javascript">
    12. Ext.BLANK_IMAGE_URL = 'resources/images/default/s.gif';
    13. Ext.onReady(function () {
    14. var dsPQ=new Ext.data.JsonStore({
    15.    fields:["idx","relation","leftParenthesis","fieldname","operator","value","rightParenthesis"] 
    16. });
    17. var fieldsDef = new Ext.data.JsonStore({
    18.     fields: ['value','text','type'],
    19.     data:[
    20.         {value:'A.Billno',text:'预约单号',type:'string'},
    21.         {value:'A.Date',text:'时间',type:'date'},
    22.         {value:'A.boolean',text:'布尔',type:'boolean'},
    23.         {value:'A.int',text:'整形',type:'int'},
    24.         {value:'A.float',text:'浮点',type:'float'},
    25.         {value:'A.lookup',text:'Lookup',type:'lookup',data:[[1,'list1'],[2,'list2'],[3,'list3']]}
    26.     ]
    27. });
    28. var numericOp = datetimeOp = new Ext.data.SimpleStore({
    29.     fields: ['value','text'],
    30.     data : [['=','='],['<>','<>'],['<','<'],['<=','<='],['<','>'],['>=','>='],['is null','空白'],['is not null','非空白']]
    31. });
    32. var stringOp = new Ext.data.SimpleStore({
    33.     fields: ['value','text'],
    34.     data : [['=','='],['<>','<>'],['<','<'],['<','>'],
    35.     ['like |%','以...开头'],['like %|','以...结尾'],['like %|%','包含字符'],['not like %|%','不包含字符'],
    36.     ['is null','空白'],['is not null','非空白']]
    37. });
    38. var lookupOp = booleanOp = new Ext.data.SimpleStore({
    39.     fields: ['value','text'],
    40.     data : [['=','='],['<>','<>'],['is null','空白'],['is not null','非空白']]
    41. });
    42. var objGridTextEditor = new Ext.grid.GridEditor(new Ext.form.TextField());
    43. //var objGridMemoEditor = new Ext.grid.GridEditor(new Ext.form.TextArea());
    44. var objGridDateEditor = new Ext.grid.GridEditor(new Ext.form.DateField({format:'Y-m-d'}));
    45. var objGridIntegerEditor = new Ext.grid.GridEditor(new Ext.form.NumberField({allowBlank:false,allowNegative:false,allowDecimals:false}));
    46. var objGridFloatEditor = new Ext.grid.GridEditor(new Ext.form.NumberField({allowBlank:false,allowNegative:false}));
    47. var objGridBooleanEditor = new Ext.grid.GridEditor(new Ext.form.ComboBox({
    48.     store: [[true,'是'],[false,'否']],
    49.     mode: 'local',
    50.     readOnly: true,
    51.     triggerAction: 'all',
    52.     allowBlank: false,
    53.     editable: false,
    54.     forceSelection: true,
    55.     blankText:'请选择...'
    56. }));
    57. var objGridLookupEditor = new Ext.grid.GridEditor(new Ext.form.ComboBox({
    58.     //store: [],
    59.     mode: 'local',
    60.     readOnly: true,
    61.     triggerAction: 'all',
    62.     allowBlank: false,
    63.     editable: false,
    64.     forceSelection: true,
    65.     blankText:'请选择...'
    66. }));
    67. function fileListChange(field,newValue,oldValue){
    68.     //alert(field);
    69. }
    70. function findRecordValue(store,prop, propValue,field){
    71.     var record;
    72.     if(store.getCount() > 0){
    73.         store.each(function(r){
    74.             if(r.data[prop] == propValue){
    75.                 rrecord = r;
    76.                 return false;
    77.             }
    78.         });
    79.     }
    80.     return record ? record.data[field] : '';
    81. }
    82. function displayOperator(v){
    83.     switch(v){
    84.         case 'is null': return '空白';
    85.         case 'is not null': return '非空白';
    86.         case 'like |%': return '以...开头';
    87.         case 'like %|': return '以...结尾';
    88.         case 'like %|%': return '包含字符';
    89.         case 'not like %|%': return '不包含字符';
    90.         default: return v;
    91.     }
    92. }
    93. function displayValue(v, params, record){
    94.     var dataType = findRecordValue(fieldsDef,'value',record.get('fieldname'),'type');
    95.     var operator = record.get('operator');
    96.     if (operator=='is null'||operator=='is not null') return '';
    97.     switch(dataType){
    98.         case 'date': return v ? v.dateFormat('Y-m-d'): '';
    99.         case 'boolean': return (v?'是':'否');
    100.         default: return v;
    101.     }
    102. }
    103. var qRowData = Ext.data.Record.create([
    104.     {name:'idx',type:'int'},
    105.     {name:'relation',type:'string'},
    106.     {name:'leftParenthesis',type:'string'},
    107.     {name:'fieldname',type:'string'},
    108.     {name:'operator',type:'string'},
    109.     {name:'value',type:'string'},
    110.     {name:'rightParenthesis',type:'string'}
    111. ]);
    112. var dsPQ=new Ext.data.JsonStore({
    113.    data:[],
    114.    fields:["idx","relation","leftParenthesis","fieldname","operator","value","rightParenthesis"] 
    115. });
    116. var colM=new Ext.grid.ColumnModel([
    117.     {
    118.         header:"关系",
    119.         dataIndex:"relation",
    120.         50,
    121.         renderer: function(v){return (v=='and'?'并且':'或者')},
    122.         editor:new Ext.form.ComboBox({ 
    123.             store: [['and','并且'],['or','或者']],
    124.             mode: 'local',
    125.             readOnly: true,
    126.             triggerAction: 'all',
    127.             allowBlank: false,
    128.             editable: false,
    129.             forceSelection: true,
    130.             blankText:'请选择'
    131.         })
    132.     },{
    133.         header:"括号",
    134.         dataIndex:"leftParenthesis",
    135.         40,
    136.         editor:new Ext.form.ComboBox({
    137.             store: ['(','((','((','(((','(((('],
    138.             mode: 'local',
    139.             triggerAction: 'all',
    140.             valueField: 'value',
    141.             displayField: 'text',
    142.             editable: false
    143.         })
    144.     },{
    145.         header:"字段名",
    146.         dataIndex:"fieldname",
    147.         130,
    148.         renderer: function(v){return findRecordValue(fieldsDef,'value',v,'text');},
    149.         editor:new Ext.form.ComboBox({
    150.             store: fieldsDef,
    151.             mode: 'local',
    152.             triggerAction: 'all',
    153.             valueField: 'value',
    154.             displayField: 'text',
    155.             editable: false,
    156.             listeners:{change:fileListChange}
    157.         })
    158.     },{
    159.         header:"运算符",
    160.         80,
    161.         dataIndex:"operator",
    162.         renderer: displayOperator
    163.     },{
    164.         header:"内容",
    165.         dataIndex:"value",
    166.         130,
    167.         renderer: displayValue
    168.     },{
    169.         header:"括号",
    170.         40,
    171.         dataIndex:"rightParenthesis",
    172.         editor:new Ext.form.ComboBox({
    173.             store: [')','))',')))','))))'],
    174.             mode: 'local',
    175.             triggerAction: 'all',
    176.             valueField: 'value',
    177.             displayField: 'text',
    178.             editable: false
    179.         })
    180.     }
    181. ]);
    182. var grdDPQuery = new Ext.grid.EditorGridPanel({
    183.     height:500,
    184.     490,
    185.     renderTo:"hello",   
    186.     cm:colM,
    187.     sm:new Ext.grid.RowSelectionModel({singleSelect.:false}),
    188.     store:dsPQ,
    189.     region:'center',
    190.     border: false,
    191.     enableColumnMove: false,
    192.     enableHdMenu: false,
    193.     loadMask: {msg:'加载数据...'},
    194.     clicksToEdit:1,
    195.     tbar:[
    196.         {text:'添加',handler:function(){
    197.                 var count = dsPQ.getCount();
    198.                 var r = new qRowData({idx:dsPQ.getCount(),relation:'and',leftParenthesis:'',fieldname:'',operator:'=',value:'',rightParenthesis:''});
    199.                 dsPQ.commitChanges();
    200.                 dsPQ.insert(count,r);
    201.             }
    202.         },
    203.         {text:'删除',handler:function(){
    204.                 //store = grid.getStore();
    205.                 var selections = grdDPQuery.getSelectionModel().getSelections();
    206.                 for(var i = 0; i < selections.length; i++){ 
    207.                     dsPQ.remove(selections[i]); 
    208.                 }
    209.             }
    210.         },
    211.         {text:'全部清除',handler:function(){dsPQ.removeAll();}}
    212.     ],
    213.     listeners: {
    214.         afteredit: function(e){
    215.             if (e.column==2/*e.field=='fieldname'*/){
    216.                 var oldDataType = findRecordValue(fieldsDef,'value',e.originalValue,'type');
    217.                 var newDataType = findRecordValue(fieldsDef,'value',e.value,'type');
    218.                 if (oldDataType!=newDataType){
    219.                     e.record.set('operator', '=');
    220.                     e.record.set('value', '');
    221.                 }
    222.             }
    223.         },
    224.         cellclick: function(grid, rowIndex, columnIndex, e){
    225.             if (columnIndex!=3&&columnIndex!=4) return;
    226.             var record = grid.getStore().getAt(rowIndex);  // Get the Record
    227.             //var fieldName = grid.getColumnModel().getDataIndex(columnIndex); // Get field name
    228.             //var data = record.get(fieldName);
    229.             var dataType = findRecordValue(fieldsDef,'value',record.get('fieldname'),'type');
    230.             if (dataType=='') return;//未选定字段,退出
    231.             if (columnIndex==3){//绑定运算符
    232.                 var grdEditor = grid.colModel.getCellEditor(columnIndex,rowIndex);
    233.                 if (grdEditor) grdEditor.destroy();
    234.                 var _store;
    235.                 switch(dataType){
    236.                     case 'string': _store = stringOp; break;
    237.                     case 'date': _store = datetimeOp; break;
    238.                     case 'boolean': _store = booleanOp; break;
    239.                     case 'int':
    240.                     case 'float': _store = numericOp; break;
    241.                     case 'lookup': _store = lookupOp; break;
    242.                 }
    243.                 grdEditor = new Ext.form.ComboBox({
    244.                     store: _store,
    245.                     mode: 'local',
    246.                     triggerAction: 'all',
    247.                     valueField: 'value',
    248.                     displayField: 'text',
    249.                     editable: false
    250.                 })
    251.                 grid.colModel.setEditor(columnIndex, new Ext.grid.GridEditor(grdEditor));
    252.             }
    253.             else if (columnIndex==4){//绑定编辑器
    254.                 var operator = record.get('operator');
    255.                 if (operator=='is null'||operator=='is not null'){
    256.                     grid.colModel.setEditor(columnIndex, null);
    257.                     return;
    258.                 }
    259.                 var grdEditor;
    260.                 switch(dataType){
    261.                     case 'string': grdEditor = objGridTextEditor; break;
    262.                     case 'date': grdEditor = objGridDateEditor; break;
    263.                     case 'boolean': grdEditor = objGridBooleanEditor; break;
    264.                     case 'int': grdEditor = objGridIntegerEditor; break;
    265.                     case 'float': grdEditor = objGridFloatEditor; break;
    266.                     case 'lookup': grdEditor = objGridLookupEditor; break;
    267.                 }
    268.                 if (grid.colModel.getCellEditor(columnIndex,rowIndex)!=grdEditor){
    269.                     grid.colModel.setEditor(columnIndex, grdEditor);
    270.                 }
    271.             }
    272.         }
    273.     }
    274. });
    275. });
    276. </script>
    277. </head><div id="hello"></div><body>
    278. </body></html>
  • 相关阅读:
    【NodeJS】---express配置ejs mongoose route等
    【CSS3】---层模型position之fixed固定定位、absolute绝对定位和relative相对定位
    【CSS3】---:before :after生成内容
    px转rem的填坑之路
    markdown编写文件目录结构
    js reduce数组转对象
    处理Promise.reject()
    js事件循环
    为什么[] == false 为true
    为什么不建议用var
  • 原文地址:https://www.cnblogs.com/hannover/p/1846269.html
Copyright © 2011-2022 走看看