@ibiz-template/runtime 0.7.41-alpha.100 → 0.7.41-alpha.101

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.
@@ -1 +1 @@
1
- {"version":3,"file":"app-menu.controller.d.ts","sourceRoot":"","sources":["../../../../src/controller/control/app-menu/app-menu.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-menu.controller.d.ts","sourceRoot":"","sources":["../../../../src/controller/control/app-menu/app-menu.controller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAGvE;;;;;;;;GAQG;AACH,qBAAa,iBACX,SAAQ,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAChE,YAAW,kBAAkB;IAE7B,GAAG,EAAG,WAAW,CAAC;IAElB,SAAS,CAAC,SAAS,IAAI,IAAI;IAQ3B;;;;;OAKG;IACH,eAAe,EAAG,YAAY,EAAE,CAAC;IAEjC;;;;;OAKG;IACH,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE,CAAM;IAE5D;;;;;OAKG;IACH,gBAAgB,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IAExD;;;;OAIG;IACH,OAAO,CAAC,EAAE,UAAU,CAAC;IAErB;;;;;OAKG;IACI,WAAW,EAAE,KAAK,EAAE,CAAM;IAEjC;;;;;;OAMG;IACH,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED;;;;;OAKG;IACH,IAAI,SAAS,IAAI,MAAM,CAItB;IAED;;;;;;;;;;OAUG;IACH,IAAI,eAAe,IACf,WAAW,GACX,MAAM,GACN,SAAS,GACT,OAAO,GACP,YAAY,GACZ,UAAU,CAMb;gBAEW,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG;cAQzD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB1C;;;;;OAKG;cACa,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAO1C;;;;;;OAMG;YACW,oBAAoB;IASlC;;;;;OAKG;IACG,uBAAuB,CAC3B,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC;IAchB;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAIlC;;;;OAIG;IACH,WAAW,IAAI,IAAI;IAQnB;;;;OAIG;IACH,gBAAgB,IAAI,IAAI;IAgCxB;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO;IAQnD;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IA+BjC;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;;;;;OAMG;cACa,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAWzD;;;;;;;OAOG;IACG,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,KAAK,CAAC,EAAE,UAAU,EAClB,QAAQ,GAAE,OAAc,EACxB,IAAI,GAAE,KAAU,GACf,OAAO,CAAC,IAAI,CAAC;IAmDhB;;;;;;OAMG;IAEH,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG;QACrC,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC;KACpB;IAwBD;;;;;OAKG;IACH,SAAS,CAAC,eAAe,IAAI,IAAI;IAcjC;;;;;OAKG;IACH,WAAW,IAAI,YAAY,EAAE;IAI7B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IASzC;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,IAAI,IAAI;IAqB1C;;;;OAIG;IACH,sBAAsB,IAAI,YAAY,GAAG,SAAS;IASlD;;;;OAIG;IACH,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAOxC;;;;;OAKG;cACa,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7C"}
@@ -3,6 +3,7 @@ import { AppFuncCommand } from '../../../command';
3
3
  import { ControlController } from '../../common';
4
4
  import { getAppMenuItemProvider } from '../../../register';
5
5
  import { CustomAppMenuController } from './custom-app-menu.controller';
6
+ import { calcDynamicMenu } from '../../../utils';
6
7
  /**
7
8
  * 应用菜单控制器
8
9
  *
@@ -87,8 +88,9 @@ export class AppMenuController extends ControlController {
87
88
  }
88
89
  async onCreated() {
89
90
  var _a;
90
- await super.onCreated();
91
91
  this.app = await ibiz.hub.getApp(this.context.srfappid);
92
+ await calcDynamicMenu(this.model, this.context, this.params);
93
+ await super.onCreated();
92
94
  await this.initAppMenuItemProviders();
93
95
  // 初始化菜单项状态
94
96
  (_a = this.model.appMenuItems) === null || _a === void 0 ? void 0 : _a.forEach(item => {
@@ -400,7 +402,7 @@ export class AppMenuController extends ControlController {
400
402
  }
401
403
  });
402
404
  };
403
- flattenMenus(this.model.appMenuItems);
405
+ flattenMenus(this.model.appMenuItems || []);
404
406
  this.allAppMenuItems = result;
405
407
  }
406
408
  /**
@@ -26,6 +26,20 @@ export declare class FetchMethod extends Method {
26
26
  * @return {*} {Promise<IDataEntity[]>}
27
27
  */
28
28
  searchLocal(cond: PSDEDQCondEngine | null, filter: SearchFilter, queryParamKeys?: string[]): Promise<IDataEntity[]>;
29
+ /**
30
+ * 搜索本地数据(带元数据)
31
+ * @param cond 查询实例
32
+ * @param filter 过滤对象
33
+ * @param queryParamKeys 当前实体支持快速搜索的属性
34
+ * @returns 数据列表和分页信息
35
+ */
36
+ searchLocalWithMeta(cond: PSDEDQCondEngine | null, filter: SearchFilter, queryParamKeys?: string[]): Promise<{
37
+ items: IDataEntity[];
38
+ total: number;
39
+ page: number;
40
+ size: number;
41
+ totalPages: number;
42
+ }>;
29
43
  /**
30
44
  * 获取代码表数据来源的集合
31
45
  * @author lxm
@@ -35,5 +49,13 @@ export declare class FetchMethod extends Method {
35
49
  * @return {*} {Promise<HttpResponse<IData[]>>}
36
50
  */
37
51
  protected fetchCodeListSet(context: IContext, params: IParams): Promise<HttpResponse<IData[]>>;
52
+ /**
53
+ * 获取代码表数据来源的集合(带元数据)
54
+ *
55
+ * @param {IContext} context
56
+ * @param {IParams} params
57
+ * @return {*} {Promise<HttpResponse<IData[]>>}
58
+ */
59
+ protected fetchCodeListSetWithMeta(context: IContext, params: IParams): Promise<HttpResponse<IData[]>>;
38
60
  }
39
61
  //# sourceMappingURL=fetch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../../src/service/service/entity/method/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAgB,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,MAAM;IAC7B,MAAM,EAAE,aAAa,CAAC;IAExB,IAAI,CACR,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,KAAK,GACb,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAmEvC;;;;;;;;;OASG;IACG,WAAW,CACf,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,MAAM,EAAE,YAAY,EACpB,cAAc,GAAE,MAAM,EAA0C,GAC/D,OAAO,CAAC,WAAW,EAAE,CAAC;IAsDzB;;;;;;;OAOG;cACa,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;CAqBlC"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../../src/service/service/entity/method/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGb,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EAAgB,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,MAAM;IAC7B,MAAM,EAAE,aAAa,CAAC;IAExB,IAAI,CACR,OAAO,EAAE,QAAQ,EACjB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,KAAK,GACb,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAyEvC;;;;;;;;;OASG;IACG,WAAW,CACf,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,MAAM,EAAE,YAAY,EACpB,cAAc,GAAE,MAAM,EAA0C,GAC/D,OAAO,CAAC,WAAW,EAAE,CAAC;IAsDzB;;;;;;OAMG;IACG,mBAAmB,CACvB,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,MAAM,EAAE,YAAY,EACpB,cAAc,GAAE,MAAM,EAA0C,GAC/D,OAAO,CAAC;QACT,KAAK,EAAE,WAAW,EAAE,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IA4DF;;;;;;;OAOG;cACa,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;IAsBjC;;;;;;OAMG;cACa,wBAAwB,CACtC,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC;CAyBlC"}
@@ -35,15 +35,20 @@ export class FetchMethod extends Method {
35
35
  }
36
36
  const cond = DEDQCondUtil.getCond(this.method);
37
37
  const filter = new SearchFilter(context, searchParams);
38
- const items = await this.searchLocal(cond, filter);
39
- res = new HttpResponse(items, 200);
38
+ const { items, total, page, size, totalPages } = await this.searchLocalWithMeta(cond, filter);
39
+ res = new HttpResponse(items, 200, '', {
40
+ 'x-total': total,
41
+ 'x-page': page,
42
+ 'x-per-page': size,
43
+ 'x-total-pages': totalPages,
44
+ });
40
45
  }
41
46
  else {
42
47
  switch (this.method.dataSetType) {
43
48
  case 'INDEXDE':
44
49
  case 'CODELIST':
45
50
  case 'MULTIFORM':
46
- res = await this.fetchCodeListSet(context, searchParams);
51
+ res = await this.fetchCodeListSetWithMeta(context, searchParams);
47
52
  break;
48
53
  case 'REMOTE':
49
54
  {
@@ -130,10 +135,77 @@ export class FetchMethod extends Method {
130
135
  }
131
136
  const { page, size } = filter;
132
137
  const start = page * size;
133
- const end = (page + 1) * size - 1;
138
+ const end = (page + 1) * size;
134
139
  const items = list.slice(start, end).map(item => clone(item));
135
140
  return items;
136
141
  }
142
+ /**
143
+ * 搜索本地数据(带元数据)
144
+ * @param cond 查询实例
145
+ * @param filter 过滤对象
146
+ * @param queryParamKeys 当前实体支持快速搜索的属性
147
+ * @returns 数据列表和分页信息
148
+ */
149
+ async searchLocalWithMeta(cond, filter, queryParamKeys = this.entity.quickSearchAppDEFieldIds) {
150
+ let list = this.service.local.getList();
151
+ // 走查询条件
152
+ if (cond) {
153
+ if (list.length > 0) {
154
+ list = list.filter(obj => cond.test(obj, filter));
155
+ }
156
+ }
157
+ if (list.length > 0) {
158
+ if (filter.query && filter.query !== '') {
159
+ if (queryParamKeys) {
160
+ list = list.filter(obj => {
161
+ const reg = new RegExp(filter.query.toLowerCase());
162
+ for (let i = 0; i < queryParamKeys.length; i += 1) {
163
+ const key = queryParamKeys[i];
164
+ const val = obj[key];
165
+ if (reg.test(val.toLowerCase())) {
166
+ return true;
167
+ }
168
+ }
169
+ return false;
170
+ });
171
+ }
172
+ }
173
+ }
174
+ if (!isNil(filter.sortField) && !isEmpty(filter.sortField)) {
175
+ if (filter.sortMode === 'DESC') {
176
+ // 倒序
177
+ list = descSort(list, filter.sortField);
178
+ }
179
+ else {
180
+ // 正序
181
+ list = ascSort(list, filter.sortField);
182
+ }
183
+ }
184
+ if (!isNil(filter.srfDefaultCond) && !isEmpty(filter.srfDefaultCond)) {
185
+ const defaultConds = filter.srfDefaultCond;
186
+ const defaultCondKeys = Object.keys(defaultConds);
187
+ list = list.filter(obj => {
188
+ for (let i = 0; i < defaultCondKeys.length; i += 1) {
189
+ const key = defaultCondKeys[i];
190
+ if (obj[key] === defaultConds[key]) {
191
+ return true;
192
+ }
193
+ }
194
+ return false;
195
+ });
196
+ }
197
+ const { page, size } = filter;
198
+ const start = page * size;
199
+ const end = (page + 1) * size;
200
+ const items = list.slice(start, end).map(item => clone(item));
201
+ return {
202
+ items,
203
+ total: list.length,
204
+ page,
205
+ size,
206
+ totalPages: Math.ceil(list.length / size),
207
+ };
208
+ }
137
209
  /**
138
210
  * 获取代码表数据来源的集合
139
211
  * @author lxm
@@ -155,4 +227,29 @@ export class FetchMethod extends Method {
155
227
  }));
156
228
  return new HttpResponse(dataSet, 200);
157
229
  }
230
+ /**
231
+ * 获取代码表数据来源的集合(带元数据)
232
+ *
233
+ * @param {IContext} context
234
+ * @param {IParams} params
235
+ * @return {*} {Promise<HttpResponse<IData[]>>}
236
+ */
237
+ async fetchCodeListSetWithMeta(context, params) {
238
+ const { appCodeListId } = this.method;
239
+ if (!appCodeListId) {
240
+ throw new RuntimeModelError(this.method, ibiz.i18n.t('runtime.service.sourceCodeTable'));
241
+ }
242
+ const codeItems = await this.app.codeList.get(appCodeListId, context, params);
243
+ const { keyAppDEFieldId, majorAppDEFieldId } = this.entity;
244
+ const dataSet = codeItems.map(item => ({
245
+ [keyAppDEFieldId]: item.value,
246
+ [majorAppDEFieldId]: item.text,
247
+ }));
248
+ return new HttpResponse(dataSet, 200, '', {
249
+ 'x-total': codeItems.length,
250
+ 'x-page': 0,
251
+ 'x-per-page': codeItems.length,
252
+ 'x-total-pages': 1,
253
+ });
254
+ }
158
255
  }
@@ -8,6 +8,21 @@ import { IErrorHandler } from '../../interface';
8
8
  * @implements {IErrorHandler}
9
9
  */
10
10
  export declare class DefaultErrorHandler implements IErrorHandler {
11
+ /**
12
+ * 错误去重时间间隔(300ms)
13
+ */
14
+ static DEDUP_INTERVAL: number;
15
+ /**
16
+ * 错误缓存
17
+ */
18
+ static errorCache: Map<string, number>;
19
+ /**
20
+ * 判断错误是否重复
21
+ */
22
+ static isDuplicate(message: string): boolean;
23
+ /**
24
+ * 处理错误
25
+ */
11
26
  handle(error: unknown): boolean | undefined;
12
27
  }
13
28
  //# sourceMappingURL=default-error-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-error-handler.d.ts","sourceRoot":"","sources":["../../../src/utils/error-handler/default-error-handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;CA8B5C"}
1
+ {"version":3,"file":"default-error-handler.d.ts","sourceRoot":"","sources":["../../../src/utils/error-handler/default-error-handler.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IACvD;;OAEG;IACH,MAAM,CAAC,cAAc,SAAO;IAE5B;;OAEG;IACH,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAEnD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAiB5C;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS;CAwC5C"}
@@ -8,23 +8,53 @@ import { RuntimeModelError, ModelError, HttpError, NoticeError, RuntimeError, }
8
8
  * @implements {IErrorHandler}
9
9
  */
10
10
  export class DefaultErrorHandler {
11
+ /**
12
+ * 判断错误是否重复
13
+ */
14
+ static isDuplicate(message) {
15
+ const { DEDUP_INTERVAL, errorCache } = DefaultErrorHandler;
16
+ const now = Date.now();
17
+ // 清理过期的缓存
18
+ for (const [key, time] of errorCache) {
19
+ if (now - time >= DEDUP_INTERVAL) {
20
+ errorCache.delete(key);
21
+ }
22
+ }
23
+ const lastTime = errorCache.get(message);
24
+ if (lastTime !== undefined) {
25
+ return true;
26
+ }
27
+ errorCache.set(message, now);
28
+ return false;
29
+ }
30
+ /**
31
+ * 处理错误
32
+ */
11
33
  handle(error) {
12
34
  var _a, _b;
35
+ const { isDuplicate } = DefaultErrorHandler;
13
36
  if (error instanceof RuntimeModelError || error instanceof ModelError) {
14
- ibiz.message.error(error.message, 10, true);
37
+ if (!isDuplicate(error.message)) {
38
+ ibiz.message.error(error.message, 10, true);
39
+ }
15
40
  }
16
41
  else if (error instanceof HttpError) {
17
42
  if (error.status === 401) {
18
- ibiz.message.error(ibiz.i18n.t('runtime.utils.errorHandler.noPermissionless'));
43
+ const msg = ibiz.i18n.t('runtime.utils.errorHandler.noPermissionless');
44
+ if (!isDuplicate(msg)) {
45
+ ibiz.message.error(msg);
46
+ }
19
47
  }
20
48
  else if (error.status === 404) {
21
49
  ibiz.mc.error.send(error);
22
50
  }
23
51
  else if (error.status === 500 &&
24
52
  ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.type) === 'DataEntityRuntimeException') {
25
- ibiz.message.error(error.message);
53
+ if (!isDuplicate(error.message)) {
54
+ ibiz.message.error(error.message);
55
+ }
26
56
  }
27
- else {
57
+ else if (!isDuplicate(error.message)) {
28
58
  ibiz.notification.error({
29
59
  title: '',
30
60
  desc: error.message,
@@ -33,12 +63,24 @@ export class DefaultErrorHandler {
33
63
  }
34
64
  }
35
65
  else if (error instanceof NoticeError) {
36
- ibiz.message.error(error.message, error.duration, error.duration === 0);
66
+ if (!isDuplicate(error.message)) {
67
+ ibiz.message.error(error.message, error.duration, error.duration === 0);
68
+ }
37
69
  }
38
70
  else if (error instanceof RuntimeError) {
39
- ibiz.message.error(error.message, 10, true);
71
+ if (!isDuplicate(error.message)) {
72
+ ibiz.message.error(error.message, 10, true);
73
+ }
40
74
  }
41
75
  ibiz.log.error(error);
42
76
  return true;
43
77
  }
44
78
  }
79
+ /**
80
+ * 错误去重时间间隔(300ms)
81
+ */
82
+ DefaultErrorHandler.DEDUP_INTERVAL = 300;
83
+ /**
84
+ * 错误缓存
85
+ */
86
+ DefaultErrorHandler.errorCache = new Map();
@@ -36,4 +36,5 @@ export * from './map-util/map-util';
36
36
  export * from './wechat-util/wechat-util';
37
37
  export * from './json-util/json-util';
38
38
  export * from './stringify-util/stringify-util';
39
+ export * from './model';
39
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,yCAAyC,CAAC;AACjD,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,cAAc,yBAAyB,CAAC;AACxC,OAAO,EACL,yBAAyB,EACzB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,yCAAyC,CAAC;AACjD,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,SAAS,CAAC"}
@@ -36,3 +36,4 @@ export * from './map-util/map-util';
36
36
  export * from './wechat-util/wechat-util';
37
37
  export * from './json-util/json-util';
38
38
  export * from './stringify-util/stringify-util';
39
+ export * from './model';
@@ -0,0 +1,7 @@
1
+ import { IAppMenu } from '@ibiz/model-core';
2
+ /**
3
+ * @description 计算动态菜单
4
+ * @param {IAppMenu} menu
5
+ */
6
+ export declare function calcDynamicMenu(menu: IAppMenu, context: IContext, params: IParams): Promise<void>;
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/model/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAgB,MAAM,kBAAkB,CAAC;AAG1D;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAqFf"}
@@ -0,0 +1,65 @@
1
+ import { isBase64, isBase64Image, isSvg } from '@ibiz-template/core';
2
+ import { ScriptFactory } from '../script';
3
+ /**
4
+ * @description 计算动态菜单
5
+ * @param {IAppMenu} menu
6
+ */
7
+ export async function calcDynamicMenu(menu, context, params) {
8
+ const { appId, dynamicMode, clsAppDEFieldId, textAppDEFieldId, tipsAppDEFieldId, itemAppDEDataSetId, iconClsAppDEFieldId, itemAppDataEntityId, appFuncTagAppDEFieldId, enableScriptAppDEFieldId, visibleScriptAppDEFieldId, } = menu;
9
+ if (dynamicMode !== 1 || !itemAppDataEntityId || !itemAppDEDataSetId)
10
+ return;
11
+ try {
12
+ const app = ibiz.hub.getApp(appId);
13
+ const res = await app.deService.exec(itemAppDataEntityId, itemAppDEDataSetId, context, params);
14
+ if (res.ok && res.data && Array.isArray(res.data)) {
15
+ if (!menu.appMenuItems)
16
+ menu.appMenuItems = [];
17
+ res.data.forEach(item => {
18
+ const menuItem = {
19
+ appId,
20
+ id: item.srfkey,
21
+ name: item.srfkey,
22
+ itemType: 'MENUITEM',
23
+ appFuncId: appFuncTagAppDEFieldId
24
+ ? item[appFuncTagAppDEFieldId]
25
+ : undefined,
26
+ caption: textAppDEFieldId
27
+ ? item[textAppDEFieldId]
28
+ : item.srfmajortext,
29
+ tooltip: tipsAppDEFieldId
30
+ ? item[tipsAppDEFieldId]
31
+ : item.srfmajortext,
32
+ };
33
+ if (clsAppDEFieldId && item[clsAppDEFieldId])
34
+ menuItem.sysCss = { appId, cssName: item[clsAppDEFieldId] };
35
+ if (iconClsAppDEFieldId && item[iconClsAppDEFieldId]) {
36
+ const icon = item[iconClsAppDEFieldId];
37
+ const imagePath = isBase64Image(icon) ||
38
+ isBase64(icon) ||
39
+ isSvg(icon) ||
40
+ icon.endsWith('svg') ||
41
+ icon.startsWith('http');
42
+ menuItem.sysImage = {
43
+ appId,
44
+ [imagePath ? 'imagePath' : 'cssClass']: icon,
45
+ };
46
+ }
47
+ let visible = true;
48
+ if (visibleScriptAppDEFieldId && item[visibleScriptAppDEFieldId]) {
49
+ visible = ScriptFactory.execScriptFn({ context, params }, item[visibleScriptAppDEFieldId], { singleRowReturn: true });
50
+ }
51
+ menuItem.hidden = !visible;
52
+ let enable = true;
53
+ if (enableScriptAppDEFieldId && item[enableScriptAppDEFieldId]) {
54
+ enable = ScriptFactory.execScriptFn({ context, params }, item[enableScriptAppDEFieldId], { singleRowReturn: true });
55
+ }
56
+ menuItem.valid = enable;
57
+ if (visible)
58
+ menu.appMenuItems.push(menuItem);
59
+ });
60
+ }
61
+ }
62
+ catch (error) {
63
+ ibiz.log.error(error);
64
+ }
65
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.7.41-alpha.100",
3
+ "version": "0.7.41-alpha.101",
4
4
  "description": "运行时逻辑库",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -37,7 +37,7 @@
37
37
  "jsencrypt": "^3.3.2"
38
38
  },
39
39
  "devDependencies": {
40
- "@ibiz-template/core": "^0.7.41-alpha.88",
40
+ "@ibiz-template/core": "^0.7.41-alpha.101",
41
41
  "@ibiz/model-core": "^0.1.86",
42
42
  "@types/animejs": "^3.1.12",
43
43
  "@types/path-browserify": "^1.0.2",
@@ -68,5 +68,5 @@
68
68
  "qx-util": "^0.4.8",
69
69
  "ramda": "^0.29.0"
70
70
  },
71
- "gitHead": "fddfbaa15b8d916e4da1cbb9308eb5f766bddb90"
71
+ "gitHead": "f9d085280db4778ad952333525a03889fc37e2ab"
72
72
  }