@core-pilot/client-vue 0.0.17 → 0.0.18
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"},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"},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},user:{type:String,default:""},authToken:{type:String,default:""},appId:{type:String,default:""}},emits:["cancel","submit","sceneChange","update:scene"],setup(a,{emit:s}){const o=e.useTemplateRef("editorSender"),r=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.computed(()=>({Authorization:`Bearer ${a.authToken}`,appId:a.appId})),p=e.computed(()=>({user:a.user})),u=e.ref((()=>{if(a.scene){const e=a.sceneList.find(e=>e.id===a.scene);if(e)return e}return a.sceneList[0]})()),m=e.ref(!0),v=e.ref([]),f=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.scene,e=>{if(e){const t=a.sceneList.find(t=>t.id===e);t&&(u.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(u.value=t)}u.value=e[0]}},{immediate:!0});const g=()=>{s("cancel")},h=e=>{if(m.value||a.loading)return;const t={text:e.text,file:v.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=o.value)||l.clear(),v.value=[],null==(n=d.value)||n.clearFiles()},y=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},x=(e,t,a)=>{v.value=a},N=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)},
|
|
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"},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"},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},user:{type:String,default:""},authToken:{type:String,default:""},appId:{type:String,default:""},showUpload:{type:Boolean,default:!0}},emits:["cancel","submit","sceneChange","update:scene"],setup(a,{emit:s}){const o=e.useTemplateRef("editorSender"),r=e.useTemplateRef("editorSenderWrapper"),d=e.useTemplateRef("fileUpload"),c=e.computed(()=>({Authorization:`Bearer ${a.authToken}`,appId:a.appId})),p=e.computed(()=>({user:a.user})),u=e.ref((()=>{if(a.scene){const e=a.sceneList.find(e=>e.id===a.scene);if(e)return e}return a.sceneList[0]})()),m=e.ref(!0),v=e.ref([]),f=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.scene,e=>{if(e){const t=a.sceneList.find(t=>t.id===e);t&&(u.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(u.value=t)}u.value=e[0]}},{immediate:!0});const g=()=>{s("cancel")},h=e=>{if(m.value||a.loading)return;const t={text:e.text,file:v.value.map(e=>e.response)};var l,n;s("submit",t),null==(l=o.value)||l.clear(),v.value=[],null==(n=d.value)||n.clearFiles()},y=()=>{n.ElNotification({title:"",message:"上传文件失败",type:"error"})},x=(e,t,a)=>{v.value=a},N=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)},w=()=>{n.ElNotification({title:"",message:"最多上传5个文件",type:"warning"})},_=({name:e})=>{var t;const a=v.value.find(t=>t.name===e);a&&(null==(t=d.value)||t.handleRemove(a))},S=(e,t)=>{v.value=t},b=()=>{var e;const t=null==(e=o.value)?void 0:e.getCurrentValue();h(t)};return{isEmpty:m,fileList:v,activeTag:f,cancelHandler:g,submitHandler:h,changeHandler:()=>{var e,t;m.value=null==(t=null==(e=o.value)?void 0:e.chatState)?void 0:t.isEmpty},handleUploadError:y,handleUploadSuccess:x,handleUploadBefore:N,handleUploadExceed:w,removeFile:_,handleUploadRemove:S,submitBtnClick:b,getSlots:()=>{const o={"action-list":()=>e.createVNode("div",{class:"sender-action-wrapper"},[e.createVNode("div",{class:"sender-action-left"},[a.showUpload?e.createVNode(n.ElUpload,{ref:"fileUpload",disabled:v.value.length>5,action:a.actionUrl,"show-file-list":!1,multiple:!0,limit:a.limit-v.value.length,data:p.value,beforeUpload:N,headers:c.value,onError:y,onSuccess:x,onExceed:w,onRemove:S,accept:a.acceptFileType},{default:()=>[e.createVNode(n.ElIcon,{class:"sender-file-icon"},{default:()=>[e.createVNode(l.Paperclip,null,null)]})]}):null,a.showUpload&&a.sceneList.length>0?e.createVNode("div",{class:"split-line"},null):null,a.sceneList.length>0?e.createVNode(e.Fragment,null,[e.createVNode("div",{class:"scene-list"},[a.sceneList.map(t=>e.createVNode("span",{class:u.value.id===t.id?"scene-item active":"scene-item",onClick:()=>{return e=t,u.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:g},null):e.createVNode("div",{class:{"sender-btn":!0,active:!m.value},onClick:b},null)])};return(v.value.length>0||a.tagList.length>0)&&(o.header=()=>e.createVNode("div",{class:"sender-header-wrapper"},[e.createVNode("div",{class:"sender-file-list"},[v.value.map(a=>e.createVNode(t.FilesCard,{name:a.name,"show-del-icon":!0,status:"done",onDelete:_},null))]),e.createVNode("div",{class:"tag-list-wrapper"},[a.tagList.map(t=>e.createVNode("span",{class:f.value.id===t.id?"tag-item active":"tag-item",onClick:()=>{f.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;
|
|
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 scene: {\n type: String,\n default: undefined,\n },\n user: {\n type: String,\n default: '',\n },\n authToken: {\n type: String,\n default: '',\n },\n appId: {\n type: String,\n default: '',\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 const headers = computed(() => {\n return {\n Authorization: `Bearer ${props.authToken}`,\n appId: props.appId,\n }\n })\n const extendData = computed(() => {\n return {\n user: props.user,\n }\n })\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={extendData.value}\n beforeUpload={handleUploadBefore}\n headers={headers.value}\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","acceptFileType","agentName","limit","Number","customStyle","Object","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","scene","undefined","user","authToken","appId","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","headers","computed","Authorization","extendData","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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"}
|
|
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 user: {\n type: String,\n default: '',\n },\n authToken: {\n type: String,\n default: '',\n },\n appId: {\n type: String,\n default: '',\n },\n showUpload: {\n type: Boolean,\n default: true,\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 const headers = computed(() => {\n return {\n Authorization: `Bearer ${props.authToken}`,\n appId: props.appId,\n }\n })\n const extendData = computed(() => {\n return {\n user: props.user,\n }\n })\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 {\n props.showUpload ? (\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={extendData.value}\n beforeUpload={handleUploadBefore}\n headers={headers.value}\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 ) : null\n }\n {\n props.showUpload && props.sceneList.length > 0 ? (\n <div class=\"split-line\"></div>\n ) : null\n }\n {\n props.sceneList.length > 0 ? (\n <>\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","acceptFileType","agentName","limit","Number","customStyle","Object","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","scene","undefined","user","authToken","appId","showUpload","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","headers","computed","Authorization","extendData","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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"}
|
|
@@ -108,6 +108,10 @@ const index = /* @__PURE__ */ defineComponent({
|
|
|
108
108
|
appId: {
|
|
109
109
|
type: String,
|
|
110
110
|
default: ""
|
|
111
|
+
},
|
|
112
|
+
showUpload: {
|
|
113
|
+
type: Boolean,
|
|
114
|
+
default: true
|
|
111
115
|
}
|
|
112
116
|
},
|
|
113
117
|
emits: ["cancel", "submit", "sceneChange", "update:scene"],
|
|
@@ -302,7 +306,7 @@ const index = /* @__PURE__ */ defineComponent({
|
|
|
302
306
|
"class": "sender-action-wrapper"
|
|
303
307
|
}, [createVNode("div", {
|
|
304
308
|
"class": "sender-action-left"
|
|
305
|
-
}, [createVNode(ElUpload, {
|
|
309
|
+
}, [props.showUpload ? createVNode(ElUpload, {
|
|
306
310
|
"ref": "fileUpload",
|
|
307
311
|
"disabled": fileList.value.length > 5,
|
|
308
312
|
"action": props.actionUrl,
|
|
@@ -323,9 +327,9 @@ const index = /* @__PURE__ */ defineComponent({
|
|
|
323
327
|
}, {
|
|
324
328
|
default: () => [createVNode(paperclip_default, null, null)]
|
|
325
329
|
})]
|
|
326
|
-
}), props.sceneList.length > 0 ? createVNode(
|
|
330
|
+
}) : null, props.showUpload && props.sceneList.length > 0 ? createVNode("div", {
|
|
327
331
|
"class": "split-line"
|
|
328
|
-
}, null), createVNode("div", {
|
|
332
|
+
}, null) : null, props.sceneList.length > 0 ? createVNode(Fragment, null, [createVNode("div", {
|
|
329
333
|
"class": "scene-list"
|
|
330
334
|
}, [props.sceneList.map((item) => createVNode("span", {
|
|
331
335
|
"class": activeScene.value.id === item.id ? "scene-item active" : "scene-item",
|
|
@@ -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 scene: {\n type: String,\n default: undefined,\n },\n user: {\n type: String,\n default: '',\n },\n authToken: {\n type: String,\n default: '',\n },\n appId: {\n type: String,\n default: '',\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 const headers = computed(() => {\n return {\n Authorization: `Bearer ${props.authToken}`,\n appId: props.appId,\n }\n })\n const extendData = computed(() => {\n return {\n user: props.user,\n }\n })\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={extendData.value}\n beforeUpload={handleUploadBefore}\n headers={headers.value}\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","acceptFileType","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","scene","undefined","user","authToken","appId","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","headers","computed","Authorization","extendData","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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"}
|
|
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 user: {\n type: String,\n default: '',\n },\n authToken: {\n type: String,\n default: '',\n },\n appId: {\n type: String,\n default: '',\n },\n showUpload: {\n type: Boolean,\n default: true,\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 const headers = computed(() => {\n return {\n Authorization: `Bearer ${props.authToken}`,\n appId: props.appId,\n }\n })\n const extendData = computed(() => {\n return {\n user: props.user,\n }\n })\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 {\n props.showUpload ? (\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={extendData.value}\n beforeUpload={handleUploadBefore}\n headers={headers.value}\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 ) : null\n }\n {\n props.showUpload && props.sceneList.length > 0 ? (\n <div class=\"split-line\"></div>\n ) : null\n }\n {\n props.sceneList.length > 0 ? (\n <>\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","acceptFileType","agentName","limit","Number","customStyle","maxHeight","inputData","placeholder","tagList","Array","id","name","sceneList","scene","undefined","user","authToken","appId","showUpload","emits","setup","emit","editorSender","useTemplateRef","editorSenderWrapper","fileUpload","headers","computed","Authorization","extendData","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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"}
|