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,1132 @@
1
+ <template>
2
+ <div style="width: 100%;height: 100%" @click="menuVisible = false">
3
+ <el-main style="height:100%;padding: 10px;overflow-y: hidden;position: relative" class="menu-manage-main" v-loading="loading" element-loading-text="加载中">
4
+ <el-menu
5
+ :style="{'position': 'fixed','z-index':'99','top':top,'left':left}"
6
+ class="el-menu-vertical"
7
+ @select="handleRightSelect"
8
+ background-color="#545c64"
9
+ text-color="#fff"
10
+ v-show="menuVisible">
11
+ <el-menu-item index="addChild">
12
+ <i class="el-icon-circle-plus"></i>
13
+ <span slot="title">添加下级菜单</span>
14
+ </el-menu-item>
15
+ <el-menu-item index="addSame">
16
+ <i class="el-icon-circle-plus-outline"></i>
17
+ <span slot="title">添加同级菜单</span>
18
+ </el-menu-item>
19
+ <el-menu-item index="removeCurrent">
20
+ <i class="el-icon-delete"></i>
21
+ <span slot="title">删除当前菜单</span>
22
+ </el-menu-item>
23
+ <el-menu-item index="removeCheck">
24
+ <i class="el-icon-remove"></i>
25
+ <span slot="title">删除勾选菜单</span>
26
+ </el-menu-item>
27
+ <el-menu-item index="copyCurrent">
28
+ <i class="el-icon-document"></i>
29
+ <span slot="title">复制或转移当前菜单</span>
30
+ </el-menu-item>
31
+ <el-menu-item index="copyCheck">
32
+ <i class="el-icon-tickets"></i>
33
+ <span slot="title">复制或转移勾选菜单</span>
34
+ </el-menu-item>
35
+ </el-menu>
36
+
37
+
38
+ <!--<el-popover style="margin-left: 10px;margin-right: 10px;" v-model="importVisible"-->
39
+ <!--placement="bottom" width="200" trigger="click">-->
40
+ <!--<el-upload-->
41
+ <!--class="upload-demo"-->
42
+ <!--ref="impFileRef"-->
43
+ <!--:auto-upload="false"-->
44
+ <!--:file-list="fileList"-->
45
+ <!--:action="api.menu.importMenuData"-->
46
+ <!--:limit="1"-->
47
+ <!--accept=".clmdmp"-->
48
+ <!--:on-exceed="limitFile"-->
49
+ <!--:on-change="changeFile"-->
50
+ <!--:before-upload="beforeUpload"-->
51
+ <!--:http-request="uploadFileMethod">-->
52
+ <!--<el-button slot="trigger" size="small" type="primary">选取导入文件</el-button>-->
53
+ <!--<el-button style="margin-left: 10px;" size="small" type="success" @click="beginImp">-->
54
+ <!--导入-->
55
+ <!--</el-button>-->
56
+ <!--</el-upload>-->
57
+ <!--&lt;!&ndash;<el-button type="warning" size="small" round slot="reference" icon="el-icon-bottom-left">导入&ndash;&gt;-->
58
+ <!--&lt;!&ndash;</el-button>&ndash;&gt;-->
59
+ <!--<span class="el-menu-import" @click="importMenu" slot="reference">-->
60
+ <!--<el-tooltip content="菜单导入" effect="light" >-->
61
+ <!--<i class="saspiconfont pl-icon-daoru " style="font-size: 25px"></i>-->
62
+ <!--</el-tooltip>-->
63
+ <!--</span>-->
64
+ <!--</el-popover>-->
65
+
66
+
67
+ <el-tabs v-model="activeName" type="border-card" ref="tab">
68
+ <el-tab-pane v-for="(obj,index) in tabNames"
69
+ v-if="(menuType == 'web'&& obj.id != mobileTabId) || (menuType == 'mobile' && obj.id == mobileTabId)"
70
+ :label="obj.value" :key="index">
71
+ <menu-manage-component
72
+ :menuLocal="obj.value"
73
+ :orgDimensionId="obj.id"
74
+ :sysFeatureMenuTypeOptions="sysFeatureMenuTypeOptions"
75
+ :customFunctionMenuOptions="customFunctionMenuOptions"
76
+ :sysFunctionAddressMap="sysFunctionAddressMap"
77
+ :customFunctionAddressMap="customFunctionAddressMap" :ref="'tab_'+index"
78
+ @changeRightMenuStatus="changeMenuStatus"
79
+ @refreshMenuData="refreshMenuData"
80
+ :menuAllData="menuAllData"
81
+ :moduleAllData="moduleAllData"
82
+ :sourcesObj="sourcesObj"
83
+ :sourcesArr="sourcesArr"
84
+ :initSysRources="initSysRources"
85
+ :loadResource="loadResource"
86
+ @func="closeDialog"
87
+ @exportMenu="exportMenu"
88
+ @menuPush="menuPush"
89
+ >
90
+ </menu-manage-component>
91
+ </el-tab-pane>
92
+
93
+ </el-tabs>
94
+
95
+
96
+ <el-dialog :close-on-click-modal=false title="选择归属" :visible.sync="changeLocalDialog" top="20vh">
97
+ <el-form :model="formData" ref="localRef">
98
+ <el-row>
99
+ <el-col :span="12">
100
+ <el-form-item label="菜单名称" label-width="120px">
101
+ <el-input v-model="formData.menuName" disabled></el-input>
102
+ </el-form-item>
103
+ </el-col>
104
+ <el-col :span="12">
105
+ <el-form-item label="菜单归属" label-width="120px" prop="menuLocalAll" :rules="plValidate('required')">
106
+ <el-cascader v-model="formData.menuLocalAll" :options="options" style="width: 100%"></el-cascader>
107
+ </el-form-item>
108
+ </el-col>
109
+ </el-row>
110
+ </el-form>
111
+ <div slot="footer" class="dialog-footer">
112
+ <el-button type="primary" @click="saveLocal" size="small" icon="el-icon-success">确定</el-button>
113
+ <el-button @click="changeLocalDialog = false" size="small" icon="el-icon-error">取 消</el-button>
114
+ </div>
115
+ </el-dialog>
116
+ <!--复制或转移菜单-->
117
+ <el-dialog title="请选择要复制或移动的位置" :visible.sync="copyDialogVisible" v-if="copyDialogVisible" :close-on-click-modal=false append-to-body
118
+ top="15vh" width="60%" height="450px">
119
+ <el-form :model="copyMenuformData" ref="copyRef">
120
+ <el-row>
121
+ <el-col :span="24">
122
+ <el-form-item label="菜单归属" label-width="100px" prop="model">
123
+ <el-select v-model="copyMenuformData.model" placeholder="请选择" :rules="plValidate('required')" @change="changeModel">
124
+ <el-option
125
+ v-for="item in tabNames"
126
+ :key="item.id"
127
+ :label="item.value"
128
+ :value="item.id">
129
+ </el-option>
130
+ </el-select>
131
+ </el-form-item>
132
+ </el-col>
133
+ <el-col :span="24">
134
+ <el-form-item label="菜单分类" label-width="100px" prop="menu">
135
+ <el-cascader v-model="copyMenuformData.menu" :props="defaultProps" :key="cascaderKey" filterable ref="cascaderArr"
136
+ :options="copyMenu" :show-all-levels="false" :change-on-select="true" @change="close"></el-cascader>
137
+ </el-form-item>
138
+ </el-col>
139
+ </el-row>
140
+ </el-form>
141
+ <div slot="footer" class="dialog-footer" align="center" >
142
+ <el-button type="primary" @click="copy('copyAndMove')" size="small" icon="el-icon-success">复制并移动</el-button>
143
+ <el-button type="primary" @click="copy('copy')" size="small" icon="el-icon-success">复制</el-button>
144
+ <el-button @click="copyDialogVisible = false" size="small" icon="el-icon-error">关闭</el-button>
145
+ </div>
146
+ </el-dialog>
147
+ <el-dialog title="资源上传" class="uploadDialog" append-to-body
148
+ @close="viewDialogClose" :close-on-click-modal="false"
149
+ :visible.sync="sureUploadResourceVisible" width="60%" height="55%" top="18vh">
150
+ <el-container style="height: 100%;width: 100%">
151
+ <el-form :model="cloudUploadObj" style="width: 100%;height: 100%" ref="cloudUploadFormRef" label-width="110px">
152
+ <el-form-item label="资源名称" prop="sourceName" :rules="plValidate('required')" style="width: 100%">
153
+ <el-input v-model="cloudUploadObj.sourceName"
154
+ maxlength="50"
155
+ show-word-limit></el-input>
156
+ </el-form-item>
157
+ <el-row>
158
+ <el-col :span="12">
159
+ <el-form-item label="资源版本" prop="sourceVersion" :rules="plValidate('required','thanZeroNumber')" style="width: 100%">
160
+ <el-input v-model="cloudUploadObj.sourceVersion" maxlength="10" show-word-limit></el-input>
161
+ </el-form-item>
162
+ </el-col>
163
+ <el-col :span="12">
164
+ <el-form-item label="资源Key" prop="sourceKey" style="width: 100%" :rules="sourceKeyRules">
165
+ <el-input v-model="cloudUploadObj.sourceKey" maxlength="32" show-word-limit></el-input>
166
+ </el-form-item>
167
+ </el-col>
168
+ </el-row>
169
+ <el-form-item label="资源说明" prop="sourceMark" style="width: 100%" :rules="plValidate('required')">
170
+ <el-input size="small" type="textarea" v-model="cloudUploadObj.sourceMark"
171
+ :rows="8" resize="none" style="margin-bottom: 7px;" maxlength="500" show-word-limit></el-input>
172
+ </el-form-item>
173
+ </el-form>
174
+ </el-container>
175
+ <div slot="footer" class="dialog-footer">
176
+ <el-button type="primary" @click="startUploadCloud()" size="small" icon="el-icon-success">上 传</el-button>
177
+ <el-button @click="sureUploadResourceVisible = false" size="small" icon="el-icon-error">取 消</el-button>
178
+ </div>
179
+ </el-dialog>
180
+
181
+ <el-dialog title="应用内容推送" append-to-body
182
+ @close="viewMenuPushDialogClose" :close-on-click-modal="false"
183
+ v-loading="menuPushLoading"
184
+ element-loading-text="正在推送请稍后..."
185
+ element-loading-spinner="el-icon-loading"
186
+ element-loading-background="rgba(0, 0, 0, 0.4)"
187
+ :visible.sync="sureMenuPushVisible" width="60%" height="55%" top="10vh">
188
+ <el-container style="height: 100%;width: 100%">
189
+ <el-form :model="menuPushObj" style="width: 100%;height: 100%" ref="menuPushObjFormRef" label-width="110px">
190
+ <el-row>
191
+ <el-col :span="12">
192
+ <el-form-item label="关联菜单" prop="linkMenuName" >
193
+ <el-input v-model="menuPushObj.linkMenuName" disabled></el-input>
194
+ </el-form-item>
195
+ </el-col>
196
+ <el-col :span="12">
197
+ <el-form-item label="推送类型" prop="pushType" style="width: 100%">
198
+ <el-radio-group v-model="menuPushObj.pushType" disabled>
199
+ <el-radio :label="key" v-for="(value,key) in pushTypeObj" :key="key">
200
+ {{value}}
201
+ </el-radio>
202
+ </el-radio-group>
203
+ </el-form-item>
204
+ </el-col>
205
+ </el-row>
206
+ <el-row>
207
+ <el-col :span="12">
208
+ <el-form-item label="内容名称" prop="contentName" style="width: 100%" :rules="plValidate('required')">
209
+ <el-input v-model="menuPushObj.contentName" maxlength="100" show-word-limit></el-input>
210
+ </el-form-item>
211
+ </el-col>
212
+ <el-col :span="12">
213
+ <el-form-item label="内容版本" prop="contentVersion" style="width: calc(100% - 10px);" :rules="menuPushContentVersion">
214
+ <el-input v-model="menuPushObj.contentVersion" ></el-input>
215
+ <el-tooltip effect="dark" content="内容版本默认为1.0,升级状态的推动类型默认为上次版本+0.01,小数位最高.99" placement="top">
216
+ <i class="el-icon-info" style="position:absolute;top: 10px;right:-15px;
217
+ font-size: 16px;cursor: pointer;color: #5cb6ff;"></i>
218
+ </el-tooltip>
219
+ </el-form-item>
220
+ </el-col>
221
+ </el-row>
222
+ <el-form-item label="内容说明" prop="contentMark" style="width: 100%" :rules="plValidate('required')">
223
+ <el-input size="small" type="textarea" v-model="menuPushObj.contentMark"
224
+ :rows="8" resize="none" style="margin-bottom: 7px;" maxlength="500" show-word-limit></el-input>
225
+ </el-form-item>
226
+ </el-form>
227
+ </el-container>
228
+ <div slot="footer" class="dialog-footer">
229
+ <el-button type="primary" @click="startMenuPush()" :disabled="menuPushLoading" size="small" icon="el-icon-success">推 送</el-button>
230
+ <el-button @click="sureMenuPushVisible = false" :disabled="menuPushLoading" size="small" icon="el-icon-error">取 消</el-button>
231
+ </div>
232
+ </el-dialog>
233
+ </el-main>
234
+ </div>
235
+ </template>
236
+
237
+ <script>
238
+ import MenuManageComponent from './component/menuManageComponent';
239
+
240
+ const groupBy = (arr, func) =>
241
+ arr.map(typeof func === 'function' ? func : val => val[func]).reduce((acc, val, i) => {
242
+ acc[val] = (acc[val] || []).concat(arr[i]);
243
+ return acc;
244
+ }, {});
245
+ export default {
246
+ name: "tenant-menu-manage",
247
+ components: {MenuManageComponent},
248
+ data() {
249
+ let contentVersionValidator =(rule,value,callback) =>{
250
+ if(!value){
251
+ callback();
252
+ }else {
253
+ let regFd = /^\d+(\.\d+)?$/; //非负浮点数
254
+ if(!regFd.test(value)){
255
+ return callback(new Error('请输入正确的内容版本'));
256
+ }else {
257
+ //判断版本长度
258
+ let suffix = value.split(".")[1];
259
+ if(suffix.length > 2){
260
+ return callback(new Error('版本号最多为两位小数'));
261
+ }else if(Number(value) <= (Number(this.oldContentVersion)) && Number(value) > 1.0){
262
+ //比较上一个版本
263
+ return callback(new Error('内容版本必须比上一个版本'+this.oldContentVersion+'大'));
264
+ }else if(Number(value) < 1.0){
265
+ return callback(new Error('内容版本最小为1.0'));
266
+ }else {
267
+ callback();
268
+ }
269
+ }
270
+ }
271
+ };
272
+ return {
273
+ activeName: 0,
274
+ tabNames: [], //tabs参数(id,name等)
275
+ sysFeatureMenuTypeOptions: [], //菜单类型-系统功能options
276
+ sysFunctionAddressMap: {}, // 系统功能菜单地址链接map
277
+ customFunctionMenuOptions: [], // 菜单类型-自定义功能菜单options
278
+ customFunctionAddressMap: {}, // 自定义功能菜单地址链接map
279
+ menuVisible: false, // 右击菜单显示的控制
280
+ top: 0,
281
+ left: 0,
282
+ showChangeLocal:false, // 可以转移菜单归属
283
+ formData:{},
284
+ changeLocalDialog:false,
285
+ currentNode:{},
286
+ options:[], // 下拉数据(去除当前归属)
287
+ originOptions:[], // 下拉数据的来源
288
+ menuAllData:[],
289
+ moduleAllData:[],
290
+ loading:true,
291
+ loginUser:{},
292
+ copyDialogVisible:false,//复制或转移菜单弹窗
293
+ copyMenuformData:{},
294
+ copyMenu:[],//菜单复制到的位置
295
+ defaultProps: {
296
+ value: "id",
297
+ label: "menuName"
298
+ },
299
+ cascaderKey:0,
300
+ sourcesArr:[],
301
+ sourcesObj:{}, //下拉树obj
302
+ loadResource:false,
303
+ rSourceTypeObj:{"form":"智能建表","singleForm":"单表表单","flow":"工作流","cview":"复合视图","sysFea":"自定义功能",
304
+ "sysFun":"系统功能","url":"url资源","statRep":"统计报表"},
305
+
306
+ //移动端菜单
307
+
308
+ menuType:'web', // web mobile
309
+ mobileIndex:-1,//移动端下表
310
+ importVisible:false,
311
+ fileList:[],
312
+ sureUploadResourceVisible:false,
313
+ uploadCloudMenuIdArr:[], //上传云仓库的菜单id
314
+ cloudUploadObj:{
315
+ sourceName:'',
316
+ sourceVersion:'',
317
+ sourceKey:'',
318
+ sourceMark:''
319
+ },
320
+ mobileTabId:'',//移动端菜单id
321
+ sourceKeyRules:[
322
+ {validator:this.platValidator.codechick,trigger:'blur'},
323
+ ],
324
+
325
+ menuPushObj:{
326
+ linkMenu:'',
327
+ linkMenuName:'',//关联菜单名称
328
+ pushType:'',
329
+ contentName:'',
330
+ contentVersion:'',
331
+ contentMark:''
332
+ },
333
+ sureMenuPushVisible:false, //菜单推送弹窗
334
+ oldContentVersion:'',//上一个版本号
335
+ pushTypeObj:{
336
+ "add":"新增",
337
+ "upgrade":"升级",
338
+ },
339
+ menuPushLoading:false,
340
+ menuPushContentVersion:[
341
+ {required: true, message: '该输入项为必输项'},
342
+ {validator:contentVersionValidator,trigger:'blur'},
343
+ ],
344
+ tenantId:'',
345
+ }
346
+ },
347
+ watch: {
348
+ 'copyMenu'(newVal) {
349
+ this.cascaderKey++; //只要监听到数据源发生变化 ,改变keyValue的值,达到重新渲染的效果
350
+ }
351
+ },
352
+ created() {
353
+ this.initCredentialData().then(()=>{
354
+ this.initLoginInfo();
355
+ this.initMenuData2().then(()=>{
356
+ this.initTabs();
357
+ // this.initData();
358
+ this.initSysRources();
359
+ });
360
+ });
361
+ },
362
+ methods: {
363
+ /**
364
+ * 查询系统资源池
365
+ */
366
+ initSysRources(){
367
+ let vm = this;
368
+ let allResourcesArr = [];
369
+ vm.sourcesArr = []; //绑定资源数据
370
+ vm.sourcesObj = {};
371
+ vm.axios.post(this.api.resources.findResources,{rTypes: "page,menu,href",rStatus:'1'}).then(res =>{ //获取绑定资源数据
372
+ if(res.data && res.data.operateObj){
373
+ allResourcesArr = res.data.operateObj || [];
374
+ (res.data.operateObj || []).forEach(item =>{
375
+ vm.sourcesObj[item.id] = item;
376
+ });
377
+ }
378
+
379
+ //对资源池总数据根据数据来源分组 rSource
380
+ let sourceData = this.getrSource(allResourcesArr);
381
+ sourceData.forEach(item =>{
382
+ let childData = this.getrClass(item['children'] || []);
383
+ this.$set(item,'children',childData || []);
384
+ });
385
+ sourceData = JSON.parse(JSON.stringify(sourceData).replace(/id/g, 'value').replace(/rname/g,'label'));
386
+ vm.sourcesArr = sourceData;
387
+ this.loadResource = true;
388
+ });
389
+
390
+ },
391
+
392
+ /**
393
+ * 根据 rSource 的分组
394
+ * @param dataArr
395
+ */
396
+ getrSource(dataArr){
397
+ let map = {},
398
+ dest = [];
399
+ dataArr.forEach(ai =>{
400
+ if(!map[ai.rsource]){
401
+ dest.push({
402
+ value: ai.rsource,
403
+ label: this.rSourceTypeObj[ai.rsource],
404
+ children: [ai]
405
+ });
406
+ map[ai.rsource] = ai;
407
+ }else{
408
+ dest.forEach(dj =>{
409
+ if(dj.value == ai.rsource){
410
+ dj.children.push(ai);
411
+ }
412
+ });
413
+ }
414
+ });
415
+ return dest;
416
+ },
417
+
418
+ /**
419
+ * 根据 rCalssId 分组
420
+ */
421
+ getrClass(dataArr){
422
+ let map = {},
423
+ dest = [];
424
+ dataArr.forEach(ai =>{
425
+ if(!map[ai.rclassId]){
426
+ dest.push({
427
+ value: ai.rclassId,
428
+ label: ai.rclass,
429
+ children: [ai]
430
+ });
431
+ map[ai.rclassId] = ai;
432
+ }else{
433
+ dest.forEach(dj =>{
434
+ if(dj.value == ai.rclassId){
435
+ dj.children.push(ai);
436
+ }
437
+ });
438
+ }
439
+ });
440
+ return dest;
441
+ },
442
+
443
+ initLoginInfo(){
444
+ //获取当前登录用户信息
445
+ this.loginUser = this.USER_GLOBAL.getLoginUser() || {};
446
+ },
447
+ async initMenuData(){
448
+ let vm = this;
449
+ await vm.axios.post(vm.api.menu.find,{"order":"MENU_ORDER"}).then(res => {
450
+ vm.menuAllData = res.data || [];
451
+ });
452
+ },
453
+
454
+ initMenuData2(){
455
+ return new Promise(resolve => {
456
+ let vm = this;
457
+ vm.axios.post(vm.api.menu.find,{"order":"MENU_ORDER"}).then(res => {
458
+ vm.menuAllData = res.data || [];
459
+ resolve();
460
+ });
461
+ });
462
+ },
463
+
464
+ async refreshMenuData(){
465
+ let vm = this;
466
+ vm.loading = true;
467
+ await this.initMenuData();
468
+ for(let i = 0; i < vm.tabNames.length; i++){
469
+ if(this.menuType == 'web'){
470
+ if(vm.$refs['tab_' + i]){
471
+ vm.$refs['tab_' + i][0].initMenuRootData();
472
+ vm.$refs['tab_' + i][0].firstLoad = true;
473
+ }
474
+ }else if(this.menuType == 'mobile' && vm.$refs['tab_' + this.mobileIndex]){
475
+ vm.$refs['tab_' + this.mobileIndex][0].initMenuRootData();
476
+ vm.$refs['tab_' + this.mobileIndex][0].firstLoad = true;
477
+ }
478
+ }
479
+ vm.$nextTick(() => {
480
+ vm.loading = false;
481
+ })
482
+ },
483
+ async initTabs() {
484
+ let vm =this;
485
+ //初始化tabs
486
+ vm.axios.post(vm.api.sysOrgDimension.find,{order:'SORT ASC'}).then((res) => {
487
+ let {data} = res;
488
+ if (data.length > 0) {
489
+ let index = 0;
490
+ for (let {dimSpec, id, isUse} of data) {
491
+ //判断是否启用和dimSpec是否有值
492
+ if (isUse == '1' && dimSpec) {
493
+ let dimSpecObj = JSON.parse(dimSpec || "{}");
494
+
495
+ for (let [key, value] of Object.entries(dimSpecObj)) {
496
+ let obj = {};
497
+ obj['id'] = id;
498
+ if (key === 'menuLocalName') {
499
+ obj['value'] = value;
500
+ vm.tabNames.push(obj);
501
+ if(value == '移动端'){
502
+ vm.mobileTabId = obj.id;
503
+ vm.mobileIndex = index;
504
+ }
505
+ index ++;
506
+ }
507
+ }
508
+ }
509
+
510
+ }
511
+ }
512
+
513
+ let sysTabObj = {
514
+ id: 'sys',
515
+ value: '系统'
516
+ };
517
+ vm.tabNames.push(sysTabObj);
518
+ if(this.isDevpUser(this.loginUser.userType)){ //当前为开发者
519
+ vm.tabNames.push({
520
+ id: 'dev',
521
+ value: '开发者'
522
+ });
523
+ }
524
+ // vm.tabNames.push(this.mobileTabObj); //移动端菜单
525
+
526
+ vm.loading = false;
527
+ // vm.axios.post(vm.api.menuModule.find).then(resDimension => {
528
+ // let obj = {};
529
+ // (resDimension.data || []).forEach(item => {
530
+ // let arr = obj[item.orgDimensionId] || [];
531
+ // arr.push({"label":item.moduleName,"value":item.id});
532
+ // obj[item.orgDimensionId] = arr;
533
+ // });
534
+ // vm.tabNames.forEach(item => {
535
+ // vm.originOptions.push({"value":item.id,"label":item.value,"children":(obj[item.id] || [])});
536
+ // });
537
+ // })
538
+ });
539
+ },
540
+ /**
541
+ * 选中树菜单
542
+ * @param key 目前的选中值
543
+ */
544
+ handleRightSelect(key) {
545
+ if(key == "changeLocal"){
546
+ this.changeLocal();
547
+ }else if((key == "copyCurrent") || (key == "copyCheck")){
548
+ this.copyMenuformData = {};
549
+ if(key == "copyCurrent"){
550
+ this.copyMenuformData.key = "copyCurrent";
551
+ }
552
+ if(key == "copyCheck"){
553
+ this.copyMenuformData.key = "copyCheck";
554
+ }
555
+ this.copyDialogVisible = true;
556
+ }else{
557
+ if(this.menuType == 'web'){
558
+ if(Number(this.mobileIndex) > Number(this.activeName) || Number(this.mobileIndex) == -1){
559
+ this.$refs['tab_' + this.activeName][0].handleRightSelect(key);
560
+ }else {
561
+ this.$refs['tab_' + (Number(this.activeName)+1)][0].handleRightSelect(key);
562
+ }
563
+ }else {
564
+ //获取最大长度
565
+ this.$refs['tab_' + this.mobileIndex][0].handleRightSelect(key);
566
+ }
567
+ }
568
+ },
569
+ /**
570
+ * 菜单归属发生变化
571
+ * @param data 目前的选中值
572
+ */
573
+ changeModel(data){
574
+ let vm = this;
575
+ let param ={
576
+ "order": "MENU_ORDER",
577
+ "cdss": data,
578
+ };
579
+ vm.axios.post(vm.api.menu.find, param).then(function (res) {
580
+ if(res.data){
581
+ let data = res.data || [];
582
+ let paramSetting = {};
583
+ paramSetting["id"] = "id";
584
+ paramSetting["pId"] = "menuChiefNum"; //上级数据
585
+ paramSetting["children"] = "children"; // 设置children可配置
586
+ vm.copyMenu = vm.COMMON_FUNC.buildElTree(data,paramSetting)|| [];
587
+ }
588
+ });
589
+ },
590
+ /**
591
+ * 移动或复制完成后关闭弹窗
592
+ * @param
593
+ */
594
+ closeDialog(data){
595
+ this.copyDialogVisible = false;
596
+ },
597
+ changeLocal(){
598
+ let vm = this;
599
+ let menuData = vm.currentNode.data;
600
+ vm.formData["menuName"] = menuData.menuName;
601
+ vm.formData["id"] = menuData.id;
602
+ vm.options = vm.originOptions.filter(item => {
603
+ return item.value != menuData.cdss;
604
+ });
605
+ vm.changeLocalDialog = true;
606
+ },
607
+ getCurrentChildren(data,allNodeArr){ // 获取指定节点的所有下级(包括自己)的id
608
+ let vm = this;
609
+ let childProper = "children";
610
+ if(data.id != '-1'){
611
+ allNodeArr.push(data.id);
612
+ }
613
+ if(data[childProper] && data[childProper].length > 0){
614
+ for(let elem of data[childProper]){
615
+ vm.getCurrentChildren(elem,allNodeArr);
616
+ }
617
+ }
618
+ return allNodeArr;
619
+ },
620
+ changeMenuStatus(status, e, node) {
621
+ let vm = this;
622
+ let obj = {"Y": true, "N": false, "opposite": !vm.menuVisible};
623
+ vm.showChangeLocal = false;
624
+ vm.menuVisible = obj[status];
625
+ if (!vm.menuVisible) {
626
+ return;
627
+ }
628
+ if(node.level == 2){
629
+ vm.showChangeLocal = true;
630
+ vm.currentNode = node;
631
+ }
632
+ vm.left = (window.event || e).clientX + "px";
633
+ if(((window.event || e).clientY + 240) > (vm.$refs.tab.$el.clientHeight + 115)){
634
+ // vm.$refs.tab.$el.clientHeight + 115 - 240(弹出框高度)
635
+ vm.top = (vm.$refs.tab.$el.clientHeight - 125) + "px";
636
+ }else{
637
+ vm.top = (window.event || e).clientY + "px";
638
+ }
639
+ },
640
+ saveLocal(){
641
+ let vm = this;
642
+ vm.$refs.localRef.validate(valid => {
643
+ if(!valid){
644
+ return;
645
+ }
646
+ let allArr = vm.getCurrentChildren(vm.currentNode.data,[]);
647
+ let menuLocal = (vm.formData.menuLocalAll)[0];
648
+ let menuModule = (vm.formData.menuLocalAll)[1];
649
+ let sumitArr = [];
650
+ allArr.forEach(id => {
651
+ sumitArr.push({"id":id,"cdss":menuLocal,"menuModel":menuModule});
652
+ });
653
+ vm.axios.post(vm.api.menu.batchUpdateMenu,{"menuStr":JSON.stringify(sumitArr)}).then(res => {
654
+ vm.$message({
655
+ type: 'success',
656
+ message: res.data.operateMessage || '修改成功'
657
+ });
658
+ vm.changeLocalDialog = false;
659
+ if(res.data.operateSuccess){
660
+ vm.refreshMenuData();
661
+ }
662
+ });
663
+ });
664
+ },
665
+ isDevpUser(userType){
666
+ return userType == 'dev' || userType == 'sup';
667
+ },
668
+ /**
669
+ * 菜单分类值发生变化后关闭下拉框
670
+ * @param
671
+ */
672
+ close(val){
673
+ this.$refs.cascaderArr.dropDownVisible = false; //监听值发生变化就关闭它
674
+ },
675
+ /**
676
+ * 复制并移动菜单、复制菜单 点击事件
677
+ * @param data
678
+ */
679
+ copy(data){
680
+ this.copyMenuformData.operate = data;
681
+ let menuTreeChildred = (this.$refs.cascaderArr.getCheckedNodes())[0].children;
682
+ if(this.menuType == 'web'){
683
+ if(Number(this.mobileIndex) > Number(this.activeName) || Number(this.mobileIndex) == -1){
684
+ this.$refs['tab_' + this.activeName][0].handleRightCopySelect(this.copyMenuformData,menuTreeChildred);
685
+ }else {
686
+ this.$refs['tab_' + (Number(this.activeName)+1)][0].handleRightCopySelect(this.copyMenuformData,menuTreeChildred);
687
+ }
688
+ }else {
689
+ //获取最大长度
690
+ this.$refs['tab_' + this.mobileIndex][0].handleRightCopySelect(this.copyMenuformData,menuTreeChildred);
691
+ }
692
+ },
693
+
694
+ /**
695
+ * 切换菜单类型
696
+ */
697
+ menuTypeClick(){
698
+ // this.menuType = this.menuType == 'web'? 'mobile':'web';
699
+ this.activeName = "0";
700
+ },
701
+
702
+ /**
703
+ * 导出菜单
704
+ */
705
+ exportMenu(){
706
+ let checkData;
707
+ if(this.menuType == 'web'){
708
+ if(Number(this.mobileIndex) > Number(this.activeName) || Number(this.mobileIndex) == -1){
709
+ checkData = this.$refs['tab_' + this.activeName][0].$refs.commonTreeRef.getTreeCheckedNodes("") || [];
710
+ }else {
711
+ checkData = this.$refs['tab_' + (Number(this.activeName)+1)][0].$refs.commonTreeRef.getTreeCheckedNodes("") || [];
712
+ }
713
+ }else if(this.menuType == 'mobile'){
714
+ checkData = this.$refs['tab_' + this.mobileIndex][0].$refs.commonTreeRef.getTreeCheckedNodes("") || [];
715
+ }
716
+ let meuIdArr = [];
717
+ (checkData || []).forEach(item =>{
718
+ meuIdArr.push(item.id);
719
+ });
720
+ if(meuIdArr.length == 0){
721
+ this.$message.warning("请选择需要上传的数据!");
722
+ return;
723
+ }
724
+ this.uploadCloudMenuIdArr = meuIdArr;
725
+
726
+ this.$set(this.cloudUploadObj,'sourceName','');
727
+ this.$set(this.cloudUploadObj,'sourceVersion','');
728
+ this.$set(this.cloudUploadObj,'sourceKey','');
729
+ this.$set(this.cloudUploadObj,'sourceMark','');
730
+ this.sureUploadResourceVisible = true;//显示上传
731
+ this.$nextTick(() => {
732
+ this.$refs.cloudUploadFormRef.clearValidate();
733
+ })
734
+ },
735
+
736
+ /**
737
+ * 菜单推送
738
+ */
739
+ menuPush(){
740
+ let checkData;
741
+ if(this.menuType == 'web'){
742
+ if(Number(this.mobileIndex) > Number(this.activeName) || Number(this.mobileIndex) == -1){
743
+ checkData = this.$refs['tab_' + this.activeName][0].$refs.commonTreeRef.getTreeCheckedNodes("") || [];
744
+ }else {
745
+ checkData = this.$refs['tab_' + (Number(this.activeName)+1)][0].$refs.commonTreeRef.getTreeCheckedNodes("") || [];
746
+ }
747
+ }else if(this.menuType == 'mobile'){
748
+ checkData = this.$refs['tab_' + this.mobileIndex][0].$refs.commonTreeRef.getTreeCheckedNodes("") || [];
749
+ }
750
+ let isContainsPMenu =false; //是否包含菜单
751
+ let menuArr = [];
752
+ (checkData || []).forEach(item =>{
753
+ if(item.menuType == "pMenu"){
754
+ isContainsPMenu = true;
755
+ }
756
+ menuArr.push(item);
757
+ });
758
+ if(menuArr.length == 0){
759
+ this.$message.warning("请勾选需要推送的菜单!");
760
+ return;
761
+ }
762
+ if(menuArr.length > 1){
763
+ this.$message.warning("每次只能推送一个菜单!");
764
+ return;
765
+ }
766
+ if(isContainsPMenu){
767
+ this.$message.warning("父菜单不能推送!");
768
+ return;
769
+ }
770
+ let menuObj = menuArr[0];
771
+ //
772
+ //查询当前关联菜单是否已经存在,如果已经存在 推送类型为升级
773
+ //获取版本
774
+ this.$set(this.menuPushObj,'contentVersion','1.0');
775
+ this.$set(this.menuPushObj,'pushType','add');
776
+ //赋值菜单名称
777
+ this.$set(this.menuPushObj,'linkMenuName',menuObj.menuName);
778
+ this.$set(this.menuPushObj,'linkMenu',menuObj.id);
779
+ this.$set(this.menuPushObj,'contentName',menuObj.menuName); //内容名称
780
+ this.oldContentVersion = "1.0";
781
+ this.$set(this.menuPushObj,'contentMark',''); //内容说明
782
+ this.axios.post(this.api.sysAppContent.find,{"linkMenu":menuObj.id,"order":'CONTENT_VERSION+0 DESC'}).then(res =>{
783
+ if(res && res.data && res.data.length > 0){
784
+ this.$set(this.menuPushObj,'pushType','upgrade');
785
+ //获取最大版本号
786
+ this.oldContentVersion = res.data[0].contentVersion;
787
+ //设置默认版本号
788
+ // Number(this.oldContentVersion) + 0.1;
789
+ this.$set(this.menuPushObj,'contentVersion',(Number(this.oldContentVersion) + 0.01) +"");
790
+ if(this.menuPushObj.contentVersion.indexOf(".") == -1){
791
+ this.menuPushObj.contentVersion = this.menuPushObj.contentVersion+".0"; //整数情况赋值小数点
792
+ }
793
+ }
794
+ this.sureMenuPushVisible = true;
795
+ this.$nextTick(() => {
796
+ this.$refs.menuPushObjFormRef.clearValidate();
797
+ })
798
+ });
799
+ },
800
+
801
+ // /**
802
+ // * 菜单导入
803
+ // */
804
+ // importMenu(){
805
+ // //选择导入的文件
806
+ //
807
+ //
808
+ //
809
+ //
810
+ //
811
+ // },
812
+
813
+ /**
814
+ * 限制文件仅可上传一个并且多次上传覆盖的方法
815
+ */
816
+ limitFile(files){
817
+ let file = files[0];
818
+ let fileSuffix = file.name.substring(file.name.lastIndexOf("."), file.name.length);
819
+ if (fileSuffix != '.clmdmp') {
820
+ this.$message.error('不支持' + fileSuffix + '文件类型!');
821
+ this.$refs.impFileRef.clearFiles();
822
+ }else{
823
+ let fileData = {
824
+ name:file.name,
825
+ percentage:0,
826
+ raw:file,
827
+ size:file.size,
828
+ status:'ready',
829
+ uid:file.uid
830
+ };
831
+ this.fileList = [fileData];
832
+ }
833
+ },
834
+
835
+ changeFile(file,fileList){
836
+ let fileSuffix = file.name.substring(file.name.lastIndexOf("."), file.name.length);
837
+ if (fileSuffix != '.clmdmp') {
838
+ this.$message.error('不支持' + fileSuffix + '文件类型!');
839
+ this.$refs.impFileRef.clearFiles();
840
+ }else{
841
+ this.fileList = fileList;
842
+ }
843
+ },
844
+
845
+ beforeUpload(file) {
846
+ let fileSuffix = file.name.substring(file.name.lastIndexOf("."), file.name.length);
847
+ if (fileSuffix != '.clmdmp') {
848
+ this.$message.error('不支持' + fileSuffix + '文件类型!');
849
+ this.fileTypeValid = false;
850
+ return false;
851
+ }
852
+ return true;
853
+ },
854
+
855
+ /**
856
+ * 上传方法
857
+ */
858
+ uploadFileMethod(item) {
859
+ let vm = this;
860
+ let formData = new FormData();
861
+ formData.append("file", item.file);
862
+ //创建axios实例
863
+ vm.axios.defaults.headers=null;
864
+ const axiosInstance = vm.axios.create({
865
+ baseURL: vm.uploadUrl,
866
+ headers: {
867
+ 'Content-Type': 'multipart/form-data',
868
+ Authorization: (this.USER_GLOBAL.getLoginToken() || "")
869
+ },
870
+ transformRequest: [
871
+ function (data) {
872
+ return data;
873
+ }
874
+ ],
875
+ });
876
+
877
+ vm.loading = true;
878
+ //上传文件
879
+ axiosInstance.post(this.api.menu.importMenuData, formData).then(res => {
880
+ vm.axios.defaults.headers={
881
+ 'Content-Type': 'application/x-www-form-urlencoded',
882
+ common: {
883
+ Authorization: (localStorage["Authorization" + (window.projectSuffix || "")] || "")
884
+ }
885
+ };
886
+ if(res.data.operateSuccess){
887
+ this.$message.success(res.data.operateMessage);
888
+ this.impDialogVisible = false;
889
+ // 当返回code是4或5说明导入了数据,其它code码都是不需要导入或者已存在数据,不需要刷新数据
890
+ if(res.data.resultObject == '4' || res.data.resultObject == '5'){
891
+ this.crud.search();
892
+ this.refreshAllCache(); // 导入成功后刷新智能建表缓存
893
+ }
894
+ }else{
895
+ this.$message.error(res.data.operateMessage);
896
+ }
897
+ vm.loading = false;
898
+ }).catch(() => {
899
+ vm.axios.defaults.headers={
900
+ 'Content-Type': 'application/x-www-form-urlencoded',
901
+ common: {
902
+ Authorization: (localStorage["Authorization" + (window.projectSuffix || "")] || "")
903
+ }
904
+ };
905
+ });
906
+ },
907
+
908
+ /**
909
+ * 开始导入
910
+ */
911
+ beginImp(){
912
+ if(this.fileList.length == 0){
913
+ this.$message.error("请选择需要导入的文件!");
914
+ return;
915
+ }
916
+ this.$confirm('是否确定导入菜单配置数据?', '确认信息', {
917
+ distinguishCancelAndClose: true,
918
+ confirmButtonText: '确定',
919
+ cancelButtonText: '取消'
920
+ }).then(() => {
921
+ this.$refs.impFileRef.submit();
922
+ this.importVisible = false;
923
+ });
924
+
925
+ },
926
+
927
+ //关闭
928
+ viewDialogClose(){
929
+ this.sureUploadResourceVisible = false;
930
+ },
931
+
932
+ //执行上传
933
+ startUploadCloud(){
934
+ this.$refs.cloudUploadFormRef.validate(valid => {
935
+ if(!valid){
936
+ return;
937
+ }
938
+ let loading = this.$loading({
939
+ lock: true,
940
+ text: '正在上传请稍后....',
941
+ spinner: 'el-icon-loading',
942
+ background: 'rgba(0, 0, 0, 0.7)',
943
+ customClass:'loading-class'
944
+ });
945
+ let menuParamObj = {};
946
+ menuParamObj["menuIds"] = this.uploadCloudMenuIdArr.join(",");
947
+ menuParamObj["sourceName"] = this.cloudUploadObj.sourceName;
948
+ menuParamObj["sourceMark"] = this.cloudUploadObj.sourceMark;
949
+ menuParamObj["sourceVersion"] = this.cloudUploadObj.sourceVersion; //资源版本
950
+ menuParamObj["sourceKey"] = this.cloudUploadObj.sourceKey; //资源标识
951
+ this.axios.post(this.api.menu.uploadMenuDataByCloud,menuParamObj).then(res => {
952
+ if(res && res.data && res.data.operateSuccess){
953
+ this.$message.success(res.data.operateMessage);
954
+ this.sureUploadResourceVisible = false;
955
+ }else {
956
+ this.$message.error(res.data.operateMessage || "上传失败!");
957
+ }
958
+ loading && loading.close();
959
+ });
960
+ });
961
+ },
962
+
963
+ //关闭应用内容推送
964
+ viewMenuPushDialogClose(){
965
+ this.sureMenuPushVisible = false;
966
+ },
967
+
968
+ //开始应用推送
969
+ startMenuPush(){
970
+ //校验
971
+ this.$refs.menuPushObjFormRef.validate(valid => {
972
+ if(!valid){
973
+ return;
974
+ }
975
+ //开始推送
976
+ this.menuPushLoading = true;
977
+ let paramObj = JSON.parse(JSON.stringify(this.menuPushObj));
978
+ delete paramObj.linkMenuName;
979
+ this.axios.post(this.api.sysAppContent.appPushContent,paramObj).then(res =>{
980
+ if(res.data && res.data.requestStatus == '1'){
981
+ this.$message({
982
+ type:"success",
983
+ message:"推送成功!"
984
+ })
985
+ this.sureMenuPushVisible = false;
986
+ }else {
987
+ this.$message({
988
+ type:"error",
989
+ message:"推送失败!"
990
+ })
991
+ }
992
+ this.menuPushLoading = false;
993
+ })
994
+ });
995
+ },
996
+
997
+
998
+ /**
999
+ * 初始化第三方用户权限
1000
+ */
1001
+ initCredentialData(){
1002
+ return new Promise(resolve => {
1003
+ let urlParam = this.COMMON_FUNC.getUrlParamBysplit(window.location.href);
1004
+ let appId = urlParam["appId"] || '';
1005
+ let userCredential = urlParam["userCredential"] || '';
1006
+ //获取应用的
1007
+ let serverId = window.SERVER_ID; //服务商id
1008
+ let serverAddress = window.SERVER_ADDRESS; //服务端地址
1009
+ if(!appId || !userCredential){ //直接返回登录页面
1010
+ this.$router.push({path: '/'});
1011
+ resolve();
1012
+ }
1013
+ //请求
1014
+ this.axios.post(serverAddress+"/oauthController/getAuthorizeInfoCredential",{"userCredential":userCredential,appId:appId,serveId:serverId}).then(res =>{
1015
+ if(res && res.data.success == '1'){
1016
+ //获取 userDetail
1017
+ let userDetail = res.data.userDetail || "{}";
1018
+ this.tenantId = JSON.parse(userDetail).tenantId || '';
1019
+ this.loginUser = JSON.parse(userDetail);
1020
+ // this.axios.post(this.api.sysOrgDimension.find,{dimName:"租户维度"}).then(res =>{
1021
+ // if(res.data && res.data.length == 0){
1022
+ // let dimSpec = {"closeDept":false,"closePos":true,"closeMainPos":false,"openRoleType":false,"openMenuLocal":true,"allowAddUser":false,"chooseUserType":"ent","menuLocalName":"企业用户"};
1023
+ // //插入 租户维度
1024
+ // let orgDim = {
1025
+ // dimName:'租户维度',
1026
+ // dimSpec: JSON.stringify(dimSpec),
1027
+ // isUse:'1'
1028
+ // }
1029
+ // this.axios.post(this.api.sysOrgDimension.add,orgDim).then(res =>{
1030
+ // resolve();
1031
+ // })
1032
+ // }else {
1033
+ // resolve();
1034
+ // }
1035
+ // });
1036
+ resolve();
1037
+ }else { //跳转到登录页
1038
+ this.$router.push({path: '/'});
1039
+ }
1040
+ });
1041
+ });
1042
+ }
1043
+ }
1044
+ }
1045
+ </script>
1046
+
1047
+ <style scoped>
1048
+ .menu-manage-main /deep/ .el-tabs--border-card {
1049
+ height: 100%;
1050
+ }
1051
+
1052
+ .menu-manage-main /deep/ .el-tabs__content {
1053
+ height: calc(100% - 40px);
1054
+ box-sizing: border-box;
1055
+ }
1056
+
1057
+ .menu-manage-main /deep/ .el-tab-pane {
1058
+ height: 100%;
1059
+ }
1060
+
1061
+ .menu-manage-main /deep/ .el-tabs__content {
1062
+ padding: 0;
1063
+ }
1064
+
1065
+ .el-menu-vertical {
1066
+ background-color: #555C63;
1067
+ opacity: 0.9;
1068
+ border-radius: 8px;
1069
+ width: 200px;
1070
+ z-index: 99;
1071
+ }
1072
+
1073
+ .el-menu-vertical /deep/ .el-menu-item.is-active {
1074
+ color: #fff;
1075
+ }
1076
+
1077
+ .el-menu-vertical /deep/ .el-menu-item i {
1078
+ color: #909399;
1079
+ }
1080
+
1081
+ /deep/ .el-color-picker .el-color-picker__trigger{
1082
+ height: 36px;
1083
+ width: 36px;
1084
+ opacity: 1;
1085
+ }
1086
+ .el-menu-type{
1087
+ width: 200px;
1088
+ position: absolute;
1089
+ top: -10px;
1090
+ right: 20px;
1091
+ z-index: 99;
1092
+ /*height: 30px;*/
1093
+ /*width: 30px;*/
1094
+ background-color: white;
1095
+ cursor: pointer;
1096
+ margin: 30px;
1097
+ height: 0;
1098
+ }
1099
+
1100
+ .el-menu-export{
1101
+ position: absolute;
1102
+ top:0px;
1103
+ left: 450px;
1104
+ z-index: 999999;
1105
+ height: 40px;
1106
+ width: 30px;
1107
+ background-color: rgba(255,255,255,0.1);
1108
+ opacity: 0.8;
1109
+ cursor: pointer;
1110
+ }
1111
+ .el-menu-import{
1112
+ position: absolute;
1113
+ top:2px;
1114
+ left: 500px;
1115
+ z-index: 999999;
1116
+ height: 40px;
1117
+ width: 30px;
1118
+ background-color: rgba(255,255,255,0.1);
1119
+ opacity: 0.8;
1120
+ cursor: pointer;
1121
+ }
1122
+ .menu-upload-btn{
1123
+ position: absolute;
1124
+ top: 10px;
1125
+ z-index: 2021;
1126
+ left: 450px;
1127
+ top: 16px;
1128
+ }
1129
+ /deep/ .v-modal{
1130
+ z-index: 9999999 !important
1131
+ }
1132
+ </style>