Ext.QuickTips.init(); Ext.define('erp.controller.pm.make.MakeIMEI', { extend: 'Ext.app.Controller', requires: ['erp.util.BaseUtil','erp.util.GridUtil'], views: ['common.init.Template', 'core.button.UpExcel', 'core.trigger.DbfindTrigger', 'core.trigger.MultiDbfindTrigger', 'core.toolbar.Toolbar'], init: function(){ var me = this; me.BaseUtil = Ext.create('erp.util.BaseUtil'); me.GridUtil = Ext.create('erp.util.GridUtil'); this.control({ 'form[id=upexcel]': { afterrender: function(btn){ btn.upexcel = function(field){ if(btn.grid){ btn.getForm().submit({ url: basePath + 'pm/make/upexcel.action?caller='+caller, waitMsg: "正在解析Excel", success: function(fp, o){ field.reset(); btn.grid.ilid = o.result.ilid; btn.grid.down('pagingtoolbar').dataCount = o.result.count; /*btn.grid.down('pagingtoolbar').pageSize = o.result.count;*/ btn.grid.down('pagingtoolbar').onLoad(o.result.count); btn.grid.getGridData(1); Ext.getCmp('check').show(); Ext.getCmp('toformal').hide(); Ext.getCmp('thisdelete').hide(); //Ext.getCmp('saveupdates').hide(); }, failure: function(fp, o){ if(o.result.size){ showError(o.result.error + " " + Ext.util.Format.fileSize(o.result.size)); field.reset(); } else { showError(o.result.error); field.reset(); } } }); } }; } }, 'button[id=export]': { click: function(btn){ var grid = btn.ownerCt.ownerCt.down('gridpanel'); if(grid){ me.BaseUtil.exportGrid(grid); } } }, 'button[id=rule]': { click: function(btn){ this.openUrl(); } }, 'button[id=check]': { click: function(btn){ var grid = btn.ownerCt.ownerCt.down('gridpanel'); if(grid && grid.down('pagingtoolbar').dataCount<=0) showMessage('提示', '无数据'); else if(grid) me.checkdata(grid); } }, 'button[id=history]': { click: function(btn){ var grid = btn.ownerCt.ownerCt.down('gridpanel'); if(grid){ me.showHistory(grid.caller); } } }, 'button[id=toformal]': { click: function(btn){ var grid = btn.ownerCt.ownerCt.down('gridpanel'); var bool = false; if(grid && grid.ilid > 0) { if(grid.down('pagingtoolbar').dataCount<=0) showMessage('提示', '无数据'); else { for(var i = 0 ; i < grid.errorNodesStr.length ; i++){ if(grid.errorNodesStr[i]!=''){ bool = true; break; } } if(bool) { showMessage('提示', '测试未通过,无法转入正式'); } else { me.toformal(grid); } } } } }, 'button[id=thisdelete]': { click: function(btn){ var grid = btn.ownerCt.ownerCt.down('gridpanel'); var bool = false; if(grid && grid.ilid > 0) { if(grid.down('pagingtoolbar').dataCount<=0) showMessage('提示', '无数据'); else { for(var i = 0 ; i < grid.errorNodesStr.length ; i++){ if(grid.errorNodesStr[i]!=''){ bool = true; break; } } if(bool) { showMessage('提示', '测试未通过,无需删除数据'); } else { me.thisdelete(grid,me); } } } } }, /*'button[id=saveupdates]': { click: function(btn){ var grid = btn.ownerCt.ownerCt.down('gridpanel'); if(grid && grid.ilid > 0) { me.saveUpdates(grid); } } },*/ '#template': { afterrender: function(p) { this.getDetails(p, caller, false); } } }); }, getDetails: function(p, caller, isReload){ if(caller != p.caller || isReload){ p.caller = caller; var me = this; Ext.Ajax.request({ url: basePath + 'common/singleGridPanel.action', params: { caller: caller, condition:'' }, method: 'post', callback: function(options, success, response){ var res = new Ext.decode(response.responseText); if(res.exceptionInfo != null){ Ext.getCmp('upexcel').hide(); showError(res.exceptionInfo);return; } else { p.removeAll(); var store = me.emptyData(res.columns); p.add({ xtype: 'grid', id: 'template-data', anchor: "100% 100%", cls: 'custom', caller: caller, ilid: -1, cfg: res.columns,//当前导入项的配置信息 columnLines: true, viewConfig: { style: { overflow: 'hidden', overflowX: 'hidden' } }, columns: me.parseInitDetails(res.columns), store: store, dockedItems: [me.getDockedItems(store)], getGridData: function(page){ me.loadInitData(this, page); }, loadData: function(ilid, count, page){ this.ilid = ilid; this.down('pagingtoolbar').dataCount = count; this.down('pagingtoolbar').onLoad(); this.getGridData(page); Ext.getCmp('toformal').show(); if(caller!='ProductSmt!Import'){ Ext.getCmp('thisdelete').show(); } //Ext.getCmp('saveupdates').show(); Ext.getCmp('check').show(); }, deleteData: function(ilid){ me.ondelete(ilid); }, reset: function(){ this.ilid = -1; this.down('pagingtoolbar').dataCount = 25; this.down('pagingtoolbar').onLoad(); this.store.removeAll(true); this.store.loadData([{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]); }, showErrors: function(page){ var grid = this,items = grid.store.data.items, columns = grid.columns,d,lineError,fieldS,errorS,nodesStr = grid.errorNodesStr,log = '', f = (page-1) * 100,t = page*100; if(nodesStr && nodesStr.length > 0) { var end = t校验状态: {log}


' ], toggleRow: function(rowIdx) { var rowNode = this.view.getNode(rowIdx), row = Ext.get(rowNode), nextBd = Ext.get(row).down(this.rowBodyTrSelector), record = this.view.getRecord(rowNode), grid = this.getCmp(); if (row.hasCls(this.rowCollapsedCls)) { row.removeCls(this.rowCollapsedCls); nextBd.removeCls(this.rowBodyHiddenCls); this.recordsExpanded[record.internalId] = true; this.view.fireEvent('expandbody', rowNode, record, nextBd.dom); } else { row.addCls(this.rowCollapsedCls); nextBd.addCls(this.rowBodyHiddenCls); this.recordsExpanded[record.internalId] = false; this.view.fireEvent('collapsebody', rowNode, record, nextBd.dom); } this.view.up('gridpanel').invalidateScroller(); this.view.up('gridpanel').doComponentLayout(); //this.view.up('gridpanel').view.refresh();//速度慢 } }, Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit: 1 })] }); var btn = Ext.getCmp('upexcel'); if(btn) { btn.show(); btn.grid = p.down('gridpanel'); } } } }); } }, parseInitDetails: function(arr){ var me = this, d = new Array(),o; var dd = 'import_detno'; if(caller == 'Make!IMEI'){ dd = 'MIL_DETNO' } d.push({xtype: 'rownumberer', width: 35, text:'序号', dataIndex:dd}); d.push({ text: '导入日志', dataIndex: 'log', hidden: true, renderer: function(val, meta){ meta.style = 'height:0px;'; } }); d.push({ text: 'ID', dataIndex: 'dg_id', hidden: true }); var num = 0; Ext.each(arr, function(a){ if(a.dataIndex.toUpperCase().indexOf('DETNO')<0){ o = new Object(); o.text = a.text; o.dataIndex = a.dataIndex; o.hidden = a.hidden; o.width = a.width; o.caller = caller; o.num = num++; /*o.rule = a.id_rule; o.dataType = a.id_type;*/ /*o.isNeed = a.id_need == 1 ? '是' : '否'; o.logic = a.id_logic; o.logicdesc = me.parseLogic(o.logic);*/ o.editor = { xtype: 'textfield', cls:null, displayField:"display", editable:true, format:"", hideTrigger:true, maxLength:4000, minValue:null, positiveNum:false, queryMode:"local", store:null, valueField:"value" }; o.renderer = function(val, meta, record, x, y, store, view){ if(view) { var grid = view.ownerCt,nodesStr = grid.errorNodesStr,cm = grid.columns[y],page = grid.down('pagingtoolbar').page; var index = (page-1)*100+x; if(nodesStr && nodesStr.length > 0) { if(nodesStr[index] != ''){ var lineError = nodesStr[index].split(";") for(var i = 0 ; i dataCount ? dataCount : page*pageSize; pageData.total = dataCount; var msg; if (displayItem) { if (me.dataCount === 0) { msg = me.emptyMsg; } else { msg = Ext.String.format( me.displayMsg, pageData.fromRecord, pageData.toRecord, pageData.total ); } displayItem.setText(msg); me.doComponentLayout(); } }, getPageData : function(){ var me = this, totalCount = me.dataCount; return { total : totalCount, currentPage : me.page, pageCount: Math.ceil(me.dataCount / me.pageSize), fromRecord: ((me.page - 1) * me.pageSize) + 1, toRecord: Math.min(me.page * me.pageSize, totalCount) }; }, doRefresh:function(){ this.moveFirst(); }, onPagingKeyDown : function(field, e){ var me = this, k = e.getKey(), pageData = me.getPageData(), increment = e.shiftKey ? 10 : 1, pageNum = 0; if (k == e.RETURN) { e.stopEvent(); pageNum = me.readPageFromInput(pageData); if (pageNum !== false) { pageNum = Math.min(Math.max(1, pageNum), pageData.pageCount); me.child('#inputItem').setValue(pageNum); if(me.fireEvent('beforechange', me, pageNum) !== false){ me.page = pageNum; me.ownerCt.getGridData(me.page); } } } else if (k == e.HOME || k == e.END) { e.stopEvent(); pageNum = k == e.HOME ? 1 : pageData.pageCount; field.setValue(pageNum); } else if (k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN) { e.stopEvent(); pageNum = me.readPageFromInput(pageData); if (pageNum) { if (k == e.DOWN || k == e.PAGEDOWN) { increment *= -1; } pageNum += increment; if (pageNum >= 1 && pageNum <= pageData.pages) { field.setValue(pageNum); } } } me.updateInfo(); me.resetTool(value); }, moveFirst : function(){ var me = this; me.child('#inputItem').setValue(1); value = 1; me.page = value; me.ownerCt.getGridData(value); me.updateInfo(); me.resetTool(value); }, movePrevious : function(){ var me = this; me.child('#inputItem').setValue(me.child('#inputItem').getValue() - 1); value = me.child('#inputItem').getValue(); me.page = value; me.ownerCt.getGridData(value); me.updateInfo(); me.resetTool(value); }, moveNext : function(){ var me = this, last = me.getPageData().pageCount; total = last; me.child('#inputItem').setValue(me.child('#inputItem').getValue() + 1); value = me.child('#inputItem').getValue(); me.page = value; me.ownerCt.getGridData(value); me.updateInfo(); me.resetTool(value); }, moveLast : function(){ var me = this, last = me.getPageData().pageCount; total = last; me.child('#inputItem').setValue(last); value = me.child('#inputItem').getValue(); me.page = value; me.ownerCt.getGridData(value); me.updateInfo(); me.resetTool(value); }, onLoad : function() { var e = this, d, b, c, a; if (!e.rendered) { return } d = e.getPageData(); b = d.currentPage; c = Math.ceil(e.dataCount / e.pageSize); a = Ext.String.format(e.afterPageText, isNaN(c) ? 1 : c); e.child("#afterTextItem").setText(a); e.child("#inputItem").setValue(b); e.child("#first").setDisabled(b === 1); e.child("#prev").setDisabled(b === 1); e.child("#next").setDisabled(b === c || c===1);// e.child("#last").setDisabled(b === c || c===1); e.child("#refresh").enable(); e.updateInfo(); e.fireEvent("change", e, d); }, resetTool: function(value){ var pageCount = this.getPageData().pageCount; this.child('#last').setDisabled(value == pageCount || pageCount == 1); this.child('#next').setDisabled(value == pageCount || pageCount == 1); this.child('#first').setDisabled(value <= 1); this.child('#prev').setDisabled(value <= 1); } }; }, getPathString: function(tree, record){//path:/root/5/12 var str = tree.ownerCt.title; return record.getPath('text', '»').replace('root', str); }, ondelete: function(id){ var grid = Ext.getCmp('template-data'); grid.setLoading(true); Ext.Ajax.request({ url: basePath + 'system/deleteInitData.action', params: { id: id }, method: 'post', callback: function(options, success, response){ var res = new Ext.decode(response.responseText); grid.setLoading(false); if(res.exceptionInfo != null){ showError(res.exceptionInfo);return; } else { if(id == grid.ilid) {//如果删除的是当前显示的数据,要清除当前grid的数据 grid.reset(); } } } }); }, showHistory: function(caller){ var w = Ext.create('Ext.Window', { width: '60%', height: '80%', id: 'history-win', title: '导入数据历史记录', autoShow: true, layout: 'anchor', items: [{ xtype: 'gridpanel', anchor: '100% 100%', columnLines: true, columns: [{dataIndex: 'il_id', hidden: true},{dataIndex: 'il_caller', hidden: true},{dataIndex: 'il_date', text: '日期', flex: 2}, {dataIndex: 'il_sequence', text: '次数', flex: 1},{dataIndex: 'il_count', text: '数据量(条)', flex: 1}, {dataIndex: 'il_checked', text: '是否已校验', flex: 1, renderer: function(val, m){ if(val == '否') { m.style = 'float:right'; } return val; }},{dataIndex: 'il_success',text:'是否校验通过', flex: 1, renderer: function(val, m){ if(val == '否') { m.style = 'float:right'; } return val; }}, {dataIndex: 'il_toformal', text: '是否转正式', flex: 1, renderer: function(val, m){ if(val == '否') { m.style = 'float:right'; } return val; }}, {text: '', flex: 1, renderer: function(val, m, r){ return '载入  删除'; }}], store: Ext.create('Ext.data.Store', { fields: ['il_id', 'il_caller', 'il_date', 'il_sequence', 'il_count', 'il_checked', 'il_success', 'il_toformal'], data: [{},{},{},{},{},{},{},{},{},{}] }) }] }); this.getInitLog(w.down('gridpanel'), caller); }, getInitLog: function(g, c){ Ext.Ajax.request({ url: basePath + 'system/initHistory.action', params: { caller: c }, method: 'post', callback: function(opt, s, r){ var res = new Ext.decode(r.responseText); var dd = res.data; Ext.each(dd, function(d){ d.il_date = Ext.Date.format(new Date(d.il_date), 'Y-m-d H:i:s'); d.il_checked = d.il_checked == 1 ? '是' : '否'; d.il_success = d.il_success == 1 ? '是' : '否'; d.il_toformal = d.il_toformal == 1 ? '是' : '否'; }); g.store.loadData(dd); } }); }, loadInitData: function(grid, page){ var f = (page-1) * 100 + 1, t = page*100; grid.setLoading(true); Ext.Ajax.request({ url: basePath + 'system/getInitData.action', params: { condition: "id_ilid=" + grid.ilid + " AND id_detno between " + f + " AND " + t }, method: 'post', callback: function(options, success, response){ var res = new Ext.decode(response.responseText); grid.setLoading(false); if(res.exceptionInfo != null){ showError(res.exceptionInfo);return; } else { var datas = new Array(), o; Ext.each(res.data, function(d){ o = Ext.decode(d.id_data); o.id_id = d.id_id; datas.push(o); }); grid.store.loadData(datas); grid.showErrors(page); } } }); }, /* saveInitDetails: function(grid, caller){ var me = this,datas = [],items = grid.store.data.items,d; Ext.each(items, function(i){ if(i.dirty) { d = i.data; if(!Ext.isEmpty(d.id_field) && !Ext.isEmpty(d.id_table)) { d.id_field=d.id_field.trim(); d.id_need = d.id_need ? 1 : 0; d.id_visible = d.id_visible ? 1 : 0; d.id_caller = caller; d.id_fieldtype =Ext.isEmpty(d.id_fieldtype)? 0:d.id_fieldtype; d.id_width = Ext.isEmpty(d.id_width) ? 100 : d.id_width; datas.push(d); } } }); Ext.Ajax.request({ url: basePath + 'system/saveInitDetail.action', method: 'post', params: { data: unescape(Ext.encode(datas).replace(/\\/g,"%")) }, callback: function(opt, s, r) { var rs = Ext.decode(r.responseText); if(!rs || rs.exceptionInfo) { showError(rs.exceptionInfo); } else { alert('保存成功!'); grid.ownerCt.destroy(); me.getDetails(Ext.getCmp('template'), caller, true); } } }); },*/ fieldTypes: function(f, record){ var g = Ext.getCmp('initdetails'), dd = g.store.data.items,ff = []; Ext.each(dd, function(i){ if(i.data.id_field != record.data.id_field) { ff.push({ display: i.data.id_caption, value: i.data.id_field }); } }); var ww = Ext.create('Ext.Window', { autoShow: true, modal: true, title: '默认值', width: '55%', height: '50%', layout: 'column', items: [{ xtype: 'fieldcontainer', name: 'keyField', columnWidth: 1, items: [{ xtype: 'radio', columnWidth: 1, boxLabel: '自动取ID', name: 'default' }], getValue: function(){ return 'keyField'; }, setValue: function(){ this.down('radio').setValue(true); } },{ xtype: 'fieldcontainer', name: 'codeField', columnWidth: 1, items: [{ xtype: 'radio', columnWidth: 1, boxLabel: '自动取编号', name: 'default' }], getValue: function(){ return 'codeField'; }, setValue: function(){ this.down('radio').setValue(true); } },{ xtype: 'fieldcontainer', name: 'date', columnWidth: 1, layout: 'hbox', items: [{ xtype: 'radio', boxLabel: '当前时间', name: 'default' },{ xtype: 'checkbox', inputValue: 'yy-MM-dd', separator: ' ', boxLabel: '年月日' },{ xtype: 'checkbox', inputValue: 'HH:mm:ss', separator: '', boxLabel: '时分秒' }], getValue: function(){ var rr = this.query('checkbox[checked=true]'), vv = '', len = rr.length; Ext.each(rr, function(r, idx){ if(r.xtype == 'checkbox' && r.inputValue) { vv += r.inputValue; if(idx < len - 1) { vv += r.separator; } } }); if(vv == '') { return ''; } return 'date(' + vv + ')'; }, setValue: function(v){ this.down('radio').setValue(true); v = v.substring(v.indexOf('(') + 1, v.indexOf(')')); var y = v.split(' '),arr,me = this; Ext.each(y, function(i){ arr = me.down('checkbox[inputValue=' + i + ']'); if(arr) arr.setValue(true); }); } },{ xtype: 'fieldcontainer', name: 'replace', columnWidth: 1, layout: 'hbox', items: [{ xtype: 'radio', name: 'default', boxLabel: '替代值' },{ xtype: 'fieldcontainer', items: [{ xtype: 'textfield', emptyText: '显示值' },{ xtype: 'textfield', emptyText: '实际值' }], getValue: function(){ var val = this.items.items[0],dis = this.items.items[1]; if(!Ext.isEmpty(val.value) && !Ext.isEmpty(dis.value)) { return val.value + ':' + dis.value; } return ''; }, setValue: function(v) { if(!Ext.isEmpty(v)) { this.items.items[0].setValue(v.split(':')[0]); this.items.items[1].setValue(v.split(':')[1] || ''); } } },{ xtype: 'button', iconCls: 'x-button-icon-add', cls: 'x-btn-tb', handler: function(b){ b.ownerCt.insert(b.ownerCt.items.items.length - 1, { xtype: 'fieldcontainer', items: [{ xtype: 'textfield', emptyText: '显示值' },{ xtype: 'textfield', emptyText: '实际值' }], getValue: function(){ var val = this.items.items[0],dis = this.items.items[1]; if(!Ext.isEmpty(val.value) && !Ext.isEmpty(dis.value)) { return val.value + ':' + dis.value; } return ''; }, setValue: function(v) { if(!Ext.isEmpty(v)) { this.items.items[0].setValue(v.split(':')[0]); this.items.items[1].setValue(v.split(':')[1] || ''); } } }); } }], getValue: function(){ var tx = this.query('fieldcontainer'),val = ''; Ext.each(tx, function(t){ if(!Ext.isEmpty(t.getValue())) { if(val == '') { val = t.getValue(); } else { val += ',' + t.getValue(); } } }); if(val == '') { return null; } return 'replace(' +val + ')'; }, setValue: function(v){ var m = this; this.down('radio').setValue(true); var t = v.substring(v.indexOf('(') + 1, v.lastIndexOf(')')).split(','); Ext.each(t, function(r, i){ if(i == 0) { m.down('fieldcontainer').setValue(r); } else { var f = Ext.create('Ext.form.FieldContainer', { items: [{ xtype: 'textfield', emptyText: '显示值' },{ xtype: 'textfield', emptyText: '实际值' }], getValue: function(){ var val = this.items.items[0],dis = this.items.items[1]; if(!Ext.isEmpty(val.value) && !Ext.isEmpty(dis.value)) { return val.value + ':' + dis.value; } return ''; }, setValue: function(v) { if(!Ext.isEmpty(v)) { this.items.items[0].setValue(v.split(':')[0]); this.items.items[1].setValue(v.split(':')[1] || ''); } } }); m.insert(m.items.items.length - 1, f); f.setValue(r); } }); } },{ xtype: 'fieldcontainer', name: 'copy', columnWidth: 1, layout: 'hbox', items: [{ xtype: 'radio', boxLabel: '等于字段', name: 'default' },{ xtype: 'combo', displayField: 'display', valueField: 'value', queryMode: 'local', editable: false, store: Ext.create('Ext.data.Store', { fields: ['display','value'], data: ff }) },{ xtype: 'radio', name: 'condition', inputValue: 'if', boxLabel: '只在值为空时' },{ xtype: 'radio', name: 'condition', inputValue: 'of', boxLabel: '任何情况下', checked: true }], getValue: function(){ var rr = this.query('radio[name=condition]'), vv = ''; Ext.each(rr, function(){ if(this.checked) { vv = this.inputValue; } }); return 'copy' + vv + '(' + this.down('combo').value + ')'; }, setValue: function(v) { this.down('radio').setValue(true); this.down('combo').setValue(v.substring(v.indexOf('(') + 1, v.lastIndexOf(')'))); var ff = v.substring(4, v.indexOf('(')); this.down('radio[inputValue=' + ff + ']').setValue(true); } },{ xtype: 'fieldcontainer', name: 'others', columnWidth: 1, layout: 'hbox', items: [{ xtype: 'radio', boxLabel: '其它', name: 'default' },{ xtype: 'textfield' }], getValue: function() { return this.down('textfield').value; }, setValue: function(v) { this.down('radio').setValue(true); this.down('textfield').setValue(v); } }], buttonAlign: 'center', buttons: [{ text: '确定', handler: function(b){ var w = b.ownerCt.ownerCt; var val = '',ch = w.query('radio[name="default"]'),cc = null; Ext.each(ch, function(){ if(this.checked) { cc = this; } }); if(cc) { v = cc.ownerCt.getValue(); if(v != null) { val = v; } } f.setValue(val); record.set('id_default', val); w.close(); } },{ text: '取消', handler: function(b){ b.ownerCt.ownerCt.close(); } }] }); var fc = ww.query('fieldcontainer'); if(!Ext.isEmpty(f.value)) { var vv = f.value,bool = false; Ext.each(fc, function(r){ if(contains(vv, r.name, true)) { bool = true; r.setValue(vv); } }); if(!bool) { ww.down('fieldcontainer[name=others]').setValue(vv); } } }, logicTypes: function(f, record){ var g = Ext.getCmp('initdetails'), dd = g.store.data.items,ff = []; Ext.each(dd, function(i){ if(i.data.id_field != record.data.id_field) { ff.push({ display: i.data.id_caption, value: i.data.id_field }); } }); var ww = Ext.create('Ext.Window', { autoShow: true, modal: true, title: '逻辑表达式', width: '80%', height: '60%', layout: 'column', padding: 15, items: [{ xtype: 'fieldcontainer', name: 'unique', columnWidth: 1, items: [{ xtype: 'checkbox', boxLabel: '唯一性' }], getValue: function(){ return 'unique(' + record.data.id_table + '|' + record.data.id_field + ')'; }, setValue: function(v){ this.down('checkbox').setValue(true); } },{ xtype: 'fieldcontainer', name: 'upper', columnWidth: 1, items: [{ xtype: 'checkbox', boxLabel: '强制转大写' }], getValue: function(){ return 'upper(' + record.data.id_field + ')'; }, setValue: function(v){ this.down('checkbox').setValue(true); } },{ xtype: 'fieldcontainer', name: 'trim', columnWidth: 1, layout: 'column', items: [{ xtype: 'checkbox', columnWidth: 0.1, boxLabel: '禁用字符' },{ xtype: 'textfield', columnWidth: 0.1 },{ xtype: 'button', iconCls: 'x-button-icon-add', cls: 'x-btn-tb', handler: function(b){ b.ownerCt.insert(b.ownerCt.items.items.length - 1, { xtype: 'textfield', columnWidth: 0.1 }); } }], getValue: function(){ var tx = this.query('textfield'),val = ''; Ext.each(tx, function(t){ if(!Ext.isEmpty(t.value)) { if(val == '') { val = t.value; } else { val += ',' + t.value; } } }); if(val == '') { return null; } return 'trim(' +val + ')'; }, setValue: function(v){ var m = this; m.down('checkbox').setValue(true); var t = v.substring(v.indexOf('(') + 1, v.lastIndexOf(')')).split(','); Ext.each(t, function(r, i){ if(i == 0) { m.down('textfield').setValue(r); } else { m.insert(m.items.items.length - 1, { xtype: 'textfield', columnWidth: 0.1, value: r }); } }); } },{ xtype: 'fieldcontainer', name: 'combo', columnWidth: 1, layout: 'column', items: [{ xtype: 'checkbox', columnWidth: 0.1, boxLabel: '可选范围' },{ xtype: 'textfield', columnWidth: 0.1 },{ xtype: 'button', iconCls: 'x-button-icon-add', cls: 'x-btn-tb', handler: function(b){ b.ownerCt.insert(b.ownerCt.items.items.length - 1, { xtype: 'textfield', columnWidth: 0.1 }); } }], getValue: function(){ var tx = this.query('textfield'),val = ''; Ext.each(tx, function(t){ if(!Ext.isEmpty(t.value)) { if(val == '') { val = t.value; } else { val += ',' + t.value; } } }); if(val == '') { return null; } return 'combo(' +val + ')'; }, setValue: function(v){ var m = this; m.down('checkbox').setValue(true); var t = v.substring(v.indexOf('(') + 1, v.lastIndexOf(')')).split(','); Ext.each(t, function(r, i){ if(i == 0) { m.down('textfield').setValue(r); } else { m.insert(m.items.items.length - 1, { xtype: 'textfield', columnWidth: 0.1, value: r }); } }); } },{ xtype: 'fieldcontainer', name: 'accord', columnWidth: 1, layout: 'column', items: [{ xtype: 'checkbox', columnWidth: 0.1, boxLabel: '关联' },{ columnWidth: 0.3, emptyText: '表', id: 'accord_table', name: 'accord_table', xtype: 'dbfindtrigger' },{ columnWidth: 0.3, emptyText: '字段', id: 'accord_field', name: 'accord_field', dbKey: 'accord_table', mappingKey: 'ddd_tablename', dbMessage: '请选择表名', xtype: 'dbfindtrigger' }], getValue: function(){ var at = this.down('dbfindtrigger[name=accord_table]'), af = this.down('dbfindtrigger[name=accord_field]'); if(!Ext.isEmpty(at.value) && !Ext.isEmpty(af.value)) { return 'accord(' + at.value + '|' + af.value + ')'; } return null; }, setValue: function(v){ this.down('checkbox').setValue(true); var t = v.substring(v.indexOf('(') + 1, v.lastIndexOf(')')).split('|'); this.down('dbfindtrigger[name=accord_table]').setValue(t[0]); this.down('dbfindtrigger[name=accord_field]').setValue(t[1]); } },{ xtype: 'fieldcontainer', name: 'diffence', columnWidth: 1, layout: 'column', items: [{ xtype: 'checkbox', columnWidth: 0.1, boxLabel: '不同于' },{ columnWidth: 0.3, xtype: 'combo', displayField: 'display', valueField: 'value', queryMode: 'local', editable: false, store: Ext.create('Ext.data.Store', { fields: ['display','value'], data: ff }) }], getValue: function(){ var c = this.down('combo'); if(!Ext.isEmpty(c.value)) { return 'diffence(' + c.value + ')'; } return null; }, setValue: function(v){ this.down('checkbox').setValue(true); this.down('combo').setValue(v.substring(v.indexOf('(') + 1, v.lastIndexOf(')'))); } },{ xtype: 'fieldcontainer', name: 'combine', columnWidth: 1, layout: 'column', items: [{ xtype: 'checkbox', columnWidth: 0.1, boxLabel: '组合校验' },{ columnWidth: 0.3, xtype: 'combo', displayField: 'display', valueField: 'value', queryMode: 'local', multiSelect: true, editable: false, store: Ext.create('Ext.data.Store', { fields: ['display','value'], data: ff }) }], getValue: function(){ var c = this.down('combo'); if(!Ext.isEmpty(c.value)) { return 'combine(' + c.value + ')'; } return null; }, setValue: function(v){ this.down('checkbox').setValue(true); this.down('combo').setValue(v.substring(v.indexOf('(') + 1, v.lastIndexOf(')'))); } },{ xtype: 'fieldcontainer', name: 'minValue', columnWidth: 1, layout: 'column', items: [{ xtype: 'checkbox', columnWidth: 0.1, boxLabel: '最小值' },{ columnWidth: 0.3, xtype: 'numberfield' }], getValue: function(){ var c = this.down('numberfield'); if(!Ext.isEmpty(c.value)) { return 'minValue(' + c.value + ')'; } return null; }, setValue: function(v){ this.down('checkbox').setValue(true); this.down('minValue').setValue(v.substring(v.indexOf('(') + 1, v.lastIndexOf(')'))); } }], buttonAlign: 'center', buttons: [{ text: '确定', handler: function(b){ var w = b.ownerCt.ownerCt; var val = '',ch = w.query('checkbox[checked=true]'),v; Ext.each(ch, function(c){ v = c.ownerCt.getValue(); if(v != null) { if(val != '') { val += ';'; } val += v; } }); f.setValue(val); record.set('id_logic', val); w.close(); } },{ text: '取消', handler: function(b){ b.ownerCt.ownerCt.close(); } }] }); var fc = ww.query('fieldcontainer'); if(!Ext.isEmpty(f.value)) { var vv = f.value.split(';'); Ext.each(vv, function(s){ Ext.each(fc, function(r){ if(contains(s, r.name, true)) { r.setValue(s); } }); }); } }, dataTypes: function(f, record){ var v = f.value,a = v.substring(v.indexOf('(') + 1, v.indexOf(')')),x = 30,y = 0; if(a) { x = a.split(',')[0]; y = a.split(',')[1]; } var isDate = contains(f.value, 'date', true), isStr = contains(f.value, 'varchar2', true); Ext.create('Ext.Window', { autoShow: true, modal: true, title: '数据类型', width: '40%', height: '30%', items: [{ xtype: 'container', padding: '10 5 5 10', items: [{ xtype: 'radio', boxLabel: '日期', name: 'type', checked: isDate, inputValue: 'date()', listeners: { change : function(){ if(this.checked) { this.ownerCt.down('numberfield[name=length_y]').hide(); this.ownerCt.down('numberfield[name=length_x]').hide(); } else { this.ownerCt.down('numberfield[name=length_x]').show(); } } } },{ xtype: 'radio', boxLabel: '字符串', name: 'type', checked: isStr, inputValue: 'varchar2' },{ xtype: 'radio', boxLabel: '数字', name: 'type', checked: !isDate && !isStr, inputValue: 'number', listeners: { change : function(){ if(this.checked) { this.ownerCt.down('numberfield[name=length_y]').show(); this.ownerCt.down('numberfield[name=length_x]').setMaxValue(38); this.ownerCt.down('numberfield[name=length_x]').validate(); } else { this.ownerCt.down('numberfield[name=length_y]').hide(); this.ownerCt.down('numberfield[name=length_x]').setMaxValue(2000); } } } },{ xtype: 'numberfield', fieldLabel: '长度', name: 'length_x', format: '0', value: x, hidden: isDate, maxText: '超过最大长度', listeners: { change: function(f){ var a = f.ownerCt.down('radio[checked=true]').inputValue; if(a == 'number') { f.setMaxValue(38); } else { f.setMaxValue(2000); } } } },{ xtype: 'numberfield', fieldLabel: '小数位数', name: 'length_y', hidden: isDate || isStr, format: '0', maxValue: 57, maxText: '超过最大数57', value: y }] }], buttonAlign: 'center', buttons: [{ text: '确定', handler: function(b){ var w = b.ownerCt.ownerCt; v = w.down('radio[checked=true]').inputValue; x = w.down('numberfield[name=length_x]').value || 0; y = w.down('numberfield[name=length_y]').value || 0; if(v == 'varchar2') { v += '(' + x + ')'; } else if (v == 'number') { v += '(' + x + ',' + y + ')'; } f.setValue(v); record.set(f.name, v); w.close(); } },{ text: '取消', handler: function(b){ b.ownerCt.ownerCt.close(); } }] }); }, /** * 数据校验 */ checkdata: function(grid){ var me = this; var p = Ext.create('Ext.ProgressBar', { width: '60%', text: '准备校验中...', floating: true, renderTo: Ext.getBody() }).show(); grid.setLoading(true); //先删除上次校验记录 me.beforeCheck(grid, p, function(){ // 校验+清除校验环境 me.onCheck(grid, p, function(){ //刷新grid.renderer me.getCheckResult(grid, p); }) }); }, beforeCheck: function(grid, process, callback) { Ext.Ajax.request({ url: basePath + 'pm/make/beforeCheckLog.action', params: { id: grid.ilid }, method: 'post', callback: function(opt, s, r) { var res = Ext.decode(r.responseText); if(res.success) { callback.call(); } else { alert('系统错误,准备校验失败!'); grid.setLoading(false); process.destroy(); } } }); }, onCheck: function(grid, process, callback) { process.updateProgress(0.4, '准备完毕,正在校验...', true); Ext.Ajax.request({ url: basePath + 'pm/make/checkInitData.action', timeout: 300000, params: { id: grid.ilid, caller : caller }, method: 'post', callback: function(opt, s, r){ var res = Ext.decode(r.responseText); if(!res) { grid.setLoading(false); p.destroy(); Ext.Msg.alert('发现错误', '连接超时'); } else if(res.success) { process.updateProgress(0.8, '校验完成,正在获取校验结果...', true); callback.call(); } } }); }, /** * 从数据库取校验结果 */ getCheckResult: function(grid, p){ grid.setLoading(true); Ext.Ajax.request({ url: basePath + 'pm/make/getCheckResult.action', timeout: 60000, params: { id: grid.ilid }, method: 'post', callback: function(opt, s, r){ p.destroy(); grid.setLoading(false); var rs = r.responseText; if(rs != null && rs != '') { grid.errorNodesStr = rs.replace(/\s/g, '').split('/'); } else { grid.errorNodesStr = []; alert('系统错误,未找到校验结果.'); } grid.showErrors(1); Ext.getCmp('toformal').show(); if(caller !='ProductSmt!Import'){ Ext.getCmp('thisdelete').show(); } //Ext.getCmp('saveupdates').show(); } }); }, toformal: function(grid){ var count = grid.down('pagingtoolbar').dataCount, pageSize = 2000, page = 0, a, b, len = Math.ceil(count/pageSize), index = 0; var p = Ext.create('Ext.ProgressBar', { width: '60%', text: '准备中...', floating: true, renderTo: Ext.getBody() }).show(); grid.setLoading(true); Ext.Ajax.request({ url: basePath + 'system/beforeToFormal.action', params: { id: grid.ilid }, callback: function(opt, s, r){ if (!s) { grid.setLoading(false); p.destroy(); showError('网络或系统错误!');return; } var res = Ext.decode(r.responseText); if(res.success) { while (page*pageSize < count) { a = page * pageSize + 1; b = (page + 1) * pageSize; p.updateProgress(index/len, '开始导入' + index/len*100 + '%', true); Ext.Ajax.request({ url: basePath + 'pm/make/toFormalData.action', timeout: 30000, method: 'post', async: false, params: { id: grid.ilid, start: a, end: b }, callback: function(_opt, _s, _r){ var rs = Ext.decode(_r.responseText); if(rs.exceptionInfo) { grid.setLoading(false); p.destroy(); showError(rs.exceptionInfo);return; } else if(_s){ index++; p.updateProgress(index/len, '完成' + index/len*100 + '%', true); if(index == len) { grid.setLoading(false); p.destroy(); alert('转入成功!'); Ext.getCmp('check').hide(); Ext.getCmp('toformal').hide(); Ext.Ajax.request({ url: basePath + 'pm/make/afterToFormal.action', params: { id: grid.ilid }, callback: function(){ } }); } } else return; } }); page++; } } else { grid.setLoading(false); p.destroy(); showError(res.exceptionInfo); } } }); }, /** * 保存已修改的数据 *//* saveUpdates: function(grid){ var items = grid.store.data.items,arr = new Array(), d; Ext.each(items, function(item){ if(item.dirty) { d = item.data; delete d.log; arr.push(d); } }); Ext.Ajax.request({ url: basePath + 'system/updateInitData.action', method: 'post', params: { data: Ext.encode(arr) }, callback: function(opt, s, r) { var res = Ext.decode(r.responseText); if(res.success) { alert('保存成功!'); grid.getGridData(1); } } }); },*/ parseLogic: function(logic) { if(logic != null) { var gc = logic.split(';'), str = ''; for(var i in gc) { var s = gc[i]; if(s != null) { if(s.indexOf('unique') > -1) { str += '唯一性;'; } else if(s.indexOf('trim') > -1) { str += '不能包含' + s.replace('trim', '') + ';'; } else if(s.indexOf('combo') > -1) { str += '只能是' + s.replace('combo', '') + '之一;'; } else if(s.indexOf('accord') > -1) { str += '必须存在于' + s.replace('accord', '') + '中;'; }else if(s.indexOf('combine') > -1) { str += '组合字段在关联表中不存在;'; } else if(s.indexOf('diffence') > -1) { str += '必须与' + s.replace('diffence', '') + '不同;'; }else if(s.indexOf('minValue') > -1) { str += '必须大于' + s.replace('minValue', '') + ';'; } } } return str; } return null; }, openUrl: function() { var me = this, value = caller; var keyField = 'dg_caller'; var pfField = 'dg_caller'; var formCondition = keyField + "IS" + value ; var gridCondition = pfField + "IS" + value; var panelId = caller + keyField + "_" + value + gridCondition; var panel = Ext.getCmp(panelId); var main = parent.Ext.getCmp("content-panel"); var url = 'jsps/ma/detailgrid.jsp'; if(!main){ main = parent.parent.Ext.getCmp("content-panel"); } if(!panel){ var title = ""; if (value.toString().length>4) { title = value.toString().substring(value.toString().length-4); } else { title = value; } var myurl = ''; if(me.BaseUtil.contains(url, '?', true)){ myurl = url + '&formCondition='+formCondition+'&gridCondition='+gridCondition; } else { myurl = url + '?formCondition='+formCondition+'&gridCondition='+gridCondition; } myurl += "&datalistId=" + main.getActiveTab().id; if(main._mobile) { main.addPanel(me.BaseUtil.getActiveTab().title+'('+title+')', myurl, panelId); } else { panel = { title : me.BaseUtil.getActiveTab().title+'('+title+')', tag : 'iframe', tabConfig:{tooltip:me.BaseUtil.getActiveTab().tabConfig.tooltip+'('+keyField + "=" + value+')'}, border : false, layout : 'fit', iconCls : 'x-tree-icon-tab-tab1', html : '', closable : true, listeners : { close : function(){ if(!main){ main = parent.parent.Ext.getCmp("content-panel"); } main.setActiveTab(main.getActiveTab().id); } } }; this.openTab(panel, panelId); } }else{ main.setActiveTab(panel); } }, openTab : function (panel,id){ var o = (typeof panel == "string" ? panel : id || panel.id); var main = parent.Ext.getCmp("content-panel"); /*var tab = main.getComponent(o); */ if(!main) { main =parent.parent.Ext.getCmp("content-panel"); } var tab = main.getComponent(o); if (tab) { main.setActiveTab(tab); } else if(typeof panel!="string"){ panel.id = o; var p = main.add(panel); main.setActiveTab(p); } }, parseError : function(lineError,items,columns,i){ log = ''; log += ''; item = items[i%100]; var d = item.data; if(lineError.length==0){ item.set('log', ''); }else{ for(var j = 0; j < lineError.length-1 ; j++){ var fieldS = lineError[j].split('-')[0]; var errorS = lineError[j].split('-')[1]; Ext.each(columns, function(c, idx){ if(idx > 0 ){ if(c.dataIndex.toLocaleLowerCase() == fieldS){ log += ''; } } }); } if(log != '') { log += '
字段错误
' + c.text + '' + (errorS || '') + '
'; } item.set('log', log); } }, //删除导入数据 thisdelete: function(grid,me){ grid.setLoading(true); Ext.Ajax.request({ url: basePath + 'pm/make/thisdelete.action', params: { id: grid.ilid, caller : caller }, callback: function(opt, s, r){ if (!s) { grid.setLoading(false); showError('网络或系统错误!');return; } var res = Ext.decode(r.responseText); if(res.success) { grid.setLoading(false); alert('删除成功!'); me.getDetails(Ext.getCmp('template'), caller, true); Ext.getCmp('check').hide(); Ext.getCmp('toformal').hide(); Ext.getCmp('thisdelete').hide(); } else { grid.setLoading(false); showError(res.exceptionInfo); } } }); } });