@core-pilot/client-vue 0.0.6 → 0.0.8
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/cjs/client-vue.css +1 -1
- package/dist/cjs/components/bubble-list/index.js +1 -1
- package/dist/cjs/components/bubble-list/index.js.map +1 -1
- package/dist/cjs/components/core-card/index.js +2 -0
- package/dist/cjs/components/core-card/index.js.map +1 -0
- package/dist/cjs/components/editor-sender/index.js +1 -1
- package/dist/cjs/components/editor-sender/index.js.map +1 -1
- package/dist/cjs/components/index.js +1 -1
- package/dist/cjs/components/x-markdown/index.js +1 -1
- package/dist/cjs/components/x-markdown/index.js.map +1 -1
- package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js +1 -1
- package/dist/cjs/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/client-vue.css +1 -1
- package/dist/es/components/bubble-list/index.js +1 -0
- package/dist/es/components/bubble-list/index.js.map +1 -1
- package/dist/es/components/core-card/index.js +76 -0
- package/dist/es/components/core-card/index.js.map +1 -0
- package/dist/es/components/editor-sender/index.js +29 -2
- package/dist/es/components/editor-sender/index.js.map +1 -1
- package/dist/es/components/index.js +2 -0
- package/dist/es/components/index.js.map +1 -1
- package/dist/es/components/x-markdown/index.js +107 -21
- package/dist/es/components/x-markdown/index.js.map +1 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js +7 -1
- package/dist/es/components/x-markdown/utils/parseCorePilotSchema.js.map +1 -1
- package/dist/es/index.js +2 -0
- package/dist/es/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -221,6 +221,7 @@ const index = /* @__PURE__ */ defineComponent({
|
|
|
221
221
|
"typing": item.typing,
|
|
222
222
|
"speed": this.speed,
|
|
223
223
|
"text": item.content,
|
|
224
|
+
"historyInputs": item.historyInputs,
|
|
224
225
|
"isHistoryMessage": item.isHistoryMessage,
|
|
225
226
|
"autoHideThinking": this.autoHideThinking,
|
|
226
227
|
"onHoverActiveRefTrigger": this.hoverActiveRefTrigger,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/bubble-list/index.tsx"],"sourcesContent":["import { defineComponent, nextTick, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { BubbleList, FilesCard } from 'vue-element-plus-x';\nimport type { BubbleListItemProps } from 'vue-element-plus-x/types/BubbleList';\nimport './style/index.less';\nimport ActionBar, { BtnItemConfig } from './actionBar';\nimport XMarkdown from '../x-markdown';\n\nexport interface FeedbackItem {\n title: string;\n content: string;\n checked: boolean;\n // showInput?: boolean; // 是否显示输入框\n}\n\nexport interface MessageItem extends BubbleListItemProps {\n role: 'user' | 'ai';\n questions?: Array<string>;\n speed?: number;\n id: string;\n showActions?: boolean;\n feedback?: 'like' | 'dislike';\n files?: Array<{\n id: string,\n extension: string,\n name: string,\n }>;\n isHistoryMessage?: boolean;\n}\n\nexport default defineComponent({\n props: {\n list: {\n type: Array as () => Array<MessageItem>,\n default: () => [],\n },\n btnLoading: {\n type: Boolean,\n default: true,\n },\n maxHeight: {\n type: String,\n default: '500px',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n speed: {\n type: Number,\n default: 200,\n },\n disLikeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n likeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n },\n expose: ['showLastActionGroup', 'scrollToBottom', 'hideLastActionGroup'],\n emits: [\n 'hoverActiveRefTrigger',\n 'clickActiveRefTrigger',\n 'like',\n 'dislike',\n 'regenerate',\n 'copy',\n 'refConfigUpdate',\n 'questionClick',\n 'downloadFile',\n 'coreSubmit',\n ],\n setup(props, { emit }) {\n const bubbleList = useTemplateRef<typeof BubbleList>('bubbleList');\n const bubbleListContainer = useTemplateRef<Element>('bubbleListContainer');\n const showLastBubbleFooter = ref(false);\n const curActiveItem = ref<Element | null>(null);\n const destoryObserver = ref<Function>(() => {});\n\n watch(() => curActiveItem.value, (newVal, oldVal) => {\n if (newVal === null) {\n return;\n }\n if (oldVal === newVal) {\n return;\n }\n const refContainer = (curActiveItem.value as HTMLElement)?.querySelector('div[hidden]');\n const curRefList = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', curRefList);\n })\n\n watch(() => props.list.length, () => {\n console.log('props.list.length', props.list.length);\n nextTick(() => {\n destoryObserver.value();\n destoryObserver.value = scrollTrigger();\n })\n })\n\n const hoverActiveRefTrigger = (item) => {\n emit('hoverActiveRefTrigger', item);\n }\n\n const clickActiveRefTrigger = (item) => {\n emit('clickActiveRefTrigger', item);\n }\n\n const showLastActionGroup = () => {\n showLastBubbleFooter.value = true;\n }\n\n const hideLastActionGroup = () => {\n showLastBubbleFooter.value = false;\n }\n\n const clickAction = (type: BtnItemConfig['type'], content, cancel, item) => {\n emit(type, { content, message: item, cancel })\n }\n\n const scrollToBottom = () => {\n (bubbleList.value as any)?.scrollToBottom();\n }\n\n const lastRefConfigUpdate = (refList, item) => {\n // 更新最后一条消息的引用列表\n if (props.list[props.list.length - 1] === item) {\n emit('refConfigUpdate', refList);\n }\n }\n\n const getQuestions = (item) => {\n if (item.questions && item.questions.length > 0) {\n return (\n <div class='question-list'>\n {\n item.questions.map((question, index) => {\n return (\n <span\n class='question-item'\n key={index}\n onClick={() => questionClick(question)}\n >\n {question}\n <span class='icon'></span>\n </span>\n )\n })\n }\n </div>\n )\n }\n return null;\n }\n\n const questionClick = (q) => {\n emit('questionClick', q)\n }\n\n const isLastItem = (item: MessageItem) => {\n return props.list[props.list.length - 1] === item;\n }\n\n const getActionBar = (item: MessageItem) => {\n // 如果当前项中明确指定不显示actionbar,则不显示\n if (typeof item.showActions === 'boolean' && !item.showActions) {\n return null;\n }\n const isLast = isLastItem(item);\n if (isLast && showLastBubbleFooter.value) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n )\n }\n if (!isLast) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n );\n }\n }\n\n const onDownloadFile = (payload) => {\n emit('downloadFile', payload);\n }\n\n const scrollTrigger = () => {\n const messageItems = bubbleListContainer.value!.querySelectorAll('.el-bubble-start');\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const itemBottom = entry.boundingClientRect.bottom;\n const height = entry.target.clientHeight;\n const listBottom = bubbleListContainer.value!.getBoundingClientRect().bottom;\n \n if (Math.abs(itemBottom - listBottom) < height) {\n curActiveItem.value = entry.target;\n }\n }\n });\n }, {\n root: bubbleListContainer.value!,\n threshold: [0.1, 0.9]\n });\n\n // 3. 为所有消息项添加监听\n messageItems.forEach(item => {\n observer.observe(item);\n });\n\n return () => {\n observer.disconnect();\n }\n }\n\n const coreSubmit = (payload, item) => {\n emit('coreSubmit', payload, item);\n }\n\n onMounted(() => {\n destoryObserver.value = scrollTrigger();\n })\n\n return {\n hoverActiveRefTrigger,\n showLastActionGroup,\n hideLastActionGroup,\n showLastBubbleFooter,\n clickActiveRefTrigger,\n clickAction,\n scrollToBottom,\n lastRefConfigUpdate,\n getQuestions,\n questionClick,\n isLastItem,\n getActionBar,\n onDownloadFile,\n coreSubmit,\n };\n },\n\n render() {\n return (\n <div\n ref=\"bubbleListContainer\"\n class=\"bubble-list\"\n >\n <BubbleList\n ref=\"bubbleList\"\n list={this.list}\n btnLoading={this.btnLoading}\n maxHeight={this.maxHeight}\n >\n {{\n header: ({ item }: { item: MessageItem }) => {\n if (!item.files?.length) {\n return null;\n }\n return (\n <div class=\"bubble-item-header\">\n {\n item.files.map((item) => (\n <FilesCard\n name={item.name}\n status=\"done\"\n />\n ))\n }\n </div>\n )\n },\n content: ({ item }: { item: MessageItem }) => (\n <XMarkdown\n key={item.id}\n typing={item.typing as boolean}\n speed={this.speed}\n text={item.content}\n isHistoryMessage={item.isHistoryMessage}\n autoHideThinking={this.autoHideThinking}\n onHoverActiveRefTrigger={this.hoverActiveRefTrigger}\n onClickActiveRefTrigger={this.clickActiveRefTrigger}\n onRefConfigUpdate={(refList) => this.lastRefConfigUpdate(refList, item)}\n onDownloadFile={this.onDownloadFile}\n onCoreSubmit={(payload) => this.coreSubmit(payload, item)}\n />\n ),\n footer: ({ item }: { item: MessageItem }) => {\n if (item.role === 'ai') {\n return (\n <div>\n {\n this.getActionBar(item)\n }\n {\n this.getQuestions(item)\n }\n </div>\n )\n }\n return null;\n }\n }}\n </BubbleList>\n </div>\n );\n }\n});"],"names":["props","list","type","Array","default","btnLoading","Boolean","maxHeight","String","autoHideThinking","speed","Number","disLikeFeedbackList","undefined","likeFeedbackList","expose","emits","setup","emit","bubbleList","useTemplateRef","bubbleListContainer","showLastBubbleFooter","ref","curActiveItem","destoryObserver","watch","value","newVal","oldVal","refContainer","querySelector","curRefList","JSON","parse","textContent","length","console","log","nextTick","scrollTrigger","hoverActiveRefTrigger","item","clickActiveRefTrigger","showLastActionGroup","hideLastActionGroup","clickAction","content","cancel","message","scrollToBottom","lastRefConfigUpdate","refList","getQuestions","questions","_createVNode","map","question","index","onClick","questionClick","q","isLastItem","getActionBar","showActions","isLast","ActionBar","onDownloadFile","payload","messageItems","querySelectorAll","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","itemBottom","boundingClientRect","bottom","height","target","clientHeight","listBottom","getBoundingClientRect","Math","abs","root","threshold","observe","disconnect","coreSubmit","onMounted","render","BubbleList","header","files","FilesCard","name","XMarkdown","id","typing","isHistoryMessage","footer","role"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/bubble-list/index.tsx"],"sourcesContent":["import { defineComponent, nextTick, onMounted, ref, useTemplateRef, watch } from 'vue';\nimport { BubbleList, FilesCard } from 'vue-element-plus-x';\nimport type { BubbleListItemProps } from 'vue-element-plus-x/types/BubbleList';\nimport './style/index.less';\nimport ActionBar, { BtnItemConfig } from './actionBar';\nimport XMarkdown from '../x-markdown';\n\nexport interface FeedbackItem {\n title: string;\n content: string;\n checked: boolean;\n // showInput?: boolean; // 是否显示输入框\n}\n\nexport interface MessageItem extends BubbleListItemProps {\n role: 'user' | 'ai';\n questions?: Array<string>;\n speed?: number;\n id: string;\n showActions?: boolean;\n feedback?: 'like' | 'dislike';\n files?: Array<{\n id: string,\n extension: string,\n name: string,\n }>;\n isHistoryMessage?: boolean;\n historyInputs?: Record<string, any>;\n}\n\nexport default defineComponent({\n props: {\n list: {\n type: Array as () => Array<MessageItem>,\n default: () => [],\n },\n btnLoading: {\n type: Boolean,\n default: true,\n },\n maxHeight: {\n type: String,\n default: '500px',\n },\n autoHideThinking: {\n type: Boolean,\n default: true,\n },\n speed: {\n type: Number,\n default: 200,\n },\n disLikeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n likeFeedbackList: {\n type: Array as () => Array<FeedbackItem>,\n default: () => undefined,\n },\n },\n expose: ['showLastActionGroup', 'scrollToBottom', 'hideLastActionGroup'],\n emits: [\n 'hoverActiveRefTrigger',\n 'clickActiveRefTrigger',\n 'like',\n 'dislike',\n 'regenerate',\n 'copy',\n 'refConfigUpdate',\n 'questionClick',\n 'downloadFile',\n 'coreSubmit',\n ],\n setup(props, { emit }) {\n const bubbleList = useTemplateRef<typeof BubbleList>('bubbleList');\n const bubbleListContainer = useTemplateRef<Element>('bubbleListContainer');\n const showLastBubbleFooter = ref(false);\n const curActiveItem = ref<Element | null>(null);\n const destoryObserver = ref<Function>(() => {});\n\n watch(() => curActiveItem.value, (newVal, oldVal) => {\n if (newVal === null) {\n return;\n }\n if (oldVal === newVal) {\n return;\n }\n const refContainer = (curActiveItem.value as HTMLElement)?.querySelector('div[hidden]');\n const curRefList = JSON.parse(refContainer?.textContent || '[]');\n emit('refConfigUpdate', curRefList);\n })\n\n watch(() => props.list.length, () => {\n console.log('props.list.length', props.list.length);\n nextTick(() => {\n destoryObserver.value();\n destoryObserver.value = scrollTrigger();\n })\n })\n\n const hoverActiveRefTrigger = (item) => {\n emit('hoverActiveRefTrigger', item);\n }\n\n const clickActiveRefTrigger = (item) => {\n emit('clickActiveRefTrigger', item);\n }\n\n const showLastActionGroup = () => {\n showLastBubbleFooter.value = true;\n }\n\n const hideLastActionGroup = () => {\n showLastBubbleFooter.value = false;\n }\n\n const clickAction = (type: BtnItemConfig['type'], content, cancel, item) => {\n emit(type, { content, message: item, cancel })\n }\n\n const scrollToBottom = () => {\n (bubbleList.value as any)?.scrollToBottom();\n }\n\n const lastRefConfigUpdate = (refList, item) => {\n // 更新最后一条消息的引用列表\n if (props.list[props.list.length - 1] === item) {\n emit('refConfigUpdate', refList);\n }\n }\n\n const getQuestions = (item) => {\n if (item.questions && item.questions.length > 0) {\n return (\n <div class='question-list'>\n {\n item.questions.map((question, index) => {\n return (\n <span\n class='question-item'\n key={index}\n onClick={() => questionClick(question)}\n >\n {question}\n <span class='icon'></span>\n </span>\n )\n })\n }\n </div>\n )\n }\n return null;\n }\n\n const questionClick = (q) => {\n emit('questionClick', q)\n }\n\n const isLastItem = (item: MessageItem) => {\n return props.list[props.list.length - 1] === item;\n }\n\n const getActionBar = (item: MessageItem) => {\n // 如果当前项中明确指定不显示actionbar,则不显示\n if (typeof item.showActions === 'boolean' && !item.showActions) {\n return null;\n }\n const isLast = isLastItem(item);\n if (isLast && showLastBubbleFooter.value) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n )\n }\n if (!isLast) {\n return (\n <ActionBar\n isLast={isLast}\n content={item.content}\n message={item}\n disLikeFeedbackList={props.disLikeFeedbackList}\n likeFeedbackList={props.likeFeedbackList}\n onClick={(type, content, cancel) => clickAction(type, content, cancel, item)}\n />\n );\n }\n }\n\n const onDownloadFile = (payload) => {\n emit('downloadFile', payload);\n }\n\n const scrollTrigger = () => {\n const messageItems = bubbleListContainer.value!.querySelectorAll('.el-bubble-start');\n\n const observer = new IntersectionObserver((entries) => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n const itemBottom = entry.boundingClientRect.bottom;\n const height = entry.target.clientHeight;\n const listBottom = bubbleListContainer.value!.getBoundingClientRect().bottom;\n \n if (Math.abs(itemBottom - listBottom) < height) {\n curActiveItem.value = entry.target;\n }\n }\n });\n }, {\n root: bubbleListContainer.value!,\n threshold: [0.1, 0.9]\n });\n\n // 3. 为所有消息项添加监听\n messageItems.forEach(item => {\n observer.observe(item);\n });\n\n return () => {\n observer.disconnect();\n }\n }\n\n const coreSubmit = (payload, item) => {\n emit('coreSubmit', payload, item);\n }\n\n onMounted(() => {\n destoryObserver.value = scrollTrigger();\n })\n\n return {\n hoverActiveRefTrigger,\n showLastActionGroup,\n hideLastActionGroup,\n showLastBubbleFooter,\n clickActiveRefTrigger,\n clickAction,\n scrollToBottom,\n lastRefConfigUpdate,\n getQuestions,\n questionClick,\n isLastItem,\n getActionBar,\n onDownloadFile,\n coreSubmit,\n };\n },\n\n render() {\n return (\n <div\n ref=\"bubbleListContainer\"\n class=\"bubble-list\"\n >\n <BubbleList\n ref=\"bubbleList\"\n list={this.list}\n btnLoading={this.btnLoading}\n maxHeight={this.maxHeight}\n >\n {{\n header: ({ item }: { item: MessageItem }) => {\n if (!item.files?.length) {\n return null;\n }\n return (\n <div class=\"bubble-item-header\">\n {\n item.files.map((item) => (\n <FilesCard\n name={item.name}\n status=\"done\"\n />\n ))\n }\n </div>\n )\n },\n content: ({ item }: { item: MessageItem }) => (\n <XMarkdown\n key={item.id}\n typing={item.typing as boolean}\n speed={this.speed}\n text={item.content}\n historyInputs={item.historyInputs}\n isHistoryMessage={item.isHistoryMessage}\n autoHideThinking={this.autoHideThinking}\n onHoverActiveRefTrigger={this.hoverActiveRefTrigger}\n onClickActiveRefTrigger={this.clickActiveRefTrigger}\n onRefConfigUpdate={(refList) => this.lastRefConfigUpdate(refList, item)}\n onDownloadFile={this.onDownloadFile}\n onCoreSubmit={(payload) => this.coreSubmit(payload, item)}\n />\n ),\n footer: ({ item }: { item: MessageItem }) => {\n if (item.role === 'ai') {\n return (\n <div>\n {\n this.getActionBar(item)\n }\n {\n this.getQuestions(item)\n }\n </div>\n )\n }\n return null;\n }\n }}\n </BubbleList>\n </div>\n );\n }\n});"],"names":["props","list","type","Array","default","btnLoading","Boolean","maxHeight","String","autoHideThinking","speed","Number","disLikeFeedbackList","undefined","likeFeedbackList","expose","emits","setup","emit","bubbleList","useTemplateRef","bubbleListContainer","showLastBubbleFooter","ref","curActiveItem","destoryObserver","watch","value","newVal","oldVal","refContainer","querySelector","curRefList","JSON","parse","textContent","length","console","log","nextTick","scrollTrigger","hoverActiveRefTrigger","item","clickActiveRefTrigger","showLastActionGroup","hideLastActionGroup","clickAction","content","cancel","message","scrollToBottom","lastRefConfigUpdate","refList","getQuestions","questions","_createVNode","map","question","index","onClick","questionClick","q","isLastItem","getActionBar","showActions","isLast","ActionBar","onDownloadFile","payload","messageItems","querySelectorAll","observer","IntersectionObserver","entries","forEach","entry","isIntersecting","itemBottom","boundingClientRect","bottom","height","target","clientHeight","listBottom","getBoundingClientRect","Math","abs","root","threshold","observe","disconnect","coreSubmit","onMounted","render","BubbleList","header","files","FilesCard","name","XMarkdown","id","typing","historyInputs","isHistoryMessage","footer","role"],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { defineComponent, createVNode, ref, computed } from "vue";
|
|
2
|
+
import { ElCard } from "element-plus";
|
|
3
|
+
/* empty css */
|
|
4
|
+
/* empty css */
|
|
5
|
+
/* empty css */
|
|
6
|
+
const CoreCard = /* @__PURE__ */ defineComponent({
|
|
7
|
+
name: "CoreCard",
|
|
8
|
+
props: {
|
|
9
|
+
header: {
|
|
10
|
+
type: String,
|
|
11
|
+
default: ""
|
|
12
|
+
},
|
|
13
|
+
shadow: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: "always"
|
|
16
|
+
},
|
|
17
|
+
collapsible: {
|
|
18
|
+
type: Boolean,
|
|
19
|
+
default: true
|
|
20
|
+
},
|
|
21
|
+
defaultCollapsed: {
|
|
22
|
+
type: Boolean,
|
|
23
|
+
default: false
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
setup(props, {
|
|
27
|
+
slots
|
|
28
|
+
}) {
|
|
29
|
+
const isCollapsed = ref(props.defaultCollapsed);
|
|
30
|
+
const toggleCollapse = () => {
|
|
31
|
+
if (props.collapsible) {
|
|
32
|
+
isCollapsed.value = !isCollapsed.value;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const collapseIconClass = computed(() => {
|
|
36
|
+
return isCollapsed.value ? "core-card__collapse-icon--collapsed" : "core-card__collapse-icon--expanded";
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
isCollapsed,
|
|
40
|
+
toggleCollapse,
|
|
41
|
+
collapseIconClass
|
|
42
|
+
};
|
|
43
|
+
},
|
|
44
|
+
render() {
|
|
45
|
+
const hasHeader = this.header || this.$slots.header;
|
|
46
|
+
return createVNode(ElCard, {
|
|
47
|
+
"class": "core-card",
|
|
48
|
+
"shadow": this.shadow
|
|
49
|
+
}, {
|
|
50
|
+
header: hasHeader ? () => createVNode("div", {
|
|
51
|
+
"class": "core-card__header",
|
|
52
|
+
"onClick": this.toggleCollapse,
|
|
53
|
+
"style": this.collapsible ? {
|
|
54
|
+
cursor: "pointer"
|
|
55
|
+
} : {}
|
|
56
|
+
}, [createVNode("span", {
|
|
57
|
+
"class": "core-card__header-text"
|
|
58
|
+
}, [this.$slots.header ? this.$slots.header() : this.header]), this.collapsible && createVNode("i", {
|
|
59
|
+
"class": `core-card__collapse-icon ${this.collapseIconClass}`
|
|
60
|
+
}, null)]) : void 0,
|
|
61
|
+
default: () => {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
return createVNode("div", {
|
|
64
|
+
"class": {
|
|
65
|
+
"core-card__body": true,
|
|
66
|
+
"core-card__body--collapsed": this.isCollapsed
|
|
67
|
+
}
|
|
68
|
+
}, [(_b = (_a = this.$slots).default) == null ? void 0 : _b.call(_a)]);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
export {
|
|
74
|
+
CoreCard as default
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/core-card/index.tsx"],"sourcesContent":["import { defineComponent, ref, PropType, computed } from 'vue';\nimport { ElCard } from 'element-plus';\nimport './style.less';\n\nexport default defineComponent({\n name: 'CoreCard',\n props: {\n header: {\n type: String,\n default: '',\n },\n shadow: {\n type: String as PropType<'always' | 'never' | 'hover'>,\n default: 'always',\n },\n collapsible: {\n type: Boolean,\n default: true,\n },\n defaultCollapsed: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots }) {\n const isCollapsed = ref(props.defaultCollapsed);\n\n const toggleCollapse = () => {\n if (props.collapsible) {\n isCollapsed.value = !isCollapsed.value;\n }\n };\n\n const collapseIconClass = computed(() => {\n return isCollapsed.value ? 'core-card__collapse-icon--collapsed' : 'core-card__collapse-icon--expanded';\n });\n\n return {\n isCollapsed,\n toggleCollapse,\n collapseIconClass,\n };\n },\n render() {\n const hasHeader = this.header || this.$slots.header;\n \n return (\n <ElCard\n class=\"core-card\"\n shadow={this.shadow}\n >\n {{\n header: hasHeader ? () => (\n <div \n class=\"core-card__header\" \n onClick={this.toggleCollapse}\n style={this.collapsible ? { cursor: 'pointer' } : {}}\n >\n <span class=\"core-card__header-text\">\n {this.$slots.header ? this.$slots.header() : this.header}\n </span>\n {this.collapsible && (\n <i class={`core-card__collapse-icon ${this.collapseIconClass}`}></i>\n )}\n </div>\n ) : undefined,\n default: () => (\n <div\n class={{\n 'core-card__body': true,\n 'core-card__body--collapsed': this.isCollapsed,\n }}\n >\n {this.$slots.default?.()}\n </div>\n ),\n }}\n </ElCard>\n );\n },\n});\n\n"],"names":["name","props","header","type","String","default","shadow","collapsible","Boolean","defaultCollapsed","setup","slots","isCollapsed","ref","toggleCollapse","value","collapseIconClass","computed","render","hasHeader","$slots","_createVNode","ElCard","cursor","undefined"],"mappings":";;;;;AAIA,MAAA,2CAA+B;AAAA,EAC7BA,MAAM;AAAA,EACNC,OAAO;AAAA,IACLC,QAAQ;AAAA,MACNC,MAAMC;AAAAA,MACNC,SAAS;AAAA;IAEXC,QAAQ;AAAA,MACNH,MAAMC;AAAAA,MACNC,SAAS;AAAA;IAEXE,aAAa;AAAA,MACXJ,MAAMK;AAAAA,MACNH,SAAS;AAAA;IAEXI,kBAAkB;AAAA,MAChBN,MAAMK;AAAAA,MACNH,SAAS;AAAA,IACX;AAAA;EAEFK,MAAMT,OAAO;AAAA,IAAEU;AAAAA,EAAM,GAAG;AACtB,UAAMC,cAAcC,IAAIZ,MAAMQ,gBAAgB;AAE9C,UAAMK,iBAAiBA,MAAM;AAC3B,UAAIb,MAAMM,aAAa;AACrBK,oBAAYG,QAAQ,CAACH,YAAYG;AAAAA,MACnC;AAAA,IACF;AAEA,UAAMC,oBAAoBC,SAAS,MAAM;AACvC,aAAOL,YAAYG,QAAQ,wCAAwC;AAAA,IACrE,CAAC;AAED,WAAO;AAAA,MACLH;AAAAA,MACAE;AAAAA,MACAE;AAAAA;EAEJ;AAAA,EACAE,SAAS;AACP,UAAMC,YAAY,KAAKjB,UAAU,KAAKkB,OAAOlB;AAE7C,WAAAmB,YAAAC,QAAA;AAAA,MAAA,SAAA;AAAA,MAAA,UAGY,KAAKhB;AAAAA,IAAM,GAAA;AAAA,MAGjBJ,QAAQiB,YAAY,MAAAE,YAAA,OAAA;AAAA,QAAA,SAAA;AAAA,QAAA,WAGP,KAAKP;AAAAA,QAAc,SACrB,KAAKP,cAAc;AAAA,UAAEgB,QAAQ;AAAA,QAAU,IAAI,CAAA;AAAA,MAAE,GAAA,CAAAF,YAAA,QAAA;AAAA,QAAA,SAAA;AAAA,SAAA,CAGjD,KAAKD,OAAOlB,SAAS,KAAKkB,OAAOlB,OAAM,IAAK,KAAKA,MAAM,IAEzD,KAAKK,eAAWc,YAAA,KAAA;AAAA,QAAA,SACL,4BAA4B,KAAKL,iBAAiB;AAAA,SAAE,IAAA,CAC/D,CAAA,IAEDQ;AAAAA,MACJnB,SAASA,MAAAA;;AAAAgB,2BAAA,OAAA;AAAA,UAAA,SAEE;AAAA,YACL,mBAAmB;AAAA,YACnB,8BAA8B,KAAKT;AAAAA,UACrC;AAAA,QAAC,GAAA,EAEA,gBAAKQ,QAAOf,YAAZ,2BAAuB,CAAA;AAAA;AAAA,IAE3B,CAAA;AAAA,EAIT;AACF,CAAC;"}
|
|
@@ -92,16 +92,27 @@ const index = /* @__PURE__ */ defineComponent({
|
|
|
92
92
|
id: "BNC",
|
|
93
93
|
name: "BNC"
|
|
94
94
|
}]
|
|
95
|
+
},
|
|
96
|
+
scene: {
|
|
97
|
+
type: String,
|
|
98
|
+
default: void 0
|
|
95
99
|
}
|
|
96
100
|
},
|
|
97
|
-
emits: ["cancel", "submit", "sceneChange"],
|
|
101
|
+
emits: ["cancel", "submit", "sceneChange", "update:scene"],
|
|
98
102
|
setup(props, {
|
|
99
103
|
emit
|
|
100
104
|
}) {
|
|
101
105
|
const editorSender = useTemplateRef("editorSender");
|
|
102
106
|
const editorSenderWrapper = useTemplateRef("editorSenderWrapper");
|
|
103
107
|
const fileUpload = useTemplateRef("fileUpload");
|
|
104
|
-
const
|
|
108
|
+
const getInitialScene = () => {
|
|
109
|
+
if (props.scene) {
|
|
110
|
+
const found = props.sceneList.find((item) => item.id === props.scene);
|
|
111
|
+
if (found) return found;
|
|
112
|
+
}
|
|
113
|
+
return props.sceneList[0];
|
|
114
|
+
};
|
|
115
|
+
const activeScene = ref(getInitialScene());
|
|
105
116
|
const isEmpty = ref(true);
|
|
106
117
|
const fileList = ref([]);
|
|
107
118
|
const activeTag = ref(props.tagList[0]);
|
|
@@ -121,8 +132,23 @@ const index = /* @__PURE__ */ defineComponent({
|
|
|
121
132
|
(_b = editorSender.value) == null ? void 0 : _b.setText(val);
|
|
122
133
|
});
|
|
123
134
|
});
|
|
135
|
+
watch(() => props.scene, (val) => {
|
|
136
|
+
if (val) {
|
|
137
|
+
const found = props.sceneList.find((item) => item.id === val);
|
|
138
|
+
if (found) {
|
|
139
|
+
activeScene.value = found;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
});
|
|
124
143
|
watch(() => props.sceneList, (val) => {
|
|
125
144
|
if (val.length > 0) {
|
|
145
|
+
if (props.scene) {
|
|
146
|
+
const found = val.find((item) => item.id === props.scene);
|
|
147
|
+
if (found) {
|
|
148
|
+
activeScene.value = found;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
126
152
|
activeScene.value = val[0];
|
|
127
153
|
}
|
|
128
154
|
}, {
|
|
@@ -245,6 +271,7 @@ const index = /* @__PURE__ */ defineComponent({
|
|
|
245
271
|
const triggerSceneChange = (scene) => {
|
|
246
272
|
activeScene.value = scene;
|
|
247
273
|
emit("sceneChange", scene);
|
|
274
|
+
emit("update:scene", scene.id);
|
|
248
275
|
};
|
|
249
276
|
const getSlots = () => {
|
|
250
277
|
const slots = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/editor-sender/index.tsx"],"sourcesContent":["import { defineComponent, ref, computed, useTemplateRef, watch, nextTick } from 'vue';\nimport { FilesCard } from 'vue-element-plus-x';\nimport EditorSender from './source/index.vue';\nimport { Paperclip } from '@element-plus/icons-vue'\nimport { ElIcon, ElUpload, ElNotification, UploadFiles, ElButton, ElTag } from 'element-plus'\nimport LoadingBtn from './LoadingButton/index.vue'\n\nimport './style/index.less'\nimport { SubmitResult, TagInfo } from 'vue-element-plus-x/types/EditorSender';\nimport { FilesCardProps } from 'vue-element-plus-x/types/FilesCard';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n actionUrl: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n acceptFileType: {\n type: String,\n default: '.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg'\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n agentName: {\n type: String,\n default: '知识问答智能体',\n },\n limit: {\n type: Number,\n default: 5,\n },\n customStyle: {\n type: Object,\n default: () => ({\n maxHeight: '75px'\n }),\n },\n inputData: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '请尝试输入任务、问题或想法,我会帮你搞定',\n },\n tagList: {\n type: Array<TagInfo>,\n default: () => ([\n {\n id: '1',\n name: '问产品',\n },\n {\n id: '2',\n name: '问品类',\n },\n {\n id: '3',\n name: '问品牌',\n },\n {\n id: '4',\n name: '找物料',\n },\n {\n id: '5',\n name: '问知识',\n },\n {\n id: '6',\n name: '遇客诉',\n }\n ])\n },\n sceneList: {\n type: Array<{\n id: string,\n name: string,\n }>,\n default: () => ([\n {\n id: 'ANC',\n name: 'ANC',\n },\n {\n id: 'BNC',\n name: 'BNC',\n },\n ])\n },\n },\n emits: ['cancel', 'submit', 'sceneChange'],\n setup(props, { emit }) {\n const editorSender = useTemplateRef<typeof EditorSender>('editorSender');\n const editorSenderWrapper = useTemplateRef<HTMLElement>('editorSenderWrapper');\n const fileUpload = useTemplateRef<typeof ElUpload>('fileUpload');\n const activeScene = ref(props.sceneList[0]);\n\n const isEmpty = ref(true);\n const fileList = ref<UploadFiles>([]);\n const activeTag = ref(props.tagList[0]);\n\n watch(() => props.agentName, (val) => {\n nextTick(() => {\n const target = editorSenderWrapper.value?.querySelector('.el-editor-sender-chat-room');\n target?.setAttribute('datatype', val)\n })\n }, {\n immediate: true\n });\n\n watch(() => props.inputData, (val) => {\n nextTick(() => {\n editorSender.value?.clear() as SubmitResult;\n editorSender.value?.setText(val)\n })\n })\n\n watch(() => props.sceneList, (val) => {\n if (val.length > 0) {\n activeScene.value = val[0];\n }\n }, {\n immediate: true\n });\n\n const cancelHandler = () => {\n emit('cancel')\n }\n\n const initSender = () => {\n editorSender.value?.clear() as SubmitResult;\n fileList.value = [];\n fileUpload.value?.clearFiles();\n }\n\n const submitHandler = (val: SubmitResult) => {\n if (isEmpty.value || props.loading) return;\n const res = {\n text: val.text,\n file: fileList.value.map((item) => item.response)\n }\n emit('submit', res)\n initSender()\n }\n\n const changeHandler = () => {\n isEmpty.value = editorSender.value?.chatState?.isEmpty;\n }\n\n const handleUploadError = () => {\n ElNotification({\n title: '',\n message: '上传文件失败',\n type: 'error',\n })\n }\n\n const handleUploadSuccess = (response, file, list: UploadFiles) => {\n fileList.value = list;\n }\n\n const isValidMimeType = (mimeType: string) => {\n // 包含所有有效MIME类型的集合\n const validTypes = new Set([\n 'text/plain',\n 'text/markdown', // 非标准但常见的markdown类型\n 'application/pdf',\n 'text/html',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/csv',\n 'message/rfc822',\n 'application/vnd.ms-outlook',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.ms-powerpoint',\n 'application/xml',\n 'text/xml',\n 'application/epub+zip',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml'\n ]);\n\n // 去除可能的空格并转为小写后检查\n return validTypes.has(mimeType?.trim().toLowerCase());\n }\n\n const handleUploadBefore = (file: File) => {\n if (!isValidMimeType(file.type)) {\n ElNotification({\n title: '',\n message: '无法解析上传',\n type: 'warning',\n })\n return false;\n }\n const isImg = file.type.includes('image');\n const isDoc = !isImg;\n const isLt15M = file.size / 1024 / 1024 < 15;\n const isLt10M = file.size / 1024 / 1024 < 10;\n if (isDoc && !isLt15M) {\n ElNotification({\n title: '',\n message: '上传文档大小不能超过 15MB!',\n type: 'warning',\n })\n return false;\n }\n if (isImg && !isLt10M) {\n ElNotification({\n title: '',\n message: '上传图片大小不能超过 10MB!',\n type: 'warning',\n })\n return false;\n }\n return true;\n }\n\n const handleUploadExceed = () => {\n ElNotification({\n title: '',\n message: `最多上传5个文件`,\n type: 'warning',\n })\n }\n\n // 删除文件\n const removeFile = ({ name }: FilesCardProps) => {\n const target = fileList.value.find((item) => item.name === name);\n if (target) {\n fileUpload.value?.handleRemove(target);\n }\n }\n\n const handleUploadRemove = (file, files) => {\n fileList.value = files;\n }\n\n const submitBtnClick = () => {\n const context = editorSender.value?.getCurrentValue() as SubmitResult;\n submitHandler(context);\n }\n\n const triggerSceneChange = (scene: {\n id: string,\n name: string,\n }) => {\n activeScene.value = scene;\n emit('sceneChange', scene);\n }\n\n const getSlots = () => {\n const slots = {\n 'action-list': () => (\n <div class=\"sender-action-wrapper\">\n <div class=\"sender-action-left\">\n <ElUpload\n ref=\"fileUpload\"\n disabled={fileList.value.length > 5}\n action={props.actionUrl}\n show-file-list={false}\n multiple\n limit={props.limit - fileList.value.length}\n data={props.extendData}\n beforeUpload={handleUploadBefore}\n headers={props.headers}\n onError={handleUploadError}\n onSuccess={handleUploadSuccess}\n onExceed={handleUploadExceed}\n onRemove={handleUploadRemove}\n accept={props.acceptFileType}\n >\n <ElIcon\n class=\"sender-file-icon\"\n >\n <Paperclip />\n </ElIcon>\n </ElUpload>\n {\n props.sceneList.length > 0 ? (\n <>\n <div class=\"split-line\"></div>\n <div class=\"scene-list\">\n {\n props.sceneList.map((item) => (\n <span \n class={activeScene.value.id === item.id ? 'scene-item active' : 'scene-item'}\n onClick={() => triggerSceneChange(item)}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </>\n ) : null\n }\n </div>\n {\n props.loading ?\n <LoadingBtn\n class='sender-cancel'\n onCancel={cancelHandler}\n /> :\n <div\n class={{ 'sender-btn': true, 'active': !isEmpty.value }}\n onClick={submitBtnClick}\n >\n </div>\n }\n </div>\n ),\n }\n if (fileList.value.length > 0 || props.tagList.length > 0) {\n slots['header'] = () => {\n return (\n <div class=\"sender-header-wrapper\">\n <div\n class=\"sender-file-list\"\n >\n {\n fileList.value.map((item) => (\n <FilesCard\n name={item.name}\n show-del-icon\n status=\"done\"\n onDelete={removeFile}\n />\n ))\n }\n </div>\n <div class=\"tag-list-wrapper\">\n {\n props.tagList.map((item) => (\n <span\n class={activeTag.value.id === item.id ? 'tag-item active' : 'tag-item'}\n onClick={() => {\n activeTag.value = item;\n }}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </div>\n )\n }\n }\n\n return slots;\n }\n\n return {\n isEmpty,\n fileList,\n activeTag,\n cancelHandler,\n submitHandler,\n changeHandler,\n handleUploadError,\n handleUploadSuccess,\n handleUploadBefore,\n handleUploadExceed,\n removeFile,\n handleUploadRemove,\n submitBtnClick,\n getSlots,\n };\n },\n\n render() {\n return (\n <div\n class=\"editor-sender-wrapper\"\n ref=\"editorSenderWrapper\"\n >\n <EditorSender\n ref=\"editorSender\"\n variant=\"updown\"\n loading={this.loading}\n placeholder={this.placeholder}\n activeTag={this.activeTag}\n onSubmit={this.submitHandler}\n onCancel={this.cancelHandler}\n onChange={this.changeHandler}\n custom-style={this.customStyle}\n >\n {\n this.getSlots()\n }\n\n </EditorSender>\n </div>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","props","loading","type","Boolean","default","actionUrl","String","extendData","acceptFileType","headers","Authorization","appId","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","activeScene","ref","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","initSender","clearFiles","submitHandler","res","text","file","map","item","response","changeHandler","chatState","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","isValidMimeType","mimeType","validTypes","Set","has","trim","toLowerCase","handleUploadBefore","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","find","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","triggerSceneChange","scene","getSlots","slots","action-list","_createVNode","ElUpload","ElIcon","Paperclip","_Fragment","onClick","LoadingBtn","FilesCard","render","_slot","EditorSender"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/editor-sender/index.tsx"],"sourcesContent":["import { defineComponent, ref, computed, useTemplateRef, watch, nextTick } from 'vue';\nimport { FilesCard } from 'vue-element-plus-x';\nimport EditorSender from './source/index.vue';\nimport { Paperclip } from '@element-plus/icons-vue'\nimport { ElIcon, ElUpload, ElNotification, UploadFiles, ElButton, ElTag } from 'element-plus'\nimport LoadingBtn from './LoadingButton/index.vue'\n\nimport './style/index.less'\nimport { SubmitResult, TagInfo } from 'vue-element-plus-x/types/EditorSender';\nimport { FilesCardProps } from 'vue-element-plus-x/types/FilesCard';\n\nexport default defineComponent({\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n actionUrl: {\n type: String,\n default: '/openapi/v1/app/files/upload',\n },\n extendData: {\n type: Object,\n default: () => ({\n \"user\": \"abc-123\",\n }),\n },\n acceptFileType: {\n type: String,\n default: '.txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg'\n },\n headers: {\n type: Object,\n default: () => ({\n Authorization: 'Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf',\n appId: '9a673565-d4f6-4382-bc67-f1beb07df435'\n }),\n },\n agentName: {\n type: String,\n default: '知识问答智能体',\n },\n limit: {\n type: Number,\n default: 5,\n },\n customStyle: {\n type: Object,\n default: () => ({\n maxHeight: '75px'\n }),\n },\n inputData: {\n type: String,\n default: '',\n },\n placeholder: {\n type: String,\n default: '请尝试输入任务、问题或想法,我会帮你搞定',\n },\n tagList: {\n type: Array<TagInfo>,\n default: () => ([\n {\n id: '1',\n name: '问产品',\n },\n {\n id: '2',\n name: '问品类',\n },\n {\n id: '3',\n name: '问品牌',\n },\n {\n id: '4',\n name: '找物料',\n },\n {\n id: '5',\n name: '问知识',\n },\n {\n id: '6',\n name: '遇客诉',\n }\n ])\n },\n sceneList: {\n type: Array<{\n id: string,\n name: string,\n }>,\n default: () => ([\n {\n id: 'ANC',\n name: 'ANC',\n },\n {\n id: 'BNC',\n name: 'BNC',\n },\n ])\n },\n scene: {\n type: String,\n default: undefined,\n },\n },\n emits: ['cancel', 'submit', 'sceneChange', 'update:scene'],\n setup(props, { emit }) {\n const editorSender = useTemplateRef<typeof EditorSender>('editorSender');\n const editorSenderWrapper = useTemplateRef<HTMLElement>('editorSenderWrapper');\n const fileUpload = useTemplateRef<typeof ElUpload>('fileUpload');\n \n // 初始化 activeScene:优先使用传入的 scene prop,否则使用 sceneList 的第一个\n const getInitialScene = () => {\n if (props.scene) {\n const found = props.sceneList.find(item => item.id === props.scene);\n if (found) return found;\n }\n return props.sceneList[0];\n };\n const activeScene = ref(getInitialScene());\n\n const isEmpty = ref(true);\n const fileList = ref<UploadFiles>([]);\n const activeTag = ref(props.tagList[0]);\n\n watch(() => props.agentName, (val) => {\n nextTick(() => {\n const target = editorSenderWrapper.value?.querySelector('.el-editor-sender-chat-room');\n target?.setAttribute('datatype', val)\n })\n }, {\n immediate: true\n });\n\n watch(() => props.inputData, (val) => {\n nextTick(() => {\n editorSender.value?.clear() as SubmitResult;\n editorSender.value?.setText(val)\n })\n })\n\n // 监听外部传入的 scene prop 变化\n watch(() => props.scene, (val) => {\n if (val) {\n const found = props.sceneList.find(item => item.id === val);\n if (found) {\n activeScene.value = found;\n }\n }\n });\n\n watch(() => props.sceneList, (val) => {\n if (val.length > 0) {\n // 如果当前 scene prop 存在,优先使用它;否则使用第一个\n if (props.scene) {\n const found = val.find(item => item.id === props.scene);\n if (found) {\n activeScene.value = found;\n return;\n }\n }\n activeScene.value = val[0];\n }\n }, {\n immediate: true\n });\n\n const cancelHandler = () => {\n emit('cancel')\n }\n\n const initSender = () => {\n editorSender.value?.clear() as SubmitResult;\n fileList.value = [];\n fileUpload.value?.clearFiles();\n }\n\n const submitHandler = (val: SubmitResult) => {\n if (isEmpty.value || props.loading) return;\n const res = {\n text: val.text,\n file: fileList.value.map((item) => item.response)\n }\n emit('submit', res)\n initSender()\n }\n\n const changeHandler = () => {\n isEmpty.value = editorSender.value?.chatState?.isEmpty;\n }\n\n const handleUploadError = () => {\n ElNotification({\n title: '',\n message: '上传文件失败',\n type: 'error',\n })\n }\n\n const handleUploadSuccess = (response, file, list: UploadFiles) => {\n fileList.value = list;\n }\n\n const isValidMimeType = (mimeType: string) => {\n // 包含所有有效MIME类型的集合\n const validTypes = new Set([\n 'text/plain',\n 'text/markdown', // 非标准但常见的markdown类型\n 'application/pdf',\n 'text/html',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-excel',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'text/csv',\n 'message/rfc822',\n 'application/vnd.ms-outlook',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n 'application/vnd.ms-powerpoint',\n 'application/xml',\n 'text/xml',\n 'application/epub+zip',\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml'\n ]);\n\n // 去除可能的空格并转为小写后检查\n return validTypes.has(mimeType?.trim().toLowerCase());\n }\n\n const handleUploadBefore = (file: File) => {\n if (!isValidMimeType(file.type)) {\n ElNotification({\n title: '',\n message: '无法解析上传',\n type: 'warning',\n })\n return false;\n }\n const isImg = file.type.includes('image');\n const isDoc = !isImg;\n const isLt15M = file.size / 1024 / 1024 < 15;\n const isLt10M = file.size / 1024 / 1024 < 10;\n if (isDoc && !isLt15M) {\n ElNotification({\n title: '',\n message: '上传文档大小不能超过 15MB!',\n type: 'warning',\n })\n return false;\n }\n if (isImg && !isLt10M) {\n ElNotification({\n title: '',\n message: '上传图片大小不能超过 10MB!',\n type: 'warning',\n })\n return false;\n }\n return true;\n }\n\n const handleUploadExceed = () => {\n ElNotification({\n title: '',\n message: `最多上传5个文件`,\n type: 'warning',\n })\n }\n\n // 删除文件\n const removeFile = ({ name }: FilesCardProps) => {\n const target = fileList.value.find((item) => item.name === name);\n if (target) {\n fileUpload.value?.handleRemove(target);\n }\n }\n\n const handleUploadRemove = (file, files) => {\n fileList.value = files;\n }\n\n const submitBtnClick = () => {\n const context = editorSender.value?.getCurrentValue() as SubmitResult;\n submitHandler(context);\n }\n\n const triggerSceneChange = (scene: {\n id: string,\n name: string,\n }) => {\n activeScene.value = scene;\n emit('sceneChange', scene);\n emit('update:scene', scene.id);\n }\n\n const getSlots = () => {\n const slots = {\n 'action-list': () => (\n <div class=\"sender-action-wrapper\">\n <div class=\"sender-action-left\">\n <ElUpload\n ref=\"fileUpload\"\n disabled={fileList.value.length > 5}\n action={props.actionUrl}\n show-file-list={false}\n multiple\n limit={props.limit - fileList.value.length}\n data={props.extendData}\n beforeUpload={handleUploadBefore}\n headers={props.headers}\n onError={handleUploadError}\n onSuccess={handleUploadSuccess}\n onExceed={handleUploadExceed}\n onRemove={handleUploadRemove}\n accept={props.acceptFileType}\n >\n <ElIcon\n class=\"sender-file-icon\"\n >\n <Paperclip />\n </ElIcon>\n </ElUpload>\n {\n props.sceneList.length > 0 ? (\n <>\n <div class=\"split-line\"></div>\n <div class=\"scene-list\">\n {\n props.sceneList.map((item) => (\n <span \n class={activeScene.value.id === item.id ? 'scene-item active' : 'scene-item'}\n onClick={() => triggerSceneChange(item)}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </>\n ) : null\n }\n </div>\n {\n props.loading ?\n <LoadingBtn\n class='sender-cancel'\n onCancel={cancelHandler}\n /> :\n <div\n class={{ 'sender-btn': true, 'active': !isEmpty.value }}\n onClick={submitBtnClick}\n >\n </div>\n }\n </div>\n ),\n }\n if (fileList.value.length > 0 || props.tagList.length > 0) {\n slots['header'] = () => {\n return (\n <div class=\"sender-header-wrapper\">\n <div\n class=\"sender-file-list\"\n >\n {\n fileList.value.map((item) => (\n <FilesCard\n name={item.name}\n show-del-icon\n status=\"done\"\n onDelete={removeFile}\n />\n ))\n }\n </div>\n <div class=\"tag-list-wrapper\">\n {\n props.tagList.map((item) => (\n <span\n class={activeTag.value.id === item.id ? 'tag-item active' : 'tag-item'}\n onClick={() => {\n activeTag.value = item;\n }}\n >\n {item.name}\n </span>\n ))\n }\n </div>\n </div>\n )\n }\n }\n\n return slots;\n }\n\n return {\n isEmpty,\n fileList,\n activeTag,\n cancelHandler,\n submitHandler,\n changeHandler,\n handleUploadError,\n handleUploadSuccess,\n handleUploadBefore,\n handleUploadExceed,\n removeFile,\n handleUploadRemove,\n submitBtnClick,\n getSlots,\n };\n },\n\n render() {\n return (\n <div\n class=\"editor-sender-wrapper\"\n ref=\"editorSenderWrapper\"\n >\n <EditorSender\n ref=\"editorSender\"\n variant=\"updown\"\n loading={this.loading}\n placeholder={this.placeholder}\n activeTag={this.activeTag}\n onSubmit={this.submitHandler}\n onCancel={this.cancelHandler}\n onChange={this.changeHandler}\n custom-style={this.customStyle}\n >\n {\n this.getSlots()\n }\n\n </EditorSender>\n </div>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","props","loading","type","Boolean","default","actionUrl","String","extendData","acceptFileType","headers","Authorization","appId","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","scene","undefined","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","getInitialScene","found","find","item","activeScene","ref","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","initSender","clearFiles","submitHandler","res","text","file","map","response","changeHandler","chatState","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","isValidMimeType","mimeType","validTypes","Set","has","trim","toLowerCase","handleUploadBefore","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","triggerSceneChange","getSlots","slots","action-list","_createVNode","ElUpload","ElIcon","Paperclip","_Fragment","onClick","LoadingBtn","FilesCard","render","_slot","EditorSender"],"mappings":"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"}
|
|
@@ -8,8 +8,10 @@ import { default as default8 } from "./core-tips/index.js";
|
|
|
8
8
|
import { default as default9 } from "./core-result/index.js";
|
|
9
9
|
import { default as default10 } from "./core-table/index.js";
|
|
10
10
|
import { default as default11 } from "./core-chart/index.js";
|
|
11
|
+
import { default as default12 } from "./core-card/index.js";
|
|
11
12
|
export {
|
|
12
13
|
default2 as BubbleList,
|
|
14
|
+
default12 as CoreCard,
|
|
13
15
|
default11 as CoreChart,
|
|
14
16
|
default9 as CoreResult,
|
|
15
17
|
default10 as CoreTable,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
|
|
@@ -36,6 +36,7 @@ import CoreTips from "../core-tips/index.js";
|
|
|
36
36
|
import CoreResult from "../core-result/index.js";
|
|
37
37
|
import CoreTable from "../core-table/index.js";
|
|
38
38
|
import CoreChart from "../core-chart/index.js";
|
|
39
|
+
import CoreCard from "../core-card/index.js";
|
|
39
40
|
/* empty css */
|
|
40
41
|
import zhCn from "../../node_modules/.pnpm/element-plus@2.11.8_vue@3.5.24_typescript@5.6.3_/node_modules/element-plus/es/locale/lang/zh-cn.js";
|
|
41
42
|
import { unified } from "../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js";
|
|
@@ -62,6 +63,22 @@ const checkAndReturnRefList = (text) => {
|
|
|
62
63
|
return [];
|
|
63
64
|
}
|
|
64
65
|
};
|
|
66
|
+
const isCompleteJSON = (jsonStr) => {
|
|
67
|
+
if (!jsonStr || jsonStr.trim().length === 0) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
const trimmed = jsonStr.trim();
|
|
71
|
+
const firstChar = trimmed[0];
|
|
72
|
+
if (firstChar !== "{" && firstChar !== "[") {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
JSON.parse(trimmed);
|
|
77
|
+
return true;
|
|
78
|
+
} catch (error) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
};
|
|
65
82
|
const XMarkdown = /* @__PURE__ */ defineComponent({
|
|
66
83
|
name: "XMarkdown",
|
|
67
84
|
props: {
|
|
@@ -84,6 +101,10 @@ const XMarkdown = /* @__PURE__ */ defineComponent({
|
|
|
84
101
|
isHistoryMessage: {
|
|
85
102
|
type: Boolean,
|
|
86
103
|
default: false
|
|
104
|
+
},
|
|
105
|
+
historyInputs: {
|
|
106
|
+
type: Object,
|
|
107
|
+
default: () => ({})
|
|
87
108
|
}
|
|
88
109
|
},
|
|
89
110
|
expose: ["getContentText"],
|
|
@@ -103,6 +124,7 @@ const XMarkdown = /* @__PURE__ */ defineComponent({
|
|
|
103
124
|
const curIndex = ref(0);
|
|
104
125
|
let curInit = 0;
|
|
105
126
|
const ast = ref(null);
|
|
127
|
+
const isRewrite = ref(false);
|
|
106
128
|
const streamCall = (stream) => {
|
|
107
129
|
context.value = context.value + stream;
|
|
108
130
|
};
|
|
@@ -147,9 +169,22 @@ ${divContent}${divEnd}`;
|
|
|
147
169
|
}
|
|
148
170
|
return content;
|
|
149
171
|
});
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
172
|
+
const checkDisabled = (node) => {
|
|
173
|
+
const {
|
|
174
|
+
properties = {},
|
|
175
|
+
parentScope
|
|
176
|
+
} = node;
|
|
177
|
+
const {
|
|
178
|
+
disabled
|
|
179
|
+
} = properties;
|
|
180
|
+
if (disabled) {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
if (parentScope === "form") {
|
|
184
|
+
return props.isHistoryMessage && !isRewrite.value;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
};
|
|
153
188
|
watch(() => [props.text, props.typing], (v, o) => {
|
|
154
189
|
var _a, _b, _c, _d;
|
|
155
190
|
const [text, typing] = v;
|
|
@@ -256,6 +291,11 @@ ${divContent}${divEnd}`;
|
|
|
256
291
|
curIndex.value -= 1;
|
|
257
292
|
return;
|
|
258
293
|
}
|
|
294
|
+
if (action === "inner_rewrite") {
|
|
295
|
+
isRewrite.value = true;
|
|
296
|
+
console.log("isRewrite", isRewrite.value);
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
259
299
|
let res = {
|
|
260
300
|
action,
|
|
261
301
|
payload: {}
|
|
@@ -275,6 +315,9 @@ ${divContent}${divEnd}`;
|
|
|
275
315
|
}
|
|
276
316
|
};
|
|
277
317
|
}
|
|
318
|
+
if (isRewrite.value && action.startsWith("core_")) {
|
|
319
|
+
isRewrite.value = false;
|
|
320
|
+
}
|
|
278
321
|
emit("coreSubmit", res);
|
|
279
322
|
};
|
|
280
323
|
const handleClick = (e) => {
|
|
@@ -362,7 +405,11 @@ ${divContent}${divEnd}`;
|
|
|
362
405
|
var _a;
|
|
363
406
|
if (!schema || typeof schema !== "object") return;
|
|
364
407
|
if (schema.type === "form") {
|
|
365
|
-
const formData =
|
|
408
|
+
const formData = {
|
|
409
|
+
...((_a = schema.properties) == null ? void 0 : _a.data) || {},
|
|
410
|
+
// FIXME 目前只有卡片里面仅有可能出现单个表单,需要需要支持多表单场景
|
|
411
|
+
...props.historyInputs || {}
|
|
412
|
+
};
|
|
366
413
|
formDataList.push(formData);
|
|
367
414
|
return;
|
|
368
415
|
}
|
|
@@ -424,8 +471,38 @@ ${divContent}${divEnd}`;
|
|
|
424
471
|
}, {
|
|
425
472
|
immediate: true
|
|
426
473
|
});
|
|
474
|
+
const renderSkeleton = () => {
|
|
475
|
+
return h("div", {
|
|
476
|
+
class: "hitl-skeleton"
|
|
477
|
+
}, [
|
|
478
|
+
// 头部骨架
|
|
479
|
+
h("div", {
|
|
480
|
+
class: "skeleton-header"
|
|
481
|
+
}, [h("div", {
|
|
482
|
+
class: "skeleton-avatar"
|
|
483
|
+
}), h("div", {
|
|
484
|
+
class: "skeleton-title"
|
|
485
|
+
})]),
|
|
486
|
+
// 内容骨架
|
|
487
|
+
h("div", {
|
|
488
|
+
class: "skeleton-item skeleton-item-long"
|
|
489
|
+
}),
|
|
490
|
+
h("div", {
|
|
491
|
+
class: "skeleton-item skeleton-item-medium"
|
|
492
|
+
}),
|
|
493
|
+
h("div", {
|
|
494
|
+
class: "skeleton-item skeleton-item-short"
|
|
495
|
+
}),
|
|
496
|
+
h("div", {
|
|
497
|
+
class: "skeleton-item skeleton-item-long"
|
|
498
|
+
}),
|
|
499
|
+
h("div", {
|
|
500
|
+
class: "skeleton-item skeleton-item-medium"
|
|
501
|
+
})
|
|
502
|
+
]);
|
|
503
|
+
};
|
|
427
504
|
const hastToVNode = (node, index, row) => {
|
|
428
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n
|
|
505
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
429
506
|
if (!node) return null;
|
|
430
507
|
let children = [];
|
|
431
508
|
const blackTagNames = ["sub", "pre", "text", "ElForm"];
|
|
@@ -506,6 +583,11 @@ ${divContent}${divEnd}`;
|
|
|
506
583
|
...node.properties
|
|
507
584
|
}, children);
|
|
508
585
|
}
|
|
586
|
+
if (node.tagName === "CoreCard") {
|
|
587
|
+
return h(CoreCard, {
|
|
588
|
+
...node.properties
|
|
589
|
+
}, children);
|
|
590
|
+
}
|
|
509
591
|
if (node.tagName === "ElForm") {
|
|
510
592
|
const children2 = (_d = node.children) == null ? void 0 : _d.map((child) => hastToVNode(child, curInit));
|
|
511
593
|
curInit++;
|
|
@@ -513,7 +595,7 @@ ${divContent}${divEnd}`;
|
|
|
513
595
|
ref: formRefs.value.set,
|
|
514
596
|
model: hitlData.value[index],
|
|
515
597
|
...node.properties,
|
|
516
|
-
disabled: (
|
|
598
|
+
disabled: checkDisabled(node)
|
|
517
599
|
}, children2);
|
|
518
600
|
}
|
|
519
601
|
if (node.tagName === "ElFormItem") {
|
|
@@ -522,13 +604,13 @@ ${divContent}${divEnd}`;
|
|
|
522
604
|
}, children);
|
|
523
605
|
}
|
|
524
606
|
if (node.tagName === "ElButton") {
|
|
525
|
-
let payload = (
|
|
607
|
+
let payload = (_e = node.properties) == null ? void 0 : _e.payload;
|
|
526
608
|
if (node.parentScope === "table") {
|
|
527
609
|
payload = row;
|
|
528
610
|
}
|
|
529
611
|
return h(ElButton, {
|
|
530
612
|
...node.properties,
|
|
531
|
-
disabled: (
|
|
613
|
+
disabled: checkDisabled(node),
|
|
532
614
|
onClick: () => {
|
|
533
615
|
var _a2;
|
|
534
616
|
btnClick(index, (_a2 = node.properties) == null ? void 0 : _a2.action, payload, node.parentScope);
|
|
@@ -538,8 +620,8 @@ ${divContent}${divEnd}`;
|
|
|
538
620
|
if (node.tagName === "ElSelect") {
|
|
539
621
|
return h(ElSelect, {
|
|
540
622
|
...node.properties,
|
|
541
|
-
disabled: (
|
|
542
|
-
modelValue: hitlData.value[index][(
|
|
623
|
+
disabled: checkDisabled(node),
|
|
624
|
+
modelValue: hitlData.value[index][(_f = node.properties) == null ? void 0 : _f.formProp],
|
|
543
625
|
"onUpdate:modelValue": (value) => {
|
|
544
626
|
var _a2;
|
|
545
627
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -549,8 +631,8 @@ ${divContent}${divEnd}`;
|
|
|
549
631
|
if (node.tagName === "ElDatePicker") {
|
|
550
632
|
return h(ElDatePicker, {
|
|
551
633
|
...node.properties,
|
|
552
|
-
disabled: (
|
|
553
|
-
modelValue: hitlData.value[index][(
|
|
634
|
+
disabled: checkDisabled(node),
|
|
635
|
+
modelValue: hitlData.value[index][(_g = node.properties) == null ? void 0 : _g.formProp],
|
|
554
636
|
"onUpdate:modelValue": (value) => {
|
|
555
637
|
var _a2;
|
|
556
638
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -560,8 +642,8 @@ ${divContent}${divEnd}`;
|
|
|
560
642
|
if (node.tagName === "ElInput") {
|
|
561
643
|
return h(ElInput, {
|
|
562
644
|
...node.properties,
|
|
563
|
-
disabled: (
|
|
564
|
-
modelValue: hitlData.value[index][(
|
|
645
|
+
disabled: checkDisabled(node),
|
|
646
|
+
modelValue: hitlData.value[index][(_h = node.properties) == null ? void 0 : _h.formProp],
|
|
565
647
|
"onUpdate:modelValue": (value) => {
|
|
566
648
|
var _a2;
|
|
567
649
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -571,8 +653,8 @@ ${divContent}${divEnd}`;
|
|
|
571
653
|
if (node.tagName === "ElRadioGroup") {
|
|
572
654
|
return h(ElRadioGroup, {
|
|
573
655
|
...node.properties,
|
|
574
|
-
disabled: (
|
|
575
|
-
modelValue: hitlData.value[index][(
|
|
656
|
+
disabled: checkDisabled(node),
|
|
657
|
+
modelValue: hitlData.value[index][(_i = node.properties) == null ? void 0 : _i.formProp],
|
|
576
658
|
"onUpdate:modelValue": (value) => {
|
|
577
659
|
var _a2;
|
|
578
660
|
hitlData.value[index][(_a2 = node.properties) == null ? void 0 : _a2.formProp] = value;
|
|
@@ -582,7 +664,7 @@ ${divContent}${divEnd}`;
|
|
|
582
664
|
if (node.tagName === "ElRadio") {
|
|
583
665
|
return h(ElRadio, {
|
|
584
666
|
...node.properties,
|
|
585
|
-
disabled: (
|
|
667
|
+
disabled: checkDisabled(node)
|
|
586
668
|
}, children);
|
|
587
669
|
}
|
|
588
670
|
if (node.tagName === "ElTable") {
|
|
@@ -629,10 +711,13 @@ ${divContent}${divEnd}`;
|
|
|
629
711
|
});
|
|
630
712
|
}
|
|
631
713
|
if (node.tagName === "pre") {
|
|
632
|
-
const codeNode = (
|
|
714
|
+
const codeNode = (_j = node.children) == null ? void 0 : _j.find((child) => child.tagName === "code");
|
|
633
715
|
if (codeNode) {
|
|
634
|
-
if ((
|
|
635
|
-
const code = ((
|
|
716
|
+
if ((_l = (_k = codeNode.properties) == null ? void 0 : _k.className) == null ? void 0 : _l.includes("language-CorePilot")) {
|
|
717
|
+
const code = ((_n = (_m = codeNode.children) == null ? void 0 : _m[0]) == null ? void 0 : _n.value) || "";
|
|
718
|
+
if (!isCompleteJSON(code)) {
|
|
719
|
+
return renderSkeleton();
|
|
720
|
+
}
|
|
636
721
|
try {
|
|
637
722
|
const schema = JSON.parse(code);
|
|
638
723
|
const viewTree = parseCorePilot(schema);
|
|
@@ -641,7 +726,7 @@ ${divContent}${divEnd}`;
|
|
|
641
726
|
class: "hitl-wrapper"
|
|
642
727
|
}, [children2]);
|
|
643
728
|
} catch (error) {
|
|
644
|
-
return
|
|
729
|
+
return renderSkeleton();
|
|
645
730
|
}
|
|
646
731
|
}
|
|
647
732
|
}
|
|
@@ -661,6 +746,7 @@ ${divContent}${divEnd}`;
|
|
|
661
746
|
ast,
|
|
662
747
|
container,
|
|
663
748
|
renderComplete,
|
|
749
|
+
isRewrite,
|
|
664
750
|
getContentText
|
|
665
751
|
};
|
|
666
752
|
},
|