@ibiz-template/runtime 0.2.1 → 0.2.4

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 (60) hide show
  1. package/dist/index.esm.js +301 -133
  2. package/dist/index.system.min.js +1 -1
  3. package/dist/index.system.min.js.map +1 -1
  4. package/out/controller/common/base.controller.js +4 -4
  5. package/out/controller/common/control/control.controller.d.ts.map +1 -1
  6. package/out/controller/common/control/control.controller.js +7 -0
  7. package/out/controller/common/view/view.controller.d.ts.map +1 -1
  8. package/out/controller/common/view/view.controller.js +3 -0
  9. package/out/controller/control/form/edit-form/edit-form.controller.d.ts.map +1 -1
  10. package/out/controller/control/form/edit-form/edit-form.controller.js +6 -2
  11. package/out/controller/control/form/form/form.controller.d.ts +9 -1
  12. package/out/controller/control/form/form/form.controller.d.ts.map +1 -1
  13. package/out/controller/control/form/form/form.controller.js +20 -1
  14. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.d.ts +32 -3
  15. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.d.ts.map +1 -1
  16. package/out/controller/control/form/form-detail/form-detail/form-detail.controller.js +84 -8
  17. package/out/controller/control/form/form-detail/form-group-panel/form-group-panel.controller.d.ts +1 -1
  18. package/out/controller/control/form/form-detail/form-group-panel/form-group-panel.controller.d.ts.map +1 -1
  19. package/out/controller/control/form/form-detail/form-group-panel/form-group-panel.controller.js +2 -2
  20. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts +1 -1
  21. package/out/controller/control/form/form-detail/form-item/form-item.controller.d.ts.map +1 -1
  22. package/out/controller/control/form/form-detail/form-item/form-item.controller.js +2 -2
  23. package/out/interface/service/i-data-entity/i-data-entity.d.ts +19 -2
  24. package/out/interface/service/i-data-entity/i-data-entity.d.ts.map +1 -1
  25. package/out/interface/service/service/i-app-de.service.d.ts +11 -0
  26. package/out/interface/service/service/i-app-de.service.d.ts.map +1 -1
  27. package/out/logic-scheduler/scheduler/control-logic-scheduler.js +2 -2
  28. package/out/logic-scheduler/trigger/timer-trigger.d.ts.map +1 -1
  29. package/out/logic-scheduler/trigger/timer-trigger.js +4 -1
  30. package/out/model/view/view.d.ts.map +1 -1
  31. package/out/model/view/view.js +9 -1
  32. package/out/service/app-data-entity/app-data-entity.d.ts +3 -3
  33. package/out/service/app-data-entity/app-data-entity.d.ts.map +1 -1
  34. package/out/service/app-data-entity/app-data-entity.js +13 -12
  35. package/out/service/service/control/control.service.d.ts.map +1 -1
  36. package/out/service/service/control/control.service.js +1 -1
  37. package/out/service/service/entity/de.service.d.ts +15 -3
  38. package/out/service/service/entity/de.service.d.ts.map +1 -1
  39. package/out/service/service/entity/de.service.js +20 -4
  40. package/out/service/vo/control.vo.d.ts +12 -4
  41. package/out/service/vo/control.vo.d.ts.map +1 -1
  42. package/out/service/vo/control.vo.js +87 -50
  43. package/package.json +3 -3
  44. package/src/controller/common/base.controller.ts +4 -4
  45. package/src/controller/common/control/control.controller.ts +11 -0
  46. package/src/controller/common/view/view.controller.ts +2 -0
  47. package/src/controller/control/form/edit-form/edit-form.controller.ts +7 -2
  48. package/src/controller/control/form/form/form.controller.ts +26 -2
  49. package/src/controller/control/form/form-detail/form-detail/form-detail.controller.ts +102 -8
  50. package/src/controller/control/form/form-detail/form-group-panel/form-group-panel.controller.ts +2 -2
  51. package/src/controller/control/form/form-detail/form-item/form-item.controller.ts +2 -2
  52. package/src/interface/service/i-data-entity/i-data-entity.ts +22 -2
  53. package/src/interface/service/service/i-app-de.service.ts +16 -0
  54. package/src/logic-scheduler/scheduler/control-logic-scheduler.ts +2 -2
  55. package/src/logic-scheduler/trigger/timer-trigger.ts +4 -1
  56. package/src/model/view/view.ts +9 -1
  57. package/src/service/app-data-entity/app-data-entity.ts +21 -16
  58. package/src/service/service/control/control.service.ts +1 -2
  59. package/src/service/service/entity/de.service.ts +29 -5
  60. package/src/service/vo/control.vo.ts +101 -58
@@ -1 +1 @@
1
- {"version":3,"file":"app-data-entity.d.ts","sourceRoot":"","sources":["../../../src/service/app-data-entity/app-data-entity.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;;;;GAOG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAE5B,UAAkB,KAAK,EAAE,KAAK,CAAC;IAE/B,UAAkB,OAAO,EAAE,cAAc,CAAC;IAElC,OAAO,EAAE,MAAM,CAAC;IAEhB,aAAa,EAAE,MAAM,CAAC;IAEtB,UAAU,EAAE,MAAM,CAAC;IAEnB,YAAY,EAAE,MAAM,CAAC;IAErB,MAAM,EAAE,MAAM,CAAC;IAEf,YAAY,EAAE,MAAM,CAAC;IAErB,YAAY,EAAE,MAAM,CAAC;IAE7B,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED;;;;;;;OAOG;gBACS,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,GAAG,aAAa;IA6E/D;;;;;;OAMG;IACH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAgClC;;;;;;OAMG;IACH,KAAK,IAAI,aAAa;IAMtB;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,GAAG,aAAa;IASlD;;;;;;;;OAQG;IACH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;CAyB5E"}
1
+ {"version":3,"file":"app-data-entity.d.ts","sourceRoot":"","sources":["../../../src/service/app-data-entity/app-data-entity.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;;;;;GAOG;AACH,qBAAa,aAAc,YAAW,WAAW;IAC/C,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAE5B,UAAkB,KAAK,EAAE,KAAK,CAAC;IAE/B,UAAkB,OAAO,EAAE,cAAc,CAAC;IAElC,OAAO,EAAE,MAAM,CAAC;IAEhB,aAAa,EAAE,MAAM,CAAC;IAEtB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,MAAM,CAAC;IAEtB,MAAM,EAAE,MAAM,CAAC;IAEf,YAAY,EAAE,MAAM,CAAC;IAErB,UAAU,EAAE,MAAM,CAAC;IAE3B,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED;;;;;;;OAOG;gBACS,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,GAAG,aAAa;IAiF/D;;;;;;OAMG;IACH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IAgClC;;;;;;OAMG;IACH,KAAK,IAAI,aAAa;IAMtB;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,aAAa,GAAG,aAAa;IASlD;;;;;;;;OAQG;IACH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;CAyB5E"}
@@ -1,5 +1,6 @@
1
1
  import { clone, isNil } from 'ramda';
2
2
  import { DataTypes } from '@ibiz-template/core';
3
+ import { createUUID } from 'qx-util';
3
4
  import { Srfuf } from '../constant';
4
5
  import { findModelChild } from '../../model';
5
6
  /**
@@ -12,7 +13,7 @@ import { findModelChild } from '../../model';
12
13
  */
13
14
  export class AppDataEntity {
14
15
  get srfuf() {
15
- return this.srfkey ? Srfuf.UPDATE : Srfuf.CREATE;
16
+ return this.srfkey === this.tempsrfkey ? Srfuf.UPDATE : Srfuf.CREATE;
16
17
  }
17
18
  /**
18
19
  * Creates an instance of AppDataEntity.
@@ -23,7 +24,6 @@ export class AppDataEntity {
23
24
  * @param {(IData | AppDataEntity)} data
24
25
  */
25
26
  constructor(entity, data) {
26
- let _srfkey;
27
27
  Object.defineProperty(this, '_entity', {
28
28
  enumerable: false,
29
29
  configurable: true,
@@ -44,23 +44,16 @@ export class AppDataEntity {
44
44
  return entity.codeName;
45
45
  },
46
46
  });
47
+ // 主键属性相关
47
48
  const keyAppField = findModelChild(entity.appDEFields || [], entity.keyAppDEFieldId);
48
49
  if (keyAppField) {
49
50
  const key = keyAppField.codeName.toLowerCase();
50
- Object.defineProperty(this, 'srfkeyfile', {
51
+ Object.defineProperty(this, 'srfkeyfield', {
51
52
  get() {
52
53
  return key;
53
54
  },
54
55
  });
55
56
  Object.defineProperty(this, 'srfkey', {
56
- set(val) {
57
- _srfkey = val;
58
- },
59
- get() {
60
- return this._data[key] || _srfkey;
61
- },
62
- });
63
- Object.defineProperty(this, 'srfsourcekey', {
64
57
  set(val) {
65
58
  this._data[key] = val;
66
59
  },
@@ -73,9 +66,10 @@ export class AppDataEntity {
73
66
  ibiz.log.warn(`实体[${entity.codeName}]未配置主键字段`);
74
67
  }
75
68
  const majorAppField = findModelChild(entity.appDEFields || [], entity.majorAppDEFieldId);
69
+ // 主文本属性相关
76
70
  if (majorAppField) {
77
71
  const major = majorAppField.codeName.toLowerCase();
78
- Object.defineProperty(this, 'srfmajorfile', {
72
+ Object.defineProperty(this, 'srfmajorfield', {
79
73
  get() {
80
74
  return major;
81
75
  },
@@ -92,6 +86,13 @@ export class AppDataEntity {
92
86
  else {
93
87
  ibiz.log.warn(`实体[${entity.codeName}]未配置主文本字段`);
94
88
  }
89
+ // 设置临时主键
90
+ Object.defineProperty(this, 'tempsrfkey', {
91
+ enumerable: false,
92
+ configurable: true,
93
+ writable: true,
94
+ value: isNil(this.srfkey) ? createUUID() : this.srfkey,
95
+ });
95
96
  this.defineProperties();
96
97
  }
97
98
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"control.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/control/control.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,qBAAa,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACvD,GAAG,EAAG,WAAW,CAAC;IAElB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAElB;;;;;;;OAOG;IACH,SAAS,0BAAiC;IAE1C;;;;;OAKG;gBACS,KAAK,EAAE,CAAC;IAIpB;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C;;;;;OAKG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAE/B;;;;;;;;;OASG;IACG,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC;IAWzB;;;;;;;OAOG;IACH,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa;IAKjD;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG,SAAS;CAGvC"}
1
+ {"version":3,"file":"control.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/control/control.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAS,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,qBAAa,cAAc,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACvD,GAAG,EAAG,WAAW,CAAC;IAElB;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAElB;;;;;;;OAOG;IACH,SAAS,0BAAiC;IAE1C;;;;;OAKG;gBACS,KAAK,EAAE,CAAC;IAIpB;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C;;;;;OAKG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAE/B;;;;;;;;;OASG;IACG,IAAI,CACR,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC;IAWzB;;;;;;;OAOG;IACH,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa;IAKjD;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG,SAAS;CAGvC"}
@@ -1,4 +1,4 @@
1
- import { clone } from 'ramda';
1
+ import { clone } from '@ibiz-template/core';
2
2
  import { ControlVO } from '../../vo/control.vo';
3
3
  export class ControlService {
4
4
  /**
@@ -113,14 +113,26 @@ export declare class DEService implements IAppDEService {
113
113
  */
114
114
  aiChatSse(onmessage: (data: IPortalAsyncAction) => void, context: IParams, params?: IParams, data?: IData): Promise<void>;
115
115
  /**
116
- * 计算请求路径
116
+ * 获取 AI 聊天会话历史记录
117
117
  *
118
118
  * @author chitanda
119
- * @date 2023-10-12 11:10:56
119
+ * @date 2023-10-26 14:10:58
120
+ * @param {IParams} context
121
+ * @param {IParams} [params={}]
122
+ * @param {IData} [data={}]
123
+ * @return {*} {Promise<IHttpResponse>}
124
+ */
125
+ aiChatHistory(context: IParams, params?: IParams, data?: IData): Promise<IHttpResponse>;
126
+ /**
127
+ * 计算 AI 请求路径
128
+ *
129
+ * @author chitanda
130
+ * @date 2023-10-26 14:10:25
120
131
  * @protected
121
132
  * @param {IParams} context
133
+ * @param {boolean} [isHistories=false]
122
134
  * @return {*} {string}
123
135
  */
124
- protected calcSsePath(context: IParams): string;
136
+ protected calcSsePath(context: IParams, isHistories?: boolean): string;
125
137
  }
126
138
  //# sourceMappingURL=de.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"de.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/entity/de.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD;;;;;;;GAOG;AACH,qBAAa,SAAU,YAAW,aAAa;IAsDjC,SAAS,CAAC,KAAK,EAAE,cAAc;IArD3C;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IAEpC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAE7B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAE9D;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAiB;IAExC;;;;;;OAMG;gBACmB,KAAK,EAAE,cAAc;IAU3C;;;;;;;;;OASG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,MAAM;IA6BhE;;;;;;;;;;OAUG;IACH,IAAI,CACF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC;IAQzB;;;;;;;;;;OAUG;IACH,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,GAAE,OAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IAQzB;;;;;;;;;;OAUG;IACH,SAAS,CACP,SAAS,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,EAC7C,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,KAAU,GACf,OAAO,CAAC,IAAI,CAAC;IA6BhB;;;;;;;;OAQG;IACH,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;CAQhD"}
1
+ {"version":3,"file":"de.service.d.ts","sourceRoot":"","sources":["../../../../src/service/service/entity/de.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EACL,aAAa,EACb,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAe,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD;;;;;;;GAOG;AACH,qBAAa,SAAU,YAAW,aAAa;IAsDjC,SAAS,CAAC,KAAK,EAAE,cAAc;IArD3C;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IAEpC;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAC;IAE7B;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAE9D;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAiB;IAExC;;;;;;OAMG;gBACmB,KAAK,EAAE,cAAc;IAU3C;;;;;;;;;OASG;IACH,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,MAAM;IA6BhE;;;;;;;;;;OAUG;IACH,IAAI,CACF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,aAAa,CAAC;IAQzB;;;;;;;;;;OAUG;IACH,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,EACxB,OAAO,GAAE,OAAY,GACpB,OAAO,CAAC,aAAa,CAAC;IAQzB;;;;;;;;;;OAUG;IACH,SAAS,CACP,SAAS,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,EAC7C,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,KAAU,GACf,OAAO,CAAC,IAAI,CAAC;IA6BhB;;;;;;;;;OASG;IACH,aAAa,CACX,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,OAAY,EACpB,IAAI,GAAE,KAAU,GACf,OAAO,CAAC,aAAa,CAAC;IAMzB;;;;;;;;;OASG;IACH,SAAS,CAAC,WAAW,CACnB,OAAO,EAAE,OAAO,EAChB,WAAW,GAAE,OAAe,GAC3B,MAAM;CAQV"}
@@ -154,17 +154,33 @@ export class DEService {
154
154
  });
155
155
  }
156
156
  /**
157
- * 计算请求路径
157
+ * 获取 AI 聊天会话历史记录
158
158
  *
159
159
  * @author chitanda
160
- * @date 2023-10-12 11:10:56
160
+ * @date 2023-10-26 14:10:58
161
+ * @param {IParams} context
162
+ * @param {IParams} [params={}]
163
+ * @param {IData} [data={}]
164
+ * @return {*} {Promise<IHttpResponse>}
165
+ */
166
+ aiChatHistory(context, params = {}, data = {}) {
167
+ const app = ibiz.hub.getApp(this.model.appId);
168
+ const path = this.calcSsePath(context, true);
169
+ return app.net.post(path, data, Object.assign({ srfactag: 'AIChat' }, params));
170
+ }
171
+ /**
172
+ * 计算 AI 请求路径
173
+ *
174
+ * @author chitanda
175
+ * @date 2023-10-26 14:10:25
161
176
  * @protected
162
177
  * @param {IParams} context
178
+ * @param {boolean} [isHistories=false]
163
179
  * @return {*} {string}
164
180
  */
165
- calcSsePath(context) {
181
+ calcSsePath(context, isHistories = false) {
166
182
  const srfkey = context[this.model.codeName.toLowerCase()];
167
- const curPath = `/${this.model.codeName2.toLowerCase()}/ssechatcompletion${srfkey ? `/${srfkey}` : ''}`;
183
+ const curPath = `/${this.model.codeName2.toLowerCase()}/ssechatcompletion${isHistories ? '/histories' : ''}${srfkey ? `/${srfkey}` : ''}`;
168
184
  const resPath = calcResPath(context, this.model);
169
185
  return resPath + curPath;
170
186
  }
@@ -43,7 +43,15 @@ export declare class ControlVO {
43
43
  * @date 2022-09-07 19:09:42
44
44
  * @type {string}
45
45
  */
46
- srfkey: string;
46
+ srfkey?: string;
47
+ /**
48
+ * 临时主键
49
+ *
50
+ * @author lxm
51
+ * @date 2022-09-07 19:09:42
52
+ * @type {string}
53
+ */
54
+ tempsrfkey: string;
47
55
  /**
48
56
  * 主信息
49
57
  *
@@ -51,7 +59,7 @@ export declare class ControlVO {
51
59
  * @date 2022-09-07 19:09:42
52
60
  * @type {string}
53
61
  */
54
- srfmajortext: string;
62
+ srfmajortext?: string;
55
63
  /**
56
64
  * 实体模型标识
57
65
  *
@@ -75,7 +83,7 @@ export declare class ControlVO {
75
83
  * @date 2022-09-07 19:09:42
76
84
  * @type {string}
77
85
  */
78
- srfkeyfile: string;
86
+ srfkeyfield: string;
79
87
  /**
80
88
  * 实体主信息属性
81
89
  *
@@ -83,7 +91,7 @@ export declare class ControlVO {
83
91
  * @date 2022-09-07 19:09:42
84
92
  * @type {string}
85
93
  */
86
- srfmajorfile: string;
94
+ srfmajorfield: string;
87
95
  /**
88
96
  * Creates an instance of ControlVO.
89
97
  * @author lxm
@@ -1 +1 @@
1
- {"version":3,"file":"control.vo.d.ts","sourceRoot":"","sources":["../../../src/service/vo/control.vo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;;;;;GAOG;AACH,qBAAa,SAAS;IAEpB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAE5B;;;;;;;OAOG;IACK,OAAO,EAAE,KAAK,CAAC;IAEvB;;;;;;;OAOG;IACK,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE5C;;;;;;OAMG;IACK,KAAK,EAAE,KAAK,CAAC;IAErB;;;;;;OAMG;IACK,MAAM,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACK,YAAY,EAAE,MAAM,CAAC;IAE7B;;;;;;OAMG;IACK,OAAO,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACK,aAAa,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;IACK,UAAU,EAAE,MAAM,CAAC;IAE3B;;;;;;OAMG;IACK,YAAY,EAAE,MAAM,CAAC;IAE7B;;;;;;OAMG;gBAED,OAAO,GAAE,KAAU,EACnB,UAAU,GAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAa;IAyFjD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,YAAY;IAwCpB;;;;;;OAMG;IACH,SAAS,IAAI,KAAK;IAIlB;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI;IAIxC;;;;;;OAMG;IACH,KAAK,IAAI,SAAS;CAQnB"}
1
+ {"version":3,"file":"control.vo.d.ts","sourceRoot":"","sources":["../../../src/service/vo/control.vo.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAa5C;;;;;;;GAOG;AACH,qBAAa,SAAS;IAEpB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;IAE5B;;;;;;;OAOG;IACK,OAAO,EAAE,KAAK,CAAC;IAEvB;;;;;;;OAOG;IACK,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAE5C;;;;;;OAMG;IACK,KAAK,EAAE,KAAK,CAAC;IAErB;;;;;;OAMG;IACK,MAAM,CAAC,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACK,UAAU,EAAE,MAAM,CAAC;IAE3B;;;;;;OAMG;IACK,YAAY,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;IACK,OAAO,EAAE,MAAM,CAAC;IAExB;;;;;;OAMG;IACK,aAAa,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;IACK,WAAW,EAAE,MAAM,CAAC;IAE5B;;;;;;OAMG;IACK,aAAa,EAAE,MAAM,CAAC;IAE9B;;;;;;OAMG;gBAED,OAAO,GAAE,KAAU,EACnB,UAAU,GAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAa;IAkHjD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,YAAY;IAqCpB;;;;;;OAMG;IACH,SAAS,IAAI,KAAK;IAIlB;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,IAAI;IAIxC;;;;;;OAMG;IACH,KAAK,IAAI,SAAS;CAQnB"}
@@ -1,5 +1,16 @@
1
+ import { createUUID } from 'qx-util';
1
2
  import { clone, isNil } from 'ramda';
2
3
  import { Srfuf } from '../constant';
4
+ const BuildInKeys = [
5
+ 'srfkey',
6
+ 'srfmajortext',
7
+ 'srfmajorfield',
8
+ 'srfkeyfield',
9
+ 'tempsrfkey',
10
+ 'srfuf',
11
+ 'srfdeid',
12
+ 'srfdecodename',
13
+ ];
3
14
  /**
4
15
  * 部件UI显示层数据转换
5
16
  *
@@ -17,6 +28,7 @@ export class ControlVO {
17
28
  * @param {Map<string, string>} dataUIMap 转换映射map,key为转换后的属性,value为映射字段描述信息
18
29
  */
19
30
  constructor($origin = {}, $dataUIMap = new Map()) {
31
+ // 自身的属性
20
32
  Object.defineProperty(this, '$origin', {
21
33
  enumerable: false,
22
34
  configurable: true,
@@ -27,57 +39,85 @@ export class ControlVO {
27
39
  configurable: true,
28
40
  value: $dataUIMap || new Map(),
29
41
  });
42
+ // 可读写的预置属性,主键属性和主文本属性
43
+ ['srfkey', 'srfmajortext'].forEach(key => {
44
+ if (Object.prototype.hasOwnProperty.call(this.$origin, key)) {
45
+ Object.defineProperty(this, key, {
46
+ get() {
47
+ return this.$origin.srfkey;
48
+ },
49
+ set(val) {
50
+ this.$origin.srfkey = val;
51
+ },
52
+ enumerable: false,
53
+ configurable: true,
54
+ });
55
+ }
56
+ else if (this.$dataUIMap.has(key)) {
57
+ const { dataKey } = this.$dataUIMap.get(key);
58
+ Object.defineProperty(this, key, {
59
+ get() {
60
+ return this.$origin[dataKey];
61
+ },
62
+ set(val) {
63
+ this.$origin[dataKey] = val;
64
+ },
65
+ enumerable: false,
66
+ configurable: true,
67
+ });
68
+ }
69
+ else {
70
+ Object.defineProperty(this, key, {
71
+ enumerable: false,
72
+ configurable: true,
73
+ writable: true,
74
+ value: null,
75
+ });
76
+ }
77
+ });
78
+ // tempsrfkey临时主键
79
+ if (Object.prototype.hasOwnProperty.call(this.$origin, 'tempsrfkey')) {
80
+ // $origin有的操作$origin的属性
81
+ Object.defineProperty(this, 'tempsrfkey', {
82
+ get() {
83
+ return this.$origin.tempsrfkey;
84
+ },
85
+ set(val) {
86
+ this.$origin.tempsrfkey = val;
87
+ },
88
+ enumerable: false,
89
+ configurable: true,
90
+ });
91
+ }
92
+ else {
93
+ // $$origin没有的自己赋值
94
+ Object.defineProperty(this, 'tempsrfkey', {
95
+ enumerable: false,
96
+ configurable: true,
97
+ writable: true,
98
+ value: isNil(this.srfkey) ? createUUID() : this.srfkey,
99
+ });
100
+ }
101
+ // srfuf纯计算属性,不可修改
30
102
  Object.defineProperty(this, 'srfuf', {
31
103
  get() {
32
- if (isNil(this.$origin.srfuf)) {
33
- return this.srfkey ? Srfuf.UPDATE : Srfuf.CREATE;
104
+ if (Object.prototype.hasOwnProperty.call(this.$origin, 'srfuf')) {
105
+ return this.$origin.srfuf;
34
106
  }
35
- return this.$origin.srfuf;
36
- },
37
- enumerable: false,
38
- configurable: true,
39
- });
40
- Object.defineProperty(this, 'srfkey', {
41
- get() {
42
- return this.$origin.srfkey;
107
+ return this.srfkey === this.tempsrfkey ? Srfuf.UPDATE : Srfuf.CREATE;
43
108
  },
44
109
  enumerable: false,
45
110
  configurable: true,
46
111
  });
47
- Object.defineProperty(this, 'srfmajortext', {
48
- get() {
49
- return this.$origin.srfmajortext;
50
- },
51
- enumerable: false,
52
- configurable: true,
53
- });
54
- Object.defineProperty(this, 'srfdeid', {
55
- get() {
56
- return this.$origin.srfdeid;
57
- },
58
- enumerable: false,
59
- configurable: true,
60
- });
61
- Object.defineProperty(this, 'srfdecodename', {
62
- get() {
63
- return this.$origin.srfdecodename;
64
- },
65
- enumerable: false,
66
- configurable: true,
67
- });
68
- Object.defineProperty(this, 'srfkeyfile', {
69
- get() {
70
- return this.$origin.srfkeyfile;
71
- },
72
- enumerable: false,
73
- configurable: true,
74
- });
75
- Object.defineProperty(this, 'srfmajorfile', {
76
- get() {
77
- return this.$origin.srfmajorfile;
78
- },
79
- enumerable: false,
80
- configurable: true,
112
+ // 只读的预置属性
113
+ ['srfdeid', 'srfdecodename', 'srfkeyfield', 'srfmajorfield'].forEach(key => {
114
+ Object.defineProperty(this, key, {
115
+ get() {
116
+ return this.$origin[key];
117
+ },
118
+ enumerable: false,
119
+ configurable: true,
120
+ });
81
121
  });
82
122
  // 先转换映射的属性
83
123
  this.$dataUIMap.forEach((mapField, key) => {
@@ -107,8 +147,8 @@ export class ControlVO {
107
147
  */
108
148
  linkProperty(uiKey, dataKey, mapField) {
109
149
  const isOriginField = mapField ? mapField.isOriginField : true;
110
- // srfuf和srfkey不做处理
111
- if (uiKey === 'srfuf') {
150
+ // 预置的属性不做处理
151
+ if (BuildInKeys.includes(uiKey)) {
112
152
  return;
113
153
  }
114
154
  // 后台数据存在$origin里,其他存在ControlVo上
@@ -118,10 +158,7 @@ export class ControlVO {
118
158
  enumerable: true,
119
159
  configurable: true,
120
160
  get() {
121
- // srfkey 视图id优先,拿不到实体属性则拿界面属性(前端id)
122
- return uiKey === 'srfkey'
123
- ? this.$origin[dataKey] || this.$origin[uiKey]
124
- : this.$origin[dataKey];
161
+ return this.$origin[dataKey];
125
162
  },
126
163
  set(val) {
127
164
  // 有mapField的走它的转换
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibiz-template/runtime",
3
- "version": "0.2.1",
3
+ "version": "0.2.4",
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.2.0",
32
+ "@ibiz-template/core": "^0.2.4",
33
33
  "@ibiz/model-core": "^0.0.19",
34
34
  "@types/path-browserify": "^1.0.0",
35
35
  "@types/qs": "^6.9.8",
@@ -59,5 +59,5 @@
59
59
  "qx-util": "^0.4.8",
60
60
  "ramda": "^0.29.0"
61
61
  },
62
- "gitHead": "a065b45d8a31003cad44151fc9663c41deb310ab"
62
+ "gitHead": "6aac74058a5bb708860cb9d40afe5640e53662e4"
63
63
  }
@@ -126,12 +126,12 @@ export class BaseController<
126
126
  // 登记自身
127
127
  this.mountCounter.enroll(SELF_KEY);
128
128
  await this.onCreated();
129
- this.state.isCreated = true;
130
129
  this.force(() => {
131
130
  this.mountSelf();
132
131
  });
132
+ await this._evt.emit('onCreated', undefined);
133
+ this.state.isCreated = true;
133
134
  ibiz.log.debug(`${this.constructor.name}:${this.name} onCreated`);
134
- this._evt.emit('onCreated', undefined);
135
135
  }
136
136
 
137
137
  /**
@@ -178,9 +178,9 @@ export class BaseController<
178
178
  */
179
179
  protected async mounted(): Promise<void> {
180
180
  await this.onMounted();
181
+ await this._evt.emit('onMounted', undefined);
181
182
  this.state.isMounted = true;
182
183
  ibiz.log.debug(`${this.constructor.name}:${this.name} onMounted`);
183
- this._evt.emit('onMounted', undefined);
184
184
  }
185
185
 
186
186
  /**
@@ -200,9 +200,9 @@ export class BaseController<
200
200
  */
201
201
  async destroyed(): Promise<void> {
202
202
  await this.onDestroyed();
203
+ await this._evt.emit('onDestroyed', undefined);
203
204
  this.state.isDestroyed = true;
204
205
  ibiz.log.debug(`${this.constructor.name}:${this.name} onDestroyed`);
205
- await this._evt.emit('onDestroyed', undefined);
206
206
  this.evt.destroy();
207
207
  }
208
208
 
@@ -145,6 +145,17 @@ export class ControlController<
145
145
  this.handleControlParams();
146
146
  // 部件逻辑初始化
147
147
  this.initControlScheduler(this.model.controlLogics);
148
+
149
+ // 监听部件所有事件触发部件逻辑
150
+ if (this.scheduler?.hasControlEventTrigger) {
151
+ this._evt.onAll((eventName, event) => {
152
+ this.scheduler!.triggerControlEvent(
153
+ event.targetName,
154
+ event.eventName,
155
+ event,
156
+ );
157
+ });
158
+ }
148
159
  }
149
160
 
150
161
  protected async onMounted(): Promise<void> {
@@ -177,6 +177,8 @@ export class ViewController<
177
177
  const ins = ibiz.engine.getEngine(engine, this);
178
178
  if (ins) {
179
179
  this.engines.push(ins);
180
+ } else {
181
+ ibiz.log.warn(`未找到视图引擎实现:`, engine);
180
182
  }
181
183
  });
182
184
  } else {
@@ -7,6 +7,7 @@ import {
7
7
  } from '@ibiz-template/core';
8
8
  import { IAppDEEditView, IDEEditForm } from '@ibiz/model-core';
9
9
  import { debounce } from 'lodash-es';
10
+ import { createUUID } from 'qx-util';
10
11
  import { clone } from 'ramda';
11
12
  import {
12
13
  IEditFormState,
@@ -160,7 +161,9 @@ export class EditFormController
160
161
  await this.endLoading();
161
162
  }
162
163
 
163
- res.data.$origin.srfsourcekey = undefined;
164
+ // 清空主键,重置临时主键
165
+ res.data.srfkey = undefined;
166
+ res.data.tempsrfkey = createUUID();
164
167
 
165
168
  this.state.modified = false;
166
169
  this.state.data = res.data;
@@ -260,9 +263,11 @@ export class EditFormController
260
263
  } finally {
261
264
  await this.endLoading();
262
265
  }
263
- // 保存结束后的事件
266
+
267
+ // 保存结束后合并修改临时主键
264
268
  if (res.data) {
265
269
  mergeInLeft(this.data, res.data);
270
+ this.data.tempsrfkey = this.data.srfkey;
266
271
  }
267
272
  this.state.modified = false;
268
273
  await this.evt.emit('onSaveSuccess', undefined);
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable no-param-reassign */
2
- import { debounceAndAsyncMerge } from '@ibiz-template/core';
3
- import { IDEForm, IDEFormDetail } from '@ibiz/model-core';
2
+ import { debounceAndAsyncMerge, recursiveIterate } from '@ibiz-template/core';
3
+ import { IControlLogic, IDEForm, IDEFormDetail } from '@ibiz/model-core';
4
4
  import {
5
5
  IFormState,
6
6
  IFormEvent,
@@ -272,4 +272,28 @@ export abstract class FormController<
272
272
  ): void {
273
273
  super.actionNotification(tag, { data: this.data, ...(opts || {}) });
274
274
  }
275
+
276
+ /**
277
+ * 初始化部件逻辑调度器
278
+ * @author lxm
279
+ * @date 2023-08-21 11:53:37
280
+ * @param {IControlLogic[]} logics
281
+ * @return {*} {void}
282
+ */
283
+ protected initControlScheduler(logics: IControlLogic[] = []): void {
284
+ const actualLogics = [...logics];
285
+ // 遍历所有的项,如果有逻辑的话加入
286
+ recursiveIterate(
287
+ this.model,
288
+ (item: IDEFormDetail) => {
289
+ if (item.controlLogics) {
290
+ actualLogics.push(...item.controlLogics);
291
+ }
292
+ },
293
+ {
294
+ childrenFields: ['deformPages', 'deformTabPages', 'deformDetails'],
295
+ },
296
+ );
297
+ super.initControlScheduler(actualLogics);
298
+ }
275
299
  }