vue2-client 1.15.34 → 1.15.35

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 (691) hide show
  1. package/.cursorrules +19 -19
  2. package/.editorconfig +9 -9
  3. package/.env +20 -20
  4. package/.env.apply +19 -19
  5. package/.env.development +1 -1
  6. package/.env.gaslink +19 -19
  7. package/.env.his +19 -19
  8. package/.env.iot +19 -19
  9. package/.env.liuli +20 -20
  10. package/.env.message +19 -19
  11. package/.env.revenue +19 -19
  12. package/.env.runtime +19 -19
  13. package/.env.scada +19 -19
  14. package/.eslintrc.js +90 -90
  15. package/.eslintrc.json +5 -5
  16. package/CHANGELOG.md +824 -824
  17. package/CLAUDE.md +89 -89
  18. package/Components.md +60 -60
  19. package/README.md +65 -65
  20. package/babel.config.js +21 -21
  21. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +45 -45
  22. package/docs/LowCode/lowcode.md +155 -155
  23. package/docs/LowCode/lowcodeForDeveloper.md +230 -230
  24. package/docs/index.md +30 -30
  25. package/docs/notice.md +22 -22
  26. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +177 -177
  27. package/index.js +31 -31
  28. package/jest-transform-stub.js +8 -8
  29. package/jest.config.js +22 -22
  30. package/jest.setup.js +7 -7
  31. package/jsconfig.json +19 -19
  32. package/package.json +110 -110
  33. package/public/his/editor/editor.html +51 -51
  34. package/public/his/editor/mock/bind_data.html +779 -779
  35. package/public/his/editor/mock/data_table.html +40 -40
  36. package/public/his/editor/mock/sign.html +75 -75
  37. package/public/his/editor/vender/JsBarcode.all.js +3669 -3669
  38. package/public/his/editor/vender/date97/My97DatePicker.htm +65 -65
  39. package/public/his/editor/vender/date97/WdatePicker.js +677 -677
  40. package/public/his/editor/vender/date97/calendar.js +4 -4
  41. package/public/his/editor/vender/date97/lang/en.js +13 -13
  42. package/public/his/editor/vender/date97/lang/zh-cn.js +13 -13
  43. package/public/his/editor/vender/date97/lang/zh-tw.js +13 -13
  44. package/public/his/editor/vender/date97/skin/WdatePicker.css +10 -10
  45. package/public/his/editor/vender/date97/skin/default/datepicker.css +328 -328
  46. package/public/his/editor/vender/date97/skin/ext/datepicker.css +308 -308
  47. package/public/his/editor/vender/date97/skin/whyGreen/datepicker.css +255 -255
  48. package/public/his/editor/vender/diff.js +1627 -1627
  49. package/public/his/editor/vender/editor.js +1 -1
  50. package/public/his/editor/vender/fabric.js +31187 -31187
  51. package/public/his/editor/vender/jquery/jquery.base64.js +190 -190
  52. package/public/his/editor/vender/jquery/jquery.js +10872 -10872
  53. package/public/his/editor/vender/jquery/jquery.print.js +255 -255
  54. package/public/his/editor/vender/jquery/zTreeStyle/zTreeStyle.css +96 -96
  55. package/public/his/editor/vender/mui/mui.min.css +4 -4
  56. package/public/his/editor/vender/mui/mui.min.js +5 -5
  57. package/public/his/editor/vender/mui/mui.picker.min.css +6 -6
  58. package/public/his/editor/vender/mui/mui.picker.min.js +6 -6
  59. package/public/his/editor/vender/qrcode.js +7 -7
  60. package/public/his/editor/vender/requirejs/require.js +2145 -2145
  61. package/public/his/editor/vender/signature/jSignature.CompressorSVG.js +518 -518
  62. package/public/his/editor/vender/signature/jSignature.UndoButton.js +164 -164
  63. package/public/his/editor/vender/signature/jSignature.js +1486 -1486
  64. package/public/his/editor/vender/validator.js +5094 -5094
  65. package/public/his/editor/vender/weui/weui.css +5659 -5659
  66. package/public/his/editor/vender/weui/weui.min.css +4 -4
  67. package/public/his/editor/vender/weui/weui.min.js +11 -11
  68. package/public/index.html +27 -27
  69. package/src/App.vue +196 -196
  70. package/src/ReportView.js +13 -13
  71. package/src/assets/img/querySlotDemo.svg +15 -15
  72. package/src/assets/svg/badtwo.svg +1 -1
  73. package/src/assets/svg/goodtwo.svg +1 -1
  74. package/src/base-client/components/AI/AskAiBtn.vue +136 -136
  75. package/src/base-client/components/AI/demo.vue +31 -31
  76. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  77. package/src/base-client/components/common/AddressSearchCombobox/IcMapIcon.vue +16 -16
  78. package/src/base-client/components/common/AddressSearchCombobox/demo.vue +36 -36
  79. package/src/base-client/components/common/AddressSearchCombobox/ic_map.svg +6 -6
  80. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  81. package/src/base-client/components/common/AmapMarker/AmapPointRendering.vue +120 -120
  82. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  83. package/src/base-client/components/common/CitySelect/CitySelect.vue +365 -365
  84. package/src/base-client/components/common/CitySelect/index.js +3 -3
  85. package/src/base-client/components/common/CitySelect/index.md +109 -109
  86. package/src/base-client/components/common/CreateQuery/CreateQuery.vue +669 -669
  87. package/src/base-client/components/common/CreateQuery/CreateQueryItem.vue +1014 -1014
  88. package/src/base-client/components/common/CreateQuery/index.js +3 -3
  89. package/src/base-client/components/common/CreateQuery/index.md +42 -42
  90. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQuery.vue +452 -452
  91. package/src/base-client/components/common/CreateSimpleFormQuery/CreateSimpleFormQueryItem.vue +511 -511
  92. package/src/base-client/components/common/CreateSimpleFormQuery/index.js +3 -3
  93. package/src/base-client/components/common/CreateSimpleFormQuery/index.md +42 -42
  94. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  95. package/src/base-client/components/common/FormGroupEdit/index.js +3 -3
  96. package/src/base-client/components/common/FormGroupEdit/index.md +43 -43
  97. package/src/base-client/components/common/FormGroupQuery/FormGroupQuery.vue +166 -166
  98. package/src/base-client/components/common/FormGroupQuery/index.js +3 -3
  99. package/src/base-client/components/common/FormGroupQuery/index.md +43 -43
  100. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  101. package/src/base-client/components/common/JSONToTree/jsontotree.vue +271 -271
  102. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorModal.vue +108 -108
  103. package/src/base-client/components/common/LowCodeComponent/LowCodeEditorPanel.vue +413 -413
  104. package/src/base-client/components/common/LowCodeComponent/LowCodePageOrganization.vue +502 -502
  105. package/src/base-client/components/common/LowCodeComponent/LowCodeRender.vue +728 -728
  106. package/src/base-client/components/common/LowCodeComponent/LowCodeRenderEnter.vue +29 -29
  107. package/src/base-client/components/common/LowCodeComponent/LowCodeUIStore.vue +219 -219
  108. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeAddPageModal.vue +117 -117
  109. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeCustomJSModal.vue +80 -80
  110. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeEventEditorModal.vue +398 -398
  111. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLifeCycleModal.vue +65 -65
  112. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicCallbackModal.vue +64 -64
  113. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeLogicParamModal.vue +73 -73
  114. package/src/base-client/components/common/LowCodeComponent/modal/lowCodeRunFunctionParamModal.vue +76 -76
  115. package/src/base-client/components/common/PersonSetting/PersonSetting.vue +208 -208
  116. package/src/base-client/components/common/PersonSetting/index.js +3 -3
  117. package/src/base-client/components/common/Recording/Recording.vue +243 -243
  118. package/src/base-client/components/common/Recording/index.js +3 -3
  119. package/src/base-client/components/common/Tree/Tree.vue +149 -149
  120. package/src/base-client/components/common/Tree/index.js +2 -2
  121. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  122. package/src/base-client/components/common/Upload/index.js +3 -3
  123. package/src/base-client/components/common/XAddForm/XAddForm.vue +113 -113
  124. package/src/base-client/components/common/XAddForm/index.js +3 -3
  125. package/src/base-client/components/common/XAddForm/index.md +61 -61
  126. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  127. package/src/base-client/components/common/XAddNativeForm/demo.vue +40 -40
  128. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  129. package/src/base-client/components/common/XAddNativeForm/index.md +146 -146
  130. package/src/base-client/components/common/XAddNativeFormOA/XAddNativeFormOA.vue +303 -303
  131. package/src/base-client/components/common/XAddNativeFormOA/index.js +3 -3
  132. package/src/base-client/components/common/XAddNativeFormOA/index.md +146 -146
  133. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  134. package/src/base-client/components/common/XAddReport/index.js +3 -3
  135. package/src/base-client/components/common/XAddReport/index.md +56 -56
  136. package/src/base-client/components/common/XBadge/XBadge.vue +94 -94
  137. package/src/base-client/components/common/XBadge/index.js +3 -3
  138. package/src/base-client/components/common/XBadge/index.md +39 -39
  139. package/src/base-client/components/common/XButtons/XButtonDemo.vue +28 -28
  140. package/src/base-client/components/common/XButtons/XButtons.vue +71 -71
  141. package/src/base-client/components/common/XButtons/index.js +3 -3
  142. package/src/base-client/components/common/XButtons/index.md +61 -61
  143. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  144. package/src/base-client/components/common/XCalendar/index.md +284 -284
  145. package/src/base-client/components/common/XCard/XCard.vue +64 -64
  146. package/src/base-client/components/common/XCard/index.js +3 -3
  147. package/src/base-client/components/common/XCard/index.md +43 -43
  148. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  149. package/src/base-client/components/common/XCheckList/XCheckList.vue +106 -106
  150. package/src/base-client/components/common/XCheckList/XCheckListDemo.vue +41 -41
  151. package/src/base-client/components/common/XCollapse/XCollapse.vue +253 -253
  152. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  153. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  154. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  155. package/src/base-client/components/common/XDataCard/index.js +3 -3
  156. package/src/base-client/components/common/XDataCard/index.md +1 -1
  157. package/src/base-client/components/common/XDataDrawer/XDataDrawer.vue +180 -180
  158. package/src/base-client/components/common/XDataDrawer/index.js +3 -3
  159. package/src/base-client/components/common/XDataDrawer/index.md +41 -41
  160. package/src/base-client/components/common/XDatePicker/demo.vue +153 -153
  161. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  162. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  163. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  164. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  165. package/src/base-client/components/common/XDescriptions/index.js +3 -3
  166. package/src/base-client/components/common/XDescriptions/index.md +83 -83
  167. package/src/base-client/components/common/XDetailsView/XDetailsView.vue +238 -238
  168. package/src/base-client/components/common/XDetailsView/index.js +3 -3
  169. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  170. package/src/base-client/components/common/XForm/XFormItem.vue +1342 -1342
  171. package/src/base-client/components/common/XForm/XStatusButton.vue +54 -54
  172. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  173. package/src/base-client/components/common/XForm/demo.vue +105 -105
  174. package/src/base-client/components/common/XForm/index.js +3 -3
  175. package/src/base-client/components/common/XForm/index.md +178 -178
  176. package/src/base-client/components/common/XForm/itemComponent/XClickChangeBtn/index.vue +49 -49
  177. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  178. package/src/base-client/components/common/XFormCol/index.js +3 -3
  179. package/src/base-client/components/common/XFormCol/index.md +35 -35
  180. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  181. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  182. package/src/base-client/components/common/XFormGroup/index.js +3 -3
  183. package/src/base-client/components/common/XFormGroup/index.md +38 -38
  184. package/src/base-client/components/common/XFormGroupDetails/XFormGroupDetails.vue +72 -72
  185. package/src/base-client/components/common/XFormGroupDetails/index.js +3 -3
  186. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  187. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  188. package/src/base-client/components/common/XFormTable/index.js +3 -3
  189. package/src/base-client/components/common/XFormTable/index.md +92 -92
  190. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  191. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  192. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  193. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  194. package/src/base-client/components/common/XInput/index.js +3 -3
  195. package/src/base-client/components/common/XInput/index.md +97 -97
  196. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  197. package/src/base-client/components/common/XLabelSelect/XLabelSelect.vue +110 -110
  198. package/src/base-client/components/common/XLabelSelect/XLabelSelectDemo.vue +35 -35
  199. package/src/base-client/components/common/XLicensePlate/XLicensePlate.vue +193 -193
  200. package/src/base-client/components/common/XLicensePlate/XLicensePlateDemo.vue +48 -48
  201. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  202. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  203. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  204. package/src/base-client/components/common/XPrint/OpenInvoice.vue +21 -21
  205. package/src/base-client/components/common/XPrint/PrintBill.vue +304 -304
  206. package/src/base-client/components/common/XPrint/PrintHtml.js +98 -98
  207. package/src/base-client/components/common/XPrint/css/hiPrintCss.js +359 -359
  208. package/src/base-client/components/common/XPrint/css/lodopCss.js +26 -26
  209. package/src/base-client/components/common/XPrint/css/print-lock.css +351 -351
  210. package/src/base-client/components/common/XPrint/index.vue +97 -97
  211. package/src/base-client/components/common/XRate/demo.vue +102 -102
  212. package/src/base-client/components/common/XRate/index.vue +149 -149
  213. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  214. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  215. package/src/base-client/components/common/XReport/XReportDesign.vue +463 -463
  216. package/src/base-client/components/common/XReport/XReportJsonRender.vue +381 -381
  217. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  218. package/src/base-client/components/common/XReport/index.js +3 -3
  219. package/src/base-client/components/common/XReport/index.md +103 -103
  220. package/src/base-client/components/common/XReport/print.js +186 -186
  221. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  222. package/src/base-client/components/common/XReportDrawer/index.js +3 -3
  223. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  224. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  225. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  226. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +731 -731
  227. package/src/base-client/components/common/XReportGrid/index.js +3 -3
  228. package/src/base-client/components/common/XReportGrid/index.md +44 -44
  229. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  230. package/src/base-client/components/common/XReportSlot/XReportSlot.vue +110 -110
  231. package/src/base-client/components/common/XReportSlot/index.js +3 -3
  232. package/src/base-client/components/common/XReportSlot/index.md +48 -48
  233. package/src/base-client/components/common/XSimpleDescriptions/XSimpleDescriptions.vue +166 -166
  234. package/src/base-client/components/common/XSimpleDescriptions/index.js +3 -3
  235. package/src/base-client/components/common/XSimpleDescriptions/index.md +7 -7
  236. package/src/base-client/components/common/XStepView/XStepView.vue +252 -252
  237. package/src/base-client/components/common/XStepView/index.js +3 -3
  238. package/src/base-client/components/common/XStepView/index.md +31 -31
  239. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  240. package/src/base-client/components/common/XTab/XTabDemo.vue +22 -22
  241. package/src/base-client/components/common/XTab/index.js +3 -3
  242. package/src/base-client/components/common/XTable/CustomFuncCel.vue +51 -51
  243. package/src/base-client/components/common/XTable/ExportExcel.vue +282 -282
  244. package/src/base-client/components/common/XTable/TableCellRenderer.vue +161 -161
  245. package/src/base-client/components/common/XTable/XTable.vue +1600 -1600
  246. package/src/base-client/components/common/XTable/XTableWrapper.vue +584 -584
  247. package/src/base-client/components/common/XTable/index.js +3 -3
  248. package/src/base-client/components/common/XTable/index.md +255 -255
  249. package/src/base-client/components/common/XTagGroup/index.vue +52 -52
  250. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  251. package/src/base-client/components/common/XTimeline/index.md +191 -191
  252. package/src/base-client/components/common/XTree/XTree.vue +424 -424
  253. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  254. package/src/base-client/components/common/XTree/index.js +3 -3
  255. package/src/base-client/components/common/XTree/index.md +36 -36
  256. package/src/base-client/components/common/XTreeOne/XTreeOne.vue +113 -113
  257. package/src/base-client/components/common/XTreeOne/XTreeOnePro.vue +128 -128
  258. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  259. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  260. package/src/base-client/components/common/richTextModal/index.vue +56 -56
  261. package/src/base-client/components/common/richTextModal/richDemo.vue +48 -48
  262. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  263. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  264. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  265. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  266. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  267. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +457 -457
  268. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  269. package/src/base-client/components/his/XHisEditor/index.js +3 -3
  270. package/src/base-client/components/his/XList/XList.vue +306 -306
  271. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  272. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +89 -89
  273. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  274. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +252 -252
  275. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  276. package/src/base-client/components/his/XRadio/index.md +234 -234
  277. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  278. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  279. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  280. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  281. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  282. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  283. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  284. package/src/base-client/components/his/XTitle/README.md +113 -113
  285. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  286. package/src/base-client/components/his/XTreeRows/TreeNode.vue +100 -100
  287. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +197 -197
  288. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  289. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  290. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  291. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  292. package/src/base-client/components/index.js +51 -51
  293. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  294. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  295. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  296. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  297. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  298. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  299. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  300. package/src/base-client/components/layout/XPageView/index.js +2 -2
  301. package/src/base-client/components/layout/XPageView/index.md +96 -96
  302. package/src/base-client/components/layout/XTreeView/XTreeView.vue +130 -130
  303. package/src/base-client/components/layout/XTreeView/index.js +3 -3
  304. package/src/base-client/components/layout/XTreeView/index.md +46 -46
  305. package/src/base-client/components/system/DictionaryDetailsView/DictionaryDetailsView.vue +232 -232
  306. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  307. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  308. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  309. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  310. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  311. package/src/base-client/components/system/QueryParamsDetailsView/QueryParamsDetailsView.vue +281 -281
  312. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  313. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  314. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  315. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  316. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  317. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  318. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  319. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  320. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  321. package/src/base-client/plugins/AppData.js +126 -126
  322. package/src/base-client/plugins/Config.js +19 -19
  323. package/src/base-client/plugins/GetLoginInfoService.js +183 -183
  324. package/src/base-client/plugins/PagedList.js +177 -177
  325. package/src/base-client/plugins/Recording.js +258 -258
  326. package/src/base-client/plugins/authority-plugin.js +167 -167
  327. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  328. package/src/base-client/plugins/i18n-extend.js +32 -32
  329. package/src/base-client/plugins/index.js +23 -23
  330. package/src/base-client/plugins/moment.js +8 -8
  331. package/src/base-client/plugins/tabs-page-plugin.js +39 -39
  332. package/src/bootstrap.js +51 -51
  333. package/src/components/Charts/Bar.vue +62 -62
  334. package/src/components/Charts/ChartCard.vue +134 -134
  335. package/src/components/Charts/Liquid.vue +67 -67
  336. package/src/components/Charts/MiniArea.vue +39 -39
  337. package/src/components/Charts/MiniBar.vue +39 -39
  338. package/src/components/Charts/MiniProgress.vue +75 -75
  339. package/src/components/Charts/MiniSmoothArea.vue +40 -40
  340. package/src/components/Charts/Radar.vue +68 -68
  341. package/src/components/Charts/RankList.vue +77 -77
  342. package/src/components/Charts/TagCloud.vue +113 -113
  343. package/src/components/Charts/TransferBar.vue +64 -64
  344. package/src/components/Charts/Trend.vue +82 -82
  345. package/src/components/Charts/chart.less +12 -12
  346. package/src/components/Charts/smooth.area.less +13 -13
  347. package/src/components/CodeMirror/inedx.vue +118 -118
  348. package/src/components/CodeMirror/setting.js +40 -40
  349. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  350. package/src/components/Ellipsis/index.js +3 -3
  351. package/src/components/Ellipsis/index.md +38 -38
  352. package/src/components/FileImageItem/FileItem.vue +305 -305
  353. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  354. package/src/components/FileImageItem/ImageItem.vue +107 -107
  355. package/src/components/FileImageItem/index.js +4 -4
  356. package/src/components/FilePreview/FilePreview.vue +181 -181
  357. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  358. package/src/components/FilePreview/index.js +3 -3
  359. package/src/components/HeightScanner/index.vue +615 -615
  360. package/src/components/NumberInfo/NumberInfo.vue +54 -54
  361. package/src/components/NumberInfo/index.js +3 -3
  362. package/src/components/NumberInfo/index.less +54 -54
  363. package/src/components/NumberInfo/index.md +43 -43
  364. package/src/components/STable/README.md +341 -341
  365. package/src/components/STable/index.js +558 -558
  366. package/src/components/TableSetting/TableSetting.vue +143 -143
  367. package/src/components/TableSetting/index.js +3 -3
  368. package/src/components/Trend/Trend.vue +41 -41
  369. package/src/components/Trend/index.js +3 -3
  370. package/src/components/Trend/index.less +41 -41
  371. package/src/components/Trend/index.md +45 -45
  372. package/src/components/_util/util.js +46 -46
  373. package/src/components/cache/AKeepAlive.js +179 -179
  374. package/src/components/card/ChartCard.vue +79 -79
  375. package/src/components/chart/Bar.vue +60 -60
  376. package/src/components/chart/MiniArea.vue +67 -67
  377. package/src/components/chart/MiniBar.vue +59 -59
  378. package/src/components/chart/MiniProgress.vue +57 -57
  379. package/src/components/chart/Radar.vue +80 -80
  380. package/src/components/chart/RankingList.vue +60 -60
  381. package/src/components/chart/Trend.vue +79 -79
  382. package/src/components/chart/index.less +9 -9
  383. package/src/components/checkbox/ColorCheckbox.vue +157 -157
  384. package/src/components/checkbox/ImgCheckbox.vue +117 -117
  385. package/src/components/checkbox/ImgCheckboxGroup.vue +76 -76
  386. package/src/components/checkbox/index.js +9 -9
  387. package/src/components/exception/ExceptionPage.vue +70 -70
  388. package/src/components/exception/typeConfig.js +19 -19
  389. package/src/components/form/FormRow.vue +52 -52
  390. package/src/components/g2Charts/constants.js +202 -202
  391. package/src/components/g2Charts/demo.vue +808 -808
  392. package/src/components/g2Charts/designer.vue +228 -228
  393. package/src/components/g2Charts/designerBaseConfig.vue +61 -61
  394. package/src/components/g2Charts/designerDataConfig.vue +259 -259
  395. package/src/components/g2Charts/designerStyleConfig.vue +16 -16
  396. package/src/components/g2Charts/index.vue +397 -397
  397. package/src/components/index.js +36 -36
  398. package/src/components/index.less +5 -5
  399. package/src/components/input/IInput.vue +66 -66
  400. package/src/components/menu/Contextmenu.vue +84 -84
  401. package/src/components/menu/SideMenu.vue +75 -75
  402. package/src/components/menu/index.less +38 -38
  403. package/src/components/menu/menu.js +273 -273
  404. package/src/components/page/header/PageHeader.vue +64 -64
  405. package/src/components/page/header/index.less +40 -40
  406. package/src/components/result/Result.vue +77 -77
  407. package/src/components/setting/Setting.vue +234 -234
  408. package/src/components/setting/SettingItem.vue +26 -26
  409. package/src/components/setting/i18n.js +117 -117
  410. package/src/components/table/StandardTable.vue +141 -141
  411. package/src/components/table/advance/ActionColumns.vue +158 -158
  412. package/src/components/table/advance/ActionSize.vue +45 -45
  413. package/src/components/table/advance/AdvanceTable.vue +275 -275
  414. package/src/components/table/advance/SearchArea.vue +355 -355
  415. package/src/components/table/advance/index.js +2 -2
  416. package/src/components/table/api/ApiTable.vue +50 -50
  417. package/src/components/task/TaskGroup.vue +80 -80
  418. package/src/components/task/TaskItem.vue +26 -26
  419. package/src/components/tool/AStepItem.vue +60 -60
  420. package/src/components/tool/AvatarList.vue +68 -68
  421. package/src/components/tool/DetailList.vue +157 -157
  422. package/src/components/tool/Drawer.vue +142 -142
  423. package/src/components/tool/FooterToolBar.vue +30 -30
  424. package/src/components/tool/HeadInfo.vue +35 -35
  425. package/src/components/tool/TagSelect.vue +83 -83
  426. package/src/components/tool/TagSelectOption.vue +33 -33
  427. package/src/components/transition/PageToggleTransition.vue +97 -97
  428. package/src/config/CreateQueryConfig.js +325 -325
  429. package/src/config/default/admin.config.js +18 -18
  430. package/src/config/default/animate.config.js +21 -21
  431. package/src/config/default/antd.config.js +89 -89
  432. package/src/config/default/index.js +6 -6
  433. package/src/config/default/setting.config.js +55 -55
  434. package/src/config/index.js +3 -3
  435. package/src/config/replacer/index.js +10 -10
  436. package/src/config/replacer/resolve.config.js +67 -67
  437. package/src/expression/ExpressionRunner.js +26 -26
  438. package/src/expression/TestExpression.js +509 -509
  439. package/src/expression/core/Delegate.js +115 -115
  440. package/src/expression/core/Expression.js +1358 -1358
  441. package/src/expression/core/Program.js +932 -932
  442. package/src/expression/core/Token.js +27 -27
  443. package/src/expression/enums/ExpressionType.js +81 -81
  444. package/src/expression/enums/TokenType.js +11 -11
  445. package/src/expression/exception/BreakWayException.js +2 -2
  446. package/src/expression/exception/ContinueWayException.js +2 -2
  447. package/src/expression/exception/ExpressionException.js +28 -28
  448. package/src/expression/exception/ReturnWayException.js +14 -14
  449. package/src/expression/exception/ServiceException.js +22 -22
  450. package/src/expression/instances/LogicConsole.js +44 -44
  451. package/src/expression/ts/ExpressionRunner.ts +28 -28
  452. package/src/expression/ts/TestExpression.ts +509 -509
  453. package/src/expression/ts/core/Delegate.ts +114 -114
  454. package/src/expression/ts/core/Expression.ts +1309 -1309
  455. package/src/expression/ts/core/Program.ts +950 -950
  456. package/src/expression/ts/core/Token.ts +29 -29
  457. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  458. package/src/expression/ts/enums/TokenType.ts +13 -13
  459. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  460. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  461. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  462. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  463. package/src/expression/ts/exception/ServiceException.ts +22 -22
  464. package/src/expression/ts/instances/JSONArray.ts +48 -48
  465. package/src/expression/ts/instances/JSONObject.ts +109 -109
  466. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  467. package/src/font-style/font.css +4 -4
  468. package/src/layouts/AdminLayout.vue +174 -174
  469. package/src/layouts/BlankView.vue +79 -79
  470. package/src/layouts/CommonLayout.vue +56 -56
  471. package/src/layouts/ComponentLayoutOne.vue +47 -47
  472. package/src/layouts/GridView.vue +43 -43
  473. package/src/layouts/PageLayout.vue +151 -151
  474. package/src/layouts/PageView.vue +55 -55
  475. package/src/layouts/SinglePageView.vue +136 -136
  476. package/src/layouts/footer/PageFooter.vue +49 -49
  477. package/src/layouts/header/AdminHeader.vue +132 -132
  478. package/src/layouts/header/HeaderAvatar.vue +64 -64
  479. package/src/layouts/header/HeaderNotice.vue +177 -177
  480. package/src/layouts/header/HeaderSearch.vue +67 -67
  481. package/src/layouts/header/InstitutionDetail.vue +181 -181
  482. package/src/layouts/header/index.less +92 -92
  483. package/src/layouts/tabs/TabsHead.vue +189 -189
  484. package/src/layouts/tabs/TabsView.vue +389 -389
  485. package/src/layouts/tabs/i18n.js +25 -25
  486. package/src/layouts/tabs/index.js +2 -2
  487. package/src/lib.js +1 -1
  488. package/src/logic/LogicRunner.js +62 -62
  489. package/src/logic/TestLogic.js +13 -13
  490. package/src/logic/plugins/common/DateTools.js +35 -35
  491. package/src/logic/plugins/common/VueTools.js +30 -30
  492. package/src/logic/plugins/index.js +7 -7
  493. package/src/logic/ts/LogicRunner.ts +67 -67
  494. package/src/logic/ts/TestLogic.ts +13 -13
  495. package/src/main.js +33 -33
  496. package/src/mixins/formValidationMixin.js +46 -46
  497. package/src/mock/common/activityData.js +32 -32
  498. package/src/mock/common/index.js +89 -89
  499. package/src/mock/common/reportData.js +20 -20
  500. package/src/mock/common/tableData.js +118 -118
  501. package/src/mock/extend/index.js +84 -84
  502. package/src/mock/goods/index.js +108 -108
  503. package/src/mock/index.js +12 -12
  504. package/src/mock/project/index.js +17 -17
  505. package/src/mock/user/current.js +13 -13
  506. package/src/mock/user/login.js +39 -39
  507. package/src/mock/user/routes.js +61 -61
  508. package/src/mock/workplace/index.js +15 -15
  509. package/src/pages/DefaultExample/index.vue +77 -77
  510. package/src/pages/DynamicStatistics/ChartSelector.vue +331 -331
  511. package/src/pages/DynamicStatistics/DataTabs.vue +83 -83
  512. package/src/pages/DynamicStatistics/DynamicTable.vue +128 -128
  513. package/src/pages/DynamicStatistics/EvaluationArea.vue +69 -69
  514. package/src/pages/DynamicStatistics/FavoriteList.vue +50 -50
  515. package/src/pages/DynamicStatistics/QuestionHistoryAndFavorites.vue +591 -591
  516. package/src/pages/DynamicStatistics/SearchBar.vue +192 -192
  517. package/src/pages/DynamicStatistics/index.vue +282 -282
  518. package/src/pages/Example/childIndex.vue +15 -15
  519. package/src/pages/Example/index.vue +30 -30
  520. package/src/pages/LogicCallExample/index.vue +46 -46
  521. package/src/pages/NewDynamicStatistics/ChartSelector.vue +331 -331
  522. package/src/pages/NewDynamicStatistics/DataTabs.vue +122 -122
  523. package/src/pages/NewDynamicStatistics/DynamicTable.vue +128 -128
  524. package/src/pages/NewDynamicStatistics/EvaluationArea.vue +69 -69
  525. package/src/pages/NewDynamicStatistics/FavoriteList.vue +50 -50
  526. package/src/pages/NewDynamicStatistics/QuestionHistoryAndFavorites.vue +289 -289
  527. package/src/pages/NewDynamicStatistics/SearchBar.vue +193 -193
  528. package/src/pages/NewDynamicStatistics/index.vue +258 -258
  529. package/src/pages/Recording/index.vue +77 -77
  530. package/src/pages/ReportGrid/index.vue +76 -76
  531. package/src/pages/ReportView.vue +50 -50
  532. package/src/pages/ServiceReview/index.vue +284 -284
  533. package/src/pages/SubExample/index.vue +26 -26
  534. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  535. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  536. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -204
  537. package/src/pages/WorkflowDetail/WorkflowDetail.vue +379 -399
  538. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  539. package/src/pages/WorkflowDetail/WorkflowPageDetail/TrimTextTail.vue +23 -23
  540. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  541. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformationDetails.vue +276 -276
  542. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1757 -1757
  543. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  544. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  545. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +987 -987
  546. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  547. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  548. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowListResolution.vue +248 -248
  549. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  550. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  551. package/src/pages/XPageViewExample/index.vue +149 -149
  552. package/src/pages/XReportView/index.vue +64 -64
  553. package/src/pages/XTreeOneProExample/index.vue +67 -67
  554. package/src/pages/addressSelect/addressDemo.vue +24 -24
  555. package/src/pages/addressSelect/index.vue +270 -270
  556. package/src/pages/dashboard/workplace/WorkPlace.vue +141 -141
  557. package/src/pages/dashboard/workplace/i18n.js +40 -40
  558. package/src/pages/dashboard/workplace/index.js +2 -2
  559. package/src/pages/dashboard/workplace/index.less +59 -59
  560. package/src/pages/exception/403.vue +21 -21
  561. package/src/pages/exception/404.vue +24 -24
  562. package/src/pages/exception/500.vue +21 -21
  563. package/src/pages/login/Login.vue +378 -378
  564. package/src/pages/login/LoginV3.vue +389 -389
  565. package/src/pages/login/index.js +2 -2
  566. package/src/pages/lowCode/lowCodeEditor.vue +1219 -1219
  567. package/src/pages/lowCode/lowCodeRenderPage.vue +43 -43
  568. package/src/pages/report/ReportTable.js +124 -124
  569. package/src/pages/report/ReportTableHome.vue +28 -28
  570. package/src/pages/resourceManage/depListManage.vue +23 -23
  571. package/src/pages/resourceManage/funListManage.vue +23 -23
  572. package/src/pages/resourceManage/index.js +15 -15
  573. package/src/pages/resourceManage/orgListManage.vue +98 -98
  574. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  575. package/src/pages/resourceManage/roleListManage.vue +23 -23
  576. package/src/pages/resourceManage/staffListManage.vue +23 -23
  577. package/src/pages/system/dictionary/index.vue +44 -44
  578. package/src/pages/system/file/Info.vue +56 -56
  579. package/src/pages/system/file/index.vue +317 -317
  580. package/src/pages/system/monitor/loginInfor/index.vue +37 -37
  581. package/src/pages/system/monitor/operLog/index.vue +37 -37
  582. package/src/pages/system/settings/index.vue +126 -126
  583. package/src/pages/system/settings/modifyPassword.vue +117 -117
  584. package/src/pages/system/ticket/index.vue +480 -480
  585. package/src/pages/system/ticket/submitTicketSuccess.vue +484 -484
  586. package/src/pages/userInfoDetailManage/ChangeMeterRecordQuery/index.vue +64 -64
  587. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  588. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  589. package/src/pages/userInfoDetailManage/InfoChangeRecordQuery/index.vue +64 -64
  590. package/src/pages/userInfoDetailManage/InstructRecordQuery/index.vue +64 -64
  591. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  592. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  593. package/src/pages/userInfoDetailManage/MeterParamRecordQuery/index.vue +64 -64
  594. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  595. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  596. package/src/pages/userInfoDetailManage/TransferRecordQuery/index.vue +66 -66
  597. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  598. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  599. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  600. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  601. package/src/pages/userInfoDetailManage/WatchCollectionRecordQuery/index.vue +64 -64
  602. package/src/pages/userInfoDetailManage/index.vue +290 -290
  603. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +120 -120
  604. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  605. package/src/plugins/EventLogPlugin.js +33 -33
  606. package/src/plugins/FindParentsData.js +17 -17
  607. package/src/plugins/HiPrintPlugin.js +164 -164
  608. package/src/router/async/config.async.js +35 -35
  609. package/src/router/async/router.map.js +127 -126
  610. package/src/router/guards.js +260 -260
  611. package/src/router/i18n.js +57 -57
  612. package/src/router/index.js +27 -27
  613. package/src/router.js +17 -17
  614. package/src/services/DataModel.js +30 -30
  615. package/src/services/LodopFuncs.js +137 -137
  616. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  617. package/src/services/api/LogDetailsViewApi.js +10 -10
  618. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  619. package/src/services/api/TicketDetailsViewApi.js +46 -46
  620. package/src/services/api/cas.js +79 -79
  621. package/src/services/api/common.js +346 -346
  622. package/src/services/api/entity.js +18 -18
  623. package/src/services/api/index.js +17 -17
  624. package/src/services/api/logininfor/index.js +6 -6
  625. package/src/services/api/manage.js +8 -8
  626. package/src/services/api/restTools.js +215 -215
  627. package/src/services/api/workFlow.js +57 -57
  628. package/src/services/apiService.js +16 -16
  629. package/src/services/dataSource.js +12 -12
  630. package/src/services/index.js +7 -7
  631. package/src/services/user.js +92 -92
  632. package/src/services/v3Api.js +116 -116
  633. package/src/store/index.js +5 -5
  634. package/src/store/modules/account.js +115 -115
  635. package/src/store/modules/index.js +5 -5
  636. package/src/store/modules/lowCode.js +33 -33
  637. package/src/store/modules/setting.js +119 -119
  638. package/src/store/mutation-types.js +4 -4
  639. package/src/theme/antd/ant-menu.less +2 -2
  640. package/src/theme/antd/ant-message.less +3 -3
  641. package/src/theme/antd/ant-table.less +22 -22
  642. package/src/theme/antd/ant-time-picker.less +3 -3
  643. package/src/theme/antd/index.less +3 -3
  644. package/src/theme/default/color.less +43 -43
  645. package/src/theme/default/index.less +3 -3
  646. package/src/theme/default/nprogress.less +76 -76
  647. package/src/theme/default/style.less +58 -58
  648. package/src/theme/global.less +271 -271
  649. package/src/theme/index.less +5 -5
  650. package/src/theme/reportTable.less +58 -58
  651. package/src/theme/theme.less +1 -1
  652. package/src/utils/EncryptUtil.js +75 -75
  653. package/src/utils/Objects.js +25 -25
  654. package/src/utils/authority-utils.js +85 -85
  655. package/src/utils/axios-interceptors.js +100 -100
  656. package/src/utils/colors.js +107 -107
  657. package/src/utils/common.js +10 -10
  658. package/src/utils/errorCode.js +6 -6
  659. package/src/utils/excel/Blob.js +180 -180
  660. package/src/utils/excel/Export2Excel.js +141 -141
  661. package/src/utils/filter.js +21 -21
  662. package/src/utils/formatter.js +74 -74
  663. package/src/utils/htmlToPDF.js +108 -108
  664. package/src/utils/htmlToPDFApi.js +5 -5
  665. package/src/utils/i18n.js +80 -80
  666. package/src/utils/indexedDB.js +549 -549
  667. package/src/utils/login.js +188 -188
  668. package/src/utils/lowcode/lowcodeComponentMixin.js +120 -120
  669. package/src/utils/lowcode/lowcodeLog.js +29 -29
  670. package/src/utils/lowcode/lowcodeUtils.js +373 -373
  671. package/src/utils/lowcode/registerComponentForEditor.js +1 -1
  672. package/src/utils/lowcode/registerComponentForRender.js +11 -11
  673. package/src/utils/map-utils.js +47 -47
  674. package/src/utils/microAppUtils.js +49 -49
  675. package/src/utils/reg.js +95 -95
  676. package/src/utils/request.js +383 -383
  677. package/src/utils/routerUtil.js +553 -553
  678. package/src/utils/runEvalFunction.js +14 -14
  679. package/src/utils/theme-color-replacer-extend.js +92 -92
  680. package/src/utils/themeUtil.js +100 -100
  681. package/src/utils/util.js +329 -329
  682. package/src/utils/waterMark.js +31 -31
  683. package/test/Tree.spec.js +168 -168
  684. package/test/myDialog.spec.js +47 -47
  685. package/test/request.test.js +17 -17
  686. package/test/util.test.js +53 -53
  687. package/test/v3Api.test.js +1984 -1984
  688. package/tests/unit/ReportTable.spec.js +16 -16
  689. package/vue.config.js +222 -222
  690. package//350/277/201/347/247/273/346/227/245/345/277/227.md +15 -15
  691. package/.claude/settings.local.json +0 -9
@@ -1,987 +1,987 @@
1
- <template>
2
- <div class="timeline-wrapper" ref="timelineContent" style="white-space: nowrap; overflow-x: auto">
3
- <!-- 动态渲染时间轴段落 -->
4
- <template v-for="(segment, segmentIndex) in getTimelineSegments()">
5
-
6
- <!-- 主时间轴段落 -->
7
- <div v-if="segment.type === 'main'" :key="'main-' + segmentIndex" class="timeline-section main-timeline">
8
- <a-steps
9
- :current="getCurrentStepInSection(segment.steps)"
10
- :initial="1">
11
- <template #progressDot="{index}">
12
- <span v-if="!changeAble" class="step-label in-steps"><i :class="['step-icon', getStepIconColor(index, segment.steps)]"></i></span>
13
- <span v-else :key="displayStepId" :class="['step-icon-filled digital', getStepIconColor(index, segment.steps)]">
14
- <a-icon v-if="isStepCompleted(segment.steps[index - 1])" type="check-circle" theme="filled" :class="['step-icon-filled icon', getStepIconColor(index, segment.steps)]" />
15
- <span v-else :class="['step-icon-filled digital', getStepIconColor(index, segment.steps)]">{{ getStepNumber(segmentIndex, index) }}</span>
16
- </span>
17
- </template>
18
-
19
- <a-step
20
- v-for="item in segment.steps"
21
- :key="item.id"
22
- class="step-item"
23
- @click.stop="onStepClick(item.id)"
24
- >
25
- <template #title>
26
- <div class="step-title-container">
27
- <h3 v-if="item.name">{{ item.name }}</h3>
28
- <!-- 判断节点特殊标识 -->
29
- <div v-if="item.type === 'condition'" class="condition-indicators">
30
- <a-tag color="purple" size="small" class="condition-tag">
31
- <a-icon type="branches" /> 条件节点
32
- </a-tag>
33
- <a-tooltip title="此节点根据条件判断后续流程走向">
34
- <a-icon type="question-circle" class="condition-help" />
35
- </a-tooltip>
36
- </div>
37
- </div>
38
- </template>
39
- <template #description>
40
- <div>
41
- <p v-if="item.handler">负责人:
42
- <trim-text-tail :text="item.handler" :length="14"/>
43
- </p>
44
- <p v-if="item.date">填报时间:{{ formatDate(item.date, 'yyyy-MM-dd hh:mm') }}</p>
45
- <p v-if="item.deadline" :class="{ 'text-red': item.id === currentStepId && isOverdue }">截止时间:{{ formatDate(item.deadline, 'yyyy-MM-dd hh:mm') }}</p>
46
- <p v-if="item.note">备注:
47
- <trim-text-tail :text="item.note" :length="15"/>
48
- </p>
49
- </div>
50
- </template>
51
- </a-step>
52
- </a-steps>
53
- </div>
54
-
55
- <!-- 并行分支段落 -->
56
- <div v-else-if="segment.type === 'parallel'" :key="'parallel-' + segmentIndex" class="parallel-section">
57
- <!-- 左侧连接线 -->
58
- <div class="connection-line left-line"></div>
59
-
60
- <!-- 并行分支容器 -->
61
- <div class="parallel-branches-container">
62
- <!-- 动态渲染并行分支 -->
63
- <div
64
- v-for="(branch, branchIndex) in segment.branches"
65
- :key="'segment-' + segmentIndex + '-branch-' + branchIndex"
66
- class="branch-row">
67
-
68
- <!-- 分支时间轴 -->
69
- <div :class="['branch-timeline', getBranchTimelineClass(branch)]">
70
- <a-steps size="small" class="branch-steps">
71
- <a-step
72
- v-for="step in branch"
73
- :key="'segment-' + segmentIndex + '-branch-' + branchIndex + '-step-' + step.id"
74
- :class="['branch-step', getBranchStepClass(step)]"
75
- @click.stop="onStepClick(step.id)">
76
- <template #title>
77
- <a-popover placement="top" trigger="hover" :mouseEnterDelay="0.3">
78
- <template #content>
79
- <div class="branch-step-popover">
80
- <div class="popover-item" v-if="step.handler">
81
- <span class="popover-label">负责人:</span>
82
- <span class="popover-value">{{ step.handler }}</span>
83
- </div>
84
- <div class="popover-item" v-if="step.date">
85
- <span class="popover-label">填报时间:</span>
86
- <span class="popover-value">{{ formatDate(step.date, 'yyyy-MM-dd hh:mm') }}</span>
87
- </div>
88
- <div class="popover-item" v-if="step.deadline">
89
- <span class="popover-label">截止时间:</span>
90
- <span class="popover-value">{{ formatDate(step.deadline, 'yyyy-MM-dd hh:mm') }}</span>
91
- </div>
92
- <div class="popover-item" v-if="step.note">
93
- <span class="popover-label">备注:</span>
94
- <span class="popover-value">{{ step.note }}</span>
95
- </div>
96
- <div class="popover-item no-data" v-if="!step.handler && !step.date && !step.deadline && !step.note">
97
- <span class="popover-value">暂无详细信息</span>
98
- </div>
99
- </div>
100
- </template>
101
- <template #title>
102
- <div class="popover-title">
103
- <a-icon type="info-circle" />
104
- {{ step.name }} - 详细信息
105
- </div>
106
- </template>
107
- <span class="branch-step-title">{{ step.name }}</span>
108
- </a-popover>
109
- </template>
110
- <template #description>
111
- <div class="branch-step-desc">
112
- <p v-if="step.handler">{{ step.handler }}</p>
113
- <p v-if="step.date">{{ formatDate(step.date, 'MM-dd hh:mm') }}</p>
114
- </div>
115
- </template>
116
- </a-step>
117
- </a-steps>
118
- </div>
119
- </div>
120
- </div>
121
-
122
- <!-- 右侧连接线 -->
123
- <div class="connection-line right-line"></div>
124
- </div>
125
-
126
- </template>
127
-
128
- <!-- 当步骤被截断时显示省略状态 -->
129
- <div class="more-steps-section" v-if="hasMoreSteps">
130
- <a-steps :current="1" :initial="1">
131
- <a-step
132
- key="more-steps"
133
- class="step-item more-steps-item">
134
- <template #title>
135
- <div class="more-steps-container">
136
- <h3>后续步骤</h3>
137
- </div>
138
- </template>
139
- <template #description>
140
- <div class="more-steps-desc">
141
- <p>根据上述条件判断结果,将继续执行相应的后续流程</p>
142
- <p class="steps-count">剩余 {{ remainingStepsCount }} 个步骤</p>
143
- </div>
144
- </template>
145
- <template #icon>
146
- <a-icon type="more" style="color: #d9d9d9;" />
147
- </template>
148
- </a-step>
149
- </a-steps>
150
- </div>
151
- </div>
152
- </template>
153
-
154
- <script>
155
- import { formatDate } from '@vue2-client/utils/util'
156
- import TrimTextTail from './TrimTextTail'
157
-
158
- export default {
159
- components: { TrimTextTail },
160
- name: 'WorkFlowTimeline',
161
- props: {
162
- workflowId: {
163
- type: [String, Number],
164
- required: true
165
- },
166
- currentStepId: {
167
- type: Number,
168
- required: false,
169
- default: 1
170
- },
171
- activeStepId: {
172
- type: Number,
173
- required: false,
174
- default: 1
175
- },
176
- state: {
177
- type: [Boolean, Number],
178
- required: false,
179
- default: false
180
- },
181
- steps: {
182
- type: Array,
183
- required: true
184
- },
185
- changeAble: {
186
- type: Boolean,
187
- required: false,
188
- default: false
189
- }
190
- },
191
- data () {
192
- return {
193
- // 当前显示的步骤 id
194
- displayStepId: 1,
195
- // 当前任务是否逾期
196
- isOverdue: false,
197
- // 是否显示所有步骤(包括条件后的步骤)
198
- showAllSteps: false
199
- }
200
- },
201
- computed: {
202
- // 控制显示的步骤:当判断节点未执行时只显示到判断节点,执行后显示包括并行分支的所有步骤
203
- displaySteps () {
204
- const steps = this.steps || []
205
-
206
- // 如果用户选择显示所有步骤,直接返回
207
- if (this.showAllSteps) {
208
- return steps
209
- }
210
-
211
- // 找到第一个判断节点
212
- const firstConditionStepIndex = steps.findIndex(step => step.type === 'condition')
213
-
214
- // 如果没有找到判断节点,显示所有步骤
215
- if (firstConditionStepIndex === -1) {
216
- return steps
217
- }
218
-
219
- const firstConditionStep = steps[firstConditionStepIndex]
220
-
221
- // 如果当前步骤在第一个判断节点之前或等于判断节点,只显示到判断节点
222
- if (this.currentStepId <= firstConditionStep.id) {
223
- return steps.slice(0, firstConditionStepIndex + 1)
224
- }
225
-
226
- // 如果判断节点已经执行,显示所有步骤(包括并行分支)
227
- return steps
228
- },
229
-
230
- // 是否有更多步骤(被条件截断)
231
- hasMoreSteps () {
232
- // 如果已经显示所有步骤,则不显示"更多步骤"
233
- if (this.showAllSteps) return false
234
-
235
- const steps = this.steps || []
236
- const firstConditionStepIndex = steps.findIndex(step => step.type === 'condition')
237
-
238
- if (firstConditionStepIndex === -1) return false
239
-
240
- const firstConditionStep = steps[firstConditionStepIndex]
241
- return this.currentStepId <= firstConditionStep.id && firstConditionStepIndex < steps.length - 1
242
- },
243
-
244
- // 剩余步骤数量
245
- remainingStepsCount () {
246
- const steps = this.steps || []
247
- const firstConditionStepIndex = steps.findIndex(step => step.type === 'condition')
248
-
249
- if (firstConditionStepIndex === -1) return 0
250
-
251
- return steps.length - (firstConditionStepIndex + 1)
252
- }
253
- },
254
- mounted () {
255
- this.init()
256
- const timelineContent = this.$refs.timelineContent
257
- timelineContent.onmousewheel = function (e) {
258
- timelineContent.scrollLeft -= e.wheelDelta
259
- e.preventDefault()
260
- }
261
- },
262
- beforeDestroy () {
263
- this.$refs.timelineContent.onmousewheel = null
264
- },
265
- methods: {
266
- init () {
267
- this.displayStepId = this.activeStepId
268
- const currentStep = this.steps.find(step => step.id === this.currentStepId)
269
- if (currentStep && currentStep.deadline) {
270
- this.isOverdue = !this.state && this.formatDate(new Date(), 'yyyy-MM-dd hh:mm') > currentStep.deadline
271
- }
272
- this.$emit('activeStep', this.displayStepId)
273
- },
274
-
275
- // 获取时间轴段落数据
276
- getTimelineSegments () {
277
- const steps = this.displaySteps
278
- const segments = []
279
- let currentIndex = 0
280
-
281
- while (currentIndex < steps.length) {
282
- // 收集连续的主流程步骤(包括并行分支入口节点)
283
- const mainSteps = []
284
- while (currentIndex < steps.length && !this.isParallelStep(steps[currentIndex])) {
285
- mainSteps.push(steps[currentIndex])
286
-
287
- // 如果当前步骤是并行分支入口,处理完后跳出循环准备处理并行分支
288
- if (this.isParallelBranchEntry(steps[currentIndex])) {
289
- currentIndex++
290
- break
291
- }
292
- currentIndex++
293
- }
294
-
295
- if (mainSteps.length > 0) {
296
- segments.push({
297
- type: 'main',
298
- steps: mainSteps
299
- })
300
- }
301
-
302
- // 检查是否有并行分支需要处理
303
- if (currentIndex > 0 && this.isParallelBranchEntry(steps[currentIndex - 1])) {
304
- // 获取这个并行分支的所有步骤
305
- const branchIndex = steps[currentIndex - 1].properties.branchIndex
306
- const parallelSteps = this.getParallelStepsByBranchIndex(steps, branchIndex)
307
-
308
- if (parallelSteps.length > 0) {
309
- // 按branchPath分组
310
- const branches = this.groupParallelSteps(parallelSteps)
311
- segments.push({
312
- type: 'parallel',
313
- branches: branches
314
- })
315
-
316
- // 跳过已处理的并行步骤
317
- currentIndex = this.skipProcessedParallelSteps(steps, currentIndex, parallelSteps)
318
- }
319
- }
320
- }
321
-
322
- return segments
323
- },
324
-
325
- // 根据branchIndex获取并行步骤
326
- getParallelStepsByBranchIndex (steps, branchIndex) {
327
- return steps.filter(step =>
328
- step.properties &&
329
- step.properties.branchPath &&
330
- step.properties.branchPath.includes(`parallel_${branchIndex}_`)
331
- )
332
- },
333
-
334
- // 将并行步骤按branchPath分组
335
- groupParallelSteps (parallelSteps) {
336
- const branches = {}
337
- parallelSteps.forEach(step => {
338
- const branchPath = step.properties.branchPath
339
- if (!branches[branchPath]) {
340
- branches[branchPath] = []
341
- }
342
- branches[branchPath].push(step)
343
- })
344
-
345
- // 对每个分支内的步骤按id排序
346
- Object.keys(branches).forEach(branchPath => {
347
- branches[branchPath].sort((a, b) => a.id - b.id)
348
- })
349
-
350
- return Object.values(branches)
351
- },
352
-
353
- // 跳过已处理的并行步骤
354
- skipProcessedParallelSteps (steps, currentIndex, processedSteps) {
355
- const processedIds = new Set(processedSteps.map(step => step.id))
356
- while (currentIndex < steps.length && processedIds.has(steps[currentIndex].id)) {
357
- currentIndex++
358
- }
359
- return currentIndex
360
- },
361
-
362
- // 判断是否为并行分支入口
363
- isParallelBranchEntry (step) {
364
- return step.properties &&
365
- step.properties.branchType === 'parallelBranch'
366
- },
367
-
368
- // 判断是否为分支汇合节点
369
- isBranchExit (step) {
370
- return step.properties &&
371
- step.properties.flowRole === 'branchExit'
372
- },
373
-
374
- // 获取在某个section中的当前步骤索引
375
- getCurrentStepInSection (sectionSteps) {
376
- if (!sectionSteps || sectionSteps.length === 0) return 0
377
-
378
- const currentStepIndex = sectionSteps.findIndex(step => step.id === this.currentStepId)
379
- return currentStepIndex >= 0 ? currentStepIndex + 1 : 0
380
- },
381
-
382
- // 获取步骤编号
383
- getStepNumber (segmentIndex, stepIndex) {
384
- const segments = this.getTimelineSegments()
385
- let stepNumber = 0
386
-
387
- // 计算前面所有段落的步骤数
388
- for (let i = 0; i < segmentIndex; i++) {
389
- const segment = segments[i]
390
- if (segment.type === 'main') {
391
- stepNumber += segment.steps.length
392
- } else if (segment.type === 'parallel') {
393
- // 并行分支计算总步骤数
394
- stepNumber += segment.branches.reduce((total, branch) => total + branch.length, 0)
395
- }
396
- }
397
-
398
- return stepNumber + stepIndex
399
- },
400
-
401
- // 判断步骤是否已完成
402
- isStepCompleted (step) {
403
- if (!step) return false
404
- return step.id < this.currentStepId || this.state
405
- },
406
-
407
- // 判断id是否为流程中最后一个
408
- isLastStep (stepId) {
409
- return stepId >= this.steps.length
410
- },
411
-
412
- // 判断是否为并行步骤
413
- isParallelStep (step) {
414
- return step.properties &&
415
- step.properties.branchPath &&
416
- step.properties.branchPath.includes('parallel_')
417
- },
418
-
419
- // 动态展示时间线节点颜色
420
- getStepIconColor (index, sectionSteps) {
421
- if (!sectionSteps || !sectionSteps[index - 1]) return 'gray'
422
-
423
- const stepId = sectionSteps[index - 1].id
424
-
425
- if (this.changeAble && stepId === this.displayStepId) {
426
- return 'yellow'
427
- } else if (!this.changeAble && stepId === this.currentStepId) {
428
- return this.state ? 'blue' : 'green'
429
- }
430
- if (stepId < this.currentStepId || this.state) {
431
- return 'blue'
432
- }
433
- if (stepId === this.currentStepId) {
434
- return this.isOverdue ? 'red' : 'blue'
435
- }
436
- return 'gray'
437
- },
438
-
439
- // 获取分支步骤的CSS类
440
- getBranchStepClass (step) {
441
- if (!step) return 'branch-step-gray'
442
-
443
- // 如果在可编辑状态下且是当前显示的步骤
444
- if (this.changeAble && step.id === this.displayStepId) {
445
- return 'branch-step-yellow'
446
- }
447
-
448
- // 根据 status 判断颜色
449
- switch (step.status) {
450
- case 0: // 未处理
451
- return 'branch-step-gray'
452
- case 1: // 正在处理
453
- // 检查是否逾期
454
- if (step.deadline && !this.state && this.formatDate(new Date(), 'yyyy-MM-dd hh:mm') > step.deadline) {
455
- return 'branch-step-red'
456
- }
457
- return 'branch-step-blue'
458
- case 2: // 已处理
459
- return 'branch-step-green'
460
- default:
461
- return 'branch-step-gray'
462
- }
463
- },
464
-
465
- // 获取分支时间轴的CSS类(根据分支中的步骤状态)
466
- getBranchTimelineClass (branch) {
467
- if (!branch || branch.length === 0) return 'branch-timeline-gray'
468
-
469
- // 检查分支中所有步骤的状态
470
- const hasCompleted = branch.some(step => step.status === 2) // 有已完成的
471
- const hasProcessing = branch.some(step => step.status === 1) // 有正在处理的
472
- const allPending = branch.every(step => step.status === 0 || step.status === undefined) // 全部未处理
473
-
474
- // 优先级:正在处理 > 已完成 > 未处理
475
- if (hasProcessing) {
476
- return 'branch-timeline-blue' // 正在进行
477
- } else if (hasCompleted) {
478
- return 'branch-timeline-green' // 已完成
479
- } else if (allPending) {
480
- return 'branch-timeline-gray' // 未抵达
481
- } else {
482
- return 'branch-timeline-gray' // 默认
483
- }
484
- },
485
-
486
- onStepClick (stepId) {
487
- if (!this.changeAble || stepId === this.displayStepId) {
488
- return
489
- }
490
- const curStep = this.steps.find(item => item.id === stepId)
491
- if (stepId > this.currentStepId && curStep.status !== 1 && curStep.status !== 2) {
492
- return this.$message.warn('请先完成当前步骤')
493
- }
494
- this.$emit('activeStep', stepId)
495
- this.displayStepId = stepId
496
- },
497
-
498
- formatDate,
499
- },
500
- watch: {
501
- activeStepId: function (newVal) {
502
- this.displayStepId = newVal
503
- }
504
- }
505
- }
506
- </script>
507
-
508
- <style lang="less" scoped>
509
- .timeline-wrapper {
510
- display: flex;
511
- align-items: flex-start;
512
- gap: 0;
513
-
514
- .timeline-section {
515
- flex-shrink: 0;
516
-
517
- // 主时间轴自动填充剩余宽度
518
- &.main-timeline {
519
- flex: 1;
520
- }
521
-
522
- /deep/ .ant-steps-dot {
523
- margin-bottom: 6px;
524
- .ant-steps-item-tail {
525
- top: 7px;
526
- margin-left: 106px;
527
- width: calc(100% - 23px);
528
- }
529
- .ant-steps-item-icon {
530
- margin-left: 90px;
531
- width: 8px;
532
- height: 8px;
533
- line-height: 8px;
534
- }
535
- .ant-steps-item-content {
536
- min-width: 195px;
537
- margin-top: 24px;
538
- .ant-steps-item-description {
539
- text-align: left;
540
- background: #fff;
541
- border-radius: 4px;
542
- padding: 12px;
543
- position: relative;
544
-
545
- p {
546
- position: relative;
547
- padding: 8px 0;
548
- margin: 0;
549
- font-size: 13px;
550
- color: #595959;
551
- line-height: 1.5;
552
- white-space: nowrap;
553
- overflow: visible;
554
-
555
- &:first-child {
556
- border-top: 1px dotted #e8e8e8;
557
- }
558
-
559
- &:not(:last-child) {
560
- border-bottom: 1px dashed #f0f0f0;
561
- }
562
-
563
- &:last-child {
564
- padding-bottom: 0;
565
- }
566
- }
567
- }
568
- }
569
- &.ant-steps {
570
- padding-top: 8px;
571
- }
572
- }
573
-
574
- /deep/ .ant-steps-item-title {
575
- font-size: 14px;
576
- h3 {
577
- margin-bottom: 0;
578
- }
579
- }
580
- }
581
-
582
- .parallel-section {
583
- display: flex;
584
- align-items: flex-start;
585
- position: relative;
586
-
587
- .connection-line {
588
- width: 2rem;
589
- height: 0px;
590
- // background: #f0f0f0;
591
- flex-shrink: 0;
592
- margin-top: 1rem;
593
-
594
- &.left-line {
595
- margin-right: 0;
596
- position: relative;
597
-
598
- &::before {
599
- content: '';
600
- position: absolute;
601
- left: -4.8rem;
602
- top: 0;
603
- width: 6rem;
604
- height: 2.5px;
605
- background: #f0f0f0;
606
- }
607
- }
608
-
609
- &.right-line {
610
- margin-left: 0;
611
- position: relative;
612
-
613
- &::before {
614
- content: '';
615
- position: absolute;
616
- right: -4.5rem;
617
- top: 0;
618
- width: 6rem;
619
- height: 2.5px;
620
- background: #f0f0f0;
621
- }
622
- }
623
- }
624
-
625
- .parallel-branches-container {
626
- display: flex;
627
- flex-direction: column;
628
- gap: 16px;
629
- padding: 16px 20px;
630
- background: #fafafa;
631
- border: 1px solid #e0e0e0;
632
- border-radius: 8px;
633
- min-width: 400px;
634
- width: fit-content;
635
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
636
-
637
- .branch-row {
638
- .branch-timeline {
639
- padding: 12px 16px;
640
- background: #fff;
641
- border-radius: 6px;
642
- border-left: 4px solid #d9d9d9;
643
- box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
644
-
645
- .branch-steps {
646
- /deep/ .ant-steps-dot {
647
- margin-bottom: 6px;
648
-
649
- .ant-steps-item-tail {
650
- top: 7px;
651
- margin-left: 70px;
652
- width: calc(100% - 16px);
653
- }
654
-
655
- .ant-steps-item-icon {
656
- margin-left: 60px;
657
- width: 8px;
658
- height: 8px;
659
- line-height: 8px;
660
- }
661
-
662
- .ant-steps-item-content {
663
- min-width: 160px;
664
- margin-top: 24px;
665
-
666
- .ant-steps-item-description {
667
- text-align: left;
668
- background: #fff;
669
- border-radius: 4px;
670
- padding: 10px 12px;
671
- position: relative;
672
- border: 1px solid #f0f0f0;
673
-
674
- p {
675
- position: relative;
676
- padding: 4px 0;
677
- margin: 0;
678
- font-size: 12px;
679
- color: #666;
680
- line-height: 1.4;
681
- white-space: nowrap;
682
- overflow: visible;
683
-
684
- &:first-child {
685
- border-top: 1px dotted #e8e8e8;
686
- }
687
-
688
- &:not(:last-child) {
689
- border-bottom: 1px dashed #f0f0f0;
690
- }
691
-
692
- &:last-child {
693
- padding-bottom: 0;
694
- }
695
- }
696
- }
697
- }
698
- }
699
-
700
- /deep/ .ant-steps-item-title {
701
- font-size: 14px;
702
- line-height: 22px;
703
- margin-bottom: 6px;
704
- font-weight: 500;
705
- }
706
- }
707
-
708
- .branch-step-title {
709
- font-size: 14px;
710
- font-weight: 500;
711
- color: #262626;
712
- cursor: pointer;
713
-
714
- &:hover {
715
- color: #1890ff;
716
- }
717
- }
718
-
719
- .branch-step-desc {
720
- p {
721
- margin: 0;
722
- padding: 4px 0;
723
- font-size: 12px;
724
- color: #666;
725
- border: none !important;
726
- }
727
- }
728
-
729
- // 移除固定的分支颜色,改为动态状态颜色
730
- // &:nth-child(1) {
731
- // border-left-color: #52c41a;
732
- // }
733
-
734
- // &:nth-child(2) {
735
- // border-left-color: #1890ff;
736
- // }
737
-
738
- // &:nth-child(3) {
739
- // border-left-color: #722ed1;
740
- // }
741
-
742
- &:hover {
743
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
744
- transform: translateY(-2px);
745
- transition: all 0.3s ease;
746
- }
747
-
748
- /deep/ .ant-steps-icon {
749
- color: #f0f0f0;
750
- }
751
-
752
- // 分支步骤状态颜色
753
- /deep/ .branch-step-gray .ant-steps-item-icon {
754
- background-color: #d9d9d9 !important;
755
- border-color: #d9d9d9 !important;
756
- }
757
-
758
- /deep/ .branch-step-blue .ant-steps-item-icon {
759
- background-color: #1890ff !important;
760
- border-color: #1890ff !important;
761
- }
762
-
763
- /deep/ .branch-step-green .ant-steps-item-icon {
764
- background-color: #52c41a !important;
765
- border-color: #52c41a !important;
766
- }
767
-
768
- /deep/ .branch-step-red .ant-steps-item-icon {
769
- background-color: #ff4d4f !important;
770
- border-color: #ff4d4f !important;
771
- }
772
-
773
- /deep/ .branch-step-yellow .ant-steps-item-icon {
774
- background-color: #faad14 !important;
775
- border-color: #faad14 !important;
776
- }
777
-
778
- // 分支时间轴左侧边框颜色
779
- &.branch-timeline-gray {
780
- border-left-color: #d9d9d9;
781
- }
782
-
783
- &.branch-timeline-green {
784
- border-left-color: #52c41a;
785
- }
786
-
787
- &.branch-timeline-blue {
788
- border-left-color: #1890ff;
789
- }
790
- }
791
- }
792
- }
793
- }
794
-
795
- @red: rgb(255, 77, 79);
796
-
797
- .step-icon-filled {
798
- position: absolute;
799
- top: -2px;
800
- left: -6px;
801
- @blue: rgb(24, 144, 255);
802
- @yellow: rgb(255, 164, 39);
803
- @gray: rgb(191, 191, 191);
804
- &.digital {
805
- width: 28px;
806
- line-height: 28px;
807
- border-radius: 50%;
808
- color: #ffffff;
809
- &.blue {
810
- background: @blue;
811
- }
812
- &.yellow {
813
- background: @yellow;
814
- }
815
- &.gray {
816
- background: @gray;
817
- }
818
- &.red {
819
- background: @red;
820
- }
821
- }
822
- &.icon {
823
- font-size: 28px;
824
- &.blue {
825
- color: @blue;
826
- }
827
- &.yellow {
828
- color: @yellow;
829
- }
830
- &.gray {
831
- color: @gray;
832
- }
833
- }
834
- }
835
-
836
- .step-item {
837
- cursor: pointer;
838
- &:hover {
839
- .ant-steps-item-description {
840
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
841
- transform: translateY(-1px);
842
- transition: all 0.3s ease;
843
- }
844
- p {
845
- color: #262626;
846
- }
847
- }
848
- .text-red {
849
- color: @red !important;
850
- }
851
- }
852
-
853
- .next-step-overdue {
854
- /deep/ .ant-steps-item-tail::after {
855
- background: @red;
856
- }
857
- }
858
-
859
- // 新增样式:步骤标题容器
860
- .step-title-container {
861
- .condition-indicators {
862
- margin-top: 8px;
863
- display: flex;
864
- align-items: center;
865
- gap: 8px;
866
-
867
- .condition-tag {
868
- margin: 0;
869
- }
870
-
871
- .condition-help {
872
- color: #999;
873
- cursor: pointer;
874
- &:hover {
875
- color: #1890ff;
876
- }
877
- }
878
- }
879
- }
880
-
881
- // 分支信息样式
882
- .branch-info {
883
- margin-top: 8px;
884
- padding: 8px;
885
- background: #f9f9f9;
886
- border-radius: 4px;
887
- border-left: 3px solid #722ed1;
888
-
889
- .branch-title {
890
- margin: 0 0 6px 0 !important;
891
- font-weight: bold;
892
- color: #722ed1;
893
- font-size: 12px;
894
- padding: 0 !important;
895
- border: none !important;
896
- }
897
-
898
- .branch-options {
899
- display: flex;
900
- flex-wrap: wrap;
901
- gap: 4px;
902
-
903
- .branch-option-tag {
904
- margin: 0;
905
- font-size: 11px;
906
- }
907
- }
908
- }
909
-
910
- // 省略步骤样式
911
- .more-steps-section {
912
- flex-shrink: 0;
913
- // margin-top: 24px;
914
-
915
- .more-steps-item {
916
- opacity: 0.7;
917
-
918
- .more-steps-container {
919
- .pending-tag {
920
- margin-top: 8px;
921
- margin-left: 0;
922
- }
923
- }
924
-
925
- .more-steps-desc {
926
- p {
927
- // font-style: italic;
928
- color: #999 !important;
929
-
930
- &.steps-count {
931
- font-weight: bold;
932
- color: #666 !important;
933
- }
934
- }
935
- }
936
- }
937
- }
938
- }
939
-
940
- // 分支步骤 Popover 样式
941
- /deep/ .ant-popover {
942
- .popover-title {
943
- display: flex;
944
- align-items: center;
945
- gap: 6px;
946
- font-weight: 600;
947
- color: #1890ff;
948
-
949
- .anticon {
950
- font-size: 14px;
951
- }
952
- }
953
-
954
- .branch-step-popover {
955
- min-width: 200px;
956
-
957
- .popover-item {
958
- display: flex;
959
- align-items: flex-start;
960
- margin-bottom: 8px;
961
-
962
- &:last-child {
963
- margin-bottom: 0;
964
- }
965
-
966
- &.no-data {
967
- justify-content: center;
968
- font-style: italic;
969
- color: #999;
970
- }
971
-
972
- .popover-label {
973
- font-weight: 600;
974
- color: #262626;
975
- min-width: 70px;
976
- flex-shrink: 0;
977
- }
978
-
979
- .popover-value {
980
- color: #595959;
981
- word-break: break-all;
982
- flex: 1;
983
- }
984
- }
985
- }
986
- }
987
- </style>
1
+ <template>
2
+ <div class="timeline-wrapper" ref="timelineContent" style="white-space: nowrap; overflow-x: auto">
3
+ <!-- 动态渲染时间轴段落 -->
4
+ <template v-for="(segment, segmentIndex) in getTimelineSegments()">
5
+
6
+ <!-- 主时间轴段落 -->
7
+ <div v-if="segment.type === 'main'" :key="'main-' + segmentIndex" class="timeline-section main-timeline">
8
+ <a-steps
9
+ :current="getCurrentStepInSection(segment.steps)"
10
+ :initial="1">
11
+ <template #progressDot="{index}">
12
+ <span v-if="!changeAble" class="step-label in-steps"><i :class="['step-icon', getStepIconColor(index, segment.steps)]"></i></span>
13
+ <span v-else :key="displayStepId" :class="['step-icon-filled digital', getStepIconColor(index, segment.steps)]">
14
+ <a-icon v-if="isStepCompleted(segment.steps[index - 1])" type="check-circle" theme="filled" :class="['step-icon-filled icon', getStepIconColor(index, segment.steps)]" />
15
+ <span v-else :class="['step-icon-filled digital', getStepIconColor(index, segment.steps)]">{{ getStepNumber(segmentIndex, index) }}</span>
16
+ </span>
17
+ </template>
18
+
19
+ <a-step
20
+ v-for="item in segment.steps"
21
+ :key="item.id"
22
+ class="step-item"
23
+ @click.stop="onStepClick(item.id)"
24
+ >
25
+ <template #title>
26
+ <div class="step-title-container">
27
+ <h3 v-if="item.name">{{ item.name }}</h3>
28
+ <!-- 判断节点特殊标识 -->
29
+ <div v-if="item.type === 'condition'" class="condition-indicators">
30
+ <a-tag color="purple" size="small" class="condition-tag">
31
+ <a-icon type="branches" /> 条件节点
32
+ </a-tag>
33
+ <a-tooltip title="此节点根据条件判断后续流程走向">
34
+ <a-icon type="question-circle" class="condition-help" />
35
+ </a-tooltip>
36
+ </div>
37
+ </div>
38
+ </template>
39
+ <template #description>
40
+ <div>
41
+ <p v-if="item.handler">负责人:
42
+ <trim-text-tail :text="item.handler" :length="14"/>
43
+ </p>
44
+ <p v-if="item.date">填报时间:{{ formatDate(item.date, 'yyyy-MM-dd hh:mm') }}</p>
45
+ <p v-if="item.deadline" :class="{ 'text-red': item.id === currentStepId && isOverdue }">截止时间:{{ formatDate(item.deadline, 'yyyy-MM-dd hh:mm') }}</p>
46
+ <p v-if="item.note">备注:
47
+ <trim-text-tail :text="item.note" :length="15"/>
48
+ </p>
49
+ </div>
50
+ </template>
51
+ </a-step>
52
+ </a-steps>
53
+ </div>
54
+
55
+ <!-- 并行分支段落 -->
56
+ <div v-else-if="segment.type === 'parallel'" :key="'parallel-' + segmentIndex" class="parallel-section">
57
+ <!-- 左侧连接线 -->
58
+ <div class="connection-line left-line"></div>
59
+
60
+ <!-- 并行分支容器 -->
61
+ <div class="parallel-branches-container">
62
+ <!-- 动态渲染并行分支 -->
63
+ <div
64
+ v-for="(branch, branchIndex) in segment.branches"
65
+ :key="'segment-' + segmentIndex + '-branch-' + branchIndex"
66
+ class="branch-row">
67
+
68
+ <!-- 分支时间轴 -->
69
+ <div :class="['branch-timeline', getBranchTimelineClass(branch)]">
70
+ <a-steps size="small" class="branch-steps">
71
+ <a-step
72
+ v-for="step in branch"
73
+ :key="'segment-' + segmentIndex + '-branch-' + branchIndex + '-step-' + step.id"
74
+ :class="['branch-step', getBranchStepClass(step)]"
75
+ @click.stop="onStepClick(step.id)">
76
+ <template #title>
77
+ <a-popover placement="top" trigger="hover" :mouseEnterDelay="0.3">
78
+ <template #content>
79
+ <div class="branch-step-popover">
80
+ <div class="popover-item" v-if="step.handler">
81
+ <span class="popover-label">负责人:</span>
82
+ <span class="popover-value">{{ step.handler }}</span>
83
+ </div>
84
+ <div class="popover-item" v-if="step.date">
85
+ <span class="popover-label">填报时间:</span>
86
+ <span class="popover-value">{{ formatDate(step.date, 'yyyy-MM-dd hh:mm') }}</span>
87
+ </div>
88
+ <div class="popover-item" v-if="step.deadline">
89
+ <span class="popover-label">截止时间:</span>
90
+ <span class="popover-value">{{ formatDate(step.deadline, 'yyyy-MM-dd hh:mm') }}</span>
91
+ </div>
92
+ <div class="popover-item" v-if="step.note">
93
+ <span class="popover-label">备注:</span>
94
+ <span class="popover-value">{{ step.note }}</span>
95
+ </div>
96
+ <div class="popover-item no-data" v-if="!step.handler && !step.date && !step.deadline && !step.note">
97
+ <span class="popover-value">暂无详细信息</span>
98
+ </div>
99
+ </div>
100
+ </template>
101
+ <template #title>
102
+ <div class="popover-title">
103
+ <a-icon type="info-circle" />
104
+ {{ step.name }} - 详细信息
105
+ </div>
106
+ </template>
107
+ <span class="branch-step-title">{{ step.name }}</span>
108
+ </a-popover>
109
+ </template>
110
+ <template #description>
111
+ <div class="branch-step-desc">
112
+ <p v-if="step.handler">{{ step.handler }}</p>
113
+ <p v-if="step.date">{{ formatDate(step.date, 'MM-dd hh:mm') }}</p>
114
+ </div>
115
+ </template>
116
+ </a-step>
117
+ </a-steps>
118
+ </div>
119
+ </div>
120
+ </div>
121
+
122
+ <!-- 右侧连接线 -->
123
+ <div class="connection-line right-line"></div>
124
+ </div>
125
+
126
+ </template>
127
+
128
+ <!-- 当步骤被截断时显示省略状态 -->
129
+ <div class="more-steps-section" v-if="hasMoreSteps">
130
+ <a-steps :current="1" :initial="1">
131
+ <a-step
132
+ key="more-steps"
133
+ class="step-item more-steps-item">
134
+ <template #title>
135
+ <div class="more-steps-container">
136
+ <h3>后续步骤</h3>
137
+ </div>
138
+ </template>
139
+ <template #description>
140
+ <div class="more-steps-desc">
141
+ <p>根据上述条件判断结果,将继续执行相应的后续流程</p>
142
+ <p class="steps-count">剩余 {{ remainingStepsCount }} 个步骤</p>
143
+ </div>
144
+ </template>
145
+ <template #icon>
146
+ <a-icon type="more" style="color: #d9d9d9;" />
147
+ </template>
148
+ </a-step>
149
+ </a-steps>
150
+ </div>
151
+ </div>
152
+ </template>
153
+
154
+ <script>
155
+ import { formatDate } from '@vue2-client/utils/util'
156
+ import TrimTextTail from './TrimTextTail'
157
+
158
+ export default {
159
+ components: { TrimTextTail },
160
+ name: 'WorkFlowTimeline',
161
+ props: {
162
+ workflowId: {
163
+ type: [String, Number],
164
+ required: true
165
+ },
166
+ currentStepId: {
167
+ type: Number,
168
+ required: false,
169
+ default: 1
170
+ },
171
+ activeStepId: {
172
+ type: Number,
173
+ required: false,
174
+ default: 1
175
+ },
176
+ state: {
177
+ type: [Boolean, Number],
178
+ required: false,
179
+ default: false
180
+ },
181
+ steps: {
182
+ type: Array,
183
+ required: true
184
+ },
185
+ changeAble: {
186
+ type: Boolean,
187
+ required: false,
188
+ default: false
189
+ }
190
+ },
191
+ data () {
192
+ return {
193
+ // 当前显示的步骤 id
194
+ displayStepId: 1,
195
+ // 当前任务是否逾期
196
+ isOverdue: false,
197
+ // 是否显示所有步骤(包括条件后的步骤)
198
+ showAllSteps: false
199
+ }
200
+ },
201
+ computed: {
202
+ // 控制显示的步骤:当判断节点未执行时只显示到判断节点,执行后显示包括并行分支的所有步骤
203
+ displaySteps () {
204
+ const steps = this.steps || []
205
+
206
+ // 如果用户选择显示所有步骤,直接返回
207
+ if (this.showAllSteps) {
208
+ return steps
209
+ }
210
+
211
+ // 找到第一个判断节点
212
+ const firstConditionStepIndex = steps.findIndex(step => step.type === 'condition')
213
+
214
+ // 如果没有找到判断节点,显示所有步骤
215
+ if (firstConditionStepIndex === -1) {
216
+ return steps
217
+ }
218
+
219
+ const firstConditionStep = steps[firstConditionStepIndex]
220
+
221
+ // 如果当前步骤在第一个判断节点之前或等于判断节点,只显示到判断节点
222
+ if (this.currentStepId <= firstConditionStep.id) {
223
+ return steps.slice(0, firstConditionStepIndex + 1)
224
+ }
225
+
226
+ // 如果判断节点已经执行,显示所有步骤(包括并行分支)
227
+ return steps
228
+ },
229
+
230
+ // 是否有更多步骤(被条件截断)
231
+ hasMoreSteps () {
232
+ // 如果已经显示所有步骤,则不显示"更多步骤"
233
+ if (this.showAllSteps) return false
234
+
235
+ const steps = this.steps || []
236
+ const firstConditionStepIndex = steps.findIndex(step => step.type === 'condition')
237
+
238
+ if (firstConditionStepIndex === -1) return false
239
+
240
+ const firstConditionStep = steps[firstConditionStepIndex]
241
+ return this.currentStepId <= firstConditionStep.id && firstConditionStepIndex < steps.length - 1
242
+ },
243
+
244
+ // 剩余步骤数量
245
+ remainingStepsCount () {
246
+ const steps = this.steps || []
247
+ const firstConditionStepIndex = steps.findIndex(step => step.type === 'condition')
248
+
249
+ if (firstConditionStepIndex === -1) return 0
250
+
251
+ return steps.length - (firstConditionStepIndex + 1)
252
+ }
253
+ },
254
+ mounted () {
255
+ this.init()
256
+ const timelineContent = this.$refs.timelineContent
257
+ timelineContent.onmousewheel = function (e) {
258
+ timelineContent.scrollLeft -= e.wheelDelta
259
+ e.preventDefault()
260
+ }
261
+ },
262
+ beforeDestroy () {
263
+ this.$refs.timelineContent.onmousewheel = null
264
+ },
265
+ methods: {
266
+ init () {
267
+ this.displayStepId = this.activeStepId
268
+ const currentStep = this.steps.find(step => step.id === this.currentStepId)
269
+ if (currentStep && currentStep.deadline) {
270
+ this.isOverdue = !this.state && this.formatDate(new Date(), 'yyyy-MM-dd hh:mm') > currentStep.deadline
271
+ }
272
+ this.$emit('activeStep', this.displayStepId)
273
+ },
274
+
275
+ // 获取时间轴段落数据
276
+ getTimelineSegments () {
277
+ const steps = this.displaySteps
278
+ const segments = []
279
+ let currentIndex = 0
280
+
281
+ while (currentIndex < steps.length) {
282
+ // 收集连续的主流程步骤(包括并行分支入口节点)
283
+ const mainSteps = []
284
+ while (currentIndex < steps.length && !this.isParallelStep(steps[currentIndex])) {
285
+ mainSteps.push(steps[currentIndex])
286
+
287
+ // 如果当前步骤是并行分支入口,处理完后跳出循环准备处理并行分支
288
+ if (this.isParallelBranchEntry(steps[currentIndex])) {
289
+ currentIndex++
290
+ break
291
+ }
292
+ currentIndex++
293
+ }
294
+
295
+ if (mainSteps.length > 0) {
296
+ segments.push({
297
+ type: 'main',
298
+ steps: mainSteps
299
+ })
300
+ }
301
+
302
+ // 检查是否有并行分支需要处理
303
+ if (currentIndex > 0 && this.isParallelBranchEntry(steps[currentIndex - 1])) {
304
+ // 获取这个并行分支的所有步骤
305
+ const branchIndex = steps[currentIndex - 1].properties.branchIndex
306
+ const parallelSteps = this.getParallelStepsByBranchIndex(steps, branchIndex)
307
+
308
+ if (parallelSteps.length > 0) {
309
+ // 按branchPath分组
310
+ const branches = this.groupParallelSteps(parallelSteps)
311
+ segments.push({
312
+ type: 'parallel',
313
+ branches: branches
314
+ })
315
+
316
+ // 跳过已处理的并行步骤
317
+ currentIndex = this.skipProcessedParallelSteps(steps, currentIndex, parallelSteps)
318
+ }
319
+ }
320
+ }
321
+
322
+ return segments
323
+ },
324
+
325
+ // 根据branchIndex获取并行步骤
326
+ getParallelStepsByBranchIndex (steps, branchIndex) {
327
+ return steps.filter(step =>
328
+ step.properties &&
329
+ step.properties.branchPath &&
330
+ step.properties.branchPath.includes(`parallel_${branchIndex}_`)
331
+ )
332
+ },
333
+
334
+ // 将并行步骤按branchPath分组
335
+ groupParallelSteps (parallelSteps) {
336
+ const branches = {}
337
+ parallelSteps.forEach(step => {
338
+ const branchPath = step.properties.branchPath
339
+ if (!branches[branchPath]) {
340
+ branches[branchPath] = []
341
+ }
342
+ branches[branchPath].push(step)
343
+ })
344
+
345
+ // 对每个分支内的步骤按id排序
346
+ Object.keys(branches).forEach(branchPath => {
347
+ branches[branchPath].sort((a, b) => a.id - b.id)
348
+ })
349
+
350
+ return Object.values(branches)
351
+ },
352
+
353
+ // 跳过已处理的并行步骤
354
+ skipProcessedParallelSteps (steps, currentIndex, processedSteps) {
355
+ const processedIds = new Set(processedSteps.map(step => step.id))
356
+ while (currentIndex < steps.length && processedIds.has(steps[currentIndex].id)) {
357
+ currentIndex++
358
+ }
359
+ return currentIndex
360
+ },
361
+
362
+ // 判断是否为并行分支入口
363
+ isParallelBranchEntry (step) {
364
+ return step.properties &&
365
+ step.properties.branchType === 'parallelBranch'
366
+ },
367
+
368
+ // 判断是否为分支汇合节点
369
+ isBranchExit (step) {
370
+ return step.properties &&
371
+ step.properties.flowRole === 'branchExit'
372
+ },
373
+
374
+ // 获取在某个section中的当前步骤索引
375
+ getCurrentStepInSection (sectionSteps) {
376
+ if (!sectionSteps || sectionSteps.length === 0) return 0
377
+
378
+ const currentStepIndex = sectionSteps.findIndex(step => step.id === this.currentStepId)
379
+ return currentStepIndex >= 0 ? currentStepIndex + 1 : 0
380
+ },
381
+
382
+ // 获取步骤编号
383
+ getStepNumber (segmentIndex, stepIndex) {
384
+ const segments = this.getTimelineSegments()
385
+ let stepNumber = 0
386
+
387
+ // 计算前面所有段落的步骤数
388
+ for (let i = 0; i < segmentIndex; i++) {
389
+ const segment = segments[i]
390
+ if (segment.type === 'main') {
391
+ stepNumber += segment.steps.length
392
+ } else if (segment.type === 'parallel') {
393
+ // 并行分支计算总步骤数
394
+ stepNumber += segment.branches.reduce((total, branch) => total + branch.length, 0)
395
+ }
396
+ }
397
+
398
+ return stepNumber + stepIndex
399
+ },
400
+
401
+ // 判断步骤是否已完成
402
+ isStepCompleted (step) {
403
+ if (!step) return false
404
+ return step.id < this.currentStepId || this.state
405
+ },
406
+
407
+ // 判断id是否为流程中最后一个
408
+ isLastStep (stepId) {
409
+ return stepId >= this.steps.length
410
+ },
411
+
412
+ // 判断是否为并行步骤
413
+ isParallelStep (step) {
414
+ return step.properties &&
415
+ step.properties.branchPath &&
416
+ step.properties.branchPath.includes('parallel_')
417
+ },
418
+
419
+ // 动态展示时间线节点颜色
420
+ getStepIconColor (index, sectionSteps) {
421
+ if (!sectionSteps || !sectionSteps[index - 1]) return 'gray'
422
+
423
+ const stepId = sectionSteps[index - 1].id
424
+
425
+ if (this.changeAble && stepId === this.displayStepId) {
426
+ return 'yellow'
427
+ } else if (!this.changeAble && stepId === this.currentStepId) {
428
+ return this.state ? 'blue' : 'green'
429
+ }
430
+ if (stepId < this.currentStepId || this.state) {
431
+ return 'blue'
432
+ }
433
+ if (stepId === this.currentStepId) {
434
+ return this.isOverdue ? 'red' : 'blue'
435
+ }
436
+ return 'gray'
437
+ },
438
+
439
+ // 获取分支步骤的CSS类
440
+ getBranchStepClass (step) {
441
+ if (!step) return 'branch-step-gray'
442
+
443
+ // 如果在可编辑状态下且是当前显示的步骤
444
+ if (this.changeAble && step.id === this.displayStepId) {
445
+ return 'branch-step-yellow'
446
+ }
447
+
448
+ // 根据 status 判断颜色
449
+ switch (step.status) {
450
+ case 0: // 未处理
451
+ return 'branch-step-gray'
452
+ case 1: // 正在处理
453
+ // 检查是否逾期
454
+ if (step.deadline && !this.state && this.formatDate(new Date(), 'yyyy-MM-dd hh:mm') > step.deadline) {
455
+ return 'branch-step-red'
456
+ }
457
+ return 'branch-step-blue'
458
+ case 2: // 已处理
459
+ return 'branch-step-green'
460
+ default:
461
+ return 'branch-step-gray'
462
+ }
463
+ },
464
+
465
+ // 获取分支时间轴的CSS类(根据分支中的步骤状态)
466
+ getBranchTimelineClass (branch) {
467
+ if (!branch || branch.length === 0) return 'branch-timeline-gray'
468
+
469
+ // 检查分支中所有步骤的状态
470
+ const hasCompleted = branch.some(step => step.status === 2) // 有已完成的
471
+ const hasProcessing = branch.some(step => step.status === 1) // 有正在处理的
472
+ const allPending = branch.every(step => step.status === 0 || step.status === undefined) // 全部未处理
473
+
474
+ // 优先级:正在处理 > 已完成 > 未处理
475
+ if (hasProcessing) {
476
+ return 'branch-timeline-blue' // 正在进行
477
+ } else if (hasCompleted) {
478
+ return 'branch-timeline-green' // 已完成
479
+ } else if (allPending) {
480
+ return 'branch-timeline-gray' // 未抵达
481
+ } else {
482
+ return 'branch-timeline-gray' // 默认
483
+ }
484
+ },
485
+
486
+ onStepClick (stepId) {
487
+ if (!this.changeAble || stepId === this.displayStepId) {
488
+ return
489
+ }
490
+ const curStep = this.steps.find(item => item.id === stepId)
491
+ if (stepId > this.currentStepId && curStep.status !== 1 && curStep.status !== 2) {
492
+ return this.$message.warn('请先完成当前步骤')
493
+ }
494
+ this.$emit('activeStep', stepId)
495
+ this.displayStepId = stepId
496
+ },
497
+
498
+ formatDate,
499
+ },
500
+ watch: {
501
+ activeStepId: function (newVal) {
502
+ this.displayStepId = newVal
503
+ }
504
+ }
505
+ }
506
+ </script>
507
+
508
+ <style lang="less" scoped>
509
+ .timeline-wrapper {
510
+ display: flex;
511
+ align-items: flex-start;
512
+ gap: 0;
513
+
514
+ .timeline-section {
515
+ flex-shrink: 0;
516
+
517
+ // 主时间轴自动填充剩余宽度
518
+ &.main-timeline {
519
+ flex: 1;
520
+ }
521
+
522
+ /deep/ .ant-steps-dot {
523
+ margin-bottom: 6px;
524
+ .ant-steps-item-tail {
525
+ top: 7px;
526
+ margin-left: 106px;
527
+ width: calc(100% - 23px);
528
+ }
529
+ .ant-steps-item-icon {
530
+ margin-left: 90px;
531
+ width: 8px;
532
+ height: 8px;
533
+ line-height: 8px;
534
+ }
535
+ .ant-steps-item-content {
536
+ min-width: 195px;
537
+ margin-top: 24px;
538
+ .ant-steps-item-description {
539
+ text-align: left;
540
+ background: #fff;
541
+ border-radius: 4px;
542
+ padding: 12px;
543
+ position: relative;
544
+
545
+ p {
546
+ position: relative;
547
+ padding: 8px 0;
548
+ margin: 0;
549
+ font-size: 13px;
550
+ color: #595959;
551
+ line-height: 1.5;
552
+ white-space: nowrap;
553
+ overflow: visible;
554
+
555
+ &:first-child {
556
+ border-top: 1px dotted #e8e8e8;
557
+ }
558
+
559
+ &:not(:last-child) {
560
+ border-bottom: 1px dashed #f0f0f0;
561
+ }
562
+
563
+ &:last-child {
564
+ padding-bottom: 0;
565
+ }
566
+ }
567
+ }
568
+ }
569
+ &.ant-steps {
570
+ padding-top: 8px;
571
+ }
572
+ }
573
+
574
+ /deep/ .ant-steps-item-title {
575
+ font-size: 14px;
576
+ h3 {
577
+ margin-bottom: 0;
578
+ }
579
+ }
580
+ }
581
+
582
+ .parallel-section {
583
+ display: flex;
584
+ align-items: flex-start;
585
+ position: relative;
586
+
587
+ .connection-line {
588
+ width: 2rem;
589
+ height: 0px;
590
+ // background: #f0f0f0;
591
+ flex-shrink: 0;
592
+ margin-top: 1rem;
593
+
594
+ &.left-line {
595
+ margin-right: 0;
596
+ position: relative;
597
+
598
+ &::before {
599
+ content: '';
600
+ position: absolute;
601
+ left: -4.8rem;
602
+ top: 0;
603
+ width: 6rem;
604
+ height: 2.5px;
605
+ background: #f0f0f0;
606
+ }
607
+ }
608
+
609
+ &.right-line {
610
+ margin-left: 0;
611
+ position: relative;
612
+
613
+ &::before {
614
+ content: '';
615
+ position: absolute;
616
+ right: -4.5rem;
617
+ top: 0;
618
+ width: 6rem;
619
+ height: 2.5px;
620
+ background: #f0f0f0;
621
+ }
622
+ }
623
+ }
624
+
625
+ .parallel-branches-container {
626
+ display: flex;
627
+ flex-direction: column;
628
+ gap: 16px;
629
+ padding: 16px 20px;
630
+ background: #fafafa;
631
+ border: 1px solid #e0e0e0;
632
+ border-radius: 8px;
633
+ min-width: 400px;
634
+ width: fit-content;
635
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
636
+
637
+ .branch-row {
638
+ .branch-timeline {
639
+ padding: 12px 16px;
640
+ background: #fff;
641
+ border-radius: 6px;
642
+ border-left: 4px solid #d9d9d9;
643
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
644
+
645
+ .branch-steps {
646
+ /deep/ .ant-steps-dot {
647
+ margin-bottom: 6px;
648
+
649
+ .ant-steps-item-tail {
650
+ top: 7px;
651
+ margin-left: 70px;
652
+ width: calc(100% - 16px);
653
+ }
654
+
655
+ .ant-steps-item-icon {
656
+ margin-left: 60px;
657
+ width: 8px;
658
+ height: 8px;
659
+ line-height: 8px;
660
+ }
661
+
662
+ .ant-steps-item-content {
663
+ min-width: 160px;
664
+ margin-top: 24px;
665
+
666
+ .ant-steps-item-description {
667
+ text-align: left;
668
+ background: #fff;
669
+ border-radius: 4px;
670
+ padding: 10px 12px;
671
+ position: relative;
672
+ border: 1px solid #f0f0f0;
673
+
674
+ p {
675
+ position: relative;
676
+ padding: 4px 0;
677
+ margin: 0;
678
+ font-size: 12px;
679
+ color: #666;
680
+ line-height: 1.4;
681
+ white-space: nowrap;
682
+ overflow: visible;
683
+
684
+ &:first-child {
685
+ border-top: 1px dotted #e8e8e8;
686
+ }
687
+
688
+ &:not(:last-child) {
689
+ border-bottom: 1px dashed #f0f0f0;
690
+ }
691
+
692
+ &:last-child {
693
+ padding-bottom: 0;
694
+ }
695
+ }
696
+ }
697
+ }
698
+ }
699
+
700
+ /deep/ .ant-steps-item-title {
701
+ font-size: 14px;
702
+ line-height: 22px;
703
+ margin-bottom: 6px;
704
+ font-weight: 500;
705
+ }
706
+ }
707
+
708
+ .branch-step-title {
709
+ font-size: 14px;
710
+ font-weight: 500;
711
+ color: #262626;
712
+ cursor: pointer;
713
+
714
+ &:hover {
715
+ color: #1890ff;
716
+ }
717
+ }
718
+
719
+ .branch-step-desc {
720
+ p {
721
+ margin: 0;
722
+ padding: 4px 0;
723
+ font-size: 12px;
724
+ color: #666;
725
+ border: none !important;
726
+ }
727
+ }
728
+
729
+ // 移除固定的分支颜色,改为动态状态颜色
730
+ // &:nth-child(1) {
731
+ // border-left-color: #52c41a;
732
+ // }
733
+
734
+ // &:nth-child(2) {
735
+ // border-left-color: #1890ff;
736
+ // }
737
+
738
+ // &:nth-child(3) {
739
+ // border-left-color: #722ed1;
740
+ // }
741
+
742
+ &:hover {
743
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
744
+ transform: translateY(-2px);
745
+ transition: all 0.3s ease;
746
+ }
747
+
748
+ /deep/ .ant-steps-icon {
749
+ color: #f0f0f0;
750
+ }
751
+
752
+ // 分支步骤状态颜色
753
+ /deep/ .branch-step-gray .ant-steps-item-icon {
754
+ background-color: #d9d9d9 !important;
755
+ border-color: #d9d9d9 !important;
756
+ }
757
+
758
+ /deep/ .branch-step-blue .ant-steps-item-icon {
759
+ background-color: #1890ff !important;
760
+ border-color: #1890ff !important;
761
+ }
762
+
763
+ /deep/ .branch-step-green .ant-steps-item-icon {
764
+ background-color: #52c41a !important;
765
+ border-color: #52c41a !important;
766
+ }
767
+
768
+ /deep/ .branch-step-red .ant-steps-item-icon {
769
+ background-color: #ff4d4f !important;
770
+ border-color: #ff4d4f !important;
771
+ }
772
+
773
+ /deep/ .branch-step-yellow .ant-steps-item-icon {
774
+ background-color: #faad14 !important;
775
+ border-color: #faad14 !important;
776
+ }
777
+
778
+ // 分支时间轴左侧边框颜色
779
+ &.branch-timeline-gray {
780
+ border-left-color: #d9d9d9;
781
+ }
782
+
783
+ &.branch-timeline-green {
784
+ border-left-color: #52c41a;
785
+ }
786
+
787
+ &.branch-timeline-blue {
788
+ border-left-color: #1890ff;
789
+ }
790
+ }
791
+ }
792
+ }
793
+ }
794
+
795
+ @red: rgb(255, 77, 79);
796
+
797
+ .step-icon-filled {
798
+ position: absolute;
799
+ top: -2px;
800
+ left: -6px;
801
+ @blue: rgb(24, 144, 255);
802
+ @yellow: rgb(255, 164, 39);
803
+ @gray: rgb(191, 191, 191);
804
+ &.digital {
805
+ width: 28px;
806
+ line-height: 28px;
807
+ border-radius: 50%;
808
+ color: #ffffff;
809
+ &.blue {
810
+ background: @blue;
811
+ }
812
+ &.yellow {
813
+ background: @yellow;
814
+ }
815
+ &.gray {
816
+ background: @gray;
817
+ }
818
+ &.red {
819
+ background: @red;
820
+ }
821
+ }
822
+ &.icon {
823
+ font-size: 28px;
824
+ &.blue {
825
+ color: @blue;
826
+ }
827
+ &.yellow {
828
+ color: @yellow;
829
+ }
830
+ &.gray {
831
+ color: @gray;
832
+ }
833
+ }
834
+ }
835
+
836
+ .step-item {
837
+ cursor: pointer;
838
+ &:hover {
839
+ .ant-steps-item-description {
840
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
841
+ transform: translateY(-1px);
842
+ transition: all 0.3s ease;
843
+ }
844
+ p {
845
+ color: #262626;
846
+ }
847
+ }
848
+ .text-red {
849
+ color: @red !important;
850
+ }
851
+ }
852
+
853
+ .next-step-overdue {
854
+ /deep/ .ant-steps-item-tail::after {
855
+ background: @red;
856
+ }
857
+ }
858
+
859
+ // 新增样式:步骤标题容器
860
+ .step-title-container {
861
+ .condition-indicators {
862
+ margin-top: 8px;
863
+ display: flex;
864
+ align-items: center;
865
+ gap: 8px;
866
+
867
+ .condition-tag {
868
+ margin: 0;
869
+ }
870
+
871
+ .condition-help {
872
+ color: #999;
873
+ cursor: pointer;
874
+ &:hover {
875
+ color: #1890ff;
876
+ }
877
+ }
878
+ }
879
+ }
880
+
881
+ // 分支信息样式
882
+ .branch-info {
883
+ margin-top: 8px;
884
+ padding: 8px;
885
+ background: #f9f9f9;
886
+ border-radius: 4px;
887
+ border-left: 3px solid #722ed1;
888
+
889
+ .branch-title {
890
+ margin: 0 0 6px 0 !important;
891
+ font-weight: bold;
892
+ color: #722ed1;
893
+ font-size: 12px;
894
+ padding: 0 !important;
895
+ border: none !important;
896
+ }
897
+
898
+ .branch-options {
899
+ display: flex;
900
+ flex-wrap: wrap;
901
+ gap: 4px;
902
+
903
+ .branch-option-tag {
904
+ margin: 0;
905
+ font-size: 11px;
906
+ }
907
+ }
908
+ }
909
+
910
+ // 省略步骤样式
911
+ .more-steps-section {
912
+ flex-shrink: 0;
913
+ // margin-top: 24px;
914
+
915
+ .more-steps-item {
916
+ opacity: 0.7;
917
+
918
+ .more-steps-container {
919
+ .pending-tag {
920
+ margin-top: 8px;
921
+ margin-left: 0;
922
+ }
923
+ }
924
+
925
+ .more-steps-desc {
926
+ p {
927
+ // font-style: italic;
928
+ color: #999 !important;
929
+
930
+ &.steps-count {
931
+ font-weight: bold;
932
+ color: #666 !important;
933
+ }
934
+ }
935
+ }
936
+ }
937
+ }
938
+ }
939
+
940
+ // 分支步骤 Popover 样式
941
+ /deep/ .ant-popover {
942
+ .popover-title {
943
+ display: flex;
944
+ align-items: center;
945
+ gap: 6px;
946
+ font-weight: 600;
947
+ color: #1890ff;
948
+
949
+ .anticon {
950
+ font-size: 14px;
951
+ }
952
+ }
953
+
954
+ .branch-step-popover {
955
+ min-width: 200px;
956
+
957
+ .popover-item {
958
+ display: flex;
959
+ align-items: flex-start;
960
+ margin-bottom: 8px;
961
+
962
+ &:last-child {
963
+ margin-bottom: 0;
964
+ }
965
+
966
+ &.no-data {
967
+ justify-content: center;
968
+ font-style: italic;
969
+ color: #999;
970
+ }
971
+
972
+ .popover-label {
973
+ font-weight: 600;
974
+ color: #262626;
975
+ min-width: 70px;
976
+ flex-shrink: 0;
977
+ }
978
+
979
+ .popover-value {
980
+ color: #595959;
981
+ word-break: break-all;
982
+ flex: 1;
983
+ }
984
+ }
985
+ }
986
+ }
987
+ </style>