@ibiz-template/runtime 0.7.41-alpha.115 → 0.7.41-alpha.117

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 (62) hide show
  1. package/dist/index.esm.js +98 -25
  2. package/dist/index.system.min.js +1 -1
  3. package/out/config/global-config.d.ts.map +1 -1
  4. package/out/config/global-config.js +1 -0
  5. package/out/controller/common/control/md-control.controller.d.ts.map +1 -1
  6. package/out/controller/common/control/md-control.controller.js +3 -2
  7. package/out/controller/control/data-view/data-view.controller.d.ts.map +1 -1
  8. package/out/controller/control/data-view/data-view.controller.js +1 -1
  9. package/out/controller/control/grid/grid/grid.controller.d.ts +2 -1
  10. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  11. package/out/controller/control/grid/grid/grid.controller.js +8 -4
  12. package/out/controller/control/kanban/kanban.controller.d.ts.map +1 -1
  13. package/out/controller/control/kanban/kanban.controller.js +2 -0
  14. package/out/controller/control/list/list.controller.d.ts.map +1 -1
  15. package/out/controller/control/list/list.controller.js +1 -1
  16. package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts +2 -1
  17. package/out/controller/control/md-ctrl/md-ctrl.controller.d.ts.map +1 -1
  18. package/out/controller/control/md-ctrl/md-ctrl.controller.js +8 -4
  19. package/out/controller/control/toolbar/toolbar.controller.d.ts.map +1 -1
  20. package/out/controller/control/toolbar/toolbar.controller.js +18 -3
  21. package/out/controller/utils/button-state/button-container.state.d.ts +1 -1
  22. package/out/controller/utils/button-state/button-container.state.d.ts.map +1 -1
  23. package/out/controller/utils/button-state/button-container.state.js +2 -2
  24. package/out/controller/utils/button-state/ui-action-button.state.d.ts +1 -1
  25. package/out/controller/utils/button-state/ui-action-button.state.d.ts.map +1 -1
  26. package/out/controller/utils/button-state/ui-action-button.state.js +9 -3
  27. package/out/interface/api/common/global-config/i-api-global-common-config.d.ts +9 -0
  28. package/out/interface/api/common/global-config/i-api-global-common-config.d.ts.map +1 -1
  29. package/out/interface/api/state/common/i-api-button-container.state.d.ts +2 -1
  30. package/out/interface/api/state/common/i-api-button-container.state.d.ts.map +1 -1
  31. package/out/interface/api/state/common/i-api-button.state.d.ts +2 -1
  32. package/out/interface/api/state/common/i-api-button.state.d.ts.map +1 -1
  33. package/out/interface/api/state/control/i-api-md-control.state.d.ts +7 -0
  34. package/out/interface/api/state/control/i-api-md-control.state.d.ts.map +1 -1
  35. package/out/platform/provider/platform-provider-base.d.ts.map +1 -1
  36. package/out/platform/provider/platform-provider-base.js +9 -0
  37. package/out/service/service/control/md-control.service.d.ts +2 -1
  38. package/out/service/service/control/md-control.service.d.ts.map +1 -1
  39. package/out/service/service/control/md-control.service.js +14 -4
  40. package/out/ui-action/provider/front-ui-action-provider.d.ts.map +1 -1
  41. package/out/ui-action/provider/front-ui-action-provider.js +18 -0
  42. package/out/ui-action/provider/ui-action-provider-base.d.ts.map +1 -1
  43. package/out/ui-action/provider/ui-action-provider-base.js +5 -0
  44. package/package.json +5 -5
  45. package/src/config/global-config.ts +1 -0
  46. package/src/controller/common/control/md-control.controller.ts +3 -2
  47. package/src/controller/control/data-view/data-view.controller.ts +1 -1
  48. package/src/controller/control/grid/grid/grid.controller.ts +14 -4
  49. package/src/controller/control/kanban/kanban.controller.ts +2 -0
  50. package/src/controller/control/list/list.controller.ts +1 -0
  51. package/src/controller/control/md-ctrl/md-ctrl.controller.ts +14 -4
  52. package/src/controller/control/toolbar/toolbar.controller.ts +26 -1
  53. package/src/controller/utils/button-state/button-container.state.ts +2 -1
  54. package/src/controller/utils/button-state/ui-action-button.state.ts +11 -1
  55. package/src/interface/api/common/global-config/i-api-global-common-config.ts +10 -0
  56. package/src/interface/api/state/common/i-api-button-container.state.ts +2 -0
  57. package/src/interface/api/state/common/i-api-button.state.ts +2 -0
  58. package/src/interface/api/state/control/i-api-md-control.state.ts +8 -0
  59. package/src/platform/provider/platform-provider-base.ts +15 -0
  60. package/src/service/service/control/md-control.service.ts +15 -3
  61. package/src/ui-action/provider/front-ui-action-provider.ts +22 -0
  62. package/src/ui-action/provider/ui-action-provider-base.ts +6 -0
@@ -1 +1 @@
1
- {"version":3,"file":"md-control.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/control/md-control.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAAa,gBAAgB,CAC3B,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,cAAc,CAAC,CAAC,CAAC;IACzB;;;;;;;;OAQG;IACG,KAAK,CACT,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAQtC;;;;;;;;OAQG;IACG,GAAG,CACP,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAOpC;;;;;;;;OAQG;IACG,QAAQ,CACZ,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAQpC;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC;IAOzB;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAQpC;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAQpC;;;;;;;;OAQG;IACG,WAAW,CACf,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,SAAS,EAAE,GAChB,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAYtC;;;;;;;OAOG;IACG,UAAU,CACd,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,OAAO,CAAC;IAcnB;;;;;;;OAOG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa;CA8BvD"}
1
+ {"version":3,"file":"md-control.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/control/md-control.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBAAa,gBAAgB,CAC3B,CAAC,SAAS,cAAc,GAAG,cAAc,CACzC,SAAQ,cAAc,CAAC,CAAC,CAAC;IACzB;;;;;;;;;OASG;IACG,KAAK,CACT,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,OAAY,GACjB,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAYtC;;;;;;;;OAQG;IACG,GAAG,CACP,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAOpC;;;;;;;;OAQG;IACG,QAAQ,CACZ,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAQpC;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,aAAa,CAAC;IAOzB;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAQpC;;;;;;;;OAQG;IACG,MAAM,CACV,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAQpC;;;;;;;;OAQG;IACG,WAAW,CACf,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,SAAS,EAAE,GAChB,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAYtC;;;;;;;OAOG;IACG,UAAU,CACd,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,QAAQ,EACjB,MAAM,GAAE,OAAY,GACnB,OAAO,CAAC,OAAO,CAAC;IAoBnB;;;;;;;OAOG;IACH,cAAc,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa;CA8BvD"}
@@ -8,11 +8,16 @@ export class MDControlService extends ControlService {
8
8
  * @date 2022-08-31 17:08:41
9
9
  * @param {IContext} context 上下文
10
10
  * @param {IParams} [params={}] 视图参数
11
+ * @param {IParams} [args={}] 额外参数
11
12
  * @returns {*} {Promise<IHttpResponse>}
12
13
  */
13
- async fetch(context, params = {}) {
14
+ async fetch(context, params = {}, args = {}) {
14
15
  var _a;
15
- const fetchAction = ((_a = this.model.fetchControlAction) === null || _a === void 0 ? void 0 : _a.appDEMethodId) || 'fetchdefault';
16
+ let fetchAction = ((_a = this.model.fetchControlAction) === null || _a === void 0 ? void 0 : _a.appDEMethodId) || 'fetchdefault';
17
+ // 识别用户定义参数导出数据集合
18
+ if (args.srfexportdataset) {
19
+ fetchAction = args.srfexportdataset;
20
+ }
16
21
  let res = await this.exec(fetchAction, context, params);
17
22
  res = this.handleResponse(res);
18
23
  return res;
@@ -122,8 +127,13 @@ export class MDControlService extends ControlService {
122
127
  */
123
128
  async exportData(dataExport, context, params = {}) {
124
129
  const entityService = await this.app.deService.getService(context, this.model.appDataEntityId);
125
- return entityService.file.export(dataExport, dataExport.appDEDataSetId ||
126
- this.model.fetchControlAction.appDEMethodId, context, params);
130
+ let tempFetchAction = dataExport.appDEDataSetId ||
131
+ this.model.fetchControlAction.appDEMethodId;
132
+ // 识别用户定义的视图参数导出数据集合
133
+ if (params.srfexportdataset) {
134
+ tempFetchAction = params.srfexportdataset;
135
+ }
136
+ return entityService.file.export(dataExport, tempFetchAction, context, params);
127
137
  }
128
138
  /**
129
139
  * 处理响应
@@ -1 +1 @@
1
- {"version":3,"file":"front-ui-action-provider.d.ts","sourceRoot":"","sources":["../../../src/ui-action/provider/front-ui-action-provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,WAAW,EAEX,aAAa,EACb,cAAc,EACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAIL,cAAc,EACd,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;IACvD,UAAU,CACd,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAgG3B;;;;;;;;OAQG;cACa,OAAO,CACrB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAkC3B;;;;;;OAMG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IAkEhB;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA6B3B;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IA4EhB;;;;;;;;OAQG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA+D3B;;;;;;;;OAQG;cACa,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAuD3B;;;;;;;;OAQG;IACH,SAAS,CAAC,kBAAkB,CAC1B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,WAAW,CAAC,EAAE,aAAa,GAC1B,WAAW,GAAG,SAAS;IAc1B;;;;;;;;OAQG;cACa,UAAU,CACxB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;CA0B5B"}
1
+ {"version":3,"file":"front-ui-action-provider.d.ts","sourceRoot":"","sources":["../../../src/ui-action/provider/front-ui-action-provider.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,WAAW,EAEX,aAAa,EACb,cAAc,EACf,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAIL,cAAc,EACd,eAAe,EAEhB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE;;;;;;GAMG;AACH,qBAAa,qBAAsB,SAAQ,oBAAoB;IACvD,UAAU,CACd,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAgG3B;;;;;;;;OAQG;cACa,OAAO,CACrB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAkC3B;;;;;;OAMG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IAkEhB;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA6B3B;;;;;;OAMG;cACa,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC;IAkGhB;;;;;;;;OAQG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA+D3B;;;;;;;;OAQG;cACa,aAAa,CAC3B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IAuD3B;;;;;;;;OAQG;IACH,SAAS,CAAC,kBAAkB,CAC1B,SAAS,EAAE,WAAW,GAAG,SAAS,EAClC,WAAW,CAAC,EAAE,aAAa,GAC1B,WAAW,GAAG,SAAS;IAc1B;;;;;;;;OAQG;cACa,UAAU,CACxB,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;CA0B5B"}
@@ -243,6 +243,24 @@ export class FrontUIActionProvider extends UIActionProviderBase {
243
243
  const params = Object.assign(Object.assign({ page: 0, size: appDEDataExport.maxRowCount
244
244
  ? appDEDataExport.maxRowCount
245
245
  : ibiz.config.common.maxExportRowsDefault }, args.params), resultParams);
246
+ // 多项数据和多项数据主键如果没有选择全部界面参数则认为导出选中行
247
+ const { actionTarget } = action;
248
+ if ((actionTarget === 'MULTIDATA' || actionTarget === 'MULTIKEY') &&
249
+ !args.params.srfallselected) {
250
+ const srfexportdatakey = presetParams.srfexportdatakey || 'srfkey';
251
+ const tempParams = {};
252
+ if (args && args.data && args.data.length > 0) {
253
+ Object.assign(tempParams, {
254
+ srfkeys: args.data.map(data => data[srfexportdatakey]).join(','),
255
+ });
256
+ }
257
+ Object.assign(params, tempParams);
258
+ }
259
+ // 如果srfallselected存在需要删除,规范化参数
260
+ if (params &&
261
+ Object.prototype.hasOwnProperty.call(params, 'srfallselected')) {
262
+ delete params.srfallselected;
263
+ }
246
264
  // 异步导出时只发消息不下载
247
265
  if (isAsyncAction) {
248
266
  const app = await ibiz.hub.getAppAsync(action.appId);
@@ -1 +1 @@
1
- {"version":3,"file":"ui-action-provider-base.d.ts","sourceRoot":"","sources":["../../../src/ui-action/provider/ui-action-provider-base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAgC,MAAM,kBAAkB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAMzB;;;;;;;GAOG;AACH,8BAAsB,oBAAqB,YAAW,iBAAiB;IACrE;;;;;;;OAOG;IACG,IAAI,CACR,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA+H3B;;;;;;;;OAQG;IACH,SAAS,CAAC,iBAAiB,CACzB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,eAAe,GACtB,cAAc;IASjB;;;;;;;;OAQG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,eAAe,GACpB,eAAe;IAUlB;;;;;;;OAOG;IACG,SAAS,CACb,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,OAAO,CAAC;IAWnB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,UAAU,CACjB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,eAAe,CAAC;IAE3B;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAOvC;;;;;;;;;;;;;;;;OAgBG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,EAAE,EACb,MAAM,EAAE,OAAO,GACd,OAAO,CAAC;QACT,aAAa,EAAE,QAAQ,CAAC;QACxB,UAAU,EAAE,KAAK,EAAE,CAAC;QACpB,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IAkIF;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,CACnB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,MAAM,GAAG,SAAS;IA4CrB;;;;;;;;OAQG;IACH,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;CAc5C"}
1
+ {"version":3,"file":"ui-action-provider-base.d.ts","sourceRoot":"","sources":["../../../src/ui-action/provider/ui-action-provider-base.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAgC,MAAM,kBAAkB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAMzB;;;;;;;GAOG;AACH,8BAAsB,oBAAqB,YAAW,iBAAiB;IACrE;;;;;;;OAOG;IACG,IAAI,CACR,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,eAAe,CAAC;IA+H3B;;;;;;;;OAQG;IACH,SAAS,CAAC,iBAAiB,CACzB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,eAAe,GACtB,cAAc;IASjB;;;;;;;;OAQG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,eAAe,GACpB,eAAe;IAUlB;;;;;;;OAOG;IACG,SAAS,CACb,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,OAAO,CAAC;IAWnB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,UAAU,CACjB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,eAAe,CAAC;IAE3B;;;;;;;;;;;OAWG;IACG,YAAY,CAChB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAOvC;;;;;;;;;;;;;;;;OAgBG;cACa,YAAY,CAC1B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE,KAAK,EAAE,EACb,MAAM,EAAE,OAAO,GACd,OAAO,CAAC;QACT,aAAa,EAAE,QAAQ,CAAC;QACxB,UAAU,EAAE,KAAK,EAAE,CAAC;QACpB,YAAY,EAAE,OAAO,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC;IAwIF;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,CACnB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,cAAc,GACnB,MAAM,GAAG,SAAS;IA4CrB;;;;;;;;OAQG;IACH,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK;CAc5C"}
@@ -276,6 +276,11 @@ export class UIActionProviderBase {
276
276
  presetParams.srfexportdataset = resultParams.srfexportdataset;
277
277
  delete resultParams.srfexportdataset;
278
278
  }
279
+ // srfexportdatakey(指定数据导出传入数据主键属性)
280
+ if (resultParams.hasOwnProperty('srfexportdatakey')) {
281
+ presetParams.srfexportdatakey = resultParams.srfexportdatakey;
282
+ delete resultParams.srfexportdatakey;
283
+ }
279
284
  // srfasyncaction(指定当前界面行为是否异步(目前仅数据导出使用))
280
285
  if (resultParams.hasOwnProperty('srfasyncaction')) {
281
286
  presetParams.srfasyncaction = resultParams.srfasyncaction;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.7.41-alpha.115",
3
+ "version": "0.7.41-alpha.117",
4
4
  "description": "运行时逻辑库",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -39,8 +39,8 @@
39
39
  "jsencrypt": "^3.3.2"
40
40
  },
41
41
  "devDependencies": {
42
- "@ibiz-template/core": "^0.7.41-alpha.113",
43
- "@ibiz/model-core": "^0.1.88",
42
+ "@ibiz-template/core": "^0.7.41-alpha.117",
43
+ "@ibiz/model-core": "^0.1.89",
44
44
  "@types/animejs": "^3.1.12",
45
45
  "@types/path-browserify": "^1.0.2",
46
46
  "@types/qs": "^6.9.11",
@@ -58,7 +58,7 @@
58
58
  },
59
59
  "peerDependencies": {
60
60
  "@ibiz-template/core": "^0.6.0",
61
- "@ibiz/model-core": "^0.1.88",
61
+ "@ibiz/model-core": "^0.1.89",
62
62
  "async-validator": "^4.2.5",
63
63
  "dayjs": "^1.11.7",
64
64
  "echarts": "^5.4.3",
@@ -70,5 +70,5 @@
70
70
  "qx-util": "^0.4.8",
71
71
  "ramda": "^0.29.0"
72
72
  },
73
- "gitHead": "107eb2866f38c030a08572b09da812a13b67ac66"
73
+ "gitHead": "d78a9099a5f4b8820786c9e58372ef68d8e30c4c"
74
74
  }
@@ -131,6 +131,7 @@ export class GlobalConfig implements IGlobalConfig {
131
131
  counterMaxValue: 99,
132
132
  enhancedUI: false,
133
133
  maxExportRowsDefault: 1000,
134
+ uiActionPermissionMode: 'default',
134
135
  };
135
136
 
136
137
  // 全局分页流布局配置
@@ -187,6 +187,7 @@ export class MDControlController<
187
187
  this.state.groups = [];
188
188
  this.state.hideNoDataImage = false;
189
189
  this.state.enableGroup = !!(this.model as IData).enableGroup;
190
+ this.state.isSelectedAll = false;
190
191
  }
191
192
 
192
193
  /**
@@ -792,12 +793,12 @@ export class MDControlController<
792
793
  this.batchToolbarController?.calcButtonState(
793
794
  data,
794
795
  this.model.appDataEntityId,
795
- { view: this.view, ctrl: this },
796
+ { view: this.view, ctrl: this, data: selection },
796
797
  );
797
798
  this.quickToolbarController?.calcButtonState(
798
799
  data,
799
800
  this.model.appDataEntityId,
800
- { view: this.view, ctrl: this },
801
+ { view: this.view, ctrl: this, data: selection },
801
802
  );
802
803
  }
803
804
 
@@ -323,6 +323,7 @@ export class DataViewControlController<
323
323
  this.context,
324
324
  actionGroup.selectedData![0],
325
325
  this.model.appDataEntityId!,
326
+ actionGroup.selectedData,
326
327
  );
327
328
  }
328
329
  }
@@ -335,7 +336,6 @@ export class DataViewControlController<
335
336
  * @date 2024-05-29 19:18:42
336
337
  * @return {*} {void}
337
338
  */
338
-
339
339
  calcShowMode(items: IData): void {
340
340
  const { enablePagingBar } = this.model;
341
341
  this.state.hideNoDataImage = false;
@@ -1571,10 +1571,14 @@ export class GridController<
1571
1571
  * @author zk
1572
1572
  * @date 2023-07-20 04:07:49
1573
1573
  * @param {MDCtrlLoadParams} args
1574
+ * @param {IParams} [fetchArgs={}] 透传给 service.fetch 的额外参数,如 srfexportdataset
1574
1575
  * @return {*}
1575
1576
  * @memberof GridController
1576
1577
  */
1577
- async loadData(args: MDCtrlLoadParams): Promise<ControlVO[]> {
1578
+ async loadData(
1579
+ args: MDCtrlLoadParams,
1580
+ fetchArgs: IParams = {},
1581
+ ): Promise<ControlVO[]> {
1578
1582
  // *查询参数处理
1579
1583
  const { context } = this.handlerAbilityParams(args);
1580
1584
  const params = await this.getFetchParams(args?.viewParam);
@@ -1582,7 +1586,7 @@ export class GridController<
1582
1586
  // *发起请求
1583
1587
  await this.startLoading();
1584
1588
  try {
1585
- res = await this.service.fetch(context, params);
1589
+ res = await this.service.fetch(context, params, fetchArgs);
1586
1590
  } finally {
1587
1591
  await this.endLoading();
1588
1592
  }
@@ -1786,7 +1790,11 @@ export class GridController<
1786
1790
  ibiz.config.common.maxExportRowsDefault,
1787
1791
  page: 0,
1788
1792
  };
1789
- data = await this.loadData({ viewParam });
1793
+ // 识别用户定义的视图参数导出数据集合
1794
+ data = await this.loadData(
1795
+ { viewParam },
1796
+ { srfexportdataset: this.params.srfexportdataset },
1797
+ );
1790
1798
  } else if (type === 'selectedRows') {
1791
1799
  data = this.getData();
1792
1800
  }
@@ -1820,9 +1828,11 @@ export class GridController<
1820
1828
  ibiz.i18n.t('runtime.controller.control.grid.exported'),
1821
1829
  );
1822
1830
  }
1831
+ // 用户通过视图参数srfexportdatakey指定导出选中数据的数据主键属性
1832
+ const srfexportdatakey = this.params.srfexportdatakey || 'srfkey';
1823
1833
  tempParams = {
1824
1834
  page: 0,
1825
- srfkeys: selectedData.map(data => data.srfkey).join(','),
1835
+ srfkeys: selectedData.map(data => data[srfexportdatakey]).join(','),
1826
1836
  };
1827
1837
  } else if (type === 'maxRowCount' || type === 'customPage') {
1828
1838
  const { size } = this.state;
@@ -645,10 +645,12 @@ export class KanbanController
645
645
  batchtoolbar?.calcButtonState(data, this.model.appDataEntityId, {
646
646
  view: this.view,
647
647
  ctrl: this,
648
+ data: selection,
648
649
  });
649
650
  quicktoolbar?.calcButtonState(data, this.model.appDataEntityId, {
650
651
  view: this.view,
651
652
  ctrl: this,
653
+ data: selection,
652
654
  });
653
655
  }
654
656
  }
@@ -908,6 +908,7 @@ export class ListController
908
908
  this.context,
909
909
  actionGroup.selectedData![0],
910
910
  this.model.appDataEntityId!,
911
+ actionGroup.selectedData,
911
912
  );
912
913
  }
913
914
  }
@@ -645,10 +645,14 @@ export class MDCtrlController
645
645
  /**
646
646
  * @description 加载数据(只加载数据 不做其他操作)
647
647
  * @param {MDCtrlLoadParams} args
648
+ * @param {IParams} [fetchArgs={}] 透传给 service.fetch 的额外参数,如 srfexportdataset
648
649
  * @returns {*} {Promise<IData[]>}
649
650
  * @memberof MDCtrlController
650
651
  */
651
- async loadData(args: MDCtrlLoadParams): Promise<IData[]> {
652
+ async loadData(
653
+ args: MDCtrlLoadParams,
654
+ fetchArgs: IParams = {},
655
+ ): Promise<IData[]> {
652
656
  // *查询参数处理
653
657
  const { context } = this.handlerAbilityParams(args);
654
658
  const params = await this.getFetchParams(args?.viewParam);
@@ -656,7 +660,7 @@ export class MDCtrlController
656
660
  // *发起请求
657
661
  await this.startLoading();
658
662
  try {
659
- res = await this.service.fetch(context, params);
663
+ res = await this.service.fetch(context, params, fetchArgs);
660
664
  } finally {
661
665
  await this.endLoading();
662
666
  }
@@ -691,7 +695,11 @@ export class MDCtrlController
691
695
  ibiz.config.common.maxExportRowsDefault,
692
696
  page: 0,
693
697
  };
694
- data = await this.loadData({ viewParam });
698
+ // 识别用户定义的视图参数导出数据集合
699
+ data = await this.loadData(
700
+ { viewParam },
701
+ { srfexportdataset: this.params.srfexportdataset },
702
+ );
695
703
  } else if (type === 'selectedRows') {
696
704
  data = this.getData();
697
705
  }
@@ -777,9 +785,11 @@ export class MDCtrlController
777
785
  ibiz.i18n.t('runtime.controller.common.md.exported'),
778
786
  );
779
787
  }
788
+ // 用户通过视图参数srfexportdatakey指定导出选中数据的数据主键属性
789
+ const srfexportdatakey = this.params.srfexportdatakey || 'srfkey';
780
790
  tempParams = {
781
791
  page: 0,
782
- srfkeys: selectedData.map(data => data.srfkey).join(','),
792
+ srfkeys: selectedData.map(data => data[srfexportdatakey]).join(','),
783
793
  };
784
794
  } else if (type === 'maxRowCount' || type === 'customPage') {
785
795
  const { size } = this.state;
@@ -228,9 +228,18 @@ export class ToolbarController<
228
228
  */
229
229
  async getToolbarEventArgs(): Promise<Omit<EventBase, 'eventName'>> {
230
230
  const result = this.getEventArgs();
231
+ const newParams = {
232
+ ...result.params,
233
+ };
231
234
  let data: IData[] = [];
232
235
  if (this.xdataControl) {
233
236
  data = this.xdataControl?.getData() || [];
237
+ // 数据导出界面行为需要界面是否选择全部状态,选择全部则导出全部,否则按选中数据导出
238
+ if ((this.xdataControl as IData).state?.isSelectedAll) {
239
+ Object.assign(newParams, {
240
+ srfallselected: true,
241
+ });
242
+ }
234
243
  } else {
235
244
  data = (await this.ctx.view.call(ViewCallTag.GET_DATA)) || [];
236
245
  }
@@ -238,6 +247,7 @@ export class ToolbarController<
238
247
  ...result,
239
248
  data,
240
249
  ctrl: this,
250
+ params: newParams,
241
251
  };
242
252
  }
243
253
 
@@ -460,11 +470,18 @@ export class ToolbarController<
460
470
  appDeId?: string,
461
471
  _params: IParams = {},
462
472
  ): Promise<void> {
473
+ const app = await ibiz.hub.getApp(this.context.srfappid);
474
+
463
475
  let _data = data;
464
476
  if (data && data instanceof ControlVO) {
465
477
  _data = data.getOrigin();
466
478
  }
467
- await this.state.buttonsState.update(this.context, _data, appDeId);
479
+ await this.state.buttonsState.update(
480
+ this.context,
481
+ _data,
482
+ appDeId,
483
+ _params.data,
484
+ );
468
485
  // 配置是否隐藏 isHiddenItem
469
486
  this.allToolbarItems.forEach(item => {
470
487
  const itemState = this.state.buttonsState[item.id!] as IButtonState;
@@ -510,6 +527,14 @@ export class ToolbarController<
510
527
  itemState.disabled = !dynaEnable;
511
528
  }
512
529
  }
530
+
531
+ // 如果有统一资源且当前项显示,无权限则隐藏
532
+ if (item.accessKey && itemState.visible) {
533
+ const permitted = app.authority.calcByResCode(item.accessKey);
534
+ if (!permitted) {
535
+ itemState.visible = false;
536
+ }
537
+ }
513
538
  },
514
539
  { childrenFields: ['detoolbarItems'] },
515
540
  );
@@ -90,10 +90,11 @@ export class ButtonContainerState implements IButtonContainerState {
90
90
  context: IContext,
91
91
  data?: IData,
92
92
  appDeId?: string,
93
+ selections?: IData[],
93
94
  ): Promise<void> {
94
95
  await Promise.all(
95
96
  this.children.map(child => {
96
- return child.update(context, data, appDeId);
97
+ return child.update(context, data, appDeId, selections);
97
98
  }),
98
99
  );
99
100
  this.visible = this.computeVisable();
@@ -242,6 +242,7 @@ export class UIActionButtonState implements IButtonState {
242
242
  context: IContext,
243
243
  data?: IData,
244
244
  appDeId?: string,
245
+ selections: IData[] = [],
245
246
  ): Promise<void> {
246
247
  if (!this.isInit) {
247
248
  await this.init();
@@ -255,8 +256,17 @@ export class UIActionButtonState implements IButtonState {
255
256
  // 有权限时显示
256
257
  this.visible = true;
257
258
  // 有权限时没数据有些要禁用,有数据没主见时(单项数据)需要禁用
258
- this.disabled =
259
+ let disabled =
259
260
  this.noDataDisabled && (!data || (this.noKeyDisabled && !data.srfkey));
261
+ // 严格模式(单数据目标行为在多选时禁用)
262
+ if (
263
+ ibiz.config.common.uiActionPermissionMode === 'strict' &&
264
+ (this.actionTarget === 'SINGLEDATA' ||
265
+ this.actionTarget === 'SINGLEKEY')
266
+ ) {
267
+ disabled = disabled || selections.length > 1;
268
+ }
269
+ this.disabled = disabled;
260
270
  }
261
271
  await this.calcEnableScript(context, data);
262
272
  await this.calcVisibleScript(context, data);
@@ -77,6 +77,16 @@ export interface IApiGlobalCommonConfig {
77
77
  */
78
78
  mergeAppMenu: 'default' | 'disable';
79
79
 
80
+ /**
81
+ * @description 界面行为权限校验模式,值为 'default' 时表示默认模式(单数据目标行为在多选时不禁用),值为 'strict' 时表示严格模式(单数据目标行为在多选时禁用)
82
+ * @type {('default' | 'strict')}
83
+ * @default default
84
+ * @platform web
85
+ * @platform mob
86
+ * @memberof IApiGlobalCommonConfig
87
+ */
88
+ uiActionPermissionMode: 'default' | 'strict';
89
+
80
90
  /**
81
91
  * @description 是否启用AI聊天最小化
82
92
  * @type {boolean}
@@ -34,6 +34,7 @@ export interface IApiButtonContainerState {
34
34
  * @param {IApiContext} context 上下文
35
35
  * @param {IApiData} [data] 实体数据
36
36
  * @param {string} [appDeId] 实体标识
37
+ * @param {IData[]} [selections] 选中数据集合
37
38
  * @returns {*} {Promise<void>}
38
39
  * @memberof IApiButtonContainerState
39
40
  */
@@ -41,6 +42,7 @@ export interface IApiButtonContainerState {
41
42
  context: IApiContext,
42
43
  data?: IApiData,
43
44
  appDeId?: string,
45
+ selections?: IData[],
44
46
  ): Promise<void>;
45
47
 
46
48
  [p: string]: any;
@@ -41,6 +41,7 @@ export interface IApiButtonState {
41
41
  * @param {IApiContext} context 上下文
42
42
  * @param {IApiData} [data] 实体数据
43
43
  * @param {string} [appDeId] 实体标识
44
+ * @param {IData[]} [selections] 选中数据集合
44
45
  * @returns {*} {Promise<void>}
45
46
  * @memberof IApiButtonState
46
47
  */
@@ -48,5 +49,6 @@ export interface IApiButtonState {
48
49
  context: IApiContext,
49
50
  data?: IApiData,
50
51
  appDeId?: string,
52
+ selections?: IData[],
51
53
  ): Promise<void>;
52
54
  }
@@ -175,6 +175,14 @@ export interface IApiMDControlState extends IApiControlState {
175
175
  * @memberof IApiMDControlState
176
176
  */
177
177
  enableGroup: boolean;
178
+
179
+ /**
180
+ * @description 是否全选,该状态目前仅PC端表格使用。
181
+ * @type {boolean}
182
+ * @default false
183
+ * @memberof IApiMDControlState
184
+ */
185
+ isSelectedAll: boolean;
178
186
  }
179
187
 
180
188
  /**
@@ -80,6 +80,21 @@ export abstract class PlatformProviderBase implements IPlatformProvider {
80
80
  */
81
81
  async backendExport(args: IBackendExportParams): Promise<boolean> {
82
82
  const { baseURL, url, method, params, data, newWindow } = args;
83
+
84
+ // 规范化参数
85
+ if (
86
+ data &&
87
+ Object.prototype.hasOwnProperty.call(data, 'srfexportdataset')
88
+ ) {
89
+ delete data.srfexportdataset;
90
+ }
91
+ if (
92
+ data &&
93
+ Object.prototype.hasOwnProperty.call(data, 'srfexportdatakey')
94
+ ) {
95
+ delete data.srfexportdatakey;
96
+ }
97
+
83
98
  const response = await (ibiz.net.request(url, {
84
99
  data,
85
100
  method,
@@ -14,14 +14,20 @@ export class MDControlService<
14
14
  * @date 2022-08-31 17:08:41
15
15
  * @param {IContext} context 上下文
16
16
  * @param {IParams} [params={}] 视图参数
17
+ * @param {IParams} [args={}] 额外参数
17
18
  * @returns {*} {Promise<IHttpResponse>}
18
19
  */
19
20
  async fetch(
20
21
  context: IContext,
21
22
  params: IParams = {},
23
+ args: IParams = {},
22
24
  ): Promise<IHttpResponse<ControlVO[]>> {
23
- const fetchAction =
25
+ let fetchAction =
24
26
  this.model.fetchControlAction?.appDEMethodId || 'fetchdefault';
27
+ // 识别用户定义参数导出数据集合
28
+ if (args.srfexportdataset) {
29
+ fetchAction = args.srfexportdataset;
30
+ }
25
31
  let res = await this.exec(fetchAction, context, params);
26
32
  res = this.handleResponse(res);
27
33
  return res as IHttpResponse<ControlVO[]>;
@@ -166,10 +172,16 @@ export class MDControlService<
166
172
  context,
167
173
  this.model.appDataEntityId!,
168
174
  );
175
+ let tempFetchAction =
176
+ dataExport.appDEDataSetId ||
177
+ this.model.fetchControlAction!.appDEMethodId!;
178
+ // 识别用户定义的视图参数导出数据集合
179
+ if (params.srfexportdataset) {
180
+ tempFetchAction = params.srfexportdataset;
181
+ }
169
182
  return entityService.file.export(
170
183
  dataExport,
171
- dataExport.appDEDataSetId ||
172
- this.model.fetchControlAction!.appDEMethodId!,
184
+ tempFetchAction,
173
185
  context,
174
186
  params,
175
187
  );
@@ -357,6 +357,28 @@ export class FrontUIActionProvider extends UIActionProviderBase {
357
357
  ...args.params,
358
358
  ...resultParams,
359
359
  };
360
+ // 多项数据和多项数据主键如果没有选择全部界面参数则认为导出选中行
361
+ const { actionTarget } = action;
362
+ if (
363
+ (actionTarget === 'MULTIDATA' || actionTarget === 'MULTIKEY') &&
364
+ !args.params.srfallselected
365
+ ) {
366
+ const srfexportdatakey = presetParams.srfexportdatakey || 'srfkey';
367
+ const tempParams = {};
368
+ if (args && args.data && args.data.length > 0) {
369
+ Object.assign(tempParams, {
370
+ srfkeys: args.data.map(data => data[srfexportdatakey]).join(','),
371
+ });
372
+ }
373
+ Object.assign(params, tempParams);
374
+ }
375
+ // 如果srfallselected存在需要删除,规范化参数
376
+ if (
377
+ params &&
378
+ Object.prototype.hasOwnProperty.call(params, 'srfallselected')
379
+ ) {
380
+ delete params.srfallselected;
381
+ }
360
382
 
361
383
  // 异步导出时只发消息不下载
362
384
  if (isAsyncAction) {
@@ -406,6 +406,12 @@ export abstract class UIActionProviderBase implements IUIActionProvider {
406
406
  delete resultParams.srfexportdataset;
407
407
  }
408
408
 
409
+ // srfexportdatakey(指定数据导出传入数据主键属性)
410
+ if (resultParams.hasOwnProperty('srfexportdatakey')) {
411
+ presetParams.srfexportdatakey = resultParams.srfexportdatakey;
412
+ delete resultParams.srfexportdatakey;
413
+ }
414
+
409
415
  // srfasyncaction(指定当前界面行为是否异步(目前仅数据导出使用))
410
416
  if (resultParams.hasOwnProperty('srfasyncaction')) {
411
417
  presetParams.srfasyncaction = resultParams.srfasyncaction;