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,2402 @@
1
+ <template>
2
+ <el-container style="height: 100%;position: relative" class="menuManageContainer">
3
+ <el-aside style="width: 320px;padding-top: 10px">
4
+ <el-header>
5
+ <el-row style="align-items: center;padding-right: 10px;box-sizing: border-box">
6
+ <el-col :span="9">
7
+ <el-dropdown size="small" split-button type="primary" @click="addNode('addChild')"
8
+ @command="showSet">
9
+ 添加菜单
10
+ <el-dropdown-menu slot="dropdown">
11
+ <el-dropdown-item command="addSame">添加同级菜单</el-dropdown-item>
12
+ </el-dropdown-menu>
13
+ </el-dropdown>
14
+ </el-col>
15
+ <el-col :span="9">
16
+ <el-button type="danger" size="small" icon="el-icon-delete" style="position: relative;left:5px" @click="removeNode">删除菜单</el-button>
17
+ </el-col>
18
+ <el-col :span="3">
19
+ <el-tooltip class="item" effect="dark" :content="!isCollapse?'全部展开':'全部收缩'" placement="right">
20
+ <el-button @click="expendMenu" size="small"
21
+ :icon="(!isCollapse?'el-icon-arrow-down':'el-icon-arrow-up')" circle>
22
+ </el-button>
23
+ </el-tooltip>
24
+ </el-col>
25
+ <el-col :span="3">
26
+ <el-tooltip class="item" effect="dark" content="上传到云仓库" placement="right" v-if="!isMemuPush">
27
+ <el-button @click="$emit('exportMenu')" style="position: relative;left:5px" size="small" icon="el-icon-top-right" circle>
28
+ </el-button>
29
+ </el-tooltip>
30
+ <el-tooltip class="item" effect="dark" content="应用内容推送" placement="right" v-if="isMemuPush">
31
+ <el-button @click="$emit('menuPush')" style="position: relative;left:5px" size="small" icon="el-icon-top-right" circle>
32
+ </el-button>
33
+ </el-tooltip>
34
+ <!--应用推送-->
35
+
36
+ </el-col>
37
+ </el-row>
38
+ <el-row style="margin-top: 8px">
39
+ <el-col :span="24">
40
+ <el-input size="small" style="margin-bottom: 10px;"
41
+ prefix-icon="el-icon-search"
42
+ placeholder="输入关键字进行过滤"
43
+ clearable
44
+ v-model="filterText">
45
+ </el-input>
46
+ </el-col>
47
+ </el-row>
48
+ </el-header>
49
+ <el-aside class="asideTree">
50
+ <common-tree
51
+ v-if="treeShow"
52
+ ref="commonTreeRef"
53
+ :request-url="api.menu.find"
54
+ :request-param="menuInitparam"
55
+ parent-id="menuChiefNum"
56
+ :default-props="defaultProps"
57
+ :filterText="filterText"
58
+ :nodeClick="nodeClick"
59
+ :rightClick="rightClick"
60
+ :expandOnclickNode=false
61
+ :initCallBack="initCallBack"
62
+ :renderContentFunc="renderContent"
63
+ :default-expand-all="isCollapse"
64
+ draggable
65
+ :tree-allow-drag="treeAllowDrag"
66
+ :tree-allow-drop="treeAllowDrop"
67
+ :tree-node-drop="treeNodeDrop"
68
+ :refresh-boolean-proper="refreshBooleanProper"
69
+ :defaulExpand="defaulExpand"
70
+ >
71
+ </common-tree>
72
+
73
+ </el-aside>
74
+ </el-aside>
75
+ <el-main style="padding: 0;box-sizing: border-box;width: 100%;height: 100%;overflow-x: hidden;overflow-y: auto;">
76
+ <el-card class="box-card" align="left" style="width: 100%;height: auto;min-height: 99.8%">
77
+ <el-form :rules="rules" :model="form" ref="form" style="padding-top: 10px" size="small">
78
+ <!--刷新资源池-->
79
+ <el-form-item label="菜单名称" :label-width="formLabelWidth" prop="menuName">
80
+ <el-input clearable v-model="form.menuName" placeholder="请输入菜单名称"
81
+ ref="menuNameRef"></el-input>
82
+ </el-form-item>
83
+ <el-row>
84
+ <el-col :span="12">
85
+ <el-form-item label="菜单类型" :label-width="formLabelWidth" prop="menuType" :rules="plValidate('required')">
86
+ <el-radio-group v-model="form.menuType" style="width: 100%" @change="changeMenuType">
87
+ <el-radio-button v-for="menuType in menuTypeArr" :label="menuType.value"
88
+ :key="menuType.value">{{menuType.label}}
89
+ </el-radio-button>
90
+ </el-radio-group>
91
+ </el-form-item>
92
+ </el-col>
93
+ <el-col :span="12" v-if="form.menuType == 'resourcePool'">
94
+ <el-form-item label="绑定资源" :label-width="formLabelWidth" prop="bindSource">
95
+ <el-cascader style="width: 100%" @change="changeBindSource"
96
+ v-if="sourcesArr.length > 0"
97
+ :options="sourcesArr"
98
+ filterable
99
+ clearable
100
+ v-model="form.bindSource">
101
+ </el-cascader>
102
+ </el-form-item>
103
+ </el-col>
104
+ </el-row>
105
+ <el-row v-show="form.menuType == 'resourcePool'">
106
+ <el-form-item label="权限信息" :label-width="formLabelWidth">
107
+ <el-row>
108
+ <el-col :span="12">
109
+ <el-card class="box-card-class">
110
+ <div slot="header" class="clearfix">
111
+ <el-checkbox label="全选" @change="optChange"
112
+ v-model="form.allOptAuth" style="margin-right: 0"></el-checkbox>
113
+ <span style="font-size: 15px;margin-left: 70px">操作权限</span>
114
+ </div>
115
+ <div class="tree">
116
+ <el-tree
117
+ class="filter-tree"
118
+ :data="operationFormData"
119
+ show-checkbox
120
+ default-expand-all
121
+ @check-change="checkeOptChangeFnc"
122
+ node-key="id"
123
+ ref="operatePermisRef"
124
+ :render-content="renderOperateContent"
125
+ :props="defaultTreeProps">
126
+ </el-tree>
127
+ </div>
128
+ </el-card>
129
+ </el-col>
130
+ <el-col :span="12">
131
+ <el-card class="box-card-class">
132
+ <div slot="header" class="clearfix">
133
+ <el-checkbox label="全选" @change="dataChange"
134
+ v-model="form.allDataAuth" style="margin-right: 0"></el-checkbox>
135
+ <span style="font-size: 15px;margin-left: 70px">数据权限</span>
136
+ </div>
137
+ <div class="tree">
138
+ <el-tree
139
+ class="filter-tree"
140
+ :data="dataPermisFormData"
141
+ show-checkbox
142
+ default-expand-all
143
+ @check-change="checkeDataChangeFnc"
144
+ node-key="id"
145
+ ref="dataPermisRef"
146
+ :props="defaultTreeProps">
147
+ </el-tree>
148
+ </div>
149
+ </el-card>
150
+ </el-col>
151
+ </el-row>
152
+ </el-form-item>
153
+ </el-row>
154
+ <el-row v-show="form.menuType == 'resourcePool'">
155
+ <el-col :span="12">
156
+ <el-form-item label="展示方式" :label-width="formLabelWidth">
157
+ <el-select v-model="form.menuDisplay" placeholder="请选择">
158
+ <el-option
159
+ v-for="item in displayOptions"
160
+ :key="item.value"
161
+ :label="item.label"
162
+ :value="item.value">
163
+ </el-option>
164
+ </el-select>
165
+ <el-tooltip effect="light" content="自定义页面需要在commonHome页面引入" placement="top">
166
+ <i v-show="form.menuDisplay == 'dialog'" class="el-icon-info" style="margin-left: 4px;font-size: 16px;cursor: pointer;color: #5cb6ff;"></i>
167
+ </el-tooltip>
168
+ </el-form-item>
169
+ </el-col>
170
+ <el-col :span="12" v-show="form.menuType == 'resourcePool' && form.menuDisplay == 'dialog'">
171
+ <el-form-item label="弹出框顶部间距" :label-width="formLabelWidth">
172
+ <el-input v-model="form.dialogTopSpaceValue" style="width: 100px;" @change="changeDialogTop()"></el-input>
173
+ <el-select v-model="form.dialogTopSpaceUnit" style="width: 60px;padding-left: 10px" :change="changeDialogTop()">
174
+ <el-option value="%"></el-option>
175
+ <el-option value="px"></el-option>
176
+ </el-select>
177
+ </el-form-item>
178
+ </el-col>
179
+ </el-row>
180
+ <el-row v-show="form.menuType == 'resourcePool' && form.menuDisplay == 'dialog'">
181
+ <el-col :span="12">
182
+ <el-form-item label="弹出框宽度" :label-width="formLabelWidth">
183
+ <el-input v-model="form.dialogWidthValue" style="width: 100px;" @change="changeDialogWidth()"></el-input>
184
+ <el-select v-model="form.dialogWidthUnit" style="width: 60px;padding-left: 10px" :change="changeDialogWidth()">
185
+ <el-option value="%"></el-option>
186
+ <el-option value="px"></el-option>
187
+ </el-select>
188
+ </el-form-item>
189
+ </el-col>
190
+ <el-col :span="12">
191
+ <el-form-item label="弹出框高度" :label-width="formLabelWidth">
192
+ <el-input v-model="form.dialogHeightValue" style="width: 100px;" @change="changeDialogHeight()"></el-input>
193
+ <el-select v-model="form.dialogHeightUnit" style="width: 60px;padding-left: 10px" :change="changeDialogHeight()">
194
+ <el-option value="%"></el-option>
195
+ <el-option value="px"></el-option>
196
+ </el-select>
197
+ </el-form-item>
198
+ </el-col>
199
+ </el-row>
200
+ <el-form-item label="是否显示" :label-width="formLabelWidth">
201
+ <el-switch
202
+ v-model="form.menuRealOpen"
203
+ active-text="启用"
204
+ inactive-text="禁用"
205
+ active-value="Y"
206
+ inactive-value="N">
207
+ </el-switch>
208
+ </el-form-item>
209
+
210
+ <el-form-item label="自定义图标" :label-width="formLabelWidth">
211
+ <el-switch
212
+ @change="changeOpenDiyIcon"
213
+ v-model="form.isOpenDiyIcon"
214
+ active-text="开启"
215
+ inactive-text="关闭"
216
+ active-value="Y"
217
+ inactive-value="N">
218
+ </el-switch>
219
+ </el-form-item>
220
+
221
+ <el-row>
222
+ <el-col :span="12">
223
+ <el-form-item label="菜单图标" :label-width="formLabelWidth">
224
+ <div v-if="!form.isOpenDiyIcon || form.isOpenDiyIcon == 'N'">
225
+ <el-input v-model="form.menuIcon" style="display: none"></el-input>
226
+ <el-button @click="selectIconDialog = true" style="padding: 5px">
227
+ <i :class="defaultMenuIcon" style="font-size:30px"></i>
228
+ </el-button>
229
+ <el-button @click="clearIcon" style="position: relative;top:-5px">清空
230
+ </el-button>
231
+ </div>
232
+
233
+ <div v-if="form.isOpenDiyIcon == 'Y'">
234
+ <pl-image :fkid="form.id? form.id+'_picture' : diyIconFkid"
235
+ :img-width="diyIconObj.imgWidth"
236
+ :img-height="diyIconObj.imgHeight">
237
+ </pl-image>
238
+ </div>
239
+
240
+ </el-form-item>
241
+ </el-col>
242
+ <el-col :span="12">
243
+ <el-form-item label="菜单颜色" :label-width="formLabelWidth">
244
+ <div class="block">
245
+ <el-color-picker v-model="form.menuColor" size="medium"></el-color-picker>
246
+ </div>
247
+ </el-form-item>
248
+ </el-col>
249
+ </el-row>
250
+ <el-form-item label="排序" :label-width="formLabelWidth"
251
+ prop="menuOrder">
252
+ <el-input-number :min="1" size="medium" v-model="form.menuOrder"></el-input-number>
253
+ </el-form-item>
254
+ <el-form-item label="菜单简介" :label-width="formLabelWidth"
255
+ prop="menuBz">
256
+ <el-input type="textarea" v-model="form.menuBz"></el-input>
257
+ </el-form-item>
258
+ <el-form-item label="" :label-width="formLabelWidth">
259
+ <el-button type="primary" icon="el-icon-check" size="small"
260
+ @click="addOrUpdate">{{addOrUpdateButtonText}}
261
+ </el-button>
262
+ <el-button type="danger" icon="el-icon-delete" v-show="form.id"
263
+ @click="removeCurrentNode">删除
264
+ </el-button>
265
+ </el-form-item>
266
+ </el-form>
267
+ </el-card>
268
+ </el-main>
269
+ <el-dialog :close-on-click-modal=false title="选择图标" class="font-dialog" :visible.sync="selectIconDialog"
270
+ width="80%" height="90%"
271
+ top="4vh">
272
+ <font-icon :callback="selectIcon"></font-icon>
273
+ </el-dialog>
274
+ </el-container>
275
+ </template>
276
+
277
+ <script>
278
+ import {FontIcon} from 'sasp-base';
279
+ import {PlSelectTree} from 'sasp-base';
280
+ import PlImage from "../../../components/public/upload/plImage";
281
+
282
+ export default {
283
+ name: "menu-manage-component",
284
+ props: [
285
+ 'menuLocal',
286
+ 'orgDimensionId',
287
+ 'sysFeatureMenuTypeOptions',
288
+ 'customFunctionMenuOptions',
289
+ 'sysFunctionAddressMap',
290
+ 'customFunctionAddressMap',
291
+ 'menuAllData',
292
+ 'moduleAllData',
293
+ 'sourcesArr', //绑定资源下拉树
294
+ 'sourcesObj',
295
+ 'initSysRources',
296
+ 'loadResource',
297
+ ],
298
+ components: {
299
+ PlImage,
300
+ FontIcon,
301
+ PlSelectTree
302
+ },
303
+ data() {
304
+ let validateMenuName = (rule, value, callback) => {
305
+ if (this.form.menuName) {
306
+ this.axios.post(this.api.menu.find, {
307
+ 'menuLevel': this.form.menuLevel,
308
+ 'menuName': this.form.menuName,
309
+ 'menuChiefNum': this.form.menuChiefNum,
310
+ 'cdss':this.form.cdss
311
+ }).then((res) => {
312
+ if (res.data.length > 0) {
313
+ // 修改时菜单名称可一致
314
+ if (res.data[0].id !== this.form.id) {
315
+ callback(new Error('菜单名称重复'))
316
+ } else {
317
+ callback();
318
+ }
319
+ } else {
320
+ callback();
321
+ }
322
+ });
323
+ } else {
324
+ callback();
325
+ }
326
+ };
327
+ return {
328
+ isCollapse: true, // 是展开还是收缩(true收缩,false展开)
329
+ firstLoad: true, // 首次加载展开第一级
330
+ addOrUpdateButtonText: '新增', // 默认添加/修改按钮文字显示
331
+ filterText: '', // 需要过滤节点的关键字
332
+ rootData: [], // tree的根节点数据
333
+ menuArr: [],
334
+ form: {
335
+ id: null,
336
+ menuModel: '',
337
+ menuName: '',
338
+ order: '',
339
+ menuLevel: '',
340
+ menuChiefNum: '',
341
+ menuPath: '',
342
+ menuIsUse: '',
343
+ menuIcon: '',
344
+ menuColor:'#409EFF', //按钮菜单颜色
345
+ menuUrl: '',
346
+ menuDisplay: 'thisPage',//默认选择本页展示
347
+ menuType: 'pMenu', //默认选择父菜单
348
+ bindSource: [], //绑定资源
349
+ menuOrder: 0,
350
+ menuXtgn: '',
351
+ menuZdygncd: '',
352
+ menuForm: '',
353
+ menuFormId: '',
354
+ menuFormView: '',
355
+ menuViewId: '',
356
+ menuShowtype: '',
357
+ menuCondition: '',
358
+ singleFormCondition: '',
359
+ menuGzlId: null,
360
+ menuGzljd: [],
361
+ menuGzltabs: null,
362
+ cdss: this.orgDimensionId,
363
+ menuBz: '',
364
+ menuTreeId: '',
365
+ menuTree: '',
366
+ treewidth: '',
367
+ menuOpts: '',
368
+ operatePermis: [], //操作权限
369
+ dataPermis:[], //数据权限
370
+ allOptAuth:false, //操作权限
371
+ allDataAuth:false, //数据权限
372
+ dialogStyle:"",//弹出框样式
373
+ dialogTopSpaceValue: '5',//弹出框距顶部高度---数值
374
+ dialogTopSpaceUnit: '%',//弹出框距顶部高度---单位
375
+ dialogWidthValue: '90',//弹出框宽度---数值
376
+ dialogWidthUnit: '%',//弹出框宽度---单位
377
+ dialogHeightValue: '90',//弹出框高度---数值
378
+ dialogHeightUnit: '%',//弹出框高度---单位
379
+ isOpenDiyIcon:'N',//自定义图标
380
+ },
381
+ // 提交保存需要提交的字段
382
+ submitFormProps: [
383
+ 'id',
384
+ 'menuModel',
385
+ 'menuName',
386
+ 'order',
387
+ 'menuLevel',
388
+ 'menuChiefNum',
389
+ 'menuPath',
390
+ 'menuIsUse',
391
+ 'menuIcon',
392
+ 'menuColor',
393
+ 'menuUrl',
394
+ 'menuType',
395
+ 'bindSource',
396
+ 'menuOrder',
397
+ 'menuXtgn',
398
+ 'menuZdygncd',
399
+ 'menuForm',
400
+ 'menuFormId',
401
+ 'menuFormView',
402
+ 'menuViewId',
403
+ 'menuShowtype',
404
+ 'menuCondition',
405
+ 'singleFormCondition',
406
+ 'menuGzlId',
407
+ 'menuGzljd',
408
+ 'cdss',
409
+ 'menuBz',
410
+ "menuGzltabs",
411
+ 'menuTreeId',
412
+ 'menuTree',
413
+ 'treewidth',
414
+ 'menuOpts',
415
+ 'menuGzl',
416
+ 'operatePermis',
417
+ 'dataPermis',
418
+ 'menuDisplay',
419
+ 'dialogStyle',
420
+ 'isOpenDiyIcon'
421
+ ],
422
+ formLabelWidth: '120px',
423
+ selectIconDialog: false,
424
+ selectFormDialog: false,
425
+ selectSingleFormDialog: false,
426
+ chooseFlowFormDialog: false,
427
+ chooseStatisticalFormDialog: false,
428
+ chooseCompositeViewDialog: false,
429
+ treeShow: false,
430
+ menuLocalName: {},
431
+ defaultProps: {
432
+ children: 'children',
433
+ label: 'menuName'
434
+ },
435
+ defaultTreeProps:{
436
+ children: 'children',
437
+ label: 'powerName',
438
+ id:'id'
439
+ },
440
+ menuTypeOptions: [
441
+ {label: '父菜单', value: '父菜单'},
442
+ {label: '系统功能', value: '系统功能'},
443
+ {label: '自定义功能菜单', value: '自定义功能菜单'},
444
+ {label: '自定义表单', value: '自定义表单'},
445
+ {label: '自定义表单-VUE', value: '自定义表单-VUE'},
446
+ {label: '自定义单表表单', value: '自定义单表表单'},
447
+ {label: '自定义单表表单-VUE', value: '自定义单表表单-VUE'},
448
+ {label: '工作流', value: '工作流'},
449
+ {label: '工作流-VUE', value: '工作流-VUE'},
450
+ {label: '统计报表', value: '统计报表'},
451
+ {label: '复合视图', value: '复合视图'},
452
+ {label: '复合视图-VUE', value: '复合视图-VUE'},
453
+ {label: 'url资源', value: 'url资源'},
454
+ {label: '数据字典', value: '数据字典'}
455
+ ], //菜单类型options
456
+ menuTypeArr:[
457
+ {label:'父菜单',value: 'pMenu'},
458
+ {label:'资源池',value:'resourcePool'}
459
+ ], //新菜单类型
460
+ menuModelOptions: [],
461
+ menuShowTypeOptions: [{
462
+ value: '列表视图',
463
+ label: '列表视图'
464
+ }, {
465
+ value: '列表&树视图',
466
+ label: '列表&树视图'
467
+ },],
468
+ menuConditionOptions: [],
469
+ menuTypeFormItemLabel: '',
470
+ workFlowNodeOptions: [], //工作流下拉节点options
471
+ dataDictionaryOptions: [], //数据字典下拉节点options
472
+ // 数据下拉selectTree默认字段
473
+ // defaultSelectTreeProps: {
474
+ // parent: 'parentId', // 父级唯一标识
475
+ // value: 'id', // 唯一标识
476
+ // label: 'label', // 标签显示
477
+ // children: 'children', // 子级
478
+ // },
479
+ // selectTree数据列表
480
+ selectTreeOptions: [],
481
+ activeIndex: '1',
482
+ rightClickNodeId: null, // 右击时节点id,如果与上次相同则菜单保持显示
483
+ orginParentId: ['-2'], // 根节点id
484
+ rules: {
485
+ menuName: [
486
+ {
487
+ required: true,
488
+ message: '菜单名称不能为空',
489
+ trigger: 'blur'
490
+ },
491
+ {
492
+ validator: validateMenuName,
493
+ trigger: 'blur'
494
+ }
495
+ ],
496
+ menuModel: [
497
+ {
498
+ required: true,
499
+ message: '菜单模块不能为空',
500
+ trigger: 'blur'
501
+ }
502
+ ],
503
+ menuType: [
504
+ {
505
+ required: true,
506
+ message: '菜单类型不能为空',
507
+ trigger: 'blur'
508
+ }
509
+ ],
510
+ menuOrder: [
511
+ {
512
+ required: true,
513
+ message: '请输入菜单排序',
514
+ trigger: 'blur'
515
+ }
516
+ ],
517
+ bindSource:[
518
+ {
519
+ required:true,
520
+ message: '绑定资源不能为空',
521
+ trigger: 'blur'
522
+ }
523
+ ]
524
+ },
525
+ defaultMenuIcon: 'saspiconfont pl-icon-tuxiang',
526
+ treeCurrentKey: "", // 当前选中的树节点,若重新初始化则继续保持当前选中状态
527
+ treeCheckedKeys: [], // 当前树勾选的节点,若重新初始化则继续保持当前选中状态
528
+ // flowtab设置
529
+ flowTabDialog: false, // 工作流配置项
530
+ flowPreviewDialog: false, // 工作流tab页预览
531
+ // 表单树对话框
532
+ chooseTreeDialog: false, // 选择树
533
+ refresh: false,
534
+ menuLocalDisable: false,
535
+ treeSelectNoOptionsText: '无选项',
536
+ refreshBooleanProper: '', // 触发当前tree组件刷新
537
+ defaulExpand: [], //默认展开的节点
538
+ defaultGzltabs: {
539
+ "tabs":
540
+ {
541
+ "draft": {
542
+ "sfqy": true,
543
+ "defaultShow": false,
544
+ "gzlswitch": true,
545
+ "icon": "saspiconfont pl-icon-cunrucaogaoxiang",
546
+ "tabName": "草稿"
547
+ },
548
+ "pending": {
549
+ "sfqy": true,
550
+ "defaultShow": true,
551
+ "gzlswitch": true,
552
+ "icon": "saspiconfont pl-icon-daichuli3",
553
+ "tabName": "待处理"
554
+ },
555
+ "finished": {
556
+ "sfqy": true,
557
+ "defaultShow": false,
558
+ "gzlswitch": true,
559
+ "icon": "saspiconfont pl-icon-yichuli",
560
+ "tabName": "已处理"
561
+ },
562
+ "end": {
563
+ "sfqy": true,
564
+ "defaultShow": false,
565
+ "gzlswitch": true,
566
+ "icon": "saspiconfont pl-icon-jieshu",
567
+ "tabName": "已办结"
568
+ },
569
+ "cancel": {
570
+ "sfqy": true,
571
+ "defaultShow": false,
572
+ "gzlswitch": true,
573
+ "icon": "saspiconfont pl-icon-chexiao",
574
+ "tabName": "已撤销"
575
+ },
576
+ "stopped": {
577
+ "sfqy": true,
578
+ "defaultShow": false,
579
+ "gzlswitch": true,
580
+ "icon": "saspiconfont pl-icon-yizhongzhi",
581
+ "tabName": "已中止"
582
+ },
583
+ "query": {
584
+ "sfqy": true,
585
+ "defaultShow": false,
586
+ "gzlswitch": false,
587
+ "icon": "saspiconfont pl-icon-chaxun",
588
+ "tabName": "流程查询"
589
+ }
590
+ },
591
+ "tWidth": "", "tHeight": ""
592
+ },
593
+ defaultSelectTreeProps: {
594
+ parent: 'parentId', // 父级唯一标识
595
+ value: 'id', // 唯一标识
596
+ label: 'text', // 标签显示
597
+ children: 'children', // 子级
598
+ },
599
+
600
+ sourcesOptions:[] ,//资源池分组后数据
601
+ operationFormData:[], //操作权限树数据
602
+ dataPermisFormData:[], //数据权限树数据
603
+ operationFormObj:{}, //操作权限节点数据key obj
604
+ dataPermisFormObj:{}, //数据节点权限obj
605
+ isHalfOperationKeyArr:[], //已经在半选中保存数据
606
+ isAllOperationKeyArr:[], //已经在全选中保存的数据
607
+ initCheckOperion:{} ,//默认选中操作权限
608
+ initCheckData:{}, //默认选中数据权限
609
+ refreshProper:'', //权限刷新
610
+
611
+ allCheckOperateKeyArr:[],
612
+ allCheckDataKeyArr:[],
613
+ defaultBindProps:{children: 'children',label: 'powerName',id:'id',key:'powerKey'}, // 资源池权限树组件的配置信息
614
+
615
+ operatePermis:[], //当前操作的操作权限
616
+ dataPermis:[], //当前操作的数据权限
617
+ menuInitparam:{},
618
+ displayOptions:[
619
+ {value: 'thisPage', label: '本页'},
620
+ {value: 'dialog', label: '弹出框'},
621
+ {value: 'newWindow', label: '新窗口'},
622
+ ],//展示方式
623
+ displayDialogStyle:{
624
+ "dialogTopSpace":"",
625
+ "dialogWidth":"",
626
+ "dialogHeight":"",
627
+ },
628
+ currentNode:{},
629
+ remindWarning:false,
630
+ diyIconFkid:'',//添加时生成的uuid
631
+ diyIconObj:{
632
+ imgWidth:80,
633
+ imgHeight:80,
634
+ maxSize:2,
635
+ unit:"MB"
636
+ },
637
+ isMemuPush:false, //是否开启菜单推送
638
+ }
639
+ },
640
+ created() {
641
+ this.menuLocalName["cdss"] = this.orgDimensionId;
642
+ // this.initSysRources(); //处理资源池
643
+ this.initMenuRootData();
644
+ // this.initMenuModelOptions();
645
+ this.initParamConfig();
646
+ },
647
+ watch: {
648
+ loadResource(){
649
+ if(this.remindWarning){
650
+ this.$message.success("资源加载完成!");
651
+ }
652
+ },
653
+ 'form.menuType'() {
654
+ let vm = this;
655
+ //根据 id 查询当前 数据权限和操作权限 getByResId
656
+ // vm.$set(vm.form, 'menuRelUrl', '');
657
+ // let menuType = vm.form.menuType;
658
+ // if ((menuType || '').indexOf('自定义表单') > -1) {
659
+ // vm.menuTypeFormItemLabel = '表单名称';
660
+ // } else if (menuType === '数据字典') {
661
+ // vm.menuTypeFormItemLabel = '表单名称';
662
+ // // vm.axios.post('/dataTypeController/find').then(res => {
663
+ // // let data = res.data;
664
+ // // data.forEach(item => {
665
+ // // vm.dataDictionaryOptions.push({
666
+ // // value: item.id,
667
+ // // label: item.typeName
668
+ // // })
669
+ // // })
670
+ // // });
671
+ //
672
+ // } else if (menuType&& menuType.indexOf('自定义单表表单') > -1) {
673
+ // vm.menuTypeFormItemLabel = '关联表单视图';
674
+ // } else if (vm.form.menuType && vm.form.menuType.indexOf('工作流') > -1) {
675
+ // vm.menuTypeFormItemLabel = '流程选择';
676
+ // }else if ((menuType || '').indexOf('复合视图') > -1) {
677
+ // vm.menuTypeFormItemLabel = '复合视图';
678
+ // } else {
679
+ // vm.menuTypeFormItemLabel = vm.form.menuType;
680
+ // }
681
+ //
682
+ },
683
+ 'form.bindSource'(){
684
+
685
+ },
686
+
687
+ 'form.id'() {
688
+ this.addOrUpdateButtonText = this.form.id ? '保存' : '新增';
689
+ },
690
+ },
691
+ methods: {
692
+
693
+ /**
694
+ * 初始化系统参数配置
695
+ */
696
+ initParamConfig(){
697
+ this.isMemuPush = false;
698
+ this.PARAM_GLOBAL.getByKeyAsync("MenuPush").then(res =>{
699
+ if(res && res.paramVal == '是'){
700
+ this.isMemuPush = true;
701
+ }
702
+ });
703
+ },
704
+
705
+ showSet(command) {
706
+ if (command === 'addSame') {
707
+ this.addNode(command);
708
+ }
709
+ },
710
+ expendMenu(){
711
+ this.isCollapse = !this.isCollapse;
712
+ this.defaulExpand = [];
713
+ // this.treeShow = false;
714
+ // this.treeShow = true;
715
+ },
716
+ renderContent(h, {node, data, store}) {
717
+ if (node.data.menuIsUse == "N") {
718
+ return (
719
+ <span class={node.level === 1 ? 'model-color' : ''}
720
+ style={node.level === 1 ? 'letter-spacing:1px' : ''}>
721
+ <i class={data.menuIcon}></i>
722
+ <span
723
+ style={node.level === 2 ? 'font-weight:bold;text-decoration:line-through;font-style:italic;color:#ccc;'
724
+ : "text-decoration:line-through;font-style:italic;color:#ccc;"}>{node.label}</span>
725
+ </span>
726
+ );
727
+ }
728
+ return (
729
+ <span class={node.level === 1 ? 'model-color' : ''}
730
+ style={node.level === 1 ? 'letter-spacing:1px' : ''}>
731
+ <i class={data.menuIcon}></i>
732
+ <span style={node.level === 2 ? 'font-weight:bold' : ""}>{node.label}</span>
733
+ </span>
734
+ );
735
+ },
736
+ /**
737
+ * 右键菜单事件
738
+ */
739
+ rightClick(event, data, node) {
740
+ let expanded = node.expanded; // node是否展开
741
+ let target = event.target; // 事件源
742
+ if (target.tagName === 'DIV') {
743
+ // 右键时选中当前节点
744
+ target.click();
745
+ } else {
746
+ let pNode = target.parentNode;
747
+ if (target.className === 'el-checkbox__inner') {
748
+ // 右击checkBox模拟click选中
749
+ pNode.parentNode.parentNode.click();
750
+ } else {
751
+ // 右击下拉图标选中当前节点
752
+ pNode.click();
753
+ }
754
+ }
755
+ // 右击仅选中当前节点保持当前节点展开情况不变
756
+ node.expanded = expanded;
757
+ let vm = this;
758
+ if (vm.rightClickNodeId !== data.id) {
759
+ vm.rightClickNodeId = data.id;
760
+ vm.$emit('changeRightMenuStatus', "Y",window.event,node);
761
+ } else {
762
+ vm.$emit('changeRightMenuStatus', "opposite",window.event,node);
763
+ }
764
+ },
765
+ /**
766
+ * 处理右键菜单树选择事件
767
+ */
768
+ handleRightSelect(key) {
769
+ let vm = this;
770
+ switch (key) {
771
+ case "addChild":
772
+ case "addSame":
773
+ vm.addNode(key);
774
+ break;
775
+ case "removeCurrent":
776
+ vm.removeCurrentNode();
777
+ break;
778
+ case "removeCheck":
779
+ vm.removeNode();
780
+ break;
781
+ default:
782
+ console.log("未检测到当前操作的对应方法!");
783
+ break;
784
+ }
785
+ },
786
+ /**
787
+ * 处理右键菜单树选择事件[复制或转移]
788
+ */
789
+ handleRightCopySelect(data,tree){
790
+ let vm = this;
791
+ if(data.key == "copyCurrent") {//当前菜单
792
+ let currentNode = vm.$refs.commonTreeRef.getTreeCurrentNode();//获取当前节点及其子节点
793
+ let copyNodeArr = vm.getCurrentChildren(currentNode, []);//获取当前节点及其子节点的id
794
+ let flag = true;
795
+ //判断菜单移动位置是否在当前位置
796
+ (tree || []).forEach(item => {
797
+ if(copyNodeArr.indexOf(item.value)!= -1){
798
+ vm.$message({
799
+ duration: 1000,
800
+ type: 'warning',
801
+ message: "选择位置与当前位置重复!"
802
+ }
803
+ );
804
+ flag = false;
805
+ }
806
+ });
807
+ if(flag){
808
+ let node = JSON.parse(JSON.stringify(currentNode));
809
+ node.cdss = data.model;
810
+ node.menuChiefNum = data.menu[data.menu.length - 1];
811
+ node.menuPath = "-1," + data.menu.join(",");
812
+ node.menuLevel = data.menu.length + 1;
813
+ let treeArr = vm.changeCurrentNode(node,[]);//获取所有需要插入的且更改过上下级关系的节点
814
+ vm.axios.post(vm.api.menu.addByList,{"addList":JSON.stringify(treeArr)} ).then(res => {
815
+ let {operateSuccess, operateObj, operateMessage} = res.data;
816
+ if(operateSuccess){
817
+ if(data.operate == "copy"){//复制菜单
818
+ vm.$message({
819
+ duration: 1000,
820
+ type: 'success',
821
+ message: "转移成功"
822
+ }
823
+ );
824
+ vm.$emit('func',false);//关闭弹窗
825
+ vm.$nextTick(() => {
826
+ vm.$emit("refreshMenuData");
827
+ });
828
+ //刷新资源池
829
+ vm.initSysRources();
830
+ //复制相关菜单
831
+
832
+ let fkArr = [];
833
+ //批量复制
834
+ treeArr.forEach(item =>{
835
+ fkArr.push({
836
+ oldFkId:item.oldId+"_picture",
837
+ fkId:item.id + "_picture"
838
+ })
839
+ });
840
+ vm.axios.post(vm.api.upload.batchCopyByFkId, {"copyList":JSON.stringify(fkArr)});
841
+
842
+ }else if(data.operate == "copyAndMove"){//复制并移动菜单
843
+ vm.removeCurrentNode("copyAndMove");
844
+ //替换新老数据
845
+ for(let item of treeArr){
846
+ vm.axios.post(vm.api.upload.updateByFkId, {"fkId":item.id + "_picture","oldFkId":item.oldId+"_picture"});
847
+ }
848
+ }
849
+ }
850
+ });
851
+ }
852
+
853
+ }else if(data.key == "copyCheck"){//勾选菜单
854
+ let copyData = this.$refs.commonTreeRef.getTreeCheckedNodes("") || [];//获取所选节点及其子节点
855
+ let paramSetting = {};
856
+ paramSetting["id"] = "id";
857
+ paramSetting["pId"] = "menuChiefNum"; //上级数据
858
+ paramSetting["children"] = "children"; // 设置children可配置
859
+ let checkNode = vm.COMMON_FUNC.buildElTree(copyData,paramSetting)|| [];
860
+ let copyNodeArr = [];
861
+ (checkNode || []).forEach(item => {
862
+ copyNodeArr.push(...(vm.getCurrentChildren(item, [])));//获取所选节点及其子节点的id
863
+ });
864
+ let flag = true;
865
+ //判断菜单移动位置是否在当前位置
866
+ (tree || []).forEach(item => {
867
+ if(copyNodeArr.indexOf(item.value)!= -1){
868
+ vm.$message({
869
+ duration: 1000,
870
+ type: 'warning',
871
+ message: "选择位置与当前位置重复!"
872
+ }
873
+ );
874
+ flag = false;
875
+ }
876
+ });
877
+ if(flag){
878
+ let treeArr = [];
879
+ (checkNode || []).forEach(item => {
880
+ let node = JSON.parse(JSON.stringify(item));
881
+ node.cdss = data.model;
882
+ node.menuChiefNum = data.menu[data.menu.length - 1];
883
+ node.menuPath = "-1," + data.menu.join(",");
884
+ node.menuLevel = data.menu.length + 1;
885
+ treeArr.push(...(vm.changeCurrentNode(node,[])));//获取所有需要插入的且更改过上下级关系的节点
886
+ });
887
+ vm.axios.post(vm.api.menu.addByList,{"addList":JSON.stringify(treeArr)} ).then(res => {
888
+ let {operateSuccess, operateObj, operateMessage} = res.data;
889
+ if(operateSuccess){
890
+ if(data.operate == "copy"){//复制菜单
891
+ vm.$message({
892
+ duration: 1000,
893
+ type: 'success',
894
+ message: "转移成功"
895
+ }
896
+ );
897
+ vm.$emit('func',false);//关闭弹窗
898
+ vm.$nextTick(() => {
899
+ vm.$emit("refreshMenuData");
900
+ });
901
+ //刷新资源池
902
+ vm.initSysRources();
903
+
904
+ let fkArr = [];
905
+ //批量复制
906
+ treeArr.forEach(item =>{
907
+ fkArr.push({
908
+ oldFkId:item.oldId+"_picture",
909
+ fkId:item.id + "_picture"
910
+ })
911
+ });
912
+ vm.axios.post(vm.api.upload.batchCopyByFkId, {"copyList":JSON.stringify(fkArr)});
913
+
914
+ }else if(data.operate == "copyAndMove"){//复制并移动菜单
915
+ vm.removeNode("copyAndMove");
916
+ //替换新老数据
917
+ for(let item of treeArr){
918
+ vm.axios.post(vm.api.upload.updateByFkId, {"fkId":item.id + "_picture","oldFkId":item.oldId+"_picture"});
919
+ }
920
+ }
921
+ }
922
+ });
923
+ }
924
+ }
925
+ },
926
+ /**
927
+ * 获取改变过上下级关系的指定节点的数据[复制或转移]
928
+ *
929
+ */
930
+ changeCurrentNode(node,resultObj,childProper = 'children'){
931
+ let vm = this;
932
+ let oldId = node.id || '';
933
+ if(JSON.stringify(node) != "{}"){
934
+ node.id = vm.COMMON_FUNC.getUuidByParams(32);
935
+ node.oldId = oldId;
936
+ resultObj.push(node);
937
+ }
938
+ if(node[childProper]){
939
+ for(let elem of node[childProper]){
940
+ elem.cdss = node.cdss;
941
+ elem.menuChiefNum = node.id;
942
+ elem.menuPath = node.menuPath + "," + node.id;
943
+ elem.menuLevel = Number(node.menuLevel) + 1;
944
+ elem.oldId = node.id;
945
+ vm.changeCurrentNode(elem,resultObj);
946
+ }
947
+ }
948
+ return resultObj;
949
+ },
950
+ deleteEmptyChildren(data) {
951
+ for (let [key, node] of Object.entries(data)) {
952
+ if (node.children !== null) {
953
+ this.deleteEmptyChildren(node.children)
954
+ }
955
+ if (!node.children) {
956
+ delete data[key].children
957
+ }
958
+ }
959
+ },
960
+ selectDataDictionary(id) {
961
+ //展示项置空
962
+ this.form.menuGzlId = null;
963
+ this.axios.post(this.api.data.getDataTreeByType, {
964
+ 'typeId': id
965
+ }).then(res => {
966
+ //替换label属性
967
+ if (res.data) {
968
+ let data = JSON.parse(JSON.stringify(res.data).replace(/text/g, 'label'));
969
+ this.deleteEmptyChildren(data);
970
+ this.selectTreeOptions = data;
971
+ }
972
+ });
973
+ },
974
+
975
+ initMenuRootData() {
976
+ let vm = this;
977
+ vm.treeShow = false;
978
+ vm.menuInitparam={'order':'MENU_ORDER','cdss':vm.orgDimensionId};
979
+ vm.menuArr = [];
980
+ vm.$nextTick(() => {
981
+ (vm.menuAllData || []).forEach(item => {
982
+ if(item.cdss == vm.orgDimensionId){
983
+ // 设置上级关系与图标
984
+ item.menuParentId = item.menuChiefNum;
985
+ item.className = item.menuIcon;
986
+ // end
987
+ vm.menuArr.push(item);
988
+ }
989
+ });
990
+ vm.treeShow = true;
991
+ })
992
+ },
993
+ initMenuModelOptions() {
994
+ let vm = this;
995
+ (vm.moduleAllData || []).forEach(item => {
996
+ if(item.orgDimensionId == vm.orgDimensionId){
997
+ vm.menuModelOptions.push({
998
+ 'label': item.moduleName || '无',
999
+ 'value': item.id
1000
+ })
1001
+ }
1002
+ });
1003
+ },
1004
+ addNode(key) {
1005
+ this.operationFormData = [];
1006
+ this.dataPermisFormData = [];
1007
+ // 默认添加子元素
1008
+ key = key ? key : "addChild";
1009
+ let vm = this;
1010
+
1011
+ vm.$refs.form.clearValidate();
1012
+ let currentNode = vm.$refs.commonTreeRef.getTreeCurrentNode();
1013
+ let parentId = '';
1014
+ let menuPath = '';
1015
+ let menuLevel = '';
1016
+ let maxMenuOrder = 0;
1017
+ if (key === 'addChild') {
1018
+ if (!currentNode) {
1019
+ // 如果没选中默认添加第一级
1020
+ parentId = '-1';
1021
+ } else {
1022
+ if (currentNode.children && currentNode.children.length > 0) {
1023
+ maxMenuOrder = Number(currentNode.children[currentNode.children.length - 1].menuOrder);
1024
+ }
1025
+ maxMenuOrder = maxMenuOrder + 1;
1026
+ parentId = currentNode.id; // 当前选中节点的id是新增数据的父级,如果没选默认是-1
1027
+ menuPath = (currentNode.menuPath ? currentNode.menuPath + ',' : '-1,') + currentNode.id;
1028
+ menuLevel = Number(currentNode.menuLevel) + 1;
1029
+ if (menuLevel === 1) { // 模块为虚拟假数据,只有level是1的是第一级真数据,所以它们的上级数据是-1
1030
+ parentId = '-1';
1031
+ menuPath = '-1';
1032
+ }
1033
+ }
1034
+ } else if (key === 'addSame') { // 添加同级数据
1035
+ if (!currentNode) {
1036
+ vm.$message('请选中菜单节点');
1037
+ return;
1038
+ }
1039
+ if (vm.orginParentId.indexOf(currentNode.menuChiefNum) > -1) {
1040
+ vm.$message('无法添加同级所属模块,请移步菜单归属添加');
1041
+ return;
1042
+ } else {
1043
+ // 获取所有的node集合
1044
+ let nodesMap = vm.$refs.commonTreeRef.$refs.elTree.store.nodesMap;
1045
+ for (let key in nodesMap) {
1046
+ if (key === currentNode.menuChiefNum) {
1047
+ maxMenuOrder = nodesMap[key].childNodes.length + 1;
1048
+ }
1049
+ }
1050
+ menuPath = currentNode.menuPath;
1051
+ menuLevel = currentNode.menuLevel;
1052
+ parentId = currentNode.menuChiefNum;
1053
+ }
1054
+ }
1055
+ vm.menuLocalDisable = parentId !== '-1';
1056
+ // 焦点事件完成后设置初始化数据
1057
+ vm.$refs.menuNameRef.$el.children[0].focus();
1058
+ // 初始化form表单数据,并赋值一些初始值
1059
+ vm.form = {};
1060
+ vm.form.menuChiefNum = parentId;
1061
+ vm.form.menuPath = menuPath || "-1";
1062
+ vm.form.menuLevel = menuLevel || "1";
1063
+ // vm.form.menuOrder = maxMenuOrder;
1064
+ // vm.form.menuIsUse = "Y";
1065
+ // vm.form.menuRealOpen = "Y";
1066
+ vm.$set(vm.form,'menuOrder',maxMenuOrder);
1067
+ vm.$set(vm.form,'menuIsUse','Y');
1068
+ vm.$set(vm.form,'menuRealOpen','Y');
1069
+
1070
+ vm.$set(vm.form,'menuType','pMenu'); //默认父菜单
1071
+ vm.$set(vm.form,'menuDisplay','thisPage'); //菜单默认展示方式
1072
+ //菜单默认弹出框样式
1073
+ vm.$set(vm.form,"dialogTopSpaceValue","5");//弹出框距顶部位置
1074
+ vm.$set(vm.form,"dialogTopSpaceUnit","%");
1075
+ vm.$set(vm.form,"dialogWidthValue","90");//弹出框宽度
1076
+ vm.$set(vm.form,"dialogWidthUnit","%");
1077
+ vm.$set(vm.form,"dialogHeightValue","90");//弹出框高度
1078
+ vm.$set(vm.form,"dialogHeightUnit","%");
1079
+ vm.$set(vm.form,"isOpenDiyIcon","N"); //默认自定义菜单关闭
1080
+ vm.form.menuColor = '#409EFF'; //菜单默认颜色
1081
+ vm.form.cdss = this.orgDimensionId;
1082
+ if (currentNode) {
1083
+ vm.form.menuModel = currentNode.menuModel;
1084
+ }
1085
+ this.defaultMenuIcon = 'saspiconfont pl-icon-tuxiang';
1086
+ // vm.form.menuModel = (currentNode || {}).menuModel;
1087
+ vm.diyIconFkid = vm.COMMON_FUNC.getUuidByParams(32);
1088
+ },
1089
+ addData() {
1090
+ let vm = this;
1091
+ // 重名校验在表单验证已经做过了,这里就不再操作了(validateMenuName)。
1092
+ // 复制数据防止树数据污染
1093
+ let submitObj = Object.assign({}, vm.form);
1094
+ let menuRealOpen = submitObj["menuRealOpen"]; // 当前表单中菜单启用的状态
1095
+ let menuIsUse = submitObj["menuIsUse"]; // 数据库中存储的状态(包括智能建表的数据)
1096
+ let noChange = true; // 当前的菜单启用状态是否发生了更改
1097
+ if (menuIsUse && menuIsUse.indexOf(";") > -1) { // 处理智能建表中的启用状态
1098
+ noChange = menuRealOpen === menuIsUse.substring(0, menuIsUse.indexOf(";"));
1099
+ menuIsUse = menuRealOpen + menuIsUse.substring(menuIsUse.indexOf(";"), menuIsUse.length);
1100
+ } else {
1101
+ if (vm.form.id) { // 如果是修改,判断菜单的启用状态有没有改变
1102
+ noChange = menuRealOpen === menuIsUse;
1103
+ }
1104
+ menuIsUse = menuRealOpen;
1105
+ }
1106
+ submitObj["menuIsUse"] = menuIsUse;
1107
+ delete submitObj["menuRealOpen"];
1108
+
1109
+ let treeComp = vm.$refs.commonTreeRef;
1110
+ let menuGzljd = (vm.form.menuGzljd || []).join(',');
1111
+ let form = {};
1112
+ for (let prop of vm.submitFormProps) {
1113
+ form[prop] = submitObj[prop];
1114
+ }
1115
+ form.menuGzljd = menuGzljd;
1116
+
1117
+ // 处理菜单链接 start
1118
+ let menuType = form.menuType;
1119
+ let settingId = vm.form.id || vm.COMMON_FUNC.getUUID();
1120
+ switch (menuType) {
1121
+ case '自定义表单':
1122
+ case '数据字典':
1123
+ form.menuRelUrl = '/jsp/framework/work/form/commonjsp.jsp?viewId=' + form.menuViewId +
1124
+ '&treeId=' + form.menuTreeId + '&xskd=' + form.treewidth + '&conditionId=' + form.menuCondition;
1125
+ break;
1126
+ case '自定义表单-VUE':
1127
+ form.menuRelUrl = '/commonHome/tablePage/' + form.menuViewId;
1128
+ break;
1129
+ case '自定义单表表单':
1130
+ form.menuRelUrl = '/jsp/framework/work/form/commonsinglejsp.jsp?viewId=' + form.menuViewId +
1131
+ '&condition=(' + form.singleFormCondition + ')';
1132
+ break;
1133
+ case '自定义单表表-VUE':
1134
+ form.menuRelUrl = '/commonHome/commonSingleForm/' + form.menuViewId + '?condition=(' + form.singleFormCondition + ')';
1135
+ break;
1136
+ case '工作流':
1137
+ form.menuRelUrl = '/jsp/framework/work/flow/flowInstFrame.jsp?flowId=' + form.menuGzlId +
1138
+ "&settingId=" + settingId;
1139
+ form["id"] = settingId;
1140
+ break;
1141
+ case "工作流-VUE":
1142
+ form.menuRelUrl = '/commonHome/flowInst/' + form.menuGzlId;
1143
+ form["id"] = settingId;
1144
+ break;
1145
+ case '统计报表':
1146
+ form.menuRelUrl = '/jsp/framework/work/stats/commonStatis.jsp?reportId=' + form.menuGzlId;
1147
+ break;
1148
+ case '复合视图':
1149
+ form.menuRelUrl = '/jsp/framework/work/cview/complexcommon.jsp?viewId=' + form.menuGzlId;
1150
+ break;
1151
+ case '复合视图-VUE':
1152
+ form.menuRelUrl = '/commonHome/complexShow/' + form.menuGzlId;
1153
+ break;
1154
+ case '系统功能':
1155
+ form.menuRelUrl = vm.sysFunctionAddressMap[form.menuXtgn];
1156
+ break;
1157
+ case '自定义功能菜单':
1158
+ form.menuRelUrl = vm.customFunctionAddressMap[form.menuZdygncd];
1159
+ break;
1160
+ case 'url资源':
1161
+ break;
1162
+ default:
1163
+ break;
1164
+ }
1165
+ // 处理菜单链接 end
1166
+
1167
+ // 菜单初始化完成未做任何操作直接添加,我们给数据赋值
1168
+ !vm.form.menuChiefNum && (vm.form.menuChiefNum = '-1');
1169
+ !vm.form.menuPath && (vm.form.menuPath = '-1');
1170
+ !vm.form.menuLevel && (vm.form.menuLevel = '1');
1171
+
1172
+ vm.axios.post(vm.api.menu.add, form).then(res => {
1173
+ if (res.data.operateSuccess) {
1174
+ let obj = res.data.operateObj;
1175
+ obj.menuParentId = obj.menuChiefNum;
1176
+ let parentCode = obj.menuChiefNum;
1177
+ //直接在tree后面append
1178
+ if (!obj.menuChiefNum || obj.menuChiefNum === '-1') { // 一级菜单是假数据,上级编号单独处理
1179
+ parentCode = obj['menuModel'] + '_model';
1180
+ let nodesMap = treeComp.getAllNode();
1181
+ if (!nodesMap[parentCode]) {
1182
+ vm.$message({
1183
+ duration: 1000,
1184
+ type: 'success',
1185
+ message: res.data.operateMessage
1186
+ }
1187
+ );
1188
+ vm.treeShow = false;
1189
+ vm.$nextTick(() => {
1190
+ vm.$emit("refreshMenuData");
1191
+ });
1192
+ return;
1193
+ }
1194
+ }
1195
+ treeComp.defaultTreeAppend(obj, parentCode);
1196
+ vm.$message({
1197
+ duration: 1000,
1198
+ type: 'success',
1199
+ message: res.data.operateMessage
1200
+ }
1201
+ );
1202
+ }
1203
+ });
1204
+ },
1205
+ addOrUpdate() {
1206
+ let vm = this;
1207
+ vm.$refs.form.validate(valid => {
1208
+ if (!valid) {
1209
+ return;
1210
+ }
1211
+ // 重名校验在表单验证已经做过了,这里就不再操作了(validateMenuName)。
1212
+ // 复制数据防止树数据污染
1213
+ let submitObj = JSON.parse(JSON.stringify(vm.form));
1214
+ let menuRealOpen = submitObj["menuRealOpen"]; // 当前表单中菜单启用的状态
1215
+ let menuIsUse = submitObj["menuIsUse"]; // 数据库中存储的状态(包括智能建表的数据)
1216
+ let noChange = true; // 当前的菜单启用状态是否发生了更改
1217
+ if (menuIsUse && menuIsUse.indexOf(";") > -1) { // 处理智能建表中的启用状态
1218
+ noChange = menuRealOpen === menuIsUse.substring(0, menuIsUse.indexOf(";"));
1219
+ menuIsUse = menuRealOpen + menuIsUse.substring(menuIsUse.indexOf(";"), menuIsUse.length);
1220
+ } else {
1221
+ if (vm.form.id) { // 如果是修改,判断菜单的启用状态有没有改变
1222
+ noChange = menuRealOpen === menuIsUse;
1223
+ }
1224
+ menuIsUse = menuRealOpen;
1225
+ }
1226
+
1227
+ //菜单绑定资源
1228
+ if(submitObj["bindSource"] && typeof submitObj["bindSource"] == "object"){
1229
+ submitObj["bindSource"] = JSON.stringify(submitObj["bindSource"]);
1230
+ }
1231
+ //计算所有选中的数据权限和操作权限
1232
+ if(vm.$refs.operatePermisRef){
1233
+ //遍历所有选中节点,判断下级是否选中,如果下级选中了则判断下下级,如果找不到下级或者下级未被选中 则保存当前节点id
1234
+ let checkeOpertionArr = vm.$refs.operatePermisRef.getCheckedKeys(); //全选的节点
1235
+ //递归过滤 isHalfOperationKeyArr
1236
+ let opertionKeyArr = [];
1237
+ this.initSelectKey(this.operationFormData,checkeOpertionArr,opertionKeyArr);
1238
+ submitObj["operatePermis"] = opertionKeyArr.join(","); //操作权限
1239
+ }
1240
+
1241
+ if(vm.$refs.dataPermisRef){
1242
+ let checkDataArr = vm.$refs.dataPermisRef.getCheckedKeys(); //选中的数据权限
1243
+ let dataKeyArr = [];
1244
+ this.initSelectKey(this.dataPermisFormData,checkDataArr,dataKeyArr);
1245
+ submitObj["dataPermis"] = dataKeyArr.join(","); //数据权限
1246
+ }
1247
+ submitObj["menuIsUse"] = menuIsUse;
1248
+ delete submitObj["menuRealOpen"];
1249
+ let treeComp = vm.$refs.commonTreeRef;
1250
+ let menuGzljd = (vm.form.menuGzljd || []).join(',');
1251
+ let form = {};
1252
+ submitObj["dialogStyle"] = JSON.stringify(vm.displayDialogStyle);
1253
+ for (let prop of vm.submitFormProps) {
1254
+ form[prop] = submitObj[prop];
1255
+ }
1256
+ form.menuGzljd = menuGzljd;
1257
+
1258
+ // 处理菜单链接 start
1259
+ // 处理菜单链接 end
1260
+
1261
+ // 菜单初始化完成未做任何操作直接添加,我们给数据赋值
1262
+ !form.menuChiefNum && (form.menuChiefNum = '-1');
1263
+ !form.menuPath && (form.menuPath = '-1');
1264
+ !form.menuLevel && (form.menuLevel = '1');
1265
+ if (!vm.form.id) {
1266
+ /** add */
1267
+ vm.axios.post(vm.api.menu.addMenuopts, form).then(res => {
1268
+ let {operateSuccess, operateObj, operateMessage} = res.data;
1269
+ if (operateSuccess) {
1270
+ //添加后并选中
1271
+ vm.defaulExpand = [operateObj.id];
1272
+ let obj = operateObj;
1273
+ obj.menuParentId = obj.menuChiefNum;
1274
+ let parentCode = obj.menuChiefNum;
1275
+ //直接在tree后面append
1276
+ if (!obj.menuChiefNum || obj.menuChiefNum === '-1') { // 一级菜单是假数据,上级编号单独处理
1277
+ parentCode = obj['menuModel'] + '_model';
1278
+ let nodesMap = treeComp.getAllNode();
1279
+ if (!nodesMap[parentCode]) {
1280
+ vm.$message({
1281
+ duration: 1000,
1282
+ type: 'success',
1283
+ message: operateMessage
1284
+ }
1285
+ );
1286
+ vm.treeShow = false;
1287
+ vm.$nextTick(() => {
1288
+ vm.$emit("refreshMenuData");
1289
+ });
1290
+ return;
1291
+ }
1292
+ }
1293
+ treeComp.defaultTreeAppend(obj, parentCode);
1294
+ vm.$message({
1295
+ duration: 1000,
1296
+ type: 'success',
1297
+ message: operateMessage
1298
+ }
1299
+ );
1300
+ // 设置当前树选中节点
1301
+ vm.$refs.commonTreeRef.setTreeCurrentKey(operateObj.id);
1302
+ // 根据 data 获取tree组件中的 node
1303
+ let node = vm.$refs.commonTreeRef.getNode(operateObj);
1304
+ vm.nodeClick(operateObj,node);
1305
+
1306
+ // 添加完成后清除表单数据
1307
+ // vm.form = {};
1308
+
1309
+ //刷新资源池
1310
+ vm.initSysRources();
1311
+
1312
+ //更新自定义图标
1313
+ vm.axios.post(vm.api.upload.updateByFkId, {"fkId":operateObj.id + "_picture","oldFkId":this.diyIconFkid});
1314
+
1315
+ this.diyIconFkid = this.COMMON_FUNC.getUuidByParams(32); //刷新
1316
+ }
1317
+ });
1318
+
1319
+ } else {
1320
+ /** update */
1321
+ vm.axios.post(vm.api.menu.updateMenuOpts, form).then(res => {
1322
+ let {operateSuccess, operateObj,operateMessage} = res.data;
1323
+ let obj = operateObj;
1324
+ if (operateSuccess) {
1325
+ let children=[];
1326
+ if(vm.currentNode.children){
1327
+ children = vm.currentNode.children;
1328
+ }
1329
+ let cNode = vm.$refs.commonTreeRef.getTreeCurrentNode();
1330
+ vm.$message({
1331
+ duration: 1000,
1332
+ type: 'success',
1333
+ message: operateMessage
1334
+ }
1335
+ );
1336
+ let dataArr = vm.getDataChildren(cNode);
1337
+ // 生成数据至后台交互
1338
+ let menuList = [];
1339
+ dataArr.forEach(value => {
1340
+ let menuObj = {};
1341
+ menuObj['id'] = value.id;
1342
+ menuObj['menuModel'] = cNode.menuModel;
1343
+ menuList.push(menuObj);
1344
+ });
1345
+ vm.axios.post(vm.api.menu.batchUpdateMenu, {
1346
+ 'menuStr': JSON.stringify(menuList)
1347
+ }).then(tempData => {
1348
+ let nodesMap = vm.$refs.commonTreeRef.getAllNode();
1349
+ menuList.forEach(item => {
1350
+ nodesMap[item["id"]].data.menuModel = cNode.menuModel;
1351
+ })
1352
+ });
1353
+ let node = vm.$refs.commonTreeRef.getNode(obj.id);
1354
+ if(children.length>0){
1355
+ obj.children = children;
1356
+ }
1357
+ if (!noChange) { // 修改了菜单的启用状态,修改下级菜单的启用状态
1358
+ vm.axios.post(vm.api.menu.updateSfqyBySjbh, {
1359
+ "menuIsUse": menuRealOpen,
1360
+ "menuPath": vm.form.id
1361
+ }).then(res => {
1362
+ // vm.$emit("refresh`MenuData");
1363
+ Object.assign(node.data,obj);
1364
+ vm.$refs.commonTreeRef.defaultTreeUpdate(obj.id, obj);
1365
+ });
1366
+ }else{
1367
+ //vm.$emit("refreshMenuData");
1368
+ Object.assign(node.data,obj);
1369
+ vm.$refs.commonTreeRef.defaultTreeUpdate(obj.id, obj);
1370
+ }
1371
+ setTimeout(()=>{
1372
+ vm.defaulExpand=Object.assign([],obj.id)
1373
+ vm.nodeClick(obj,node);
1374
+ },0);
1375
+ //刷新资源池
1376
+ vm.initSysRources();
1377
+
1378
+ }
1379
+ });
1380
+ }
1381
+ });
1382
+ },
1383
+ /**
1384
+ * 获取指定节点的所有下级(包括自己)的id
1385
+ */
1386
+ getCurrentChildren(node, allNodeArr, childProper = 'children') {
1387
+ if (node.id !== '-1') {
1388
+ allNodeArr.push(node.id);
1389
+ }
1390
+ if (node[childProper]) {
1391
+ for (let elem of node[childProper]) {
1392
+ this.getCurrentChildren(elem, allNodeArr);
1393
+ }
1394
+ }
1395
+ return allNodeArr;
1396
+ },
1397
+ /**
1398
+ * 删除当前菜单
1399
+ */
1400
+ removeCurrentNode(data) {
1401
+ let vm = this;
1402
+ let currentNode = vm.$refs.commonTreeRef.getTreeCurrentNode();
1403
+ let removeNodeArr = vm.getCurrentChildren(currentNode, []);
1404
+ if (vm.orginParentId.indexOf(currentNode.menuChiefNum) > -1) {
1405
+ vm.$message('无法删除所属模块');
1406
+ return;
1407
+ }
1408
+ if(!data){
1409
+ vm.$confirm("确定删除该菜单节点下面的所有数据?", '警告', {
1410
+ confirmButtonText: '确定',
1411
+ cancelButtonText: '取消',
1412
+ }).then(() => {
1413
+ vm.axios.post(vm.api.menu.delete, {
1414
+ 'ids': removeNodeArr.join(',')
1415
+ }).then(res => {
1416
+ if (res.data.operateSuccess) {
1417
+ vm.$refs.commonTreeRef.defaultTreeRemove(removeNodeArr);
1418
+ //删除之后重置form表单数据
1419
+ Object.assign(vm.$data.form, vm.$options.data().form);
1420
+ vm.defaultMenuIcon = vm.$options.data().defaultMenuIcon;
1421
+ }
1422
+ vm.$message({
1423
+ duration: 1000,
1424
+ type: 'success',
1425
+ message: res.data.operateMessage
1426
+ }
1427
+ );
1428
+ })
1429
+ }).catch(() => {
1430
+ this.$message({
1431
+ duration: 1000,
1432
+ type: 'info',
1433
+ message: '已取消'
1434
+ });
1435
+ });
1436
+ }else{
1437
+ vm.axios.post(vm.api.menu.delete, {
1438
+ 'ids': removeNodeArr.join(',')
1439
+ }).then(res => {
1440
+ if (res.data.operateSuccess) {
1441
+ vm.$refs.commonTreeRef.defaultTreeRemove(removeNodeArr);
1442
+ //删除之后重置form表单数据
1443
+ Object.assign(vm.$data.form, vm.$options.data().form);
1444
+ vm.defaultMenuIcon = vm.$options.data().defaultMenuIcon;
1445
+ }
1446
+ vm.$message({
1447
+ duration: 1000,
1448
+ type: 'success',
1449
+ message: '转移成功'
1450
+ }
1451
+ );
1452
+ vm.$emit('func',false);//关闭弹窗
1453
+ vm.$nextTick(() => {
1454
+ vm.$emit("refreshMenuData");
1455
+ });
1456
+ //刷新资源池
1457
+ vm.initSysRources();
1458
+ })
1459
+ }
1460
+ },
1461
+ /**
1462
+ * 删除勾选菜单
1463
+ */
1464
+ removeNode(data) {
1465
+ let removeArr = this.$refs.commonTreeRef.getTreeCheckedNodes("key");
1466
+ if (removeArr.length === 0) {
1467
+ this.$message("请勾选需要删除的菜单节点!");
1468
+ return;
1469
+ }
1470
+ if(!data){
1471
+ this.$confirm('确定删除已勾选菜单节点下面的所有数据?', '警告', {
1472
+ confirmButtonText: '确定',
1473
+ cancelButtonText: '取消',
1474
+ }).then(() => {
1475
+ this.axios.post(this.api.menu.delete, {
1476
+ 'ids': removeArr.join(',')
1477
+ }).then(res => {
1478
+ if (res.data.operateSuccess) {
1479
+ this.$refs.commonTreeRef.defaultTreeRemove(removeArr);
1480
+ //删除之后重置form表单数据
1481
+ Object.assign(this.$data.form, this.$options.data().form);
1482
+ this.defaultMenuIcon = this.$options.data().defaultMenuIcon;
1483
+ }
1484
+ this.$message({
1485
+ duration: 1000,
1486
+ type: 'success',
1487
+ message: res.data.operateMessage
1488
+ }
1489
+ );
1490
+ })
1491
+ }).catch(() => {
1492
+ this.$message({
1493
+ duration: 1000,
1494
+ type: 'info',
1495
+ message: '已取消'
1496
+ });
1497
+ })
1498
+ }else{
1499
+ this.axios.post(this.api.menu.delete, {
1500
+ 'ids': removeArr.join(',')
1501
+ }).then(res => {
1502
+ if (res.data.operateSuccess) {
1503
+ this.$refs.commonTreeRef.defaultTreeRemove(removeArr);
1504
+ //删除之后重置form表单数据
1505
+ Object.assign(this.$data.form, this.$options.data().form);
1506
+ this.defaultMenuIcon = this.$options.data().defaultMenuIcon;
1507
+ }
1508
+ this.$message({
1509
+ duration: 1000,
1510
+ type: '转移成功',
1511
+ message: res.data.operateMessage
1512
+ });
1513
+ this.$emit('func',false);//关闭弹窗
1514
+ this.$nextTick(() => {
1515
+ this.$emit("refreshMenuData");
1516
+ });
1517
+ //刷新资源池
1518
+ this.initSysRources();
1519
+ })
1520
+ }
1521
+ },
1522
+ nodeClick(data, node) {
1523
+ let vm = this;
1524
+ vm.currentNode=JSON.parse(JSON.stringify(node.data));
1525
+ let e = window.event;
1526
+ if (!vm.form.id) {
1527
+ vm.$refs.form.validate(function (valid) {
1528
+ if (valid) {
1529
+ vm.$confirm('检测到菜单未保存,是否要提交?', '警告', {
1530
+ confirmButtonText: '确定',
1531
+ cancelButtonText: '取消',
1532
+ }).then(function () {
1533
+ vm.addData(); // 添加数据
1534
+ vm.nodeClickEvent(data, node, e);
1535
+ }).catch(function () {
1536
+ vm.nodeClickEvent(data, node, e);
1537
+ })
1538
+ } else {
1539
+ vm.nodeClickEvent(data, node, e);
1540
+ }
1541
+ });
1542
+ } else {
1543
+ vm.nodeClickEvent(data, node, e);
1544
+ }
1545
+ },
1546
+ nodeClickEvent(data, node, e) {
1547
+ let vm = this;
1548
+ if(!this.loadResource){
1549
+ this.remindWarning = true;
1550
+ this.$message.warning("资源未加载完成,请稍等!");
1551
+ return;
1552
+ }
1553
+ if(!data.menuDisplay){
1554
+ data.menuDisplay = "thisPage";
1555
+ }
1556
+ if(data.dialogStyle){//数据中存在弹出框样式信息
1557
+ vm.displayDialogStyle = JSON.parse(data.dialogStyle);
1558
+ //处理弹出框顶部间距
1559
+ let dialogTopSpace = vm.displayDialogStyle["dialogTopSpace"];
1560
+ if(dialogTopSpace.indexOf("%")>= 0){
1561
+ vm.$set(data,"dialogTopSpaceValue",dialogTopSpace.split("%")[0]);
1562
+ vm.$set(data,"dialogTopSpaceUnit","%");
1563
+ }else if(dialogTopSpace.indexOf("px") >= 0){
1564
+ vm.$set(data,"dialogTopSpaceValue",dialogTopSpace.split("px")[0]);
1565
+ vm.$set(data,"dialogTopSpaceUnit","px");
1566
+ }else if(dialogTopSpace.indexOf("vh") >= 0){
1567
+ vm.$set(data,"dialogTopSpaceValue",dialogTopSpace.split("vh")[0]);
1568
+ vm.$set(data,"dialogTopSpaceUnit","%");
1569
+ }
1570
+ //处理弹出框宽度
1571
+ let dialogWidth = vm.displayDialogStyle["dialogWidth"];
1572
+ if(dialogWidth.indexOf("%")>= 0){
1573
+ vm.$set(data,"dialogWidthValue",dialogWidth.split("%")[0]);
1574
+ vm.$set(data,"dialogWidthUnit","%");
1575
+ }else if(dialogWidth.indexOf("px") >= 0){
1576
+ vm.$set(data,"dialogWidthValue",dialogWidth.split("px")[0]);
1577
+ vm.$set(data,"dialogWidthUnit","px");
1578
+ }else if(dialogWidth.indexOf("vh") >= 0){
1579
+ vm.$set(data,"dialogWidthValue",dialogWidth.split("vh")[0]);
1580
+ vm.$set(data,"dialogWidthUnit","%");
1581
+ }
1582
+ //处理弹出框高度
1583
+ let dialogHeight = vm.displayDialogStyle["dialogHeight"];
1584
+ if(dialogHeight.indexOf("%")>= 0){
1585
+ vm.$set(data,"dialogHeightValue",dialogHeight.split("%")[0]);
1586
+ vm.$set(data,"dialogHeightUnit","%");
1587
+ }else if(dialogHeight.indexOf("px") >= 0){
1588
+ vm.$set(data,"dialogHeightValue",dialogHeight.split("px")[0]);
1589
+ vm.$set(data,"dialogHeightUnit","px");
1590
+ }else if(dialogHeight.indexOf("vh") >= 0){
1591
+ vm.$set(data,"dialogHeightValue",dialogHeight.split("vh")[0]);
1592
+ vm.$set(data,"dialogHeightUnit","%");
1593
+ }
1594
+ }else {//数据中不存在弹出框样式,设置初始值
1595
+ vm.$set(data,"dialogTopSpaceValue","5");//弹出框距顶部位置
1596
+ vm.$set(data,"dialogTopSpaceUnit","%");
1597
+ vm.$set(data,"dialogWidthValue","90");//弹出框宽度
1598
+ vm.$set(data,"dialogWidthUnit","%");
1599
+ vm.$set(data,"dialogHeightValue","90");//弹出框高度
1600
+ vm.$set(data,"dialogHeightUnit","%");
1601
+ }
1602
+ vm.initCheckOperion = {};
1603
+ vm.initCheckData = {};
1604
+ vm.$refs.form.clearValidate();
1605
+ vm.$emit('changeRightMenuStatus', "N", e,node);
1606
+ vm.menuLocalDisable = node.level > 2;
1607
+ if (data.menuChiefNum !== '-2') {
1608
+ if (data.menuIcon && data.menuIcon.indexOf("saspiconfont") > -1) {
1609
+ vm.defaultMenuIcon = data.menuIcon;
1610
+ } else {
1611
+ vm.defaultMenuIcon = vm.$options.data().defaultMenuIcon;
1612
+ }
1613
+
1614
+ let menuGzljd = [];
1615
+ if (data.menuGzljd) {
1616
+ menuGzljd = data.menuGzljd.split(',');
1617
+ }
1618
+ //根据 bindSource查询
1619
+ if(data.bindSource && typeof data.bindSource == 'string'){
1620
+ data.bindSource = JSON.parse(data.bindSource);
1621
+ }
1622
+
1623
+ vm.form = Object.assign({}, data);
1624
+ let menuRealOpen = vm.form.menuIsUse; // 根据智能建表的状态判断菜单的启用状态
1625
+ if (menuRealOpen && menuRealOpen.indexOf(";") > -1) { // 有智能建表的状态
1626
+ menuRealOpen = menuRealOpen.substring(0, menuRealOpen.indexOf(";")); // 截取菜单的实际启用状态
1627
+ }
1628
+ vm.changeBindSource(vm.form.bindSource); //初始化操作权限和数据权限
1629
+
1630
+ vm.$set(vm.form, 'menuRealOpen', menuRealOpen);
1631
+ // 处理数据库异常结尾异常假空格\u0000的问题
1632
+ try {
1633
+ JSON.parse(vm.form.menuGzltabs);
1634
+ } catch (e) {
1635
+ vm.form.menuGzltabs = "{}";
1636
+ }
1637
+ vm.form.menuGzljd = menuGzljd;
1638
+
1639
+ vm.$nextTick(() =>{
1640
+ //初始化树选中
1641
+ vm.$set(vm.form,'allOptAuth',true); //操作权限
1642
+ vm.$set(vm.form,'allDataAuth',true); //数据权限
1643
+ let opeateKeyArr = (vm.form.operatePermis || '').split(","); //权限id用逗号拼接
1644
+ let dataKeyArr = (vm.form.dataPermis || '').split(","); //权限id用逗号拼接
1645
+ if(vm.$refs.operatePermisRef){ //选中操作权限
1646
+ vm.$refs.operatePermisRef.setCheckedKeys(opeateKeyArr);
1647
+ //获取半选
1648
+ vm.operationFormData.some(item =>{
1649
+ if(opeateKeyArr.indexOf(item.id) == '-1' ){
1650
+ vm.$set(vm.form,'allOptAuth',false); //操作权限
1651
+ return true;
1652
+ }
1653
+ });
1654
+ }
1655
+ if(vm.$refs.dataPermisRef){ //选中数据权限
1656
+ vm.$refs.dataPermisRef.setCheckedKeys(dataKeyArr);
1657
+ //获取半选
1658
+ vm.dataPermisFormData.some(item =>{
1659
+ if(dataKeyArr.indexOf(item.id) == '-1' ){
1660
+ vm.$set(vm.form,'allDataAuth',false); //操作权限
1661
+ return true;
1662
+ }
1663
+ });
1664
+ }
1665
+ });
1666
+ }
1667
+ },
1668
+ selectIcon(data) {
1669
+ if(data.startsWith("el-icon-")){
1670
+ this.form.menuIcon = data;
1671
+ this.defaultMenuIcon = data;
1672
+ }else{
1673
+ this.form.menuIcon = 'saspiconfont ' + data;
1674
+ this.defaultMenuIcon = 'saspiconfont ' + data;
1675
+ }
1676
+ this.selectIconDialog = false;
1677
+ },
1678
+ clearIcon() {
1679
+ this.form.menuIcon = this.$options.data().form.menuIcon;
1680
+ this.defaultMenuIcon = this.$options.data().defaultMenuIcon;
1681
+ },
1682
+ formFocus() {
1683
+ this.selectFormDialog = true;
1684
+ },
1685
+ singleFormFocus() {
1686
+ this.selectSingleFormDialog = true
1687
+ },
1688
+ chooseFlowFocus() {
1689
+ this.chooseFlowFormDialog = true
1690
+ },
1691
+ chooseStatisticalFormFocus() {
1692
+ this.chooseStatisticalFormDialog = true
1693
+ },
1694
+ chooseCompositeViewFocus() {
1695
+ this.chooseCompositeViewDialog = true
1696
+ },
1697
+ //表单名称(自定义表单和数据字典)dialog回调
1698
+ selectForm(data) {
1699
+ let {id, version, formId, formName, listTitle} = data;
1700
+ //版本号要不要加?
1701
+ /*if (version) {
1702
+ this.form.menuViewId = id + '_' + version;
1703
+ } else {
1704
+ this.form.menuViewId = id
1705
+ }*/
1706
+ this.form.menuViewId = id;
1707
+ this.form.menuFormId = formId;
1708
+ this.form.menuForm = formName;
1709
+ this.form.menuFormView = listTitle;
1710
+ this.axios.post('/formConditionController/find', {
1711
+ 'viewId': this.form.menuViewId
1712
+ }).then(res => {
1713
+ this.menuConditionOptions = [];
1714
+ for (let {id, condintionName} of res.data) {
1715
+ this.menuConditionOptions.push({
1716
+ value: id,
1717
+ label: condintionName
1718
+ })
1719
+ }
1720
+ });
1721
+ this.selectFormDialog = false;
1722
+ },
1723
+ selectSingleForm(data) {
1724
+ let {id, formName, listTitle} = data;
1725
+ this.form.menuViewId = id;
1726
+ this.form.menuForm = formName;
1727
+ this.form.menuFormView = listTitle;
1728
+ this.form.treewidth = data.tableName; // 表名,这里用个无用字段替代
1729
+ this.selectSingleFormDialog = false;
1730
+ },
1731
+ selectWorkFlowForm(data) {
1732
+ let {id, flowName} = data;
1733
+ this.form.menuGzlId = id;
1734
+ this.form.menuGzl = flowName;
1735
+ this.chooseFlowFormDialog = false;
1736
+ this.axios.post('/flowDefineNodeController/find', {
1737
+ 'sort': 'NODE_TYPE_EXTEND',
1738
+ 'flowId': id
1739
+ }).then(res => {
1740
+ let workFlowNodeData = res.data;
1741
+ this.workFlowNodeOptions = [];
1742
+ for (let {id, nodeName} of workFlowNodeData) {
1743
+ this.workFlowNodeOptions.push({
1744
+ value: id,
1745
+ label: nodeName
1746
+ })
1747
+ }
1748
+ });
1749
+ },
1750
+ selectStatisticalForm(data) {
1751
+ let {id, reportName} = data;
1752
+ this.form.menuGzlId = id;
1753
+ this.form.menuGzl = reportName;
1754
+ this.chooseStatisticalFormDialog = false;
1755
+ },
1756
+ selectCompositeView(data) {
1757
+ let {id, viewName} = data;
1758
+ this.form.menuGzlId = id;
1759
+ this.form.menuGzl = viewName;
1760
+ this.chooseCompositeViewDialog = false;
1761
+ },
1762
+ initCallBack() {
1763
+ if (!this.firstLoad) {
1764
+ return;
1765
+ }
1766
+ let nodesMap = this.$refs.commonTreeRef.getAllNode();
1767
+ for (let [key, menu] of Object.entries(nodesMap)) {
1768
+ if (menu.level === 1) { // 初始化打开一级菜单
1769
+ menu.expanded = true;
1770
+ }
1771
+ }
1772
+ this.firstLoad = false;
1773
+ },
1774
+ //选项卡配置(这边打开flowTabSetting组件开始配置)
1775
+ flowTabSetting() {
1776
+ this.flowTabDialog = true;
1777
+ },
1778
+ saveFlowTabSetting(setting) { // 保存选项卡配置
1779
+ let vm = this;
1780
+ if (vm.form.id) { // 修改直接保存数据
1781
+ vm.axios.post(vm.api.menu.update, {"id": vm.form.id, "menuGzltabs": setting});
1782
+ }
1783
+ vm.form.menuGzltabs = setting;
1784
+ vm.flowTabDialog = false;
1785
+ },
1786
+ closeFlowTabSetting() {
1787
+ this.flowTabDialog = false;
1788
+ },
1789
+ flowPreview() {
1790
+ if (!this.form.menuGzltabs || "{}" === this.form.menuGzltabs) { // 没有数据则设置为默认配置项
1791
+ this.form.menuGzltabs = JSON.stringify(this.defaultGzltabs);
1792
+ }
1793
+ this.flowPreviewDialog = true;
1794
+ },
1795
+ chooseTree() { // 选择树
1796
+ if (!this.form.menuFormId) {
1797
+ this.$message("尚未选择表单,请先选择表单后再进行操作!");
1798
+ return;
1799
+ }
1800
+ this.chooseTreeDialog = true;
1801
+ },
1802
+ determinTree(data, value) {
1803
+ this.form.menuTreeId = data.id;
1804
+ this.form.menuTree = value;
1805
+ this.chooseTreeDialog = false;
1806
+ },
1807
+ clearLinkData() { // 菜单类型change时清除数据
1808
+ // 菜单类型改变时做数据清除
1809
+ let clearArr = ['menuXtgn', 'menuZdygncd', 'menuForm', 'menuFormId', 'menuGzljd', "menuGzltabs", 'menuFormView', 'menuViewId',
1810
+ 'menuShowtype', 'menuCondition', 'singleFormCondition', 'menuGzlId', 'menuGzl', 'menuTreeId', 'treewidth', 'menuTree', 'menuUrl'];
1811
+ clearArr.forEach(item => {
1812
+ if (item === 'menuGzlId') {
1813
+ this.$set(this.form, item, null);
1814
+ } else {
1815
+ this.$set(this.form, item, "");
1816
+ }
1817
+ })
1818
+ },
1819
+ treeAllowDrag(node) { // 允许拖动的节点
1820
+ return (node.level !== 1); // 不允许拖动根节点
1821
+ },
1822
+ treeAllowDrop(draggingNode, dropNode, type) { // 树组件允许拖动至的位置
1823
+ return !((type === "prev" || type === "next") && dropNode.level === 1); // 不允许将节点拖动至根节点
1824
+ },
1825
+ treeNodeDrop(node, endNode, type) { // 节点拖动完成时产生的事件
1826
+ let menuTree = this.$refs.commonTreeRef;
1827
+ //修改menuOrder所需的对象数组
1828
+ let menuOrderArr = [];
1829
+ let parentNode = {};
1830
+
1831
+ let dragData = node.data;
1832
+ // 移动节点时,主要同步修改节点的上级树与节点的模块
1833
+ let menuModel = endNode.data.menuModel; // 节点落点对应的菜单模块
1834
+ let cNodeMenuPath = (dragData.menuPath || "-1"); // 取得当前节点的原菜单路径
1835
+ let menuPath = ""; // 节点移动完成后调整它的菜单路径
1836
+ let menuChiefNum = ""; // 节点移动完成后调整它的上级编号
1837
+ if (type === "after" || type === "before") { // 移动到落点之前或之后为同级
1838
+ menuPath = endNode.data.menuPath || "-1";
1839
+ menuChiefNum = endNode.data.menuChiefNum || "-1";
1840
+
1841
+ //获取拖拽节点的父级节点
1842
+ parentNode = menuTree.getTreeNodeBykey(endNode.data.menuChiefNum);
1843
+ //生成拖拽菜单之后要修改的节点排序
1844
+ if (parentNode && parentNode.childNodes.length > 0) {
1845
+ let childNodes = parentNode.childNodes;
1846
+ for (let i = 0; i < childNodes.length; i++) {
1847
+ let childObj = childNodes[i].data;
1848
+ let menuOrderObj = {};
1849
+ menuOrderObj['id'] = childObj.id;
1850
+ menuOrderObj['menuOrder'] = i + 1;
1851
+ menuOrderArr.push(menuOrderObj);
1852
+ }
1853
+ }
1854
+ }
1855
+ if (type === "inner") { // 移动到落点之内为下级
1856
+ if (endNode.level === 1) { // 落在一级节点之下
1857
+ menuPath = "-1";
1858
+ menuChiefNum = "-1";
1859
+ } else {
1860
+ menuPath = endNode.data.menuPath + "," + endNode.data.id; // 为父级菜单的路径加上父级菜单的id
1861
+ menuChiefNum = endNode.data.id;
1862
+ }
1863
+
1864
+ //获取落点节点之内的子集节点
1865
+ parentNode = endNode.data.children;
1866
+ //生成拖拽菜单之后要修改的节点排序
1867
+ if (parentNode && parentNode.length > 0) {
1868
+ for (let i = 0; i < parentNode.length; i++) {
1869
+ let childObj = parentNode[i];
1870
+ let menuOrderObj = {};
1871
+ menuOrderObj['id'] = childObj.id;
1872
+ menuOrderObj['menuOrder'] = i + 1;
1873
+ menuOrderArr.push(menuOrderObj);
1874
+ }
1875
+ }
1876
+ }
1877
+ // 一波操作完成之后,(分析:移动节点后,节点的menuChiefNum,menuPath,menuModel需要考虑修改
1878
+ // ,若移动的节点有子节点则需要修改子节点的menuPath,menuModel,我们需要注意,在修改子节点
1879
+ // 的时候需要考虑层级关系,所以最好的办法是取得menuPath,使用rePlace替换移动节点的路径为现路径即可)
1880
+ let dataArr = this.getDataChildren(dragData); // 这里获取的数据是实际data而不是elementTree生成的节点node
1881
+ // 执行路径替换
1882
+ dataArr.forEach(each => {
1883
+ each["menuPath"] = this.platStringUtil.replaceAll(each["menuPath"], cNodeMenuPath, menuPath);
1884
+ });
1885
+ dataArr.push(dragData); // 替换完成后将当前节点置入
1886
+ // 生成数据至后台交互
1887
+ let menuList = [];
1888
+ dataArr.forEach(value => {
1889
+ let menuObj = {};
1890
+ menuObj['id'] = value.id;
1891
+ menuObj['menuPath'] = value.menuPath;
1892
+ menuObj['menuModel'] = menuModel;
1893
+ if (value.id === dragData.id) {
1894
+ menuObj['menuChiefNum'] = menuChiefNum;
1895
+ menuObj['menuPath'] = menuPath;
1896
+ }
1897
+ menuList.push(menuObj);
1898
+ });
1899
+ let nodesMap = this.$refs.commonTreeRef.getAllNode();
1900
+ this.axios.post(this.api.menu.batchUpdateMenu, {
1901
+ 'menuStr': JSON.stringify(menuList)
1902
+ }).then(res => {
1903
+ if (res.data.operateSuccess) {
1904
+ menuList.forEach(dataEach => {
1905
+ let nodeData = nodesMap[dataEach["id"]].data; // 节点数据
1906
+ Object.keys(dataEach).forEach(key => {
1907
+ nodeData[key] = dataEach[key];
1908
+ })
1909
+ });
1910
+ this.axios.post(this.api.menu.batchUpdateMenu, {
1911
+ 'menuStr': JSON.stringify(menuOrderArr)
1912
+ }).then(menuOrderRes => {
1913
+ if (menuOrderRes.data.operateSuccess) {
1914
+ //修改完菜单排序之后赋值给form
1915
+ menuOrderArr.forEach(item => {
1916
+ let nodeData = nodesMap[item['id']].data;
1917
+ Object.keys(item).forEach(key => {
1918
+ nodeData[key] = item[key];
1919
+ })
1920
+ });
1921
+ // this.refreshBooleanProper = true;
1922
+ this.defaulExpand = [dragData.id];
1923
+
1924
+ nodesMap[dragData.id]["isCurrent"] = true;
1925
+ let formData = nodesMap[dragData.id].data;
1926
+
1927
+ this.form = Object.assign({}, formData);
1928
+ // nodesMap[dragData.id]["isCurrent"] = true;
1929
+ // this.initCheck['initCheck'] = [dragData.id];
1930
+ // menuTree.setTreeCurrentKey(dragData.id);
1931
+ this.$message({
1932
+ type: 'success',
1933
+ message: '修改成功'
1934
+ });
1935
+ } else {
1936
+ this.$message.error('修改失败');
1937
+ }
1938
+
1939
+ });
1940
+ }
1941
+ })
1942
+ },
1943
+ getDataChildren(data, result) { // 获取指定节点的所有下级(包括自己)的id
1944
+ if (!data) {
1945
+ return [];
1946
+ }
1947
+ !result && (result = []);
1948
+ let children = data["children"];
1949
+ if (children && children.length > 0) {
1950
+ for (let elem of children) {
1951
+ result.push(elem);
1952
+ this.getDataChildren(elem, result);
1953
+ }
1954
+ }
1955
+ return result;
1956
+ },
1957
+
1958
+ /**
1959
+ * 操作权限全选
1960
+ */
1961
+ optChange(val){
1962
+ //全选或取消全选
1963
+ if(val){
1964
+ //全部勾选
1965
+ this.$refs.operatePermisRef.setCheckedNodes(this.operationFormData);
1966
+ }else{
1967
+ //取消全部勾选
1968
+ this.$refs.operatePermisRef.setCheckedNodes([]);
1969
+ }
1970
+ },
1971
+
1972
+ /**
1973
+ * 初始化树选中
1974
+ */
1975
+ initTreeCheck(dataArr,keysArr){
1976
+ (dataArr || []).forEach(item =>{
1977
+ if(!item["childrens"]){ //因为下级全部选中上级自动选中,所以不用考虑上级
1978
+ // this.$refs.operatePermisRef.setCheckedKeys([item['key']]);
1979
+ if(item['enable']){ //当前已选择
1980
+ keysArr.push(item['key']);
1981
+ }
1982
+ }
1983
+ if(item["childrens"]){
1984
+ this.initTreeCheck(item["childrens"],keysArr);
1985
+ }
1986
+ })
1987
+ },
1988
+
1989
+ /**
1990
+ * 数据权限全选
1991
+ */
1992
+ dataChange(val){
1993
+ //全选或取消全选
1994
+ if(val){
1995
+ //全部勾选
1996
+ this.$refs.dataPermisRef.setCheckedNodes(this.dataPermisFormData);
1997
+ }else{
1998
+ //取消全部勾选
1999
+ this.$refs.dataPermisRef.setCheckedNodes([]);
2000
+ }
2001
+ },
2002
+
2003
+ /**
2004
+ * 切换菜单类型
2005
+ * @param val
2006
+ */
2007
+ changeMenuType(val){
2008
+ if(val == 'resourcePool'){ //资源池
2009
+
2010
+ }
2011
+ },
2012
+
2013
+ /**
2014
+ * 刷新资源池
2015
+ */
2016
+ refreshResouce(){
2017
+ this.initSysRources(); //刷新资源池
2018
+ },
2019
+
2020
+ /**
2021
+ * 切换绑定资源
2022
+ * @param val
2023
+ */
2024
+ changeBindSource(val){
2025
+ this.operatePermis = [];
2026
+ this.dataPermis = [];
2027
+ this.$set(this.form,"allOptAuth",true);
2028
+ this.$set(this.form,"allDataAuth",true);
2029
+ this.operationFormData = [];
2030
+ this.dataPermisFormData = [];
2031
+ this.operationFormObj = {};
2032
+ this.dataPermisFormObj = {};
2033
+ this.allCheckOperateKeyArr = [];
2034
+ this.allCheckDataKeyArr = [];
2035
+ this.refreshProper = this.COMMON_FUNC.getUuidByParams(32);
2036
+ if(val && val.length > 0){
2037
+ let length = val.length;
2038
+ let resouceId = val[length -1];
2039
+ if(resouceId && this.sourcesObj[resouceId]){
2040
+ let obj = this.sourcesObj[val[length -1]];
2041
+ this.operatePermis = obj.operatePermisList ||[]; //操作权限
2042
+ this.dataPermis = obj.dataPermisList || []; //数据权限
2043
+ let paramSetting = {};
2044
+ paramSetting["id"] = "id";
2045
+ paramSetting["parentTree"] = "parentTree";
2046
+ paramSetting["pId"] = "parentId"; //上级数据
2047
+ paramSetting["children"] = this.defaultBindProps["children"]; // 设置children可配置
2048
+ this.operationFormData = this.COMMON_FUNC.buildElTree(this.operatePermis,paramSetting);
2049
+ this.dataPermisFormData = this.COMMON_FUNC.buildElTree(this.dataPermis,paramSetting);
2050
+
2051
+ }
2052
+ }
2053
+ //置空全选
2054
+ this.$nextTick(() =>{
2055
+ if(this.$refs.operatePermisRef){
2056
+ this.$refs.operatePermisRef.setCheckedNodes(this.operationFormData);
2057
+ }
2058
+ if(this.$refs.dataPermisRef){
2059
+ this.$refs.dataPermisRef.setCheckedNodes(this.dataPermisFormData);
2060
+ }
2061
+ });
2062
+ },
2063
+
2064
+ /**
2065
+ * 获取选中的
2066
+ */
2067
+ initSelectKey(treeArr,selectKeyArr,opertionKeyArr){
2068
+ treeArr.forEach(item =>{
2069
+ if(selectKeyArr.indexOf(item.id) > -1){
2070
+ opertionKeyArr.push(item.id);
2071
+ }
2072
+ if(item.children){
2073
+ treeArr = item["children"];
2074
+ this.initSelectKey(treeArr,selectKeyArr,opertionKeyArr);
2075
+ }
2076
+ });
2077
+ },
2078
+
2079
+ /**
2080
+ * 获取parentId
2081
+ */
2082
+ setFormDataParentId(dataArr,parentId,allKeyArr){
2083
+ dataArr.forEach(item =>{
2084
+ this.$set(item,'pId',parentId);
2085
+ this.$set(item,'enable',true); //默认节点可用
2086
+ allKeyArr.push(item['key']);
2087
+ let parentTree = parentId || "";
2088
+ if(item.parentTree && item.parentTree != "-1"){
2089
+ parentTree = item.parentTree + "," + parentId;
2090
+ }
2091
+ this.$set(item,'parentTree',parentTree);
2092
+ if(item["childrens"]){ //
2093
+ dataArr = item["childrens"];
2094
+ parentId = item["key"];
2095
+ this.setFormDataParentId(dataArr,parentId,allKeyArr);
2096
+ }
2097
+ });
2098
+ },
2099
+
2100
+ /**
2101
+ * 递归半选中无用数据
2102
+ * @param halfOperatArr
2103
+ * @param keyArr
2104
+ */
2105
+ disabelHalNoUseData(halfOperatArr,keyArr){
2106
+ halfOperatArr.forEach(item =>{
2107
+ if(item["childrens"]){
2108
+ (item["childrens"] || []).forEach((child,index) =>{
2109
+ if(keyArr.indexOf(child.key) == -1){ //设置当前节点 isCheked:false
2110
+ // this.$set(child,'enable',false); //设置节点为不可用状态
2111
+ item["childrens"].splice(index,1);
2112
+ keyArr.splice(index,1);
2113
+ }else{
2114
+ this.$set(child,'enable',true); ;//设置可编辑状态
2115
+ this.isHalfOperationKeyArr.push(child.key);
2116
+ }
2117
+ halfOperatArr = item["childrens"];
2118
+ this.disabelHalNoUseData(halfOperatArr,keyArr);
2119
+ })
2120
+ }
2121
+ });
2122
+ },
2123
+
2124
+ /**
2125
+ * 过滤全选数据
2126
+ */
2127
+ filterIsHalfOperation(checkeOpertionArr,isHalfOperationKeyArr,isAllOperationKey){
2128
+ checkeOpertionArr = checkeOpertionArr.filter(item =>{
2129
+ return isHalfOperationKeyArr.indexOf(item.key) == -1 && isAllOperationKey.indexOf(item.key) == -1;
2130
+ });
2131
+
2132
+ return checkeOpertionArr;
2133
+ },
2134
+
2135
+ /**
2136
+ * 删除已经子数据
2137
+ * @param allCheckArr
2138
+ * @param keyArr
2139
+ */
2140
+ deleteAllCheckOpertion(allArr,keyArr){
2141
+ allArr.forEach(item =>{
2142
+ this.$set(item,'enable',true); //默认节点可用
2143
+ if(item["childrens"]){
2144
+ (item["childrens"] || []).forEach((child,index) =>{
2145
+ if(keyArr.indexOf(child.key) > -1){ //删除当前数据
2146
+ this.isAllOperationKeyArr.push(child.key);
2147
+ }
2148
+ allArr = item["childrens"];
2149
+ this.deleteAllCheckOpertion(allArr,keyArr);
2150
+ })
2151
+ }
2152
+ });
2153
+ },
2154
+
2155
+ /**
2156
+ * 操作权限判断全选
2157
+ */
2158
+ isAllOptCheck(formTreeArr,halfArr,allCheckArr){
2159
+ if(formTreeArr.length == 0 || halfArr.length > 0){
2160
+ this.$set(this.form,'allOptAuth',false);
2161
+ }else{
2162
+ formTreeArr.some(item =>{ //判断是否选中
2163
+ if(allCheckArr.indexOf(item.key)> -1){
2164
+ formTreeArr = item["childrens"];
2165
+ if(formTreeArr){
2166
+ this.isAllOptCheck(formTreeArr,halfArr,allCheckArr);
2167
+ }
2168
+ }else{
2169
+ this.$set(this.form,'allOptAuth',false);
2170
+ return true; //终止
2171
+ }
2172
+ });
2173
+ }
2174
+ },
2175
+
2176
+ /**
2177
+ * 数据权限判断全选
2178
+ */
2179
+ isAllDataCheck(formTreeArr,halfArr,allCheckArr){
2180
+ if(formTreeArr.length == 0 || halfArr.length > 0){
2181
+ this.$set(this.form,'allDataAuth',false);
2182
+ }else{
2183
+ formTreeArr.some(item =>{ //判断是否选中
2184
+ if(allCheckArr.indexOf(item.key)> -1){
2185
+ formTreeArr = item["childrens"];
2186
+ if(formTreeArr){
2187
+ this.isAllDataCheck(formTreeArr,halfArr,allCheckArr);
2188
+ }
2189
+ }else{
2190
+ this.$set(this.form,'allDataAuth',false);
2191
+ return true; //终止
2192
+ }
2193
+ });
2194
+ }
2195
+ },
2196
+
2197
+ /**
2198
+ * 操作权限点击事件
2199
+ * @param data
2200
+ * @param checked
2201
+ */
2202
+ checkeOptChangeFnc(data,checked){
2203
+ this.$set(this.form,'allOptAuth',true); //操作权限
2204
+ let keysArr = this.$refs.operatePermisRef.getCheckedKeys();
2205
+ this.operationFormData.some(item =>{
2206
+ if(keysArr.indexOf(item.id) == '-1' ){
2207
+ this.$set(this.form,'allOptAuth',false); //操作权限
2208
+ return true;
2209
+ }
2210
+ });
2211
+ },
2212
+ /**
2213
+ * 数据全选点击全选判断
2214
+ * @param data
2215
+ * @param checked
2216
+ */
2217
+ checkeDataChangeFnc(data,checked){
2218
+ this.$set(this.form,'allDataAuth',true); //数据权限
2219
+ //获取半选
2220
+ let keysArr = this.$refs.dataPermisRef.getCheckedKeys();
2221
+ this.dataPermisFormData.some(item =>{
2222
+ if(keysArr.indexOf(item.id) == '-1' ){
2223
+ this.$set(this.form,'allDataAuth',false); //操作权限
2224
+ return true;
2225
+ }
2226
+ });
2227
+
2228
+ },
2229
+
2230
+ /**
2231
+ * 操作权限
2232
+ * @param h
2233
+ * @param node
2234
+ * @param data
2235
+ * @param store
2236
+ * @returns {*}
2237
+ */
2238
+ renderOperateContent(h, { node, data, store }) {
2239
+ let type = "按钮";
2240
+ if((data.powerKey || "").indexOf("tree") > -1){
2241
+ type = "树"
2242
+ }
2243
+ return (
2244
+ <span >
2245
+ <span>{node.label}</span>
2246
+ <span class="custom-operate-tree-node">
2247
+ ({type})
2248
+ </span>
2249
+ </span>);
2250
+ },
2251
+
2252
+ /**
2253
+ * 弹出框顶部间距设置
2254
+ */
2255
+ changeDialogTop(){
2256
+ let dialogTopSpace = this.form.dialogTopSpaceValue + this.form.dialogTopSpaceUnit;
2257
+ if(dialogTopSpace){
2258
+ this.displayDialogStyle.dialogTopSpace = dialogTopSpace;
2259
+ }
2260
+ },
2261
+ /**
2262
+ * 弹出框宽度设置
2263
+ */
2264
+ changeDialogWidth(){
2265
+ let dialogWidth = this.form.dialogWidthValue + this.form.dialogWidthUnit;
2266
+ if(dialogWidth){
2267
+ this.displayDialogStyle.dialogWidth = dialogWidth;
2268
+ }
2269
+ },
2270
+ /**
2271
+ * 弹出框高度设置
2272
+ */
2273
+ changeDialogHeight(){
2274
+ let dialogHeight = this.form.dialogHeightValue + this.form.dialogHeightUnit;
2275
+ if(dialogHeight){
2276
+ this.displayDialogStyle.dialogHeight = dialogHeight;
2277
+ }
2278
+ },
2279
+
2280
+ /**
2281
+ * 开启或关闭自定义图标
2282
+ */
2283
+ changeOpenDiyIcon(){
2284
+ if(!this.diyIconFkid){
2285
+ this.diyIconFkid = this.COMMON_FUNC.getUuidByParams(32);
2286
+ }
2287
+ }
2288
+ }
2289
+ }
2290
+ </script>
2291
+
2292
+ <style scoped lang="scss">
2293
+ .asideTree {
2294
+ overflow-y: auto;
2295
+ width: 100% !important;
2296
+ height: calc(100% - 90px);
2297
+ position: relative;
2298
+ -webkit-user-select: none;
2299
+ -moz-user-select: none;
2300
+ -ms-user-select: none;
2301
+ user-select: none;
2302
+ }
2303
+
2304
+ .el-main {
2305
+ background-color: #E9EEF3;
2306
+ color: #333;
2307
+ text-align: center;
2308
+ line-height: 160px;
2309
+ }
2310
+
2311
+ .fontIcon {
2312
+ font-size: 25px;
2313
+ margin: 10px auto;
2314
+ font-family: "saspiconfont", sans-serif !important;
2315
+ font-style: normal;
2316
+ }
2317
+
2318
+ .dialog, font-dialog {
2319
+ box-sizing: border-box;
2320
+ padding-right: 0;
2321
+ padding-top: 0;
2322
+ }
2323
+
2324
+ .font-dialog /deep/ .el-dialog__body {
2325
+ padding: 0;
2326
+ height: calc(100% - 50px);
2327
+ }
2328
+
2329
+ .flow-tab-dialog /deep/ .el-dialog__body {
2330
+ height: calc(100% - 75px);
2331
+ padding: 0 10px;
2332
+ }
2333
+
2334
+ .choose-tree-dialog /deep/ .el-dialog__body {
2335
+ height: calc(100% - 40px);
2336
+ padding: 0 10px;
2337
+ }
2338
+
2339
+ .menuManageContainer .el-aside {
2340
+ overflow-y: hidden;
2341
+ }
2342
+
2343
+ .menuManageContainer .asideTree {
2344
+ overflow-y: auto;
2345
+ }
2346
+
2347
+ .menuManageContainer .model-color .saspiconfont {
2348
+ font-size: 22px;
2349
+ color: #fff;
2350
+ }
2351
+
2352
+ .menuManageContainer /deep/ .el-tabs__content {
2353
+ padding: 0;
2354
+ }
2355
+
2356
+ .menuManageContainer /deep/ .model-color span {
2357
+ font-size: 16px;
2358
+ }
2359
+
2360
+ .menuManageContainer /deep/ .el-card__header{
2361
+ padding: 10px 20px;
2362
+ }
2363
+
2364
+ .asideTree /deep/ .el-tree > .el-tree-node > .el-tree-node__content { /* 选中第一级菜单 */
2365
+ background-color: #1A598A;
2366
+ text-decoration: none;
2367
+ border: 1px silver solid;
2368
+ color: #fff;
2369
+ text-align: center;
2370
+ height: 35px;
2371
+ }
2372
+ .box-card-class{
2373
+ width: 350px;
2374
+ height: auto;
2375
+ overflow-y: auto;
2376
+ padding-bottom: 10px;
2377
+ }
2378
+ .clearfix{
2379
+ width: 190px;
2380
+ }
2381
+
2382
+ .tree {
2383
+ overflow-y:auto;
2384
+ height: 190px;
2385
+ }
2386
+
2387
+ .tree /deep/ .el-tree {
2388
+ .el-tree-node__content {
2389
+ display: block !important;
2390
+ }
2391
+ .el-tree-node__children {
2392
+ overflow: visible !important;
2393
+ }
2394
+ }
2395
+
2396
+ .tree /deep/.custom-operate-tree-node {
2397
+ margin-left: 10px;
2398
+ font-size: 11px;
2399
+ color: #409EFF;
2400
+ }
2401
+
2402
+ </style>