@ibiz-template/runtime 0.5.2 → 0.5.3-beta.0

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 (22) hide show
  1. package/dist/index.esm.js +145 -123
  2. package/dist/index.system.min.js +1 -1
  3. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts +0 -9
  4. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts.map +1 -1
  5. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.js +0 -20
  6. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts.map +1 -1
  7. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.js +0 -4
  8. package/out/service/dto/method.dto.d.ts.map +1 -1
  9. package/out/service/dto/method.dto.js +6 -4
  10. package/out/service/service/entity/method/de-action.d.ts.map +1 -1
  11. package/out/service/service/entity/method/de-action.js +9 -7
  12. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  13. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +33 -8
  14. package/out/utils/open-redirect-view/open-redirect-view.d.ts.map +1 -1
  15. package/out/utils/open-redirect-view/open-redirect-view.js +70 -35
  16. package/package.json +2 -2
  17. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.ts +2 -35
  18. package/src/controller/control/tree-grid-ex/tree-grid-ex-row.state.ts +0 -4
  19. package/src/service/dto/method.dto.ts +6 -4
  20. package/src/service/service/entity/method/de-action.ts +9 -7
  21. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +32 -7
  22. package/src/utils/open-redirect-view/open-redirect-view.ts +76 -43
@@ -214,51 +214,80 @@ export async function getDERedirectToView(
214
214
  }
215
215
  const entity = await ibiz.hub.getAppDataEntity(entityId, appView.appId);
216
216
  const rdTag = await calcDERdTag(entity, appView, params, curData);
217
- // !!!工作流临时补充特殊处理标识, 避免补充了工作流流程匹配不上, 再从默认tag匹配!!!
218
- const rdTagItems = rdTag.split(':');
219
- const wfRdTag =
220
- rdTagItems.length === 2 ? rdTag : rdTagItems.slice(0, 2).join(':');
221
- // 拼接当前重定向视图所在应用实体名称为前缀
222
- const deRdTag = `${entity.name!.toUpperCase()}:${rdTag}`;
223
- // 所有重定向引用视图
224
- const allRefViews = [];
225
- if (appView.redirectAppViewRefs) {
226
- allRefViews.push(...appView.redirectAppViewRefs);
227
- }
228
- if (appView.appViewRefs) {
229
- allRefViews.push(...appView.appViewRefs);
230
- }
231
- const refView = allRefViews.find(view => {
232
- const matchKey = view.name || view.id;
233
- // 特殊补充 wfRdTag 匹配,子流程应用特殊模式
234
- return matchKey === deRdTag || matchKey === rdTag || matchKey === wfRdTag;
235
- });
236
- if (refView) {
237
- const viewId = refView.refAppViewId;
238
- if (viewId) {
239
- return {
240
- type: 'view',
241
- viewId,
242
- context,
243
- params,
244
- opts: { ...opts, data: [curData] },
245
- };
217
+ let viewId = '';
218
+ // view://协议开头处理,值示例: view://{app}/{viewcodename}?srfwftag={wftag}
219
+ if (rdTag.startsWith('view://')) {
220
+ const url = new URL(rdTag);
221
+ if (url.searchParams.size > 0) {
222
+ url.searchParams.forEach((value, _key) => {
223
+ params[_key] = value;
224
+ });
225
+ }
226
+ const rdTagItems = url.pathname.replace('//', '').split('/');
227
+ // 当只有一个时,为视图标识。当有两个时,第二个是视图标识
228
+ const [appOrViewTag, viewTag] = rdTagItems;
229
+ if (viewTag) {
230
+ viewId = viewTag;
231
+ } else {
232
+ viewId = appOrViewTag;
246
233
  }
247
- throw new RuntimeModelError(refView, `未配置实际引用视图`);
248
234
  } else {
249
- ibiz.log.error(
250
- '重定向视图引用有:',
251
- allRefViews?.map(({ refAppViewId, name, realTitle }) => ({
252
- viewId: refAppViewId,
253
- tag: name,
254
- title: realTitle,
255
- })),
256
- );
257
- throw new RuntimeModelError(
258
- appView,
259
- `未找到重定向标识[${rdTag}]或[${deRdTag}]或工作流[${wfRdTag}]对应视图`,
260
- );
235
+ // !!!工作流临时补充特殊处理标识, 避免补充了工作流流程匹配不上, 再从默认tag匹配!!!
236
+ const rdTagItems = rdTag.split(':');
237
+ const wfRdTag =
238
+ rdTagItems.length === 2 ? rdTag : rdTagItems.slice(0, 2).join(':');
239
+ // 拼接当前重定向视图所在应用实体名称为前缀
240
+ const deRdTag = `${entity.name!.toUpperCase()}:${rdTag}`;
241
+ // 所有重定向引用视图
242
+ const allRefViews = [];
243
+ if (appView.redirectAppViewRefs) {
244
+ allRefViews.push(...appView.redirectAppViewRefs);
245
+ }
246
+ if (appView.appViewRefs) {
247
+ allRefViews.push(...appView.appViewRefs);
248
+ }
249
+ const refView = allRefViews.find(view => {
250
+ const matchKey = view.name || view.id;
251
+ // 特殊补充 wfRdTag 匹配,子流程应用特殊模式
252
+ return matchKey === deRdTag || matchKey === rdTag || matchKey === wfRdTag;
253
+ });
254
+ if (refView) {
255
+ viewId = refView.refAppViewId!;
256
+ if (viewId) {
257
+ return {
258
+ type: 'view',
259
+ viewId,
260
+ context,
261
+ params,
262
+ opts: { ...opts, data: [curData] },
263
+ };
264
+ }
265
+ throw new RuntimeModelError(refView, `未配置实际引用视图`);
266
+ } else {
267
+ ibiz.log.error(
268
+ '重定向视图引用有:',
269
+ allRefViews?.map(({ refAppViewId, name, realTitle }) => ({
270
+ viewId: refAppViewId,
271
+ tag: name,
272
+ title: realTitle,
273
+ })),
274
+ );
275
+ throw new RuntimeModelError(
276
+ appView,
277
+ `未找到重定向标识[${rdTag}]或[${deRdTag}]或工作流[${wfRdTag}]对应视图`,
278
+ );
279
+ }
280
+ }
281
+ if (viewId) {
282
+ return {
283
+ type: 'view',
284
+ viewId,
285
+ context,
286
+ params,
287
+ opts: { ...opts, data: [curData] },
288
+ };
261
289
  }
290
+ throw new RuntimeModelError(appView, `标识[${rdTag}]未匹配到实际引用视图`);
262
291
  }
263
292
 
264
293
  /**
@@ -335,8 +364,12 @@ export async function calcDERdTag(
335
364
  // 自定义重定向
336
365
  if (typeFieldId) {
337
366
  const { codeName } = findFieldById(entity, typeFieldId)!;
338
- const value = data[codeName!.toLowerCase()];
367
+ const value: string = data[codeName!.toLowerCase()];
339
368
  if (notNilEmpty(value)) {
369
+ // 如果是 view://协议开头直接返回,示例: view://{app}/{viewcodename}?srfwftag={wftag}
370
+ if (value.startsWith('view://')) {
371
+ return value;
372
+ }
340
373
  // 因为平台发布出来的标识全都是大写,所以这里也全部转大写
341
374
  return `${value.toUpperCase()}`;
342
375
  }