sasp-admin 0.2.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/index.js +227 -0
  2. package/package.json +19 -0
  3. package/router.js +83 -0
  4. package/src/assets/font/iconfont.css +1346 -0
  5. package/src/assets/font/iconfont.eot +0 -0
  6. package/src/assets/font/iconfont.js +1 -0
  7. package/src/assets/font/iconfont.svg +827 -0
  8. package/src/assets/font/iconfont.ttf +0 -0
  9. package/src/assets/font/iconfont.woff +0 -0
  10. package/src/assets/images/loading-bar.gif +0 -0
  11. package/src/assets/js/adminInstall.js +36 -0
  12. package/src/assets/js/api/apiAdmin.js +613 -0
  13. package/src/assets/js/global/dataGlobal.js +260 -0
  14. package/src/assets/js/global/logGlobal.js +22 -0
  15. package/src/assets/js/global/paramGlobal.js +67 -0
  16. package/src/assets/js/global/resGlobal.js +91 -0
  17. package/src/assets/js/global/userGlobal.js +283 -0
  18. package/src/components/complexViewRendering.vue +601 -0
  19. package/src/components/ifmLink.vue +71 -0
  20. package/src/components/public/data/plDataCascader.vue +85 -0
  21. package/src/components/public/data/plDataRadio.vue +73 -0
  22. package/src/components/public/data/plDataRadioGroup.vue +70 -0
  23. package/src/components/public/data/plDataSelect.vue +856 -0
  24. package/src/components/public/data/plDatePicker.vue +159 -0
  25. package/src/components/public/org/bg.png +0 -0
  26. package/src/components/public/org/sysOrgPosUserSelect.vue +1237 -0
  27. package/src/components/public/org/sysOrgPosUserSelectDark.vue +1402 -0
  28. package/src/components/public/org/sysOrgPosUserSelectNew.vue +1527 -0
  29. package/src/components/public/upload/images/compress.png +0 -0
  30. package/src/components/public/upload/images/emipty.png +0 -0
  31. package/src/components/public/upload/images/excel.png +0 -0
  32. package/src/components/public/upload/images/file.png +0 -0
  33. package/src/components/public/upload/images/pdf.png +0 -0
  34. package/src/components/public/upload/images/powerpoint.png +0 -0
  35. package/src/components/public/upload/images/project.png +0 -0
  36. package/src/components/public/upload/images/sound.png +0 -0
  37. package/src/components/public/upload/images/txt.png +0 -0
  38. package/src/components/public/upload/images/video.png +0 -0
  39. package/src/components/public/upload/images/visio.png +0 -0
  40. package/src/components/public/upload/images/word.png +0 -0
  41. package/src/components/public/upload/plImage.vue +287 -0
  42. package/src/components/public/upload/plImgUpload.vue +137 -0
  43. package/src/components/public/upload/plUpload.vue +1124 -0
  44. package/src/components/public/upload/uploadImg.js +8 -0
  45. package/src/main.js +0 -0
  46. package/src/views/VueMenuView.vue +143 -0
  47. package/src/views/cloudMenuView.vue +125 -0
  48. package/src/views/complex/config/complex.vue +501 -0
  49. package/src/views/complex/config/complexSetting.vue +1250 -0
  50. package/src/views/complex/rendering/complexShow.vue +16 -0
  51. package/src/views/data/dataManage.vue +560 -0
  52. package/src/views/data/sysData.vue +292 -0
  53. package/src/views/event/eventManager/vueEventDiy.vue +1184 -0
  54. package/src/views/event/eventManager/vueEventMain.vue +108 -0
  55. package/src/views/event/eventManager/vueEventSys.vue +296 -0
  56. package/src/views/event/js/apiEvent.js +22 -0
  57. package/src/views/fileLog/fileDownloadLog.vue +437 -0
  58. package/src/views/initData/initData.vue +4316 -0
  59. package/src/views/log/dblog/logdbDevelop.vue +306 -0
  60. package/src/views/log/dblog/logdbEnt.vue +331 -0
  61. package/src/views/log/dblog/logdbGov.vue +395 -0
  62. package/src/views/log/error/logError.vue +553 -0
  63. package/src/views/log/loginlog/logManageDevOrSup.vue +357 -0
  64. package/src/views/log/loginlog/logManageEnt.vue +343 -0
  65. package/src/views/log/loginlog/logManageGov.vue +328 -0
  66. package/src/views/log/sms/logSms.vue +308 -0
  67. package/src/views/menu/component/menuManageComponent.vue +2402 -0
  68. package/src/views/menu/component/menuModule.vue +449 -0
  69. package/src/views/menu/menuLocal.vue +223 -0
  70. package/src/views/menu/menuManage.vue +1135 -0
  71. package/src/views/menu/tenantMenuManage.vue +1132 -0
  72. package/src/views/menuRouter/cview/cviewShow.vue +18 -0
  73. package/src/views/menuRouter/cviewMenuRouter.vue +183 -0
  74. package/src/views/menuRouter/menuView.vue +132 -0
  75. package/src/views/menuRouter/urlMenuRouter.vue +160 -0
  76. package/src/views/org/entOrgTree.vue +1050 -0
  77. package/src/views/org/ownerMenu/ownerMenuTree.vue +269 -0
  78. package/src/views/org/safeValidate/safeValidate.vue +469 -0
  79. package/src/views/org/sysEntOrgUserDetail.vue +3390 -0
  80. package/src/views/org/sysOrgDimension.vue +832 -0
  81. package/src/views/org/sysOrgPosUserDetail.vue +1648 -0
  82. package/src/views/org/sysOrgPosUserTree.vue +1101 -0
  83. package/src/views/org/sysOrgTree.vue +864 -0
  84. package/src/views/param/sysParam.vue +987 -0
  85. package/src/views/preview/pdfViewer.vue +82 -0
  86. package/src/views/resources/js/resourcesCommon.js +137 -0
  87. package/src/views/resources/resRouter/resView.vue +161 -0
  88. package/src/views/resources/resourcesTabs.vue +82 -0
  89. package/src/views/resources/tabs/comp/pageResPreview.vue +309 -0
  90. package/src/views/resources/tabs/comp/pageResRegister.vue +1120 -0
  91. package/src/views/resources/tabs/dataResources.vue +843 -0
  92. package/src/views/resources/tabs/pageResources.vue +970 -0
  93. package/src/views/role/allowMenu.vue +148 -0
  94. package/src/views/role/authRole/authRole.vue +427 -0
  95. package/src/views/role/authRole/component/allocateSetting.vue +1056 -0
  96. package/src/views/role/authRole/component/authSetting.vue +1196 -0
  97. package/src/views/role/commonRole/commonRole.vue +677 -0
  98. package/src/views/role/commonRole/compoment/allocateRoleMenuSetting.vue +335 -0
  99. package/src/views/role/commonRole/compoment/authLinkMenuTree.vue +55 -0
  100. package/src/views/role/commonRole/compoment/authSettingNew.vue +190 -0
  101. package/src/views/role/commonRole/compoment/commonSetting.vue +1576 -0
  102. package/src/views/role/commonRole/compoment/commonSettingAdjust.vue +584 -0
  103. package/src/views/role/commonRole/compoment/commonSettingNew.vue +572 -0
  104. package/src/views/role/commonRole/compoment/roleMenuPower.vue +226 -0
  105. package/src/views/role/commonRole/compoment/roleMenuPowerSetting.vue +69 -0
  106. package/src/views/role/commonRole/compoment/roleMenuSetting.vue +365 -0
  107. package/src/views/role/commonRole/compoment/roleSourceSetting.vue +229 -0
  108. package/src/views/role/commonRole/tenantCommonRole.vue +768 -0
  109. package/src/views/role/role.vue +135 -0
  110. package/src/views/role/roleMenuOption.vue +898 -0
  111. package/src/views/role/roleSynchroRemind.vue +399 -0
  112. package/src/views/role/sysRole.vue +1525 -0
  113. package/src/views/role/viewMenuOptDetail.vue +182 -0
  114. package/src/views/sms/sendSms.vue +164 -0
  115. package/src/views/station/orgStation.vue +561 -0
  116. package/src/views/tenant/appContentManager.vue +938 -0
  117. package/src/views/tenant/appManager.vue +642 -0
  118. package/src/views/tenant/tenantRoleManager.vue +670 -0
  119. package/src/views/tenant/tenantUserManager.vue +615 -0
  120. package/src/views/threeinone/compoment/safeCascadeSelect.vue +327 -0
  121. package/src/views/threeinone/init/safeInitRegion.vue +203 -0
  122. package/src/views/threeinone/safeManager.vue +927 -0
  123. package/src/views/threeinone/safeMenuManage.vue +565 -0
  124. package/src/views/threeinone/safeOrgSpv.vue +364 -0
  125. package/src/views/threeinone/safeSpv/safeSpvLeftTree.vue +109 -0
  126. package/src/views/threeinone/safeSpv/safeSpvMain.vue +335 -0
  127. package/src/views/threeinone/safeSpvEconView.vue +569 -0
  128. package/src/views/threeinone/safeValidateRegion.vue +328 -0
  129. package/src/views/urlResource/urlResource.vue +856 -0
  130. package/src/views/user/empowerUser/empowerEntUserManage.vue +415 -0
  131. package/src/views/user/empowerUser/empowerOrgTree.vue +167 -0
  132. package/src/views/user/empowerUser/empowerUserList.vue +633 -0
  133. package/src/views/user/empowerUser/empowerUserListMenuDeatil.vue +656 -0
  134. package/src/views/user/empowerUser/empowerUserListViewMenuTree.vue +257 -0
  135. package/src/views/user/empowerUser/empowerUserManage.vue +99 -0
  136. package/src/views/user/stationUserManage.vue +934 -0
  137. package/src/views/user/userManage.vue +737 -0
  138. package/src/views/user/userMangement.vue +938 -0
  139. package/src/views/user/viewMenu/viewMenu.vue +113 -0
  140. package/src/views/versionupdatetool/versionUpdateTool.vue +225 -0
  141. package/src/views/versionupdatetool/versioninfomation/verisonInfomationManagement.vue +68 -0
@@ -0,0 +1,1196 @@
1
+ <template>
2
+ <el-tabs v-model="activeName" class="link-tabs">
3
+ <el-tab-pane label="菜单设置" name="1">
4
+ <el-container class="tab-contain" v-loading="loading" element-loading-text="加载中">
5
+ <el-header class="tab-header" style="height: 50px">
6
+ 可分配菜单
7
+ </el-header>
8
+ <el-main style="padding: 5px;box-sizing:border-box;overflow-y: hidden;">
9
+ <div class="aside-tree">
10
+ <role-menu-setting
11
+ ref="menuRef"
12
+ :role-id="currentRowObj.id"
13
+ :role-type="orgDims"
14
+ :check-menu-opt-power="checkMenuOptPower"
15
+ :check-menu-data-power="checkMenuDataPower"
16
+ v-if="loadRoleMenuSuccess"
17
+ @setMenuPower="setMenuPower"
18
+ @setMenuLoading="setMenuLoading"
19
+ @setCurrentMenuNode="setCurrentMenuNode">
20
+ </role-menu-setting>
21
+ </div>
22
+ <div class="opt-div-class">
23
+ <role-menu-power-setting
24
+ v-if="refreshMenuPower"
25
+ :opt-power="menuOptPower"
26
+ :data-power="menuDataPower"
27
+ :opt-power-tree="menuOptPowerTree"
28
+ :data-power-tree="menuDataPowerTree"
29
+ :check-opt-power="checkMenuOptPower"
30
+ :check-data-power="checkMenuDataPower"
31
+ :current-click-node="currentClickMenuNode"
32
+ :operation-add-obj="operationAddObj"
33
+ :operation-delete-obj="operationDeleteObj">
34
+ </role-menu-power-setting>
35
+ </div>
36
+ </el-main>
37
+ </el-container>
38
+ <el-container class="link-contain">
39
+ <el-header class="link-header" style="height:50px">
40
+ 关联菜单
41
+ </el-header>
42
+ <el-main style="padding: 5px">
43
+ <el-input v-model="filterLinkMenu" size="small" prefix-icon="el-icon-search" style="margin-bottom: 5px" placeholder="输入关键字过滤"></el-input>
44
+ <common-tree
45
+ :root-datas="linkMenuRootDatas" v-if="showAuthTree"
46
+ parent-id="menuSjbh" :default-props="defaultLinkProps" node-key="id" :filter-text="filterLinkMenu"
47
+ :init-check="authLinkInitCheck"
48
+ ref="authMenuRef" :default-expand-all=true :refresh-boolean-proper="roleSettingDialog"
49
+ :node-click-and-check=true
50
+ >
51
+ </common-tree>
52
+ </el-main>
53
+ </el-container>
54
+ </el-tab-pane>
55
+
56
+ <!--资源权限 start-->
57
+ <!-- <el-tab-pane label="资源权限" name="2">-->
58
+ <!-- <el-container class="comomSettiingStyle" v-loading="sourceLoading" element-loading-text="加载中">-->
59
+ <!-- <el-main style="height: 100%;overflow: hidden;padding: 0">-->
60
+ <!-- <div class="aside-tree">-->
61
+ <!-- <role-source-setting-->
62
+ <!-- ref="sourceRef"-->
63
+ <!-- :role-id="currentRowObj.id"-->
64
+ <!-- :check-source-opt-power="checkSourceOptPower"-->
65
+ <!-- :check-source-data-power="checkSourceDataPower"-->
66
+ <!-- @setSourcePower="setSourcePower"-->
67
+ <!-- @setSourceLoading="setSourceLoading"-->
68
+ <!-- @setCurrentSourceNode="setCurrentSourceNode">-->
69
+ <!-- </role-source-setting>-->
70
+ <!-- </div>-->
71
+ <!-- <div class="opt-div-class">-->
72
+ <!-- <role-menu-power-setting-->
73
+ <!-- v-if="refreshSourcePower"-->
74
+ <!-- :opt-power="sourceOptPower"-->
75
+ <!-- :data-power="sourceDataPower"-->
76
+ <!-- :opt-power-tree="sourceOptPowerTree"-->
77
+ <!-- :data-power-tree="sourceDataPowerTree"-->
78
+ <!-- :check-opt-power="checkSourceOptPower"-->
79
+ <!-- :check-data-power="checkSourceDataPower"-->
80
+ <!-- :current-click-node="currentClickSourceNode">-->
81
+ <!-- </role-menu-power-setting>-->
82
+ <!-- </div>-->
83
+ <!-- </el-main>-->
84
+ <!-- </el-container>-->
85
+ <!-- </el-tab-pane>-->
86
+ <!--资源权限 end-->
87
+
88
+
89
+ <el-tab-pane label="人员设置" name="3">
90
+ <sys-org-pos-user-select :choose-param="{'roleId':currentRowObj.id}" :refresh-proper="roleSettingDialog" :orgTreeIds="orgTreeIds"
91
+ :choose-url="api.roleUser.find" choose-field="userAttach" :pos-enable=false
92
+ :ogn-enable=false :filterUserParam="{'authUserType':'empower','created':loginUser.id,'empowerId':currentRowObj.id}"
93
+ :org-dims="orgDims" :case-auth=true ref="staffSetRef" v-if="showPosUserSelect"
94
+ >
95
+ </sys-org-pos-user-select>
96
+ </el-tab-pane>
97
+ </el-tabs>
98
+ </template>
99
+
100
+ <script>
101
+ import SysOrgPosUserSelect from "../../../../components/public/org/sysOrgPosUserSelect";
102
+ import Role from "../../role";
103
+ import RoleMenuSetting from "../../commonRole/compoment/roleMenuSetting";
104
+ import RoleMenuPowerSetting from "../../commonRole/compoment/roleMenuPowerSetting";
105
+ import AuthLinkMenuTree from "../../commonRole/compoment/authLinkMenuTree";
106
+ import RoleSourceSetting from "../../commonRole/compoment/roleSourceSetting";
107
+ export default {
108
+ name: "auth-setting",
109
+ components:{
110
+ RoleSourceSetting,
111
+ AuthLinkMenuTree, RoleMenuPowerSetting, RoleMenuSetting, Role, SysOrgPosUserSelect},
112
+ props:['currentRowObj',"roleSettingDialog"],
113
+ data(){
114
+ return {
115
+ defaultProps:{"children":"children","label":"menuShowName"},
116
+ defaultLinkProps:{"children":"children","label":"menuName"},
117
+ activeName:"1", // 当前激活的tab页名称
118
+ roleRequestParam:{}, // 权限
119
+ filterAllowMenu:"",
120
+ filterLinkMenu:"",
121
+ loading:true, // 加载条
122
+ sourceLoading:false,//资源加载条
123
+ showAuthTree:false, // 权限关联菜单树是否显示
124
+ linkMenuModel:"$$$$", // 权限关联菜单的数据来源
125
+ cdssArr:[],
126
+ cdss:"", // 当前菜单所在的模块
127
+ lastCdss:"", // 上一次菜单所在的模块
128
+ allowMenuParam:{},
129
+ showAllowMenuTree:false,
130
+ allowMenurefreshProper:"", // 刷新可分配菜单树的办法
131
+ operateNameMap:{}, // 操作按钮名称代码对应关系
132
+ complexFieldArr:[],
133
+ currentMenuId:"", // 当前点击的菜单id
134
+ loginUser:{}, // 登录用户
135
+ caseSup:false, // 是否是开发者
136
+ initCheck:{}, // 初始化选中
137
+ authLinkInitCheck:{}, // 关联菜单初始化选中
138
+ rootDatas:[], // 可分配菜单的树数据
139
+ linkMenuRootDatas:[], // 关联菜单的树数据
140
+ allSettingObj:{}, // 所有按钮配置数据,
141
+ oldRoleOptAll:{}, // 可分配菜单数据库已选择的Opt数据
142
+ menuOptAll:{}, // 当前用户拥有的所有操作权限,如果是开发者那么视为所有
143
+ menuAllBaseInfo:{}, // 菜单对应的基础信息
144
+ userMap:{}, // 已选择人员pos_user_id的集合
145
+ userDataMap:{}, // 已选择人员信息的集合
146
+ showPosUserSelect:false,
147
+ operationAddObj:{}, // 增加的操作权限数据
148
+ operationDeleteObj:{}, // 删除的操作权限数据
149
+ orgTreeIds:"",
150
+ allMenuObj:{}, // 所有菜单数据
151
+ orgDims:"",
152
+ dimensionObj:{}, // 维度对应中文名
153
+ dimensionOrder:{}, // 维度顺序
154
+
155
+ menuOptPower:[],//菜单操作权限
156
+ menuDataPower:[],//菜单数据权限
157
+ menuOptPowerTree:[],//菜单操作权限(树数据)
158
+ menuDataPowerTree:[],//菜单数据权限(树数据)
159
+ sourceOptPower:[],//资源操作权限
160
+ sourceDataPower:[],//资源数据权限
161
+ sourceOptPowerTree:[],//资源操作权限(树数据)
162
+ sourceDataPowerTree:[],//资源数据权限(树数据)
163
+ checkMenuOptPower:{},//勾选的菜单操作权限
164
+ checkMenuDataPower:{},//勾选的菜单数据权限
165
+ checkSourceOptPower:{},//勾选的资源操作权限
166
+ checkSourceDataPower:{},//勾选的资源数据权限
167
+ refreshMenuPower:true,
168
+ currentClickMenuNode:{},//当前点击的菜单节点
169
+ defaultMenu:[
170
+ {id:"normalUser",menuName:"普通用户管理",menuUrl:"/commonHome/userManage/ent",parentId:"-1"},
171
+ {id:"empowerUser",menuName:"授权用户管理",menuUrl:"/commonHome/empowerUserList",parentId:"-1"},
172
+ {id:"sysOrg",menuName:"组织岗位管理",menuUrl:"/commonHome/sysOrgTree",parentId:"-1"},
173
+ {id:"sysRole",menuName:"角色权限管理",menuUrl:"/commonHome/role",parentId:"-1"}
174
+ ],
175
+ linkMenuInitCheck:{},
176
+ ownOptLastData:[],
177
+ allLevelData:{},
178
+ refreshSourcePower:true,
179
+ currentClickSourceNode:{},//当前点击的资源节点
180
+ loadRoleMenuSuccess:false,
181
+ }
182
+ },
183
+ watch:{
184
+ cdss(){
185
+ this.dealTreeData();
186
+ this.allowMenurefreshProper = this.cdss;
187
+ },
188
+ roleSettingDialog(){
189
+ let vm = this;
190
+ vm.activeName = "1";
191
+ if(vm.roleSettingDialog){
192
+ vm.showAllowMenuTree = false;
193
+ vm.$nextTick(function () {
194
+ vm.cdssArr.length > 0 && (vm.cdss = vm.cdssArr[0]) && (vm.lastCdss = vm.cdssArr[0]);
195
+ vm.init();
196
+ })
197
+ }
198
+ }
199
+ },
200
+ created(){
201
+ let vm = this;
202
+ vm.axios.post(vm.api.sysOrgDimension.find).then(res => {
203
+ let {data} = res;
204
+ for (let {dimSpec, id, isUse,sort} of data) {
205
+ //判断是否启用和dimSpec是否有值
206
+ if (isUse === '1' && dimSpec) {
207
+ let dimSpecObj = JSON.parse(vm.platStringUtil.replaceAll(dimSpec,"'","\"") || "{}");
208
+ if(dimSpecObj.hasOwnProperty("menuLocalName")){
209
+ vm.dimensionObj[id]=dimSpecObj["menuLocalName"];
210
+ }
211
+ vm.dimensionOrder[id] = Number(sort || "0");
212
+ vm.dimensionOrder["sys"] = 99;
213
+ }
214
+ }
215
+ vm.dimensionObj["sys"] = "系统";
216
+ //获取当前登录用户信息
217
+ this.loginUser = this.USER_GLOBAL.getLoginUser() || {};
218
+ vm.caseSup = vm.loginUser.userType == "sup";
219
+ if(vm.caseSup){
220
+ vm.showPosUserSelect = true;
221
+ vm.loadRoleMenuSuccess = true;
222
+ }else{
223
+ vm.axios.post(vm.api.sysOrgPosUser.findNoPage,{"userId":vm.loginUser.id}).then(res => {
224
+ vm.orgTreeIds = res.data[0].orgId;
225
+ vm.orgDims = res.data[0].orgDim;
226
+ vm.showPosUserSelect = true;
227
+ vm.loadRoleMenuSuccess = true;
228
+ });
229
+ }
230
+ vm.axios.post(vm.api.menu.find).then(function (res) {
231
+ (res.data || []).forEach(item => {
232
+ vm.allMenuObj[item.id] = item;
233
+ });
234
+ vm.initRootData();
235
+ vm.loadAllowTree();
236
+ });
237
+ });
238
+ },
239
+ methods:{
240
+ init(){
241
+ this.userMap = {};
242
+ this.userDataMap = {};
243
+ // this.oldRoleOptAll = {};
244
+ this.allSettingObj = {};
245
+ // this.loadLinkTree();
246
+ },
247
+
248
+ getLastLayerData(dataArr){
249
+ (dataArr || []).forEach(item => {
250
+ if(item.childrens && item.childrens.length > 0){
251
+ this.getLastLayerData(item.childrens)
252
+ }else{
253
+ this.ownOptLastData.push(item);
254
+ }
255
+ });
256
+ },
257
+
258
+ loadAllowTree(){
259
+ let vm = this;
260
+ /* 初始化已选择人员信息 */
261
+ vm.axios.post(vm.api.roleUser.find,{"roleId":vm.currentRowObj.id}).then(function (res) {
262
+ (res.data || []).forEach(function (info) {
263
+ vm.userMap[info.userAttach] = info.id;
264
+ vm.userDataMap[info.userAttach] = info;
265
+ });
266
+ });
267
+ /* 初始化可分配菜单选中 */
268
+ vm.oldRoleOptAll = {};
269
+ vm.axios.post(vm.api.roleMenuOpt.find,{"roleId":vm.currentRowObj.id}).then(function (resOpt) {
270
+ resOpt.data.forEach(each=>{
271
+ if(each.optPower){
272
+ vm.oldRoleOptAll[each.menuId] = each.optPower.split(",");
273
+ }
274
+ /*if(each.optPower){
275
+ let bindSource = JSON.parse(vm.allMenuObj[each.menuId].bindSource)[0];
276
+ let opt = [];
277
+ vm.ownOptLastData = [];
278
+ vm.getLastLayerData(JSON.parse(each.optPower));
279
+ if(vm.ownOptLastData.length > 0){
280
+ vm.ownOptLastData.forEach(optObj => {
281
+ let optKey = optObj.key;
282
+ if(bindSource == "cview" && optObj.parentTree){
283
+ optKey = optObj.parentTree + "_" + optObj.key;
284
+ }else if(bindSource == "cview" && !optObj.parentTree){
285
+ optKey = "-1_" + optObj.key;
286
+ }
287
+ opt.push(optKey);
288
+ });
289
+ vm.oldRoleOptAll[each.menuId] = opt;
290
+ }
291
+ }*/
292
+ });
293
+ vm.showAllowMenuTree = true;
294
+ });
295
+ },
296
+
297
+ async initRootData(){ //此处代码仅初始化一次
298
+ if(this.caseSup){
299
+ this.linkMenuRootDatas = this.defaultMenu;
300
+ let linkMenu = this.currentRowObj.allowAllotMenu || ""; // 设置已选择
301
+ this.authLinkInitCheck["initCheck"] = (linkMenu || "").split(","); //已选择信息
302
+ }else{
303
+ let res = await this.axios.post(this.api.role.getById,{id:this.loginUser.empowerId || "$$$$"});
304
+ if(res && res.data){
305
+ let linkMenu = res.data.allowAllotMenu;
306
+ this.defaultMenu.forEach(item => {
307
+ if(linkMenu.indexOf(item.id) > -1){
308
+ this.linkMenuRootDatas.push(item);
309
+ }
310
+ });
311
+ }
312
+ }
313
+ let linkMenu = this.currentRowObj.allowAllotMenu || ""; // 设置已选择
314
+ this.authLinkInitCheck["initCheck"] = (linkMenu || "").split(","); //已选择信息
315
+ this.showAuthTree = true;
316
+ /*let vm = this;
317
+ let operateArr = [];
318
+ // 获取代码与按钮名称对应关系(仅初始化一次)
319
+ vm.axios.post(vm.api.data.findToArray, {'typeId': 'c2a9831b1d464862b35a64b522be064c'}).then(function (res) {
320
+ res.data.forEach(function (data) {
321
+ vm.operateNameMap[data["dataName"]] = data["dataCode"];
322
+ operateArr.push(data["dataCode"]);
323
+ });
324
+ });
325
+ vm.axios.post("/sysParamController/getSysParams",{"key":"authModel"}).then(res=>{
326
+ vm.linkMenuModel = ((res.data || {}).paramVal) || "$$$$";
327
+ vm.roleRequestParam["menuModel"] = vm.linkMenuModel; // 权限关联菜单的数据来源
328
+ vm.roleRequestParam["menuSfqy"] = "Y";
329
+ vm.axios.post("/platMenuController/listNoPage",vm.roleRequestParam).then(resRoleLink=>{
330
+ if(vm.caseSup){ // 开发者权限为所有
331
+ vm.linkMenuRootDatas = resRoleLink.data;
332
+ vm.linkDealTreeData(vm.linkMenuRootDatas);
333
+ vm.loadLinkTree(); // 加载关联菜单已选中信息
334
+ }else{
335
+ if(vm.loginUser.empowerId){
336
+ vm.axios.post(vm.api.role.getById,{"id":vm.loginUser.empowerId}).then(roleRes=>{
337
+ let allowArr = (roleRes.data.allowAllotMenu || "").split(",");
338
+ resRoleLink.data.forEach(each=>{
339
+ if(allowArr.indexOf(each["id"]) > -1){
340
+ vm.linkMenuRootDatas.push(each);
341
+ }
342
+ });
343
+ vm.linkDealTreeData(vm.linkMenuRootDatas);
344
+ vm.loadLinkTree(); // 加载关联菜单已选中信息
345
+ })
346
+ }
347
+ }
348
+ });
349
+ });
350
+ vm.initAllowTree();*/
351
+ },
352
+ compareCdss(a,b){
353
+ let vm = this;
354
+ return (vm.dimensionOrder[a] || 0) - (vm.dimensionOrder[b] || 0);
355
+ },
356
+ dealTreeData(){
357
+ let vm = this;
358
+ let data = JSON.parse(JSON.stringify(vm.allDatas)); // 重新序列化对象
359
+ let arr = [];
360
+ data = data.filter(each => {
361
+ if(each["menuModel"] == vm.linkMenuModel || each["cdss"] != vm.cdss){
362
+ return false;
363
+ }
364
+ return true;
365
+ });
366
+ if(vm.caseSup){
367
+ data.forEach(function (each) {
368
+ each["parentCode"] = each["menuSjbh"];
369
+ if(each["menuSjbh"] == '-1'){
370
+ each["parentCode"] = each["menuModel"] + "_model";
371
+ }
372
+ each["menuShowName"] = each["menuName"];
373
+ });
374
+ vm.rootDatas = arr.concat(data);
375
+ return;
376
+ }
377
+ let realInfoArr = []; // 实际需要的数据,清除未勾选的数据,但保留已勾选的上级未选中的数据
378
+ let realInfoIds = [];
379
+ data.forEach(function (item) {
380
+ recursionData(vm.allMenuObj[item.id]);
381
+ });
382
+ function recursionData(data){
383
+ if(data){
384
+ if(realInfoIds.indexOf(data["id"]) == -1){
385
+ if(!vm.menuAllBaseInfo[data.id]){ // 增加额外数据时如果不在这个全菜单信息集合则加进去
386
+ vm.menuAllBaseInfo[data.id] = data;
387
+ }
388
+ realInfoArr.push(data);
389
+ realInfoIds.push(data["id"]);
390
+ }
391
+ recursionData(vm.allMenuObj[data["menuSjbh"]]);
392
+ }
393
+ }
394
+ realInfoArr.forEach(function (each) {
395
+ each["parentCode"] = each["menuSjbh"];
396
+ if(each["menuSjbh"] == '-1'){
397
+ each["parentCode"] = each["menuModel"] + "_model";
398
+ }
399
+ each["menuShowName"] = each["menuName"];
400
+ });
401
+ let result = arr.concat(realInfoArr).sort(vm.sortData);
402
+ vm.rootDatas = result;
403
+ },
404
+ sortData(a,b){ // 数据排序
405
+ if(a["menuLevel"] == b["menuLevel"]){
406
+ return Number(a["menuOrder"]) - Number(b["menuOrder"]);
407
+ }else{
408
+ return Number(a["menuLevel"]) - Number(b["menuLevel"]);
409
+ }
410
+ },
411
+ renderContent(h, {node, data, store}) {
412
+ return (
413
+ <span class={node.level == 1 ? 'model-color':''} style={node.level == 1 ? 'letter-spacing:1px':''}>
414
+ <i class={data.className}></i>
415
+ <span style={node.level == 2 ? 'font-weight:bold':""}>{node.label}</span>
416
+ </span>
417
+ );
418
+ },
419
+ nodeClick(data,node){
420
+ let vm = this;
421
+ if (node.level === 1) { // 第一级数据
422
+ node.expanded = !node.expanded;
423
+ return;
424
+ }
425
+ vm.currentMenuId = data.id; // 当前操作的菜单id
426
+ // vm.operateSetting(data);
427
+ },
428
+ optAllChange(checked){ // 全选
429
+ let vm = this;
430
+ vm.optArr.forEach(function (each) {
431
+ each["checked"] = checked;
432
+ });
433
+ vm.complexFieldArr.forEach(function (each) {
434
+ each["legendChecked"] = checked;
435
+ (each["buttonArr"] || []).forEach(function (button) {
436
+ button["checked"] = checked;
437
+ })
438
+ });
439
+ if(vm.optArr.length > 0){
440
+ vm.operateChange("optArr");
441
+ }
442
+ if(vm.complexFieldArr.length > 0){
443
+ vm.operateChange("complexFieldArr");
444
+ }
445
+ },
446
+ optChange(checked){
447
+ let vm = this;
448
+ vm.optArr.forEach(function (each) {
449
+ each["checked"] = checked;
450
+ });
451
+ vm.complexFieldArr.forEach(function (each) {
452
+ each["legendChecked"] = checked;
453
+ (each["buttonArr"] || []).forEach(function (button) {
454
+ button["checked"] = checked;
455
+ })
456
+ });
457
+ if(vm.optArr.length > 0){
458
+ vm.operateChange("optArr");
459
+ }
460
+ if(vm.complexFieldArr.length > 0){
461
+ vm.operateChange("complexFieldArr");
462
+ }
463
+ },
464
+ operateChange(type){ // 操作权限变更
465
+ let vm = this;
466
+ let CheckedArr = [];
467
+ if(type == "optArr"){
468
+ let arr = vm.allSettingObj[vm.currentMenuId]['optArr'] || [];
469
+ arr.forEach(function (each) {
470
+ each["checked"] && CheckedArr.push(each["value"]);
471
+ })
472
+ }
473
+ if(type == "complexFieldArr"){
474
+ let arr = vm.allSettingObj[vm.currentMenuId]['complexFieldArr'] || [];
475
+ arr.forEach(function (each) {
476
+ each["legendChecked"] && CheckedArr.push(each["legendValue"]);
477
+ (each["buttonArr"] || []).forEach(function (button) {
478
+ button["checked"] && CheckedArr.push(button["value"]);
479
+ })
480
+ })
481
+ }
482
+ vm.comPareOperation(CheckedArr);
483
+ vm.allSettingObj[vm.currentMenuId]['operation'] = CheckedArr.join(",");
484
+ vm.$forceUpdate();
485
+ },
486
+ comPareOperation(checkedArr){ // 比对当前选中的操作权限与初始化的操作权限增删情况
487
+ let vm = this;
488
+ let beforeOperation = (vm.oldRoleOptAll[vm.currentMenuId] || {})["operation"];
489
+ let beforeArr = (beforeOperation || "").split(",");
490
+ let addOperation = [];
491
+ let deleteOperation = [];
492
+ checkedArr.forEach(item => {
493
+ if(beforeArr.indexOf(item) == -1){
494
+ addOperation.push(item);
495
+ }
496
+ });
497
+ beforeArr.forEach(item => {
498
+ if(checkedArr.indexOf(item) == -1){
499
+ deleteOperation.push(item);
500
+ }
501
+ });
502
+ vm.operationAddObj[vm.currentMenuId] = addOperation.join(","); // 增加的操作权限
503
+ vm.operationDeleteObj[vm.currentMenuId] = deleteOperation.join(","); // 删除的操作权限
504
+ },
505
+ cdssChange(cdss){ // 菜单所属在切换时,要同时记下当前选中与取消的项目
506
+ let vm = this;
507
+ let checkedArr = vm.$refs.allowMenuSettingTreeRef.getTreeCheckedNodes("key"); // 菜单更改前树勾选的数据
508
+ let initCheckArr = vm.initCheck["initCheck"] || [];
509
+ // 对比
510
+ initCheckArr = initCheckArr.filter(item=>{ // item是菜单id
511
+ return (vm.menuAllBaseInfo[item] || {})["cdss"] != vm.lastCdss;
512
+ });
513
+ vm.initCheck["initCheck"] = initCheckArr.concat(checkedArr);
514
+ vm.lastCdss = cdss;
515
+ vm.currentMenuId = ""; // 切换时将当前菜单id清空
516
+ },
517
+ operateSetting(data){ // 操作权限设置
518
+ let vm = this;
519
+ vm.complexFieldArr = [];
520
+ vm.optArr=[];
521
+ vm.noSetting = false; // 没配置过
522
+ let collectObj = {};
523
+ let settingObj = vm.allSettingObj[data.id] || vm.oldRoleOptAll[data.id]; // 当前的数据配置
524
+ if(!settingObj){ // 没有做过任何配置,选中全部按钮
525
+ vm.noSetting = true;
526
+ }
527
+ !settingObj && (settingObj = {});
528
+ let currentOpt = vm.menuOptAll[data.id]; // 当前菜单的opt
529
+ vm.allSettingObj[data.id] = collectObj; // 后面操作collectObj这个对象就可以了
530
+
531
+ let alReadySet = "";
532
+ collectObj["enableOperation"] = true;
533
+ collectObj["checkAll"] = settingObj["checkAll"] || false;
534
+ collectObj["operation"] = settingObj["operation"] || "";
535
+ alReadySet = settingObj["operation"] || "";
536
+ let checkedArr = alReadySet ? alReadySet.split(","):[];
537
+ let menuType = data.menuType;
538
+ switch (menuType) {
539
+ case "系统功能":
540
+ case "自定义功能菜单":
541
+ let belong = "";
542
+ if(data.menuType == "系统功能"){
543
+ belong = data.menuXtgn;
544
+ }else{
545
+ belong = data.menuZdygncd;
546
+ }
547
+ vm.axios.post(vm.api.menuOpt.find,{"sscdid":belong}).then(function (res) {
548
+ res.data.forEach(function (opt) {
549
+ let obj = {};
550
+ let value = opt["czbm"];
551
+ if(opt.czbm == "diy"){
552
+ value = opt["czbm"] + "_" + opt["czlx"];
553
+ }
554
+ if(!(currentOpt && currentOpt.indexOf(value) == -1)){
555
+ obj["value"] = value;
556
+ obj["name"] = opt["czlx"];
557
+ obj["checked"] = (checkedArr.indexOf(value))> -1;
558
+ vm.optArr.push(obj);
559
+ }
560
+ collectObj["optArr"] = vm.optArr;
561
+ });
562
+ vm.$forceUpdate();
563
+ if(vm.noSetting){
564
+ collectObj["checkAll"] = true;
565
+ vm.optAllChange(true);
566
+ }
567
+ });
568
+ break;
569
+ case "自定义单表表单":
570
+ if(currentOpt){
571
+ if(currentOpt.indexOf("view") > -1){
572
+ vm.optArr.push({"name":"仅查看","value":"view","checked":(checkedArr.indexOf("view"))> -1});
573
+ }
574
+ if(currentOpt.indexOf("update") > -1){
575
+ vm.optArr.push({"name":"可修改查看","value":"update","checked":(checkedArr.indexOf("update"))> -1});
576
+ }
577
+ }else{
578
+ vm.optArr.push({"name":"仅查看","value":"view","checked":(checkedArr.indexOf("view"))> -1});
579
+ vm.optArr.push({"name":"可修改查看","value":"update","checked":(checkedArr.indexOf("update"))> -1});
580
+ }
581
+ collectObj["optArr"] = vm.optArr;
582
+ if(vm.noSetting){
583
+ collectObj["checkAll"] = true;
584
+ vm.optAllChange(true);
585
+ }
586
+ break;
587
+ case "自定义表单":
588
+ case "自定义表单-VUE":
589
+ vm.axios.post("/formbuttonController/listNoPage",{"viewId":data.menuViewId}).then(function (res) {
590
+ res.data.forEach(function (button) {
591
+ let obj = {};
592
+ let value = vm.operateNameMap[button.buttonType];
593
+ if(vm.operateNameMap[button.buttonType] == "diy"){
594
+ value = vm.operateNameMap[button.buttonType] + "_" + button.buttonName;
595
+ }
596
+ if(!(currentOpt && currentOpt.indexOf(value) == -1)){ // 如果权限里当前值不存在则跳过
597
+ obj["value"] = value;
598
+ obj["name"] = button.buttonName;
599
+ obj["checked"] = (checkedArr.indexOf(value))> -1;
600
+ vm.optArr.push(obj);
601
+ }
602
+ collectObj["optArr"] = vm.optArr;
603
+ });
604
+ vm.$forceUpdate();
605
+ if(vm.noSetting){
606
+ collectObj["checkAll"] = true;
607
+ vm.optAllChange(true);
608
+ }
609
+ });
610
+ break;
611
+ case "复合视图":
612
+ case "复合视图-VUE":
613
+ let complexId = data.menuGzlId;
614
+ vm.axios.post(vm.api.complextab.findAllLinkData,{'viewId': complexId, 'sort': 'sort', 'order': '0'}).then(function (res) {
615
+ let result = res.data;
616
+ result.forEach(function (data) {
617
+ let complexTab = data.complexTab;
618
+ let value = "complexTab:" + complexTab.id;
619
+ if(!(currentOpt && currentOpt.indexOf(value) == -1)){
620
+ let obj = {};
621
+ let buttonArr = [];
622
+ let urlType = complexTab.urlType;
623
+ let linkData = data.linkData || [];
624
+ let lengendValue = "complexTab:"+complexTab.id;
625
+ obj["legendName"] = complexTab.tabName;
626
+ obj["legendValue"] = lengendValue;
627
+ obj["legendChecked"] = checkedArr.indexOf(lengendValue) > -1 ;
628
+ // 下面两个if可以合并为一个forEach,但是为了代码易读性暂不合并
629
+ if((urlType || "") .indexOf("自定义表单") > -1){
630
+ linkData.forEach(function (each) {
631
+ let optValue = "complex:" + complexTab.id + ":" + vm.operateNameMap[each["buttonType"]];
632
+ if(vm.operateNameMap[each["buttonType"]] == "diy"){
633
+ optValue += "_" + each["buttonName"];
634
+ }
635
+ if(!(currentOpt && currentOpt.indexOf(optValue) == -1)){
636
+ let buttonObj = {};
637
+ buttonObj["checked"] = checkedArr.indexOf(optValue) > -1;
638
+ buttonObj["value"] = optValue;
639
+ buttonObj["buttonName"] = each["buttonName"];
640
+ buttonArr.push(buttonObj);
641
+ }
642
+ })
643
+
644
+ }
645
+ if(urlType == "系统功能" || urlType =="自定义功能"){
646
+ linkData.forEach(function (each) {
647
+ let optValue = "complex:" + complexTab.id + ":" + each["czbm"];
648
+ if(!(currentOpt && currentOpt.indexOf(optValue) == -1)){
649
+ let buttonObj = {};
650
+ buttonObj["checked"] = checkedArr.indexOf(optValue) > -1;
651
+ buttonObj["value"] = optValue;
652
+ buttonObj["buttonName"] = each["czlx"];
653
+ buttonArr.push(buttonObj);
654
+ }
655
+ })
656
+ }
657
+ obj["buttonArr"] = buttonArr;
658
+ vm.complexFieldArr.push(obj);
659
+ collectObj["complexFieldArr"] = vm.complexFieldArr;
660
+ }
661
+ });
662
+ vm.$forceUpdate();
663
+ if(vm.noSetting){
664
+ collectObj["checkAll"] = true;
665
+ vm.optAllChange(true);
666
+ }
667
+ });
668
+ break;
669
+ // case "统计报表": // 统计报表未做逻辑,咱不处理,设为禁用
670
+ // break;
671
+ default:
672
+ break;
673
+ }
674
+ },
675
+ /**
676
+ * 保存人员,保存关联菜单,保存可分配菜单
677
+ * @returns {Promise<void>}
678
+ */
679
+ async save(){
680
+ let orgPosUserObj = this.saveOrgPosUser();
681
+ let linkMenuObj = this.saveAuthLinkMenu();
682
+ let submitObj = Object.assign({},orgPosUserObj,linkMenuObj);
683
+ submitObj["roleId"] = this.currentRowObj.id;
684
+ submitObj["userId"] = this.loginUser.id;
685
+
686
+
687
+ let updateArr = [];//修改
688
+ let addArr = [];//新增
689
+ let removeArr = [];//删除
690
+ let menuNameArr = [];
691
+ let removeMenus = [];
692
+ let [addOperationCollect,deleteOperationCollect,insertCollect] = [{},{},{}];
693
+ let allowResult = await this.saveAllowMenu(menuNameArr,removeArr,updateArr,addArr,removeMenus);
694
+ addOperationCollect = allowResult.addOperationCollect;
695
+ deleteOperationCollect = allowResult.deleteOperationCollect;
696
+ insertCollect = allowResult.insertCollect;
697
+ // await this.saveAllowResource(menuNameArr,removeArr,updateArr,addArr,removeMenus,
698
+ // addOperationCollect,deleteOperationCollect,insertCollect);
699
+ submitObj["remark"] = JSON.stringify(menuNameArr);
700
+ submitObj["removeIds"] = removeArr.join(",");
701
+ submitObj["updateObj"] = JSON.stringify(updateArr);
702
+ submitObj["addObj"] = JSON.stringify(addArr);
703
+ submitObj["addOperationCollect"] = JSON.stringify(addOperationCollect);
704
+ submitObj["deleteOperationCollect"] = JSON.stringify(deleteOperationCollect);
705
+ submitObj["insertCollect"] = JSON.stringify(insertCollect);
706
+ submitObj["removeMenuIds"] = removeMenus.join(",");
707
+ this.axios.post(this.api.roleMenuOpt.saveAll,submitObj).then(res => {
708
+ this.$message({
709
+ duration: 1200,
710
+ type: "success",
711
+ message: res.data.operateMessage
712
+ });
713
+ this.loadAllowTree();
714
+ // this.$refs.menuRef && this.$refs.menuRef.getCheckedData();
715
+ // this.$refs.sourceRef && this.$refs.sourceRef.getCheckedData();
716
+ this.$emit("closeSettingDialog");
717
+ });
718
+ },
719
+ /**
720
+ * 保存用户
721
+ * @returns
722
+ */
723
+ saveOrgPosUser(){
724
+ let vm = this;
725
+ let resultArr = vm.$refs.staffSetRef.getCheckedInfo("user") || [];
726
+ let newAttachArr = []; // 当前保存的数据归属集合
727
+ let newMap = {}; // 当前保存的所有数据集合
728
+ resultArr.forEach(function (data) {
729
+ newMap[data.id] = data;
730
+ newAttachArr.push(data.id);
731
+ });
732
+ let removeIdArr = []; // 删除的数据集合
733
+ let tempAttachArr = []; // 新增的数据集合
734
+ let removeEmpowerIdUserIdArr = []; // 移除用户时需要将用户的角色关联id去除EmpowerId
735
+ for(let [key] of Object.entries(vm.userMap)){ // 移除无效的用户归属,userMap用户旧归属合集,新归属不存在则移除
736
+ if(newAttachArr.indexOf(key) == -1){
737
+ removeIdArr.push(vm.userMap[key]);
738
+ removeEmpowerIdUserIdArr.push((vm.userDataMap[key] || {})["userId"]);
739
+ }
740
+ }
741
+ let tempArr = Object.keys(vm.userMap);
742
+ for(let [key,val] of Object.entries(newMap)){ // 原归属中已存在的,但当前选择的归属中不存在,则新增
743
+ if(tempArr.indexOf(key) == -1){
744
+ tempAttachArr.push(val);
745
+ }
746
+ }
747
+ let addAttachArr = [];
748
+ let addEmpowerIdUserIdArr = []; // 添加用户时需要将用户的角色关联id加上
749
+ tempAttachArr.forEach(function (data) {
750
+ let obj = {};
751
+ // 提交只需要几个有效属性,id->userAttach
752
+ obj["userAttach"] = data["id"];
753
+ obj["roleType"] = "user";
754
+ obj["userId"] = data["userId"];
755
+ obj["roleId"] = vm.currentRowObj.id;
756
+ addEmpowerIdUserIdArr.push(data["userId"]);
757
+ addAttachArr.push(obj);
758
+ });
759
+ return {"userList":JSON.stringify(addAttachArr),"removeRoleUserIds":removeIdArr.join(","),
760
+ "removeEmpowerIdUserIds":removeEmpowerIdUserIdArr.join(","),"addEmpowerIdUserIds":addEmpowerIdUserIdArr.join(",")
761
+ };
762
+ },
763
+
764
+ /**
765
+ * 保存可分配菜单
766
+ * @returns
767
+ */
768
+ async saveAllowMenu(menuNameArr,removeArr,updateArr,addArr,removeMenus){
769
+ let vm = this;
770
+ let oldCheckMenu = vm.$refs.menuRef.oldChecked || [];
771
+ let oldCheckMenuObj = vm.$refs.menuRef.oldData || {};
772
+ let checkedArr = vm.$refs.menuRef.getCheckData() || []; // 当前菜单树勾选的数据
773
+
774
+ let updateMenuId = [];//修改id
775
+ let menuArr = [];
776
+ checkedArr.forEach(item => {
777
+ //数据
778
+ let optPower = "";
779
+ if(this.checkMenuOptPower[item.id]){
780
+ optPower = this.checkMenuOptPower[item.id].join(",");
781
+ }
782
+ let dataPower = "";
783
+ if(this.checkMenuDataPower[item.id]){
784
+ dataPower = this.checkMenuDataPower[item.id].join(",");
785
+ }
786
+ let obj = {roleId:vm.currentRowObj.id,menuId:item.id,optPower:optPower, dataPower:dataPower,type:"menu"};
787
+ if(vm.checkMenuOptPower[item.id]){
788
+ obj.lastOpts = vm.checkMenuOptPower[item.id];
789
+ }
790
+ if(oldCheckMenu.indexOf(item.id) > -1){//修改
791
+ obj.id = oldCheckMenuObj[item.id];
792
+ updateArr.push(obj);
793
+ updateMenuId.push(item.id);
794
+ }else if(oldCheckMenu.indexOf(item.id) == -1){//新增
795
+ addArr.push(obj);
796
+ }
797
+ });
798
+ //删除
799
+ oldCheckMenu.forEach(item => {
800
+ if(updateMenuId.indexOf(item) == -1){
801
+ removeArr.push(oldCheckMenuObj[item]);
802
+ removeMenus.push(item);
803
+ }
804
+ });
805
+ /**
806
+ * 修改权限时需要考虑到下级的同步,新增删除与修改
807
+ * 菜单移除:将下级的权限全部移除,这是强制的
808
+ * 菜单新增:提示框询问下级是否同步
809
+ * 按钮权限在菜单权限的基础上进行,只有菜单权限新增修改进行,移除不操作
810
+ * 按钮移除:下级全部移除
811
+ * 按钮新增:提示
812
+ * 这边主要通过PARENT_USER_TREE进行关联操作
813
+ */
814
+ let [addOperationCollect,deleteOperationCollect,insertCollect] = [{},{},{}];
815
+ updateArr.forEach(function (update) {
816
+ let menuId = update.menuId;
817
+ let oldOptArr = vm.oldRoleOptAll[menuId] || [];
818
+ let currentOptArr = update.lastOpts || [];
819
+ let deleteOperation = deleteOperationCollect[menuId] || "";
820
+ let addOperation = addOperationCollect[menuId] || "";
821
+ //原有现无,删除
822
+ oldOptArr.forEach(oldOpt => {
823
+ if(oldOpt && currentOptArr.indexOf(oldOpt) == -1){
824
+ deleteOperation += "," + oldOpt;
825
+ }
826
+ });
827
+ if(deleteOperation){
828
+ deleteOperationCollect[menuId] = deleteOperation;
829
+ }
830
+ //现有原无,新增
831
+ currentOptArr.forEach(currentOpt => {
832
+ if(currentOpt && oldOptArr.indexOf(currentOpt) == -1){
833
+ addOperation += "," + currentOpt;
834
+ }
835
+ });
836
+ if(addOperation){
837
+ addOperationCollect[menuId] = addOperation.substring(1);
838
+ }
839
+ });
840
+ addArr.forEach(function (add) {
841
+ let menuId = add.menuId;
842
+ insertCollect[menuId] = add.lastOpts || [];
843
+ });
844
+ menuArr.forEach(function (each) { // 更新拥有的菜单
845
+ menuNameArr.push(each["menuName"]);
846
+ });
847
+ return {addOperationCollect:addOperationCollect,deleteOperationCollect:deleteOperationCollect,insertCollect:insertCollect};
848
+
849
+ },
850
+
851
+
852
+ async saveAllowResource(menuNameArr,removeArr,updateArr,addArr,removeResource,
853
+ addOperationCollect,deleteOperationCollect,insertCollect){
854
+ let vm = this;
855
+ let oldCheckResource = vm.$refs.sourceRef.oldChecked || [];
856
+ let oldCheckResourceObj = vm.$refs.sourceRef.oldData || {};
857
+ let checkedArr = vm.$refs.sourceRef.getCheckData() || []; // 当前资源树勾选的数据
858
+
859
+ let updateResourceId = [];//修改id
860
+ let resourceArr = [];
861
+ checkedArr.forEach(item => {
862
+ //数据
863
+ let optPower = "";
864
+ if(this.checkSourceOptPower[item.key]){
865
+ optPower = this.checkSourceOptPower[item.key].join(",");
866
+ }
867
+ let dataPower = "";
868
+ if(this.checkSourceDataPower[item.key]){
869
+ dataPower = this.checkSourceDataPower[item.key].join(",");
870
+ }
871
+ let obj = {roleId:vm.currentRowObj.id,menuId:item.key,optPower:optPower, dataPower:dataPower,type:"source"};
872
+ if(vm.checkSourceOptPower[item.key]){
873
+ obj.lastOpts = vm.checkSourceOptPower[item.key];
874
+ }
875
+ if(oldCheckResource.indexOf(item.key) > -1){//修改
876
+ obj.id = oldCheckResourceObj[item.key];
877
+ updateArr.push(obj);
878
+ updateResourceId.push(item.key);
879
+ }else if(oldCheckResource.indexOf(item.key) == -1){//新增
880
+ addArr.push(obj);
881
+ }
882
+ });
883
+ //删除
884
+ oldCheckResource.forEach(item => {
885
+ if(updateResourceId.indexOf(item) == -1){
886
+ removeArr.push(oldCheckResourceObj[item]);
887
+ removeResource.push(item);
888
+ }
889
+ });
890
+ /**
891
+ * 修改权限时需要考虑到下级的同步,新增删除与修改
892
+ * 菜单移除:将下级的权限全部移除,这是强制的
893
+ * 菜单新增:提示框询问下级是否同步
894
+ * 按钮权限在菜单权限的基础上进行,只有菜单权限新增修改进行,移除不操作
895
+ * 按钮移除:下级全部移除
896
+ * 按钮新增:提示
897
+ * 这边主要通过PARENT_USER_TREE进行关联操作
898
+ */
899
+ /*updateArr.forEach(function (update) {
900
+ let menuId = update.menuId;
901
+ let oldOptArr = vm.oldRoleOptAll[menuId] || [];
902
+ let currentOptArr = update.lastOpts || [];
903
+ let deleteOperation = deleteOperationCollect[menuId] || "";
904
+ let addOperation = addOperationCollect[menuId] || "";
905
+ //原有现无,删除
906
+ oldOptArr.forEach(oldOpt => {
907
+ if(oldOpt && currentOptArr.indexOf(oldOpt) == -1){
908
+ deleteOperation += "," + oldOpt;
909
+ }
910
+ });
911
+ if(deleteOperation){
912
+ deleteOperationCollect[menuId] = deleteOperation;
913
+ }
914
+ //现有原无,新增
915
+ currentOptArr.forEach(currentOpt => {
916
+ if(currentOpt && oldOptArr.indexOf(currentOpt) == -1){
917
+ addOperation += "," + currentOpt;
918
+ }
919
+ });
920
+ if(addOperation){
921
+ addOperationCollect[menuId] = addOperation;
922
+ }
923
+ });
924
+ addArr.forEach(function (add) {
925
+ let menuId = add.menuId;
926
+ insertCollect[menuId] = add.lastOpts;
927
+ });*/
928
+ resourceArr.forEach(function (each) { // 更新拥有的菜单
929
+ menuNameArr.push(each["menuName"]);
930
+ });
931
+ },
932
+
933
+
934
+
935
+
936
+
937
+ /**
938
+ * 保存关联菜单
939
+ * @returns {{allowAllotMenu: string}}
940
+ */
941
+ saveAuthLinkMenu(){
942
+ let vm = this;
943
+ let checkedNodes = [];
944
+ if(vm.$refs.authMenuRef){
945
+ checkedNodes = vm.$refs.authMenuRef.getTreeCheckedNodes();
946
+ }
947
+ let checkedSet = new Set(); // 已选择菜单数据
948
+ checkedNodes.forEach(function (data) {
949
+ checkedSet.add(data.id);
950
+ });
951
+ let checkedArr = vm.setToArray(checkedSet);
952
+ return {"allowAllotMenu":checkedArr.join(",")};
953
+ },
954
+
955
+ /**
956
+ * 获取除最底层外的数据
957
+ */
958
+ getAllLevelData(dataArr){
959
+ (dataArr || []).forEach(item => {
960
+ this.allLevelData[item.key] = item;
961
+ if(item.childrens && item.childrens.length > 0){
962
+ this.getAllLevelData(item.childrens);
963
+ }
964
+ });
965
+ },
966
+ setToArray(set){ // set转array
967
+ let arr = [];
968
+ for(let item of set.keys()){
969
+ arr.push(item);
970
+ }
971
+ return arr;
972
+ },
973
+ linkDealTreeData(data){
974
+ data.forEach(item =>{
975
+ if(!item["menuSjbh"] || item["menuSjbh"] == "-1"){
976
+ item["disabled"] = true;
977
+ }
978
+ });
979
+ return data;
980
+ },
981
+
982
+ setMenuPower(optPower,dataPower,optPowerTree,dataPowerTree){
983
+ this.refreshMenuPower = false;
984
+ this.menuOptPower = optPower || [];
985
+ this.menuDataPower = dataPower || [];
986
+ this.menuOptPowerTree = optPowerTree || [];
987
+ this.menuDataPowerTree = dataPowerTree || [];
988
+ this.$nextTick(() => {
989
+ this.refreshMenuPower = true;
990
+ });
991
+ },
992
+
993
+ setSourcePower(optPower,dataPower,optPowerTree,dataPowerTree){
994
+ this.refreshSourcePower = false;
995
+ this.sourceOptPower = optPower || [];
996
+ this.sourceDataPower = dataPower || [];
997
+ this.sourceOptPowerTree = optPowerTree || [];
998
+ this.sourceDataPowerTree = dataPowerTree || [];
999
+ this.$nextTick(() => {
1000
+ this.refreshSourcePower = true;
1001
+ });
1002
+ },
1003
+
1004
+ setMenuLoading(loading){
1005
+ this.loading = loading;
1006
+ },
1007
+
1008
+ setSourceLoading(loading){
1009
+ this.sourceLoading = loading;
1010
+ },
1011
+
1012
+ setCurrentMenuNode(node){
1013
+ this.currentClickMenuNode = node;
1014
+ },
1015
+
1016
+ setCurrentSourceNode(node){
1017
+ this.currentClickSourceNode = node;
1018
+ },
1019
+ }
1020
+ }
1021
+ </script>
1022
+
1023
+ <style scoped>
1024
+ .clearfix{
1025
+ line-height: 30px;
1026
+ text-align: left;
1027
+ }
1028
+ /*.clearfix /deep/ .el-checkbox__label{
1029
+ font-size: 15px;
1030
+ }
1031
+ .clearfix /deep/ .el-checkbox__inner{
1032
+ position: relative;
1033
+ top: -1px;
1034
+ left: 5px;
1035
+ }*/
1036
+ .role-menu-opt-card{
1037
+ height: 100%;
1038
+ }
1039
+ .role-menu-opt-card /deep/ >.el-card__header{
1040
+ padding: 0;
1041
+ }
1042
+ .role-menu-opt-card-card{
1043
+ min-height: 50px;
1044
+ text-align: center;
1045
+ line-height: 50px;
1046
+ }
1047
+ /*.role-menu-opt-card-card /deep/ .el-checkbox__label{
1048
+ color: black;
1049
+ }
1050
+ legend /deep/ .el-checkbox__input.is-checked+.el-checkbox__label{
1051
+ color: black!important;
1052
+ }*/
1053
+ .tab-contain{
1054
+ height: 100%;
1055
+ width: calc(100% - 300px);
1056
+ float: left;
1057
+ box-sizing: border-box;
1058
+ }
1059
+ .aside-tree{
1060
+ width:400px;
1061
+ height: calc(100% - 10px);
1062
+ float: left;
1063
+ padding:0 5px;
1064
+ box-sizing: border-box;
1065
+ }
1066
+ .aside-tree /deep/ .model-color span{
1067
+ font-size: 16px;
1068
+ }
1069
+
1070
+ .aside-tree /deep/ .el-tree > .el-tree-node > .el-tree-node__content{ /* 选中第一级菜单 */
1071
+ background-color:#1A598A;
1072
+ text-decoration: none;
1073
+ border: 1px silver solid;
1074
+ color:#fff;
1075
+ /*text-align: center;*/
1076
+ height: 35px;
1077
+ }
1078
+ .opt-div-class{
1079
+ float: right;
1080
+ width: calc(100% - 400px);
1081
+ box-sizing: border-box;
1082
+ height: 100%;
1083
+ border: 1px solid #ebeef5;
1084
+ border-radius: 4px;
1085
+ padding: 10px 20px;
1086
+ }
1087
+ /*.opt-div-class /deep/ .el-card__body{
1088
+ height: calc(100% - 30px);
1089
+ overflow-y: auto;
1090
+ }*/
1091
+ .opt-button-class{
1092
+ min-width: 80px;
1093
+ float: left;
1094
+ height: 20px;
1095
+ line-height: 20px;
1096
+ margin: 10px 10px 0 0;
1097
+ border: 1px solid rgb(235, 238, 245);
1098
+ padding: 5px 15px;
1099
+ text-align: center;
1100
+ }
1101
+ .opt-button-no-class{
1102
+ float: left;
1103
+ height: 20px;
1104
+ line-height: 20px;
1105
+ margin: 10px 10px 0 0;
1106
+ border: 1px solid rgb(235, 238, 245);
1107
+ padding: 5px 15px;
1108
+ text-align: center;
1109
+ }
1110
+ /*.opt-button-class /deep/ .el-checkbox{
1111
+ height: 20px;
1112
+ line-height: 20px;
1113
+ }
1114
+
1115
+ .opt-button-class /deep/ .el-checkbox__label{
1116
+ color: white;
1117
+ }*/
1118
+
1119
+ fieldset{
1120
+ border: 1px solid #EBEEF5;
1121
+ border-radius: 5px;
1122
+ height: 100%;
1123
+ box-sizing: border-box;
1124
+ padding-left: 20px;
1125
+ }
1126
+ legend{
1127
+ height: 30px;
1128
+ line-height: 30px;
1129
+ }
1130
+ .link-contain{
1131
+ height: 100%;
1132
+ width: 300px;
1133
+ float: right;
1134
+ box-sizing: border-box;
1135
+ border-left: 1px solid #c2c2c2;
1136
+ }
1137
+ .link-header{
1138
+ line-height: 25px;
1139
+ border-bottom: 1px solid #c2c2c2;
1140
+ font-size: 16px;
1141
+ }
1142
+ .link-tabs /deep/ .el-tabs__item{
1143
+ font-size: 16px;
1144
+ }
1145
+
1146
+ .link-tabs /deep/ .el-tabs__nav-scroll{
1147
+ padding: 0 20px;
1148
+ }
1149
+
1150
+ .opt-button-class{
1151
+ background-color: #409EFF;
1152
+ }
1153
+
1154
+ /*.opt-div-class /deep/ .el-checkbox__input.is-checked+.el-checkbox__label{
1155
+ color: white;
1156
+ }
1157
+
1158
+ .opt-div-class /deep/ .el-checkbox, .el-checkbox-button__inner{
1159
+ color: white;
1160
+ }
1161
+
1162
+ .opt-div-class /deep/ .el-checkbox__inner{
1163
+ background-color: white;
1164
+ }
1165
+ .clearfix /deep/ .el-checkbox__input.is-checked+.el-checkbox__label{
1166
+ color: black;
1167
+ }
1168
+ .clearfix /deep/ .el-checkbox, .el-checkbox-button__inner{
1169
+ color: black;
1170
+ }
1171
+
1172
+ .opt-div-class /deep/ .el-checkbox__inner::after{
1173
+ border: 1px solid #409EFF;
1174
+ border-left: 0;
1175
+ border-top: 0;
1176
+ }*/
1177
+
1178
+ /*.link-tabs /deep/ .el-tabs__header{
1179
+ margin: 0;
1180
+ }*/
1181
+
1182
+ .tab-header,.link-header{
1183
+ line-height: 50px;
1184
+ border-bottom: 1px solid #c2c2c2;
1185
+ font-size: 16px;
1186
+ background-color: #E8F1FF;
1187
+ }
1188
+
1189
+ .comomSettiingStyle{
1190
+ height: 100%;
1191
+ width: calc(100% - 20px);
1192
+ float: left;
1193
+ box-sizing: border-box;
1194
+ padding-right: 5px
1195
+ }
1196
+ </style>