vue2-client 1.15.86 → 1.15.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/.editorconfig +9 -9
  2. package/.env +20 -20
  3. package/.env.development +1 -1
  4. package/.env.iot +19 -19
  5. package/.env.message +19 -19
  6. package/.env.revenue +19 -19
  7. package/.env.runtime +19 -19
  8. package/.eslintrc.json +5 -5
  9. package/CLAUDE.md +89 -89
  10. package/README.md +65 -65
  11. package/babel.config.js +21 -21
  12. package/docs/Logic/345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +46 -46
  13. package/docs/notice.md +22 -22
  14. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +179 -179
  15. package/jest.config.js +22 -22
  16. package/package.json +111 -111
  17. package/src/App.vue +196 -196
  18. package/src/ReportView.js +13 -13
  19. package/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox.vue +532 -532
  20. package/src/base-client/components/common/AddressSearchCombobox/index.js +3 -3
  21. package/src/base-client/components/common/AmapMarker/index.js +3 -3
  22. package/src/base-client/components/common/CitySelect/CitySelect.vue +376 -376
  23. package/src/base-client/components/common/CitySelect/demo.vue +43 -43
  24. package/src/base-client/components/common/ColorPickerCombobox/ColorPickerCombobox.vue +99 -99
  25. package/src/base-client/components/common/ColorPickerCombobox/demo.vue +34 -34
  26. package/src/base-client/components/common/FormGroupEdit/FormGroupEdit.vue +146 -146
  27. package/src/base-client/components/common/JSONToTree/index.js +3 -3
  28. package/src/base-client/components/common/Upload/Upload.vue +323 -323
  29. package/src/base-client/components/common/XAddForm/index.js +3 -3
  30. package/src/base-client/components/common/XAddForm/index.md +61 -61
  31. package/src/base-client/components/common/XAddNativeForm/XAddNativeForm.vue +1169 -1169
  32. package/src/base-client/components/common/XAddNativeForm/demo.vue +54 -54
  33. package/src/base-client/components/common/XAddNativeForm/index.js +3 -3
  34. package/src/base-client/components/common/XAddReport/XAddReport.vue +212 -212
  35. package/src/base-client/components/common/XBadge/index.js +3 -3
  36. package/src/base-client/components/common/XBadge/index.md +39 -39
  37. package/src/base-client/components/common/XButtons/XButtons.vue +284 -284
  38. package/src/base-client/components/common/XCalendar/XCalendar.vue +369 -369
  39. package/src/base-client/components/common/XCalendar/index.md +284 -284
  40. package/src/base-client/components/common/XCard/index.js +3 -3
  41. package/src/base-client/components/common/XCard/index.md +43 -43
  42. package/src/base-client/components/common/XCardSet/XCardSet.vue +300 -300
  43. package/src/base-client/components/common/XCollapse/XCollapse.vue +354 -354
  44. package/src/base-client/components/common/XConversation/XConversation.vue +576 -576
  45. package/src/base-client/components/common/XConversation/XConversationDemo.vue +28 -28
  46. package/src/base-client/components/common/XDataCard/XDataCard.vue +629 -629
  47. package/src/base-client/components/common/XDatePicker/index.vue +276 -276
  48. package/src/base-client/components/common/XDescriptions/XDescriptions.vue +174 -174
  49. package/src/base-client/components/common/XDescriptions/XDescriptionsGroup.vue +314 -314
  50. package/src/base-client/components/common/XDescriptions/demo.vue +51 -51
  51. package/src/base-client/components/common/XForm/XForm.vue +420 -420
  52. package/src/base-client/components/common/XForm/XFormItem.vue +1474 -1474
  53. package/src/base-client/components/common/XForm/XTreeSelect.vue +276 -276
  54. package/src/base-client/components/common/XForm/demo.vue +105 -105
  55. package/src/base-client/components/common/XForm/index.js +3 -3
  56. package/src/base-client/components/common/XFormCol/XFormCol.vue +157 -157
  57. package/src/base-client/components/common/XFormCol/index.js +3 -3
  58. package/src/base-client/components/common/XFormCol/index.md +35 -35
  59. package/src/base-client/components/common/XFormGroup/XFormGroup.vue +301 -301
  60. package/src/base-client/components/common/XFormGroup/demo.vue +41 -41
  61. package/src/base-client/components/common/XFormTable/XFormTable.vue +938 -938
  62. package/src/base-client/components/common/XFormTable/demo.vue +87 -87
  63. package/src/base-client/components/common/XFormTable/index.js +3 -3
  64. package/src/base-client/components/common/XImportExcel/XImportExcel.vue +174 -174
  65. package/src/base-client/components/common/XImportExcel/index.js +3 -3
  66. package/src/base-client/components/common/XImportExcel/index.md +38 -38
  67. package/src/base-client/components/common/XInput/XInput.vue +128 -128
  68. package/src/base-client/components/common/XInput/index.js +3 -3
  69. package/src/base-client/components/common/XInput/index.md +97 -97
  70. package/src/base-client/components/common/XIntervalPicker/XIntervalPicker.vue +121 -121
  71. package/src/base-client/components/common/XLicensePlate/index.js +3 -3
  72. package/src/base-client/components/common/XLicensePlate/index.md +38 -38
  73. package/src/base-client/components/common/XPrint/Demo.vue +41 -41
  74. package/src/base-client/components/common/XPrint/PrintBill.vue +308 -308
  75. package/src/base-client/components/common/XRate/demo.vue +102 -102
  76. package/src/base-client/components/common/XRate/index.vue +149 -149
  77. package/src/base-client/components/common/XReport/XReport.vue +963 -963
  78. package/src/base-client/components/common/XReport/XReportDemo.vue +70 -70
  79. package/src/base-client/components/common/XReport/XReportTrGroup.vue +1005 -1005
  80. package/src/base-client/components/common/XReport/index.md +103 -103
  81. package/src/base-client/components/common/XReportDrawer/XReportDrawer.vue +201 -201
  82. package/src/base-client/components/common/XReportGrid/XReport.vue +1075 -1075
  83. package/src/base-client/components/common/XReportGrid/XReportDemo.vue +44 -44
  84. package/src/base-client/components/common/XReportGrid/XReportDesign.vue +620 -620
  85. package/src/base-client/components/common/XReportGrid/XReportTrGroup.vue +723 -723
  86. package/src/base-client/components/common/XReportGrid/print.js +184 -184
  87. package/src/base-client/components/common/XTab/XTab.vue +299 -299
  88. package/src/base-client/components/common/XTable/ExportExcel.vue +283 -283
  89. package/src/base-client/components/common/XTable/XTable.vue +1599 -1599
  90. package/src/base-client/components/common/XTable/XTableWrapper.vue +597 -597
  91. package/src/base-client/components/common/XTable/index.js +3 -3
  92. package/src/base-client/components/common/XTimeline/XTimeline.vue +358 -358
  93. package/src/base-client/components/common/XTimeline/index.md +191 -191
  94. package/src/base-client/components/common/XTree/XTreePro.vue +452 -452
  95. package/src/base-client/components/common/XTreeOne/index.js +3 -3
  96. package/src/base-client/components/common/XUploadFilesView/index.vue +485 -485
  97. package/src/base-client/components/his/XCharge/XCharge.vue +238 -238
  98. package/src/base-client/components/his/XCheckbox/XCheckbox.vue +105 -105
  99. package/src/base-client/components/his/XCheckbox/index.md +253 -253
  100. package/src/base-client/components/his/XHDescriptions/XHDescriptions.vue +430 -430
  101. package/src/base-client/components/his/XHDescriptions/index.md +217 -217
  102. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +629 -629
  103. package/src/base-client/components/his/XHisEditor/diagnosisAutocomplete.js +263 -263
  104. package/src/base-client/components/his/XList/XList.vue +495 -495
  105. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.json +3 -3
  106. package/src/base-client/components/his/XQuestionnaire/XQuestionnaire.vue +106 -106
  107. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireDemo.vue +51 -51
  108. package/src/base-client/components/his/XQuestionnaire/XQuestionnaireItem.vue +269 -269
  109. package/src/base-client/components/his/XRadio/XRadio.vue +125 -125
  110. package/src/base-client/components/his/XRadio/index.md +234 -234
  111. package/src/base-client/components/his/XSelect/XSelect.vue +72 -72
  112. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +234 -234
  113. package/src/base-client/components/his/XShiftSchedule/dome.vue +29 -29
  114. package/src/base-client/components/his/XSidebar/XSidebar.vue +240 -240
  115. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  116. package/src/base-client/components/his/XTimeSelect/XTimeSelect.vue +162 -162
  117. package/src/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue +23 -23
  118. package/src/base-client/components/his/XTitle/README.md +113 -113
  119. package/src/base-client/components/his/XTitle/XTitle.vue +123 -123
  120. package/src/base-client/components/his/XTreeRows/TreeNode.vue +107 -107
  121. package/src/base-client/components/his/XTreeRows/XTreeRows.vue +307 -307
  122. package/src/base-client/components/his/threeTestOrders/dome.vue +68 -68
  123. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  124. package/src/base-client/components/his/threeTestOrders/textBox.vue +457 -457
  125. package/src/base-client/components/his/threeTestOrders/threeTestOrders.vue +475 -475
  126. package/src/base-client/components/layout/XPageView/RenderRow.vue +88 -88
  127. package/src/base-client/components/layout/XPageView/XErrorView.vue +22 -22
  128. package/src/base-client/components/layout/XPageView/XPageRowTemplate.vue +37 -37
  129. package/src/base-client/components/layout/XPageView/XPageView.vue +223 -223
  130. package/src/base-client/components/layout/XPageView/XTab/XTab.vue +96 -96
  131. package/src/base-client/components/layout/XPageView/XTab/index.js +3 -3
  132. package/src/base-client/components/layout/XPageView/componentTypes.js +22 -22
  133. package/src/base-client/components/layout/XPageView/index.js +2 -2
  134. package/src/base-client/components/layout/XPageView/index.md +96 -96
  135. package/src/base-client/components/system/DictionaryDetailsView/index.js +3 -3
  136. package/src/base-client/components/system/DictionaryDetailsView/index.md +41 -41
  137. package/src/base-client/components/system/LogDetailsView/LogDetailsView.vue +376 -376
  138. package/src/base-client/components/system/LogDetailsView/index.js +3 -3
  139. package/src/base-client/components/system/LogDetailsView/index.md +41 -41
  140. package/src/base-client/components/system/QueryParamsDetailsView/index.js +3 -3
  141. package/src/base-client/components/ticket/TicketDetailsView/TicketDetailsView.vue +807 -807
  142. package/src/base-client/components/ticket/TicketDetailsView/index.js +3 -3
  143. package/src/base-client/components/ticket/TicketDetailsView/index.md +29 -29
  144. package/src/base-client/components/ticket/TicketDetailsView/part/TicketDetailsFlow.vue +260 -260
  145. package/src/base-client/components/ticket/TicketDetailsView/part/index.js +3 -3
  146. package/src/base-client/components/ticket/TicketSubmitSuccessView/TicketSubmitSuccessView.vue +532 -532
  147. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.js +3 -3
  148. package/src/base-client/components/ticket/TicketSubmitSuccessView/index.md +29 -29
  149. package/src/base-client/plugins/AppData.js +126 -126
  150. package/src/base-client/plugins/PagedList.js +177 -177
  151. package/src/base-client/plugins/__tests__/selectValueTypeHelper.test.js +154 -154
  152. package/src/base-client/plugins/authority-plugin.js +167 -167
  153. package/src/base-client/plugins/compatible/LoginServiceOA.js +20 -20
  154. package/src/base-client/plugins/i18n-extend.js +32 -32
  155. package/src/base-client/plugins/moment.js +8 -8
  156. package/src/base-client/plugins/selectValueTypeHelper.js +281 -281
  157. package/src/bootstrap.js +51 -51
  158. package/src/components/Ellipsis/Ellipsis.vue +65 -65
  159. package/src/components/Ellipsis/index.js +3 -3
  160. package/src/components/Ellipsis/index.md +38 -38
  161. package/src/components/FileImageItem/FileItem.vue +320 -320
  162. package/src/components/FileImageItem/FileItemGroup.vue +197 -197
  163. package/src/components/FileImageItem/ImageItem.vue +107 -107
  164. package/src/components/FileImageItem/index.js +4 -4
  165. package/src/components/FilePreview/FilePreview.vue +181 -181
  166. package/src/components/FilePreview/FilePreviewDemo.vue +30 -30
  167. package/src/components/FilePreview/index.js +3 -3
  168. package/src/components/HeightScanner/index.vue +615 -615
  169. package/src/components/STable/README.md +341 -341
  170. package/src/components/STable/index.js +558 -558
  171. package/src/components/TableSetting/TableSetting.vue +143 -143
  172. package/src/components/TableSetting/index.js +3 -3
  173. package/src/components/Trend/Trend.vue +41 -41
  174. package/src/components/Trend/index.js +3 -3
  175. package/src/components/Trend/index.less +41 -41
  176. package/src/components/Trend/index.md +45 -45
  177. package/src/components/_util/util.js +46 -46
  178. package/src/components/cache/AKeepAlive.js +179 -179
  179. package/src/components/exception/typeConfig.js +19 -19
  180. package/src/components/form/FormRow.vue +52 -52
  181. package/src/components/index.less +5 -5
  182. package/src/components/menu/Contextmenu.vue +84 -84
  183. package/src/components/menu/index.less +38 -38
  184. package/src/components/page/header/PageHeader.vue +64 -64
  185. package/src/components/page/header/index.less +40 -40
  186. package/src/components/result/Result.vue +77 -77
  187. package/src/components/setting/SettingItem.vue +26 -26
  188. package/src/components/setting/i18n.js +117 -117
  189. package/src/components/table/StandardTable.vue +141 -141
  190. package/src/components/table/advance/ActionColumns.vue +158 -158
  191. package/src/components/table/advance/ActionSize.vue +45 -45
  192. package/src/components/table/advance/AdvanceTable.vue +275 -275
  193. package/src/components/table/advance/SearchArea.vue +355 -355
  194. package/src/components/table/advance/index.js +2 -2
  195. package/src/components/table/api/ApiTable.vue +50 -50
  196. package/src/components/task/TaskGroup.vue +80 -80
  197. package/src/components/task/TaskItem.vue +26 -26
  198. package/src/components/tool/AvatarList.vue +68 -68
  199. package/src/components/tool/DetailList.vue +157 -157
  200. package/src/components/tool/Drawer.vue +142 -142
  201. package/src/components/tool/FooterToolBar.vue +30 -30
  202. package/src/components/tool/HeadInfo.vue +35 -35
  203. package/src/components/tool/TagSelect.vue +83 -83
  204. package/src/components/tool/TagSelectOption.vue +33 -33
  205. package/src/components/transition/PageToggleTransition.vue +97 -97
  206. package/src/config/default/admin.config.js +18 -18
  207. package/src/config/default/animate.config.js +21 -21
  208. package/src/config/default/index.js +6 -6
  209. package/src/config/index.js +3 -3
  210. package/src/config/replacer/index.js +10 -10
  211. package/src/config/replacer/resolve.config.js +67 -67
  212. package/src/expression/ExpressionRunner.js +26 -26
  213. package/src/expression/TestExpression.js +509 -509
  214. package/src/expression/core/Delegate.js +115 -115
  215. package/src/expression/core/Expression.js +1358 -1358
  216. package/src/expression/core/Program.js +932 -932
  217. package/src/expression/core/Token.js +27 -27
  218. package/src/expression/enums/ExpressionType.js +81 -81
  219. package/src/expression/enums/TokenType.js +11 -11
  220. package/src/expression/exception/BreakWayException.js +2 -2
  221. package/src/expression/exception/ContinueWayException.js +2 -2
  222. package/src/expression/exception/ExpressionException.js +28 -28
  223. package/src/expression/exception/ReturnWayException.js +14 -14
  224. package/src/expression/exception/ServiceException.js +22 -22
  225. package/src/expression/instances/LogicConsole.js +44 -44
  226. package/src/expression/ts/ExpressionRunner.ts +28 -28
  227. package/src/expression/ts/TestExpression.ts +509 -509
  228. package/src/expression/ts/core/Delegate.ts +114 -114
  229. package/src/expression/ts/core/Expression.ts +1309 -1309
  230. package/src/expression/ts/core/Program.ts +950 -950
  231. package/src/expression/ts/core/Token.ts +29 -29
  232. package/src/expression/ts/enums/ExpressionType.ts +81 -81
  233. package/src/expression/ts/enums/TokenType.ts +13 -13
  234. package/src/expression/ts/exception/BreakWayException.ts +2 -2
  235. package/src/expression/ts/exception/ContinueWayException.ts +2 -2
  236. package/src/expression/ts/exception/ExpressionException.ts +28 -28
  237. package/src/expression/ts/exception/ReturnWayException.ts +14 -14
  238. package/src/expression/ts/exception/ServiceException.ts +22 -22
  239. package/src/expression/ts/instances/JSONArray.ts +48 -48
  240. package/src/expression/ts/instances/JSONObject.ts +109 -109
  241. package/src/expression/ts/instances/LogicConsole.ts +32 -32
  242. package/src/layouts/AdminLayout.vue +176 -176
  243. package/src/layouts/BlankView.vue +79 -79
  244. package/src/layouts/ComponentLayoutOne.vue +47 -47
  245. package/src/layouts/GridView.vue +43 -43
  246. package/src/layouts/PageView.vue +55 -55
  247. package/src/layouts/footer/PageFooter.vue +49 -49
  248. package/src/layouts/header/HeaderAvatar.vue +64 -64
  249. package/src/layouts/header/HeaderSearch.vue +67 -67
  250. package/src/layouts/header/index.less +92 -92
  251. package/src/layouts/tabs/TabsView.vue +383 -383
  252. package/src/layouts/tabs/i18n.js +25 -25
  253. package/src/layouts/tabs/index.js +2 -2
  254. package/src/logic/LogicRunner.js +62 -62
  255. package/src/logic/TestLogic.js +13 -13
  256. package/src/logic/plugins/common/DateTools.js +35 -35
  257. package/src/logic/plugins/common/VueTools.js +30 -30
  258. package/src/logic/plugins/index.js +7 -7
  259. package/src/logic/ts/LogicRunner.ts +67 -67
  260. package/src/logic/ts/TestLogic.ts +13 -13
  261. package/src/main.js +33 -33
  262. package/src/mixins/formValidationMixin.js +46 -46
  263. package/src/mock/common/activityData.js +32 -32
  264. package/src/mock/common/index.js +89 -89
  265. package/src/mock/common/reportData.js +20 -20
  266. package/src/mock/common/tableData.js +118 -118
  267. package/src/mock/index.js +12 -12
  268. package/src/mock/project/index.js +17 -17
  269. package/src/mock/user/current.js +13 -13
  270. package/src/mock/user/login.js +39 -39
  271. package/src/mock/user/routes.js +61 -61
  272. package/src/mock/workplace/index.js +15 -15
  273. package/src/pages/LogicCallExample/index.vue +46 -46
  274. package/src/pages/ReportGrid/index.vue +76 -76
  275. package/src/pages/ReportView.vue +50 -50
  276. package/src/pages/WorkflowDetail/WorkFlowDemo.vue +47 -47
  277. package/src/pages/WorkflowDetail/WorkFlowDemo2.vue +204 -204
  278. package/src/pages/WorkflowDetail/WorkFlowDemo3.vue +203 -203
  279. package/src/pages/WorkflowDetail/WorkflowDetail.vue +391 -391
  280. package/src/pages/WorkflowDetail/WorkflowPageDetail/LeaveMessage.vue +388 -388
  281. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowBaseInformation.vue +415 -415
  282. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandle.vue +1766 -1766
  283. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowHandleReso.vue +975 -975
  284. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowPreview.vue +109 -109
  285. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkFlowTimeline.vue +929 -929
  286. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkOrderParentDetails.vue +222 -222
  287. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowDetailResso.vue +243 -243
  288. package/src/pages/WorkflowDetail/WorkflowPageDetail/WorkflowLog.vue +188 -188
  289. package/src/pages/WorkflowDetail/WorkflowPageDetail/components/WorkflowPersonSelector.vue +109 -109
  290. package/src/pages/WorkflowDetail/WorkflowPageDetail/worklog.vue +97 -97
  291. package/src/pages/XPageViewExample/index.vue +149 -149
  292. package/src/pages/addressSelect/addressDemo.vue +24 -24
  293. package/src/pages/addressSelect/index.vue +270 -270
  294. package/src/pages/dashboard/workplace/i18n.js +40 -40
  295. package/src/pages/dashboard/workplace/index.js +2 -2
  296. package/src/pages/dashboard/workplace/index.less +59 -59
  297. package/src/pages/exception/403.vue +21 -21
  298. package/src/pages/exception/404.vue +24 -24
  299. package/src/pages/exception/500.vue +21 -21
  300. package/src/pages/login/index.js +2 -2
  301. package/src/pages/report/ReportTableHome.vue +28 -28
  302. package/src/pages/resourceManage/depListManage.vue +23 -23
  303. package/src/pages/resourceManage/funListManage.vue +23 -23
  304. package/src/pages/resourceManage/index.js +15 -15
  305. package/src/pages/resourceManage/resourceManageMain.vue +57 -57
  306. package/src/pages/resourceManage/roleListManage.vue +23 -23
  307. package/src/pages/resourceManage/staffListManage.vue +23 -23
  308. package/src/pages/system/file/Info.vue +56 -56
  309. package/src/pages/system/file/index.vue +317 -317
  310. package/src/pages/system/settings/index.vue +126 -126
  311. package/src/pages/userInfoDetailManage/FillCardRecordQuery/index.vue +77 -77
  312. package/src/pages/userInfoDetailManage/FillGasRecordQuery/index.vue +75 -75
  313. package/src/pages/userInfoDetailManage/InsuranceDetailQuery/index.vue +64 -64
  314. package/src/pages/userInfoDetailManage/MachineRecordQuery/index.vue +75 -75
  315. package/src/pages/userInfoDetailManage/OtherChargeRecordQuery/index.vue +75 -75
  316. package/src/pages/userInfoDetailManage/PriceAdjustments/index.vue +64 -64
  317. package/src/pages/userInfoDetailManage/UserChargeRecordQuery/index.vue +94 -94
  318. package/src/pages/userInfoDetailManage/UserException/index.vue +64 -64
  319. package/src/pages/userInfoDetailManage/UserHandRecordQuery/index.vue +87 -87
  320. package/src/pages/userInfoDetailManage/UserRecordQuery/index.vue +74 -74
  321. package/src/pages/userInfoDetailManage/index.vue +290 -290
  322. package/src/pages/userInfoDetailManage/uploadFilesHistory/ImagePreview.vue +101 -101
  323. package/src/pages/userInfoDetailManage/uploadFilesHistory/index.vue +129 -129
  324. package/src/pages/userInfoDetailManage/userInfoDetailQueryTabs.vue +144 -144
  325. package/src/plugins/HiPrintPlugin.js +164 -164
  326. package/src/router/async/router.map.js +126 -126
  327. package/src/router/guards.js +262 -262
  328. package/src/router/i18n.js +57 -57
  329. package/src/router.js +17 -17
  330. package/src/services/api/DictionaryDetailsViewApi.js +6 -6
  331. package/src/services/api/LogDetailsViewApi.js +10 -10
  332. package/src/services/api/QueryParamsDetailsViewApi.js +6 -6
  333. package/src/services/api/logininfor/index.js +6 -6
  334. package/src/services/api/manage.js +8 -8
  335. package/src/services/api/restTools.js +215 -215
  336. package/src/services/api/workFlow.js +57 -57
  337. package/src/services/apiService.js +16 -16
  338. package/src/services/dataSource.js +12 -12
  339. package/src/services/index.js +7 -7
  340. package/src/services/user.js +92 -92
  341. package/src/services/v3Api.js +116 -116
  342. package/src/store/index.js +5 -5
  343. package/src/store/mutation-types.js +4 -4
  344. package/src/theme/antd/ant-menu.less +2 -2
  345. package/src/theme/antd/ant-message.less +3 -3
  346. package/src/theme/antd/ant-table.less +22 -22
  347. package/src/theme/antd/ant-time-picker.less +3 -3
  348. package/src/theme/antd/index.less +3 -3
  349. package/src/theme/default/color.less +43 -43
  350. package/src/theme/default/index.less +3 -3
  351. package/src/theme/default/nprogress.less +76 -76
  352. package/src/theme/global.less +279 -279
  353. package/src/theme/index.less +5 -5
  354. package/src/theme/reportTable.less +58 -58
  355. package/src/theme/theme.less +1 -1
  356. package/src/utils/EncryptUtil.js +162 -162
  357. package/src/utils/Objects.js +25 -25
  358. package/src/utils/axios-interceptors.js +100 -100
  359. package/src/utils/colors.js +107 -107
  360. package/src/utils/common.js +10 -10
  361. package/src/utils/excel/Blob.js +180 -180
  362. package/src/utils/excel/Export2Excel.js +141 -141
  363. package/src/utils/filter.js +21 -21
  364. package/src/utils/i18n.js +80 -80
  365. package/src/utils/indexedDB.js +549 -549
  366. package/src/utils/microAppUtils.js +49 -49
  367. package/src/utils/request.js +395 -395
  368. package/src/utils/routerUtil.js +553 -553
  369. package/src/utils/themeUtil.js +100 -100
  370. package/test/Tree.spec.js +168 -168
  371. package/test/myDialog.spec.js +47 -47
  372. package/test/request.test.js +17 -17
  373. package/test/util.test.js +53 -53
  374. package/test/v3Api.test.js +1984 -1984
  375. package/tests/unit/ReportTable.spec.js +16 -16
  376. package/vue.config.js +222 -222
  377. package/.claude/settings.local.json +0 -12
@@ -1,597 +1,597 @@
1
- <template>
2
- <!-- 当expandedGrid存在时渲染带有expandedRowRender的表格 -->
3
- <s-table
4
- v-if="tableContext.expandedGrid"
5
- ref="expandableTable"
6
- :id="tableContext.uniqueId"
7
- :alert="true"
8
- :columns="realTableColumns"
9
- :data="loadData()"
10
- :rowKey="tableContext.rowKey"
11
- :showSummary="tableContext.showSummary"
12
- :rowSelection="tableContext.rowSelection"
13
- :scroll="{ x: tableContext.scrollXWidth, y: tableContext.scrollYHeight }"
14
- :showPagination="tableContext.showPagination"
15
- :hidePagination="tableContext.simpleMode"
16
- :showSelected="!tableContext.simpleMode"
17
- :pageSize="tableContext.simpleMode ? 1000 : undefined"
18
- :pageMaxSize="tableContext.pageMaxSize"
19
- :setScrollYHeight="tableContext.setScrollYHeight"
20
- :selectRowMode="tableContext.selectRowMode"
21
- :size="tableContext.tableSize"
22
- :components="components"
23
- :rowStyleFunction="tableContext.rowStyleFunction"
24
- @beforeDataChange="beforeDataChange"
25
- @expand="onExpand"
26
- @rowClick="handleRowClick"
27
- >
28
- <template
29
- v-for="(item, c_index) in realTableColumns"
30
- :slot="item.dataIndex"
31
- slot-scope="text, record, index">
32
- <template v-if="tableContext.isEditMode && getFromItem(item.dataIndex,text, record, index)">
33
- <x-form-item
34
- class="innerTable"
35
- :style="{ paddingTop: 0, paddingBottom: 0, paddingLeft: 0, paddingRight: 0 }"
36
- :form="record"
37
- :attr="getFromItem(item.dataIndex,text, record, index)"
38
- :service-name="tableContext.serviceName"
39
- mode="新增/修改"
40
- :env="tableContext.env"
41
- :setForm="(obj)=>tableContext.setForm(record,obj)"
42
- @rowChoose="(row, attr, callback) => tableContext.rowChoose(row, attr, callback, record)"
43
- :showLabel="false"
44
- :key="'editRow-' + c_index"
45
- />
46
- </template>
47
- <span v-else-if="item.slotType === 'rate'" :key="'rate-' + c_index">
48
- <x-rate
49
- :value="text"
50
- :disabled="true"
51
- :allow-half="item.allowHalf"
52
- :icon="item.rateIcon"
53
- :max-count="item.maxCount"
54
- style="zoom:0.9"/>
55
- </span>
56
- <span v-else-if="item.slotType === 'index'" :key="'index-' + c_index">
57
- {{ index + 1 }}
58
- </span>
59
- <CustomFuncCel
60
- :text="text"
61
- :record="text"
62
- :index="index"
63
- :item="item"
64
- :localDataSource="activeTable?.localDataSource"
65
- v-else-if="item.slotCustomFunction"
66
- :key="'customJs-' + c_index"></CustomFuncCel>
67
- <span v-else-if="item.slotType === 'link'" :key="'link-' + c_index">
68
- <a @click="tableContext.columnClick(item.dataIndex,text,record)">{{ text }}</a>
69
- </span>
70
- <span v-else-if="item.slotType === 'gotoUserDetail'" :key="'gotoUserDetail-' + c_index">
71
- <a @click="tableContext.gotoUserDetail(item.dataIndex,text,record)">{{ text }}</a>
72
- </span>
73
- <span v-else-if="item.slotType === 'ellipsis'" :key="'ellipsis-' + c_index">
74
- <ellipsis :length="item.slotValue" tooltip>{{ text === '' ? '--' : text }}</ellipsis>
75
- </span>
76
- <span v-else-if="item.slotType === 'badge'" :key="'badge-' + c_index">
77
- <x-badge
78
- :service-name="tableContext.serviceName"
79
- :env="tableContext.env"
80
- v-if="text !== null && text !== undefined"
81
- :badge-key="item.slotKeyMap"
82
- :value="text"/>
83
- </span>
84
- <span v-else-if="item.slotType === 'date'" :key="'date-' + c_index">
85
- {{ format(text, 'yyyy-MM-dd') }}
86
- </span>
87
- <span v-else-if="item.slotType === 'dateTime'" :key="'dateTime-' + c_index">
88
- {{ format(text, 'yyyy-MM-dd hh:mm:ss') }}
89
- </span>
90
- <span v-else-if="item.slotType === 'towDecimal'" :key="'towDecimal-' + c_index">
91
- {{ numberFormat(text, 2) }}
92
- </span>
93
- <span v-else-if="item.slotType === 'fourDecimal'" :key="'fourDecimal-' + c_index">
94
- {{ numberFormat(text, 4) }}
95
- </span>
96
- <span v-else-if="item.slotType === 'int'" :key="'int-' + c_index">
97
- {{ numberFormat(text, 0) }}
98
- </span>
99
- <span v-else-if="item.slotType === 'action'" :key="'action-' + c_index">
100
- <template v-if="item.actionArr && item.actionArr.length > 0">
101
- <a-dropdown placement="bottomCenter" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } ">
102
- <a class="ant-dropdown-link" @click="e => e.preventDefault()">
103
- {{ item.scopedSlots?.customRender || item.slotValue }} <a-icon type="down"/>
104
- </a>
105
- <a-menu slot="overlay" style="min-width: 60px">
106
- <a-menu-item
107
- v-for="(action_item, actionIndex) in item.actionArr"
108
- :key="actionIndex"
109
- v-show="!action_item.customFunction || tableContext.customFunctionShow(action_item.customFunction,record,c_index)">
110
- <a
111
- style="text-align: center"
112
- @click="tableContext.action(record, item.dataIndex, action_item.func)"
113
- >{{ action_item.text }}</a>
114
- </a-menu-item>
115
- </a-menu>
116
- </a-dropdown>
117
- </template>
118
- <template v-if="!item.actionArr || item.actionArr.length === 0">
119
- <a @click="tableContext.action(record, item.dataIndex,'action', index)">{{ item.slotValue }}</a>
120
- </template>
121
- </span>
122
- </template>
123
- <template slot="expandedRowRender" slot-scope="record">
124
- <slot
125
- name="expandedRowRender"
126
- :selectedRowKeys="tableContext.selectedRowKeys"
127
- :selectedRows="tableContext.selectedRows"
128
- :record="record"
129
- ></slot>
130
- </template>
131
- <template slot="footer">
132
- <slot
133
- name="footer"
134
- :selectedRowKeys="tableContext.selectedRowKeys"
135
- :selectedRows="tableContext.selectedRows"></slot>
136
- </template>
137
- </s-table>
138
-
139
- <!-- 当expandedGrid不存在时渲染不带expandedRowRender的表格 -->
140
- <s-table
141
- v-else
142
- ref="simpleTable"
143
- :id="tableContext.uniqueId"
144
- :alert="true"
145
- :columns="realTableColumns"
146
- :data="loadData()"
147
- :rowKey="tableContext.rowKey"
148
- :showSummary="tableContext.showSummary"
149
- :rowSelection="tableContext.rowSelection"
150
- :scroll="{ x: tableContext.scrollXWidth, y: tableContext.scrollYHeight }"
151
- :showPagination="tableContext.showPagination"
152
- :hidePagination="tableContext.simpleMode"
153
- :showSelected="!tableContext.simpleMode"
154
- :pageSize="tableContext.simpleMode ? 1000 : undefined"
155
- :pageMaxSize="tableContext.pageMaxSize"
156
- :setScrollYHeight="tableContext.setScrollYHeight"
157
- :selectRowMode="tableContext.selectRowMode"
158
- :size="tableContext.tableSize"
159
- :components="components"
160
- :rowStyleFunction="tableContext.rowStyleFunction"
161
- @rowClick="handleRowClick"
162
- @beforeDataChange="beforeDataChange"
163
- >
164
- <template
165
- v-for="(item, c_index) in realTableColumns"
166
- :slot="item.dataIndex"
167
- slot-scope="text, record, index">
168
- <template v-if="tableContext.isEditMode && getFromItem(item.dataIndex,text, record, index)">
169
- <x-form-item
170
- class="innerTable"
171
- :style="{ paddingTop: 0, paddingBottom: 0, paddingLeft: 0, paddingRight: 0 }"
172
- :form="record"
173
- :attr="getFromItem(item.dataIndex,text, record, index)"
174
- :service-name="tableContext.serviceName"
175
- mode="新增/修改"
176
- :env="tableContext.env"
177
- :setForm="(obj)=>tableContext.setForm(record,obj)"
178
- @rowChoose="(row, attr, callback) => tableContext.rowChoose(row, attr, callback, record)"
179
- :showLabel="false"
180
- :key="'editRow-' + c_index"
181
- />
182
- </template>
183
- <span v-else-if="item.slotType === 'rate'" :key="'rate-' + c_index">
184
- <x-rate
185
- :value="text"
186
- :disabled="true"
187
- :allow-half="item.allowHalf"
188
- :icon="item.rateIcon"
189
- :max-count="item.maxCount"
190
- style="zoom:0.9"/>
191
- </span>
192
- <span v-else-if="item.slotType === 'index'" :key="'index-' + c_index">
193
- {{ index + 1 }}
194
- </span>
195
- <CustomFuncCel
196
- :text="text"
197
- :record="text"
198
- :index="index"
199
- :item="item"
200
- :localDataSource="activeTable?.localDataSource"
201
- v-else-if="item.slotCustomFunction"
202
- :key="'customJs-' + c_index"></CustomFuncCel>
203
- <span v-else-if="item.slotType === 'link'" :key="'link-' + c_index">
204
- <a @click="tableContext.columnClick(item.dataIndex,text,record)">{{ text }}</a>
205
- </span>
206
- <span v-else-if="item.slotType === 'gotoUserDetail'" :key="'gotoUserDetail-' + c_index">
207
- <a @click="tableContext.gotoUserDetail(item.dataIndex,text,record)">{{ text }}</a>
208
- </span>
209
- <span v-else-if="item.slotType === 'ellipsis'" :key="'ellipsis-' + c_index">
210
- <ellipsis :length="item.slotValue" tooltip>{{ text === '' ? '--' : text }}</ellipsis>
211
- </span>
212
- <span v-else-if="item.slotType === 'badge'" :key="'badge-' + c_index">
213
- <x-badge
214
- :service-name="tableContext.serviceName"
215
- :env="tableContext.env"
216
- v-if="text !== null && text !== undefined"
217
- :badge-key="item.slotKeyMap"
218
- :value="text"/>
219
- </span>
220
- <span v-else-if="item.slotType === 'date'" :key="'date-' + c_index">
221
- {{ format(text, 'yyyy-MM-dd') }}
222
- </span>
223
- <span v-else-if="item.slotType === 'dateTime'" :key="'dateTime-' + c_index">
224
- {{ format(text, 'yyyy-MM-dd hh:mm:ss') }}
225
- </span>
226
- <span v-else-if="item.slotType === 'towDecimal'" :key="'towDecimal-' + c_index">
227
- {{ numberFormat(text, 2) }}
228
- </span>
229
- <span v-else-if="item.slotType === 'fourDecimal'" :key="'fourDecimal-' + c_index">
230
- {{ numberFormat(text, 4) }}
231
- </span>
232
- <span v-else-if="item.slotType === 'int'" :key="'int-' + c_index">
233
- {{ numberFormat(text, 0) }}
234
- </span>
235
- <span v-else-if="item.slotType === 'action'" :key="'action-' + c_index">
236
- <template v-if="item.actionArr && item.actionArr.length > 0">
237
- <a-dropdown placement="bottomCenter" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } ">
238
- <a class="ant-dropdown-link" @click="e => e.preventDefault()">
239
- {{ item.scopedSlots?.customRender || item.slotValue }} <a-icon type="down"/>
240
- </a>
241
- <a-menu slot="overlay" style="min-width: 60px">
242
- <a-menu-item
243
- v-for="(action_item, actionIndex) in item.actionArr"
244
- :key="actionIndex"
245
- v-show="!action_item.customFunction || tableContext.customFunctionShow(action_item.customFunction,record,c_index)">
246
- <a
247
- style="text-align: center"
248
- @click="tableContext.action(record, item.dataIndex, action_item.func)"
249
- >{{ action_item.text }}</a>
250
- </a-menu-item>
251
- </a-menu>
252
- </a-dropdown>
253
- </template>
254
- <template v-if="!item.actionArr || item.actionArr.length === 0">
255
- <a @click="tableContext.action(record, item.dataIndex,'action', index)">{{ item.slotValue }}</a>
256
- </template>
257
- </span>
258
- </template>
259
- <template slot="footer">
260
- <slot
261
- name="footer"
262
- :selectedRowKeys="tableContext.selectedRowKeys"
263
- :selectedRows="tableContext.selectedRows"></slot>
264
- </template>
265
- </s-table>
266
- </template>
267
-
268
- <script>
269
- import { Ellipsis, STable } from '@vue2-client/components'
270
- import { formatDate } from '@vue2-client/utils/util'
271
- import XBadge from '@vue2-client/base-client/components/common/XBadge'
272
- import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
273
- import CustomFuncCel from '@vue2-client/base-client/components/common/XTable/CustomFuncCel.vue'
274
- import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
275
- import XRate from '@vue2-client/base-client/components/common/XRate/index.vue'
276
- import VueDraggableResizable from 'vue-draggable-resizable'
277
-
278
- export default {
279
- name: 'XTableWrapper',
280
- components: {
281
- Ellipsis,
282
- STable,
283
- XBadge,
284
- XFormItem,
285
- XRate,
286
- CustomFuncCel,
287
- VueDraggableResizable
288
- },
289
- data () {
290
- return {
291
- isDragging: false, // 添加拖拽状态标记
292
- // eslint-disable-next-line vue/no-reserved-keys
293
- _rafId: null // 添加requestAnimationFrame ID标记
294
- }
295
- },
296
- computed: {
297
- localDataSource () {
298
- return this.activeTable?.localDataSource
299
- },
300
- // 获取当前活动的表格实例
301
- activeTable () {
302
- return this.tableContext.expandedGrid ? this.$refs.expandableTable : this.$refs.simpleTable
303
- },
304
- realTableColumns () {
305
- return this.tableContext.tableColumns.filter(item => item.slotType !== 'action' || !this.disableAction)
306
- },
307
- components () {
308
- return {
309
- header: {
310
- cell: (h, props, children) => {
311
- const { key, ...restProps } = props
312
- // 此处的this.realTableColumns 是定义的table的表头属性变量
313
- const col = this.realTableColumns.find((col) => {
314
- const k = col.dataIndex || col.key
315
- return k === key
316
- })
317
- if (!col || !col.width || col.slotType === 'action') {
318
- if (children) {
319
- return h('th', { ...restProps }, [...children])
320
- } else {
321
- return h('th', { ...restProps })
322
- }
323
- }
324
-
325
- // 创建一个防止点击排序的容器
326
- const preventSortProps = {
327
- style: {
328
- position: 'absolute',
329
- right: 0,
330
- top: 0,
331
- width: '20px',
332
- height: '100%',
333
- zIndex: 10
334
- },
335
- on: {
336
- mousedown: (e) => {
337
- e.stopPropagation()
338
- e.preventDefault()
339
- this.isDragging = true
340
- }
341
- }
342
- }
343
-
344
- const dragProps = {
345
- key: col.dataIndex || col.key,
346
- class: 'table-draggable-handle',
347
- attrs: {
348
- w: 10,
349
- x: col.width,
350
- z: 1,
351
- axis: 'x',
352
- draggable: true,
353
- resizable: false,
354
- },
355
- on: {
356
- dragging: (x, y) => {
357
- // 使用requestAnimationFrame优化性能,减少卡顿
358
- if (!this._rafId) {
359
- this._rafId = requestAnimationFrame(() => {
360
- col.width = Math.max(x, 50) // 设置最小列宽为50px
361
- this.isDragging = true // 设置拖拽状态
362
- this._rafId = null
363
- })
364
- }
365
- },
366
- mousedown: (e) => {
367
- // 阻止事件冒泡,防止触发排序
368
- e.stopPropagation()
369
- e.preventDefault()
370
- this.isDragging = true // 设置拖拽状态
371
- },
372
- dragstop: () => {
373
- // 清除可能存在的动画帧请求
374
- if (this._rafId) {
375
- cancelAnimationFrame(this._rafId)
376
- this._rafId = null
377
- }
378
-
379
- // 拖拽结束时,延迟重置拖拽状态,以防止排序被触发
380
- setTimeout(() => {
381
- this.isDragging = false
382
- }, 100)
383
- }
384
- },
385
- nativeOn: {
386
- mousedown: (e) => {
387
- e.stopPropagation()
388
- e.preventDefault()
389
- this.isDragging = true // 设置拖拽状态
390
- }
391
- }
392
- }
393
-
394
- const preventSort = h('div', preventSortProps)
395
- const drag = h('vue-draggable-resizable', { ...dragProps })
396
-
397
- // 修改th的点击事件,在拖拽状态下阻止排序
398
- const newRestProps = { ...restProps }
399
- const originalClick = newRestProps.on && newRestProps.on.click
400
- if (originalClick) {
401
- newRestProps.on = {
402
- ...newRestProps.on,
403
- click: (e) => {
404
- if (this.isDragging) {
405
- e.stopPropagation()
406
- e.preventDefault()
407
- return
408
- }
409
- originalClick(e)
410
- }
411
- }
412
- }
413
-
414
- if (children) {
415
- return h('th', { ...newRestProps, class: 'resize-table-th' }, [...children, preventSort, drag])
416
- } else {
417
- return h('th', { ...newRestProps, class: 'resize-table-th' }, [preventSort, drag])
418
- }
419
- },
420
- }
421
- }
422
- }
423
- },
424
- props: {
425
- loadSelectedData: {
426
- type: Boolean,
427
- required: false,
428
- default: false
429
- },
430
- disableAction: {
431
- type: Boolean,
432
- default: false
433
- }
434
- },
435
- inject: ['tableContext'],
436
- methods: {
437
- handleRowClick (record) {
438
- this.$emit('rowClick', record)
439
- },
440
- beforeDataChange (record) {
441
- this.$emit('beforeDataChange', record)
442
- },
443
- onExpand (expanded, record) {
444
- this.$emit('expand', expanded, record)
445
- },
446
- setLocalDataSource (data) {
447
- this.activeTable?.setLocalDataSource(data)
448
- },
449
- loadData () {
450
- if (this.loadSelectedData) {
451
- return this.loadSelectedDataGen
452
- } else {
453
- return this.tableContext.loadData
454
- }
455
- },
456
- loadSelectedDataGen (requestParameters) {
457
- console.log('loadSelectedDataGen', {
458
- pageNo: requestParameters?.pageNo,
459
- pageSize: requestParameters?.pageSize
460
- })
461
-
462
- const { pageNo = 1, pageSize = 10 } = requestParameters || {}
463
- const startIndex = (pageNo - 1) * pageSize
464
- const endIndex = startIndex + pageSize
465
- const paginatedData = this.tableContext.selectedRows.slice(startIndex, endIndex)
466
-
467
- return new Promise((resolve) => {
468
- resolve({
469
- data: paginatedData,
470
- pageNo,
471
- pageSize,
472
- totalPage: Math.ceil(this.tableContext.selectedRows.length / pageSize),
473
- totalCount: this.tableContext.selectedRows.length
474
- })
475
- })
476
- },
477
- updateSelect (selectedRowKeys, selectedRows) {
478
- this.activeTable?.updateSelect(selectedRowKeys, selectedRows)
479
- },
480
- clearSelected () {
481
- this.activeTable?.clearSelected()
482
- },
483
- refresh (bool) {
484
- this.activeTable?.refresh(bool)
485
- },
486
-
487
- /**
488
- * 格式化日期
489
- * @param date 日期字符串
490
- * @param format 格式化方式
491
- */
492
- format (date, format) {
493
- return formatDate(date, format)
494
- },
495
- /**
496
- * 格式化数字
497
- * @param number string 或者 number
498
- * @param decimalPlaces 小数位数
499
- */
500
- numberFormat (number, decimalPlaces = 2) {
501
- const value = parseFloat(number)
502
- if (!isNaN(value)) {
503
- return value.toFixed(decimalPlaces)
504
- } else {
505
- return ''
506
- }
507
- },
508
- getFromItem (model, text, record, index) {
509
- const aa = this.tableContext.formItems.reduce((acc, item) => {
510
- if (item.type === 'group') {
511
- const foundItem = item.groupItems.find(_item => _item.model === model && _item.editRow)
512
- if (foundItem) {
513
- acc = foundItem
514
- }
515
- } else if (item.model === model && item.editRow) {
516
- acc = item
517
- }
518
- return acc
519
- }, null)
520
- if (aa) {
521
- const tempConfig = JSON.parse(JSON.stringify(aa))
522
- // 如果找到了字段
523
- const ColumnIndex = this.realTableColumns.findIndex(item => item.dataIndex === model)
524
- // 并且表单项是日期框
525
- if (ColumnIndex !== -1 && ['yearPicker', 'monthPicker', 'datePicker', 'rangePicker'].includes(tempConfig.type)) {
526
- // 修改他的列宽
527
- this.realTableColumns[ColumnIndex].width = 220
528
- }
529
- // 如果有检验规则检验是数字
530
- if (ColumnIndex !== -1 && ['number', 'integer', 'float'].includes(tempConfig?.rule?.type)) {
531
- // 修改他的列宽
532
- tempConfig.numberInput = true
533
- }
534
- if (tempConfig.editRowShowFunc) {
535
- if (executeStrFunctionByContext(this.tableContext, tempConfig.editRowShowFunc, [text, record, index, tempConfig])) {
536
- return tempConfig
537
- }
538
- } else {
539
- return tempConfig
540
- }
541
- }
542
- return false
543
- },
544
- handleResizeColumn (w, col) {
545
- col.width = w
546
- }
547
- }
548
- }
549
- </script>
550
-
551
- <style scoped lang="less">
552
- :deep(.ant-table-fixed-right) {
553
- overflow: visible !important;
554
- }
555
- </style>
556
- <style>
557
- .table-draggable-handle {
558
- height: 100% !important;
559
- left: auto !important;
560
- right: -10px;
561
- cursor: col-resize;
562
- touch-action: none;
563
- border: none;
564
- position: absolute;
565
- transform: none !important;
566
- bottom: 0;
567
- width: 20px !important;
568
- }
569
-
570
- .table-draggable-handle::after {
571
- content: "";
572
- position: absolute;
573
- top: 50%;
574
- height: 20px;
575
- width: 1px;
576
- background-color: #ebebeb;
577
- transition: background-color 0.2s;
578
- transform: translateY(-50%);
579
- right: 9px;
580
- }
581
-
582
- .table-draggable-handle:hover::after {
583
- background-color: #1890ff;
584
- }
585
-
586
- .table-draggable-handle:active::after {
587
- background-color: #096dd9;
588
- }
589
-
590
- .resize-table-th {
591
- position: relative;
592
- }
593
-
594
- .resize-table-th:hover .table-draggable-handle::after {
595
- background-color: rgba(24, 144, 255, 0.5);
596
- }
597
- </style>
1
+ <template>
2
+ <!-- 当expandedGrid存在时渲染带有expandedRowRender的表格 -->
3
+ <s-table
4
+ v-if="tableContext.expandedGrid"
5
+ ref="expandableTable"
6
+ :id="tableContext.uniqueId"
7
+ :alert="true"
8
+ :columns="realTableColumns"
9
+ :data="loadData()"
10
+ :rowKey="tableContext.rowKey"
11
+ :showSummary="tableContext.showSummary"
12
+ :rowSelection="tableContext.rowSelection"
13
+ :scroll="{ x: tableContext.scrollXWidth, y: tableContext.scrollYHeight }"
14
+ :showPagination="tableContext.showPagination"
15
+ :hidePagination="tableContext.simpleMode"
16
+ :showSelected="!tableContext.simpleMode"
17
+ :pageSize="tableContext.simpleMode ? 1000 : undefined"
18
+ :pageMaxSize="tableContext.pageMaxSize"
19
+ :setScrollYHeight="tableContext.setScrollYHeight"
20
+ :selectRowMode="tableContext.selectRowMode"
21
+ :size="tableContext.tableSize"
22
+ :components="components"
23
+ :rowStyleFunction="tableContext.rowStyleFunction"
24
+ @beforeDataChange="beforeDataChange"
25
+ @expand="onExpand"
26
+ @rowClick="handleRowClick"
27
+ >
28
+ <template
29
+ v-for="(item, c_index) in realTableColumns"
30
+ :slot="item.dataIndex"
31
+ slot-scope="text, record, index">
32
+ <template v-if="tableContext.isEditMode && getFromItem(item.dataIndex,text, record, index)">
33
+ <x-form-item
34
+ class="innerTable"
35
+ :style="{ paddingTop: 0, paddingBottom: 0, paddingLeft: 0, paddingRight: 0 }"
36
+ :form="record"
37
+ :attr="getFromItem(item.dataIndex,text, record, index)"
38
+ :service-name="tableContext.serviceName"
39
+ mode="新增/修改"
40
+ :env="tableContext.env"
41
+ :setForm="(obj)=>tableContext.setForm(record,obj)"
42
+ @rowChoose="(row, attr, callback) => tableContext.rowChoose(row, attr, callback, record)"
43
+ :showLabel="false"
44
+ :key="'editRow-' + c_index"
45
+ />
46
+ </template>
47
+ <span v-else-if="item.slotType === 'rate'" :key="'rate-' + c_index">
48
+ <x-rate
49
+ :value="text"
50
+ :disabled="true"
51
+ :allow-half="item.allowHalf"
52
+ :icon="item.rateIcon"
53
+ :max-count="item.maxCount"
54
+ style="zoom:0.9"/>
55
+ </span>
56
+ <span v-else-if="item.slotType === 'index'" :key="'index-' + c_index">
57
+ {{ index + 1 }}
58
+ </span>
59
+ <CustomFuncCel
60
+ :text="text"
61
+ :record="text"
62
+ :index="index"
63
+ :item="item"
64
+ :localDataSource="activeTable?.localDataSource"
65
+ v-else-if="item.slotCustomFunction"
66
+ :key="'customJs-' + c_index"></CustomFuncCel>
67
+ <span v-else-if="item.slotType === 'link'" :key="'link-' + c_index">
68
+ <a @click="tableContext.columnClick(item.dataIndex,text,record)">{{ text }}</a>
69
+ </span>
70
+ <span v-else-if="item.slotType === 'gotoUserDetail'" :key="'gotoUserDetail-' + c_index">
71
+ <a @click="tableContext.gotoUserDetail(item.dataIndex,text,record)">{{ text }}</a>
72
+ </span>
73
+ <span v-else-if="item.slotType === 'ellipsis'" :key="'ellipsis-' + c_index">
74
+ <ellipsis :length="item.slotValue" tooltip>{{ text === '' ? '--' : text }}</ellipsis>
75
+ </span>
76
+ <span v-else-if="item.slotType === 'badge'" :key="'badge-' + c_index">
77
+ <x-badge
78
+ :service-name="tableContext.serviceName"
79
+ :env="tableContext.env"
80
+ v-if="text !== null && text !== undefined"
81
+ :badge-key="item.slotKeyMap"
82
+ :value="text"/>
83
+ </span>
84
+ <span v-else-if="item.slotType === 'date'" :key="'date-' + c_index">
85
+ {{ format(text, 'yyyy-MM-dd') }}
86
+ </span>
87
+ <span v-else-if="item.slotType === 'dateTime'" :key="'dateTime-' + c_index">
88
+ {{ format(text, 'yyyy-MM-dd hh:mm:ss') }}
89
+ </span>
90
+ <span v-else-if="item.slotType === 'towDecimal'" :key="'towDecimal-' + c_index">
91
+ {{ numberFormat(text, 2) }}
92
+ </span>
93
+ <span v-else-if="item.slotType === 'fourDecimal'" :key="'fourDecimal-' + c_index">
94
+ {{ numberFormat(text, 4) }}
95
+ </span>
96
+ <span v-else-if="item.slotType === 'int'" :key="'int-' + c_index">
97
+ {{ numberFormat(text, 0) }}
98
+ </span>
99
+ <span v-else-if="item.slotType === 'action'" :key="'action-' + c_index">
100
+ <template v-if="item.actionArr && item.actionArr.length > 0">
101
+ <a-dropdown placement="bottomCenter" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } ">
102
+ <a class="ant-dropdown-link" @click="e => e.preventDefault()">
103
+ {{ item.scopedSlots?.customRender || item.slotValue }} <a-icon type="down"/>
104
+ </a>
105
+ <a-menu slot="overlay" style="min-width: 60px">
106
+ <a-menu-item
107
+ v-for="(action_item, actionIndex) in item.actionArr"
108
+ :key="actionIndex"
109
+ v-show="!action_item.customFunction || tableContext.customFunctionShow(action_item.customFunction,record,c_index)">
110
+ <a
111
+ style="text-align: center"
112
+ @click="tableContext.action(record, item.dataIndex, action_item.func)"
113
+ >{{ action_item.text }}</a>
114
+ </a-menu-item>
115
+ </a-menu>
116
+ </a-dropdown>
117
+ </template>
118
+ <template v-if="!item.actionArr || item.actionArr.length === 0">
119
+ <a @click="tableContext.action(record, item.dataIndex,'action', index)">{{ item.slotValue }}</a>
120
+ </template>
121
+ </span>
122
+ </template>
123
+ <template slot="expandedRowRender" slot-scope="record">
124
+ <slot
125
+ name="expandedRowRender"
126
+ :selectedRowKeys="tableContext.selectedRowKeys"
127
+ :selectedRows="tableContext.selectedRows"
128
+ :record="record"
129
+ ></slot>
130
+ </template>
131
+ <template slot="footer">
132
+ <slot
133
+ name="footer"
134
+ :selectedRowKeys="tableContext.selectedRowKeys"
135
+ :selectedRows="tableContext.selectedRows"></slot>
136
+ </template>
137
+ </s-table>
138
+
139
+ <!-- 当expandedGrid不存在时渲染不带expandedRowRender的表格 -->
140
+ <s-table
141
+ v-else
142
+ ref="simpleTable"
143
+ :id="tableContext.uniqueId"
144
+ :alert="true"
145
+ :columns="realTableColumns"
146
+ :data="loadData()"
147
+ :rowKey="tableContext.rowKey"
148
+ :showSummary="tableContext.showSummary"
149
+ :rowSelection="tableContext.rowSelection"
150
+ :scroll="{ x: tableContext.scrollXWidth, y: tableContext.scrollYHeight }"
151
+ :showPagination="tableContext.showPagination"
152
+ :hidePagination="tableContext.simpleMode"
153
+ :showSelected="!tableContext.simpleMode"
154
+ :pageSize="tableContext.simpleMode ? 1000 : undefined"
155
+ :pageMaxSize="tableContext.pageMaxSize"
156
+ :setScrollYHeight="tableContext.setScrollYHeight"
157
+ :selectRowMode="tableContext.selectRowMode"
158
+ :size="tableContext.tableSize"
159
+ :components="components"
160
+ :rowStyleFunction="tableContext.rowStyleFunction"
161
+ @rowClick="handleRowClick"
162
+ @beforeDataChange="beforeDataChange"
163
+ >
164
+ <template
165
+ v-for="(item, c_index) in realTableColumns"
166
+ :slot="item.dataIndex"
167
+ slot-scope="text, record, index">
168
+ <template v-if="tableContext.isEditMode && getFromItem(item.dataIndex,text, record, index)">
169
+ <x-form-item
170
+ class="innerTable"
171
+ :style="{ paddingTop: 0, paddingBottom: 0, paddingLeft: 0, paddingRight: 0 }"
172
+ :form="record"
173
+ :attr="getFromItem(item.dataIndex,text, record, index)"
174
+ :service-name="tableContext.serviceName"
175
+ mode="新增/修改"
176
+ :env="tableContext.env"
177
+ :setForm="(obj)=>tableContext.setForm(record,obj)"
178
+ @rowChoose="(row, attr, callback) => tableContext.rowChoose(row, attr, callback, record)"
179
+ :showLabel="false"
180
+ :key="'editRow-' + c_index"
181
+ />
182
+ </template>
183
+ <span v-else-if="item.slotType === 'rate'" :key="'rate-' + c_index">
184
+ <x-rate
185
+ :value="text"
186
+ :disabled="true"
187
+ :allow-half="item.allowHalf"
188
+ :icon="item.rateIcon"
189
+ :max-count="item.maxCount"
190
+ style="zoom:0.9"/>
191
+ </span>
192
+ <span v-else-if="item.slotType === 'index'" :key="'index-' + c_index">
193
+ {{ index + 1 }}
194
+ </span>
195
+ <CustomFuncCel
196
+ :text="text"
197
+ :record="text"
198
+ :index="index"
199
+ :item="item"
200
+ :localDataSource="activeTable?.localDataSource"
201
+ v-else-if="item.slotCustomFunction"
202
+ :key="'customJs-' + c_index"></CustomFuncCel>
203
+ <span v-else-if="item.slotType === 'link'" :key="'link-' + c_index">
204
+ <a @click="tableContext.columnClick(item.dataIndex,text,record)">{{ text }}</a>
205
+ </span>
206
+ <span v-else-if="item.slotType === 'gotoUserDetail'" :key="'gotoUserDetail-' + c_index">
207
+ <a @click="tableContext.gotoUserDetail(item.dataIndex,text,record)">{{ text }}</a>
208
+ </span>
209
+ <span v-else-if="item.slotType === 'ellipsis'" :key="'ellipsis-' + c_index">
210
+ <ellipsis :length="item.slotValue" tooltip>{{ text === '' ? '--' : text }}</ellipsis>
211
+ </span>
212
+ <span v-else-if="item.slotType === 'badge'" :key="'badge-' + c_index">
213
+ <x-badge
214
+ :service-name="tableContext.serviceName"
215
+ :env="tableContext.env"
216
+ v-if="text !== null && text !== undefined"
217
+ :badge-key="item.slotKeyMap"
218
+ :value="text"/>
219
+ </span>
220
+ <span v-else-if="item.slotType === 'date'" :key="'date-' + c_index">
221
+ {{ format(text, 'yyyy-MM-dd') }}
222
+ </span>
223
+ <span v-else-if="item.slotType === 'dateTime'" :key="'dateTime-' + c_index">
224
+ {{ format(text, 'yyyy-MM-dd hh:mm:ss') }}
225
+ </span>
226
+ <span v-else-if="item.slotType === 'towDecimal'" :key="'towDecimal-' + c_index">
227
+ {{ numberFormat(text, 2) }}
228
+ </span>
229
+ <span v-else-if="item.slotType === 'fourDecimal'" :key="'fourDecimal-' + c_index">
230
+ {{ numberFormat(text, 4) }}
231
+ </span>
232
+ <span v-else-if="item.slotType === 'int'" :key="'int-' + c_index">
233
+ {{ numberFormat(text, 0) }}
234
+ </span>
235
+ <span v-else-if="item.slotType === 'action'" :key="'action-' + c_index">
236
+ <template v-if="item.actionArr && item.actionArr.length > 0">
237
+ <a-dropdown placement="bottomCenter" :getPopupContainer=" triggerNode => { return triggerNode.parentNode } ">
238
+ <a class="ant-dropdown-link" @click="e => e.preventDefault()">
239
+ {{ item.scopedSlots?.customRender || item.slotValue }} <a-icon type="down"/>
240
+ </a>
241
+ <a-menu slot="overlay" style="min-width: 60px">
242
+ <a-menu-item
243
+ v-for="(action_item, actionIndex) in item.actionArr"
244
+ :key="actionIndex"
245
+ v-show="!action_item.customFunction || tableContext.customFunctionShow(action_item.customFunction,record,c_index)">
246
+ <a
247
+ style="text-align: center"
248
+ @click="tableContext.action(record, item.dataIndex, action_item.func)"
249
+ >{{ action_item.text }}</a>
250
+ </a-menu-item>
251
+ </a-menu>
252
+ </a-dropdown>
253
+ </template>
254
+ <template v-if="!item.actionArr || item.actionArr.length === 0">
255
+ <a @click="tableContext.action(record, item.dataIndex,'action', index)">{{ item.slotValue }}</a>
256
+ </template>
257
+ </span>
258
+ </template>
259
+ <template slot="footer">
260
+ <slot
261
+ name="footer"
262
+ :selectedRowKeys="tableContext.selectedRowKeys"
263
+ :selectedRows="tableContext.selectedRows"></slot>
264
+ </template>
265
+ </s-table>
266
+ </template>
267
+
268
+ <script>
269
+ import { Ellipsis, STable } from '@vue2-client/components'
270
+ import { formatDate } from '@vue2-client/utils/util'
271
+ import XBadge from '@vue2-client/base-client/components/common/XBadge'
272
+ import XFormItem from '@vue2-client/base-client/components/common/XForm/XFormItem'
273
+ import CustomFuncCel from '@vue2-client/base-client/components/common/XTable/CustomFuncCel.vue'
274
+ import { executeStrFunctionByContext } from '@vue2-client/utils/runEvalFunction'
275
+ import XRate from '@vue2-client/base-client/components/common/XRate/index.vue'
276
+ import VueDraggableResizable from 'vue-draggable-resizable'
277
+
278
+ export default {
279
+ name: 'XTableWrapper',
280
+ components: {
281
+ Ellipsis,
282
+ STable,
283
+ XBadge,
284
+ XFormItem,
285
+ XRate,
286
+ CustomFuncCel,
287
+ VueDraggableResizable
288
+ },
289
+ data () {
290
+ return {
291
+ isDragging: false, // 添加拖拽状态标记
292
+ // eslint-disable-next-line vue/no-reserved-keys
293
+ _rafId: null // 添加requestAnimationFrame ID标记
294
+ }
295
+ },
296
+ computed: {
297
+ localDataSource () {
298
+ return this.activeTable?.localDataSource
299
+ },
300
+ // 获取当前活动的表格实例
301
+ activeTable () {
302
+ return this.tableContext.expandedGrid ? this.$refs.expandableTable : this.$refs.simpleTable
303
+ },
304
+ realTableColumns () {
305
+ return this.tableContext.tableColumns.filter(item => item.slotType !== 'action' || !this.disableAction)
306
+ },
307
+ components () {
308
+ return {
309
+ header: {
310
+ cell: (h, props, children) => {
311
+ const { key, ...restProps } = props
312
+ // 此处的this.realTableColumns 是定义的table的表头属性变量
313
+ const col = this.realTableColumns.find((col) => {
314
+ const k = col.dataIndex || col.key
315
+ return k === key
316
+ })
317
+ if (!col || !col.width || col.slotType === 'action') {
318
+ if (children) {
319
+ return h('th', { ...restProps }, [...children])
320
+ } else {
321
+ return h('th', { ...restProps })
322
+ }
323
+ }
324
+
325
+ // 创建一个防止点击排序的容器
326
+ const preventSortProps = {
327
+ style: {
328
+ position: 'absolute',
329
+ right: 0,
330
+ top: 0,
331
+ width: '20px',
332
+ height: '100%',
333
+ zIndex: 10
334
+ },
335
+ on: {
336
+ mousedown: (e) => {
337
+ e.stopPropagation()
338
+ e.preventDefault()
339
+ this.isDragging = true
340
+ }
341
+ }
342
+ }
343
+
344
+ const dragProps = {
345
+ key: col.dataIndex || col.key,
346
+ class: 'table-draggable-handle',
347
+ attrs: {
348
+ w: 10,
349
+ x: col.width,
350
+ z: 1,
351
+ axis: 'x',
352
+ draggable: true,
353
+ resizable: false,
354
+ },
355
+ on: {
356
+ dragging: (x, y) => {
357
+ // 使用requestAnimationFrame优化性能,减少卡顿
358
+ if (!this._rafId) {
359
+ this._rafId = requestAnimationFrame(() => {
360
+ col.width = Math.max(x, 50) // 设置最小列宽为50px
361
+ this.isDragging = true // 设置拖拽状态
362
+ this._rafId = null
363
+ })
364
+ }
365
+ },
366
+ mousedown: (e) => {
367
+ // 阻止事件冒泡,防止触发排序
368
+ e.stopPropagation()
369
+ e.preventDefault()
370
+ this.isDragging = true // 设置拖拽状态
371
+ },
372
+ dragstop: () => {
373
+ // 清除可能存在的动画帧请求
374
+ if (this._rafId) {
375
+ cancelAnimationFrame(this._rafId)
376
+ this._rafId = null
377
+ }
378
+
379
+ // 拖拽结束时,延迟重置拖拽状态,以防止排序被触发
380
+ setTimeout(() => {
381
+ this.isDragging = false
382
+ }, 100)
383
+ }
384
+ },
385
+ nativeOn: {
386
+ mousedown: (e) => {
387
+ e.stopPropagation()
388
+ e.preventDefault()
389
+ this.isDragging = true // 设置拖拽状态
390
+ }
391
+ }
392
+ }
393
+
394
+ const preventSort = h('div', preventSortProps)
395
+ const drag = h('vue-draggable-resizable', { ...dragProps })
396
+
397
+ // 修改th的点击事件,在拖拽状态下阻止排序
398
+ const newRestProps = { ...restProps }
399
+ const originalClick = newRestProps.on && newRestProps.on.click
400
+ if (originalClick) {
401
+ newRestProps.on = {
402
+ ...newRestProps.on,
403
+ click: (e) => {
404
+ if (this.isDragging) {
405
+ e.stopPropagation()
406
+ e.preventDefault()
407
+ return
408
+ }
409
+ originalClick(e)
410
+ }
411
+ }
412
+ }
413
+
414
+ if (children) {
415
+ return h('th', { ...newRestProps, class: 'resize-table-th' }, [...children, preventSort, drag])
416
+ } else {
417
+ return h('th', { ...newRestProps, class: 'resize-table-th' }, [preventSort, drag])
418
+ }
419
+ },
420
+ }
421
+ }
422
+ }
423
+ },
424
+ props: {
425
+ loadSelectedData: {
426
+ type: Boolean,
427
+ required: false,
428
+ default: false
429
+ },
430
+ disableAction: {
431
+ type: Boolean,
432
+ default: false
433
+ }
434
+ },
435
+ inject: ['tableContext'],
436
+ methods: {
437
+ handleRowClick (record) {
438
+ this.$emit('rowClick', record)
439
+ },
440
+ beforeDataChange (record) {
441
+ this.$emit('beforeDataChange', record)
442
+ },
443
+ onExpand (expanded, record) {
444
+ this.$emit('expand', expanded, record)
445
+ },
446
+ setLocalDataSource (data) {
447
+ this.activeTable?.setLocalDataSource(data)
448
+ },
449
+ loadData () {
450
+ if (this.loadSelectedData) {
451
+ return this.loadSelectedDataGen
452
+ } else {
453
+ return this.tableContext.loadData
454
+ }
455
+ },
456
+ loadSelectedDataGen (requestParameters) {
457
+ console.log('loadSelectedDataGen', {
458
+ pageNo: requestParameters?.pageNo,
459
+ pageSize: requestParameters?.pageSize
460
+ })
461
+
462
+ const { pageNo = 1, pageSize = 10 } = requestParameters || {}
463
+ const startIndex = (pageNo - 1) * pageSize
464
+ const endIndex = startIndex + pageSize
465
+ const paginatedData = this.tableContext.selectedRows.slice(startIndex, endIndex)
466
+
467
+ return new Promise((resolve) => {
468
+ resolve({
469
+ data: paginatedData,
470
+ pageNo,
471
+ pageSize,
472
+ totalPage: Math.ceil(this.tableContext.selectedRows.length / pageSize),
473
+ totalCount: this.tableContext.selectedRows.length
474
+ })
475
+ })
476
+ },
477
+ updateSelect (selectedRowKeys, selectedRows) {
478
+ this.activeTable?.updateSelect(selectedRowKeys, selectedRows)
479
+ },
480
+ clearSelected () {
481
+ this.activeTable?.clearSelected()
482
+ },
483
+ refresh (bool) {
484
+ this.activeTable?.refresh(bool)
485
+ },
486
+
487
+ /**
488
+ * 格式化日期
489
+ * @param date 日期字符串
490
+ * @param format 格式化方式
491
+ */
492
+ format (date, format) {
493
+ return formatDate(date, format)
494
+ },
495
+ /**
496
+ * 格式化数字
497
+ * @param number string 或者 number
498
+ * @param decimalPlaces 小数位数
499
+ */
500
+ numberFormat (number, decimalPlaces = 2) {
501
+ const value = parseFloat(number)
502
+ if (!isNaN(value)) {
503
+ return value.toFixed(decimalPlaces)
504
+ } else {
505
+ return ''
506
+ }
507
+ },
508
+ getFromItem (model, text, record, index) {
509
+ const aa = this.tableContext.formItems.reduce((acc, item) => {
510
+ if (item.type === 'group') {
511
+ const foundItem = item.groupItems.find(_item => _item.model === model && _item.editRow)
512
+ if (foundItem) {
513
+ acc = foundItem
514
+ }
515
+ } else if (item.model === model && item.editRow) {
516
+ acc = item
517
+ }
518
+ return acc
519
+ }, null)
520
+ if (aa) {
521
+ const tempConfig = JSON.parse(JSON.stringify(aa))
522
+ // 如果找到了字段
523
+ const ColumnIndex = this.realTableColumns.findIndex(item => item.dataIndex === model)
524
+ // 并且表单项是日期框
525
+ if (ColumnIndex !== -1 && ['yearPicker', 'monthPicker', 'datePicker', 'rangePicker'].includes(tempConfig.type)) {
526
+ // 修改他的列宽
527
+ this.realTableColumns[ColumnIndex].width = 220
528
+ }
529
+ // 如果有检验规则检验是数字
530
+ if (ColumnIndex !== -1 && ['number', 'integer', 'float'].includes(tempConfig?.rule?.type)) {
531
+ // 修改他的列宽
532
+ tempConfig.numberInput = true
533
+ }
534
+ if (tempConfig.editRowShowFunc) {
535
+ if (executeStrFunctionByContext(this.tableContext, tempConfig.editRowShowFunc, [text, record, index, tempConfig])) {
536
+ return tempConfig
537
+ }
538
+ } else {
539
+ return tempConfig
540
+ }
541
+ }
542
+ return false
543
+ },
544
+ handleResizeColumn (w, col) {
545
+ col.width = w
546
+ }
547
+ }
548
+ }
549
+ </script>
550
+
551
+ <style scoped lang="less">
552
+ :deep(.ant-table-fixed-right) {
553
+ overflow: visible !important;
554
+ }
555
+ </style>
556
+ <style>
557
+ .table-draggable-handle {
558
+ height: 100% !important;
559
+ left: auto !important;
560
+ right: -10px;
561
+ cursor: col-resize;
562
+ touch-action: none;
563
+ border: none;
564
+ position: absolute;
565
+ transform: none !important;
566
+ bottom: 0;
567
+ width: 20px !important;
568
+ }
569
+
570
+ .table-draggable-handle::after {
571
+ content: "";
572
+ position: absolute;
573
+ top: 50%;
574
+ height: 20px;
575
+ width: 1px;
576
+ background-color: #ebebeb;
577
+ transition: background-color 0.2s;
578
+ transform: translateY(-50%);
579
+ right: 9px;
580
+ }
581
+
582
+ .table-draggable-handle:hover::after {
583
+ background-color: #1890ff;
584
+ }
585
+
586
+ .table-draggable-handle:active::after {
587
+ background-color: #096dd9;
588
+ }
589
+
590
+ .resize-table-th {
591
+ position: relative;
592
+ }
593
+
594
+ .resize-table-th:hover .table-draggable-handle::after {
595
+ background-color: rgba(24, 144, 255, 0.5);
596
+ }
597
+ </style>