agilebuilder-ui 1.1.65-tmp26 → 1.1.65-tmp27
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.
- package/dist/index.full.min.js +1115 -1102
- package/dist/style.css +36 -20
- package/es/IntervalSelection/src/sectionDate.vue.mjs +8 -8
- package/es/chat-embed/src/chat-addition-data.vue2.mjs +14 -11
- package/es/chat-embed/src/chat-ai-answer-tip.vue2.mjs +8 -8
- package/es/chat-embed/src/chat-bubble-footer.vue2.mjs +5 -5
- package/es/chat-embed/src/chat-sender.vue2.mjs +41 -41
- package/es/chat-embed/src/components/answer-auto-chart.vue2.mjs +1 -2
- package/es/chat-embed/src/components/answer-interaction-data.vue2.mjs +6 -7
- package/es/chat-embed/src/components/history-detail.vue2.mjs +18 -18
- package/es/chat-embed/src/header.vue2.mjs +16 -16
- package/es/chat-embed/src/index.vue2.mjs +161 -161
- package/es/chat-embed/src/recommendation-message.vue2.mjs +9 -6
- package/es/chat-embed/src/sidebar-item.vue2.mjs +65 -65
- package/es/chat-embed/src/voice/voice.vue.mjs +36 -35
- package/es/date-picker-range/index.vue2.mjs +39 -39
- package/es/department-tree-mobile/src/department-tree-app.vue.mjs +8 -7
- package/es/department-tree-mobile/src/department-tree-inline-app.vue.mjs +54 -54
- package/es/department-tree-mobile/src/dept-path.vue.mjs +7 -6
- package/es/department-tree-mobile/src/dept-result.vue.mjs +7 -6
- package/es/department-user-tree-inline/src/department-user-multiple-tree-inline.vue.mjs +5 -5
- package/es/department-user-tree-mobile/src/department-user-tree-app.vue.mjs +10 -9
- package/es/department-user-tree-mobile/src/department-user-tree-inline-app.vue.mjs +64 -64
- package/es/department-user-tree-mobile/src/dept-path.vue.mjs +7 -6
- package/es/department-user-tree-mobile/src/dept-result.vue.mjs +4 -3
- package/es/empty-state/index.vue.mjs +2 -2
- package/es/fs-upload/src/fs-upload-multi.vue.mjs +1 -1
- package/es/fs-upload-list/src/fs-upload-list.vue.mjs +1 -1
- package/es/fs-upload-new/src/file-upload-mobile/file-upload-app.vue.mjs +12 -12
- package/es/fs-upload-new/src/file-upload-mobile/file-upload-browser.vue.mjs +24 -24
- package/es/fs-upload-new/src/file-upload-mobile/file-upload-component.vue2.mjs +17 -17
- package/es/fs-upload-new/src/file-upload-mobile/file-upload.vue.mjs +12 -12
- package/es/fs-upload-new/src/fs-button-upload.vue2.mjs +23 -23
- package/es/fs-upload-new/src/fs-drag-upload.vue2.mjs +23 -23
- package/es/fs-upload-new/src/fs-preview-new.vue2.mjs +34 -34
- package/es/fs-upload-new/src/fs-upload-new.vue.mjs +15 -15
- package/es/json-view/json-view-dialog.vue.mjs +5 -5
- package/es/multipart-upload/src/multipart-upload-form.vue.mjs +1 -1
- package/es/multipart-upload/src/multipart-upload-list.vue.mjs +5 -5
- package/es/row-form/index.vue2.mjs +31 -31
- package/es/row-form/operation.vue.mjs +13 -13
- package/es/secret-info/index.vue.mjs +1 -1
- package/es/src/components/Affix/index.vue2.mjs +26 -26
- package/es/src/components/Scrollbar/index.vue.mjs +22 -22
- package/es/src/views/error-page/401.vue.mjs +8 -8
- package/es/src/views/error-page/404.vue.mjs +8 -8
- package/es/style.css +933 -917
- package/es/super-grid/src/columns-config.vue.mjs +1 -1
- package/es/super-grid/src/components/grid-radio-input.vue.mjs +5 -5
- package/es/super-grid/src/components/select-input.vue.mjs +55 -55
- package/es/super-grid/src/row-detail.vue.mjs +1 -1
- package/es/super-grid/src/search-form-advancedQuery.vue.mjs +1 -1
- package/es/super-grid/src/search-form-number.vue.mjs +4 -5
- package/es/super-grid/src/super-grid.vue.mjs +1 -1
- package/es/super-nine-grid/src/search-form-number.vue.mjs +4 -5
- package/es/super-nine-grid/src/search-form.vue.mjs +1 -1
- package/es/super-nine-grid/src/super-nine-grid.vue.mjs +1 -1
- package/es/workgroup-tree-inline/src/workgroup-tree-inline.vue.mjs +8 -8
- package/es/workgroup-tree-mobile/src/dept-result.vue.mjs +4 -3
- package/es/workgroup-tree-mobile/src/workgroup-tree-app.vue.mjs +8 -7
- package/es/workgroup-tree-mobile/src/workgroup-tree-inline-app.vue.mjs +51 -51
- package/es/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue.mjs +5 -5
- package/es/workgroup-user-tree-mobile/src/dept-path.vue.mjs +7 -6
- package/es/workgroup-user-tree-mobile/src/dept-result.vue.mjs +4 -3
- package/es/workgroup-user-tree-mobile/src/workgroup-user-tree-app.vue.mjs +7 -6
- package/es/workgroup-user-tree-mobile/src/workgroup-user-tree-inline-app.vue.mjs +65 -65
- package/es/year-range-picker/src/year-range-picker.vue.mjs +1 -1
- package/lib/IntervalSelection/src/sectionDate.vue.cjs +6 -6
- package/lib/chat-embed/src/chat-addition-data.vue2.cjs +13 -10
- package/lib/chat-embed/src/chat-ai-answer-tip.vue2.cjs +8 -8
- package/lib/chat-embed/src/chat-bubble-footer.vue2.cjs +5 -5
- package/lib/chat-embed/src/chat-sender.vue2.cjs +20 -20
- package/lib/chat-embed/src/components/answer-auto-chart.vue2.cjs +1 -2
- package/lib/chat-embed/src/components/answer-interaction-data.vue2.cjs +5 -6
- package/lib/chat-embed/src/components/history-detail.vue2.cjs +18 -18
- package/lib/chat-embed/src/header.vue2.cjs +17 -17
- package/lib/chat-embed/src/index.vue2.cjs +123 -123
- package/lib/chat-embed/src/recommendation-message.vue2.cjs +7 -4
- package/lib/chat-embed/src/sidebar-item.vue2.cjs +35 -35
- package/lib/chat-embed/src/voice/voice.vue.cjs +36 -35
- package/lib/date-picker-range/index.vue2.cjs +11 -11
- package/lib/department-tree-mobile/src/department-tree-app.vue.cjs +7 -6
- package/lib/department-tree-mobile/src/department-tree-inline-app.vue.cjs +53 -53
- package/lib/department-tree-mobile/src/dept-path.vue.cjs +6 -6
- package/lib/department-tree-mobile/src/dept-result.vue.cjs +7 -6
- package/lib/department-user-tree-inline/src/department-user-multiple-tree-inline.vue.cjs +5 -5
- package/lib/department-user-tree-mobile/src/department-user-tree-app.vue.cjs +9 -8
- package/lib/department-user-tree-mobile/src/department-user-tree-inline-app.vue.cjs +61 -61
- package/lib/department-user-tree-mobile/src/dept-path.vue.cjs +6 -6
- package/lib/department-user-tree-mobile/src/dept-result.vue.cjs +4 -3
- package/lib/empty-state/index.vue.cjs +2 -2
- package/lib/fs-upload/src/fs-upload-multi.vue.cjs +1 -1
- package/lib/fs-upload-list/src/fs-upload-list.vue.cjs +1 -1
- package/lib/fs-upload-new/src/file-upload-mobile/file-upload-app.vue.cjs +12 -12
- package/lib/fs-upload-new/src/file-upload-mobile/file-upload-browser.vue.cjs +24 -24
- package/lib/fs-upload-new/src/file-upload-mobile/file-upload-component.vue2.cjs +17 -17
- package/lib/fs-upload-new/src/file-upload-mobile/file-upload.vue.cjs +12 -12
- package/lib/fs-upload-new/src/fs-button-upload.vue2.cjs +23 -23
- package/lib/fs-upload-new/src/fs-drag-upload.vue2.cjs +23 -23
- package/lib/fs-upload-new/src/fs-preview-new.vue2.cjs +36 -36
- package/lib/fs-upload-new/src/fs-upload-new.vue.cjs +15 -15
- package/lib/json-view/json-view-dialog.vue.cjs +6 -6
- package/lib/multipart-upload/src/multipart-upload-form.vue.cjs +1 -1
- package/lib/multipart-upload/src/multipart-upload-list.vue.cjs +5 -5
- package/lib/row-form/index.vue2.cjs +31 -31
- package/lib/row-form/operation.vue.cjs +13 -13
- package/lib/secret-info/index.vue.cjs +1 -1
- package/lib/src/components/Affix/index.vue2.cjs +28 -28
- package/lib/src/components/Scrollbar/index.vue.cjs +22 -22
- package/lib/src/views/error-page/401.vue.cjs +7 -7
- package/lib/src/views/error-page/404.vue.cjs +4 -4
- package/lib/style.css +955 -939
- package/lib/super-grid/src/columns-config.vue.cjs +1 -1
- package/lib/super-grid/src/components/grid-radio-input.vue.cjs +5 -5
- package/lib/super-grid/src/components/select-input.vue.cjs +56 -56
- package/lib/super-grid/src/row-detail.vue.cjs +1 -1
- package/lib/super-grid/src/search-form-advancedQuery.vue.cjs +1 -1
- package/lib/super-grid/src/search-form-number.vue.cjs +6 -6
- package/lib/super-grid/src/super-grid.vue.cjs +1 -1
- package/lib/super-nine-grid/src/search-form-number.vue.cjs +6 -6
- package/lib/super-nine-grid/src/search-form.vue.cjs +1 -1
- package/lib/super-nine-grid/src/super-nine-grid.vue.cjs +1 -1
- package/lib/workgroup-tree-inline/src/workgroup-tree-inline.vue.cjs +5 -5
- package/lib/workgroup-tree-mobile/src/dept-result.vue.cjs +4 -3
- package/lib/workgroup-tree-mobile/src/workgroup-tree-app.vue.cjs +9 -8
- package/lib/workgroup-tree-mobile/src/workgroup-tree-inline-app.vue.cjs +48 -48
- package/lib/workgroup-user-tree-inline/src/workgroup-user-tree-inline.vue.cjs +5 -5
- package/lib/workgroup-user-tree-mobile/src/dept-path.vue.cjs +6 -6
- package/lib/workgroup-user-tree-mobile/src/dept-result.vue.cjs +4 -3
- package/lib/workgroup-user-tree-mobile/src/workgroup-user-tree-app.vue.cjs +9 -8
- package/lib/workgroup-user-tree-mobile/src/workgroup-user-tree-inline-app.vue.cjs +63 -63
- package/lib/year-range-picker/src/year-range-picker.vue.cjs +1 -1
- package/package.json +2 -2
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
import { defineComponent as e, ref as a, watch as t, resolveComponent as l, openBlock as s, createElementBlock as i, Fragment as o, withDirectives as n, createElementVNode as u, createVNode as c, withCtx as d, unref as r, vShow as m, toDisplayString as
|
|
2
|
-
import { ArrowDown as
|
|
3
|
-
import { useI18n as
|
|
4
|
-
import { AI_MODELS as
|
|
5
|
-
import { formatAiPptHistoryMessage as
|
|
6
|
-
import
|
|
7
|
-
import { ElMessage as
|
|
8
|
-
import
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
let
|
|
12
|
-
const
|
|
13
|
-
t(() =>
|
|
14
|
-
|
|
1
|
+
import { defineComponent as e, ref as a, watch as t, resolveComponent as l, openBlock as s, createElementBlock as i, Fragment as o, withDirectives as n, createElementVNode as u, createVNode as c, withCtx as d, unref as r, vShow as m, toDisplayString as h, createBlock as f, createCommentVNode as v, normalizeClass as y, renderList as p, createTextVNode as g } from "vue";
|
|
2
|
+
import { ArrowDown as b, ArrowRight as k, StarFilled as w, Star as _, MoreFilled as A } from "@element-plus/icons-vue";
|
|
3
|
+
import { useI18n as E } from "vue-i18n";
|
|
4
|
+
import { AI_MODELS as T } from "./type.mjs";
|
|
5
|
+
import { formatAiPptHistoryMessage as D, formatBailianHistoryMessage as I, formatDatabaseHistoryMessage as C, formatRagflowHistoryMessage as P, collectById as M, usefuleById as $, deleteByIds as N, getBySessionId as S } from "./util/history-message-util.mjs";
|
|
6
|
+
import x from "dayjs";
|
|
7
|
+
import { ElMessage as R } from "element-plus";
|
|
8
|
+
import j from "../../src/assets/chat-embed/robot.svg.mjs";
|
|
9
|
+
const O = { class: "flex-avatar" }, V = ["src"], F = { class: "flex-function-icon" }, Y = { class: "chat-embed__sidebar" }, B = { class: "sidebar-header" }, G = ["src"], z = { class: "sidebar-menu" }, L = { key: 0, class: "date-group" }, W = { key: 0, class: "date-group-item" }, H = { key: 1, class: "date-group-item" }, K = { key: 2, class: "date-group-item" }, q = { key: 3, class: "date-group-item" }, J = { key: 4, class: "date-group-item" }, Q = ["onClick"], U = e({ __name: "sidebar-item", props: { aiModel: { type: String, default: null }, dialogFullScreen: { type: Boolean, default: null } }, emits: ["new-chat-session", "select-history-item", "update-ai-history"], setup(e2, { expose: U2, emit: X }) {
|
|
10
|
+
const Z = X, { t: ee } = E(), ae = e2;
|
|
11
|
+
let te = 1;
|
|
12
|
+
const le = a(/* @__PURE__ */ new Map()), se = a("history"), ie = a(""), oe = a(false), ne = a(true);
|
|
13
|
+
t(() => ae.aiModel, (e3, a2) => {
|
|
14
|
+
te = 1, se.value = "history", ie.value = "", re();
|
|
15
15
|
}, { immediate: true });
|
|
16
|
-
const
|
|
17
|
-
|
|
16
|
+
const ue = (e3) => {
|
|
17
|
+
te++, oe.value || re();
|
|
18
18
|
};
|
|
19
|
-
function
|
|
20
|
-
|
|
19
|
+
function ce() {
|
|
20
|
+
ie.value = "", Z("new-chat-session");
|
|
21
21
|
}
|
|
22
|
-
function
|
|
23
|
-
e3 !==
|
|
22
|
+
function de(e3) {
|
|
23
|
+
e3 !== se.value && (te = 1, se.value = e3, oe.value = false, re());
|
|
24
24
|
}
|
|
25
|
-
function
|
|
25
|
+
function re() {
|
|
26
26
|
let e3 = "";
|
|
27
|
-
if (
|
|
28
|
-
return
|
|
29
|
-
switch (
|
|
30
|
-
case
|
|
27
|
+
if (ae.aiModel === T.INTERACTION)
|
|
28
|
+
return le.value = /* @__PURE__ */ new Map(), void ce();
|
|
29
|
+
switch (ae.aiModel) {
|
|
30
|
+
case T.RAGFLOW:
|
|
31
31
|
e3 = "RAGFLOW";
|
|
32
32
|
break;
|
|
33
|
-
case
|
|
33
|
+
case T.DATABASE:
|
|
34
34
|
e3 = "DATABASE";
|
|
35
35
|
break;
|
|
36
|
-
case
|
|
36
|
+
case T.DEEPSEEK:
|
|
37
37
|
e3 = "BAILIAN";
|
|
38
38
|
break;
|
|
39
|
-
case
|
|
39
|
+
case T.INTERACTION:
|
|
40
40
|
break;
|
|
41
|
-
case
|
|
41
|
+
case T.PPT_GENERATION:
|
|
42
42
|
e3 = "AIPPT";
|
|
43
43
|
}
|
|
44
44
|
let a2 = 0, t2 = 0;
|
|
45
|
-
"useful" ===
|
|
46
|
-
if (0 === e4.data.length &&
|
|
47
|
-
return
|
|
45
|
+
"useful" === se.value ? a2 = 1 : "collected" === se.value && (t2 = 1), window.$vueApp.config.globalProperties.$http.post(window.$vueApp.config.globalProperties.baseAPI + `/mc/ai-history/list/${e3}/${a2}/${t2}`, { pagination: { currentPage: te, pageSize: 30, isShowTotal: false } }).then((e4) => {
|
|
46
|
+
if (0 === e4.data.length && te > 1)
|
|
47
|
+
return R.info("没有更多历史记录了"), void (oe.value = true);
|
|
48
48
|
const a3 = function(e5) {
|
|
49
49
|
const a4 = /* @__PURE__ */ new Map(), t3 = /* @__PURE__ */ new Date(), l2 = new Date(t3.getFullYear(), t3.getMonth(), t3.getDate()).getTime(), s2 = l2 - 864e5, i2 = l2 - 6048e5, o2 = l2 - 2592e6;
|
|
50
50
|
return e5.forEach((e6) => {
|
|
@@ -58,61 +58,61 @@ const F = (e2) => (b("data-v-1e62eff8"), e2 = e2(), k(), e2), Y = { class: "flex
|
|
|
58
58
|
else if (t4 >= o2)
|
|
59
59
|
a4.has("thirtyDays") || a4.set("thirtyDays", []), a4.get("thirtyDays").push(e6);
|
|
60
60
|
else {
|
|
61
|
-
const l3 = new Date(t4), s3 =
|
|
61
|
+
const l3 = new Date(t4), s3 = x(`${l3.getFullYear()}-${l3.getMonth() + 1}`).format("YYYY-MM");
|
|
62
62
|
a4.has(s3) || a4.set(s3, []), a4.get(s3).push(e6);
|
|
63
63
|
}
|
|
64
64
|
}), a4;
|
|
65
65
|
}(e4.data);
|
|
66
|
-
1 ===
|
|
67
|
-
|
|
66
|
+
1 === te ? (e4.data.length < 30 && (oe.value = true), le.value = a3) : a3.forEach((e5, a4) => {
|
|
67
|
+
le.value.has(a4) ? le.value.get(a4).push(...e5) : le.value.set(a4, e5);
|
|
68
68
|
});
|
|
69
69
|
}).catch((e4) => {
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
|
-
return
|
|
72
|
+
return U2({ getHistory: re, addCurrentToSessionHistory: function(e3, a2 = []) {
|
|
73
73
|
e3 && setTimeout(() => {
|
|
74
|
-
|
|
75
|
-
e4 && (
|
|
74
|
+
S(e3).then((e4) => {
|
|
75
|
+
e4 && (ie.value = e4.id, le.value.has("today") || (le.value = new Map([["today", []], ...le.value])), le.value.get("today").unshift(e4), a2.length > 0 ? Z("select-history-item", e4, a2) : Z("select-history-item", e4, []));
|
|
76
76
|
}).catch((e4) => {
|
|
77
77
|
});
|
|
78
78
|
}, 100);
|
|
79
79
|
} }), (e3, a2) => {
|
|
80
|
-
const t2 = l("el-avatar"),
|
|
81
|
-
return s(), i(o, null, [n(u("div",
|
|
82
|
-
|
|
83
|
-
let
|
|
84
|
-
switch (
|
|
85
|
-
case
|
|
86
|
-
|
|
80
|
+
const t2 = l("el-avatar"), E2 = l("SuperIcon"), S2 = l("el-tooltip"), x2 = l("el-icon"), U3 = l("el-dropdown-item"), X2 = l("el-dropdown-menu"), te2 = l("el-dropdown"), oe2 = l("el-scrollbar"), re2 = l("el-button");
|
|
81
|
+
return s(), i(o, null, [n(u("div", O, [c(t2, { size: 40, fit: "cover" }, { default: d(() => [u("img", { src: r(j), alt: "AI Avatar" }, null, 8, V)]), _: 1 }), u("div", F, [c(S2, { class: "box-item", effect: "dark", content: "打开侧边栏" }, { default: d(() => [c(E2, { class: "shousuo-icon", onClick: a2[0] || (a2[0] = (e4) => ne.value = true), iconValue: "amb-icon-zhankaibianlan" })]), _: 1 }), c(S2, { class: "box-item", effect: "dark", content: "新建会话" }, { default: d(() => [c(E2, { class: "shousuo-icon", iconValue: "amb-icon-xinjianhuihua", onClick: ce })]), _: 1 })])], 512), [[m, !ne.value]]), n(u("div", Y, [u("div", B, [c(t2, { class: "chat-embed__header_avatar", size: 40, fit: "cover" }, { default: d(() => [u("img", { src: r(j), alt: "AI Avatar" }, null, 8, G)]), _: 1 }), u("span", null, h(r(ee)("chatEmbed.name")), 1), c(S2, { class: "box-item", effect: "dark", content: "收起侧边栏" }, { default: d(() => [ne.value ? (s(), f(E2, { key: 0, onClick: a2[1] || (a2[1] = (e4) => ne.value = false), class: "right-icon", iconValue: "amb-icon-shouqibianlan" })) : v("", true)]), _: 1 })]), u("div", z, [u("div", { class: y(["menu-item", { "active-item": "collected" === se.value }]), onClick: a2[2] || (a2[2] = (e4) => de("collected")) }, [c(E2, { iconValue: "amb-icon-shoucang" }), a2[5] || (a2[5] = u("span", null, "我的收藏", -1)), "collected" === se.value ? (s(), f(x2, { key: 0, class: "dropdown-right" }, { default: d(() => [c(r(b))]), _: 1 })) : (s(), f(x2, { key: 1, class: "dropdown-right" }, { default: d(() => [c(r(k))]), _: 1 }))], 2), u("div", { class: y(["menu-item", { "active-item": "useful" === se.value }]), onClick: a2[3] || (a2[3] = (e4) => de("useful")) }, [c(E2, { iconValue: "amb-icon-youyong" }), a2[6] || (a2[6] = u("span", null, "查看有用", -1)), "useful" === se.value ? (s(), f(x2, { key: 0, class: "dropdown-right" }, { default: d(() => [c(r(b))]), _: 1 })) : (s(), f(x2, { key: 1, class: "dropdown-right" }, { default: d(() => [c(r(k))]), _: 1 }))], 2), u("div", { class: y(["menu-item", { "active-item": "history" === se.value }]), onClick: a2[4] || (a2[4] = (e4) => de("history")) }, [c(E2, { iconValue: "amb-icon-lishihuihua" }), a2[7] || (a2[7] = u("span", null, "历史记录", -1)), "history" === se.value ? (s(), f(x2, { key: 0, class: "dropdown-right" }, { default: d(() => [c(r(b))]), _: 1 })) : (s(), f(x2, { key: 1, class: "dropdown-right" }, { default: d(() => [c(r(k))]), _: 1 }))], 2)]), c(oe2, { class: "scrollbar-container", onEndReached: ue }, { default: d(() => [(s(true), i(o, null, p(le.value, ([e4, t3]) => (s(), i(o, { key: e4 }, [(t3 == null ? void 0 : t3.length) > 0 ? (s(), i("div", L, ["today" === e4 ? (s(), i("div", W, "今天")) : "yesterday" === e4 ? (s(), i("div", H, "昨天")) : "sevenDays" === e4 ? (s(), i("div", K, "七天内")) : "thirtyDays" === e4 ? (s(), i("div", q, "三十天内")) : (s(), i("div", J, h(e4), 1)), (s(true), i(o, null, p(t3, (e5) => (s(), i("div", { class: y(["history-item", { "active-item": ie.value === e5.id }]) }, [e5.useful ? (s(), f(E2, { key: 0, iconValue: "amb-icon-youyong" })) : v("", true), e5.collected ? (s(), f(x2, { key: 1 }, { default: d(() => [c(r(w))]), _: 1 })) : v("", true), u("div", { class: "history-subject", onClick: (a3) => function(e6) {
|
|
82
|
+
ie.value !== e6.id && (ie.value = e6.id, window.$vueApp.config.globalProperties.$http.get(window.$vueApp.config.globalProperties.baseAPI + `/mc/ai-history/content/${e6.id}`).then((a4) => {
|
|
83
|
+
let t4 = [];
|
|
84
|
+
switch (ae.aiModel) {
|
|
85
|
+
case T.RAGFLOW:
|
|
86
|
+
t4 = P(a4);
|
|
87
87
|
break;
|
|
88
|
-
case
|
|
89
|
-
|
|
88
|
+
case T.DATABASE:
|
|
89
|
+
t4 = C(a4);
|
|
90
90
|
break;
|
|
91
|
-
case
|
|
92
|
-
|
|
91
|
+
case T.DEEPSEEK:
|
|
92
|
+
t4 = I(a4);
|
|
93
93
|
break;
|
|
94
|
-
case
|
|
94
|
+
case T.INTERACTION:
|
|
95
95
|
break;
|
|
96
|
-
case
|
|
97
|
-
|
|
96
|
+
case T.PPT_GENERATION:
|
|
97
|
+
t4 = D(a4);
|
|
98
98
|
}
|
|
99
|
-
|
|
99
|
+
Z("select-history-item", e6, t4);
|
|
100
100
|
}).catch((e7) => {
|
|
101
101
|
}));
|
|
102
|
-
}(e5) },
|
|
103
|
-
"collect" === e6 || "uncollect" === e6 ?
|
|
104
|
-
|
|
105
|
-
}) : "useful" === e6 || "unuseful" === e6 ?
|
|
106
|
-
|
|
107
|
-
}) : "delete" === e6 &&
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
-1 !==
|
|
111
|
-
}),
|
|
102
|
+
}(e5) }, h(e5.subject), 9, Q), c(te2, { class: "dropdown-right", onCommand: (a3) => function(e6, a4) {
|
|
103
|
+
"collect" === e6 || "uncollect" === e6 ? M(a4.id).then(() => {
|
|
104
|
+
a4.collected = !a4.collected, Z("update-ai-history", a4);
|
|
105
|
+
}) : "useful" === e6 || "unuseful" === e6 ? $(a4.id).then(() => {
|
|
106
|
+
a4.useful = !a4.useful, Z("update-ai-history", a4);
|
|
107
|
+
}) : "delete" === e6 && N([a4.id]).then(() => {
|
|
108
|
+
R.success("已删除该会话"), le.value.forEach((e7) => {
|
|
109
|
+
const t4 = e7.findIndex((e8) => e8.id === a4.id);
|
|
110
|
+
-1 !== t4 && e7.splice(t4, 1);
|
|
111
|
+
}), ie.value === a4.id && ce();
|
|
112
112
|
});
|
|
113
|
-
}(
|
|
113
|
+
}(a3, e5), trigger: "click" }, { dropdown: d(() => [c(X2, null, { default: d(() => [e5.collected ? v("", true) : (s(), f(U3, { key: 0, command: "collect" }, { default: d(() => [c(x2, null, { default: d(() => [c(r(w))]), _: 1 }), a2[8] || (a2[8] = g("收藏 ", -1))]), _: 1 })), e5.collected ? (s(), f(U3, { key: 1, command: "uncollect" }, { default: d(() => [c(x2, null, { default: d(() => [c(r(_))]), _: 1 }), a2[9] || (a2[9] = g("取消收藏 ", -1))]), _: 1 })) : v("", true), e5.useful ? v("", true) : (s(), f(U3, { key: 2, command: "useful" }, { default: d(() => [...a2[10] || (a2[10] = [g("有用", -1)])]), _: 1 })), e5.useful ? (s(), f(U3, { key: 3, command: "unuseful" }, { default: d(() => [...a2[11] || (a2[11] = [g("取消有用", -1)])]), _: 1 })) : v("", true), c(U3, { command: "delete" }, { default: d(() => [...a2[12] || (a2[12] = [g("删除", -1)])]), _: 1 })]), _: 2 }, 1024)]), default: d(() => [c(x2, { class: "more-filled" }, { default: d(() => [c(r(A))]), _: 1 })]), _: 2 }, 1032, ["onCommand"])], 2))), 256))])) : v("", true)], 64))), 128))]), _: 1 }), c(re2, { type: "primary", class: "new-session-button", onClick: ce }, { icon: d(() => [c(E2, { iconValue: "amb-icon-xinjianhuihua" })]), default: d(() => [a2[13] || (a2[13] = g(" 新建会话 ", -1))]), _: 1 })], 512), [[m, ne.value]])], 64);
|
|
114
114
|
};
|
|
115
115
|
} });
|
|
116
116
|
export {
|
|
117
|
-
|
|
117
|
+
U as default
|
|
118
118
|
};
|
|
@@ -11,6 +11,7 @@ import "js-base64";
|
|
|
11
11
|
import "../../../src/utils/request.mjs";
|
|
12
12
|
import { ElMessage as N } from "element-plus";
|
|
13
13
|
const S = { key: 0 }, O = { __name: "voice", props: { paramMsg: { type: String, default: false } }, emits: ["userMessage"], setup(O2, { emit: E }) {
|
|
14
|
+
const b = E;
|
|
14
15
|
window.$http.get(window.$vueApp.config.globalProperties.baseAPI + "/bs/ai-voice-command/permission-json").then((e2) => {
|
|
15
16
|
m(e2 ? JSON.stringify(e2) : "EMPTY_VALUE");
|
|
16
17
|
}).catch((e2) => {
|
|
@@ -20,67 +21,67 @@ const S = { key: 0 }, O = { __name: "voice", props: { paramMsg: { type: String,
|
|
|
20
21
|
}).catch((e2) => {
|
|
21
22
|
d(JSON.stringify([])), console.error("获取语音命令所需叶子菜单失败", e2);
|
|
22
23
|
});
|
|
23
|
-
let
|
|
24
|
+
let h = e("UNDEFINED"), y = e("开始录音"), C = e(""), j = e("");
|
|
24
25
|
e(false);
|
|
25
|
-
const
|
|
26
|
-
let
|
|
27
|
-
const
|
|
26
|
+
const L = "https:" === window.location.protocol || window.location.href.indexOf("//localhost") > 0 || window.location.href.indexOf("//127.0.0.1") > 0;
|
|
27
|
+
let D;
|
|
28
|
+
const P = e("");
|
|
28
29
|
o(() => {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
},
|
|
32
|
-
|
|
33
|
-
},
|
|
30
|
+
D = new RecorderManager(), D.constructor(window.$vueApp.config.globalProperties.portalUrl + "/js/processor"), D.onStart = () => {
|
|
31
|
+
P.value ? P.value = "" : M("OPEN");
|
|
32
|
+
}, D.onFrameRecorded = ({ isLastFrame: e2, frameBuffer: o2 }) => {
|
|
33
|
+
k.readyState === k.OPEN && (k.send(JSON.stringify({ data: { status: e2 ? 2 : 1, format: "audio/L16;rate=16000", encoding: "raw", audio: $(o2) } })), e2 && M("CLOSING"));
|
|
34
|
+
}, D.onStop = () => {
|
|
34
35
|
p();
|
|
35
36
|
};
|
|
36
37
|
});
|
|
37
|
-
let
|
|
38
|
-
function
|
|
38
|
+
let k = e(), I = e(), A = e();
|
|
39
|
+
function $(e2) {
|
|
39
40
|
for (var o2 = "", r2 = new Uint8Array(e2), t2 = r2.byteLength, a2 = 0; a2 < t2; a2++)
|
|
40
41
|
o2 += String.fromCharCode(r2[a2]);
|
|
41
42
|
return window.btoa(o2);
|
|
42
43
|
}
|
|
43
|
-
let
|
|
44
|
-
function
|
|
45
|
-
|
|
44
|
+
let _ = 60;
|
|
45
|
+
function F() {
|
|
46
|
+
_ -= 1, _ <= 0 ? (p(), D.stop()) : y.value = `录音中(${_}s)`;
|
|
46
47
|
}
|
|
47
|
-
function
|
|
48
|
-
|
|
48
|
+
function M(e2) {
|
|
49
|
+
h.value = e2, "CONNECTING" === e2 ? (y.value = "建立连接中", I = "", A = "") : "OPEN" === e2 ? (_ = 60, y.value = `录音中(${_}s)`, u(F)) : "CLOSING" === e2 ? y.value = "关闭连接中" : "CLOSED" === e2 && (y.value = "开始录音", x());
|
|
49
50
|
}
|
|
50
|
-
function
|
|
51
|
+
function U() {
|
|
51
52
|
let e2 = f();
|
|
52
53
|
e2 || (e2 = 1);
|
|
53
54
|
const o2 = v(), r2 = window.$vueApp.config.globalProperties.voiceSockerUrl + e2 + "?jwt=" + o2;
|
|
54
55
|
if ("WebSocket" in window)
|
|
55
|
-
|
|
56
|
+
k = new WebSocket(r2);
|
|
56
57
|
else {
|
|
57
58
|
if (!("MozWebSocket" in window))
|
|
58
59
|
return void alert("浏览器不支持WebSocket");
|
|
59
|
-
|
|
60
|
+
k = new MozWebSocket(r2);
|
|
60
61
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
},
|
|
62
|
+
M("CONNECTING"), k.onopen = (e3) => {
|
|
63
|
+
D.start({ sampleRate: 16e3, frameSize: 1280 });
|
|
64
|
+
k.send(JSON.stringify({ common: { app_id: "c4b3002b" }, business: { language: "zh_cn", domain: "iat", accent: "mandarin", vad_eos: 5e3, dwa: "wpgs" }, data: { status: 0, format: "audio/L16;rate=16000", encoding: "raw" } }));
|
|
65
|
+
}, k.onmessage = (e3) => {
|
|
65
66
|
!function(e4) {
|
|
66
67
|
let o3 = e4;
|
|
67
68
|
if (o3 = JSON.parse(e4), o3 && o3.error)
|
|
68
|
-
|
|
69
|
+
k.close(), P.value = o3.error, N.error(o3.error);
|
|
69
70
|
else if (o3.data && o3.data.result) {
|
|
70
71
|
let e5 = o3.data.result, r3 = "", t2 = e5.ws;
|
|
71
72
|
for (let e6 = 0; e6 < t2.length; e6++)
|
|
72
73
|
r3 += t2[e6].cw[0].w;
|
|
73
|
-
e5.pgs ? ("apd" === e5.pgs && (
|
|
74
|
+
e5.pgs ? ("apd" === e5.pgs && (I = A), A = I + r3) : I += r3, C.value = A || I || "";
|
|
74
75
|
}
|
|
75
|
-
0 === o3.code && 2 === o3.data.status &&
|
|
76
|
+
0 === o3.code && 2 === o3.data.status && k.close(), 0 !== o3.code && (k.close(), console.error(o3));
|
|
76
77
|
}(e3.data);
|
|
77
|
-
},
|
|
78
|
-
console.error(e3),
|
|
79
|
-
},
|
|
80
|
-
|
|
78
|
+
}, k.onerror = (e3) => {
|
|
79
|
+
console.error(e3), D.stop(), M("CLOSED");
|
|
80
|
+
}, k.onclose = (e3) => {
|
|
81
|
+
D.stop(), M("CLOSED");
|
|
81
82
|
};
|
|
82
83
|
}
|
|
83
|
-
const
|
|
84
|
+
const J = () => {
|
|
84
85
|
!async function() {
|
|
85
86
|
if (!navigator.permissions || !navigator.permissions.query)
|
|
86
87
|
return "unsupported";
|
|
@@ -90,13 +91,13 @@ const S = { key: 0 }, O = { __name: "voice", props: { paramMsg: { type: String,
|
|
|
90
91
|
} catch (e2) {
|
|
91
92
|
return console.error("查询权限时发生错误:", e2), "error";
|
|
92
93
|
}
|
|
93
|
-
}(), "UNDEFINED" ===
|
|
94
|
-
},
|
|
95
|
-
|
|
94
|
+
}(), "UNDEFINED" === h.value || "CLOSED" === h.value ? U() : "CONNECTING" !== h.value && "OPEN" !== h.value || D.stop();
|
|
95
|
+
}, x = () => {
|
|
96
|
+
j.value = j.value + C.value, C.value = "", "" != j.value ? (b("userMessage", j.value), j.value = "") : (j.value = "", C.value = "");
|
|
96
97
|
};
|
|
97
98
|
return (e2, o2) => {
|
|
98
99
|
const u2 = r("el-icon");
|
|
99
|
-
return t(
|
|
100
|
+
return t(L) ? (a(), s("span", S, ["UNDEFINED" === t(h) || "CLOSED" === t(h) ? (a(), n(u2, { key: 0, color: "#409EFF", onClick: J }, { default: i(() => [c(t(w))]), _: 1 })) : (a(), n(u2, { key: 1, class: "send-icon", color: "red" }, { default: i(() => [c(t(g))]), _: 1 }))])) : l("", true);
|
|
100
101
|
};
|
|
101
102
|
} };
|
|
102
103
|
export {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { defineComponent as e, ref as a, watch as l, computed as t, resolveComponent as r, openBlock as n, createElementBlock as u, createVNode as o,
|
|
2
|
-
import
|
|
3
|
-
import { useI18n as
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
l(() =>
|
|
7
|
-
y.value = e3;
|
|
8
|
-
}), l(() => d2.modelValue && d2.modelValue[1], (e3) => {
|
|
1
|
+
import { defineComponent as e, ref as a, watch as l, computed as t, resolveComponent as r, openBlock as n, createElementBlock as u, createVNode as o, createElementVNode as i } from "vue";
|
|
2
|
+
import d from "dayjs";
|
|
3
|
+
import { useI18n as s } from "vue-i18n";
|
|
4
|
+
const c = { class: "ab-date-range" }, m = e({ __name: "index", props: { modelValue: { type: Array, default: () => [] }, type: { type: String, default: "daterange" }, format: { type: String, default: void 0 }, valueFormat: { type: String, default: void 0 }, disabled: { type: Boolean, default: false }, clearable: { type: Boolean, default: true }, readonly: { type: Boolean, default: false }, shortcuts: { type: Array, default: void 0 }, startPlaceholder: { type: String, default: void 0 }, endPlaceholder: { type: String, default: void 0 }, size: { type: String, default: "medium" } }, emits: ["update:modelValue", "change", "blur", "focus", "visible-change", "panel-change", "clear"], setup(e2, { emit: m2 }) {
|
|
5
|
+
const { t: f } = s(), v = e2, p = a(v.startPlaceholder ?? f("imatrixUIMessage.startDate")), g = a(v.endPlaceholder ?? f("imatrixUIMessage.endDate")), y = m2, h = a(v.modelValue && v.modelValue[0]), b = a(v.modelValue && v.modelValue[1]);
|
|
6
|
+
l(() => v.modelValue && v.modelValue[0], (e3) => {
|
|
9
7
|
h.value = e3;
|
|
8
|
+
}), l(() => v.modelValue && v.modelValue[1], (e3) => {
|
|
9
|
+
b.value = e3;
|
|
10
10
|
});
|
|
11
|
-
const
|
|
12
|
-
switch (
|
|
11
|
+
const V = t(() => {
|
|
12
|
+
switch (v.type) {
|
|
13
13
|
case "daterange":
|
|
14
14
|
default:
|
|
15
15
|
return "date";
|
|
@@ -21,40 +21,40 @@ const f = { class: "ab-date-range" }, v = ((e2) => (i("data-v-2aeaa81d"), e2 = e
|
|
|
21
21
|
return "year";
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
|
-
function
|
|
25
|
-
|
|
24
|
+
function C(e3, a2) {
|
|
25
|
+
y(e3, a2);
|
|
26
26
|
}
|
|
27
|
-
function
|
|
28
|
-
if (
|
|
29
|
-
const a2 =
|
|
30
|
-
return a2.isValid() ? a2.format(
|
|
27
|
+
function A(e3) {
|
|
28
|
+
if (v.valueFormat) {
|
|
29
|
+
const a2 = d(e3);
|
|
30
|
+
return a2.isValid() ? a2.format(v.valueFormat) : e3;
|
|
31
31
|
}
|
|
32
32
|
if (e3 instanceof Date)
|
|
33
33
|
return e3;
|
|
34
34
|
if ("number" == typeof e3)
|
|
35
35
|
return new Date(e3);
|
|
36
36
|
if ("string" == typeof e3) {
|
|
37
|
-
const a2 =
|
|
37
|
+
const a2 = d(e3);
|
|
38
38
|
return a2.isValid() ? a2.toDate() : e3;
|
|
39
39
|
}
|
|
40
40
|
return e3;
|
|
41
41
|
}
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
44
|
-
return
|
|
42
|
+
const D = t(() => {
|
|
43
|
+
if (v.shortcuts && Array.isArray(v.shortcuts))
|
|
44
|
+
return v.shortcuts.map((e3) => e3 && e3.value ? { text: e3.text, onClick() {
|
|
45
45
|
!function(e4) {
|
|
46
46
|
let a2 = null;
|
|
47
47
|
if (Array.isArray(e4)) {
|
|
48
48
|
a2 = [];
|
|
49
49
|
for (const l2 of e4)
|
|
50
|
-
a2.push(
|
|
50
|
+
a2.push(A(l2));
|
|
51
51
|
} else
|
|
52
|
-
a2 =
|
|
53
|
-
Array.isArray(a2) && a2.length >= 2 ? (
|
|
52
|
+
a2 = A(e4);
|
|
53
|
+
Array.isArray(a2) && a2.length >= 2 ? (h.value = a2[0], b.value = a2[1]) : (h.value = a2, b.value = a2), P();
|
|
54
54
|
}("function" == typeof e3.value ? e3.value() : e3.value);
|
|
55
55
|
} } : e3);
|
|
56
56
|
});
|
|
57
|
-
function
|
|
57
|
+
function T(e3) {
|
|
58
58
|
if (null == e3)
|
|
59
59
|
return null;
|
|
60
60
|
if (e3 instanceof Date)
|
|
@@ -62,32 +62,32 @@ const f = { class: "ab-date-range" }, v = ((e2) => (i("data-v-2aeaa81d"), e2 = e
|
|
|
62
62
|
const a2 = "number" == typeof e3 ? e3 : Date.parse(String(e3));
|
|
63
63
|
return isNaN(a2) ? null : new Date(a2);
|
|
64
64
|
}
|
|
65
|
-
function T(e3) {
|
|
66
|
-
const a2 = D(h.value);
|
|
67
|
-
return !!a2 && e3.getTime() > a2.getTime();
|
|
68
|
-
}
|
|
69
65
|
function z(e3) {
|
|
70
|
-
const a2 =
|
|
71
|
-
return !!a2 && e3.getTime()
|
|
66
|
+
const a2 = T(b.value);
|
|
67
|
+
return !!a2 && e3.getTime() > a2.getTime();
|
|
72
68
|
}
|
|
73
69
|
function F(e3) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
a2 && l2 && a2.getTime() > l2.getTime() && (h.value = e3), x();
|
|
70
|
+
const a2 = T(h.value);
|
|
71
|
+
return !!a2 && e3.getTime() < a2.getTime();
|
|
77
72
|
}
|
|
78
73
|
function S(e3) {
|
|
79
74
|
h.value = e3;
|
|
80
|
-
const a2 =
|
|
81
|
-
a2 && l2 &&
|
|
75
|
+
const a2 = T(e3), l2 = T(b.value);
|
|
76
|
+
a2 && l2 && a2.getTime() > l2.getTime() && (b.value = e3), P();
|
|
77
|
+
}
|
|
78
|
+
function x(e3) {
|
|
79
|
+
b.value = e3;
|
|
80
|
+
const a2 = T(h.value), l2 = T(e3);
|
|
81
|
+
a2 && l2 && l2.getTime() < a2.getTime() && (h.value = e3), P();
|
|
82
82
|
}
|
|
83
|
-
function
|
|
84
|
-
|
|
83
|
+
function P() {
|
|
84
|
+
y("update:modelValue", [h.value, b.value]), y("change", [h.value, b.value]);
|
|
85
85
|
}
|
|
86
86
|
return (a2, l2) => {
|
|
87
87
|
const t2 = r("el-date-picker");
|
|
88
|
-
return n(), u("div",
|
|
88
|
+
return n(), u("div", c, [o(t2, { modelValue: h.value, "onUpdate:modelValue": l2[0] || (l2[0] = (e3) => h.value = e3), type: V.value, format: e2.format, "value-format": e2.valueFormat, disabled: e2.disabled, clearable: e2.clearable, readonly: e2.readonly, shortcuts: D.value, placeholder: p.value, size: e2.size, "disabled-date": z, onChange: S, onBlur: l2[1] || (l2[1] = (e3) => C("blur", e3)), onFocus: l2[2] || (l2[2] = (e3) => C("focus", e3)), onVisibleChange: l2[3] || (l2[3] = (e3) => C("visible-change", e3)), onPanelChange: l2[4] || (l2[4] = (e3) => C("panel-change", e3)), onClear: l2[5] || (l2[5] = (e3) => C("clear", e3)) }, null, 8, ["modelValue", "type", "format", "value-format", "disabled", "clearable", "readonly", "shortcuts", "placeholder", "size"]), l2[12] || (l2[12] = i("span", { class: "sep" }, "-", -1)), o(t2, { modelValue: b.value, "onUpdate:modelValue": l2[6] || (l2[6] = (e3) => b.value = e3), type: V.value, format: e2.format, "value-format": e2.valueFormat, disabled: e2.disabled, clearable: e2.clearable, readonly: e2.readonly, shortcuts: D.value, placeholder: g.value, size: e2.size, "disabled-date": F, onChange: x, onBlur: l2[7] || (l2[7] = (e3) => C("blur", e3)), onFocus: l2[8] || (l2[8] = (e3) => C("focus", e3)), onVisibleChange: l2[9] || (l2[9] = (e3) => C("visible-change", e3)), onPanelChange: l2[10] || (l2[10] = (e3) => C("panel-change", e3)), onClear: l2[11] || (l2[11] = (e3) => C("clear", e3)) }, null, 8, ["modelValue", "type", "format", "value-format", "disabled", "clearable", "readonly", "shortcuts", "placeholder", "size"])]);
|
|
89
89
|
};
|
|
90
90
|
} });
|
|
91
91
|
export {
|
|
92
|
-
|
|
92
|
+
m as default
|
|
93
93
|
};
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { defineComponent as e, ref as t, resolveComponent as l, openBlock as
|
|
1
|
+
import { defineComponent as e, ref as t, resolveComponent as l, openBlock as o, createBlock as r, unref as a, isRef as n, withCtx as i, createElementVNode as s, toDisplayString as m, createCommentVNode as p } from "vue";
|
|
2
2
|
import c from "./department-tree-inline-app.vue.mjs";
|
|
3
3
|
const d = { style: { "text-align": "center" } }, u = e({ name: "DepartmentTreeMobile", props: { multiple: {}, departmentInfo: {}, selectDepartmentInfo: {}, searchField: {}, separator: {}, limitFilterColumn: {} }, emits: ["close"], setup(e2, { emit: u2 }) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
const f = u2;
|
|
5
|
+
let I = t(true);
|
|
6
|
+
function F(e3) {
|
|
7
|
+
f("close", e3), I.value = false;
|
|
7
8
|
}
|
|
8
|
-
return (
|
|
9
|
-
const
|
|
10
|
-
return
|
|
9
|
+
return (t2, u3) => {
|
|
10
|
+
const f2 = l("el-drawer");
|
|
11
|
+
return o(), r(f2, { modelValue: a(I), "onUpdate:modelValue": u3[0] || (u3[0] = (e3) => n(I) ? I.value = e3 : I = e3), "append-to-body": "", "close-on-click-modal": false, "close-on-press-escape": false, direction: "btt", size: "100%", class: "organization-tree", onClose: u3[1] || (u3[1] = (e3) => F()) }, { header: i(() => [s("div", d, m(t2.$t("imatrixUIMessage.pleaseSelect")), 1)]), default: i(() => [a(I) ? (o(), r(c, { key: 0, multiple: e2.multiple, departmentInfo: e2.departmentInfo, selectDepartmentInfo: e2.selectDepartmentInfo, searchField: e2.searchField, separator: e2.separator, limitFilterColumn: e2.limitFilterColumn, onClose: F }, null, 8, ["multiple", "departmentInfo", "selectDepartmentInfo", "searchField", "separator", "limitFilterColumn"])) : p("", true)]), _: 1 }, 8, ["modelValue"]);
|
|
11
12
|
};
|
|
12
13
|
} });
|
|
13
14
|
export {
|