vue2-client 1.13.7 → 1.13.8

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 (389) hide show
  1. package/.cursorrules +19 -19
  2. package/.env.gaslink +19 -19
  3. package/.env.his +19 -19
  4. package/.env.iot +19 -19
  5. package/.env.liuli +19 -19
  6. package/.env.revenue +19 -19
  7. package/.env.scada +19 -19
  8. package/.eslintrc.js +90 -90
  9. package/CHANGELOG.md +824 -824
  10. package/Components.md +60 -60
  11. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +45 -45
  12. package/docs/LowCode/lowcode.md +155 -155
  13. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  14. package/docs/index.md +30 -30
  15. package/index.js +31 -31
  16. package/jest-transform-stub.js +8 -8
  17. package/jest.setup.js +7 -7
  18. package/jsconfig.json +19 -19
  19. package/package.json +107 -107
  20. package/public/his/editor/editor.html +51 -51
  21. package/public/his/editor/mock/bind_data.html +779 -779
  22. package/public/his/editor/mock/data_table.html +40 -40
  23. package/public/his/editor/mock/sign.html +75 -75
  24. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  25. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  26. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  27. package/public/his/editor/vender/date97/calendar.js +4 -4
  28. package/public/his/editor/vender/date97/lang/en.js +13 -13
  29. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  30. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  31. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  32. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  33. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  34. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  35. package/public/his/editor/vender/diff.js +1627 -1627
  36. package/public/his/editor/vender/editor.js +1 -1
  37. package/public/his/editor/vender/fabric.js +31187 -31187
  38. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  39. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  40. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  41. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  42. package/public/his/editor/vender/mui/mui.min.css +4 -4
  43. package/public/his/editor/vender/mui/mui.min.js +5 -5
  44. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  45. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  46. package/public/his/editor/vender/qrcode.js +7 -7
  47. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  48. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  49. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  50. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  51. package/public/his/editor/vender/validator.js +5094 -5094
  52. package/public/his/editor/vender/weui/weui.css +5659 -5659
  53. package/public/his/editor/vender/weui/weui.min.css +4 -4
  54. package/public/his/editor/vender/weui/weui.min.js +11 -11
  55. package/public/index.html +27 -27
  56. package/src/ReportView.js +19 -19
  57. package/src/assets/img/querySlotDemo.svg +15 -15
  58. package/src/assets/svg/badtwo.svg +1 -1
  59. package/src/assets/svg/goodtwo.svg +1 -1
  60. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  61. package/src/base-client/components/AI/demo.vue +31 -31
  62. package/src/base-client/components/common/AMisRender/index.js +3 -3
  63. package/src/base-client/components/common/AMisRender/index.vue +263 -263
  64. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +470 -470
  65. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  66. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  67. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  68. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  69. package/src/base-client/components/common/CitySelect/index.js +3 -3
  70. package/src/base-client/components/common/CitySelect/index.md +109 -109
  71. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  72. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  73. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  74. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  75. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  76. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  77. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  78. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  79. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +149 -149
  80. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  81. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  82. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  83. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  84. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  85. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  86. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  87. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  88. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  89. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  90. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  91. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  92. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  93. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  94. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  95. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  96. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  97. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  98. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  99. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  100. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  101. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  102. package/src/base-client/components/common/Recording/index.js +3 -3
  103. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  104. package/src/base-client/components/common/Tree/index.js +2 -2
  105. package/src/base-client/components/common/Upload/index.js +3 -3
  106. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  107. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1156 -1156
  108. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  109. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  110. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  111. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  112. package/src/base-client/components/common/XAddReport/index.js +3 -3
  113. package/src/base-client/components/common/XAddReport/index.md +56 -56
  114. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  115. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  116. package/src/base-client/components/common/XButtons/XButtons.vue +71 -71
  117. package/src/base-client/components/common/XButtons/index.js +3 -3
  118. package/src/base-client/components/common/XButtons/index.md +61 -61
  119. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  120. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  121. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  122. package/src/base-client/components/common/XCollapse/XCollapse.vue +1 -1
  123. package/src/base-client/components/common/XDataCard/index.js +3 -3
  124. package/src/base-client/components/common/XDataCard/index.md +1 -1
  125. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  126. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  127. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  128. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  129. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  130. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  131. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  132. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  133. package/src/base-client/components/common/XForm/XForm.vue +404 -404
  134. package/src/base-client/components/common/XForm/XFormItem.vue +1310 -1310
  135. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  136. package/src/base-client/components/common/XForm/XTreeSelect.vue +270 -270
  137. package/src/base-client/components/common/XForm/index.md +178 -178
  138. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  139. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  140. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  141. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  142. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  143. package/src/base-client/components/common/XFormTable/demo.vue +76 -76
  144. package/src/base-client/components/common/XFormTable/index.md +92 -92
  145. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +167 -167
  146. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  147. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  148. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  149. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  150. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  151. package/src/base-client/components/common/XPrint/PrintBill.vue +302 -302
  152. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  153. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  154. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  155. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  156. package/src/base-client/components/common/XPrint/index.vue +97 -97
  157. package/src/base-client/components/common/XReport/XReport.vue +892 -892
  158. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  159. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  160. package/src/base-client/components/common/XReport/index.js +3 -3
  161. package/src/base-client/components/common/XReport/index.md +44 -44
  162. package/src/base-client/components/common/XReport/print.js +186 -186
  163. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  164. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  165. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +712 -712
  166. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  167. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  168. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  169. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  170. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  171. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  172. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  173. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  174. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  175. package/src/base-client/components/common/XStepView/index.js +3 -3
  176. package/src/base-client/components/common/XStepView/index.md +31 -31
  177. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  178. package/src/base-client/components/common/XTab/index.js +3 -3
  179. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  180. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  181. package/src/base-client/components/common/XTable/XTable.vue +1361 -1361
  182. package/src/base-client/components/common/XTable/XTableWrapper.vue +257 -257
  183. package/src/base-client/components/common/XTable/index.md +255 -255
  184. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  185. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  186. package/src/base-client/components/common/XTree/index.js +3 -3
  187. package/src/base-client/components/common/XTree/index.md +36 -36
  188. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  189. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  190. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  191. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  192. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  193. package/src/base-client/components/his/XList/XList.vue +131 -131
  194. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  195. package/src/base-client/components/his/XTitle/XTitle.vue +39 -39
  196. package/src/base-client/components/index.js +51 -51
  197. package/src/base-client/components/layout/XPageView/XErrorView.vue +11 -11
  198. package/src/base-client/components/layout/XPageView/XPageView.vue +155 -155
  199. package/src/base-client/components/layout/XPageView/index.js +3 -3
  200. package/src/base-client/components/layout/XPageView/index.md +38 -38
  201. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  202. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  203. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  204. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  205. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  206. package/src/base-client/plugins/AppData.js +126 -126
  207. package/src/base-client/plugins/Config.js +19 -19
  208. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  209. package/src/base-client/plugins/Recording.js +258 -258
  210. package/src/base-client/plugins/index.js +23 -23
  211. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  212. package/src/components/Charts/Bar.vue +62 -62
  213. package/src/components/Charts/ChartCard.vue +134 -134
  214. package/src/components/Charts/Liquid.vue +67 -67
  215. package/src/components/Charts/MiniArea.vue +39 -39
  216. package/src/components/Charts/MiniBar.vue +39 -39
  217. package/src/components/Charts/MiniProgress.vue +75 -75
  218. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  219. package/src/components/Charts/Radar.vue +68 -68
  220. package/src/components/Charts/RankList.vue +77 -77
  221. package/src/components/Charts/TagCloud.vue +113 -113
  222. package/src/components/Charts/TransferBar.vue +64 -64
  223. package/src/components/Charts/Trend.vue +82 -82
  224. package/src/components/Charts/chart.less +12 -12
  225. package/src/components/Charts/smooth.area.less +13 -13
  226. package/src/components/CodeMirror/inedx.vue +118 -118
  227. package/src/components/CodeMirror/setting.js +40 -40
  228. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  229. package/src/components/HeightScanner/index.vue +571 -571
  230. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  231. package/src/components/NumberInfo/index.js +3 -3
  232. package/src/components/NumberInfo/index.less +54 -54
  233. package/src/components/NumberInfo/index.md +43 -43
  234. package/src/components/STable/index.js +437 -437
  235. package/src/components/card/ChartCard.vue +79 -79
  236. package/src/components/chart/Bar.vue +60 -60
  237. package/src/components/chart/MiniArea.vue +67 -67
  238. package/src/components/chart/MiniBar.vue +59 -59
  239. package/src/components/chart/MiniProgress.vue +57 -57
  240. package/src/components/chart/Radar.vue +80 -80
  241. package/src/components/chart/RankingList.vue +60 -60
  242. package/src/components/chart/Trend.vue +79 -79
  243. package/src/components/chart/index.less +9 -9
  244. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  245. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  246. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  247. package/src/components/checkbox/index.js +9 -9
  248. package/src/components/exception/ExceptionPage.vue +70 -70
  249. package/src/components/g2Charts/constants.js +202 -202
  250. package/src/components/g2Charts/demo.vue +808 -808
  251. package/src/components/g2Charts/designer.vue +228 -228
  252. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  253. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  254. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  255. package/src/components/g2Charts/index.vue +397 -397
  256. package/src/components/index.js +36 -36
  257. package/src/components/input/IInput.vue +66 -66
  258. package/src/components/menu/SideMenu.vue +75 -75
  259. package/src/components/menu/menu.js +273 -273
  260. package/src/components/setting/Setting.vue +234 -234
  261. package/src/components/tool/AStepItem.vue +60 -60
  262. package/src/config/CreateQueryConfig.js +325 -325
  263. package/src/config/default/antd.config.js +89 -89
  264. package/src/config/default/setting.config.js +55 -55
  265. package/src/font-style/font.css +4 -4
  266. package/src/layouts/CommonLayout.vue +56 -56
  267. package/src/layouts/PageLayout.vue +151 -151
  268. package/src/layouts/SinglePageView.vue +136 -136
  269. package/src/layouts/header/AdminHeader.vue +132 -132
  270. package/src/layouts/header/HeaderNotice.vue +177 -177
  271. package/src/layouts/header/InstitutionDetail.vue +181 -181
  272. package/src/layouts/tabs/TabsHead.vue +189 -189
  273. package/src/layouts/tabs/TabsView.vue +389 -389
  274. package/src/lib.js +1 -1
  275. package/src/main.js +34 -34
  276. package/src/mixins/formValidationMixin.js +46 -46
  277. package/src/mock/extend/index.js +84 -84
  278. package/src/mock/goods/index.js +108 -108
  279. package/src/pages/AMisDemo/AMisDemo.vue +325 -325
  280. package/src/pages/AMisDemo/AMisDemo2.vue +74 -74
  281. package/src/pages/DefaultExample/index.vue +77 -77
  282. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  283. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  284. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  285. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  286. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  287. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  288. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  289. package/src/pages/DynamicStatistics/index.vue +282 -282
  290. package/src/pages/Example/childIndex.vue +15 -15
  291. package/src/pages/Example/index.vue +30 -30
  292. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  293. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  294. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  295. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  296. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  297. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  298. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  299. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  300. package/src/pages/Recording/index.vue +77 -77
  301. package/src/pages/ReportGrid/index.vue +76 -76
  302. package/src/pages/ServiceReview/index.vue +284 -284
  303. package/src/pages/SubExample/index.vue +26 -26
  304. package/src/pages/WorkflowDetail/WorkflowDetail.vue +235 -235
  305. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +131 -131
  306. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  307. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +302 -302
  308. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  309. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +997 -997
  310. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +222 -222
  311. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +233 -233
  312. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +261 -261
  313. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  314. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +73 -73
  315. package/src/pages/XPageViewExample/index.vue +38 -38
  316. package/src/pages/XReportView/index.vue +64 -64
  317. package/src/pages/XTreeOneProExample/index.vue +67 -67
  318. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  319. package/src/pages/login/Login.vue +378 -378
  320. package/src/pages/login/LoginV3.vue +389 -389
  321. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  322. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  323. package/src/pages/report/ReportTable.js +124 -124
  324. package/src/pages/resourceManage/orgListManage.vue +98 -98
  325. package/src/pages/system/dictionary/index.vue +44 -44
  326. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  327. package/src/pages/system/monitor/operLog/index.vue +37 -37
  328. package/src/pages/system/settings/modifyPassword.vue +117 -117
  329. package/src/pages/system/ticket/index.vue +480 -480
  330. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  331. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  332. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +76 -76
  333. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +74 -74
  334. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  335. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  336. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +74 -74
  337. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  338. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +74 -74
  339. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  340. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +86 -86
  341. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +73 -73
  342. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  343. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +1 -1
  344. package/src/plugins/EventLogPlugin.js +33 -33
  345. package/src/plugins/FindParentsData.js +17 -17
  346. package/src/router/async/config.async.js +35 -35
  347. package/src/router/async/router.map.js +119 -126
  348. package/src/router/index.js +27 -27
  349. package/src/router.js +19 -19
  350. package/src/services/DataModel.js +30 -30
  351. package/src/services/LodopFuncs.js +137 -137
  352. package/src/services/api/TicketDetailsViewApi.js +46 -46
  353. package/src/services/api/cas.js +79 -79
  354. package/src/services/api/common.js +346 -346
  355. package/src/services/api/entity.js +18 -18
  356. package/src/services/api/index.js +17 -17
  357. package/src/services/api/restTools.js +145 -145
  358. package/src/services/api/workFlow.js +63 -63
  359. package/src/services/apiService.js +16 -16
  360. package/src/store/modules/account.js +115 -115
  361. package/src/store/modules/index.js +5 -5
  362. package/src/store/modules/lowCode.js +33 -33
  363. package/src/store/modules/setting.js +119 -119
  364. package/src/theme/default/style.less +58 -58
  365. package/src/theme/global.less +159 -159
  366. package/src/utils/authority-utils.js +85 -85
  367. package/src/utils/errorCode.js +6 -6
  368. package/src/utils/formatter.js +74 -74
  369. package/src/utils/htmlToPDF.js +108 -108
  370. package/src/utils/htmlToPDFApi.js +5 -5
  371. package/src/utils/login.js +188 -188
  372. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  373. package/src/utils/lowcode/lowcodeLog.js +29 -29
  374. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  375. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  376. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  377. package/src/utils/map-utils.js +47 -47
  378. package/src/utils/reg.js +95 -95
  379. package/src/utils/runEvalFunction.js +14 -14
  380. package/src/utils/theme-color-replacer-extend.js +92 -92
  381. package/src/utils/util.js +329 -329
  382. package/src/utils/waterMark.js +31 -31
  383. package/test/Amis.spec.js +164 -164
  384. package/test/Tree.spec.js +168 -168
  385. package/test/myDialog.spec.js +47 -47
  386. package/test/util.test.js +53 -53
  387. package/test/v3Api.test.js +1984 -1984
  388. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  389. package/src/base-client/components/common/XCollapse/XCollapseDemo.vue +0 -15
@@ -1,502 +1,502 @@
1
- <template>
2
- <div>
3
- <p v-if="config.page.length === 0"> 未选中任何工作空间 </p>
4
- <a-tree
5
- v-if="showTree"
6
- defaultExpandAll
7
- show-icon
8
- @select="handleTreeSelect"
9
- :selectedKeys="selectedKeys"
10
- style="overflow: hidden"
11
- :draggable="true"
12
- @drop="treeDrop"
13
- :tree-data="treeData">
14
- <!-- 右键菜单 -->
15
- <template #title="{ key: treeKey, title }">
16
- <a-dropdown :trigger="['contextmenu']">
17
- <span>{{ title }}</span>
18
- <template #overlay>
19
- <a-menu @click="({ key: menuKey }) => onContextMenuClick(treeKey, menuKey)">
20
- <a-menu-item key="copy"><a-icon type="copy" />&nbsp;&nbsp;复制</a-menu-item>
21
- <a-menu-item key="paste" :disabled="copyCache === undefined"><a-icon type="snippets" />&nbsp;&nbsp;粘贴</a-menu-item>
22
- <a-menu-divider />
23
- <a-menu-item key="split" :disabled="determineLevel(treeKey) !== 'item'"><a-icon type="fullscreen" />&nbsp;&nbsp;拆分</a-menu-item>
24
- <a-menu-item key="add" :disabled="determineLevel(treeKey) === 'item'"><a-icon type="plus-square" />&nbsp;&nbsp;添加</a-menu-item>
25
- <a-menu-item key="rename" :disabled="determineLevel(treeKey) !== 'item' && determineLevel(treeKey) !== 'page'"><a-icon type="italic" />&nbsp;&nbsp;重命名</a-menu-item>
26
- <a-menu-divider />
27
- <a-menu-item key="delete"><a-icon type="delete" />&nbsp;&nbsp;删除</a-menu-item>
28
- </a-menu>
29
- </template>
30
- </a-dropdown>
31
- </template>
32
- <!-- 树中的图标 -->
33
- <a-icon slot="file" type="file" />
34
- <a-icon slot="appstore" type="appstore" />
35
- <a-icon slot="pause" type="pause" />
36
- <a-icon slot="ordered-list" type="ordered-list" />
37
- </a-tree>
38
- <!-- 页面容器重命名弹框 -->
39
- <a-modal
40
- title="页面容器重命名"
41
- width="60%"
42
- :z-index="1001"
43
- :destroyOnClose="true"
44
- @ok="handleRenameModalOk"
45
- @cancel="() => { showRenameModal = false }"
46
- :visible="showRenameModal">
47
- <a-form :label-col="{ span: 7 }" :wrapper-col="{ span: 12 }">
48
- <!-- 新名称 -->
49
- <a-form-item label="新名称">
50
- <a-input v-model="pageNewName"/>
51
- </a-form-item>
52
- </a-form>
53
- </a-modal>
54
- </div>
55
- </template>
56
-
57
- <script>
58
- import * as lowcodeUtils from '@vue2-client/utils/lowcode/lowcodeUtils'
59
- export default {
60
- props: {
61
- config: {
62
- type: Object,
63
- required: true,
64
- },
65
- // 可以由外侧控制哪个节点被选中
66
- selectTreeNode: {
67
- type: String,
68
- default: undefined
69
- }
70
- },
71
- methods: {
72
- // 重命名弹框确认
73
- handleRenameModalOk () {
74
- this.$emit('rename', this.renameId, this.pageNewName)
75
- this.renameId = undefined
76
- this.showRenameModal = false
77
- },
78
- // 根据id返回类型
79
- determineLevel (id) {
80
- if (id.startsWith('page')) {
81
- return 'page'
82
- } else if (id.startsWith('container_page_')) {
83
- return 'container_page'
84
- } else if (id.startsWith('row')) {
85
- return 'row'
86
- } else {
87
- return 'item'
88
- }
89
- },
90
- // 将树中的key转换回原始ID
91
- getOriginalKey (treeKey) {
92
- if (treeKey.startsWith('page')) {
93
- return treeKey.substring('page_'.length)
94
- } else if (treeKey.startsWith('container_page_')) {
95
- return treeKey.substring('container_page_'.length)
96
- } else if (treeKey.startsWith('row')) {
97
- const newRowId = treeKey.substring('row_'.length)
98
- const lastIndex = newRowId.lastIndexOf('_')
99
- const pre = newRowId.substring(0, lastIndex)
100
- const index = newRowId.substring(lastIndex + 1)
101
- const newIndex = Number(index) - 1
102
- return pre + '_' + newIndex
103
- } else {
104
- return treeKey
105
- }
106
- },
107
- // 根据ID,返回拖拽级别和类型,便于拖拽模式判断
108
- determineDragLevel (id) {
109
- if (id.startsWith('page')) {
110
- return {
111
- type: 'page',
112
- level: 0
113
- }
114
- } else if (id.startsWith('container_page_')) {
115
- return {
116
- type: 'container_page',
117
- level: 2
118
- }
119
- } else if (id.startsWith('row')) {
120
- return {
121
- type: 'row',
122
- level: 1
123
- }
124
- } else {
125
- return {
126
- type: 'item',
127
- level: 2
128
- }
129
- }
130
- },
131
- // 树拖拽事件
132
- treeDrop (info) {
133
- // 拖拽结束目标的id
134
- const dropKey = info.node.eventKey
135
- // 被拖拽的id
136
- const dragKey = info.dragNode.eventKey
137
- // 拖拽目标的位置
138
- const dropPos = info.node.pos.split('-')
139
-
140
- // 拖拽结束目标的类型
141
- const dropLevel = this.determineDragLevel(dropKey)
142
- // 被拖拽的类型
143
- const dragLevel = this.determineDragLevel(dragKey)
144
-
145
- // 拖拽对于目标的定位,-1表示之前,0表示插入,1表示之后
146
- const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1])
147
-
148
- // 以下几种为非法拖拽
149
- // 1. 平级移动但是目标是新增
150
- // 2. 高一级移动但不是新增
151
- // 3. 高级组件移动到低级
152
- // 4. 相差2级移动
153
- // 唯一特例,行可以插入容器页面,容器页面等于模块级别,但可以被行插入
154
-
155
- // 只有三种情况可以拖拽
156
- // 1.平级挪
157
- // 2.高一级插
158
- // 3.行插子页面
159
- // 4.平级插入改为替换双方位置(特例)
160
-
161
- // 1. 平级挪
162
- if (dropLevel.level === dragLevel.level && dropPosition !== 0) {
163
- const dragType = 'move'
164
- this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
165
- return
166
- }
167
-
168
- // 2.高一级插
169
- if (dropLevel.level === (dragLevel.level - 1) && dropPosition === 0) {
170
- const dragType = 'higher'
171
- this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
172
- return
173
- }
174
-
175
- // 3.行插子页面
176
- if (dragLevel.type === 'row' && dropLevel.type === 'container_page' && dropPosition === 0) {
177
- const dragType = 'rowToContainer'
178
- this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
179
- return
180
- }
181
-
182
- // 4.平级插入改为替换双方位置(特例)
183
- if (dropLevel.level === dragLevel.level && dropPosition === 0) {
184
- const dragType = 'switch'
185
- this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
186
- return
187
- }
188
-
189
- // 能到这不return的证明都是非法移动
190
- this.$message.error('不合法的拖拽!')
191
- },
192
- // 删除
193
- handleDelete (targetType, originalKey) {
194
- const _this = this
195
- if (targetType === 'item') {
196
- this.$confirm({
197
- title: `确认删除此组件?`,
198
- content: `组件ID:${originalKey}`,
199
- onOk () {
200
- _this.$emit('deleteComponent', originalKey, 'component')
201
- },
202
- onCancel () {},
203
- })
204
- } else if (targetType === 'page') {
205
- const page = lowcodeUtils.getPageConfigById(originalKey, this.config)
206
- this.$confirm({
207
- title: `确认删除此页面?`,
208
- content: `所选页面:${page.title}[${lowcodeUtils.resolvePageType(page.type)}]`,
209
- onOk () {
210
- _this.$emit('deleteComponent', originalKey, 'page')
211
- },
212
- onCancel () {},
213
- })
214
- } else if (targetType === 'row') {
215
- this.$confirm({
216
- title: `确认删除此行?`,
217
- content: `所选行:${originalKey}`,
218
- onOk () {
219
- _this.$emit('deleteComponent', originalKey, 'row')
220
- },
221
- onCancel () {},
222
- })
223
- } else if (targetType === 'container_page') {
224
- this.$confirm({
225
- title: `确认删除此容器页面?`,
226
- content: `所选容器:${originalKey}`,
227
- onOk () {
228
- _this.$emit('deleteComponent', originalKey, 'container_page')
229
- },
230
- onCancel () {},
231
- })
232
- }
233
- },
234
- // 复制
235
- handleCopy (treeKey, targetType) {
236
- const originalKey = this.getOriginalKey(treeKey)
237
- // 获取复制对象
238
- let temp
239
- if (targetType === 'container_page') {
240
- temp = lowcodeUtils.getContainerPageOuterByContainerPageId(originalKey, this.config)
241
- } else {
242
- temp = lowcodeUtils.getConfig(originalKey, this.config)
243
- }
244
- // 复制
245
- let copy = JSON.parse(JSON.stringify(temp))
246
- if (targetType === 'page') {
247
- // 重新修改id和title
248
- copy.id = 'page_' + lowcodeUtils.nanoidWithoutSymbol(6)
249
- copy.title = copy.title + '_副本'
250
- // 复制页面自动粘贴
251
- this.$emit('pasteItem', originalKey, copy, 'page')
252
- } else {
253
- if (targetType === 'row') {
254
- // 将行内每个组件重新修改id
255
- const target = copy.body
256
- copy.id = 'undefine'
257
- target.forEach(item => {
258
- if (item.type === 'container_page') {
259
- item.id = 'container_' + lowcodeUtils.nanoidWithoutSymbol(6)
260
- item = lowcodeUtils.reRandomComponentId(item)
261
- } else {
262
- const prefix = item.id.split('_')[0]
263
- item.id = prefix + '_' + lowcodeUtils.nanoidWithoutSymbol(6)
264
- }
265
- })
266
- } else if (targetType === 'item') {
267
- // 重新修改id
268
- const prefix = copy.id.split('_')[0]
269
- copy.id = prefix + '_' + lowcodeUtils.nanoidWithoutSymbol(6)
270
- } else if (targetType === 'container_page') {
271
- // 重新修改id
272
- copy.id = 'container_' + lowcodeUtils.nanoidWithoutSymbol(6)
273
- copy = lowcodeUtils.reRandomComponentId(copy)
274
- }
275
- this.copyCache = {
276
- type: targetType,
277
- content: copy
278
- }
279
- this.$message.success('复制成功!')
280
- }
281
- },
282
- // 粘贴
283
- handlePaste (targetType, originalKey) {
284
- // 同级别内容不能粘贴到另一个中
285
- if (targetType === this.copyCache.type) {
286
- this.$message.error('该操作不合法!')
287
- return
288
- }
289
-
290
- // 行只能复制到容器页面和页面中
291
- if (this.copyCache.type === 'row') {
292
- if (targetType === 'page' || targetType === 'container_page') {
293
- this.$emit('pasteItem', originalKey, this.copyCache, 'page-row')
294
- return
295
- }
296
- }
297
-
298
- // 模块,容器页面只能复制到行
299
- if (this.copyCache.type === 'item' || this.copyCache.type === 'container_page') {
300
- if (targetType === 'row') {
301
- this.$emit('pasteItem', originalKey, this.copyCache, 'row-item')
302
- return
303
- }
304
- }
305
-
306
- // 其余操作均不合法
307
- this.$message.error('该操作不合法!')
308
- },
309
- // 重命名
310
- handleRename (targetType, originalKey) {
311
- const target = lowcodeUtils.getConfig(originalKey, this.config)
312
- this.renameId = target.id
313
- if (target.title) {
314
- this.pageNewName = target.title
315
- } else if (target.name) {
316
- this.pageNewName = target.name
317
- } else {
318
- this.pageNewName = target.id
319
- }
320
- this.showRenameModal = true
321
- },
322
- // 拆分
323
- handleSplit (originalKey) {
324
- const _this = this
325
- this.$confirm({
326
- title: `是否垂直拆分?`,
327
- onOk () {
328
- _this.$emit('split', originalKey, true)
329
- },
330
- onCancel () {
331
- _this.$emit('split', originalKey, false)
332
- },
333
- })
334
- },
335
- // 添加
336
- handleAdd (targetType, originalKey) {
337
- if (targetType === 'page' || targetType === 'container_page') {
338
- this.$emit('add', originalKey, 'row')
339
- } else if (targetType === 'row') {
340
- this.$emit('add', originalKey, 'container')
341
- }
342
- },
343
- // 树右键事件
344
- onContextMenuClick (treeKey, menuKey) {
345
- // 判断目标类型
346
- const targetType = this.determineLevel(treeKey)
347
- const originalKey = this.getOriginalKey(treeKey)
348
- // 点击右键菜单中删除的事件
349
- switch (menuKey) {
350
- case 'delete':
351
- this.handleDelete(targetType, originalKey)
352
- return
353
- case 'copy':
354
- this.handleCopy(treeKey, targetType)
355
- return
356
- case 'paste':
357
- this.handlePaste(targetType, originalKey)
358
- return
359
- case 'rename':
360
- this.handleRename(targetType, originalKey)
361
- return
362
- case 'split':
363
- this.handleSplit(originalKey)
364
- return
365
- case 'add':
366
- this.handleAdd(targetType, originalKey)
367
- }
368
- },
369
- // 处理架构树点击事件
370
- handleTreeSelect (value) {
371
- // 如果是反选
372
- if (value.length === 0) {
373
- return
374
- }
375
- this.selectedKeys = value
376
- const type = this.determineLevel(value[0])
377
- if (type === 'page') {
378
- this.$emit('treeOrganizationClick', null)
379
- }
380
- this.$emit('treeOrganizationClick', this.getOriginalKey(value[0]))
381
- },
382
- // 初始化树
383
- initTree (config, container = undefined) {
384
- const result = []
385
- // 从配置中,抽取组件,初始化成树的格式
386
- for (let i = 0; i < config.page.length; i++) {
387
- // push第一级页面容器
388
- const page = config.page[i]
389
- let title, icon, key
390
- if (page.title) {
391
- title = page.title + '(' + lowcodeUtils.resolvePageType(page.type) + ')'
392
- icon = 'file'
393
- key = 'page_' + page.id
394
- } else {
395
- title = '列容器'
396
- icon = 'pause'
397
- key = 'container_page_' + page.id
398
- }
399
- result.push({
400
- title: title,
401
- key: key,
402
- children: [],
403
- slots: {
404
- icon: icon,
405
- },
406
- })
407
- // 在页面容器中,push第二级行容器
408
- for (let j = 0; j < page.body.length; j++) {
409
- const row = page.body[j]
410
- result[i].children.push({
411
- title: '行容器' + (j + 1),
412
- key: 'row_' + page.id + '_' + (j + 1),
413
- children: [],
414
- slots: {
415
- icon: 'ordered-list',
416
- },
417
- })
418
- // 在行容器中,push第三级组件
419
- for (let k = 0; k < row.body.length; k++) {
420
- const item = row.body[k]
421
- let name
422
- if (item.name) {
423
- name = item.name
424
- } else {
425
- name = item.id
426
- }
427
- // 如果item进行了嵌套,递归调用
428
- if (item.type === 'container_page') {
429
- this.initTree(item, result[i].children[j])
430
- } else {
431
- // 如果是container则显示为列容器
432
- if (item.type === 'container') {
433
- name = '列容器'
434
- result[i].children[j].children.push({
435
- title: name,
436
- key: item.id,
437
- children: [],
438
- slots: {
439
- icon: 'pause',
440
- },
441
- })
442
- } else {
443
- result[i].children[j].children.push({
444
- title: name,
445
- key: item.id,
446
- children: [],
447
- slots: {
448
- icon: 'appstore',
449
- },
450
- })
451
- }
452
- }
453
- }
454
- }
455
- }
456
- if (!container) {
457
- this.treeData = result
458
- } else {
459
- container.children = container.children.concat(result)
460
- }
461
- },
462
- },
463
- mounted () {
464
- this.initTree(this.config)
465
- this.showTree = true
466
- },
467
- data () {
468
- return {
469
- // 树的数据
470
- treeData: [],
471
- // 控制树的渲染
472
- showTree: false,
473
- // 控制重命名弹框显隐
474
- showRenameModal: false,
475
- // 复制的缓存
476
- copyCache: undefined,
477
- // 重命名绑定变量
478
- pageNewName: undefined,
479
- // 重命名对象的id
480
- renameId: undefined,
481
- // 在树中已选中的key
482
- selectedKeys: []
483
- }
484
- },
485
- watch: {
486
- // 如果外侧指定了某个节点,让树选中该节点
487
- selectTreeNode: {
488
- handler (newVal) {
489
- if (newVal) {
490
- this.selectedKeys = [newVal]
491
- } else {
492
- this.selectedKeys = []
493
- }
494
- }
495
- }
496
- }
497
- }
498
- </script>
499
-
500
- <style scoped lang="less">
501
-
502
- </style>
1
+ <template>
2
+ <div>
3
+ <p v-if="config.page.length === 0"> 未选中任何工作空间 </p>
4
+ <a-tree
5
+ v-if="showTree"
6
+ defaultExpandAll
7
+ show-icon
8
+ @select="handleTreeSelect"
9
+ :selectedKeys="selectedKeys"
10
+ style="overflow: hidden"
11
+ :draggable="true"
12
+ @drop="treeDrop"
13
+ :tree-data="treeData">
14
+ <!-- 右键菜单 -->
15
+ <template #title="{ key: treeKey, title }">
16
+ <a-dropdown :trigger="['contextmenu']">
17
+ <span>{{ title }}</span>
18
+ <template #overlay>
19
+ <a-menu @click="({ key: menuKey }) => onContextMenuClick(treeKey, menuKey)">
20
+ <a-menu-item key="copy"><a-icon type="copy" />&nbsp;&nbsp;复制</a-menu-item>
21
+ <a-menu-item key="paste" :disabled="copyCache === undefined"><a-icon type="snippets" />&nbsp;&nbsp;粘贴</a-menu-item>
22
+ <a-menu-divider />
23
+ <a-menu-item key="split" :disabled="determineLevel(treeKey) !== 'item'"><a-icon type="fullscreen" />&nbsp;&nbsp;拆分</a-menu-item>
24
+ <a-menu-item key="add" :disabled="determineLevel(treeKey) === 'item'"><a-icon type="plus-square" />&nbsp;&nbsp;添加</a-menu-item>
25
+ <a-menu-item key="rename" :disabled="determineLevel(treeKey) !== 'item' && determineLevel(treeKey) !== 'page'"><a-icon type="italic" />&nbsp;&nbsp;重命名</a-menu-item>
26
+ <a-menu-divider />
27
+ <a-menu-item key="delete"><a-icon type="delete" />&nbsp;&nbsp;删除</a-menu-item>
28
+ </a-menu>
29
+ </template>
30
+ </a-dropdown>
31
+ </template>
32
+ <!-- 树中的图标 -->
33
+ <a-icon slot="file" type="file" />
34
+ <a-icon slot="appstore" type="appstore" />
35
+ <a-icon slot="pause" type="pause" />
36
+ <a-icon slot="ordered-list" type="ordered-list" />
37
+ </a-tree>
38
+ <!-- 页面容器重命名弹框 -->
39
+ <a-modal
40
+ title="页面容器重命名"
41
+ width="60%"
42
+ :z-index="1001"
43
+ :destroyOnClose="true"
44
+ @ok="handleRenameModalOk"
45
+ @cancel="() => { showRenameModal = false }"
46
+ :visible="showRenameModal">
47
+ <a-form :label-col="{ span: 7 }" :wrapper-col="{ span: 12 }">
48
+ <!-- 新名称 -->
49
+ <a-form-item label="新名称">
50
+ <a-input v-model="pageNewName"/>
51
+ </a-form-item>
52
+ </a-form>
53
+ </a-modal>
54
+ </div>
55
+ </template>
56
+
57
+ <script>
58
+ import * as lowcodeUtils from '@vue2-client/utils/lowcode/lowcodeUtils'
59
+ export default {
60
+ props: {
61
+ config: {
62
+ type: Object,
63
+ required: true,
64
+ },
65
+ // 可以由外侧控制哪个节点被选中
66
+ selectTreeNode: {
67
+ type: String,
68
+ default: undefined
69
+ }
70
+ },
71
+ methods: {
72
+ // 重命名弹框确认
73
+ handleRenameModalOk () {
74
+ this.$emit('rename', this.renameId, this.pageNewName)
75
+ this.renameId = undefined
76
+ this.showRenameModal = false
77
+ },
78
+ // 根据id返回类型
79
+ determineLevel (id) {
80
+ if (id.startsWith('page')) {
81
+ return 'page'
82
+ } else if (id.startsWith('container_page_')) {
83
+ return 'container_page'
84
+ } else if (id.startsWith('row')) {
85
+ return 'row'
86
+ } else {
87
+ return 'item'
88
+ }
89
+ },
90
+ // 将树中的key转换回原始ID
91
+ getOriginalKey (treeKey) {
92
+ if (treeKey.startsWith('page')) {
93
+ return treeKey.substring('page_'.length)
94
+ } else if (treeKey.startsWith('container_page_')) {
95
+ return treeKey.substring('container_page_'.length)
96
+ } else if (treeKey.startsWith('row')) {
97
+ const newRowId = treeKey.substring('row_'.length)
98
+ const lastIndex = newRowId.lastIndexOf('_')
99
+ const pre = newRowId.substring(0, lastIndex)
100
+ const index = newRowId.substring(lastIndex + 1)
101
+ const newIndex = Number(index) - 1
102
+ return pre + '_' + newIndex
103
+ } else {
104
+ return treeKey
105
+ }
106
+ },
107
+ // 根据ID,返回拖拽级别和类型,便于拖拽模式判断
108
+ determineDragLevel (id) {
109
+ if (id.startsWith('page')) {
110
+ return {
111
+ type: 'page',
112
+ level: 0
113
+ }
114
+ } else if (id.startsWith('container_page_')) {
115
+ return {
116
+ type: 'container_page',
117
+ level: 2
118
+ }
119
+ } else if (id.startsWith('row')) {
120
+ return {
121
+ type: 'row',
122
+ level: 1
123
+ }
124
+ } else {
125
+ return {
126
+ type: 'item',
127
+ level: 2
128
+ }
129
+ }
130
+ },
131
+ // 树拖拽事件
132
+ treeDrop (info) {
133
+ // 拖拽结束目标的id
134
+ const dropKey = info.node.eventKey
135
+ // 被拖拽的id
136
+ const dragKey = info.dragNode.eventKey
137
+ // 拖拽目标的位置
138
+ const dropPos = info.node.pos.split('-')
139
+
140
+ // 拖拽结束目标的类型
141
+ const dropLevel = this.determineDragLevel(dropKey)
142
+ // 被拖拽的类型
143
+ const dragLevel = this.determineDragLevel(dragKey)
144
+
145
+ // 拖拽对于目标的定位,-1表示之前,0表示插入,1表示之后
146
+ const dropPosition = info.dropPosition - Number(dropPos[dropPos.length - 1])
147
+
148
+ // 以下几种为非法拖拽
149
+ // 1. 平级移动但是目标是新增
150
+ // 2. 高一级移动但不是新增
151
+ // 3. 高级组件移动到低级
152
+ // 4. 相差2级移动
153
+ // 唯一特例,行可以插入容器页面,容器页面等于模块级别,但可以被行插入
154
+
155
+ // 只有三种情况可以拖拽
156
+ // 1.平级挪
157
+ // 2.高一级插
158
+ // 3.行插子页面
159
+ // 4.平级插入改为替换双方位置(特例)
160
+
161
+ // 1. 平级挪
162
+ if (dropLevel.level === dragLevel.level && dropPosition !== 0) {
163
+ const dragType = 'move'
164
+ this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
165
+ return
166
+ }
167
+
168
+ // 2.高一级插
169
+ if (dropLevel.level === (dragLevel.level - 1) && dropPosition === 0) {
170
+ const dragType = 'higher'
171
+ this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
172
+ return
173
+ }
174
+
175
+ // 3.行插子页面
176
+ if (dragLevel.type === 'row' && dropLevel.type === 'container_page' && dropPosition === 0) {
177
+ const dragType = 'rowToContainer'
178
+ this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
179
+ return
180
+ }
181
+
182
+ // 4.平级插入改为替换双方位置(特例)
183
+ if (dropLevel.level === dragLevel.level && dropPosition === 0) {
184
+ const dragType = 'switch'
185
+ this.$emit('componentMove', this.getOriginalKey(dragKey), this.getOriginalKey(dropKey), dragLevel, dropLevel, dropPosition, dragType)
186
+ return
187
+ }
188
+
189
+ // 能到这不return的证明都是非法移动
190
+ this.$message.error('不合法的拖拽!')
191
+ },
192
+ // 删除
193
+ handleDelete (targetType, originalKey) {
194
+ const _this = this
195
+ if (targetType === 'item') {
196
+ this.$confirm({
197
+ title: `确认删除此组件?`,
198
+ content: `组件ID:${originalKey}`,
199
+ onOk () {
200
+ _this.$emit('deleteComponent', originalKey, 'component')
201
+ },
202
+ onCancel () {},
203
+ })
204
+ } else if (targetType === 'page') {
205
+ const page = lowcodeUtils.getPageConfigById(originalKey, this.config)
206
+ this.$confirm({
207
+ title: `确认删除此页面?`,
208
+ content: `所选页面:${page.title}[${lowcodeUtils.resolvePageType(page.type)}]`,
209
+ onOk () {
210
+ _this.$emit('deleteComponent', originalKey, 'page')
211
+ },
212
+ onCancel () {},
213
+ })
214
+ } else if (targetType === 'row') {
215
+ this.$confirm({
216
+ title: `确认删除此行?`,
217
+ content: `所选行:${originalKey}`,
218
+ onOk () {
219
+ _this.$emit('deleteComponent', originalKey, 'row')
220
+ },
221
+ onCancel () {},
222
+ })
223
+ } else if (targetType === 'container_page') {
224
+ this.$confirm({
225
+ title: `确认删除此容器页面?`,
226
+ content: `所选容器:${originalKey}`,
227
+ onOk () {
228
+ _this.$emit('deleteComponent', originalKey, 'container_page')
229
+ },
230
+ onCancel () {},
231
+ })
232
+ }
233
+ },
234
+ // 复制
235
+ handleCopy (treeKey, targetType) {
236
+ const originalKey = this.getOriginalKey(treeKey)
237
+ // 获取复制对象
238
+ let temp
239
+ if (targetType === 'container_page') {
240
+ temp = lowcodeUtils.getContainerPageOuterByContainerPageId(originalKey, this.config)
241
+ } else {
242
+ temp = lowcodeUtils.getConfig(originalKey, this.config)
243
+ }
244
+ // 复制
245
+ let copy = JSON.parse(JSON.stringify(temp))
246
+ if (targetType === 'page') {
247
+ // 重新修改id和title
248
+ copy.id = 'page_' + lowcodeUtils.nanoidWithoutSymbol(6)
249
+ copy.title = copy.title + '_副本'
250
+ // 复制页面自动粘贴
251
+ this.$emit('pasteItem', originalKey, copy, 'page')
252
+ } else {
253
+ if (targetType === 'row') {
254
+ // 将行内每个组件重新修改id
255
+ const target = copy.body
256
+ copy.id = 'undefine'
257
+ target.forEach(item => {
258
+ if (item.type === 'container_page') {
259
+ item.id = 'container_' + lowcodeUtils.nanoidWithoutSymbol(6)
260
+ item = lowcodeUtils.reRandomComponentId(item)
261
+ } else {
262
+ const prefix = item.id.split('_')[0]
263
+ item.id = prefix + '_' + lowcodeUtils.nanoidWithoutSymbol(6)
264
+ }
265
+ })
266
+ } else if (targetType === 'item') {
267
+ // 重新修改id
268
+ const prefix = copy.id.split('_')[0]
269
+ copy.id = prefix + '_' + lowcodeUtils.nanoidWithoutSymbol(6)
270
+ } else if (targetType === 'container_page') {
271
+ // 重新修改id
272
+ copy.id = 'container_' + lowcodeUtils.nanoidWithoutSymbol(6)
273
+ copy = lowcodeUtils.reRandomComponentId(copy)
274
+ }
275
+ this.copyCache = {
276
+ type: targetType,
277
+ content: copy
278
+ }
279
+ this.$message.success('复制成功!')
280
+ }
281
+ },
282
+ // 粘贴
283
+ handlePaste (targetType, originalKey) {
284
+ // 同级别内容不能粘贴到另一个中
285
+ if (targetType === this.copyCache.type) {
286
+ this.$message.error('该操作不合法!')
287
+ return
288
+ }
289
+
290
+ // 行只能复制到容器页面和页面中
291
+ if (this.copyCache.type === 'row') {
292
+ if (targetType === 'page' || targetType === 'container_page') {
293
+ this.$emit('pasteItem', originalKey, this.copyCache, 'page-row')
294
+ return
295
+ }
296
+ }
297
+
298
+ // 模块,容器页面只能复制到行
299
+ if (this.copyCache.type === 'item' || this.copyCache.type === 'container_page') {
300
+ if (targetType === 'row') {
301
+ this.$emit('pasteItem', originalKey, this.copyCache, 'row-item')
302
+ return
303
+ }
304
+ }
305
+
306
+ // 其余操作均不合法
307
+ this.$message.error('该操作不合法!')
308
+ },
309
+ // 重命名
310
+ handleRename (targetType, originalKey) {
311
+ const target = lowcodeUtils.getConfig(originalKey, this.config)
312
+ this.renameId = target.id
313
+ if (target.title) {
314
+ this.pageNewName = target.title
315
+ } else if (target.name) {
316
+ this.pageNewName = target.name
317
+ } else {
318
+ this.pageNewName = target.id
319
+ }
320
+ this.showRenameModal = true
321
+ },
322
+ // 拆分
323
+ handleSplit (originalKey) {
324
+ const _this = this
325
+ this.$confirm({
326
+ title: `是否垂直拆分?`,
327
+ onOk () {
328
+ _this.$emit('split', originalKey, true)
329
+ },
330
+ onCancel () {
331
+ _this.$emit('split', originalKey, false)
332
+ },
333
+ })
334
+ },
335
+ // 添加
336
+ handleAdd (targetType, originalKey) {
337
+ if (targetType === 'page' || targetType === 'container_page') {
338
+ this.$emit('add', originalKey, 'row')
339
+ } else if (targetType === 'row') {
340
+ this.$emit('add', originalKey, 'container')
341
+ }
342
+ },
343
+ // 树右键事件
344
+ onContextMenuClick (treeKey, menuKey) {
345
+ // 判断目标类型
346
+ const targetType = this.determineLevel(treeKey)
347
+ const originalKey = this.getOriginalKey(treeKey)
348
+ // 点击右键菜单中删除的事件
349
+ switch (menuKey) {
350
+ case 'delete':
351
+ this.handleDelete(targetType, originalKey)
352
+ return
353
+ case 'copy':
354
+ this.handleCopy(treeKey, targetType)
355
+ return
356
+ case 'paste':
357
+ this.handlePaste(targetType, originalKey)
358
+ return
359
+ case 'rename':
360
+ this.handleRename(targetType, originalKey)
361
+ return
362
+ case 'split':
363
+ this.handleSplit(originalKey)
364
+ return
365
+ case 'add':
366
+ this.handleAdd(targetType, originalKey)
367
+ }
368
+ },
369
+ // 处理架构树点击事件
370
+ handleTreeSelect (value) {
371
+ // 如果是反选
372
+ if (value.length === 0) {
373
+ return
374
+ }
375
+ this.selectedKeys = value
376
+ const type = this.determineLevel(value[0])
377
+ if (type === 'page') {
378
+ this.$emit('treeOrganizationClick', null)
379
+ }
380
+ this.$emit('treeOrganizationClick', this.getOriginalKey(value[0]))
381
+ },
382
+ // 初始化树
383
+ initTree (config, container = undefined) {
384
+ const result = []
385
+ // 从配置中,抽取组件,初始化成树的格式
386
+ for (let i = 0; i < config.page.length; i++) {
387
+ // push第一级页面容器
388
+ const page = config.page[i]
389
+ let title, icon, key
390
+ if (page.title) {
391
+ title = page.title + '(' + lowcodeUtils.resolvePageType(page.type) + ')'
392
+ icon = 'file'
393
+ key = 'page_' + page.id
394
+ } else {
395
+ title = '列容器'
396
+ icon = 'pause'
397
+ key = 'container_page_' + page.id
398
+ }
399
+ result.push({
400
+ title: title,
401
+ key: key,
402
+ children: [],
403
+ slots: {
404
+ icon: icon,
405
+ },
406
+ })
407
+ // 在页面容器中,push第二级行容器
408
+ for (let j = 0; j < page.body.length; j++) {
409
+ const row = page.body[j]
410
+ result[i].children.push({
411
+ title: '行容器' + (j + 1),
412
+ key: 'row_' + page.id + '_' + (j + 1),
413
+ children: [],
414
+ slots: {
415
+ icon: 'ordered-list',
416
+ },
417
+ })
418
+ // 在行容器中,push第三级组件
419
+ for (let k = 0; k < row.body.length; k++) {
420
+ const item = row.body[k]
421
+ let name
422
+ if (item.name) {
423
+ name = item.name
424
+ } else {
425
+ name = item.id
426
+ }
427
+ // 如果item进行了嵌套,递归调用
428
+ if (item.type === 'container_page') {
429
+ this.initTree(item, result[i].children[j])
430
+ } else {
431
+ // 如果是container则显示为列容器
432
+ if (item.type === 'container') {
433
+ name = '列容器'
434
+ result[i].children[j].children.push({
435
+ title: name,
436
+ key: item.id,
437
+ children: [],
438
+ slots: {
439
+ icon: 'pause',
440
+ },
441
+ })
442
+ } else {
443
+ result[i].children[j].children.push({
444
+ title: name,
445
+ key: item.id,
446
+ children: [],
447
+ slots: {
448
+ icon: 'appstore',
449
+ },
450
+ })
451
+ }
452
+ }
453
+ }
454
+ }
455
+ }
456
+ if (!container) {
457
+ this.treeData = result
458
+ } else {
459
+ container.children = container.children.concat(result)
460
+ }
461
+ },
462
+ },
463
+ mounted () {
464
+ this.initTree(this.config)
465
+ this.showTree = true
466
+ },
467
+ data () {
468
+ return {
469
+ // 树的数据
470
+ treeData: [],
471
+ // 控制树的渲染
472
+ showTree: false,
473
+ // 控制重命名弹框显隐
474
+ showRenameModal: false,
475
+ // 复制的缓存
476
+ copyCache: undefined,
477
+ // 重命名绑定变量
478
+ pageNewName: undefined,
479
+ // 重命名对象的id
480
+ renameId: undefined,
481
+ // 在树中已选中的key
482
+ selectedKeys: []
483
+ }
484
+ },
485
+ watch: {
486
+ // 如果外侧指定了某个节点,让树选中该节点
487
+ selectTreeNode: {
488
+ handler (newVal) {
489
+ if (newVal) {
490
+ this.selectedKeys = [newVal]
491
+ } else {
492
+ this.selectedKeys = []
493
+ }
494
+ }
495
+ }
496
+ }
497
+ }
498
+ </script>
499
+
500
+ <style scoped lang="less">
501
+
502
+ </style>