2 lines
8.7 KiB
JavaScript
2 lines
8.7 KiB
JavaScript
import{d as e,a,r as l,c as s,o as t,b as o,e as n,f as c,w as i,i as u,j as r,t as d,l as m,m as v,F as p,n as _,s as f,G as g,u as b,y,x as h,z as k,S as w}from"./index-CoO0Bu96.js";import{_ as C}from"./config-doctor.TgARj_nM.js";import{r as G}from"./cases.DfX6IxCO.js";import{F as j,a as x,r as I,c as T}from"./session.DpZWKT0-.js";import{_ as E}from"./_plugin-vue_export-helper.BCo6x5W8.js";const O=""+new URL("config-hospital-BKoUC35q.png",import.meta.url).href,F={environments:[{value:"outpatient",label:"门诊"},{value:"emergency",label:"急诊"},{value:"ward",label:"病房"}],ageGroups:[{value:"child",label:"儿童"},{value:"youth",label:"青年"},{value:"middle_aged",label:"中年"},{value:"elderly",label:"老年"}],educations:[{value:"primary_or_below",label:"小学及以下"},{value:"secondary",label:"中等教育"},{value:"higher",label:"高等教育"}],personalities:[{value:"calm",label:"平和"},{value:"anxious",label:"焦虑"},{value:"impatient",label:"急躁"},{value:"cooperative",label:"配合"},{value:"suspicious",label:"多疑"}]};function S(e,a,l){const s=null==e?void 0:e[a];return Array.isArray(s)?s:s&&"object"==typeof s?Object.entries(s).map((([e,a])=>({value:e,label:String(a)}))):l}async function $(e){var a;const l=await fetch(`${j}/training-config/options?case_id=${encodeURIComponent(e)}`,{method:"GET",headers:x()});if(!l.ok)throw new Error(await I(l));const s=await l.json();if("OK"!==s.code||!(null==(a=s.data)?void 0:a.recommended))throw new Error(s.message||"推荐配置加载失败");return{recommended:{environment:(t=s.data).recommended.visit_environment,ageGroup:t.recommended.age_group,education:t.recommended.education_level,personality:t.recommended.personality},recommendedLabels:{environment:t.recommended_labels.visit_environment,ageGroup:t.recommended_labels.age_group,education:t.recommended_labels.education_level,personality:t.recommended_labels.personality},options:{environments:S(t.options,"visit_environment",F.environments),ageGroups:S(t.options,"age_group",F.ageGroups),educations:S(t.options,"education_level",F.educations),personalities:S(t.options,"personality",F.personalities)}};var t}const A=E(e({__name:"scenario",props:{caseItem:{}},setup(e){const j=e,x=a({environment:"outpatient",ageGroup:"youth",education:"higher",personality:"calm"}),I=l([]),E=l(F),S=l(""),A=l(!1),N=l(""),U=l(!1),K=l(!1),L=l(null);let R=null;const q=s((()=>j.caseItem||L.value)),z=s((()=>q.value?`${q.value.title}(${q.value.caseNo})`:"未选择病例"));async function B(){const e=await Promise.resolve({recommendations:[{id:"typical-outpatient",title:"典型门诊病例",desc:"门诊常规病例:针对初学者设计的标准化沟通流程。",tags:["中年","配合"],defaults:{environment:"outpatient",ageGroup:"middle_aged",education:"higher",personality:"calm"}},{id:"emergency-crisis",title:"急诊重症危机",desc:"急诊危重:急性心梗紧急入院。",tags:["老年","急躁"],defaults:{environment:"emergency",ageGroup:"elderly",education:"secondary",personality:"impatient"}}],options:F});I.value=e.recommendations,E.value=e.options;try{const e=await $(1);E.value=e.options,Object.assign(x,e.recommended)}catch(a){J(a instanceof Error?a.message:"推荐配置加载失败")}}function D(e,a){x[e]=a,S.value=""}function P(){K.value=!K.value}function H(){var e;q.value?(A.value=!0,(e={...x,caseId:q.value.id,caseNo:q.value.caseNo,mode:"teaching"===q.value.mode?"teaching":"practice",recommendationId:S.value||void 0},T({case_id:1,training_type:"diagnosis_treatment",mode:e.mode,score_type:"percentage",patient_config:{visit_environment:e.environment,age_group:e.ageGroup,education_level:e.education,personality:e.personality}}).then((a=>({id:a.session_code,...e,session:a,createdAt:(new Date).toISOString()})))).then((e=>{f("clinical-thinking-scenario",e),J("模拟场景已生成"),setTimeout((()=>{g({url:"/pages/chat/chat"})}),450)})).catch((e=>{J(e instanceof Error?e.message:"模拟场景生成失败")})).finally((()=>{setTimeout((()=>{A.value=!1}),600)}))):J("请先选择病例")}function J(e){R&&clearTimeout(R),N.value=e,U.value=!0,R=setTimeout((()=>{U.value=!1}),2200)}return t((()=>{L.value=G(),B()})),o((()=>{R&&clearTimeout(R)})),(e,a)=>{const l=b,s=y,t=h,o=k,f=w;return n(),c(s,{class:"scenario-page"},{default:i((()=>[u(s,{class:"scenario-shell"},{default:i((()=>[u(s,{class:"hero"},{default:i((()=>[u(l,{class:"hero-image",src:O,mode:"aspectFill"}),u(s,{class:"hero-fade"})])),_:1}),u(s,{class:"director-row"},{default:i((()=>[u(s,{class:"director-avatar"},{default:i((()=>[u(l,{class:"director-image",src:C,mode:"aspectFit"})])),_:1}),u(s,{class:"speech-bubble"},{default:i((()=>[u(t,null,{default:i((()=>[r("欢迎回来!请根据您的教学目标配置临床场景。")])),_:1})])),_:1})])),_:1}),u(f,{class:"config-scroll","scroll-y":""},{default:i((()=>[u(s,{class:"selected-case"},{default:i((()=>[u(t,{class:"case-label"},{default:i((()=>[r("当前病例")])),_:1}),u(t,{class:"case-title"},{default:i((()=>[r(d(z.value),1)])),_:1})])),_:1}),u(s,{class:"section"},{default:i((()=>[u(s,{class:"section-title"},{default:i((()=>[u(s,{class:"star-icon"}),u(t,null,{default:i((()=>[r("王主任推荐")])),_:1})])),_:1}),u(s,{class:"recommend-list"},{default:i((()=>[(n(!0),m(p,null,v(I.value,(e=>(n(),c(o,{key:e.id,class:_(["recommend-card",{active:S.value===e.id}]),onClick:a=>function(e){S.value=e.id,Object.assign(x,e.defaults)}(e)},{default:i((()=>[u(s,{class:"recommend-head"},{default:i((()=>[u(t,{class:"recommend-icon"},{default:i((()=>[r(d(e.tags[0]),1)])),_:2},1024),u(t,{class:"recommend-title"},{default:i((()=>[r(d(e.title),1)])),_:2},1024)])),_:2},1024),u(t,{class:"recommend-desc"},{default:i((()=>[r(d(e.desc),1)])),_:2},1024),u(s,{class:"tag-row"},{default:i((()=>[(n(!0),m(p,null,v(e.tags,(e=>(n(),c(t,{key:e,class:_(["tag",{danger:"急躁"===e}])},{default:i((()=>[r(d(e),1)])),_:2},1032,["class"])))),128))])),_:2},1024)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),_:1}),u(s,{class:_(["section custom-section",{expanded:K.value}])},{default:i((()=>[u(o,{class:_(["section-title custom-config-toggle",{expanded:K.value}]),"aria-label":K.value?"收起自定义配置":"展开自定义配置",onClick:P},{default:i((()=>[u(s,{class:"tune-icon"}),u(t,null,{default:i((()=>[r("自定义配置")])),_:1}),u(s,{class:"custom-toggle-spacer"}),u(s,{class:"toggle-chevron"})])),_:1},8,["class","aria-label"]),u(s,{class:_(["custom-options",{expanded:K.value}])},{default:i((()=>[u(s,{class:"option-block"},{default:i((()=>[u(s,{class:"option-label"},{default:i((()=>[u(s,{class:"location-icon"}),u(t,null,{default:i((()=>[r("就诊环境")])),_:1})])),_:1}),u(s,{class:"option-grid grid-3"},{default:i((()=>[(n(!0),m(p,null,v(E.value.environments,(e=>(n(),c(o,{key:e.value,class:_(["choice",{selected:x.environment===e.value}]),onClick:a=>D("environment",e.value)},{default:i((()=>[r(d(e.label),1)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),_:1}),u(s,{class:"option-block"},{default:i((()=>[u(s,{class:"option-label"},{default:i((()=>[u(s,{class:"cake-icon"}),u(t,null,{default:i((()=>[r("年龄段")])),_:1})])),_:1}),u(s,{class:"option-grid grid-4"},{default:i((()=>[(n(!0),m(p,null,v(E.value.ageGroups,(e=>(n(),c(o,{key:e.value,class:_(["choice small",{selected:x.ageGroup===e.value}]),onClick:a=>D("ageGroup",e.value)},{default:i((()=>[r(d(e.label),1)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),_:1}),u(s,{class:"option-block"},{default:i((()=>[u(s,{class:"option-label"},{default:i((()=>[u(s,{class:"school-icon"}),u(t,null,{default:i((()=>[r("文化程度")])),_:1})])),_:1}),u(s,{class:"option-grid grid-3"},{default:i((()=>[(n(!0),m(p,null,v(E.value.educations,(e=>(n(),c(o,{key:e.value,class:_(["choice mini",{selected:x.education===e.value}]),onClick:a=>D("education",e.value)},{default:i((()=>[r(d(e.label),1)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),_:1}),u(s,{class:"option-block personality-block"},{default:i((()=>[u(s,{class:"option-label"},{default:i((()=>[u(s,{class:"mind-icon"}),u(t,null,{default:i((()=>[r("性格")])),_:1})])),_:1}),u(s,{class:"option-grid grid-3"},{default:i((()=>[(n(!0),m(p,null,v(E.value.personalities,(e=>(n(),c(o,{key:e.value,class:_(["choice",{selected:x.personality===e.value}]),onClick:a=>D("personality",e.value)},{default:i((()=>[r(d(e.label),1)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),_:1})])),_:1},8,["class"])])),_:1},8,["class"])])),_:1}),u(s,{class:"bottom-action"},{default:i((()=>[u(o,{class:"generate-button",disabled:A.value,onClick:H},{default:i((()=>[u(t,null,{default:i((()=>[r(d(A.value?"正在生成...":"生成模拟场景"),1)])),_:1}),u(s,{class:"arrow-icon"})])),_:1},8,["disabled"])])),_:1})])),_:1}),u(s,{class:_(["toast",{visible:U.value}])},{default:i((()=>[r(d(N.value),1)])),_:1},8,["class"])])),_:1})}}}),[["__scopeId","data-v-0c3a3813"]]);export{A as default};
|