@utogether/udp-core 1.0.1-beta.9 → 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 (168) hide show
  1. package/build/plugins.ts +37 -39
  2. package/dist/{403-BOzKHdlm.js → 403-B1rIjAAu.js} +6 -6
  3. package/dist/{404-uwgt4Nll.js → 404-mBqc2y4t.js} +4 -4
  4. package/dist/{500-4HBf6V9m.js → 500-BoI45Zdh.js} +2 -2
  5. package/dist/{AuthorityInfo-DvbIh1vT.js → AuthorityInfo-B08NBIIn.js} +1 -1
  6. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-BlCPvwXU.js → AuthorityInfo.vue_vue_type_style_index_0_lang-BLP1SaiH.js} +3 -3
  7. package/dist/{Company-D7Q9BFmr.js → Company-JGGyWEWH.js} +3 -3
  8. package/dist/{CompanyPanel-C0-PJlrt.js → CompanyPanel-BQ_cCmDx.js} +7 -7
  9. package/dist/{Department-h2hlXACv.js → Department-z2iO6hwM.js} +10 -10
  10. package/dist/{DepartmentPanel-B6hDEQpG.js → DepartmentPanel-BtQe7zwU.js} +108 -78
  11. package/dist/{DesignPanel-cS58-1v9.js → DesignPanel-7mhtVWas.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-LdvLC8VU.js → DesignPanel.vue_vue_type_style_index_0_lang-4EsHemj_.js} +6 -6
  13. package/dist/{DictView-T3TmpBa8.js → DictView-CjchV2Yk.js} +15 -16
  14. package/dist/InvOrganization-Pn1O_XP0.js +74 -0
  15. package/dist/{Org-CnCBDGKF.js → Org-BqytV_vi.js} +1 -1
  16. package/dist/{Preview-BaktKXB1.js → Preview-CLpUUMay.js} +2 -2
  17. package/dist/{ReportDefine-5Rb0PO9A.js → ReportDefine-Cz1KtEUF.js} +1 -1
  18. package/dist/{ReportDesign-DYdkVREA.js → ReportDesign-BaORYud4.js} +13 -13
  19. package/dist/{ReportQuery-BwhzIXMt.js → ReportQuery-CPCPXiXz.js} +1 -1
  20. package/dist/{ReportQueryFrom-PHtWwlOe.js → ReportQueryFrom-C_AcrfkJ.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-BE5yZNPM.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-Bm67ejay.js} +1 -1
  22. package/dist/{ReportTemplate-DaadVXIi.js → ReportTemplate-CFiNMz79.js} +11 -11
  23. package/dist/{Role-Dtg3nAmG.js → Role-B-XDoJd5.js} +3 -3
  24. package/dist/{RoleAssign-DEGtLssH.js → RoleAssign-BolW8YVs.js} +8 -8
  25. package/dist/{RolePanel-DpUzfE_o.js → RolePanel-2kfs5tw9.js} +1 -1
  26. package/dist/{RolePanel-CT7BTPmy.js → RolePanel-HilSuYns.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Xyo0YEI0.js → RolePanel.vue_vue_type_script_setup_true_lang-CE4gApUY.js} +7 -7
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-Dg2A6DJu.js → RolePanel.vue_vue_type_script_setup_true_lang-DPzgfAyV.js} +13 -13
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-CyutzDZS.js → ScrollPanel.vue_vue_type_style_index_0_lang-CCTH4RkH.js} +4 -4
  30. package/dist/{Staff-_NlAGkrh.js → Staff-BTk3whFC.js} +3 -3
  31. package/dist/{StaffInfo-DVgUvVgd.js → StaffInfo-d3AuSzlA.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-C8hmlFgX.js → StaffInfo.vue_vue_type_script_setup_true_lang-eOL4VlfE.js} +5 -5
  33. package/dist/{StaffPanel-DKNZE3IE.js → StaffPanel-DV-D4jjz.js} +1 -1
  34. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-4sFq3CEo.js +135 -0
  35. package/dist/{SysUser-kQUf7XKz.js → SysUser-BnjYytws.js} +2 -2
  36. package/dist/{SysUserPanel-C191uX3U.js → SysUserPanel-CBoyD-Qi.js} +1 -1
  37. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-PrTlTZR-.js +341 -0
  38. package/dist/{SystemMenu-DwuSvHnj.js → SystemMenu-kYB_ZaUt.js} +36 -36
  39. package/dist/{UserInfo-DIsInFld.js → UserInfo-4dx97VBL.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-CnvGdbej.js → UserInfo.vue_vue_type_style_index_0_lang-BpbC_ZDm.js} +10 -10
  41. package/dist/{childView-3Bs2UBEw.js → childView-CHPNfTEb.js} +1 -1
  42. package/dist/{childView-BawyULD7.js → childView-CKA_JgVZ.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-YpWF-p2F.js → childView.vue_vue_type_style_index_0_lang-Bym2fQRd.js} +7 -7
  44. package/dist/childView.vue_vue_type_style_index_0_lang-W7bCtXeu.js +177 -0
  45. package/dist/{code-rule-DVaYcn8S.js → code-rule-CbxuZg0-.js} +40 -38
  46. package/dist/core.es.js +18 -12
  47. package/dist/{cron-task-xuzP-BpE.js → cron-task-nTOpqQYf.js} +7 -7
  48. package/dist/flow-task-B07st2aD.js +10 -0
  49. package/dist/{frameView-Cudt06qS.js → frameView-Z1tPUyCh.js} +1 -1
  50. package/dist/index-C3q8HoJM.js +4650 -0
  51. package/dist/{layoutView-BlFTV2jX.js → layoutView--MGA9zUB.js} +1766 -1760
  52. package/dist/{log-in-e7D5Ss1P.js → log-in-CSYJDA6m.js} +36 -29
  53. package/dist/log-out-DiwGCg7p.js +130 -0
  54. package/dist/login-C6Y0ajDp.js +251 -0
  55. package/dist/{login-log-kqKzKTto.js → login-log-C0V-_l3F.js} +5 -3
  56. package/dist/{lov-view-B2HaxyMs.js → lov-view-Cmv7wZZ9.js} +6 -6
  57. package/dist/{menuInfo-BxCTJ1VW.js → menuInfo-UeutJpOa.js} +1 -1
  58. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-CLOPNeUW.js → menuInfo.vue_vue_type_style_index_0_lang-CWX4Mu67.js} +118 -98
  59. package/dist/{pda-app-DPsAFNiw.js → pda-app-B6w99SJo.js} +10 -10
  60. package/dist/{resource-Dibb7t8u.js → resource-BybJvUv0.js} +4 -4
  61. package/dist/{su-welcome-DejR0KkM.js → su-welcome-C1bmxHoY.js} +119 -121
  62. package/dist/sys-config-BnmIDnCj.js +370 -0
  63. package/dist/udp-core.css +1 -9
  64. package/dist/utogether-MlnyYtNS.js +4 -0
  65. package/index.ts +49 -40
  66. package/package.json +18 -18
  67. package/src/App.vue +65 -65
  68. package/src/api/http.ts +1 -4
  69. package/src/api/index.ts +4 -2
  70. package/src/api/user.ts +2 -2
  71. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  72. package/src/components/SuScrollTree/ScrollPanel.vue +1 -6
  73. package/src/components/udp/content/index.vue +88 -0
  74. package/src/components/udp/{form.vue → form/form.vue} +13 -16
  75. package/src/components/udp/{grid.vue → grid/index.vue} +56 -27
  76. package/src/components/udp/index.ts +4 -9
  77. package/src/components/udp/ut-stamp-badge/index.vue +271 -0
  78. package/src/components/udp/utils.ts +66 -105
  79. package/src/layout/components/lay-navbar/index.vue +8 -6
  80. package/src/layout/components/lay-panel/index.vue +150 -150
  81. package/src/layout/components/lay-search/index.vue +25 -25
  82. package/src/layout/components/lay-select-org/index.vue +4 -9
  83. package/src/layout/components/lay-setting/index.vue +503 -510
  84. package/src/layout/components/lay-sidebar/horizontal.vue +8 -6
  85. package/src/layout/components/lay-sidebar/mixNav.vue +260 -258
  86. package/src/layout/components/lay-sidebar/sidebar-logo.vue +101 -98
  87. package/src/layout/components/lay-tag/index.vue +24 -51
  88. package/src/layout/hooks/useDataThemeChange.ts +1 -1
  89. package/src/layout/hooks/useNav.ts +176 -173
  90. package/src/layout/hooks/useTag.ts +227 -233
  91. package/src/layout/types.ts +93 -92
  92. package/src/main.ts +115 -119
  93. package/src/plugins/i18n/en.ts +302 -302
  94. package/src/plugins/i18n/module/u-workflow.ts +1 -1
  95. package/src/plugins/i18n/zh.ts +21 -6
  96. package/src/plugins/vxe-table/index.ts +116 -53
  97. package/src/plugins/vxe-table/render.tsx +945 -956
  98. package/src/router/index.ts +17 -17
  99. package/src/router/modules/flow.ts +35 -0
  100. package/src/router/modules/home.ts +32 -32
  101. package/src/router/modules/remaining.ts +58 -58
  102. package/src/router/utils.ts +420 -377
  103. package/src/store/modules/app.ts +2 -4
  104. package/src/store/modules/epTheme.ts +48 -49
  105. package/src/store/modules/multiTags.ts +15 -14
  106. package/src/store/modules/permission.ts +25 -15
  107. package/src/store/modules/system.ts +1 -3
  108. package/src/style/button.scss +85 -85
  109. package/src/style/login.css +1 -1
  110. package/src/style/vxetable.scss +61 -2
  111. package/src/utils/dataFormat/index.ts +223 -223
  112. package/src/utils/index.ts +3 -1
  113. package/src/utils/lifecycle.ts +39 -20
  114. package/src/utils/propTypes.ts +1 -6
  115. package/src/utils/storage/index.ts +2 -2
  116. package/src/utils/udp/http/index.ts +24 -11
  117. package/src/utils/udp/http/types.d.ts +3 -10
  118. package/src/views/login/login-view.vue +4 -18
  119. package/src/views/organization/company/CompanyPanel.vue +259 -259
  120. package/src/views/organization/department/Department.vue +58 -58
  121. package/src/views/organization/department/DepartmentPanel.vue +303 -283
  122. package/src/views/organization/inv-org/InvOrganization.vue +22 -7
  123. package/src/views/organization/staff/StaffInfo.vue +127 -133
  124. package/src/views/organization/staff/StaffPanel.vue +162 -145
  125. package/src/views/system/cron/cron-task.vue +2 -12
  126. package/src/views/system/menu/SystemMenu.vue +185 -183
  127. package/src/views/system/menu/menuInfo.vue +384 -363
  128. package/src/views/system/role/UserInfo.vue +195 -195
  129. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  130. package/src/views/system/role-assign/RolePanel.vue +139 -139
  131. package/src/views/system/sys/sys-config.vue +69 -20
  132. package/src/views/system/sysUser/SysUserPanel.vue +97 -28
  133. package/src/views/uapp/pda/pda-app.vue +208 -208
  134. package/src/views/udev/coderule/code-rule.vue +132 -121
  135. package/src/views/udev/dict/DictView.vue +2 -2
  136. package/src/views/udev/dict/childView.vue +183 -222
  137. package/src/views/udev/lov/childView.vue +1 -7
  138. package/src/views/udev/lov/lov-view.vue +91 -91
  139. package/src/views/uhome/components/menu-favorite.vue +314 -331
  140. package/src/views/uhome/su-welcome.vue +319 -339
  141. package/src/views/ulogin/login.vue +325 -321
  142. package/src/views/upms/interface/log-in.vue +100 -106
  143. package/src/views/upms/interface/log-out.vue +104 -107
  144. package/src/views/upms/user/login-log.vue +54 -60
  145. package/src/views/urpt/design/DesignPanel.vue +507 -507
  146. package/src/views/urpt/design/Preview.vue +1 -0
  147. package/src/views/urpt/design/ReportDesign.vue +2 -4
  148. package/src/views/utask/flow-task.vue +18 -0
  149. package/types/global.d.ts +231 -236
  150. package/dist/InvOrganization-BVuOhzbt.js +0 -66
  151. package/dist/StaffPanel.vue_vue_type_script_setup_true_lang-BOOO6Cek.js +0 -111
  152. package/dist/SysUserPanel.vue_vue_type_script_setup_true_lang-SwNbAEvW.js +0 -294
  153. package/dist/childView.vue_vue_type_style_index_0_lang-DWIFCX3X.js +0 -187
  154. package/dist/index-CKnq5xIa.js +0 -2623
  155. package/dist/log-out--RRncZhN.js +0 -120
  156. package/dist/login-CpKykfdf.js +0 -253
  157. package/dist/sys-config-DiySRWns.js +0 -277
  158. package/dist/utogether-Dct_14Zk.js +0 -182
  159. package/src/components/udp/count-down.vue +0 -536
  160. package/src/components/udp/flip-down/FlipCard/flip-card.vue +0 -251
  161. package/src/components/udp/flip-down/FlipCard/interfaces.ts +0 -4
  162. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +0 -113
  163. package/src/components/udp/form-upload.vue +0 -482
  164. package/src/components/udp/lov.vue +0 -388
  165. package/src/components/udp/modal-form.vue +0 -189
  166. package/src/components/udp/modal-grid.vue +0 -288
  167. package/src/components/udp/upload.vue +0 -423
  168. package/src/utils/udp/useRender.ts +0 -431
@@ -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,7 +1,6 @@
1
1
  import Axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios';
2
2
  import type { SuHttpError, RequestMethods, SuHttpResponse, SuHttpRequestConfig } from './types.d';
3
-
4
- import { errorMessage, cookies, NProgress } from '@utogether/utils';
3
+ import { NProgress, cookies, errorMessage } from '@utogether/utils';
5
4
  import { isRef } from 'vue';
6
5
  import { has } from 'xe-utils';
7
6
 
@@ -20,7 +19,7 @@ class SuHttp {
20
19
  this.httpInterceptorsResponse();
21
20
  }
22
21
  router = undefined;
23
- baseUrl = null;
22
+ baseUrl = 'http: //192.168.101.138.8099';
24
23
  /** token过期后,暂存待执行的请求 */
25
24
  private static requests = [];
26
25
 
@@ -82,17 +81,23 @@ class SuHttp {
82
81
  if (!SuHttp.isRefreshing) {
83
82
  SuHttp.isRefreshing = true;
84
83
  // requests.push(() => SuHttp.axiosInstance(config));
85
- this.get((this.baseUrl || '') + '/uath/refreshToken', {
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;
@@ -5,7 +5,7 @@
5
5
  * @LastEditTime: 2023-12-01 13:55:46
6
6
  * @Description: SuHttp Axios 类型定义文件
7
7
  */
8
- import { Method, AxiosError, AxiosResponse, AxiosRequestConfig } from "axios";
8
+ import type { Method, AxiosError, AxiosResponse, AxiosRequestConfig } from 'axios';
9
9
 
10
10
  export type resultType = {
11
11
  access_token: string;
@@ -13,10 +13,7 @@ export type resultType = {
13
13
  expires_in: number;
14
14
  };
15
15
 
16
- export type RequestMethods = Extract<
17
- Method,
18
- "get" | "post" | "put" | "delete" | "patch" | "option" | "head"
19
- >;
16
+ export type RequestMethods = Extract<Method, 'get' | 'post' | 'put' | 'delete' | 'patch' | 'option' | 'head'>;
20
17
 
21
18
  export interface SuHttpError extends AxiosError {
22
19
  isCancelRequest?: boolean;
@@ -40,10 +37,6 @@ export default class SuHttp {
40
37
  axiosConfig?: SuHttpRequestConfig
41
38
  ): Promise<T>;
42
39
  post<T, P>(url: string, params?: T, config?: SuHttpRequestConfig): Promise<P>;
43
- postRouter<T, P>(
44
- url: string,
45
- params?: T,
46
- config?: SuHttpRequestConfig
47
- ): Promise<P>;
40
+ postRouter<T, P>(url: string, params?: T, config?: SuHttpRequestConfig): Promise<P>;
48
41
  get<T, P>(url: string, params?: T, config?: SuHttpRequestConfig): Promise<P>;
49
42
  }