qgb-process 0.2.3 → 0.2.7

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 (502) hide show
  1. package/.env +2 -2
  2. package/.env.development +70 -70
  3. package/.env.pre +60 -60
  4. package/.env.production +48 -48
  5. package/.env.test +48 -48
  6. package/.eslintignore +4 -4
  7. package/.eslintrc.js +302 -302
  8. package/README.md +66 -66
  9. package/babel.config.js +5 -5
  10. package/commitlint.config.js +30 -30
  11. package/config/dev.env.js +7 -7
  12. package/config/index.js +82 -82
  13. package/config/prod.env.js +4 -4
  14. package/debug.log +4 -4
  15. package/index.js +6 -6
  16. package/jsconfig.json +9 -9
  17. package/lib/qgb-process.common.js +7666 -5069
  18. package/lib/qgb-process.umd.js +7666 -5069
  19. package/lib/qgb-process.umd.min.js +108 -108
  20. package/package.json +148 -148
  21. package/packages/index.js +26 -26
  22. package/public/index.html +47 -47
  23. package/public/js/qykf.js +21 -21
  24. package/src/App.vue +37 -37
  25. package/src/api/ApiExAndapp.js +24 -24
  26. package/src/api/EnterpriseAssociation.js +8 -8
  27. package/src/api/Notice.js +31 -31
  28. package/src/api/apiAcceptance/apiAcceptance.js +37 -37
  29. package/src/api/apiAddress.js +9 -9
  30. package/src/api/apiApprovalConfig.js +13 -13
  31. package/src/api/apiApprove.js +18 -18
  32. package/src/api/apiArrears/apiArrears.js +41 -41
  33. package/src/api/apiArrears/apiProjectArrears.js +16 -16
  34. package/src/api/apiArrears/index.js +15 -15
  35. package/src/api/apiAssets.js +19 -19
  36. package/src/api/apiAssociate.js +42 -42
  37. package/src/api/apiAudit/apiAudit.js +32 -32
  38. package/src/api/apiAuth.js +25 -25
  39. package/src/api/apiAuthentication.js +35 -35
  40. package/src/api/apiBankAccount/index.js +12 -12
  41. package/src/api/apiBudget/apiBudget.js +30 -30
  42. package/src/api/apiBudget/apiBudgets.js +105 -105
  43. package/src/api/apiCarRecord.js +48 -48
  44. package/src/api/apiCart.js +202 -202
  45. package/src/api/apiChangeTel.js +13 -13
  46. package/src/api/apiCheckingIn.js +95 -95
  47. package/src/api/apiCollection/index.js +13 -13
  48. package/src/api/apiContract/apiContract.js +21 -21
  49. package/src/api/apiContract/index.js +3 -3
  50. package/src/api/apiContract/quill-config.js +122 -122
  51. package/src/api/apiContractManage/apiContractManage.js +57 -57
  52. package/src/api/apiContractManage/index.js +2 -2
  53. package/src/api/apiContractManage/quill-config.js +121 -121
  54. package/src/api/apiCoping.js +22 -22
  55. package/src/api/apiCost/index.js +31 -31
  56. package/src/api/apiCreditManagement.js +16 -16
  57. package/src/api/apiCustomer/apiCustomer.js +12 -12
  58. package/src/api/apiDivisional.js +9 -9
  59. package/src/api/apiDivisionalManagementList.js +17 -17
  60. package/src/api/apiEmployeeRegularization.js +73 -73
  61. package/src/api/apiEquipmentRental.js +50 -50
  62. package/src/api/apiFormBuilder/menu.js +65 -65
  63. package/src/api/apiFormBuilder/reissueRule.js +15 -15
  64. package/src/api/apiFund/index.js +16 -16
  65. package/src/api/apiHelp.js +43 -43
  66. package/src/api/apiHome.js +24 -24
  67. package/src/api/apiIminfo.js +39 -39
  68. package/src/api/apiInventory.js +52 -52
  69. package/src/api/apiInventorySetting.js +9 -9
  70. package/src/api/apiInvoice.js +29 -29
  71. package/src/api/apiJobManage.js +15 -15
  72. package/src/api/apiLease/apiLease.js +12 -12
  73. package/src/api/apiLogisticsTransportation/apiLogisticsTransportation.js +34 -34
  74. package/src/api/apiLostPassword.js +9 -9
  75. package/src/api/apiMachine/api.js +3 -3
  76. package/src/api/apiMachine/apiCategory.js +18 -18
  77. package/src/api/apiMachine/apiHire.js +19 -19
  78. package/src/api/apiMachine/apiLease.js +27 -27
  79. package/src/api/apiMachine/apiLocation.js +4 -4
  80. package/src/api/apiMachine/apiRentInfo.js +107 -107
  81. package/src/api/apiMachine/apiRentPublish.js +14 -14
  82. package/src/api/apiMachine/apiStore.js +15 -15
  83. package/src/api/apiMachine/index.js +3 -3
  84. package/src/api/apiManagementStore/api.js +3 -3
  85. package/src/api/apiManagementStore/apiManagementStore.js +25 -25
  86. package/src/api/apiMaterCheckAndAccept/apiMaterCheckAndAccept.js +47 -47
  87. package/src/api/apiMaterCheckAndAccept/apiMechanicalSourcing.js +16 -16
  88. package/src/api/apiMaterCheckAndAccept/index.js +3 -3
  89. package/src/api/apiMaterials/aaaaaaaaaaaaaa.js +9 -9
  90. package/src/api/apiMaterials/api.js +3 -3
  91. package/src/api/apiMaterials/apiAddress.js +116 -116
  92. package/src/api/apiMaterials/apiBalanceData.js +188 -188
  93. package/src/api/apiMaterials/apiCommercialConcrete.js +36 -36
  94. package/src/api/apiMaterials/apiCommodity.js +70 -70
  95. package/src/api/apiMaterials/apiDownload.js +26 -26
  96. package/src/api/apiMaterials/apiHome.js +44 -44
  97. package/src/api/apiMaterials/apiItemBrand.js +9 -9
  98. package/src/api/apiMaterials/apiLogistics.js +72 -72
  99. package/src/api/apiMaterials/apiLogisticsReceipt.js +94 -94
  100. package/src/api/apiMaterials/apiMaterials.js +8 -8
  101. package/src/api/apiMaterials/apiMySalesOrder.js +21 -21
  102. package/src/api/apiMaterials/apiOfflineOrder.js +18 -18
  103. package/src/api/apiMaterials/apiOrder.js +183 -183
  104. package/src/api/apiMaterials/apiReceipt.js +45 -45
  105. package/src/api/apiMaterials/quill-config.js +122 -122
  106. package/src/api/apiMemberSelection.js +39 -39
  107. package/src/api/apiMessage.js +10 -10
  108. package/src/api/apiMock/mockOrder.js +98 -98
  109. package/src/api/apiMonthPlan/apiMonthPlan.js +47 -47
  110. package/src/api/apiMyBidding.js +8 -8
  111. package/src/api/apiMyMember/apiComInfo.js +17 -17
  112. package/src/api/apiMyMember/apiInviteJoin.js +24 -24
  113. package/src/api/apiMyMember/apiMember.js +24 -24
  114. package/src/api/apiMyMember/apiMemberApply.js +36 -36
  115. package/src/api/apiMyMember/apiMemberChance.js +40 -40
  116. package/src/api/apiOffer.js +40 -40
  117. package/src/api/apiOffice.js +19 -19
  118. package/src/api/apiPact.js +26 -26
  119. package/src/api/apiPassword.js +7 -7
  120. package/src/api/apiPay/apiPay.js +25 -25
  121. package/src/api/apiPaying.js +21 -21
  122. package/src/api/apiPayment/apiPayment.js +13 -13
  123. package/src/api/apiPayment/apiProjectPayment.js +13 -13
  124. package/src/api/apiPrint.js +23 -0
  125. package/src/api/apiProcess.js +65 -65
  126. package/src/api/apiProject/apiBaseList.js +29 -29
  127. package/src/api/apiProject/apiGoodsOffer.js +11 -11
  128. package/src/api/apiProject/apiInventory.js +116 -116
  129. package/src/api/apiProject/apiOfferOrder.js +12 -12
  130. package/src/api/apiProject/apiOfferQuery.js +18 -18
  131. package/src/api/apiProject/apiPlan.js +21 -21
  132. package/src/api/apiProject/apiProject.js +158 -158
  133. package/src/api/apiProjectProcurement/apiProjectProcurement.js +88 -88
  134. package/src/api/apiPurchase/apiPurchase.js +67 -67
  135. package/src/api/apiPurchaseApply.js +15 -15
  136. package/src/api/apiPurchasePay.js +16 -16
  137. package/src/api/apiRankManagement.js +24 -24
  138. package/src/api/apiRecruit.js +37 -37
  139. package/src/api/apiReimbursement/apiReimbursement.js +15 -15
  140. package/src/api/apiRisk/index.js +11 -11
  141. package/src/api/apiRoleManagement.js +15 -15
  142. package/src/api/apiRules/apiRules.js +11 -11
  143. package/src/api/apiSchedule/apiSchedule.js +17 -17
  144. package/src/api/apiSealRecord.js +52 -52
  145. package/src/api/apiSign.js +8 -8
  146. package/src/api/apiSolution/apiSolution.js +9 -9
  147. package/src/api/apiSubcontract.js +35 -35
  148. package/src/api/apiSystem/index.js +40 -40
  149. package/src/api/apiTask.js +76 -76
  150. package/src/api/apiTeam/api.js +3 -3
  151. package/src/api/apiTeam/apiUtils.js +11 -11
  152. package/src/api/apiTender.js +127 -127
  153. package/src/api/apiUser.js +24 -24
  154. package/src/api/apiUserEnterprise/api.js +3 -3
  155. package/src/api/apiUserEnterprise/apiUserEn.js +15 -15
  156. package/src/api/apiVolunteerTeam.js +11 -11
  157. package/src/api/apiWorkarea.js +33 -33
  158. package/src/api/apiXzqh.js +8 -8
  159. package/src/api/common/api.js +3 -3
  160. package/src/api/common/apiUtils.js +9 -9
  161. package/src/api/customer.js +21 -21
  162. package/src/api/evection.js +19 -19
  163. package/src/api/guide.js +9 -9
  164. package/src/api/sociaManageApi.js +30 -30
  165. package/src/assets/Area.json +1773 -1773
  166. package/src/assets/css/quill.bubble.css +952 -952
  167. package/src/assets/css/quill.core.css +397 -397
  168. package/src/assets/css/quill.snow.css +945 -945
  169. package/src/assets/data.js +284 -284
  170. package/src/assets/fonts/Read Me.txt +7 -7
  171. package/src/assets/fonts/demo-files/demo.css +155 -155
  172. package/src/assets/fonts/demo-files/demo.js +30 -30
  173. package/src/assets/fonts/demo.html +951 -951
  174. package/src/assets/fonts/fonts/icomoon.svg +130 -130
  175. package/src/assets/fonts/style.css +563 -563
  176. package/src/assets/icons/checkbox.svg +12 -12
  177. package/src/assets/icons/columns-3.svg +12 -12
  178. package/src/assets/icons/columns.svg +12 -12
  179. package/src/assets/icons/custom-table.svg +12 -12
  180. package/src/assets/icons/date.svg +19 -19
  181. package/src/assets/icons/daterange.svg +12 -12
  182. package/src/assets/icons/fuzhi.svg +11 -11
  183. package/src/assets/icons/fuzhi_03.svg +5 -5
  184. package/src/assets/icons/gaojizujian.svg +12 -12
  185. package/src/assets/icons/groupSummary.svg +12 -12
  186. package/src/assets/icons/groupTitle.svg +12 -12
  187. package/src/assets/icons/image-uploader.svg +12 -12
  188. package/src/assets/icons/input-number.svg +12 -12
  189. package/src/assets/icons/input.svg +12 -12
  190. package/src/assets/icons/quill-editor.svg +12 -12
  191. package/src/assets/icons/radio.svg +12 -12
  192. package/src/assets/icons/select.svg +12 -12
  193. package/src/assets/icons/switch.svg +12 -12
  194. package/src/assets/icons/textarea.svg +12 -12
  195. package/src/assets/icons/upload-file.svg +12 -12
  196. package/src/assets/marketplace.js +289 -289
  197. package/src/components/ComAduitNew.vue +477 -477
  198. package/src/components/CommonAduit.vue +512 -512
  199. package/src/components/CommonAduitNew.vue +906 -906
  200. package/src/components/CommonAduitNews.vue +753 -753
  201. package/src/components/CommonUEditer.vue +63 -63
  202. package/src/components/PersonCenter/Mess.vue +59 -59
  203. package/src/components/PersonCenter/Title.vue +80 -80
  204. package/src/components/SvgIcon.vue +57 -57
  205. package/src/components/XmCommonAduit.vue +761 -761
  206. package/src/components/feiyCommon.vue +713 -713
  207. package/src/components/form/card.js +5 -5
  208. package/src/components/form/chinese.js +6 -6
  209. package/src/components/form/chinessstring.js +5 -5
  210. package/src/components/form/hunhe.js +8 -8
  211. package/src/components/form/hunhecq.js +8 -8
  212. package/src/components/form/hunheh.js +8 -8
  213. package/src/components/form/num.js +12 -12
  214. package/src/components/form/numstring.js +5 -5
  215. package/src/components/form/user.js +7 -7
  216. package/src/components/form/validate.js +42 -42
  217. package/src/components/form/validcredit.js +5 -5
  218. package/src/components/fundCommonAduit.vue +661 -661
  219. package/src/components/public/BaseCustomTable.vue +71 -71
  220. package/src/components/public/BaseDialog.vue +144 -144
  221. package/src/components/public/BaseEmptyData.vue +73 -73
  222. package/src/components/public/BaseFormTitle.vue +39 -39
  223. package/src/components/public/BasePagination.vue +55 -55
  224. package/src/components/public/BaseRouter.vue +14 -14
  225. package/src/components/public/BaseUpload.vue +185 -185
  226. package/src/components/public/Bottom.vue +62 -62
  227. package/src/components/public/Footer.vue +412 -412
  228. package/src/components/public/Header.vue +30 -30
  229. package/src/components/public/LeftMenu.vue +170 -170
  230. package/src/components/public/MemberSelection coby.vue +444 -444
  231. package/src/components/public/MemberSelection.vue +487 -487
  232. package/src/components/public/NewLeftMenu.vue +418 -418
  233. package/src/components/public/PicturesPreview.vue +62 -62
  234. package/src/components/public/Popout.vue +147 -147
  235. package/src/components/public/TagLine.vue +353 -353
  236. package/src/components/public/components/BaseImageUploadDrag.vue +320 -320
  237. package/src/components/public/components/HeadBar.vue +315 -315
  238. package/src/components/public/components/MenuList.vue +110 -110
  239. package/src/components/public/components/NewHeadBar.vue +936 -936
  240. package/src/components/public/components/QuickGoods.vue +273 -273
  241. package/src/components/public/components/Search.vue +164 -164
  242. package/src/components/public/components/Userinfo.vue +383 -383
  243. package/src/components/utils/pdf.js +254 -254
  244. package/src/components/xmfyCommonAduit.vue +752 -752
  245. package/src/filters/index.js +619 -619
  246. package/src/fnc/arr.js +102 -102
  247. package/src/fnc/quill-config.js +121 -121
  248. package/src/fnc/unit.js +102 -102
  249. package/src/fnc/verify.js +187 -187
  250. package/src/fnc/verifyStatus.js +24 -24
  251. package/src/formBuilder/apiBusiness.js +67 -67
  252. package/src/formBuilder/business.js +1039 -1039
  253. package/src/formBuilder/component/components/data.js +719 -719
  254. package/src/formBuilder/component/components/purchaseIndex.vue +1109 -1109
  255. package/src/formBuilder/component/purchase.vue +35 -35
  256. package/src/formBuilder/components/app-main/components/components/GroupSummary.vue +33 -33
  257. package/src/formBuilder/components/app-main/components/components/GroupTitle.vue +33 -33
  258. package/src/formBuilder/components/app-main/components/components/bank.vue +226 -226
  259. package/src/formBuilder/components/app-main/components/components/bankFormHeard.vue +298 -298
  260. package/src/formBuilder/components/app-main/components/components/builder.vue +718 -718
  261. package/src/formBuilder/components/app-main/components/components/columns.vue +393 -393
  262. package/src/formBuilder/components/app-main/components/components/customTable.vue +1758 -1758
  263. package/src/formBuilder/components/app-main/components/components/formDep.vue +105 -105
  264. package/src/formBuilder/components/app-main/components/components/handleCode.vue +39 -39
  265. package/src/formBuilder/components/app-main/components/components/itemOption.vue +116 -116
  266. package/src/formBuilder/components/app-main/components/components/linkForm.vue +116 -116
  267. package/src/formBuilder/components/app-main/components/components/listDesign.vue +772 -772
  268. package/src/formBuilder/components/app-main/components/components/optionSolt.js +78 -78
  269. package/src/formBuilder/components/app-main/components/components/person.vue +104 -104
  270. package/src/formBuilder/components/app-main/components/components/postman.vue +40 -40
  271. package/src/formBuilder/components/app-main/components/components/previewDialog.vue +391 -391
  272. package/src/formBuilder/components/app-main/components/components/tableIndex.vue +51 -51
  273. package/src/formBuilder/components/app-main/components/components/tableList.vue +561 -561
  274. package/src/formBuilder/components/app-main/components/components/twoColumns.vue +52 -52
  275. package/src/formBuilder/components/app-main/components/main-center.vue +187 -187
  276. package/src/formBuilder/components/app-main/components/main-header.vue +351 -351
  277. package/src/formBuilder/components/app-main/components/main-left.vue +179 -179
  278. package/src/formBuilder/components/app-main/components/main-right/components/components/calculateDialog.vue +914 -914
  279. package/src/formBuilder/components/app-main/components/main-right/components/components/curTextArea.vue +338 -338
  280. package/src/formBuilder/components/app-main/components/main-right/components/components/form-item-rules.vue +190 -190
  281. package/src/formBuilder/components/app-main/components/main-right/components/components/linkageDialog.vue +25 -25
  282. package/src/formBuilder/components/app-main/components/main-right/components/components/searchMixin.js +26 -26
  283. package/src/formBuilder/components/app-main/components/main-right/components/form-config.vue +284 -284
  284. package/src/formBuilder/components/app-main/components/main-right/components/form-item-attrs.vue +407 -407
  285. package/src/formBuilder/components/app-main/components/main-right/components/form-item-config.vue +478 -478
  286. package/src/formBuilder/components/app-main/components/main-right/index.vue +203 -203
  287. package/src/formBuilder/components/app-main/index.vue +329 -329
  288. package/src/formBuilder/comps.js +283 -283
  289. package/src/formBuilder/config/button.js +63 -63
  290. package/src/formBuilder/config/cascader-panel.js +224 -224
  291. package/src/formBuilder/config/cascader.js +306 -306
  292. package/src/formBuilder/config/checkbox.js +67 -67
  293. package/src/formBuilder/config/color.js +42 -42
  294. package/src/formBuilder/config/columns.js +30 -30
  295. package/src/formBuilder/config/custom-table.js +49 -49
  296. package/src/formBuilder/config/date.js +107 -107
  297. package/src/formBuilder/config/daterange.js +47 -47
  298. package/src/formBuilder/config/datetime.js +78 -78
  299. package/src/formBuilder/config/datetimerange.js +111 -111
  300. package/src/formBuilder/config/formDep.js +37 -37
  301. package/src/formBuilder/config/groupSummary.js +23 -23
  302. package/src/formBuilder/config/groupTitle.js +23 -23
  303. package/src/formBuilder/config/handleCode.js +23 -23
  304. package/src/formBuilder/config/image-uploader.js +113 -113
  305. package/src/formBuilder/config/input.js +162 -162
  306. package/src/formBuilder/config/json-editor.js +31 -31
  307. package/src/formBuilder/config/linkForm.js +69 -69
  308. package/src/formBuilder/config/number.js +49 -49
  309. package/src/formBuilder/config/password.js +82 -82
  310. package/src/formBuilder/config/person.js +37 -37
  311. package/src/formBuilder/config/postman.js +23 -23
  312. package/src/formBuilder/config/purchase.js +19 -19
  313. package/src/formBuilder/config/quill-editor.js +66 -66
  314. package/src/formBuilder/config/radio-button.js +44 -44
  315. package/src/formBuilder/config/radio.js +69 -69
  316. package/src/formBuilder/config/rate.js +93 -93
  317. package/src/formBuilder/config/select.js +105 -105
  318. package/src/formBuilder/config/slider.js +92 -92
  319. package/src/formBuilder/config/switch.js +35 -35
  320. package/src/formBuilder/config/tag.js +79 -79
  321. package/src/formBuilder/config/text.js +18 -18
  322. package/src/formBuilder/config/textarea.js +129 -129
  323. package/src/formBuilder/config/time.js +60 -60
  324. package/src/formBuilder/config/timerange.js +94 -94
  325. package/src/formBuilder/config/tree-select.js +100 -100
  326. package/src/formBuilder/config/upload-file.js +100 -100
  327. package/src/formBuilder/config/yesno.js +39 -39
  328. package/src/formBuilder/config.js +16 -16
  329. package/src/formBuilder/extend/index.js +20 -20
  330. package/src/formBuilder/index.js +39 -39
  331. package/src/formBuilder/menuConfig.js +36 -36
  332. package/src/formBuilder/mixins/index.js +215 -215
  333. package/src/formBuilder/tool.js +101 -101
  334. package/src/function/base.js +13 -13
  335. package/src/function/findCompanyTree.js +94 -94
  336. package/src/function/formulaAnalysis.js +44 -44
  337. package/src/function/verify.js +23 -23
  338. package/src/http/index.js +219 -219
  339. package/src/http/type.js +82 -82
  340. package/src/library/AddType/Index.js +17 -17
  341. package/src/library/AddType/Index.vue +201 -201
  342. package/src/library/AreaChange/regionCascader/regionCascader.vue +155 -155
  343. package/src/library/BigImg/BigImage1/Index.js +17 -17
  344. package/src/library/BigImg/BigImage1/Index.vue +125 -125
  345. package/src/library/Button/Button1/Index.js +17 -17
  346. package/src/library/Button/Button1/Index.vue +60 -60
  347. package/src/library/Button/Button2/Index.js +17 -17
  348. package/src/library/Button/Button2/Index.vue +52 -52
  349. package/src/library/Button/Button3/Index.js +17 -17
  350. package/src/library/Button/Button3/Index.vue +56 -56
  351. package/src/library/Button/Button4/Index.js +17 -17
  352. package/src/library/Button/Button4/Index.vue +56 -56
  353. package/src/library/Button/Button5/Index.js +17 -17
  354. package/src/library/Button/Button5/Index.vue +55 -55
  355. package/src/library/Button/Button6/Index.js +17 -17
  356. package/src/library/Button/Button6/Index.vue +74 -74
  357. package/src/library/Button/Button7/Index.js +17 -17
  358. package/src/library/Button/Button7/Index.vue +56 -56
  359. package/src/library/ConfirmPlaugin/ConfirmPlaugin1/Index.js +17 -17
  360. package/src/library/ConfirmPlaugin/ConfirmPlaugin1/Index.vue +147 -147
  361. package/src/library/ConfirmPlaugin/ConfirmPlaugin2/Index.js +17 -17
  362. package/src/library/ConfirmPlaugin/ConfirmPlaugin2/Index.vue +137 -137
  363. package/src/library/ConfirmPlaugin/ConfirmPlaugin3/Index.vue +142 -142
  364. package/src/library/ConfirmPlaugin/ConfirmPlaugin4/Index.vue +141 -141
  365. package/src/library/ConfirmPlaugin/ConfirmPlaugin5/Index.vue +121 -121
  366. package/src/library/ConfirmPlaugin/ConfirmPlaugin6/Index.vue +142 -142
  367. package/src/library/Input/Input1/Index.js +17 -17
  368. package/src/library/Input/Input1/Index.vue +66 -66
  369. package/src/library/NoMessage/NoMessage0/Index.js +17 -17
  370. package/src/library/NoMessage/NoMessage0/Index.vue +60 -60
  371. package/src/library/NoMessage/NoMessage1/Index.js +17 -17
  372. package/src/library/NoMessage/NoMessage1/Index.vue +66 -66
  373. package/src/library/NoMessage/NoMessage2/Index.js +17 -17
  374. package/src/library/NoMessage/NoMessage2/Index.vue +66 -66
  375. package/src/library/Tab/Tab1/TabBox1/Index.vue +36 -36
  376. package/src/library/Tab/Tab1/TabInner1/Index.vue +70 -70
  377. package/src/library/Tab/Tab2/TabBox2/Index.vue +36 -36
  378. package/src/library/Tab/Tab2/TabInner2/Index.vue +66 -66
  379. package/src/library/Table/Table1/Td1/Index.js +17 -17
  380. package/src/library/Table/Table1/Td1/Index.vue +110 -110
  381. package/src/library/Table/Table1/Tr1/Index.js +17 -17
  382. package/src/library/Table/Table1/Tr1/Index.vue +53 -53
  383. package/src/library/Table/Table2/Td2/Index.js +17 -17
  384. package/src/library/Table/Table2/Td2/Index.vue +90 -90
  385. package/src/library/Table/Table2/Tr2/Index.js +17 -17
  386. package/src/library/Table/Table2/Tr2/Index.vue +66 -66
  387. package/src/library/Table/Table3/Td3/Index.js +17 -17
  388. package/src/library/Table/Table3/Td3/Index.vue +109 -109
  389. package/src/library/Table/Table3/Tr3/Index.js +17 -17
  390. package/src/library/Table/Table3/Tr3/Index.vue +128 -128
  391. package/src/library/Table/Table4/Td4/Index.js +17 -17
  392. package/src/library/Table/Table4/Td4/Index.vue +114 -114
  393. package/src/library/Table/Table4/Tr4/Index.js +17 -17
  394. package/src/library/Table/Table4/Tr4/Index.vue +53 -53
  395. package/src/library/Title/Title1/Index.js +17 -17
  396. package/src/library/Title/Title1/Index.vue +80 -80
  397. package/src/library/toast/Index.js +17 -17
  398. package/src/library/toast/Index.vue +86 -86
  399. package/src/main.js +161 -161
  400. package/src/mixins/Export2Excel.js +207 -207
  401. package/src/mixins/chartOption.js +110 -110
  402. package/src/mixins/companyMixins.js +84 -84
  403. package/src/mixins/quillOptions.js +15 -15
  404. package/src/mixins/validate/deviceManage.js +211 -211
  405. package/src/mixins/validate/systemConfig.js +117 -117
  406. package/src/mixins/validate/validate.js +25 -25
  407. package/src/public/apiUser/apiUser.js +10 -10
  408. package/src/public/areaFunction.js +26 -26
  409. package/src/public/link.js +91 -91
  410. package/src/public/stageData.js +495 -495
  411. package/src/public/topmenu.js +68 -68
  412. package/src/router/index.js +225 -225
  413. package/src/router/setting/BaseRoutes.js +1639 -1639
  414. package/src/router/setting/MenuDevMock.js +1570 -1570
  415. package/src/router/setting/modules/login.js +45 -45
  416. package/src/router/setting/noAuthRouter.js +109 -109
  417. package/src/router/setting/routes.js +55 -55
  418. package/src/static/css/flex.css +75 -75
  419. package/src/static/css/switch.scss +31 -31
  420. package/src/storage/cookies.js +37 -37
  421. package/src/storage/localStorage.js +36 -36
  422. package/src/storage/sessionStorage.js +25 -25
  423. package/src/store/formBuilder/formAttrDefault.js +28 -28
  424. package/src/store/formBuilder/index.js +40 -40
  425. package/src/store/index.js +553 -553
  426. package/src/styles/color.scss +24 -24
  427. package/src/styles/offer.scss +39 -39
  428. package/src/styles/s-reset.scss +52 -52
  429. package/src/styles/static-style.scss +797 -797
  430. package/src/styles/talent.scss +26 -26
  431. package/src/styles/variable.scss +69 -69
  432. package/src/styles/workflow/workflow.css +1308 -1308
  433. package/src/utils/TableFormTypeList.js +26 -26
  434. package/src/utils/allRouter.js +5579 -5579
  435. package/src/utils/auditUtil.js +535 -535
  436. package/src/utils/commonComponents.js +34 -34
  437. package/src/utils/commonFunc.js +213 -213
  438. package/src/utils/deepCopyArray.js +9 -9
  439. package/src/utils/dict.js +49 -49
  440. package/src/utils/directive.js +26 -26
  441. package/src/utils/emoji.js +16 -16
  442. package/src/utils/flator.js +18 -18
  443. package/src/utils/imMeeting.js +1180 -1180
  444. package/src/utils/index.js +105 -105
  445. package/src/utils/initRouter.js +94 -94
  446. package/src/utils/map.js +23 -23
  447. package/src/utils/passwordStrength.js +177 -177
  448. package/src/utils/style.js +30 -30
  449. package/src/utils/validate.js +30 -30
  450. package/src/views/404.vue +53 -53
  451. package/src/views/Login/Login.vue +50 -50
  452. package/src/views/Login/Passfind.vue +347 -347
  453. package/src/views/Login/Passfindnext.vue +146 -146
  454. package/src/views/Login/Sign.vue +55 -55
  455. package/src/views/Login/SignSuccessfully.vue +132 -132
  456. package/src/views/Login/appDownload.vue +224 -224
  457. package/src/views/Login/clientDownload.vue +201 -201
  458. package/src/views/Login/components/Background.vue +153 -153
  459. package/src/views/Login/components/FormLogin.vue +1001 -1001
  460. package/src/views/Login/components/FormPassFind.vue +395 -395
  461. package/src/views/Login/components/FormSign.vue +493 -493
  462. package/src/views/Login/components/Title.vue +301 -301
  463. package/src/views/Login/components/agreeMent.vue +111 -111
  464. package/src/views/Login/components/companysign.vue +1296 -1296
  465. package/src/views/Login/components/guideLogin.vue +984 -984
  466. package/src/views/formBuilder/components/addNode.vue +119 -119
  467. package/src/views/formBuilder/components/approverSelector.vue +493 -493
  468. package/src/views/formBuilder/components/baseRoute.vue +315 -315
  469. package/src/views/formBuilder/components/builderHeader.vue +106 -106
  470. package/src/views/formBuilder/components/conditionConfig.js +588 -588
  471. package/src/views/formBuilder/components/conditionNode.vue +191 -191
  472. package/src/views/formBuilder/components/dataDefault.js +147 -147
  473. package/src/views/formBuilder/components/depFormNode.vue +583 -583
  474. package/src/views/formBuilder/components/linkForm.vue +566 -566
  475. package/src/views/formBuilder/components/linkFormList.vue +821 -821
  476. package/src/views/formBuilder/components/menuConfig.vue +1752 -1752
  477. package/src/views/formBuilder/components/newNodeForm.vue +426 -426
  478. package/src/views/formBuilder/components/newsection.vue +424 -424
  479. package/src/views/formBuilder/components/nodeConditionConfig cody.vue +376 -376
  480. package/src/views/formBuilder/components/nodeConditionConfig.vue +603 -603
  481. package/src/views/formBuilder/components/nodeForm.vue +355 -355
  482. package/src/views/formBuilder/components/nodeMenu.vue +147 -147
  483. package/src/views/formBuilder/components/personNode.vue +566 -566
  484. package/src/views/formBuilder/components/planNode.vue +269 -269
  485. package/src/views/formBuilder/designListPage.vue +457 -457
  486. package/src/views/formBuilder/formDataDetail.vue +565 -565
  487. package/src/views/formBuilder/formGeneration.vue +904 -904
  488. package/src/views/formBuilder/index.vue +242 -242
  489. package/src/views/formBuilder/process-1.vue +976 -976
  490. package/src/views/formBuilder/process-2.vue +1323 -1323
  491. package/src/views/formBuilder/process.vue +662 -431
  492. package/src/views/formBuilder/processList.vue +877 -877
  493. package/src/views/formBuilder/service/ProcessBuilder.js +136 -136
  494. package/src/views/formBuilder/service/RsxzFieldCollection.js +199 -0
  495. package/src/views/formBuilder/workflow/addNode.vue +95 -95
  496. package/src/views/formBuilder/workflow/initData.js +205 -205
  497. package/src/views/formBuilder/workflow/nodeWrap.vue +731 -731
  498. package/src/views/guide.vue +227 -227
  499. package/src/views/guideIndex.vue +284 -284
  500. package/tests/unit/.eslintrc.js +5 -5
  501. package/tests/unit/example.spec.js +13 -13
  502. package/vue.config.js +287 -287
@@ -1,1752 +1,1752 @@
1
-
2
- <template>
3
- <el-tabs @tab-click="handleClick">
4
- <el-tab-pane label="菜单">
5
-
6
- <span slot="label">
7
- <!-- <span class="span-box"> -->
8
- <i class="el-icon-document span-box-icon"></i>
9
- 菜单
10
- <!-- </span> -->
11
- </span>
12
- <div class="menu-list">
13
- <div class="menu-config">
14
- <div class="config-title">
15
- <!-- <h4>菜单配置</h4><i
16
- class="el-icon-circle-plus-outline"
17
- @click.stop="addMenu()"
18
- ></i> -->
19
- <el-button
20
- type="primary"
21
- class='addgroup'
22
- @click.stop="addMenu()"
23
- style="margin-right:50px"
24
- >新增分组</el-button>
25
- <el-button
26
- class='addform'
27
- plain
28
- @click.stop="addForm()"
29
- >新增表单</el-button>
30
- </div>
31
- <div class="collapse"></div>
32
- </div>
33
- <!-- 配置菜单 -->
34
-
35
- <el-menu
36
- default-active="2"
37
- class="el-menu-vertical-demo"
38
- @select="handleSelect"
39
- @open="handleOpen"
40
- @close="handleClose"
41
- >
42
- <el-submenu
43
- :index="item.id"
44
- v-for="(item,ind) in menu"
45
- :key="'pre'+ind"
46
- :class="{'is-open': item.open}"
47
- >
48
- <template
49
- slot="title"
50
- class='mTitle'
51
- >
52
- <!-- <i class="el-icon-location"></i> -->
53
- <img
54
- :src="item.icon"
55
- v-if="getIcon(item.icon).isOss"
56
- alt=""
57
- srcset=""
58
- style="width: 40px;height:40px;margin-right:10px;"
59
- >
60
- <span
61
- :class="['icon-menu-'+(item.icon),'iconMenu']"
62
- v-else-if="!getIcon(item.icon).isOss"
63
- >
64
- <span class="path1"></span>
65
- <span class="path2"></span>
66
- <span class="path3"></span>
67
- <span class="path4"></span>
68
- </span>
69
- <div
70
- v-else
71
- style="width: 79px;height:40px;margin-right:10px;"
72
- ></div>
73
- <span class="menu-item-name"><span>{{item.name}}</span></span>
74
- <div
75
- class="menu-item-option"
76
- v-if="item.operateStatus"
77
- @click.stop
78
- >
79
- <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
80
- <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
81
- <el-dropdown
82
- trigger="click"
83
- @command="handleCommand"
84
- >
85
- <span class="el-dropdown-link">
86
- <i class="el-icon-setting el-icon--right"></i>
87
- </span>
88
- <el-dropdown-menu slot="dropdown">
89
- <el-dropdown-item :command="`edit-${ind}`">编辑</el-dropdown-item>
90
- <!-- <el-dropdown-item :command="`change-${index}-${senindex}`">
91
- {{senitem.isShow == 1 ? '隐藏' : '启用'}}</el-dropdown-item>-->
92
- <el-dropdown-item :command="`delete-${ind}`">删除</el-dropdown-item>
93
- </el-dropdown-menu>
94
- </el-dropdown>
95
- </div>
96
- </template>
97
- <template v-for="(item1,ind1) in item.subMenu">
98
- <el-submenu
99
- :index="item.id+'-'+item1.id"
100
- :key="item1.id"
101
- v-if="item1.type"
102
- >
103
- <template slot="title"> <span class="menu-item-name"><span>{{item1.name}}</span></span>
104
- <div
105
- class="menu-item-option"
106
- v-if="item1.operateStatus"
107
- @click.stop
108
- >
109
- <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
110
- <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
111
- <el-dropdown
112
- trigger="click"
113
- @command="handleCommand"
114
- >
115
- <span class="el-dropdown-link">
116
- <i class="el-icon-setting el-icon--right"></i>
117
- </span>
118
- <el-dropdown-menu slot="dropdown">
119
- <el-dropdown-item :command="`edit-${ind}-${ind1}`">编辑</el-dropdown-item>
120
- <!-- <el-dropdown-item :command="`change-${index}-${senindex}`">
121
- {{senitem.isShow == 1 ? '隐藏' : '启用'}}</el-dropdown-item>-->
122
- <el-dropdown-item :command="`delete-${ind}-${ind1}`">删除</el-dropdown-item>
123
- </el-dropdown-menu>
124
- </el-dropdown>
125
- </div>
126
- </template>
127
- <el-menu-item
128
- :index="item1.id+'-'+item2.id"
129
- :key="item2.id"
130
- v-for="(item2,ind2) in item1.subMenu"
131
- @click="getFormDes(item2.id,item2.name,'blank',item2.pid)"
132
- >
133
- <img
134
- :src="item2.icon"
135
- v-if="getIcon(item2.icon).isOss"
136
- alt=""
137
- srcset=""
138
- style="width: 40px;height:40px;margin-right:10px;"
139
- >
140
- <span
141
- :class="['icon-menu-'+(item2.icon),'iconMenu']"
142
- v-else-if="!getIcon(item2.icon).isOss"
143
- >
144
- <span class="path1"></span>
145
- <span class="path2"></span>
146
- <span class="path3"></span>
147
- <span class="path4"></span>
148
- </span>
149
- <div
150
- v-else
151
- style="width: 79px;height:40px;margin-right:10px;"
152
- ></div>
153
- <span class="menu-item-name"><span>{{item2.name}}</span></span>
154
- <div
155
- class="menu-item-option"
156
- @click.stop
157
- >
158
- <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
159
- <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
160
- <el-dropdown
161
- trigger="click"
162
- @command="handleCommand"
163
- >
164
- <span class="el-dropdown-link">
165
- <i class="el-icon-setting el-icon--right"></i>
166
- </span>
167
- <el-dropdown-menu slot="dropdown">
168
- <el-dropdown-item :command="`edit-${ind}-${ind1}-${ind2}`">编辑</el-dropdown-item>
169
- <el-dropdown-item :command="`delete-${ind}-${ind1}-${ind2}`">删除</el-dropdown-item>
170
- </el-dropdown-menu>
171
- </el-dropdown>
172
- </div>
173
-
174
- </el-menu-item>
175
- </el-submenu>
176
-
177
- <el-menu-item
178
- :index="item.id+'-'+item1.id"
179
- :key="item1.id"
180
- @click="getFormDes(item1.id,item1.name,'blank',item1.pid)"
181
- v-else
182
- >
183
- <img
184
- :src="item1.icon"
185
- v-if="getIcon(item1.icon).isOss"
186
- alt=""
187
- srcset=""
188
- style="width: 40px;height:40px;margin-right:10px;"
189
- >
190
- <span
191
- :class="['icon-menu-'+(item1.icon),'iconMenu']"
192
- v-else-if="!getIcon(item1.icon).isOss"
193
- >
194
- <span class="path1"></span>
195
- <span class="path2"></span>
196
- <span class="path3"></span>
197
- <span class="path4"></span>
198
- </span>
199
- <div
200
- v-else
201
- style="width: 79px;height:40px;margin-right:10px;"
202
- ></div>
203
- <span class="menu-item-name"><span>{{item1.name}}</span></span>
204
- <div
205
- class="menu-item-option"
206
- @click.stop
207
- >
208
- <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
209
- <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
210
- <el-dropdown
211
- trigger="click"
212
- @command="handleCommand"
213
- >
214
- <span class="el-dropdown-link">
215
- <i class="el-icon-setting el-icon--right"></i>
216
- </span>
217
- <el-dropdown-menu slot="dropdown">
218
- <el-dropdown-item :command="`edit-${ind}-${ind1}`">编辑</el-dropdown-item>
219
- <el-dropdown-item :command="`delete-${ind}-${ind1}`">删除</el-dropdown-item>
220
- </el-dropdown-menu>
221
- </el-dropdown>
222
- </div>
223
-
224
- </el-menu-item>
225
- </template>
226
-
227
- </el-submenu>
228
-
229
- </el-menu>
230
-
231
- <el-dialog
232
- :title="getTitle"
233
- :visible.sync="dialogFormVisible"
234
- :close-on-click-modal="false"
235
- width="500px"
236
- >
237
- <el-dialog
238
- width="30%"
239
- title="图标选择"
240
- :visible.sync="innerVisible"
241
- append-to-body
242
- >
243
- <div>
244
-
245
- <el-row>
246
- <el-col
247
- :span="3"
248
- v-for="(e,i) in 40"
249
- :key='i'
250
- class='menuIconBox'
251
- >
252
- <span
253
- :class="['icon-menu-'+(i+1),'iconMenu',{ bgc: menuIconInnerIndex == (i+1) }]"
254
- @dblclick="innerVisible = false;
255
- menuIconIndex = menuIconInnerIndex = (i+1);
256
- $nextTick(()=>{form.icon = menuIconIndex})
257
-
258
- "
259
- @click="menuIconInnerIndex = (i+1)"
260
- >
261
- <span class="path1"></span>
262
- <span class="path2"></span>
263
- <span class="path3"></span>
264
- <span class="path4"></span>
265
- </span>
266
- </el-col>
267
- </el-row>
268
- </div>
269
- <div
270
- slot="footer"
271
- class="dialog-footer"
272
- >
273
- <el-button @click="innerVisible = false">取 消</el-button>
274
- <el-button
275
- type="primary"
276
- @click="innerVisible = false;
277
- menuIconIndex = menuIconInnerIndex
278
- $nextTick(()=>{form.icon = menuIconIndex})
279
- "
280
- >确定</el-button>
281
- </div>
282
- </el-dialog>
283
- <el-form
284
- ref="form"
285
- :rules="ruleForm"
286
- :model="form"
287
- label-width="100px"
288
- label-position="right"
289
- >
290
- <el-form-item
291
- label="上级菜单:"
292
- v-if="form.pName"
293
- prop="pName"
294
- >
295
- <el-input
296
- v-model="form.pName"
297
- disabled
298
- autocomplete="off"
299
- ></el-input>
300
- </el-form-item>
301
- <el-form-item
302
- :label="'所属分组:'"
303
- v-if="getTitle !=='编辑表单' && curLevel != 1 ||(getTitle =='新增分组'&&curLevel == 1) ||(getTitle =='新增表单'&&curLevel == 1)"
304
- prop="group"
305
- :rules="type=='addForm'?{required: true, message: '所属分组不能为空', trigger: 'blur'}:null"
306
- >
307
- <el-cascader
308
- :disabled="getTitle =='编辑分组' && curLevel != 1"
309
- ref="cascader"
310
- v-model="form.group"
311
- :options="type!=='addForm'?menuOneLevel:menuTwoLevel"
312
- :props="cascaderProps"
313
- clearable
314
- @change="handleChange"
315
- ></el-cascader>
316
- </el-form-item>
317
- <el-form-item
318
- :label="getTitle =='新增表单' || getTitle =='编辑表单'? '表单名称:':'分组名称:'"
319
- prop="name"
320
- >
321
- <el-input
322
- v-model="form.name"
323
- maxlength
324
- autocomplete="off"
325
- ></el-input>
326
- </el-form-item>
327
- <el-form-item
328
- v-if="isShowIconItem"
329
- :label="'图标:'"
330
- prop="icon"
331
- >
332
- <span
333
- v-if="menuIconIndex==0"
334
- :class="['iconMenu']"
335
- style="background-color:#ccc;color:#fff"
336
- @click="innerVisible=true"
337
- >
338
- ICON
339
- </span>
340
- <span
341
- :class="['icon-menu-'+menuIconIndex,'iconMenu']"
342
- @click="innerVisible=true;$nextTick(()=>{form.icon = menuIconIndex})
343
- "
344
- >
345
- <span class="path1"></span>
346
- <span class="path2"></span>
347
- <span class="path3"></span>
348
- <span class="path4"></span>
349
- </span>
350
- </el-form-item>
351
- </el-form>
352
- <div
353
- slot="footer"
354
- class="dialog-footer"
355
- >
356
- <el-button @click="dialogFormVisible = false;form.group=''">取 消</el-button>
357
- <el-button
358
- type="primary"
359
- @click="operation"
360
- >确 定</el-button>
361
- </div>
362
- </el-dialog>
363
- </div>
364
-
365
- </el-tab-pane>
366
- <el-tab-pane label="组件">
367
- <span slot="label">
368
- <!-- <span class="span-box"> -->
369
- <i class="el-icon-set-up span-box-icon"></i>
370
- 组件
371
- <!-- </span> -->
372
- </span>
373
- <app-main-left class="app-main-left" />
374
- </el-tab-pane>
375
-
376
- </el-tabs>
377
-
378
- </template>
379
- <script>
380
- import _ from "lodash-es";
381
- import formAttrDefault from "@/store/formBuilder/formAttrDefault";
382
- import dd from "@/assets/icon_warning.png";
383
- import AppMainLeft from "@/formBuilder/components/app-main/components/main-left";
384
- import AppMainRight from "@/formBuilder/components/app-main/components/main-right/index";
385
- import configList from "@/formBuilder/config";
386
- import apiAuth from "@/api/apiAuth";
387
- import * as api from "@/api/apiFormBuilder/menu";
388
- import { mapMutations } from "vuex";
389
- import { getMenuRouter } from "@/formBuilder/menuConfig";
390
- export default {
391
- components: {
392
- AppMainLeft
393
- },
394
- data() {
395
- return {
396
- curType: 1,
397
- curOperateStatus: 0,
398
- curLevel: 0,
399
- menuIconIndex: 0,
400
- menuIconInnerIndex: 0,
401
- innerVisible: false,
402
- menuTwoLevelRes: [],
403
- menuOneLevelRes: [],
404
- cascaderProps: {
405
- value: "id",
406
- label: "name",
407
- checkStrictly: true,
408
- children: "subMenu"
409
- },
410
- currentMIndex: null,
411
- currentMkeyPath: null,
412
- dialogFormVisible: false,
413
- type: "add",
414
- form: {
415
- id: "",
416
- pName: "",
417
- name: "",
418
- oneName: "",
419
- twoName: "",
420
- thrName: "",
421
- index: "",
422
- icon: 1,
423
- secIndex: "",
424
- group: "",
425
- thrIndex: "",
426
- pid: "",
427
- menuLevel: undefined
428
- },
429
- menu: [],
430
- precutMenu: [],
431
- step: 0,
432
- oldMenu: {},
433
- ruleForm: {
434
- name: [
435
- { required: true, message: "请输入菜单名称", trigger: "blur" },
436
- { min: 1, max: 12, message: "长度在 1 到 12 个字符", trigger: "blur" }
437
- ],
438
-
439
- icon: [{ required: true, message: "请选择图标", trigger: "blur" }]
440
- }
441
- };
442
- },
443
- watch: {},
444
- computed: {
445
- getIcon() {
446
- return function(icon) {
447
- if (_.includes(icon, "http")) {
448
- return { icon, isOss: true };
449
- } else {
450
- return { icon, isOss: false };
451
- }
452
- };
453
- },
454
- isShowIconItem: function() {
455
- if (this.type == "add") {
456
- if (
457
- (this.curOperateStatus == 1 && this.curLevel == 2) ||
458
- this.form.group == "" ||
459
- this.curLevel == 0
460
- ) {
461
- return true;
462
- }
463
- }
464
- if (this.type == "addForm") {
465
- // if (this.curOperateStatus == 1) {
466
- return true;
467
- // }
468
- }
469
- if (this.type == "edit") {
470
- if (
471
- (this.curOperateStatus == 1 && this.curLevel == 2) ||
472
- (this.curOperateStatus == 1 && this.curLevel == 1) ||
473
- this.curType == 0
474
- ) {
475
- return true;
476
- }
477
- }
478
- return false;
479
- },
480
- companyNo: function() {
481
- return this.$store.state.user.cno;
482
- },
483
- menuOneLevel: function() {
484
- const arr = _.cloneDeep(this.menu);
485
- arr.forEach((e, i) => {
486
- e.curLevel = 1;
487
- if (e.type == 0) {
488
- e.subMenu.splice(i, 1);
489
- }
490
- delete e.subMenu;
491
- });
492
- return arr;
493
- },
494
- menuTwoLevel: function() {
495
- const arr = _.cloneDeep(this.menu);
496
-
497
- for (let index = 0; index < arr.length; index++) {
498
- const e = arr[index];
499
- e.curLevel = 1;
500
- if (e.type == 0) {
501
- e.subMenu.splice(index, 1);
502
- index--;
503
- }
504
- for (let index2 = 0; index2 < e.subMenu.length; index2++) {
505
- const e2 = e.subMenu[index2];
506
- e2.curLevel = 2;
507
- if (e2.type == 0) {
508
- e.subMenu.splice(index2, 1);
509
- index2--;
510
- }
511
- delete e2.subMenu;
512
- }
513
- }
514
- // arr.forEach((e, i) => {
515
- // e.curLevel = 1;
516
- // if (e.type == 0) {
517
- // e.subMenu.splice(i, 1);
518
- // i--;
519
- // }
520
- // e.subMenu.forEach((e2, i2) => {
521
- // e2.curLevel = 2;
522
- // if (e2.type == 0) {
523
- // e.subMenu.splice(i2, 1);
524
- // i2--;
525
- // }
526
- // delete e2.subMenu;
527
- // });
528
- // });
529
- // arr.forEach((e, i) => {
530
- // const iterator = data => {
531
- // if (e.type == 0) {
532
- // data.subMenu.splice(i, 1);
533
- // }
534
- // if (data.subMenu && data.subMenu.length > 0) {
535
- // data.subMenu.forEach((item, i2) => {
536
- // if (item.type == 0) {
537
- // data.subMenu.splice(i, 1);
538
- // }
539
- // if (item.subMenu && item.subMenu.length > 0) {
540
- // iterator(item);
541
- // } else {
542
- // delete item.subMenu;
543
- // }
544
- // });
545
- // } else {
546
- // delete data.subMenu;
547
- // }
548
- // };
549
- // iterator(e);
550
- // });
551
- console.log("@@@@@@@@@@@@@@@@@");
552
- return arr;
553
- },
554
- menuClone: function() {
555
- const arr = _.cloneDeep(this.menu);
556
- arr.forEach((e, i) => {
557
- e.curLevel = 1;
558
- e.subMenu.forEach((e2, i2) => {
559
- e2.curLevel = 2;
560
- e.subMenu.forEach((e3, i3) => {
561
- e3.curLevel = 3;
562
- });
563
- });
564
- });
565
- return arr;
566
- },
567
- getTitle: function() {
568
- if (this.type == "add") {
569
- return "新增分组";
570
- } else if (this.type == "addForm") {
571
- return "新增表单";
572
- } else if (this.type == "edit" && this.curType == 0) {
573
- return "编辑表单";
574
- } else if (this.type == "edit" && this.curType == 1) {
575
- return "编辑分组";
576
- }
577
- return this.$store.state.user.cno;
578
- },
579
- menuId: function() {
580
- return this.$store.state.formBuilder.menuId;
581
- }
582
- },
583
- methods: {
584
- ...mapMutations([
585
- "updateFormBuilder",
586
- "updateList",
587
- "updateFormAttr",
588
- "clearForm",
589
- "updateSelectIndex"
590
- ]),
591
-
592
- handleChange(res) {
593
- const vm = this;
594
- this.curOperateStatus =
595
- this.$refs.cascader.getCheckedNodes()[0].data.operateStatus;
596
- this.curLevel = this.$refs.cascader.getCheckedNodes()[0].data.curLevel;
597
- this.form.menuLevel =
598
- this.$refs.cascader.getCheckedNodes()[0].data.menuLevel;
599
- this.form.pid = this.$refs.cascader.getCheckedNodes()[0].data.pid;
600
- this.form.id = this.$refs.cascader.getCheckedNodes()[0].data.id;
601
- this.form.index = _.findIndex(
602
- this.menu,
603
- this.$refs.cascader.getCheckedNodes()[0].data
604
- );
605
- // this.form.oneName = this.menu[index].name;
606
- // this.form.twoName = this.menu[index]?.subMenu[secIndex]?.name;
607
- // this.form.thrName =
608
- // this.menu[index]?.subMenu[secIndex]?.subMenu[thrIndex]?.name;
609
- },
610
- handleClick(res) {
611
- const vm = this;
612
- if (res.paneName == 1) {
613
- vm.$parent.$refs.MainRight.$refs.FormItemTabs.$children[0].$refs.tabs[0].click();
614
- }
615
- },
616
- handleOpen(key, keyPath) {
617
- this.currentMIndex = key;
618
- this.currentMkeyPath = keyPath;
619
- console.log(key, keyPath);
620
- },
621
- handleSelect(key, keyPath) {
622
- let oneIndex, twoIndex, thrIndex;
623
- const arr = [];
624
- keyPath.forEach(e => {
625
- arr.push(e.split("-")[e.split("-").length - 1]);
626
- });
627
-
628
- arr.forEach((e, i) => {
629
- if (i == 0) {
630
- oneIndex = _.findIndex(this.menu, function(r) {
631
- return r.id == e;
632
- });
633
- }
634
- if (i == 1) {
635
- twoIndex = _.findIndex(this.menu[oneIndex].subMenu, function(r) {
636
- return r.id == e;
637
- });
638
- }
639
- if (i == 2) {
640
- thrIndex = _.findIndex(
641
- this.menu[oneIndex].subMenu[twoIndex].subMenu,
642
- function(r) {
643
- return r.id == e;
644
- }
645
- );
646
- }
647
- });
648
- this.form.oneIndex = oneIndex;
649
- this.form.twoIndex = twoIndex;
650
- this.form.thrIndex = thrIndex;
651
- if (thrIndex != -1 && thrIndex != undefined) {
652
- this.form.title = `${this.menu[oneIndex].name}/${this.menu[oneIndex].subMenu[twoIndex].name}/${this.menu[oneIndex].subMenu[twoIndex].subMenu[thrIndex].name}`;
653
- } else if (twoIndex != -1 && twoIndex != undefined) {
654
- this.form.title = `${this.menu[oneIndex].name}/${this.menu[oneIndex].subMenu[twoIndex].name}`;
655
- } else if (oneIndex != -1 && oneIndex != undefined) {
656
- this.form.title = `${this.menu[oneIndex].name}`;
657
- }
658
- },
659
-
660
- handleClose(key, keyPath) {
661
- this.currentMIndex = key;
662
- this.currentMkeyPath = keyPath;
663
- console.log(key, keyPath);
664
- },
665
- // 获取自定义菜单
666
- async getConfigList() {
667
- const vm = this;
668
- const params = { companyNo: this.companyNo };
669
- // const data2 = await api.gitMenuConfig(params);
670
- const { data } = await api.gitMenuConfig(params);
671
- if (data.state == "ok") {
672
- const menuList = _.sortBy(data.data, function(item) {
673
- return item.sort;
674
- });
675
-
676
- menuList.forEach(async(item, i) => {
677
- if (
678
- i == 0 &&
679
- item.subMenu.length > 0 &&
680
- item.subMenu[0].subMenu.length > 0
681
- ) {
682
- item.open = true;
683
- await vm.getFormDes(
684
- item.subMenu[0].subMenu[0].id,
685
- item.subMenu[0].subMenu[0].name,
686
- "blank",
687
- item.subMenu[0].subMenu[0].pid,
688
- "frist"
689
- );
690
- } else {
691
- item.open = false;
692
- }
693
- if (item.subMenu.length > 0) {
694
- item.subMenu = _.sortBy(item.subMenu, function(secItem) {
695
- return secItem.sort;
696
- });
697
- }
698
- item.subMenu.forEach((e, i) => {
699
- e["open"] = false;
700
- });
701
- });
702
-
703
- this.menu = menuList;
704
- console.log("我获取了");
705
- this.$store.commit("SET_MENULIST", this.menu);
706
- // this.changeOpen(0)
707
- }
708
- // ;
709
- },
710
- editMenuName(index, secIndex, thrIndex) {
711
- this.type = "edit";
712
- this.form.index = index;
713
- this.form.secIndex = secIndex;
714
- this.form.thrIndex = thrIndex;
715
- this.menuIconIndex = this.form.menuIconIndex = thrIndex
716
- ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].icon
717
- : secIndex
718
- ? this.menu[index].subMenu[secIndex].icon
719
- : this.menu[index].icon;
720
- this.form.icon = thrIndex
721
- ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].icon
722
- : secIndex
723
- ? this.menu[index].subMenu[secIndex].icon
724
- : this.menu[index].icon;
725
- this.form.pName = thrIndex ? this.menu[index].subMenu[secIndex].name : "";
726
- this.form.group = secIndex ? this.menu[index].subMenu[secIndex].pid : "";
727
- this.form.name = thrIndex
728
- ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].name
729
- : secIndex
730
- ? this.menu[index].subMenu[secIndex].name
731
- : this.menu[index].name;
732
- this.dialogFormVisible = true;
733
- this.curOperateStatus = thrIndex
734
- ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].operateStatus
735
- : secIndex
736
- ? this.menu[index].subMenu[secIndex].operateStatus
737
- : this.menu[index].operateStatus;
738
- this.curLevel = thrIndex
739
- ? this.menuClone[index].subMenu[secIndex].subMenu[thrIndex].curLevel
740
- : secIndex
741
- ? this.menuClone[index].subMenu[secIndex].curLevel
742
- : this.menuClone[index].curLevel;
743
- this.curType = thrIndex
744
- ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].type
745
- : secIndex
746
- ? this.menu[index].subMenu[secIndex].type
747
- : this.menu[index].type;
748
-
749
- // this.$store.commit("SET_MENULIST", this.menu);
750
-
751
- this.$store.commit("SET_MENULIST", this.menu);
752
- },
753
- addMenu(index) {
754
- this.type = "add";
755
- // if (indexPath.length == 1) {
756
- // // 新增2级菜单
757
- // }
758
- this.form.index = index != undefined ? index : "";
759
- this.form.pName = index != undefined ? this.menu[index].name : "";
760
- this.form.name = "";
761
- this.form.group = "";
762
- this.form.icon = 1;
763
- this.menuIconIndex = 1;
764
- this.menuIconInnerIndex = 1;
765
- this.form.pid = "";
766
- this.dialogFormVisible = true;
767
-
768
- this.$store.commit("SET_MENULIST", this.menu);
769
- this.$refs.form.clearValidate();
770
- },
771
- addForm(index) {
772
- this.type = "addForm";
773
- this.form.pid = "";
774
- this.form.name = "";
775
- this.form.group = "";
776
- this.form.pName = "";
777
- this.form.icon = 1;
778
- this.menuIconIndex = 1;
779
- this.menuIconInnerIndex = 1;
780
- this.dialogFormVisible = true;
781
- this.getConfigList();
782
- this.$refs.form.clearValidate();
783
- },
784
- async changeMenu(index, secIndex) {
785
- let params = {};
786
- let item = null;
787
- if (secIndex == undefined) {
788
- params = { id: this.menu[index].id };
789
- item = this.menu[index];
790
- } else {
791
- params = { id: this.menu[index]["subMenu"][secIndex].id };
792
- item = this.menu[index]["subMenu"][secIndex];
793
- }
794
- const tip = item.isShow == 1 ? "隐藏菜单" : "开启菜单";
795
- this.$confirm(`确定要${tip}吗?`, `${tip}`, {
796
- confirmButtonText: "确定",
797
- cancelButtonText: "取消",
798
- type: "warning"
799
- })
800
- .then(async() => {
801
- const { data } = await api.changeShow(params);
802
- if (data.state == "ok") {
803
- item.isShow = item.isShow == 1 ? 0 : 1;
804
- this.$message.success(data.msg ? data.msg : "更改成功");
805
- } else {
806
- this.$message.error(data.msg ? data.msg : "修改失败,请重试");
807
- }
808
- })
809
- .catch(() => {});
810
- },
811
- async deleteMenu(index, secIndex, thrIndex) {
812
- let params = {};
813
- const item = null;
814
- const vm = this;
815
- if (secIndex == undefined) {
816
- params = { id: vm.menu[index].id };
817
- } else if (thrIndex == undefined) {
818
- params = { id: vm.menu[index]["subMenu"][secIndex].id };
819
- } else {
820
- debugger;
821
- params = {
822
- id: vm.menu[index]["subMenu"][secIndex]["subMenu"][thrIndex].id
823
- };
824
- }
825
- const h = vm.$createElement;
826
- vm.$msgbox({
827
- title: "删除提示",
828
- message: h(
829
- "div",
830
- {
831
- class: {
832
- msgboxDiv: true
833
- }
834
- },
835
- [
836
- h(
837
- "img",
838
- {
839
- domProps: {
840
- src: dd
841
- }
842
- },
843
- "VNode"
844
- ),
845
- // h("img", { "src": "../../../assets/icon_warning.png" }, "VNode"),
846
- h(
847
- "div",
848
- null,
849
- "删除表单后,将删除表单控件及业务数据,是否确认删除?"
850
- )
851
- ]
852
- ),
853
- showCancelButton: true,
854
- closeOnClickModal: false,
855
- closeOnPressEscape: false,
856
- confirmButtonText: "确定",
857
- cancelButtonText: "取消",
858
- cancelButtonClass: "cancelBtn1",
859
- confirmButtonClass: "confirmBtn1"
860
- }).then(async() => {
861
- const { data } = await api.deleteMenu(params);
862
- if (data.state == "ok") {
863
- vm.getConfigList();
864
- } else {
865
- this.$message.error(data.msg ? data.msg : "删除失败,请重试");
866
- }
867
- });
868
-
869
- // this.$confirm(
870
- // "删除表单后,将删除表单控件及业务数据,是否确认删除?",
871
- // "删除提示",
872
- // {
873
- // confirmButtonText: "确定",
874
- // cancelButtonText: "取消",
875
- // type: "warning"
876
- // // center: true
877
- // }
878
- // )
879
- // .then(async() => {
880
- // const { data } = await api.deleteMenu(params);
881
- // if (data.state == "ok") {
882
- // if (secIndex == undefined) {
883
- // this.menu.splice(index, 1);
884
- // this.$store.commit("SET_MENULIST", this.menu);
885
- // } else {
886
- // this.menu[index]["subMenu"].splice(secIndex, 1);
887
- // this.$store.commit("SET_MENULIST", this.menu);
888
- // }
889
- // } else {
890
- // this.$message.error(data.msg ? data.msg : "删除失败,请重试");
891
- // }
892
- // })
893
- // .catch(() => {});
894
- },
895
- handleCommand(val) {
896
- const option = val.split("-");
897
- switch (option[0]) {
898
- case "add":
899
- this.addMenu(option[1]);
900
- break;
901
- case "edit":
902
- this.editMenuName(option[1], option[2], option[3]);
903
- break;
904
- case "delete":
905
- this.deleteMenu(option[1], option[2], option[3]);
906
- break;
907
- case "change":
908
- this.changeMenu(option[1], option[2]);
909
- break;
910
- default:
911
- break;
912
- }
913
- },
914
- resetForm() {
915
- this.form = {
916
- pName: "",
917
- name: "",
918
- index: "",
919
- secIndex: ""
920
- };
921
- },
922
- changeOpen(index, type, item) {
923
- const vm = this;
924
- debugger;
925
- this.currentMIndex = index;
926
- // if (type) {
927
- // this.precutMenu[index].open = !this.precutMenu[index].open;
928
- // } else
929
- if (type == 3) {
930
- } else {
931
- this.menu[index].open = !this.menu[index].open;
932
- this.menu.map((e, i) => {
933
- e.active = false;
934
- });
935
- this.menu[index].active = true;
936
- // this.$store.state.formBuilder.currentMenu = this.menu[index];
937
- }
938
- },
939
- // 添加分组
940
- addMenuFunc() {
941
- const vm = this;
942
- vm.$refs.form.validate(async valid => {
943
- if (valid) {
944
- const params = {
945
- name: vm.form.name,
946
- companyNo: vm.companyNo,
947
- icon: vm.form.icon.toString(),
948
- pid: vm.form.pid ? vm.form.pid : vm.form.id
949
- };
950
- const { data } = await api.addMenu(params);
951
- if (data.state == "ok") {
952
- const sort = vm.menu.length;
953
- vm.getConfigList();
954
- // vm.menu[vm.form.index]["subMenu"].push({
955
- // subMenu: [],
956
- // name: vm.form.name,
957
- // id: data.id,
958
- // sort: sort,
959
- // isShow: 1,
960
- // type: 1,
961
- // operateStatus: 1,
962
- // open: false
963
- // });
964
- vm.dialogFormVisible = false;
965
- vm.form.pid = "";
966
- vm.form.icon = 1;
967
- vm.$store.commit("SET_MENULIST", vm.menu);
968
- vm.resetForm();
969
- } else {
970
- vm.$message.error(data.msg ? data.msg : "添加菜单失败");
971
- }
972
- }
973
- });
974
- },
975
- addFormFunc() {
976
- const vm = this;
977
- vm.$refs.form.validate(async valid => {
978
- if (valid) {
979
- const params = {
980
- pid: vm.form.id,
981
- name: vm.form.name,
982
- companyNo: vm.companyNo,
983
- icon: vm.form.icon.toString()
984
- };
985
- const { data } = await api.addForm(params);
986
- if (data.state == "ok") {
987
- vm.$message.success("添加表单成功");
988
- vm.getConfigList();
989
- vm.dialogFormVisible = false;
990
- vm.form.icon = 1;
991
- vm.resetForm();
992
- } else {
993
- vm.$message.error(data.msg ? data.msg : "添加菜单失败");
994
- }
995
- }
996
- });
997
- },
998
- // 编辑菜单名称
999
- async editMenuFunc() {
1000
- const vm = this;
1001
- vm.$refs.form.validate(async valid => {
1002
- if (valid) {
1003
- let params = {};
1004
- let item = null;
1005
- if (vm.form.thrIndex) {
1006
- params = {
1007
- id: vm.menu[vm.form.index].subMenu[vm.form.secIndex].subMenu[
1008
- vm.form.thrIndex
1009
- ].id,
1010
- name: vm.form.name,
1011
- icon: vm.form.icon.toString()
1012
- };
1013
- item =
1014
- vm.menu[vm.form.index].subMenu[vm.form.secIndex].subMenu[
1015
- vm.form.thrIndex
1016
- ];
1017
- } else if (!vm.form.thrIndex && vm.form.secIndex) {
1018
- params = {
1019
- id: vm.menu[vm.form.index].subMenu[vm.form.secIndex].id,
1020
- name: vm.form.name,
1021
- icon: vm.form.icon.toString()
1022
- };
1023
- item = vm.menu[vm.form.index].subMenu[vm.form.secIndex];
1024
- } else {
1025
- params = {
1026
- id: vm.menu[vm.form.index].id,
1027
- name: vm.form.name,
1028
- icon: vm.form.icon.toString()
1029
- };
1030
- item = vm.menu[vm.form.index];
1031
- vm.$store.state.menuList = vm.menu;
1032
- }
1033
- // debugger;
1034
- const { data } = await api.changeMenuName(params);
1035
- if (data.state == "ok") {
1036
- item.name = vm.form.name;
1037
- this.updateFormBuilder({
1038
- name: vm.form.name,
1039
- menuId: this.$store.state.formBuilder.menuId,
1040
- formDesId: this.$store.state.formBuilder.formDesId,
1041
- type: this.$store.state.formBuilder.type,
1042
- currentMenu: this.$store.state.formBuilder.currentMenu
1043
- });
1044
- this.getConfigList();
1045
- vm.dialogFormVisible = false;
1046
- vm.resetForm();
1047
- } else {
1048
- vm.$message.error(data.msg ? data.msg : "修改名称失败,请重试");
1049
- }
1050
- }
1051
- });
1052
- },
1053
- // 操作按钮
1054
- async operation() {
1055
- if (this.type == "add") {
1056
- this.addMenuFunc();
1057
- } else if (this.type == "addForm") {
1058
- this.addFormFunc();
1059
- } else {
1060
- this.editMenuFunc();
1061
- }
1062
- },
1063
- // 获取表单json数据
1064
- async getFormDes(id, name, type, pid, flg) {
1065
- const vm = this;
1066
- const h = this.$createElement;
1067
- const isSingleArr = [];
1068
- let isSingle = false;
1069
- vm.menu.forEach((e, i) => {
1070
- e.subMenu.forEach(e2 => {
1071
- isSingleArr.push(e2);
1072
- });
1073
- });
1074
- if (isSingleArr.length <= 1) {
1075
- isSingle = true;
1076
- } else {
1077
- isSingle = false;
1078
- }
1079
- if (!flg && !isSingle) {
1080
- vm.$msgbox({
1081
- title: "保存提示",
1082
- message: h(
1083
- "div",
1084
- {
1085
- class: {
1086
- msgboxDiv: true
1087
- }
1088
- },
1089
- [
1090
- h(
1091
- "img",
1092
- {
1093
- domProps: {
1094
- src: dd
1095
- }
1096
- },
1097
- "VNode"
1098
- ),
1099
- // h("img", { "src": "../../../assets/icon_warning.png" }, "VNode"),
1100
- h("div", null, "表单设计修改但未保存,是否保存后继续?")
1101
- ]
1102
- ),
1103
- confirmButtonText: "保存并继续",
1104
- cancelButtonText: "不保存",
1105
- closeOnClickModal: false,
1106
- closeOnPressEscape: false,
1107
- showCancelButton: true,
1108
- cancelButtonClass: "cancelBtn",
1109
- confirmButtonClass: "confirmBtn"
1110
- })
1111
- .then(async() => {
1112
- const res =
1113
- await vm.$parent.$refs.AppMain.$refs.mainHeader.saveDate();
1114
- vm.$store.state.formBuilder.currentMenu = id;
1115
- vm.$nextTick(() => {
1116
- vm.menu.map((e, i) => {
1117
- e.active = false;
1118
- if (e.subMenu) {
1119
- e.subMenu.map((e2, i) => {
1120
- if (e2.id == id) {
1121
- e2.active = true;
1122
- }
1123
- });
1124
- }
1125
- });
1126
- });
1127
-
1128
- const views = getMenuRouter(id);
1129
- if ((type == "precut" && views == "") || vm.menuId == id) return;
1130
- // this.updateFormBuilder({
1131
- // menuId: id,
1132
- // name: name,
1133
- // formDesId: "",
1134
- // type: type,
1135
- // currentMenu: id
1136
- // });
1137
- const { data } = await api.queryFormByMenu({
1138
- menuId: id,
1139
- companyNo: vm.companyNo
1140
- });
1141
- let pName = {};
1142
- if (vm.$store.state.menuList) {
1143
- pName = _.find(vm.$store.state.menuList, function(o) {
1144
- return o.id == pid;
1145
- })?.name;
1146
- }
1147
-
1148
- if (data.state == "ok" && JSON.stringify(data.data) == "{}") {
1149
- vm.clearForm();
1150
- vm.updateFormAttr(_.cloneDeep(formAttrDefault));
1151
- vm.updateFormBuilder({
1152
- menuId: id,
1153
- name: vm.form.title,
1154
- formDesId: data.data.id,
1155
- type: type,
1156
- currentMenu: id
1157
- });
1158
- } else if (data.state == "ok" && data.data) {
1159
- const keys = Object.keys(formAttrDefault);
1160
- var formAttr = Object.assign(
1161
- _.cloneDeep(formAttrDefault),
1162
- _.pick(data.data.content.formAttr, keys)
1163
- );
1164
- formAttr = Object.assign(formAttr, data.data.content.formAttr);
1165
-
1166
- vm.json2Form(data.data.content.formDesc, type);
1167
- vm.updateFormAttr(formAttr);
1168
-
1169
- vm.updateFormBuilder({
1170
- menuId: id,
1171
- name: vm.form.title,
1172
- formDesId: data.data.id,
1173
- type: type,
1174
- currentMenu: id
1175
- });
1176
- } else {
1177
- vm.$message.error(data.msg ? data.msg : "获取信息失败");
1178
- }
1179
- })
1180
- .catch(async() => {
1181
- vm.$store.state.formBuilder.currentMenu = id;
1182
- vm.$nextTick(() => {
1183
- vm.menu.map((e, i) => {
1184
- e.active = false;
1185
- if (e.subMenu) {
1186
- e.subMenu.map((e2, i) => {
1187
- if (e2.id == id) {
1188
- e2.active = true;
1189
- }
1190
- });
1191
- }
1192
- });
1193
- });
1194
-
1195
- const views = getMenuRouter(id);
1196
- if ((type == "precut" && views == "") || vm.menuId == id) return;
1197
- // this.updateFormBuilder({
1198
- // menuId: id,
1199
- // name: name,
1200
- // formDesId: "",
1201
- // type: type,
1202
- // currentMenu: id
1203
- // });
1204
- const { data } = await api.queryFormByMenu({
1205
- menuId: id,
1206
- companyNo: vm.companyNo
1207
- });
1208
- let pName = {};
1209
- if (vm.$store.state.menuList) {
1210
- pName = _.find(vm.$store.state.menuList, function(o) {
1211
- return o.id == pid;
1212
- })?.name;
1213
- }
1214
-
1215
- if (data.state == "ok" && JSON.stringify(data.data) == "{}") {
1216
- vm.clearForm();
1217
- vm.updateFormAttr(_.cloneDeep(formAttrDefault));
1218
- vm.updateFormBuilder({
1219
- menuId: id,
1220
- name: vm.form.title,
1221
- formDesId: data.data.id,
1222
- type: type,
1223
- currentMenu: id
1224
- });
1225
- } else if (data.state == "ok" && data.data) {
1226
- const keys = Object.keys(formAttrDefault);
1227
- var formAttr = Object.assign(
1228
- _.cloneDeep(formAttrDefault),
1229
- _.pick(data.data.content.formAttr, keys)
1230
- );
1231
- formAttr = Object.assign(formAttr, data.data.content.formAttr);
1232
-
1233
- vm.json2Form(data.data.content.formDesc, type);
1234
- vm.updateFormAttr(formAttr);
1235
-
1236
- vm.updateFormBuilder({
1237
- menuId: id,
1238
- name: vm.form.title,
1239
- formDesId: data.data.id,
1240
- type: type,
1241
- currentMenu: id
1242
- });
1243
- } else {
1244
- vm.$message.error(data.msg ? data.msg : "获取信息失败");
1245
- }
1246
- vm.$message({
1247
- type: "info",
1248
- message: "已取消保存"
1249
- });
1250
- });
1251
- } else {
1252
- vm.$store.state.formBuilder.currentMenu = id;
1253
-
1254
- vm.$nextTick(() => {
1255
- vm.menu.map((e, i) => {
1256
- e.active = false;
1257
- if (e.subMenu) {
1258
- e.subMenu.map((e2, i) => {
1259
- if (e2.id == id) {
1260
- e2.active = true;
1261
- }
1262
- });
1263
- }
1264
- });
1265
- });
1266
-
1267
- const views = getMenuRouter(id);
1268
- if ((type == "precut" && views == "") || vm.menuId == id) return;
1269
- // this.updateFormBuilder({
1270
- // menuId: id,
1271
- // name: name,
1272
- // formDesId: "",
1273
- // type: type,
1274
- // currentMenu: id
1275
- // });
1276
- const { data } = await api.queryFormByMenu({
1277
- menuId: id,
1278
- companyNo: vm.companyNo
1279
- });
1280
- let pName = {};
1281
- if (vm.$store.state.menuList) {
1282
- pName = _.find(vm.$store.state.menuList, function(o) {
1283
- return o.id == pid;
1284
- })?.name;
1285
- }
1286
-
1287
- if (data.state == "ok" && JSON.stringify(data.data) == "{}") {
1288
- vm.clearForm();
1289
- vm.updateFormAttr(_.cloneDeep(formAttrDefault));
1290
- debugger;
1291
- vm.updateFormBuilder({
1292
- menuId: id,
1293
- name: vm.form.title,
1294
- formDesId: data.data.id,
1295
- type: type,
1296
- currentMenu: id
1297
- });
1298
- } else if (data.state == "ok" && data.data) {
1299
- const keys = Object.keys(formAttrDefault);
1300
- var formAttr = Object.assign(
1301
- _.cloneDeep(formAttrDefault),
1302
- _.pick(data.data.content.formAttr, keys)
1303
- );
1304
- formAttr = Object.assign(formAttr, data.data.content.formAttr);
1305
-
1306
- vm.json2Form(data.data.content.formDesc, type);
1307
- vm.updateFormAttr(formAttr);
1308
-
1309
- vm.form.title = `${vm.menu[0].name}/${vm.menu[0].subMenu[0].name}/${vm.menu[0].subMenu[0].subMenu[0].name}`;
1310
- vm.updateFormBuilder({
1311
- menuId: id,
1312
- name: vm.form.title,
1313
- formDesId: data.data.id,
1314
- type: type,
1315
- currentMenu: id
1316
- });
1317
- } else {
1318
- vm.$message.error(data.msg ? data.msg : "获取信息失败");
1319
- }
1320
- }
1321
- },
1322
- json2Form(formDesc, type) {
1323
- // 清空原有list (待优化)
1324
- this.clearForm(); // 2.更新 formDesc(组件通用配置数据) // 3.处理 formDesc.attr(组件属性配置数据)
1325
- if (type == "blank") {
1326
- const list = Object.entries(formDesc).map(([key, val]) => {
1327
- const attrsDefaultData = configList[val.type]
1328
- ? _.cloneDeep(configList[val.type].attrsDefaultData)
1329
- : {};
1330
- const attrs = val.attrs
1331
- ? Object.assign(attrsDefaultData, val.attrs)
1332
- : attrsDefaultData;
1333
- return {
1334
- ...val,
1335
- attrs,
1336
- field: key
1337
- };
1338
- }); // 更新 list
1339
- this.updateList({ name: "default", newList: list });
1340
- } else {
1341
- for (const name in formDesc) {
1342
- const list = Object.entries(formDesc[name]).map(([key, val]) => {
1343
- const attrsDefaultData = configList[val.type]
1344
- ? _.cloneDeep(configList[val.type].attrsDefaultData)
1345
- : {};
1346
- const attrs = val.attrs
1347
- ? Object.assign(attrsDefaultData, val.attrs)
1348
- : attrsDefaultData;
1349
- return {
1350
- attrs: val.attrs || {},
1351
- field: key,
1352
- ...val
1353
- };
1354
- }); // 更新 list
1355
- this.updateList({ name: name, newList: list });
1356
- }
1357
- } // 更新 selectIndex
1358
- this.updateSelectIndex(0);
1359
- },
1360
- // 获取预制菜单
1361
- async getPrecutMenu() {
1362
- // const { data } = await api.getPrecutMenu();
1363
- const { data } = await apiAuth.getMenus();
1364
- console.log(data);
1365
- if (data.state == "ok") {
1366
- const menuList = _.sortBy(data.data, function(item) {
1367
- return item.sort;
1368
- });
1369
- menuList.forEach(item => {
1370
- item.open = false;
1371
- item.icon = item.icon
1372
- ? require(`@/assets/center/menuIcon/${item.icon}.png`)
1373
- : "";
1374
- if (item.list.length > 0) {
1375
- item.subMenu = _.sortBy(item.list, function(secItem) {
1376
- return secItem.sort;
1377
- });
1378
- }
1379
- });
1380
- this.precutMenu = menuList;
1381
- }
1382
- }
1383
- },
1384
- mounted() {
1385
- const _this = this;
1386
- // this.getPrecutMenu();
1387
- this.getConfigList();
1388
- this.$dragging.$on("dragged", ({ value }) => {
1389
- console.log(value);
1390
- if (this.step == 0) {
1391
- this.oldMenu = this.menu;
1392
- }
1393
- this.step++;
1394
- });
1395
- this.$dragging.$on("dragend", async val => {
1396
- if (this.step < 1) return;
1397
- console.log(val);
1398
- console.log(_this.menu, "end");
1399
- const group = val.group.split("-");
1400
- let params = {};
1401
- if (group[0] == "item") {
1402
- const id = this.menu.map(item => item.id);
1403
- params = { ids: id };
1404
- console.log(id);
1405
- } else {
1406
- const index = group[1];
1407
- const id = this.menu[index].subMenu.map(item => item.id);
1408
- params = { ids: id };
1409
- }
1410
- const { data } = await api.sortMenu(params);
1411
- if (data.state == "ok") {
1412
- this.step = 0;
1413
- } else {
1414
- this.menu = this.oldMenu;
1415
- this.$message.error(data.msg ? data.msg : "保存失败");
1416
- }
1417
- });
1418
- }
1419
- };
1420
- </script>
1421
-
1422
- <style lang="scss" scoped>
1423
- [class^="icon-"],
1424
- [class*=" icon-"] {
1425
- /* use !important to prevent issues with browser extensions that change fonts */
1426
- font-size: 40px;
1427
- }
1428
- .menuIconBox {
1429
- margin-bottom: 5px;
1430
- }
1431
- .iconMenuBox {
1432
- text-align: center;
1433
- width: 56px;
1434
- height: 19px;
1435
- font-size: 14px;
1436
- font-family: "Microsoft YaHei";
1437
- color: #333333;
1438
- line-height: 19px;
1439
- }
1440
- .iconMenu {
1441
- text-align: center;
1442
- display: inline-block;
1443
- width: 40px;
1444
- margin-right: 12px;
1445
- border-radius: 5px;
1446
- }
1447
- .el-dialog__body {
1448
- .iconMenu {
1449
- text-align: center;
1450
- display: inline-block;
1451
- width: 40px;
1452
- margin-right: 12px;
1453
- border-radius: 5px;
1454
- padding: 5px;
1455
- &:hover {
1456
- background-color: rgb(233, 233, 233);
1457
- }
1458
- &:active {
1459
- background-color: rgb(210, 234, 249);
1460
- }
1461
- }
1462
- }
1463
- .bgc {
1464
- background-color: rgb(210, 234, 249);
1465
- }
1466
-
1467
- /deep/ .el-cascader {
1468
- width: 100%;
1469
- }
1470
- .msgboxDiv {
1471
- text-align: center !important;
1472
- div {
1473
- margin-top: 20px;
1474
- margin-bottom: 10px;
1475
- }
1476
- }
1477
- .msgboxDiv .el-message-box__btns {
1478
- text-align: center !important;
1479
- margin-bottom: 20px;
1480
- }
1481
- .msgboxDiv .el-message-box__btns button:nth-child(2) {
1482
- margin-left: 20px !important;
1483
- }
1484
- .el-message-box__btns {
1485
- text-align: center !important;
1486
- }
1487
- .dialog-footer {
1488
- text-align: center;
1489
- }
1490
- .el-icon-setting {
1491
- color: #ccc !important;
1492
- font-size: 18px !important;
1493
- }
1494
- .el-icon-setting:hover {
1495
- color: #0286df !important;
1496
- }
1497
- .addgroup {
1498
- background: #0286df;
1499
- border-radius: 4px;
1500
- padding: 10px 13px;
1501
- }
1502
- .addform {
1503
- // background: #0286DF;
1504
- border-radius: 4px;
1505
- padding: 10px 13px;
1506
- background: #fff;
1507
- border-color: #409eff;
1508
- color: #409eff;
1509
- }
1510
- /deep/ .el-tabs__nav-scroll {
1511
- // padding: 5px;
1512
- }
1513
- /deep/ .el-tabs__header {
1514
- margin: 0 0 5px !important;
1515
- }
1516
- /deep/ .el-tabs__nav {
1517
- width: 100% !important;
1518
- padding-top: 5px !important;
1519
- display: flex;
1520
- justify-content: center;
1521
- align-items: center;
1522
- }
1523
- /deep/ .el-tabs__nav .el-tabs__item {
1524
- // height: 80px !important;
1525
- text-align: center;
1526
- width: 50% !important;
1527
- .span-box {
1528
- position: relative;
1529
- bottom: -10px;
1530
- }
1531
- span {
1532
- // line-height: 20px;
1533
- }
1534
- }
1535
- // border-bottom: 1px solid #ccc;
1536
- .span-box {
1537
- text-align: center;
1538
- display: block;
1539
- }
1540
- .span-box-icon {
1541
- text-align: center;
1542
- font-size: 19px;
1543
- // display: block;
1544
- }
1545
- .is-active {
1546
- background-color: #ecf5ff;
1547
- color: #0286df;
1548
- }
1549
-
1550
- /deep/ .el-tabs__content {
1551
- // height: 100% !important;
1552
- // overflow: auto !important;
1553
- }
1554
- .el-tabs--left {
1555
- // height: 100% !important;
1556
- }
1557
- .el-tab-pane {
1558
- }
1559
- .menu-list {
1560
- // overflow: auto;
1561
- width: 100%;
1562
- background-color: #ffffff;
1563
-
1564
- height: 100%;
1565
- .menu-config {
1566
- display: flex;
1567
- margin-bottom: 10px;
1568
- justify-content: space-between;
1569
- align-items: center;
1570
- // height: 32px;
1571
- overflow: hidden;
1572
- padding-top: 10px;
1573
- .config-title {
1574
- width: 100%;
1575
- display: flex;
1576
- justify-content: center;
1577
- align-items: center;
1578
- h4 {
1579
- font-size: 18px;
1580
- margin: 0;
1581
- display: inline-block;
1582
- }
1583
- i {
1584
- margin-left: 8px;
1585
- font-size: 18px;
1586
- cursor: pointer;
1587
- color: #666666;
1588
- }
1589
- }
1590
- }
1591
- .menu-item {
1592
- padding: 0 10px 0 20px;
1593
- position: relative;
1594
- display: flex;
1595
- justify-content: space-between;
1596
- align-items: center;
1597
- height: 56px;
1598
- color: #333;
1599
- line-height: 56px;
1600
- font-size: 16px;
1601
- cursor: pointer;
1602
- &:hover {
1603
- i {
1604
- display: inline-block;
1605
- }
1606
- }
1607
- i {
1608
- color: #909399;
1609
- }
1610
- }
1611
- .menu-item-name {
1612
- width: 155% !important;
1613
- }
1614
- .menu-item-child {
1615
- transition: 0.5s all ease;
1616
- height: 0;
1617
- overflow: hidden;
1618
- padding-left: 0;
1619
- margin: 0;
1620
- font-size: 14px;
1621
- color: #666;
1622
- li {
1623
- padding-left: 30px;
1624
- .menu-item-name {
1625
- font-size: 14px;
1626
- span {
1627
- max-width: 200px;
1628
- }
1629
- }
1630
- .menu-item-option {
1631
- width: 46px;
1632
- }
1633
- }
1634
- li.active {
1635
- background-color: #ecf5ff;
1636
- color: #0286df;
1637
- }
1638
- }
1639
- .menu-item-name {
1640
- display: flex;
1641
- align-items: center;
1642
- color: #303133;
1643
- img {
1644
- height: 16px;
1645
- width: 16px;
1646
- margin-right: 6px;
1647
- }
1648
- .no-img {
1649
- visibility: hidden;
1650
- }
1651
- span {
1652
- max-width: 180px;
1653
- overflow: hidden;
1654
- text-overflow: ellipsis;
1655
- white-space: nowrap;
1656
- }
1657
- }
1658
- .el-icon-arrow-down {
1659
- position: absolute;
1660
- right: 6px;
1661
- top: 10px;
1662
- transition: 0.5s all ease;
1663
- transform: rotate(0deg);
1664
- -ms-transform: rotate(0deg); /* IE 9 */
1665
- -webkit-transform: rotate(0deg); /* Safari and Chrome */
1666
- }
1667
- .menu-item-option {
1668
- width: 60px;
1669
- i {
1670
- margin-left: 3px;
1671
- font-size: 14px;
1672
- cursor: pointer;
1673
- color: #666666;
1674
- }
1675
- .el-icon-no-view {
1676
- height: 14px;
1677
- width: 14px;
1678
- background: url("../../../assets/login/close-eye.png") center center
1679
- no-repeat;
1680
- background-size: 100%;
1681
- }
1682
- .active {
1683
- color: #ccc;
1684
- }
1685
- .el-dropdown-link {
1686
- color: #0286df;
1687
- font-size: 12px;
1688
- i {
1689
- color: #0286df;
1690
- font-size: 12px;
1691
- }
1692
- }
1693
- }
1694
- .hover-col {
1695
- &:hover {
1696
- background-color: #ecf5ff;
1697
- }
1698
- }
1699
- .active {
1700
- background-color: #ecf5ff;
1701
- }
1702
- .is-open {
1703
- .el-icon-arrow-down {
1704
- transform: rotate(180deg);
1705
- -ms-transform: rotate(180deg); /* IE 9 */
1706
- -webkit-transform: rotate(180deg); /* Safari and Chrome */
1707
- }
1708
- .menu-item-child {
1709
- height: auto;
1710
- }
1711
- }
1712
- }
1713
- .el-menu-item {
1714
- display: flex;
1715
- }
1716
- .el-menu-item.is-active {
1717
- color: #303133 !important;
1718
- }
1719
- /deep/ .el-submenu__title {
1720
- display: flex !important;
1721
- align-items: center !important;
1722
- // padding: 0 10px 0 10px !important;
1723
- }
1724
- .el-submenu__icon-arrow {
1725
- position: absolute !important;
1726
- top: 50% !important;
1727
- right: 8px !important;
1728
- margin-top: -7px !important;
1729
- -webkit-transition: -webkit-transform 0.3s !important;
1730
- transition: -webkit-transform 0.3s !important;
1731
- transition: transform 0.3s !important;
1732
- transition: transform 0.3s, -webkit-transform 0.3s !important;
1733
- font-size: 12px !important;
1734
- }
1735
- .menu-item-option {
1736
- span {
1737
- height: 50px;
1738
- display: inline-block;
1739
- i {
1740
- vertical-align: revert;
1741
- }
1742
- }
1743
- }
1744
-
1745
- /deep/ .el-submenu .el-menu-item {
1746
- height: 50px;
1747
- line-height: 50px;
1748
- // padding: 0 20px 0 60px !important;
1749
- padding: 0 20px 0 24px !important;
1750
- min-width: 200px;
1751
- }
1752
- </style>
1
+
2
+ <template>
3
+ <el-tabs @tab-click="handleClick">
4
+ <el-tab-pane label="菜单">
5
+
6
+ <span slot="label">
7
+ <!-- <span class="span-box"> -->
8
+ <i class="el-icon-document span-box-icon"></i>
9
+ 菜单
10
+ <!-- </span> -->
11
+ </span>
12
+ <div class="menu-list">
13
+ <div class="menu-config">
14
+ <div class="config-title">
15
+ <!-- <h4>菜单配置</h4><i
16
+ class="el-icon-circle-plus-outline"
17
+ @click.stop="addMenu()"
18
+ ></i> -->
19
+ <el-button
20
+ type="primary"
21
+ class='addgroup'
22
+ @click.stop="addMenu()"
23
+ style="margin-right:50px"
24
+ >新增分组</el-button>
25
+ <el-button
26
+ class='addform'
27
+ plain
28
+ @click.stop="addForm()"
29
+ >新增表单</el-button>
30
+ </div>
31
+ <div class="collapse"></div>
32
+ </div>
33
+ <!-- 配置菜单 -->
34
+
35
+ <el-menu
36
+ default-active="2"
37
+ class="el-menu-vertical-demo"
38
+ @select="handleSelect"
39
+ @open="handleOpen"
40
+ @close="handleClose"
41
+ >
42
+ <el-submenu
43
+ :index="item.id"
44
+ v-for="(item,ind) in menu"
45
+ :key="'pre'+ind"
46
+ :class="{'is-open': item.open}"
47
+ >
48
+ <template
49
+ slot="title"
50
+ class='mTitle'
51
+ >
52
+ <!-- <i class="el-icon-location"></i> -->
53
+ <img
54
+ :src="item.icon"
55
+ v-if="getIcon(item.icon).isOss"
56
+ alt=""
57
+ srcset=""
58
+ style="width: 40px;height:40px;margin-right:10px;"
59
+ >
60
+ <span
61
+ :class="['icon-menu-'+(item.icon),'iconMenu']"
62
+ v-else-if="!getIcon(item.icon).isOss"
63
+ >
64
+ <span class="path1"></span>
65
+ <span class="path2"></span>
66
+ <span class="path3"></span>
67
+ <span class="path4"></span>
68
+ </span>
69
+ <div
70
+ v-else
71
+ style="width: 79px;height:40px;margin-right:10px;"
72
+ ></div>
73
+ <span class="menu-item-name"><span>{{item.name}}</span></span>
74
+ <div
75
+ class="menu-item-option"
76
+ v-if="item.operateStatus"
77
+ @click.stop
78
+ >
79
+ <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
80
+ <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
81
+ <el-dropdown
82
+ trigger="click"
83
+ @command="handleCommand"
84
+ >
85
+ <span class="el-dropdown-link">
86
+ <i class="el-icon-setting el-icon--right"></i>
87
+ </span>
88
+ <el-dropdown-menu slot="dropdown">
89
+ <el-dropdown-item :command="`edit-${ind}`">编辑</el-dropdown-item>
90
+ <!-- <el-dropdown-item :command="`change-${index}-${senindex}`">
91
+ {{senitem.isShow == 1 ? '隐藏' : '启用'}}</el-dropdown-item>-->
92
+ <el-dropdown-item :command="`delete-${ind}`">删除</el-dropdown-item>
93
+ </el-dropdown-menu>
94
+ </el-dropdown>
95
+ </div>
96
+ </template>
97
+ <template v-for="(item1,ind1) in item.subMenu">
98
+ <el-submenu
99
+ :index="item.id+'-'+item1.id"
100
+ :key="item1.id"
101
+ v-if="item1.type"
102
+ >
103
+ <template slot="title"> <span class="menu-item-name"><span>{{item1.name}}</span></span>
104
+ <div
105
+ class="menu-item-option"
106
+ v-if="item1.operateStatus"
107
+ @click.stop
108
+ >
109
+ <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
110
+ <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
111
+ <el-dropdown
112
+ trigger="click"
113
+ @command="handleCommand"
114
+ >
115
+ <span class="el-dropdown-link">
116
+ <i class="el-icon-setting el-icon--right"></i>
117
+ </span>
118
+ <el-dropdown-menu slot="dropdown">
119
+ <el-dropdown-item :command="`edit-${ind}-${ind1}`">编辑</el-dropdown-item>
120
+ <!-- <el-dropdown-item :command="`change-${index}-${senindex}`">
121
+ {{senitem.isShow == 1 ? '隐藏' : '启用'}}</el-dropdown-item>-->
122
+ <el-dropdown-item :command="`delete-${ind}-${ind1}`">删除</el-dropdown-item>
123
+ </el-dropdown-menu>
124
+ </el-dropdown>
125
+ </div>
126
+ </template>
127
+ <el-menu-item
128
+ :index="item1.id+'-'+item2.id"
129
+ :key="item2.id"
130
+ v-for="(item2,ind2) in item1.subMenu"
131
+ @click="getFormDes(item2.id,item2.name,'blank',item2.pid)"
132
+ >
133
+ <img
134
+ :src="item2.icon"
135
+ v-if="getIcon(item2.icon).isOss"
136
+ alt=""
137
+ srcset=""
138
+ style="width: 40px;height:40px;margin-right:10px;"
139
+ >
140
+ <span
141
+ :class="['icon-menu-'+(item2.icon),'iconMenu']"
142
+ v-else-if="!getIcon(item2.icon).isOss"
143
+ >
144
+ <span class="path1"></span>
145
+ <span class="path2"></span>
146
+ <span class="path3"></span>
147
+ <span class="path4"></span>
148
+ </span>
149
+ <div
150
+ v-else
151
+ style="width: 79px;height:40px;margin-right:10px;"
152
+ ></div>
153
+ <span class="menu-item-name"><span>{{item2.name}}</span></span>
154
+ <div
155
+ class="menu-item-option"
156
+ @click.stop
157
+ >
158
+ <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
159
+ <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
160
+ <el-dropdown
161
+ trigger="click"
162
+ @command="handleCommand"
163
+ >
164
+ <span class="el-dropdown-link">
165
+ <i class="el-icon-setting el-icon--right"></i>
166
+ </span>
167
+ <el-dropdown-menu slot="dropdown">
168
+ <el-dropdown-item :command="`edit-${ind}-${ind1}-${ind2}`">编辑</el-dropdown-item>
169
+ <el-dropdown-item :command="`delete-${ind}-${ind1}-${ind2}`">删除</el-dropdown-item>
170
+ </el-dropdown-menu>
171
+ </el-dropdown>
172
+ </div>
173
+
174
+ </el-menu-item>
175
+ </el-submenu>
176
+
177
+ <el-menu-item
178
+ :index="item.id+'-'+item1.id"
179
+ :key="item1.id"
180
+ @click="getFormDes(item1.id,item1.name,'blank',item1.pid)"
181
+ v-else
182
+ >
183
+ <img
184
+ :src="item1.icon"
185
+ v-if="getIcon(item1.icon).isOss"
186
+ alt=""
187
+ srcset=""
188
+ style="width: 40px;height:40px;margin-right:10px;"
189
+ >
190
+ <span
191
+ :class="['icon-menu-'+(item1.icon),'iconMenu']"
192
+ v-else-if="!getIcon(item1.icon).isOss"
193
+ >
194
+ <span class="path1"></span>
195
+ <span class="path2"></span>
196
+ <span class="path3"></span>
197
+ <span class="path4"></span>
198
+ </span>
199
+ <div
200
+ v-else
201
+ style="width: 79px;height:40px;margin-right:10px;"
202
+ ></div>
203
+ <span class="menu-item-name"><span>{{item1.name}}</span></span>
204
+ <div
205
+ class="menu-item-option"
206
+ @click.stop
207
+ >
208
+ <!-- <i class="el-icon-edit" @click.stop="editMenuName(index,senindex)"></i>
209
+ <i :class="[senitem.isShow == 1 ? 'el-icon-view' : 'el-icon-no-view']" @click.stop="changeMenu(index,senindex)"></i> -->
210
+ <el-dropdown
211
+ trigger="click"
212
+ @command="handleCommand"
213
+ >
214
+ <span class="el-dropdown-link">
215
+ <i class="el-icon-setting el-icon--right"></i>
216
+ </span>
217
+ <el-dropdown-menu slot="dropdown">
218
+ <el-dropdown-item :command="`edit-${ind}-${ind1}`">编辑</el-dropdown-item>
219
+ <el-dropdown-item :command="`delete-${ind}-${ind1}`">删除</el-dropdown-item>
220
+ </el-dropdown-menu>
221
+ </el-dropdown>
222
+ </div>
223
+
224
+ </el-menu-item>
225
+ </template>
226
+
227
+ </el-submenu>
228
+
229
+ </el-menu>
230
+
231
+ <el-dialog
232
+ :title="getTitle"
233
+ :visible.sync="dialogFormVisible"
234
+ :close-on-click-modal="false"
235
+ width="500px"
236
+ >
237
+ <el-dialog
238
+ width="30%"
239
+ title="图标选择"
240
+ :visible.sync="innerVisible"
241
+ append-to-body
242
+ >
243
+ <div>
244
+
245
+ <el-row>
246
+ <el-col
247
+ :span="3"
248
+ v-for="(e,i) in 40"
249
+ :key='i'
250
+ class='menuIconBox'
251
+ >
252
+ <span
253
+ :class="['icon-menu-'+(i+1),'iconMenu',{ bgc: menuIconInnerIndex == (i+1) }]"
254
+ @dblclick="innerVisible = false;
255
+ menuIconIndex = menuIconInnerIndex = (i+1);
256
+ $nextTick(()=>{form.icon = menuIconIndex})
257
+
258
+ "
259
+ @click="menuIconInnerIndex = (i+1)"
260
+ >
261
+ <span class="path1"></span>
262
+ <span class="path2"></span>
263
+ <span class="path3"></span>
264
+ <span class="path4"></span>
265
+ </span>
266
+ </el-col>
267
+ </el-row>
268
+ </div>
269
+ <div
270
+ slot="footer"
271
+ class="dialog-footer"
272
+ >
273
+ <el-button @click="innerVisible = false">取 消</el-button>
274
+ <el-button
275
+ type="primary"
276
+ @click="innerVisible = false;
277
+ menuIconIndex = menuIconInnerIndex
278
+ $nextTick(()=>{form.icon = menuIconIndex})
279
+ "
280
+ >确定</el-button>
281
+ </div>
282
+ </el-dialog>
283
+ <el-form
284
+ ref="form"
285
+ :rules="ruleForm"
286
+ :model="form"
287
+ label-width="100px"
288
+ label-position="right"
289
+ >
290
+ <el-form-item
291
+ label="上级菜单:"
292
+ v-if="form.pName"
293
+ prop="pName"
294
+ >
295
+ <el-input
296
+ v-model="form.pName"
297
+ disabled
298
+ autocomplete="off"
299
+ ></el-input>
300
+ </el-form-item>
301
+ <el-form-item
302
+ :label="'所属分组:'"
303
+ v-if="getTitle !=='编辑表单' && curLevel != 1 ||(getTitle =='新增分组'&&curLevel == 1) ||(getTitle =='新增表单'&&curLevel == 1)"
304
+ prop="group"
305
+ :rules="type=='addForm'?{required: true, message: '所属分组不能为空', trigger: 'blur'}:null"
306
+ >
307
+ <el-cascader
308
+ :disabled="getTitle =='编辑分组' && curLevel != 1"
309
+ ref="cascader"
310
+ v-model="form.group"
311
+ :options="type!=='addForm'?menuOneLevel:menuTwoLevel"
312
+ :props="cascaderProps"
313
+ clearable
314
+ @change="handleChange"
315
+ ></el-cascader>
316
+ </el-form-item>
317
+ <el-form-item
318
+ :label="getTitle =='新增表单' || getTitle =='编辑表单'? '表单名称:':'分组名称:'"
319
+ prop="name"
320
+ >
321
+ <el-input
322
+ v-model="form.name"
323
+ maxlength
324
+ autocomplete="off"
325
+ ></el-input>
326
+ </el-form-item>
327
+ <el-form-item
328
+ v-if="isShowIconItem"
329
+ :label="'图标:'"
330
+ prop="icon"
331
+ >
332
+ <span
333
+ v-if="menuIconIndex==0"
334
+ :class="['iconMenu']"
335
+ style="background-color:#ccc;color:#fff"
336
+ @click="innerVisible=true"
337
+ >
338
+ ICON
339
+ </span>
340
+ <span
341
+ :class="['icon-menu-'+menuIconIndex,'iconMenu']"
342
+ @click="innerVisible=true;$nextTick(()=>{form.icon = menuIconIndex})
343
+ "
344
+ >
345
+ <span class="path1"></span>
346
+ <span class="path2"></span>
347
+ <span class="path3"></span>
348
+ <span class="path4"></span>
349
+ </span>
350
+ </el-form-item>
351
+ </el-form>
352
+ <div
353
+ slot="footer"
354
+ class="dialog-footer"
355
+ >
356
+ <el-button @click="dialogFormVisible = false;form.group=''">取 消</el-button>
357
+ <el-button
358
+ type="primary"
359
+ @click="operation"
360
+ >确 定</el-button>
361
+ </div>
362
+ </el-dialog>
363
+ </div>
364
+
365
+ </el-tab-pane>
366
+ <el-tab-pane label="组件">
367
+ <span slot="label">
368
+ <!-- <span class="span-box"> -->
369
+ <i class="el-icon-set-up span-box-icon"></i>
370
+ 组件
371
+ <!-- </span> -->
372
+ </span>
373
+ <app-main-left class="app-main-left" />
374
+ </el-tab-pane>
375
+
376
+ </el-tabs>
377
+
378
+ </template>
379
+ <script>
380
+ import _ from "lodash-es";
381
+ import formAttrDefault from "@/store/formBuilder/formAttrDefault";
382
+ import dd from "@/assets/icon_warning.png";
383
+ import AppMainLeft from "@/formBuilder/components/app-main/components/main-left";
384
+ import AppMainRight from "@/formBuilder/components/app-main/components/main-right/index";
385
+ import configList from "@/formBuilder/config";
386
+ import apiAuth from "@/api/apiAuth";
387
+ import * as api from "@/api/apiFormBuilder/menu";
388
+ import { mapMutations } from "vuex";
389
+ import { getMenuRouter } from "@/formBuilder/menuConfig";
390
+ export default {
391
+ components: {
392
+ AppMainLeft
393
+ },
394
+ data() {
395
+ return {
396
+ curType: 1,
397
+ curOperateStatus: 0,
398
+ curLevel: 0,
399
+ menuIconIndex: 0,
400
+ menuIconInnerIndex: 0,
401
+ innerVisible: false,
402
+ menuTwoLevelRes: [],
403
+ menuOneLevelRes: [],
404
+ cascaderProps: {
405
+ value: "id",
406
+ label: "name",
407
+ checkStrictly: true,
408
+ children: "subMenu"
409
+ },
410
+ currentMIndex: null,
411
+ currentMkeyPath: null,
412
+ dialogFormVisible: false,
413
+ type: "add",
414
+ form: {
415
+ id: "",
416
+ pName: "",
417
+ name: "",
418
+ oneName: "",
419
+ twoName: "",
420
+ thrName: "",
421
+ index: "",
422
+ icon: 1,
423
+ secIndex: "",
424
+ group: "",
425
+ thrIndex: "",
426
+ pid: "",
427
+ menuLevel: undefined
428
+ },
429
+ menu: [],
430
+ precutMenu: [],
431
+ step: 0,
432
+ oldMenu: {},
433
+ ruleForm: {
434
+ name: [
435
+ { required: true, message: "请输入菜单名称", trigger: "blur" },
436
+ { min: 1, max: 12, message: "长度在 1 到 12 个字符", trigger: "blur" }
437
+ ],
438
+
439
+ icon: [{ required: true, message: "请选择图标", trigger: "blur" }]
440
+ }
441
+ };
442
+ },
443
+ watch: {},
444
+ computed: {
445
+ getIcon() {
446
+ return function(icon) {
447
+ if (_.includes(icon, "http")) {
448
+ return { icon, isOss: true };
449
+ } else {
450
+ return { icon, isOss: false };
451
+ }
452
+ };
453
+ },
454
+ isShowIconItem: function() {
455
+ if (this.type == "add") {
456
+ if (
457
+ (this.curOperateStatus == 1 && this.curLevel == 2) ||
458
+ this.form.group == "" ||
459
+ this.curLevel == 0
460
+ ) {
461
+ return true;
462
+ }
463
+ }
464
+ if (this.type == "addForm") {
465
+ // if (this.curOperateStatus == 1) {
466
+ return true;
467
+ // }
468
+ }
469
+ if (this.type == "edit") {
470
+ if (
471
+ (this.curOperateStatus == 1 && this.curLevel == 2) ||
472
+ (this.curOperateStatus == 1 && this.curLevel == 1) ||
473
+ this.curType == 0
474
+ ) {
475
+ return true;
476
+ }
477
+ }
478
+ return false;
479
+ },
480
+ companyNo: function() {
481
+ return this.$store.state.user.cno;
482
+ },
483
+ menuOneLevel: function() {
484
+ const arr = _.cloneDeep(this.menu);
485
+ arr.forEach((e, i) => {
486
+ e.curLevel = 1;
487
+ if (e.type == 0) {
488
+ e.subMenu.splice(i, 1);
489
+ }
490
+ delete e.subMenu;
491
+ });
492
+ return arr;
493
+ },
494
+ menuTwoLevel: function() {
495
+ const arr = _.cloneDeep(this.menu);
496
+
497
+ for (let index = 0; index < arr.length; index++) {
498
+ const e = arr[index];
499
+ e.curLevel = 1;
500
+ if (e.type == 0) {
501
+ e.subMenu.splice(index, 1);
502
+ index--;
503
+ }
504
+ for (let index2 = 0; index2 < e.subMenu.length; index2++) {
505
+ const e2 = e.subMenu[index2];
506
+ e2.curLevel = 2;
507
+ if (e2.type == 0) {
508
+ e.subMenu.splice(index2, 1);
509
+ index2--;
510
+ }
511
+ delete e2.subMenu;
512
+ }
513
+ }
514
+ // arr.forEach((e, i) => {
515
+ // e.curLevel = 1;
516
+ // if (e.type == 0) {
517
+ // e.subMenu.splice(i, 1);
518
+ // i--;
519
+ // }
520
+ // e.subMenu.forEach((e2, i2) => {
521
+ // e2.curLevel = 2;
522
+ // if (e2.type == 0) {
523
+ // e.subMenu.splice(i2, 1);
524
+ // i2--;
525
+ // }
526
+ // delete e2.subMenu;
527
+ // });
528
+ // });
529
+ // arr.forEach((e, i) => {
530
+ // const iterator = data => {
531
+ // if (e.type == 0) {
532
+ // data.subMenu.splice(i, 1);
533
+ // }
534
+ // if (data.subMenu && data.subMenu.length > 0) {
535
+ // data.subMenu.forEach((item, i2) => {
536
+ // if (item.type == 0) {
537
+ // data.subMenu.splice(i, 1);
538
+ // }
539
+ // if (item.subMenu && item.subMenu.length > 0) {
540
+ // iterator(item);
541
+ // } else {
542
+ // delete item.subMenu;
543
+ // }
544
+ // });
545
+ // } else {
546
+ // delete data.subMenu;
547
+ // }
548
+ // };
549
+ // iterator(e);
550
+ // });
551
+ console.log("@@@@@@@@@@@@@@@@@");
552
+ return arr;
553
+ },
554
+ menuClone: function() {
555
+ const arr = _.cloneDeep(this.menu);
556
+ arr.forEach((e, i) => {
557
+ e.curLevel = 1;
558
+ e.subMenu.forEach((e2, i2) => {
559
+ e2.curLevel = 2;
560
+ e.subMenu.forEach((e3, i3) => {
561
+ e3.curLevel = 3;
562
+ });
563
+ });
564
+ });
565
+ return arr;
566
+ },
567
+ getTitle: function() {
568
+ if (this.type == "add") {
569
+ return "新增分组";
570
+ } else if (this.type == "addForm") {
571
+ return "新增表单";
572
+ } else if (this.type == "edit" && this.curType == 0) {
573
+ return "编辑表单";
574
+ } else if (this.type == "edit" && this.curType == 1) {
575
+ return "编辑分组";
576
+ }
577
+ return this.$store.state.user.cno;
578
+ },
579
+ menuId: function() {
580
+ return this.$store.state.formBuilder.menuId;
581
+ }
582
+ },
583
+ methods: {
584
+ ...mapMutations([
585
+ "updateFormBuilder",
586
+ "updateList",
587
+ "updateFormAttr",
588
+ "clearForm",
589
+ "updateSelectIndex"
590
+ ]),
591
+
592
+ handleChange(res) {
593
+ const vm = this;
594
+ this.curOperateStatus =
595
+ this.$refs.cascader.getCheckedNodes()[0].data.operateStatus;
596
+ this.curLevel = this.$refs.cascader.getCheckedNodes()[0].data.curLevel;
597
+ this.form.menuLevel =
598
+ this.$refs.cascader.getCheckedNodes()[0].data.menuLevel;
599
+ this.form.pid = this.$refs.cascader.getCheckedNodes()[0].data.pid;
600
+ this.form.id = this.$refs.cascader.getCheckedNodes()[0].data.id;
601
+ this.form.index = _.findIndex(
602
+ this.menu,
603
+ this.$refs.cascader.getCheckedNodes()[0].data
604
+ );
605
+ // this.form.oneName = this.menu[index].name;
606
+ // this.form.twoName = this.menu[index]?.subMenu[secIndex]?.name;
607
+ // this.form.thrName =
608
+ // this.menu[index]?.subMenu[secIndex]?.subMenu[thrIndex]?.name;
609
+ },
610
+ handleClick(res) {
611
+ const vm = this;
612
+ if (res.paneName == 1) {
613
+ vm.$parent.$refs.MainRight.$refs.FormItemTabs.$children[0].$refs.tabs[0].click();
614
+ }
615
+ },
616
+ handleOpen(key, keyPath) {
617
+ this.currentMIndex = key;
618
+ this.currentMkeyPath = keyPath;
619
+ console.log(key, keyPath);
620
+ },
621
+ handleSelect(key, keyPath) {
622
+ let oneIndex, twoIndex, thrIndex;
623
+ const arr = [];
624
+ keyPath.forEach(e => {
625
+ arr.push(e.split("-")[e.split("-").length - 1]);
626
+ });
627
+
628
+ arr.forEach((e, i) => {
629
+ if (i == 0) {
630
+ oneIndex = _.findIndex(this.menu, function(r) {
631
+ return r.id == e;
632
+ });
633
+ }
634
+ if (i == 1) {
635
+ twoIndex = _.findIndex(this.menu[oneIndex].subMenu, function(r) {
636
+ return r.id == e;
637
+ });
638
+ }
639
+ if (i == 2) {
640
+ thrIndex = _.findIndex(
641
+ this.menu[oneIndex].subMenu[twoIndex].subMenu,
642
+ function(r) {
643
+ return r.id == e;
644
+ }
645
+ );
646
+ }
647
+ });
648
+ this.form.oneIndex = oneIndex;
649
+ this.form.twoIndex = twoIndex;
650
+ this.form.thrIndex = thrIndex;
651
+ if (thrIndex != -1 && thrIndex != undefined) {
652
+ this.form.title = `${this.menu[oneIndex].name}/${this.menu[oneIndex].subMenu[twoIndex].name}/${this.menu[oneIndex].subMenu[twoIndex].subMenu[thrIndex].name}`;
653
+ } else if (twoIndex != -1 && twoIndex != undefined) {
654
+ this.form.title = `${this.menu[oneIndex].name}/${this.menu[oneIndex].subMenu[twoIndex].name}`;
655
+ } else if (oneIndex != -1 && oneIndex != undefined) {
656
+ this.form.title = `${this.menu[oneIndex].name}`;
657
+ }
658
+ },
659
+
660
+ handleClose(key, keyPath) {
661
+ this.currentMIndex = key;
662
+ this.currentMkeyPath = keyPath;
663
+ console.log(key, keyPath);
664
+ },
665
+ // 获取自定义菜单
666
+ async getConfigList() {
667
+ const vm = this;
668
+ const params = { companyNo: this.companyNo };
669
+ // const data2 = await api.gitMenuConfig(params);
670
+ const { data } = await api.gitMenuConfig(params);
671
+ if (data.state == "ok") {
672
+ const menuList = _.sortBy(data.data, function(item) {
673
+ return item.sort;
674
+ });
675
+
676
+ menuList.forEach(async(item, i) => {
677
+ if (
678
+ i == 0 &&
679
+ item.subMenu.length > 0 &&
680
+ item.subMenu[0].subMenu.length > 0
681
+ ) {
682
+ item.open = true;
683
+ await vm.getFormDes(
684
+ item.subMenu[0].subMenu[0].id,
685
+ item.subMenu[0].subMenu[0].name,
686
+ "blank",
687
+ item.subMenu[0].subMenu[0].pid,
688
+ "frist"
689
+ );
690
+ } else {
691
+ item.open = false;
692
+ }
693
+ if (item.subMenu.length > 0) {
694
+ item.subMenu = _.sortBy(item.subMenu, function(secItem) {
695
+ return secItem.sort;
696
+ });
697
+ }
698
+ item.subMenu.forEach((e, i) => {
699
+ e["open"] = false;
700
+ });
701
+ });
702
+
703
+ this.menu = menuList;
704
+ console.log("我获取了");
705
+ this.$store.commit("SET_MENULIST", this.menu);
706
+ // this.changeOpen(0)
707
+ }
708
+ // ;
709
+ },
710
+ editMenuName(index, secIndex, thrIndex) {
711
+ this.type = "edit";
712
+ this.form.index = index;
713
+ this.form.secIndex = secIndex;
714
+ this.form.thrIndex = thrIndex;
715
+ this.menuIconIndex = this.form.menuIconIndex = thrIndex
716
+ ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].icon
717
+ : secIndex
718
+ ? this.menu[index].subMenu[secIndex].icon
719
+ : this.menu[index].icon;
720
+ this.form.icon = thrIndex
721
+ ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].icon
722
+ : secIndex
723
+ ? this.menu[index].subMenu[secIndex].icon
724
+ : this.menu[index].icon;
725
+ this.form.pName = thrIndex ? this.menu[index].subMenu[secIndex].name : "";
726
+ this.form.group = secIndex ? this.menu[index].subMenu[secIndex].pid : "";
727
+ this.form.name = thrIndex
728
+ ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].name
729
+ : secIndex
730
+ ? this.menu[index].subMenu[secIndex].name
731
+ : this.menu[index].name;
732
+ this.dialogFormVisible = true;
733
+ this.curOperateStatus = thrIndex
734
+ ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].operateStatus
735
+ : secIndex
736
+ ? this.menu[index].subMenu[secIndex].operateStatus
737
+ : this.menu[index].operateStatus;
738
+ this.curLevel = thrIndex
739
+ ? this.menuClone[index].subMenu[secIndex].subMenu[thrIndex].curLevel
740
+ : secIndex
741
+ ? this.menuClone[index].subMenu[secIndex].curLevel
742
+ : this.menuClone[index].curLevel;
743
+ this.curType = thrIndex
744
+ ? this.menu[index].subMenu[secIndex].subMenu[thrIndex].type
745
+ : secIndex
746
+ ? this.menu[index].subMenu[secIndex].type
747
+ : this.menu[index].type;
748
+
749
+ // this.$store.commit("SET_MENULIST", this.menu);
750
+
751
+ this.$store.commit("SET_MENULIST", this.menu);
752
+ },
753
+ addMenu(index) {
754
+ this.type = "add";
755
+ // if (indexPath.length == 1) {
756
+ // // 新增2级菜单
757
+ // }
758
+ this.form.index = index != undefined ? index : "";
759
+ this.form.pName = index != undefined ? this.menu[index].name : "";
760
+ this.form.name = "";
761
+ this.form.group = "";
762
+ this.form.icon = 1;
763
+ this.menuIconIndex = 1;
764
+ this.menuIconInnerIndex = 1;
765
+ this.form.pid = "";
766
+ this.dialogFormVisible = true;
767
+
768
+ this.$store.commit("SET_MENULIST", this.menu);
769
+ this.$refs.form.clearValidate();
770
+ },
771
+ addForm(index) {
772
+ this.type = "addForm";
773
+ this.form.pid = "";
774
+ this.form.name = "";
775
+ this.form.group = "";
776
+ this.form.pName = "";
777
+ this.form.icon = 1;
778
+ this.menuIconIndex = 1;
779
+ this.menuIconInnerIndex = 1;
780
+ this.dialogFormVisible = true;
781
+ this.getConfigList();
782
+ this.$refs.form.clearValidate();
783
+ },
784
+ async changeMenu(index, secIndex) {
785
+ let params = {};
786
+ let item = null;
787
+ if (secIndex == undefined) {
788
+ params = { id: this.menu[index].id };
789
+ item = this.menu[index];
790
+ } else {
791
+ params = { id: this.menu[index]["subMenu"][secIndex].id };
792
+ item = this.menu[index]["subMenu"][secIndex];
793
+ }
794
+ const tip = item.isShow == 1 ? "隐藏菜单" : "开启菜单";
795
+ this.$confirm(`确定要${tip}吗?`, `${tip}`, {
796
+ confirmButtonText: "确定",
797
+ cancelButtonText: "取消",
798
+ type: "warning"
799
+ })
800
+ .then(async() => {
801
+ const { data } = await api.changeShow(params);
802
+ if (data.state == "ok") {
803
+ item.isShow = item.isShow == 1 ? 0 : 1;
804
+ this.$message.success(data.msg ? data.msg : "更改成功");
805
+ } else {
806
+ this.$message.error(data.msg ? data.msg : "修改失败,请重试");
807
+ }
808
+ })
809
+ .catch(() => {});
810
+ },
811
+ async deleteMenu(index, secIndex, thrIndex) {
812
+ let params = {};
813
+ const item = null;
814
+ const vm = this;
815
+ if (secIndex == undefined) {
816
+ params = { id: vm.menu[index].id };
817
+ } else if (thrIndex == undefined) {
818
+ params = { id: vm.menu[index]["subMenu"][secIndex].id };
819
+ } else {
820
+ debugger;
821
+ params = {
822
+ id: vm.menu[index]["subMenu"][secIndex]["subMenu"][thrIndex].id
823
+ };
824
+ }
825
+ const h = vm.$createElement;
826
+ vm.$msgbox({
827
+ title: "删除提示",
828
+ message: h(
829
+ "div",
830
+ {
831
+ class: {
832
+ msgboxDiv: true
833
+ }
834
+ },
835
+ [
836
+ h(
837
+ "img",
838
+ {
839
+ domProps: {
840
+ src: dd
841
+ }
842
+ },
843
+ "VNode"
844
+ ),
845
+ // h("img", { "src": "../../../assets/icon_warning.png" }, "VNode"),
846
+ h(
847
+ "div",
848
+ null,
849
+ "删除表单后,将删除表单控件及业务数据,是否确认删除?"
850
+ )
851
+ ]
852
+ ),
853
+ showCancelButton: true,
854
+ closeOnClickModal: false,
855
+ closeOnPressEscape: false,
856
+ confirmButtonText: "确定",
857
+ cancelButtonText: "取消",
858
+ cancelButtonClass: "cancelBtn1",
859
+ confirmButtonClass: "confirmBtn1"
860
+ }).then(async() => {
861
+ const { data } = await api.deleteMenu(params);
862
+ if (data.state == "ok") {
863
+ vm.getConfigList();
864
+ } else {
865
+ this.$message.error(data.msg ? data.msg : "删除失败,请重试");
866
+ }
867
+ });
868
+
869
+ // this.$confirm(
870
+ // "删除表单后,将删除表单控件及业务数据,是否确认删除?",
871
+ // "删除提示",
872
+ // {
873
+ // confirmButtonText: "确定",
874
+ // cancelButtonText: "取消",
875
+ // type: "warning"
876
+ // // center: true
877
+ // }
878
+ // )
879
+ // .then(async() => {
880
+ // const { data } = await api.deleteMenu(params);
881
+ // if (data.state == "ok") {
882
+ // if (secIndex == undefined) {
883
+ // this.menu.splice(index, 1);
884
+ // this.$store.commit("SET_MENULIST", this.menu);
885
+ // } else {
886
+ // this.menu[index]["subMenu"].splice(secIndex, 1);
887
+ // this.$store.commit("SET_MENULIST", this.menu);
888
+ // }
889
+ // } else {
890
+ // this.$message.error(data.msg ? data.msg : "删除失败,请重试");
891
+ // }
892
+ // })
893
+ // .catch(() => {});
894
+ },
895
+ handleCommand(val) {
896
+ const option = val.split("-");
897
+ switch (option[0]) {
898
+ case "add":
899
+ this.addMenu(option[1]);
900
+ break;
901
+ case "edit":
902
+ this.editMenuName(option[1], option[2], option[3]);
903
+ break;
904
+ case "delete":
905
+ this.deleteMenu(option[1], option[2], option[3]);
906
+ break;
907
+ case "change":
908
+ this.changeMenu(option[1], option[2]);
909
+ break;
910
+ default:
911
+ break;
912
+ }
913
+ },
914
+ resetForm() {
915
+ this.form = {
916
+ pName: "",
917
+ name: "",
918
+ index: "",
919
+ secIndex: ""
920
+ };
921
+ },
922
+ changeOpen(index, type, item) {
923
+ const vm = this;
924
+ debugger;
925
+ this.currentMIndex = index;
926
+ // if (type) {
927
+ // this.precutMenu[index].open = !this.precutMenu[index].open;
928
+ // } else
929
+ if (type == 3) {
930
+ } else {
931
+ this.menu[index].open = !this.menu[index].open;
932
+ this.menu.map((e, i) => {
933
+ e.active = false;
934
+ });
935
+ this.menu[index].active = true;
936
+ // this.$store.state.formBuilder.currentMenu = this.menu[index];
937
+ }
938
+ },
939
+ // 添加分组
940
+ addMenuFunc() {
941
+ const vm = this;
942
+ vm.$refs.form.validate(async valid => {
943
+ if (valid) {
944
+ const params = {
945
+ name: vm.form.name,
946
+ companyNo: vm.companyNo,
947
+ icon: vm.form.icon.toString(),
948
+ pid: vm.form.pid ? vm.form.pid : vm.form.id
949
+ };
950
+ const { data } = await api.addMenu(params);
951
+ if (data.state == "ok") {
952
+ const sort = vm.menu.length;
953
+ vm.getConfigList();
954
+ // vm.menu[vm.form.index]["subMenu"].push({
955
+ // subMenu: [],
956
+ // name: vm.form.name,
957
+ // id: data.id,
958
+ // sort: sort,
959
+ // isShow: 1,
960
+ // type: 1,
961
+ // operateStatus: 1,
962
+ // open: false
963
+ // });
964
+ vm.dialogFormVisible = false;
965
+ vm.form.pid = "";
966
+ vm.form.icon = 1;
967
+ vm.$store.commit("SET_MENULIST", vm.menu);
968
+ vm.resetForm();
969
+ } else {
970
+ vm.$message.error(data.msg ? data.msg : "添加菜单失败");
971
+ }
972
+ }
973
+ });
974
+ },
975
+ addFormFunc() {
976
+ const vm = this;
977
+ vm.$refs.form.validate(async valid => {
978
+ if (valid) {
979
+ const params = {
980
+ pid: vm.form.id,
981
+ name: vm.form.name,
982
+ companyNo: vm.companyNo,
983
+ icon: vm.form.icon.toString()
984
+ };
985
+ const { data } = await api.addForm(params);
986
+ if (data.state == "ok") {
987
+ vm.$message.success("添加表单成功");
988
+ vm.getConfigList();
989
+ vm.dialogFormVisible = false;
990
+ vm.form.icon = 1;
991
+ vm.resetForm();
992
+ } else {
993
+ vm.$message.error(data.msg ? data.msg : "添加菜单失败");
994
+ }
995
+ }
996
+ });
997
+ },
998
+ // 编辑菜单名称
999
+ async editMenuFunc() {
1000
+ const vm = this;
1001
+ vm.$refs.form.validate(async valid => {
1002
+ if (valid) {
1003
+ let params = {};
1004
+ let item = null;
1005
+ if (vm.form.thrIndex) {
1006
+ params = {
1007
+ id: vm.menu[vm.form.index].subMenu[vm.form.secIndex].subMenu[
1008
+ vm.form.thrIndex
1009
+ ].id,
1010
+ name: vm.form.name,
1011
+ icon: vm.form.icon.toString()
1012
+ };
1013
+ item =
1014
+ vm.menu[vm.form.index].subMenu[vm.form.secIndex].subMenu[
1015
+ vm.form.thrIndex
1016
+ ];
1017
+ } else if (!vm.form.thrIndex && vm.form.secIndex) {
1018
+ params = {
1019
+ id: vm.menu[vm.form.index].subMenu[vm.form.secIndex].id,
1020
+ name: vm.form.name,
1021
+ icon: vm.form.icon.toString()
1022
+ };
1023
+ item = vm.menu[vm.form.index].subMenu[vm.form.secIndex];
1024
+ } else {
1025
+ params = {
1026
+ id: vm.menu[vm.form.index].id,
1027
+ name: vm.form.name,
1028
+ icon: vm.form.icon.toString()
1029
+ };
1030
+ item = vm.menu[vm.form.index];
1031
+ vm.$store.state.menuList = vm.menu;
1032
+ }
1033
+ // debugger;
1034
+ const { data } = await api.changeMenuName(params);
1035
+ if (data.state == "ok") {
1036
+ item.name = vm.form.name;
1037
+ this.updateFormBuilder({
1038
+ name: vm.form.name,
1039
+ menuId: this.$store.state.formBuilder.menuId,
1040
+ formDesId: this.$store.state.formBuilder.formDesId,
1041
+ type: this.$store.state.formBuilder.type,
1042
+ currentMenu: this.$store.state.formBuilder.currentMenu
1043
+ });
1044
+ this.getConfigList();
1045
+ vm.dialogFormVisible = false;
1046
+ vm.resetForm();
1047
+ } else {
1048
+ vm.$message.error(data.msg ? data.msg : "修改名称失败,请重试");
1049
+ }
1050
+ }
1051
+ });
1052
+ },
1053
+ // 操作按钮
1054
+ async operation() {
1055
+ if (this.type == "add") {
1056
+ this.addMenuFunc();
1057
+ } else if (this.type == "addForm") {
1058
+ this.addFormFunc();
1059
+ } else {
1060
+ this.editMenuFunc();
1061
+ }
1062
+ },
1063
+ // 获取表单json数据
1064
+ async getFormDes(id, name, type, pid, flg) {
1065
+ const vm = this;
1066
+ const h = this.$createElement;
1067
+ const isSingleArr = [];
1068
+ let isSingle = false;
1069
+ vm.menu.forEach((e, i) => {
1070
+ e.subMenu.forEach(e2 => {
1071
+ isSingleArr.push(e2);
1072
+ });
1073
+ });
1074
+ if (isSingleArr.length <= 1) {
1075
+ isSingle = true;
1076
+ } else {
1077
+ isSingle = false;
1078
+ }
1079
+ if (!flg && !isSingle) {
1080
+ vm.$msgbox({
1081
+ title: "保存提示",
1082
+ message: h(
1083
+ "div",
1084
+ {
1085
+ class: {
1086
+ msgboxDiv: true
1087
+ }
1088
+ },
1089
+ [
1090
+ h(
1091
+ "img",
1092
+ {
1093
+ domProps: {
1094
+ src: dd
1095
+ }
1096
+ },
1097
+ "VNode"
1098
+ ),
1099
+ // h("img", { "src": "../../../assets/icon_warning.png" }, "VNode"),
1100
+ h("div", null, "表单设计修改但未保存,是否保存后继续?")
1101
+ ]
1102
+ ),
1103
+ confirmButtonText: "保存并继续",
1104
+ cancelButtonText: "不保存",
1105
+ closeOnClickModal: false,
1106
+ closeOnPressEscape: false,
1107
+ showCancelButton: true,
1108
+ cancelButtonClass: "cancelBtn",
1109
+ confirmButtonClass: "confirmBtn"
1110
+ })
1111
+ .then(async() => {
1112
+ const res =
1113
+ await vm.$parent.$refs.AppMain.$refs.mainHeader.saveDate();
1114
+ vm.$store.state.formBuilder.currentMenu = id;
1115
+ vm.$nextTick(() => {
1116
+ vm.menu.map((e, i) => {
1117
+ e.active = false;
1118
+ if (e.subMenu) {
1119
+ e.subMenu.map((e2, i) => {
1120
+ if (e2.id == id) {
1121
+ e2.active = true;
1122
+ }
1123
+ });
1124
+ }
1125
+ });
1126
+ });
1127
+
1128
+ const views = getMenuRouter(id);
1129
+ if ((type == "precut" && views == "") || vm.menuId == id) return;
1130
+ // this.updateFormBuilder({
1131
+ // menuId: id,
1132
+ // name: name,
1133
+ // formDesId: "",
1134
+ // type: type,
1135
+ // currentMenu: id
1136
+ // });
1137
+ const { data } = await api.queryFormByMenu({
1138
+ menuId: id,
1139
+ companyNo: vm.companyNo
1140
+ });
1141
+ let pName = {};
1142
+ if (vm.$store.state.menuList) {
1143
+ pName = _.find(vm.$store.state.menuList, function(o) {
1144
+ return o.id == pid;
1145
+ })?.name;
1146
+ }
1147
+
1148
+ if (data.state == "ok" && JSON.stringify(data.data) == "{}") {
1149
+ vm.clearForm();
1150
+ vm.updateFormAttr(_.cloneDeep(formAttrDefault));
1151
+ vm.updateFormBuilder({
1152
+ menuId: id,
1153
+ name: vm.form.title,
1154
+ formDesId: data.data.id,
1155
+ type: type,
1156
+ currentMenu: id
1157
+ });
1158
+ } else if (data.state == "ok" && data.data) {
1159
+ const keys = Object.keys(formAttrDefault);
1160
+ var formAttr = Object.assign(
1161
+ _.cloneDeep(formAttrDefault),
1162
+ _.pick(data.data.content.formAttr, keys)
1163
+ );
1164
+ formAttr = Object.assign(formAttr, data.data.content.formAttr);
1165
+
1166
+ vm.json2Form(data.data.content.formDesc, type);
1167
+ vm.updateFormAttr(formAttr);
1168
+
1169
+ vm.updateFormBuilder({
1170
+ menuId: id,
1171
+ name: vm.form.title,
1172
+ formDesId: data.data.id,
1173
+ type: type,
1174
+ currentMenu: id
1175
+ });
1176
+ } else {
1177
+ vm.$message.error(data.msg ? data.msg : "获取信息失败");
1178
+ }
1179
+ })
1180
+ .catch(async() => {
1181
+ vm.$store.state.formBuilder.currentMenu = id;
1182
+ vm.$nextTick(() => {
1183
+ vm.menu.map((e, i) => {
1184
+ e.active = false;
1185
+ if (e.subMenu) {
1186
+ e.subMenu.map((e2, i) => {
1187
+ if (e2.id == id) {
1188
+ e2.active = true;
1189
+ }
1190
+ });
1191
+ }
1192
+ });
1193
+ });
1194
+
1195
+ const views = getMenuRouter(id);
1196
+ if ((type == "precut" && views == "") || vm.menuId == id) return;
1197
+ // this.updateFormBuilder({
1198
+ // menuId: id,
1199
+ // name: name,
1200
+ // formDesId: "",
1201
+ // type: type,
1202
+ // currentMenu: id
1203
+ // });
1204
+ const { data } = await api.queryFormByMenu({
1205
+ menuId: id,
1206
+ companyNo: vm.companyNo
1207
+ });
1208
+ let pName = {};
1209
+ if (vm.$store.state.menuList) {
1210
+ pName = _.find(vm.$store.state.menuList, function(o) {
1211
+ return o.id == pid;
1212
+ })?.name;
1213
+ }
1214
+
1215
+ if (data.state == "ok" && JSON.stringify(data.data) == "{}") {
1216
+ vm.clearForm();
1217
+ vm.updateFormAttr(_.cloneDeep(formAttrDefault));
1218
+ vm.updateFormBuilder({
1219
+ menuId: id,
1220
+ name: vm.form.title,
1221
+ formDesId: data.data.id,
1222
+ type: type,
1223
+ currentMenu: id
1224
+ });
1225
+ } else if (data.state == "ok" && data.data) {
1226
+ const keys = Object.keys(formAttrDefault);
1227
+ var formAttr = Object.assign(
1228
+ _.cloneDeep(formAttrDefault),
1229
+ _.pick(data.data.content.formAttr, keys)
1230
+ );
1231
+ formAttr = Object.assign(formAttr, data.data.content.formAttr);
1232
+
1233
+ vm.json2Form(data.data.content.formDesc, type);
1234
+ vm.updateFormAttr(formAttr);
1235
+
1236
+ vm.updateFormBuilder({
1237
+ menuId: id,
1238
+ name: vm.form.title,
1239
+ formDesId: data.data.id,
1240
+ type: type,
1241
+ currentMenu: id
1242
+ });
1243
+ } else {
1244
+ vm.$message.error(data.msg ? data.msg : "获取信息失败");
1245
+ }
1246
+ vm.$message({
1247
+ type: "info",
1248
+ message: "已取消保存"
1249
+ });
1250
+ });
1251
+ } else {
1252
+ vm.$store.state.formBuilder.currentMenu = id;
1253
+
1254
+ vm.$nextTick(() => {
1255
+ vm.menu.map((e, i) => {
1256
+ e.active = false;
1257
+ if (e.subMenu) {
1258
+ e.subMenu.map((e2, i) => {
1259
+ if (e2.id == id) {
1260
+ e2.active = true;
1261
+ }
1262
+ });
1263
+ }
1264
+ });
1265
+ });
1266
+
1267
+ const views = getMenuRouter(id);
1268
+ if ((type == "precut" && views == "") || vm.menuId == id) return;
1269
+ // this.updateFormBuilder({
1270
+ // menuId: id,
1271
+ // name: name,
1272
+ // formDesId: "",
1273
+ // type: type,
1274
+ // currentMenu: id
1275
+ // });
1276
+ const { data } = await api.queryFormByMenu({
1277
+ menuId: id,
1278
+ companyNo: vm.companyNo
1279
+ });
1280
+ let pName = {};
1281
+ if (vm.$store.state.menuList) {
1282
+ pName = _.find(vm.$store.state.menuList, function(o) {
1283
+ return o.id == pid;
1284
+ })?.name;
1285
+ }
1286
+
1287
+ if (data.state == "ok" && JSON.stringify(data.data) == "{}") {
1288
+ vm.clearForm();
1289
+ vm.updateFormAttr(_.cloneDeep(formAttrDefault));
1290
+ debugger;
1291
+ vm.updateFormBuilder({
1292
+ menuId: id,
1293
+ name: vm.form.title,
1294
+ formDesId: data.data.id,
1295
+ type: type,
1296
+ currentMenu: id
1297
+ });
1298
+ } else if (data.state == "ok" && data.data) {
1299
+ const keys = Object.keys(formAttrDefault);
1300
+ var formAttr = Object.assign(
1301
+ _.cloneDeep(formAttrDefault),
1302
+ _.pick(data.data.content.formAttr, keys)
1303
+ );
1304
+ formAttr = Object.assign(formAttr, data.data.content.formAttr);
1305
+
1306
+ vm.json2Form(data.data.content.formDesc, type);
1307
+ vm.updateFormAttr(formAttr);
1308
+
1309
+ vm.form.title = `${vm.menu[0].name}/${vm.menu[0].subMenu[0].name}/${vm.menu[0].subMenu[0].subMenu[0].name}`;
1310
+ vm.updateFormBuilder({
1311
+ menuId: id,
1312
+ name: vm.form.title,
1313
+ formDesId: data.data.id,
1314
+ type: type,
1315
+ currentMenu: id
1316
+ });
1317
+ } else {
1318
+ vm.$message.error(data.msg ? data.msg : "获取信息失败");
1319
+ }
1320
+ }
1321
+ },
1322
+ json2Form(formDesc, type) {
1323
+ // 清空原有list (待优化)
1324
+ this.clearForm(); // 2.更新 formDesc(组件通用配置数据) // 3.处理 formDesc.attr(组件属性配置数据)
1325
+ if (type == "blank") {
1326
+ const list = Object.entries(formDesc).map(([key, val]) => {
1327
+ const attrsDefaultData = configList[val.type]
1328
+ ? _.cloneDeep(configList[val.type].attrsDefaultData)
1329
+ : {};
1330
+ const attrs = val.attrs
1331
+ ? Object.assign(attrsDefaultData, val.attrs)
1332
+ : attrsDefaultData;
1333
+ return {
1334
+ ...val,
1335
+ attrs,
1336
+ field: key
1337
+ };
1338
+ }); // 更新 list
1339
+ this.updateList({ name: "default", newList: list });
1340
+ } else {
1341
+ for (const name in formDesc) {
1342
+ const list = Object.entries(formDesc[name]).map(([key, val]) => {
1343
+ const attrsDefaultData = configList[val.type]
1344
+ ? _.cloneDeep(configList[val.type].attrsDefaultData)
1345
+ : {};
1346
+ const attrs = val.attrs
1347
+ ? Object.assign(attrsDefaultData, val.attrs)
1348
+ : attrsDefaultData;
1349
+ return {
1350
+ attrs: val.attrs || {},
1351
+ field: key,
1352
+ ...val
1353
+ };
1354
+ }); // 更新 list
1355
+ this.updateList({ name: name, newList: list });
1356
+ }
1357
+ } // 更新 selectIndex
1358
+ this.updateSelectIndex(0);
1359
+ },
1360
+ // 获取预制菜单
1361
+ async getPrecutMenu() {
1362
+ // const { data } = await api.getPrecutMenu();
1363
+ const { data } = await apiAuth.getMenus();
1364
+ console.log(data);
1365
+ if (data.state == "ok") {
1366
+ const menuList = _.sortBy(data.data, function(item) {
1367
+ return item.sort;
1368
+ });
1369
+ menuList.forEach(item => {
1370
+ item.open = false;
1371
+ item.icon = item.icon
1372
+ ? require(`@/assets/center/menuIcon/${item.icon}.png`)
1373
+ : "";
1374
+ if (item.list.length > 0) {
1375
+ item.subMenu = _.sortBy(item.list, function(secItem) {
1376
+ return secItem.sort;
1377
+ });
1378
+ }
1379
+ });
1380
+ this.precutMenu = menuList;
1381
+ }
1382
+ }
1383
+ },
1384
+ mounted() {
1385
+ const _this = this;
1386
+ // this.getPrecutMenu();
1387
+ this.getConfigList();
1388
+ this.$dragging.$on("dragged", ({ value }) => {
1389
+ console.log(value);
1390
+ if (this.step == 0) {
1391
+ this.oldMenu = this.menu;
1392
+ }
1393
+ this.step++;
1394
+ });
1395
+ this.$dragging.$on("dragend", async val => {
1396
+ if (this.step < 1) return;
1397
+ console.log(val);
1398
+ console.log(_this.menu, "end");
1399
+ const group = val.group.split("-");
1400
+ let params = {};
1401
+ if (group[0] == "item") {
1402
+ const id = this.menu.map(item => item.id);
1403
+ params = { ids: id };
1404
+ console.log(id);
1405
+ } else {
1406
+ const index = group[1];
1407
+ const id = this.menu[index].subMenu.map(item => item.id);
1408
+ params = { ids: id };
1409
+ }
1410
+ const { data } = await api.sortMenu(params);
1411
+ if (data.state == "ok") {
1412
+ this.step = 0;
1413
+ } else {
1414
+ this.menu = this.oldMenu;
1415
+ this.$message.error(data.msg ? data.msg : "保存失败");
1416
+ }
1417
+ });
1418
+ }
1419
+ };
1420
+ </script>
1421
+
1422
+ <style lang="scss" scoped>
1423
+ [class^="icon-"],
1424
+ [class*=" icon-"] {
1425
+ /* use !important to prevent issues with browser extensions that change fonts */
1426
+ font-size: 40px;
1427
+ }
1428
+ .menuIconBox {
1429
+ margin-bottom: 5px;
1430
+ }
1431
+ .iconMenuBox {
1432
+ text-align: center;
1433
+ width: 56px;
1434
+ height: 19px;
1435
+ font-size: 14px;
1436
+ font-family: "Microsoft YaHei";
1437
+ color: #333333;
1438
+ line-height: 19px;
1439
+ }
1440
+ .iconMenu {
1441
+ text-align: center;
1442
+ display: inline-block;
1443
+ width: 40px;
1444
+ margin-right: 12px;
1445
+ border-radius: 5px;
1446
+ }
1447
+ .el-dialog__body {
1448
+ .iconMenu {
1449
+ text-align: center;
1450
+ display: inline-block;
1451
+ width: 40px;
1452
+ margin-right: 12px;
1453
+ border-radius: 5px;
1454
+ padding: 5px;
1455
+ &:hover {
1456
+ background-color: rgb(233, 233, 233);
1457
+ }
1458
+ &:active {
1459
+ background-color: rgb(210, 234, 249);
1460
+ }
1461
+ }
1462
+ }
1463
+ .bgc {
1464
+ background-color: rgb(210, 234, 249);
1465
+ }
1466
+
1467
+ /deep/ .el-cascader {
1468
+ width: 100%;
1469
+ }
1470
+ .msgboxDiv {
1471
+ text-align: center !important;
1472
+ div {
1473
+ margin-top: 20px;
1474
+ margin-bottom: 10px;
1475
+ }
1476
+ }
1477
+ .msgboxDiv .el-message-box__btns {
1478
+ text-align: center !important;
1479
+ margin-bottom: 20px;
1480
+ }
1481
+ .msgboxDiv .el-message-box__btns button:nth-child(2) {
1482
+ margin-left: 20px !important;
1483
+ }
1484
+ .el-message-box__btns {
1485
+ text-align: center !important;
1486
+ }
1487
+ .dialog-footer {
1488
+ text-align: center;
1489
+ }
1490
+ .el-icon-setting {
1491
+ color: #ccc !important;
1492
+ font-size: 18px !important;
1493
+ }
1494
+ .el-icon-setting:hover {
1495
+ color: #0286df !important;
1496
+ }
1497
+ .addgroup {
1498
+ background: #0286df;
1499
+ border-radius: 4px;
1500
+ padding: 10px 13px;
1501
+ }
1502
+ .addform {
1503
+ // background: #0286DF;
1504
+ border-radius: 4px;
1505
+ padding: 10px 13px;
1506
+ background: #fff;
1507
+ border-color: #409eff;
1508
+ color: #409eff;
1509
+ }
1510
+ /deep/ .el-tabs__nav-scroll {
1511
+ // padding: 5px;
1512
+ }
1513
+ /deep/ .el-tabs__header {
1514
+ margin: 0 0 5px !important;
1515
+ }
1516
+ /deep/ .el-tabs__nav {
1517
+ width: 100% !important;
1518
+ padding-top: 5px !important;
1519
+ display: flex;
1520
+ justify-content: center;
1521
+ align-items: center;
1522
+ }
1523
+ /deep/ .el-tabs__nav .el-tabs__item {
1524
+ // height: 80px !important;
1525
+ text-align: center;
1526
+ width: 50% !important;
1527
+ .span-box {
1528
+ position: relative;
1529
+ bottom: -10px;
1530
+ }
1531
+ span {
1532
+ // line-height: 20px;
1533
+ }
1534
+ }
1535
+ // border-bottom: 1px solid #ccc;
1536
+ .span-box {
1537
+ text-align: center;
1538
+ display: block;
1539
+ }
1540
+ .span-box-icon {
1541
+ text-align: center;
1542
+ font-size: 19px;
1543
+ // display: block;
1544
+ }
1545
+ .is-active {
1546
+ background-color: #ecf5ff;
1547
+ color: #0286df;
1548
+ }
1549
+
1550
+ /deep/ .el-tabs__content {
1551
+ // height: 100% !important;
1552
+ // overflow: auto !important;
1553
+ }
1554
+ .el-tabs--left {
1555
+ // height: 100% !important;
1556
+ }
1557
+ .el-tab-pane {
1558
+ }
1559
+ .menu-list {
1560
+ // overflow: auto;
1561
+ width: 100%;
1562
+ background-color: #ffffff;
1563
+
1564
+ height: 100%;
1565
+ .menu-config {
1566
+ display: flex;
1567
+ margin-bottom: 10px;
1568
+ justify-content: space-between;
1569
+ align-items: center;
1570
+ // height: 32px;
1571
+ overflow: hidden;
1572
+ padding-top: 10px;
1573
+ .config-title {
1574
+ width: 100%;
1575
+ display: flex;
1576
+ justify-content: center;
1577
+ align-items: center;
1578
+ h4 {
1579
+ font-size: 18px;
1580
+ margin: 0;
1581
+ display: inline-block;
1582
+ }
1583
+ i {
1584
+ margin-left: 8px;
1585
+ font-size: 18px;
1586
+ cursor: pointer;
1587
+ color: #666666;
1588
+ }
1589
+ }
1590
+ }
1591
+ .menu-item {
1592
+ padding: 0 10px 0 20px;
1593
+ position: relative;
1594
+ display: flex;
1595
+ justify-content: space-between;
1596
+ align-items: center;
1597
+ height: 56px;
1598
+ color: #333;
1599
+ line-height: 56px;
1600
+ font-size: 16px;
1601
+ cursor: pointer;
1602
+ &:hover {
1603
+ i {
1604
+ display: inline-block;
1605
+ }
1606
+ }
1607
+ i {
1608
+ color: #909399;
1609
+ }
1610
+ }
1611
+ .menu-item-name {
1612
+ width: 155% !important;
1613
+ }
1614
+ .menu-item-child {
1615
+ transition: 0.5s all ease;
1616
+ height: 0;
1617
+ overflow: hidden;
1618
+ padding-left: 0;
1619
+ margin: 0;
1620
+ font-size: 14px;
1621
+ color: #666;
1622
+ li {
1623
+ padding-left: 30px;
1624
+ .menu-item-name {
1625
+ font-size: 14px;
1626
+ span {
1627
+ max-width: 200px;
1628
+ }
1629
+ }
1630
+ .menu-item-option {
1631
+ width: 46px;
1632
+ }
1633
+ }
1634
+ li.active {
1635
+ background-color: #ecf5ff;
1636
+ color: #0286df;
1637
+ }
1638
+ }
1639
+ .menu-item-name {
1640
+ display: flex;
1641
+ align-items: center;
1642
+ color: #303133;
1643
+ img {
1644
+ height: 16px;
1645
+ width: 16px;
1646
+ margin-right: 6px;
1647
+ }
1648
+ .no-img {
1649
+ visibility: hidden;
1650
+ }
1651
+ span {
1652
+ max-width: 180px;
1653
+ overflow: hidden;
1654
+ text-overflow: ellipsis;
1655
+ white-space: nowrap;
1656
+ }
1657
+ }
1658
+ .el-icon-arrow-down {
1659
+ position: absolute;
1660
+ right: 6px;
1661
+ top: 10px;
1662
+ transition: 0.5s all ease;
1663
+ transform: rotate(0deg);
1664
+ -ms-transform: rotate(0deg); /* IE 9 */
1665
+ -webkit-transform: rotate(0deg); /* Safari and Chrome */
1666
+ }
1667
+ .menu-item-option {
1668
+ width: 60px;
1669
+ i {
1670
+ margin-left: 3px;
1671
+ font-size: 14px;
1672
+ cursor: pointer;
1673
+ color: #666666;
1674
+ }
1675
+ .el-icon-no-view {
1676
+ height: 14px;
1677
+ width: 14px;
1678
+ background: url("../../../assets/login/close-eye.png") center center
1679
+ no-repeat;
1680
+ background-size: 100%;
1681
+ }
1682
+ .active {
1683
+ color: #ccc;
1684
+ }
1685
+ .el-dropdown-link {
1686
+ color: #0286df;
1687
+ font-size: 12px;
1688
+ i {
1689
+ color: #0286df;
1690
+ font-size: 12px;
1691
+ }
1692
+ }
1693
+ }
1694
+ .hover-col {
1695
+ &:hover {
1696
+ background-color: #ecf5ff;
1697
+ }
1698
+ }
1699
+ .active {
1700
+ background-color: #ecf5ff;
1701
+ }
1702
+ .is-open {
1703
+ .el-icon-arrow-down {
1704
+ transform: rotate(180deg);
1705
+ -ms-transform: rotate(180deg); /* IE 9 */
1706
+ -webkit-transform: rotate(180deg); /* Safari and Chrome */
1707
+ }
1708
+ .menu-item-child {
1709
+ height: auto;
1710
+ }
1711
+ }
1712
+ }
1713
+ .el-menu-item {
1714
+ display: flex;
1715
+ }
1716
+ .el-menu-item.is-active {
1717
+ color: #303133 !important;
1718
+ }
1719
+ /deep/ .el-submenu__title {
1720
+ display: flex !important;
1721
+ align-items: center !important;
1722
+ // padding: 0 10px 0 10px !important;
1723
+ }
1724
+ .el-submenu__icon-arrow {
1725
+ position: absolute !important;
1726
+ top: 50% !important;
1727
+ right: 8px !important;
1728
+ margin-top: -7px !important;
1729
+ -webkit-transition: -webkit-transform 0.3s !important;
1730
+ transition: -webkit-transform 0.3s !important;
1731
+ transition: transform 0.3s !important;
1732
+ transition: transform 0.3s, -webkit-transform 0.3s !important;
1733
+ font-size: 12px !important;
1734
+ }
1735
+ .menu-item-option {
1736
+ span {
1737
+ height: 50px;
1738
+ display: inline-block;
1739
+ i {
1740
+ vertical-align: revert;
1741
+ }
1742
+ }
1743
+ }
1744
+
1745
+ /deep/ .el-submenu .el-menu-item {
1746
+ height: 50px;
1747
+ line-height: 50px;
1748
+ // padding: 0 20px 0 60px !important;
1749
+ padding: 0 20px 0 24px !important;
1750
+ min-width: 200px;
1751
+ }
1752
+ </style>