Ext.QuickTips.init(); Ext.define('erp.controller.ma.Power', { extend : 'Ext.app.Controller', requires: ['erp.util.FormUtil','erp.view.core.grid.HeaderFilter','erp.view.core.plugin.CopyPasteMenu'], views : [ 'ma.Power', 'core.button.Distribute', 'core.grid.GroupPower', 'core.trigger.DbfindTrigger', 'core.trigger.EmpTrigger', 'core.button.Sync', 'core.trigger.MultiDbfindTrigger','core.trigger.SearchField'], init : function() { var me = this; me.FormUtil = Ext.create('erp.util.FormUtil'); this.control({ 'treepanel[id=powertree]' : { afterrender : function(tree) { me.loadTree(tree); }, itemmousedown : function(selModel, record) { var tree = selModel.ownerCt; me.loadTree(tree, record); }, scrollershow: function(scroller) { if (scroller && scroller.scrollEl) { scroller.clearManagedListeners(); scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller); } } }, 'button[id=personal_set]' : {// 个人权限设置 click : function(btn) { var grid = btn.ownerCt.ownerCt; if (grid.pp_caller) { me.showPersonal(grid); } } }, 'button[id=special_set]': {// 设置特殊权限 click: function(btn) { var grid = btn.ownerCt.ownerCt; if (grid.pp_caller) { me.showSpecial(grid); } } }, 'button[id=power_copy]': {// 复制权限 click: function(btn) { me.showCopyPane(); } }, 'button[id=power_sync]': {// 同步权限 click: function(btn) { this.showSyncWin(); } }, 'button[id=power_cover]': {// 同步所有权限 beforerender:function(btn){ btn.sync=function() { var masters = btn.getCheckData(), me = btn,w = this.win, datas = null, cal='PowerCover'; Ext.MessageBox.confirm('提示', '确认将当前帐套所有岗位权限、个人权限、特殊权限,覆盖到目标帐套?', function(but) { if(but=='yes'){ if (!Ext.isEmpty(masters)) { w.setLoading(true); Ext.Ajax.request({ url: basePath + 'hr/employee/vastPostPower.action', params: { caller: cal, to: masters }, callback: function(opt, s, r) { w.setLoading(false); if(s) { var rs = Ext.decode(r.responseText); if(rs.data) { showMessage('提示', rs.data); } else { alert('权限覆盖成功!'); } w.hide(); if(me.autoClearCache) { me.clearCache(); } me.fireEvent('aftersync', me, cal, datas, masters); } } }); } } }); }; } , afterrender: function(btn){ if(em_type && em_type != 'admin'){ btn.hide(); } } }, 'multidbfindtrigger[name=em_position]': { aftertrigger: function(t, rs) { if(rs.length > 0) { var m = t.ownerCt; Ext.Array.each(rs, function(r, i){ if(i == 0) { t.jo_id = r.get('jo_id'); t.setValue(r.get('jo_name')); } else { m.insert(m.items.length - 2, { xtype: 'multidbfindtrigger', name: 'em_position', fieldLabel: '复制到', jo_id: r.get('jo_id'), value: r.get('jo_name'), p: 2, editable: false, autoDbfind: false, clearable: true }); } }); } else { f.setValue(null); f.jo_id = null; } } } }); }, loadTree : function(tree, record) { var pid = 0, me = this; if (record) { if (record.get('leaf')) { me.loadPower(record); return; } else { if (record.isExpanded() && record.childNodes.length > 0) { record.collapse(true, true);// 收拢 return; } else { if (record.childNodes.length != 0) { record.expand(false, true);// 展开 return; } } } pid = record.get('id'); } tree.setLoading(true); Ext.Ajax.request({ url : basePath + 'ma/lazyTree.action', params : { parentId : pid, condition : 'sn_limit=1' }, callback : function(options, success, response) { tree.setLoading(false); var res = new Ext.decode(response.responseText); if (res.tree) { if (record) { record.appendChild(res.tree); record.expand(false, true);// 展开 } else { tree.store.setRootNode({ text : 'root', id : 'root', expanded : true, children : res.tree }); } } else if (res.exceptionInfo) { showError(res.exceptionInfo); } } }); }, loadPower : function(record) { var caller = record.get('caller'), set = Ext.getCmp('grid'); set.pp_caller = caller; set.down('tbtext').setText('权限名:' + record.get('text')); if (!Ext.isEmpty(caller)) { set.getGroupData(this.getUrlType(record.get('url'))); } else { set.store.removeAll(); } }, getUrlType : function(url) { if (contains(url, 'datalist.jsp') || contains(url, 'editDatalist.jsp') || contains(url, 'vastDatalist.jsp') || contains(url, 'turnGoodsSend.jsp') || contains(url, 'turnEstimate.jsp')) { return 'list'; } else if (contains(url, 'batchDeal.jsp') || contains(url, 'query.jsp') || contains(url, 'print.jsp') || contains(url, 'batchPrint.jsp') || contains(url, 'gridPage.jsp')|| contains(url, 'redirect.action')) { return 'deal'; } return null; }, showPersonal : function(grid) { var me = this; var win = Ext.getCmp('emp-win'); if (!win) { win = Ext.create('Ext.Window', { id : 'emp-win', width : 800, height : 600, title : '员工', modal : true, closeAction:'hide', layout: 'anchor', items : [ { xtype : 'gridpanel', anchor: '100% 100%', autoScroller:true, columnLines : true, plugins : [Ext.create( 'erp.view.core.grid.HeaderFilter' ), Ext.create('erp.view.core.plugin.CopyPasteMenu')], selModel : Ext.create( 'Ext.selection.CheckboxModel', { checkOnly : true, headerWidth : 30 }), columns : [ { text : 'ID', dataIndex : 'em_id', hidden : true }, { text : '编号', dataIndex : 'em_code', flex : 1, filter: {xtype: 'textfield', filterName: 'em_code'} }, { text : '姓名', dataIndex : 'em_name', flex : 1, filter: {xtype: 'textfield', filterName: 'em_name'} }, { text : '部门', dataIndex : 'em_depart', flex : 1, filter: {xtype: 'textfield', filterName: 'em_depart'} },{ text : '组织', dataIndex : 'em_defaultorname', flex : 1, filter: {xtype: 'textfield', filterName: 'em_defaultorname'} }, { text : '职位', dataIndex : 'em_position', flex : 1, filter: {xtype: 'textfield', filterName: 'em_position'} } ], store:Ext.create('Ext.data.Store',{ fields : [ { name : 'em_id', type : 'number' }, 'em_code', 'em_name','em_depart','em_defaultorname', 'em_position' ], data:[], autoLoad: false }), listeners: { afterrender: function() { me.getData(this); } } }], buttonAlign: 'center', buttons: [{ text: $I18N.common.button.erpConfirmButton, iconCls: 'x-btn-confirm', handler: function(btn) { me.getPersonalPower(grid, btn.ownerCt.ownerCt.down('gridpanel')); btn.ownerCt.ownerCt.hide(); } },{ text: $I18N.common.button.erpCloseButton, iconCls: 'x-btn-close', handler: function(btn) { btn.ownerCt.ownerCt.hide(); } }] }); } win.show(); }, getData:function(grid){ var f="nvl(em_class,' ')<>'离职'"; Ext.Ajax.request({ url : basePath + 'ma/update/getEmpdbfindData.action', method : 'post', params : { fields:'em_id,em_code,em_name,em_depart,em_defaultorname,em_position', condition: f, page: -1, pagesize: 0 }, method : 'post', callback : function(opt, s, res){ var r = new Ext.decode(res.responseText); if(r.exceptionInfo){ showError(r.exceptionInfo);return; } else if(r.success && r.data){ var data = Ext.decode(r.data.replace(/,}/g, '}').replace(/,]/g, ']')); grid.getStore().loadData(data); } } }); }, getPersonalPower: function(grid, gl) { var em = new Array(); Ext.each(gl.selModel.getSelection(),function(r){ if(!Ext.isEmpty(r.get('em_id')) && r.get('em_id') > 0) { em.push({em_id: r.get('em_id'), em_name: r.get('em_name')}); } }); grid.getPersonalData(grid.urlType, em); }, showSpecial: function(grid) { var me = this, cal = grid.pp_caller; function showButton(value,cellmeta){ var returnStr = ""; return returnStr; }; var win = Ext.getCmp('special-win-' + cal); if (!win) { win = Ext.create('Ext.Window', { id : 'special-win-' + cal, width : 500, height : 360, title : '特殊权限', modal : true, layout: 'anchor', items: [{ xtype: 'gridpanel', id:'special'+cal, anchor: '100% 100%', columnLines : true, columns : [ { text : 'ID', dataIndex : 'ssp_id', hidden : true }, { text : 'caller', dataIndex : 'ssp_caller', hidden : true }, { text : '描述', dataIndex : 'ssp_desc', flex : 1, editor: { xtype: 'textfield' } }, { text : '链接', dataIndex : 'ssp_action', flex : 1, editor: { xtype: 'textfield' } },{ text:'操作', dataIndex: 'button', flex:0.2, renderer:showButton }], store : new Ext.data.Store({ fields : [ { name : 'ssp_id', type : 'number' }, 'ssp_caller', 'ssp_desc', 'ssp_action' ], data : [ {}, {}, {}, {}, {}, {}, {}, {}, {}, {} ] }), plugins : [ Ext.create('Ext.grid.plugin.CellEditing', { clicksToEdit : 1 }) ], listeners : { itemclick : function(selModel, record) { var grid = selModel.ownerCt, store = grid.store, idx = store.indexOf(record), len = store .getCount(); if (idx == len - 1) { store.add([ {}, {}, {}, {}, {} ]); } } } }], buttonAlign: 'center', buttons: [{ text: $I18N.common.button.erpSaveButton, iconCls: 'x-btn-save', handler: function(btn) { me.saveSysSpecials(cal, btn.ownerCt.ownerCt.down('gridpanel')); btn.ownerCt.ownerCt.hide(); } },{ text: $I18N.common.button.erpCloseButton, iconCls: 'x-btn-close', handler: function(btn) { btn.ownerCt.ownerCt.hide(); } }] }); } win.show(); this.getSysSpecialPowers(cal, win.down('grid')); }, getSysSpecialPowers: function(cal, grid) { Ext.Ajax.request({ url: basePath + 'ma/power/getSysSpecialPowers.action', params: { caller: cal }, callback: function(opt, s, r) { var rs = Ext.decode(r.responseText); if(rs.exceptionInfo) { showError(rs.exceptionInfo); } else if(rs.data){ if(rs.data.length==0){ rs.data=[ {}, {}, {}, {}, {} ]; } grid.store.loadData(rs.data); } } }); }, saveSysSpecials: function(cal, grid) { var data = new Array(); grid.store.each(function(item){ if(item.dirty) { if((!Ext.isEmpty(item.get('ssp_desc')) && !Ext.isEmpty(item.get('ssp_action'))) || (item.get('ssp_id') > 0)) { item.data.ssp_caller = cal; data.push(item.data); } } }); if(data.length > 0) { Ext.Ajax.request({ url: basePath + 'ma/power/saveSysSpecialPowers.action', params: { caller: cal, data: unescape(Ext.encode(data).replace(/\\/g,"%")) }, callback: function(opt, s, r) { var rs = Ext.decode(r.responseText); if(rs.exceptionInfo) { showError(rs.exceptionInfo); } else if(rs.data){ grid.store.loadData(rs.data); } } }); } }, showCopyPane: function(grid) { var me = this, win = Ext.create('Ext.Window', { width : 500, height: 300, title : '复制权限', modal : true, layout: 'anchor', items: [{ xtype: 'container', anchor: '100% 100%', autoScroll: true, layout: 'column', padding: '10', defaults: { labelWidth: 60, columnWidth: 1, margin: '3 10 3 10' }, items: [{ xtype: 'dbfindtrigger', fieldLabel: '从', name: 'em_position', p: 1, editable: false, autoDbfind: false, clearable: true, listeners: { aftertrigger: function(f, r) { f.jo_id = r.get('jo_id'); f.setValue(r.get('jo_name')); } } },{ xtype: 'multidbfindtrigger', name: 'em_position', fieldLabel: '复制到', p: 2, editable: false, autoDbfind: false, clearable: true },{ xtype: 'displayfield', columnWidth: .75 },{ xtype: 'button', text: '添加', columnWidth: .25, cls: 'x-dd-drop-ok-add', iconCls: 'x-dd-drop-icon', iconAlign: 'right', handler: function(btn) { var f = btn.ownerCt; f.insert(f.items.length - 2, { xtype: 'multidbfindtrigger', name: 'em_position', fieldLabel: '复制到', p: 2, editable: false, autoDbfind: false, clearable: true }); } }] }], buttonAlign: 'center', buttons: [{ text: $I18N.common.button.erpSaveButton, cls: 'x-btn-blue', handler: function(btn) { Ext.MessageBox.show({ title: $I18N.common.msg.title_prompt, msg: '目标岗位的权限将会被指定岗位覆盖,确定复制?', buttons: Ext.Msg.YESNO, icon: Ext.Msg.WARNING, fn: function(b){ if(b == 'ok' || b == 'yes') { var w = btn.ownerCt.ownerCt, from = w.down('dbfindtrigger[p=1]'), to = w.query('multidbfindtrigger[p=2]'), tos = []; Ext.Array.each(to, function(t){ if(!Ext.isEmpty(t.getValue())) tos.push(t.jo_id); }); if(tos.length > 0) me.copyPower(from.jo_id, tos.join(',')); w.hide(); } } }); } },{ text: $I18N.common.button.erpCloseButton, cls: 'x-btn-blue', handler: function(btn) { btn.ownerCt.ownerCt.hide(); } }] }); win.show(); }, showSyncWin: function() { var me = this, win = Ext.create('Ext.Window', { title: '权限同步', width: 300, height: 300, defaults: { margin: '3 10 10 5' }, items: [{ xtype: 'radio', name: 'synctype1', boxLabel: '按岗位同步', checked: true, listeners: { change: function(f) { f.ownerCt.down('radio[name=synctype2]').setValue(!f.value); f.ownerCt.down('dbfindtrigger[name=em_code]').setDisabled(f.value); f.ownerCt.down('multidbfindtrigger[name=em_position]').setDisabled(!f.value); } } },{ xtype: 'multidbfindtrigger', name: 'em_position', editable: false, fieldLabel: '岗位名称', listeners: { aftertrigger: function(f, rs) { var jo_id = null, name = null; var p = f.ownerCt.down('field[name=positions]'), j = p.jobs || new Array(), d = p.descs || new Array(); if(rs && rs.length > 0) { Ext.each(rs, function(){ jo_id = this.get('jo_id'); name = this.get('jo_name'); if(!Ext.Array.contains(j, jo_id)) { j.push(jo_id); d.push(name); } }); } p.jobs = j; p.descs = d; p.setValue(d.join('\t')); f.setValue(null); f.up('window').down('erpSyncButton[itemId=sync]').syncdatas = j.join(','); f.up('window').down('erpSyncButton[itemId=sync]').caller ='PositionPower!Post'; } } },{ xtype : 'displayfield', name: 'positions', width: 280 },{ xtype: 'radio', name: 'synctype2', checked: false, boxLabel: '按个人同步', listeners: { change: function(f) { f.ownerCt.down('radio[name=synctype1]').setValue(!f.value); f.ownerCt.down('dbfindtrigger[name=em_code]').setDisabled(!f.value); f.ownerCt.down('multidbfindtrigger[name=em_position]').setDisabled(f.value); } } },{ xtype: 'dbfindtrigger', name: 'em_code', fieldLabel: '员工编号', disabled: true, listeners: { aftertrigger: function(f, r) { f.setValue(r.get('em_code')); f.up('window').down('erpSyncButton[itemId=sync]').syncdatas = r.get('em_id'); f.up('window').down('erpSyncButton[itemId=sync]').caller ='PersonalPower!Post'; } } }], buttonAlign: 'center', buttons: [{ cls: 'x-btn-blue', xtype: 'erpSyncButton', itemId : 'sync', autoClearCache: true, syncUrl:'ma/power/syncPower.action' }, { text: $I18N.common.button.erpCloseButton, cls: 'x-btn-blue', handler: function(b) { b.up('window').hide(); } }] }); win.show(); }, getAllJobs : function(b) { Ext.Ajax.request({ url : basePath + 'common/getFieldData.action', async: false, params: { caller: 'Job', field: 'wmsys.wm_concat(jo_id)', condition: '1=1' }, method : 'post', callback : function(opt, s, res){ var r = new Ext.decode(res.responseText); if(r.exceptionInfo){ showError(r.exceptionInfo); } else if(r.success && r.data){ b.syncdatas = r.data; } } }); }, copyPower : function(fid, tid) { if(fid != tid) { Ext.Ajax.request({ url: basePath + 'ma/power/copypower.action', params: { f : fid, t : tid }, callback : function(o, s, r) { if( s ) { var e = r.responseText; if(e == 'success') { alert('复制成功!'); } else { alert(e); } } } }); } } });