2 lines
10 KiB
JavaScript
2 lines
10 KiB
JavaScript
import{d as e,r as a,c as l,o as t,b as s,e as n,f as u,w as o,i,E as r,j as c,t as v,n as d,H as f,g as p,l as y,m as _,F as m,s as g,G as h,z as k,A as w,y as b,x,O as j,S as C}from"./index-DR4MYR5F.js";import{_ as A}from"./config-doctor.TgARj_nM.js";import{r as E,a as q}from"./cases.CqwTWi6x.js";import{c as S,a as T,b as O}from"./navigation.DbARx0MO.js";import{F as U,a as B,r as I}from"./session.EmQEGqqa.js";import{_ as D}from"./_plugin-vue_export-helper.BCo6x5W8.js";import"./auth.CseBt7py.js";function F(e){if(!e||"object"!=typeof e)return null;const a=e,l=(t=a.video)&&"object"==typeof t&&!Array.isArray(t)?t:{};var t;const s=function(e){const a=e.question_id||e.id||e.item_id;return"number"==typeof a||"string"==typeof a?a:""}(a),n=P(a,["question","title","stem","content","text"]),u=function(e){if(Array.isArray(e))return e.map(((e,a)=>function(e,a){const l=String.fromCharCode(65+a);if("string"==typeof e)return{key:l,value:l,text:e};if(!e||"object"!=typeof e)return null;const t=e,s=P(t,["value","key","option","option_key","id"])||l,n=P(t,["key","option","option_key"])||s,u=P(t,["label","text","content","option_text","name"])||s;return{key:n,value:s,text:u}}(e,a))).filter((e=>Boolean(e)));if(e&&"object"==typeof e)return Object.entries(e).map((([e,a])=>({key:e,value:e,text:"string"==typeof a?a:String(a||"")}))).filter((e=>e.text));return[]}(a.options||a.choices||a.answers);return s&&n&&0!==u.length?{id:s,question:n,options:u,correctAnswer:P(a,["correct_answer","correctAnswer","answer","right_answer"]),analysis:P(a,["analysis","explanation","解析"]),note:P(a,["note","hint","comment"]),videoTitle:P(l,["title","name"])||P(a,["video_title","videoTitle"]),videoDesc:P(l,["description","desc"])||P(a,["video_desc","videoDesc","video_description"]),videoUrl:P(l,["url"])||P(a,["video_url","videoUrl"])}:null}function P(e,a){for(const l of a){const a=e[l];if("string"==typeof a&&a.trim())return a;if("number"==typeof a)return String(a)}return""}const $=D(e({__name:"teaching",props:{caseItem:{}},emits:["open-settings","open-profile","go-home"],setup(e,{emit:D}){const P=e,$=D,G=S($),K=T($),N=O($),z=a(0),H=a(""),J=a(!1),L=a(!1),M=a(null),Q=a([]),R=a({}),V=a(!1),W=a(!1),X=a(!1),Y=a(""),Z=a(!1);let ee=null;const ae=l((()=>P.caseItem||M.value)),le=l((()=>q(ae.value))),te=l((()=>{var e,a,l,t,s;return{name:(null==(e=ae.value)?void 0:e.patientName)||"未选择病例",gender:(null==(a=ae.value)?void 0:a.gender)||"-",age:(null==(l=ae.value)?void 0:l.age)||"-",department:(null==(t=ae.value)?void 0:t.department)||"-",chiefComplaint:(null==(s=ae.value)?void 0:s.title)||"暂无病例信息"}})),se=l((()=>te.value.chiefComplaint.includes("胸痛")?"胸痛":te.value.chiefComplaint.slice(0,6))),ne=l((()=>Q.value[z.value]||null)),ue=l((()=>{var e;return Boolean(null==(e=ne.value)?void 0:e.correctAnswer)})),oe=l((()=>{var e,a;return Boolean((null==(e=ne.value)?void 0:e.analysis)||(null==(a=ne.value)?void 0:a.note))})),ie=l((()=>{var e;return Boolean(null==(e=ne.value)?void 0:e.videoUrl)})),re=l((()=>z.value>=Q.value.length-1)),ce=l((()=>W.value?"提交中...":re.value?"提交评价":"下一题")),ve=l((()=>V.value?"题目加载中...":X.value?"题目加载失败,请稍后重试。":"暂无教学题目"));function de(){var e;(null==(e=ne.value)?void 0:e.videoUrl)?(J.value=!0,L.value=!1):me("当前题目暂无讲解视频")}async function fe(){if(!ne.value||W.value||V.value)return;if(!H.value)return void me("请先选择答案");if(re.value)return void(await async function(){if(!le.value)return void me("未找到当前教学病例");const e=Q.value.map((e=>({question_id:e.id,selected_answer:R.value[String(e.id)]||""}))).filter((e=>e.selected_answer));if(e.length!==Q.value.length)return void me("请完成全部题目后再提交");W.value=!0;try{const a=await async function(e){var a;const l=await fetch(`${U}/teaching/evaluation`,{method:"POST",headers:B(),body:JSON.stringify(e)});if(!l.ok)throw new Error(await I(l));const t=await l.json();if("OK"!==t.code||!(null==(a=t.data)?void 0:a.evaluation_id))throw new Error(t.message||"教学评价生成失败");return t.data}({case_id:le.value,answers:e});g("clinical-thinking-case-mode","teaching"),g("clinical-thinking-teaching-evaluation",a),g("clinical-thinking-teaching-evaluation-id",a.evaluation_id),h({url:"/pages/assessment/assessment"})}catch(a){me(a instanceof Error?a.message:"教学评价生成失败")}finally{W.value=!1}}());const e=z.value+1;z.value=e,H.value=R.value[String(Q.value[e].id)]||"",J.value=!1,L.value=!1,g("clinical-thinking-teaching-question",{caseId:le.value,questionId:Q.value[e].id,index:e})}function pe(){L.value=!L.value}function ye(){me("讲解视频加载失败")}async function _e(){if(!le.value)return X.value=!0,void me("未找到当前教学病例");V.value=!0,X.value=!1;try{const e=await async function(e){const a=await fetch(`${U}/teaching/cases/${e}/items`,{method:"GET",headers:B()});if(!a.ok)throw new Error(await I(a));const l=await a.json();if("OK"!==l.code||!l.data)throw new Error(l.message||"题目列表加载失败");return(Array.isArray(l.data)?l.data:l.data.items||l.data.questions||l.data.results||l.data.list||[]).map(F).filter((e=>Boolean(e)))}(le.value);Q.value=e,z.value=0,H.value="",R.value={},J.value=!1,L.value=!1,0===e.length&&(X.value=!0,me("暂无教学题目"))}catch(e){X.value=!0,me(e instanceof Error?e.message:"题目列表加载失败")}finally{V.value=!1}}function me(e){ee&&clearTimeout(ee),Y.value=e,Z.value=!0,ee=setTimeout((()=>{Z.value=!1}),2200)}return t((()=>{M.value=E(),_e()})),s((()=>{ee&&clearTimeout(ee)})),(e,a)=>{const l=k,t=w,s=b,g=x,h=j,E=C;return n(),u(l,{class:"teaching-page"},{default:o((()=>[i(l,{class:"teaching-shell"},{default:o((()=>[i(l,{class:"top-nav"},{default:o((()=>[i(t,{class:"icon-button","aria-label":"设置",onClick:r(K)},{default:o((()=>[i(l,{class:"settings-icon"})])),_:1},8,["onClick"]),i(t,{class:"icon-button home-button","aria-label":"首页",onClick:r(N)},{default:o((()=>[i(l,{class:"home-icon"})])),_:1},8,["onClick"]),i(l,{class:"nav-spacer"}),i(t,{class:"icon-button","aria-label":"个人中心",onClick:r(G)},{default:o((()=>[i(l,{class:"account-icon"})])),_:1},8,["onClick"])])),_:1}),i(l,{class:"patient-header"},{default:o((()=>[i(s,{class:"case-heading"},{default:o((()=>[c("患者:"+v(te.value.name)+" ("+v(se.value)+")",1)])),_:1}),i(l,{class:"patient-meta"},{default:o((()=>[i(s,null,{default:o((()=>[c("姓名:"+v(te.value.name),1)])),_:1}),i(s,null,{default:o((()=>[c("性别:"+v(te.value.gender),1)])),_:1}),i(s,null,{default:o((()=>[c("年龄:"+v(te.value.age)+"岁",1)])),_:1}),i(s,null,{default:o((()=>[c("科室:"+v(te.value.department),1)])),_:1})])),_:1})])),_:1}),i(E,{class:"teaching-body","scroll-y":""},{default:o((()=>[i(l,{class:"mentor-section"},{default:o((()=>[i(l,{class:"mentor-profile"},{default:o((()=>[i(l,{class:"mentor-avatar"},{default:o((()=>[i(g,{src:A,mode:"aspectFill"})])),_:1}),i(l,{class:"online-dot"}),i(s,{class:"mentor-name"},{default:o((()=>[c("王主任")])),_:1})])),_:1}),i(l,{class:"question-bubble"},{default:o((()=>[i(s,null,{default:o((()=>{var e;return[c(v((null==(e=ne.value)?void 0:e.question)||ve.value),1)]})),_:1})])),_:1})])),_:1}),J.value&&ne.value?(n(),u(l,{key:0,class:"video-section"},{default:o((()=>[ne.value.videoUrl?(n(),u(h,{key:0,class:"video-player real-video",src:ne.value.videoUrl,controls:"",autoplay:"",onPlay:a[0]||(a[0]=e=>L.value=!0),onPause:a[1]||(a[1]=e=>L.value=!1),onEnded:a[2]||(a[2]=e=>L.value=!1),onError:ye},null,8,["src"])):(n(),u(l,{key:1,class:"video-player",onClick:pe},{default:o((()=>[i(l,{class:d(["video-poster",{playing:L.value}])},{default:o((()=>[i(l,{class:"heart-visual"},{default:o((()=>[i(l,{class:"heart-core"}),i(l,{class:"heart-pulse pulse-one"}),i(l,{class:"heart-pulse pulse-two"})])),_:1})])),_:1},8,["class"]),i(l,{class:"video-overlay"},{default:o((()=>[i(l,{class:d(["play-button",{playing:L.value}])},{default:o((()=>[i(l,{class:"play-icon"})])),_:1},8,["class"])])),_:1}),i(l,{class:"video-progress"},{default:o((()=>[i(l,{class:"video-progress-fill",style:f({width:L.value?"62%":"33%"})},null,8,["style"])])),_:1})])),_:1})),i(l,{class:"video-copy"},{default:o((()=>[i(s,{class:"video-title"},{default:o((()=>[c(v(ne.value.videoTitle||"讲解视频"),1)])),_:1}),ne.value.videoDesc?(n(),u(s,{key:0,class:"video-desc"},{default:o((()=>[c(v(ne.value.videoDesc),1)])),_:1})):p("",!0)])),_:1})])),_:1})):ne.value?(n(),u(l,{key:1,class:"option-list"},{default:o((()=>[(n(!0),y(m,null,_(ne.value.options,(e=>{return n(),u(t,{key:e.value,class:d(["option-card",(a=e.value,H.value!==a?"":(null==(r=ne.value)?void 0:r.correctAnswer)?a===ne.value.correctAnswer?"selected-correct":"selected-wrong":"selected-correct")]),onClick:a=>function(e){H.value=e,ne.value&&(R.value[String(ne.value.id)]=e)}(e.value)},{default:o((()=>[i(s,{class:"option-key"},{default:o((()=>[c(v(e.key),1)])),_:2},1024),i(s,{class:"option-text"},{default:o((()=>[c(v(e.text),1)])),_:2},1024),ue.value&&H.value===e.value&&e.value!==ne.value.correctAnswer?(n(),u(l,{key:0,class:"wrong-icon"})):p("",!0),ue.value&&H.value===e.value&&e.value===ne.value.correctAnswer?(n(),u(l,{key:1,class:"right-icon"})):p("",!0)])),_:2},1032,["class","onClick"]);var a,r})),128))])),_:1})):(n(),u(l,{key:2,class:"empty-state"},{default:o((()=>[i(s,null,{default:o((()=>[c(v(ve.value),1)])),_:1})])),_:1})),!J.value&&H.value&&oe.value?(n(),u(l,{key:3,class:"analysis-card"},{default:o((()=>[i(l,{class:"analysis-title"},{default:o((()=>[i(l,{class:"bulb-icon"}),i(s,null,{default:o((()=>[c("答案解析")])),_:1})])),_:1}),i(l,{class:"analysis-content"},{default:o((()=>{var e,a,t,i;return[(null==(e=ne.value)?void 0:e.analysis)?(n(),u(s,{key:0,class:"analysis-main"},{default:o((()=>[c(v(ne.value.analysis),1)])),_:1})):p("",!0),(null==(a=ne.value)?void 0:a.analysis)&&(null==(t=ne.value)?void 0:t.note)?(n(),u(l,{key:1,class:"analysis-divider"})):p("",!0),(null==(i=ne.value)?void 0:i.note)?(n(),u(s,{key:2,class:"analysis-note"},{default:o((()=>[c(v(ne.value.note),1)])),_:1})):p("",!0)]})),_:1})])),_:1})):p("",!0),i(l,{class:"bottom-actions"},{default:o((()=>[!J.value&&ie.value?(n(),u(t,{key:0,class:"video-button",onClick:de},{default:o((()=>[i(l,{class:"video-icon"}),i(s,null,{default:o((()=>[c("查看知识点视频")])),_:1})])),_:1})):p("",!0),i(t,{class:d(["next-button",{disabled:!ne.value||W.value||V.value}]),disabled:!ne.value||W.value||V.value,onClick:fe},{default:o((()=>[i(s,null,{default:o((()=>[c(v(ce.value),1)])),_:1}),i(l,{class:"next-icon"})])),_:1},8,["class","disabled"])])),_:1})])),_:1})])),_:1}),i(l,{class:d(["toast",{visible:Z.value}])},{default:o((()=>[c(v(Y.value),1)])),_:1},8,["class"])])),_:1})}}}),[["__scopeId","data-v-c2d0b6fa"]]);export{$ as default};
|