@ibiz-template/vue3-util 0.0.3-beta.1 → 0.0.3-beta.3

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 (120) hide show
  1. package/dist/system/index.system.js +1 -1
  2. package/out/interface/util/route/route.d.ts +7 -0
  3. package/out/interface/util/route/route.d.ts.map +1 -1
  4. package/out/props/editor/index.d.ts +5 -0
  5. package/out/props/editor/index.d.ts.map +1 -1
  6. package/out/props/editor/index.js +5 -0
  7. package/out/props/editor/rate.d.ts +53 -0
  8. package/out/props/editor/rate.d.ts.map +1 -0
  9. package/out/props/editor/rate.js +21 -0
  10. package/out/props/editor/raw.d.ts +53 -0
  11. package/out/props/editor/raw.d.ts.map +1 -0
  12. package/out/props/editor/raw.js +21 -0
  13. package/out/props/editor/slider.d.ts +53 -0
  14. package/out/props/editor/slider.d.ts.map +1 -0
  15. package/out/props/editor/slider.js +21 -0
  16. package/out/props/editor/stepper.d.ts +53 -0
  17. package/out/props/editor/stepper.d.ts.map +1 -0
  18. package/out/props/editor/stepper.js +21 -0
  19. package/out/props/editor/switch.d.ts +53 -0
  20. package/out/props/editor/switch.d.ts.map +1 -0
  21. package/out/props/editor/switch.js +21 -0
  22. package/out/use/route/route.d.ts +13 -0
  23. package/out/use/route/route.d.ts.map +1 -1
  24. package/out/use/route/route.js +27 -0
  25. package/out/use/view/index.d.ts +7 -0
  26. package/out/use/view/index.d.ts.map +1 -1
  27. package/out/use/view/index.js +7 -0
  28. package/out/use/view/use-dashboard-view/use-dashboard-view.d.ts +12 -0
  29. package/out/use/view/use-dashboard-view/use-dashboard-view.d.ts.map +1 -0
  30. package/out/use/view/use-dashboard-view/use-dashboard-view.js +16 -0
  31. package/out/use/view/use-dataview-view/use-dataview-view.d.ts +12 -0
  32. package/out/use/view/use-dataview-view/use-dataview-view.d.ts.map +1 -0
  33. package/out/use/view/use-dataview-view/use-dataview-view.js +16 -0
  34. package/out/use/view/use-grid-exp-view/use-grid-exp-view.d.ts +10 -0
  35. package/out/use/view/use-grid-exp-view/use-grid-exp-view.d.ts.map +1 -0
  36. package/out/use/view/use-grid-exp-view/use-grid-exp-view.js +14 -0
  37. package/out/use/view/use-kanban-view/use-kanban-view.d.ts +12 -0
  38. package/out/use/view/use-kanban-view/use-kanban-view.d.ts.map +1 -0
  39. package/out/use/view/use-kanban-view/use-kanban-view.js +16 -0
  40. package/out/use/view/use-list-exp-view/use-list-exp-view.d.ts +10 -0
  41. package/out/use/view/use-list-exp-view/use-list-exp-view.d.ts.map +1 -0
  42. package/out/use/view/use-list-exp-view/use-list-exp-view.js +14 -0
  43. package/out/use/view/use-list-view/use-list-view.d.ts +10 -0
  44. package/out/use/view/use-list-view/use-list-view.d.ts.map +1 -0
  45. package/out/use/view/use-list-view/use-list-view.js +14 -0
  46. package/out/use/view/use-view-controller/use-view-controller.d.ts.map +1 -1
  47. package/out/use/view/use-view-controller/use-view-controller.js +3 -1
  48. package/out/use/view/use-wizard-view/use-wizard-view.d.ts +12 -0
  49. package/out/use/view/use-wizard-view/use-wizard-view.d.ts.map +1 -0
  50. package/out/use/view/use-wizard-view/use-wizard-view.js +16 -0
  51. package/out/use/vue/vue.d.ts +10 -0
  52. package/out/use/vue/vue.d.ts.map +1 -1
  53. package/out/use/vue/vue.js +16 -3
  54. package/out/use/widget/index.d.ts +5 -0
  55. package/out/use/widget/index.d.ts.map +1 -1
  56. package/out/use/widget/index.js +5 -0
  57. package/out/use/widget/use-control-controller/use-control-controller.d.ts.map +1 -1
  58. package/out/use/widget/use-control-controller/use-control-controller.js +2 -1
  59. package/out/use/widget/use-dataview-controller/use-dataview-controller.d.ts +16 -0
  60. package/out/use/widget/use-dataview-controller/use-dataview-controller.d.ts.map +1 -0
  61. package/out/use/widget/use-dataview-controller/use-dataview-controller.js +22 -0
  62. package/out/use/widget/use-grid-controller/use-grid-controller.d.ts.map +1 -1
  63. package/out/use/widget/use-grid-controller/use-grid-controller.js +4 -1
  64. package/out/use/widget/use-kanban-controller/use-kanban-controller.d.ts +16 -0
  65. package/out/use/widget/use-kanban-controller/use-kanban-controller.d.ts.map +1 -0
  66. package/out/use/widget/use-kanban-controller/use-kanban-controller.js +22 -0
  67. package/out/use/widget/use-layout-panel-controller/use-layout-panel-controller.d.ts +14 -0
  68. package/out/use/widget/use-layout-panel-controller/use-layout-panel-controller.d.ts.map +1 -0
  69. package/out/use/widget/use-layout-panel-controller/use-layout-panel-controller.js +20 -0
  70. package/out/use/widget/use-list-controller/use-list-controller.d.ts.map +1 -1
  71. package/out/use/widget/use-list-controller/use-list-controller.js +6 -0
  72. package/out/use/widget/use-tree-controller/use-tree-controller.d.ts.map +1 -1
  73. package/out/use/widget/use-tree-controller/use-tree-controller.js +3 -0
  74. package/out/use/widget/use-view-layout-panel-controller/use-view-layout-panel-controller.d.ts +14 -0
  75. package/out/use/widget/use-view-layout-panel-controller/use-view-layout-panel-controller.d.ts.map +1 -0
  76. package/out/use/widget/use-view-layout-panel-controller/use-view-layout-panel-controller.js +17 -0
  77. package/out/use/widget/use-wizard-panel-controller/use-wizard-panel-controller.d.ts +17 -0
  78. package/out/use/widget/use-wizard-panel-controller/use-wizard-panel-controller.d.ts.map +1 -0
  79. package/out/use/widget/use-wizard-panel-controller/use-wizard-panel-controller.js +19 -0
  80. package/out/util/index.d.ts +1 -0
  81. package/out/util/index.d.ts.map +1 -1
  82. package/out/util/index.js +1 -0
  83. package/out/util/route/route-listener.d.ts +42 -0
  84. package/out/util/route/route-listener.d.ts.map +1 -0
  85. package/out/util/route/route-listener.js +77 -0
  86. package/out/util/route/route.d.ts +1 -1
  87. package/out/util/route/route.d.ts.map +1 -1
  88. package/out/util/route/route.js +65 -63
  89. package/package.json +5 -5
  90. package/src/interface/util/route/route.ts +8 -0
  91. package/src/props/editor/index.ts +5 -0
  92. package/src/props/editor/rate.ts +24 -0
  93. package/src/props/editor/raw.ts +24 -0
  94. package/src/props/editor/slider.ts +24 -0
  95. package/src/props/editor/stepper.ts +24 -0
  96. package/src/props/editor/switch.ts +24 -0
  97. package/src/use/route/route.ts +33 -1
  98. package/src/use/view/index.ts +7 -0
  99. package/src/use/view/use-dashboard-view/use-dashboard-view.ts +21 -0
  100. package/src/use/view/use-dataview-view/use-dataview-view.ts +21 -0
  101. package/src/use/view/use-grid-exp-view/use-grid-exp-view.ts +17 -0
  102. package/src/use/view/use-kanban-view/use-kanban-view.ts +19 -0
  103. package/src/use/view/use-list-exp-view/use-list-exp-view.ts +17 -0
  104. package/src/use/view/use-list-view/use-list-view.ts +17 -0
  105. package/src/use/view/use-view-controller/use-view-controller.ts +3 -1
  106. package/src/use/view/use-wizard-view/use-wizard-view.ts +19 -0
  107. package/src/use/vue/vue.ts +18 -2
  108. package/src/use/widget/index.ts +5 -0
  109. package/src/use/widget/use-control-controller/use-control-controller.ts +2 -1
  110. package/src/use/widget/use-dataview-controller/use-dataview-controller.ts +29 -0
  111. package/src/use/widget/use-grid-controller/use-grid-controller.ts +4 -1
  112. package/src/use/widget/use-kanban-controller/use-kanban-controller.ts +29 -0
  113. package/src/use/widget/use-layout-panel-controller/use-layout-panel-controller.ts +27 -0
  114. package/src/use/widget/use-list-controller/use-list-controller.ts +6 -0
  115. package/src/use/widget/use-tree-controller/use-tree-controller.ts +3 -0
  116. package/src/use/widget/use-view-layout-panel-controller/use-view-layout-panel-controller.ts +24 -0
  117. package/src/use/widget/use-wizard-panel-controller/use-wizard-panel-controller.ts +26 -0
  118. package/src/util/index.ts +1 -0
  119. package/src/util/route/route-listener.ts +92 -0
  120. package/src/util/route/route.ts +68 -59
@@ -0,0 +1,77 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { isFunction } from 'lodash-es';
3
+ import { watch } from 'vue';
4
+ /**
5
+ * 监听路由变更,提供下一次变更执行的一次性回调。
6
+ *
7
+ * @export
8
+ * @class RouteListener
9
+ */
10
+ export class RouteListener {
11
+ constructor(route, wait) {
12
+ /**
13
+ * 回调集合
14
+ *
15
+ * @memberof RouteListener
16
+ */
17
+ this.callbacks = [];
18
+ /**
19
+ * 计时器集合
20
+ *
21
+ * @private
22
+ * @type {any[]}
23
+ * @memberof RouteListener
24
+ */
25
+ this.timers = [];
26
+ /**
27
+ * 等待路由响应时间
28
+ *
29
+ * @private
30
+ * @type {number}
31
+ * @memberof RouteListener
32
+ */
33
+ this.wait = 500;
34
+ if (wait) {
35
+ this.wait = wait;
36
+ }
37
+ watch(() => route.path, (newVal, oldVal) => {
38
+ if (newVal !== oldVal) {
39
+ // 执行所有回调
40
+ if (this.callbacks.length) {
41
+ for (let index = 0; index < this.callbacks.length; index++) {
42
+ const fn = this.callbacks[index];
43
+ fn();
44
+ }
45
+ }
46
+ // 清空所有回调
47
+ this.callbacks = [];
48
+ // 清空所有计时器
49
+ if (this.timers.length) {
50
+ for (let index = 0; index < this.timers.length; index++) {
51
+ const timer = this.timers[index];
52
+ clearTimeout(timer);
53
+ }
54
+ }
55
+ this.timers = [];
56
+ }
57
+ });
58
+ }
59
+ /**
60
+ * 下一次路由变更后执行回调,只执行一次
61
+ *
62
+ * @param {ChangeCallback} callback
63
+ * @memberof RouteListener
64
+ */
65
+ nextChange(callback) {
66
+ if (isFunction(callback)) {
67
+ // 设定计时器,经过一段时间等不到时,执行回调,并删除回调集合里的回调
68
+ this.timers.push(setTimeout(() => {
69
+ callback();
70
+ const index = this.callbacks.findIndex(item => item === callback);
71
+ this.callbacks.splice(index, 1);
72
+ }, this.wait));
73
+ // 存入回调集合等待被调用
74
+ this.callbacks.push(callback);
75
+ }
76
+ }
77
+ }
@@ -62,7 +62,7 @@ export declare function parseRouteViewData(appModel: IPSApplication, route: Rout
62
62
  * @param {string} pathStr 以/开头的路径,即router的path
63
63
  * @returns {*} {IRoutePath}
64
64
  */
65
- export declare function string2routePath(pathStr: string): IRoutePath;
65
+ export declare function route2routePath(route: Route): IRoutePath;
66
66
  /**
67
67
  * 路由路径对象转路径字符串
68
68
  *
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/util/route/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,6BAA6B,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,UAAU,EAAkB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,EACjC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAC3B,MAAM,CA8CR;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,OAK5C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,cAAc,GAAG,YAAY,EACvC,YAAY,EAAE,MAAM,0BAKrB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iCAuBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,cAAc,CAyDhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAwC5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAwB9D"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/util/route/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,6BAA6B,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAkB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE7E;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,EACjC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAC3B,MAAM,CA6CR;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,OAK5C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,cAAc,GAAG,YAAY,EACvC,YAAY,EAAE,MAAM,0BAKrB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iCAuBtE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,GACZ,cAAc,CAwDhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAuCxD;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,UAAU,GAAG,MAAM,CAmC9D"}
@@ -1,6 +1,7 @@
1
1
  import { notNilEmpty } from 'qx-util';
2
2
  import { RuntimeError } from '@ibiz-template/core';
3
3
  import qs from 'qs';
4
+ import { calcRouteContext } from '@ibiz-template/runtime';
4
5
  /**
5
6
  * 生成route路径
6
7
  *
@@ -15,7 +16,7 @@ import qs from 'qs';
15
16
  */
16
17
  export function generateRoutePath(appView, route, context, params) {
17
18
  var _a;
18
- const routePath = string2routePath(route.fullPath);
19
+ const routePath = route2routePath(route);
19
20
  // 如果上下文存在toRouteLevel时,使用上下文的层级,否则是第二级路由
20
21
  let level = 2;
21
22
  if (context === null || context === void 0 ? void 0 : context.toRouteLevel) {
@@ -23,9 +24,13 @@ export function generateRoutePath(appView, route, context, params) {
23
24
  // 使用完后删除,避免添加到首页上下文里
24
25
  delete context.toRouteLevel;
25
26
  }
26
- // 删除自身层级和之后的路由,保留之前层级的路由
27
+ // 删除目标层级和之后的路由,保留之前层级的路由
27
28
  routePath.pathNodes.splice(level - 1, routePath.pathNodes.length - level + 1);
28
- // 一级首页路由
29
+ // 修改当前层级路由的附加上下文参数
30
+ if (context === null || context === void 0 ? void 0 : context.currentRouteContext) {
31
+ routePath.pathNodes[level - 2].context = context.currentRouteContext;
32
+ }
33
+ // 重定向视图跳转的一级首页路由
29
34
  if (routePath.pathNodes[0].viewName === 'appredirectview') {
30
35
  if (params === null || params === void 0 ? void 0 : params.srfindexname) {
31
36
  routePath.pathNodes[0].viewName = params.srfindexname;
@@ -35,22 +40,18 @@ export function generateRoutePath(appView, route, context, params) {
35
40
  routePath.pathNodes[0].viewName = 'index';
36
41
  }
37
42
  }
38
- // 计算自身视图path路径
43
+ // 计算目标视图path路径
39
44
  routePath.pathNodes.push({ viewName: appView.codeName.toLowerCase() });
40
- const deName = (_a = appView.getPSAppDataEntity()) === null || _a === void 0 ? void 0 : _a.codeName.toLowerCase();
41
- // 计算自身的context参数
42
- if (context) {
43
- const routeContext = context.getOwnContext();
44
- // 如果有路由上下文参数的话,添加到path上
45
- if (Object.values(routeContext).length > 0) {
46
- // 有视图实体主键上下文时,
47
- if (deName && routeContext[deName]) {
48
- routePath.pathNodes[level - 1].context = routeContext[deName];
49
- delete routeContext[deName];
50
- }
51
- // 除主键外的参数合并到首页的参数里去
52
- Object.assign(routePath.pathNodes[0].context, routeContext);
53
- }
45
+ const codeName = (_a = appView.getPSAppDataEntity()) === null || _a === void 0 ? void 0 : _a.codeName;
46
+ // 计算最新的上下文并更新到index后面
47
+ if (context && codeName) {
48
+ const app = ibiz.hub.getApp(appView.getPSModelService().app);
49
+ const paths = app.resourcePathUtil.calcPaths(codeName);
50
+ const routeContext = calcRouteContext(context, paths);
51
+ routePath.pathNodes[0].context = routeContext;
52
+ }
53
+ else {
54
+ routePath.pathNodes[0].context = {};
54
55
  }
55
56
  // 存在视图参数时补充视图参数
56
57
  routePath.params = params;
@@ -129,9 +130,9 @@ export function findView(appModel, viewCodeName) {
129
130
  * @returns {*} {IRouteViewData}
130
131
  */
131
132
  export function parseRouteViewData(appModel, route, level) {
132
- var _a, _b;
133
+ var _a;
133
134
  // 解析路由的视图参数
134
- const routePath = string2routePath(route.fullPath);
135
+ const routePath = route2routePath(route);
135
136
  // 获取对应层级的视图名称参数
136
137
  const viewCodeName = routePath.pathNodes[level - 1].viewName;
137
138
  if (!viewCodeName) {
@@ -147,10 +148,16 @@ export function parseRouteViewData(appModel, route, level) {
147
148
  const { viewType } = viewModel.refM;
148
149
  // 解析上下文参数,整合当前层级之前所有的上下文参数
149
150
  const context = {};
150
- // 合并应用上下文
151
+ // 合并appData里的应用上下文
151
152
  if ((_a = ibiz.appData) === null || _a === void 0 ? void 0 : _a.context) {
152
153
  Object.assign(context, ibiz.appData.context);
153
154
  }
155
+ // 合并路由上下文
156
+ // 合并路由应用上下文
157
+ if (routePath.appContext) {
158
+ Object.assign(context, routePath.appContext);
159
+ }
160
+ // 合并视图上下文
154
161
  for (let index = 0; index < level; index++) {
155
162
  const pathNode = routePath.pathNodes[index];
156
163
  if (notNilEmpty(pathNode.context)) {
@@ -158,14 +165,6 @@ export function parseRouteViewData(appModel, route, level) {
158
165
  // 首页的context是对象直接合并
159
166
  Object.assign(context, pathNode.context);
160
167
  }
161
- else {
162
- // 其他层级,如果存在context则是主键字符串
163
- const view = findView(appModel, pathNode.viewName);
164
- const deName = (_b = view.refM.resource) === null || _b === void 0 ? void 0 : _b.toLowerCase();
165
- if (deName) {
166
- context[deName] = pathNode.context;
167
- }
168
- }
169
168
  }
170
169
  }
171
170
  // 最后一级路由对应的视图才会解析视图参数
@@ -189,47 +188,38 @@ export function parseRouteViewData(appModel, route, level) {
189
188
  * @param {string} pathStr 以/开头的路径,即router的path
190
189
  * @returns {*} {IRoutePath}
191
190
  */
192
- export function string2routePath(pathStr) {
193
- let queryIndex = pathStr.lastIndexOf('?');
194
- queryIndex = queryIndex === -1 ? pathStr.length : queryIndex;
195
- let path = pathStr.substring(0, queryIndex);
196
- if (path.indexOf('/') === 0)
197
- path = path.substring(1);
198
- const queryPath = pathStr.substring(queryIndex + 1);
191
+ export function route2routePath(route) {
192
+ // 一共匹配了几级路由
193
+ const level = route.matched.length;
199
194
  // 解析路径节点
200
195
  const pathNodes = [];
201
- const paths = path.split('/');
202
- let viewNum = 0;
203
- paths.forEach((str, index) => {
204
- // 第一级是首页
205
- if (index === 0) {
206
- pathNodes.push({ viewName: str.toLowerCase(), context: {} });
196
+ for (let index = 1; index <= level; index++) {
197
+ const viewName = route.params[`view${index}`];
198
+ let context = route.params[`params${index}`];
199
+ // context为占位符时置空
200
+ if (!context || context === ibiz.env.routePlaceholder) {
201
+ context = undefined;
207
202
  }
208
203
  else if (index === 1) {
209
- // 第二级是上下文或者二级视图
210
- if (/[^/]+=[^/]+/.test(str)) {
211
- pathNodes[pathNodes.length - 1].context = qs.parse(str, {
212
- delimiter: ';',
213
- });
214
- }
215
- else {
216
- pathNodes.push({ viewName: str.toLowerCase() });
217
- viewNum = 1;
218
- }
219
- }
220
- else if (index % 2 === viewNum) {
221
- pathNodes.push({ viewName: str.toLowerCase() });
222
- }
223
- else {
224
- pathNodes[pathNodes.length - 1].context = str === '_' ? undefined : str;
204
+ // 首页上下文要解析
205
+ context = qs.parse(context, { delimiter: ';' });
225
206
  }
226
- });
207
+ pathNodes.push({ viewName, context });
208
+ }
209
+ // 解析应用上下文
210
+ let appContext;
211
+ if (route.params.appContext &&
212
+ route.params.appContext !== ibiz.env.routePlaceholder) {
213
+ appContext = qs.parse(route.params.appContext, {
214
+ delimiter: ';',
215
+ });
216
+ }
227
217
  // 解析视图参数
228
218
  let params;
229
- if (queryPath) {
230
- params = qs.parse(queryPath);
219
+ if (route.query) {
220
+ params = Object.assign({}, route.query);
231
221
  }
232
- return { pathNodes, params };
222
+ return { appContext, pathNodes, params };
233
223
  }
234
224
  /**
235
225
  * 路由路径对象转路径字符串
@@ -242,6 +232,14 @@ export function string2routePath(pathStr) {
242
232
  */
243
233
  export function routePath2string(routePath) {
244
234
  let pathStr = '';
235
+ // 应用上下文
236
+ if (routePath.appContext) {
237
+ pathStr += `/${qs.stringify(routePath.appContext, { delimiter: ';' })}`;
238
+ }
239
+ else {
240
+ pathStr += `/${ibiz.env.routePlaceholder}`;
241
+ }
242
+ // 每一层级的视图
245
243
  routePath.pathNodes.forEach((pathNode, index) => {
246
244
  pathStr += `/${pathNode.viewName}`;
247
245
  // 首页路由
@@ -251,12 +249,16 @@ export function routePath2string(routePath) {
251
249
  // 对象转成a=11;b=222的格式,字符串直接附加在后面
252
250
  pathStr += `/${qs.stringify(pathNode.context, { delimiter: ';' })}`;
253
251
  }
252
+ else {
253
+ pathStr += `/${ibiz.env.routePlaceholder}`;
254
+ }
254
255
  }
255
256
  else {
256
257
  // 非首页路由
257
- pathStr += `/${pathNode.context || '_'}`;
258
+ pathStr += `/${pathNode.context || ibiz.env.routePlaceholder}`;
258
259
  }
259
260
  });
261
+ // 附加视图参数
260
262
  if (notNilEmpty(routePath.params)) {
261
263
  pathStr += qs.stringify(routePath.params, { addQueryPrefix: true });
262
264
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/vue3-util",
3
- "version": "0.0.3-beta.1",
3
+ "version": "0.0.3-beta.3",
4
4
  "description": "vue3 工具包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -29,9 +29,9 @@
29
29
  "author": "chitanda",
30
30
  "license": "MIT",
31
31
  "devDependencies": {
32
- "@ibiz-template/core": "^0.0.3-beta.1",
33
- "@ibiz-template/model": "^0.0.3-beta.1",
34
- "@ibiz-template/runtime": "^0.0.3-beta.1",
32
+ "@ibiz-template/core": "^0.0.3-beta.3",
33
+ "@ibiz-template/model": "^0.0.3-beta.3",
34
+ "@ibiz-template/runtime": "^0.0.3-beta.3",
35
35
  "@types/qs": "^6.9.7",
36
36
  "qs": "^6.11.0",
37
37
  "qx-util": "^0.4.4",
@@ -49,5 +49,5 @@
49
49
  "vue": "^3.2.45",
50
50
  "vue-router": "^4.1.6"
51
51
  },
52
- "gitHead": "c25c8bc45b7ff892e64e59359e7864d1ec800e3a"
52
+ "gitHead": "5db494cb73fa734ceb7d8988d63d886ddec2afee"
53
53
  }
@@ -81,6 +81,14 @@ export interface IRoutePathNode {
81
81
  * @interface IRoutePath
82
82
  */
83
83
  export interface IRoutePath {
84
+ /**
85
+ * 应用上下文
86
+ *
87
+ * @type {IContext}
88
+ * @memberof IRoutePath
89
+ */
90
+ appContext?: IContext;
91
+
84
92
  /**
85
93
  *
86
94
  * @author lxm
@@ -7,3 +7,8 @@ export * from './dropdown-list';
7
7
  export * from './radio-button-list';
8
8
  export * from './upload';
9
9
  export * from './data-picker';
10
+ export * from './raw';
11
+ export * from './stepper';
12
+ export * from './rate';
13
+ export * from './slider';
14
+ export * from './switch';
@@ -0,0 +1,24 @@
1
+ import { RateEditorController } from '@ibiz-template/runtime';
2
+ import { getEditorProps, getGridEditorCommonProps } from './common';
3
+
4
+ /**
5
+ * 获取评分器的props
6
+ *
7
+ * @export
8
+ * @template C
9
+ * @returns {*}
10
+ */
11
+ export function getRateProps<C = RateEditorController>() {
12
+ return { ...getEditorProps<C>(), value: [String, Number] };
13
+ }
14
+
15
+ /**
16
+ * 获取表格评分器的props
17
+ *
18
+ * @export
19
+ * @template C
20
+ * @returns {*}
21
+ */
22
+ export function getGridRateProps<C = RateEditorController>() {
23
+ return { ...getRateProps<C>(), ...getGridEditorCommonProps() };
24
+ }
@@ -0,0 +1,24 @@
1
+ import { RawEditorController } from '@ibiz-template/runtime';
2
+ import { getEditorProps, getGridEditorCommonProps } from './common';
3
+
4
+ /**
5
+ * 获取直接内容的props
6
+ *
7
+ * @export
8
+ * @template C
9
+ * @returns {*}
10
+ */
11
+ export function getRawProps<C = RawEditorController>() {
12
+ return { ...getEditorProps<C>(), value: [String, Number] };
13
+ }
14
+
15
+ /**
16
+ * 获取表格步进器的props
17
+ *
18
+ * @export
19
+ * @template C
20
+ * @returns {*}
21
+ */
22
+ export function getGridRawProps<C = RawEditorController>() {
23
+ return { ...getRawProps<C>(), ...getGridEditorCommonProps() };
24
+ }
@@ -0,0 +1,24 @@
1
+ import { SliderEditorController } from '@ibiz-template/runtime';
2
+ import { getEditorProps, getGridEditorCommonProps } from './common';
3
+
4
+ /**
5
+ * 获取滑动输入条的props
6
+ *
7
+ * @export
8
+ * @template C
9
+ * @returns {*}
10
+ */
11
+ export function getSliderProps<C = SliderEditorController>() {
12
+ return { ...getEditorProps<C>(), value: [String, Number] };
13
+ }
14
+
15
+ /**
16
+ * 获取表格滑动输入条的props
17
+ *
18
+ * @export
19
+ * @template C
20
+ * @returns {*}
21
+ */
22
+ export function getGridSliderProps<C = SliderEditorController>() {
23
+ return { ...getSliderProps<C>(), ...getGridEditorCommonProps() };
24
+ }
@@ -0,0 +1,24 @@
1
+ import { StepperEditorController } from '@ibiz-template/runtime';
2
+ import { getEditorProps, getGridEditorCommonProps } from './common';
3
+
4
+ /**
5
+ * 获取步进器的props
6
+ *
7
+ * @export
8
+ * @template C
9
+ * @returns {*}
10
+ */
11
+ export function getStepperProps<C = StepperEditorController>() {
12
+ return { ...getEditorProps<C>(), value: [String, Number] };
13
+ }
14
+
15
+ /**
16
+ * 获取表格步进器的props
17
+ *
18
+ * @export
19
+ * @template C
20
+ * @returns {*}
21
+ */
22
+ export function getGridStepperProps<C = StepperEditorController>() {
23
+ return { ...getStepperProps<C>(), ...getGridEditorCommonProps() };
24
+ }
@@ -0,0 +1,24 @@
1
+ import { SwitchEditorController } from '@ibiz-template/runtime';
2
+ import { getEditorProps, getGridEditorCommonProps } from './common';
3
+
4
+ /**
5
+ * 获取开关的props
6
+ *
7
+ * @export
8
+ * @template C
9
+ * @returns {*}
10
+ */
11
+ export function getSwitchProps<C = SwitchEditorController>() {
12
+ return { ...getEditorProps<C>(), value: [String, Number] };
13
+ }
14
+
15
+ /**
16
+ * 获取表格步进器的props
17
+ *
18
+ * @export
19
+ * @template C
20
+ * @returns {*}
21
+ */
22
+ export function getGridSwitchProps<C = SwitchEditorController>() {
23
+ return { ...getSwitchProps<C>(), ...getGridEditorCommonProps() };
24
+ }
@@ -1,5 +1,7 @@
1
- import { useRoute } from 'vue-router';
1
+ import { RouteLocationNormalizedLoaded, useRoute } from 'vue-router';
2
2
  import qs from 'qs';
3
+ import { ref, Ref, watch } from 'vue';
4
+ import { RouteListener } from '../../util';
3
5
 
4
6
  /**
5
7
  * 获取路由上下文参数
@@ -41,3 +43,33 @@ export function useRouterQuery(): IParams {
41
43
  const { query } = route;
42
44
  return query;
43
45
  }
46
+
47
+ /**
48
+ * 监听普通的key变更,在路由下次更新后再改变赋给新的RouteKey
49
+ * 第一次默认值会直接赋给routeKey
50
+ *
51
+ * @export
52
+ * @param {Ref<string>} originKey 监听的原始Ref
53
+ * @param {RouteLocationNormalizedLoaded} route 路由
54
+ * @param {Ref<string>} [routeKey] 预先提供的转换后的Ref
55
+ * @returns {*} {Ref<string>}
56
+ */
57
+ export function useRouteKey(
58
+ originKey: Ref<string>,
59
+ route: RouteLocationNormalizedLoaded,
60
+ routeKey?: Ref<string>,
61
+ ): Ref<string> {
62
+ if (!routeKey) {
63
+ routeKey = ref('');
64
+ }
65
+ routeKey.value = originKey.value;
66
+ const routeListener = new RouteListener(route);
67
+ watch(originKey, (newVal, oldVal) => {
68
+ if (newVal !== oldVal) {
69
+ routeListener.nextChange(() => {
70
+ routeKey!.value = newVal;
71
+ });
72
+ }
73
+ });
74
+ return routeKey;
75
+ }
@@ -4,6 +4,8 @@ export { useEditViewController } from './use-edit-view/use-edit-view';
4
4
  export { useEditView3Controller } from './use-edit-view3/use-edit-view3';
5
5
  export { useOptViewController } from './use-opt-view/use-opt-view';
6
6
  export { useGridViewController } from './use-grid-view/use-grid-view';
7
+ export { useDataViewViewController } from './use-dataview-view/use-dataview-view';
8
+ export { useListViewController } from './use-list-view/use-list-view';
7
9
  export { usePickupGridViewController } from './use-pickup-grid-view/use-pickup-grid-view';
8
10
  export { usePickupViewController } from './use-pickup-view/use-pickup-view';
9
11
  export { useMPickupViewController } from './use-mpickup-view/use-mpickup-view';
@@ -14,3 +16,8 @@ export { useWFStepTraceViewController } from './use-wf-step-trace-view/use-wf-st
14
16
  export { useAppPortalViewController } from './use-app-portal-view/use-app-portal-view';
15
17
  export { useTreeExpViewController } from './use-tree-exp-view/use-tree-exp-view';
16
18
  export { useTabExpViewController } from './use-tab-exp-view/use-tab-exp-view';
19
+ export { useGridExpViewController } from './use-grid-exp-view/use-grid-exp-view';
20
+ export { useDashboardViewController } from './use-dashboard-view/use-dashboard-view';
21
+ export { useWizardViewController } from './use-wizard-view/use-wizard-view';
22
+ export { useListExpViewController } from './use-list-exp-view/use-list-exp-view';
23
+ export { useKanbanViewController } from './use-kanban-view/use-kanban-view';
@@ -0,0 +1,21 @@
1
+ import { DashboardViewController } from '@ibiz-template/runtime';
2
+ import { useViewController } from '../use-view-controller/use-view-controller';
3
+
4
+ /**
5
+ * 实体数据看板视图控制器
6
+ *
7
+ * @author chitanda
8
+ * @date 2022-08-15 17:08:10
9
+ * @export
10
+ * @param {string} path
11
+ * @return {*} {DashboardViewController}
12
+ */
13
+ export function useDashboardViewController(
14
+ path: string,
15
+ ): DashboardViewController {
16
+ return useViewController<DashboardViewController>(
17
+ (context: IContext, params: IParams) => {
18
+ return new DashboardViewController(path, context, params);
19
+ },
20
+ );
21
+ }
@@ -0,0 +1,21 @@
1
+ import { DataViewViewController } from '@ibiz-template/runtime';
2
+ import { useViewController } from '../use-view-controller/use-view-controller';
3
+
4
+ /**
5
+ * 数据视图控制器
6
+ *
7
+ * @author chitanda
8
+ * @date 2022-08-15 17:08:01
9
+ * @export
10
+ * @param {string} path
11
+ * @return {*} {DataViewViewController}
12
+ */
13
+ export function useDataViewViewController(
14
+ path: string,
15
+ ): DataViewViewController {
16
+ return useViewController<DataViewViewController>(
17
+ (context: IContext, params: IParams) => {
18
+ return new DataViewViewController(path, context, params);
19
+ },
20
+ );
21
+ }
@@ -0,0 +1,17 @@
1
+ import { GridExpViewController } from '@ibiz-template/runtime';
2
+ import { useViewController } from '../use-view-controller/use-view-controller';
3
+
4
+ /**
5
+ * 表格导航视图控制器
6
+ *
7
+ * @export
8
+ * @param {string} path
9
+ * @return {*} {GridExpViewController}
10
+ */
11
+ export function useGridExpViewController(path: string): GridExpViewController {
12
+ return useViewController<GridExpViewController>(
13
+ (context: IContext, params: IParams) => {
14
+ return new GridExpViewController(path, context, params);
15
+ },
16
+ );
17
+ }
@@ -0,0 +1,19 @@
1
+ import { KanbanViewController } from '@ibiz-template/runtime';
2
+ import { useViewController } from '../use-view-controller/use-view-controller';
3
+
4
+ /**
5
+ * 看板视图控制器
6
+ *
7
+ * @author chitanda
8
+ * @date 2022-08-15 17:08:01
9
+ * @export
10
+ * @param {string} path
11
+ * @return {*} {KanbanViewController}
12
+ */
13
+ export function useKanbanViewController(path: string): KanbanViewController {
14
+ return useViewController<KanbanViewController>(
15
+ (context: IContext, params: IParams) => {
16
+ return new KanbanViewController(path, context, params);
17
+ },
18
+ );
19
+ }
@@ -0,0 +1,17 @@
1
+ import { ListExpViewController } from '@ibiz-template/runtime';
2
+ import { useViewController } from '../use-view-controller/use-view-controller';
3
+
4
+ /**
5
+ * 列表导航视图控制器
6
+ *
7
+ * @export
8
+ * @param {string} path
9
+ * @return {*} {ListExpViewController}
10
+ */
11
+ export function useListExpViewController(path: string): ListExpViewController {
12
+ return useViewController<ListExpViewController>(
13
+ (context: IContext, params: IParams) => {
14
+ return new ListExpViewController(path, context, params);
15
+ },
16
+ );
17
+ }
@@ -0,0 +1,17 @@
1
+ import { ListViewController } from '@ibiz-template/runtime';
2
+ import { useViewController } from '../use-view-controller/use-view-controller';
3
+
4
+ /**
5
+ * 列表视图控制器
6
+ *
7
+ * @export
8
+ * @param {string} path
9
+ * @returns {*} {ListViewController}
10
+ */
11
+ export function useListViewController(path: string): ListViewController {
12
+ return useViewController<ListViewController>(
13
+ (context: IContext, params: IParams) => {
14
+ return new ListViewController(path, context, params);
15
+ },
16
+ );
17
+ }