vue2-client 1.15.87 → 1.15.88

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 (377) hide show
  1. package/.editorconfig +9 -9
  2. package/.env +20 -20
  3. package/.env.development +1 -1
  4. package/.env.iot +19 -19
  5. package/.env.message +19 -19
  6. package/.env.revenue +19 -19
  7. package/.env.runtime +19 -19
  8. package/.eslintrc.json +5 -5
  9. package/CLAUDE.md +89 -89
  10. package/README.md +65 -65
  11. package/babel.config.js +21 -21
  12. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  13. package/docs/notice.md +22 -22
  14. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -179
  15. package/jest.config.js +22 -22
  16. package/package.json +111 -111
  17. package/src/App.vue +196 -196
  18. package/src/ReportView.js +13 -13
  19. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  20. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  21. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  22. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  23. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  24. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  25. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  26. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  27. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  28. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  29. package/src/base-client/components/common/XAddForm/index.js +3 -3
  30. package/src/base-client/components/common/XAddForm/index.md +61 -61
  31. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  32. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -54
  33. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  34. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  35. package/src/base-client/components/common/XBadge/index.js +3 -3
  36. package/src/base-client/components/common/XBadge/index.md +39 -39
  37. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  38. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  39. package/src/base-client/components/common/XCalendar/index.md +284 -284
  40. package/src/base-client/components/common/XCard/index.js +3 -3
  41. package/src/base-client/components/common/XCard/index.md +43 -43
  42. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  43. package/src/base-client/components/common/XCollapse/XCollapse.vue +354 -354
  44. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  45. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  46. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  47. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  48. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  49. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  50. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  51. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  52. package/src/base-client/components/common/XForm/XFormItem.vue +1474 -1474
  53. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  54. package/src/base-client/components/common/XForm/demo.vue +105 -105
  55. package/src/base-client/components/common/XForm/index.js +3 -3
  56. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  57. package/src/base-client/components/common/XFormCol/index.js +3 -3
  58. package/src/base-client/components/common/XFormCol/index.md +35 -35
  59. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  60. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  61. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  62. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  63. package/src/base-client/components/common/XFormTable/index.js +3 -3
  64. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  65. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  66. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  67. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  68. package/src/base-client/components/common/XInput/index.js +3 -3
  69. package/src/base-client/components/common/XInput/index.md +97 -97
  70. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  71. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  72. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  73. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  74. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  75. package/src/base-client/components/common/XRate/demo.vue +102 -102
  76. package/src/base-client/components/common/XRate/index.vue +149 -149
  77. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  78. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  79. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  80. package/src/base-client/components/common/XReport/index.md +103 -103
  81. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  82. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  83. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  84. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  85. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +723 -723
  86. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  87. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  88. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  89. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  90. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  91. package/src/base-client/components/common/XTable/index.js +3 -3
  92. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  93. package/src/base-client/components/common/XTimeline/index.md +191 -191
  94. package/src/base-client/components/common/XTree/XTreePro.vue +452 -450
  95. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  96. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  97. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  98. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  99. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  100. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  101. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  102. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -629
  103. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  104. package/src/base-client/components/his/XList/XList.vue +495 -495
  105. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  106. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  107. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  108. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  109. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  110. package/src/base-client/components/his/XRadio/index.md +234 -234
  111. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  112. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  113. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  114. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  115. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  116. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  117. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  118. package/src/base-client/components/his/XTitle/README.md +113 -113
  119. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  120. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  121. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  122. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  123. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  124. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  125. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  126. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  127. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  128. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  129. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  130. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  131. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  132. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  133. package/src/base-client/components/layout/XPageView/index.js +2 -2
  134. package/src/base-client/components/layout/XPageView/index.md +96 -96
  135. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  136. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  137. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  138. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  139. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  140. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  141. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  142. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  143. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  144. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  145. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  146. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  147. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  148. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  149. package/src/base-client/plugins/AppData.js +126 -126
  150. package/src/base-client/plugins/PagedList.js +177 -177
  151. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -154
  152. package/src/base-client/plugins/authority-plugin.js +167 -167
  153. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  154. package/src/base-client/plugins/i18n-extend.js +32 -32
  155. package/src/base-client/plugins/moment.js +8 -8
  156. package/src/base-client/plugins/selectValueTypeHelper.js +281 -281
  157. package/src/bootstrap.js +51 -51
  158. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  159. package/src/components/Ellipsis/index.js +3 -3
  160. package/src/components/Ellipsis/index.md +38 -38
  161. package/src/components/FileImageItem/FileItem.vue +320 -320
  162. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  163. package/src/components/FileImageItem/ImageItem.vue +107 -107
  164. package/src/components/FileImageItem/index.js +4 -4
  165. package/src/components/FilePreview/FilePreview.vue +181 -181
  166. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  167. package/src/components/FilePreview/index.js +3 -3
  168. package/src/components/HeightScanner/index.vue +615 -615
  169. package/src/components/STable/README.md +341 -341
  170. package/src/components/STable/index.js +558 -558
  171. package/src/components/TableSetting/TableSetting.vue +143 -143
  172. package/src/components/TableSetting/index.js +3 -3
  173. package/src/components/Trend/Trend.vue +41 -41
  174. package/src/components/Trend/index.js +3 -3
  175. package/src/components/Trend/index.less +41 -41
  176. package/src/components/Trend/index.md +45 -45
  177. package/src/components/_util/util.js +46 -46
  178. package/src/components/cache/AKeepAlive.js +179 -179
  179. package/src/components/exception/typeConfig.js +19 -19
  180. package/src/components/form/FormRow.vue +52 -52
  181. package/src/components/index.less +5 -5
  182. package/src/components/menu/Contextmenu.vue +84 -84
  183. package/src/components/menu/index.less +38 -38
  184. package/src/components/page/header/PageHeader.vue +64 -64
  185. package/src/components/page/header/index.less +40 -40
  186. package/src/components/result/Result.vue +77 -77
  187. package/src/components/setting/SettingItem.vue +26 -26
  188. package/src/components/setting/i18n.js +117 -117
  189. package/src/components/table/StandardTable.vue +141 -141
  190. package/src/components/table/advance/ActionColumns.vue +158 -158
  191. package/src/components/table/advance/ActionSize.vue +45 -45
  192. package/src/components/table/advance/AdvanceTable.vue +275 -275
  193. package/src/components/table/advance/SearchArea.vue +355 -355
  194. package/src/components/table/advance/index.js +2 -2
  195. package/src/components/table/api/ApiTable.vue +50 -50
  196. package/src/components/task/TaskGroup.vue +80 -80
  197. package/src/components/task/TaskItem.vue +26 -26
  198. package/src/components/tool/AvatarList.vue +68 -68
  199. package/src/components/tool/DetailList.vue +157 -157
  200. package/src/components/tool/Drawer.vue +142 -142
  201. package/src/components/tool/FooterToolBar.vue +30 -30
  202. package/src/components/tool/HeadInfo.vue +35 -35
  203. package/src/components/tool/TagSelect.vue +83 -83
  204. package/src/components/tool/TagSelectOption.vue +33 -33
  205. package/src/components/transition/PageToggleTransition.vue +97 -97
  206. package/src/config/default/admin.config.js +18 -18
  207. package/src/config/default/animate.config.js +21 -21
  208. package/src/config/default/index.js +6 -6
  209. package/src/config/index.js +3 -3
  210. package/src/config/replacer/index.js +10 -10
  211. package/src/config/replacer/resolve.config.js +67 -67
  212. package/src/expression/ExpressionRunner.js +26 -26
  213. package/src/expression/TestExpression.js +509 -509
  214. package/src/expression/core/Delegate.js +115 -115
  215. package/src/expression/core/Expression.js +1358 -1358
  216. package/src/expression/core/Program.js +932 -932
  217. package/src/expression/core/Token.js +27 -27
  218. package/src/expression/enums/ExpressionType.js +81 -81
  219. package/src/expression/enums/TokenType.js +11 -11
  220. package/src/expression/exception/BreakWayException.js +2 -2
  221. package/src/expression/exception/ContinueWayException.js +2 -2
  222. package/src/expression/exception/ExpressionException.js +28 -28
  223. package/src/expression/exception/ReturnWayException.js +14 -14
  224. package/src/expression/exception/ServiceException.js +22 -22
  225. package/src/expression/instances/LogicConsole.js +44 -44
  226. package/src/expression/ts/ExpressionRunner.ts +28 -28
  227. package/src/expression/ts/TestExpression.ts +509 -509
  228. package/src/expression/ts/core/Delegate.ts +114 -114
  229. package/src/expression/ts/core/Expression.ts +1309 -1309
  230. package/src/expression/ts/core/Program.ts +950 -950
  231. package/src/expression/ts/core/Token.ts +29 -29
  232. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  233. package/src/expression/ts/enums/TokenType.ts +13 -13
  234. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  235. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  236. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  237. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  238. package/src/expression/ts/exception/ServiceException.ts +22 -22
  239. package/src/expression/ts/instances/JSONArray.ts +48 -48
  240. package/src/expression/ts/instances/JSONObject.ts +109 -109
  241. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  242. package/src/layouts/AdminLayout.vue +176 -176
  243. package/src/layouts/BlankView.vue +79 -79
  244. package/src/layouts/ComponentLayoutOne.vue +47 -47
  245. package/src/layouts/GridView.vue +43 -43
  246. package/src/layouts/PageView.vue +55 -55
  247. package/src/layouts/footer/PageFooter.vue +49 -49
  248. package/src/layouts/header/HeaderAvatar.vue +64 -64
  249. package/src/layouts/header/HeaderSearch.vue +67 -67
  250. package/src/layouts/header/index.less +92 -92
  251. package/src/layouts/tabs/TabsView.vue +383 -383
  252. package/src/layouts/tabs/i18n.js +25 -25
  253. package/src/layouts/tabs/index.js +2 -2
  254. package/src/logic/LogicRunner.js +62 -62
  255. package/src/logic/TestLogic.js +13 -13
  256. package/src/logic/plugins/common/DateTools.js +35 -35
  257. package/src/logic/plugins/common/VueTools.js +30 -30
  258. package/src/logic/plugins/index.js +7 -7
  259. package/src/logic/ts/LogicRunner.ts +67 -67
  260. package/src/logic/ts/TestLogic.ts +13 -13
  261. package/src/main.js +33 -33
  262. package/src/mixins/formValidationMixin.js +46 -46
  263. package/src/mock/common/activityData.js +32 -32
  264. package/src/mock/common/index.js +89 -89
  265. package/src/mock/common/reportData.js +20 -20
  266. package/src/mock/common/tableData.js +118 -118
  267. package/src/mock/index.js +12 -12
  268. package/src/mock/project/index.js +17 -17
  269. package/src/mock/user/current.js +13 -13
  270. package/src/mock/user/login.js +39 -39
  271. package/src/mock/user/routes.js +61 -61
  272. package/src/mock/workplace/index.js +15 -15
  273. package/src/pages/LogicCallExample/index.vue +46 -46
  274. package/src/pages/ReportGrid/index.vue +76 -76
  275. package/src/pages/ReportView.vue +50 -50
  276. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  277. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  278. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  279. package/src/pages/WorkflowDetail/WorkflowDetail.vue +391 -391
  280. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  281. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  282. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1766
  283. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  284. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  285. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  287. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  288. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  289. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  290. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  291. package/src/pages/XPageViewExample/index.vue +149 -149
  292. package/src/pages/addressSelect/addressDemo.vue +24 -24
  293. package/src/pages/addressSelect/index.vue +270 -270
  294. package/src/pages/dashboard/workplace/i18n.js +40 -40
  295. package/src/pages/dashboard/workplace/index.js +2 -2
  296. package/src/pages/dashboard/workplace/index.less +59 -59
  297. package/src/pages/exception/403.vue +21 -21
  298. package/src/pages/exception/404.vue +24 -24
  299. package/src/pages/exception/500.vue +21 -21
  300. package/src/pages/login/index.js +2 -2
  301. package/src/pages/report/ReportTableHome.vue +28 -28
  302. package/src/pages/resourceManage/depListManage.vue +23 -23
  303. package/src/pages/resourceManage/funListManage.vue +23 -23
  304. package/src/pages/resourceManage/index.js +15 -15
  305. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  306. package/src/pages/resourceManage/roleListManage.vue +23 -23
  307. package/src/pages/resourceManage/staffListManage.vue +23 -23
  308. package/src/pages/system/file/Info.vue +56 -56
  309. package/src/pages/system/file/index.vue +317 -317
  310. package/src/pages/system/settings/index.vue +126 -126
  311. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  312. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  313. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  314. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  315. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  316. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  317. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  318. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  319. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  320. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  321. package/src/pages/userInfoDetailManage/index.vue +290 -290
  322. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  323. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  324. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  325. package/src/plugins/HiPrintPlugin.js +164 -164
  326. package/src/router/async/router.map.js +126 -126
  327. package/src/router/guards.js +262 -262
  328. package/src/router/i18n.js +57 -57
  329. package/src/router.js +17 -17
  330. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  331. package/src/services/api/LogDetailsViewApi.js +10 -10
  332. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  333. package/src/services/api/logininfor/index.js +6 -6
  334. package/src/services/api/manage.js +8 -8
  335. package/src/services/api/restTools.js +215 -215
  336. package/src/services/api/workFlow.js +57 -57
  337. package/src/services/apiService.js +16 -16
  338. package/src/services/dataSource.js +12 -12
  339. package/src/services/index.js +7 -7
  340. package/src/services/user.js +92 -92
  341. package/src/services/v3Api.js +116 -116
  342. package/src/store/index.js +5 -5
  343. package/src/store/mutation-types.js +4 -4
  344. package/src/theme/antd/ant-menu.less +2 -2
  345. package/src/theme/antd/ant-message.less +3 -3
  346. package/src/theme/antd/ant-table.less +22 -22
  347. package/src/theme/antd/ant-time-picker.less +3 -3
  348. package/src/theme/antd/index.less +3 -3
  349. package/src/theme/default/color.less +43 -43
  350. package/src/theme/default/index.less +3 -3
  351. package/src/theme/default/nprogress.less +76 -76
  352. package/src/theme/global.less +279 -279
  353. package/src/theme/index.less +5 -5
  354. package/src/theme/reportTable.less +58 -58
  355. package/src/theme/theme.less +1 -1
  356. package/src/utils/EncryptUtil.js +162 -162
  357. package/src/utils/Objects.js +25 -25
  358. package/src/utils/axios-interceptors.js +100 -100
  359. package/src/utils/colors.js +107 -107
  360. package/src/utils/common.js +10 -10
  361. package/src/utils/excel/Blob.js +180 -180
  362. package/src/utils/excel/Export2Excel.js +141 -141
  363. package/src/utils/filter.js +21 -21
  364. package/src/utils/i18n.js +80 -80
  365. package/src/utils/indexedDB.js +549 -549
  366. package/src/utils/microAppUtils.js +49 -49
  367. package/src/utils/request.js +395 -395
  368. package/src/utils/routerUtil.js +553 -553
  369. package/src/utils/themeUtil.js +100 -100
  370. package/test/Tree.spec.js +168 -168
  371. package/test/myDialog.spec.js +47 -47
  372. package/test/request.test.js +17 -17
  373. package/test/util.test.js +53 -53
  374. package/test/v3Api.test.js +1984 -1984
  375. package/tests/unit/ReportTable.spec.js +16 -16
  376. package/vue.config.js +222 -222
  377. package/.claude/settings.local.json +0 -12
@@ -1,450 +1,452 @@
1
- <template>
2
- <div id="XTreeWarp">
3
- <div class="tree_title" v-if="config.title">
4
- <a-row style="font-size: medium;line-height: 3rem">
5
- <a-col span="16" :offset="2">
6
- <span>{{ config.title }}</span>
7
- </a-col>
8
- <a-col span="1" :offset="2" v-if="treeDisplaySwitch">
9
- <a-icon
10
- :type="treeDisplayConfig.showTree? 'caret-down':'caret-left'"
11
- :style="{color: treeDisplayConfig.buttonColor}"
12
- @click="treeDisplayConfig.showTree=!treeDisplayConfig.showTree"/>
13
- </a-col>
14
- </a-row>
15
- </div>
16
- <div v-show="!treeDisplaySwitch || treeDisplayConfig.showTree">
17
- <a-row v-if="config.search" class="row-search">
18
- <div class="content-search">
19
- <a-input
20
- placeholder="请输入搜索关键字"
21
- v-model="searchInput"
22
- @change="onChange">
23
- <a-icon slot="prefix" type="search"/>
24
- </a-input>
25
- </div>
26
- </a-row>
27
- <a-row v-if="config.tabBtn && config.tabBtn.length > 0">
28
- <div class="content-search" style="padding-top:7px;padding-left: 10px">
29
- <a-space>
30
- <a-button
31
- v-for="(item,index) in config.tabBtn"
32
- @click="btnFuncClick(index,item.customFunction)"
33
- :class="{ 'active-button': activeButtonIndex[index] }"
34
- :key="index">{{ item.name }}
35
- </a-button>
36
- </a-space>
37
- </div>
38
- </a-row>
39
- <div
40
- class="tree_main"
41
- :style="{
42
- maxHeight:heightStore[1]
43
- }">
44
- <a-spin :spinning="spinning">
45
- <div class="ve-tree" :style="{height:heightStore[1]}">
46
- <!-- 不使用虚拟滚动时只需去掉height参数即可 -->
47
- <vue-easy-tree
48
- ref="veTree"
49
- node-key="value"
50
- :height="heightStore[1]"
51
- :show-checkbox="config.checkable"
52
- :data="localTreeData"
53
- :item-size="40"
54
- :auto-expand-parent="true"
55
- @check-change="handleCheckChange"
56
- :default-expanded-keys="expandedKeys"
57
- @node-expand="nodeExpand"
58
- @node-collapse="nodeCollapse"
59
- @node-click="handleNodeClick"
60
- :filter-node-method="filterNode"
61
- :props="props"
62
- >
63
- <span class="custom-tree-node" slot-scope="{ node,data }">
64
- <span :class="{ 'selected': data === selectedNode }" @click="nodeItemClick(data)">
65
- <a-tooltip placement="right" :title="node.label">
66
- <a-icon
67
- v-if="data.icon"
68
- :style="{color: data.iconColor, marginRight: '5px'}"
69
- :type="data.icon"/>
70
- <span
71
- v-html="highlightKeyword(node.label, searchInput)"></span>
72
- <span v-if="config.countVisible">{{
73
- data.hasOwnProperty('count') ? ' (' + data.count + ')' : ''
74
- }}</span>
75
- </a-tooltip>
76
- </span>
77
- <a-tooltip
78
- :title="icon.title"
79
- :key="icon.func"
80
- v-for="icon in config.btn"
81
- >
82
- <a-icon
83
- @click.stop="action(data, icon.func)"
84
- v-if="executeStrFunction( icon.customFunction,[data])"
85
- :type="icon.icon"
86
- :style="{color:icon.color, marginLeft: '8px'}"></a-icon>
87
- </a-tooltip>
88
- </span>
89
- </vue-easy-tree>
90
- </div>
91
- </a-spin>
92
- </div>
93
- </div>
94
- </div>
95
- </template>
96
-
97
- <script>
98
- // https://github.com/Junior125306/vue-easy-tree
99
- import VueEasyTree from '@afwenming123/vue-easy-tree'
100
- // 样式文件,可以根据需要自定义样式或主题
101
- import '@afwenming123/vue-easy-tree/src/assets/index.min.css'
102
- import { getConfigByNameAsync, runLogic } from '@vue2-client/services/api/common'
103
- import { mapState } from 'vuex'
104
- import { executeStrFunction } from '@vue2-client/utils/runEvalFunction'
105
- import debounce from 'lodash.debounce'
106
-
107
- export default {
108
- props: {
109
- configName: {
110
- type: String,
111
- required: false,
112
- default: undefined
113
- },
114
- configValue: {
115
- type: String,
116
- required: false,
117
- default: undefined
118
- },
119
- env: {
120
- type: String,
121
- default: 'prod'
122
- },
123
- treeData: {
124
- type: Array,
125
- default: () => []
126
- },
127
- // 配置所属命名空间
128
- serviceName: {
129
- type: String,
130
- default: undefined
131
- },
132
- // 是否显示收起开关
133
- treeDisplaySwitch: {
134
- type: Boolean,
135
- default: false
136
- },
137
- // 收起开关默认值设置
138
- treeDisplayConfig: {
139
- type: Object,
140
- default: () => {
141
- return {
142
- showTree: true,
143
- buttonColor: '#91d5ff'
144
- }
145
- }
146
- }
147
- },
148
- data () {
149
- return {
150
- props: {
151
- label: 'label',
152
- children: 'children'
153
- },
154
- localTreeData: this.treeData,
155
- config: {
156
- countVisible: true
157
- },
158
- // 暂存选中的数据
159
- expandedKeys: [],
160
- // 是否加载中
161
- spinning: false,
162
- // 选中的 key
163
- checkedKeys: [],
164
- // 定义 tree 数据
165
- data_treeData: [],
166
- // 存储搜索结果的树数据
167
- filteredTreeData: [],
168
- // 定义最深一层的 数据
169
- deepestNodes: [],
170
- // 定义激活的按钮
171
- activeButtonIndex: {},
172
- // 是否全选
173
- checkall: false,
174
- // 选了但没有全选
175
- indeterminate: false,
176
- // 选择的节点
177
- selectedNode: null,
178
- // 暂存查询信息
179
- searchInfo: {},
180
- searchInput: '',
181
- replaceFields: { children: 'children', title: 'label', key: 'value' }
182
- }
183
- },
184
- components: {
185
- VueEasyTree
186
- },
187
- watch: {
188
- treeData (newVal) {
189
- this.localTreeData = newVal
190
- }
191
- },
192
- async created () {
193
- if (this.configName) {
194
- const config = await getConfigByNameAsync(this.configName, this.serviceName, this.env === 'dev')
195
- this.config = Object.assign({}, config)
196
- } else if (this.configValue) {
197
- this.config = this.configValue
198
- } else {
199
- throw new DOMException('组件[XTreePro]需要传入configName或configValue')
200
- }
201
- this.replaceFields = this.config.replaceFields
202
- if (this.config.treeData.indexOf('logic@') >= 0) {
203
- // 如果数据源是 logic
204
- await this.getData()
205
- }
206
- },
207
- methods: {
208
- // 节点展开暂存
209
- nodeExpand (node) {
210
- console.log('====需要展开节点', node, this.replaceFields.key)
211
- if (this.expandedKeys.includes(node[this.replaceFields.key])) {
212
- this.expandedKeys = this.expandedKeys.filter(item => item !== node[this.replaceFields.key])
213
- } else {
214
- this.expandedKeys.push(node[this.replaceFields.key])
215
- }
216
- },
217
- // 节点关闭
218
- nodeCollapse (node) {
219
- this.expandedKeys = this.expandedKeys.filter(item => item !== node[this.replaceFields.key])
220
- },
221
- highlightKeyword (label, keyword) {
222
- const maxLen = this.config.deepNodeMaxWidth
223
-
224
- if (!keyword) {
225
- return maxLen && label.length > maxLen ? label.substring(0, maxLen) + '...' : label
226
- }
227
-
228
- const regex = new RegExp(`(${keyword})`, 'gi')
229
- const match = label.match(regex)
230
-
231
- if (!match) {
232
- return maxLen && label.length > maxLen ? label.substring(0, maxLen) + '...' : label
233
- }
234
-
235
- if (!maxLen) {
236
- return label.replace(regex, '<span class="highlight">$1</span>')
237
- }
238
-
239
- const keywordIndex = label.indexOf(match[0])
240
- const start = Math.max(0, keywordIndex - Math.floor((maxLen - keyword.length) / 2))
241
- const end = Math.min(label.length, start + maxLen)
242
-
243
- let result = label.substring(start, end)
244
-
245
- if (start > 0) {
246
- result = '...' + result
247
- }
248
- if (end < label.length) {
249
- result = result + '...'
250
- }
251
- return result.replace(regex, '<span class="highlight">$1</span>')
252
- },
253
- executeStrFunction,
254
- onChange: debounce(function (e) {
255
- this.$refs.veTree.filter(e.target.value)
256
- }, 150),
257
- filterNode (value, data, node) {
258
- if (!value) return true
259
- if (data.label.indexOf(value) !== -1) {
260
- this.nodeExpand(node.data)
261
- return true
262
- }
263
- return false
264
- },
265
- nodeItemClick (e) {
266
- this.selectedNode = e
267
- },
268
- handleNodeClick (node) {
269
- this.nodeItemClick(node)
270
- this.$emit('itemChecked', node)
271
- },
272
- action (record, func) {
273
- this.$emit('action', record, record[this.replaceFields.key], null, func)
274
- },
275
- async btnFuncClick (index) {
276
- this.activeButtonIndex = Object.assign({}, this.activeButtonIndex, { [index]: !!!this.activeButtonIndex[index] })
277
- // 组织参数
278
- // 把activeButtonIndex.value groupType 相同的其他值改成 false
279
- Object.keys(this.activeButtonIndex).forEach((key) => {
280
- if (key != index && this.config.tabBtn[key].groupType === this.config.tabBtn[index].groupType) {
281
- this.activeButtonIndex[key] = false
282
- }
283
- })
284
- const param = {}
285
- // 循环执行已经激活的自定义方法
286
- Object.keys(this.activeButtonIndex).forEach((key) => {
287
- if (this.activeButtonIndex[key]) {
288
- const item = this.config.tabBtn[key]
289
- if (item.customFunction) {
290
- Object.assign(param, executeStrFunction(item.customFunction, [param]))
291
- }
292
- }
293
- })
294
- // 获取到 param 执行 getData
295
- await this.getData(param)
296
- },
297
- searchInTree (tree, keyword) {
298
- return tree.reduce((acc, node) => {
299
- if (node[this.replaceFields.title].includes(keyword)) {
300
- acc.push(node)
301
- } else if (node[this.replaceFields.children]) {
302
- const childResults = this.searchInTree(node[this.replaceFields.children], keyword)
303
- if (childResults.length > 0) {
304
- acc.push({
305
- ...node,
306
- children: childResults
307
- })
308
- }
309
- }
310
- return acc
311
- }, [])
312
- },
313
- handleCheckChange (data, data1) {
314
- // console.log(data, data1)
315
- // 获取最内层数据的 node
316
- // const deepestNodes = this.getDeepestNodes([data])
317
- // 获取选中的数据
318
- // const checkedKeys = deepestNodes.map(node => node[this.replaceFields.key])
319
- // console.log(this.$refs.veTree.getCheckedKeys())
320
- const checkedKeys = this.$refs.veTree.getCheckedKeys()
321
- const checkedNodes = this.$refs.veTree.getCheckedNodes()
322
- // console.log(t)
323
- // console.log(deepestNodes, checkedKeys)
324
- this.$emit('treeOnChecked', checkedKeys, checkedNodes, checkedKeys)
325
- },
326
- refresh () {
327
- this.getData(this.searchInfo)
328
- },
329
- reLoad () {
330
- this.getData(this.searchInfo)
331
- },
332
- async getData (param = {}) {
333
- this.spinning = true
334
- await runLogic(this.config.treeData.substring(6), Object.assign(param, {
335
- selectedId: this.$route.query.selected,
336
- orgId: this.currUser.orgid,
337
- userId: this.currUser.id,
338
- depId: this.currUser.f_department_id
339
- }), this.serviceName, this.env === 'dev').then(res => {
340
- this.localTreeData = res
341
- this.deepestNodes = this.getDeepestNodes(this.localTreeData)
342
- this.$nextTick(() => {
343
- if (this.searchInput) {
344
- this.$refs.veTree.filter(this.searchInput)
345
- }
346
- })
347
- }).catch(e => {
348
- this.$message.error('获取数据失败:' + e)
349
- }).finally(() => {
350
- this.spinning = false
351
- })
352
- },
353
- getDeepestNodes (treeData) {
354
- const deepestNodes = []
355
- const that = this
356
-
357
- function traverse (node) {
358
- if (!node[that.replaceFields.children] || node[that.replaceFields.children].length === 0) {
359
- deepestNodes.push(node)
360
- } else {
361
- node[that.replaceFields.children].forEach(child => traverse(child))
362
- }
363
- }
364
-
365
- treeData.forEach(node => traverse(node))
366
- return deepestNodes
367
- }
368
- },
369
- computed: {
370
- ...mapState('account', { currUser: 'user' }),
371
- heightStore () {
372
- if (this.config.search) {
373
- if (this.config.tabBtn && this.config.tabBtn.length > 0) {
374
- return ['7rem', 'calc(100vh - 200px - 7.6rem)']
375
- } else {
376
- return ['5rem', 'calc(100vh - 200px - 5.6rem)']
377
- }
378
- } else {
379
- if (this.config.tabBtn && this.config.tabBtn.length > 0) {
380
- return ['5rem', 'calc(100vh - 200px - 5rem)']
381
- } else {
382
- return ['3rem', 'calc(100vh - 200px - 3rem)']
383
- }
384
- }
385
- }
386
- }
387
- }
388
- </script>
389
- <style lang="less" scoped>
390
- .tree_title {
391
- background-color: #E0E5EB;
392
- border-radius: 8px 8px 0 0;
393
- }
394
-
395
- .selected {
396
- font-weight: bold; /* 加粗字体 */
397
- color: #1890ff;
398
- }
399
-
400
- .row-search {
401
- background-color: #E0E5EB;
402
-
403
- .content-search {
404
- background-color: rgb(224, 229, 235);
405
- height: 2.6rem;
406
- padding: 0 10px;
407
- display: flex;
408
- align-items: center;
409
- justify-content: center;
410
- border-top: 1px solid rgba(0, 0, 0, 0.05);
411
- margin: auto 0;
412
- }
413
- }
414
-
415
- .active-button {
416
- border-color: @primary-color !important;
417
- color: @primary-color !important;
418
- }
419
-
420
- .ant-btn:focus {
421
- color: rgba(0, 0, 0, 0.65);
422
- background-color: #fff;
423
- border-color: #d9d9d9
424
- }
425
-
426
- .tree_main {
427
- width: 100%;
428
- display: inline-block;
429
- overflow-y: auto;
430
- font-size: 15px;
431
-
432
- .custom-tree-node {
433
- flex: 1;
434
- cursor: pointer;
435
- }
436
-
437
- :deep(.highlight) {
438
- color: @primary-color !important;
439
- }
440
-
441
- :deep(.el-tree-node__content) {
442
- cursor: default;
443
- }
444
-
445
- :deep(.vue-recycle-scroller__item-wrapper) {
446
- overflow-x: auto;
447
- }
448
- }
449
-
450
- </style>
1
+ <template>
2
+ <div id="XTreeWarp">
3
+ <div class="tree_title" v-if="config.title">
4
+ <a-row style="font-size: medium;line-height: 3rem">
5
+ <a-col span="16" :offset="2">
6
+ <span>{{ config.title }}</span>
7
+ </a-col>
8
+ <a-col span="1" :offset="2" v-if="treeDisplaySwitch">
9
+ <a-icon
10
+ :type="treeDisplayConfig.showTree? 'caret-down':'caret-left'"
11
+ :style="{color: treeDisplayConfig.buttonColor}"
12
+ @click="treeDisplayConfig.showTree=!treeDisplayConfig.showTree"/>
13
+ </a-col>
14
+ </a-row>
15
+ </div>
16
+ <div v-show="!treeDisplaySwitch || treeDisplayConfig.showTree">
17
+ <a-row v-if="config.search" class="row-search">
18
+ <div class="content-search">
19
+ <a-input
20
+ placeholder="请输入搜索关键字"
21
+ v-model="searchInput"
22
+ @change="onChange">
23
+ <a-icon slot="prefix" type="search"/>
24
+ </a-input>
25
+ </div>
26
+ </a-row>
27
+ <a-row v-if="config.tabBtn && config.tabBtn.length > 0">
28
+ <div class="content-search" style="padding-top:7px;padding-left: 10px">
29
+ <a-space>
30
+ <a-button
31
+ v-for="(item,index) in config.tabBtn"
32
+ @click="btnFuncClick(index,item.customFunction)"
33
+ :class="{ 'active-button': activeButtonIndex[index] }"
34
+ :key="index">{{ item.name }}
35
+ </a-button>
36
+ </a-space>
37
+ </div>
38
+ </a-row>
39
+ <div
40
+ class="tree_main"
41
+ :style="{
42
+ maxHeight:heightStore[1]
43
+ }">
44
+ <a-spin :spinning="spinning">
45
+ <div class="ve-tree" :style="{height:heightStore[1]}">
46
+ <!-- 不使用虚拟滚动时只需去掉height参数即可 -->
47
+ <vue-easy-tree
48
+ ref="veTree"
49
+ node-key="value"
50
+ :height="heightStore[1]"
51
+ :show-checkbox="config.checkable"
52
+ :data="localTreeData"
53
+ :item-size="40"
54
+ :auto-expand-parent="true"
55
+ @check-change="handleCheckChange"
56
+ :default-expanded-keys="expandedKeys"
57
+ @node-expand="nodeExpand"
58
+ @node-collapse="nodeCollapse"
59
+ @node-click="handleNodeClick"
60
+ :filter-node-method="filterNode"
61
+ :props="props"
62
+ >
63
+ <span class="custom-tree-node" slot-scope="{ node,data }">
64
+ <span :class="{ 'selected': data === selectedNode }" @click="nodeItemClick(data)">
65
+ <a-tooltip placement="right" :title="node.label">
66
+ <a-icon
67
+ v-if="data.icon"
68
+ :style="{color: data.iconColor, marginRight: '5px'}"
69
+ :type="data.icon"/>
70
+ <span
71
+ v-html="highlightKeyword(node.label, searchInput)"></span>
72
+ <span v-if="countVisible">{{
73
+ data.hasOwnProperty('count') ? ' (' + data.count + ')' : ''
74
+ }}</span>
75
+ </a-tooltip>
76
+ </span>
77
+ <a-tooltip
78
+ :title="icon.title"
79
+ :key="icon.func"
80
+ v-for="icon in config.btn"
81
+ >
82
+ <a-icon
83
+ @click.stop="action(data, icon.func)"
84
+ v-if="executeStrFunction( icon.customFunction,[data])"
85
+ :type="icon.icon"
86
+ :style="{color:icon.color, marginLeft: '8px'}"></a-icon>
87
+ </a-tooltip>
88
+ </span>
89
+ </vue-easy-tree>
90
+ </div>
91
+ </a-spin>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </template>
96
+
97
+ <script>
98
+ // https://github.com/Junior125306/vue-easy-tree
99
+ import VueEasyTree from '@afwenming123/vue-easy-tree'
100
+ // 样式文件,可以根据需要自定义样式或主题
101
+ import '@afwenming123/vue-easy-tree/src/assets/index.min.css'
102
+ import { getConfigByNameAsync, runLogic } from '@vue2-client/services/api/common'
103
+ import { mapState } from 'vuex'
104
+ import { executeStrFunction } from '@vue2-client/utils/runEvalFunction'
105
+ import debounce from 'lodash.debounce'
106
+
107
+ export default {
108
+ props: {
109
+ configName: {
110
+ type: String,
111
+ required: false,
112
+ default: undefined
113
+ },
114
+ configValue: {
115
+ type: String,
116
+ required: false,
117
+ default: undefined
118
+ },
119
+ env: {
120
+ type: String,
121
+ default: 'prod'
122
+ },
123
+ treeData: {
124
+ type: Array,
125
+ default: () => []
126
+ },
127
+ // 配置所属命名空间
128
+ serviceName: {
129
+ type: String,
130
+ default: undefined
131
+ },
132
+ // 是否显示收起开关
133
+ treeDisplaySwitch: {
134
+ type: Boolean,
135
+ default: false
136
+ },
137
+ // 是否显示子级数量
138
+ countVisible: {
139
+ type: Boolean,
140
+ default: true
141
+ },
142
+ // 收起开关默认值设置
143
+ treeDisplayConfig: {
144
+ type: Object,
145
+ default: () => {
146
+ return {
147
+ showTree: true,
148
+ buttonColor: '#91d5ff'
149
+ }
150
+ }
151
+ }
152
+ },
153
+ data () {
154
+ return {
155
+ props: {
156
+ label: 'label',
157
+ children: 'children'
158
+ },
159
+ localTreeData: this.treeData,
160
+ config: {},
161
+ // 暂存选中的数据
162
+ expandedKeys: [],
163
+ // 是否加载中
164
+ spinning: false,
165
+ // 选中的 key
166
+ checkedKeys: [],
167
+ // 定义 tree 数据
168
+ data_treeData: [],
169
+ // 存储搜索结果的树数据
170
+ filteredTreeData: [],
171
+ // 定义最深一层的 数据
172
+ deepestNodes: [],
173
+ // 定义激活的按钮
174
+ activeButtonIndex: {},
175
+ // 是否全选
176
+ checkall: false,
177
+ // 选了但没有全选
178
+ indeterminate: false,
179
+ // 选择的节点
180
+ selectedNode: null,
181
+ // 暂存查询信息
182
+ searchInfo: {},
183
+ searchInput: '',
184
+ replaceFields: { children: 'children', title: 'label', key: 'value' }
185
+ }
186
+ },
187
+ components: {
188
+ VueEasyTree
189
+ },
190
+ watch: {
191
+ treeData (newVal) {
192
+ this.localTreeData = newVal
193
+ }
194
+ },
195
+ async created () {
196
+ if (this.configName) {
197
+ this.config = await getConfigByNameAsync(this.configName, this.serviceName, this.env === 'dev')
198
+ } else if (this.configValue) {
199
+ this.config = this.configValue
200
+ } else {
201
+ throw new DOMException('组件[XTreePro]需要传入configName或configValue')
202
+ }
203
+ this.replaceFields = this.config.replaceFields
204
+ if (this.config.treeData.indexOf('logic@') >= 0) {
205
+ // 如果数据源是 logic
206
+ await this.getData()
207
+ }
208
+ },
209
+ methods: {
210
+ // 节点展开暂存
211
+ nodeExpand (node) {
212
+ console.log('====需要展开节点', node, this.replaceFields.key)
213
+ if (this.expandedKeys.includes(node[this.replaceFields.key])) {
214
+ this.expandedKeys = this.expandedKeys.filter(item => item !== node[this.replaceFields.key])
215
+ } else {
216
+ this.expandedKeys.push(node[this.replaceFields.key])
217
+ }
218
+ },
219
+ // 节点关闭
220
+ nodeCollapse (node) {
221
+ this.expandedKeys = this.expandedKeys.filter(item => item !== node[this.replaceFields.key])
222
+ },
223
+ highlightKeyword (label, keyword) {
224
+ const maxLen = this.config.deepNodeMaxWidth
225
+
226
+ if (!keyword) {
227
+ return maxLen && label.length > maxLen ? label.substring(0, maxLen) + '...' : label
228
+ }
229
+
230
+ const regex = new RegExp(`(${keyword})`, 'gi')
231
+ const match = label.match(regex)
232
+
233
+ if (!match) {
234
+ return maxLen && label.length > maxLen ? label.substring(0, maxLen) + '...' : label
235
+ }
236
+
237
+ if (!maxLen) {
238
+ return label.replace(regex, '<span class="highlight">$1</span>')
239
+ }
240
+
241
+ const keywordIndex = label.indexOf(match[0])
242
+ const start = Math.max(0, keywordIndex - Math.floor((maxLen - keyword.length) / 2))
243
+ const end = Math.min(label.length, start + maxLen)
244
+
245
+ let result = label.substring(start, end)
246
+
247
+ if (start > 0) {
248
+ result = '...' + result
249
+ }
250
+ if (end < label.length) {
251
+ result = result + '...'
252
+ }
253
+ return result.replace(regex, '<span class="highlight">$1</span>')
254
+ },
255
+ executeStrFunction,
256
+ onChange: debounce(function (e) {
257
+ this.$refs.veTree.filter(e.target.value)
258
+ }, 150),
259
+ filterNode (value, data, node) {
260
+ if (!value) return true
261
+ if (data.label.indexOf(value) !== -1) {
262
+ this.nodeExpand(node.data)
263
+ return true
264
+ }
265
+ return false
266
+ },
267
+ nodeItemClick (e) {
268
+ this.selectedNode = e
269
+ },
270
+ handleNodeClick (node) {
271
+ this.nodeItemClick(node)
272
+ this.$emit('itemChecked', node)
273
+ },
274
+ action (record, func) {
275
+ this.$emit('action', record, record[this.replaceFields.key], null, func)
276
+ },
277
+ async btnFuncClick (index) {
278
+ this.activeButtonIndex = Object.assign({}, this.activeButtonIndex, { [index]: !!!this.activeButtonIndex[index] })
279
+ // 组织参数
280
+ // 把activeButtonIndex.value groupType 相同的其他值改成 false
281
+ Object.keys(this.activeButtonIndex).forEach((key) => {
282
+ if (key != index && this.config.tabBtn[key].groupType === this.config.tabBtn[index].groupType) {
283
+ this.activeButtonIndex[key] = false
284
+ }
285
+ })
286
+ const param = {}
287
+ // 循环执行已经激活的自定义方法
288
+ Object.keys(this.activeButtonIndex).forEach((key) => {
289
+ if (this.activeButtonIndex[key]) {
290
+ const item = this.config.tabBtn[key]
291
+ if (item.customFunction) {
292
+ Object.assign(param, executeStrFunction(item.customFunction, [param]))
293
+ }
294
+ }
295
+ })
296
+ // 获取到 param 执行 getData
297
+ await this.getData(param)
298
+ },
299
+ searchInTree (tree, keyword) {
300
+ return tree.reduce((acc, node) => {
301
+ if (node[this.replaceFields.title].includes(keyword)) {
302
+ acc.push(node)
303
+ } else if (node[this.replaceFields.children]) {
304
+ const childResults = this.searchInTree(node[this.replaceFields.children], keyword)
305
+ if (childResults.length > 0) {
306
+ acc.push({
307
+ ...node,
308
+ children: childResults
309
+ })
310
+ }
311
+ }
312
+ return acc
313
+ }, [])
314
+ },
315
+ handleCheckChange (data, data1) {
316
+ // console.log(data, data1)
317
+ // 获取最内层数据的 node
318
+ // const deepestNodes = this.getDeepestNodes([data])
319
+ // 获取选中的数据
320
+ // const checkedKeys = deepestNodes.map(node => node[this.replaceFields.key])
321
+ // console.log(this.$refs.veTree.getCheckedKeys())
322
+ const checkedKeys = this.$refs.veTree.getCheckedKeys()
323
+ const checkedNodes = this.$refs.veTree.getCheckedNodes()
324
+ // console.log(t)
325
+ // console.log(deepestNodes, checkedKeys)
326
+ this.$emit('treeOnChecked', checkedKeys, checkedNodes, checkedKeys)
327
+ },
328
+ refresh () {
329
+ this.getData(this.searchInfo)
330
+ },
331
+ reLoad () {
332
+ this.getData(this.searchInfo)
333
+ },
334
+ async getData (param = {}) {
335
+ this.spinning = true
336
+ await runLogic(this.config.treeData.substring(6), Object.assign(param, {
337
+ selectedId: this.$route.query.selected,
338
+ orgId: this.currUser.orgid,
339
+ userId: this.currUser.id,
340
+ depId: this.currUser.f_department_id
341
+ }), this.serviceName, this.env === 'dev').then(res => {
342
+ this.localTreeData = res
343
+ this.deepestNodes = this.getDeepestNodes(this.localTreeData)
344
+ this.$nextTick(() => {
345
+ if (this.searchInput) {
346
+ this.$refs.veTree.filter(this.searchInput)
347
+ }
348
+ })
349
+ }).catch(e => {
350
+ this.$message.error('获取数据失败:' + e)
351
+ }).finally(() => {
352
+ this.spinning = false
353
+ })
354
+ },
355
+ getDeepestNodes (treeData) {
356
+ const deepestNodes = []
357
+ const that = this
358
+
359
+ function traverse (node) {
360
+ if (!node[that.replaceFields.children] || node[that.replaceFields.children].length === 0) {
361
+ deepestNodes.push(node)
362
+ } else {
363
+ node[that.replaceFields.children].forEach(child => traverse(child))
364
+ }
365
+ }
366
+
367
+ treeData.forEach(node => traverse(node))
368
+ return deepestNodes
369
+ }
370
+ },
371
+ computed: {
372
+ ...mapState('account', { currUser: 'user' }),
373
+ heightStore () {
374
+ if (this.config.search) {
375
+ if (this.config.tabBtn && this.config.tabBtn.length > 0) {
376
+ return ['7rem', 'calc(100vh - 200px - 7.6rem)']
377
+ } else {
378
+ return ['5rem', 'calc(100vh - 200px - 5.6rem)']
379
+ }
380
+ } else {
381
+ if (this.config.tabBtn && this.config.tabBtn.length > 0) {
382
+ return ['5rem', 'calc(100vh - 200px - 5rem)']
383
+ } else {
384
+ return ['3rem', 'calc(100vh - 200px - 3rem)']
385
+ }
386
+ }
387
+ }
388
+ }
389
+ }
390
+ </script>
391
+ <style lang="less" scoped>
392
+ .tree_title {
393
+ background-color: #E0E5EB;
394
+ border-radius: 8px 8px 0 0;
395
+ }
396
+
397
+ .selected {
398
+ font-weight: bold; /* 加粗字体 */
399
+ color: #1890ff;
400
+ }
401
+
402
+ .row-search {
403
+ background-color: #E0E5EB;
404
+
405
+ .content-search {
406
+ background-color: rgb(224, 229, 235);
407
+ height: 2.6rem;
408
+ padding: 0 10px;
409
+ display: flex;
410
+ align-items: center;
411
+ justify-content: center;
412
+ border-top: 1px solid rgba(0, 0, 0, 0.05);
413
+ margin: auto 0;
414
+ }
415
+ }
416
+
417
+ .active-button {
418
+ border-color: @primary-color !important;
419
+ color: @primary-color !important;
420
+ }
421
+
422
+ .ant-btn:focus {
423
+ color: rgba(0, 0, 0, 0.65);
424
+ background-color: #fff;
425
+ border-color: #d9d9d9
426
+ }
427
+
428
+ .tree_main {
429
+ width: 100%;
430
+ display: inline-block;
431
+ overflow-y: auto;
432
+ font-size: 15px;
433
+
434
+ .custom-tree-node {
435
+ flex: 1;
436
+ cursor: pointer;
437
+ }
438
+
439
+ :deep(.highlight) {
440
+ color: @primary-color !important;
441
+ }
442
+
443
+ :deep(.el-tree-node__content) {
444
+ cursor: default;
445
+ }
446
+
447
+ :deep(.vue-recycle-scroller__item-wrapper) {
448
+ overflow-x: auto;
449
+ }
450
+ }
451
+
452
+ </style>