define(function (require, exports, module) { var Window = require('system/views/pages/window'); var tpl = require('text!apps/edp/frs/frs002/ActRightWin.tpl'); var menuData = []; var roleFunData = []; var roleActRightData = []; var comBoxData = []; //用于标识是否为初始化时进行操作权的选中初始化,用于在初始化时,避开onSelectedRowsChangde方法 var isOpenInitActRight = true; //用于判断是否treeonCheck事件中的操作权选中初始化,用于在初始化时,避开onSelectedRowsChangde方法 var isTreeCheck = true; var treeCheckRow = null; /** * [操作权弹框] * @param {[type]} dsRole 角色表数据源,用于对角色ComBox进行赋值 * @param {[type]} dsActRight 操作权数据源,用于操作权的显示 * @param {[type]} dsRoleFun 角色功能菜单操作权数据源,用于树菜单初始化勾选的显示 * @param {[type]} dsRoleActRight 角色对应功能的操作权数据源 * @param {[type]} menuRows 功能菜单行数据,用于初始加载树菜单 * @param {[type]} roleFunRows 角色功能表的功能菜单,用于树菜单的选中加载 * @param {[type]} roleID 当前选中行的角色ID,用于tree中ID的赋值 * @param {[type]} roleCode 当前选中行的角色编码,用于角色ComBox初始值赋值 */ function ActRightWin(dsRole, dsActRight, dsRoleFun, dsRoleActRight, menuRows, roleFunRows, roleID, roleCode) { this.options = { title: Store.MSG.FRS002_11,//操作权 content: tpl, width: 600, height: 450, modal: true, closed: true, closable: true, draggable: false, data: null } this.dsRole = dsRole; this.dsRoleFun = dsRoleFun; this.dsActRight = dsActRight; this.dsRoleActRight = dsRoleActRight; this.dsRoleActRight.search(); this.roleID = roleID; this.roleCode = roleCode; this.roleFunRows = roleFunRows; this.menuRows = menuRows; // 获取当前角色对应的功能编码 roleFunData = getRoleFunData(this.roleFunRows, this.roleID); //查询出功能菜单数据 menuData = parseMenuData(this.menuRows, this.roleID, this.roleCode); Window.call(this, this.options); } inherits(ActRightWin, Window); ActRightWin.prototype.init = function () { this._nowDate = Store.bizDao.getSysDate(); //当前日期 var self = this; //操作权菜单树数据 var ztreeFuncMenu = { opts: { showLine: true, checkEnable: true }, data: menuData, actions: { onClick: function (e, treeNode) { treeCheckRow = treeNode; isOpenInitActRight = false; //按照功能编码获取对应的操作权,只有功能节点时,进行操作权的赋值 if (!treeNode.isParent) { self.dsActRight.fixQuery['FuncCode'] = treeNode.funcCode; self.dsActRight.search(function (isOK) { if (isOK) { var selectIndex = []; var $gridAct = self.vm.gridAct.vmodel.$grid; // 获取角色对应的所有的操作权按钮编码,并进行选中状态的初始化 roleActRightData = getRoleActionRight(self.dsRoleActRight.rows, treeNode.roleID, treeNode.funcCode); var actRightRows = self.dsActRight.rows; for (var i = 0; i < actRightRows.length; i++) { var rowOpCode = actRightRows[i]['OpCode']; var index = _.findLastIndex(roleActRightData, { roleActRight: rowOpCode }); if (index > -1) { selectIndex.push(i); } } $gridAct.setSelectedRows(selectIndex); //设置checkbox是否可以选择 if (!treeNode.checked) { self.vm.gridAct.setSelectboxDisable(true); } else { self.vm.gridAct.setSelectboxDisable(false); } isOpenInitActRight = true; } }); } else { self.dsActRight.clear(); } }, onCheck: function (event, treeNode) { treeCheckRow = treeNode; isTreeCheck = false; var roleID = treeNode.roleID; var isChecked = treeNode.checked; if (!treeNode.isParent) { var funcCode = treeNode.funcCode; setFuncAndActRight(self, roleID, funcCode, isChecked, false); } else { var treeIdChildren = self.vm.treeMenu.getAllChildrenNodes(treeNode); for (var k = 0; k < treeIdChildren.length; k++) { if (!treeIdChildren[k].isParent) { var funcCode = treeIdChildren[k].funcCode; setFuncAndActRight(self, roleID, funcCode, isChecked, true); } } } } } } //操作权界面功能对应操作权数据 var gridActRight = { opts: { showCheckColumn: true, editable: false, enablePager: false, pageSize: -1 }, data: self.dsActRight, actions: { onKeyDown: function (e, args) { // if (!treeCheckRow.checked) { // Store.messager.warn('当前功能未选中,不能修改操作权,请先选中当前功能'); // return; // } }, onSelectedRowsChanged: function (e, args) { if (isOpenInitActRight && isTreeCheck && treeCheckRow) { let selectedRows = args.selectedRows; //删除功能下的权限 for (let i = self.dsRoleActRight.rows.length - 1; i >= 0; i--) { let row = self.dsRoleActRight.rows[i] if (row['FunCode'] === treeCheckRow.funcCode && row['RoleID'] === self.roleID) { row.delete() } } for (let i = 0; i < selectedRows.length; i++) { // 获取当前修改行 let selectedRow = selectedRows[i]; let curFuncCode = selectedRow['FuncCode']; let curOpCode = selectedRow['OpCode']; let newRoleActRightRow = self.dsRoleActRight.addRow(); newRoleActRightRow['RoleID'] = self.roleID; newRoleActRightRow['FunCode'] = curFuncCode; newRoleActRightRow['ActRightCode'] = curOpCode; newRoleActRightRow['CrtUserID'] = Store.logOn.userId; newRoleActRightRow['CrtTime'] = self._nowDate; } } } } } this.register('tree', 'treeMenu', ztreeFuncMenu); this.register('grid', 'gridAct', gridActRight); } ActRightWin.prototype.open = function () { Window.prototype.open.call(this); } /** * [执行windows窗体上自定义按钮事件] */ ActRightWin.prototype.customerize = function () { var self = this; var treeObj = self.vm.treeMenu; //用于默认初始化树菜单选中的节点时,子节点全部选中时,将父节点也进行选中 var treeNodes = treeObj.getCheckedNodes(); for (var i = 0, l = treeNodes.length; i < l; i++) { treeObj.checkNode(treeNodes[i], true, true); } comBoxData = []; //为角色combox增加下拉数据,过滤掉角色类型为数据权角色的用户 var rows = this.dsRole.rows; for (var i = 0; i < rows.length; i++) { var rowRoleID = rows[i]["RoleID"]; var rowRoleCode = rows[i]["RoleCode"]; var rowRoleName = rows[i]["RoleName"]; var rowRoleType = rows[i]["RoleType"]; if (rowRoleType === '0') { comBoxData.push({ roleID: rowRoleID, roleCode: rowRoleCode, roleName: rowRoleCode + '-' + rowRoleName }); } } //角色编码Combox属性及事件处理 var $roleSelect = this.getElement('.roleSelect'); //角色Combox选中时的事件处理,用于加载不同角色编码下树菜单的选中状态 //这个事件要放到下面的"loadData"以及"setValue"前面,这样就不会出现onSelect事件导致搜索失效的现象出现了。 $roleSelect.combobox({ onSelect: function (nv, ov) { //'确定要切换角色吗?注意:如果当前角色已进行修改,请先进行保存。' if (nv.roleCode != self.roleCode || (!self.roleCode)) { Store.messager.confirm(Store.MSG.FRS002_12, function (confirmIsOk) { if (confirmIsOk) { var selectRoleCode = $roleSelect.combobox('getValue'); reSetActRight(selectRoleCode, self, treeObj); self.dsActRight.clear(); } else { $roleSelect.combobox('select', self.roleCode); } }); } } }); $roleSelect.combobox('loadData', comBoxData); $roleSelect.combobox('select', this.roleCode); //保存按钮事件 this.getElement('.btnSave').on('click', function (event) { //判断哪些进行树菜单进行了修改,对角色功能表进行对应的处理 var treeNodes = treeObj.getAllNodes(); var deleteRow = []; //要删除的功能树菜单集合 for (var i = 0, l = treeNodes.length; i < l; i++) { //初始化时为非选中状态,修改为选中状态时,进行增加行 if (!treeNodes[i].isParent && !treeNodes[i].checkedOld && treeNodes[i].checked) { var newRoleFunRow = self.dsRoleFun.addRow(); newRoleFunRow['RoleID'] = treeNodes[i].roleID; newRoleFunRow['RoleCode'] = treeNodes[i].roleCode; newRoleFunRow['FunCode'] = treeNodes[i].funcCode; newRoleFunRow['CrtUserID'] = Store.logOn.userId;; newRoleFunRow['CrtTime'] = self._nowDate; } //初始化时为选中状态,修改为非选中状态时,进行删除行 if (!treeNodes[i].isParent && treeNodes[i].checkedOld && !treeNodes[i].checked) { //找到角色功能表数据源的要删除的行,进行删除 var roleFunRows = self.roleFunRows; var treeRoleID = treeNodes[i].roleID; var treeFuncCode = treeNodes[i].funcCode; _.each(roleFunRows, function (item, index) { var rowRoleID = item["RoleID"]; var rowFunCode = item["FunCode"]; if (treeRoleID === rowRoleID && treeFuncCode === rowFunCode) { deleteRow.push(item); } }); } } _.each(deleteRow, function (itemDelete, indexDelete) { self.dsRoleFun.deleteRow(itemDelete); }); var needDeleteFunRows = self.dsRoleFun.rows.filter(function (item) { return item.FunCode === ''; }); for (var i = 0; i < needDeleteFunRows.length; i++) { self.dsRoleFun.deleteRow(needDeleteFunRows[i]); } var needDeleteActRows = self.dsRoleActRight.rows.filter(function (item) { return item.FunCode === ''; }); for (var i = 0; i < needDeleteActRows.length; i++) { self.dsRoleActRight.deleteRow(needDeleteActRows[i]); } //角色功能表保存处理 self.dsRoleFun.save(function (isRoleFunOk) { if (isRoleFunOk) { //角色操作表保存处理 self.dsRoleActRight.save(function (isRoleActRightOk) { if (!isRoleActRightOk) { self.dsRoleFun.rejectChanges(); self.dsRoleActRight.rejectChanges(); Store.messager.err(Store.MSG.FRS002_13);//角色操作权设置失败,请重试。 return; } Store.messager.tip(Store.MSG.FRS002_14); //操作权设置成功。 self.close(); }); return; } else { //用于回滚数据 self.dsRoleFun.rejectChanges(); self.dsRoleActRight.rejectChanges(); Store.messager.err(Store.MSG.FRS002_15); //角色功能菜单设置失败,请重试。 return; } }); }); //取消按钮事件,恢复到刚打开界面的初始状态 this.getElement('.btnSel').on('click', function (event) { //确定要取消设置的操作权吗? Store.messager.confirm(Store.MSG.FRS002_16, function (confirmIsOk) { if (confirmIsOk) { var selectRoleCode = $roleSelect.combobox('getValue'); reSetActRight(selectRoleCode, self, treeObj); self.dsRoleActRight.rejectChanges(); self.dsActRight.clear(); } }); }); //关闭按钮事件 this.getElement('.btnClose').on('click', function (event) { //确定要关闭操作权窗体吗? Store.messager.confirm(Store.MSG.FRS002_17, function (confirmIsOk) { if (confirmIsOk) { self.close(); } }); }); //全部展开按钮事件 this.getElement('.btnAllExpand').on('click', function (event) { if (self.vm.treeMenu) { treeObj.expandAll(true); } }); //全部合拢按钮事件 this.getElement('.btnAllShut').on('click', function (event) { if (self.vm.treeMenu) { treeObj.expandAll(false); } }); } //强制转换为树结构数据 /** * [强制转换为树结构数据] * @param {[type]} data [要转换树菜单结构的数据,此处为功能菜单数据] * @return {[type]} roleID [当前选中的角色ID] * @return {[type]} roleCode [当前选中的角色I] */ function parseMenuData(data, roleID, roleCode) { var nodes = []; $.each(data, function (index, item) { var node = { icon: 'themes/default/images/icons/node.png' } node.id = item.MenuCode; var idLen = item.MenuCode.length; node.pId = idLen > 2 ? item.MenuCode.substring(0, idLen - 2) : item.MenuCode; node.name = item.MenuCaption; node.funcCode = item.FuncCode || ''; node.roleID = roleID || ''; node.roleCode = roleCode || ''; //TODO 当前登录人编码;当前日期 if (_.indexOf(roleFunData, node.funcCode) !== -1) { node.checked = true; } if (idLen > 4) { node.icon = 'themes/default/images/icons/node2.png'; } nodes.push(node); }); return nodes; } /** * [获取当前角色编码tFrsRoleFun表中有权限的功能编码] * @param {[type]} rows [当前所有角色设置的功能权限] * @param {[type]} roleID [当前选中的角色ID] * @return {[type]} [返回当前角色编码对应的功能权限] */ function getRoleFunData(rows, roleID) { var FuncCodes = []; for (var i = 0; i < rows.length; i++) { var rowRoleID = rows[i]["RoleID"]; var rowFunCode = rows[i]["FunCode"]; if (rowRoleID === roleID) { FuncCodes.push(rowFunCode); } } return FuncCodes; } /** * [获取当前角色编码角色操作权表tFrsRoleActionRight中的数据,用于初始化需要勾选的操作权数据] * @param {[type]} rows [当前所有角色设置的操作权数据] * @param {[type]} roleID [当前选中的角色编码] * @param {[type]} funcCode [当前选中的树功能编码] * @return {[type]} [返回当前角色编码对应的功能权限] */ function getRoleActionRight(rows, roleID, funcCode) { var roleActionRight = []; for (var i = 0; i < rows.length; i++) { var rowRoleID = rows[i]["RoleID"]; var rowFunCode = rows[i]["FunCode"]; var rowRoleActRight = rows[i]["ActRightCode"]; if (rowRoleID === roleID && rowFunCode === funcCode) { roleActionRight.push({ funcCode: rowFunCode, roleActRight: rowRoleActRight }); } } return roleActionRight; } /** * [选择角色或者点击取消按钮时,重新加载数据] * @param {[type]} selectRoleCode [当前选中的角色编码] * @param {[type]} self [弹框本身] * @param {[type]} treeObj [当前tree控件Obj] */ function reSetActRight(selectRoleCode, self, treeObj) { var index = _.findLastIndex(comBoxData, { roleCode: selectRoleCode }); var selectRoleID = comBoxData[index].roleID; roleFunData = getRoleFunData(self.roleFunRows, selectRoleID); menuData = parseMenuData(self.menuRows, selectRoleID, selectRoleCode); self.vm.treeMenu.vmodel.$reset(menuData); //用于默认初始化树菜单选中的节点时,子节点全部选中时,将父节点也进行选中 var treeNodes = treeObj.getCheckedNodes(); for (var i = 0, l = treeNodes.length; i < l; i++) { treeObj.checkNode(treeNodes[i], true, true); } self.roleID = selectRoleID self.roleCode = selectRoleCode } /** * [用于在树菜单勾选菜单时,对操作权的控制,如果选中,那么该菜单下所有操作权默认选中,如果不选中,那么该菜单下所有操作权默认不选中] * @param {[type]} self [弹框] * @param {[type]} roleID [当前要处理的角色ID] * @param {[type]} funcCode [当前要处理的功能编码] * @param {Boolean} isChecked [当前树菜单的操作状态] * @param {Boolean} isParent [是否为父节点] */ function setFuncAndActRight(self, roleID, funcCode, isChecked, isParent) { self.dsActRight.fixQuery['FuncCode'] = funcCode; self.dsActRight.search(function (isOK) { if (isOK) { var selectIndex = []; var deleteRow = []; // 功能对应操作权待删除的行 var addRow = []; //需要增加的行的集合 var roleActRightRow = self.dsRoleActRight.rows; var actRightRow = self.dsActRight.rows; var $gridAct = self.vm.gridAct.vmodel.$grid; if (!isChecked) { $gridAct.setSelectedRows([]); _.each(roleActRightRow, function (item, index) { var rowRoleID = item["RoleID"]; var rowFunCode = item["FunCode"]; if (rowRoleID === roleID && rowFunCode === funcCode) { deleteRow.push(item); } }); _.each(deleteRow, function (itemDelete, indexDelete) { self.dsRoleActRight.deleteRow(itemDelete); }); //设置checkbox为不可点击 self.vm.gridAct.setSelectboxDisable(true); } else { self.vm.gridAct.selectAll(); _.each(actRightRow, function (item, index) { var count = 0; //记录角色操作权表是否存在该行数据 var rowFunCode = item["FuncCode"]; var rowOpCode = item['OpCode']; _.each(roleActRightRow, function (roleActItem, roleActIndex) { var rowRoleRoleID = roleActItem["RoleID"]; var rowRoleFunCode = roleActItem["FunCode"]; var rowRoleActRightCode = roleActItem["ActRightCode"]; if (rowRoleRoleID === roleID && rowRoleFunCode === rowFunCode && rowRoleActRightCode === rowOpCode) { count++; } }); if (count === 0) { addRow.push(item); } }); _.each(addRow, function (itemAdd, indexAdd) { var newRoleActRightRow = self.dsRoleActRight.addRow(); newRoleActRightRow['RoleID'] = roleID; newRoleActRightRow['FunCode'] = funcCode; newRoleActRightRow['ActRightCode'] = itemAdd['OpCode']; newRoleActRightRow['CrtUserID'] = Store.logOn.userId; newRoleActRightRow['CrtTime'] = self._nowDate; }); //设置checkbox为可点击 self.vm.gridAct.setSelectboxDisable(false); } //当点击的是Parents时,需将操作权Grid进行清空 if (isParent) { self.dsActRight.clear(); } if (!isTreeCheck) { isTreeCheck = true; } } }); } return ActRightWin; })