Files
vueapp/dist/assets/pages-teaching-teaching.Bypg4DDr.js
T
2026-06-11 12:12:55 +08:00

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