adtec-core-package 2.3.4 → 2.3.5

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 (342) hide show
  1. package/.editorconfig +6 -6
  2. package/.prettierrc.json +7 -7
  3. package/.vscode/extensions.json +8 -8
  4. package/README.en.md +36 -36
  5. package/README.md +39 -39
  6. package/env.d.ts +1 -1
  7. package/eslint.config.js +56 -56
  8. package/index.html +13 -13
  9. package/package.json +71 -71
  10. package/src/App.vue +9 -9
  11. package/src/api/BasicApi.ts +26 -26
  12. package/src/api/DeptInfoApi.ts +19 -19
  13. package/src/api/DocumentApi.ts +27 -27
  14. package/src/api/EmployeeInfoApi.ts +17 -17
  15. package/src/api/SysDictCacheApi.ts +29 -29
  16. package/src/api/SysUserApi.ts +35 -35
  17. package/src/api/framework.ts +12 -12
  18. package/src/api/workflow/workflow.ts +31 -31
  19. package/src/api/workflow/workflowInstApi.ts +72 -72
  20. package/src/assets/base.css +86 -86
  21. package/src/assets/logo.svg +1 -1
  22. package/src/assets/main.css +35 -35
  23. package/src/assets/style/ant.scss +19 -19
  24. package/src/assets/style/index.less +180 -180
  25. package/src/assets/style/transition.scss +49 -49
  26. package/src/components/ElCardList.vue +64 -64
  27. package/src/components/ElFlex/ElFlex.vue +297 -297
  28. package/src/components/ElTotalTools.vue +70 -70
  29. package/src/components/OperationAuth/operationAuth.vue +43 -32
  30. package/src/components/RichTextEditor/RichTextEditor.vue +442 -442
  31. package/src/components/Scrollbars/ElScrollbars.vue +21 -21
  32. package/src/components/Search/ElIconSearch.vue +267 -267
  33. package/src/components/Search/ElSearch.vue +154 -154
  34. package/src/components/SelectInDicators/SelectInDicators.vue +225 -225
  35. package/src/components/SelectInDicators/api/DataIndicatorsApi.ts +28 -28
  36. package/src/components/SelectInDicators/interface/IComIndex.ts +26 -26
  37. package/src/components/SelectInDicators/interface/IComIndexAttri.ts +18 -18
  38. package/src/components/Table/ElTableColumnDynamic.vue +25 -25
  39. package/src/components/Table/ElTableColumnEdit.vue +265 -265
  40. package/src/components/Table/ElTableTool.ts +37 -37
  41. package/src/components/Title/ElTitle.vue +53 -53
  42. package/src/components/autoToolTip/ElAutoToolTip.vue +62 -62
  43. package/src/components/baseEcharts/index.vue +48 -48
  44. package/src/components/bpmntree/api/modules/role.ts +31 -31
  45. package/src/components/bpmntree/api/modules/user.ts +17 -17
  46. package/src/components/bpmntree/components/AdvancedFilter/Operator.vue +112 -112
  47. package/src/components/bpmntree/components/AdvancedFilter/Trigger.vue +23 -23
  48. package/src/components/bpmntree/components/AdvancedFilter/index.vue +230 -230
  49. package/src/components/bpmntree/components/AdvancedFilter/type.ts +20 -20
  50. package/src/components/bpmntree/components/FlowIcon/index.scss +7 -7
  51. package/src/components/bpmntree/components/FlowIcon/index.tsx +68 -68
  52. package/src/components/bpmntree/components/Render/render.vue +90 -90
  53. package/src/components/bpmntree/components/Render/type.ts +12 -12
  54. package/src/components/bpmntree/components/RoleSelector/RolePicker.vue +264 -264
  55. package/src/components/bpmntree/components/RoleSelector/RoleTag.vue +48 -48
  56. package/src/components/bpmntree/components/RoleSelector/index.vue +113 -113
  57. package/src/components/bpmntree/components/UserSelector/UserTag.vue +73 -73
  58. package/src/components/bpmntree/components/UserSelector/index.vue +140 -140
  59. package/src/components/bpmntree/hooks/useDraggableScroll.ts +44 -44
  60. package/src/components/bpmntree/typings/index.d.ts +1 -1
  61. package/src/components/bpmntree/views/flowDesign/index.vue +653 -653
  62. package/src/components/bpmntree/views/flowDesign/nodes/Add.vue +184 -184
  63. package/src/components/bpmntree/views/flowDesign/nodes/ApprovalNode.vue +127 -127
  64. package/src/components/bpmntree/views/flowDesign/nodes/CcNode.vue +93 -93
  65. package/src/components/bpmntree/views/flowDesign/nodes/ConcurrentNode.vue +61 -61
  66. package/src/components/bpmntree/views/flowDesign/nodes/ConditionNode.vue +60 -60
  67. package/src/components/bpmntree/views/flowDesign/nodes/EndNode.vue +80 -80
  68. package/src/components/bpmntree/views/flowDesign/nodes/ExclusiveNode.vue +20 -20
  69. package/src/components/bpmntree/views/flowDesign/nodes/GatewayNode.vue +173 -173
  70. package/src/components/bpmntree/views/flowDesign/nodes/InclusiveNode.vue +20 -20
  71. package/src/components/bpmntree/views/flowDesign/nodes/JumpNode.vue +49 -49
  72. package/src/components/bpmntree/views/flowDesign/nodes/Node.vue +346 -346
  73. package/src/components/bpmntree/views/flowDesign/nodes/NotifyNode.vue +115 -115
  74. package/src/components/bpmntree/views/flowDesign/nodes/ParallelNode.vue +20 -20
  75. package/src/components/bpmntree/views/flowDesign/nodes/PopoverView.vue +78 -78
  76. package/src/components/bpmntree/views/flowDesign/nodes/StartNode.vue +84 -84
  77. package/src/components/bpmntree/views/flowDesign/nodes/TimerNode.vue +50 -50
  78. package/src/components/bpmntree/views/flowDesign/nodes/TreeNode.vue +45 -45
  79. package/src/components/bpmntree/views/flowDesign/nodes/type.ts +204 -204
  80. package/src/components/bpmntree/views/flowDesign/panels/ApprovalPanel.vue +581 -581
  81. package/src/components/bpmntree/views/flowDesign/panels/AssigneePanel.vue +120 -120
  82. package/src/components/bpmntree/views/flowDesign/panels/CcPanel.vue +99 -99
  83. package/src/components/bpmntree/views/flowDesign/panels/ConditionPanel.vue +41 -41
  84. package/src/components/bpmntree/views/flowDesign/panels/EndPanel.vue +18 -18
  85. package/src/components/bpmntree/views/flowDesign/panels/ExecutionListeners.vue +110 -110
  86. package/src/components/bpmntree/views/flowDesign/panels/JumpPanel.vue +32 -32
  87. package/src/components/bpmntree/views/flowDesign/panels/NotifyPanel.vue +101 -101
  88. package/src/components/bpmntree/views/flowDesign/panels/ParaPanel.vue +248 -248
  89. package/src/components/bpmntree/views/flowDesign/panels/StartPanel.vue +160 -160
  90. package/src/components/bpmntree/views/flowDesign/panels/TaskListeners.vue +110 -110
  91. package/src/components/bpmntree/views/flowDesign/panels/TimerPanel.vue +51 -51
  92. package/src/components/bpmntree/views/flowDesign/panels/index.vue +85 -85
  93. package/src/components/bpmntree/views/view.index.vue +291 -291
  94. package/src/components/business/comp.selectUser.vue +60 -60
  95. package/src/components/business/comp.userForm.vue +311 -311
  96. package/src/components/business/userSelect.vue +413 -413
  97. package/src/components/icon/ElIconBtn.vue +243 -243
  98. package/src/components/icon/ElIcons.vue +38 -38
  99. package/src/components/kFrame/IframeOptions.ts +116 -116
  100. package/src/components/kFrame/KFrame.vue +161 -161
  101. package/src/components/tooltip/index.ts +11 -11
  102. package/src/components/tooltip/src/tooltip.ts +518 -518
  103. package/src/components/upload/ElUploads.vue +364 -364
  104. package/src/components/upload/FileView.vue +214 -214
  105. package/src/components/upload/FileViewComponents.vue +56 -56
  106. package/src/components/vxeGrid/index.vue +36 -36
  107. package/src/components/workflow/TaskOperation.vue +241 -241
  108. package/src/components/workflow/WorkflowTodoDialog.vue +87 -87
  109. package/src/components/workflow/components/AddOrMinusMultiDialog.vue +159 -159
  110. package/src/components/workflow/components/CheckDialog.vue +350 -350
  111. package/src/components/workflow/components/ProcessDetailComp.vue +149 -149
  112. package/src/components/workflow/components/ProcessDetailDialog.vue +129 -129
  113. package/src/components/workflow/components/ProcessInstance.vue +117 -117
  114. package/src/components/workflow/components/ProcessInstanceStep.vue +266 -266
  115. package/src/components/workflow/components/SelectAssigneeDialog.vue +109 -109
  116. package/src/components/workflow/components/SelectReturnActivityDialog.vue +104 -104
  117. package/src/config/ElementPlusConfig.ts +95 -95
  118. package/src/config/VxeTableConfig.ts +254 -254
  119. package/src/css/elementUI/affix.scss +7 -7
  120. package/src/css/elementUI/alert.scss +115 -115
  121. package/src/css/elementUI/anchor-link.scss +41 -41
  122. package/src/css/elementUI/anchor.scss +88 -88
  123. package/src/css/elementUI/aside.scss +8 -8
  124. package/src/css/elementUI/autocomplete.scss +89 -89
  125. package/src/css/elementUI/avatar.scss +55 -55
  126. package/src/css/elementUI/backtop.scss +29 -29
  127. package/src/css/elementUI/badge.scss +58 -58
  128. package/src/css/elementUI/base.scss +3 -3
  129. package/src/css/elementUI/breadcrumb.scss +62 -62
  130. package/src/css/elementUI/button-group.scss +80 -80
  131. package/src/css/elementUI/button.scss +304 -304
  132. package/src/css/elementUI/calendar.scss +80 -80
  133. package/src/css/elementUI/card.scss +45 -45
  134. package/src/css/elementUI/carousel-item.scss +58 -58
  135. package/src/css/elementUI/carousel.scss +188 -188
  136. package/src/css/elementUI/cascader-panel.scss +138 -138
  137. package/src/css/elementUI/cascader.scss +230 -230
  138. package/src/css/elementUI/check-tag.scss +60 -60
  139. package/src/css/elementUI/checkbox-button.scss +140 -140
  140. package/src/css/elementUI/checkbox-group.scss +7 -7
  141. package/src/css/elementUI/checkbox.scss +298 -298
  142. package/src/css/elementUI/col.scss +48 -48
  143. package/src/css/elementUI/collapse.scss +70 -70
  144. package/src/css/elementUI/color/index.scss +20 -20
  145. package/src/css/elementUI/color-picker.scss +392 -392
  146. package/src/css/elementUI/common/popup.scss +47 -47
  147. package/src/css/elementUI/common/transition.scss +122 -122
  148. package/src/css/elementUI/common/var.scss +1549 -1549
  149. package/src/css/elementUI/container.scss +14 -14
  150. package/src/css/elementUI/dark/css-vars.scss +39 -39
  151. package/src/css/elementUI/dark/var.scss +222 -222
  152. package/src/css/elementUI/date-picker/date-picker.scss +110 -110
  153. package/src/css/elementUI/date-picker/date-range-picker.scss +113 -113
  154. package/src/css/elementUI/date-picker/date-table.scss +158 -158
  155. package/src/css/elementUI/date-picker/month-table.scss +112 -112
  156. package/src/css/elementUI/date-picker/picker-panel.scss +131 -131
  157. package/src/css/elementUI/date-picker/picker.scss +219 -219
  158. package/src/css/elementUI/date-picker/time-picker.scss +90 -90
  159. package/src/css/elementUI/date-picker/time-range-picker.scss +33 -33
  160. package/src/css/elementUI/date-picker/time-spinner.scss +111 -111
  161. package/src/css/elementUI/date-picker/year-table.scss +108 -108
  162. package/src/css/elementUI/date-picker.scss +9 -9
  163. package/src/css/elementUI/descriptions-item.scss +73 -73
  164. package/src/css/elementUI/descriptions.scss +152 -152
  165. package/src/css/elementUI/dialog.scss +199 -199
  166. package/src/css/elementUI/display.scss +12 -12
  167. package/src/css/elementUI/divider.scss +48 -48
  168. package/src/css/elementUI/drawer.scss +164 -164
  169. package/src/css/elementUI/dropdown.scss +208 -208
  170. package/src/css/elementUI/empty.scss +49 -49
  171. package/src/css/elementUI/footer.scss +12 -12
  172. package/src/css/elementUI/form.scss +243 -243
  173. package/src/css/elementUI/header.scss +12 -12
  174. package/src/css/elementUI/icon.scss +45 -45
  175. package/src/css/elementUI/image-viewer.scss +139 -139
  176. package/src/css/elementUI/image.scss +49 -49
  177. package/src/css/elementUI/index.scss +110 -110
  178. package/src/css/elementUI/input-number.scss +178 -178
  179. package/src/css/elementUI/input.scss +478 -478
  180. package/src/css/elementUI/link.scss +90 -90
  181. package/src/css/elementUI/loading.scss +104 -104
  182. package/src/css/elementUI/main.scss +14 -14
  183. package/src/css/elementUI/mention.scss +88 -88
  184. package/src/css/elementUI/menu.scss +339 -339
  185. package/src/css/elementUI/message-box.scss +213 -213
  186. package/src/css/elementUI/message.scss +98 -98
  187. package/src/css/elementUI/mixins/_button.scss +165 -165
  188. package/src/css/elementUI/mixins/_col.scss +33 -33
  189. package/src/css/elementUI/mixins/_var.scss +67 -67
  190. package/src/css/elementUI/mixins/config.scss +5 -5
  191. package/src/css/elementUI/mixins/function.scss +88 -88
  192. package/src/css/elementUI/mixins/mixins.scss +237 -237
  193. package/src/css/elementUI/mixins/utils.scss +39 -39
  194. package/src/css/elementUI/notification.scss +104 -104
  195. package/src/css/elementUI/option-group.scss +33 -33
  196. package/src/css/elementUI/option.scss +71 -71
  197. package/src/css/elementUI/overlay.scss +17 -17
  198. package/src/css/elementUI/page-header.scss +60 -60
  199. package/src/css/elementUI/pagination.scss +238 -238
  200. package/src/css/elementUI/popconfirm.scss +16 -16
  201. package/src/css/elementUI/popover.scss +61 -61
  202. package/src/css/elementUI/popper.scss +106 -106
  203. package/src/css/elementUI/progress.scss +179 -179
  204. package/src/css/elementUI/radio-button.scss +169 -169
  205. package/src/css/elementUI/radio-group.scss +9 -9
  206. package/src/css/elementUI/radio.scss +215 -215
  207. package/src/css/elementUI/rate.scss +108 -108
  208. package/src/css/elementUI/reset.scss +98 -98
  209. package/src/css/elementUI/result.scss +57 -57
  210. package/src/css/elementUI/row.scss +35 -35
  211. package/src/css/elementUI/scrollbar.scss +97 -97
  212. package/src/css/elementUI/segmented.scss +183 -183
  213. package/src/css/elementUI/select-dropdown-v2.scss +1 -1
  214. package/src/css/elementUI/select-dropdown.scss +57 -57
  215. package/src/css/elementUI/select-v2.scss +4 -4
  216. package/src/css/elementUI/select.scss +253 -253
  217. package/src/css/elementUI/skeleton-item.scss +83 -83
  218. package/src/css/elementUI/skeleton.scss +44 -44
  219. package/src/css/elementUI/slider.scss +212 -212
  220. package/src/css/elementUI/space.scss +20 -20
  221. package/src/css/elementUI/spinner.scss +43 -43
  222. package/src/css/elementUI/statistic.scss +35 -35
  223. package/src/css/elementUI/step.scss +316 -316
  224. package/src/css/elementUI/steps.scss +21 -21
  225. package/src/css/elementUI/switch.scss +300 -300
  226. package/src/css/elementUI/table-column.scss +98 -98
  227. package/src/css/elementUI/table-v2.scss +236 -236
  228. package/src/css/elementUI/table.scss +697 -697
  229. package/src/css/elementUI/tabs.scss +659 -659
  230. package/src/css/elementUI/tag.scss +181 -181
  231. package/src/css/elementUI/text.scss +51 -51
  232. package/src/css/elementUI/time-picker.scss +5 -5
  233. package/src/css/elementUI/time-select.scss +37 -37
  234. package/src/css/elementUI/timeline-item.scss +84 -84
  235. package/src/css/elementUI/timeline.scss +46 -46
  236. package/src/css/elementUI/tooltip-v2.scss +95 -95
  237. package/src/css/elementUI/tour.scss +187 -187
  238. package/src/css/elementUI/transfer.scss +203 -203
  239. package/src/css/elementUI/tree-select.scss +41 -41
  240. package/src/css/elementUI/tree.scss +134 -134
  241. package/src/css/elementUI/upload.scss +654 -654
  242. package/src/css/elementUI/var.scss +87 -87
  243. package/src/css/elementUI/virtual-list.scss +40 -40
  244. package/src/css/vxeTableUI/all.scss +9 -9
  245. package/src/css/vxeTableUI/base.scss +16 -16
  246. package/src/css/vxeTableUI/components/colgroup.scss +0 -0
  247. package/src/css/vxeTableUI/components/column.scss +0 -0
  248. package/src/css/vxeTableUI/components/grid.scss +83 -83
  249. package/src/css/vxeTableUI/components/icon.scss +1017 -1017
  250. package/src/css/vxeTableUI/components/iconTable.scss +205 -205
  251. package/src/css/vxeTableUI/components/old-icon.scss +715 -715
  252. package/src/css/vxeTableUI/components/table-module/all.scss +6 -6
  253. package/src/css/vxeTableUI/components/table-module/custom.scss +490 -490
  254. package/src/css/vxeTableUI/components/table-module/edit.scss +0 -0
  255. package/src/css/vxeTableUI/components/table-module/export.scss +130 -130
  256. package/src/css/vxeTableUI/components/table-module/filter.scss +127 -127
  257. package/src/css/vxeTableUI/components/table-module/keyboard.scss +0 -0
  258. package/src/css/vxeTableUI/components/table-module/menu.scss +85 -85
  259. package/src/css/vxeTableUI/components/table-module/validator.scss +0 -0
  260. package/src/css/vxeTableUI/components/table.scss +2256 -2256
  261. package/src/css/vxeTableUI/components/toolbar.scss +99 -99
  262. package/src/css/vxeTableUI/components/ui.scss +0 -0
  263. package/src/css/vxeTableUI/components/v-x-e-table.scss +0 -0
  264. package/src/css/vxeTableUI/cssvar.scss +2 -2
  265. package/src/css/vxeTableUI/default.scss +2 -2
  266. package/src/css/vxeTableUI/helpers/baseMixin.scss +82 -82
  267. package/src/css/vxeTableUI/icon/iconfont.ttf +0 -0
  268. package/src/css/vxeTableUI/icon/iconfont.woff +0 -0
  269. package/src/css/vxeTableUI/icon/iconfont.woff2 +0 -0
  270. package/src/css/vxeTableUI/index.scss +4 -4
  271. package/src/css/vxeTableUI/modules.scss +5 -5
  272. package/src/css/vxeTableUI/theme/base.scss +88 -88
  273. package/src/css/vxeTableUI/theme/dark.scss +46 -46
  274. package/src/css/vxeTableUI/theme/light.scss +41 -41
  275. package/src/css/vxeTableUI/variable.scss +41 -41
  276. package/src/directives/vKeydown.ts +91 -91
  277. package/src/hooks/useDictHooks.ts +119 -119
  278. package/src/hooks/useEcharts.ts +58 -58
  279. package/src/hooks/useFileView.ts +11 -11
  280. package/src/hooks/useListenerHooks.ts +137 -137
  281. package/src/hooks/useMessageHooks.ts +132 -132
  282. package/src/hooks/useOpenNewMenu.ts +30 -30
  283. package/src/hooks/usePermissionHooks.ts +139 -139
  284. package/src/hooks/usePermissionToolHooks.ts +21 -21
  285. package/src/hooks/useResetRefHooks.ts +18 -18
  286. package/src/hooks/userWorkflowHooks.ts +106 -106
  287. package/src/hooks/workflowTodo.ts +85 -85
  288. package/src/interface/BaseEntity.ts +30 -30
  289. package/src/interface/IMdmDept.ts +84 -84
  290. package/src/interface/IMdmEmployee.ts +153 -153
  291. package/src/interface/IMdmEmployeeQuery.ts +21 -21
  292. package/src/interface/IMdmOrg.ts +29 -29
  293. package/src/interface/IMdmOrgQuery.ts +13 -13
  294. package/src/interface/IOrgDeptInfo.ts +12 -12
  295. package/src/interface/ISortList.ts +6 -6
  296. package/src/interface/ISysDictDataCacheVo.ts +46 -46
  297. package/src/interface/ISysDictType.ts +37 -37
  298. package/src/interface/ISysMenuDataVo.ts +22 -22
  299. package/src/interface/ISysMenuInfoVo.ts +83 -83
  300. package/src/interface/ISysMenuOperationVo.ts +21 -21
  301. package/src/interface/ISysUploadFiles.ts +16 -16
  302. package/src/interface/ISysUserInfo.ts +70 -70
  303. package/src/interface/IUserBaseInfo.ts +90 -90
  304. package/src/interface/IUserPermissionVo.ts +44 -44
  305. package/src/interface/IVxeTable.ts +1 -1
  306. package/src/interface/Message.ts +73 -73
  307. package/src/interface/PageData.ts +17 -17
  308. package/src/interface/ResponseData.ts +16 -16
  309. package/src/interface/dictMapType.ts +11 -11
  310. package/src/interface/enum/FlexEnum.ts +85 -85
  311. package/src/interface/enum/MessageEnum.ts +41 -41
  312. package/src/interface/workflow/IWfProcessDefVo.ts +14 -14
  313. package/src/interface/workflow/IWfReturnNodeVo.ts +16 -16
  314. package/src/interface/workflow/IWfTaskAskVo.ts +65 -65
  315. package/src/interface/workflow/IWfTaskQueryVo.ts +30 -30
  316. package/src/interface/workflow/IWfTaskUsersVo.ts +21 -21
  317. package/src/interface/workflow/IWfTaskVo.ts +188 -188
  318. package/src/interface/workflow/workflow.ts +22 -22
  319. package/src/main.ts +14 -14
  320. package/src/mixin/globalMixin.ts +48 -48
  321. package/src/packages/index.ts +18 -18
  322. package/src/packages/text.vue +13 -13
  323. package/src/plugins/echartsConfig.ts +74 -74
  324. package/src/plugins/plugins.ts +12 -12
  325. package/src/plugins/renderDialog.ts +74 -74
  326. package/src/router/index.ts +23 -23
  327. package/src/stores/dictStore.ts +51 -51
  328. package/src/stores/messageStore.ts +49 -49
  329. package/src/stores/permissionStore.ts +112 -112
  330. package/src/stores/storeConfig.ts +23 -23
  331. package/src/stores/userInfoStore.ts +31 -31
  332. package/src/utils/AxiosConfig.ts +226 -226
  333. package/src/utils/FrameworkUtils.ts +358 -358
  334. package/src/utils/commonUtils.ts +335 -335
  335. package/src/utils/encrypt.ts +18 -18
  336. package/src/utils/modules.ts +8 -8
  337. package/src/utils/request.ts +76 -76
  338. package/src/utils/tree.ts +50 -50
  339. package/tsconfig.app.json +12 -12
  340. package/tsconfig.json +11 -11
  341. package/tsconfig.node.json +18 -18
  342. package/vite.config.ts +38 -38
@@ -1,335 +1,335 @@
1
- import {ElMessageBox} from 'element-plus'
2
-
3
- export default {
4
- /**
5
- * 校验身份证号码
6
- * @param rule
7
- * @param value
8
- * @param callback
9
- */
10
- validateIDCard: (rule: any, value: any, callback: any) => {
11
- if (!value) {
12
- callback()
13
- } else if (value.length !== 18) {
14
- callback(new Error('身份证号码必须是18位'))
15
- } else {
16
- const weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
17
- const checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
18
- let sum = 0
19
- for (let i = 0; i < 17; i++) {
20
- sum += parseInt(value[i]) * weight[i]
21
- }
22
- const mod = sum % 11
23
- if (checkCode[mod] === value[17]) {
24
- callback()
25
- } else {
26
- callback(new Error('身份证号码校验错误'))
27
- }
28
- }
29
- },
30
- /**
31
- * 校验身份证号码
32
- * @param value
33
- * @return boolean
34
- */
35
- isValidIDCard: (value: string) => {
36
- if (!value) {
37
- return false
38
- } else if (value.length !== 18) {
39
- return false
40
- } else {
41
- const weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
42
- const checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
43
- let sum = 0
44
- for (let i = 0; i < 17; i++) {
45
- sum += parseInt(value[i]) * weight[i]
46
- }
47
- const mod = sum % 11
48
- return checkCode[mod] === value[17];
49
- }
50
- },
51
- /**
52
- * 校验手机号码
53
- * @param rule
54
- * @param value
55
- * @param callback
56
- */
57
- validatePhone: (rule: any, value: any, callback: any) => {
58
- const phoneReg = /^1[3-9]\d{9}$/
59
- if (!value || value === '') {
60
- callback()
61
- } else if (!phoneReg.test(value)) {
62
- callback(new Error('请输入正确的手机号码'))
63
- } else {
64
- callback()
65
- }
66
- },
67
- /**
68
- * 校验手机号码
69
- * @param value
70
- * @return boolean
71
- */
72
- isValidPhone: (value: string) => {
73
- if (!value) return false
74
- const phoneReg = /^1[3-9]\d{9}$/
75
- return phoneReg.test(value)
76
- },
77
- /**
78
- * 校验邮箱
79
- */
80
- validateEmail: (rule: any, value: any, callback: any) => {
81
- const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
82
- if (!value || value === '') {
83
- callback()
84
- } else if (!emailReg.test(value)) {
85
- callback(new Error('请输入正确的邮箱'))
86
- } else {
87
- callback()
88
- }
89
- },
90
- /**
91
- * 校验邮箱
92
- * @param value
93
- * @return boolean
94
- */
95
- isValidEmail: (value: string) => {
96
- if (!value) return false
97
- const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
98
- return emailReg.test(value)
99
- },
100
- /**
101
- *解析身份证号码
102
- */
103
- parseIDCard: (idCard: string) => {
104
- if (idCard) {
105
- if (idCard.length === 18) {
106
- return {
107
- birthday: `${idCard.slice(6, 10)}-${idCard.slice(10, 12)}-${idCard.slice(12, 14)}`,
108
- sex: parseInt(idCard.slice(16, 17), 10) % 2 === 1 ? '1' : '2'
109
- }
110
- }
111
- }
112
- return {
113
- birthday: '',
114
- sex: ''
115
- }
116
- },
117
- /**
118
- * 判断数组中是否有props相同的对象
119
- * @param arr
120
- * @param props
121
- */
122
- hasDuplicate(arr: any[], props: string[]): boolean {
123
- const map = new Map()
124
- for (const obj of arr) {
125
- let key = ''
126
- for (const prop of props) {
127
- key += obj[prop] + '|'
128
- }
129
- if (map.has(key)) {
130
- return true
131
- }
132
- map.set(key, true)
133
- }
134
- return false
135
- },
136
- /**
137
- * 删除确认函数
138
- * @param fun
139
- * @param args
140
- */
141
- deleteFun(fun: Function, ...args: any[]): void {
142
- ElMessageBox.confirm(`是否确认删除该数据?`, '删除提示', {
143
- confirmButtonText: '确定',
144
- cancelButtonText: '取消',
145
- type: 'warning',
146
- }).then(async () => {
147
- fun(...args)
148
- })
149
- },
150
- calculateAge(birthDateStr: string | undefined): number | undefined {
151
- if (!birthDateStr) return undefined
152
- const birthDate = new Date(birthDateStr)
153
- const currentDate = new Date()
154
-
155
- let age = currentDate.getFullYear() - birthDate.getFullYear()
156
- const monthDiff = currentDate.getMonth() - birthDate.getMonth()
157
-
158
- if (monthDiff < 0 || (monthDiff === 0 && currentDate.getDate() < birthDate.getDate())) {
159
- age--
160
- }
161
-
162
- return age
163
- },
164
- formatCurrency(amount: number): number {
165
- return (Math.round(amount * 100) / 100).toFixed(2) as unknown as number;
166
- },
167
- stripRichText(html: string): string {
168
- // 如果输入不是字符串或为空,直接返回空字符串
169
- if (typeof html !== 'string' || html.trim() === '') {
170
- return '';
171
- }
172
-
173
- // 1. 移除所有HTML标签
174
- let text = html.replace(/<[^>]*>?/gm, '');
175
-
176
- // 2. 处理HTML实体(如&nbsp; &amp; &lt; &gt;等)
177
- const entities: Record<string, string> = {
178
- '&nbsp;': ' ',
179
- '&amp;': '&',
180
- '&lt;': '<',
181
- '&gt;': '>',
182
- '&quot;': '"',
183
- '&#39;': "'",
184
- '&#160;': ' '
185
- };
186
-
187
- text = text.replace(/&[a-zA-Z0-9#]+;/g, match => {
188
- return entities[match] || match;
189
- });
190
-
191
- // 3. 去除多余的空格和空行
192
- text = text
193
- .replace(/\s+/g, ' ') // 将多个空格/换行符替换为单个空格
194
- .trim(); // 去除首尾空格
195
-
196
- return text;
197
- },
198
- isRichTextEmpty(content: string | undefined): boolean {
199
- if (!content) return true;
200
- const textContent = this.stripRichText(content);
201
- return !textContent;
202
- },
203
- /**
204
- * 解析数学不等式规则,判断x是否满足规则
205
- * @param {string} rule - 不等式规则,如"x=100"、"x≤50"、"10<x<20"等
206
- * @param {string|number} xValue - 变量x的值,可为字符串或数字
207
- * @returns {boolean} - x是否满足规则
208
- */
209
- isValueValidForRule(rule: string, xValue: number | string): boolean {
210
- // 去除规则中的空格,统一格式
211
- rule = rule.replace(/\s/g, '');
212
-
213
- // 将字符串类型的数值转换为数字,若转换失败则设为NaN
214
- const x = typeof xValue === 'string' ? parseFloat(xValue) : xValue;
215
-
216
- // 检查转换后的值是否为有效数字
217
- if (isNaN(x)) {
218
- throw new Error(`Invalid xValue: ${xValue}`);
219
- }
220
-
221
- // 解析规则中的数值并进行匹配
222
- try {
223
- // 处理 "x=a" 类型规则
224
- if (rule.includes('=')) {
225
- const match = rule.match(/^x=([+-]?\d+(\.\d+)?)$/);
226
- if (match) {
227
- const a = parseFloat(match[1]);
228
- if (isNaN(a)) {
229
- throw new Error(`Invalid rule value: ${match[1]}`);
230
- }
231
- return x === a;
232
- }
233
- }
234
-
235
- // 处理 "x<a" 类型规则
236
- if (rule.includes('<') && !rule.includes('≤') && !rule.includes('±')) {
237
- // 先尝试匹配 "a<x<b" 类型
238
- const rangeMatch = rule.match(/^([+-]?\d+(\.\d+)?)<x<([+-]?\d+(\.\d+)?)$/);
239
- if (rangeMatch) {
240
- const a = parseFloat(rangeMatch[1]);
241
- const b = parseFloat(rangeMatch[3]);
242
- if (isNaN(a) || isNaN(b)) {
243
- throw new Error(`Invalid rule values: ${rangeMatch[1]} or ${rangeMatch[3]}`);
244
- }
245
- return x > a && x < b;
246
- }
247
-
248
- // 再尝试匹配 "x<a" 类型
249
- const match = rule.match(/^x<([+-]?\d+(\.\d+)?)$/);
250
- if (match) {
251
- const a = parseFloat(match[1]);
252
- if (isNaN(a)) {
253
- throw new Error(`Invalid rule value: ${match[1]}`);
254
- }
255
- return x < a;
256
- }
257
- }
258
-
259
- // 处理 "x≤a" 类型规则
260
- if (rule.includes('≤')) {
261
- const match = rule.match(/^x≤([+-]?\d+(\.\d+)?)$/);
262
- if (match) {
263
- const a = parseFloat(match[1]);
264
- if (isNaN(a)) {
265
- throw new Error(`Invalid rule value: ${match[1]}`);
266
- }
267
- return x <= a;
268
- }
269
- }
270
-
271
- // 处理 "x>a" 类型规则
272
- if (rule.includes('>') && !rule.includes('≥')) {
273
- const match = rule.match(/^x>([+-]?\d+(\.\d+)?)$/);
274
- if (match) {
275
- const a = parseFloat(match[1]);
276
- if (isNaN(a)) {
277
- throw new Error(`Invalid rule value: ${match[1]}`);
278
- }
279
- return x > a;
280
- }
281
- }
282
-
283
- // 处理 "x≥a" 类型规则
284
- if (rule.includes('≥')) {
285
- const match = rule.match(/^x≥([+-]?\d+(\.\d+)?)$/);
286
- if (match) {
287
- const a = parseFloat(match[1]);
288
- if (isNaN(a)) {
289
- throw new Error(`Invalid rule value: ${match[1]}`);
290
- }
291
- return x >= a;
292
- }
293
- }
294
-
295
- // 处理 "x±a" 类型规则
296
- if (rule.includes('±')) {
297
- const match = rule.match(/^x±([+-]?\d+(\.\d+)?)$/);
298
- if (match) {
299
- const a = parseFloat(match[1]);
300
- if (isNaN(a)) {
301
- throw new Error(`Invalid rule value: ${match[1]}`);
302
- }
303
- return x >= a - Math.abs(a) && x <= a + Math.abs(a);
304
- }
305
- }
306
-
307
- // 处理 "a≤x<b" 类型规则
308
- if (rule.includes('≤x<')) {
309
- const match = rule.match(/^([+-]?\d+(\.\d+)?)≤x<([+-]?\d+(\.\d+)?)$/);
310
- if (match) {
311
- const a = parseFloat(match[1]);
312
- const b = parseFloat(match[3]);
313
- if (isNaN(a) || isNaN(b)) {
314
- throw new Error(`Invalid rule values: ${match[1]} or ${match[3]}`);
315
- }
316
- return x >= a && x < b;
317
- }
318
- }
319
-
320
- } catch (error) {
321
- throw new Error(`Rule parsing error: ${(error as Error).message}`);
322
- }
323
-
324
- throw new Error(`Unsupported rule format: ${rule}`);
325
- },
326
- parseUrlParams: (queryStr: string):Record<string, any> => {
327
- return Object.fromEntries(new URLSearchParams(queryStr.slice(queryStr.indexOf('?') + 1)));
328
- },
329
- jsonToUrlQuery: (jsonObj: Record<string, string>) => {
330
- const keyValuePairs = Object.entries(jsonObj).map(([key, value]) => {
331
- return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
332
- })
333
- return keyValuePairs.length > 0 ? `?${keyValuePairs.join('&')}` : ''
334
- }
335
- }
1
+ import {ElMessageBox} from 'element-plus'
2
+
3
+ export default {
4
+ /**
5
+ * 校验身份证号码
6
+ * @param rule
7
+ * @param value
8
+ * @param callback
9
+ */
10
+ validateIDCard: (rule: any, value: any, callback: any) => {
11
+ if (!value) {
12
+ callback()
13
+ } else if (value.length !== 18) {
14
+ callback(new Error('身份证号码必须是18位'))
15
+ } else {
16
+ const weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
17
+ const checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
18
+ let sum = 0
19
+ for (let i = 0; i < 17; i++) {
20
+ sum += parseInt(value[i]) * weight[i]
21
+ }
22
+ const mod = sum % 11
23
+ if (checkCode[mod] === value[17]) {
24
+ callback()
25
+ } else {
26
+ callback(new Error('身份证号码校验错误'))
27
+ }
28
+ }
29
+ },
30
+ /**
31
+ * 校验身份证号码
32
+ * @param value
33
+ * @return boolean
34
+ */
35
+ isValidIDCard: (value: string) => {
36
+ if (!value) {
37
+ return false
38
+ } else if (value.length !== 18) {
39
+ return false
40
+ } else {
41
+ const weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
42
+ const checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
43
+ let sum = 0
44
+ for (let i = 0; i < 17; i++) {
45
+ sum += parseInt(value[i]) * weight[i]
46
+ }
47
+ const mod = sum % 11
48
+ return checkCode[mod] === value[17];
49
+ }
50
+ },
51
+ /**
52
+ * 校验手机号码
53
+ * @param rule
54
+ * @param value
55
+ * @param callback
56
+ */
57
+ validatePhone: (rule: any, value: any, callback: any) => {
58
+ const phoneReg = /^1[3-9]\d{9}$/
59
+ if (!value || value === '') {
60
+ callback()
61
+ } else if (!phoneReg.test(value)) {
62
+ callback(new Error('请输入正确的手机号码'))
63
+ } else {
64
+ callback()
65
+ }
66
+ },
67
+ /**
68
+ * 校验手机号码
69
+ * @param value
70
+ * @return boolean
71
+ */
72
+ isValidPhone: (value: string) => {
73
+ if (!value) return false
74
+ const phoneReg = /^1[3-9]\d{9}$/
75
+ return phoneReg.test(value)
76
+ },
77
+ /**
78
+ * 校验邮箱
79
+ */
80
+ validateEmail: (rule: any, value: any, callback: any) => {
81
+ const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
82
+ if (!value || value === '') {
83
+ callback()
84
+ } else if (!emailReg.test(value)) {
85
+ callback(new Error('请输入正确的邮箱'))
86
+ } else {
87
+ callback()
88
+ }
89
+ },
90
+ /**
91
+ * 校验邮箱
92
+ * @param value
93
+ * @return boolean
94
+ */
95
+ isValidEmail: (value: string) => {
96
+ if (!value) return false
97
+ const emailReg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
98
+ return emailReg.test(value)
99
+ },
100
+ /**
101
+ *解析身份证号码
102
+ */
103
+ parseIDCard: (idCard: string) => {
104
+ if (idCard) {
105
+ if (idCard.length === 18) {
106
+ return {
107
+ birthday: `${idCard.slice(6, 10)}-${idCard.slice(10, 12)}-${idCard.slice(12, 14)}`,
108
+ sex: parseInt(idCard.slice(16, 17), 10) % 2 === 1 ? '1' : '2'
109
+ }
110
+ }
111
+ }
112
+ return {
113
+ birthday: '',
114
+ sex: ''
115
+ }
116
+ },
117
+ /**
118
+ * 判断数组中是否有props相同的对象
119
+ * @param arr
120
+ * @param props
121
+ */
122
+ hasDuplicate(arr: any[], props: string[]): boolean {
123
+ const map = new Map()
124
+ for (const obj of arr) {
125
+ let key = ''
126
+ for (const prop of props) {
127
+ key += obj[prop] + '|'
128
+ }
129
+ if (map.has(key)) {
130
+ return true
131
+ }
132
+ map.set(key, true)
133
+ }
134
+ return false
135
+ },
136
+ /**
137
+ * 删除确认函数
138
+ * @param fun
139
+ * @param args
140
+ */
141
+ deleteFun(fun: Function, ...args: any[]): void {
142
+ ElMessageBox.confirm(`是否确认删除该数据?`, '删除提示', {
143
+ confirmButtonText: '确定',
144
+ cancelButtonText: '取消',
145
+ type: 'warning',
146
+ }).then(async () => {
147
+ fun(...args)
148
+ })
149
+ },
150
+ calculateAge(birthDateStr: string | undefined): number | undefined {
151
+ if (!birthDateStr) return undefined
152
+ const birthDate = new Date(birthDateStr)
153
+ const currentDate = new Date()
154
+
155
+ let age = currentDate.getFullYear() - birthDate.getFullYear()
156
+ const monthDiff = currentDate.getMonth() - birthDate.getMonth()
157
+
158
+ if (monthDiff < 0 || (monthDiff === 0 && currentDate.getDate() < birthDate.getDate())) {
159
+ age--
160
+ }
161
+
162
+ return age
163
+ },
164
+ formatCurrency(amount: number): number {
165
+ return (Math.round(amount * 100) / 100).toFixed(2) as unknown as number;
166
+ },
167
+ stripRichText(html: string): string {
168
+ // 如果输入不是字符串或为空,直接返回空字符串
169
+ if (typeof html !== 'string' || html.trim() === '') {
170
+ return '';
171
+ }
172
+
173
+ // 1. 移除所有HTML标签
174
+ let text = html.replace(/<[^>]*>?/gm, '');
175
+
176
+ // 2. 处理HTML实体(如&nbsp; &amp; &lt; &gt;等)
177
+ const entities: Record<string, string> = {
178
+ '&nbsp;': ' ',
179
+ '&amp;': '&',
180
+ '&lt;': '<',
181
+ '&gt;': '>',
182
+ '&quot;': '"',
183
+ '&#39;': "'",
184
+ '&#160;': ' '
185
+ };
186
+
187
+ text = text.replace(/&[a-zA-Z0-9#]+;/g, match => {
188
+ return entities[match] || match;
189
+ });
190
+
191
+ // 3. 去除多余的空格和空行
192
+ text = text
193
+ .replace(/\s+/g, ' ') // 将多个空格/换行符替换为单个空格
194
+ .trim(); // 去除首尾空格
195
+
196
+ return text;
197
+ },
198
+ isRichTextEmpty(content: string | undefined): boolean {
199
+ if (!content) return true;
200
+ const textContent = this.stripRichText(content);
201
+ return !textContent;
202
+ },
203
+ /**
204
+ * 解析数学不等式规则,判断x是否满足规则
205
+ * @param {string} rule - 不等式规则,如"x=100"、"x≤50"、"10<x<20"等
206
+ * @param {string|number} xValue - 变量x的值,可为字符串或数字
207
+ * @returns {boolean} - x是否满足规则
208
+ */
209
+ isValueValidForRule(rule: string, xValue: number | string): boolean {
210
+ // 去除规则中的空格,统一格式
211
+ rule = rule.replace(/\s/g, '');
212
+
213
+ // 将字符串类型的数值转换为数字,若转换失败则设为NaN
214
+ const x = typeof xValue === 'string' ? parseFloat(xValue) : xValue;
215
+
216
+ // 检查转换后的值是否为有效数字
217
+ if (isNaN(x)) {
218
+ throw new Error(`Invalid xValue: ${xValue}`);
219
+ }
220
+
221
+ // 解析规则中的数值并进行匹配
222
+ try {
223
+ // 处理 "x=a" 类型规则
224
+ if (rule.includes('=')) {
225
+ const match = rule.match(/^x=([+-]?\d+(\.\d+)?)$/);
226
+ if (match) {
227
+ const a = parseFloat(match[1]);
228
+ if (isNaN(a)) {
229
+ throw new Error(`Invalid rule value: ${match[1]}`);
230
+ }
231
+ return x === a;
232
+ }
233
+ }
234
+
235
+ // 处理 "x<a" 类型规则
236
+ if (rule.includes('<') && !rule.includes('≤') && !rule.includes('±')) {
237
+ // 先尝试匹配 "a<x<b" 类型
238
+ const rangeMatch = rule.match(/^([+-]?\d+(\.\d+)?)<x<([+-]?\d+(\.\d+)?)$/);
239
+ if (rangeMatch) {
240
+ const a = parseFloat(rangeMatch[1]);
241
+ const b = parseFloat(rangeMatch[3]);
242
+ if (isNaN(a) || isNaN(b)) {
243
+ throw new Error(`Invalid rule values: ${rangeMatch[1]} or ${rangeMatch[3]}`);
244
+ }
245
+ return x > a && x < b;
246
+ }
247
+
248
+ // 再尝试匹配 "x<a" 类型
249
+ const match = rule.match(/^x<([+-]?\d+(\.\d+)?)$/);
250
+ if (match) {
251
+ const a = parseFloat(match[1]);
252
+ if (isNaN(a)) {
253
+ throw new Error(`Invalid rule value: ${match[1]}`);
254
+ }
255
+ return x < a;
256
+ }
257
+ }
258
+
259
+ // 处理 "x≤a" 类型规则
260
+ if (rule.includes('≤')) {
261
+ const match = rule.match(/^x≤([+-]?\d+(\.\d+)?)$/);
262
+ if (match) {
263
+ const a = parseFloat(match[1]);
264
+ if (isNaN(a)) {
265
+ throw new Error(`Invalid rule value: ${match[1]}`);
266
+ }
267
+ return x <= a;
268
+ }
269
+ }
270
+
271
+ // 处理 "x>a" 类型规则
272
+ if (rule.includes('>') && !rule.includes('≥')) {
273
+ const match = rule.match(/^x>([+-]?\d+(\.\d+)?)$/);
274
+ if (match) {
275
+ const a = parseFloat(match[1]);
276
+ if (isNaN(a)) {
277
+ throw new Error(`Invalid rule value: ${match[1]}`);
278
+ }
279
+ return x > a;
280
+ }
281
+ }
282
+
283
+ // 处理 "x≥a" 类型规则
284
+ if (rule.includes('≥')) {
285
+ const match = rule.match(/^x≥([+-]?\d+(\.\d+)?)$/);
286
+ if (match) {
287
+ const a = parseFloat(match[1]);
288
+ if (isNaN(a)) {
289
+ throw new Error(`Invalid rule value: ${match[1]}`);
290
+ }
291
+ return x >= a;
292
+ }
293
+ }
294
+
295
+ // 处理 "x±a" 类型规则
296
+ if (rule.includes('±')) {
297
+ const match = rule.match(/^x±([+-]?\d+(\.\d+)?)$/);
298
+ if (match) {
299
+ const a = parseFloat(match[1]);
300
+ if (isNaN(a)) {
301
+ throw new Error(`Invalid rule value: ${match[1]}`);
302
+ }
303
+ return x >= a - Math.abs(a) && x <= a + Math.abs(a);
304
+ }
305
+ }
306
+
307
+ // 处理 "a≤x<b" 类型规则
308
+ if (rule.includes('≤x<')) {
309
+ const match = rule.match(/^([+-]?\d+(\.\d+)?)≤x<([+-]?\d+(\.\d+)?)$/);
310
+ if (match) {
311
+ const a = parseFloat(match[1]);
312
+ const b = parseFloat(match[3]);
313
+ if (isNaN(a) || isNaN(b)) {
314
+ throw new Error(`Invalid rule values: ${match[1]} or ${match[3]}`);
315
+ }
316
+ return x >= a && x < b;
317
+ }
318
+ }
319
+
320
+ } catch (error) {
321
+ throw new Error(`Rule parsing error: ${(error as Error).message}`);
322
+ }
323
+
324
+ throw new Error(`Unsupported rule format: ${rule}`);
325
+ },
326
+ parseUrlParams: (queryStr: string):Record<string, any> => {
327
+ return Object.fromEntries(new URLSearchParams(queryStr.slice(queryStr.indexOf('?') + 1)));
328
+ },
329
+ jsonToUrlQuery: (jsonObj: Record<string, string>) => {
330
+ const keyValuePairs = Object.entries(jsonObj).map(([key, value]) => {
331
+ return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`
332
+ })
333
+ return keyValuePairs.length > 0 ? `?${keyValuePairs.join('&')}` : ''
334
+ }
335
+ }