vue2-client 1.15.84 → 1.15.86

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/.claude/settings.local.json +12 -0
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.development +1 -1
  5. package/.env.iot +19 -19
  6. package/.env.message +19 -19
  7. package/.env.revenue +19 -19
  8. package/.env.runtime +19 -19
  9. package/.eslintrc.json +5 -5
  10. package/CLAUDE.md +89 -89
  11. package/README.md +65 -65
  12. package/babel.config.js +21 -21
  13. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  14. package/docs/notice.md +22 -22
  15. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -179
  16. package/jest.config.js +22 -22
  17. package/package.json +111 -111
  18. package/src/App.vue +196 -196
  19. package/src/ReportView.js +13 -13
  20. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  21. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  22. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  23. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  24. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  25. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  26. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  27. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  28. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  29. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  30. package/src/base-client/components/common/XAddForm/index.js +3 -3
  31. package/src/base-client/components/common/XAddForm/index.md +61 -61
  32. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  33. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -40
  34. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  35. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  36. package/src/base-client/components/common/XBadge/index.js +3 -3
  37. package/src/base-client/components/common/XBadge/index.md +39 -39
  38. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  39. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  40. package/src/base-client/components/common/XCalendar/index.md +284 -284
  41. package/src/base-client/components/common/XCard/index.js +3 -3
  42. package/src/base-client/components/common/XCard/index.md +43 -43
  43. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  44. package/src/base-client/components/common/XCollapse/XCollapse.vue +354 -354
  45. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  46. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  47. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  48. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  49. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  50. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  51. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  52. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  53. package/src/base-client/components/common/XForm/XFormItem.vue +1474 -1390
  54. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  55. package/src/base-client/components/common/XForm/demo.vue +105 -105
  56. package/src/base-client/components/common/XForm/index.js +3 -3
  57. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  58. package/src/base-client/components/common/XFormCol/index.js +3 -3
  59. package/src/base-client/components/common/XFormCol/index.md +35 -35
  60. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  61. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  62. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  63. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  64. package/src/base-client/components/common/XFormTable/index.js +3 -3
  65. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  66. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  67. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  68. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  69. package/src/base-client/components/common/XInput/index.js +3 -3
  70. package/src/base-client/components/common/XInput/index.md +97 -97
  71. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  72. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  73. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  74. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  75. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  76. package/src/base-client/components/common/XRate/demo.vue +102 -102
  77. package/src/base-client/components/common/XRate/index.vue +149 -149
  78. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  79. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  80. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  81. package/src/base-client/components/common/XReport/index.md +103 -103
  82. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  83. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  84. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  85. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  86. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +723 -723
  87. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  88. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  89. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  90. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  91. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  92. package/src/base-client/components/common/XTable/index.js +3 -3
  93. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  94. package/src/base-client/components/common/XTimeline/index.md +191 -191
  95. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  96. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  97. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  98. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  99. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  100. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  101. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  102. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  103. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -629
  104. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  105. package/src/base-client/components/his/XList/XList.vue +495 -495
  106. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  107. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  108. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  109. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  110. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  111. package/src/base-client/components/his/XRadio/index.md +234 -234
  112. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  113. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  114. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  115. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  116. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  117. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  118. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  119. package/src/base-client/components/his/XTitle/README.md +113 -113
  120. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  121. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  122. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  123. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  124. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  125. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  126. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  127. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  128. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  129. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  130. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  131. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  132. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  133. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  134. package/src/base-client/components/layout/XPageView/index.js +2 -2
  135. package/src/base-client/components/layout/XPageView/index.md +96 -96
  136. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  137. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  138. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  139. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  140. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  141. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  142. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  143. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  144. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  145. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  146. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  147. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  148. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  149. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  150. package/src/base-client/plugins/AppData.js +126 -126
  151. package/src/base-client/plugins/PagedList.js +177 -177
  152. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -0
  153. package/src/base-client/plugins/authority-plugin.js +167 -167
  154. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  155. package/src/base-client/plugins/i18n-extend.js +32 -32
  156. package/src/base-client/plugins/moment.js +8 -8
  157. package/src/base-client/plugins/selectValueTypeHelper.js +281 -0
  158. package/src/bootstrap.js +51 -51
  159. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  160. package/src/components/Ellipsis/index.js +3 -3
  161. package/src/components/Ellipsis/index.md +38 -38
  162. package/src/components/FileImageItem/FileItem.vue +320 -320
  163. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  164. package/src/components/FileImageItem/ImageItem.vue +107 -107
  165. package/src/components/FileImageItem/index.js +4 -4
  166. package/src/components/FilePreview/FilePreview.vue +181 -181
  167. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  168. package/src/components/FilePreview/index.js +3 -3
  169. package/src/components/HeightScanner/index.vue +615 -615
  170. package/src/components/STable/README.md +341 -341
  171. package/src/components/STable/index.js +558 -558
  172. package/src/components/TableSetting/TableSetting.vue +143 -143
  173. package/src/components/TableSetting/index.js +3 -3
  174. package/src/components/Trend/Trend.vue +41 -41
  175. package/src/components/Trend/index.js +3 -3
  176. package/src/components/Trend/index.less +41 -41
  177. package/src/components/Trend/index.md +45 -45
  178. package/src/components/_util/util.js +46 -46
  179. package/src/components/cache/AKeepAlive.js +179 -179
  180. package/src/components/exception/typeConfig.js +19 -19
  181. package/src/components/form/FormRow.vue +52 -52
  182. package/src/components/index.less +5 -5
  183. package/src/components/menu/Contextmenu.vue +84 -84
  184. package/src/components/menu/index.less +38 -38
  185. package/src/components/page/header/PageHeader.vue +64 -64
  186. package/src/components/page/header/index.less +40 -40
  187. package/src/components/result/Result.vue +77 -77
  188. package/src/components/setting/SettingItem.vue +26 -26
  189. package/src/components/setting/i18n.js +117 -117
  190. package/src/components/table/StandardTable.vue +141 -141
  191. package/src/components/table/advance/ActionColumns.vue +158 -158
  192. package/src/components/table/advance/ActionSize.vue +45 -45
  193. package/src/components/table/advance/AdvanceTable.vue +275 -275
  194. package/src/components/table/advance/SearchArea.vue +355 -355
  195. package/src/components/table/advance/index.js +2 -2
  196. package/src/components/table/api/ApiTable.vue +50 -50
  197. package/src/components/task/TaskGroup.vue +80 -80
  198. package/src/components/task/TaskItem.vue +26 -26
  199. package/src/components/tool/AvatarList.vue +68 -68
  200. package/src/components/tool/DetailList.vue +157 -157
  201. package/src/components/tool/Drawer.vue +142 -142
  202. package/src/components/tool/FooterToolBar.vue +30 -30
  203. package/src/components/tool/HeadInfo.vue +35 -35
  204. package/src/components/tool/TagSelect.vue +83 -83
  205. package/src/components/tool/TagSelectOption.vue +33 -33
  206. package/src/components/transition/PageToggleTransition.vue +97 -97
  207. package/src/config/default/admin.config.js +18 -18
  208. package/src/config/default/animate.config.js +21 -21
  209. package/src/config/default/index.js +6 -6
  210. package/src/config/index.js +3 -3
  211. package/src/config/replacer/index.js +10 -10
  212. package/src/config/replacer/resolve.config.js +67 -67
  213. package/src/expression/ExpressionRunner.js +26 -26
  214. package/src/expression/TestExpression.js +509 -509
  215. package/src/expression/core/Delegate.js +115 -115
  216. package/src/expression/core/Expression.js +1358 -1358
  217. package/src/expression/core/Program.js +932 -932
  218. package/src/expression/core/Token.js +27 -27
  219. package/src/expression/enums/ExpressionType.js +81 -81
  220. package/src/expression/enums/TokenType.js +11 -11
  221. package/src/expression/exception/BreakWayException.js +2 -2
  222. package/src/expression/exception/ContinueWayException.js +2 -2
  223. package/src/expression/exception/ExpressionException.js +28 -28
  224. package/src/expression/exception/ReturnWayException.js +14 -14
  225. package/src/expression/exception/ServiceException.js +22 -22
  226. package/src/expression/instances/LogicConsole.js +44 -44
  227. package/src/expression/ts/ExpressionRunner.ts +28 -28
  228. package/src/expression/ts/TestExpression.ts +509 -509
  229. package/src/expression/ts/core/Delegate.ts +114 -114
  230. package/src/expression/ts/core/Expression.ts +1309 -1309
  231. package/src/expression/ts/core/Program.ts +950 -950
  232. package/src/expression/ts/core/Token.ts +29 -29
  233. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  234. package/src/expression/ts/enums/TokenType.ts +13 -13
  235. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  236. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  237. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  238. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  239. package/src/expression/ts/exception/ServiceException.ts +22 -22
  240. package/src/expression/ts/instances/JSONArray.ts +48 -48
  241. package/src/expression/ts/instances/JSONObject.ts +109 -109
  242. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  243. package/src/layouts/AdminLayout.vue +176 -176
  244. package/src/layouts/BlankView.vue +79 -79
  245. package/src/layouts/ComponentLayoutOne.vue +47 -47
  246. package/src/layouts/GridView.vue +43 -43
  247. package/src/layouts/PageView.vue +55 -55
  248. package/src/layouts/footer/PageFooter.vue +49 -49
  249. package/src/layouts/header/HeaderAvatar.vue +64 -64
  250. package/src/layouts/header/HeaderSearch.vue +67 -67
  251. package/src/layouts/header/index.less +92 -92
  252. package/src/layouts/tabs/TabsView.vue +383 -383
  253. package/src/layouts/tabs/i18n.js +25 -25
  254. package/src/layouts/tabs/index.js +2 -2
  255. package/src/logic/LogicRunner.js +62 -62
  256. package/src/logic/TestLogic.js +13 -13
  257. package/src/logic/plugins/common/DateTools.js +35 -35
  258. package/src/logic/plugins/common/VueTools.js +30 -30
  259. package/src/logic/plugins/index.js +7 -7
  260. package/src/logic/ts/LogicRunner.ts +67 -67
  261. package/src/logic/ts/TestLogic.ts +13 -13
  262. package/src/main.js +33 -33
  263. package/src/mixins/formValidationMixin.js +46 -46
  264. package/src/mock/common/activityData.js +32 -32
  265. package/src/mock/common/index.js +89 -89
  266. package/src/mock/common/reportData.js +20 -20
  267. package/src/mock/common/tableData.js +118 -118
  268. package/src/mock/index.js +12 -12
  269. package/src/mock/project/index.js +17 -17
  270. package/src/mock/user/current.js +13 -13
  271. package/src/mock/user/login.js +39 -39
  272. package/src/mock/user/routes.js +61 -61
  273. package/src/mock/workplace/index.js +15 -15
  274. package/src/pages/LogicCallExample/index.vue +46 -46
  275. package/src/pages/ReportGrid/index.vue +76 -76
  276. package/src/pages/ReportView.vue +50 -50
  277. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  278. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  279. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  280. package/src/pages/WorkflowDetail/WorkflowDetail.vue +391 -391
  281. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  282. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  283. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1765
  284. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  285. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  287. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  288. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  289. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  290. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  291. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  292. package/src/pages/XPageViewExample/index.vue +149 -149
  293. package/src/pages/addressSelect/addressDemo.vue +24 -24
  294. package/src/pages/addressSelect/index.vue +270 -270
  295. package/src/pages/dashboard/workplace/i18n.js +40 -40
  296. package/src/pages/dashboard/workplace/index.js +2 -2
  297. package/src/pages/dashboard/workplace/index.less +59 -59
  298. package/src/pages/exception/403.vue +21 -21
  299. package/src/pages/exception/404.vue +24 -24
  300. package/src/pages/exception/500.vue +21 -21
  301. package/src/pages/login/index.js +2 -2
  302. package/src/pages/report/ReportTableHome.vue +28 -28
  303. package/src/pages/resourceManage/depListManage.vue +23 -23
  304. package/src/pages/resourceManage/funListManage.vue +23 -23
  305. package/src/pages/resourceManage/index.js +15 -15
  306. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  307. package/src/pages/resourceManage/roleListManage.vue +23 -23
  308. package/src/pages/resourceManage/staffListManage.vue +23 -23
  309. package/src/pages/system/file/Info.vue +56 -56
  310. package/src/pages/system/file/index.vue +317 -317
  311. package/src/pages/system/settings/index.vue +126 -126
  312. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  313. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  314. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  315. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  316. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  317. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  318. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  319. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  320. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  321. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  322. package/src/pages/userInfoDetailManage/index.vue +290 -290
  323. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  324. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  325. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  326. package/src/plugins/HiPrintPlugin.js +164 -164
  327. package/src/router/async/router.map.js +126 -126
  328. package/src/router/guards.js +262 -262
  329. package/src/router/i18n.js +57 -57
  330. package/src/router.js +17 -17
  331. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  332. package/src/services/api/LogDetailsViewApi.js +10 -10
  333. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  334. package/src/services/api/logininfor/index.js +6 -6
  335. package/src/services/api/manage.js +8 -8
  336. package/src/services/api/restTools.js +215 -215
  337. package/src/services/api/workFlow.js +57 -57
  338. package/src/services/apiService.js +16 -16
  339. package/src/services/dataSource.js +12 -12
  340. package/src/services/index.js +7 -7
  341. package/src/services/user.js +92 -92
  342. package/src/services/v3Api.js +116 -116
  343. package/src/store/index.js +5 -5
  344. package/src/store/mutation-types.js +4 -4
  345. package/src/theme/antd/ant-menu.less +2 -2
  346. package/src/theme/antd/ant-message.less +3 -3
  347. package/src/theme/antd/ant-table.less +22 -22
  348. package/src/theme/antd/ant-time-picker.less +3 -3
  349. package/src/theme/antd/index.less +3 -3
  350. package/src/theme/default/color.less +43 -43
  351. package/src/theme/default/index.less +3 -3
  352. package/src/theme/default/nprogress.less +76 -76
  353. package/src/theme/global.less +279 -279
  354. package/src/theme/index.less +5 -5
  355. package/src/theme/reportTable.less +58 -58
  356. package/src/theme/theme.less +1 -1
  357. package/src/utils/EncryptUtil.js +162 -162
  358. package/src/utils/Objects.js +25 -25
  359. package/src/utils/axios-interceptors.js +100 -100
  360. package/src/utils/colors.js +107 -107
  361. package/src/utils/common.js +10 -10
  362. package/src/utils/excel/Blob.js +180 -180
  363. package/src/utils/excel/Export2Excel.js +141 -141
  364. package/src/utils/filter.js +21 -21
  365. package/src/utils/i18n.js +80 -80
  366. package/src/utils/indexedDB.js +549 -549
  367. package/src/utils/microAppUtils.js +49 -49
  368. package/src/utils/request.js +395 -395
  369. package/src/utils/routerUtil.js +553 -553
  370. package/src/utils/themeUtil.js +100 -100
  371. package/test/Tree.spec.js +168 -168
  372. package/test/myDialog.spec.js +47 -47
  373. package/test/request.test.js +17 -17
  374. package/test/util.test.js +53 -53
  375. package/test/v3Api.test.js +1984 -1984
  376. package/tests/unit/ReportTable.spec.js +16 -16
  377. package/vue.config.js +222 -222
@@ -1,452 +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="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>
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>