feat: 联调

This commit is contained in:
王天骄
2026-06-11 12:12:55 +08:00
parent 2192b855a1
commit cdbe16dde3
35 changed files with 918 additions and 217 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{C as e}from"./index-CpNRQgjE.js";function t(){return Promise.resolve([{id:"case-31190016",title:"间断四肢多关节肿痛5年,加重1个月",patientName:"郭爱和",gender:"男",age:43,department:"风湿免疫科",scene:"门诊部",caseNo:"31190016",tone:"blue",mode:"training"},{id:"case-31180002",title:"右膝关节疼痛8年,腰背部疼痛2年",patientName:"索航",gender:"男",age:51,department:"风湿免疫科",scene:"住院部",caseNo:"31180002",tone:"teal",mode:"training"},{id:"case-2238015",title:"阴道不规则流血4月。",patientName:"韩爱利",gender:"女",age:52,department:"妇科",scene:"住院部",caseNo:"2238015",tone:"pink",mode:"training"},{id:"case-1006004",title:"持续胸痛3小时",patientName:"陈先生",gender:"男",age:60,department:"心血管内科",scene:"住院部",caseNo:"1006004",tone:"orange",mode:"teaching"},{id:"case-31190042",title:"咳嗽、咳痰10余年,加重1周",patientName:"厉明",gender:"男",age:52,department:"呼吸内科",scene:"普通门诊",caseNo:"31190042",tone:"purple",mode:"training"},{id:"case-2238019",title:"尿频、尿急、尿痛3天",patientName:"刘晓元",gender:"女",age:25,department:"泌尿外科",scene:"急诊留观",caseNo:"2238019",tone:"green",mode:"training"}])}function n(){const t=e("clinical-thinking-selected-case");return t&&"object"==typeof t?t:null}export{t as f,n as r};
import{C as e}from"./index-CoO0Bu96.js";function t(){return Promise.resolve([{id:"case-31190016",title:"间断四肢多关节肿痛5年,加重1个月",patientName:"郭爱和",gender:"男",age:43,department:"风湿免疫科",scene:"门诊部",caseNo:"31190016",tone:"blue",mode:"training"},{id:"case-31180002",title:"右膝关节疼痛8年,腰背部疼痛2年",patientName:"索航",gender:"男",age:51,department:"风湿免疫科",scene:"住院部",caseNo:"31180002",tone:"teal",mode:"training"},{id:"case-2238015",title:"阴道不规则流血4月。",patientName:"韩爱利",gender:"女",age:52,department:"妇科",scene:"住院部",caseNo:"2238015",tone:"pink",mode:"training"},{id:"case-1006004",title:"持续胸痛3小时",patientName:"陈先生",gender:"男",age:60,department:"心血管内科",scene:"住院部",caseNo:"1006004",tone:"orange",mode:"teaching"},{id:"case-31190042",title:"咳嗽、咳痰10余年,加重1周",patientName:"厉明",gender:"男",age:52,department:"呼吸内科",scene:"普通门诊",caseNo:"31190042",tone:"purple",mode:"training"},{id:"case-2238019",title:"尿频、尿急、尿痛3天",patientName:"刘晓元",gender:"女",age:25,department:"泌尿外科",scene:"急诊留观",caseNo:"2238019",tone:"green",mode:"training"}])}function n(){const t=e("clinical-thinking-selected-case");return t&&"object"==typeof t?t:null}export{t as f,n as r};
File diff suppressed because one or more lines are too long
+25
View File
File diff suppressed because one or more lines are too long
-25
View File
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{G as o,D as n,L as e}from"./index-CpNRQgjE.js";function i(n){var i;const l=e(),r=Boolean(null==(i=null==l?void 0:l.vnode.props)?void 0:i.onOpenProfile);return function(){r?n("open-profile"):o({url:"/pages/profile/profile"})}}function l(n){var i;const l=e(),r=Boolean(null==(i=null==l?void 0:l.vnode.props)?void 0:i.onOpenSettings);return function(){r?n("open-settings"):o({url:"/pages/config/config"})}}function r(o){var i;const l=e(),r=Boolean(null==(i=null==l?void 0:l.vnode.props)?void 0:i.onGoHome);return function(){r?o("go-home"):n({url:"/pages/home/home"})}}export{l as a,r as b,i as c};
import{G as o,D as n,L as e}from"./index-CoO0Bu96.js";function i(n){var i;const l=e(),r=Boolean(null==(i=null==l?void 0:l.vnode.props)?void 0:i.onOpenProfile);return function(){r?n("open-profile"):o({url:"/pages/profile/profile"})}}function l(n){var i;const l=e(),r=Boolean(null==(i=null==l?void 0:l.vnode.props)?void 0:i.onOpenSettings);return function(){r?n("open-settings"):o({url:"/pages/config/config"})}}function r(o){var i;const l=e(),r=Boolean(null==(i=null==l?void 0:l.vnode.props)?void 0:i.onGoHome);return function(){r?o("go-home"):n({url:"/pages/home/home"})}}export{l as a,r as b,i as c};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{J as a,K as e,L as s,O as l,d as t,r as c,c as o,o as n,b as i,e as u,f as d,w as r,i as m,E as f,l as _,m as p,F as g,j as h,g as v,t as b,n as k,y as C,z as j,I as x,x as y,S as N,s as w,G as $}from"./index-CpNRQgjE.js";import{f as L}from"./cases.BlouN7SM.js";import{c as V,a as I,b as S}from"./navigation.CsipbD6y.js";import{_ as z}from"./_plugin-vue_export-helper.BCo6x5W8.js";const E=((l,t=0)=>(t,c=s())=>{!a&&e(l,t,c)})(l,2),F=z(t({__name:"cases",emits:["open-settings","open-profile","go-home"],setup(a,{emit:e}){const s=e,l=V(s),t=I(s),z=S(s),F=c([]),G=c(""),J=c(""),K=c(!1),O=c(""),U=o((()=>{const a=G.value.trim().toLowerCase(),e=O.value?F.value.filter((a=>a.mode===O.value)):F.value;return a?e.filter((e=>[e.title,e.patientName,e.gender,String(e.age),e.department,e.scene,e.caseNo].some((e=>e.toLowerCase().includes(a))))):e}));return E((a=>{const e=null==a?void 0:a.mode;"teaching"!==e&&"training"!==e||(O.value=e)})),n((function(){L().then((a=>{F.value=a}))})),i((()=>{})),(a,e)=>{const s=C,c=j,o=x,n=y,i=N;return u(),d(s,{class:"cases-page"},{default:r((()=>[m(s,{class:"case-shell"},{default:r((()=>[m(s,{class:"case-header"},{default:r((()=>[m(c,{class:"icon-button","aria-label":"设置",onClick:f(t)},{default:r((()=>[m(s,{class:"settings-icon"})])),_:1},8,["onClick"]),m(c,{class:"icon-button home-button","aria-label":"首页",onClick:f(z)},{default:r((()=>[m(s,{class:"home-icon"})])),_:1},8,["onClick"]),m(s,{class:"header-spacer"}),m(c,{class:"icon-button","aria-label":"个人中心",onClick:f(l)},{default:r((()=>[m(s,{class:"account-icon"})])),_:1},8,["onClick"])])),_:1}),m(i,{class:"case-content","scroll-y":""},{default:r((()=>[m(s,{class:"search-row"},{default:r((()=>[m(s,{class:"search-box"},{default:r((()=>[m(s,{class:"search-icon"}),m(o,{class:"search-input",modelValue:G.value,"onUpdate:modelValue":e[0]||(e[0]=a=>G.value=a),type:"text",placeholder:"科室、主诉模糊搜索","placeholder-class":"search-placeholder"},null,8,["modelValue"])])),_:1})])),_:1}),m(s,{class:"case-list"},{default:r((()=>[(u(!0),_(g,null,p(U.value,(a=>(u(),d(s,{key:a.id,class:k(["case-card",`mode-${a.mode}`]),onClick:e=>function(a){w("clinical-thinking-selected-case",a),w("clinical-thinking-case-mode",a.mode),$({url:"teaching"===a.mode?"/pages/teaching/teaching":"/pages/scenario/scenario"})}(a)},{default:r((()=>[m(s,{class:"case-main"},{default:r((()=>[m(s,{class:k(["patient-avatar",`avatar-${a.tone}`])},{default:r((()=>[m(n,null,{default:r((()=>[h(b(a.patientName.slice(0,1)),1)])),_:2},1024)])),_:2},1032,["class"]),m(s,{class:"case-info"},{default:r((()=>[m(n,{class:"case-title"},{default:r((()=>[h(b(a.title),1)])),_:2},1024),m(n,{class:"case-meta"},{default:r((()=>[h(b(a.patientName)+""+b(a.gender)+""+b(a.age)+"岁,"+b(a.department)+""+b(a.scene),1)])),_:2},1024)])),_:2},1024)])),_:2},1024),m(s,{class:"case-footer"},{default:r((()=>[m(n,{class:"case-no"},{default:r((()=>[h("病例编号: "+b(a.caseNo),1)])),_:2},1024),m(s,{class:k(["mode-badge",`mode-badge-${a.mode}`])},{default:r((()=>[m(s,{class:k(["mode-icon",`mode-icon-${a.mode}`])},null,8,["class"]),m(n,null,{default:r((()=>{return[h(b((e=a.mode,"teaching"===e?"教学模式":"训练模式")),1)];var e})),_:2},1024)])),_:2},1032,["class"])])),_:2},1024)])),_:2},1032,["class","onClick"])))),128)),0===U.value.length?(u(),d(s,{key:0,class:"empty-state"},{default:r((()=>[m(n,null,{default:r((()=>[h("暂无匹配病例")])),_:1})])),_:1})):v("",!0)])),_:1})])),_:1})])),_:1}),m(s,{class:k(["toast",{visible:K.value}])},{default:r((()=>[h(b(J.value),1)])),_:1},8,["class"])])),_:1})}}}),[["__scopeId","data-v-64c7a872"]]);export{F as default};
import{J as a,K as e,L as s,O as l,d as t,r as c,c as o,o as n,b as i,e as u,f as d,w as r,i as m,E as f,l as _,m as p,F as g,j as h,g as v,t as b,n as k,y as C,z as j,I as x,x as y,S as N,s as w,G as $}from"./index-CoO0Bu96.js";import{f as L}from"./cases.DfX6IxCO.js";import{c as V,a as I,b as S}from"./navigation.C05E413Y.js";import{_ as z}from"./_plugin-vue_export-helper.BCo6x5W8.js";const E=((l,t=0)=>(t,c=s())=>{!a&&e(l,t,c)})(l,2),F=z(t({__name:"cases",emits:["open-settings","open-profile","go-home"],setup(a,{emit:e}){const s=e,l=V(s),t=I(s),z=S(s),F=c([]),G=c(""),J=c(""),K=c(!1),O=c(""),U=o((()=>{const a=G.value.trim().toLowerCase(),e=O.value?F.value.filter((a=>a.mode===O.value)):F.value;return a?e.filter((e=>[e.title,e.patientName,e.gender,String(e.age),e.department,e.scene,e.caseNo].some((e=>e.toLowerCase().includes(a))))):e}));return E((a=>{const e=null==a?void 0:a.mode;"teaching"!==e&&"training"!==e||(O.value=e)})),n((function(){L().then((a=>{F.value=a}))})),i((()=>{})),(a,e)=>{const s=C,c=j,o=x,n=y,i=N;return u(),d(s,{class:"cases-page"},{default:r((()=>[m(s,{class:"case-shell"},{default:r((()=>[m(s,{class:"case-header"},{default:r((()=>[m(c,{class:"icon-button","aria-label":"设置",onClick:f(t)},{default:r((()=>[m(s,{class:"settings-icon"})])),_:1},8,["onClick"]),m(c,{class:"icon-button home-button","aria-label":"首页",onClick:f(z)},{default:r((()=>[m(s,{class:"home-icon"})])),_:1},8,["onClick"]),m(s,{class:"header-spacer"}),m(c,{class:"icon-button","aria-label":"个人中心",onClick:f(l)},{default:r((()=>[m(s,{class:"account-icon"})])),_:1},8,["onClick"])])),_:1}),m(i,{class:"case-content","scroll-y":""},{default:r((()=>[m(s,{class:"search-row"},{default:r((()=>[m(s,{class:"search-box"},{default:r((()=>[m(s,{class:"search-icon"}),m(o,{class:"search-input",modelValue:G.value,"onUpdate:modelValue":e[0]||(e[0]=a=>G.value=a),type:"text",placeholder:"科室、主诉模糊搜索","placeholder-class":"search-placeholder"},null,8,["modelValue"])])),_:1})])),_:1}),m(s,{class:"case-list"},{default:r((()=>[(u(!0),_(g,null,p(U.value,(a=>(u(),d(s,{key:a.id,class:k(["case-card",`mode-${a.mode}`]),onClick:e=>function(a){w("clinical-thinking-selected-case",a),w("clinical-thinking-case-mode",a.mode),$({url:"teaching"===a.mode?"/pages/teaching/teaching":"/pages/scenario/scenario"})}(a)},{default:r((()=>[m(s,{class:"case-main"},{default:r((()=>[m(s,{class:k(["patient-avatar",`avatar-${a.tone}`])},{default:r((()=>[m(n,null,{default:r((()=>[h(b(a.patientName.slice(0,1)),1)])),_:2},1024)])),_:2},1032,["class"]),m(s,{class:"case-info"},{default:r((()=>[m(n,{class:"case-title"},{default:r((()=>[h(b(a.title),1)])),_:2},1024),m(n,{class:"case-meta"},{default:r((()=>[h(b(a.patientName)+""+b(a.gender)+""+b(a.age)+"岁,"+b(a.department)+""+b(a.scene),1)])),_:2},1024)])),_:2},1024)])),_:2},1024),m(s,{class:"case-footer"},{default:r((()=>[m(n,{class:"case-no"},{default:r((()=>[h("病例编号: "+b(a.caseNo),1)])),_:2},1024),m(s,{class:k(["mode-badge",`mode-badge-${a.mode}`])},{default:r((()=>[m(s,{class:k(["mode-icon",`mode-icon-${a.mode}`])},null,8,["class"]),m(n,null,{default:r((()=>{return[h(b((e=a.mode,"teaching"===e?"教学模式":"训练模式")),1)];var e})),_:2},1024)])),_:2},1032,["class"])])),_:2},1024)])),_:2},1032,["class","onClick"])))),128)),0===U.value.length?(u(),d(s,{key:0,class:"empty-state"},{default:r((()=>[m(n,null,{default:r((()=>[h("暂无匹配病例")])),_:1})])),_:1})):v("",!0)])),_:1})])),_:1})])),_:1}),m(s,{class:k(["toast",{visible:K.value}])},{default:r((()=>[h(b(J.value),1)])),_:1},8,["class"])])),_:1})}}}),[["__scopeId","data-v-64c7a872"]]);export{F as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{d as s,a,r as e,o as l,b as t,e as i,f as n,w as o,i as c,E as u,j as d,g as r,t as f,l as m,m as g,F as _,n as b,s as p,G as h,y as v,z as k,x as y,u as j}from"./index-CpNRQgjE.js";import{_ as C}from"./config-doctor.TgARj_nM.js";import{c as I,a as w}from"./navigation.CsipbD6y.js";import{_ as x}from"./_plugin-vue_export-helper.BCo6x5W8.js";const T=x(s({__name:"home",emits:["open-settings","open-profile"],setup(s,{emit:x}){const T=x,A=I(T),M=w(T),D=a({greeting:"下午好,医生。",highlight:"让我们继续提升您的临床思维能力吧。",remainingModules:3,doctorName:"王主任"}),E=[{title:"精准补强·薄弱环节训练",icon:"trend-icon"},{title:"实战进阶·科室专项训练",icon:"notes-icon"},{title:"新手入门·教学互动模式模式训练",icon:"school-icon"},{title:"精益管理·老师针对性任务训练",icon:"admin-icon"}],F=e(!1),N=e(""),O=e(!1);let P=null;function S(){F.value||(F.value=!0,Promise.resolve({sessionId:`mock-session-${Date.now()}`,startedAt:(new Date).toISOString()}).then((s=>{p("clinical-thinking-session",s),h({url:"/pages/matching/matching"})})).catch((s=>{!function(s){P&&clearTimeout(P);N.value=s,O.value=!0,P=setTimeout((()=>{O.value=!1}),2200)}(s instanceof Error?s.message:"进入训练失败")})).finally((()=>{setTimeout((()=>{F.value=!1}),300)})))}function z(){h({url:"/pages/learning-assistant/learning-assistant"})}return l((function(){Promise.resolve({greeting:"下午好,医生。",highlight:"让我们继续提升您的临床思维能力吧。",remainingModules:3,doctorName:"王主任"}).then((s=>{Object.assign(D,s)}))})),t((()=>{P&&clearTimeout(P)})),(s,a)=>{const e=v,l=k,t=y,p=j;return i(),n(e,{class:"home-page"},{default:o((()=>[c(e,{class:"home-shell"},{default:o((()=>[c(e,{class:"top-bar"},{default:o((()=>[c(l,{class:"icon-button","aria-label":"配置",onClick:u(M)},{default:o((()=>[c(e,{class:"settings-icon"})])),_:1},8,["onClick"]),c(e,{class:"top-spacer"}),c(l,{class:"icon-button","aria-label":"个人中心",onClick:u(A)},{default:o((()=>[c(e,{class:"account-icon"})])),_:1},8,["onClick"])])),_:1}),c(e,{class:"home-main"},{default:o((()=>[c(e,{class:"speech-bubble"},{default:o((()=>[c(t,{class:"bubble-copy"},{default:o((()=>[d("下午好,医生。准备好开始今天的")])),_:1}),c(t,{class:"bubble-strong"},{default:o((()=>[d("带教模拟")])),_:1}),c(t,{class:"bubble-copy"},{default:o((()=>[d(",精进")])),_:1}),c(t,{class:"bubble-highlight"},{default:o((()=>[d("临床思维")])),_:1}),c(t,{class:"bubble-copy"},{default:o((()=>[d("了吗?")])),_:1})])),_:1}),c(e,{class:"doctor-stage"},{default:o((()=>[c(e,{class:"doctor-shadow"}),c(p,{class:"director-image",src:C,mode:"aspectFit"})])),_:1}),c(e,{class:"training-panel"},{default:o((()=>[c(e,{class:"primary-action"},{default:o((()=>[c(l,{class:"start-button",disabled:F.value,onClick:S},{default:o((()=>[F.value?(i(),n(e,{key:0,class:"spinner"})):r("",!0),c(t,null,{default:o((()=>[d(f(F.value?"正在进入...":"开始训练"),1)])),_:1})])),_:1},8,["disabled"]),c(t,{class:"remaining"},{default:o((()=>[d("今日剩余:"+f(D.remainingModules)+"个模块",1)])),_:1})])),_:1}),c(e,{class:"module-grid"},{default:o((()=>[(i(),m(_,null,g(E,(s=>c(l,{key:s.title,class:"module-card",onClick:S},{default:o((()=>[c(e,{class:b(["module-icon",s.icon])},null,8,["class"]),c(t,{class:"module-title"},{default:o((()=>[d(f(s.title),1)])),_:2},1024)])),_:2},1024))),64))])),_:1}),c(e,{class:"assistant-actions"},{default:o((()=>[c(l,{class:"assistant-button",onClick:z},{default:o((()=>[c(e,{class:"assistant-icon chat-icon"}),c(t,null,{default:o((()=>[d("AI 学习助手(医院知识库)")])),_:1})])),_:1}),c(l,{class:"assistant-button disabled",disabled:"","aria-disabled":"true"},{default:o((()=>[c(e,{class:"assistant-icon forum-icon"}),c(t,null,{default:o((()=>[d("方老师AI教学助手沟通")])),_:1})])),_:1})])),_:1})])),_:1})])),_:1})])),_:1}),c(e,{class:b(["toast",{visible:O.value}])},{default:o((()=>[d(f(N.value),1)])),_:1},8,["class"])])),_:1})}}}),[["__scopeId","data-v-cfd573f5"]]);export{T as default};
import{d as s,a,r as e,o as l,b as t,e as i,f as n,w as o,i as c,E as u,j as d,g as r,t as f,l as m,m as g,F as _,n as b,s as p,G as h,y as v,z as k,x as y,u as j}from"./index-CoO0Bu96.js";import{_ as C}from"./config-doctor.TgARj_nM.js";import{c as I,a as w}from"./navigation.C05E413Y.js";import{_ as x}from"./_plugin-vue_export-helper.BCo6x5W8.js";const T=x(s({__name:"home",emits:["open-settings","open-profile"],setup(s,{emit:x}){const T=x,A=I(T),M=w(T),D=a({greeting:"下午好,医生。",highlight:"让我们继续提升您的临床思维能力吧。",remainingModules:3,doctorName:"王主任"}),E=[{title:"精准补强·薄弱环节训练",icon:"trend-icon"},{title:"实战进阶·科室专项训练",icon:"notes-icon"},{title:"新手入门·教学互动模式模式训练",icon:"school-icon"},{title:"精益管理·老师针对性任务训练",icon:"admin-icon"}],F=e(!1),N=e(""),O=e(!1);let P=null;function S(){F.value||(F.value=!0,Promise.resolve({sessionId:`mock-session-${Date.now()}`,startedAt:(new Date).toISOString()}).then((s=>{p("clinical-thinking-session",s),h({url:"/pages/matching/matching"})})).catch((s=>{!function(s){P&&clearTimeout(P);N.value=s,O.value=!0,P=setTimeout((()=>{O.value=!1}),2200)}(s instanceof Error?s.message:"进入训练失败")})).finally((()=>{setTimeout((()=>{F.value=!1}),300)})))}function z(){h({url:"/pages/learning-assistant/learning-assistant"})}return l((function(){Promise.resolve({greeting:"下午好,医生。",highlight:"让我们继续提升您的临床思维能力吧。",remainingModules:3,doctorName:"王主任"}).then((s=>{Object.assign(D,s)}))})),t((()=>{P&&clearTimeout(P)})),(s,a)=>{const e=v,l=k,t=y,p=j;return i(),n(e,{class:"home-page"},{default:o((()=>[c(e,{class:"home-shell"},{default:o((()=>[c(e,{class:"top-bar"},{default:o((()=>[c(l,{class:"icon-button","aria-label":"配置",onClick:u(M)},{default:o((()=>[c(e,{class:"settings-icon"})])),_:1},8,["onClick"]),c(e,{class:"top-spacer"}),c(l,{class:"icon-button","aria-label":"个人中心",onClick:u(A)},{default:o((()=>[c(e,{class:"account-icon"})])),_:1},8,["onClick"])])),_:1}),c(e,{class:"home-main"},{default:o((()=>[c(e,{class:"speech-bubble"},{default:o((()=>[c(t,{class:"bubble-copy"},{default:o((()=>[d("下午好,医生。准备好开始今天的")])),_:1}),c(t,{class:"bubble-strong"},{default:o((()=>[d("带教模拟")])),_:1}),c(t,{class:"bubble-copy"},{default:o((()=>[d(",精进")])),_:1}),c(t,{class:"bubble-highlight"},{default:o((()=>[d("临床思维")])),_:1}),c(t,{class:"bubble-copy"},{default:o((()=>[d("了吗?")])),_:1})])),_:1}),c(e,{class:"doctor-stage"},{default:o((()=>[c(e,{class:"doctor-shadow"}),c(p,{class:"director-image",src:C,mode:"aspectFit"})])),_:1}),c(e,{class:"training-panel"},{default:o((()=>[c(e,{class:"primary-action"},{default:o((()=>[c(l,{class:"start-button",disabled:F.value,onClick:S},{default:o((()=>[F.value?(i(),n(e,{key:0,class:"spinner"})):r("",!0),c(t,null,{default:o((()=>[d(f(F.value?"正在进入...":"开始训练"),1)])),_:1})])),_:1},8,["disabled"]),c(t,{class:"remaining"},{default:o((()=>[d("今日剩余:"+f(D.remainingModules)+"个模块",1)])),_:1})])),_:1}),c(e,{class:"module-grid"},{default:o((()=>[(i(),m(_,null,g(E,(s=>c(l,{key:s.title,class:"module-card",onClick:S},{default:o((()=>[c(e,{class:b(["module-icon",s.icon])},null,8,["class"]),c(t,{class:"module-title"},{default:o((()=>[d(f(s.title),1)])),_:2},1024)])),_:2},1024))),64))])),_:1}),c(e,{class:"assistant-actions"},{default:o((()=>[c(l,{class:"assistant-button",onClick:z},{default:o((()=>[c(e,{class:"assistant-icon chat-icon"}),c(t,null,{default:o((()=>[d("AI 学习助手(医院知识库)")])),_:1})])),_:1}),c(l,{class:"assistant-button disabled",disabled:"","aria-disabled":"true"},{default:o((()=>[c(e,{class:"assistant-icon forum-icon"}),c(t,null,{default:o((()=>[d("方老师AI教学助手沟通")])),_:1})])),_:1})])),_:1})])),_:1})])),_:1})])),_:1}),c(e,{class:b(["toast",{visible:O.value}])},{default:o((()=>[d(f(N.value),1)])),_:1},8,["class"])])),_:1})}}}),[["__scopeId","data-v-cfd573f5"]]);export{T as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{d as a,a as s,r as e,o as l,b as t,e as r,f as n,w as c,i as o,l as i,m as u,F as d,j as g,t as p,H as f,p as m,y as _,x as b,u as v,n as h}from"./index-CpNRQgjE.js";import{_ as y}from"./config-doctor.TgARj_nM.js";import{_ as x}from"./_plugin-vue_export-helper.BCo6x5W8.js";const $=x(a({__name:"matching",setup(a){const x=s({message:"王主任正在为您智能匹配病例",subtitle:"正在通过大模型计算最适合您的临床案例库...",progressTarget:92,tags:[]}),$=e([]),I=e(0);let M=0,w=null,j=null;function k(){Promise.resolve({message:"王主任正在为您智能匹配病例",subtitle:"正在通过大模型计算最适合您的临床案例库...",progressTarget:92,tags:[{label:"薄弱环节",tone:"secondary"},{label:"主治医级别",tone:"primary"},{label:"高匹配度",tone:"tertiary"},{label:"基于历史偏好",tone:"neutral"}]}).then((a=>{Object.assign(x,a),function(){j&&clearInterval(j);I.value=0;const a=Date.now();j=setInterval((()=>{const s=Date.now()-a,e=Math.min(1,s/1e4);if(I.value=Math.round(x.progressTarget*e),e>=1)return j&&clearInterval(j),j=null,void m({url:"/pages/cases/cases"})}),100)}()}))}function T(){const a=M++,s=256*Math.random(),e=256*Math.random(),l=150*(Math.random()-.5),t=150*(Math.random()-.5),r=2+3*Math.random();$.value.push({id:a,style:{left:`${s}px`,top:`${e}px`,"--particle-x":`${l}px`,"--particle-y":`${t}px`,animationDuration:`${r}s`}}),setTimeout((()=>{$.value=$.value.filter((s=>s.id!==a))}),1e3*r)}return l((()=>{k(),function(){for(let a=0;a<12;a+=1)T();w=setInterval(T,300)}()})),t((()=>{w&&clearInterval(w),j&&clearInterval(j)})),(a,s)=>{const e=_,l=b,t=v;return r(),n(e,{class:"matching-page"},{default:c((()=>[o(e,{class:"matching-shell"},{default:c((()=>[o(e,{class:"top-visual"},{default:c((()=>[o(e,{class:"network"},{default:c((()=>[o(e,{class:"ring ring-large"}),o(e,{class:"ring ring-middle"}),o(e,{class:"ring ring-small"}),o(e,{class:"node node-top"}),o(e,{class:"node node-left"}),o(e,{class:"node node-right"}),(r(!0),i(d,null,u($.value,(a=>(r(),n(e,{key:a.id,class:"particle",style:f(a.style)},null,8,["style"])))),128))])),_:1})])),_:1}),o(e,{class:"middle-visual"},{default:c((()=>[o(e,{class:"match-bubble"},{default:c((()=>[o(l,null,{default:c((()=>[g(p(x.message),1)])),_:1}),o(l,{class:"typing-dots"}),o(e,{class:"bubble-tail"})])),_:1}),o(e,{class:"director-card"},{default:c((()=>[o(t,{class:"director-image",src:y,mode:"aspectFit"})])),_:1}),o(e,{class:"intelligence-area"},{default:c((()=>[o(e,{class:"scan-circle"},{default:c((()=>[o(e,{class:"pulse-ring ring-one"}),o(e,{class:"pulse-ring ring-two"}),o(e,{class:"brain-core"},{default:c((()=>[o(e,{class:"scan-bar"}),o(e,{class:"brain-icon"})])),_:1})])),_:1}),(r(!0),i(d,null,u(x.tags,((a,s)=>(r(),n(e,{key:a.label,class:h(["float-tag",[`tag-${a.tone}`,`tag-pos-${s}`]])},{default:c((()=>[o(l,null,{default:c((()=>[g(p(a.label),1)])),_:2},1024)])),_:2},1032,["class"])))),128))])),_:1})])),_:1}),o(e,{class:"bottom-progress"},{default:c((()=>[o(e,{class:"progress-track"},{default:c((()=>[o(e,{class:"progress-fill",style:f({width:`${I.value}%`})},null,8,["style"])])),_:1}),o(l,{class:"progress-subtitle"},{default:c((()=>[g(p(x.subtitle),1)])),_:1}),o(e,{class:"security-icon"})])),_:1})])),_:1})])),_:1})}}}),[["__scopeId","data-v-a610ab33"]]);export{$ as default};
import{d as a,a as s,r as e,o as l,b as t,e as r,f as n,w as c,i as o,l as i,m as u,F as d,j as g,t as p,H as f,p as m,y as _,x as b,u as v,n as h}from"./index-CoO0Bu96.js";import{_ as y}from"./config-doctor.TgARj_nM.js";import{_ as x}from"./_plugin-vue_export-helper.BCo6x5W8.js";const $=x(a({__name:"matching",setup(a){const x=s({message:"王主任正在为您智能匹配病例",subtitle:"正在通过大模型计算最适合您的临床案例库...",progressTarget:92,tags:[]}),$=e([]),I=e(0);let M=0,w=null,j=null;function k(){Promise.resolve({message:"王主任正在为您智能匹配病例",subtitle:"正在通过大模型计算最适合您的临床案例库...",progressTarget:92,tags:[{label:"薄弱环节",tone:"secondary"},{label:"主治医级别",tone:"primary"},{label:"高匹配度",tone:"tertiary"},{label:"基于历史偏好",tone:"neutral"}]}).then((a=>{Object.assign(x,a),function(){j&&clearInterval(j);I.value=0;const a=Date.now();j=setInterval((()=>{const s=Date.now()-a,e=Math.min(1,s/1e4);if(I.value=Math.round(x.progressTarget*e),e>=1)return j&&clearInterval(j),j=null,void m({url:"/pages/cases/cases"})}),100)}()}))}function T(){const a=M++,s=256*Math.random(),e=256*Math.random(),l=150*(Math.random()-.5),t=150*(Math.random()-.5),r=2+3*Math.random();$.value.push({id:a,style:{left:`${s}px`,top:`${e}px`,"--particle-x":`${l}px`,"--particle-y":`${t}px`,animationDuration:`${r}s`}}),setTimeout((()=>{$.value=$.value.filter((s=>s.id!==a))}),1e3*r)}return l((()=>{k(),function(){for(let a=0;a<12;a+=1)T();w=setInterval(T,300)}()})),t((()=>{w&&clearInterval(w),j&&clearInterval(j)})),(a,s)=>{const e=_,l=b,t=v;return r(),n(e,{class:"matching-page"},{default:c((()=>[o(e,{class:"matching-shell"},{default:c((()=>[o(e,{class:"top-visual"},{default:c((()=>[o(e,{class:"network"},{default:c((()=>[o(e,{class:"ring ring-large"}),o(e,{class:"ring ring-middle"}),o(e,{class:"ring ring-small"}),o(e,{class:"node node-top"}),o(e,{class:"node node-left"}),o(e,{class:"node node-right"}),(r(!0),i(d,null,u($.value,(a=>(r(),n(e,{key:a.id,class:"particle",style:f(a.style)},null,8,["style"])))),128))])),_:1})])),_:1}),o(e,{class:"middle-visual"},{default:c((()=>[o(e,{class:"match-bubble"},{default:c((()=>[o(l,null,{default:c((()=>[g(p(x.message),1)])),_:1}),o(l,{class:"typing-dots"}),o(e,{class:"bubble-tail"})])),_:1}),o(e,{class:"director-card"},{default:c((()=>[o(t,{class:"director-image",src:y,mode:"aspectFit"})])),_:1}),o(e,{class:"intelligence-area"},{default:c((()=>[o(e,{class:"scan-circle"},{default:c((()=>[o(e,{class:"pulse-ring ring-one"}),o(e,{class:"pulse-ring ring-two"}),o(e,{class:"brain-core"},{default:c((()=>[o(e,{class:"scan-bar"}),o(e,{class:"brain-icon"})])),_:1})])),_:1}),(r(!0),i(d,null,u(x.tags,((a,s)=>(r(),n(e,{key:a.label,class:h(["float-tag",[`tag-${a.tone}`,`tag-pos-${s}`]])},{default:c((()=>[o(l,null,{default:c((()=>[g(p(a.label),1)])),_:2},1024)])),_:2},1032,["class"])))),128))])),_:1})])),_:1}),o(e,{class:"bottom-progress"},{default:c((()=>[o(e,{class:"progress-track"},{default:c((()=>[o(e,{class:"progress-fill",style:f({width:`${I.value}%`})},null,8,["style"])])),_:1}),o(l,{class:"progress-subtitle"},{default:c((()=>[g(p(x.subtitle),1)])),_:1}),o(e,{class:"security-icon"})])),_:1})])),_:1})])),_:1})}}}),[["__scopeId","data-v-a610ab33"]]);export{$ as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{d as a,r as e,c as s,b as l,e as t,f as c,w as r,i as d,N as o,j as u,l as n,m as i,F as f,g as _,n as p,t as m,P as b,Q as h,D as y,y as v,z as g,x as k,I as x,S as j,k as w,G as C}from"./index-CpNRQgjE.js";import{_ as V}from"./_plugin-vue_export-helper.BCo6x5W8.js";const I=V(a({__name:"profile-records",setup(a){const V=e(""),I=e(""),z=e(!1),D=[{label:"总病例",value:"12"},{label:"总时长",value:"128h"},{label:"平均正确率",value:"92%",secondary:!0}],F=[{title:"急性心肌梗死",department:"心内科",date:"2023-11-20",score:"98",abbr:"心",tone:"primary"},{title:"缺血性脑卒中",department:"神经内科",date:"2023-11-18",score:"85",abbr:"神",tone:"secondary"},{title:"重症肺炎伴呼吸衰竭",department:"呼吸科",date:"2023-11-15",score:"92",abbr:"肺",tone:"tertiary"},{title:"急性胰腺炎",department:"消化内科",date:"2023-11-12",score:"78",abbr:"消",tone:"primary",dimmed:!0},{title:"糖尿病肾病五期",department:"肾内科",date:"2023-11-10",score:"95",abbr:"肾",tone:"secondary",dimmed:!0}],G=s((()=>{const a=V.value.trim();return a?F.filter((e=>[e.title,e.department,e.date].some((e=>e.includes(a))))):F}));function N(){"function"==typeof b&&b().length>1?h():y({url:"/pages/profile/profile"})}function P(){C({url:"/pages/assessment/assessment"})}return l((()=>{})),(a,e)=>{const s=v,l=g,b=k,h=x,y=j;return t(),c(s,{class:"records-page"},{default:r((()=>[d(s,{class:"records-shell"},{default:r((()=>[o("header",{class:"top-bar"},[d(l,{class:"icon-button","aria-label":"返回",onClick:N},{default:r((()=>[d(s,{class:"back-icon"})])),_:1}),d(b,{class:"page-title"},{default:r((()=>[u("学习记录")])),_:1})]),d(y,{class:"records-scroll","scroll-y":""},{default:r((()=>[o("main",{class:"records-main"},[o("section",{class:"stats-grid"},[(t(),n(f,null,i(D,(a=>d(s,{key:a.label,class:"stat-card"},{default:r((()=>[d(b,{class:"stat-label"},{default:r((()=>[u(m(a.label),1)])),_:2},1024),d(b,{class:p(["stat-value",{secondary:a.secondary}])},{default:r((()=>[u(m(a.value),1)])),_:2},1032,["class"])])),_:2},1024))),64))]),o("section",{class:"search-section"},[d(s,{class:"search-field"},{default:r((()=>[d(s,{class:"search-icon"}),d(h,{modelValue:V.value,"onUpdate:modelValue":e[0]||(e[0]=a=>V.value=a),class:"search-input",placeholder:"搜索病例标题或科室...","placeholder-class":"search-placeholder",type:"text"},null,8,["modelValue"])])),_:1})]),o("section",{class:"history-section"},[d(b,{class:"section-title"},{default:r((()=>[u("最近训练")])),_:1}),d(s,{class:"record-list"},{default:r((()=>[(t(!0),n(f,null,i(G.value,(a=>(t(),c(s,{key:a.title,class:p(["record-card",{dimmed:a.dimmed}]),onClick:P},{default:r((()=>[d(s,{class:p(["case-icon-wrap",a.tone])},{default:r((()=>[d(b,{class:"case-icon-text"},{default:r((()=>[u(m(a.abbr),1)])),_:2},1024)])),_:2},1032,["class"]),d(s,{class:"case-copy"},{default:r((()=>[d(b,{class:"case-title"},{default:r((()=>[u(m(a.title),1)])),_:2},1024),d(s,{class:"case-meta"},{default:r((()=>[d(b,null,{default:r((()=>[u(m(a.department),1)])),_:2},1024),d(b,{class:"dot"},{default:r((()=>[u("•")])),_:1}),d(b,null,{default:r((()=>[u(m(a.date),1)])),_:2},1024)])),_:2},1024)])),_:2},1024),d(s,{class:"score-block"},{default:r((()=>[d(s,{class:"score-row"},{default:r((()=>[d(b,{class:"score-value"},{default:r((()=>[u(m(a.score),1)])),_:2},1024),d(b,{class:"score-unit"},{default:r((()=>[u("分")])),_:1})])),_:2},1024),d(l,{class:"report-button",onClick:w(P,["stop"])},{default:r((()=>[d(b,null,{default:r((()=>[u("查看报告")])),_:1}),d(s,{class:"small-chevron"})])),_:1})])),_:2},1024)])),_:2},1032,["class"])))),128)),0===G.value.length?(t(),c(s,{key:0,class:"empty-state"},{default:r((()=>[d(b,null,{default:r((()=>[u("没有找到匹配的训练记录")])),_:1})])),_:1})):_("",!0)])),_:1})]),d(s,{class:"bottom-hint"},{default:r((()=>[d(b,null,{default:r((()=>[u("已经到底啦")])),_:1})])),_:1})])])),_:1}),d(s,{class:p(["toast",{visible:z.value}])},{default:r((()=>[u(m(I.value),1)])),_:1},8,["class"])])),_:1})])),_:1})}}}),[["__scopeId","data-v-15539840"]]);export{I as default};
import{d as a,r as e,c as s,b as l,e as t,f as c,w as r,i as d,N as o,j as u,l as n,m as i,F as f,g as _,n as p,t as m,P as b,Q as h,D as y,y as v,z as g,x as k,I as x,S as j,k as w,G as C}from"./index-CoO0Bu96.js";import{_ as V}from"./_plugin-vue_export-helper.BCo6x5W8.js";const I=V(a({__name:"profile-records",setup(a){const V=e(""),I=e(""),z=e(!1),D=[{label:"总病例",value:"12"},{label:"总时长",value:"128h"},{label:"平均正确率",value:"92%",secondary:!0}],F=[{title:"急性心肌梗死",department:"心内科",date:"2023-11-20",score:"98",abbr:"心",tone:"primary"},{title:"缺血性脑卒中",department:"神经内科",date:"2023-11-18",score:"85",abbr:"神",tone:"secondary"},{title:"重症肺炎伴呼吸衰竭",department:"呼吸科",date:"2023-11-15",score:"92",abbr:"肺",tone:"tertiary"},{title:"急性胰腺炎",department:"消化内科",date:"2023-11-12",score:"78",abbr:"消",tone:"primary",dimmed:!0},{title:"糖尿病肾病五期",department:"肾内科",date:"2023-11-10",score:"95",abbr:"肾",tone:"secondary",dimmed:!0}],G=s((()=>{const a=V.value.trim();return a?F.filter((e=>[e.title,e.department,e.date].some((e=>e.includes(a))))):F}));function N(){"function"==typeof b&&b().length>1?h():y({url:"/pages/profile/profile"})}function P(){C({url:"/pages/assessment/assessment"})}return l((()=>{})),(a,e)=>{const s=v,l=g,b=k,h=x,y=j;return t(),c(s,{class:"records-page"},{default:r((()=>[d(s,{class:"records-shell"},{default:r((()=>[o("header",{class:"top-bar"},[d(l,{class:"icon-button","aria-label":"返回",onClick:N},{default:r((()=>[d(s,{class:"back-icon"})])),_:1}),d(b,{class:"page-title"},{default:r((()=>[u("学习记录")])),_:1})]),d(y,{class:"records-scroll","scroll-y":""},{default:r((()=>[o("main",{class:"records-main"},[o("section",{class:"stats-grid"},[(t(),n(f,null,i(D,(a=>d(s,{key:a.label,class:"stat-card"},{default:r((()=>[d(b,{class:"stat-label"},{default:r((()=>[u(m(a.label),1)])),_:2},1024),d(b,{class:p(["stat-value",{secondary:a.secondary}])},{default:r((()=>[u(m(a.value),1)])),_:2},1032,["class"])])),_:2},1024))),64))]),o("section",{class:"search-section"},[d(s,{class:"search-field"},{default:r((()=>[d(s,{class:"search-icon"}),d(h,{modelValue:V.value,"onUpdate:modelValue":e[0]||(e[0]=a=>V.value=a),class:"search-input",placeholder:"搜索病例标题或科室...","placeholder-class":"search-placeholder",type:"text"},null,8,["modelValue"])])),_:1})]),o("section",{class:"history-section"},[d(b,{class:"section-title"},{default:r((()=>[u("最近训练")])),_:1}),d(s,{class:"record-list"},{default:r((()=>[(t(!0),n(f,null,i(G.value,(a=>(t(),c(s,{key:a.title,class:p(["record-card",{dimmed:a.dimmed}]),onClick:P},{default:r((()=>[d(s,{class:p(["case-icon-wrap",a.tone])},{default:r((()=>[d(b,{class:"case-icon-text"},{default:r((()=>[u(m(a.abbr),1)])),_:2},1024)])),_:2},1032,["class"]),d(s,{class:"case-copy"},{default:r((()=>[d(b,{class:"case-title"},{default:r((()=>[u(m(a.title),1)])),_:2},1024),d(s,{class:"case-meta"},{default:r((()=>[d(b,null,{default:r((()=>[u(m(a.department),1)])),_:2},1024),d(b,{class:"dot"},{default:r((()=>[u("•")])),_:1}),d(b,null,{default:r((()=>[u(m(a.date),1)])),_:2},1024)])),_:2},1024)])),_:2},1024),d(s,{class:"score-block"},{default:r((()=>[d(s,{class:"score-row"},{default:r((()=>[d(b,{class:"score-value"},{default:r((()=>[u(m(a.score),1)])),_:2},1024),d(b,{class:"score-unit"},{default:r((()=>[u("分")])),_:1})])),_:2},1024),d(l,{class:"report-button",onClick:w(P,["stop"])},{default:r((()=>[d(b,null,{default:r((()=>[u("查看报告")])),_:1}),d(s,{class:"small-chevron"})])),_:1})])),_:2},1024)])),_:2},1032,["class"])))),128)),0===G.value.length?(t(),c(s,{key:0,class:"empty-state"},{default:r((()=>[d(b,null,{default:r((()=>[u("没有找到匹配的训练记录")])),_:1})])),_:1})):_("",!0)])),_:1})]),d(s,{class:"bottom-hint"},{default:r((()=>[d(b,null,{default:r((()=>[u("已经到底啦")])),_:1})])),_:1})])])),_:1}),d(s,{class:p(["toast",{visible:z.value}])},{default:r((()=>[u(m(I.value),1)])),_:1},8,["class"])])),_:1})])),_:1})}}}),[["__scopeId","data-v-15539840"]]);export{I as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{C as e,s as t}from"./index-CpNRQgjE.js";const n="/fastapi/api/v1";function s(){const t=e("clinical-thinking-access-token");if("string"!=typeof t||!t.trim())throw new Error("登录已过期,请重新登录");return t}function o(e="application/json"){return{"Content-Type":"application/json",Accept:e,Authorization:`Bearer ${s()}`,"X-Entry-Scene":"vue_frontend"}}async function a(e){const t=await e.text().catch((()=>""));if(!t)return`请求失败(${e.status}`;try{const e=JSON.parse(t),n=e.message||e.detail||e.error;if("string"==typeof n&&n.trim())return n}catch{}return t}function r(){const t=e("clinical-thinking-scenario");return t&&"object"==typeof t?t:null}function i(){var e,t;const n=null==(t=null==(e=r())?void 0:e.session)?void 0:t.session_id;if("number"==typeof n&&Number.isInteger(n)&&n>0)return n;throw new Error("未找到当前会话,请先生成模拟场景")}function c(e){const n=r();(null==n?void 0:n.session)&&t("clinical-thinking-scenario",{...n,session:{...n.session,status:e}})}async function f(e){var t;const n=await fetch("/fastapi/api/v1/sessions",{method:"POST",headers:o(),body:JSON.stringify(e)});if(!n.ok)throw new Error(await a(n));const s=await n.json();if("OK"!==s.code||!(null==(t=s.data)?void 0:t.session_id))throw new Error(s.message||"新建会话失败");return s.data}async function d(e){var t;const n=await fetch(`/fastapi/api/v1/sessions/${e}/complete-inquiry`,{method:"POST",headers:o()});if(!n.ok)throw new Error(await a(n));const s=await n.json();if("OK"!==s.code||!(null==(t=s.data)?void 0:t.session_id))throw new Error(s.message||"完成采集失败");return s.data}async function l(e,t,n,s){var r,i,c;const f=await fetch(`/fastapi/api/v1/sessions/${e}/chat/stream`,{method:"POST",headers:o("text/event-stream"),body:JSON.stringify({message:t}),signal:s});if(!f.ok||!f.body)throw new Error(await a(f));const d=f.body.getReader(),l=new TextDecoder;let u="",w=!1;for(;;){const{value:e,done:t}=await d.read();if(t)break;u+=l.decode(e,{stream:!0});const s=u.split("\n\n");u=s.pop()||"";for(const o of s){const e=null==(r=o.match(/^event:\s*(.+)$/m))?void 0:r[1],t=null==(i=o.match(/^data:\s*(.+)$/m))?void 0:i[1];if(!e||!t)continue;const s=JSON.parse(t);if("message_delta"===e){const e=s.delta;"string"==typeof e&&n.onDelta(e)}else if("message_done"===e)w=!0,null==(c=n.onDone)||c.call(n,s);else if("error"===e)throw new Error("string"==typeof s.message?s.message:"AI 流式回复异常")}}if(!w)throw new Error("AI 流式回复未正常结束,请重试")}async function u(e,t,n,s){var r,i,c;const f={last_user_message:t,scope:"current_conversation"},d=await fetch(`/fastapi/api/v1/sessions/${e}/hints/stream`,{method:"POST",headers:o("text/event-stream"),body:JSON.stringify(f),signal:s});if(!d.ok||!d.body)throw new Error(await a(d));const l=d.body.getReader(),u=new TextDecoder;let w="",h=!1;for(;;){const{value:e,done:t}=await l.read();if(t)break;w+=u.decode(e,{stream:!0});const s=w.split("\n\n");w=s.pop()||"";for(const o of s){const e=null==(r=o.match(/^event:\s*(.+)$/m))?void 0:r[1],t=null==(i=o.match(/^data:\s*(.+)$/m))?void 0:i[1];if(!e||!t)continue;const s=JSON.parse(t);if("hint_delta"===e){const e=s.delta;"string"==typeof e&&n.onDelta(e)}else if("hint_done"===e)h=!0,null==(c=n.onDone)||c.call(n,s);else if("error"===e)throw new Error("string"==typeof s.message?s.message:"练习提示生成失败,请稍后重试")}}if(!h)throw new Error("练习提示未正常结束,请重试")}export{n as F,o as a,r as b,f as c,d,u as e,i as f,a as r,l as s,c as u};
import{C as e,s as t}from"./index-CoO0Bu96.js";const n="/fastapi/api/v1";function s(){const t=e("clinical-thinking-access-token");if("string"!=typeof t||!t.trim())throw new Error("登录已过期,请重新登录");return t}function o(e="application/json"){return{"Content-Type":"application/json",Accept:e,Authorization:`Bearer ${s()}`,"X-Entry-Scene":"vue_frontend"}}async function a(e){const t=await e.text().catch((()=>""));if(!t)return`请求失败(${e.status}`;try{const e=JSON.parse(t),n=e.message||e.detail||e.error;if("string"==typeof n&&n.trim())return n}catch{}return t}function r(){const t=e("clinical-thinking-scenario");return t&&"object"==typeof t?t:null}function i(){var e,t;const n=null==(t=null==(e=r())?void 0:e.session)?void 0:t.session_id;if("number"==typeof n&&Number.isInteger(n)&&n>0)return n;throw new Error("未找到当前会话,请先生成模拟场景")}function c(e){const n=r();(null==n?void 0:n.session)&&t("clinical-thinking-scenario",{...n,session:{...n.session,status:e}})}async function f(e){var t;const n=await fetch("/fastapi/api/v1/sessions",{method:"POST",headers:o(),body:JSON.stringify(e)});if(!n.ok)throw new Error(await a(n));const s=await n.json();if("OK"!==s.code||!(null==(t=s.data)?void 0:t.session_id))throw new Error(s.message||"新建会话失败");return s.data}async function d(e){var t;const n=await fetch(`/fastapi/api/v1/sessions/${e}/complete-inquiry`,{method:"POST",headers:o()});if(!n.ok)throw new Error(await a(n));const s=await n.json();if("OK"!==s.code||!(null==(t=s.data)?void 0:t.session_id))throw new Error(s.message||"完成采集失败");return s.data}async function l(e,t,n,s){var r,i,c;const f=await fetch(`/fastapi/api/v1/sessions/${e}/chat/stream`,{method:"POST",headers:o("text/event-stream"),body:JSON.stringify({message:t}),signal:s});if(!f.ok||!f.body)throw new Error(await a(f));const d=f.body.getReader(),l=new TextDecoder;let u="",w=!1;for(;;){const{value:e,done:t}=await d.read();if(t)break;u+=l.decode(e,{stream:!0});const s=u.split("\n\n");u=s.pop()||"";for(const o of s){const e=null==(r=o.match(/^event:\s*(.+)$/m))?void 0:r[1],t=null==(i=o.match(/^data:\s*(.+)$/m))?void 0:i[1];if(!e||!t)continue;const s=JSON.parse(t);if("message_delta"===e){const e=s.delta;"string"==typeof e&&n.onDelta(e)}else if("message_done"===e)w=!0,null==(c=n.onDone)||c.call(n,s);else if("error"===e)throw new Error("string"==typeof s.message?s.message:"AI 流式回复异常")}}if(!w)throw new Error("AI 流式回复未正常结束,请重试")}async function u(e,t,n,s){var r,i,c;const f={last_user_message:t,scope:"current_conversation"},d=await fetch(`/fastapi/api/v1/sessions/${e}/hints/stream`,{method:"POST",headers:o("text/event-stream"),body:JSON.stringify(f),signal:s});if(!d.ok||!d.body)throw new Error(await a(d));const l=d.body.getReader(),u=new TextDecoder;let w="",h=!1;for(;;){const{value:e,done:t}=await l.read();if(t)break;w+=u.decode(e,{stream:!0});const s=w.split("\n\n");w=s.pop()||"";for(const o of s){const e=null==(r=o.match(/^event:\s*(.+)$/m))?void 0:r[1],t=null==(i=o.match(/^data:\s*(.+)$/m))?void 0:i[1];if(!e||!t)continue;const s=JSON.parse(t);if("hint_delta"===e){const e=s.delta;"string"==typeof e&&n.onDelta(e)}else if("hint_done"===e)h=!0,null==(c=n.onDone)||c.call(n,s);else if("error"===e)throw new Error("string"==typeof s.message?s.message:"练习提示生成失败,请稍后重试")}}if(!h)throw new Error("练习提示未正常结束,请重试")}export{n as F,o as a,r as b,f as c,d,u as e,i as f,a as r,l as s,c as u};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-1
View File
File diff suppressed because one or more lines are too long
+1
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,7 +1,7 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<link rel="stylesheet" href="./assets/uni.4f16ff35.css">
<link rel="stylesheet" href="./assets/uni.f2dcd8b7.css">
<meta charset="UTF-8" />
<script>
@@ -14,7 +14,7 @@
<title>AI思维临床训练</title>
<!--preload-links-->
<!--app-context-->
<script type="module" crossorigin src="./assets/index-CpNRQgjE.js"></script>
<script type="module" crossorigin src="./assets/index-CoO0Bu96.js"></script>
<link rel="stylesheet" crossorigin href="./assets/index-C7PPi8dw.css">
</head>
<body>