2 lines
9.6 KiB
JavaScript
2 lines
9.6 KiB
JavaScript
import{B as e,C as a,d as t,a as l,r as s,c as n,o as c,b as o,e as u,f as i,w as r,i as d,n as f,j as v,t as p,l as m,m as _,F as b,k as g,g as h,s as k,D as y,u as C,y as x,x as T,z as j,S as w}from"./index-CoO0Bu96.js";import{_ as E}from"./config-doctor.TgARj_nM.js";import{c as P}from"./navigation.C05E413Y.js";import{_ as S}from"./_plugin-vue_export-helper.BCo6x5W8.js";class A extends Error{constructor(e,a,t){super(e),this.name="ApiRequestError",this.code=a,this.statusCode=t}}function M(e=!1){const t={"Content-Type":"application/json"};if(!e)return t;const l=function(){try{return a("clinical-thinking-access-token")||""}catch{return""}}();return l&&(t.Authorization=`Bearer ${l}`),t}function O(a,t,l="POST",s=!1){return new Promise(((n,c)=>{e({url:`/server/api${a}`,method:l,timeout:1e4,header:M(s),data:t,success:e=>{if(e.statusCode>=200&&e.statusCode<300)return void n(e.data);const a=e.data,t="string"==typeof(null==a?void 0:a.code)?a.code:void 0;c(new A(function(e,a){if(e&&"object"==typeof e){const a=e,t=a.message||a.detail||a.error;if("string"==typeof t&&t.trim())return t}return a}(e.data,`请求失败(${e.statusCode})`),t,e.statusCode))},fail:e=>{c(new A(e.errMsg||"无法连接服务"))}})}))}function $(e,a="login"){return O("/user/auth/send-code/",{phone:e,scene:a})}function z(){return O("/user/institution_list/",null,"GET")}function B(e){return O("/user/auth/login-code/",e).then((e=>{if(function(e){if(!e||"object"!=typeof e)return!1;const a=e,t=a.tokens;return Boolean(a.tokens&&"string"==typeof(null==t?void 0:t.access)&&"string"==typeof(null==t?void 0:t.refresh))}(e))return e;throw new Error("登录接口返回数据格式异常")}))}const F={departments:[{value:"im",label:"内科",desc:"心内、呼吸、消化、肾内等临床场景"},{value:"sur",label:"外科",desc:"普外、骨科、神外、胸外等临床场景"},{value:"ped",label:"儿科",desc:"儿童常见病、急重症与沟通训练"},{value:"obg",label:"妇产科",desc:"围产、妇科、产科急症训练"},{value:"er",label:"急诊科",desc:"分诊、抢救、危急值处置训练"},{value:"icu",label:"重症医学科",desc:"危重症评估与多学科决策训练"}],titles:[{value:"resident",label:"住院医师",desc:"强化基础诊疗路径与病历思维"},{value:"attending",label:"主治医师",desc:"提升独立诊疗和带教表达"},{value:"associate_chief",label:"副主任医师",desc:"复杂病例决策与团队协作"},{value:"chief",label:"主任医师",desc:"疑难病例、质控和教学管理"}],experiences:[{value:"1-3",label:"1-3年",desc:"基础病例训练优先"},{value:"3-5",label:"3-5年",desc:"进阶诊疗路径优先"},{value:"5-10",label:"5-10年",desc:"复杂病例推演优先"},{value:"10+",label:"10年以上",desc:"疑难病例与带教模拟优先"}]};function G(t){return new Promise(((l,s)=>{const n=function(){try{return a("clinical-thinking-access-token")||""}catch{return""}}(),c={"Content-Type":"application/json"};n&&(c.Authorization=`Bearer ${n}`),e({url:"/server/api/user/profile/config/",method:"POST",timeout:1e4,header:c,data:t,success:e=>{if(e.statusCode>=200&&e.statusCode<300)return void l(e.data);const a=e.data,t="string"==typeof(null==a?void 0:a.code)?a.code:void 0;s(new A(function(e,a){if(e&&"object"==typeof e){const a=e,t=a.message||a.detail||a.error;if("string"==typeof t&&t.trim())return t}return a}(e.data,`保存失败(${e.statusCode})`),t,e.statusCode))},fail:e=>{s(new A(e.errMsg||"无法连接服务"))}})}))}const I=S(t({__name:"config",emits:["open-profile"],setup(e,{emit:a}){const t=l({department:"im",title:"resident",experience:"1-3"}),S=s(F),A=s("欢迎回来!请配置执业信息,开始精准带教模拟。"),M=s(""),$=s(!1),z=s(""),B=s(!1),I=s(!1),N=s("idle"),q=s(""),D=s(!1),R=s("");P(a);let H=null,J=null;const K=n((()=>ae("departments",t.department))),L=n((()=>ae("titles",t.title))),Q=n((()=>ae("experiences",t.experience))),U=n((()=>{const e={department:S.value.departments,title:S.value.titles,experience:S.value.experiences},a=z.value;return a?e[a]:[]})),V=n((()=>{const e=z.value;return e?{department:"选择执业科室",title:"选择专业职称",experience:"选择执业年限"}[e]:"请选择"})),W=n((()=>I.value?"正在保存...":"saved"===N.value?"已就绪":"确认并继续"));function X(){Promise.resolve({options:F,defaults:{department:"im",title:"resident",experience:"1-3"},mentor:{name:"王主任",message:"欢迎回来!请配置执业信息,开始精准带教模拟。"}}).then((({options:e,defaults:a,mentor:l})=>{S.value=e,Object.assign(t,a),A.value=l.message,function(){H&&clearTimeout(H);M.value="",$.value=!0;let e=0;const a=()=>{e<A.value.length?(M.value+=A.value.charAt(e),e+=1,H=setTimeout(a,48+Math.floor(42*Math.random()))):$.value=!1};a()}()}))}function Y(e){return{value:String(e.id),label:e.name,desc:e.category}}async function Z(){try{const e=await O("/user/my_departments/",null,"GET",!0);if(0===e.length)return;const a=e.map(Y);S.value={...S.value,departments:a},t.department=a[0].value}catch{}}async function ee(){try{const e=await O("/user/institution_info/",null,"GET",!0);R.value=e.banner_url||"/static/config-hospital.png"}catch{R.value="/static/config-hospital.png"}}function ae(e,a){const t=S.value[e]||[];return t.find((e=>e.value===a))||t[0]||{label:"请选择",value:""}}function te(e){z.value=e,B.value=!0}function le(){B.value=!1,z.value=""}function se(){const e=Number(t.department);if(!Number.isInteger(e)||e<=0)return void ce("请先选择有效执业科室");const a={department:e,title_name:L.value.label,practice_years:Q.value.label};I.value=!0,N.value="idle",G(a).then((e=>{k("clinical-thinking-config",e),I.value=!1,N.value="saved",ce("配置已保存"),setTimeout((()=>{y({url:"/pages/home/home"})}),500)})).catch((e=>{I.value=!1,ce(e instanceof Error?e.message:"保存失败,请稍后重试")}))}function ne(){"/static/config-hospital.png"!==R.value&&(R.value="/static/config-hospital.png")}function ce(e){J&&clearTimeout(J),q.value=e,D.value=!0,J=setTimeout((()=>{D.value=!1}),2200)}return c((()=>{X(),Z(),ee()})),o((()=>{H&&clearTimeout(H),J&&clearTimeout(J)})),(e,a)=>{const l=C,s=x,n=T,c=j,o=w;return u(),i(s,{class:"config-page"},{default:r((()=>[d(s,{class:"phone-frame"},{default:r((()=>[d(s,{class:"hero-section"},{default:r((()=>[d(l,{class:"hospital-image",src:R.value,mode:"aspectFill",onError:ne},null,8,["src"]),d(s,{class:"hero-overlay"})])),_:1}),d(s,{class:"profile-section"},{default:r((()=>[d(s,{class:"section-glow"}),d(s,{class:"profile-content"},{default:r((()=>[d(s,{class:"intro-row"},{default:r((()=>[d(s,{class:"doctor-card"},{default:r((()=>[d(l,{class:"doctor-image",src:E,mode:"aspectFit"})])),_:1}),d(s,{class:"bubble"},{default:r((()=>[d(n,{class:f(["bubble-text",{typing:$.value}])},{default:r((()=>[v(p(M.value),1)])),_:1},8,["class"]),d(s,{class:"bubble-arrow"})])),_:1})])),_:1}),d(s,{class:"form-area"},{default:r((()=>[d(s,{class:"field-block"},{default:r((()=>[d(n,{class:"field-label"},{default:r((()=>[v("执业科室")])),_:1}),d(s,{class:"glass-select",onClick:a[0]||(a[0]=e=>te("department"))},{default:r((()=>[d(n,{class:"select-value"},{default:r((()=>[v(p(K.value.label),1)])),_:1}),d(s,{class:"chevron"})])),_:1})])),_:1}),d(s,{class:"field-grid"},{default:r((()=>[d(s,{class:"field-block"},{default:r((()=>[d(n,{class:"field-label"},{default:r((()=>[v("专业职称")])),_:1}),d(s,{class:"glass-select",onClick:a[1]||(a[1]=e=>te("title"))},{default:r((()=>[d(n,{class:"select-value"},{default:r((()=>[v(p(L.value.label),1)])),_:1}),d(s,{class:"chevron"})])),_:1})])),_:1}),d(s,{class:"field-block"},{default:r((()=>[d(n,{class:"field-label"},{default:r((()=>[v("执业年限")])),_:1}),d(s,{class:"glass-select",onClick:a[2]||(a[2]=e=>te("experience"))},{default:r((()=>[d(n,{class:"select-value"},{default:r((()=>[v(p(Q.value.label),1)])),_:1}),d(s,{class:"chevron"})])),_:1})])),_:1})])),_:1})])),_:1})])),_:1})])),_:1}),d(s,{class:"action-section"},{default:r((()=>[d(c,{class:f(["submit-button",{saved:"saved"===N.value}]),disabled:I.value,onClick:se},{default:r((()=>[I.value?(u(),i(s,{key:0,class:"spinner"})):"saved"===N.value?(u(),i(s,{key:1,class:"check-icon"})):(u(),i(s,{key:2,class:"check-icon"})),d(n,null,{default:r((()=>[v(p(W.value),1)])),_:1})])),_:1},8,["class","disabled"]),d(s,{class:"secure-tip"},{default:r((()=>[d(s,{class:"lock-icon"}),d(n,null,{default:r((()=>[v("数据已进行安全加密处理")])),_:1})])),_:1})])),_:1}),d(s,{class:"home-indicator"})])),_:1}),d(s,{class:f(["toast",{visible:D.value}])},{default:r((()=>[v(p(q.value),1)])),_:1},8,["class"]),B.value?(u(),i(s,{key:0,class:"picker-mask",onClick:le},{default:r((()=>[d(s,{class:"picker-panel",onClick:a[3]||(a[3]=g((()=>{}),["stop"]))},{default:r((()=>[d(s,{class:"picker-header"},{default:r((()=>[d(n,{class:"picker-title"},{default:r((()=>[v(p(V.value),1)])),_:1}),d(n,{class:"picker-close",onClick:le},{default:r((()=>[v("关闭")])),_:1})])),_:1}),d(o,{class:"option-list","scroll-y":""},{default:r((()=>[(u(!0),m(b,null,_(U.value,(e=>(u(),i(s,{key:e.value,class:f(["option-item",{active:e.value===t[z.value]}]),onClick:a=>function(e){const a=z.value;a&&(t[a]=e.value,le())}(e)},{default:r((()=>[d(s,{class:"option-copy"},{default:r((()=>[d(n,{class:"option-label"},{default:r((()=>[v(p(e.label),1)])),_:2},1024),e.desc?(u(),i(n,{key:0,class:"option-desc"},{default:r((()=>[v(p(e.desc),1)])),_:2},1024)):h("",!0)])),_:2},1024),e.value===t[z.value]?(u(),i(s,{key:0,class:"selected-mark"})):h("",!0)])),_:2},1032,["class","onClick"])))),128))])),_:1})])),_:1})])),_:1})):h("",!0)])),_:1})}}}),[["__scopeId","data-v-40671f38"]]),N=Object.freeze(Object.defineProperty({__proto__:null,default:I},Symbol.toStringTag,{value:"Module"}));export{A,I as C,N as c,z as f,B as l,$ as s};
|