@ibiz-template/runtime 0.4.17-dev.0 → 0.4.17-dev.1

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 (112) hide show
  1. package/dist/index.esm.js +696 -267
  2. package/dist/index.system.min.js +2 -2
  3. package/out/controller/control/grid/grid/grid-column.controller.d.ts +2 -1
  4. package/out/controller/control/grid/grid/grid-column.controller.d.ts.map +1 -1
  5. package/out/controller/control/grid/grid/grid.controller.d.ts +17 -1
  6. package/out/controller/control/grid/grid/grid.controller.d.ts.map +1 -1
  7. package/out/controller/control/grid/grid/grid.controller.js +32 -0
  8. package/out/controller/control/search-bar/search-bar.controller.d.ts +59 -2
  9. package/out/controller/control/search-bar/search-bar.controller.d.ts.map +1 -1
  10. package/out/controller/control/search-bar/search-bar.controller.js +142 -9
  11. package/out/controller/control/search-bar/search-bar.service.d.ts +78 -0
  12. package/out/controller/control/search-bar/search-bar.service.d.ts.map +1 -0
  13. package/out/controller/control/search-bar/search-bar.service.js +130 -0
  14. package/out/controller/control/tree/tree.controller.d.ts +27 -1
  15. package/out/controller/control/tree/tree.controller.d.ts.map +1 -1
  16. package/out/controller/control/tree/tree.controller.js +45 -7
  17. package/out/controller/control/tree/tree.service.d.ts +1 -1
  18. package/out/controller/control/tree/tree.service.d.ts.map +1 -1
  19. package/out/controller/control/tree-grid-ex/index.d.ts +2 -0
  20. package/out/controller/control/tree-grid-ex/index.d.ts.map +1 -1
  21. package/out/controller/control/tree-grid-ex/index.js +2 -0
  22. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts +4 -0
  23. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.d.ts.map +1 -0
  24. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/index.js +3 -0
  25. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts +93 -0
  26. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.d.ts.map +1 -0
  27. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.js +89 -0
  28. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.d.ts +13 -0
  29. 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 -0
  30. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.js +11 -0
  31. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts +31 -0
  32. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.d.ts.map +1 -0
  33. package/out/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.js +61 -0
  34. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts +26 -0
  35. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.d.ts.map +1 -0
  36. package/out/controller/control/tree-grid-ex/tree-grid-ex-row.state.js +26 -0
  37. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts +48 -46
  38. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.d.ts.map +1 -1
  39. package/out/controller/control/tree-grid-ex/tree-grid-ex.controller.js +85 -115
  40. package/out/controller/control/tree-grid-ex/tree-grid-ex.service.d.ts +8 -58
  41. package/out/controller/control/tree-grid-ex/tree-grid-ex.service.d.ts.map +1 -1
  42. package/out/controller/control/tree-grid-ex/tree-grid-ex.service.js +5 -135
  43. package/out/interface/controller/controller/control/i-grid.controller.d.ts +8 -0
  44. package/out/interface/controller/controller/control/i-grid.controller.d.ts.map +1 -1
  45. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts +7 -7
  46. package/out/interface/controller/controller/control/i-tree-grid-ex.controller.d.ts.map +1 -1
  47. package/out/interface/controller/controller/control/i-tree.controller.d.ts +1 -1
  48. package/out/interface/controller/controller/control/i-tree.controller.d.ts.map +1 -1
  49. package/out/interface/controller/controller/control/index.d.ts +1 -0
  50. package/out/interface/controller/controller/control/index.d.ts.map +1 -1
  51. package/out/interface/controller/controller/control/index.js +1 -0
  52. package/out/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.d.ts +12 -0
  53. package/out/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.d.ts.map +1 -0
  54. package/out/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.js +1 -0
  55. package/out/interface/controller/controller/control/tree-grid-ex-column/index.d.ts +2 -0
  56. package/out/interface/controller/controller/control/tree-grid-ex-column/index.d.ts.map +1 -0
  57. package/out/interface/controller/controller/control/tree-grid-ex-column/index.js +1 -0
  58. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts +2 -2
  59. package/out/interface/controller/event/control/i-tree-grid-ex.event.d.ts.map +1 -1
  60. package/out/interface/controller/state/control/i-search-bar.state.d.ts +64 -0
  61. package/out/interface/controller/state/control/i-search-bar.state.d.ts.map +1 -1
  62. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts +31 -23
  63. package/out/interface/controller/state/control/i-tree-grid-ex.state.d.ts.map +1 -1
  64. package/out/interface/controller/state/control/i-tree.state.d.ts +8 -1
  65. package/out/interface/controller/state/control/i-tree.state.d.ts.map +1 -1
  66. package/out/interface/provider/i-tree-grid-ex-column.provider.d.ts +31 -0
  67. package/out/interface/provider/i-tree-grid-ex-column.provider.d.ts.map +1 -0
  68. package/out/interface/provider/i-tree-grid-ex-column.provider.js +1 -0
  69. package/out/interface/provider/index.d.ts +1 -0
  70. package/out/interface/provider/index.d.ts.map +1 -1
  71. package/out/register/helper/index.d.ts +1 -0
  72. package/out/register/helper/index.d.ts.map +1 -1
  73. package/out/register/helper/index.js +1 -0
  74. package/out/register/helper/tree-grid-ex-column-register.d.ts +23 -0
  75. package/out/register/helper/tree-grid-ex-column-register.d.ts.map +1 -0
  76. package/out/register/helper/tree-grid-ex-column-register.js +50 -0
  77. package/out/service/vo/tree-node-data/tree-data-set-node-data.d.ts.map +1 -1
  78. package/out/service/vo/tree-node-data/tree-data-set-node-data.js +51 -0
  79. package/out/service/vo/tree-node-data/tree-node-data.d.ts +2 -0
  80. package/out/service/vo/tree-node-data/tree-node-data.d.ts.map +1 -1
  81. package/out/service/vo/tree-node-data/tree-node-data.js +1 -0
  82. package/package.json +3 -3
  83. package/src/controller/control/grid/grid/grid-column.controller.ts +4 -1
  84. package/src/controller/control/grid/grid/grid.controller.ts +34 -0
  85. package/src/controller/control/search-bar/search-bar.controller.ts +178 -10
  86. package/src/controller/control/search-bar/search-bar.service.ts +161 -0
  87. package/src/controller/control/tree/tree.controller.ts +58 -11
  88. package/src/controller/control/tree/tree.service.ts +3 -1
  89. package/src/controller/control/tree-grid-ex/index.ts +2 -0
  90. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/index.ts +3 -0
  91. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-column/tree-grid-ex-column.controller.ts +121 -0
  92. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.controller.ts +13 -0
  93. package/src/controller/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-ua-column/tree-grid-ex-ua-column.controller.ts +76 -0
  94. package/src/controller/control/tree-grid-ex/tree-grid-ex-row.state.ts +37 -0
  95. package/src/controller/control/tree-grid-ex/tree-grid-ex.controller.ts +116 -140
  96. package/src/controller/control/tree-grid-ex/tree-grid-ex.service.ts +10 -165
  97. package/src/interface/controller/controller/control/i-grid.controller.ts +9 -0
  98. package/src/interface/controller/controller/control/i-tree-grid-ex.controller.ts +11 -12
  99. package/src/interface/controller/controller/control/i-tree.controller.ts +5 -2
  100. package/src/interface/controller/controller/control/index.ts +1 -0
  101. package/src/interface/controller/controller/control/tree-grid-ex-column/i-tree-grid-ex-column.controller.ts +12 -0
  102. package/src/interface/controller/controller/control/tree-grid-ex-column/index.ts +1 -0
  103. package/src/interface/controller/event/control/i-tree-grid-ex.event.ts +2 -2
  104. package/src/interface/controller/state/control/i-search-bar.state.ts +73 -0
  105. package/src/interface/controller/state/control/i-tree-grid-ex.state.ts +27 -24
  106. package/src/interface/controller/state/control/i-tree.state.ts +9 -1
  107. package/src/interface/provider/i-tree-grid-ex-column.provider.ts +39 -0
  108. package/src/interface/provider/index.ts +1 -0
  109. package/src/register/helper/index.ts +1 -0
  110. package/src/register/helper/tree-grid-ex-column-register.ts +67 -0
  111. package/src/service/vo/tree-node-data/tree-data-set-node-data.ts +53 -0
  112. package/src/service/vo/tree-node-data/tree-node-data.ts +6 -0
@@ -0,0 +1,50 @@
1
+ import { getPluginRegisterKey } from './common-register';
2
+ /** 表格列适配器前缀 */
3
+ export const TREEGRIDEX_COLUMN_PROVIDER_PREFIX = 'TREEGRIDEX_COLUMN';
4
+ /**
5
+ * 注册表格列适配器
6
+ * @author lxm
7
+ * @date 2023-05-06 09:14:16
8
+ * @export
9
+ * @param {string} key
10
+ * @param {() => ITreeGridExColumnProvider} callback 生成表格列适配器的回调
11
+ */
12
+ export function registerTreeGridExColumnProvider(key, callback) {
13
+ ibiz.register.register(`${TREEGRIDEX_COLUMN_PROVIDER_PREFIX}_${key}`, callback);
14
+ }
15
+ function getProvider(key) {
16
+ return ibiz.register.get(`${TREEGRIDEX_COLUMN_PROVIDER_PREFIX}_${key}`);
17
+ }
18
+ /**
19
+ * 获取表格列适配器
20
+ * @author lxm
21
+ * @date 2023-05-06 09:29:23
22
+ * @export
23
+ * @param {IAppView} model
24
+ * @return {*} {Promise<ITreeGridExColumnProvider>}
25
+ */
26
+ export async function getTreeGridExColumnProvider(model) {
27
+ let provider;
28
+ const { columnType, appId, renderSysPFPluginId } = model;
29
+ // 树表格列插件
30
+ if (renderSysPFPluginId) {
31
+ const pluginKey = await getPluginRegisterKey(renderSysPFPluginId, appId);
32
+ if (pluginKey) {
33
+ provider = getProvider(pluginKey);
34
+ }
35
+ if (!provider) {
36
+ ibiz.log.error(`找不到树表格列插件${pluginKey}对应的适配器`);
37
+ }
38
+ else {
39
+ return provider;
40
+ }
41
+ }
42
+ // 找表格列类型
43
+ provider = getProvider(columnType);
44
+ if (!provider) {
45
+ ibiz.log.error(`找不到表格列类型${columnType}对应的适配器`);
46
+ }
47
+ else {
48
+ return provider;
49
+ }
50
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"tree-data-set-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-data-set-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,YAAa,YAAW,aAAa;IAC5E,IAAI,EAAE,MAAM,CAAC;IAEb,EAAE,EAAG,MAAM,CAAC;IAEZ,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,EAAE,KAAK,CAAC;gBAGZ,KAAK,EAAE,kBAAkB,EACzB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IA0CH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,GAAG,SAAS;IAiBhE;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,CAC1B,QAAQ,EAAE,mBAAmB,GAC5B,MAAM,GAAG,SAAS;IAYrB;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS;CAStE"}
1
+ {"version":3,"file":"tree-data-set-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-data-set-node-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD;;;;;;;GAOG;AACH,qBAAa,mBAAoB,SAAQ,YAAa,YAAW,aAAa;IAC5E,IAAI,EAAE,MAAM,CAAC;IAEb,EAAE,EAAG,MAAM,CAAC;IAEZ,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,EAAE,KAAK,CAAC;gBAGZ,KAAK,EAAE,kBAAkB,EACzB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB;IA6FH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,GAAG,SAAS;IAiBhE;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,CAC1B,QAAQ,EAAE,mBAAmB,GAC5B,MAAM,GAAG,SAAS;IAYrB;;;;;;;OAOG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,GAAG,SAAS;CAStE"}
@@ -1,3 +1,4 @@
1
+ import { updateKeyDefine } from '@ibiz-template/core';
1
2
  import { calcDeCodeNameById } from '../../../model';
2
3
  import { ScriptFactory } from '../../../utils';
3
4
  import { TreeNodeData } from './tree-node-data';
@@ -12,6 +13,7 @@ import { fieldValueToBoolean } from '../../utils';
12
13
  */
13
14
  export class TreeDataSetNodeData extends TreeNodeData {
14
15
  constructor(model, parentNodeData, opts) {
16
+ var _a;
15
17
  super(model, parentNodeData, opts);
16
18
  const { data } = opts;
17
19
  this.deData = data;
@@ -45,6 +47,55 @@ export class TreeDataSetNodeData extends TreeNodeData {
45
47
  if (model.leafFlagAppDEFieldId) {
46
48
  this.leaf = fieldValueToBoolean(data[model.leafFlagAppDEFieldId]);
47
49
  }
50
+ /** 数据项映射 */
51
+ const dataItemkeyMap = new Map();
52
+ const dataItemDefaults = {};
53
+ (_a = model.detreeNodeDataItems) === null || _a === void 0 ? void 0 : _a.forEach(dataItem => {
54
+ const uiKey = dataItem.id.toLowerCase();
55
+ // 后台实体属性
56
+ const deFieldKey = dataItem.appDEFieldId.toLowerCase();
57
+ dataItemkeyMap.set(uiKey, deFieldKey);
58
+ if (dataItem.defaultValue) {
59
+ dataItemDefaults[uiKey] = dataItem.defaultValue;
60
+ }
61
+ });
62
+ return new Proxy(this, {
63
+ set(target, p, value) {
64
+ if (Object.prototype.hasOwnProperty.call(target.deData, p)) {
65
+ target.deData[p] = value;
66
+ }
67
+ else if (dataItemkeyMap.has(p)) {
68
+ target.deData[dataItemkeyMap.get(p)] = value;
69
+ }
70
+ else {
71
+ target[p] = value;
72
+ }
73
+ return true;
74
+ },
75
+ get(target, p, _receiver) {
76
+ if (target[p] !== undefined) {
77
+ return target[p];
78
+ }
79
+ if (dataItemkeyMap.has(p)) {
80
+ return target.deData[dataItemkeyMap.get(p)] || dataItemDefaults[p];
81
+ }
82
+ if (target.deData[p] !== undefined) {
83
+ return target.deData[p];
84
+ }
85
+ },
86
+ ownKeys(target) {
87
+ // 整合所有并排除重复
88
+ const allKeys = [
89
+ ...new Set([
90
+ ...Object.keys(target),
91
+ ...dataItemkeyMap.keys(),
92
+ ...Object.keys(target.deData),
93
+ ]),
94
+ ];
95
+ updateKeyDefine(target, allKeys);
96
+ return allKeys;
97
+ },
98
+ });
48
99
  }
49
100
  calcIcon(model) {
50
101
  const icon = super.calcIcon(model) || {};
@@ -9,6 +9,7 @@ import { IIcon, ITreeNodeData } from '../../../interface';
9
9
  */
10
10
  export declare abstract class TreeNodeData implements ITreeNodeData {
11
11
  _uuid: string;
12
+ _nodeType: string;
12
13
  id: string;
13
14
  value?: string | undefined;
14
15
  text: string;
@@ -23,6 +24,7 @@ export declare abstract class TreeNodeData implements ITreeNodeData {
23
24
  parent?: ITreeNodeData;
24
25
  icon?: IIcon;
25
26
  textHtml?: string;
27
+ [key: string | symbol]: any;
26
28
  constructor(model: IDETreeNode, parentNodeData: ITreeNodeData | undefined, opts: {
27
29
  leaf: boolean;
28
30
  navContext?: IParams;
@@ -1 +1 @@
1
- {"version":3,"file":"tree-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;GAMG;AACH,8BAAsB,YAAa,YAAW,aAAa;IACzD,KAAK,EAAE,MAAM,CAAgB;IAE7B,EAAE,EAAG,MAAM,CAAC;IAEZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,IAAI,EAAG,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAEvC,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAE3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,OAAO,CAAS;IAEtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAGhB,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;IAsBpE;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,GAAG,SAAS;CAa1D"}
1
+ {"version":3,"file":"tree-node-data.d.ts","sourceRoot":"","sources":["../../../../src/service/vo/tree-node-data/tree-node-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;GAMG;AACH,8BAAsB,YAAa,YAAW,aAAa;IACzD,KAAK,EAAE,MAAM,CAAgB;IAE7B,SAAS,EAAE,MAAM,CAAC;IAElB,EAAE,EAAG,MAAM,CAAC;IAEZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3B,IAAI,EAAG,MAAM,CAAC;IAEd,QAAQ,CAAC,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IAEvC,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAE3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE5B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAElC,MAAM,EAAE,MAAM,CAAC;IAEf,IAAI,EAAE,OAAO,CAAS;IAEtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,IAAI,CAAC,EAAE,KAAK,CAAC;IAEb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;gBAG1B,KAAK,EAAE,WAAW,EAClB,cAAc,EAAE,aAAa,GAAG,SAAS,EACzC,IAAI,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;IAuBpE;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,GAAG,SAAS;CAa1D"}
@@ -12,6 +12,7 @@ export class TreeNodeData {
12
12
  this.leaf = false;
13
13
  this.leaf = opts.leaf === true;
14
14
  this.parent = parentNodeData;
15
+ this._nodeType = model.treeNodeType;
15
16
  // 所有节点都要继承父的上下文,如果父存在则复制父的资源上下文,否则返回空对象。
16
17
  if (this.parent) {
17
18
  this.context = Object.assign({}, this.parent.context);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.4.17-dev.0",
3
+ "version": "0.4.17-dev.1",
4
4
  "description": "控制器包",
5
5
  "type": "module",
6
6
  "main": "out/index.js",
@@ -29,7 +29,7 @@
29
29
  "author": "chitanda",
30
30
  "license": "MIT",
31
31
  "devDependencies": {
32
- "@ibiz-template/core": "^0.4.17-dev.0",
32
+ "@ibiz-template/core": "^0.4.17-dev.1",
33
33
  "@ibiz/model-core": "^0.0.28",
34
34
  "@types/path-browserify": "^1.0.2",
35
35
  "@types/qs": "^6.9.10",
@@ -59,5 +59,5 @@
59
59
  "qx-util": "^0.4.8",
60
60
  "ramda": "^0.29.0"
61
61
  },
62
- "gitHead": "b0dfe9a357b41c7a97b640704a460cc485315ed9"
62
+ "gitHead": "aabc8a7a92e6715602b803977fd9d2516955d902"
63
63
  }
@@ -2,6 +2,7 @@ import { IDEGridColumn, IDEGridDataItem } from '@ibiz/model-core';
2
2
  import { ScriptFactory } from '../../../../utils';
3
3
  import { GridRowState } from './grid-row.state';
4
4
  import { GridController } from './grid.controller';
5
+ import { IGridColumnController } from '../../../../interface';
5
6
 
6
7
  /**
7
8
  * 表格列控制器
@@ -9,7 +10,9 @@ import { GridController } from './grid.controller';
9
10
  * @author: zhujiamin
10
11
  * @Date: 2022-09-01 18:25:20
11
12
  */
12
- export class GridColumnController<T extends IDEGridColumn = IDEGridColumn> {
13
+ export class GridColumnController<T extends IDEGridColumn = IDEGridColumn>
14
+ implements IGridColumnController
15
+ {
13
16
  /**
14
17
  * 表格列模型对象
15
18
  *
@@ -32,6 +32,8 @@ import {
32
32
  MDCtrlLoadParams,
33
33
  IGridRowState,
34
34
  IExportColumn,
35
+ IColumnState,
36
+ ISearchGroupData,
35
37
  } from '../../../../interface';
36
38
  import { calcDeCodeNameById } from '../../../../model';
37
39
  import { getGridColumnProvider } from '../../../../register';
@@ -1196,4 +1198,36 @@ export class GridController
1196
1198
  convertColumnCaption(this.model.degridColumns);
1197
1199
  }
1198
1200
  }
1201
+
1202
+ /**
1203
+ * 控制列显示
1204
+ * @param {IColumnState} columnState
1205
+ * @return {*}
1206
+ * @author: zhujiamin
1207
+ * @Date: 2023-12-19 16:02:14
1208
+ */
1209
+ setColumnVisible(columnState: IColumnState): void {
1210
+ columnState.hidden = !columnState.hidden;
1211
+ }
1212
+
1213
+ /**
1214
+ * 设置点击分组后回显相关参数
1215
+ * @param {IData} data
1216
+ * @return {*}
1217
+ * @author: zhujiamin
1218
+ * @Date: 2023-12-21 10:54:45
1219
+ */
1220
+ setGroupParams(data: ISearchGroupData): void {
1221
+ if (data.sort) {
1222
+ this.state.sortQuery = data.sort;
1223
+ } else {
1224
+ this.state.sortQuery = '';
1225
+ }
1226
+ if (data.columnstates) {
1227
+ this.state.columnStates = data.columnstates;
1228
+ } else {
1229
+ this.state.columnStates = [];
1230
+ this.initColumnStates();
1231
+ }
1232
+ }
1199
1233
  }
@@ -1,4 +1,4 @@
1
- import { recursiveIterate } from '@ibiz-template/core';
1
+ import { mergeInLeft, recursiveIterate } from '@ibiz-template/core';
2
2
  import { IAppDataEntity, ISearchBar } from '@ibiz/model-core';
3
3
  import { isNil } from 'ramda';
4
4
  import {
@@ -6,10 +6,13 @@ import {
6
6
  ISearchBarEvent,
7
7
  ISearchBarController,
8
8
  IFilterNode,
9
+ IBackendSearchBarGroup,
10
+ IGridController,
9
11
  } from '../../../interface';
10
12
  import { convertNavData, ScriptFactory } from '../../../utils';
11
13
  import { ControlController } from '../../common';
12
14
  import { SearchBarFilterController } from './search-bar-filter.controller';
15
+ import { SearchBarService } from './search-bar.service';
13
16
 
14
17
  /**
15
18
  * 搜索栏控制器
@@ -40,6 +43,40 @@ export class SearchBarController
40
43
  */
41
44
  filterControllers: SearchBarFilterController[] = [];
42
45
 
46
+ /**
47
+ * 搜索栏服务
48
+ * @author lxm
49
+ * @date 2023-05-15 11:03:34
50
+ * @type {EditFormService}
51
+ */
52
+ service!: SearchBarService;
53
+
54
+ /**
55
+ * 当前编辑的分组
56
+ * @return {*}
57
+ * @author: zhujiamin
58
+ * @Date: 2023-12-20 18:06:37
59
+ */
60
+ currentEditGroup: IBackendSearchBarGroup | null = null;
61
+
62
+ /**
63
+ * 是否为后台分组
64
+ * @return {*}
65
+ * @author: zhujiamin
66
+ * @Date: 2023-12-21 10:17:43
67
+ */
68
+ isBackendSearchGroup = true;
69
+
70
+ /**
71
+ * 表格控制器
72
+ * @return {*}
73
+ * @author: zhujiamin
74
+ * @Date: 2023-12-22 13:50:16
75
+ */
76
+ get grid(): IGridController | undefined {
77
+ return this.ctx.getController('grid') as IGridController;
78
+ }
79
+
43
80
  /**
44
81
  * 实体模型
45
82
  * @author lxm
@@ -60,6 +97,8 @@ export class SearchBarController
60
97
  if (this.model.enableFilter) {
61
98
  this.resetFilter();
62
99
  }
100
+ this.state.searchBarGroups = [];
101
+ this.state.selectedSearchGroupItem = null;
63
102
  }
64
103
 
65
104
  protected async onCreated(): Promise<void> {
@@ -73,7 +112,14 @@ export class SearchBarController
73
112
  this.calcQuickSearchPlaceholder();
74
113
  }
75
114
 
115
+ // 实例部件服务
116
+ if (this.isBackendSearchGroup && this.view.model.codeName) {
117
+ this.service = new SearchBarService(this.model, this.view.model.codeName);
118
+ await this.service.init(this.context);
119
+ }
120
+
76
121
  await this.initSearchBarFilters();
122
+ await this.initSearBarGroups();
77
123
  }
78
124
 
79
125
  /**
@@ -144,7 +190,10 @@ export class SearchBarController
144
190
  params.query = this.state.query;
145
191
  }
146
192
  // 快速分组
147
- if (this.state.selectedGroupItem?.data) {
193
+ if (
194
+ this.state.selectedGroupItem?.data &&
195
+ typeof this.state.selectedGroupItem.data === 'string'
196
+ ) {
148
197
  const navParams = ScriptFactory.execSingleLine(
149
198
  this.state.selectedGroupItem.data,
150
199
  ) as IData;
@@ -167,13 +216,7 @@ export class SearchBarController
167
216
  * @date 2023-10-16 03:52:44
168
217
  */
169
218
  resetFilter(): void {
170
- this.state.filterNodes = [
171
- {
172
- leaf: false,
173
- logicType: 'AND',
174
- children: [{ leaf: true, field: null, valueOP: null, value: null }],
175
- },
176
- ];
219
+ this.state.filterNodes = this.getOriginFilterNodes();
177
220
  this.evt.emit('onSearch', undefined);
178
221
  }
179
222
 
@@ -202,7 +245,7 @@ export class SearchBarController
202
245
  * @date 2023-10-13 05:53:35
203
246
  * @return {*} {IData}
204
247
  */
205
- calcFilters(): IData | undefined {
248
+ calcFilters(): IData[] | undefined {
206
249
  if (!this.model.enableFilter) {
207
250
  return;
208
251
  }
@@ -248,4 +291,129 @@ export class SearchBarController
248
291
  value: node.value,
249
292
  };
250
293
  }
294
+
295
+ /**
296
+ * 获取初始过滤项树节点数据集合
297
+ * @return {*}
298
+ * @author: zhujiamin
299
+ * @Date: 2023-12-21 17:29:47
300
+ */
301
+ protected getOriginFilterNodes(): IFilterNode[] {
302
+ return [
303
+ {
304
+ leaf: false,
305
+ logicType: 'AND',
306
+ children: [{ leaf: true, field: null, valueOP: null, value: null }],
307
+ },
308
+ ];
309
+ }
310
+
311
+ /**
312
+ * 初始化搜索栏分组项(获取后台分组清单并合并模型)
313
+ * @return {*}
314
+ * @author: zhujiamin
315
+ * @Date: 2023-12-19 14:43:46
316
+ */
317
+ async initSearBarGroups(): Promise<void> {
318
+ this.state.searchBarGroups = [];
319
+ if (this.isBackendSearchGroup) {
320
+ if (this.model.searchBarGroups && this.model.searchBarGroups.length > 0) {
321
+ this.state.searchBarGroups = this.model.searchBarGroups.map(item => ({
322
+ ...item,
323
+ show: true,
324
+ saved: false,
325
+ searchGroupData: {},
326
+ }));
327
+ }
328
+ // 请求并合并searchBarGroups ,这里只能拿到清单
329
+ const res = await this.service.fetch();
330
+ if (res.ok) {
331
+ res.data.forEach((group: IData) => {
332
+ // 已经存在的覆盖,否则新增
333
+ const existGroup = this.state.searchBarGroups.find(
334
+ item => item.id === group.id,
335
+ );
336
+ if (existGroup) {
337
+ mergeInLeft(existGroup, group);
338
+ existGroup.saved = true;
339
+ } else {
340
+ this.state.searchBarGroups.push({
341
+ ...group,
342
+ appId: this.context.srfappid,
343
+ show: true,
344
+ saved: true,
345
+ searchGroupData: {},
346
+ } as IBackendSearchBarGroup);
347
+ }
348
+ });
349
+ }
350
+ }
351
+ }
352
+
353
+ /**
354
+ * 处理保存
355
+ * @return {*}
356
+ * @author: zhujiamin
357
+ * @Date: 2023-12-19 16:17:15
358
+ */
359
+ async handleSave(): Promise<void> {
360
+ if (this.grid && this.state.selectedSearchGroupItem) {
361
+ const filters = this.calcFilters();
362
+ const saveParams = {
363
+ filternodes: this.state.filterNodes,
364
+ searchconds: filters,
365
+ sort: this.grid.state.sortQuery,
366
+ columnstates: this.grid.state.columnStates,
367
+ show: this.state.selectedSearchGroupItem.show,
368
+ };
369
+ // 根据是否保存过决定是更新还是新建
370
+ if (this.state.selectedSearchGroupItem.saved) {
371
+ await this.service.update(this.state.selectedSearchGroupItem.id!, {
372
+ theme_model: saveParams,
373
+ show: this.state.selectedSearchGroupItem.show,
374
+ });
375
+ ibiz.message.success('保存成功');
376
+ } else {
377
+ const res = await this.service.createWithParams(
378
+ this.state.selectedSearchGroupItem.id!,
379
+ saveParams,
380
+ );
381
+ if (res.ok) {
382
+ const savedGroup = this.state.searchBarGroups.find(
383
+ group => group.id === res.data.id,
384
+ );
385
+ if (savedGroup) {
386
+ savedGroup.saved = true;
387
+ }
388
+ ibiz.message.success('保存成功');
389
+ }
390
+ }
391
+ }
392
+ }
393
+
394
+ /**
395
+ * 处理点击后台分组
396
+ * @return {*}
397
+ * @author: zhujiamin
398
+ * @Date: 2023-12-21 10:29:24
399
+ */
400
+ async handleGroupClick(groupItem: IBackendSearchBarGroup): Promise<void> {
401
+ this.state.selectedSearchGroupItem = groupItem;
402
+ if (groupItem.saved) {
403
+ // 请求获取到搜索分组数据
404
+ const res = await this.service.get(groupItem.id!);
405
+ if (res.ok) {
406
+ mergeInLeft(groupItem, res.data);
407
+ }
408
+ }
409
+ if (groupItem.searchGroupData && groupItem.searchGroupData.filternodes) {
410
+ this.state.filterNodes = groupItem.searchGroupData.filternodes;
411
+ } else {
412
+ this.state.filterNodes = this.getOriginFilterNodes();
413
+ }
414
+ if (this.grid && groupItem && groupItem.searchGroupData) {
415
+ this.grid.setGroupParams(groupItem.searchGroupData);
416
+ await this.grid.load({ isInitialLoad: true });
417
+ }
418
+ }
251
419
  }
@@ -0,0 +1,161 @@
1
+ import { IHttpResponse } from '@ibiz-template/core';
2
+ import { ISearchBar } from '@ibiz/model-core';
3
+ import { IAppService } from '../../../interface';
4
+
5
+ /**
6
+ * 搜索栏服务
7
+ * @return {*}
8
+ * @author: zhujiamin
9
+ * @Date: 2023-12-22 10:28:32
10
+ */
11
+ export class SearchBarService {
12
+ /**
13
+ * 应用
14
+ *
15
+ */
16
+ app!: IAppService;
17
+
18
+ /**
19
+ * 视图标识
20
+ *
21
+ */
22
+ viewTag!: string;
23
+
24
+ /**
25
+ * 部件模型
26
+ *
27
+ */
28
+ readonly model: ISearchBar;
29
+
30
+ /**
31
+ * Creates an instance of ControlService.
32
+ *
33
+ */
34
+ constructor(model: ISearchBar, viewTag: string) {
35
+ this.model = model;
36
+ this.viewTag = viewTag;
37
+ }
38
+
39
+ async init(_context?: IContext): Promise<void> {
40
+ this.app = ibiz.hub.getApp(this.model.appId);
41
+ }
42
+
43
+ /**
44
+ * 主题管理URL
45
+ * @return {*}
46
+ * @author: zhujiamin
47
+ * @Date: 2023-12-22 10:51:49
48
+ */
49
+ themeUrl = '/extension/app_view_themes';
50
+
51
+ /**
52
+ * 执行查询多条数据的方法
53
+ *
54
+ */
55
+ async fetch(): Promise<IHttpResponse> {
56
+ const res = await this.app.net.post(`${this.themeUrl}/fetch_default`, {
57
+ app_view_tag: this.viewTag,
58
+ sort: 'create_time,asc',
59
+ });
60
+ if (res.ok) {
61
+ res.data = this.convertBackDataToFront(res.data as IData[]);
62
+ }
63
+ return res;
64
+ }
65
+
66
+ /**
67
+ * 执行获取单条数据方法
68
+ *
69
+ */
70
+ async get(id: string): Promise<IHttpResponse> {
71
+ const res = await this.app.net.get(`${this.themeUrl}/${id}`, {
72
+ app_view_tag: this.viewTag,
73
+ });
74
+ if (res.ok) {
75
+ [res.data] = this.convertBackDataToFront([res.data] as IData[]);
76
+ }
77
+ return res;
78
+ }
79
+
80
+ /**
81
+ * 删除单条数据
82
+ *
83
+ */
84
+ async remove(id: string): Promise<IHttpResponse> {
85
+ const res = await this.app.net.delete(`${this.themeUrl}/${id}`, {
86
+ app_view_tag: this.viewTag,
87
+ });
88
+ return res;
89
+ }
90
+
91
+ /**
92
+ * 新建数据
93
+ *
94
+ */
95
+ async create(caption: string): Promise<IHttpResponse> {
96
+ const res = await this.app.net.post(`${this.themeUrl}`, {
97
+ name: caption,
98
+ app_view_tag: this.viewTag,
99
+ });
100
+ return res;
101
+ }
102
+
103
+ /**
104
+ * 新建数据(带参数,给平台配置建立的分组用)
105
+ *
106
+ */
107
+ async createWithParams(id: string, data: IData): Promise<IHttpResponse> {
108
+ const res = await this.app.net.post(`${this.themeUrl}`, {
109
+ id,
110
+ theme_model: JSON.stringify(data),
111
+ app_view_tag: this.viewTag,
112
+ show: data.show,
113
+ });
114
+ return res;
115
+ }
116
+
117
+ /**
118
+ * 更新数据
119
+ *
120
+ */
121
+ async update(id: string, data: IData): Promise<IHttpResponse> {
122
+ const updateParams = { app_view_tag: this.viewTag };
123
+ if (data.theme_model) {
124
+ Object.assign(updateParams, {
125
+ theme_model: JSON.stringify(data.theme_model),
126
+ });
127
+ }
128
+ if (data.caption) {
129
+ Object.assign(updateParams, {
130
+ name: data.caption,
131
+ });
132
+ }
133
+ if (typeof data.show === 'boolean') {
134
+ Object.assign(updateParams, {
135
+ show: data.show,
136
+ });
137
+ }
138
+ const res = await this.app.net.put(`${this.themeUrl}/${id}`, updateParams);
139
+ return res;
140
+ }
141
+
142
+ /**
143
+ * 转换后台数据成前端需要的格式
144
+ * @param {IData} data
145
+ * @return {*}
146
+ * @author: zhujiamin
147
+ * @Date: 2023-12-22 11:19:50
148
+ */
149
+ convertBackDataToFront(data: IData[]): IData[] {
150
+ return data.map(item => {
151
+ const tempItem = { ...item };
152
+ if (item.name) {
153
+ tempItem.caption = item.name;
154
+ }
155
+ if (item.theme_model) {
156
+ tempItem.searchGroupData = JSON.parse(item.theme_model);
157
+ }
158
+ return tempItem;
159
+ });
160
+ }
161
+ }