@ibiz-template/vue3-components 0.7.41-alpha.51 → 0.7.41-alpha.53

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 (47) hide show
  1. package/dist/{index-B0XiEslO.js → index-B65kCxFK.js} +1 -1
  2. package/dist/index-BF8huIAU.js +11 -0
  3. package/dist/{index-B6kaPJDO.js → index-CIEKzp7k.js} +1 -1
  4. package/dist/index.min.css +1 -1
  5. package/dist/index.system.min.js +1 -1
  6. package/dist/{wang-editor-Bcmawui0.js → wang-editor-uEldtkHX.js} +1 -1
  7. package/dist/{xlsx-util-fU5jMSIx.js → xlsx-util-DmPcr7YV.js} +1 -1
  8. package/es/common/action-toolbar/action-toolbar.css +1 -1
  9. package/es/control/form/form-detail/form-button/form-button.css +1 -1
  10. package/es/control/form/form-detail/form-button/form-button.mjs +1 -1
  11. package/es/locale/en/index.mjs +4 -0
  12. package/es/locale/zh-CN/index.mjs +4 -0
  13. package/es/panel-component/user-message/internal-message/common/internal-message-container/internal-message-container.mjs +7 -6
  14. package/es/panel-component/user-message/internal-message/common/internal-message-default/internal-message-default.mjs +3 -1
  15. package/es/panel-component/user-message/internal-message/common/internal-message-default/internal-message-default.provider.mjs +0 -1
  16. package/es/panel-component/user-message/internal-message/index.mjs +2 -0
  17. package/es/panel-component/user-message/internal-message/internal-message-group/internal-message-group.css +1 -0
  18. package/es/panel-component/user-message/internal-message/internal-message-group/internal-message-group.mjs +122 -0
  19. package/es/panel-component/user-message/internal-message/internal-message-html/internal-message-html.mjs +4 -2
  20. package/es/panel-component/user-message/internal-message/internal-message-json/internal-message-json.mjs +5 -3
  21. package/es/panel-component/user-message/internal-message/internal-message-tab/internal-message-tab.mjs +75 -12
  22. package/es/panel-component/user-message/internal-message/internal-message-text/internal-message-text.mjs +3 -1
  23. package/es/util/ai-chat-util/ai-chat-util.mjs +66 -16
  24. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.mjs +29 -16
  25. package/es/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.mjs +10 -11
  26. package/es/view-engine/wf-dyna-edit-view.engine.mjs +2 -2
  27. package/lib/common/action-toolbar/action-toolbar.css +1 -1
  28. package/lib/control/form/form-detail/form-button/form-button.cjs +1 -1
  29. package/lib/control/form/form-detail/form-button/form-button.css +1 -1
  30. package/lib/locale/en/index.cjs +4 -0
  31. package/lib/locale/zh-CN/index.cjs +4 -0
  32. package/lib/panel-component/user-message/internal-message/common/internal-message-container/internal-message-container.cjs +7 -6
  33. package/lib/panel-component/user-message/internal-message/common/internal-message-default/internal-message-default.cjs +3 -1
  34. package/lib/panel-component/user-message/internal-message/common/internal-message-default/internal-message-default.provider.cjs +0 -1
  35. package/lib/panel-component/user-message/internal-message/index.cjs +2 -0
  36. package/lib/panel-component/user-message/internal-message/internal-message-group/internal-message-group.cjs +124 -0
  37. package/lib/panel-component/user-message/internal-message/internal-message-group/internal-message-group.css +1 -0
  38. package/lib/panel-component/user-message/internal-message/internal-message-html/internal-message-html.cjs +4 -2
  39. package/lib/panel-component/user-message/internal-message/internal-message-json/internal-message-json.cjs +5 -3
  40. package/lib/panel-component/user-message/internal-message/internal-message-tab/internal-message-tab.cjs +75 -12
  41. package/lib/panel-component/user-message/internal-message/internal-message-text/internal-message-text.cjs +3 -1
  42. package/lib/util/ai-chat-util/ai-chat-util.cjs +66 -16
  43. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.cjs +10 -11
  44. package/lib/util/inline-ai-util/inline-ai-textarea/inline-ai-textarea.hook.cjs +28 -15
  45. package/lib/view-engine/wf-dyna-edit-view.engine.cjs +2 -2
  46. package/package.json +8 -8
  47. package/dist/index-CXaTaGlg.js +0 -11
@@ -1 +1 @@
1
- @charset "UTF-8";.ibiz-action-toolbar{--ibiz-action-toolbar-item-margin:var(--ibiz-spacing-none) var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none) var(--ibiz-spacing-none);--ibiz-action-toolbar-item-padding:var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-separator-height:var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-separator-width:var(--ibiz-spacing-super-tight);--ibiz-action-toolbar-separator-color:var(--ibiz-color-border);--ibiz-action-toolbar-popover-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-popover-button-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-popover-button-color:var(--ibiz-color-text-2);--ibiz-action-toolbar-popover-button-hover-bg:var(--ibiz-color-bg-0);display:flex;flex-wrap:wrap}.ibiz-action-toolbar__item{padding:var(--ibiz-action-toolbar-item-padding);margin:var(--ibiz-action-toolbar-item-margin)}.ibiz-action-toolbar__item--icon.is-has-icon{display:flex;align-items:baseline;justify-content:center;width:var(--ibiz-width-icon-medium);height:var(--ibiz-width-icon-medium);margin-right:var(--ibiz-spacing-extra-tight);margin-left:var(--ibiz-spacing-extra-tight);font-size:var(--ibiz-width-icon-medium)}.ibiz-action-toolbar__item--label.is-has-caption{margin-right:var(--ibiz-spacing-extra-tight)}.ibiz-action-toolbar__item+.ibiz-action-toolbar__item{margin:var(--ibiz-action-toolbar-item-margin)}.ibiz-action-toolbar__group-item>span{width:100%}.ibiz-action-toolbar__group-item--content{display:flex;gap:var(--ibiz-spacing-extra-tight);align-items:center;justify-content:space-between;width:100%}.ibiz-action-toolbar__group-item--caption{display:flex;align-items:center;padding:var(--ibiz-action-toolbar-item-padding);margin:var(--ibiz-action-toolbar-item-margin)}.ibiz-action-toolbar__separator{height:auto}.ibiz-action-toolbar__popover{--ibiz-action-toolbar-item-margin:var(--ibiz-spacing-none) var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none) var(--ibiz-spacing-none);--ibiz-action-toolbar-item-padding:var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-separator-height:var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-separator-width:var(--ibiz-spacing-super-tight);--ibiz-action-toolbar-separator-color:var(--ibiz-color-border);--ibiz-action-toolbar-popover-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-popover-button-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-popover-button-color:var(--ibiz-color-text-2);--ibiz-action-toolbar-popover-button-hover-bg:var(--ibiz-color-bg-0);width:auto!important;min-width:150px;--el-popover-padding:var(--ibiz-action-toolbar-popover-padding)}.ibiz-action-toolbar__popover .el-button{--el-button-size:getCssVar("height-control", "large");display:block;width:100%;padding:var(--ibiz-action-toolbar-popover-button-padding);margin:var(--ibiz-spacing-none);font-size:var(--ibiz-font-size-regular);color:var(--ibiz-action-toolbar-popover-button-color);text-align:left;border-radius:0}.ibiz-action-toolbar__popover .el-button:hover{background-color:var(--ibiz-action-toolbar-popover-button-hover-bg)}.ibiz-action-toolbar__popover .el-button .ibiz-icon{margin-right:var(--ibiz-spacing-extra-tight)}.ibiz-action-toolbar__popover .ibiz-action-toolbar__separator{margin:var(--ibiz-spacing-none)}.ibiz-action-toolbar--dropdown .ibiz-action-toolbar__caption{cursor:pointer}.ibiz-action-toolbar--dropdown .ibiz-action-toolbar__caption-icon{vertical-align:bottom}
1
+ @charset "UTF-8";.ibiz-action-toolbar{--ibiz-action-toolbar-item-margin:var(--ibiz-spacing-none) var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none) var(--ibiz-spacing-none);--ibiz-action-toolbar-item-padding:var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-separator-height:var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-separator-width:var(--ibiz-spacing-super-tight);--ibiz-action-toolbar-separator-color:var(--ibiz-color-border);--ibiz-action-toolbar-popover-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-popover-button-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-popover-button-color:var(--ibiz-color-text-2);--ibiz-action-toolbar-popover-button-hover-bg:var(--ibiz-color-bg-0);display:flex;flex-wrap:wrap}.ibiz-action-toolbar__item{padding:var(--ibiz-action-toolbar-item-padding);margin:var(--ibiz-action-toolbar-item-margin)}.ibiz-action-toolbar__item--icon.is-has-icon{position:relative;display:flex;align-items:baseline;justify-content:center;width:var(--ibiz-width-icon-medium);height:var(--ibiz-width-icon-medium);margin-right:var(--ibiz-spacing-extra-tight);margin-left:var(--ibiz-spacing-extra-tight);font-size:var(--ibiz-width-icon-medium)}.ibiz-action-toolbar__item--icon.is-has-icon .ibiz-icon{position:absolute;top:50%;left:0;transform:translateY(-50%)}.ibiz-action-toolbar__item--label.is-has-caption{margin-right:var(--ibiz-spacing-extra-tight)}.ibiz-action-toolbar__item+.ibiz-action-toolbar__item{margin:var(--ibiz-action-toolbar-item-margin)}.ibiz-action-toolbar__group-item>span{width:100%}.ibiz-action-toolbar__group-item--content{display:flex;gap:var(--ibiz-spacing-extra-tight);align-items:center;justify-content:space-between;width:100%}.ibiz-action-toolbar__group-item--caption{display:flex;align-items:center;padding:var(--ibiz-action-toolbar-item-padding);margin:var(--ibiz-action-toolbar-item-margin)}.ibiz-action-toolbar__separator{height:auto}.ibiz-action-toolbar__popover{--ibiz-action-toolbar-item-margin:var(--ibiz-spacing-none) var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none) var(--ibiz-spacing-none);--ibiz-action-toolbar-item-padding:var(--ibiz-spacing-extra-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-separator-height:var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-separator-width:var(--ibiz-spacing-super-tight);--ibiz-action-toolbar-separator-color:var(--ibiz-color-border);--ibiz-action-toolbar-popover-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-none);--ibiz-action-toolbar-popover-button-padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);--ibiz-action-toolbar-popover-button-color:var(--ibiz-color-text-2);--ibiz-action-toolbar-popover-button-hover-bg:var(--ibiz-color-bg-0);width:auto!important;min-width:150px;--el-popover-padding:var(--ibiz-action-toolbar-popover-padding)}.ibiz-action-toolbar__popover .el-button{--el-button-size:getCssVar("height-control", "large");display:block;width:100%;padding:var(--ibiz-action-toolbar-popover-button-padding);margin:var(--ibiz-spacing-none);font-size:var(--ibiz-font-size-regular);color:var(--ibiz-action-toolbar-popover-button-color);text-align:left;border-radius:0}.ibiz-action-toolbar__popover .el-button:hover{background-color:var(--ibiz-action-toolbar-popover-button-hover-bg)}.ibiz-action-toolbar__popover .el-button .ibiz-action-toolbar__item--icon.is-has-icon{margin:0 var(--ibiz-spacing-tight) 0 0}.ibiz-action-toolbar__popover .ibiz-action-toolbar__separator{margin:var(--ibiz-spacing-none)}.ibiz-action-toolbar--dropdown .ibiz-action-toolbar__caption{cursor:pointer}.ibiz-action-toolbar--dropdown .ibiz-action-toolbar__caption-icon{vertical-align:bottom}
@@ -1 +1 @@
1
- .ibiz-form-button{--ibiz-form-button-icon-margin:var(--ibiz-spacing-extra-tight);--ibiz-form-button-icon-max-width:var(--ibiz-width-icon-medium);--ibiz-form-button-icon-max-height:var(--ibiz-width-icon-medium);width:100%;height:100%;padding:var(--ibiz-spacing-tight);overflow:hidden}.ibiz-form-button .el-button{width:100%;height:100%}.ibiz-form-button .el-button .ibiz-form-button-content{display:flex;align-items:center;justify-content:flex-start}.ibiz-form-button .el-button .ibiz-form-button-content i,.ibiz-form-button .el-button .ibiz-form-button-content img{display:inline-block;max-width:var(--ibiz-form-button-icon-max-width);max-height:var(--ibiz-form-button-icon-max-height)}.ibiz-form-button .el-button .ibiz-form-button-content .ibiz-icon+.ibiz-form-button-content--caption{margin-left:var(--ibiz-form-button-icon-margin)}.ibiz-form-button.is-loading .el-button .ibiz-icon{display:none}
1
+ .ibiz-form-button{--ibiz-form-button-icon-margin:var(--ibiz-spacing-extra-tight);--ibiz-form-button-icon-max-width:var(--ibiz-width-icon-medium);--ibiz-form-button-icon-max-height:var(--ibiz-width-icon-medium);width:100%;height:100%;padding:var(--ibiz-spacing-tight);overflow:hidden}.ibiz-form-button .el-button{width:100%;height:100%}.ibiz-form-button .el-button .ibiz-form-button-content{display:flex;align-items:center;justify-content:flex-start}.ibiz-form-button .el-button .ibiz-form-button-content i,.ibiz-form-button .el-button .ibiz-form-button-content img{display:inline-block;max-width:var(--ibiz-form-button-icon-max-width);max-height:var(--ibiz-form-button-icon-max-height)}.ibiz-form-button .el-button .ibiz-form-button-content .ibiz-icon+.ibiz-form-button-content--caption{margin-left:var(--ibiz-form-button-icon-margin)}.ibiz-form-button.is-loading .el-button .ibiz-icon{display:none}.ibiz-form-button.is-readonly{display:none}
@@ -41,7 +41,7 @@ const FormButton = /* @__PURE__ */ defineComponent({
41
41
  return null;
42
42
  }
43
43
  return createVNode("div", {
44
- "class": [this.ns.b(), this.ns.m(this.modelData.codeName), this.ns.is("loading", this.controller.state.loading), this.modelData.detailStyle && this.ns.m(this.modelData.detailStyle.toLowerCase()), ...this.controller.containerClass]
44
+ "class": [this.ns.b(), this.ns.m(this.modelData.codeName), this.ns.is("loading", this.controller.state.loading), this.ns.is("readonly", this.controller.state.readonly), this.modelData.detailStyle && this.ns.m(this.modelData.detailStyle.toLowerCase()), ...this.controller.containerClass]
45
45
  }, [createVNode(resolveComponent("el-button"), {
46
46
  "sime": "small",
47
47
  "onClick": this.controller.onClick.bind(this.controller),
@@ -802,6 +802,10 @@ var index = {
802
802
  notificationYet: "Current no notification",
803
803
  loadMore: "Load more({length})",
804
804
  onlyShowUnread: "Only show unread"
805
+ },
806
+ internalMessageGroup: {
807
+ expand: "Expand",
808
+ collapse: "Collapse"
805
809
  }
806
810
  },
807
811
  customSetting: {
@@ -798,6 +798,10 @@ var index = {
798
798
  notificationYet: "\u6682\u65E0\u901A\u77E5",
799
799
  loadMore: "\u52A0\u8F7D\u66F4\u591A({length})",
800
800
  onlyShowUnread: "\u53EA\u663E\u793A\u672A\u8BFB"
801
+ },
802
+ internalMessageGroup: {
803
+ expand: "\u5C55\u5F00",
804
+ collapse: "\u6536\u8D77"
801
805
  }
802
806
  },
803
807
  customSetting: {
@@ -26,7 +26,8 @@ const InternalMessageContainer = /* @__PURE__ */ defineComponent({
26
26
  },
27
27
  emits: {
28
28
  toolbarClick: (_key) => true,
29
- close: () => true
29
+ close: () => true,
30
+ read: () => true
30
31
  },
31
32
  setup(props, {
32
33
  emit
@@ -49,7 +50,7 @@ const InternalMessageContainer = /* @__PURE__ */ defineComponent({
49
50
  const onToolbarClick = (event, key) => {
50
51
  event.stopPropagation();
51
52
  if (key === "read") {
52
- ibiz.hub.notice.internalMessage.markRead(props.message);
53
+ emit("read");
53
54
  } else {
54
55
  emit("toolbarClick", key);
55
56
  }
@@ -63,18 +64,18 @@ const InternalMessageContainer = /* @__PURE__ */ defineComponent({
63
64
  const onClick = async (event) => {
64
65
  if (isClickable.value && props.provider.onClick) {
65
66
  const isClose = await props.provider.onClick(props.message, event);
66
- if (isClose) {
67
+ if (isClose)
67
68
  emit("close");
68
- }
69
69
  }
70
+ emit("read");
70
71
  };
71
72
  return {
72
73
  ns,
73
74
  isUnread,
74
75
  isClickable,
75
76
  finalToolbarItems,
76
- onToolbarClick,
77
- onClick
77
+ onClick,
78
+ onToolbarClick
78
79
  };
79
80
  },
80
81
  render() {
@@ -34,7 +34,8 @@ const InternalMessageDefault = /* @__PURE__ */ defineComponent({
34
34
  }
35
35
  },
36
36
  emits: {
37
- close: () => true
37
+ close: () => true,
38
+ read: () => true
38
39
  },
39
40
  setup() {
40
41
  const ns = useNamespace("internal-message");
@@ -56,6 +57,7 @@ const InternalMessageDefault = /* @__PURE__ */ defineComponent({
56
57
  "class": [this.ns.b()],
57
58
  "message": this.message,
58
59
  "provider": this.provider,
60
+ "onRead": () => this.$emit("read"),
59
61
  "onClose": () => this.$emit("close")
60
62
  }, {
61
63
  default: () => [createVNode("div", {
@@ -23,7 +23,6 @@ class InternalMessageDefaultProvider {
23
23
  });
24
24
  }
25
25
  async onClick(message, _event) {
26
- await ibiz.hub.notice.internalMessage.markRead(message);
27
26
  const redirectUrl = ibiz.env.isMob ? message.mobile_url : message.url;
28
27
  return this.openViewByUrl(redirectUrl);
29
28
  }
@@ -8,10 +8,12 @@ import { InternalMessageHTML } from './internal-message-html/internal-message-ht
8
8
  import { InternalMessageHTMLtProvider } from './internal-message-html/internal-message-html.provider.mjs';
9
9
  import { InternalMessageTextProvider } from './internal-message-text/internal-message-text.provider.mjs';
10
10
  import { InternalMessageText } from './internal-message-text/internal-message-text.mjs';
11
+ import { InternalMessagGroup } from './internal-message-group/internal-message-group.mjs';
11
12
  export { InternalMessageTab } from './internal-message-tab/internal-message-tab.mjs';
12
13
 
13
14
  "use strict";
14
15
  function installInternalMessage(v) {
16
+ v.component(InternalMessagGroup.name, InternalMessagGroup);
15
17
  v.component(InternalMessageContainer.name, InternalMessageContainer);
16
18
  v.component(InternalMessageDefault.name, InternalMessageDefault);
17
19
  v.component(InternalMessageJSON.name, InternalMessageJSON);
@@ -0,0 +1 @@
1
+ .ibiz-internal-message-group{display:flex;flex-flow:column nowrap;height:auto}.ibiz-internal-message-group__content{position:relative;flex-shrink:0;min-height:60px;padding:var(--ibiz-spacing-tight);cursor:pointer}.ibiz-internal-message-group__content:hover{background-color:var(--ibiz-color-fill-1)}.ibiz-internal-message-group__content:hover .ibiz-internal-message-group__badge{display:none}.ibiz-internal-message-group__content:hover .ibiz-internal-message-group__action--read{display:block}.ibiz-internal-message-group__badge{color:var(--ibiz-color-white)!important;background-color:var(--ibiz-color-danger)!important}.ibiz-internal-message-group__action{position:absolute;top:var(--ibiz-spacing-tight);right:var(--ibiz-spacing-tight);display:flex;gap:var(--ibiz-spacing-tight);align-items:center;width:40px;height:18px}.ibiz-internal-message-group__action--item{cursor:pointer}.ibiz-internal-message-group__action--item:hover{color:var(--ibiz-color-primary)}.ibiz-internal-message-group__action--read{display:none}.ibiz-internal-message-group__children{flex-grow:1;padding-left:var(--ibiz-spacing-loose)}.ibiz-internal-message-group__children--item{min-height:60px;padding:var(--ibiz-spacing-tight)}.ibiz-internal-message-group__children--item:hover{background-color:var(--ibiz-color-fill-1)}
@@ -0,0 +1,122 @@
1
+ import { defineComponent, createVNode, resolveComponent, ref, computed } from 'vue';
2
+ import { useNamespace } from '@ibiz-template/vue3-util';
3
+ import { showTitle } from '@ibiz-template/core';
4
+ import { getInternalMessageProvider } from '@ibiz-template/runtime';
5
+ import '../../../../util/index.mjs';
6
+ import './internal-message-group.css';
7
+ import { parseHtml } from '../../../../util/wang-editor-util/wang-editor-util.mjs';
8
+
9
+ "use strict";
10
+ const InternalMessagGroup = /* @__PURE__ */ defineComponent({
11
+ name: "IBizInternalMessageGroup",
12
+ props: {
13
+ message: {
14
+ type: Object,
15
+ required: true
16
+ },
17
+ provider: {
18
+ type: Object,
19
+ required: true
20
+ }
21
+ },
22
+ emits: {
23
+ close: (_msg) => true,
24
+ read: (_msg) => true
25
+ },
26
+ setup(props, {
27
+ emit
28
+ }) {
29
+ const ns = useNamespace("internal-message-group");
30
+ const isExpand = ref(false);
31
+ const onExpandChange = () => {
32
+ isExpand.value = !isExpand.value;
33
+ };
34
+ const html = computed(() => {
35
+ const {
36
+ content_type,
37
+ content
38
+ } = props.message;
39
+ if (content_type === "JSON")
40
+ return content ? JSON.parse(content).html : content;
41
+ if (content === "HTML")
42
+ return parseHtml(content);
43
+ return content;
44
+ });
45
+ const onClose = (msg) => {
46
+ emit("close", msg);
47
+ };
48
+ const onRead = (msg) => {
49
+ emit("read", msg);
50
+ };
51
+ const onClick = async (event) => {
52
+ if (props.provider.onClick) {
53
+ const isClose = await props.provider.onClick(props.message, event);
54
+ if (isClose)
55
+ onClose();
56
+ }
57
+ onRead(props.message);
58
+ };
59
+ return {
60
+ ns,
61
+ html,
62
+ isExpand,
63
+ onRead,
64
+ onClose,
65
+ onClick,
66
+ onExpandChange
67
+ };
68
+ },
69
+ render() {
70
+ var _a, _b;
71
+ return createVNode("div", {
72
+ "class": this.ns.b()
73
+ }, [createVNode("div", {
74
+ "class": this.ns.e("content")
75
+ }, [createVNode("div", {
76
+ "innerHTML": this.html,
77
+ "onClick": this.onClick,
78
+ "class": this.ns.em("content", "html")
79
+ }, null), createVNode("div", {
80
+ "class": this.ns.e("action")
81
+ }, [createVNode("ion-icon", {
82
+ "class": this.ns.em("action", "item"),
83
+ "title": showTitle(this.isExpand ? ibiz.i18n.t("panelComponent.userMessage.internalMessageGroup.collapse") : ibiz.i18n.t("panelComponent.userMessage.internalMessageGroup.expand")),
84
+ "name": this.isExpand ? "chevron-down-outline" : "chevron-forward-outline",
85
+ "onClick": this.onExpandChange
86
+ }, null), createVNode(resolveComponent("iBizBadge"), {
87
+ "class": this.ns.e("badge"),
88
+ "value": (_a = this.message.children) == null ? void 0 : _a.length
89
+ }, null), createVNode(resolveComponent("iBizIcon"), {
90
+ "baseDir": "iconfont",
91
+ "icon": {
92
+ imagePath: "svg/read.svg"
93
+ },
94
+ "class": [this.ns.em("action", "item"), this.ns.em("action", "read")],
95
+ "title": showTitle(ibiz.i18n.t("panelComponent.userMessage.internalMessageContainer.markAsRead")),
96
+ "onClick": () => this.onRead(this.message)
97
+ }, null)])]), this.isExpand && createVNode("div", {
98
+ "class": this.ns.e("children")
99
+ }, [(_b = this.message.children) == null ? void 0 : _b.map((msg) => {
100
+ let provider;
101
+ try {
102
+ provider = getInternalMessageProvider(msg);
103
+ } catch (error) {
104
+ ibiz.log.error(error);
105
+ }
106
+ if (provider)
107
+ return provider.render({
108
+ message: msg,
109
+ class: this.ns.em("children", "item"),
110
+ onClose: () => this.onClose(msg),
111
+ onRead: () => this.onRead(msg)
112
+ });
113
+ return createVNode("div", {
114
+ "class": this.ns.em("children", "item")
115
+ }, [ibiz.i18n.t("panelComponent.userMessage.internalMessageTab.noSupportType", {
116
+ type: msg.content_type
117
+ })]);
118
+ })])]);
119
+ }
120
+ });
121
+
122
+ export { InternalMessagGroup };
@@ -1,7 +1,7 @@
1
1
  import { defineComponent, createVNode, resolveComponent, computed } from 'vue';
2
2
  import { useNamespace } from '@ibiz-template/vue3-util';
3
- import './internal-message-html.css';
4
3
  import '../../../../util/index.mjs';
4
+ import './internal-message-html.css';
5
5
  import { parseHtml } from '../../../../util/wang-editor-util/wang-editor-util.mjs';
6
6
 
7
7
  "use strict";
@@ -18,7 +18,8 @@ const InternalMessageHTML = /* @__PURE__ */ defineComponent({
18
18
  }
19
19
  },
20
20
  emits: {
21
- close: () => true
21
+ close: () => true,
22
+ read: () => true
22
23
  },
23
24
  setup(props) {
24
25
  const ns = useNamespace("internal-message-html");
@@ -35,6 +36,7 @@ const InternalMessageHTML = /* @__PURE__ */ defineComponent({
35
36
  "class": [this.ns.b()],
36
37
  "message": this.message,
37
38
  "provider": this.provider,
39
+ "onRead": () => this.$emit("read"),
38
40
  "onClose": () => this.$emit("close")
39
41
  }, {
40
42
  default: () => [createVNode("div", {
@@ -19,7 +19,8 @@ const InternalMessageJSON = /* @__PURE__ */ defineComponent({
19
19
  }
20
20
  },
21
21
  emits: {
22
- close: () => true
22
+ close: () => true,
23
+ read: () => true
23
24
  },
24
25
  setup(props, {
25
26
  emit
@@ -58,10 +59,10 @@ const InternalMessageJSON = /* @__PURE__ */ defineComponent({
58
59
  };
59
60
  return {
60
61
  ns,
61
- jsonContent,
62
- toolbarItems,
63
62
  redirectUrl,
64
63
  isWFMessage,
64
+ jsonContent,
65
+ toolbarItems,
65
66
  onToolbarClick
66
67
  };
67
68
  },
@@ -104,6 +105,7 @@ const InternalMessageJSON = /* @__PURE__ */ defineComponent({
104
105
  "clickable": !!this.redirectUrl || !!this.isWFMessage,
105
106
  "toolbarItems": this.toolbarItems,
106
107
  "onToolbarClick": this.onToolbarClick,
108
+ "onRead": () => this.$emit("read"),
107
109
  "onClose": () => this.$emit("close")
108
110
  }, _isSlot(content) ? content : {
109
111
  default: () => [content]
@@ -1,8 +1,9 @@
1
1
  import { defineComponent, createVNode, resolveComponent, ref, watch, reactive, onUnmounted, onMounted } from 'vue';
2
+ import dayjs from 'dayjs';
3
+ import { clone } from 'ramda';
2
4
  import { useNamespace } from '@ibiz-template/vue3-util';
3
5
  import { getInternalMessageProvider } from '@ibiz-template/runtime';
4
6
  import './internal-message-tab.css';
5
- import { clone } from 'ramda';
6
7
 
7
8
  "use strict";
8
9
  const InternalMessageTab = /* @__PURE__ */ defineComponent({
@@ -28,6 +29,18 @@ const InternalMessageTab = /* @__PURE__ */ defineComponent({
28
29
  const hiddenPopover = () => {
29
30
  emit("hiddenPopover");
30
31
  };
32
+ const onMarkRead = async (message, filter) => {
33
+ var _a2;
34
+ if ((_a2 = message.children) == null ? void 0 : _a2.length) {
35
+ await Promise.all(message.children.filter((child) => child.id !== (filter == null ? void 0 : filter.id)).map((child) => ibiz.hub.notice.internalMessage.markRead(child)));
36
+ } else {
37
+ await ibiz.hub.notice.internalMessage.markRead(message);
38
+ }
39
+ };
40
+ const onGroupClose = async (message, filter) => {
41
+ hiddenPopover();
42
+ await onMarkRead(message, filter);
43
+ };
31
44
  const c = props.controller;
32
45
  const unreadOnlyTag = "".concat((_a = ibiz.appData) == null ? void 0 : _a.context.srfsystemid, "-unreadOnly");
33
46
  const hasNotice = ref(false);
@@ -45,15 +58,55 @@ const InternalMessageTab = /* @__PURE__ */ defineComponent({
45
58
  }
46
59
  });
47
60
  const allItems = ref([]);
61
+ const messages = ref([]);
48
62
  const state = reactive({
49
63
  total: 0,
50
64
  pageSize: 0,
51
65
  unreadOnly: c.unreadOnly
52
66
  });
67
+ const handleMessageGroup = () => {
68
+ const grouped = {};
69
+ const ungrouped = [];
70
+ allItems.value.forEach((item) => {
71
+ const key = ibiz.env.isMob ? "".concat(item.message_type).concat(item.mobile_url) : "".concat(item.message_type).concat(item.url);
72
+ const shouldGroup = key && item.status === "RECEIVED";
73
+ if (shouldGroup) {
74
+ if (!grouped[key])
75
+ grouped[key] = [];
76
+ grouped[key].push({
77
+ ...item
78
+ });
79
+ } else {
80
+ ungrouped.push({
81
+ ...item
82
+ });
83
+ }
84
+ });
85
+ const finalResult = [...ungrouped];
86
+ Object.values(grouped).forEach((group) => {
87
+ if (group.length === 1) {
88
+ finalResult.push({
89
+ ...group[0]
90
+ });
91
+ } else {
92
+ const parent = {
93
+ ...group[0]
94
+ };
95
+ parent.children = group.map((item) => ({
96
+ ...item
97
+ }));
98
+ finalResult.push(parent);
99
+ }
100
+ });
101
+ messages.value = finalResult.sort((a, b) => {
102
+ return dayjs(a.update_time).isAfter(b.update_time) ? -1 : 1;
103
+ });
104
+ };
53
105
  const updateData = () => {
54
- allItems.value = clone(c.messages);
55
106
  state.total = c.total;
56
107
  state.pageSize = c.size;
108
+ allItems.value = clone(c.messages);
109
+ handleMessageGroup();
57
110
  };
58
111
  updateData();
59
112
  const updateUnreadOnlyChange = (val) => {
@@ -90,11 +143,14 @@ const InternalMessageTab = /* @__PURE__ */ defineComponent({
90
143
  });
91
144
  return {
92
145
  ns,
93
- allItems,
94
146
  state,
95
- hiddenPopover,
147
+ allItems,
148
+ messages,
96
149
  showMore,
97
- switchChange
150
+ onMarkRead,
151
+ onGroupClose,
152
+ switchChange,
153
+ hiddenPopover
98
154
  };
99
155
  },
100
156
  render() {
@@ -103,20 +159,27 @@ const InternalMessageTab = /* @__PURE__ */ defineComponent({
103
159
  "class": [this.ns.b()]
104
160
  }, [createVNode("div", {
105
161
  "class": this.ns.b("content")
106
- }, [this.allItems.length > 0 && this.allItems.map((msg) => {
162
+ }, [this.allItems.length > 0 && this.messages.map((msg) => {
163
+ var _a;
107
164
  let provider;
108
165
  try {
109
166
  provider = getInternalMessageProvider(msg);
110
167
  } catch (error) {
111
168
  ibiz.log.error(error);
112
169
  }
113
- if (provider) {
114
- return provider.render({
115
- class: [this.ns.e("item")],
170
+ if (provider)
171
+ return ((_a = msg.children) == null ? void 0 : _a.length) ? createVNode(resolveComponent("iBizInternalMessageGroup"), {
172
+ "message": msg,
173
+ "provider": provider,
174
+ "class": this.ns.e("group"),
175
+ "onRead": this.onMarkRead,
176
+ "onClose": (filter) => this.onGroupClose(msg, filter)
177
+ }, null) : provider.render({
116
178
  message: msg,
117
- onClose: this.hiddenPopover
179
+ class: this.ns.e("item"),
180
+ onClose: this.hiddenPopover,
181
+ onRead: () => this.onMarkRead(msg)
118
182
  });
119
- }
120
183
  return createVNode("div", {
121
184
  "class": this.ns.e("item")
122
185
  }, [ibiz.i18n.t("panelComponent.userMessage.internalMessageTab.noSupportType", {
@@ -135,7 +198,7 @@ const InternalMessageTab = /* @__PURE__ */ defineComponent({
135
198
  "value": this.state.unreadOnly,
136
199
  "onChange": this.switchChange,
137
200
  "class": this.ns.be("footer", "switch")
138
- }, null), " ", ibiz.i18n.t("panelComponent.userMessage.internalMessageTab.onlyShowUnread")])]);
201
+ }, null), ibiz.i18n.t("panelComponent.userMessage.internalMessageTab.onlyShowUnread")])]);
139
202
  }
140
203
  });
141
204
 
@@ -16,7 +16,8 @@ const InternalMessageText = /* @__PURE__ */ defineComponent({
16
16
  }
17
17
  },
18
18
  emits: {
19
- close: () => true
19
+ close: () => true,
20
+ read: () => true
20
21
  },
21
22
  setup() {
22
23
  const ns = useNamespace("internal-message-text");
@@ -34,6 +35,7 @@ const InternalMessageText = /* @__PURE__ */ defineComponent({
34
35
  "class": [this.ns.b()],
35
36
  "message": this.message,
36
37
  "provider": this.provider,
38
+ "onRead": () => this.$emit("read"),
37
39
  "onClose": () => this.$emit("close")
38
40
  }, {
39
41
  default: () => [createVNode("div", {
@@ -34,6 +34,7 @@ class AIChatUtil {
34
34
  * @param data
35
35
  */
36
36
  async getEditorExAIChatParams(editorParams, context, params, data, deACMode, args) {
37
+ var _a;
37
38
  const containerOptions = {};
38
39
  if (editorParams.enableaiminimize) {
39
40
  containerOptions.enableAIMinimize = editorParams.enableaiminimize === "true";
@@ -79,12 +80,9 @@ class AIChatUtil {
79
80
  if (editorParams.srfaiagent) {
80
81
  chatOptions.activeAIAgentID = editorParams.srfaiagent;
81
82
  }
82
- const aiAgentlist = await this.getAIAgentList(
83
- context,
84
- params,
85
- editorParams
86
- );
87
- chatOptions.aiAgentlist = aiAgentlist;
83
+ chatOptions.fetchAgentList = () => {
84
+ return this.getAIAgentList(context, params, editorParams);
85
+ };
88
86
  if (deACMode) {
89
87
  const {
90
88
  contentToolbarItems,
@@ -276,13 +274,16 @@ class AIChatUtil {
276
274
  }
277
275
  return null;
278
276
  };
277
+ const app = ibiz.hub.getApp(context.srfappid);
278
+ const folder = app.model.defaultOSSCat || ((_a = app.model.userParam) == null ? void 0 : _a.DefaultOSSCat);
279
279
  chatOptions.uploader = {
280
+ folder: "".concat(folder, "$"),
280
281
  onUpload: async (file, reportProgress, options) => {
281
282
  const fileMeata = ibiz.util.file.calcFileUpDownUrl(
282
283
  (options == null ? void 0 : options.context) || context,
283
284
  (options == null ? void 0 : options.params) || params,
284
285
  {},
285
- { enableNoAccess: true }
286
+ { enableNoAccess: true, osscat: folder }
286
287
  );
287
288
  const fielUploadHeaders = ibiz.util.file.getUploadHeaders();
288
289
  const formData = new FormData();
@@ -298,17 +299,39 @@ class AIChatUtil {
298
299
  }
299
300
  });
300
301
  return res.data;
302
+ },
303
+ onDownLoad: async (file, options) => {
304
+ const { downloadUrl } = ibiz.util.file.calcFileUpDownUrl(
305
+ (options == null ? void 0 : options.context) || context,
306
+ (options == null ? void 0 : options.params) || params,
307
+ {},
308
+ { enableNoAccess: true, osscat: folder }
309
+ );
310
+ const url = downloadUrl.replace("%fileId%", file.fileid);
311
+ await ibiz.util.file.fileDownload(
312
+ url,
313
+ file.filename,
314
+ {
315
+ context: (options == null ? void 0 : options.context) || context,
316
+ params: (options == null ? void 0 : options.params) || params,
317
+ data: {},
318
+ file: { fileId: file.id, ...file },
319
+ extraParams: { enableNoAccess: true, osscat: folder }
320
+ },
321
+ void 0,
322
+ true
323
+ );
301
324
  }
302
325
  };
303
326
  chatOptions.extendToolbarClick = async (event, source, context2, params2, data2) => {
304
- var _a, _b, _c;
327
+ var _a2, _b, _c;
305
328
  const { id: id2, isPluginApp } = source;
306
329
  let appId = source.appId;
307
330
  const tempContext = IBizContext.create(context2);
308
331
  if (isPluginApp) {
309
332
  const mainApp = ibiz.hub.getApp();
310
- const targetApp = (_a = mainApp.model.subAppRefs) == null ? void 0 : _a.find(
311
- (subAppRef) => subAppRef.appId.endsWith(appId)
333
+ const targetApp = (_a2 = mainApp.model.subAppRefs) == null ? void 0 : _a2.find(
334
+ (subAppRef) => subAppRef.appId.endsWith("__".concat(appId))
312
335
  );
313
336
  if (targetApp) {
314
337
  const targetAppId = targetApp.appId;
@@ -358,6 +381,7 @@ class AIChatUtil {
358
381
  * @returns
359
382
  */
360
383
  async getUIActionExAIChatParams(context, params, data, deACMode, args) {
384
+ var _a;
361
385
  const containerOptions = {};
362
386
  if (params.hasOwnProperty("enableaiminimize")) {
363
387
  containerOptions.enableAIMinimize = params.enableaiminimize === "true";
@@ -462,8 +486,9 @@ class AIChatUtil {
462
486
  delete params.srfenableaiagentchange;
463
487
  }
464
488
  chatOptions.enableAIAgentChange = enableAIAgentChange;
465
- const aiAgentlist = await this.getAIAgentList(context, params);
466
- chatOptions.aiAgentlist = aiAgentlist;
489
+ chatOptions.fetchAgentList = () => {
490
+ return this.getAIAgentList(context, params);
491
+ };
467
492
  if (deACMode) {
468
493
  const {
469
494
  contentToolbarItems,
@@ -653,13 +678,16 @@ class AIChatUtil {
653
678
  }
654
679
  return null;
655
680
  };
681
+ const app = ibiz.hub.getApp(context.srfappid);
682
+ const folder = app.model.defaultOSSCat || ((_a = app.model.userParam) == null ? void 0 : _a.DefaultOSSCat);
656
683
  chatOptions.uploader = {
684
+ folder: "".concat(folder, "$"),
657
685
  onUpload: async (file, reportProgress, options) => {
658
686
  const { uploadUrl } = ibiz.util.file.calcFileUpDownUrl(
659
687
  (options == null ? void 0 : options.context) || context,
660
688
  (options == null ? void 0 : options.params) || params,
661
689
  {},
662
- { enableNoAccess: true }
690
+ { enableNoAccess: true, osscat: folder }
663
691
  );
664
692
  const headers = ibiz.util.file.getUploadHeaders();
665
693
  const formData = new FormData();
@@ -675,17 +703,39 @@ class AIChatUtil {
675
703
  }
676
704
  });
677
705
  return res.data;
706
+ },
707
+ onDownLoad: async (file, options) => {
708
+ const { downloadUrl } = ibiz.util.file.calcFileUpDownUrl(
709
+ (options == null ? void 0 : options.context) || context,
710
+ (options == null ? void 0 : options.params) || params,
711
+ {},
712
+ { enableNoAccess: true, osscat: folder }
713
+ );
714
+ const url = downloadUrl.replace("%fileId%", file.fileid);
715
+ await ibiz.util.file.fileDownload(
716
+ url,
717
+ file.filename,
718
+ {
719
+ context: (options == null ? void 0 : options.context) || context,
720
+ params: (options == null ? void 0 : options.params) || params,
721
+ data: {},
722
+ file: { fileId: file.id, ...file },
723
+ extraParams: { enableNoAccess: true, osscat: folder }
724
+ },
725
+ void 0,
726
+ true
727
+ );
678
728
  }
679
729
  };
680
730
  chatOptions.extendToolbarClick = async (event, source, context2, params2, data2) => {
681
- var _a, _b, _c;
731
+ var _a2, _b, _c;
682
732
  const { id: id2, isPluginApp } = source;
683
733
  let appId = source.appId;
684
734
  const tempContext = IBizContext.create(context2);
685
735
  if (isPluginApp) {
686
736
  const mainApp = ibiz.hub.getApp();
687
- const targetApp = (_a = mainApp.model.subAppRefs) == null ? void 0 : _a.find(
688
- (subAppRef) => subAppRef.appId.endsWith(appId)
737
+ const targetApp = (_a2 = mainApp.model.subAppRefs) == null ? void 0 : _a2.find(
738
+ (subAppRef) => subAppRef.appId.endsWith("__".concat(appId))
689
739
  );
690
740
  if (targetApp) {
691
741
  const targetAppId = targetApp.appId;