/* 控制层, 所有逻辑代码都在这里写 */ Ext.QuickTips.init(); Ext.define('erp.controller.common.Main', { extend: 'Ext.app.Controller', requires: ['erp.util.FormUtil'], /* refs:[ {ref: 'erpTreePanel',selector: 'erpTablePanel'}, {ref: 'erpTabPanel',selector:'erpTablePanel'} ], */ stores: ['TreeStore'],//声明该控制层要用到的store /* models: ['TreeModel'],//声明该控制层要用到的model */ views: ['common.main.Header','common.main.Bottom','common.main.TreePanel','common.main.TabPanel','common.main.Viewport','common.main.FlowPanel', 'common.main.Toolbar','common.main.TreeTabPanel','core.trigger.SearchField', 'core.window.ReLogin'],//声明该控制层要用到的view init: function(){ var me = this; me.FormUtil = Ext.create('erp.util.FormUtil'); this.flag = true;//防止双击时tree节点重复加载 //每隔8秒刷新【网络寻呼】 Ext.defer(function(){ me.loadPagingRelease(); }, 1000); //每隔一分钟刷新[首页待办事宜] Ext.defer(function(){ me.loadJprocess(); }, 60000); this.control({ 'erpTreePanel': { itemmousedown: function(selModel, record){ if(!this.flag){ return; } this.flag = false; setTimeout(function(){ me.flag = true; me.loadTab(selModel, record); },20);//防止双击时tree节点重复加载 }, itemclick: function(selModel, record){ if(!this.flag){ return; } this.flag = false; setTimeout(function(){ me.flag = true; me.loadTab(selModel, record); },20); }, itemdbclick: function(selModel, record){ if(!this.flag){ return; } this.flag = false; setTimeout(function(){ me.flag = true; me.loadTab(selModel, record); },20); }, afterrender: function(){ } }, 'erpTabPanel': { tabchange: function(tab, newC, oldC, obj){ } }, 'menuitem[id=lock]': { click: function(btn){ //锁定屏幕 me.lockPage(); } }, 'combobox[id=city]': { afterrender: function(f){ f.store.loadData(me.getCitys()); if(!Ext.isEmpty(f.value)){ me.getWeather(f); } }, change: function(f){ if(f.value != null){ me.getWeather(f); } } }, 'combobox[id=day]': { change: function(f){ if(f.value != null && f.value != ''){ var city = f.ownerCt.down('combobox[id=city]'); if(city != null && city != ''){ me.getWeather(city); } } } }, 'menuitem[id=addrbook]': { click: function(){ me.showAddrBook(); } }, 'treepanel[id=addr-tree]': { itemmousedown: function(selModel, record){ if(record.data['leaf']){ //开始寻呼 me.showDialogBox(null, Math.abs(record.data['id']), record.data['text']); } else { if(!record.isExpanded() && contains(record.data['id'], 'org', true)){//如果是组织 var ch = record.childNodes, bool = false; Ext.each(ch, function(){ if(this.data['leaf']) { bool = true; } }); if(bool) { //刷新当前组织下人员在线状态 me.checkOnline(record); } } } } }, 'menuitem[id=set-pwd]': { click: function() { me.showPwdPanel(); } } }); }, loadTab: function(selModel, record){ var me = this; if (record.get('leaf')) { switch (record.data['showMode']){ case 0: //0-选项卡模式 me.openCard(record);break; case 1: //1-弹出框式 me.openBox(record);break; case 2: //2-空白页 me.openBlank(record);break; case 3: //3-窗口模式 me.openWin(record);break; default: me.openCard(record);break; } //***********常用模块++ //工作台所在页面 var w = Ext.getCmp("content-panel").items.items[0].body.dom.getElementsByTagName('iframe')[0].contentWindow; //常用模块 var link = w.Ext.getCmp("bench_link"); if(link){ w.workbench._set_bench_link(record.get('id')); } me.flag = true; } else { if(record.isExpanded() && record.childNodes.length > 0){//是根节点,且已展开 record.collapse(true,true);//收拢 me.flag = true; } else {//未展开 //看是否加载了其children if(record.childNodes.length == 0){ //从后台加载 var tree = Ext.getCmp('tree-panel'); var condition = tree.baseCondition; tree.setLoading(true, tree.body); Ext.Ajax.request({//拿到tree数据 url : basePath + 'common/lazyTree.action', params: { parentId: record.data['id'], condition: condition }, callback : function(options,success,response){ tree.setLoading(false); var res = new Ext.decode(response.responseText); if(res.tree){ if(!record.get('level')) { record.set('level', 0); } Ext.each(res.tree, function(n){ if(n.showMode == 2){//openBlank n.text = "" + n.text + ""; } if(!n.leaf) { n.level = record.get('level') + 1; n.iconCls = 'x-tree-icon-level-' + n.level; } }); record.appendChild(res.tree); record.expand(false,true);//展开 me.flag = true; } else if(res.exceptionInfo){ showError(res.exceptionInfo); me.flag = true; } } }); } else { record.expand(false,true);//展开 me.flag = true; } } } }, openTab : function (panel, id, url){ var o = (typeof panel == "string" ? panel : id || panel.id); var main = 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); } }, getMyNewEmails: function(){ Ext.Ajax.request({ url : basePath + "oa/mail/getNewMail.action", method : 'post', callback : function(options, success, response){ var res = new Ext.decode(response.responseText); if(res.exceptionInfo){ showError(res.exceptionInfo);return; } } }); }, parseUrl: function(url){ var id = url.substring(url.lastIndexOf('?')+1);//将作为新tab的id if (id == null) { id = url.substring(0,url.lastIndexOf('.')); } if(contains(url, 'session:em_uu', true)){//对url中session值的处理 url = url.replace(/session:em_uu/g,em_uu); } if(contains(url, 'session:em_code', true)){//对url中em_code值的处理 url = url.replace(/session:em_code/g, "'" + em_code + "'"); } if(contains(url, 'sysdate', true)){//对url中系统时间sysdate的处理 url = url.replace(/sysdate/g, "to_date('" + Ext.Date.toString(new Date()) + "','yyyy-mm-dd')"); } if(contains(url, 'session:em_name', true)){ url = url.replace(/session:em_name/g,"'"+em_name+"'" ); } return url; }, openCard: function(record){ var me = this; var panel = Ext.getCmp(record.get('id')); if(!panel){ var url = me.parseUrl(record.data['url']);//解析url里的特殊描述 panel = { title : record.get('qtip').length>5?(record.get('qtip').substring(0,5)+'..'):record.get('qtip'), tag : 'iframe', tabConfig: {tooltip:record.get('qtip')}, border : false, frame: false, layout : 'fit', iconCls : record.data.iconCls, html : '', closable : true, listeners : { close : function(){ var main = Ext.getCmp("content-panel"); main.setActiveTab(Ext.getCmp("HomePage")); } } }; this.openTab(panel, record.get('id'), url); } else{ var main = Ext.getCmp("content-panel"); main.setActiveTab(panel); } }, openBox: function(record){ window.open(basePath + this.parseUrl(record.data['url']), record.get('qtip'), 'width=' + (window.screen.width-10) + ',height=' + (window.screen.height*0.87) + ',top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no'); }, openBlank: function(record){ //window.open(basePath + this.parseUrl(record.data['url'])); }, openWin: function(record){ if(Ext.getCmp('twin_' + record.data['id'])){ Ext.getCmp('twin_' + record.data['id']).show(); } else { new Ext.window.Window({ id : 'twin_' + record.data['id'], title: record.get('qtip').length>5?(record.get('qtip').substring(0,5)+'..'):record.get('qtip'), height: "100%", width: "80%", maximizable : true, layout : 'anchor', items: [{ tag : 'iframe', frame : true, anchor : '100% 100%', layout : 'fit', html : '' }] }).show(); } }, lockPage: function(){ var me = this; Ext.Ajax.request({ url: basePath + "common/logout.action", method : 'post', callback : function(options,success,response){ var res = Ext.decode(response.responseText); if(res.success){ //弹出解锁框 me.showLock(); } } }); }, /** * 显示锁屏window */ showLock: function(){ var me = this; var panel = Ext.create('Ext.window.Window', { id: 'lock-win', frame: true, closable: false, modal: true, autoShow: true, title: '
 !您的屏幕已锁定
', bodyStyle: 'background: #E0EEEE', width: 360, height: 260, renderTo: Ext.getBody(), items: [{ xtype: 'displayfield', height: 130, labelWidth: 128, labelSeparator: '', fieldStyle: 'color:#7D9EC0;font-size:15px;font-family:隶书;', fieldLabel: '', value: '如需解锁,请输入您的密码' },{ xtype: 'hidden', name: 'username', id: 'username', value: em_code },{ xtype: 'form', bodyStyle: 'background: #E0EEEE', layout: 'column', items: [{ xtype: 'textfield', labelSeparator: '', columnWidth: 0.8, fieldLabel: '', labelWidth: 40, fieldCls: 'x-form-field-cir', id: 'password', name: 'password', inputType: 'password' },{ xtype: 'button', columnWidth: 0.2, cls: 'x-btn-blue', text: '解锁', handler: function(){ me.removeLock(); } }] }] }); panel.el.slideIn('b', { duration: 1000 }); }, removeLock: function(){ var win = Ext.getCmp('lock-win'); if(win && win.down('#password').value != null){ Ext.Ajax.request({ url: basePath + "common/login.action", params: { username: win.down('#username').value, password: win.down('#password').value, language: language }, method : 'post', callback : function(options,success,response){ var res = Ext.decode(response.responseText); if(res.success){ //弹出解锁框 win.close(); } else { if(res.reason){ alert(res.reason); win.down('#password').setValue(''); win.down('#password').focus(); } } } }); } }, /** * 右下角小消息提示 * @param title 标题 * @param fromId 发送人Id * @param from 发送人 * @param date 日期 * @param context 正文 * @param url 消息链接 * @param msgId 消息ID */ showMsgTip: function(title,prId,fromId, from, date, context, url, msgId,master){ var me = this; var panel = Ext.getCmp('msg-win-' + prId); if(!panel){ panel = Ext.create('erp.view.core.window.MsgTip', { title: title, from: from, date: date, url: url, msgId: msgId, prId:prId, height: 120,//提示信息显示不全 context: context, listeners: { close: function(){ me.updatePagingStatus(msgId, 1,master); }, check: function(){ me.showDialogBox(msgId, fromId, from, date, context); }, reply: function(){ me.showDialogBox(msgId, fromId, from, date, context); } } }); } }, transImages: function(msg){ msg = msg.toString(); var faces = msg.match(/&f\d+;/g); Ext.each(faces, function(f){//表情 msg = msg.replace(f, ''); }); var images = msg.match(/&img\d+;/g); Ext.each(images, function(m){//图片 msg = msg.replace(m, ''); }); return msg; }, /** * 对话框 * @param id 消息的主键值 * @param otherId 对方人员ID * @param other 对方人名 * @param date 时间 * @param context 对话内容 */ showDialogBox: function(id, otherId, other, date, context){ var me = this; var panel = Ext.getCmp('dialog-win-' + otherId); if(!panel){ panel = Ext.create('erp.view.core.window.DialogBox', { other: other, otherId: otherId }); } if(!Ext.isEmpty(id)){ panel.insertDialogItem(other, date, context); if(Ext.getCmp('dialog-min-' + otherId)){ Ext.getCmp('dialog-min-' + otherId).setText("有新消息..." ); } else { me.updatePagingStatus(id, 1); } } }, /** * 循环刷新寻呼信息 * @param cycletime 间隔时间 {快速4000(聊天过程中)、中等8000(普通模式)、慢速15000(session中断等异常情况下)} */ loadPagingRelease: function(){ var me = this; me.cycletime = me.cycletime || 8000; if(!Ext.getCmp('lock-win')){ try{ me.getPagingRelease(); Ext.getCmp('process-lazy').setText(''); } catch (e) { //需要try catch一下,不然,循环会因出现的异常而中断。网络中断后,如果不刷新主页,而是直接重新登录的话,就不会继续循环刷新寻呼 me._showerr(e); } } setTimeout(function(){ if(me.allowMsg) me.loadPagingRelease(); }, me.cycletime); }, /** * 循环刷新流程信息 * */ loadJprocess: function(){ var me = this; if(!me.bench) me.bench=Ext.getCmp("content-panel").items.items[0].body.dom.getElementsByTagName('iframe')[0].contentWindow.workbench; if(me.onlyJprocess == undefined) me.onlyJprocess=getSetting("refreshOnlyJprocess"); if(!Ext.getCmp('lock-win') && me.bench){ me.bench.refreshTask(me.onlyJprocess); } setTimeout(function(){ me.loadJprocess(); },60000); }, _showerr: function(e) { var me = this; if(e.code == 101 || e.message == 'NETWORK_ERR' || e.message == 'NETWORK_LAZY' || e.message == 'NETWORK_LOCK'){//NETWORK_ERR me.cycletime = 20000; if(e.message == 'NETWORK_ERR') { showLoginDiv(true); Ext.getCmp('process-lazy').setText('服务器连接中断,服务器可能已关闭或在重启,尝试连接中...'); } else if(e.message == 'NETWORK_LAZY') { Ext.getCmp('process-lazy').setText('请求超时8000ms,服务器负荷过大或网络延迟,请暂缓操作,尝试恢复中...'); } else if(e.message == 'NETWORK_LOCK') {//账号被强制锁定 Ext.Ajax.request({ url: basePath + "common/logout.action", method : 'post', callback : function(options, success, response){ var res = Ext.decode(response.responseText); if(res.success){ alert('您已被管理员强制注销,请重新登录!'); window.location.reload(); } } }); } } }, /** * 获取未读网络寻呼 */ getPagingRelease: function(){ var me = this, t1 = new Date().getTime(); Ext.Ajax.request({ url : basePath + 'oa/info/getPagingRelease.action', method : 'get', timeout: 8000, callback : function(options, success, response){ var e = null; if(success == false) { var lazy = new Date().getTime() - t1; if(lazy > 7500) {// 表示超时引起 e = new Error("NETWORK_LAZY"); } else {// 表示服务器连接中断引起 e = new Error("NETWORK_ERR"); } } else { me.cycletime = 8000; } var localJson = new Ext.decode(response.responseText, true); if(localJson.exceptionInfo) { var info = localJson.exceptionInfo; if(info == 'ERR_NETWORK_SESSIONOUT'){ e = new Error("NETWORK_ERR"); } else if(info == 'ERR_NETWORK_LOCKED'){ e = new Error("NETWORK_LOCK"); } else { showMessage('警告', info); } } if(e != null) { me._showerr(e);return; } if(localJson.success){ if (localJson.IsRemind) { me.allowMsg = true; var data = Ext.decode(localJson.data); if(data != null && data.length > 0){ Ext.each(data, function(d){ if(Ext.getCmp('dialog-win-' + d.pr_releaserid)){ me.showDialogBox(d.prd_id, d.pr_releaserid, d.pr_releaser, Ext.Date.format(Ext.Date.parse(d.pr_date, 'Y-m-d H:i:s'), 'Y-m-d H:i:s'), d.pr_context,d.currentMaster); } else { me.showMsgTip('您收到了新的寻呼',d.pr_id,d.pr_releaserid, d.pr_releaser, Ext.Date.format(Ext.Date.parse(d.pr_date, 'Y-m-d H:i:s'), 'Y-m-d H:i:s'), d.pr_context, 'jsps/oa/info/pagingDetail.jsp?formCondition=prd_idIS' + d.prd_id, d.prd_id,d.currentMaster); } }); } } else { me.allowMsg = false;// 设置为不允许弹消息窗 } } } }); }, /** * @param id 明细ID * @param status 待修改状态 */ updatePagingStatus: function(id, status,master){ Ext.Ajax.request({ url : basePath + 'oa/info/updateStatus.action', params: { id: id, status: status, master:master }, method : 'post', callback : function(options,success,response){ var localJson = new Ext.decode(response.responseText); if(localJson.exceptionInfo){ showError(localJson.exceptionInfo);return null; } } }); }, /** * 抓取天气 */ getWeather: function(f){ Ext.Ajax.request({ url: basePath + 'common/getWeather.action', params: { city: f.value, day: f.ownerCt.down('combobox[id=day]').value }, method: 'POST', callback : function(options,success,response){ var res = Ext.decode(response.responseText); var w = res.weather; if(w){ var container = f.ownerCt.ownerCt; Ext.each(container.items.items, function(item, index){ if(index > 0){ item.destroy(); } }); f.ownerCt.ownerCt.insert(1, { xtype: 'displayfield', width: 120, html: "
 " + w.low + "℃ ~ " + w.high + "℃ " + w.weather + "
" + '' }); } } }); }, getCitys: function(){ var citys = ["深圳","北京","天津","上海","重庆","石家庄","太原","沈阳","长春","哈尔滨","南京","杭州","合肥","福州","南昌","济南","郑州","武汉","长沙","广州","海口","成都","贵阳","昆明","西安","兰州","西宁","拉萨","南宁","呼和浩特","银川","乌鲁木齐","香港","台北","澳门"]; var datas = new Array(); Ext.each(citys, function(){ datas.push({ display: this, value: this }); }); return datas; }, /** * 通讯录 */ showAddrBook: function(){ if(!Ext.getCmp('addrbook-win')){ Ext.create('Ext.window.Window', { id: 'addrbook-win', title: '我的通讯录', height: screen.height*0.8, width: screen.width*0.2, renderTo: Ext.getBody(), animCollapse: false, constrainHeader: true, bodyBorder: true, layout: 'accordion', border: false, autoShow: true, collapsible : true, x: screen.width*0.8, items: [ Ext.create('erp.view.oa.addrBook.AddrBookTree', { id: 'addr-tree', title: '联系人' }), { title: '设置', html:'

...

', autoScroll:true }, { title: '我的应用', html : '

...

' } ] }); } else { Ext.getCmp('addrbook-win').show(); } }, checkOnline: function(record){ Ext.Ajax.request({ url: 'oa/info/checkOnline.action', params: { orgid: Number(record.data.data ? record.data.data.or_id : record.raw.data.or_id) }, method: 'POST', callback : function(options,success,response){ var res = Ext.decode(response.responseText); var data = res.data; if(data){ var count = 0; var ems = Ext.Array.pluck(data, 'em_id'); Ext.each(record.childNodes, function(node){ if(Ext.Array.contains(ems, Math.abs(node.data['id']))){ node.set('iconCls', 'x-tree-icon-happy'); node.set('cls', 'x-tree-cls-node-on'); var d = Ext.Array.filter(data, function(dd){ return dd.em_id == Math.abs(node.get('id')); })[0]; node.set('qtip', '' + '' + '' + '' + '' + '
编号:' + d.em_code + '
姓名:' + d.em_name + '
IP:' + d.ip + '
时间:' + Ext.Date.format(new Date(d.date), 'Y-m-d H:i:s') + '
'); count++; } else { node.set('iconCls', 'x-tree-icon-sad'); node.set('cls', 'x-tree-cls-node-off'); } }); if(count > 0){ if(!record.data.oriText){ record.data.oriText = record.data.text; } record.expand(false,true); } } } }); }, showPwdPanel: function() { Ext.create('erp.view.core.window.PwdWindow'); } });