@utogether/udp-core 1.0.1-beta.16 → 1.0.1-beta.18

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 (123) hide show
  1. package/build/plugins.ts +39 -39
  2. package/dist/{403-RBzulrcG.js → 403-B8xAGW0x.js} +1 -1
  3. package/dist/{404-DX-dU_6C.js → 404-BtgajMpP.js} +1 -1
  4. package/dist/{500-BCTk0__d.js → 500-DFWWZylZ.js} +1 -1
  5. package/dist/{AuthorityInfo-BADTOenq.js → AuthorityInfo-BxWSZs7n.js} +1 -1
  6. package/dist/{AuthorityInfo.vue_vue_type_style_index_0_lang-Cv46yAx_.js → AuthorityInfo.vue_vue_type_style_index_0_lang-XIiFdjxN.js} +1 -1
  7. package/dist/{Company-B-61KrWd.js → Company-BbUJtuvr.js} +3 -3
  8. package/dist/{CompanyPanel-CawSrEff.js → CompanyPanel-KOOFrGjk.js} +8 -8
  9. package/dist/{Department-CrzJPtvP.js → Department-BimSgBm2.js} +3 -3
  10. package/dist/{DepartmentPanel-DYuL8H-j.js → DepartmentPanel-DYXPUCDs.js} +3 -3
  11. package/dist/{DesignPanel-DEAv6V68.js → DesignPanel-CHZ36J4q.js} +1 -1
  12. package/dist/{DesignPanel.vue_vue_type_style_index_0_lang-BsnXZ2td.js → DesignPanel.vue_vue_type_style_index_0_lang-ZbNixuuY.js} +2 -2
  13. package/dist/{DictView-BuO-2b-c.js → DictView-7RQYVj4H.js} +1 -1
  14. package/dist/{InvOrganization-CBgKBJAn.js → InvOrganization-esq9FI1K.js} +1 -1
  15. package/dist/{Org-BaQw2r-o.js → Org-BGswGV9g.js} +1 -1
  16. package/dist/{Preview-DvCrmKNk.js → Preview-DP0pD6Kf.js} +1 -1
  17. package/dist/{ReportDefine-DyhWz0as.js → ReportDefine-1rjKlbK-.js} +1 -1
  18. package/dist/{ReportDesign-DgZ2f2zv.js → ReportDesign-BIUj35Kh.js} +2 -2
  19. package/dist/{ReportQuery-DTZYbCDi.js → ReportQuery-CWevStRg.js} +1 -1
  20. package/dist/{ReportQueryFrom-B-vtJegP.js → ReportQueryFrom-vlOF5_gc.js} +1 -1
  21. package/dist/{ReportQueryFrom.vue_vue_type_style_index_0_lang-D6izgxph.js → ReportQueryFrom.vue_vue_type_style_index_0_lang-BGyeoYxo.js} +1 -1
  22. package/dist/{ReportTemplate-DA1ZqKGf.js → ReportTemplate-BPURQOFZ.js} +1 -1
  23. package/dist/{Role-mbqoav5t.js → Role-D8xJ3rai.js} +3 -3
  24. package/dist/{RoleAssign-ltEJIEcr.js → RoleAssign-CE5FeHLd.js} +8 -8
  25. package/dist/{RolePanel-u90v9eS0.js → RolePanel-B6wskQVB.js} +1 -1
  26. package/dist/{RolePanel-1g1a-G8D.js → RolePanel-CqHsGjrK.js} +1 -1
  27. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-LC4Egk-Q.js → RolePanel.vue_vue_type_script_setup_true_lang-Bjoq-nCm.js} +3 -3
  28. package/dist/{RolePanel.vue_vue_type_script_setup_true_lang-D9YxpGnt.js → RolePanel.vue_vue_type_script_setup_true_lang-Dv5IVELj.js} +1 -1
  29. package/dist/{ScrollPanel.vue_vue_type_style_index_0_lang-DZ3W1epK.js → ScrollPanel.vue_vue_type_style_index_0_lang-Bp8Y_5A2.js} +1 -1
  30. package/dist/{Staff-CJ2GgCL3.js → Staff-DuYrik71.js} +3 -3
  31. package/dist/{StaffInfo-3KkodDCK.js → StaffInfo-CZiak-1b.js} +1 -1
  32. package/dist/{StaffInfo.vue_vue_type_script_setup_true_lang-CW-isIxJ.js → StaffInfo.vue_vue_type_script_setup_true_lang-LCuqxUh8.js} +1 -1
  33. package/dist/{StaffPanel-DoXPSoY5.js → StaffPanel-DI6MBAJH.js} +1 -1
  34. package/dist/{StaffPanel.vue_vue_type_script_setup_true_lang-DvhGnOMZ.js → StaffPanel.vue_vue_type_script_setup_true_lang-DxJhnVpd.js} +2 -2
  35. package/dist/{SysUser-BuIZhMPh.js → SysUser-DoNj2tIV.js} +2 -2
  36. package/dist/{SysUserPanel-t1GJcJGM.js → SysUserPanel-CvfyRxel.js} +1 -1
  37. package/dist/{SysUserPanel.vue_vue_type_script_setup_true_lang-CDDkFLlN.js → SysUserPanel.vue_vue_type_script_setup_true_lang-BoghL7F3.js} +43 -39
  38. package/dist/{SystemMenu-DuLEL6_l.js → SystemMenu-Cr3vUEQU.js} +2 -2
  39. package/dist/{UserInfo-WWby4lts.js → UserInfo-6c8UDIVO.js} +1 -1
  40. package/dist/{UserInfo.vue_vue_type_style_index_0_lang-B06ZSrJV.js → UserInfo.vue_vue_type_style_index_0_lang-DstUSeNQ.js} +1 -1
  41. package/dist/{childView-B0-EAoAi.js → childView-BlmHw5jv.js} +1 -1
  42. package/dist/{childView-IYY4L8VK.js → childView-C050pf1v.js} +1 -1
  43. package/dist/{childView.vue_vue_type_style_index_0_lang-B56v6yK7.js → childView.vue_vue_type_style_index_0_lang-BxLT1Dz0.js} +1 -1
  44. package/dist/{childView.vue_vue_type_style_index_0_lang-CjF8nZuj.js → childView.vue_vue_type_style_index_0_lang-D0nlTIP-.js} +2 -2
  45. package/dist/{code-rule-DDLdi3pP.js → code-rule-Br1Mh3_M.js} +1 -1
  46. package/dist/core.es.js +1 -1
  47. package/dist/{cron-task-p3-AFN1w.js → cron-task-DhuIk5pP.js} +1 -1
  48. package/dist/{frameView-B_WAZErD.js → frameView-hJoSI0Ai.js} +1 -1
  49. package/dist/index-1dgWFXT2.js +5436 -0
  50. package/dist/{layoutView-CoEp2afn.js → layoutView-DU-TVfOp.js} +1340 -1337
  51. package/dist/{login-DP0oP70W.js → login-CzJBV0x8.js} +2 -2
  52. package/dist/{lov-view-BDoZRK-v.js → lov-view-BxaHaVKE.js} +2 -2
  53. package/dist/{menuInfo-5Xls76qB.js → menuInfo-Dp7nAbgM.js} +1 -1
  54. package/dist/{menuInfo.vue_vue_type_style_index_0_lang-BfZczW9a.js → menuInfo.vue_vue_type_style_index_0_lang-Ch4NbiCL.js} +1 -1
  55. package/dist/{pda-app-DxGYn4G7.js → pda-app-BmxY3H7y.js} +2 -2
  56. package/dist/{resource-BnYWe_-Q.js → resource-D2dCI_x9.js} +1 -1
  57. package/dist/{su-welcome-B2rNhhDH.js → su-welcome-BKGU5HUf.js} +1 -1
  58. package/dist/{sys-config-Bb4WkxZK.js → sys-config-s8DnZMOd.js} +1 -1
  59. package/dist/udp-core.css +1 -9
  60. package/index.ts +48 -48
  61. package/package.json +1 -1
  62. package/src/App.vue +65 -65
  63. package/src/components/SuCharts/src/UserInfo.vue +78 -78
  64. package/src/components/SuScrollTree/ScrollPanel.vue +170 -175
  65. package/src/components/udp/{grid.vue → grid/index.vue} +39 -25
  66. package/src/components/udp/index.ts +2 -9
  67. package/src/components/udp/utils.ts +63 -108
  68. package/src/layout/components/lay-navbar/index.vue +239 -239
  69. package/src/layout/components/lay-panel/index.vue +150 -150
  70. package/src/layout/components/lay-search/index.vue +25 -25
  71. package/src/layout/components/lay-select-org/index.vue +64 -64
  72. package/src/layout/components/lay-sidebar/horizontal.vue +190 -190
  73. package/src/layout/components/lay-sidebar/mixNav.vue +260 -260
  74. package/src/layout/components/lay-sidebar/sidebar-logo.vue +1 -0
  75. package/src/layout/components/lay-tag/index.vue +20 -48
  76. package/src/layout/hooks/useNav.ts +173 -173
  77. package/src/layout/hooks/useTag.ts +5 -3
  78. package/src/layout/types.ts +3 -2
  79. package/src/main.ts +24 -21
  80. package/src/plugins/i18n/en.ts +302 -302
  81. package/src/plugins/i18n/zh.ts +356 -354
  82. package/src/plugins/vxe-table/index.ts +67 -4
  83. package/src/plugins/vxe-table/render.tsx +18 -29
  84. package/src/router/index.ts +186 -177
  85. package/src/router/modules/remaining.ts +58 -58
  86. package/src/router/utils.ts +393 -377
  87. package/src/store/modules/app.ts +1 -3
  88. package/src/store/modules/multiTags.ts +110 -109
  89. package/src/store/modules/permission.ts +113 -100
  90. package/src/style/button.scss +85 -85
  91. package/src/style/login.css +336 -336
  92. package/src/style/vxetable.scss +338 -321
  93. package/src/views/organization/company/CompanyPanel.vue +259 -259
  94. package/src/views/organization/department/DepartmentPanel.vue +269 -283
  95. package/src/views/system/menu/SystemMenu.vue +183 -183
  96. package/src/views/system/menu/menuInfo.vue +363 -363
  97. package/src/views/system/role/UserInfo.vue +195 -195
  98. package/src/views/system/role-assign/RoleAssign.vue +57 -57
  99. package/src/views/system/role-assign/RolePanel.vue +139 -139
  100. package/src/views/system/sys/sys-config.vue +336 -336
  101. package/src/views/system/sysUser/SysUserPanel.vue +279 -278
  102. package/src/views/uapp/pda/pda-app.vue +208 -208
  103. package/src/views/udev/dict/DictView.vue +118 -118
  104. package/src/views/udev/dict/childView.vue +1 -1
  105. package/src/views/udev/lov/lov-view.vue +91 -91
  106. package/src/views/ulogin/login.vue +323 -323
  107. package/src/views/upms/interface/log-out.vue +101 -101
  108. package/src/views/urpt/design/DesignPanel.vue +507 -507
  109. package/types/global.d.ts +230 -230
  110. package/dist/index-24fnvUBy.js +0 -2822
  111. package/src/components/udp/count-down.vue +0 -536
  112. package/src/components/udp/flip-down/FlipCard/flip-card.vue +0 -251
  113. package/src/components/udp/flip-down/FlipCard/interfaces.ts +0 -4
  114. package/src/components/udp/flip-down/FlipClock/flip-clock.vue +0 -113
  115. package/src/components/udp/form-upload.vue +0 -482
  116. package/src/components/udp/form.vue +0 -112
  117. package/src/components/udp/lov.vue +0 -388
  118. package/src/components/udp/modal-form.vue +0 -190
  119. package/src/components/udp/modal-grid.vue +0 -298
  120. package/src/components/udp/upload.vue +0 -423
  121. package/src/utils/udp/http/index.ts +0 -294
  122. package/src/utils/udp/http/types.d.ts +0 -49
  123. package/src/utils/udp/useRender.ts +0 -431
@@ -2,16 +2,16 @@
2
2
  * @Author: levi7754 levi7754@163.com
3
3
  * @Date: 2024-06-05 14:32:03
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-08-18 22:04:11
5
+ * @LastEditTime: 2025-10-29 16:32:37
6
6
  * @FilePath: /udp-front/packages/udp-core/src/plugins/vxe-table/index.ts
7
7
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
8
  */
9
9
  import 'xe-utils';
10
- import { merge } from 'xe-utils';
10
+ import { merge, toDateString, getWhatDay } from 'xe-utils';
11
11
  import { geti18n, transformI18n } from '../i18n/index';
12
12
  // import { storageLocal } from '@utogether/utils';
13
- import { VxetableRender } from '@utogether/utils';
14
- // import { VxetableRender } from './render';
13
+ // import { VxetableRender } from '@utogether/utils';
14
+ import { VxetableRender } from './render';
15
15
  import { getServiceApi } from '../../api';
16
16
 
17
17
  import VXETable, { VxeUI } from 'vxe-table';
@@ -19,6 +19,7 @@ import VXETable, { VxeUI } from 'vxe-table';
19
19
 
20
20
  // const dict = storageLocal.getItem('kLov');
21
21
  VxetableRender(VXETable, { serviceApi: getServiceApi(), i18n: transformI18n });
22
+ setCommands();
22
23
 
23
24
  // 全局默认参数
24
25
  const defaultConfig = {
@@ -51,3 +52,65 @@ export function setTheme(theme) {
51
52
  // 切换为暗黑主题
52
53
  VxeUI.setTheme(theme);
53
54
  }
55
+
56
+ function setCommands() {
57
+ // 定义选中日期今天指令
58
+ VxeUI.commands.add('utTodyay', {
59
+ dateRangePickerCommandMethod({ $dateRangePicker }) {
60
+ const startDate = toDateString(new Date(), 'yyyy-MM-dd 00:00:00');
61
+ const endDate = toDateString(new Date(), 'yyyy-MM-dd 23:59:59');
62
+ $dateRangePicker.setModelValue(startDate, endDate);
63
+ }
64
+ });
65
+ // 定义选中日期昨天指令
66
+ VxeUI.commands.add('utYesterDay', {
67
+ dateRangePickerCommandMethod({ $dateRangePicker }) {
68
+ const startDate = toDateString(getWhatDay(new Date(), -1), 'yyyy-MM-dd 00:00:00');
69
+ const endDate = toDateString(getWhatDay(new Date(), -1), 'yyyy-MM-dd 23:59:59');
70
+ $dateRangePicker.setModelValue(startDate, endDate);
71
+ }
72
+ });
73
+ // 定义选中日期最近一周指令
74
+ VxeUI.commands.add('utRecentWeek', {
75
+ dateRangePickerCommandMethod({ $dateRangePicker }) {
76
+ const startDate = toDateString(getWhatDay(new Date(), -7), 'yyyy-MM-dd 00:00:00');
77
+ const endDate = toDateString(new Date(), 'yyyy-MM-dd 23:59:59');
78
+ $dateRangePicker.setModelValue(startDate, endDate);
79
+ }
80
+ });
81
+
82
+ // 定义选中日期最近一个月指令
83
+ VxeUI.commands.add('utRecentMonth', {
84
+ dateRangePickerCommandMethod({ $dateRangePicker }) {
85
+ const startDate = toDateString(getWhatDay(new Date(), -30), 'yyyy-MM-dd 00:00:00');
86
+ const endDate = toDateString(new Date(), 'yyyy-MM-dd 23:59:59');
87
+ $dateRangePicker.setModelValue(startDate, endDate);
88
+ }
89
+ });
90
+
91
+ // 定义选中日期最近三个月指令
92
+ VxeUI.commands.add('utRecentThreeMonth', {
93
+ dateRangePickerCommandMethod({ $dateRangePicker }) {
94
+ const startDate = toDateString(getWhatDay(new Date(), -90), 'yyyy-MM-dd 00:00:00');
95
+ const endDate = toDateString(new Date(), 'yyyy-MM-dd 23:59:59');
96
+ $dateRangePicker.setModelValue(startDate, endDate);
97
+ }
98
+ });
99
+
100
+ // 定义选中日期最近半年指令
101
+ VxeUI.commands.add('utRecentHalfYear', {
102
+ dateRangePickerCommandMethod({ $dateRangePicker }) {
103
+ const startDate = toDateString(getWhatDay(new Date(), -180), 'yyyy-MM-dd 00:00:00');
104
+ const endDate = toDateString(new Date(), 'yyyy-MM-dd 23:59:59');
105
+ $dateRangePicker.setModelValue(startDate, endDate);
106
+ }
107
+ });
108
+ // 定义选中日期最近半年指令
109
+ VxeUI.commands.add('utRecentYear', {
110
+ dateRangePickerCommandMethod({ $dateRangePicker }) {
111
+ const startDate = toDateString(getWhatDay(new Date(), -365), 'yyyy-MM-dd 00:00:00');
112
+ const endDate = toDateString(new Date(), 'yyyy-MM-dd 23:59:59');
113
+ $dateRangePicker.setModelValue(startDate, endDate);
114
+ }
115
+ });
116
+ }
@@ -2,7 +2,7 @@
2
2
  * @Author: wei.li
3
3
  * @Date: 2021-12-01 09:18:50
4
4
  * @LastEditors: levi7754 levi7754@163.com
5
- * @LastEditTime: 2025-08-17 19:04:49
5
+ * @LastEditTime: 2025-10-29 16:48:47
6
6
  * @Description: file content
7
7
  */
8
8
 
@@ -251,17 +251,15 @@ export const VxetableRender = (VXETable, { serviceApi, i18n }) => {
251
251
  renderTableEdit(renderOpts: VxeColumnPropTypes.EditRender, params) {
252
252
  const { row, column } = params;
253
253
  const { options, props, optionProps = {}, events } = renderOpts;
254
- const { label = 'label', value = 'value', extLabel } = optionProps;
255
- const { mapField } = props;
256
-
254
+ const { label = 'label', value = 'value' } = optionProps;
255
+ const { mapField, multiple } = props;
256
+ console.log('ssssss');
257
257
  const componentHook = useComponent();
258
258
 
259
- if (props.multiple && row[column.field] && !isArray(row[column.field])) {
260
- row[column.field].split(',').forEach(dv => {
261
- const isExit = options.some(option => option[label] === dv);
262
- !isExit && options.push({ [value]: dv, [label]: dv });
263
- });
264
- }
259
+ // 多选时
260
+ const modelField = multiple ? `_${column.field}` : column.field;
261
+ // 默认值
262
+ componentHook.setDefaultValue(props, row, column.field);
265
263
 
266
264
  function onChange(val) {
267
265
  componentHook.selectChange(val, row, column.field, renderOpts, {
@@ -276,22 +274,17 @@ export const VxetableRender = (VXETable, { serviceApi, i18n }) => {
276
274
 
277
275
  return [
278
276
  <el-select
279
- v-model={row[column.field]}
277
+ v-model={row[modelField]}
280
278
  filterable
281
279
  clearable
282
280
  {...props}
283
281
  style="width: 100%"
282
+ class="udp-select-wrapper"
284
283
  onChange={v => onChange(v)}
285
284
  onClear={() => onClear()}
286
285
  >
287
286
  {options.map(item => {
288
- return (
289
- <el-option
290
- key={item[value]}
291
- label={extLabel && item[extLabel] ? item[value] : item[label]}
292
- value={item[value]}
293
- ></el-option>
294
- );
287
+ return <el-option key={item[value]} label={item[label]} value={item[value]}></el-option>;
295
288
  })}
296
289
  </el-select>
297
290
  ];
@@ -301,16 +294,11 @@ export const VxetableRender = (VXETable, { serviceApi, i18n }) => {
301
294
  const { options, props, optionProps = {}, events } = renderOpts;
302
295
  const { label = 'label', value = 'value', extLabel } = optionProps;
303
296
  const { mapField } = props;
304
-
305
- const componentHook = useComponent();
306
-
307
- if (props.multiple && row[column.field] && !isArray(row[column.field])) {
308
- row[column.field].split(',').forEach(dv => {
309
- const isExit = options.some(option => option[label] === dv);
310
- !isExit && options.push({ [value]: dv, [label]: dv });
311
- });
312
- }
313
-
297
+ console.log('defaultParams');
298
+ // 多选时
299
+ const modelField = multiple ? `_${column.field}` : column.field;
300
+ // 默认值
301
+ componentHook.setDefaultValue(props, row, column.field);
314
302
  function onChange(val) {
315
303
  componentHook.selectChange(val, row, column.field, renderOpts, {
316
304
  column,
@@ -324,7 +312,7 @@ export const VxetableRender = (VXETable, { serviceApi, i18n }) => {
324
312
 
325
313
  return [
326
314
  <el-select
327
- v-model={row[column.field]}
315
+ v-model={row[modelField]}
328
316
  filterable
329
317
  clearable
330
318
  {...props}
@@ -350,6 +338,7 @@ export const VxetableRender = (VXETable, { serviceApi, i18n }) => {
350
338
  const { props, options, optionProps } = renderOpts;
351
339
  // @ts-ignore
352
340
  const { label = 'label', value = 'value', extLabel } = optionProps;
341
+ console.log('defaultParams');
353
342
  const { textValue } = props;
354
343
  let val = row[column.field];
355
344
  const item = options.find(opt => opt[value] === val);
@@ -1,177 +1,186 @@
1
- import { findIndexOf, isEmpty } from 'xe-utils';
2
- import type { Router, RouteRecordRaw, RouteComponent } from 'vue-router';
3
- import { cookies, NProgress, openLink, isUrl, buildHierarchyTree } from '@utogether/utils';
4
- import { useMultiTagsStoreHook } from '../store/modules/multiTags';
5
- import { usePermissionStoreHook } from '../store/modules/permission';
6
- import { ascending, initRouter, findRouteByPath, formatTwoStageRoutes, formatFlatteningRoutes } from './utils';
7
- // import { getEnv } from '../config';
8
- import { kLOGINER } from '../contant';
9
-
10
- import homeRouter from './modules/home';
11
- import errorRouter from './modules/error';
12
- import remainingRouter from './modules/remaining';
13
-
14
- const systemRouter = import.meta.glob([
15
- '../views/system/**/*.{vue,tsx}',
16
- '../views/uapp/**/*.{vue,tsx}',
17
- '../views/upms/**/*.{vue,tsx}',
18
- '../views/ufile/**/*.{vue}',
19
- '../views/urpt/**/*.{vue,tsx}',
20
- '../views/organization/**/*.{vue,tsx}',
21
- '../views/udev/**/*.{vue, tsx}'
22
- ]);
23
-
24
- export const remainingRouters = remainingRouter;
25
-
26
- // 原始静态路由(未做任何处理)
27
- const routes = [homeRouter, errorRouter];
28
- /** 导出处理后的静态路由(三级及以上的路由全部拍成二级) */
29
- export const constantRoutes: Array<RouteRecordRaw> = formatTwoStageRoutes(
30
- formatFlatteningRoutes(buildHierarchyTree(ascending(routes)))
31
- );
32
-
33
- /** 用于渲染菜单,保持原始层级 */
34
- export const constantMenus: Array<RouteComponent> = ascending(routes).concat(...remainingRouter);
35
-
36
- /** 不参与菜单的路由 */
37
- export const remainingPaths = Object.keys(remainingRouter).map(v => {
38
- return remainingRouter[v].path;
39
- });
40
-
41
- /** 创建路由实例 */
42
- // export const router: Router = createRouter({
43
- // history: createWebHistory(window.__HISTORY_PATH__),
44
- // routes: constantRoutes.concat(...(remainingRouter as any)),
45
- // strict: true,
46
- // scrollBehavior(to, from, savedPosition) {
47
- // return new Promise(resolve => {
48
- // if (savedPosition) {
49
- // return savedPosition;
50
- // } else {
51
- // if (from.meta.saveSrollTop) {
52
- // const top: number = document.documentElement.scrollTop || document.body.scrollTop;
53
- // resolve({ left: 0, top });
54
- // }
55
- // }
56
- // });
57
- // }
58
- // });
59
-
60
- /** 重置路由 */
61
- export function resetRouter() {
62
- router.getRoutes().forEach(route => {
63
- const { name, meta } = route;
64
- if (name && router.hasRoute(name) && meta?.backstage) {
65
- router.removeRoute(name);
66
- router.options.routes = formatTwoStageRoutes(formatFlatteningRoutes(buildHierarchyTree(ascending(routes))));
67
- }
68
- });
69
- usePermissionStoreHook().clearAllCachePage();
70
- }
71
-
72
- let views = null;
73
- export let router = null;
74
- export function setViews(cviews, crouter) {
75
- views = cviews;
76
- router = crouter;
77
- Object.assign(views, systemRouter);
78
- }
79
-
80
- export function getViews() {
81
- return views;
82
- }
83
-
84
- /** 路由白名单 */
85
- const whiteList = ['/login'];
86
- /*
87
- router.beforeEach((to: ToRouteType, _from, next) => {
88
- if (to.meta?.keepAlive) {
89
- handleAliveRoute(to, 'add');
90
- // 页面整体刷新和点击标签页刷新
91
- if (_from.name === undefined || _from.name === 'redirect') {
92
- handleAliveRoute(to);
93
- }
94
- }
95
- const userName = cookies.get(kLOGINER);
96
- NProgress.start();
97
- if (userName) {
98
- routerBefore(to, _from, next);
99
- } else {
100
- if (to.path !== '/login') {
101
- if (whiteList.indexOf(to.path) !== -1) {
102
- next();
103
- } else {
104
- next({ path: '/login' });
105
- }
106
- } else {
107
- next();
108
- }
109
- }
110
- });
111
-
112
- router.afterEach(() => {
113
- NProgress?.done();
114
- });
115
-
116
- */
117
- export const routerBefore = (to, _from, next) => {
118
- // TODO 无权限跳转403页面
119
- // if (to.meta?.roles && !isOneOfArray(to.meta?.roles, userInfo?.roles)) {
120
- // next({ path: "/error/403" });
121
- // }
122
- const userName = cookies.get(kLOGINER);
123
-
124
- const externalLink = isUrl(to?.name as string);
125
- /** 如果已经登录并存在登录信息后不能跳转到路由白名单,而是继续保持在当前页面 */
126
- function toCorrectRoute() {
127
- whiteList.includes(to.fullPath) ? next(_from.fullPath) : next();
128
- }
129
- if (_from?.name && _from?.name !== 'login') {
130
- // m.name === to.name 判断param路由跳转
131
- const cmp = to.matched.find(m => m.path === to.path || (m.name === to.name && to.params))?.components;
132
- // 如果路由包含http 则是超链接 反之是普通路由
133
- if (externalLink) {
134
- openLink(to?.name as string);
135
- NProgress?.done();
136
- } else if (cmp?.default || to.name === 'redirect') {
137
- toCorrectRoute();
138
- } else {
139
- next({ path: '/error/404' });
140
- }
141
- } else {
142
- // 刷新
143
- if (usePermissionStoreHook().wholeMenus.length === 0) {
144
- initRouter(userName).then((router: Router) => {
145
- if (!useMultiTagsStoreHook().getMultiTagsCache) {
146
- const { path } = to;
147
- const index = findIndexOf(remainingRouter, v => v.path === path);
148
- const routes: any = index === -1 ? router.options.routes[0].children : router.options.routes;
149
- const route = findRouteByPath(path, routes);
150
- if (route && route.meta?.title) {
151
- const { path, name, meta } = route;
152
- useMultiTagsStoreHook().handleTags('push', { path, name, meta });
153
- }
154
- }
155
- // 确保动态路由完全加入路由列表并且不影响静态路由
156
- // (注意:动态路由刷新时router.beforeEach可能会触发两次,
157
- // 第一次触发动态路由还未完全添加,第二次动态路由才完全添加到路由列表,
158
- // 如果需要在router.beforeEach做一些判断可以在to.name存在的条件下去判断,这样就只会触发一次)
159
- if (isEmpty(to.name)) router.push(to.fullPath);
160
- });
161
- }
162
- if (_from.fullPath === '/' && to.fullPath === '/login' && !to.query?.tokenExpire) {
163
- to.path = '/welcome';
164
- to.fullPath = '/welcome';
165
- to.name = 'SuHome';
166
- } else if (_from.fullPath === '/' && to.path === '/workflow/approve/index') {
167
- to.path = '/welcome';
168
- to.fullPath = '/welcome';
169
- to.name = 'SuHome';
170
- to.query = {};
171
- }
172
- // next();
173
- toCorrectRoute();
174
- }
175
- };
176
-
177
- // export default router;
1
+ import { findIndexOf, isEmpty } from 'xe-utils';
2
+ import type { Router, RouteRecordRaw, RouteComponent } from 'vue-router';
3
+ import { cookies, NProgress, openLink, isUrl, buildHierarchyTree } from '@utogether/utils';
4
+ import { useMultiTagsStoreHook } from '../store/modules/multiTags';
5
+ import { usePermissionStoreHook } from '../store/modules/permission';
6
+ import { ascending, initRouter, findRouteByPath, formatTwoStageRoutes, formatFlatteningRoutes } from './utils';
7
+ // import { getEnv } from '../config';
8
+ import { kLOGINER } from '../contant';
9
+
10
+ import homeRouter from './modules/home';
11
+ import errorRouter from './modules/error';
12
+ import remainingRouter from './modules/remaining';
13
+
14
+ const systemRouter = import.meta.glob([
15
+ '../views/system/**/*.{vue,tsx}',
16
+ '../views/uapp/**/*.{vue,tsx}',
17
+ '../views/upms/**/*.{vue,tsx}',
18
+ '../views/ufile/**/*.{vue}',
19
+ '../views/urpt/**/*.{vue,tsx}',
20
+ '../views/organization/**/*.{vue,tsx}',
21
+ '../views/udev/**/*.{vue, tsx}'
22
+ ]);
23
+
24
+ export const remainingRouters = remainingRouter;
25
+
26
+ // 原始静态路由(未做任何处理)
27
+ const routes = [homeRouter, errorRouter];
28
+ /** 导出处理后的静态路由(三级及以上的路由全部拍成二级) */
29
+ export const constantRoutes: Array<RouteRecordRaw> = formatTwoStageRoutes(
30
+ formatFlatteningRoutes(buildHierarchyTree(ascending(routes)))
31
+ );
32
+
33
+ /** 用于渲染菜单,保持原始层级 */
34
+ export const constantMenus: Array<RouteComponent> = ascending(routes).concat(...remainingRouter);
35
+
36
+ /** 不参与菜单的路由 */
37
+ export const remainingPaths = Object.keys(remainingRouter).map(v => {
38
+ return remainingRouter[v].path;
39
+ });
40
+
41
+ /** 创建路由实例 */
42
+ // export const router: Router = createRouter({
43
+ // history: createWebHistory(window.__HISTORY_PATH__),
44
+ // routes: constantRoutes.concat(...(remainingRouter as any)),
45
+ // strict: true,
46
+ // scrollBehavior(to, from, savedPosition) {
47
+ // return new Promise(resolve => {
48
+ // if (savedPosition) {
49
+ // return savedPosition;
50
+ // } else {
51
+ // if (from.meta.saveSrollTop) {
52
+ // const top: number = document.documentElement.scrollTop || document.body.scrollTop;
53
+ // resolve({ left: 0, top });
54
+ // }
55
+ // }
56
+ // });
57
+ // }
58
+ // });
59
+
60
+ /** 记录已经加载的页面路径 */
61
+ const loadedPaths = new Set<string>();
62
+
63
+ /** 重置已加载页面记录 */
64
+ export function resetLoadedPaths() {
65
+ loadedPaths.clear();
66
+ }
67
+
68
+ /** 重置路由 */
69
+ export function resetRouter() {
70
+ router.getRoutes().forEach(route => {
71
+ const { name, meta } = route;
72
+ if (name && router.hasRoute(name) && meta?.backstage) {
73
+ router.removeRoute(name);
74
+ router.options.routes = formatTwoStageRoutes(formatFlatteningRoutes(buildHierarchyTree(ascending(routes))));
75
+ }
76
+ });
77
+ usePermissionStoreHook().clearAllCachePage();
78
+ resetLoadedPaths();
79
+ }
80
+
81
+ let views = null;
82
+ export let router = null;
83
+ export function setViews(cviews, crouter) {
84
+ views = cviews;
85
+ router = crouter;
86
+ Object.assign(views, systemRouter);
87
+ }
88
+
89
+ export function getViews() {
90
+ return views;
91
+ }
92
+
93
+ /** 路由白名单 */
94
+ const whiteList = ['/login'];
95
+ /*
96
+ router.beforeEach((to: ToRouteType, _from, next) => {
97
+ if (to.meta?.keepAlive) {
98
+ handleAliveRoute(to, 'add');
99
+ // 页面整体刷新和点击标签页刷新
100
+ if (_from.name === undefined || _from.name === 'redirect') {
101
+ handleAliveRoute(to);
102
+ }
103
+ }
104
+ const userName = cookies.get(kLOGINER);
105
+ NProgress.start();
106
+ if (userName) {
107
+ routerBefore(to, _from, next);
108
+ } else {
109
+ if (to.path !== '/login') {
110
+ if (whiteList.indexOf(to.path) !== -1) {
111
+ next();
112
+ } else {
113
+ next({ path: '/login' });
114
+ }
115
+ } else {
116
+ next();
117
+ }
118
+ }
119
+ });
120
+
121
+ router.afterEach(() => {
122
+ NProgress?.done();
123
+ });
124
+
125
+ */
126
+ export const routerBefore = (to, _from, next) => {
127
+ // TODO 无权限跳转403页面
128
+ // if (to.meta?.roles && !isOneOfArray(to.meta?.roles, userInfo?.roles)) {
129
+ // next({ path: "/error/403" });
130
+ // }
131
+ const userName = cookies.get(kLOGINER);
132
+
133
+ const externalLink = isUrl(to?.name as string);
134
+ /** 如果已经登录并存在登录信息后不能跳转到路由白名单,而是继续保持在当前页面 */
135
+ function toCorrectRoute() {
136
+ whiteList.includes(to.fullPath) ? next(_from.fullPath) : next();
137
+ }
138
+ if (_from?.name && _from?.name !== 'login') {
139
+ // m.name === to.name 判断param路由跳转
140
+ const cmp = to.matched.find(m => m.path === to.path || (m.name === to.name && to.params))?.components;
141
+ // 如果路由包含http 则是超链接 反之是普通路由
142
+ if (externalLink) {
143
+ openLink(to?.name as string);
144
+ NProgress?.done();
145
+ } else if (cmp?.default || to.name === 'redirect') {
146
+ toCorrectRoute();
147
+ } else {
148
+ next({ path: '/error/404' });
149
+ }
150
+ } else {
151
+ // 刷新
152
+ if (usePermissionStoreHook().wholeMenus.length === 0) {
153
+ initRouter(userName).then((router: Router) => {
154
+ if (!useMultiTagsStoreHook().getMultiTagsCache) {
155
+ const { path } = to;
156
+ const index = findIndexOf(remainingRouter, v => v.path === path);
157
+ const routes: any = index === -1 ? router.options.routes[0].children : router.options.routes;
158
+ const route = findRouteByPath(path, routes);
159
+ if (route && route.meta?.title) {
160
+ const { path, name, meta } = route;
161
+ useMultiTagsStoreHook().handleTags('push', { path, name, meta });
162
+ }
163
+ }
164
+ // 确保动态路由完全加入路由列表并且不影响静态路由
165
+ // (注意:动态路由刷新时router.beforeEach可能会触发两次,
166
+ // 第一次触发动态路由还未完全添加,第二次动态路由才完全添加到路由列表,
167
+ // 如果需要在router.beforeEach做一些判断可以在to.name存在的条件下去判断,这样就只会触发一次)
168
+ if (isEmpty(to.name)) router.push(to.fullPath);
169
+ });
170
+ }
171
+ if (_from.fullPath === '/' && to.fullPath === '/login' && !to.query?.tokenExpire) {
172
+ to.path = '/welcome';
173
+ to.fullPath = '/welcome';
174
+ to.name = 'SuHome';
175
+ } else if (_from.fullPath === '/' && to.path === '/workflow/approve/index') {
176
+ to.path = '/welcome';
177
+ to.fullPath = '/welcome';
178
+ to.name = 'SuHome';
179
+ to.query = {};
180
+ }
181
+ // next();
182
+ toCorrectRoute();
183
+ }
184
+ };
185
+
186
+ // export default router;