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