@ibiz-template/runtime 0.5.0-beta.4 → 0.5.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/index.esm.js +548 -142
  2. package/dist/index.system.min.js +1 -1
  3. package/out/controller/control/app-menu/app-menu.controller.d.ts +34 -1
  4. package/out/controller/control/app-menu/app-menu.controller.d.ts.map +1 -1
  5. package/out/controller/control/app-menu/app-menu.controller.js +47 -5
  6. package/out/controller/control/gantt/gantt.controller.d.ts.map +1 -1
  7. package/out/controller/control/gantt/gantt.controller.js +3 -3
  8. package/out/controller/control/grid/grid/entity-schema.d.ts +16 -0
  9. package/out/controller/control/grid/grid/entity-schema.d.ts.map +1 -0
  10. package/out/controller/control/grid/grid/entity-schema.js +81 -0
  11. package/out/controller/control/grid/grid/grid.controller.d.ts +14 -0
  12. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  13. package/out/controller/control/grid/grid/grid.controller.js +43 -1
  14. package/out/controller/control/grid/grid/grid.service.js +1 -1
  15. package/out/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.js +1 -1
  16. package/out/controller/control/search-bar/entity-schema.d.ts +13 -0
  17. package/out/controller/control/search-bar/entity-schema.d.ts.map +1 -0
  18. package/out/controller/control/search-bar/entity-schema.js +151 -0
  19. package/out/controller/control/search-bar/search-bar-filter.controller.d.ts +9 -0
  20. package/out/controller/control/search-bar/search-bar-filter.controller.d.ts.map +1 -1
  21. package/out/controller/control/search-bar/search-bar-filter.controller.js +26 -6
  22. package/out/controller/control/search-bar/search-bar.controller.d.ts +29 -1
  23. package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
  24. package/out/controller/control/search-bar/search-bar.controller.js +55 -8
  25. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts.map +1 -1
  26. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.js +2 -1
  27. package/out/controller/utils/index.d.ts +1 -0
  28. package/out/controller/utils/index.d.ts.map +1 -1
  29. package/out/controller/utils/index.js +1 -0
  30. package/out/controller/utils/jsonschema/entity.d.ts +11 -0
  31. package/out/controller/utils/jsonschema/entity.d.ts.map +1 -0
  32. package/out/controller/utils/jsonschema/entity.js +16 -0
  33. package/out/controller/utils/jsonschema/index.d.ts +2 -0
  34. package/out/controller/utils/jsonschema/index.d.ts.map +1 -0
  35. package/out/controller/utils/jsonschema/index.js +1 -0
  36. package/out/interface/provider/i-app-menu-item.provider.d.ts +31 -0
  37. package/out/interface/provider/i-app-menu-item.provider.d.ts.map +1 -0
  38. package/out/interface/provider/i-app-menu-item.provider.js +1 -0
  39. package/out/interface/provider/index.d.ts +1 -0
  40. package/out/interface/provider/index.d.ts.map +1 -1
  41. package/out/interface/service/i-data-entity/i-data-entity.d.ts +0 -17
  42. package/out/interface/service/i-data-entity/i-data-entity.d.ts.map +1 -1
  43. package/out/register/helper/app-menu-item-register.d.ts +25 -0
  44. package/out/register/helper/app-menu-item-register.d.ts.map +1 -0
  45. package/out/register/helper/app-menu-item-register.js +52 -0
  46. package/out/register/helper/index.d.ts +1 -0
  47. package/out/register/helper/index.d.ts.map +1 -1
  48. package/out/register/helper/index.js +1 -0
  49. package/out/service/app-data-entity/app-data-entity.d.ts +0 -9
  50. package/out/service/app-data-entity/app-data-entity.d.ts.map +1 -1
  51. package/out/service/app-data-entity/app-data-entity.js +11 -41
  52. package/out/service/de-service-util.js +1 -1
  53. package/out/service/service/entity/method/de-action.d.ts +11 -0
  54. package/out/service/service/entity/method/de-action.d.ts.map +1 -1
  55. package/out/service/service/entity/method/de-action.js +31 -4
  56. package/out/service/utils/de-cache/de-cache.js +3 -3
  57. package/out/utils/open-redirect-view/open-redirect-view.d.ts +17 -4
  58. package/out/utils/open-redirect-view/open-redirect-view.d.ts.map +1 -1
  59. package/out/utils/open-redirect-view/open-redirect-view.js +20 -4
  60. package/package.json +3 -3
  61. package/src/controller/control/app-menu/app-menu.controller.ts +64 -6
  62. package/src/controller/control/gantt/gantt.controller.ts +3 -3
  63. package/src/controller/control/grid/grid/entity-schema.ts +105 -0
  64. package/src/controller/control/grid/grid/grid.controller.ts +57 -1
  65. package/src/controller/control/grid/grid/grid.service.ts +1 -1
  66. package/src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts +1 -1
  67. package/src/controller/control/search-bar/entity-schema.ts +178 -0
  68. package/src/controller/control/search-bar/search-bar-filter.controller.ts +32 -9
  69. package/src/controller/control/search-bar/search-bar.controller.ts +69 -9
  70. package/src/controller/control/tree-grid-ex/tree-grid-ex.controller.ts +2 -2
  71. package/src/controller/utils/index.ts +1 -0
  72. package/src/controller/utils/jsonschema/entity.ts +19 -0
  73. package/src/controller/utils/jsonschema/index.ts +1 -0
  74. package/src/interface/provider/i-app-menu-item.provider.ts +40 -0
  75. package/src/interface/provider/index.ts +1 -0
  76. package/src/interface/service/i-data-entity/i-data-entity.ts +0 -19
  77. package/src/register/helper/app-menu-item-register.ts +65 -0
  78. package/src/register/helper/index.ts +1 -0
  79. package/src/service/app-data-entity/app-data-entity.ts +11 -46
  80. package/src/service/de-service-util.ts +1 -1
  81. package/src/service/service/entity/method/de-action.ts +44 -4
  82. package/src/service/utils/de-cache/de-cache.ts +3 -3
  83. package/src/utils/open-redirect-view/open-redirect-view.ts +31 -4
@@ -1,5 +1,5 @@
1
1
  import { clone, isNil } from 'ramda';
2
- import { DataTypes, HistoryList } from '@ibiz-template/core';
2
+ import { DataTypes } from '@ibiz-template/core';
3
3
  import { createUUID } from 'qx-util';
4
4
  import { Srfuf } from '../constant';
5
5
  import { findModelChild } from '../../model';
@@ -24,7 +24,6 @@ export class AppDataEntity {
24
24
  * @param {(IData | AppDataEntity)} [data={}]
25
25
  */
26
26
  constructor(entity, data = {}) {
27
- let history = new HistoryList(data instanceof AppDataEntity ? clone(data._data) : clone(data));
28
27
  Object.defineProperty(this, '_entity', {
29
28
  enumerable: false,
30
29
  configurable: true,
@@ -33,19 +32,7 @@ export class AppDataEntity {
33
32
  Object.defineProperty(this, '_data', {
34
33
  enumerable: false,
35
34
  configurable: true,
36
- get() {
37
- return history.data;
38
- },
39
- });
40
- Object.defineProperty(this, 'history', {
41
- enumerable: false,
42
- configurable: true,
43
- set(v) {
44
- history = v;
45
- },
46
- get() {
47
- return history;
48
- },
35
+ value: data instanceof AppDataEntity ? clone(data._data) : clone(data),
49
36
  });
50
37
  Object.defineProperty(this, 'srfdeid', {
51
38
  get() {
@@ -117,19 +104,17 @@ export class AppDataEntity {
117
104
  */
118
105
  defineProperties() {
119
106
  var _a;
120
- // eslint-disable-next-line @typescript-eslint/no-this-alias
121
- const self = this; // _data 不可以解构,或重新声明变量会断掉引用
122
- const { convertVal } = this;
107
+ const { _data, convertVal } = this;
123
108
  const properties = {};
124
- const keys = Object.keys(this._data);
109
+ const keys = Object.keys(_data);
125
110
  keys.forEach(key => {
126
111
  properties[key] = {
127
112
  enumerable: true,
128
113
  set(val) {
129
- self._data[key] = val;
114
+ _data[key] = val;
130
115
  },
131
116
  get() {
132
- return self._data[key];
117
+ return _data[key];
133
118
  },
134
119
  };
135
120
  });
@@ -138,14 +123,14 @@ export class AppDataEntity {
138
123
  properties[key] = {
139
124
  enumerable: true,
140
125
  set(val) {
141
- self._data[key] = convertVal(val, field.stdDataType);
126
+ _data[key] = convertVal(val, field.stdDataType);
142
127
  },
143
128
  get() {
144
- return self._data[key];
129
+ return _data[key];
145
130
  },
146
131
  };
147
132
  // 初始值转换
148
- self._data[key] = convertVal(self._data[key], field.stdDataType);
133
+ _data[key] = convertVal(_data[key], field.stdDataType);
149
134
  });
150
135
  Object.defineProperties(this, properties);
151
136
  }
@@ -157,9 +142,8 @@ export class AppDataEntity {
157
142
  * @return {*} {AppDataEntity}
158
143
  */
159
144
  clone() {
160
- const entity = new AppDataEntity(this._entity);
145
+ const entity = new AppDataEntity(this._entity, this._data);
161
146
  entity.srfkey = this.srfkey;
162
- entity.history = clone(this.history);
163
147
  return entity;
164
148
  }
165
149
  /**
@@ -183,23 +167,9 @@ export class AppDataEntity {
183
167
  delete _data[key];
184
168
  }
185
169
  });
186
- this.history.assign(_data);
170
+ Object.assign(this._data, _data);
187
171
  return this;
188
172
  }
189
- /**
190
- * 实体对象销毁
191
- *
192
- * @author chitanda
193
- * @date 2023-12-28 21:12:24
194
- */
195
- destroy() {
196
- this.history.destroy();
197
- Object.defineProperty(this, '_entity', {
198
- enumerable: false,
199
- configurable: true,
200
- value: null,
201
- });
202
- }
203
173
  /**
204
174
  * 根据属性的数据类型转换值
205
175
  * @author lxm
@@ -49,7 +49,7 @@ export class DEServiceUtil {
49
49
  * @return {*} {Promise<IAppDEService>}
50
50
  */
51
51
  async getService(context, id) {
52
- const sandboxId = context.srfsessionid;
52
+ const sandboxId = context.srfsessionid || 'applocation';
53
53
  if (!this.cache.has(sandboxId)) {
54
54
  this.cache.set(sandboxId, new Map());
55
55
  }
@@ -132,5 +132,16 @@ export declare class DEActionMethod extends Method {
132
132
  * @return {*} {Promise<IHttpResponse>}
133
133
  */
134
134
  removeBatchTemp(_context: IParams, _params?: IParams): Promise<IHttpResponse>;
135
+ /**
136
+ * 在新建、更新时,根据界面域下的关系,自动填充相关父属性
137
+ *
138
+ * @author chitanda
139
+ * @date 2024-01-02 15:01:30
140
+ * @protected
141
+ * @param {IContext} context
142
+ * @param {IDataEntity} data
143
+ * @return {*} {IDataEntity}
144
+ */
145
+ protected attach(context: IContext, data: IDataEntity): IDataEntity;
135
146
  }
136
147
  //# sourceMappingURL=de-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"de-action.d.ts","sourceRoot":"","sources":["../../../../../src/service/service/entity/method/de-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EACZ,aAAa,EAGd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,MAAM;IAChC,MAAM,EAAE,YAAY,CAAC;IAE7B;;;;;;;OAOG;IACG,WAAW,CACf,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,GACpB,OAAO,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC;IAQrB,IAAI,CACR,OAAO,EAAE,QAAQ,EACjB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAsF/B;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAatC;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAYtC;;;;;;;;;OASG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAiBtC;;;;;;;;OAQG;IACG,GAAG,CACP,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAatC;;;;;;;;OAQG;IACG,QAAQ,CACZ,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAUhC;;;;;;;;OAQG;IACG,UAAU,CACd,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAiBtC;;;;;;;;OAQG;IACG,YAAY,CAChB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAatC;;;;;;;;OAQG;IACG,UAAU,CACd,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAmBtC;;;;;;;;OAQG;IACG,UAAU,CACd,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAoBtC;;;;;;;;OAQG;IACG,OAAO,CACX,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAoBtC;;;;;;OAMG;IACG,eAAe,CACnB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC;CAc1B"}
1
+ {"version":3,"file":"de-action.d.ts","sourceRoot":"","sources":["../../../../../src/service/service/entity/method/de-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EACZ,aAAa,EAGd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIpD;;;;;;;;GAQG;AACH,qBAAa,cAAe,SAAQ,MAAM;IAChC,MAAM,EAAE,YAAY,CAAC;IAE7B;;;;;;;OAOG;IACG,WAAW,CACf,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,GAAG,KAAK,EAAE,GACpB,OAAO,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC;IAQrB,IAAI,CACR,OAAO,EAAE,QAAQ,EACjB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAsF/B;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAatC;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAYtC;;;;;;;;;OASG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACtB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAiBtC;;;;;;;;OAQG;IACG,GAAG,CACP,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAatC;;;;;;;;OAQG;IACG,QAAQ,CACZ,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAUhC;;;;;;;;OAQG;IACG,UAAU,CACd,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAuBtC;;;;;;;;OAQG;IACG,YAAY,CAChB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAatC;;;;;;;;OAQG;IACG,UAAU,CACd,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAmBtC;;;;;;;;OAQG;IACG,UAAU,CACd,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GACtB,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IA0BtC;;;;;;;;OAQG;IACG,OAAO,CACX,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAoBtC;;;;;;OAMG;IACG,eAAe,CACnB,QAAQ,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC;IAezB;;;;;;;;;OASG;IACH,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,WAAW;CAiBpE"}
@@ -211,10 +211,10 @@ export class DEActionMethod extends Method {
211
211
  const addData = this.createEntity(entity);
212
212
  let resultData;
213
213
  if (isArray(addData)) {
214
- resultData = await Promise.all(addData.map(item => this.service.local.add(context, item)));
214
+ resultData = await Promise.all(addData.map(item => this.service.local.add(context, this.attach(context, item))));
215
215
  }
216
216
  else {
217
- resultData = await this.service.local.add(context, addData);
217
+ resultData = await this.service.local.add(context, this.attach(context, addData));
218
218
  }
219
219
  return new HttpResponse(resultData);
220
220
  }
@@ -286,10 +286,10 @@ export class DEActionMethod extends Method {
286
286
  const updateData = this.createEntity(entity);
287
287
  let resultData;
288
288
  if (isArray(updateData)) {
289
- resultData = await Promise.all(updateData.map(item => this.service.local.update(context, item)));
289
+ resultData = await Promise.all(updateData.map(item => this.service.local.update(context, this.attach(context, item))));
290
290
  }
291
291
  else {
292
- resultData = await this.service.local.update(context, updateData);
292
+ resultData = await this.service.local.update(context, this.attach(context, updateData));
293
293
  }
294
294
  if (resultData) {
295
295
  return new HttpResponse(resultData);
@@ -350,4 +350,31 @@ export class DEActionMethod extends Method {
350
350
  // }
351
351
  return new HttpResponse(true);
352
352
  }
353
+ /**
354
+ * 在新建、更新时,根据界面域下的关系,自动填充相关父属性
355
+ *
356
+ * @author chitanda
357
+ * @date 2024-01-02 15:01:30
358
+ * @protected
359
+ * @param {IContext} context
360
+ * @param {IDataEntity} data
361
+ * @return {*} {IDataEntity}
362
+ */
363
+ attach(context, data) {
364
+ const sandboxId = context.srfsessionid;
365
+ const uiDomain = ibiz.uiDomainManager.get(sandboxId);
366
+ const configs = uiDomain.getDERConfig(this.entity.id);
367
+ if (configs.length > 0) {
368
+ configs.forEach(config => {
369
+ const { majorDECodeName, pickupDEFName } = config;
370
+ const majorLowerCodeName = majorDECodeName.toLowerCase();
371
+ const pickupLowerDEFName = pickupDEFName.toLowerCase();
372
+ const majorkey = context[majorLowerCodeName];
373
+ if (majorkey) {
374
+ data[pickupLowerDEFName] = majorkey;
375
+ }
376
+ });
377
+ }
378
+ return data;
379
+ }
353
380
  }
@@ -422,9 +422,9 @@ export class DECache {
422
422
  * @date 2023-12-22 13:12:17
423
423
  */
424
424
  clear() {
425
- this.cacheMap.forEach(item => {
426
- item.destroy();
427
- });
425
+ // this.cacheMap.forEach(item => {
426
+ // item.destroy();
427
+ // });
428
428
  this.cacheMap.clear();
429
429
  }
430
430
  /**
@@ -23,14 +23,27 @@ export declare function openRedirectView(appView: IAppRedirectView, context: ICo
23
23
  * 本地打开工作流重定向视图
24
24
  *
25
25
  * @description 工作流 appredirectview 特殊处理,全局通过 appredirectview 跳转工作流重定向,均使用此方法
26
- * @author chitanda
27
- * @date 2023-01-12 11:01:40
26
+ * @author zk
27
+ * @date 2024-01-02 11:01:16
28
+ * @export
29
+ * @param {IContext} context
30
+ * @param {string} linkUrl
31
+ * @param {IOpenViewOptions} [opts={}]
32
+ * @return {*} {Promise<void>}
33
+ */
34
+ export declare function toLocalOpenWFRedirectView(context: IContext, linkUrl: string, opts?: IOpenViewOptions): Promise<void>;
35
+ /**
36
+ * 获取本地打开工作流重定向视图的相关信息
37
+ *
38
+ * @author zk
39
+ * @date 2024-01-02 11:01:38
28
40
  * @export
29
- * @param {IAppDERedirectView} appView
30
41
  * @param {IContext} context
31
42
  * @param {string} linkUrl
43
+ * @param {IOpenViewOptions} [opts={}]
44
+ * @return {*} {Promise<ToViewParams>}
32
45
  */
33
- export declare function toLocalOpenWFRedirectView(context: IContext, linkUrl: string, opts?: IOpenViewOptions): Promise<ToViewParams>;
46
+ export declare function getLocalOpenWFRedirectView(context: IContext, linkUrl: string, opts?: IOpenViewOptions): Promise<ToViewParams>;
34
47
  /**
35
48
  * 获取处理后的重定向视图最终要跳转视图的相关信息
36
49
  * @author lxm
@@ -1 +1 @@
1
- {"version":3,"file":"open-redirect-view.d.ts","sourceRoot":"","sources":["../../../src/utils/open-redirect-view/open-redirect-view.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAK/D,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAoDvB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAAC,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAsG3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,MAAM,CAAC,CA6CjB"}
1
+ {"version":3,"file":"open-redirect-view.d.ts","sourceRoot":"","sources":["../../../src/utils/open-redirect-view/open-redirect-view.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAK/D,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,YAAY,CAAC,CAoDvB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,YAAY,CAAC,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAsG3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,MAAM,CAAC,CA6CjB"}
@@ -23,14 +23,30 @@ export async function openRedirectView(appView, context, params = {}, opts = {})
23
23
  * 本地打开工作流重定向视图
24
24
  *
25
25
  * @description 工作流 appredirectview 特殊处理,全局通过 appredirectview 跳转工作流重定向,均使用此方法
26
- * @author chitanda
27
- * @date 2023-01-12 11:01:40
26
+ * @author zk
27
+ * @date 2024-01-02 11:01:16
28
28
  * @export
29
- * @param {IAppDERedirectView} appView
30
29
  * @param {IContext} context
31
30
  * @param {string} linkUrl
31
+ * @param {IOpenViewOptions} [opts={}]
32
+ * @return {*} {Promise<void>}
32
33
  */
33
34
  export async function toLocalOpenWFRedirectView(context, linkUrl, opts = {}) {
35
+ const toView = await getLocalOpenWFRedirectView(context, linkUrl, opts);
36
+ await ibiz.commands.execute(OpenAppViewCommand.TAG, toView.viewId, toView.context, toView.params, toView.opts);
37
+ }
38
+ /**
39
+ * 获取本地打开工作流重定向视图的相关信息
40
+ *
41
+ * @author zk
42
+ * @date 2024-01-02 11:01:38
43
+ * @export
44
+ * @param {IContext} context
45
+ * @param {string} linkUrl
46
+ * @param {IOpenViewOptions} [opts={}]
47
+ * @return {*} {Promise<ToViewParams>}
48
+ */
49
+ export async function getLocalOpenWFRedirectView(context, linkUrl, opts = {}) {
34
50
  const i = linkUrl.lastIndexOf('?');
35
51
  const queryStr = decodeURIComponent(linkUrl.substring(i + 1, linkUrl.length));
36
52
  const params = qs.parse(queryStr, { delimiter: ';' });
@@ -123,7 +139,7 @@ export async function getDERedirectToView(appView, context, params = {}, opts =
123
139
  return { type: 'url', url: linkUrl };
124
140
  }
125
141
  if (linkUrl.startsWith('appredirectview?')) {
126
- const toView = await toLocalOpenWFRedirectView(context, linkUrl, opts);
142
+ const toView = await getLocalOpenWFRedirectView(context, linkUrl, opts);
127
143
  return Object.assign({ type: 'view' }, toView);
128
144
  }
129
145
  throw new RuntimeError(`未支持的linkUrl格式:${linkUrl}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.5.0-beta.4",
3
+ "version": "0.5.0-beta.5",
4
4
  "description": "控制器包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -29,7 +29,7 @@
29
29
  "author": "chitanda",
30
30
  "license": "MIT",
31
31
  "devDependencies": {
32
- "@ibiz-template/core": "^0.5.0-beta.4",
32
+ "@ibiz-template/core": "^0.5.0-beta.5",
33
33
  "@ibiz/model-core": "^0.1.0",
34
34
  "@types/path-browserify": "^1.0.2",
35
35
  "@types/qs": "^6.9.11",
@@ -59,5 +59,5 @@
59
59
  "qx-util": "^0.4.8",
60
60
  "ramda": "^0.29.0"
61
61
  },
62
- "gitHead": "5ae4c48f5f1ade5134d8fc90b3fd176fbe102149"
62
+ "gitHead": "36616d6d81c619f3cc135c4c9c52cf607b357adc"
63
63
  }
@@ -10,9 +10,12 @@ import {
10
10
  IAppMenuEvent,
11
11
  IAppMenuController,
12
12
  IAppService,
13
+ IAppMenuItemProvider,
13
14
  } from '../../../interface';
14
15
  import { AppCounter } from '../../../service';
15
16
  import { ControlController } from '../../common';
17
+ import { getAppMenuItemProvider } from '../../../register';
18
+ import { CTX } from '../../ctx';
16
19
 
17
20
  /**
18
21
  * 应用菜单控制器
@@ -34,6 +37,22 @@ export class AppMenuController
34
37
  this.state.menuItemsState = {};
35
38
  }
36
39
 
40
+ /**
41
+ * 所有菜单项,平铺开
42
+ * @author lxm
43
+ * @date 2023-12-29 02:43:35
44
+ * @type {IAppMenuItem[]}
45
+ */
46
+ allAppMenuItems!: IAppMenuItem[];
47
+
48
+ /**
49
+ * 菜单项适配器集合
50
+ * @author lxm
51
+ * @date 2023-07-19 04:14:50
52
+ * @type {{ [key: string]: IProvider }}
53
+ */
54
+ itemProviders: { [key: string]: IAppMenuItemProvider } = {};
55
+
37
56
  /**
38
57
  * 视图层级
39
58
  *
@@ -45,10 +64,15 @@ export class AppMenuController
45
64
  return this.view.modal.routeDepth;
46
65
  }
47
66
 
67
+ constructor(model: IAppMenu, context: IContext, params: IParams, ctx: CTX) {
68
+ super(model, context, params, ctx);
69
+ this.flattenAllItems();
70
+ }
71
+
48
72
  protected async onCreated(): Promise<void> {
49
73
  await super.onCreated();
50
-
51
74
  this.app = await ibiz.hub.getApp(this.context.srfappid);
75
+ await this.initAppMenuItemProviders();
52
76
 
53
77
  // 初始化菜单项状态
54
78
  this.model.appMenuItems?.forEach(item => {
@@ -56,6 +80,24 @@ export class AppMenuController
56
80
  });
57
81
  }
58
82
 
83
+ /**
84
+ * 初始化菜单项的适配器
85
+ * @author lxm
86
+ * @date 2023-12-29 02:50:20
87
+ * @protected
88
+ * @return {*} {Promise<void>}
89
+ */
90
+ protected async initAppMenuItemProviders(): Promise<void> {
91
+ await Promise.all(
92
+ this.allAppMenuItems.map(async item => {
93
+ const provider = await getAppMenuItemProvider(item);
94
+ if (provider) {
95
+ this.itemProviders[item.id!] = provider;
96
+ }
97
+ }),
98
+ );
99
+ }
100
+
59
101
  /**
60
102
  * 菜单项点击回调,触发对应的应用功能
61
103
  *
@@ -82,6 +124,12 @@ export class AppMenuController
82
124
  event,
83
125
  });
84
126
 
127
+ // 如果有适配器,走适配器的点击处理
128
+ const provider = this.itemProviders[id];
129
+ if (provider && provider.onClick) {
130
+ return provider.onClick(menuItem, event as MouseEvent, this);
131
+ }
132
+
85
133
  if (!menuItem.appFuncId) {
86
134
  throw new RuntimeModelError(menuItem, '没有配置应用功能');
87
135
  }
@@ -139,11 +187,11 @@ export class AppMenuController
139
187
 
140
188
  /**
141
189
  * 所有项平铺
142
- * @return {*}
143
- * @author: zhujiamin
144
- * @Date: 2022-09-09 16:48:21
190
+ * @author lxm
191
+ * @date 2023-12-29 02:42:39
192
+ * @protected
145
193
  */
146
- getAllItems(): IAppMenuItem[] {
194
+ protected flattenAllItems(): void {
147
195
  const result: IAppMenuItem[] = [];
148
196
  const flattenMenus = (menuItems: IAppMenuItem[]): void => {
149
197
  menuItems.forEach(item => {
@@ -154,7 +202,17 @@ export class AppMenuController
154
202
  });
155
203
  };
156
204
  flattenMenus(this.model.appMenuItems!);
157
- return result;
205
+ this.allAppMenuItems = result;
206
+ }
207
+
208
+ /**
209
+ * 所有项平铺
210
+ * @return {*}
211
+ * @author: zhujiamin
212
+ * @Date: 2022-09-09 16:48:21
213
+ */
214
+ getAllItems(): IAppMenuItem[] {
215
+ return this.allAppMenuItems;
158
216
  }
159
217
 
160
218
  /**
@@ -11,6 +11,7 @@ import {
11
11
  } from '../../../interface';
12
12
  import { GanttService } from './gantt.service';
13
13
  import { TreeGridExController } from '../tree-grid-ex';
14
+ import { calcDeCodeNameById } from '../../../model';
14
15
 
15
16
  /**
16
17
  * 甘特图控制器
@@ -37,7 +38,6 @@ export class GanttController
37
38
  */
38
39
  protected initState(): void {
39
40
  super.initState();
40
- this.state.rootNodes = [];
41
41
  this.state.ganttStyle = {};
42
42
  }
43
43
 
@@ -123,9 +123,9 @@ export class GanttController
123
123
  ? this.transformNodeDataItem(nodeModel, data)
124
124
  : data;
125
125
  if (Object.keys(newData).length > 0) {
126
- const [, entityCodename] = nodeModel.appDataEntityId!.split('.');
126
+ const deName = calcDeCodeNameById(nodeModel.appDataEntityId!);
127
127
  const tempContext = Object.assign(this.context.clone(), {
128
- [entityCodename]: currentNode.srfkey,
128
+ [deName]: currentNode.srfkey,
129
129
  });
130
130
  const response = await this.service.execDeService(
131
131
  nodeModel.appDataEntityId!,
@@ -0,0 +1,105 @@
1
+ import { IDEGridDataItem, IDEGridFieldColumn } from '@ibiz/model-core';
2
+ import { GridController } from './grid.controller';
3
+
4
+ const TypeToDataType: { [p: string]: number } = {
5
+ string: 25,
6
+ number: 6,
7
+ integer: 9,
8
+ date: 5,
9
+ } as const;
10
+
11
+ /**
12
+ * 根据json模型计算出表格列模型
13
+ * @author lxm
14
+ * @date 2024-01-02 10:27:40
15
+ * @export
16
+ * @param {IData} json
17
+ * @param {SearchBarController} c
18
+ * @return {*} {ISearchBarFilter[]}
19
+ */
20
+ export async function calcColumnModelBySchema(
21
+ json: IData,
22
+ c: GridController,
23
+ ): Promise<
24
+ | { degridColumns: IDEGridFieldColumn[]; degridDataItems: IDEGridDataItem[] }
25
+ | undefined
26
+ > {
27
+ if (!json.properties) {
28
+ return;
29
+ }
30
+ const { properties } = json;
31
+ if (!(Object.keys(properties).length > 0)) {
32
+ return;
33
+ }
34
+
35
+ const addFields: {
36
+ key: string;
37
+ description: string;
38
+ type: string;
39
+ }[] = [];
40
+ Object.keys(properties).forEach((key: string) => {
41
+ let type: string;
42
+
43
+ switch (properties[key].type) {
44
+ case 'string':
45
+ type = 'string';
46
+ if (properties[key].format === 'date-time') {
47
+ type = 'date';
48
+ }
49
+ break;
50
+ case 'integer':
51
+ type = 'integer';
52
+ break;
53
+ case 'number':
54
+ type = 'number';
55
+ break;
56
+ default:
57
+ ibiz.log.error(`未支持的类型${properties[key].type}`);
58
+ return;
59
+ }
60
+
61
+ addFields.push({
62
+ key,
63
+ description: properties[key].description,
64
+ type,
65
+ });
66
+ });
67
+
68
+ // 属性codeName对应的属性id
69
+ const codeNameToId: { [p: string]: string } = {};
70
+ const dataEntity = await ibiz.hub.getAppDataEntity(
71
+ c.model.appDataEntityId!,
72
+ c.model.appId,
73
+ );
74
+ dataEntity.appDEFields?.forEach(field => {
75
+ codeNameToId[field.codeName!.toLowerCase()] = field.id!;
76
+ });
77
+
78
+ const addColumns: IDEGridFieldColumn[] = [];
79
+ const addDataItems: IDEGridDataItem[] = [];
80
+
81
+ addFields.forEach(item => {
82
+ addColumns.push({
83
+ appId: c.model.appId,
84
+ appDEFieldId: codeNameToId[item.key],
85
+ id: item.key,
86
+ codeName: item.key,
87
+ columnType: 'DEFGRIDCOLUMN',
88
+ width: 150,
89
+ widthUnit: 'PX',
90
+ valueType: 'SIMPLE',
91
+ caption: item.description,
92
+ dataItemName: item.key,
93
+ });
94
+
95
+ addDataItems.push({
96
+ appId: c.model.appId,
97
+ appDEFieldId: codeNameToId[item.key],
98
+ id: item.key,
99
+ valueType: 'SIMPLE',
100
+ dataType: TypeToDataType[item.type],
101
+ });
102
+ });
103
+
104
+ return { degridColumns: addColumns, degridDataItems: addDataItems };
105
+ }
@@ -40,8 +40,14 @@ import { getGridColumnProvider } from '../../../../register';
40
40
  import { ControlVO, Srfuf } from '../../../../service';
41
41
  import { MDControlController } from '../../../common';
42
42
  import { GridNotifyState } from '../../../constant';
43
- import { exportData, getDefaultValue, isValueChange } from '../../../utils';
43
+ import {
44
+ exportData,
45
+ getDefaultValue,
46
+ getEntitySchema,
47
+ isValueChange,
48
+ } from '../../../utils';
44
49
  import { handleAllSettled, ScriptFactory } from '../../../../utils';
50
+ import { calcColumnModelBySchema } from './entity-schema';
45
51
 
46
52
  /**
47
53
  * 表格控制器
@@ -81,6 +87,14 @@ export class GridController
81
87
  */
82
88
  isMultistageHeader: boolean = false;
83
89
 
90
+ /**
91
+ * 是否添加jsonschema里定义的表格列
92
+ * @author lxm
93
+ * @date 2024-01-02 05:27:16
94
+ * @type {boolean}
95
+ */
96
+ addSchemaColumn: boolean = false;
97
+
84
98
  /**
85
99
  * 所有表格列控制器集合
86
100
  *
@@ -221,6 +235,8 @@ export class GridController
221
235
  * @returns {*} {Promise<void>}
222
236
  */
223
237
  protected async onCreated(): Promise<void> {
238
+ await this.initByEntitySchema();
239
+
224
240
  await super.onCreated();
225
241
 
226
242
  this.service = new GridService(this.model);
@@ -241,6 +257,46 @@ export class GridController
241
257
  await this.initGroup();
242
258
  }
243
259
 
260
+ /**
261
+ * 根据jsonschema初始化自定义表格列
262
+ * @author lxm
263
+ * @date 2024-01-02 04:41:23
264
+ * @return {*} {Promise<void>}
265
+ */
266
+ async initByEntitySchema(): Promise<void> {
267
+ if (!this.addSchemaColumn) {
268
+ return;
269
+ }
270
+
271
+ const json = await getEntitySchema(
272
+ this.model.appDataEntityId!,
273
+ this.context,
274
+ );
275
+ if (!json) {
276
+ return;
277
+ }
278
+
279
+ const result = await calcColumnModelBySchema(json, this);
280
+ if (result && result.degridColumns.length > 0) {
281
+ const { degridColumns, degridDataItems } = result;
282
+ // 修改模型之前拷贝一份,避免污染原始数据
283
+ (this as IData).model = clone(this.model);
284
+ this.model.degridColumns = [
285
+ ...(this.model.degridColumns || []).filter(item => {
286
+ return degridColumns.findIndex(x => x.id === item.id) === -1;
287
+ }),
288
+ ...degridColumns,
289
+ ];
290
+
291
+ this.model.degridDataItems = [
292
+ ...(this.model.degridDataItems || []).filter(item => {
293
+ return degridDataItems.findIndex(x => x.id === item.id) === -1;
294
+ }),
295
+ ...degridDataItems!,
296
+ ];
297
+ }
298
+ }
299
+
244
300
  /**
245
301
  * 初始化表格分组
246
302
  * @author lxm