UNPKG

@liuyuzhao/ai-chat

Version:

A Vue 3 AI chat component with TypeScript support for Web, H5, and UniApp

2 lines (1 loc) 22.8 kB
"use strict";var e=Object.defineProperty,t=Object.defineProperties,n=Object.getOwnPropertyDescriptors,o=Object.getOwnPropertySymbols,l=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable,a=(t,n,o)=>n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[n]=o,r=(e,t)=>{for(var n in t||(t={}))l.call(t,n)&&a(e,n,t[n]);if(o)for(var n of o(t))s.call(t,n)&&a(e,n,t[n]);return e},c=(e,t,n)=>new Promise((o,l)=>{var s=e=>{try{r(n.next(e))}catch(t){l(t)}},a=e=>{try{r(n.throw(e))}catch(t){l(t)}},r=e=>e.done?o(e.value):Promise.resolve(e.value).then(s,a);r((n=n.apply(e,t)).next())});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("vue"),d=require("marked"),A=require("dompurify");class u{constructor(e){var t,n;a(this,"symbol"!=typeof(t="config")?t+"":t,n),this.config=e}connect(e,t,n,o,l,s){return c(this,null,function*(){try{const a=new URLSearchParams,r=`${e[e.length-1][0].content}`;a.append("prompt",r),t&&a.append("sessionId",t),n.requestParams&&Object.entries(n.requestParams).forEach(([e,t])=>{a.append(e,String(t))}),a.has("lawyerName")||a.append("lawyerName",n.lawyerName||""),n.lawyerAllowedPort&&a.append("lawyerAllowedPort",n.lawyerAllowedPort||""),a.has("knowledgeCode")||a.append("knowledgeCode",n.knowledgeCode||""),a.has("hotIssues")||a.append("hotIssues",n.hotIssues||"");const c=`${n.apiUrl}/chat?${a.toString()}`;return yield this.connectWeb(c,n.headers,o,l,s)}catch(a){return l(new Error(`Failed to establish connection: ${a}`)),{close:()=>{}}}})}connectWeb(e,t,n,o,l){return c(this,null,function*(){const{EventSourcePolyfill:s}=yield Promise.resolve().then(()=>require("./eventsource-D4G5yCCB.js")).then(e=>e.eventsource),a=new s(e,r({withCredentials:!1},t&&{headers:t}));return a.addEventListener("message",e=>{try{n(e.data)}catch(t){o(new Error(`Message parsing error: ${t}`))}}),a.addEventListener("error",e=>{o(new Error("Connection error occurred")),a.close()}),a.addEventListener("end",()=>{a.close(),null==l||l()}),a})}connectUniapp(e,t,n,o,l){const s=uni.request({url:e,method:"GET",header:t||{},responseType:"text",enableChunked:!0,success:e=>{try{n(e.data),null==l||l()}catch(t){o(new Error(`Message parsing error: ${t}`))}},fail:e=>{o(new Error("Connection error occurred"))}});return{close:()=>s.abort()}}}let g="";function p(e){const o=i.ref([]),l=i.ref(""),s=i.ref(!1),a=i.ref(null),d=i.ref(null),A=i.ref(null),p=i.ref(null),h=i.ref([]),f=i.ref(!1),E=new u(e),C=(...t)=>c(null,[...t],function*(t=[]){f.value=!0;try{const n=new URLSearchParams;t.length>0&&n.append("excludeIds",t.join(","));const o=`${e.apiUrl}/hot-issues`,l=yield fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:t.length>0?JSON.stringify(t):"[]"});if(l.ok){const e=yield l.json();h.value=e.data||[]}else console.error("获取热点问题失败:",l.statusText),h.value=[]}catch(n){console.error("获取热点问题出错:",n),h.value=[]}finally{f.value=!1}});i.onMounted(()=>{C()});let w="",m=!1,v="",B=new Map,y=new Map;const b=()=>c(null,null,function*(){if(!l.value.trim()||s.value)return;const c={role:"user",content:l.value};o.value.push([c,{role:"assistant",content:""}]),l.value="",s.value=!0,g="",w="",m=!1,v="",B.clear();const i=r({},e);var u,h;p.value&&(i.requestParams=(u=r({},e.requestParams),h={hotIssues:p.value},t(u,n(h))),p.value=null);try{const e=yield E.connect(o.value,d.value,i,e=>{var t,n;g+=e;let a=g;for(;a.length>0;)try{let e=0,r=!1,c=!1,i=-1;for(let t=0;t<a.length;t++){const n=a[t];if(c)c=!1;else if("\\"!==n)if('"'!==n){if(!r)if("{"===n)e++;else if("}"===n&&(e--,0===e)){i=t+1;break}}else r=!r;else c=!0}if(i>0){const e=a.substring(0,i),r=JSON.parse(e);let c=r.choices[0].delta.content;if("[DONE]"===c)return s.value=!1,A.value=null,g="",w="",void B.clear();if(d.value=null!=(t=r.id)?t:"",c){const e=null!=(n=r.id)?n:"";v!==e&&(w="",m=!1,v=e,B.clear(),y.clear());const t=()=>"json_"+Date.now()+"_"+Math.random().toString(36).substr(2,9),s=e=>`<div id="${e}" class="button-group" style="margin: 10px 0; display: flex; flex-wrap: wrap; gap: 8px; min-height: 40px; border: 1px dashed #ccc; padding: 8px; border-radius: 4px;"><span class="loading-text" style="color: #666; font-size: 12px;">正在加载按钮...</span></div>`,a=e=>`<div id="${e}" style="margin: 10px 0;"><table class="json-table" style="border-collapse: collapse; width: 100%; border: 1px solid #ddd;"><thead><tr><th style="border: 1px solid #ddd; padding: 12px; background: #f5f5f5;">正在加载表格...</th></tr></thead><tbody></tbody></table></div>`,i=(e,t)=>{let n="";if(Array.isArray(t)){if(0===t.length)return;const e=Object.keys(t[0]);n='<table class="json-table" style="border-collapse: collapse; width: 100%; border: 1px solid #ddd;">',n+="<thead><tr>",e.forEach(e=>{n+=`<th style="border: 1px solid #ddd; padding: 12px; background: #f5f5f5; font-weight: bold; text-align: left;">${e}</th>`}),n+="</tr></thead>",n+="<tbody>",t.forEach((t,o)=>{n+=`<tr style="background-color: ${o%2==0?"#ffffff":"#f9f9f9"};">`,e.forEach(e=>{n+=`<td style="border: 1px solid #ddd; padding: 12px;">${t[e]||""}</td>`}),n+="</tr>"}),n+="</tbody></table>"}else t.headers&&t.rows&&(n='<table class="json-table" style="border-collapse: collapse; width: 100%; border: 1px solid #ddd;">',n+="<thead><tr>",t.headers.forEach(e=>{n+=`<th style="border: 1px solid #ddd; padding: 12px; background: #f5f5f5; font-weight: bold; text-align: left;">${e}</th>`}),n+="</tr></thead>",n+="<tbody>",t.rows.forEach((e,t)=>{n+=`<tr style="background-color: ${t%2==0?"#ffffff":"#f9f9f9"};">`,e.forEach(e=>{n+=`<td style="border: 1px solid #ddd; padding: 12px;">${e}</td>`}),n+="</tr>"}),n+="</tbody></table>");setTimeout(()=>{const t=document.getElementById(e);t&&(t.innerHTML=n)},0)},d=(e,t)=>{const n=document.getElementById(e);if(!n)return;const o=n.querySelectorAll("button").length;if(0===o){const e=n.querySelector(".loading-text");e&&e.remove()}t.slice(o).forEach((e,t)=>{e&&e.trim()&&setTimeout(()=>{const t=document.createElement("button");t.className="msgButton",t.textContent=e.trim(),t.onclick=()=>{l.value=e.trim(),b()},t.style.opacity="0",t.style.transform="translateY(10px)",t.style.transition="all 0.3s ease",n.appendChild(t),setTimeout(()=>{t.style.opacity="1",t.style.transform="translateY(0)"},10)},150*t)})},A=e=>{const t=[];try{const n=e.match(new RegExp('"data"\\s*:\\s*\\[(.*?)\\]',"s"));if(n){const e=n[1].match(/"([^"]+)"/g);e&&e.forEach(e=>{const n=e.replace(/"/g,"").trim();n&&t.push(n)})}}catch(n){console.log("解析部分按钮数据失败:",n)}return t};w+=c;if(w.includes("begin")){const e=[...w.matchAll(/begin/g)],n=[...w.matchAll(/end/g)];if(e.length>n.length){const n=e.length-B.size;for(let e=0;e<n;e++){const e=t(),n=/begin([\s\S]*?)$/,l=w.match(n);if(l){const t=l[1].trim();let n="";if(t.includes('"type"')&&t.includes('"button"')){n=s(e),B.set(e,"button"),y.set(e,[]);o.value[o.value.length-1][1].content+=n,setTimeout(()=>{const n=A(t);n.length>0&&(y.set(e,n),d(e,n))},100)}else if(t.includes('"type"')&&t.includes('"table"')){n=a(e),B.set(e,"table");o.value[o.value.length-1][1].content+=n}}}}B.forEach((e,t)=>{if("button"===e){const e=/begin([\s\S]*?)(?:end|$)/,n=w.match(e);if(n){const e=n[1].trim(),o=A(e),l=y.get(t)||[];o.length>l.length&&(y.set(t,o),d(t,o))}}});const l=/begin([\s\S]*?)end/g,r=[...w.matchAll(l)];if(r.forEach((e,t)=>{const n=e[1].trim();try{const e=JSON.parse(n);if(e.type&&e.data){const n=Array.from(B.keys())[t];if(n){switch(e.type){case"button":const t=Array.isArray(e.data)?e.data:[],o=y.get(n)||[];t.length>o.length&&(y.set(n,t),d(n,t)),setTimeout(()=>{const e=document.getElementById(n);e&&(e.style.border="none")},150*t.length+200);break;case"table":i(n,e.data);break;default:console.warn("未知的JSON类型:",e.type)}B.delete(n),y.delete(n)}}}catch(o){console.log("JSON解析失败:",o)}}),r.length>0){let e=w;if(r.forEach(t=>{e=e.replace(t[0],"")}),e.trim()&&!e.includes("begin")){o.value[o.value.length-1][1].content+=e}w=e.includes("begin")?e:""}}else{o.value[o.value.length-1][1].content+=c,w=""}}}a=a.substring(i),g=a}catch(r){break}},e=>{a.value=e,s.value=!1,A.value=null,g="",w="",B.clear()});A.value=e}catch(f){a.value=f instanceof Error?f:new Error("连接失败"),s.value=!1,A.value=null}});return{messages:o,input:l,loading:s,error:a,sendMessage:b,stopGeneration:()=>{if(A.value&&"function"==typeof A.value.close){try{A.value.close()}catch(e){console.warn("关闭连接时出错:",e)}A.value=null,s.value=!1,o.value[o.value.length-1][1].stopMessage=!0,g="",w="",B.clear()}},hotQuestions:h,hotQuestionsLoading:f,refreshHotIssues:()=>{const e=h.value.map(e=>e.id);C(e)},selectHotIssue:e=>{p.value=e.id,l.value=e.question,b()}}}const h={class:"ai-chat-container"},f={key:0,class:"chat-header"},E={class:"ai-avatar"},C=["src"],w={class:"welcome-message"},m={key:1,class:"hot-questions"},v={class:"section-title"},B=["disabled"],y={class:"questions-list"},b=["onClick"],k={key:0,class:"empty-questions"},Q={class:"message-content user"},L=["innerHTML"],I={class:"message-content assistant"},S={class:"message-label"},x={key:0,class:"assistant-loading"},D={key:1,class:"assistant-stop"},T=["innerHTML"],F={key:3,class:"tag-container"},U=["onClick"],O={class:"chat-input"},V={class:"input-container"},G=["disabled"],N=["disabled"],P=((e,t)=>{const n=e.__vccOpts||e;for(const[o,l]of t)n[o]=l;return n})(i.defineComponent({__name:"AiChat",props:{config:{}},setup(e){const t=e,{messages:n,input:o,loading:l,sendMessage:s,stopGeneration:a,hotQuestions:r,hotQuestionsLoading:c,refreshHotIssues:u,selectHotIssue:g}=p(t.config),P=i.ref(["查看预约记录","查看被监管人","系统问题"]),R=()=>{setTimeout(()=>{window.scrollTo({top:document.documentElement.scrollHeight,behavior:"smooth"})},100)};i.watch(()=>n.value.length,()=>{R()}),i.watch(()=>n.value.length>0?n.value[n.value.length-1][1].content:"",()=>{R()}),i.watch(l,e=>{e&&R()}),i.watch(()=>t.config.knowledgeCode,()=>{n.value=[],o.value=""});const J=e=>e?function(e){if(!e)return"";let t=e;if(t!==e)return A.sanitize(t,{ALLOWED_TAGS:["div","span","p","br","strong","em","code","pre","h1","h2","h3","h4","h5","h6","ul","ol","li","a","button","table","thead","tbody","tr","th","td"],ALLOWED_ATTR:["href","class","onclick","data-*","id","colspan","rowspan"]});const n=e.includes("<button"),o=e.includes("<table")||e.includes("<tr")||e.includes("<td")||e.includes("<th");if(n||o){const t=e.replace(/\n/g,"\n");return A.sanitize(t,{ALLOWED_TAGS:["p","br","strong","em","code","pre","blockquote","h1","h2","h3","h4","h5","h6","ul","ol","li","a","button","div","span","table","thead","tbody","tfoot","tr","th","td","caption"],ALLOWED_ATTR:["href","class","onclick","data-*","id","target","title","alt","src","width","height","colspan","rowspan","scope","style"]})}const l=e.includes("**")||e.includes("*")||e.includes("`")||e.includes("#")||e.includes("[")||e.includes("\n- ")||e.includes("\n1. ")||e.includes("|");let s=e;return s=l?d.marked.parse(e):e.replace(/\n/g,"<br>"),A.sanitize(s,{ALLOWED_TAGS:["p","br","strong","em","code","pre","blockquote","h1","h2","h3","h4","h5","h6","ul","ol","li","a","button","div","span","table","thead","tbody","tfoot","tr","th","td","caption"],ALLOWED_ATTR:["href","class","onclick","data-*","id","target","title","alt","src","width","height","colspan","rowspan","scope","style"]})}(e):"",K=e=>{"lsyy"===t.config.knowledgeCode?(o.value=`请提供关于 ${e} 的详细信息`,s()):o.value=`${n.value[n.value.length-1][0].content}${n.value[n.value.length-1][0].content.includes(":")?`-${e}`:`:${e}`}`};return"undefined"!=typeof window&&(window.selectPerson=K),(e,t)=>(i.openBlock(),i.createElementBlock("div",h,["lsyy"===e.config.knowledgeCode?(i.openBlock(),i.createElementBlock("div",f,[i.createElementVNode("div",E,[i.createElementVNode("img",{width:"100%",mode:"widthFix",src:i.unref("data:image/png;base64,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"),alt:"AI头像"},null,8,C)]),i.createElementVNode("div",w," 你好,"+i.toDisplayString(e.config.lawyerName)+"律师,我是智能客服,请问您有什么需要帮助? ",1)])):i.createCommentVNode("",!0),"lsyy"===e.config.knowledgeCode?(i.openBlock(),i.createElementBlock("div",m,[i.createElementVNode("div",v,[t[5]||(t[5]=i.createElementVNode("span",null,"热门问题",-1)),i.createElementVNode("button",{class:"refresh-btn",onClick:t[0]||(t[0]=(...e)=>i.unref(u)&&i.unref(u)(...e)),disabled:i.unref(c)},i.toDisplayString(i.unref(c)?"加载中...":"换一换"),9,B)]),i.createElementVNode("div",y,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(i.unref(r),(e,t)=>(i.openBlock(),i.createElementBlock("div",{class:"question-item",key:e.id,onClick:t=>i.unref(g)(e)},i.toDisplayString(t+1)+". "+i.toDisplayString(e.question),9,b))),128)),0!==i.unref(r).length||i.unref(c)?i.createCommentVNode("",!0):(i.openBlock(),i.createElementBlock("div",k," 暂无热门问题 "))])])):i.createCommentVNode("",!0),i.unref(n).length>0?(i.openBlock(),i.createElementBlock("div",{key:2,class:i.normalizeClass(["chat-messages",{tag:P.value.length>0}])},[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(i.unref(n),(e,o)=>(i.openBlock(),i.createElementBlock("div",{class:"message-item",key:o},[i.createElementVNode("div",Q,[t[6]||(t[6]=i.createElementVNode("div",{class:"message-label"},"问:",-1)),i.createElementVNode("div",{class:"user-message-text",innerHTML:J(e[0].content)},null,8,L)]),i.createElementVNode("div",I,[i.createElementVNode("div",S,[t[7]||(t[7]=i.createTextVNode(" 答: ",-1)),i.unref(l)&&o===i.unref(n).length-1?(i.openBlock(),i.createElementBlock("span",x)):i.createCommentVNode("",!0),e[1].stopMessage?(i.openBlock(),i.createElementBlock("span",D,"此问题用户停止咨询")):i.createCommentVNode("",!0)]),i.createElementVNode("div",{class:"message-text",innerHTML:J(e[1].content)},null,8,T)])]))),128))],2)):i.createCommentVNode("",!0),"lsyy"===e.config.knowledgeCode?(i.openBlock(),i.createElementBlock("div",F,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(P.value,(e,t)=>(i.openBlock(),i.createElementBlock("button",{class:"tag-btn",onClick:t=>{return n=e,o.value=n,s(),void R();var n},key:t},i.toDisplayString(e),9,U))),128))])):i.createCommentVNode("",!0),i.createElementVNode("div",O,[i.createElementVNode("div",V,[i.withDirectives(i.createElementVNode("input",{"onUpdate:modelValue":t[1]||(t[1]=e=>i.isRef(o)?o.value=e:null),onKeyup:t[2]||(t[2]=i.withKeys((...e)=>i.unref(s)&&i.unref(s)(...e),["enter"])),placeholder:"请输入想要咨询的问题",disabled:i.unref(l),class:"message-input"},null,40,G),[[i.vModelText,i.unref(o)]]),i.unref(l)?i.createCommentVNode("",!0):(i.openBlock(),i.createElementBlock("button",{key:0,onClick:t[3]||(t[3]=(...e)=>i.unref(s)&&i.unref(s)(...e)),disabled:!i.unref(o).trim(),class:"send-button"},t[8]||(t[8]=[i.createElementVNode("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none"},[i.createElementVNode("path",{d:"M2 21L23 12L2 3V10L17 12L2 14V21Z",fill:"currentColor"})],-1)]),8,N)),i.unref(l)?(i.openBlock(),i.createElementBlock("button",{key:1,onClick:t[4]||(t[4]=(...e)=>i.unref(a)&&i.unref(a)(...e)),class:"stop-button"},t[9]||(t[9]=[i.createElementVNode("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none"},[i.createElementVNode("rect",{x:"6",y:"6",width:"12",height:"12",fill:"currentColor"})],-1)]))):i.createCommentVNode("",!0)])])]))}}),[["__scopeId","data-v-1eb006ae"]]);exports.AIService=u,exports.AiChat=P,exports.default=P,exports.useAiChat=p;