@core-pilot/client-vue 0.0.6 → 0.0.7

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.
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("vue"),t=require("vue-element-plus-x"),a=require("./source/index.vue.js"),l=require("../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.24_typescript@5.6.3_/node_modules/@element-plus/icons-vue/dist/index.js"),n=require("element-plus");/* empty css *//* empty css *//* empty css */;/* empty css */const i=require("./LoadingButton/index.vue.js");;/* empty css */const s=e.defineComponent({props:{loading:{type:Boolean,default:!1},actionUrl:{type:String,default:"/openapi/v1/app/files/upload"},extendData:{type:Object,default:()=>({user:"abc-123"})},acceptFileType:{type:String,default:".txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg"},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},agentName:{type:String,default:"知识问答智能体"},limit:{type:Number,default:5},customStyle:{type:Object,default:()=>({maxHeight:"75px"})},inputData:{type:String,default:""},placeholder:{type:String,default:"请尝试输入任务、问题或想法,我会帮你搞定"},tagList:{type:Array,default:()=>[{id:"1",name:"问产品"},{id:"2",name:"问品类"},{id:"3",name:"问品牌"},{id:"4",name:"找物料"},{id:"5",name:"问知识"},{id:"6",name:"遇客诉"}]},sceneList:{type:Array,default:()=>[{id:"ANC",name:"ANC"},{id:"BNC",name:"BNC"}]}},emits:["cancel","submit","sceneChange"],setup(a,{emit:s}){const o=e.useTemplateRef("editorSender"),r=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.ref(a.sceneList[0]),p=e.ref(!0),u=e.ref([]),m=e.ref(a.tagList[0]);e.watch(()=>a.agentName,t=>{e.nextTick(()=>{var e;const a=null==(e=r.value)?void 0:e.querySelector(".el-editor-sender-chat-room");null==a||a.setAttribute("datatype",t)})},{immediate:!0}),e.watch(()=>a.inputData,t=>{e.nextTick(()=>{var e,a;null==(e=o.value)||e.clear(),null==(a=o.value)||a.setText(t)})}),e.watch(()=>a.sceneList,e=>{e.length>0&&(c.value=e[0])},{immediate:!0});const v=()=>{s("cancel")},g=e=>{if(p.value||a.loading)return;const t={text:e.text,file:u.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=o.value)||l.clear(),u.value=[],null==(n=d.value)||n.clearFiles()},f=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},h=(e,t,a)=>{u.value=a},y=e=>{if(t=e.type,!new Set(["text/plain","text/markdown","application/pdf","text/html","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv","message/rfc822","application/vnd.ms-outlook","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint","application/xml","text/xml","application/epub+zip","image/jpeg","image/png","image/gif","image/webp","image/svg+xml"]).has(null==t?void 0:t.trim().toLowerCase()))return n.ElNotification({title:"",message:"无法解析上传",type:"warning"}),!1;var t;const a=e.type.includes("image"),l=!a,i=e.size/1024/1024<15,s=e.size/1024/1024<10;return l&&!i?(n.ElNotification({title:"",message:"上传文档大小不能超过 15MB!",type:"warning"}),!1):!(a&&!s)||(n.ElNotification({title:"",message:"上传图片大小不能超过 10MB!",type:"warning"}),!1)},x=()=>{n.ElNotification({title:"",message:"最多上传5个文件",type:"warning"})},N=({name:e})=>{var t;const a=u.value.find(t=>t.name===e);a&&(null==(t=d.value)||t.handleRemove(a))},_=(e,t)=>{u.value=t},b=()=>{var e;const t=null==(e=o.value)?void 0:e.getCurrentValue();g(t)};return{isEmpty:p,fileList:u,activeTag:m,cancelHandler:v,submitHandler:g,changeHandler:()=>{var e,t;p.value=null==(t=null==(e=o.value)?void 0:e.chatState)?void 0:t.isEmpty},handleUploadError:f,handleUploadSuccess:h,handleUploadBefore:y,handleUploadExceed:x,removeFile:N,handleUploadRemove:_,submitBtnClick:b,getSlots:()=>{const o={"action-list":()=>e.createVNode("div",{class:"sender-action-wrapper"},[e.createVNode("div",{class:"sender-action-left"},[e.createVNode(n.ElUpload,{ref:"fileUpload",disabled:u.value.length>5,action:a.actionUrl,"show-file-list":!1,multiple:!0,limit:a.limit-u.value.length,data:a.extendData,beforeUpload:y,headers:a.headers,onError:f,onSuccess:h,onExceed:x,onRemove:_,accept:a.acceptFileType},{default:()=>[e.createVNode(n.ElIcon,{class:"sender-file-icon"},{default:()=>[e.createVNode(l.Paperclip,null,null)]})]}),a.sceneList.length>0?e.createVNode(e.Fragment,null,[e.createVNode("div",{class:"split-line"},null),e.createVNode("div",{class:"scene-list"},[a.sceneList.map(t=>e.createVNode("span",{class:c.value.id===t.id?"scene-item active":"scene-item",onClick:()=>{return e=t,c.value=e,void s("sceneChange",e);var e}},[t.name]))])]):null]),a.loading?e.createVNode(i,{class:"sender-cancel",onCancel:v},null):e.createVNode("div",{class:{"sender-btn":!0,active:!p.value},onClick:b},null)])};return(u.value.length>0||a.tagList.length>0)&&(o.header=()=>e.createVNode("div",{class:"sender-header-wrapper"},[e.createVNode("div",{class:"sender-file-list"},[u.value.map(a=>e.createVNode(t.FilesCard,{name:a.name,"show-del-icon":!0,status:"done",onDelete:N},null))]),e.createVNode("div",{class:"tag-list-wrapper"},[a.tagList.map(t=>e.createVNode("span",{class:m.value.id===t.id?"tag-item active":"tag-item",onClick:()=>{m.value=t}},[t.name]))])])),o}}},render(){let t;return e.createVNode("div",{class:"editor-sender-wrapper",ref:"editorSenderWrapper"},[e.createVNode(a,{ref:"editorSender",variant:"updown",loading:this.loading,placeholder:this.placeholder,activeTag:this.activeTag,onSubmit:this.submitHandler,onCancel:this.cancelHandler,onChange:this.changeHandler,"custom-style":this.customStyle},(l=t=this.getSlots(),"function"==typeof l||"[object Object]"===Object.prototype.toString.call(l)&&!e.isVNode(l)?t:{default:()=>[t]}))]);var l}});module.exports=s;
1
+ "use strict";const e=require("vue"),t=require("vue-element-plus-x"),a=require("./source/index.vue.js"),l=require("../../node_modules/.pnpm/@element-plus_icons-vue@2.3.2_vue@3.5.24_typescript@5.6.3_/node_modules/@element-plus/icons-vue/dist/index.js"),n=require("element-plus");/* empty css *//* empty css *//* empty css */;/* empty css */const i=require("./LoadingButton/index.vue.js");;/* empty css */const s=e.defineComponent({props:{loading:{type:Boolean,default:!1},actionUrl:{type:String,default:"/openapi/v1/app/files/upload"},extendData:{type:Object,default:()=>({user:"abc-123"})},acceptFileType:{type:String,default:".txt,.md,.mdx,.markdown,.pdf,.html,.xlsx,.xls,.doc,.docx,.csv,.eml,.msg,.pptx,.ppt,.xml,.epub,.jpg,.jpeg,.png,.gif,.webp,.svg"},headers:{type:Object,default:()=>({Authorization:"Bearer ApiSecretKey_mEKsrCMvxNLzzUUKeQmpzaUZqwZxFyJf",appId:"9a673565-d4f6-4382-bc67-f1beb07df435"})},agentName:{type:String,default:"知识问答智能体"},limit:{type:Number,default:5},customStyle:{type:Object,default:()=>({maxHeight:"75px"})},inputData:{type:String,default:""},placeholder:{type:String,default:"请尝试输入任务、问题或想法,我会帮你搞定"},tagList:{type:Array,default:()=>[{id:"1",name:"问产品"},{id:"2",name:"问品类"},{id:"3",name:"问品牌"},{id:"4",name:"找物料"},{id:"5",name:"问知识"},{id:"6",name:"遇客诉"}]},sceneList:{type:Array,default:()=>[{id:"ANC",name:"ANC"},{id:"BNC",name:"BNC"}]},scene:{type:String,default:void 0}},emits:["cancel","submit","sceneChange","update:scene"],setup(a,{emit:s}){const r=e.useTemplateRef("editorSender"),o=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.ref((()=>{if(a.scene){const e=a.sceneList.find(e=>e.id===a.scene);if(e)return e}return a.sceneList[0]})()),p=e.ref(!0),u=e.ref([]),m=e.ref(a.tagList[0]);e.watch(()=>a.agentName,t=>{e.nextTick(()=>{var e;const a=null==(e=o.value)?void 0:e.querySelector(".el-editor-sender-chat-room");null==a||a.setAttribute("datatype",t)})},{immediate:!0}),e.watch(()=>a.inputData,t=>{e.nextTick(()=>{var e,a;null==(e=r.value)||e.clear(),null==(a=r.value)||a.setText(t)})}),e.watch(()=>a.scene,e=>{if(e){const t=a.sceneList.find(t=>t.id===e);t&&(c.value=t)}}),e.watch(()=>a.sceneList,e=>{if(e.length>0){if(a.scene){const t=e.find(e=>e.id===a.scene);if(t)return void(c.value=t)}c.value=e[0]}},{immediate:!0});const v=()=>{s("cancel")},f=e=>{if(p.value||a.loading)return;const t={text:e.text,file:u.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=r.value)||l.clear(),u.value=[],null==(n=d.value)||n.clearFiles()},g=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},h=(e,t,a)=>{u.value=a},y=e=>{if(t=e.type,!new Set(["text/plain","text/markdown","application/pdf","text/html","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/csv","message/rfc822","application/vnd.ms-outlook","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.ms-powerpoint","application/xml","text/xml","application/epub+zip","image/jpeg","image/png","image/gif","image/webp","image/svg+xml"]).has(null==t?void 0:t.trim().toLowerCase()))return n.ElNotification({title:"",message:"无法解析上传",type:"warning"}),!1;var t;const a=e.type.includes("image"),l=!a,i=e.size/1024/1024<15,s=e.size/1024/1024<10;return l&&!i?(n.ElNotification({title:"",message:"上传文档大小不能超过 15MB!",type:"warning"}),!1):!(a&&!s)||(n.ElNotification({title:"",message:"上传图片大小不能超过 10MB!",type:"warning"}),!1)},x=()=>{n.ElNotification({title:"",message:"最多上传5个文件",type:"warning"})},N=({name:e})=>{var t;const a=u.value.find(t=>t.name===e);a&&(null==(t=d.value)||t.handleRemove(a))},_=(e,t)=>{u.value=t},b=()=>{var e;const t=null==(e=r.value)?void 0:e.getCurrentValue();f(t)};return{isEmpty:p,fileList:u,activeTag:m,cancelHandler:v,submitHandler:f,changeHandler:()=>{var e,t;p.value=null==(t=null==(e=r.value)?void 0:e.chatState)?void 0:t.isEmpty},handleUploadError:g,handleUploadSuccess:h,handleUploadBefore:y,handleUploadExceed:x,removeFile:N,handleUploadRemove:_,submitBtnClick:b,getSlots:()=>{const r={"action-list":()=>e.createVNode("div",{class:"sender-action-wrapper"},[e.createVNode("div",{class:"sender-action-left"},[e.createVNode(n.ElUpload,{ref:"fileUpload",disabled:u.value.length>5,action:a.actionUrl,"show-file-list":!1,multiple:!0,limit:a.limit-u.value.length,data:a.extendData,beforeUpload:y,headers:a.headers,onError:g,onSuccess:h,onExceed:x,onRemove:_,accept:a.acceptFileType},{default:()=>[e.createVNode(n.ElIcon,{class:"sender-file-icon"},{default:()=>[e.createVNode(l.Paperclip,null,null)]})]}),a.sceneList.length>0?e.createVNode(e.Fragment,null,[e.createVNode("div",{class:"split-line"},null),e.createVNode("div",{class:"scene-list"},[a.sceneList.map(t=>e.createVNode("span",{class:c.value.id===t.id?"scene-item active":"scene-item",onClick:()=>{return e=t,c.value=e,s("sceneChange",e),void s("update:scene",e.id);var e}},[t.name]))])]):null]),a.loading?e.createVNode(i,{class:"sender-cancel",onCancel:v},null):e.createVNode("div",{class:{"sender-btn":!0,active:!p.value},onClick:b},null)])};return(u.value.length>0||a.tagList.length>0)&&(r.header=()=>e.createVNode("div",{class:"sender-header-wrapper"},[e.createVNode("div",{class:"sender-file-list"},[u.value.map(a=>e.createVNode(t.FilesCard,{name:a.name,"show-del-icon":!0,status:"done",onDelete:N},null))]),e.createVNode("div",{class:"tag-list-wrapper"},[a.tagList.map(t=>e.createVNode("span",{class:m.value.id===t.id?"tag-item active":"tag-item",onClick:()=>{m.value=t}},[t.name]))])])),r}}},render(){let t;return e.createVNode("div",{class:"editor-sender-wrapper",ref:"editorSenderWrapper"},[e.createVNode(a,{ref:"editorSender",variant:"updown",loading:this.loading,placeholder:this.placeholder,activeTag:this.activeTag,onSubmit:this.submitHandler,onCancel:this.cancelHandler,onChange:this.changeHandler,"custom-style":this.customStyle},(l=t=this.getSlots(),"function"==typeof l||"[object Object]"===Object.prototype.toString.call(l)&&!e.isVNode(l)?t:{default:()=>[t]}))]);var l}});module.exports=s;
2
2
  //# sourceMappingURL=index.js.map
@@ -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":["index","props","loading","type","Boolean","default","actionUrl","String","extendData","Object","user","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","submitHandler","res","text","file","map","item","response","initSender","clearFiles","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","handleUploadBefore","mimeType","Set","has","trim","toLowerCase","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","find","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","changeHandler","chatState","getSlots","slots","action-list","_createVNode","class","ElUpload","disabled","action","multiple","data","beforeUpload","onError","onSuccess","onExceed","onRemove","accept","ElIcon","Paperclip","_Fragment","onClick","triggerSceneChange","scene","LoadingBtn","onCancel","active","FilesCard","status","onDelete","render","_slot","EditorSender","variant","this","onSubmit","onChange","s","prototype","toString","call","_isVNode"],"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":["index","props","loading","type","Boolean","default","actionUrl","String","extendData","Object","user","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","activeScene","ref","getInitialScene","found","find","item","isEmpty","fileList","activeTag","watch","val","nextTick","target","value","querySelector","setAttribute","immediate","clear","setText","length","cancelHandler","submitHandler","res","text","file","map","response","initSender","clearFiles","handleUploadError","ElNotification","title","message","handleUploadSuccess","list","handleUploadBefore","mimeType","Set","has","trim","toLowerCase","isImg","includes","isDoc","isLt15M","size","isLt10M","handleUploadExceed","removeFile","handleRemove","handleUploadRemove","files","submitBtnClick","context","getCurrentValue","changeHandler","chatState","getSlots","slots","action-list","_createVNode","class","ElUpload","disabled","action","multiple","data","beforeUpload","onError","onSuccess","onExceed","onRemove","accept","ElIcon","Paperclip","_Fragment","onClick","triggerSceneChange","LoadingBtn","onCancel","active","FilesCard","status","onDelete","render","_slot","EditorSender","variant","this","onSubmit","onChange","s","prototype","toString","call","_isVNode"],"mappings":"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"}
@@ -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 activeScene = ref(props.sceneList[0]);
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@core-pilot/client-vue",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "main": "dist/cjs/index.js",
5
5
  "module": "dist/es/index.js",
6
6
  "browser": "dist/umd/index.js",