@utogether/udp-core 1.0.1 → 1.0.2

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 (239) hide show
  1. package/build/plugins.ts +13 -2
  2. package/dist/{403-JWjatlxJ.js → 403-B1rIjAAu.js} +7 -6
  3. package/dist/{404-BcdMJfPb.js → 404-mBqc2y4t.js} +14 -13
  4. package/dist/{500-bsa3F_cc.js → 500-BoI45Zdh.js} +10 -9
  5. package/dist/{AuthorityInfo-CqItgNs5.js → AuthorityInfo-B08NBIIn.js} +1 -1
  6. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-BLP1SaiH.js +100 -0
  7. package/dist/{AuthorityPanel-BaLMwMgW.js → AuthorityPanel-BeBNiwqc.js} +1 -1
  8. package/dist/{AuthorityPanel.vue_vue_type_style_index_0_lang-C_bkqLD9.js → AuthorityPanel.vue_vue_type_style_index_0_lang-CIYmnP9-.js} +6 -6
  9. package/dist/{Company-DVff9IA7.js → Company-JGGyWEWH.js} +3 -3
  10. package/dist/{CompanyPanel-CNrdq4XE.js → CompanyPanel-BQ_cCmDx.js} +16 -16
  11. package/dist/{Department-CqcpfL4i.js → Department-z2iO6hwM.js} +10 -10
  12. package/dist/{DepartmentPanel-Bvti4LGu.js → DepartmentPanel-BtQe7zwU.js} +108 -78
  13. package/dist/{DesignPanel-CjykspE1.js → DesignPanel-7mhtVWas.js} +1 -1
  14. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-BK9EERdd.js → DesignPanel.vue_vue_type_style_index_0_lang-4EsHemj_.js} +24 -26
  15. package/dist/DictView-CjchV2Yk.js +109 -0
  16. package/dist/InvOrganization-Pn1O_XP0.js +74 -0
  17. package/dist/Org-BqytV_vi.js +39 -0
  18. package/dist/{Preview-Cm_7RhYU.js → Preview-CLpUUMay.js} +2 -2
  19. package/dist/{ReportDefine-CJVlQ--7.js → ReportDefine-Cz1KtEUF.js} +1 -1
  20. package/dist/{ReportDesign-B0unlrkt.js → ReportDesign-BaORYud4.js} +46 -46
  21. package/dist/{ReportQuery-BKuMCEvF.js → ReportQuery-CPCPXiXz.js} +5 -5
  22. package/dist/{ReportQueryFrom-DAngMJLU.js → ReportQueryFrom-C_AcrfkJ.js} +1 -1
  23. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-CPpwmztJ.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-Bm67ejay.js} +6 -5
  24. package/dist/{ReportTemplate-8YH3L8Pv.js → ReportTemplate-CFiNMz79.js} +26 -26
  25. package/dist/{Role-MxI30-0W.js → Role-B-XDoJd5.js} +6 -6
  26. package/dist/{RoleAssign-BzUY_y_y.js → RoleAssign-BolW8YVs.js} +9 -9
  27. package/dist/{RolePanel-DS_TErTn.js → RolePanel-2kfs5tw9.js} +1 -1
  28. package/dist/{RolePanel-CXdcvsR5.js → RolePanel-HilSuYns.js} +1 -1
  29. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-CE4gApUY.js +132 -0
  30. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Ddl-A7Zh.js → RolePanel.vue_vue_type_script_setup_true_lang-DPzgfAyV.js} +42 -36
  31. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-DnchUgIF.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCTH4RkH.js} +20 -20
  32. package/dist/{Staff-D7tXo_Gn.js → Staff-BTk3whFC.js} +3 -3
  33. package/dist/{StaffInfo-Bk8BY8PO.js → StaffInfo-d3AuSzlA.js} +1 -1
  34. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-DqKwZi5f.js → StaffInfo.vue_vue_type_script_setup_true_lang-eOL4VlfE.js} +13 -13
  35. package/dist/{StaffPanel-VtpGCTIq.js → StaffPanel-DV-D4jjz.js} +1 -1
  36. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-4sFq3CEo.js +135 -0
  37. package/dist/{SysUser-D0Q6OvD7.js → SysUser-BnjYytws.js} +2 -2
  38. package/dist/{SysUserPanel-1_vrsANQ.js → SysUserPanel-CBoyD-Qi.js} +1 -1
  39. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-PrTlTZR-.js +341 -0
  40. package/dist/{SystemMenu-9PG3vESE.js → SystemMenu-kYB_ZaUt.js} +49 -47
  41. package/dist/{UserInfo-qgXUEGwi.js → UserInfo-4dx97VBL.js} +1 -1
  42. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-CN0C5rVk.js → UserInfo.vue_vue_type_style_index_0_lang-BpbC_ZDm.js} +35 -33
  43. package/dist/{childView-C7ZSA5fR.js → childView-CHPNfTEb.js} +1 -1
  44. package/dist/{childView-yV2QLwfA.js → childView-CKA_JgVZ.js} +1 -1
  45. package/dist/{childView.vue_vue_type_style_index_0_lang-DdKxPGdh.js → childView.vue_vue_type_style_index_0_lang-Bym2fQRd.js} +7 -7
  46. package/dist/childView.vue_vue_type_style_index_0_lang-W7bCtXeu.js +177 -0
  47. package/dist/{code-rule-95K1jr-u.js → code-rule-CbxuZg0-.js} +42 -41
  48. package/dist/core.es.js +19 -10
  49. package/dist/{cron-task-DGrQwOHs.js → cron-task-nTOpqQYf.js} +5 -5
  50. package/dist/flow-task-B07st2aD.js +10 -0
  51. package/dist/{frameView-7SmME93D.js → frameView-Z1tPUyCh.js} +15 -14
  52. package/dist/img/l_img.svg +1 -1
  53. package/dist/img/minicolors.png +0 -0
  54. package/dist/img/v_img.svg +1 -1
  55. package/dist/index-C3q8HoJM.js +4650 -0
  56. package/dist/{layoutView-C6WIVWGZ.js → layoutView--MGA9zUB.js} +1776 -1764
  57. package/dist/{log-in-e7D5Ss1P.js → log-in-CSYJDA6m.js} +36 -29
  58. package/dist/log-out-DiwGCg7p.js +130 -0
  59. package/dist/login-C6Y0ajDp.js +251 -0
  60. package/dist/{login-log-CvVnyGi3.js → login-log-C0V-_l3F.js} +6 -4
  61. package/dist/{lov-view-DoF5LqFQ.js → lov-view-Cmv7wZZ9.js} +9 -9
  62. package/dist/{menuInfo-CNzGQwOD.js → menuInfo-UeutJpOa.js} +1 -1
  63. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-51SYxVc_.js → menuInfo.vue_vue_type_style_index_0_lang-CWX4Mu67.js} +144 -121
  64. package/dist/pda-app-B6w99SJo.js +710 -0
  65. package/dist/redirect-BqegffKC.js +15 -0
  66. package/dist/{resource-gVFFMO9l.js → resource-BybJvUv0.js} +17 -17
  67. package/dist/{su-welcome-BN_s_RX_.js → su-welcome-C1bmxHoY.js} +124 -126
  68. package/dist/sys-config-BnmIDnCj.js +370 -0
  69. package/dist/udp-core.css +1 -9
  70. package/dist/utogether-MlnyYtNS.js +4 -0
  71. package/index.ts +19 -6
  72. package/package.json +18 -17
  73. package/src/App.vue +2 -7
  74. package/src/api/http.ts +1 -4
  75. package/src/api/index.ts +5 -3
  76. package/src/api/user.ts +2 -2
  77. package/src/components/SuCharts/src/UserInfo.vue +3 -3
  78. package/src/components/SuScrollTree/ScrollPanel.vue +4 -9
  79. package/src/components/udp/content/index.vue +88 -0
  80. package/src/components/udp/form/form.vue +109 -0
  81. package/src/components/udp/grid/index.vue +524 -0
  82. package/src/components/udp/index.ts +5 -4
  83. package/src/components/udp/ut-stamp-badge/index.vue +271 -0
  84. package/src/components/udp/utils.ts +408 -40
  85. package/src/directives/permission/index.ts +1 -1
  86. package/src/layout/components/lay-navbar/index.vue +9 -7
  87. package/src/layout/components/lay-panel/index.vue +3 -3
  88. package/src/layout/components/lay-search/index.vue +1 -1
  89. package/src/layout/components/lay-select-org/index.vue +4 -9
  90. package/src/layout/components/lay-setting/index.vue +503 -510
  91. package/src/layout/components/lay-sidebar/breadCrumb.vue +1 -1
  92. package/src/layout/components/lay-sidebar/horizontal.vue +8 -6
  93. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  94. package/src/layout/components/lay-sidebar/sidebar-logo.vue +101 -98
  95. package/src/layout/components/lay-tag/index.vue +598 -625
  96. package/src/layout/hooks/useDataThemeChange.ts +1 -1
  97. package/src/layout/hooks/useNav.ts +176 -173
  98. package/src/layout/hooks/useTag.ts +227 -233
  99. package/src/layout/layoutView.vue +215 -215
  100. package/src/layout/types.ts +93 -92
  101. package/src/main.ts +115 -109
  102. package/src/plugins/i18n/en.ts +26 -13
  103. package/src/plugins/i18n/module/u-workflow.ts +1 -1
  104. package/src/plugins/i18n/zh.ts +363 -337
  105. package/src/plugins/vxe-table/index.ts +74 -4
  106. package/src/plugins/vxe-table/render.tsx +186 -58
  107. package/src/router/index.ts +187 -183
  108. package/src/router/modules/flow.ts +35 -0
  109. package/src/router/modules/home.ts +32 -32
  110. package/src/router/modules/remaining.ts +1 -26
  111. package/src/router/utils.ts +420 -377
  112. package/src/store/modules/app.ts +2 -4
  113. package/src/store/modules/epTheme.ts +48 -49
  114. package/src/store/modules/multiTags.ts +15 -14
  115. package/src/store/modules/permission.ts +25 -15
  116. package/src/store/modules/system.ts +1 -3
  117. package/src/style/button.scss +11 -4
  118. package/src/style/login.css +1 -1
  119. package/src/style/tailwind.css +1 -68
  120. package/src/style/vxetable.scss +103 -11
  121. package/src/utils/authority/index.ts +1 -1
  122. package/src/utils/dataFormat/index.ts +223 -223
  123. package/src/utils/index.ts +3 -1
  124. package/src/utils/lifecycle.ts +39 -20
  125. package/src/utils/propTypes.ts +1 -6
  126. package/src/utils/storage/index.ts +2 -2
  127. package/src/utils/{http → udp/http}/index.ts +27 -30
  128. package/src/utils/{http → udp/http}/types.d.ts +2 -6
  129. package/src/views/login/login-view.vue +6 -20
  130. package/src/views/organization/company/CompanyPanel.vue +2 -2
  131. package/src/views/organization/department/Department.vue +58 -58
  132. package/src/views/organization/department/DepartmentPanel.vue +303 -283
  133. package/src/views/organization/inv-org/InvOrganization.vue +23 -9
  134. package/src/views/organization/org/Org.vue +9 -5
  135. package/src/views/organization/staff/StaffInfo.vue +127 -133
  136. package/src/views/organization/staff/StaffPanel.vue +162 -145
  137. package/src/views/system/cron/cron-task.vue +2 -12
  138. package/src/views/system/menu/AuthorityPanel.vue +2 -2
  139. package/src/views/system/menu/SystemMenu.vue +14 -20
  140. package/src/views/system/menu/menuInfo.vue +39 -23
  141. package/src/views/system/role/AuthorityInfo.vue +19 -15
  142. package/src/views/system/role/Role.vue +1 -5
  143. package/src/views/system/role/RolePanel.vue +11 -2
  144. package/src/views/system/role/UserInfo.vue +11 -9
  145. package/src/views/system/role-assign/RoleAssign.vue +2 -2
  146. package/src/views/system/role-assign/RolePanel.vue +12 -9
  147. package/src/views/system/sys/sys-config.vue +70 -21
  148. package/src/views/system/sysUser/SysUserPanel.vue +347 -278
  149. package/src/views/uapp/pda/pda-app.vue +48 -16
  150. package/src/views/udev/coderule/code-rule.vue +132 -121
  151. package/src/views/udev/dict/DictView.vue +118 -106
  152. package/src/views/udev/dict/childView.vue +183 -222
  153. package/src/views/udev/lov/childView.vue +1 -7
  154. package/src/views/ufile/aggregation/File.vue +5 -5
  155. package/src/views/ufile/file/water-mark.vue +14 -14
  156. package/src/views/uhome/components/menu-favorite.vue +314 -331
  157. package/src/views/uhome/su-welcome.vue +319 -339
  158. package/src/views/ulogin/login.vue +325 -316
  159. package/src/views/upms/interface/log-in.vue +100 -106
  160. package/src/views/upms/interface/log-out.vue +104 -107
  161. package/src/views/upms/user/login-log.vue +54 -60
  162. package/src/views/urpt/design/DesignPanel.vue +16 -35
  163. package/src/views/urpt/design/Preview.vue +1 -0
  164. package/src/views/urpt/design/ReportDesign.vue +17 -23
  165. package/src/views/urpt/static-resource/resource.vue +3 -3
  166. package/src/views/urpt/template/ReportTemplate.vue +7 -7
  167. package/src/views/utask/flow-task.vue +18 -0
  168. package/types/global.d.ts +231 -236
  169. package/vite.config.ts +13 -2
  170. package/dist/AuthorityInfo.vue_vue_type_style_index_0_lang-32L40GY2.js +0 -102
  171. package/dist/DictView-q7kR9K--.js +0 -95
  172. package/dist/InvOrganization-DI45LqZV.js +0 -260
  173. package/dist/Org-CZju_ZiR.js +0 -35
  174. package/dist/RolePanel.vue_vue_type_script_setup_true_lang-DJKu6PXz.js +0 -126
  175. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-C3Ixs12y.js +0 -111
  176. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-C5XEmxsV.js +0 -288
  177. package/dist/childView.vue_vue_type_style_index_0_lang-bkmucBUL.js +0 -187
  178. package/dist/core.umd.js +0 -173
  179. package/dist/index-OswH7SsT.js +0 -9937
  180. package/dist/log-out--RRncZhN.js +0 -120
  181. package/dist/login-BhCMeCLS.js +0 -251
  182. package/dist/pda-app-nn3llDUx.js +0 -2209
  183. package/dist/redirect-CmMplDV4.js +0 -15
  184. package/dist/sys-config-DGutV-VX.js +0 -277
  185. package/dist/utogether-wFDCI28t.js +0 -182
  186. package/src/assets/images/empty.png +0 -0
  187. package/src/assets/images/logo.png +0 -0
  188. package/src/components/ReCountTo/README.md +0 -2
  189. package/src/components/ReCountTo/index.ts +0 -18
  190. package/src/components/ReCountTo/src/normal/index.tsx +0 -165
  191. package/src/components/ReCountTo/src/normal/props.ts +0 -37
  192. package/src/components/ReCountTo/src/rebound/index.tsx +0 -67
  193. package/src/components/ReCountTo/src/rebound/props.ts +0 -14
  194. package/src/components/ReCountTo/src/rebound/rebound.css +0 -77
  195. package/src/components/ReCropper/index.ts +0 -14
  196. package/src/components/ReCropper/src/index.tsx +0 -141
  197. package/src/components/ReFlicker/index.css +0 -39
  198. package/src/components/ReFlicker/index.ts +0 -50
  199. package/src/components/ReFlop/index.ts +0 -14
  200. package/src/components/ReFlop/src/Filpper.tsx +0 -99
  201. package/src/components/ReFlop/src/filpper.css +0 -184
  202. package/src/components/ReFlop/src/index.vue +0 -126
  203. package/src/components/ReFlowChart/index.ts +0 -24
  204. package/src/components/ReFlowChart/src/Control.vue +0 -139
  205. package/src/components/ReFlowChart/src/DataDialog.vue +0 -12
  206. package/src/components/ReFlowChart/src/NodePanel.vue +0 -151
  207. package/src/components/ReFlowChart/src/adpterForTurbo.ts +0 -160
  208. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.css +0 -49
  209. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.eot +0 -0
  210. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.js +0 -61
  211. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.json +0 -58
  212. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.svg +0 -47
  213. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.ttf +0 -0
  214. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff +0 -0
  215. package/src/components/ReFlowChart/src/assets/iconfont/iconfont.woff2 +0 -0
  216. package/src/components/ReFlowChart/src/config.ts +0 -62
  217. package/src/components/ReSplitPane/index.css +0 -49
  218. package/src/components/ReSplitPane/index.tsx +0 -119
  219. package/src/components/ReSplitPane/resizer.css +0 -45
  220. package/src/components/ReSplitPane/resizer.tsx +0 -30
  221. package/src/components/SuCommon/card/components/Card.vue +0 -148
  222. package/src/components/SuCommon/card/components/DialogForm.vue +0 -127
  223. package/src/components/SuCommon/card/index.vue +0 -142
  224. package/src/components/SuCommon/icon-select/index.vue +0 -241
  225. package/src/components/SuCommon/table/index.vue +0 -208
  226. package/src/components/SuCommon/utils/index.ts +0 -103
  227. package/src/components/SuCommon/utils/slot.tsx +0 -50
  228. package/src/components/udp/form-upload.vue +0 -132
  229. package/src/components/udp/modal-form.vue +0 -180
  230. package/src/utils/udp/useRender.ts +0 -420
  231. package/src/views/components/contextmenu/basic.vue +0 -74
  232. package/src/views/components/contextmenu/context-menu.vue +0 -40
  233. package/src/views/components/contextmenu/menuDynamic.vue +0 -99
  234. package/src/views/components/contextmenu/menuGroup.vue +0 -71
  235. package/src/views/components/count-to/index.vue +0 -43
  236. package/src/views/components/cropping/index.vue +0 -59
  237. package/src/views/components/cropping/picture.jpeg +0 -0
  238. package/src/views/components/split-pane/index.vue +0 -82
  239. package/src/views/components/video/index.vue +0 -57
@@ -1,223 +1,223 @@
1
- /*
2
- * @Author: wei.li
3
- * @Date: 2022-06-23 17:29:11
4
- * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2024-07-04 21:06:05
6
- * @Description: file content
7
- */
8
-
9
- import { clone, isArray, isString, isEmpty, toDateString } from 'xe-utils';
10
- import { useRender } from '@utogether/utils';
11
-
12
- const renderHook = useRender();
13
-
14
- export const rulesFormat = (records, rule, t) => {
15
- records
16
- .filter(colunm => colunm.required)
17
- .forEach(colunm => {
18
- const { field, title } = colunm;
19
- rule[field] = [
20
- {
21
- required: true,
22
- message: `${t('message.required')}${title ? t(title) : t(`message.${field}`)}`
23
- }
24
- ];
25
- });
26
- return rule;
27
- };
28
-
29
- export const columnFormat = columns => {
30
- return columns.map(m => {
31
- if (m.type) return m;
32
- m.title = m.title || `message.${m.field}`;
33
- return m;
34
- });
35
- };
36
-
37
- const searchBtn: IFormItemProps = {
38
- span: 6,
39
- align: 'right',
40
- collapseNode: false,
41
- itemRender: {
42
- name: '$buttons',
43
- children: [
44
- {
45
- props: {
46
- type: 'submit',
47
- content: 'message.btn.search',
48
- status: 'primary',
49
- icon: 'vxe-icon-search'
50
- }
51
- },
52
- {
53
- props: {
54
- type: 'reset',
55
- content: 'message.btn.reset',
56
- status: 'info',
57
- icon: 'ri-refresh-line ri-1x'
58
- }
59
- }
60
- ]
61
- }
62
- };
63
-
64
- export const formatGridItems = (records, favorite) => {
65
- const formItems = records.filter(f => !f.isHidden);
66
- const len = formItems.length;
67
- // 前3个存在时间范围 或者 存在span = 12
68
- const isDateRange = len > 2 && formItems.some((f, idx) => idx < 3 && (f.span > 6 || getDateRange(f)));
69
- // 需要展示折叠按钮
70
- const isCollapse = isDateRange || len > 3;
71
- const defaultCollapse = { collapseTags: true, collapseTagsTooltip: true };
72
- const items = formItems.map((item, idx) => {
73
- item.folding = isDateRange ? isCollapse && idx > 1 : isCollapse && idx > 2;
74
- item.span = getDateRange(item) ? 12 : item.span || 6;
75
- if (item.code && !item.itemRender) {
76
- item.itemRender = renderHook.renderDict(item.code);
77
- }
78
- item.itemRender = item.itemRender || { name: '$input' };
79
- item.title = item.title || `message.${item.field}`;
80
- if (item.multiple || item.itemRender?.props?.multiple) {
81
- item.itemRender.props = Object.assign(defaultCollapse, item.itemRender?.props || {});
82
- }
83
- return item;
84
- });
85
- const btn = clone(searchBtn, true);
86
- btn.collapseNode = isCollapse;
87
- favorite && btn.itemRender.children.length < 3 && btn.itemRender.children.push(favorite);
88
-
89
- if (isCollapse) {
90
- // 按钮设置为 折叠节点
91
- // 折叠时将搜索按钮插入到第一列的最后
92
- const idx = isDateRange ? 2 : 3;
93
- items.splice(idx, 0, btn);
94
- } else {
95
- items.push(btn);
96
- }
97
- return items;
98
- };
99
-
100
- const getDateRange = item => {
101
- if (item.itemRender?.name === '#SuDateRange') {
102
- return item.itemRender?.props?.type === 'daterange' || !item.itemRender?.props?.type;
103
- }
104
- return false;
105
- };
106
- export const formatButton = (buttons, auth?) => {
107
- buttons.forEach(btn => {
108
- btn.auth = auth ? auth[btn.code] || btn.auth : btn.auth;
109
- if (!btn.name) {
110
- btn.name = `message.${btn.name || btn.code}`;
111
- } else if (!btn.name.includes('message.')) {
112
- btn.name = `message.${btn.name}`;
113
- }
114
- });
115
- return buttons;
116
- };
117
-
118
- export const queryAll = (props, http, form, fetchParam) => {
119
- const params = { pageNum: 1, pageSize: 100000 };
120
- Object.assign(params, form, fetchParam || {});
121
- const query = formatDateRange(params, props.formItems);
122
- const ajax = props.version === 'v2' ? http.get : http.post;
123
- return new Promise((resolve, reject) => {
124
- ajax(props.serviceCode.fetch, query)
125
- .then((response: IResponseData) => {
126
- resolve(response.list);
127
- })
128
- .catch((e: any) => {
129
- reject(e);
130
- });
131
- });
132
- };
133
-
134
- /** 查询服务 */
135
- export const query = (props, form, page, http, fetchParam) => {
136
- for (const i in form) {
137
- if (form[i] && isString(form[i])) {
138
- form[i] = form[i].trim();
139
- }
140
- }
141
- const params = {
142
- pageNum: page.currentPage,
143
- pageSize: page.pageSize
144
- };
145
- Object.assign(params, form, fetchParam || {});
146
- const query = formatDateRange(params, props.formItems);
147
- const {
148
- version,
149
- serviceCode: { fetch }
150
- } = props;
151
- if (!fetch) return null;
152
- if (version === 'v2') {
153
- return http.get(fetch, query);
154
- }
155
- return http.post(fetch, query);
156
- };
157
- /** 删除服务 */
158
- export const del = (http, removeRecords, props) => {
159
- const { serviceCode, version, isSingleSubmit } = props;
160
- const { del } = serviceCode;
161
- if (!del) return null;
162
- if (version === 'v2') {
163
- return http.delete(del, !isSingleSubmit ? removeRecords : removeRecords[0]);
164
- }
165
- return http.post(del, !isSingleSubmit ? removeRecords : removeRecords[0]);
166
- };
167
- /** 更新服务 */
168
- export const save = (http, body, props, confirmParam) => {
169
- const allService = [];
170
- const { serviceCode, isSingleSubmit, version, multiField } = props;
171
- const { add, update } = serviceCode;
172
- const { insertRecords, updateRecords } = body;
173
-
174
- if (!isEmpty(insertRecords) && add) {
175
- insertRecords.forEach(m => {
176
- !isEmpty(confirmParam) && Object.assign(m, confirmParam);
177
- m = !isEmpty(multiField) ? setMultiField(props, m, confirmParam) : m;
178
- });
179
- const service = http.post(add, !isSingleSubmit ? insertRecords : insertRecords[0]);
180
- allService.push(service);
181
- }
182
- if (!isEmpty(updateRecords) && update) {
183
- const records = !isEmpty(multiField)
184
- ? updateRecords.map(m => setMultiField(props, m, confirmParam))
185
- : updateRecords;
186
- let service = null;
187
- if (version === 'v2') {
188
- service = http.put(update, !isSingleSubmit ? records : records[0]);
189
- } else {
190
- service = http.post(update, !isSingleSubmit ? records : records[0]);
191
- }
192
- allService.push(service);
193
- }
194
- return allService;
195
- };
196
-
197
- const formatDateRange = (listQuery: any, formItems) => {
198
- const dateRanges = formItems.filter(f => f.itemRender?.name === '#SuDateRange');
199
- if (isEmpty(dateRanges)) return listQuery;
200
- const query = clone(listQuery, true);
201
- dateRanges.forEach((element: any) => {
202
- const val = query[element.field];
203
- if (val && element.toField) {
204
- query[element.fromField] = toDateString(val[0], 'yyyy-MM-dd 00:00:00');
205
- query[element.toField] = toDateString(val[1], 'yyyy-MM-dd 23:59:59');
206
- delete query[element.field];
207
- } else if (val) {
208
- query[`${element.field}From`] = toDateString(val[0], 'yyyy-MM-dd 00:00:00');
209
- query[`${element.field}To`] = toDateString(val[1], 'yyyy-MM-dd 23:59:59');
210
- delete query[element.field];
211
- }
212
- });
213
- return query;
214
- };
215
-
216
- const setMultiField = (props, source: any, confirmParam) => {
217
- const { multiField } = props;
218
- multiField.forEach(field => {
219
- source[field] = isArray(source[field]) ? source[field].join(',') : source[field];
220
- });
221
- Object.assign(source, confirmParam || {});
222
- return source;
223
- };
1
+ /*
2
+ * @Author: wei.li
3
+ * @Date: 2022-06-23 17:29:11
4
+ * @LastEditors: levi7754 levi7754@163.com
5
+ * @LastEditTime: 2024-07-04 21:06:05
6
+ * @Description: file content
7
+ */
8
+
9
+ import { clone, isArray, isString, isEmpty, toDateString } from 'xe-utils';
10
+ import { useRender } from '@utogether/utils';
11
+
12
+ const renderHook = useRender();
13
+
14
+ export const rulesFormat = (records, rule, t) => {
15
+ records
16
+ .filter(colunm => colunm.required)
17
+ .forEach(colunm => {
18
+ const { field, title } = colunm;
19
+ rule[field] = [
20
+ {
21
+ required: true,
22
+ message: `${t('message.required')}${title ? t(title) : t(`message.${field}`)}`
23
+ }
24
+ ];
25
+ });
26
+ return rule;
27
+ };
28
+
29
+ export const columnFormat = columns => {
30
+ return columns.map(m => {
31
+ if (m.type) return m;
32
+ m.title = m.title || `message.${m.field}`;
33
+ return m;
34
+ });
35
+ };
36
+
37
+ const searchBtn: IFormItemProps = {
38
+ span: 6,
39
+ align: 'right',
40
+ collapseNode: false,
41
+ itemRender: {
42
+ name: '$buttons',
43
+ children: [
44
+ {
45
+ props: {
46
+ type: 'submit',
47
+ content: 'message.btn.search',
48
+ status: 'primary',
49
+ icon: 'vxe-icon-search'
50
+ }
51
+ },
52
+ {
53
+ props: {
54
+ type: 'reset',
55
+ content: 'message.btn.reset',
56
+ status: 'info',
57
+ icon: 'ri-refresh-line ri-1x'
58
+ }
59
+ }
60
+ ]
61
+ }
62
+ };
63
+
64
+ export const formatGridItems = (records, favorite) => {
65
+ const formItems = records.filter(f => f.visible !== false);
66
+ const len = formItems.length;
67
+ // 前3个存在时间范围 或者 存在span = 12
68
+ const isDateRange = len > 2 && formItems.some((f, idx) => idx < 3 && (f.span > 6 || getDateRange(f)));
69
+ // 需要展示折叠按钮
70
+ const isCollapse = isDateRange || len > 3;
71
+ const defaultCollapse = { collapseTags: true, collapseTagsTooltip: true };
72
+ const items = formItems.map((item, idx) => {
73
+ item.folding = isDateRange ? isCollapse && idx > 1 : isCollapse && idx > 2;
74
+ item.span = getDateRange(item) ? 12 : item.span || 6;
75
+ if (item.code && !item.itemRender) {
76
+ item.itemRender = renderHook.renderDict(item.code);
77
+ }
78
+ item.itemRender = item.itemRender || { name: '$input' };
79
+ item.title = item.title || `message.${item.field}`;
80
+ if (item.multiple || item.itemRender?.props?.multiple) {
81
+ item.itemRender.props = Object.assign(defaultCollapse, item.itemRender?.props || {});
82
+ }
83
+ return item;
84
+ });
85
+ const btn = clone(searchBtn, true);
86
+ btn.collapseNode = isCollapse;
87
+ favorite && btn.itemRender.children.length < 3 && btn.itemRender.children.push(favorite);
88
+
89
+ if (isCollapse) {
90
+ // 按钮设置为 折叠节点
91
+ // 折叠时将搜索按钮插入到第一列的最后
92
+ const idx = isDateRange ? 2 : 3;
93
+ items.splice(idx, 0, btn);
94
+ } else {
95
+ items.push(btn);
96
+ }
97
+ return items;
98
+ };
99
+
100
+ const getDateRange = item => {
101
+ if (item.itemRender?.name === '#SuDateRange') {
102
+ return item.itemRender?.props?.type === 'daterange' || !item.itemRender?.props?.type;
103
+ }
104
+ return false;
105
+ };
106
+ export const formatButton = (buttons, auth?) => {
107
+ buttons.forEach(btn => {
108
+ btn.auth = auth ? auth[btn.code] || btn.auth : btn.auth;
109
+ if (!btn.name) {
110
+ btn.name = `message.${btn.name || btn.code}`;
111
+ } else if (!btn.name.includes('message.')) {
112
+ btn.name = `message.${btn.name}`;
113
+ }
114
+ });
115
+ return buttons;
116
+ };
117
+
118
+ export const queryAll = (props, http, form, fetchParam) => {
119
+ const params = { pageNum: 1, pageSize: 100000 };
120
+ Object.assign(params, form, fetchParam || {});
121
+ const query = formatDateRange(params, props.formItems);
122
+ const ajax = props.version === 'v2' ? http.get : http.post;
123
+ return new Promise((resolve, reject) => {
124
+ ajax(props.serviceCode.fetch, query)
125
+ .then((response: IResponseData) => {
126
+ resolve(response.list);
127
+ })
128
+ .catch((e: any) => {
129
+ reject(e);
130
+ });
131
+ });
132
+ };
133
+
134
+ /** 查询服务 */
135
+ export const query = (props, form, page, http, fetchParam) => {
136
+ for (const i in form) {
137
+ if (form[i] && isString(form[i])) {
138
+ form[i] = form[i].trim();
139
+ }
140
+ }
141
+ const params = {
142
+ pageNum: page.currentPage,
143
+ pageSize: page.pageSize
144
+ };
145
+ Object.assign(params, form, fetchParam || {});
146
+ const query = formatDateRange(params, props.formItems);
147
+ const {
148
+ version,
149
+ serviceCode: { fetch }
150
+ } = props;
151
+ if (!fetch) return null;
152
+ if (version === 'v2') {
153
+ return http.get(fetch, query);
154
+ }
155
+ return http.post(fetch, query);
156
+ };
157
+ /** 删除服务 */
158
+ export const del = (http, removeRecords, props) => {
159
+ const { serviceCode, version, isSingleSubmit } = props;
160
+ const { del } = serviceCode;
161
+ if (!del) return null;
162
+ if (version === 'v2') {
163
+ return http.delete(del, !isSingleSubmit ? removeRecords : removeRecords[0]);
164
+ }
165
+ return http.post(del, !isSingleSubmit ? removeRecords : removeRecords[0]);
166
+ };
167
+ /** 更新服务 */
168
+ export const save = (http, body, props, confirmParam) => {
169
+ const allService = [];
170
+ const { serviceCode, isSingleSubmit, version, multiField } = props;
171
+ const { add, update } = serviceCode;
172
+ const { insertRecords, updateRecords } = body;
173
+
174
+ if (!isEmpty(insertRecords) && add) {
175
+ insertRecords.forEach(m => {
176
+ !isEmpty(confirmParam) && Object.assign(m, confirmParam);
177
+ m = !isEmpty(multiField) ? setMultiField(props, m, confirmParam) : m;
178
+ });
179
+ const service = http.post(add, !isSingleSubmit ? insertRecords : insertRecords[0]);
180
+ allService.push(service);
181
+ }
182
+ if (!isEmpty(updateRecords) && update) {
183
+ const records = !isEmpty(multiField)
184
+ ? updateRecords.map(m => setMultiField(props, m, confirmParam))
185
+ : updateRecords;
186
+ let service = null;
187
+ if (version === 'v2') {
188
+ service = http.put(update, !isSingleSubmit ? records : records[0]);
189
+ } else {
190
+ service = http.post(update, !isSingleSubmit ? records : records[0]);
191
+ }
192
+ allService.push(service);
193
+ }
194
+ return allService;
195
+ };
196
+
197
+ const formatDateRange = (listQuery: any, formItems) => {
198
+ const dateRanges = formItems.filter(f => f.itemRender?.name === '#SuDateRange');
199
+ if (isEmpty(dateRanges)) return listQuery;
200
+ const query = clone(listQuery, true);
201
+ dateRanges.forEach((element: any) => {
202
+ const val = query[element.field];
203
+ if (val && element.toField) {
204
+ query[element.fromField] = toDateString(val[0], 'yyyy-MM-dd 00:00:00');
205
+ query[element.toField] = toDateString(val[1], 'yyyy-MM-dd 23:59:59');
206
+ delete query[element.field];
207
+ } else if (val) {
208
+ query[`${element.field}From`] = toDateString(val[0], 'yyyy-MM-dd 00:00:00');
209
+ query[`${element.field}To`] = toDateString(val[1], 'yyyy-MM-dd 23:59:59');
210
+ delete query[element.field];
211
+ }
212
+ });
213
+ return query;
214
+ };
215
+
216
+ const setMultiField = (props, source: any, confirmParam) => {
217
+ const { multiField } = props;
218
+ multiField.forEach(field => {
219
+ source[field] = isArray(source[field]) ? source[field].join(',') : source[field];
220
+ });
221
+ Object.assign(source, confirmParam || {});
222
+ return source;
223
+ };
@@ -2,11 +2,13 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2022-07-07 14:43:20
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-06-03 09:26:49
5
+ * @LastEditTime: 2025-09-12 14:49:00
6
6
  * @Description: file content
7
7
  */
8
8
 
9
9
  // export * from './udp/useRender';
10
+ export * from './browers';
11
+ export * from './lifecycle';
10
12
 
11
13
  export const getKeyList = (data, key) => {
12
14
  const array = [];
@@ -1,20 +1,39 @@
1
- /*
2
- * @Author: wei.li
3
- * @Date: 2024-06-26 16:30:54
4
- * @LastEditors: wei.li
5
- * @LastEditTime: 2024-06-26 17:11:58
6
- * @Description: file content
7
- */
8
-
9
- export const lifeCycleEvent = {
10
- onLogined: () => {},
11
- onBeforeLogout: () => {}
12
- };
13
-
14
- export const onLogined = () => {
15
- lifeCycleEvent.onLogined();
16
- };
17
-
18
- export const onBeforeLogout = () => {
19
- lifeCycleEvent.onBeforeLogout();
20
- };
1
+ /*
2
+ * @Author: wei.li
3
+ * @Date: 2024-06-26 16:30:54
4
+ * @LastEditors: wei.li
5
+ * @LastEditTime: 2024-06-26 17:11:58
6
+ * @Description: file content
7
+ */
8
+
9
+ export const lifeCycleEvent = {
10
+ onBeforeLogined: () => {},
11
+ onLogined: () => {},
12
+ onBeforeLogout: () => {},
13
+ onAfterLogout: () => {}
14
+ };
15
+
16
+ /**
17
+ * 平台登录前
18
+ */
19
+ export const onBeforeLogined = () => {
20
+ lifeCycleEvent.onBeforeLogined();
21
+ };
22
+ /**
23
+ * 平台登录后
24
+ */
25
+ export const onLogined = () => {
26
+ lifeCycleEvent.onLogined();
27
+ };
28
+ /**
29
+ * 平台退出前
30
+ */
31
+ export const onBeforeLogout = () => {
32
+ lifeCycleEvent.onBeforeLogout();
33
+ };
34
+ /**
35
+ * 平台退出后
36
+ */
37
+ export const onAfterLogout = () => {
38
+ lifeCycleEvent.onAfterLogout();
39
+ };
@@ -7,12 +7,7 @@
7
7
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
8
  */
9
9
  import type { CSSProperties, VNodeChild } from 'vue';
10
- import {
11
- createTypes,
12
- toValidableType,
13
- type VueTypesInterface,
14
- type VueTypeValidableDef
15
- } from 'vue-types';
10
+ import { createTypes, toValidableType, type VueTypesInterface, type VueTypeValidableDef } from 'vue-types';
16
11
 
17
12
  export type VueNode = VNodeChild | JSX.Element;
18
13
 
@@ -26,8 +26,8 @@ export const injectResponsiveStorage = (app: App, config: ServerConfigs) => {
26
26
  darkMode: config.DarkMode ?? false,
27
27
  sidebarStatus: config.SidebarStatus ?? true,
28
28
  epThemeColor: config.EpThemeColor ?? '#409EFF',
29
- themeColor: config.Theme ?? 'light', // 主题色(对应项目配置中的主题色,与theme不同的是它不会受到浅色、深色整体风格切换的影响,只会在手动点击主题色时改变)
30
- overallStyle: config.OverallStyle ?? 'light' // 整体风格(浅色:light、深色:dark、自动:system)
29
+ themeColor: config.Theme ?? 'light', // 主题色(对应项目配置中的主题色,与theme不同的是它不会受到浅色、深色主题模式切换的影响,只会在手动点击主题色时改变)
30
+ overallStyle: config.OverallStyle ?? 'light' // 主题模式(浅色:light、深色:dark、自动:system)
31
31
  },
32
32
  configure: Storage.getData('configure', nameSpace) ?? {
33
33
  grey: config.Grey ?? false,
@@ -1,8 +1,8 @@
1
1
  import Axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios';
2
2
  import type { SuHttpError, RequestMethods, SuHttpResponse, SuHttpRequestConfig } from './types.d';
3
- import { has } from 'xe-utils';
4
3
  import { NProgress, cookies, errorMessage } from '@utogether/utils';
5
4
  import { isRef } from 'vue';
5
+ import { has } from 'xe-utils';
6
6
 
7
7
  const kTOKENKEY = 'authorized-token';
8
8
  const defaultConfig: AxiosRequestConfig = {
@@ -18,8 +18,8 @@ class SuHttp {
18
18
  this.httpInterceptorsRequest();
19
19
  this.httpInterceptorsResponse();
20
20
  }
21
- baseUrl = null;
22
- router = null;
21
+ router = undefined;
22
+ baseUrl = 'http: //192.168.101.138.8099';
23
23
  /** token过期后,暂存待执行的请求 */
24
24
  private static requests = [];
25
25
 
@@ -81,18 +81,23 @@ class SuHttp {
81
81
  if (!SuHttp.isRefreshing) {
82
82
  SuHttp.isRefreshing = true;
83
83
  // requests.push(() => SuHttp.axiosInstance(config));
84
-
85
84
  this.get(this.baseUrl + '/uath/refreshToken', {
86
85
  refreshToken: data.refreshToken
87
86
  })
88
87
  .then((res: any) => {
89
- // 替换token
90
- this.setToken(res);
91
- config.headers['Authorization'] = 'Bearer ' + res.access_token;
92
- // token 刷新后将数组的方法重新执行
93
- // @ts-ignore
94
- SuHttp.requests.forEach(cb => cb(res.access_token));
95
- SuHttp.requests = []; // 重新请求完清空
88
+ if (!res?.access_token) {
89
+ this.routeToLogin();
90
+ } else {
91
+ // 替换token
92
+ this.setToken(res);
93
+ config.headers['Authorization'] = 'Bearer ' + res.access_token;
94
+ // token 刷新后将数组的方法重新执行
95
+ SuHttp.requests.forEach(cb => cb(res.access_token));
96
+ SuHttp.requests = []; // 重新请求完清空
97
+ }
98
+ })
99
+ .catch(() => {
100
+ this.routeToLogin();
96
101
  })
97
102
  .finally(() => {
98
103
  SuHttp.isRefreshing = false;
@@ -130,6 +135,14 @@ class SuHttp {
130
135
  // cookies.set(kTOKENKEY, JSON.stringify(cache), { expires: expires_in });
131
136
  }
132
137
 
138
+ private routeToLogin() {
139
+ SuHttp.requests = []; // 重新请求完清空
140
+ cookies.remove('kCookies_token');
141
+ cookies.remove('authorized-token');
142
+ cookies.remove('loginer');
143
+ this.router.push({ name: 'login' });
144
+ }
145
+
133
146
  // 响应拦截
134
147
  private httpInterceptorsResponse(): void {
135
148
  const instance = SuHttp.axiosInstance;
@@ -153,12 +166,12 @@ class SuHttp {
153
166
  return response.data;
154
167
  },
155
168
  (error: SuHttpError) => {
169
+ const $error = error;
156
170
  // @ts-ignore
157
- if (has(error.config, 'loading') && isRef(error.config.loading)) {
171
+ if (has(error.config, 'loading') && isRef(error?.config?.loading)) {
158
172
  // @ts-ignore
159
173
  error.config.loading.value = false;
160
174
  }
161
- const $error = error;
162
175
  $error.isCancelRequest = Axios.isCancel($error);
163
176
  // 关闭进度条动画
164
177
  NProgress.done();
@@ -210,27 +223,11 @@ class SuHttp {
210
223
  } else {
211
224
  const msg = res?.msg || '服务异常';
212
225
  errorMessage(msg, { duration: 8000 });
213
- // const code = res.code;
214
- // if (
215
- // code === "000001" ||
216
- // (code === "-1" && msg.includes("请重新登陆"))
217
- // ) {
218
- // // session过期
219
- // cookies.remove("kCookies_token");
220
- // // @ts-ignore
221
- // this.router?.push({
222
- // path: "/login",
223
- // query: { tokenExpire: "Y" },
224
- // });
225
- // }
226
226
  reject(msg);
227
227
  }
228
228
  })
229
229
  .catch(e => {
230
- debugger;
231
- if (e?.response?.data?.path === '/refreshToken') {
232
- this.router?.push('/login');
233
- } else if (e?.code) {
230
+ if (e?.code) {
234
231
  if (e?.response?.status === 401) {
235
232
  // @ts-ignore
236
233
  return this.router?.push({ path: '/login' });