2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
|
|
import{D as t,s as a,d as e,r as s,b as l,e as n,f as o,w as i,i as c,E as r,j as u,l as d,m as f,F as p,n as m,k as _,g as v,t as h,u as b,z as g,A as w,y,x as k,S as C,N as j}from"./index-8wOL_3gR.js";import{_ as x}from"./config-doctor.TgARj_nM.js";import{a as A}from"./uni-app.es.25qqJrzj.js";import{F as S,a as E,r as $}from"./session.LaNXUMh-.js";import{b as O}from"./navigation.Blicf8xr.js";import{_ as D}from"./_plugin-vue_export-helper.BCo6x5W8.js";async function I(t,a){var e;const s=await fetch("http://8.160.178.88:8088/v1/workflows/run",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json",Authorization:"Bearer app-9BapxGXgF2qQi9HHkq4R95Y7"},body:JSON.stringify({inputs:{input:t},response_mode:"blocking",user:T()}),signal:a});if(!s.ok)throw new Error(await async function(t){const a=await t.text().catch((()=>""));if(!a)return`临床思维训练书籍请求失败(${t.status})`;try{const t=JSON.parse(a),e=t.message||t.detail||t.error;if("string"==typeof e&&e.trim())return e}catch{}return a}(s));const l=await s.json();if((null==(e=l.data)?void 0:e.status)&&"succeeded"!==l.data.status)throw new Error(l.data.error||"临床思维训练书籍生成失败");const n=function(t){const a=t.data;if(a&&"object"==typeof a){const t=q(a.outputs)||q(a.output)||q(a.answer)||q(a.text)||q(a.result);if(t)return t}return q(t.output)||q(t.answer)||q(t.text)||q(t.result)}(l);if(!n)throw new Error("临床思维训练书籍内容为空,请稍后重试");return n}function T(){const e="clinical-thinking-workflow-user-id",s=t(e);if("string"==typeof s&&s.trim())return s;const l=`clinical-thinking-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;return a(e,l),l}function q(t){if("string"==typeof t)return t.trim();if(Array.isArray(t))return t.map(q).filter(Boolean).join("\n");if(!t||"object"!=typeof t)return"";const a=t,e=["answer","text","result","output","content","markdown","data"];for(const s of e){const t=q(a[s]);if(t)return t}return Object.entries(a).map((([t,a])=>{const e=q(a);return e?`${t}:${e}`:""})).filter(Boolean).join("\n")}function N(t,a){var e,s,l;const n=(null==(e=t.match(/^event:\s*(.+)$/m))?void 0:e[1])||"",o=t.split("\n").filter((t=>t.startsWith("data:"))).map((t=>t.replace(/^data:\s?/,"")));if(0===o.length)return;const i=o.join("\n");if("[DONE]"===i)return void(null==(s=a.onDone)||s.call(a,{}));let c=i;try{c=JSON.parse(i)}catch{}if("error"===n){const t="object"==typeof c&&c?c.message:c;throw new Error("string"==typeof t?t:"AI 学习助手回复失败")}const r=function(t){if("string"==typeof t)return t;if(!t||"object"!=typeof t)return"";const a=t,e=a.delta||a.content||a.answer||a.text;if("string"==typeof e)return e;const s=a.data;if(s&&"object"==typeof s){const t=s,a=t.delta||t.content||t.answer||t.text;if("string"==typeof a)return a}return""}(c);r&&a.onDelta(r),"done"!==n&&"message_done"!==n||null==(l=a.onDone)||l.call(a,"object"==typeof c&&c?c:{})}const F=D(e({__name:"learning-assistant",emits:["go-home","open-settings","open-profile"],setup(t,{emit:a}){const e=O(a),D=[{index:"1",title:"早期识别",description:"10分钟内完成12导联心电图。"},{index:"2",title:"药物干预",description:"阿司匹林、氯吡格雷。"},{index:"3",title:"再灌注策略",description:"STEMI需紧急PCI。"}],T=s([]),q=s(""),F=s(!1),J=s(!1),B=s(""),P=s(!1),H=s(0),M=s(null),V=s(!1),z=s("");let R=null,G=null,K=null,Q=null;function U(){V.value||(z.value="clinical-books"===z.value?"":"clinical-books")}async function W(){const t=q.value.trim();if(!t)return void L("请输入问题");if(V.value)return;T.value.push({id:`user-${Date.now()}`,role:"user",content:t}),q.value="",J.value=!0,V.value=!0,Y();const a=T.value.length;T.value.push({id:`assistant-${Date.now()}`,role:"assistant",variant:"simple",content:""});try{if("clinical-books"===z.value){null==K||K.abort(),K=new AbortController;const e=await I(t,K.signal);T.value[a].content=e}else{const e=await async function(t){return M.value?M.value:Q||X(t)}(t);null==G||G.abort(),G=new AbortController,await async function(t,a,e,s){const l=await fetch(`${S}/l
|