@ibiz-template/vue3-components 0.7.41-alpha.94 → 0.7.41-alpha.96

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 (83) hide show
  1. package/dist/ibiz-markdown-editor-CQRvKzXG.js +1 -0
  2. package/dist/index-CSWh3Soj.js +339 -0
  3. package/dist/index-ChKlnzfZ.js +1 -0
  4. package/dist/index-DiSn0c6_.js +1 -0
  5. package/dist/{index.es-DFx4k2jd.js → index.es-COHR8lWq.js} +1 -1
  6. package/dist/index.min.css +1 -1
  7. package/dist/index.system.min.js +1 -1
  8. package/dist/wang-editor-DGTnSGqn.js +1 -0
  9. package/dist/{xlsx-util-DwFMdVBD.js → xlsx-util-CzrO72Os.js} +1 -1
  10. package/es/common/emoji-select/components/categories/categories.mjs +1 -1
  11. package/es/common/rawitem/rawitem.mjs +1 -0
  12. package/es/control/dashboard/dashboard-design/dashboard-design.mjs +9 -2
  13. package/es/control/data-view/data-view.mjs +98 -2
  14. package/es/control/kanban/swimlane-kanban/swimlane-kanban.mjs +1 -1
  15. package/es/control/list/list.css +1 -1
  16. package/es/control/list/list.mjs +77 -2
  17. package/es/editor/ai-chat/embed-ai-chat/embed-ai-chat.css +1 -0
  18. package/es/editor/ai-chat/embed-ai-chat/embed-ai-chat.mjs +98 -0
  19. package/es/editor/ai-chat/embed-ai-chat-editor.controller.mjs +70 -0
  20. package/es/editor/ai-chat/embed-ai-chat-editor.provider.mjs +22 -0
  21. package/es/editor/ai-chat/index.mjs +5 -0
  22. package/es/editor/code/code-editor.controller.mjs +3 -3
  23. package/es/editor/code/monaco-editor/monaco-editor.mjs +1 -1
  24. package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.mjs +1 -1
  25. package/es/editor/dropdown-list/ibiz-virtualized-list/ibiz-virtualized-list.mjs +1 -1
  26. package/es/editor/html/wang-editor/wang-editor.mjs +5 -1
  27. package/es/editor/index.mjs +8 -0
  28. package/es/editor/markdown/ibiz-markdown-editor/custom-menu.mjs +7 -1
  29. package/es/editor/text-box/input/input.mjs +5 -1
  30. package/es/index.mjs +1 -0
  31. package/es/locale/en/index.mjs +2 -1
  32. package/es/locale/zh-CN/index.mjs +2 -1
  33. package/es/panel-component/user-message/user-message.mjs +2 -3
  34. package/es/util/ai-chat-util/ai-chat-util.mjs +34 -1
  35. package/es/util/app-util/app-util.mjs +21 -25
  36. package/es/view/login-view/login-view.mjs +7 -11
  37. package/es/view-engine/login-view.engine.mjs +12 -21
  38. package/es/view-engine/pickup-tree-view.engine.mjs +17 -1
  39. package/es/web-app/guard/auth-guard/auth-guard.mjs +5 -9
  40. package/es/web-app/index.mjs +2 -0
  41. package/es/web-app/main.mjs +3 -1
  42. package/es/web-app/util/app-func-block-provider/app-func-block-provider.mjs +98 -0
  43. package/es/web-app/util/index.mjs +1 -0
  44. package/lib/common/emoji-select/components/categories/categories.cjs +1 -1
  45. package/lib/common/rawitem/rawitem.cjs +1 -0
  46. package/lib/control/dashboard/dashboard-design/dashboard-design.cjs +9 -2
  47. package/lib/control/data-view/data-view.cjs +97 -1
  48. package/lib/control/kanban/swimlane-kanban/swimlane-kanban.cjs +1 -1
  49. package/lib/control/list/list.cjs +77 -2
  50. package/lib/control/list/list.css +1 -1
  51. package/lib/editor/ai-chat/embed-ai-chat/embed-ai-chat.cjs +100 -0
  52. package/lib/editor/ai-chat/embed-ai-chat/embed-ai-chat.css +1 -0
  53. package/lib/editor/ai-chat/embed-ai-chat-editor.controller.cjs +72 -0
  54. package/lib/editor/ai-chat/embed-ai-chat-editor.provider.cjs +24 -0
  55. package/lib/editor/ai-chat/index.cjs +11 -0
  56. package/lib/editor/code/code-editor.controller.cjs +3 -3
  57. package/lib/editor/code/monaco-editor/monaco-editor.cjs +1 -1
  58. package/lib/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.cjs +1 -1
  59. package/lib/editor/dropdown-list/ibiz-virtualized-list/ibiz-virtualized-list.cjs +1 -1
  60. package/lib/editor/html/wang-editor/wang-editor.cjs +5 -1
  61. package/lib/editor/index.cjs +8 -0
  62. package/lib/editor/markdown/ibiz-markdown-editor/custom-menu.cjs +7 -1
  63. package/lib/editor/text-box/input/input.cjs +5 -1
  64. package/lib/index.cjs +2 -0
  65. package/lib/locale/en/index.cjs +2 -1
  66. package/lib/locale/zh-CN/index.cjs +2 -1
  67. package/lib/panel-component/user-message/user-message.cjs +2 -3
  68. package/lib/util/ai-chat-util/ai-chat-util.cjs +33 -0
  69. package/lib/util/app-util/app-util.cjs +20 -24
  70. package/lib/view/login-view/login-view.cjs +7 -11
  71. package/lib/view-engine/login-view.engine.cjs +11 -20
  72. package/lib/view-engine/pickup-tree-view.engine.cjs +17 -1
  73. package/lib/web-app/guard/auth-guard/auth-guard.cjs +5 -9
  74. package/lib/web-app/index.cjs +3 -0
  75. package/lib/web-app/main.cjs +2 -0
  76. package/lib/web-app/util/app-func-block-provider/app-func-block-provider.cjs +100 -0
  77. package/lib/web-app/util/index.cjs +2 -0
  78. package/package.json +6 -6
  79. package/dist/ibiz-markdown-editor-8I67TTyP.js +0 -1
  80. package/dist/index-CVIuun-0.js +0 -339
  81. package/dist/index-DWSyHHzh.js +0 -1
  82. package/dist/index-X0zcJbo7.js +0 -1
  83. package/dist/wang-editor-DYEAyKoh.js +0 -1
@@ -39,7 +39,7 @@ const Categories = /* @__PURE__ */ defineComponent({
39
39
  "onClick": () => this.onSelect(category)
40
40
  }, [createVNode("span", {
41
41
  "class": this.ns.em("category", "svg"),
42
- "title": showTitle(category.label),
42
+ "title": showTitle(category.text),
43
43
  "innerHTML": category.icon
44
44
  }, null)]);
45
45
  })]);
@@ -127,6 +127,7 @@ const IBizRawItem = /* @__PURE__ */ defineComponent({
127
127
  if (["TEXT", "HEADING1", "HEADING2", "HEADING3", "HEADING4", "HEADING5", "HEADING6", "PARAGRAPH", "HTML", "RAW"].includes(rawItemType.value)) {
128
128
  rawItemText.value = rawItemContent.value;
129
129
  if (typeof rawItemText.value === "string") {
130
+ rawItemText.value = ibiz.appUtil.resolveI18nText(rawItemText.value);
130
131
  const val = rawItemText.value;
131
132
  rawItemText.value = val.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;nbsp;/g, " ").replace(/&nbsp;/g, " ");
132
133
  }
@@ -133,7 +133,7 @@ const DashboardDesign = /* @__PURE__ */ defineComponent({
133
133
  const categoryTag = props.dashboard.controlParams.categorytag;
134
134
  const portletNameTag = props.dashboard.controlParams.portletnametag;
135
135
  app.model.appPortlets.forEach((portlet) => {
136
- var _a, _b;
136
+ var _a, _b, _c;
137
137
  if (!isDEView && !portlet.enableAppDashboard) {
138
138
  return;
139
139
  }
@@ -160,13 +160,20 @@ const DashboardDesign = /* @__PURE__ */ defineComponent({
160
160
  return;
161
161
  }
162
162
  }
163
+ let groupName = (portletCat == null ? void 0 : portletCat.name) || "";
164
+ if (portletCat == null ? void 0 : portletCat.ungroup) {
165
+ groupName = ibiz.i18n.t("control.dashboard.dashboardDesign.unGroup");
166
+ }
167
+ if ((_c = portletCat == null ? void 0 : portletCat.nameLanguageRes) == null ? void 0 : _c.lanResTag) {
168
+ groupName = ibiz.i18n.t(portletCat.nameLanguageRes.lanResTag, groupName);
169
+ }
163
170
  const temp = {
164
171
  type: "app",
165
172
  portletCodeName: portlet.codeName,
166
173
  portletName: portlet.name,
167
174
  portletImage: portlet.control.sysImage,
168
175
  groupCodeName: (portletCat == null ? void 0 : portletCat.codeName) || "",
169
- groupName: (portletCat == null ? void 0 : portletCat.name) || "",
176
+ groupName,
170
177
  appCodeName: portlet.appDataEntityId || app.model.pkgcodeName,
171
178
  appName: app.model.name
172
179
  };
@@ -1,4 +1,4 @@
1
- import { isVNode, defineComponent, createVNode, resolveComponent, computed, ref, watch, withDirectives, resolveDirective, h } from 'vue';
1
+ import { isVNode, defineComponent, createVNode, resolveComponent, computed, ref, watch, withDirectives, resolveDirective, Fragment, h } from 'vue';
2
2
  import { useControlController, useNamespace, useControlPopoverzIndex, hasEmptyPanelRenderer, IBizCustomRender } from '@ibiz-template/vue3-util';
3
3
  import { DataViewControlController, ControlVO, getControl } from '@ibiz-template/runtime';
4
4
  import { createUUID } from 'qx-util';
@@ -524,6 +524,102 @@ const DataViewControl = /* @__PURE__ */ defineComponent({
524
524
  }
525
525
  return icon;
526
526
  };
527
+ const ITEM_HEIGHT = 30;
528
+ const calcSkeletonRows = () => {
529
+ const {
530
+ cardHeight
531
+ } = c.model;
532
+ if (cardHeight) {
533
+ return Math.max(1, Math.floor(cardHeight / ITEM_HEIGHT));
534
+ }
535
+ return 2;
536
+ };
537
+ const renderSkeletonItem = () => {
538
+ const rows = calcSkeletonRows();
539
+ return createVNode(resolveComponent("el-card"), {
540
+ "class": [ns.b("item"), ns.e("skeleton-item")],
541
+ "body-style": {
542
+ width: c.model.cardWidth ? "".concat(c.model.cardWidth, "px") : "auto",
543
+ height: c.model.cardHeight ? "".concat(c.model.cardHeight, "px") : "auto",
544
+ overflow: "hidden"
545
+ }
546
+ }, {
547
+ default: () => [createVNode(resolveComponent("el-skeleton"), {
548
+ "animated": true,
549
+ "style": "min-width: 30px;"
550
+ }, {
551
+ template: () => createVNode(Fragment, null, [Array.from({
552
+ length: rows
553
+ }, () => createVNode(resolveComponent("el-skeleton-item"), {
554
+ "variant": "rect"
555
+ }, null))])
556
+ })]
557
+ });
558
+ };
559
+ const renderSkeletonCardLayout = (count) => {
560
+ const {
561
+ cardColXS,
562
+ cardColSM,
563
+ cardColMD,
564
+ cardColLG
565
+ } = c.model;
566
+ if (cardColXS || cardColSM || cardColMD || cardColLG) {
567
+ return createVNode("div", {
568
+ "class": ["el-row", ns.e("layout-row")]
569
+ }, [Array.from({
570
+ length: count
571
+ }, () => createVNode(resolveComponent("el-col"), {
572
+ "xs": cardColXS,
573
+ "sm": cardColSM,
574
+ "md": cardColMD,
575
+ "lg": cardColLG,
576
+ "class": ns.e("layout-col")
577
+ }, {
578
+ default: () => [createVNode("div", {
579
+ "class": ns.b("scroll-item")
580
+ }, [renderSkeletonItem()])]
581
+ }))]);
582
+ }
583
+ return createVNode("div", {
584
+ "class": ns.e("layout-flex")
585
+ }, [Array.from({
586
+ length: count
587
+ }, () => createVNode("div", {
588
+ "class": ns.b("scroll-item")
589
+ }, [renderSkeletonItem()]))]);
590
+ };
591
+ const renderGroupSkeleton = () => {
592
+ return createVNode("div", {
593
+ "class": ns.b("skeleton")
594
+ }, [Array.from({
595
+ length: 3
596
+ }, () => createVNode("div", {
597
+ "class": ns.b("skeleton-group")
598
+ }, [createVNode("div", {
599
+ "class": ns.be("skeleton-group", "header")
600
+ }, [createVNode(resolveComponent("el-skeleton"), {
601
+ "animated": true,
602
+ "rows": 1
603
+ }, {
604
+ template: () => createVNode(resolveComponent("el-skeleton-item"), {
605
+ "variant": "rect",
606
+ "style": "width: 15%"
607
+ }, null)
608
+ })]), createVNode("div", {
609
+ "class": [ns.be("skeleton", "content"), ns.be("skeleton-group", "content")]
610
+ }, [renderSkeletonCardLayout(3)])]))]);
611
+ };
612
+ const renderSkeleton = () => {
613
+ if (c.state.enableGroup) {
614
+ return renderGroupSkeleton();
615
+ }
616
+ const count = c.state.size || 6;
617
+ return createVNode("div", {
618
+ "class": ns.b("skeleton")
619
+ }, [createVNode("div", {
620
+ "class": ns.be("skeleton", "content")
621
+ }, [renderSkeletonCardLayout(Math.min(count, 20))])]);
622
+ };
527
623
  const renderNavIcon = () => {
528
624
  const {
529
625
  enableNavView,
@@ -556,7 +652,7 @@ const DataViewControl = /* @__PURE__ */ defineComponent({
556
652
  }, null);
557
653
  };
558
654
  const renderContent = () => {
559
- return [c.state.items.length > 0 ? renderHasData() : renderNoData(), renderBatchToolBar(), renderNavIcon(), renderCollapseExpandIcon()];
655
+ return [!c.state.isLoaded ? renderSkeleton() : c.state.items.length > 0 ? renderHasData() : renderNoData(), renderBatchToolBar(), renderNavIcon(), renderCollapseExpandIcon()];
560
656
  };
561
657
  const renderPagingBar = () => {
562
658
  if (c.state.enablePagingBar && c.model.pagingMode === 1)
@@ -433,7 +433,7 @@ const SwimlaneKanban = /* @__PURE__ */ defineComponent({
433
433
  "class": ns.em("cell", "right")
434
434
  }, [createVNode("span", {
435
435
  "class": ns.em("cell", "description")
436
- }, ["".concat(lane.count, " \u4E2A").concat(c.laneDescription)])])])]), c.state.groups.map((group) => {
436
+ }, ["".concat(lane.count, " ").concat(ibiz.i18n.t("app.piece")).concat(c.laneDescription)])])])]), c.state.groups.map((group) => {
437
437
  if (group.hidden)
438
438
  return void 0;
439
439
  return renderBodyCell(index, lane, group);
@@ -1 +1 @@
1
- .ibiz-control-list-item{flex-grow:1;min-height:var(--ibiz-control-list-item-height);padding:var(--ibiz-control-list-padding);font-weight:var(--ibiz-control-list-font-weight);color:var(--ibiz-control-list-text-color);cursor:pointer;background-color:var(--ibiz-control-list-item-bg-color)}.ibiz-control-list-item__right{padding:0 var(--ibiz-spacing-extra-tight)}.ibiz-control-list-item__right--actions{display:flex;-moz-column-gap:var(--ibiz-spacing-extra-tight);column-gap:var(--ibiz-spacing-extra-tight);justify-content:center}.ibiz-control-list-item__right--actions .ibiz-action-toolbar__item{margin:0}.ibiz-control-list-item__right--actions .ibiz-action-toolbar__item--label.is-has-caption{margin:0}.ibiz-control-list-item:has(.ibiz-control-list-item__right){display:flex;justify-content:space-between}.ibiz-control-list-item:has(.ibiz-control-list-item__right) .ibiz-control-list-item__caption{flex:1}.ibiz-control-list-item__new{display:flex;align-items:center;justify-content:center;margin-top:var(--ibiz-spacing-tight);color:var(--ibiz-color-text-3);border:2px dashed var(--ibiz-color-border)}.ibiz-control-list{--ibiz-control-list-text-color:var(--ibiz-color-text-0);--ibiz-control-list-load-more-color:var(--ibiz-color-text-2);--ibiz-control-list-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-list-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-list-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-list-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight);--ibiz-control-list-item-bg-color:unset;display:flex;flex-flow:column nowrap;align-items:stretch;justify-content:flex-start;position:relative;height:100%}.ibiz-control-list__drag-icon{cursor:move;visibility:hidden}.ibiz-control-list__nav-icon{position:absolute;top:18px;right:10px;color:var(--ibiz-color-primary);cursor:pointer}.ibiz-control-list__load-more{text-align:center}.ibiz-control-list__load-more i{font-size:var(--ibiz-font-size-header-3);color:var(--ibiz-control-list-load-more-color);cursor:pointer}.ibiz-control-list__load-more i:hover{color:var(--ibiz-color-primary-light-hover)}.ibiz-control-list__collapse-expand-icon{width:calc(100% - var(--ibiz-spacing-base-tight));text-align:center}.ibiz-control-list__collapse-expand-icon i{font-size:var(--ibiz-font-size-header-3);color:var(--ibiz-color-text-2);cursor:pointer}.ibiz-control-list__collapse-expand-icon i:hover{color:var(--ibiz-color-primary-light-hover)}.ibiz-control-list__load-more-button{padding:var(--ibiz-control-list-padding);text-align:center}.ibiz-control-list__quicktoolbar{display:flex;justify-content:center;width:100%}.ibiz-control-list__batchtoolbar{display:none;margin:var(--ibiz-spacing-tight) 0}.ibiz-control-list__batchtoolbar.is-show{display:block}.ibiz-control-list .ibiz-control-list-content{flex-grow:1}.ibiz-control-list-content.is-show-underLine .ibiz-control-list-scroll-item{border-bottom:1px solid var(--ibiz-color-border)}.ibiz-control-list-content .ibiz-row-detail:last-of-type .ibiz-control-list-scroll-item{border-bottom:none}.ibiz-control-list-scroll{height:100%;overflow:auto}.ibiz-control-list-scroll.is-reverse-scroll .ibiz-control-list__layout-flex{display:flex;flex-direction:column-reverse}.ibiz-control-list-group-content__item-header{display:flex;align-items:center;justify-content:space-between;width:100%}.ibiz-control-list-scroll-item{display:flex;align-items:center}.ibiz-control-list-scroll-item__checkbox{flex-shrink:0;margin-left:var(--ibiz-spacing-tight)}.ibiz-control-list-scroll-item__icon{flex-shrink:0;margin-left:var(--ibiz-spacing-tight);color:var(--ibiz-color-text-2);cursor:pointer}.ibiz-control-list-scroll-item:hover{background-color:var(--ibiz-control-list-hover-bg-color)}.ibiz-control-list-scroll-item:hover .ibiz-control-list__drag-icon{visibility:visible}.ibiz-control-list-scroll-item.is-active{background-color:var(--ibiz-control-list-active-bg-color)}.ibiz-control-list-group-style2{--ibiz-control-list-group-style2-color:var(--ibiz-color-disabled-text)}.ibiz-control-list-group-style2__header{display:flex;align-items:center;justify-content:center;width:100%}.ibiz-control-list-group-style2__header--title{padding:0 var(--ibiz-spacing-tight);font-size:var(--ibiz-font-size-regular);color:var(--ibiz-control-list-group-style2-color)}.ibiz-control-list-group-style2__header::after,.ibiz-control-list-group-style2__header::before{display:block;flex:1;height:1px;margin-top:1px;content:"";border-top:1px var(--ibiz-color-border) solid;transform:translateY(-50%)}
1
+ .ibiz-control-list-item{flex-grow:1;min-height:var(--ibiz-control-list-item-height);padding:var(--ibiz-control-list-padding);font-weight:var(--ibiz-control-list-font-weight);color:var(--ibiz-control-list-text-color);cursor:pointer;background-color:var(--ibiz-control-list-item-bg-color)}.ibiz-control-list-item__right{padding:0 var(--ibiz-spacing-extra-tight)}.ibiz-control-list-item__right--actions{display:flex;-moz-column-gap:var(--ibiz-spacing-extra-tight);column-gap:var(--ibiz-spacing-extra-tight);justify-content:center}.ibiz-control-list-item__right--actions .ibiz-action-toolbar__item{margin:0}.ibiz-control-list-item__right--actions .ibiz-action-toolbar__item--label.is-has-caption{margin:0}.ibiz-control-list-item:has(.ibiz-control-list-item__right){display:flex;justify-content:space-between}.ibiz-control-list-item:has(.ibiz-control-list-item__right) .ibiz-control-list-item__caption{flex:1}.ibiz-control-list-item__new{display:flex;align-items:center;justify-content:center;margin-top:var(--ibiz-spacing-tight);color:var(--ibiz-color-text-3);border:2px dashed var(--ibiz-color-border)}.ibiz-control-list{--ibiz-control-list-text-color:var(--ibiz-color-text-0);--ibiz-control-list-load-more-color:var(--ibiz-color-text-2);--ibiz-control-list-hover-bg-color:var(--ibiz-color-fill-1);--ibiz-control-list-active-bg-color:var(--ibiz-color-fill-2);--ibiz-control-list-font-weight:var(--ibiz-font-weight-regular);--ibiz-control-list-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-tight);--ibiz-control-list-item-bg-color:unset;display:flex;flex-flow:column nowrap;align-items:stretch;justify-content:flex-start;position:relative;height:100%}.ibiz-control-list__drag-icon{cursor:move;visibility:hidden}.ibiz-control-list__nav-icon{position:absolute;top:18px;right:10px;color:var(--ibiz-color-primary);cursor:pointer}.ibiz-control-list__load-more{text-align:center}.ibiz-control-list__load-more i{font-size:var(--ibiz-font-size-header-3);color:var(--ibiz-control-list-load-more-color);cursor:pointer}.ibiz-control-list__load-more i:hover{color:var(--ibiz-color-primary-light-hover)}.ibiz-control-list__collapse-expand-icon{width:calc(100% - var(--ibiz-spacing-base-tight));text-align:center}.ibiz-control-list__collapse-expand-icon i{font-size:var(--ibiz-font-size-header-3);color:var(--ibiz-color-text-2);cursor:pointer}.ibiz-control-list__collapse-expand-icon i:hover{color:var(--ibiz-color-primary-light-hover)}.ibiz-control-list__load-more-button{padding:var(--ibiz-control-list-padding);text-align:center}.ibiz-control-list__quicktoolbar{display:flex;justify-content:center;width:100%}.ibiz-control-list__batchtoolbar{display:none;margin:var(--ibiz-spacing-tight) 0}.ibiz-control-list__batchtoolbar.is-show{display:block}.ibiz-control-list .ibiz-control-list-content{flex-grow:1}.ibiz-control-list-content.is-show-underLine .ibiz-control-list-scroll-item{border-bottom:1px solid var(--ibiz-color-border)}.ibiz-control-list-content .ibiz-row-detail:last-of-type .ibiz-control-list-scroll-item{border-bottom:none}.ibiz-control-list-scroll{height:100%;overflow:auto}.ibiz-control-list-scroll.is-reverse-scroll .ibiz-control-list__layout-flex{display:flex;flex-direction:column-reverse}.ibiz-control-list-group-content__item-header{display:flex;align-items:center;justify-content:space-between;width:100%}.ibiz-control-list-scroll-item{display:flex;align-items:center}.ibiz-control-list-scroll-item__checkbox{flex-shrink:0;margin-left:var(--ibiz-spacing-tight)}.ibiz-control-list-scroll-item__icon{flex-shrink:0;margin-left:var(--ibiz-spacing-tight);color:var(--ibiz-color-text-2);cursor:pointer}.ibiz-control-list-scroll-item:hover{background-color:var(--ibiz-control-list-hover-bg-color)}.ibiz-control-list-scroll-item:hover .ibiz-control-list__drag-icon{visibility:visible}.ibiz-control-list-scroll-item.is-active{background-color:var(--ibiz-control-list-active-bg-color)}.ibiz-control-list-group-style2{--ibiz-control-list-group-style2-color:var(--ibiz-color-disabled-text)}.ibiz-control-list-group-style2__header{display:flex;align-items:center;justify-content:center;width:100%}.ibiz-control-list-group-style2__header--title{padding:0 var(--ibiz-spacing-tight);font-size:var(--ibiz-font-size-regular);color:var(--ibiz-control-list-group-style2-color)}.ibiz-control-list-group-style2__header::after,.ibiz-control-list-group-style2__header::before{display:block;flex:1;height:1px;margin-top:1px;content:"";border-top:1px var(--ibiz-color-border) solid;transform:translateY(-50%)}.ibiz-control-list-skeleton-item{padding-bottom:var(--ibiz-spacing-tight)}.ibiz-control-list-skeleton-group__header{margin-bottom:var(--ibiz-spacing-base)}.ibiz-control-list-skeleton-group-style2__header{display:flex;justify-content:center}
@@ -525,6 +525,80 @@ const ListControl = /* @__PURE__ */ defineComponent({
525
525
  }
526
526
  return null;
527
527
  };
528
+ const renderSkeletonItem = () => {
529
+ return createVNode("div", {
530
+ "class": ns.b("skeleton-item")
531
+ }, [createVNode(resolveComponent("el-skeleton"), {
532
+ "animated": true,
533
+ "rows": 1
534
+ }, {
535
+ template: () => createVNode(resolveComponent("el-skeleton-item"), {
536
+ "variant": "rect"
537
+ }, null)
538
+ })]);
539
+ };
540
+ const renderGroupSkeleton = () => {
541
+ return createVNode("div", {
542
+ "class": ns.b("skeleton")
543
+ }, [Array.from({
544
+ length: 3
545
+ }, () => createVNode("div", {
546
+ "class": ns.b("skeleton-group")
547
+ }, [createVNode("div", {
548
+ "class": ns.be("skeleton-group", "header")
549
+ }, [createVNode(resolveComponent("el-skeleton"), {
550
+ "animated": true,
551
+ "rows": 1
552
+ }, {
553
+ template: () => createVNode(resolveComponent("el-skeleton-item"), {
554
+ "variant": "rect",
555
+ "style": "width: 15%"
556
+ }, null)
557
+ })]), createVNode("div", {
558
+ "class": [ns.be("skeleton", "content"), ns.be("skeleton-group", "content")]
559
+ }, [Array.from({
560
+ length: 3
561
+ }, () => renderSkeletonItem())])]))]);
562
+ };
563
+ const renderGroupStyle2Skeleton = () => {
564
+ return createVNode("div", {
565
+ "class": ns.b("skeleton")
566
+ }, [Array.from({
567
+ length: 3
568
+ }, () => createVNode("div", {
569
+ "class": [ns.b("skeleton-group"), ns.b("skeleton-group-style2")]
570
+ }, [createVNode("div", {
571
+ "class": [ns.be("skeleton-group", "header"), ns.be("skeleton-group-style2", "header")]
572
+ }, [createVNode(resolveComponent("el-skeleton"), {
573
+ "animated": true,
574
+ "rows": 1,
575
+ "style": "width: 15%"
576
+ }, {
577
+ template: () => createVNode(resolveComponent("el-skeleton-item"), {
578
+ "variant": "rect"
579
+ }, null)
580
+ })]), createVNode("div", {
581
+ "class": [ns.be("skeleton", "content"), ns.be("skeleton-group", "content"), ns.be("skeleton-group-style2", "content")]
582
+ }, [Array.from({
583
+ length: 3
584
+ }, () => renderSkeletonItem())])]))]);
585
+ };
586
+ const renderSkeleton = () => {
587
+ if (c.state.enableGroup && !c.state.isSimple) {
588
+ if (c.model.groupStyle === "STYLE2") {
589
+ return renderGroupStyle2Skeleton();
590
+ }
591
+ return renderGroupSkeleton();
592
+ }
593
+ const count = c.state.size || 6;
594
+ return createVNode("div", {
595
+ "class": ns.b("skeleton")
596
+ }, [createVNode("div", {
597
+ "class": ns.be("skeleton", "content")
598
+ }, [Array.from({
599
+ length: Math.min(count, 20)
600
+ }, () => renderSkeletonItem())])]);
601
+ };
528
602
  return {
529
603
  c,
530
604
  ns,
@@ -536,13 +610,14 @@ const ListControl = /* @__PURE__ */ defineComponent({
536
610
  onPageSizeChange,
537
611
  renderListContent,
538
612
  renderBatchToolBar,
539
- renderCollapseExpandIcon
613
+ renderCollapseExpandIcon,
614
+ renderSkeleton
540
615
  };
541
616
  },
542
617
  render() {
543
618
  let content = null;
544
619
  if (this.c.state.isCreated) {
545
- content = [this.c.state.items.length > 0 ? this.renderListContent() : this.renderNoData(), this.renderBatchToolBar(), this.c.state.enablePagingBar && this.c.model.pagingMode === 1 ? createVNode(resolveComponent("iBizPagination"), {
620
+ content = [!this.c.state.isLoaded ? this.renderSkeleton() : this.c.state.items.length > 0 ? this.renderListContent() : this.renderNoData(), this.renderBatchToolBar(), this.c.state.enablePagingBar && this.c.model.pagingMode === 1 ? createVNode(resolveComponent("iBizPagination"), {
546
621
  "mode": this.c.paginationMode,
547
622
  "class": this.ns.e("pagination"),
548
623
  "total": this.c.state.total,
@@ -0,0 +1 @@
1
+ .ibiz-embed-ai-chat{width:100%;height:100%}.ibiz-embed-ai-chat__container{width:100%;height:100%}
@@ -0,0 +1,98 @@
1
+ import { defineComponent, createVNode, ref, onMounted, onUnmounted } from 'vue';
2
+ import { createUUID } from 'qx-util';
3
+ import { useNamespace, getEditorEmits, getInputProps } from '@ibiz-template/vue3-util';
4
+ import './embed-ai-chat.css';
5
+
6
+ "use strict";
7
+ const IBizEmbedAIChat = /* @__PURE__ */ defineComponent({
8
+ name: "IBizEmbedAIChat",
9
+ props: getInputProps(),
10
+ emits: getEditorEmits(),
11
+ setup(props) {
12
+ const ns = useNamespace("embed-ai-chat");
13
+ const c = props.controller;
14
+ const aiChatElementRef = ref(null);
15
+ const mountedAIChat = async () => {
16
+ var _a, _b;
17
+ const appDataEntityId = c.model.appDataEntityId;
18
+ const chatInstance = c.chatInstance;
19
+ if (!appDataEntityId || !c.deACMode || !chatInstance)
20
+ return;
21
+ const topicId = createUUID();
22
+ const sessionid = ibiz.aiChatUtil.getChatSessionId("TOPIC", topicId);
23
+ const tempParams = {
24
+ ...c.params,
25
+ ...{
26
+ srfactag: c.deACMode.codeName
27
+ }
28
+ };
29
+ const {
30
+ topicOptions,
31
+ chatOptions
32
+ } = await ibiz.aiChatUtil.getEditorExAIChatParams(c.editorParams, c.context, c.params, props.data, c.deACMode, {
33
+ chatInstance,
34
+ view: c.view,
35
+ ctrl: c.ctrl
36
+ });
37
+ const resourceOptions = await ibiz.aiChatUtil.getAIResourceOptions(c.context, c.params);
38
+ let topicCaption = "[".concat(c.deACMode.logicName, "]").concat(((_a = props.data) == null ? void 0 : _a.srfmajortext) || "");
39
+ if (c.editorParams.srfaitopiccaption) {
40
+ topicCaption = "[".concat(ibiz.appUtil.resolveI18nText(c.editorParams.srfaitopiccaption), "]").concat(((_b = props.data) == null ? void 0 : _b.srfmajortext) || "");
41
+ }
42
+ let chatCaption = c.deACMode.logicName;
43
+ if (c.editorParams.srfaichatcaption) {
44
+ chatCaption = ibiz.appUtil.resolveI18nText(c.editorParams.srfaichatcaption);
45
+ }
46
+ chatInstance.create({
47
+ mode: "TOPIC",
48
+ resourceOptions,
49
+ containerOptions: {
50
+ container: aiChatElementRef.value
51
+ },
52
+ topicOptions: {
53
+ appid: ibiz.env.appId,
54
+ id: topicId,
55
+ caption: topicCaption,
56
+ url: window.location.hash.substring(1),
57
+ type: c.context.srftopicpath || "default",
58
+ ...topicOptions
59
+ },
60
+ chatOptions: {
61
+ caption: chatCaption,
62
+ context: {
63
+ ...c.context
64
+ },
65
+ params: tempParams,
66
+ appDataEntityId,
67
+ // 扩展参数
68
+ ...chatOptions,
69
+ sessionid
70
+ }
71
+ });
72
+ };
73
+ onMounted(() => {
74
+ mountedAIChat();
75
+ });
76
+ onUnmounted(() => {
77
+ const chatInstance = c.chatInstance;
78
+ if (chatInstance) {
79
+ chatInstance.close();
80
+ }
81
+ });
82
+ return {
83
+ c,
84
+ ns,
85
+ aiChatElementRef
86
+ };
87
+ },
88
+ render() {
89
+ return createVNode("div", {
90
+ "class": this.ns.b()
91
+ }, [createVNode("div", {
92
+ "class": this.ns.e("container"),
93
+ "ref": "aiChatElementRef"
94
+ }, null)]);
95
+ }
96
+ });
97
+
98
+ export { IBizEmbedAIChat };
@@ -0,0 +1,70 @@
1
+ import { EditorController, getDeACMode } from '@ibiz-template/runtime';
2
+
3
+ "use strict";
4
+ var __defProp = Object.defineProperty;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __publicField = (obj, key, value) => {
7
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
+ return value;
9
+ };
10
+ class EmbedAIChatEditorController extends EditorController {
11
+ constructor() {
12
+ super(...arguments);
13
+ /**
14
+ * @description 聊天框实例
15
+ * @author tony001
16
+ * @date 2026-05-15 15:05:37
17
+ * @type {*}
18
+ * @memberof EmbedAIChatEditorController
19
+ */
20
+ __publicField(this, "chatInstance");
21
+ /**
22
+ * @description 应用实体服务
23
+ * @author tony001
24
+ * @date 2026-05-15 16:05:22
25
+ * @type {IAppDEService}
26
+ * @memberof EmbedAIChatEditorController
27
+ */
28
+ __publicField(this, "deService");
29
+ /**
30
+ * @description 自填模式
31
+ * @author tony001
32
+ * @date 2026-05-15 16:05:30
33
+ * @type {IAppDEACMode}
34
+ * @memberof EmbedAIChatEditorController
35
+ */
36
+ __publicField(this, "deACMode");
37
+ }
38
+ /**
39
+ * @description 初始化
40
+ * @author tony001
41
+ * @date 2026-05-15 16:05:12
42
+ * @protected
43
+ * @returns {*} {Promise<void>}
44
+ * @memberof EmbedAIChatEditorController
45
+ */
46
+ async onInit() {
47
+ await super.onInit();
48
+ const model = this.model;
49
+ if (model.appDEACModeId) {
50
+ this.deACMode = await getDeACMode(
51
+ model.appDEACModeId,
52
+ model.appDataEntityId,
53
+ this.context.srfappid
54
+ );
55
+ if (this.deACMode) {
56
+ if (this.deACMode.actype === "CHATCOMPLETION" && ibiz.env.enableAI) {
57
+ this.deService = await ibiz.hub.getApp(model.appId).deService.getService(this.context, model.appDataEntityId);
58
+ }
59
+ }
60
+ }
61
+ const module = await import('@ibiz-template-plugin/ai-chat');
62
+ if (module && module.createFlatChat) {
63
+ this.chatInstance = module.createFlatChat();
64
+ } else if (module && module.default && module.default.createFlatChat) {
65
+ this.chatInstance = module.default.createFlatChat();
66
+ }
67
+ }
68
+ }
69
+
70
+ export { EmbedAIChatEditorController };
@@ -0,0 +1,22 @@
1
+ import { EmbedAIChatEditorController } from './embed-ai-chat-editor.controller.mjs';
2
+
3
+ "use strict";
4
+ var __defProp = Object.defineProperty;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __publicField = (obj, key, value) => {
7
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
8
+ return value;
9
+ };
10
+ class EmbedAIChatEditorProvider {
11
+ constructor() {
12
+ __publicField(this, "formEditor", "IBizEmbedAIChat");
13
+ __publicField(this, "gridEditor", "IBizEmbedAIChat");
14
+ }
15
+ async createController(editorModel, parentController) {
16
+ const c = new EmbedAIChatEditorController(editorModel, parentController);
17
+ await c.init();
18
+ return c;
19
+ }
20
+ }
21
+
22
+ export { EmbedAIChatEditorProvider };
@@ -0,0 +1,5 @@
1
+ export { IBizEmbedAIChat } from './embed-ai-chat/embed-ai-chat.mjs';
2
+ export { EmbedAIChatEditorController } from './embed-ai-chat-editor.controller.mjs';
3
+ export { EmbedAIChatEditorProvider } from './embed-ai-chat-editor.provider.mjs';
4
+
5
+ "use strict";
@@ -107,7 +107,7 @@ class CodeEditorController extends EditorController {
107
107
  inlineaichatheight,
108
108
  hidelinenumbers,
109
109
  hideminimap,
110
- aichatcaption
110
+ srfaichatcaption
111
111
  } = this.editorParams;
112
112
  if (inlineaichatheight)
113
113
  this.inlineAiChatHeight = Number(inlineaichatheight);
@@ -115,8 +115,8 @@ class CodeEditorController extends EditorController {
115
115
  this.hideLineNumbers = this.toBoolean(hidelinenumbers);
116
116
  if (hideminimap)
117
117
  this.hideMinimap = this.toBoolean(hideminimap);
118
- if (aichatcaption) {
119
- this.aiChatCaption = ibiz.appUtil.resolveI18nText(aichatcaption);
118
+ if (srfaichatcaption) {
119
+ this.aiChatCaption = ibiz.appUtil.resolveI18nText(srfaichatcaption);
120
120
  }
121
121
  }
122
122
  const { appDEACModeId, appDataEntityId } = this.model;
@@ -132,7 +132,7 @@ const IBizCode = /* @__PURE__ */ defineComponent({
132
132
  ...containerOptions
133
133
  },
134
134
  chatOptions: {
135
- caption: c.deACMode.logicName,
135
+ caption: "".concat(c.aiChatCaption || c.deACMode.logicName),
136
136
  context: {
137
137
  ...c.context
138
138
  },
@@ -79,7 +79,7 @@ const IBizDropdown = /* @__PURE__ */ defineComponent({
79
79
  if (c.blankItemName && !c.multiple) {
80
80
  items.value = [{
81
81
  value: void 0,
82
- text: c.blankItemName
82
+ text: ibiz.appUtil.resolveI18nText(c.blankItemName)
83
83
  }, ...codeList];
84
84
  } else {
85
85
  items.value = codeList;
@@ -60,7 +60,7 @@ const IBizVirtualizedList = /* @__PURE__ */ defineComponent({
60
60
  if (c.blankItemName && !c.multiple) {
61
61
  items.value = [{
62
62
  value: void 0,
63
- text: c.blankItemName
63
+ text: ibiz.appUtil.resolveI18nText(c.blankItemName)
64
64
  }, ...codeList];
65
65
  } else {
66
66
  items.value = codeList;
@@ -230,6 +230,10 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
230
230
  ctrl: c.ctrl
231
231
  });
232
232
  const resourceOptions = await ibiz.aiChatUtil.getAIResourceOptions(c.context, c.params);
233
+ let chatCaption = c.deACMode.logicName;
234
+ if (c.editorParams.srfaichatcaption) {
235
+ chatCaption = ibiz.appUtil.resolveI18nText(c.editorParams.srfaichatcaption);
236
+ }
233
237
  chatInstance.create({
234
238
  resourceOptions,
235
239
  containerOptions: {
@@ -237,7 +241,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
237
241
  ...containerOptions
238
242
  },
239
243
  chatOptions: {
240
- caption: c.deACMode.logicName,
244
+ caption: chatCaption,
241
245
  context: {
242
246
  ...c.context
243
247
  },
@@ -30,6 +30,7 @@ import './carousel/index.mjs';
30
30
  import './user/ibiz-searchcond-edit/index.mjs';
31
31
  import './date-range-select/index.mjs';
32
32
  import './map-picker/index.mjs';
33
+ import './ai-chat/index.mjs';
33
34
  import { IBizImageCropping } from './upload/ibiz-image-cropping/ibiz-image-cropping.mjs';
34
35
  import { IBizSpan } from './span/span/span.mjs';
35
36
  import { IBizSpanLink } from './span/span-link/span-link.mjs';
@@ -73,6 +74,7 @@ import { IBizPresetRawitem } from './preset/preset-rawitem/ibiz-preset-rawitem/i
73
74
  import { IBizSearchCondEdit } from './user/ibiz-searchcond-edit/ibiz-searchcond-edit.mjs';
74
75
  import { IBizCarousel } from './carousel/ibiz-carousel/ibiz-carousel.mjs';
75
76
  import { IBizMapPicker } from './map-picker/ibiz-map-picker/ibiz-map-picker.mjs';
77
+ import { IBizEmbedAIChat } from './ai-chat/embed-ai-chat/embed-ai-chat.mjs';
76
78
  import { IBizDateRangeSelect } from './date-range-select/date-range-select-picker/date-range-select.mjs';
77
79
  import { IBizVirtualizedList } from './dropdown-list/ibiz-virtualized-list/ibiz-virtualized-list.mjs';
78
80
  import { SpanEditorProvider } from './span/span-editor.provider.mjs';
@@ -102,6 +104,7 @@ import { CascaderEditorProvider } from './cascader/cascader-editor.provider.mjs'
102
104
  import { ColorPickerEditorProvider } from './color-picker/color-picker-editor.provider.mjs';
103
105
  import { SearchCondEditEditorProvider } from './user/ibiz-searchcond-edit/ibiz-searchcond-edit.provider.mjs';
104
106
  import { MapPickerEditorProvider } from './map-picker/map-picker-editor.provider.mjs';
107
+ import { EmbedAIChatEditorProvider } from './ai-chat/embed-ai-chat-editor.provider.mjs';
105
108
  import { CarouselEditorProvider } from './carousel/carousel-editor.provider.mjs';
106
109
 
107
110
  "use strict";
@@ -151,6 +154,7 @@ const IBizEditor = {
151
154
  v.component(IBizSearchCondEdit.name, IBizSearchCondEdit);
152
155
  v.component(IBizCarousel.name, IBizCarousel);
153
156
  v.component(IBizMapPicker.name, IBizMapPicker);
157
+ v.component(IBizEmbedAIChat.name, IBizEmbedAIChat);
154
158
  v.component(
155
159
  "IBizHtml",
156
160
  defineAsyncComponent(() => import('./html/wang-editor/wang-editor.mjs'))
@@ -439,6 +443,10 @@ const IBizEditor = {
439
443
  () => new SearchCondEditEditorProvider()
440
444
  );
441
445
  registerEditorProvider("MAPPICKER", () => new MapPickerEditorProvider());
446
+ registerEditorProvider(
447
+ "TEXTAREA_EMBED_AI_CHAT",
448
+ () => new EmbedAIChatEditorProvider()
449
+ );
442
450
  registerEditorProvider(
443
451
  "FIELD_IMAGE_PICTURE_ONE",
444
452
  () => new FileUploaderEditorProvider("PICTURE_ONE")
@@ -74,6 +74,12 @@ function initCustomMenu(c, opts) {
74
74
  c.context,
75
75
  c.params
76
76
  );
77
+ let chatCaption = c.deACMode.logicName;
78
+ if (c.editorParams.srfaichatcaption) {
79
+ chatCaption = ibiz.appUtil.resolveI18nText(
80
+ c.editorParams.srfaichatcaption
81
+ );
82
+ }
77
83
  chatInstance.create({
78
84
  resourceOptions,
79
85
  containerOptions: {
@@ -81,7 +87,7 @@ function initCustomMenu(c, opts) {
81
87
  ...containerOptions
82
88
  },
83
89
  chatOptions: {
84
- caption: c.deACMode.logicName,
90
+ caption: chatCaption,
85
91
  context: { ...c.context },
86
92
  params: { ...c.params, srfactag: c.deACMode.codeName },
87
93
  appDataEntityId,
@@ -176,6 +176,10 @@ const IBizInput = /* @__PURE__ */ defineComponent({
176
176
  ctrl: c.ctrl
177
177
  });
178
178
  const resourceOptions = await ibiz.aiChatUtil.getAIResourceOptions(c.context, c.params);
179
+ let chatCaption = c.deACMode.logicName;
180
+ if (c.editorParams.srfaichatcaption) {
181
+ chatCaption = ibiz.appUtil.resolveI18nText(c.editorParams.srfaichatcaption);
182
+ }
179
183
  chatInstance.create({
180
184
  resourceOptions,
181
185
  containerOptions: {
@@ -183,7 +187,7 @@ const IBizInput = /* @__PURE__ */ defineComponent({
183
187
  ...containerOptions
184
188
  },
185
189
  chatOptions: {
186
- caption: c.deACMode.logicName,
190
+ caption: chatCaption,
187
191
  context: {
188
192
  ...c.context
189
193
  },