@ibiz-template/vue3-components 0.7.41-alpha.145 → 0.7.41-alpha.147

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 (107) hide show
  1. package/dist/{index-B_sVovOS.js → index-B-mkNJ8X.js} +1 -1
  2. package/dist/index-BAfdAw1V.js +339 -0
  3. package/dist/{index-Qf-i9QxK.js → index-DA2x586m.js} +1 -1
  4. package/dist/{index.es-CfZdec4G.js → index.es-CSMb33DK.js} +1 -1
  5. package/dist/index.min.css +1 -1
  6. package/dist/index.system.min.js +1 -1
  7. package/dist/{wang-editor-CUGqp4Uw.js → wang-editor-LyrHDNOt.js} +1 -1
  8. package/dist/{xlsx-util-C9Q58lgT.js → xlsx-util-DcIFyyjA.js} +1 -1
  9. package/es/common/html-doc-preview/html-doc-preview.mjs +3 -0
  10. package/es/common/no-data/no-data.css +1 -1
  11. package/es/common/no-data/no-data.mjs +3 -4
  12. package/es/control/app-menu/app-menu.css +1 -1
  13. package/es/control/app-menu/app-menu.mjs +40 -8
  14. package/es/control/calendar/calendar.mjs +17 -21
  15. package/es/control/drbar/drbar.controller.mjs +12 -1
  16. package/es/control/drtab/drtab.controller.mjs +12 -1
  17. package/es/control/grid/grid-column/grid-field-column/grid-field-column.mjs +1 -14
  18. package/es/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.mjs +44 -9
  19. package/es/control/tree/tree.mjs +7 -1
  20. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.mjs +2 -1
  21. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/cell-edit.mjs +2 -1
  22. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/row-edit.mjs +2 -1
  23. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/tree-grid-ex-edit-column.mjs +50 -14
  24. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.mjs +40 -8
  25. package/es/editor/ai-chat/embed-ai-chat/embed-ai-chat.mjs +24 -1
  26. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  27. package/es/editor/text-box/input/input.mjs +8 -1
  28. package/es/locale/en/index.mjs +0 -6
  29. package/es/locale/zh-CN/index.mjs +0 -6
  30. package/es/panel-component/app-extend-menu/bottom-side-menu/bottom-side-menu.mjs +1 -0
  31. package/es/panel-component/app-extend-menu/extend-menu-base/common-extend-menu/common-extend-menu.mjs +6 -0
  32. package/es/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.css +1 -1
  33. package/es/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.mjs +38 -4
  34. package/es/panel-component/app-extend-menu/extend-menu-base/extend-menu-base.controller.mjs +29 -1
  35. package/es/panel-component/app-extend-menu/extend-menu-base/extend-standard-menu/extend-standard-menu.css +1 -1
  36. package/es/panel-component/app-extend-menu/extend-menu-base/extend-standard-menu/extend-standard-menu.mjs +45 -7
  37. package/es/panel-component/app-extend-menu/left-side-menu/left-side-menu.mjs +1 -0
  38. package/es/panel-component/app-extend-menu/right-side-menu/right-side-menu.mjs +1 -0
  39. package/es/panel-component/app-extend-menu/top-side-menu/top-side-menu.mjs +1 -0
  40. package/es/util/ai-chat-util/ai-chat-util.mjs +124 -24
  41. package/lib/common/html-doc-preview/html-doc-preview.cjs +3 -0
  42. package/lib/common/no-data/no-data.cjs +3 -4
  43. package/lib/common/no-data/no-data.css +1 -1
  44. package/lib/control/app-menu/app-menu.cjs +40 -8
  45. package/lib/control/app-menu/app-menu.css +1 -1
  46. package/lib/control/calendar/calendar.cjs +17 -21
  47. package/lib/control/drbar/drbar.controller.cjs +12 -1
  48. package/lib/control/drtab/drtab.controller.cjs +12 -1
  49. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.cjs +1 -14
  50. package/lib/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.cjs +42 -7
  51. package/lib/control/tree/tree.cjs +7 -1
  52. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.cjs +2 -1
  53. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/cell-edit.cjs +2 -1
  54. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/row-edit.cjs +2 -1
  55. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/tree-grid-ex-edit-column.cjs +49 -13
  56. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.cjs +39 -7
  57. package/lib/editor/ai-chat/embed-ai-chat/embed-ai-chat.cjs +23 -0
  58. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.css +1 -1
  59. package/lib/editor/text-box/input/input.cjs +8 -1
  60. package/lib/locale/en/index.cjs +0 -6
  61. package/lib/locale/zh-CN/index.cjs +0 -6
  62. package/lib/panel-component/app-extend-menu/bottom-side-menu/bottom-side-menu.cjs +1 -0
  63. package/lib/panel-component/app-extend-menu/extend-menu-base/common-extend-menu/common-extend-menu.cjs +6 -0
  64. package/lib/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.cjs +38 -4
  65. package/lib/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.css +1 -1
  66. package/lib/panel-component/app-extend-menu/extend-menu-base/extend-menu-base.controller.cjs +28 -0
  67. package/lib/panel-component/app-extend-menu/extend-menu-base/extend-standard-menu/extend-standard-menu.cjs +45 -7
  68. package/lib/panel-component/app-extend-menu/extend-menu-base/extend-standard-menu/extend-standard-menu.css +1 -1
  69. package/lib/panel-component/app-extend-menu/left-side-menu/left-side-menu.cjs +1 -0
  70. package/lib/panel-component/app-extend-menu/right-side-menu/right-side-menu.cjs +1 -0
  71. package/lib/panel-component/app-extend-menu/top-side-menu/top-side-menu.cjs +1 -0
  72. package/lib/util/ai-chat-util/ai-chat-util.cjs +124 -24
  73. package/package.json +5 -5
  74. package/src/common/html-doc-preview/html-doc-preview.tsx +4 -0
  75. package/src/common/no-data/no-data.scss +1 -1
  76. package/src/common/no-data/no-data.tsx +4 -5
  77. package/src/control/app-menu/app-menu.scss +4 -0
  78. package/src/control/app-menu/app-menu.tsx +39 -11
  79. package/src/control/calendar/calendar.tsx +24 -27
  80. package/src/control/drbar/drbar.controller.ts +12 -0
  81. package/src/control/drtab/drtab.controller.ts +12 -0
  82. package/src/control/grid/grid-column/grid-field-column/grid-field-column.tsx +2 -19
  83. package/src/control/grid/grid-column/grid-field-edit-column/grid-field-edit-column.tsx +60 -13
  84. package/src/control/tree/tree.tsx +8 -1
  85. package/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/all-edit.ts +1 -0
  86. package/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/cell-edit.ts +1 -0
  87. package/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/row-edit.ts +1 -0
  88. package/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-edit-column/tree-grid-ex-edit-column.tsx +60 -14
  89. package/src/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.tsx +44 -4
  90. package/src/editor/ai-chat/embed-ai-chat/embed-ai-chat.tsx +37 -2
  91. package/src/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.scss +2 -1
  92. package/src/editor/text-box/input/input.tsx +10 -1
  93. package/src/locale/en/index.ts +0 -8
  94. package/src/locale/zh-CN/index.ts +0 -6
  95. package/src/panel-component/app-extend-menu/bottom-side-menu/bottom-side-menu.tsx +1 -0
  96. package/src/panel-component/app-extend-menu/extend-menu-base/common-extend-menu/common-extend-menu.tsx +7 -0
  97. package/src/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.scss +4 -0
  98. package/src/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.tsx +30 -1
  99. package/src/panel-component/app-extend-menu/extend-menu-base/extend-menu-base.controller.ts +29 -0
  100. package/src/panel-component/app-extend-menu/extend-menu-base/extend-menu-base.util.ts +3 -0
  101. package/src/panel-component/app-extend-menu/extend-menu-base/extend-standard-menu/extend-standard-menu.scss +4 -0
  102. package/src/panel-component/app-extend-menu/extend-menu-base/extend-standard-menu/extend-standard-menu.tsx +43 -5
  103. package/src/panel-component/app-extend-menu/left-side-menu/left-side-menu.tsx +1 -0
  104. package/src/panel-component/app-extend-menu/right-side-menu/right-side-menu.tsx +1 -0
  105. package/src/panel-component/app-extend-menu/top-side-menu/top-side-menu.tsx +1 -0
  106. package/src/util/ai-chat-util/ai-chat-util.ts +161 -25
  107. package/dist/index-DrjG63wY.js +0 -339
@@ -662,6 +662,7 @@ export const CalendarControl = defineComponent({
662
662
  const findIndex = this.c.state.selectedData.findIndex((data: IData) => {
663
663
  return data.deData.srfkey === item.deData.srfkey;
664
664
  });
665
+ const htmlCode = this.c.getCustomHtml(item);
665
666
  const itemClass = [
666
667
  this.ns.b('item'),
667
668
  this.semanticClass('item', { item }),
@@ -671,6 +672,7 @@ export const CalendarControl = defineComponent({
671
672
  'begin-time',
672
673
  date && dayjs(date).isSame(item.beginTime, 'day'),
673
674
  ),
675
+ this.ns.is('script', !!htmlCode),
674
676
  this.ns.is(
675
677
  'hidden',
676
678
  this.showDateRange &&
@@ -685,24 +687,28 @@ export const CalendarControl = defineComponent({
685
687
  this.ns.is('end-time', date && dayjs(date).isSame(item.endTime, 'day')),
686
688
  ];
687
689
  const style = this.calcItemStyle(item);
690
+ let content;
691
+ if (!htmlCode)
692
+ content = this.showDateRange
693
+ ? date &&
694
+ (dayjs(date).isSame(item.beginTime, 'day') ||
695
+ dayjs(date).day() === 0 ||
696
+ (!item.beginTime && dayjs(date).isSame(item.endTime, 'day')))
697
+ ? item.text
698
+ : ''
699
+ : item.text;
688
700
  return (
689
701
  <div
690
702
  class={itemClass}
691
- key={item.deData.srfkey}
692
703
  style={style}
704
+ key={item.deData.srfkey}
705
+ v-html={htmlCode}
693
706
  title={showTitle(item.tips || item.text)}
694
707
  onClick={(): Promise<void> => this.c.onRowClick(item)}
695
708
  onDblclick={(): Promise<void> => this.c.onDbRowClick(item)}
696
709
  onContextmenu={evt => this.onNodeContextmenu(item, evt)}
697
710
  >
698
- {this.showDateRange
699
- ? date &&
700
- (dayjs(date).isSame(item.beginTime, 'day') ||
701
- dayjs(date).day() === 0 ||
702
- (!item.beginTime && dayjs(date).isSame(item.endTime, 'day')))
703
- ? item.text
704
- : ''
705
- : item.text}
711
+ {content}
706
712
  </div>
707
713
  );
708
714
  };
@@ -711,16 +717,20 @@ export const CalendarControl = defineComponent({
711
717
  * 绘制日历项
712
718
  *
713
719
  * @param {ICalendarItemData} item
714
- * @param {Date} date
720
+ * @param {[Date]} date
715
721
  * @return {*}
716
722
  */
717
- const renderCalendarItem = (item: ICalendarItemData, date: Date) => {
723
+ const renderCalendarItem = (item: ICalendarItemData, date?: Date) => {
718
724
  const model = this.c.model.sysCalendarItems?.find(
719
725
  (calendarItems: IData) => {
720
726
  return item.itemType === calendarItems.itemType;
721
727
  },
722
728
  );
723
- const panel = model!.layoutPanel;
729
+ const panel =
730
+ model!.layoutPanel ||
731
+ model!.controlRenders?.find(
732
+ render => render.renderType === 'LAYOUTPANEL',
733
+ )?.layoutPanel;
724
734
  return panel
725
735
  ? renderPanelItem(item, panel, date)
726
736
  : renderDefaultItem(item, date);
@@ -1010,15 +1020,9 @@ export const CalendarControl = defineComponent({
1010
1020
  * @returns {*}
1011
1021
  */
1012
1022
  const renderSlots = () => {
1013
- const { sysCalendarItems = [] } = this.c.model;
1014
1023
  return {
1015
1024
  event: ({ data }: { data: ICalendarItemData }) => {
1016
- const model = sysCalendarItems.find(
1017
- item => data.itemType === item.itemType,
1018
- );
1019
- if (model?.layoutPanel)
1020
- return renderPanelItem(data, model.layoutPanel);
1021
- return renderDefaultItem(data);
1025
+ return renderCalendarItem(data);
1022
1026
  },
1023
1027
  };
1024
1028
  };
@@ -1085,11 +1089,6 @@ export const CalendarControl = defineComponent({
1085
1089
  <el-timeline class={this.ns.e('timeline')}>
1086
1090
  {this.c.state.items.length > 0
1087
1091
  ? this.c.state.items.map((item: ICalendarItemData) => {
1088
- const model = this.c.model.sysCalendarItems?.find(
1089
- (calendarItems: IData) => {
1090
- return item.itemType === calendarItems.itemType;
1091
- },
1092
- );
1093
1092
  const time = item[this.c.groupTimeField];
1094
1093
  const temptime = time
1095
1094
  ? dayjs(time).format(this.c.timelineCaptionFormat)
@@ -1101,9 +1100,7 @@ export const CalendarControl = defineComponent({
1101
1100
  color={item.bkColor}
1102
1101
  timestamp={temptime}
1103
1102
  >
1104
- {model?.layoutPanel
1105
- ? renderPanelItem(item, model.layoutPanel)
1106
- : renderDefaultItem(item)}
1103
+ {renderCalendarItem(item)}
1107
1104
  </el-timeline-item>
1108
1105
  );
1109
1106
  })
@@ -122,6 +122,17 @@ export class DRBarController
122
122
  return this.view.modal.routeDepth;
123
123
  }
124
124
 
125
+ /**
126
+ * @description 缓存项集合
127
+ * @readonly
128
+ * @type {string[]}
129
+ * @memberof DRBarController
130
+ */
131
+ get cacheItems(): string[] {
132
+ const { cacheitems = '' } = this.controlParams;
133
+ return cacheitems.split(',');
134
+ }
135
+
125
136
  /**
126
137
  * 初始化state的属性
127
138
  *
@@ -550,6 +561,7 @@ export class DRBarController
550
561
  params,
551
562
  viewId: drBarItem.appViewId,
552
563
  isRoutePushed,
564
+ isCache: this.cacheItems.includes(drBarItem.id!),
553
565
  });
554
566
  }
555
567
 
@@ -163,6 +163,17 @@ export class DRTabController
163
163
  return this.controlParams.navbarwidth || ibiz.config.drtab.navbarWidth;
164
164
  }
165
165
 
166
+ /**
167
+ * @description 缓存项集合
168
+ * @readonly
169
+ * @type {string[]}
170
+ * @memberof DRBarController
171
+ */
172
+ get cacheItems(): string[] {
173
+ const { cacheitems = '' } = this.controlParams;
174
+ return cacheitems.split(',');
175
+ }
176
+
166
177
  /**
167
178
  * Router 对象
168
179
  *
@@ -605,6 +616,7 @@ export class DRTabController
605
616
  params,
606
617
  viewId: drTabPage.appViewId,
607
618
  isRoutePushed,
619
+ isCache: this.cacheItems.includes(drTabPage.id!),
608
620
  });
609
621
  }
610
622
 
@@ -1,5 +1,5 @@
1
- import { ILayoutPanel, IPanel, IUIActionGroupDetail } from '@ibiz/model-core';
2
- import { computed, defineComponent, ref, VNode } from 'vue';
1
+ import { IPanel, IUIActionGroupDetail } from '@ibiz/model-core';
2
+ import { computed, defineComponent, ref } from 'vue';
3
3
  import {
4
4
  useNamespace,
5
5
  computedAsync,
@@ -171,22 +171,6 @@ export const GridFieldColumn = defineComponent({
171
171
  )?.layoutPanel;
172
172
  };
173
173
 
174
- // 绘制项布局面板
175
- const renderPanelItemLayout = (
176
- item: IData,
177
- modelData: ILayoutPanel,
178
- ): VNode => {
179
- const { context, params } = props.controller;
180
- return (
181
- <iBizControlShell
182
- data={item}
183
- modelData={modelData}
184
- context={context}
185
- params={params}
186
- ></iBizControlShell>
187
- );
188
- };
189
-
190
174
  return {
191
175
  ns,
192
176
  zIndex,
@@ -204,7 +188,6 @@ export const GridFieldColumn = defineComponent({
204
188
  onActionClick,
205
189
  findLayoutPanel,
206
190
  onInfoTextChange,
207
- renderPanelItemLayout,
208
191
  };
209
192
  },
210
193
  render() {
@@ -12,9 +12,11 @@ import {
12
12
  import {
13
13
  useNamespace,
14
14
  renderTooltip,
15
+ computedAsync,
15
16
  useSemanticNode,
16
17
  } from '@ibiz-template/vue3-util';
17
18
  import { RuntimeError } from '@ibiz-template/core';
19
+ import { IPanel } from '@ibiz/model-core';
18
20
  import {
19
21
  GridRowState,
20
22
  GridFieldEditColumnController,
@@ -123,16 +125,36 @@ export const GridFieldEditColumn = defineComponent({
123
125
  : `${id?.toLowerCase()}_tooltip`;
124
126
  });
125
127
 
128
+ const CustomHtml = computedAsync(async () => {
129
+ const html = await props.controller.getCustomHtml(props.row);
130
+ return html;
131
+ });
132
+
133
+ const findLayoutPanel = (): IPanel | undefined => {
134
+ const { controlRenders = [], id } = props.controller.model;
135
+ return controlRenders.find(
136
+ renderItem =>
137
+ renderItem.renderType === 'LAYOUTPANEL' &&
138
+ ![
139
+ `${id?.toLowerCase()}_tooltip`,
140
+ `${id?.toLowerCase()}_edit_tooltip`,
141
+ ].includes(renderItem.id!),
142
+ )?.layoutPanel;
143
+ };
144
+
126
145
  return {
127
146
  c,
128
147
  ns,
129
148
  tooltip,
149
+ editable,
130
150
  tooltipId,
131
151
  showTitle,
152
+ CustomHtml,
132
153
  editorProps,
133
154
  componentRef,
134
155
  gridEditItemProps,
135
156
  rowDataChange,
157
+ findLayoutPanel,
136
158
  onInfoTextChange,
137
159
  semanticClass,
138
160
  semanticStyle,
@@ -142,6 +164,25 @@ export const GridFieldEditColumn = defineComponent({
142
164
  const val = this.row.data[this.c.fieldName];
143
165
  let content = null;
144
166
  const editorSlot = `${this.controller.model.codeName}_editor`;
167
+
168
+ const renderEditor = () => {
169
+ return this.c.editorProvider
170
+ ? h(resolveComponent(this.c.editorProvider.gridEditor), {
171
+ class: this.ns.e('editor'),
172
+ value: val,
173
+ data: this.row.data,
174
+ controller: this.c.editor,
175
+ showTitle: this.showTitle,
176
+ overflowMode: this.c.grid.overflowMode,
177
+ onChange: this.rowDataChange,
178
+ onInfoTextChange: this.onInfoTextChange,
179
+ title: this.tooltip,
180
+ ...this.editorProps,
181
+ ...this.attrs,
182
+ })
183
+ : undefined;
184
+ };
185
+
145
186
  if (this.$slots[editorSlot]) {
146
187
  content = renderSlot(this.$slots, editorSlot!, {
147
188
  class: this.ns.e('editor'),
@@ -157,19 +198,25 @@ export const GridFieldEditColumn = defineComponent({
157
198
  ...this.attrs,
158
199
  });
159
200
  } else if (this.c.editorProvider) {
160
- content = h(resolveComponent(this.c.editorProvider.gridEditor), {
161
- class: this.ns.e('editor'),
162
- value: val,
163
- data: this.row.data,
164
- controller: this.c.editor,
165
- showTitle: this.showTitle,
166
- overflowMode: this.c.grid.overflowMode,
167
- onChange: this.rowDataChange,
168
- onInfoTextChange: this.onInfoTextChange,
169
- title: this.tooltip,
170
- ...this.editorProps,
171
- ...this.attrs,
172
- });
201
+ const panel = this.findLayoutPanel();
202
+ if (this.editable) {
203
+ content = renderEditor();
204
+ } else if (this.c.isCustomCode) {
205
+ content = (
206
+ <span class={this.ns.e('script')} v-html={this.CustomHtml}></span>
207
+ );
208
+ } else if (panel) {
209
+ content = (
210
+ <iBizControlShell
211
+ data={this.row.data}
212
+ modelData={panel}
213
+ context={this.c.context}
214
+ params={this.c.params}
215
+ />
216
+ );
217
+ } else {
218
+ content = renderEditor();
219
+ }
173
220
  }
174
221
 
175
222
  return (
@@ -1139,7 +1139,14 @@ export const TreeControl = defineComponent({
1139
1139
  const layoutPanel = getNodeControlPanel(nodeModel);
1140
1140
 
1141
1141
  let content;
1142
- if (layoutPanel) {
1142
+
1143
+ const htmlCode = this.c.getCustomHtml(nodeModel, nodeData);
1144
+
1145
+ if (htmlCode) {
1146
+ content = (
1147
+ <div class={this.ns.e('script')} v-html={htmlCode}></div>
1148
+ );
1149
+ } else if (layoutPanel) {
1143
1150
  content = (
1144
1151
  <iBizControlShell
1145
1152
  data={nodeData}
@@ -62,5 +62,6 @@ export function useAllEdit(
62
62
  return {
63
63
  gridEditItemProps,
64
64
  editorProps,
65
+ editable,
65
66
  };
66
67
  }
@@ -115,5 +115,6 @@ export function useCellEdit(
115
115
  return {
116
116
  gridEditItemProps,
117
117
  editorProps,
118
+ editable,
118
119
  };
119
120
  }
@@ -54,5 +54,6 @@ export function useRowEdit(
54
54
  return {
55
55
  gridEditItemProps,
56
56
  editorProps,
57
+ editable,
57
58
  };
58
59
  }
@@ -1,6 +1,15 @@
1
- import { h, defineComponent, resolveComponent, ref, computed } from 'vue';
1
+ import {
2
+ h,
3
+ ref,
4
+ computed,
5
+ PropType,
6
+ ComputedRef,
7
+ defineComponent,
8
+ resolveComponent,
9
+ } from 'vue';
2
10
  import { useNamespace, useSemanticNode } from '@ibiz-template/vue3-util';
3
11
  import { RuntimeError } from '@ibiz-template/core';
12
+ import { IPanel } from '@ibiz/model-core';
4
13
  import {
5
14
  TreeGridExNodeColumnController,
6
15
  TreeGridExRowState,
@@ -22,6 +31,16 @@ export const TreeGridExEditColumn = defineComponent({
22
31
  type: TreeGridExRowState,
23
32
  required: true,
24
33
  },
34
+ isCustomCode: {
35
+ type: Boolean,
36
+ default: false,
37
+ },
38
+ panelModel: {
39
+ type: Object as PropType<IPanel>,
40
+ },
41
+ customHtml: {
42
+ type: String,
43
+ },
25
44
  },
26
45
  setup(props) {
27
46
  /** 行数据对应属性列的值 */
@@ -52,6 +71,7 @@ export const TreeGridExEditColumn = defineComponent({
52
71
  const useByShowMode = (): {
53
72
  gridEditItemProps: IData;
54
73
  editorProps: IData;
74
+ editable: ComputedRef<boolean>;
55
75
  } => {
56
76
  switch (c.treeGrid.editShowMode) {
57
77
  case 'cell':
@@ -68,7 +88,7 @@ export const TreeGridExEditColumn = defineComponent({
68
88
  );
69
89
  }
70
90
  };
71
- const { gridEditItemProps, editorProps } = useByShowMode();
91
+ const { gridEditItemProps, editorProps, editable } = useByShowMode();
72
92
 
73
93
  const infoText = ref<string | undefined>(undefined);
74
94
  const onInfoTextChange = (text: string) => {
@@ -90,6 +110,7 @@ export const TreeGridExEditColumn = defineComponent({
90
110
  fieldValue,
91
111
  componentRef,
92
112
  tooltip,
113
+ editable,
93
114
  rowDataChange,
94
115
  onInfoTextChange,
95
116
  gridEditItemProps,
@@ -99,6 +120,42 @@ export const TreeGridExEditColumn = defineComponent({
99
120
  };
100
121
  },
101
122
  render() {
123
+ const renderEditor = () => {
124
+ return this.controller.editorProvider
125
+ ? h(resolveComponent(this.controller.editorProvider.gridEditor), {
126
+ class: this.ns.e('editor'),
127
+ value: this.fieldValue,
128
+ data: this.row.data,
129
+ controller: this.controller.editor,
130
+ overflowMode: this.controller.treeGrid.overflowMode,
131
+ onChange: this.rowDataChange,
132
+ onInfoTextChange: this.onInfoTextChange,
133
+ title: this.tooltip,
134
+ ...this.editorProps,
135
+ })
136
+ : undefined;
137
+ };
138
+
139
+ let content = null;
140
+ if (this.editable) {
141
+ content = renderEditor();
142
+ } else if (this.isCustomCode) {
143
+ content = (
144
+ <span class={this.ns.e('script')} v-html={this.customHtml}></span>
145
+ );
146
+ } else if (this.panelModel) {
147
+ content = (
148
+ <iBizControlShell
149
+ data={this.row.data}
150
+ modelData={this.panelModel}
151
+ context={this.controller.context}
152
+ params={this.controller.params}
153
+ />
154
+ );
155
+ } else {
156
+ content = renderEditor();
157
+ }
158
+
102
159
  return (
103
160
  <iBizGridEditItem
104
161
  {...{
@@ -114,18 +171,7 @@ export const TreeGridExEditColumn = defineComponent({
114
171
  ...this.gridEditItemProps,
115
172
  }}
116
173
  >
117
- {this.controller.editorProvider &&
118
- h(resolveComponent(this.controller.editorProvider.gridEditor), {
119
- class: this.ns.e('editor'),
120
- value: this.fieldValue,
121
- data: this.row.data,
122
- controller: this.controller.editor,
123
- overflowMode: this.controller.treeGrid.overflowMode,
124
- onChange: this.rowDataChange,
125
- onInfoTextChange: this.onInfoTextChange,
126
- title: this.tooltip,
127
- ...this.editorProps,
128
- })}
174
+ {content}
129
175
  </iBizGridEditItem>
130
176
  );
131
177
  },
@@ -1,13 +1,13 @@
1
1
  import { computed, defineComponent, ref } from 'vue';
2
- import { IUIActionGroupDetail } from '@ibiz/model-core';
3
- import { useNamespace } from '@ibiz-template/vue3-util';
2
+ import { IPanel, IUIActionGroupDetail } from '@ibiz/model-core';
3
+ import { computedAsync, useNamespace } from '@ibiz-template/vue3-util';
4
4
  import {
5
5
  TreeGridExFieldColumnController,
6
6
  TreeGridExRowState,
7
7
  } from '@ibiz-template/runtime';
8
8
  import { isNotNil } from 'ramda';
9
- import './tree-grid-ex-field-column.scss';
10
9
  import { showTitle } from '@ibiz-template/core';
10
+ import './tree-grid-ex-field-column.scss';
11
11
 
12
12
  export const TreeGridExFieldColumn = defineComponent({
13
13
  name: 'IBizTreeGridExFieldColumn',
@@ -53,6 +53,11 @@ export const TreeGridExFieldColumn = defineComponent({
53
53
  codeListText.value = text;
54
54
  };
55
55
 
56
+ const CustomHtml = computedAsync(async () => {
57
+ const html = await nodeColumn.value?.getCustomHtml(props.row);
58
+ return html;
59
+ });
60
+
56
61
  const showText = computed(() => {
57
62
  const nodeColumnC = nodeColumn.value;
58
63
  if (nodeColumnC) {
@@ -129,6 +134,22 @@ export const TreeGridExFieldColumn = defineComponent({
129
134
  await nodeColumn.value?.onActionClick(detail, props.row, event);
130
135
  };
131
136
 
137
+ /**
138
+ * @description 查找视图布局面板
139
+ * @returns {*} {(IPanel | undefined)}
140
+ */
141
+ const findLayoutPanel = (): IPanel | undefined => {
142
+ const { controlRenders = [], id } = nodeColumn.value?.nodeColumn || {};
143
+ return controlRenders.find(
144
+ renderItem =>
145
+ renderItem.renderType === 'LAYOUTPANEL' &&
146
+ ![
147
+ `${id?.toLowerCase()}_tooltip`,
148
+ `${id?.toLowerCase()}_edit_tooltip`,
149
+ ].includes(renderItem.id!),
150
+ )?.layoutPanel;
151
+ };
152
+
132
153
  return {
133
154
  ns,
134
155
  zIndex,
@@ -137,21 +158,40 @@ export const TreeGridExFieldColumn = defineComponent({
137
158
  clickable,
138
159
  nodeColumn,
139
160
  fieldValue,
161
+ CustomHtml,
140
162
  onTextClick,
141
163
  onActionClick,
142
164
  onInfoTextChange,
165
+ findLayoutPanel,
143
166
  };
144
167
  },
145
168
  render() {
146
169
  let content = null;
147
-
170
+ const panel = this.findLayoutPanel();
148
171
  if (this.nodeColumn?.nodeEditItem) {
149
172
  content = (
150
173
  <iBizTreeGridExEditColumn
151
174
  controller={this.nodeColumn}
152
175
  row={this.row}
176
+ panelModel={panel}
177
+ customHtml={this.CustomHtml}
178
+ isCustomCode={this.nodeColumn.isCustomCode}
153
179
  ></iBizTreeGridExEditColumn>
154
180
  );
181
+ } else if (this.nodeColumn?.isCustomCode) {
182
+ content = (
183
+ <span class={this.ns.e('script')} v-html={this.CustomHtml}></span>
184
+ );
185
+ } else if (panel) {
186
+ content = (
187
+ <iBizControlShell
188
+ data={this.row.data}
189
+ modelData={panel}
190
+ class={this.ns.e('panel')}
191
+ context={this.controller.context}
192
+ params={this.controller.params}
193
+ ></iBizControlShell>
194
+ );
155
195
  } else if (this.nodeColumn?.codeList) {
156
196
  content = (
157
197
  <iBizCodeList
@@ -1,6 +1,15 @@
1
1
  /* eslint-disable no-nested-ternary */
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
- import { defineComponent, onMounted, onUnmounted, Ref, ref, watch } from 'vue';
3
+ import {
4
+ defineComponent,
5
+ onActivated,
6
+ onDeactivated,
7
+ onMounted,
8
+ onUnmounted,
9
+ Ref,
10
+ ref,
11
+ watch,
12
+ } from 'vue';
4
13
  import { createUUID } from 'qx-util';
5
14
  import { ITextArea } from '@ibiz/model-core';
6
15
  import {
@@ -27,7 +36,7 @@ export const IBizEmbedAIChat = defineComponent({
27
36
  const ctrl = c.ctrl as EditFormController;
28
37
  const agentMap: Map<string | undefined, IData[]> = new Map();
29
38
  const knowledgeMap: Map<string | undefined, IData[]> = new Map();
30
-
39
+ const projectMap: Map<string | undefined, IData[]> = new Map();
31
40
  // AI聊天框挂载元素
32
41
  const aiChatElementRef: Ref<HTMLElement | null> = ref(null);
33
42
  let mountedFlag: boolean = false;
@@ -164,6 +173,18 @@ export const IBizEmbedAIChat = defineComponent({
164
173
  if (knowledge) knowledgeMap.set(key, knowledge);
165
174
  return knowledge;
166
175
  },
176
+ fetchProject: async (
177
+ ctx: IContext,
178
+ param: IParams,
179
+ other: IParams,
180
+ ) => {
181
+ const key = JSON.stringify(other);
182
+ let projects = projectMap.get(key);
183
+ if (projects?.length) return projects;
184
+ projects = await chatOptions.fetchProject(ctx, param, other);
185
+ if (projects) projectMap.set(key, projects);
186
+ return projects;
187
+ },
167
188
  action: (action: string, message: IData) => {
168
189
  if (action === 'send')
169
190
  ctrl.evt.emit('onFormDetailEvent', {
@@ -221,6 +242,20 @@ export const IBizEmbedAIChat = defineComponent({
221
242
  mountedFlag = false;
222
243
  });
223
244
 
245
+ onDeactivated(() => {
246
+ const chatInstance = c.chatInstance;
247
+ if (chatInstance) {
248
+ chatInstance.onDeactivated();
249
+ }
250
+ });
251
+
252
+ onActivated(() => {
253
+ const chatInstance = c.chatInstance;
254
+ if (chatInstance) {
255
+ chatInstance.onActivated();
256
+ }
257
+ });
258
+
224
259
  return {
225
260
  c,
226
261
  ns,
@@ -189,7 +189,8 @@ $markdown-footer-button: (
189
189
  border-top: 1px solid getCssVar(markdown, border-color);
190
190
  }
191
191
 
192
- .cherry-previewer{
192
+ .cherry-previewer {
193
+ min-height: 58px;
193
194
  border-top: 1px solid getCssVar(markdown, border-color);
194
195
 
195
196
  // 调整预览区图片鼠标移入样式
@@ -52,6 +52,7 @@ import './input.scss';
52
52
  * @editorparams {"name":"srfaichunkview","parameterType":"string", "description":"知识切片视图,用于定义AI交谈打开目标知识切片视图"}
53
53
  * @editorparams {"name":"srfaichunkentity","parameterType":"string", "description":"知识切片实体,用于定义AI交谈打开知识切片视图数据主键key"}
54
54
  * @editorparams {"name":"srfaichatcaption","parameterType":"string", "description":"自定义AI交谈框标题"}
55
+ * @editorparams {"name":"showpassword","parameterType":"boolean", "description":"密码框是否显示切换密码图标"}
55
56
  * @ignoreprops overflowMode
56
57
  * @ignoreemits infoTextChange
57
58
  */
@@ -164,6 +165,13 @@ export const IBizInput = defineComponent({
164
165
  }
165
166
  });
166
167
 
168
+ const showPassword = computed(() => {
169
+ if (c.editorParams.showpassword) {
170
+ return c.toBoolean(c.editorParams.showpassword);
171
+ }
172
+ return type.value === 'password';
173
+ });
174
+
167
175
  // 是否显示表单默认内容
168
176
  const showFormDefaultContent = computed(() => {
169
177
  if (
@@ -436,6 +444,7 @@ export const IBizInput = defineComponent({
436
444
  isAuto,
437
445
  editorRef,
438
446
  showLimit,
447
+ showPassword,
439
448
  childClass,
440
449
  childStyle,
441
450
  isEditable,
@@ -520,7 +529,7 @@ export const IBizInput = defineComponent({
520
529
  class={[this.ns.b('input'), this.semanticClass('editor.content')]}
521
530
  disabled={this.disabled}
522
531
  style={this.semanticStyle('editor.content')}
523
- show-password={this.type === 'password'}
532
+ show-password={this.showPassword}
524
533
  autocomplete={this.shouldAutoComplete}
525
534
  v-child-class={this.childClass}
526
535
  v-child-style={this.childStyle}