@ibiz-template/runtime 0.7.4 → 0.7.6

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 (67) hide show
  1. package/dist/index.esm.js +704 -78
  2. package/dist/index.system.min.js +1 -1
  3. package/out/application.d.ts +10 -1
  4. package/out/application.d.ts.map +1 -1
  5. package/out/application.js +13 -0
  6. package/out/controller/common/view/view.controller.d.ts.map +1 -1
  7. package/out/controller/common/view/view.controller.js +12 -8
  8. package/out/controller/control/dashboard/custom-dashboard.controller.d.ts +80 -6
  9. package/out/controller/control/dashboard/custom-dashboard.controller.d.ts.map +1 -1
  10. package/out/controller/control/dashboard/custom-dashboard.controller.js +109 -14
  11. package/out/controller/control/dashboard/dashboard.controller.d.ts +8 -0
  12. package/out/controller/control/dashboard/dashboard.controller.d.ts.map +1 -1
  13. package/out/controller/control/dashboard/dashboard.controller.js +17 -0
  14. package/out/controller/control/dashboard/portlet/chart-portlet/chart-portlet.controller.d.ts +7 -0
  15. package/out/controller/control/dashboard/portlet/chart-portlet/chart-portlet.controller.d.ts.map +1 -1
  16. package/out/controller/control/dashboard/portlet/chart-portlet/chart-portlet.controller.js +11 -0
  17. package/out/controller/control/dashboard/portlet/list-portlet/list-portlet.controller.d.ts +7 -0
  18. package/out/controller/control/dashboard/portlet/list-portlet/list-portlet.controller.d.ts.map +1 -1
  19. package/out/controller/control/dashboard/portlet/list-portlet/list-portlet.controller.js +11 -0
  20. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.d.ts +31 -2
  21. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.d.ts.map +1 -1
  22. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.js +62 -15
  23. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.state.d.ts +15 -0
  24. package/out/controller/control/dashboard/portlet/portlet-part/portlet-part.state.d.ts.map +1 -1
  25. package/out/controller/control/dashboard/portlet/view-portlet/view-portlet.controller.d.ts +7 -0
  26. package/out/controller/control/dashboard/portlet/view-portlet/view-portlet.controller.d.ts.map +1 -1
  27. package/out/controller/control/dashboard/portlet/view-portlet/view-portlet.controller.js +12 -0
  28. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  29. package/out/controller/control/form/form/form.controller.js +2 -1
  30. package/out/controller/control/grid/grid/grid.controller.d.ts +37 -0
  31. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  32. package/out/controller/control/grid/grid/grid.controller.js +135 -1
  33. package/out/controller/control/tree/tree.controller.d.ts.map +1 -1
  34. package/out/controller/control/tree/tree.controller.js +1 -1
  35. package/out/controller/control/wizard-panel/wizard-panel.controller.d.ts +18 -0
  36. package/out/controller/control/wizard-panel/wizard-panel.controller.d.ts.map +1 -1
  37. package/out/controller/control/wizard-panel/wizard-panel.controller.js +70 -1
  38. package/out/controller/utils/view-msg/view-msg-controller.d.ts +10 -1
  39. package/out/controller/utils/view-msg/view-msg-controller.d.ts.map +1 -1
  40. package/out/controller/utils/view-msg/view-msg-controller.js +17 -3
  41. package/out/interface/common/i-app-service/i-app-service.d.ts +10 -1
  42. package/out/interface/common/i-app-service/i-app-service.d.ts.map +1 -1
  43. package/out/interface/controller/common/view-message/i-view-message.d.ts +8 -0
  44. package/out/interface/controller/common/view-message/i-view-message.d.ts.map +1 -1
  45. package/out/interface/controller/controller/control/portlet/i-portlet.controller.d.ts +14 -0
  46. package/out/interface/controller/controller/control/portlet/i-portlet.controller.d.ts.map +1 -1
  47. package/out/interface/controller/event/control/i-dashboard.event.d.ts +15 -1
  48. package/out/interface/controller/event/control/i-dashboard.event.d.ts.map +1 -1
  49. package/out/interface/controller/state/control/i-drtab.state.d.ts +7 -0
  50. package/out/interface/controller/state/control/i-drtab.state.d.ts.map +1 -1
  51. package/out/interface/controller/state/control/i-wizard-panel.state.d.ts +7 -0
  52. package/out/interface/controller/state/control/i-wizard-panel.state.d.ts.map +1 -1
  53. package/out/interface/controller/state/control/portlet/i-portlet.state.d.ts +15 -0
  54. package/out/interface/controller/state/control/portlet/i-portlet.state.d.ts.map +1 -1
  55. package/out/service/service/control/control.service.js +1 -1
  56. package/out/service/service/index.d.ts +1 -0
  57. package/out/service/service/index.d.ts.map +1 -1
  58. package/out/service/service/index.js +1 -0
  59. package/out/service/service/util/util.service.d.ts +93 -0
  60. package/out/service/service/util/util.service.d.ts.map +1 -0
  61. package/out/service/service/util/util.service.js +148 -0
  62. package/out/ui-logic/ui-logic-param/ui-logic-param.d.ts.map +1 -1
  63. package/out/ui-logic/ui-logic-param/ui-logic-param.js +21 -9
  64. package/out/utils/nav-params/nav-params.d.ts +2 -0
  65. package/out/utils/nav-params/nav-params.d.ts.map +1 -1
  66. package/out/utils/nav-params/nav-params.js +25 -1
  67. package/package.json +3 -3
package/dist/index.esm.js CHANGED
@@ -628,17 +628,35 @@ function convertNavData(navParams, ...origins) {
628
628
  return convertNavDataByArray(navParamsArr, ...origins);
629
629
  }
630
630
  function getVal(origins, key) {
631
+ const keys = key.split(".");
632
+ let currentVal;
631
633
  const findOrigin = origins.find((item) => {
632
634
  if (isNilOrEmpty(item)) {
633
635
  return false;
634
636
  }
637
+ if (keys.length > 1) {
638
+ currentVal = item;
639
+ for (let i = 0; i < keys.length; i++) {
640
+ const k = keys[i];
641
+ if (currentVal && (currentVal[k] || Object.prototype.hasOwnProperty.call(currentVal, k))) {
642
+ currentVal = currentVal[k];
643
+ } else {
644
+ currentVal = void 0;
645
+ break;
646
+ }
647
+ }
648
+ return currentVal !== void 0;
649
+ }
635
650
  return (
636
651
  // proxy数据判断是否能拿到值
637
652
  item[key] || // 上下文等判断是否有这个属性,如果有且值为空,则赋该空值
638
653
  Object.prototype.hasOwnProperty.call(item, key)
639
654
  );
640
655
  });
641
- return { find: !!findOrigin, value: findOrigin == null ? void 0 : findOrigin[key] };
656
+ return {
657
+ find: !!findOrigin,
658
+ value: keys.length > 1 ? currentVal : findOrigin == null ? void 0 : findOrigin[key]
659
+ };
642
660
  }
643
661
  function convertNavDataByArray(naviDatas, ...origins) {
644
662
  const regex = /\$\{[^}]*\}/g;
@@ -9368,7 +9386,7 @@ var ControlService = class {
9368
9386
  */
9369
9387
  async handleItemPrivilege(data, context) {
9370
9388
  const { enableItemPrivilege, appDataEntityId } = this.model;
9371
- if (enableItemPrivilege && appDataEntityId) {
9389
+ if (data && enableItemPrivilege && appDataEntityId) {
9372
9390
  const deAuthority = await this.app.authority.getService(appDataEntityId);
9373
9391
  const items = Array.isArray(data) ? data : [data];
9374
9392
  items.forEach((item) => {
@@ -12409,6 +12427,166 @@ var MarkOpenDataService = class {
12409
12427
  }
12410
12428
  };
12411
12429
 
12430
+ // src/service/service/util/util.service.ts
12431
+ var UtilService = class {
12432
+ /**
12433
+ * Creates an instance of UtilService.
12434
+ * @author tony001
12435
+ * @date 2024-04-24 14:04:41
12436
+ * @param {IAppUtil} appUtil
12437
+ */
12438
+ constructor(appUtil) {
12439
+ this.appUtil = appUtil;
12440
+ /**
12441
+ * 存储实体模型
12442
+ *
12443
+ * @author tony001
12444
+ * @date 2024-04-24 15:04:36
12445
+ * @type {(IAppDataEntity | null)}
12446
+ */
12447
+ this.stoageAppDataEntity = null;
12448
+ /**
12449
+ * 存储服务
12450
+ *
12451
+ * @author tony001
12452
+ * @date 2024-04-24 14:04:36
12453
+ * @type {(IAppDEService | null)}
12454
+ */
12455
+ this.appDEService = null;
12456
+ }
12457
+ /**
12458
+ * 获取存储服务
12459
+ *
12460
+ * @author tony001
12461
+ * @date 2024-04-24 14:04:21
12462
+ * @private
12463
+ * @param {IContext} context
12464
+ * @param {IParams} params
12465
+ * @return {*} {Promise<IAppDEService>}
12466
+ */
12467
+ async getAppDEService(context) {
12468
+ if (this.appDEService) {
12469
+ return this.appDEService;
12470
+ }
12471
+ const { appId: appId2, name, stoageAppDataEntityId } = this.appUtil;
12472
+ if (appId2 && stoageAppDataEntityId) {
12473
+ const app = ibiz.hub.getApp(appId2);
12474
+ this.stoageAppDataEntity = await ibiz.hub.getAppDataEntity(
12475
+ stoageAppDataEntityId,
12476
+ appId2
12477
+ );
12478
+ const appDEService = await app.deService.getService(
12479
+ context,
12480
+ stoageAppDataEntityId
12481
+ );
12482
+ if (appDEService) {
12483
+ this.appDEService = appDEService;
12484
+ return appDEService;
12485
+ }
12486
+ throw new Error(
12487
+ "\u5E94\u7528\u529F\u80FD[".concat(name, "]\u672A\u627E\u5230\u5B58\u50A8\u5B9E\u4F53[").concat(stoageAppDataEntityId, "]")
12488
+ );
12489
+ }
12490
+ throw new Error("\u5E94\u7528\u529F\u80FD[".concat(name, "]\u4E0D\u5B58\u5728"));
12491
+ }
12492
+ /**
12493
+ * 加载指定数据
12494
+ *
12495
+ * @author tony001
12496
+ * @date 2024-04-23 11:04:22
12497
+ * @param {string} tag
12498
+ * @param {IContext} context
12499
+ * @param {IParams} params
12500
+ * @return {*} {Promise<IData>}
12501
+ */
12502
+ async load(tag, context, params) {
12503
+ const tempContext = context.clone();
12504
+ const dataService = await this.getAppDEService(tempContext);
12505
+ tempContext[this.stoageAppDataEntity.codeName.toLowerCase()] = tag;
12506
+ const { getAppDEActionId } = this.appUtil;
12507
+ try {
12508
+ const res = await dataService.exec(
12509
+ getAppDEActionId || "get",
12510
+ tempContext,
12511
+ params
12512
+ );
12513
+ return this.handleResponse(res);
12514
+ } catch (error) {
12515
+ return {};
12516
+ }
12517
+ }
12518
+ /**
12519
+ * 保存指定数据
12520
+ *
12521
+ * @author tony001
12522
+ * @date 2024-04-23 12:04:36
12523
+ * @param {string} tag
12524
+ * @param {IContext} context
12525
+ * @param {IParams} params
12526
+ * @param {IData} data
12527
+ * @return {*} {Promise<IData>}
12528
+ */
12529
+ async save(tag, context, params, data) {
12530
+ const dataService = await this.getAppDEService(context);
12531
+ const {
12532
+ context: tempContext,
12533
+ params: tempParams,
12534
+ data: tempData
12535
+ } = this.handleRequestData(tag, context, params, data);
12536
+ return dataService.exec("save", tempContext, tempData, tempParams);
12537
+ }
12538
+ /**
12539
+ * 处理请求数据
12540
+ *
12541
+ * @author tony001
12542
+ * @date 2024-04-24 15:04:02
12543
+ * @private
12544
+ * @param {IContext} context
12545
+ * @param {IParams} params
12546
+ * @param {IData} data
12547
+ * @return {*} {{ context: IContext; params: IParams; data: IData }}
12548
+ */
12549
+ handleRequestData(tag, context, params, data) {
12550
+ const {
12551
+ modelIdAppDEFieldId,
12552
+ modelAppDEFieldId,
12553
+ appIdAppDEFieldId,
12554
+ userIdAppDEFieldId,
12555
+ stoageAppDataEntityId
12556
+ } = this.appUtil;
12557
+ if (!this.stoageAppDataEntity) {
12558
+ throw new Error("\u672A\u627E\u5230\u5B58\u50A8\u5B9E\u4F53[".concat(stoageAppDataEntityId, "]"));
12559
+ }
12560
+ const tempContext = context.clone();
12561
+ const tempData = {};
12562
+ tempContext[this.stoageAppDataEntity.codeName.toLowerCase()] = tag;
12563
+ const { keyAppDEFieldId } = this.stoageAppDataEntity;
12564
+ tempData[keyAppDEFieldId] = tag;
12565
+ tempData[modelIdAppDEFieldId] = params == null ? void 0 : params.modelId;
12566
+ tempData[modelAppDEFieldId] = JSON.stringify(data);
12567
+ tempData[appIdAppDEFieldId] = tempContext.srfappid;
12568
+ tempData[userIdAppDEFieldId] = tempContext.srfpersonid;
12569
+ tempData.type = params == null ? void 0 : params.type;
12570
+ tempData.owner_type = params == null ? void 0 : params.ownerType;
12571
+ tempData.owner_id = params == null ? void 0 : params.ownerId;
12572
+ return { context: tempContext, params, data: tempData };
12573
+ }
12574
+ /**
12575
+ * 处理响应数据
12576
+ *
12577
+ * @author tony001
12578
+ * @date 2024-04-24 16:04:45
12579
+ * @private
12580
+ * @param {IData} response
12581
+ * @return {*} {IData}
12582
+ */
12583
+ handleResponse(response) {
12584
+ const { data } = response;
12585
+ const { modelAppDEFieldId } = this.appUtil;
12586
+ return JSON.parse(data[modelAppDEFieldId]);
12587
+ }
12588
+ };
12589
+
12412
12590
  // src/service/vo/tree-node-data/tree-node-data.ts
12413
12591
  import { createUUID as createUUID5 } from "qx-util";
12414
12592
  var TreeNodeData = class {
@@ -13869,6 +14047,19 @@ var Application = class {
13869
14047
  const item = items.find((func) => func.id === id);
13870
14048
  return item || null;
13871
14049
  }
14050
+ /**
14051
+ * 根据id获取应用功能组件
14052
+ *
14053
+ * @author tony001
14054
+ * @date 2024-04-23 11:04:27
14055
+ * @param {string} id
14056
+ * @return {*} {(IAppUtil | null)}
14057
+ */
14058
+ getAppUtil(id) {
14059
+ const appUtils = this.model.appUtils || [];
14060
+ const appUtil = appUtils.find((item) => item.id === id);
14061
+ return appUtil || null;
14062
+ }
13872
14063
  /**
13873
14064
  * 获取界面行为模型
13874
14065
  * @author lxm
@@ -15584,8 +15775,9 @@ var BaseController = class {
15584
15775
  // src/controller/utils/view-msg/view-msg-controller.ts
15585
15776
  import { RuntimeError as RuntimeError33, RuntimeModelError as RuntimeModelError24 } from "@ibiz-template/core";
15586
15777
  import { isNil as isNil21, mergeRight as mergeRight3 } from "ramda";
15778
+ var VIEW_MSG_PREFIX = "VIEW_MSG";
15587
15779
  var ViewMsgController = class _ViewMsgController {
15588
- constructor(msgGroupId) {
15780
+ constructor(msgGroupId, tag = "") {
15589
15781
  this.msgGroupId = msgGroupId;
15590
15782
  /**
15591
15783
  * 视图消息map
@@ -15593,6 +15785,14 @@ var ViewMsgController = class _ViewMsgController {
15593
15785
  * @date 2023-09-22 05:38:03
15594
15786
  */
15595
15787
  this.viewMsgMap = /* @__PURE__ */ new Map();
15788
+ /**
15789
+ * 视图消息tag
15790
+ *
15791
+ * @author zhanghengfeng
15792
+ * @date 2024-04-23 19:04:58
15793
+ */
15794
+ this.tag = "";
15795
+ this.tag = "".concat(VIEW_MSG_PREFIX, "_").concat(tag);
15596
15796
  }
15597
15797
  /**
15598
15798
  * 初始化方法,从全局获取视图消息组和视图消息的模型
@@ -15680,7 +15880,9 @@ var ViewMsgController = class _ViewMsgController {
15680
15880
  })
15681
15881
  );
15682
15882
  }
15683
- return result;
15883
+ return result.filter(
15884
+ (item) => !(item.removeMode === 1 && localStorage.getItem(item.key))
15885
+ );
15684
15886
  }
15685
15887
  /**
15686
15888
  * 计算静态消息数据(或者动态的里面静态的配置)
@@ -15694,6 +15896,7 @@ var ViewMsgController = class _ViewMsgController {
15694
15896
  const { position: position1 } = detail;
15695
15897
  const viewMsg = this.viewMsgMap.get(detail.appViewMsgId);
15696
15898
  const {
15899
+ codeName,
15697
15900
  title,
15698
15901
  message,
15699
15902
  removeMode,
@@ -15703,6 +15906,7 @@ var ViewMsgController = class _ViewMsgController {
15703
15906
  const { userTag, userTag2, userTag3, userTag4 } = viewMsg;
15704
15907
  const position = position1 || position2;
15705
15908
  return {
15909
+ key: "".concat(this.tag, "_").concat(codeName),
15706
15910
  title,
15707
15911
  message,
15708
15912
  position,
@@ -15783,6 +15987,9 @@ var ViewMsgController = class _ViewMsgController {
15783
15987
  if (removeModeField && !isNil21(item[removeModeField])) {
15784
15988
  message.removeMode = item[removeModeField];
15785
15989
  }
15990
+ if (!isNil21(item.srfkey)) {
15991
+ message.key = "".concat(this.tag, "_").concat(item.srfkey);
15992
+ }
15786
15993
  return mergeRight3(basicMsg, message);
15787
15994
  });
15788
15995
  return deViewMessages;
@@ -15922,7 +16129,8 @@ var ViewController = class extends BaseController {
15922
16129
  appCounterRefs.map(async (counterRef) => {
15923
16130
  const counter = await CounterService.getCounterByRef(
15924
16131
  counterRef,
15925
- this.context
16132
+ this.context,
16133
+ { ...this.params }
15926
16134
  );
15927
16135
  this.counters[counterRef.id] = counter;
15928
16136
  })
@@ -16106,10 +16314,13 @@ var ViewController = class extends BaseController {
16106
16314
  * @date 2023-09-20 09:19:20
16107
16315
  */
16108
16316
  async initViewMsg() {
16109
- const { appViewMsgGroupId } = this.model;
16317
+ const { appViewMsgGroupId, codeName } = this.model;
16110
16318
  if (appViewMsgGroupId) {
16111
16319
  this.state.viewMessages = { TOP: [], BOTTOM: [], BODY: [], POPUP: [] };
16112
- this.viewMsgController = new ViewMsgController(appViewMsgGroupId);
16320
+ this.viewMsgController = new ViewMsgController(
16321
+ appViewMsgGroupId,
16322
+ "".concat(codeName, "_").concat(this.modal.mode)
16323
+ );
16113
16324
  await this.viewMsgController.init(this.context);
16114
16325
  const messages = await this.viewMsgController.calcViewMessages(
16115
16326
  this.context,
@@ -16136,12 +16347,16 @@ var ViewController = class extends BaseController {
16136
16347
  const [message, ...rest] = messages;
16137
16348
  const modalParams = {
16138
16349
  title: message.title,
16139
- desc: message.message
16140
- // todo 待模型修复
16141
- // options: {
16142
- // showClose: message.removeMode !== 0,
16143
- // showConfirmButton: message.removeMode !== 0,
16144
- // },
16350
+ desc: message.message,
16351
+ options: {
16352
+ showClose: message.removeMode !== 0,
16353
+ showConfirmButton: message.removeMode !== 0,
16354
+ callback: () => {
16355
+ if (message.removeMode === 1) {
16356
+ localStorage.setItem(message.key, "1");
16357
+ }
16358
+ }
16359
+ }
16145
16360
  };
16146
16361
  if (message.extraParams.userTag) {
16147
16362
  Object.assign(modalParams, {
@@ -20573,6 +20788,9 @@ var UILogicParam = class {
20573
20788
  } else if (m.appGlobalParam) {
20574
20789
  let value = ibiz.util.getGlobalParam();
20575
20790
  if (m.paramFieldName) {
20791
+ if (!value.hasOwnProperty(m.paramFieldName)) {
20792
+ value[m.paramFieldName] = {};
20793
+ }
20576
20794
  value = value[m.paramFieldName];
20577
20795
  }
20578
20796
  ctx.params[tag] = value;
@@ -20593,6 +20811,9 @@ var UILogicParam = class {
20593
20811
  } else if (m.routeViewSessionParam) {
20594
20812
  let value = parameters.view.getTopView().state;
20595
20813
  if (m.paramFieldName) {
20814
+ if (!value.hasOwnProperty(m.paramFieldName)) {
20815
+ value[m.paramFieldName] = {};
20816
+ }
20596
20817
  value = value[m.paramFieldName];
20597
20818
  }
20598
20819
  ctx.params[tag] = value;
@@ -20605,6 +20826,9 @@ var UILogicParam = class {
20605
20826
  } else if (m.viewSessionParam) {
20606
20827
  let value = parameters.view.state;
20607
20828
  if (m.paramFieldName) {
20829
+ if (!value.hasOwnProperty(m.paramFieldName)) {
20830
+ value[m.paramFieldName] = {};
20831
+ }
20608
20832
  value = value[m.paramFieldName];
20609
20833
  }
20610
20834
  ctx.params[tag] = value;
@@ -21992,6 +22216,23 @@ var DashboardController = class extends ControlController {
21992
22216
  })
21993
22217
  );
21994
22218
  }
22219
+ /**
22220
+ * 初始化
22221
+ *
22222
+ * @param {IData} [config={}]
22223
+ * @return {*} {Promise<void>}
22224
+ * @memberof DashboardController
22225
+ */
22226
+ async initPortletsConfig(config = {}) {
22227
+ Object.keys(config).forEach((key) => {
22228
+ const portlet = this.portlets[key];
22229
+ if (portlet) {
22230
+ portlet.config = config[key];
22231
+ portlet.state.title = portlet.config.srftitle;
22232
+ Object.assign(portlet.params, portlet.config);
22233
+ }
22234
+ });
22235
+ }
21995
22236
  /**
21996
22237
  * 通知所有表单成员表单操作过程中的数据变更
21997
22238
  *
@@ -22009,6 +22250,7 @@ var DashboardController = class extends ControlController {
22009
22250
  };
22010
22251
 
22011
22252
  // src/controller/control/dashboard/custom-dashboard.controller.ts
22253
+ import { merge } from "lodash-es";
22012
22254
  var CustomDashboardController = class {
22013
22255
  /**
22014
22256
  * Creates an instance of BaseController.
@@ -22016,7 +22258,7 @@ var CustomDashboardController = class {
22016
22258
  * @date 2023-04-26 06:46:21
22017
22259
  * @param {CTX} ctx 跨组件上下文环境,内部机制不暴露
22018
22260
  */
22019
- constructor(model) {
22261
+ constructor(model, dashboard) {
22020
22262
  /**
22021
22263
  * 自定义布局模型数据
22022
22264
  *
@@ -22039,19 +22281,93 @@ var CustomDashboardController = class {
22039
22281
  */
22040
22282
  this.layoutRowH = 80;
22041
22283
  /**
22042
- * 看板模型
22284
+ * 门户配置
22043
22285
  *
22044
- * @author: zhujiamin
22045
- * @Date: 2023-09-20 16:43:39
22286
+ * @type {IData}
22287
+ * @memberof CustomDashboardController
22046
22288
  */
22047
- this.model = null;
22048
- var _a, _b;
22289
+ this.portletConfig = {};
22290
+ /**
22291
+ * 自定义定制范围类型(public:公开,personal:个人,data:数据,默认是按照个人区分,配置了应用功能组件才生效)
22292
+ *
22293
+ * @author tony001
22294
+ * @date 2024-04-24 19:04:47
22295
+ * @type {('public' | 'personal' | 'data')}
22296
+ */
22297
+ this.type = "personal";
22298
+ /**
22299
+ * 所属数据类型(仅限自定义定制为data类型时生效,配置了应用功能组件才生效)
22300
+ *
22301
+ * @author tony001
22302
+ * @date 2024-04-24 19:04:06
22303
+ * @type {string}
22304
+ */
22305
+ this.ownerType = "";
22306
+ /**
22307
+ * 所属数据标识(仅限自定义定制为data类型时生效,配置了应用功能组件才生效)
22308
+ *
22309
+ * @author tony001
22310
+ * @date 2024-04-24 19:04:18
22311
+ * @type {string}
22312
+ */
22313
+ this.ownerId = "";
22049
22314
  this.model = model;
22050
- this.config = new ConfigService(
22051
- model.appId,
22052
- "dynadashboard",
22053
- "dashboard_".concat(((_a = this.model.appDataEntityId) == null ? void 0 : _a.toLowerCase()) || "app", "_").concat((_b = this.model.codeName) == null ? void 0 : _b.toLowerCase())
22054
- );
22315
+ this.context = dashboard.context;
22316
+ this.params = dashboard.params;
22317
+ this.init(dashboard.controlParams);
22318
+ }
22319
+ /**
22320
+ * 初始化
22321
+ *
22322
+ * @author tony001
22323
+ * @date 2024-04-24 20:04:14
22324
+ * @private
22325
+ */
22326
+ init(controlParams) {
22327
+ var _a, _b;
22328
+ this.type = "personal";
22329
+ this.ownerId = this.context.srfpersonid;
22330
+ if (controlParams.type) {
22331
+ this.type = controlParams.type;
22332
+ }
22333
+ if (controlParams.owner_type) {
22334
+ this.ownerType = controlParams.owner_type;
22335
+ }
22336
+ if (controlParams.owner_id) {
22337
+ this.ownerId = this.context[controlParams.owner_id];
22338
+ }
22339
+ if (this.model.appDynaDashboardUtilId) {
22340
+ const app = ibiz.hub.getApp(this.context.srfappid);
22341
+ this.util = new UtilService(
22342
+ app.getAppUtil(this.model.appDynaDashboardUtilId)
22343
+ );
22344
+ } else {
22345
+ this.config = new ConfigService(
22346
+ this.model.appId,
22347
+ "dynadashboard",
22348
+ "dashboard_".concat(((_a = this.model.appDataEntityId) == null ? void 0 : _a.toLowerCase()) || "app", "_").concat((_b = this.model.codeName) == null ? void 0 : _b.toLowerCase())
22349
+ );
22350
+ }
22351
+ }
22352
+ /**
22353
+ * 获取资源标识
22354
+ *
22355
+ * @author tony001
22356
+ * @date 2024-04-24 14:04:55
22357
+ * @private
22358
+ * @return {*} {string}
22359
+ */
22360
+ getResourceTag() {
22361
+ var _a, _b;
22362
+ const base = "".concat(this.context.srfappid, "_dashboard_").concat(((_a = this.model.appDataEntityId) == null ? void 0 : _a.toLowerCase()) || "app", "_").concat((_b = this.model.codeName) == null ? void 0 : _b.toLowerCase());
22363
+ switch (this.type) {
22364
+ case "personal":
22365
+ return "".concat(base, "_").concat(this.context.srfpersonid);
22366
+ case "data":
22367
+ return "".concat(base, "_").concat(this.ownerType, "_").concat(this.ownerId);
22368
+ default:
22369
+ return base;
22370
+ }
22055
22371
  }
22056
22372
  /**
22057
22373
  * 加载自定义布局模型数据
@@ -22060,7 +22376,16 @@ var CustomDashboardController = class {
22060
22376
  * @Date: 2023-09-20 16:22:49
22061
22377
  */
22062
22378
  async loadCustomModelData() {
22063
- const res = await this.config.load();
22379
+ let res;
22380
+ if (this.model.appDynaDashboardUtilId) {
22381
+ res = await this.util.load(
22382
+ this.getResourceTag(),
22383
+ this.context,
22384
+ this.params
22385
+ );
22386
+ } else {
22387
+ res = await this.config.load();
22388
+ }
22064
22389
  if (res.model) {
22065
22390
  this.customModelData = res.model;
22066
22391
  }
@@ -22070,7 +22395,10 @@ var CustomDashboardController = class {
22070
22395
  if (res.rowH) {
22071
22396
  this.layoutRowH = res.rowH;
22072
22397
  }
22073
- return this.customModelData;
22398
+ if (res.config) {
22399
+ this.portletConfig = res.config;
22400
+ }
22401
+ return { model: this.customModelData, config: this.portletConfig };
22074
22402
  }
22075
22403
  /**
22076
22404
  * 保存自定义布局模型数据
@@ -22078,19 +22406,42 @@ var CustomDashboardController = class {
22078
22406
  * @author: zhujiamin
22079
22407
  * @Date: 2023-09-20 16:22:49
22080
22408
  */
22081
- async saveCustomModelData(model) {
22082
- const res = await this.config.save({
22409
+ async saveCustomModelData(model, config = {}) {
22410
+ merge(this.portletConfig, config);
22411
+ let res;
22412
+ const data = {
22083
22413
  model,
22084
22414
  colNum: this.layoutColNum,
22085
- rowH: this.layoutRowH
22086
- });
22415
+ rowH: this.layoutRowH,
22416
+ config: this.portletConfig
22417
+ };
22418
+ if (this.model.appDynaDashboardUtilId) {
22419
+ res = await this.util.save(
22420
+ this.getResourceTag(),
22421
+ this.context,
22422
+ {
22423
+ ...this.params,
22424
+ type: this.type,
22425
+ ownerType: this.ownerType,
22426
+ ownerId: this.ownerId,
22427
+ modelId: this.model.id
22428
+ },
22429
+ data
22430
+ );
22431
+ } else {
22432
+ res = await this.config.save(data);
22433
+ }
22087
22434
  if (res) {
22088
22435
  this.customModelData = model;
22089
22436
  }
22090
- return model;
22437
+ return { model, config: this.portletConfig };
22091
22438
  }
22092
22439
  };
22093
22440
 
22441
+ // src/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.ts
22442
+ import { merge as merge2 } from "lodash-es";
22443
+ import { IBizContext as IBizContext5, IBizParams as IBizParams2 } from "@ibiz-template/core";
22444
+
22094
22445
  // src/controller/control/dashboard/portlet/portlet-part/portlet-part.state.ts
22095
22446
  var PortletPartState = class {
22096
22447
  constructor() {
@@ -22120,26 +22471,38 @@ var PortletPartState = class {
22120
22471
  // src/controller/control/dashboard/portlet/portlet-part/portlet-part.controller.ts
22121
22472
  var PortletPartController = class {
22122
22473
  /**
22123
- * 门户部件的上下文参数
22124
- *
22474
+ * Creates an instance of PortletPartController.
22125
22475
  * @author lxm
22126
- * @date 2022-10-23 16:10:50
22127
- * @readonly
22128
- * @type {IContext}
22476
+ * @date 2022-10-21 10:10:44
22477
+ * @param {T} model
22478
+ * @param {DashboardController} dashboard 数据看板控制器
22479
+ * @param {IPortletContainerController} [parent] 父容器控制器,最上级不存在
22129
22480
  */
22130
- get context() {
22131
- return this.dashboard.context;
22481
+ constructor(model, dashboard, parent) {
22482
+ /**
22483
+ * 门户配置
22484
+ *
22485
+ * @type {IData}
22486
+ * @memberof PortletPartController
22487
+ */
22488
+ this.config = {};
22489
+ this.model = model;
22490
+ this.dashboard = dashboard;
22491
+ this.parent = parent;
22492
+ this.state = this.createState();
22493
+ this.state.context = IBizContext5.create({}, this.dashboard.context);
22494
+ this.params = new IBizParams2({}, this.dashboard.params);
22132
22495
  }
22133
22496
  /**
22134
- * 门户部件的视图参数
22497
+ * 门户部件的上下文参数
22135
22498
  *
22136
22499
  * @author lxm
22137
- * @date 2022-10-23 16:10:21
22500
+ * @date 2022-10-23 16:10:50
22138
22501
  * @readonly
22139
- * @type {IParams}
22502
+ * @type {IContext}
22140
22503
  */
22141
- get params() {
22142
- return this.dashboard.params;
22504
+ get context() {
22505
+ return this.state.context;
22143
22506
  }
22144
22507
  /**
22145
22508
  * 获取容器类名集合
@@ -22152,18 +22515,17 @@ var PortletPartController = class {
22152
22515
  return [...this.state.class.container, ...this.state.class.containerDyna];
22153
22516
  }
22154
22517
  /**
22155
- * Creates an instance of PortletPartController.
22156
- * @author lxm
22157
- * @date 2022-10-21 10:10:44
22158
- * @param {T} model
22159
- * @param {DashboardController} dashboard 数据看板控制器
22160
- * @param {IPortletContainerController} [parent] 父容器控制器,最上级不存在
22518
+ * 内容控制器
22519
+ * @author zzq
22520
+ * @readonly
22521
+ * @type {IController | undefined}
22522
+ * @memberof PortletPartController
22161
22523
  */
22162
- constructor(model, dashboard, parent) {
22163
- this.model = model;
22164
- this.dashboard = dashboard;
22165
- this.parent = parent;
22166
- this.state = this.createState();
22524
+ get contentController() {
22525
+ const { contentControlId } = this.model;
22526
+ if (contentControlId) {
22527
+ return this.dashboard.getController(contentControlId);
22528
+ }
22167
22529
  }
22168
22530
  /**
22169
22531
  * 子类不可覆盖或重写此方法,在 init 时需要重写的使用 onInit 方法。
@@ -22177,7 +22539,7 @@ var PortletPartController = class {
22177
22539
  }
22178
22540
  async onInit() {
22179
22541
  this.onDataChange = this.onDataChange.bind(this);
22180
- const { layoutPos, sysCss } = this.model;
22542
+ const { layoutPos, sysCss, title, titleLanguageRes } = this.model;
22181
22543
  if (layoutPos) {
22182
22544
  const { width, height } = calcLayoutHeightWidth(this.model);
22183
22545
  this.state.layout.width = "".concat(width);
@@ -22186,6 +22548,12 @@ var PortletPartController = class {
22186
22548
  if (sysCss == null ? void 0 : sysCss.cssName) {
22187
22549
  this.state.class.container.push(sysCss.cssName);
22188
22550
  }
22551
+ if (titleLanguageRes) {
22552
+ this.state.title = ibiz.i18n.t(titleLanguageRes.lanResTag, title);
22553
+ } else {
22554
+ this.state.title = title;
22555
+ }
22556
+ this.config = { srftitle: this.state.title };
22189
22557
  await this.initActionStates();
22190
22558
  }
22191
22559
  /**
@@ -22198,6 +22566,30 @@ var PortletPartController = class {
22198
22566
  createState() {
22199
22567
  return new PortletPartState();
22200
22568
  }
22569
+ /**
22570
+ * 刷新门户部件
22571
+ *
22572
+ * @author zzq
22573
+ * @date 2024-04-25 10:03:33
22574
+ */
22575
+ refresh() {
22576
+ }
22577
+ /**
22578
+ * 设置配置数据
22579
+ *
22580
+ * @param {IData} config
22581
+ * @memberof PortletPartController
22582
+ */
22583
+ async setConfig(config) {
22584
+ merge2(this.config, config);
22585
+ this.state.title = this.config.srftitle;
22586
+ delete config.srftitle;
22587
+ merge2(this.params, config);
22588
+ this.dashboard.evt.emit("onConfigChange", {
22589
+ name: this.model.id,
22590
+ config: this.config
22591
+ });
22592
+ }
22201
22593
  /**
22202
22594
  * 数据改变方法
22203
22595
  * @param {DataChangeEvent} event
@@ -22263,10 +22655,11 @@ var PortletPartController = class {
22263
22655
  await UIActionUtil.execAndResolved(
22264
22656
  actionId,
22265
22657
  {
22266
- context: this.dashboard.context,
22267
- params: this.dashboard.params,
22658
+ context: this.context,
22659
+ params: this.params,
22268
22660
  data,
22269
22661
  view: this.dashboard.view,
22662
+ ctrl: this,
22270
22663
  event
22271
22664
  },
22272
22665
  detail.appId
@@ -22317,6 +22710,19 @@ var ContainerPortletController = class extends PortletPartController {
22317
22710
 
22318
22711
  // src/controller/control/dashboard/portlet/view-portlet/view-portlet.controller.ts
22319
22712
  var ViewPortletController = class extends PortletPartController {
22713
+ /**
22714
+ * 刷新门户部件
22715
+ *
22716
+ * @author zzq
22717
+ * @date 2024-04-25 10:03:33
22718
+ */
22719
+ refresh() {
22720
+ if (this.contentController) {
22721
+ this.contentController.callUIAction(
22722
+ "Refresh" /* REFRESH */
22723
+ );
22724
+ }
22725
+ }
22320
22726
  };
22321
22727
 
22322
22728
  // src/controller/control/dashboard/portlet/menu-portlet/menu-portlet.controller.ts
@@ -22325,6 +22731,17 @@ var MenuPortletController = class extends PortletPartController {
22325
22731
 
22326
22732
  // src/controller/control/dashboard/portlet/chart-portlet/chart-portlet.controller.ts
22327
22733
  var ChartPortletController = class extends PortletPartController {
22734
+ /**
22735
+ * 刷新门户部件
22736
+ *
22737
+ * @author zzq
22738
+ * @date 2024-04-25 10:03:33
22739
+ */
22740
+ refresh() {
22741
+ if (this.contentController) {
22742
+ this.contentController.refresh();
22743
+ }
22744
+ }
22328
22745
  };
22329
22746
 
22330
22747
  // src/controller/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.controller.ts
@@ -22337,6 +22754,17 @@ var HtmlPortletController = class extends PortletPartController {
22337
22754
 
22338
22755
  // src/controller/control/dashboard/portlet/list-portlet/list-portlet.controller.ts
22339
22756
  var ListPortletController = class extends PortletPartController {
22757
+ /**
22758
+ * 刷新门户部件
22759
+ *
22760
+ * @author zzq
22761
+ * @date 2024-04-25 10:03:33
22762
+ */
22763
+ refresh() {
22764
+ if (this.contentController) {
22765
+ this.contentController.refresh();
22766
+ }
22767
+ }
22340
22768
  };
22341
22769
 
22342
22770
  // src/controller/control/dashboard/portlet/rawitem-portlet/rawitem-portlet.controller.ts
@@ -23846,7 +24274,7 @@ var FormController = class extends ControlController {
23846
24274
  const counter = await CounterService.getCounterByRef(
23847
24275
  counterRef,
23848
24276
  this.context,
23849
- dataKey ? { customId: dataKey } : void 0
24277
+ dataKey ? { customId: dataKey, ...this.params } : { ...this.params }
23850
24278
  );
23851
24279
  this.counters[counterRef.id] = counter;
23852
24280
  })
@@ -26117,7 +26545,7 @@ var FormTabPanelController = class extends FormDetailController {
26117
26545
  // src/controller/control/form/edit-form/edit-form.controller.ts
26118
26546
  import {
26119
26547
  awaitTimeout,
26120
- IBizContext as IBizContext5,
26548
+ IBizContext as IBizContext6,
26121
26549
  isElementSame as isElementSame2,
26122
26550
  mergeInLeft as mergeInLeft2,
26123
26551
  RuntimeError as RuntimeError55
@@ -26832,7 +27260,7 @@ var EditFormController = class extends FormController {
26832
27260
  switch (autoSaveMode) {
26833
27261
  case 3:
26834
27262
  saveParam.data = this.getDiffData();
26835
- saveParam.context = IBizContext5.create({ srfsimple: true });
27263
+ saveParam.context = IBizContext6.create({ srfsimple: true });
26836
27264
  break;
26837
27265
  default:
26838
27266
  }
@@ -27182,7 +27610,7 @@ import {
27182
27610
  RuntimeError as RuntimeError56,
27183
27611
  RuntimeModelError as RuntimeModelError63
27184
27612
  } from "@ibiz-template/core";
27185
- import { clone as clone27 } from "ramda";
27613
+ import { clone as clone27, isNil as isNil28 } from "ramda";
27186
27614
  import dayjs5 from "dayjs";
27187
27615
 
27188
27616
  // src/controller/control/grid/grid/grid.service.ts
@@ -27467,6 +27895,16 @@ var GridController = class extends MDControlController {
27467
27895
  get allowRowEdit() {
27468
27896
  return !!this.model.enableRowEdit && this.state.rowEditOpen;
27469
27897
  }
27898
+ /**
27899
+ * 允许使用行编辑次序调整
27900
+ * @author zzq
27901
+ * @date 2024-04-22 17:52:07
27902
+ * @readonly
27903
+ * @type {boolean}
27904
+ */
27905
+ get enableRowEditOrder() {
27906
+ return !!this.model.enableRowEditOrder;
27907
+ }
27470
27908
  /**
27471
27909
  * 单元格超出呈现模式
27472
27910
  * @author lxm
@@ -27593,6 +28031,36 @@ var GridController = class extends MDControlController {
27593
28031
  this.dataExportParam.header = degridColumns.map((item) => item.caption);
27594
28032
  }
27595
28033
  }
28034
+ /**
28035
+ * 填充导出代码表
28036
+ * @author zzq
28037
+ * @date 2024-04-23 16:10:17
28038
+ * @protected
28039
+ * @return {*} {Promise<void>}
28040
+ */
28041
+ async fillExportCodelistMap() {
28042
+ if (this.model.dedataExportId) {
28043
+ return;
28044
+ }
28045
+ const fillCodeList = async (key, fieldColumnC) => {
28046
+ const dataItems = await fieldColumnC.loadCodeList();
28047
+ this.allExportCodelistMap.set(key, dataItems);
28048
+ };
28049
+ const exportColumnsPromises = [];
28050
+ for (const [key, codeListItems] of this.allExportCodelistMap) {
28051
+ if (!codeListItems) {
28052
+ const fieldColumn = this.fieldColumns[key];
28053
+ if (fieldColumn.codeListItems) {
28054
+ this.allExportCodelistMap.set(key, fieldColumn.codeListItems);
28055
+ } else {
28056
+ exportColumnsPromises.push(fillCodeList(key, fieldColumn));
28057
+ }
28058
+ }
28059
+ }
28060
+ if (exportColumnsPromises.length > 0) {
28061
+ await Promise.all(exportColumnsPromises);
28062
+ }
28063
+ }
27596
28064
  /**
27597
28065
  * 初始化表格分组
27598
28066
  * @author lxm
@@ -27644,7 +28112,34 @@ var GridController = class extends MDControlController {
27644
28112
  }
27645
28113
  this.calcColumnFixed();
27646
28114
  }
28115
+ /**
28116
+ * 本地排序items
28117
+ * @author zzq
28118
+ * @date 2024-04-22 19:30:55
28119
+ * @param {IData[]} items
28120
+ */
28121
+ sortItems(items) {
28122
+ const sortField = this.model.orderValueAppDEFieldId;
28123
+ if (!sortField || !this.enableRowEditOrder) {
28124
+ return;
28125
+ }
28126
+ items.forEach((item) => {
28127
+ const sortValue = item[sortField];
28128
+ if (isNil28(sortValue)) {
28129
+ item[sortField] = 0;
28130
+ } else {
28131
+ const toNum = Number(sortValue);
28132
+ if (Number.isNaN(toNum)) {
28133
+ throw new RuntimeError56(
28134
+ "".concat(item.srfmajortext, "\u7684\u6392\u5E8F\u5C5E\u6027\u65E0\u6CD5\u8F6C\u6362\u6210\u6570\u503C")
28135
+ );
28136
+ }
28137
+ }
28138
+ });
28139
+ items.sort((a, b) => a[sortField] - b[sortField]);
28140
+ }
27647
28141
  async afterLoad(args, items) {
28142
+ this.sortItems(this.state.items);
27648
28143
  await super.afterLoad(args, items);
27649
28144
  await handleAllSettled(
27650
28145
  Object.values(this.fieldColumns).map(async (fieldColumn) => {
@@ -28334,6 +28829,7 @@ var GridController = class extends MDControlController {
28334
28829
  if (!header) {
28335
28830
  throw new RuntimeError56("\u65E0\u8868\u683C\u5217");
28336
28831
  }
28832
+ await this.fillExportCodelistMap();
28337
28833
  const data = await this.getExportData(args.params);
28338
28834
  const formatData = this.formatExcelData(data);
28339
28835
  const table = formatData.map((v) => Object.values(v));
@@ -28523,13 +29019,70 @@ var GridController = class extends MDControlController {
28523
29019
  }
28524
29020
  super.actionNotification(tag, { ...opts || {} });
28525
29021
  }
29022
+ /**
29023
+ * 拖拽变更事件处理回调
29024
+ * @author: zzq
29025
+ * @date 2024-04-22 18:12:58
29026
+ * @return {*} {Promise<void>}
29027
+ */
29028
+ async onDragChange() {
29029
+ const sortField = this.model.orderValueAppDEFieldId;
29030
+ const getNextSort = (num) => {
29031
+ return num + (100 - num % 100);
29032
+ };
29033
+ const changedArr = this.state.rows.map((row) => row.data);
29034
+ let lastSort;
29035
+ const modifiedItems = [];
29036
+ changedArr.forEach((item) => {
29037
+ if (lastSort === void 0) {
29038
+ lastSort = item[sortField] || 100;
29039
+ if (!item[sortField]) {
29040
+ item[sortField] = lastSort;
29041
+ modifiedItems.push(item);
29042
+ }
29043
+ } else {
29044
+ if (!item[sortField] || lastSort >= item[sortField]) {
29045
+ item[sortField] = getNextSort(lastSort);
29046
+ modifiedItems.push(item);
29047
+ }
29048
+ lastSort = item[sortField];
29049
+ }
29050
+ });
29051
+ this.updateChangedItems(modifiedItems);
29052
+ }
29053
+ /**
29054
+ * 更新改变项数据
29055
+ * @author: zzq
29056
+ * @date 2024-04-22 17:12:58
29057
+ * @return {*} {Promise<void>}
29058
+ */
29059
+ async updateChangedItems(changedItems) {
29060
+ try {
29061
+ await Promise.all(
29062
+ changedItems.map(async (item) => {
29063
+ const deName = calcDeCodeNameById(this.model.appDataEntityId);
29064
+ const tempContext = this.context.clone();
29065
+ tempContext[deName] = item.srfkey;
29066
+ const res = await this.service.update(tempContext, item);
29067
+ if (res.data) {
29068
+ const index = this.state.items.findIndex(
29069
+ (x) => x.srfkey === item.srfkey
29070
+ );
29071
+ this.state.items.splice(index, 1, res.data);
29072
+ }
29073
+ })
29074
+ );
29075
+ } finally {
29076
+ await this.afterLoad({}, this.state.items);
29077
+ }
29078
+ }
28526
29079
  };
28527
29080
 
28528
29081
  // src/controller/control/grid/grid-column/grid-field-column/grid-field-column.controller.ts
28529
29082
  import { DataTypes as DataTypes4, ModelError as ModelError29, plus as plus2 } from "@ibiz-template/core";
28530
29083
  import dayjs6 from "dayjs";
28531
29084
  import { debounce as debounce2 } from "lodash-es";
28532
- import { clone as clone28, isNil as isNil28 } from "ramda";
29085
+ import { clone as clone28, isNil as isNil29 } from "ramda";
28533
29086
  var GridFieldColumnController = class extends GridColumnController {
28534
29087
  constructor() {
28535
29088
  super(...arguments);
@@ -28741,11 +29294,11 @@ var GridFieldColumnController = class extends GridColumnController {
28741
29294
  */
28742
29295
  calcFieldAgg(items) {
28743
29296
  const { aggField, aggMode, aggValueFormat, unitName } = this.model;
28744
- if (isNil28(aggMode) || aggMode === "NONE") {
29297
+ if (isNil29(aggMode) || aggMode === "NONE") {
28745
29298
  return;
28746
29299
  }
28747
29300
  const fieldName = aggField || this.model.id;
28748
- items = items.filter((item) => !isNil28(item[fieldName]));
29301
+ items = items.filter((item) => !isNil29(item[fieldName]));
28749
29302
  let aggValue;
28750
29303
  if (this.grid.model.aggMode === "PAGE") {
28751
29304
  switch (aggMode) {
@@ -30706,7 +31259,7 @@ var SearchBarFilterItemsController = class extends SearchBarFilterController {
30706
31259
 
30707
31260
  // src/controller/control/search-bar/interface-util.ts
30708
31261
  import { recursiveIterate as recursiveIterate9 } from "@ibiz-template/core";
30709
- import { isNil as isNil29 } from "ramda";
31262
+ import { isNil as isNil30 } from "ramda";
30710
31263
  function getOriginFilterNodes() {
30711
31264
  return [
30712
31265
  {
@@ -30728,7 +31281,7 @@ function validateFilterNodes(filterNodes) {
30728
31281
  }
30729
31282
  if (node.nodeType === "FIELD") {
30730
31283
  hasFilter = true;
30731
- hasError = !node.field || !node.valueOP || isNil29(node.value);
31284
+ hasError = !node.field || !node.valueOP || isNil30(node.value);
30732
31285
  } else if (node.nodeType === "ITEMS") {
30733
31286
  hasError = !node.field || !node.valueOP;
30734
31287
  } else {
@@ -31753,7 +32306,7 @@ import {
31753
32306
  RuntimeModelError as RuntimeModelError66,
31754
32307
  recursiveIterate as recursiveIterate11
31755
32308
  } from "@ibiz-template/core";
31756
- import { isNil as isNil30 } from "ramda";
32309
+ import { isNil as isNil31 } from "ramda";
31757
32310
 
31758
32311
  // src/controller/control/tree/tree.service.ts
31759
32312
  import { ModelError as ModelError30 } from "@ibiz-template/core";
@@ -32201,7 +32754,8 @@ var TreeController = class extends MDControlController {
32201
32754
  if (appCounterRef) {
32202
32755
  this.counter = await CounterService.getCounterByRef(
32203
32756
  appCounterRef,
32204
- this.context
32757
+ this.context,
32758
+ { ...this.params }
32205
32759
  );
32206
32760
  }
32207
32761
  }
@@ -32831,7 +33385,7 @@ var TreeController = class extends MDControlController {
32831
33385
  * @return {*} {void}
32832
33386
  */
32833
33387
  onDEDataChange(msg) {
32834
- if (!isNil30(msg.triggerKey) && msg.triggerKey === this.triggerKey) {
33388
+ if (!isNil31(msg.triggerKey) && msg.triggerKey === this.triggerKey) {
32835
33389
  return;
32836
33390
  }
32837
33391
  if (msg.subtype === "OBJECTCREATED") {
@@ -32947,14 +33501,22 @@ var WizardPanelController = class extends ControlController {
32947
33501
  */
32948
33502
  this.formData = {};
32949
33503
  }
33504
+ /**
33505
+ * 获取向导面板数据
33506
+ * @returns
33507
+ */
33508
+ getData() {
33509
+ return [this.formData];
33510
+ }
32950
33511
  initState() {
32951
33512
  super.initState();
33513
+ this.state.buttonsState = new ButtonContainerState();
32952
33514
  }
32953
33515
  async onCreated() {
32954
33516
  var _a, _b;
32955
33517
  await super.onCreated();
32956
33518
  this.model.dewizard.dewizardForms.forEach((wizardForm) => {
32957
- var _a2, _b2, _c;
33519
+ var _a2, _b2, _c, _d;
32958
33520
  if (wizardForm.firstForm) {
32959
33521
  this.firstForm = wizardForm;
32960
33522
  }
@@ -32964,7 +33526,17 @@ var WizardPanelController = class extends ControlController {
32964
33526
  });
32965
33527
  const stepTag = wizardStep == null ? void 0 : wizardStep.stepTag;
32966
33528
  this.stepTags[formName] = stepTag;
33529
+ (_d = wizardForm.stepActions) == null ? void 0 : _d.forEach((step) => {
33530
+ const name = "".concat(wizardForm.formTag, "@").concat(step);
33531
+ const buttonState = new UIActionButtonState(
33532
+ name,
33533
+ this.context.srfappid
33534
+ );
33535
+ buttonState.visible = !this.getStepScriptCode(wizardForm, step);
33536
+ this.state.buttonsState.addState(name, buttonState);
33537
+ });
32967
33538
  });
33539
+ this.state.buttonsState.init();
32968
33540
  (_b = (_a = this.model.dewizard) == null ? void 0 : _a.dewizardSteps) == null ? void 0 : _b.forEach((step) => {
32969
33541
  this.steps.push(step.stepTag);
32970
33542
  });
@@ -33031,7 +33603,11 @@ var WizardPanelController = class extends ControlController {
33031
33603
  async onFormMounted(activeFormTag, event) {
33032
33604
  const formController = event.ctrl;
33033
33605
  this.formControllers.set(activeFormTag, formController);
33606
+ formController.evt.on("onFormDataChange", (evt) => {
33607
+ this.calcButtonState(evt.data[0]);
33608
+ });
33034
33609
  const data = await formController.load();
33610
+ this.calcButtonState(formController.data);
33035
33611
  Object.assign(this.formData, data);
33036
33612
  }
33037
33613
  /**
@@ -33200,11 +33776,60 @@ var WizardPanelController = class extends ControlController {
33200
33776
  await this.activeFormController.save();
33201
33777
  await this.finish();
33202
33778
  }
33779
+ /**
33780
+ * 获取向导表单步骤脚本代码
33781
+ * @param wizardForm
33782
+ * @param step
33783
+ */
33784
+ getStepScriptCode(wizardForm, step) {
33785
+ switch (step) {
33786
+ case "PREV":
33787
+ return wizardForm.goPrevEnableScriptCode;
33788
+ case "NEXT":
33789
+ return wizardForm.goNextEnableScriptCode;
33790
+ case "FINISH":
33791
+ return wizardForm.goFinishEnableScriptCode;
33792
+ default:
33793
+ }
33794
+ }
33795
+ /**
33796
+ * 计算按钮状态
33797
+ *
33798
+ * @param item 数据
33799
+ * @memberof WizardPanelController
33800
+ */
33801
+ async calcButtonState(item) {
33802
+ var _a;
33803
+ const { activeWizardForm } = this;
33804
+ if (activeWizardForm) {
33805
+ let data = item;
33806
+ if (data && data instanceof ControlVO) {
33807
+ data = data.getOrigin();
33808
+ }
33809
+ (_a = activeWizardForm.stepActions) == null ? void 0 : _a.forEach((step) => {
33810
+ const buttonState = this.state.buttonsState["".concat(activeWizardForm.formTag, "@").concat(step)];
33811
+ const scriptCode = this.getStepScriptCode(activeWizardForm, step);
33812
+ if (buttonState && scriptCode) {
33813
+ buttonState.visible = !!ScriptFactory.execScriptFn(
33814
+ {
33815
+ view: this.view,
33816
+ context: this.context,
33817
+ params: this.params,
33818
+ data,
33819
+ env: ibiz.env
33820
+ },
33821
+ scriptCode,
33822
+ { isAsync: false, singleRowReturn: true }
33823
+ );
33824
+ }
33825
+ });
33826
+ }
33827
+ }
33203
33828
  };
33204
33829
 
33205
33830
  // src/controller/control/md-ctrl/md-ctrl.controller.ts
33206
33831
  import { RuntimeModelError as RuntimeModelError67 } from "@ibiz-template/core";
33207
- import { isNil as isNil31 } from "ramda";
33832
+ import { isNil as isNil32 } from "ramda";
33208
33833
 
33209
33834
  // src/controller/control/md-ctrl/md-ctrl.service.ts
33210
33835
  var MDCtrlService = class extends MDControlService {
@@ -33433,7 +34058,7 @@ var MDCtrlController = class extends MDControlController {
33433
34058
  const groupMap = /* @__PURE__ */ new Map();
33434
34059
  items.forEach((item) => {
33435
34060
  const groupVal = item[groupAppDEFieldId];
33436
- if (isNil31(groupVal)) {
34061
+ if (isNil32(groupVal)) {
33437
34062
  return;
33438
34063
  }
33439
34064
  if (!groupMap.has(groupVal)) {
@@ -33510,7 +34135,7 @@ var MDCtrlController = class extends MDControlController {
33510
34135
 
33511
34136
  // src/controller/control/kanban/kanban.controller.ts
33512
34137
  import { RuntimeError as RuntimeError62, RuntimeModelError as RuntimeModelError68 } from "@ibiz-template/core";
33513
- import { isNil as isNil32 } from "ramda";
34138
+ import { isNil as isNil33 } from "ramda";
33514
34139
 
33515
34140
  // src/controller/control/kanban/kanban.service.ts
33516
34141
  var KanbanService = class extends DataViewControlService {
@@ -33596,7 +34221,7 @@ var KanbanController = class extends DataViewControlController {
33596
34221
  const isAsc = minorSortDir === "ASC";
33597
34222
  items.forEach((item) => {
33598
34223
  const sortValue = item[sortField];
33599
- if (isNil32(sortValue)) {
34224
+ if (isNil33(sortValue)) {
33600
34225
  item[sortField] = 0;
33601
34226
  } else {
33602
34227
  const toNum = Number(sortValue);
@@ -33739,7 +34364,7 @@ var KanbanController = class extends DataViewControlController {
33739
34364
  const groupMap = /* @__PURE__ */ new Map();
33740
34365
  items.forEach((item) => {
33741
34366
  const groupVal = item[groupAppDEFieldId];
33742
- if (isNil32(groupVal)) {
34367
+ if (isNil33(groupVal)) {
33743
34368
  return;
33744
34369
  }
33745
34370
  if (!groupMap.has(groupVal)) {
@@ -36681,7 +37306,7 @@ import { QXEvent as QXEvent10 } from "qx-util";
36681
37306
  // src/controller/notification/async-action.controller.ts
36682
37307
  import { QXEvent as QXEvent8 } from "qx-util";
36683
37308
  import { clone as clone33 } from "ramda";
36684
- import { isNil as isNil33, isNumber as isNumber2 } from "lodash-es";
37309
+ import { isNil as isNil34, isNumber as isNumber2 } from "lodash-es";
36685
37310
  import dayjs8 from "dayjs";
36686
37311
  var AsyncActionController = class {
36687
37312
  constructor() {
@@ -36756,14 +37381,14 @@ var AsyncActionController = class {
36756
37381
  data[key] = dayjs8(data[key]).format("YYYY-MM-DD HH:mm:ss");
36757
37382
  }
36758
37383
  });
36759
- if (!isNil33(data.actionresult)) {
37384
+ if (!isNil34(data.actionresult)) {
36760
37385
  try {
36761
37386
  const json = JSON.parse(data.actionresult);
36762
37387
  data.actionresult = json;
36763
37388
  } catch (error) {
36764
37389
  }
36765
37390
  }
36766
- if (!isNil33(data.completionrate)) {
37391
+ if (!isNil34(data.completionrate)) {
36767
37392
  const num = Number(data.completionrate);
36768
37393
  if (Number.isNaN(num)) {
36769
37394
  data.completionrate = void 0;
@@ -39678,6 +40303,7 @@ export {
39678
40303
  UIDomainManager,
39679
40304
  UILOGINNODE_PROVIDER_PREFIX,
39680
40305
  UIMapField,
40306
+ UtilService,
39681
40307
  V7AuthService,
39682
40308
  VIEW_PROVIDER_PREFIX,
39683
40309
  ValueExUtil,