@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.
- package/dist/index.esm.js +233 -15
- package/dist/index.system.min.js +1 -1
- package/out/controller/control/app-menu/app-menu.controller.d.ts.map +1 -1
- package/out/controller/control/app-menu/app-menu.controller.js +4 -2
- package/out/service/service/entity/method/fetch.d.ts +22 -0
- package/out/service/service/entity/method/fetch.d.ts.map +1 -1
- package/out/service/service/entity/method/fetch.js +101 -4
- package/out/utils/error-handler/default-error-handler.d.ts +15 -0
- package/out/utils/error-handler/default-error-handler.d.ts.map +1 -1
- package/out/utils/error-handler/default-error-handler.js +48 -6
- package/out/utils/index.d.ts +1 -0
- package/out/utils/index.d.ts.map +1 -1
- package/out/utils/index.js +1 -0
- package/out/utils/model/index.d.ts +7 -0
- package/out/utils/model/index.d.ts.map +1 -0
- package/out/utils/model/index.js +65 -0
- package/package.json +3 -3
package/dist/index.esm.js
CHANGED
|
@@ -19572,21 +19572,48 @@ import {
|
|
|
19572
19572
|
NoticeError,
|
|
19573
19573
|
RuntimeError
|
|
19574
19574
|
} from "@ibiz-template/core";
|
|
19575
|
-
var
|
|
19575
|
+
var _DefaultErrorHandler = class _DefaultErrorHandler {
|
|
19576
|
+
/**
|
|
19577
|
+
* 判断错误是否重复
|
|
19578
|
+
*/
|
|
19579
|
+
static isDuplicate(message) {
|
|
19580
|
+
const { DEDUP_INTERVAL, errorCache } = _DefaultErrorHandler;
|
|
19581
|
+
const now = Date.now();
|
|
19582
|
+
for (const [key, time] of errorCache) {
|
|
19583
|
+
if (now - time >= DEDUP_INTERVAL) {
|
|
19584
|
+
errorCache.delete(key);
|
|
19585
|
+
}
|
|
19586
|
+
}
|
|
19587
|
+
const lastTime = errorCache.get(message);
|
|
19588
|
+
if (lastTime !== void 0) {
|
|
19589
|
+
return true;
|
|
19590
|
+
}
|
|
19591
|
+
errorCache.set(message, now);
|
|
19592
|
+
return false;
|
|
19593
|
+
}
|
|
19594
|
+
/**
|
|
19595
|
+
* 处理错误
|
|
19596
|
+
*/
|
|
19576
19597
|
handle(error) {
|
|
19577
19598
|
var _a3, _b2;
|
|
19599
|
+
const { isDuplicate } = _DefaultErrorHandler;
|
|
19578
19600
|
if (error instanceof RuntimeModelError || error instanceof ModelError) {
|
|
19579
|
-
|
|
19601
|
+
if (!isDuplicate(error.message)) {
|
|
19602
|
+
ibiz.message.error(error.message, 10, true);
|
|
19603
|
+
}
|
|
19580
19604
|
} else if (error instanceof HttpError) {
|
|
19581
19605
|
if (error.status === 401) {
|
|
19582
|
-
ibiz.
|
|
19583
|
-
|
|
19584
|
-
|
|
19606
|
+
const msg = ibiz.i18n.t("runtime.utils.errorHandler.noPermissionless");
|
|
19607
|
+
if (!isDuplicate(msg)) {
|
|
19608
|
+
ibiz.message.error(msg);
|
|
19609
|
+
}
|
|
19585
19610
|
} else if (error.status === 404) {
|
|
19586
19611
|
ibiz.mc.error.send(error);
|
|
19587
19612
|
} else if (error.status === 500 && ((_b2 = (_a3 = error.response) == null ? void 0 : _a3.data) == null ? void 0 : _b2.type) === "DataEntityRuntimeException") {
|
|
19588
|
-
|
|
19589
|
-
|
|
19613
|
+
if (!isDuplicate(error.message)) {
|
|
19614
|
+
ibiz.message.error(error.message);
|
|
19615
|
+
}
|
|
19616
|
+
} else if (!isDuplicate(error.message)) {
|
|
19590
19617
|
ibiz.notification.error({
|
|
19591
19618
|
title: "",
|
|
19592
19619
|
desc: error.message,
|
|
@@ -19594,14 +19621,27 @@ var DefaultErrorHandler = class {
|
|
|
19594
19621
|
});
|
|
19595
19622
|
}
|
|
19596
19623
|
} else if (error instanceof NoticeError) {
|
|
19597
|
-
|
|
19624
|
+
if (!isDuplicate(error.message)) {
|
|
19625
|
+
ibiz.message.error(error.message, error.duration, error.duration === 0);
|
|
19626
|
+
}
|
|
19598
19627
|
} else if (error instanceof RuntimeError) {
|
|
19599
|
-
|
|
19628
|
+
if (!isDuplicate(error.message)) {
|
|
19629
|
+
ibiz.message.error(error.message, 10, true);
|
|
19630
|
+
}
|
|
19600
19631
|
}
|
|
19601
19632
|
ibiz.log.error(error);
|
|
19602
19633
|
return true;
|
|
19603
19634
|
}
|
|
19604
19635
|
};
|
|
19636
|
+
/**
|
|
19637
|
+
* 错误去重时间间隔(300ms)
|
|
19638
|
+
*/
|
|
19639
|
+
_DefaultErrorHandler.DEDUP_INTERVAL = 300;
|
|
19640
|
+
/**
|
|
19641
|
+
* 错误缓存
|
|
19642
|
+
*/
|
|
19643
|
+
_DefaultErrorHandler.errorCache = /* @__PURE__ */ new Map();
|
|
19644
|
+
var DefaultErrorHandler = _DefaultErrorHandler;
|
|
19605
19645
|
|
|
19606
19646
|
// src/utils/error-handler/error-handler-center.ts
|
|
19607
19647
|
var ErrorHandlerCenter = class {
|
|
@@ -30880,8 +30920,9 @@ var AppMenuController = class extends ControlController {
|
|
|
30880
30920
|
}
|
|
30881
30921
|
async onCreated() {
|
|
30882
30922
|
var _a3;
|
|
30883
|
-
await super.onCreated();
|
|
30884
30923
|
this.app = await ibiz.hub.getApp(this.context.srfappid);
|
|
30924
|
+
await calcDynamicMenu(this.model, this.context, this.params);
|
|
30925
|
+
await super.onCreated();
|
|
30885
30926
|
await this.initAppMenuItemProviders();
|
|
30886
30927
|
(_a3 = this.model.appMenuItems) == null ? void 0 : _a3.forEach((item) => {
|
|
30887
30928
|
this.initMenuItemState(item);
|
|
@@ -31206,7 +31247,7 @@ var AppMenuController = class extends ControlController {
|
|
|
31206
31247
|
}
|
|
31207
31248
|
});
|
|
31208
31249
|
};
|
|
31209
|
-
flattenMenus(this.model.appMenuItems);
|
|
31250
|
+
flattenMenus(this.model.appMenuItems || []);
|
|
31210
31251
|
this.allAppMenuItems = result;
|
|
31211
31252
|
}
|
|
31212
31253
|
/**
|
|
@@ -72874,14 +72915,19 @@ var FetchMethod = class extends Method {
|
|
|
72874
72915
|
}
|
|
72875
72916
|
const cond = DEDQCondUtil.getCond(this.method);
|
|
72876
72917
|
const filter = new SearchFilter(context, searchParams);
|
|
72877
|
-
const items = await this.
|
|
72878
|
-
res = new HttpResponse6(items, 200
|
|
72918
|
+
const { items, total, page, size, totalPages } = await this.searchLocalWithMeta(cond, filter);
|
|
72919
|
+
res = new HttpResponse6(items, 200, "", {
|
|
72920
|
+
"x-total": total,
|
|
72921
|
+
"x-page": page,
|
|
72922
|
+
"x-per-page": size,
|
|
72923
|
+
"x-total-pages": totalPages
|
|
72924
|
+
});
|
|
72879
72925
|
} else {
|
|
72880
72926
|
switch (this.method.dataSetType) {
|
|
72881
72927
|
case "INDEXDE":
|
|
72882
72928
|
case "CODELIST":
|
|
72883
72929
|
case "MULTIFORM":
|
|
72884
|
-
res = await this.
|
|
72930
|
+
res = await this.fetchCodeListSetWithMeta(context, searchParams);
|
|
72885
72931
|
break;
|
|
72886
72932
|
case "REMOTE":
|
|
72887
72933
|
{
|
|
@@ -72970,10 +73016,73 @@ var FetchMethod = class extends Method {
|
|
|
72970
73016
|
}
|
|
72971
73017
|
const { page, size } = filter;
|
|
72972
73018
|
const start = page * size;
|
|
72973
|
-
const end = (page + 1) * size
|
|
73019
|
+
const end = (page + 1) * size;
|
|
72974
73020
|
const items = list.slice(start, end).map((item) => clone53(item));
|
|
72975
73021
|
return items;
|
|
72976
73022
|
}
|
|
73023
|
+
/**
|
|
73024
|
+
* 搜索本地数据(带元数据)
|
|
73025
|
+
* @param cond 查询实例
|
|
73026
|
+
* @param filter 过滤对象
|
|
73027
|
+
* @param queryParamKeys 当前实体支持快速搜索的属性
|
|
73028
|
+
* @returns 数据列表和分页信息
|
|
73029
|
+
*/
|
|
73030
|
+
async searchLocalWithMeta(cond, filter, queryParamKeys = this.entity.quickSearchAppDEFieldIds) {
|
|
73031
|
+
let list = this.service.local.getList();
|
|
73032
|
+
if (cond) {
|
|
73033
|
+
if (list.length > 0) {
|
|
73034
|
+
list = list.filter((obj) => cond.test(obj, filter));
|
|
73035
|
+
}
|
|
73036
|
+
}
|
|
73037
|
+
if (list.length > 0) {
|
|
73038
|
+
if (filter.query && filter.query !== "") {
|
|
73039
|
+
if (queryParamKeys) {
|
|
73040
|
+
list = list.filter((obj) => {
|
|
73041
|
+
const reg2 = new RegExp(filter.query.toLowerCase());
|
|
73042
|
+
for (let i = 0; i < queryParamKeys.length; i += 1) {
|
|
73043
|
+
const key = queryParamKeys[i];
|
|
73044
|
+
const val = obj[key];
|
|
73045
|
+
if (reg2.test(val.toLowerCase())) {
|
|
73046
|
+
return true;
|
|
73047
|
+
}
|
|
73048
|
+
}
|
|
73049
|
+
return false;
|
|
73050
|
+
});
|
|
73051
|
+
}
|
|
73052
|
+
}
|
|
73053
|
+
}
|
|
73054
|
+
if (!isNil37(filter.sortField) && !isEmpty9(filter.sortField)) {
|
|
73055
|
+
if (filter.sortMode === "DESC") {
|
|
73056
|
+
list = descSort(list, filter.sortField);
|
|
73057
|
+
} else {
|
|
73058
|
+
list = ascSort2(list, filter.sortField);
|
|
73059
|
+
}
|
|
73060
|
+
}
|
|
73061
|
+
if (!isNil37(filter.srfDefaultCond) && !isEmpty9(filter.srfDefaultCond)) {
|
|
73062
|
+
const defaultConds = filter.srfDefaultCond;
|
|
73063
|
+
const defaultCondKeys = Object.keys(defaultConds);
|
|
73064
|
+
list = list.filter((obj) => {
|
|
73065
|
+
for (let i = 0; i < defaultCondKeys.length; i += 1) {
|
|
73066
|
+
const key = defaultCondKeys[i];
|
|
73067
|
+
if (obj[key] === defaultConds[key]) {
|
|
73068
|
+
return true;
|
|
73069
|
+
}
|
|
73070
|
+
}
|
|
73071
|
+
return false;
|
|
73072
|
+
});
|
|
73073
|
+
}
|
|
73074
|
+
const { page, size } = filter;
|
|
73075
|
+
const start = page * size;
|
|
73076
|
+
const end = (page + 1) * size;
|
|
73077
|
+
const items = list.slice(start, end).map((item) => clone53(item));
|
|
73078
|
+
return {
|
|
73079
|
+
items,
|
|
73080
|
+
total: list.length,
|
|
73081
|
+
page,
|
|
73082
|
+
size,
|
|
73083
|
+
totalPages: Math.ceil(list.length / size)
|
|
73084
|
+
};
|
|
73085
|
+
}
|
|
72977
73086
|
/**
|
|
72978
73087
|
* 获取代码表数据来源的集合
|
|
72979
73088
|
* @author lxm
|
|
@@ -73002,6 +73111,38 @@ var FetchMethod = class extends Method {
|
|
|
73002
73111
|
}));
|
|
73003
73112
|
return new HttpResponse6(dataSet, 200);
|
|
73004
73113
|
}
|
|
73114
|
+
/**
|
|
73115
|
+
* 获取代码表数据来源的集合(带元数据)
|
|
73116
|
+
*
|
|
73117
|
+
* @param {IContext} context
|
|
73118
|
+
* @param {IParams} params
|
|
73119
|
+
* @return {*} {Promise<HttpResponse<IData[]>>}
|
|
73120
|
+
*/
|
|
73121
|
+
async fetchCodeListSetWithMeta(context, params) {
|
|
73122
|
+
const { appCodeListId } = this.method;
|
|
73123
|
+
if (!appCodeListId) {
|
|
73124
|
+
throw new RuntimeModelError71(
|
|
73125
|
+
this.method,
|
|
73126
|
+
ibiz.i18n.t("runtime.service.sourceCodeTable")
|
|
73127
|
+
);
|
|
73128
|
+
}
|
|
73129
|
+
const codeItems = await this.app.codeList.get(
|
|
73130
|
+
appCodeListId,
|
|
73131
|
+
context,
|
|
73132
|
+
params
|
|
73133
|
+
);
|
|
73134
|
+
const { keyAppDEFieldId, majorAppDEFieldId } = this.entity;
|
|
73135
|
+
const dataSet = codeItems.map((item) => ({
|
|
73136
|
+
[keyAppDEFieldId]: item.value,
|
|
73137
|
+
[majorAppDEFieldId]: item.text
|
|
73138
|
+
}));
|
|
73139
|
+
return new HttpResponse6(dataSet, 200, "", {
|
|
73140
|
+
"x-total": codeItems.length,
|
|
73141
|
+
"x-page": 0,
|
|
73142
|
+
"x-per-page": codeItems.length,
|
|
73143
|
+
"x-total-pages": 1
|
|
73144
|
+
});
|
|
73145
|
+
}
|
|
73005
73146
|
};
|
|
73006
73147
|
|
|
73007
73148
|
// src/service/service/entity/method/ac-fetch.ts
|
|
@@ -84682,6 +84823,82 @@ function stringifyObj(obj) {
|
|
|
84682
84823
|
});
|
|
84683
84824
|
}
|
|
84684
84825
|
|
|
84826
|
+
// src/utils/model/index.ts
|
|
84827
|
+
import { isBase64, isBase64Image as isBase64Image2, isSvg } from "@ibiz-template/core";
|
|
84828
|
+
async function calcDynamicMenu(menu, context, params) {
|
|
84829
|
+
const {
|
|
84830
|
+
appId: appId2,
|
|
84831
|
+
dynamicMode,
|
|
84832
|
+
clsAppDEFieldId,
|
|
84833
|
+
textAppDEFieldId,
|
|
84834
|
+
tipsAppDEFieldId,
|
|
84835
|
+
itemAppDEDataSetId,
|
|
84836
|
+
iconClsAppDEFieldId,
|
|
84837
|
+
itemAppDataEntityId,
|
|
84838
|
+
appFuncTagAppDEFieldId,
|
|
84839
|
+
enableScriptAppDEFieldId,
|
|
84840
|
+
visibleScriptAppDEFieldId
|
|
84841
|
+
} = menu;
|
|
84842
|
+
if (dynamicMode !== 1 || !itemAppDataEntityId || !itemAppDEDataSetId)
|
|
84843
|
+
return;
|
|
84844
|
+
try {
|
|
84845
|
+
const app = ibiz.hub.getApp(appId2);
|
|
84846
|
+
const res = await app.deService.exec(
|
|
84847
|
+
itemAppDataEntityId,
|
|
84848
|
+
itemAppDEDataSetId,
|
|
84849
|
+
context,
|
|
84850
|
+
params
|
|
84851
|
+
);
|
|
84852
|
+
if (res.ok && res.data && Array.isArray(res.data)) {
|
|
84853
|
+
if (!menu.appMenuItems)
|
|
84854
|
+
menu.appMenuItems = [];
|
|
84855
|
+
res.data.forEach((item) => {
|
|
84856
|
+
const menuItem = {
|
|
84857
|
+
appId: appId2,
|
|
84858
|
+
id: item.srfkey,
|
|
84859
|
+
name: item.srfkey,
|
|
84860
|
+
itemType: "MENUITEM",
|
|
84861
|
+
appFuncId: appFuncTagAppDEFieldId ? item[appFuncTagAppDEFieldId] : void 0,
|
|
84862
|
+
caption: textAppDEFieldId ? item[textAppDEFieldId] : item.srfmajortext,
|
|
84863
|
+
tooltip: tipsAppDEFieldId ? item[tipsAppDEFieldId] : item.srfmajortext
|
|
84864
|
+
};
|
|
84865
|
+
if (clsAppDEFieldId && item[clsAppDEFieldId])
|
|
84866
|
+
menuItem.sysCss = { appId: appId2, cssName: item[clsAppDEFieldId] };
|
|
84867
|
+
if (iconClsAppDEFieldId && item[iconClsAppDEFieldId]) {
|
|
84868
|
+
const icon = item[iconClsAppDEFieldId];
|
|
84869
|
+
const imagePath = isBase64Image2(icon) || isBase64(icon) || isSvg(icon) || icon.endsWith("svg") || icon.startsWith("http");
|
|
84870
|
+
menuItem.sysImage = {
|
|
84871
|
+
appId: appId2,
|
|
84872
|
+
[imagePath ? "imagePath" : "cssClass"]: icon
|
|
84873
|
+
};
|
|
84874
|
+
}
|
|
84875
|
+
let visible = true;
|
|
84876
|
+
if (visibleScriptAppDEFieldId && item[visibleScriptAppDEFieldId]) {
|
|
84877
|
+
visible = ScriptFactory.execScriptFn(
|
|
84878
|
+
{ context, params },
|
|
84879
|
+
item[visibleScriptAppDEFieldId],
|
|
84880
|
+
{ singleRowReturn: true }
|
|
84881
|
+
);
|
|
84882
|
+
}
|
|
84883
|
+
menuItem.hidden = !visible;
|
|
84884
|
+
let enable = true;
|
|
84885
|
+
if (enableScriptAppDEFieldId && item[enableScriptAppDEFieldId]) {
|
|
84886
|
+
enable = ScriptFactory.execScriptFn(
|
|
84887
|
+
{ context, params },
|
|
84888
|
+
item[enableScriptAppDEFieldId],
|
|
84889
|
+
{ singleRowReturn: true }
|
|
84890
|
+
);
|
|
84891
|
+
}
|
|
84892
|
+
menuItem.valid = enable;
|
|
84893
|
+
if (visible)
|
|
84894
|
+
menu.appMenuItems.push(menuItem);
|
|
84895
|
+
});
|
|
84896
|
+
}
|
|
84897
|
+
} catch (error) {
|
|
84898
|
+
ibiz.log.error(error);
|
|
84899
|
+
}
|
|
84900
|
+
}
|
|
84901
|
+
|
|
84685
84902
|
// src/command/app/open-app-view/open-app-view.ts
|
|
84686
84903
|
import { ModelError as ModelError30, RuntimeError as RuntimeError70 } from "@ibiz-template/core";
|
|
84687
84904
|
import { clone as clone59 } from "ramda";
|
|
@@ -91656,6 +91873,7 @@ export {
|
|
|
91656
91873
|
calcDyUiactionGroup,
|
|
91657
91874
|
calcDynaClass,
|
|
91658
91875
|
calcDynaSysParams,
|
|
91876
|
+
calcDynamicMenu,
|
|
91659
91877
|
calcFilterModelBySchema,
|
|
91660
91878
|
calcGridLayoutPos,
|
|
91661
91879
|
calcImportSchemaData,
|