2 lines
40 KiB
JavaScript
2 lines
40 KiB
JavaScript
import{i as Za,R as Xa,N as el,O as al,P as ll,K as tl,L as il,ah as ul,ai as nl,B as sl,G as ol,F as rl,z as vl,a1 as cl,E as P,a as Fe}from"./element-plus-DDINy080.js";import{r as Xe,_ as dl}from"./index-CucNzNKR.js";import fl from"./FollowupAudioReview-Cv2ObmWa.js";import{c as pl,f as Na,a as yl,r as ya,b as ma,d as ml,e as gl,g as ue,u as _l,h as bl,i as Ze,j as Va,n as $e,k as wl,l as kl,m as hl,o as Cl,p as xl,q as Al,s as Sl,t as El,v as Rl,w as Tl,x as Il,y as Ol}from"./FollowupAudioField-D4JqpESK.js";import{f as Ul,w as ga,b as Ll,ae as Nl,ak as i,I as f,J as m,G as R,aN as p,O as S,a as _,H as d,F as Me,ap as Pe,A as I,n as Vl}from"./@vue/runtime-core-C6bnekPw.js";import{n as b,y as Q}from"./@vue/reactivity-DiY1c2vO.js";import{Q as v}from"./@vue/shared-mAAVTE9n.js";class Je extends Error{constructor(c,h=""){super(c),this.code=h,this.name="FollowupAudioError"}}const ea={isTransformResponse:!1,ignoreCancelToken:!0,isOpenRetry:!1,retryCount:0},aa="/tcm.followupAudio/";function la(u){if(u.code!==1){const c=u.data,h=c&&typeof c=="object"&&"code"in c?String(c.code):"";throw new Je(u.msg||"回访录音请求失败,请刷新任务状态后确认",h)}return u.data}async function _a(u,c,h){return la(await Xe.get({url:aa+u,params:c,signal:h},ea))}async function ne(u,c,h){return la(await Xe.post({url:aa+u,data:c,signal:h,timeout:12e4},ea))}const ai=(u,c)=>_a("capabilities",{diagnosis_id:u},c),Dl=(u,c)=>_a("lists",{diagnosis_id:u},c),Bl=(u,c)=>_a("detail",{id:u},c),Fl=(u,c)=>ne("uploadSession",u,c);async function $l(u,c,h,n){const L=new FormData;return L.append("upload_id",u),L.append("index",String(c)),L.append("file",h,`chunk-${c}`),la(await Xe.post({url:aa+"uploadChunk",data:L,signal:n,timeout:12e4,headers:{"Content-Type":"multipart/form-data"}},ea))}const Ml=(u,c)=>ne("uploadComplete",{upload_id:u},c),Pl=(u,c)=>ne("create",u,c),Jl=(u,c)=>ne("saveDraft",u,c),zl=(u,c)=>ne("apply",u,c),Wl=(u,c)=>ne("reextract",u,c),ql=(u,c)=>ne("delete",u,c),jl=(u,c)=>ne("retry",{id:u},c);async function Kl(u,c){const h=await Xe.get({url:aa+"audio",params:{id:u},responseType:"blob",signal:c,timeout:12e4},ea);if(h.type.includes("json")){const n=JSON.parse(await h.text());throw la(n),new Je("录音响应不是音频文件")}return h}function Yl(){const u=globalThis,c=u.AudioContext||u.webkitAudioContext;return c?new c:null}function Hl(u,c=Yl){let h=null,n=null,L=null,U=null,l=!1,w=0;function C(){n==null||n.disconnect(),L==null||L.disconnect(),U==null||U.disconnect()}return{async select(V){if(l)return!1;const D=++w;if(u.pause(),V==="original"&&!h)return!0;try{if(!h){if(h=c(),!h)throw new Error("当前浏览器不支持 Web Audio,无法隔离声道;请使用原音播放。");n=h.createMediaElementSource(u),L=h.createChannelSplitter(2),U=h.createChannelMerger(2)}if(!n)throw new Error("音频播放节点未就绪");if(C(),V==="original")n.connect(h.destination);else{if(!L||!U)throw new Error("声道播放节点未就绪");n.connect(L),L.connect(U,V,0),L.connect(U,V,1),U.connect(h.destination)}if(await h.resume(),!l&&D===w&&h.state!=="running")throw new Error("音频上下文未运行");return!l&&D===w}catch(Z){if(l||D!==w)return!1;throw C(),n&&h&&n.connect(h.destination),new Error(`无法隔离声道,已停止本次回听;可选择原音播放。${Z instanceof Error?Z.message:""}`)}},dispose(){l||(l=!0,w++,u.pause(),C(),h&&h.close().catch(()=>{}))}}}const Gl={key:0,class:"followup-panel","aria-label":"回访录音"},Ql={class:"panel-toolbar"},Zl={class:"toolbar-title"},Xl={key:1},et={class:"toolbar-actions"},at={key:0,class:"help-box"},lt={key:0},tt={key:1},it={key:2},ut={key:7,class:"task-list"},nt={class:"task-time"},st={key:0,class:"task-time"},ot={key:8,class:"detail-loading",role:"status"},rt={key:9,class:"task-detail","aria-label":"录音任务详情"},vt={class:"detail-heading"},ct={class:"recording-title"},dt={class:"detail-actions"},ft={key:0,class:"processing-state",role:"status"},pt={class:"summary-box"},yt={class:"summary-counts"},mt={key:7,class:"channel-role-box","aria-label":"声道角色人工标注"},gt={key:0,class:"role-summary"},_t={key:1},bt={key:2,class:"muted"},wt={key:3,class:"muted"},kt={key:4,class:"review-error",role:"status"},ht={key:8,class:"role-reextract","aria-label":"角色纠错与重新提炼"},Ct={key:0},xt={key:1},At={key:9,class:"muted"},St={class:"audio-player"},Et={key:1,class:"muted"},Rt=["src"],Tt={key:0,class:"channel-playback","aria-label":"声道回听"},It={class:"muted",role:"status"},Ot={key:1,class:"review-error",role:"alert"},Ut={key:2,class:"muted"},Lt={key:0,class:"transcript-segments"},Nt={class:"segment-heading"},Vt={class:"dialogue-sides"},Dt={key:1,class:"transcript-text"},Bt={key:10,class:"review-actions"},Ft={class:"selection-summary"},$t={key:0,class:"action-buttons"},Mt={key:1,class:"review-error",role:"alert"},Pt={key:11,class:"applied-note"},Jt=["disabled"],zt={key:3,class:"upload-stage",role:"status"},Wt={class:"muted"},qt=Ul({__name:"FollowupAudioPanel",props:{diagnosisId:{},viewOnly:{type:Boolean,default:!1},active:{type:Boolean,default:!0},capabilities:{},basicDirty:{type:Boolean,default:!1},beforeApply:{}},emits:["applied"],setup(u,{expose:c,emit:h}){var Ta;const n=u,L=h,U=b([]),l=b(null),w=b([]),C=b(0),V=b("[]"),D=b("unconfirmed"),Z=b("unconfirmed"),pe=b(!1),T=b("idle"),ta=b(0),ye=I(()=>K.value||JSON.stringify(w.value)!==V.value),Da=I(()=>{var a;return T.value==="saving"?"正在自动保存…":T.value==="error"?"保存失败,修改仍保留;请重试保存":T.value==="conflict"?"自动保存已暂停;请重新核对后重试保存":ye.value?"等待自动保存…":(a=Se.value)!=null&&a.hasUnsavedChanges()?"当前单项尚未完成核对":T.value==="saved"?"审核草稿已自动保存":"草稿已同步"}),K=I(()=>D.value!==Z.value),J=I(()=>{var a;return $e((a=l.value)==null?void 0:a.channel_roles)}),ia=I(()=>{var a;return[...((a=l.value)==null?void 0:a.transcript_segments)||[]].sort((e,t)=>e.start_ms-t.start_ms||(e.channel??-1)-(t.channel??-1))}),Ba=I(()=>kl(ia.value)),me=I(()=>hl(ia.value)),Se=b(null),ae=I(()=>{var a;return K.value||JSON.stringify(w.value)!==V.value||!!((a=Se.value)!=null&&a.hasUnsavedChanges())}),ge=b(!1),Ee=b(!1),Y=b([]),le=b(null),ua=b(null),Re=b(""),_e=b("unconfirmed"),be=b(((Ta=n.capabilities.models[0])==null?void 0:Ta.value)||""),ze=b(!1),z=b(!1),We=b(0),q=b(""),$=b(!1),O=b(""),x=b(""),j=b(""),Te=b(null),we=b(!1),X=b("original"),ke=b(!1),se=b(""),ba=b(typeof document>"u"||document.visibilityState!=="hidden"),A=I(()=>z.value||!!O.value),oe=I(()=>Cl(n.capabilities)),te=I(()=>{var a;return!!n.capabilities.preview_only||!!((a=l.value)!=null&&a.preview_only)}),wa=I(()=>xl(n.capabilities)),W=I(()=>!n.viewOnly&&oe.value&&wa.value&&n.capabilities.can_upload&&n.capabilities.models.length>0),re=I(()=>{var a,e;return!n.viewOnly&&Al(n.capabilities,!!((a=l.value)!=null&&a.preview_only))&&((e=l.value)==null?void 0:e.status)==="review"}),qe=I(()=>{var a,e;return!n.viewOnly&&Sl(n.capabilities,!!((a=l.value)!=null&&a.preview_only))&&((e=l.value)==null?void 0:e.status)==="review"}),he=I(()=>{var a;return $e((a=l.value)==null?void 0:a.extraction_channel_roles)}),Ie=I(()=>{var a,e;return J.value!=="unconfirmed"&&J.value!==he.value?J.value:$e((e=(a=l.value)==null?void 0:a.role_check)==null?void 0:e.suggested_roles)}),na=I(()=>{var a,e;return!n.viewOnly&&oe.value&&((a=l.value)==null?void 0:a.status)==="review"&&((e=l.value)==null?void 0:e.can_reextract)===!0}),Ce=I(()=>w.value.filter(a=>a.selected).length),Fa=I(()=>{var a;return w.value.filter(e=>{var t;return El(e,((t=l.value)==null?void 0:t.fields)||n.capabilities.fields,n.capabilities.can_daily)}).length+(((a=l.value)==null?void 0:a.uncertainties.length)||0)}),ve=I(()=>{var a,e;return te.value?"测试预览仅保存审核草稿,不允许确认写入病历":T.value==="conflict"?"记录版本已变化,请重新核对后重试保存草稿":T.value==="error"?"草稿保存失败,请重试保存成功后再确认写入":T.value==="saving"||ye.value?"审核草稿尚未保存完成,请稍候再确认写入":K.value?"声道角色标注尚未保存,请先保存草稿并重新核对建议":me.value&&J.value==="unconfirmed"?"请先回听并确认声道角色,保存草稿后重新核对建议":Rl(w.value,((a=l.value)==null?void 0:a.items)||[])?"写入目标或记录日期已更改,请先保存审核草稿取得新快照,再核对并采纳":Tl(w.value,((e=l.value)==null?void 0:e.fields)||n.capabilities.fields)||w.value.map(t=>{var o;return Il(t,((o=l.value)==null?void 0:o.fields)||n.capabilities.fields)||Ol(t,n.capabilities.can_daily)}).find(Boolean)||""}),Oe=I(()=>n.active&&oe.value&&ba.value),r=pl();let je,Ue,H=!1,Le=null,Ke=!1,Ne=0,ce=0,ee=null,sa=null,ka=0;function ie(){je!==void 0&&clearTimeout(je),je=void 0}function Ye(){var a;Ne++,ce++,ee==null||ee.dispose(),ee=null,sa=null,(a=Te.value)==null||a.pause(),j.value&&URL.revokeObjectURL(j.value),j.value="",we.value=!1,ke.value=!1,X.value="original",se.value=""}function xe(){r.invalidate(),ie(),de(),Ye(),Le=null,T.value==="saving"&&(T.value="error",x.value="保存结果尚未确认;修改仍保留,请刷新核对版本后重试保存。"),ze.value=!1,z.value=!1,O.value="",Ke=!1}function oa(a,e,t=e){e=e&&a.status==="review";const o=t&&K.value&&a.status==="review";a.audio_available||Ye(),ya(a)&&(!l.value||l.value.status!==a.status||!l.value.transcript_available)&&(Y.value.includes("original")||(Y.value=[...Y.value,"original"])),H=!0;try{l.value=a;const g=e?Va(w.value,a.items):Ze(a.items);JSON.stringify(g)!==JSON.stringify(w.value)&&(w.value=g),V.value=JSON.stringify(a.items),Z.value=$e(a.channel_roles),o||(D.value=Z.value)}finally{H=!1}}function Ve(){H=!0,D.value="unconfirmed",Z.value="unconfirmed",H=!1,pe.value=!1,T.value="idle",ta.value=0}function $a(a){!re.value||A.value&&O.value!=="save"||!me.value||!["unconfirmed","left_service","right_service"].includes(String(a))||(D.value=a)}function ha(a){return a instanceof Je&&(a.code==="FOLLOWUP_AUDIO_TASK_UNAVAILABLE"||a.message.includes("FOLLOWUP_AUDIO_TASK_UNAVAILABLE"))}function Ca(a){C.value===a&&(xe(),Ve(),C.value=0,l.value=null,w.value=[],V.value="[]",Y.value=[],U.value=U.value.filter(e=>e.id!==a),x.value="录音已删除或不再可访问,已关闭本页缓存与播放;未写入病例。",M())}async function Ae(a,e=!1,t=!1){var E;const o=r.capture();let g;try{g=await Bl(a,o.signal)}catch(k){if(r.current(o)&&a===C.value&&ha(k)){Ca(a);return}throw k}if(t&&l.value&&g.version===l.value.version&&g.status===l.value.status||!r.current(o)||a!==C.value||l.value&&g.version<l.value.version)return;e=e||!!l.value&&ae.value;const y=((E=l.value)==null?void 0:E.status)==="review"&&g.status==="applied";oa(g,e),y&&!te.value&&L("applied",n.diagnosisId),e&&g.status==="review"?(de(),T.value="conflict",x.value="服务端记录或版本已变化;已保留你的字段与日期修改,并取消所有选择。自动保存已暂停,请重新核对后重试保存草稿。"):e&&y&&(x.value="任务已由其他人确认,已显示实际写入结果;本页未保存的修改未写入。")}async function M(){if(!Oe.value||!n.diagnosisId||Ke||A.value)return;const a=r.capture();Ke=!0,ze.value=!0,ie();try{const e=await Dl(n.diagnosisId,a.signal);if(!r.current(a))return;U.value=e.items;const t=U.value.find(o=>o.id===C.value);t&&(!l.value||t.version>l.value.version||t.version>=l.value.version&&t.status!==l.value.status||t.status==="running")?await Ae(t.id,ae.value):!t&&C.value&&l.value&&await Ae(C.value,!1,!0)}catch(e){r.current(a)&&(x.value=ue(e))}finally{r.current(a)&&(Ke=!1,ze.value=!1,Oe.value&&(je=setTimeout(()=>{M()},5e3)))}}async function ra(){if(A.value)return P.warning("正在上传或提交审核,请等待本次操作结束"),!1;if(!ae.value)return!0;try{return await Fe.confirm("审核修改尚未保存。关闭诊单或切换录音将丢失这些修改,是否继续?","保留审核修改",{type:"warning",confirmButtonText:"继续离开",cancelButtonText:"返回保存"}),!0}catch{return!1}}async function va(a){if(!oe.value||a===C.value||A.value)return;const e=r.capture();if(!await ra()||!r.current(e))return;xe(),Ve(),C.value=a,l.value=null,w.value=[],V.value="[]",x.value="",Y.value=[];const t=r.capture();try{await Ae(a)}catch(o){r.current(t)&&(x.value=ue(o))}r.current(t)&&await M()}async function Ma(){const a=r.capture();!await ra()||!r.current(a)||(xe(),Ve(),C.value=0,l.value=null,w.value=[],V.value="[]",Y.value=[],x.value="",await M())}function Pa(){!W.value||A.value||$.value||(le.value||(_e.value="unconfirmed"),ge.value=!0)}function xa(a){z.value||(ge.value=!1,a==null||a())}function Aa(a){return a==="failed"||a==="needs_reconciliation"?"danger":a==="applied"?"success":a==="review"?"warning":"info"}function Ja(a){var t;const e=((t=a.target.files)==null?void 0:t[0])||null;e&&(le.value&&e!==le.value&&(_e.value="unconfirmed",P.warning("录音已更换,请重新核对本次录音的声道角色")),le.value=e,We.value=0,q.value="")}async function za(){if(A.value||$.value)return;const a=_l(le.value,Re.value,be.value,n.capabilities,n.viewOnly);if(a){P.warning(a);return}const e=le.value;if(!e)return;const t=r.capture();z.value=!0,We.value=0,x.value="",ie();let o=!1;try{q.value="正在创建私有上传会话";const g=await Fl({diagnosis_id:n.diagnosisId,file_name:e.name,total_bytes:e.size},t.signal);if(!r.current(t)||!W.value||(q.value="正在上传录音分片",!await bl(e,g.chunk_bytes,(k,B)=>$l(g.upload_id,k,B,t.signal),()=>r.current(t)&&W.value,k=>{We.value=k}))||(q.value="正在校验录音时长和完整性",await Ml(g.upload_id,t.signal),!r.current(t)||!W.value))return;q.value="正在创建分析任务",o=!0,$.value=!0;const E=await Pl({diagnosis_id:n.diagnosisId,upload_id:g.upload_id,recorded_at:Re.value,model_key:be.value,channel_roles:_e.value},t.signal);if(!r.current(t))return;$.value=!1,z.value=!1,ge.value=!1,le.value=null,ua.value&&(ua.value.value=""),q.value=E.reused?E.reuse_message||"同一录音已有任务,已打开原任务,不会重复调用模型":n.capabilities.preview_only?"测试任务已创建,后台将识别与提炼;此任务不允许写入业务记录":"任务已创建,后台将进行分析;审核前不会写入业务记录",E.reused&&P.warning(q.value),await va(E.task_id)}catch(g){r.current(t)&&(x.value=ue(g),$.value=o&&!(g instanceof Je),q.value="本次操作已停止,未自动重试")}finally{r.current(t)&&(z.value=!1,await M())}}async function ca(a){const e=r.capture();if(ha(a)&&l.value){Ca(l.value.id);return}if(x.value=ue(a),a instanceof Je&&a.code==="FOLLOWUP_AUDIO_STALE_REVIEW"||/STALE_REVIEW|版本|快照|已变化/.test(x.value)){de(),T.value="conflict";try{await Ae(C.value,!0)}catch{r.current(e)&&(x.value+=";刷新失败,当前编辑仍已保留,请稍后刷新。")}}}function de(){Ue!==void 0&&clearTimeout(Ue),Ue=void 0}function De(){de(),!(H||!Oe.value||!re.value||!ye.value||["error","conflict"].includes(T.value))&&O.value!=="save"&&(T.value="pending",Ue=setTimeout(()=>{Ue=void 0,da(!0)},650))}function Wa(a,e,t){const o=new Map(a.map(y=>[y.id,y])),g=new Map(t.map(y=>[y.id,y]));return Ze(e).map(y=>{const E=o.get(y.id),k=g.get(y.id);if(!E||!k)return y;const B=y.needs_review&&!E.needs_review||E.selected&&!y.selected;for(const N of["values","record_date","record_time","time_period","target_id","selected","needs_review"])B&&(N==="selected"||N==="needs_review")||JSON.stringify(E[N])!==JSON.stringify(k[N])&&Object.assign(y,{[N]:k[N]});return y})}async function da(a=!1){var Be;if(Le)return Le;if(!re.value||!l.value||A.value||!Oe.value)return;if(!a&&((Be=Se.value)!=null&&Be.hasUnsavedChanges())){P.warning("请先保存或取消正在核对的单项修改");return}if(a&&(!ye.value||["error","conflict"].includes(T.value)))return;de();const e=r.capture(),t=l.value.id,o=n.diagnosisId,g=()=>r.current(e)&&C.value===t&&n.diagnosisId===o,y=K.value,E=D.value,k=Ze(w.value),B=l.value.version;O.value="save",T.value="saving",x.value="",ie();const N=(async()=>{try{const F=await Jl({id:t,version:B,items:k,...y&&me.value?{channel_roles:E}:{}},e.signal);if(!g())return;if(l.value&&F.version<l.value.version){T.value="conflict",x.value="服务端已有更新版本;自动保存已暂停,请核对当前记录后重试保存。";return}if(F.review_refreshed){const fe=D.value;oa(F,!0,!1),fe!==E&&(H=!0,D.value=fe,H=!1),T.value="conflict",x.value="业务记录已变化,版本已刷新;当前编辑已保留,全部选择已取消。自动保存已暂停,请重新核对后重试保存草稿。"}else{const fe=D.value,Qe=y?Va(w.value,F.items):Wa(k,F.items,w.value);H=!0;try{l.value=F,V.value=JSON.stringify(F.items),Z.value=$e(F.channel_roles),D.value=fe===E?Z.value:fe,JSON.stringify(Qe)!==JSON.stringify(w.value)&&(w.value=Qe)}finally{H=!1}pe.value=K.value,T.value=ye.value?"pending":"saved",ye.value||ta.value++,a||P.success(y?"角色标注已保存,全部建议须重新核对;不会自动重新提炼":te.value?"测试审核草稿已保存,不会写入病历":"审核草稿已保存,尚未写入病历")}}catch(F){g()&&(T.value="error",await ca(F),g()&&!["conflict"].includes(T.value)&&(x.value+=";自动保存已暂停,修改仍保留,请重试保存草稿。"))}finally{g()&&(O.value="",Le=null,De(),await M())}})();return Le=N,N}async function qa(){var t;if(!qe.value||!l.value||A.value||!Ce.value)return;if((t=Se.value)!=null&&t.hasUnsavedChanges()){P.warning("请先保存或取消正在核对的单项修改");return}if(n.basicDirty||n.beforeApply&&!n.beforeApply()){P.warning("请先保存病历表单,当前修改不会被覆盖");return}if(ve.value){P.warning(ve.value);return}const a=r.capture();try{await Fe.confirm(`将一次性采纳 ${Ce.value} 项;任一项冲突则整批不写入。确认已核对原话、日期和时间?`,"确认采纳",{type:"warning",confirmButtonText:"全部采纳",cancelButtonText:"返回核对"})}catch{return}if(!r.current(a)||!qe.value||!Ce.value||n.basicDirty||n.beforeApply&&!n.beforeApply()||!l.value)return;if(ve.value){P.warning(ve.value);return}const e=n.diagnosisId;O.value="apply",x.value="",ie();try{if(await zl({id:l.value.id,version:l.value.version,items:Ze(w.value)},a.signal),!r.current(a)||!qe.value)return;l.value={...l.value,status:"applied"},V.value=JSON.stringify(w.value),P.success("所选记录已全部采纳"),L("applied",e),await Ae(C.value)}catch(o){r.current(a)&&await ca(o)}finally{r.current(a)&&(O.value="",await M())}}function He(a){return a==="left_service"?"左客服 / 右患者或家属":a==="right_service"?"右客服 / 左患者或家属":"角色未确认"}async function ja(){const a=Ie.value;if(!na.value||!l.value||A.value||a==="unconfirmed"||a===he.value)return;if(ae.value){P.warning("请先完成或取消当前审核修改,等待草稿保存后再重新提炼");return}const e=r.capture(),t=l.value.id,o=l.value.version,g=n.diagnosisId,y=()=>r.current(e)&&g===n.diagnosisId&&C.value===t;de(),ie(),O.value="reextract",x.value="";let E=!1;try{if(await Fe.confirm(`确认已回听并核实角色为“${He(a)}”?将保留旧版结果,复用已完成的转写重新提炼,不重复语音识别;新建议须重新审核,不自动写入病例。`,"确认角色并重新提炼",{type:"warning",confirmButtonText:"角色正确,开始重新提炼",cancelButtonText:"返回回听"}),!y()||!na.value||ae.value)return;E=!0;const k=await Wl({id:t,version:o,channel_roles:a},e.signal);if(!y())return;oa(k,!1),T.value="idle",pe.value=!1,P.success("已提交重新提炼,将复用原转写;新结果仍需审核,不自动写入病例")}catch(k){E&&y()&&await ca(k)}finally{y()&&(O.value="",De(),await M())}}function Ge(a){return!n.viewOnly&&oe.value&&a.can_delete===!0&&["review","failed"].includes(a.status)}async function Sa(a){if(A.value||!Ge(a))return;const e=r.capture(),t=n.diagnosisId,o=a.id,g=a.version,y=()=>r.current(e)&&t===n.diagnosisId;de(),ie(),O.value="delete",x.value="";let E=!1;try{if(await Fe.confirm("删除后,该录音任务及审核草稿将从列表移除,未保存修改会丢弃;不删除或回滚病例。原录音和转写仍按原保留期限清理。重新上传同一文件将创建新的分析任务。确认删除?","删除录音任务",{type:"warning",confirmButtonText:"确认删除",cancelButtonText:"保留录音"}),!y()||!Ge(a)||(E=!0,await ql({id:o,version:g},e.signal),!y()))return;C.value===o&&(xe(),Ve(),C.value=0,l.value=null,w.value=[],V.value="[]",Y.value=[]),U.value=U.value.filter(k=>k.id!==o),x.value="",P.success("录音任务已删除,未修改病例。原资料按保留策略清理。"),await M()}catch(k){E&&y()&&(x.value=ue(k))}finally{y()&&(O.value="",De(),await M())}}async function Ka(){var e,t;if(!((e=l.value)!=null&&e.can_retry)||l.value.status!=="failed"||!W.value||A.value)return;const a=r.capture();try{await Fe.confirm("仅对服务端已确认失败、允许重试的任务重新分析。确认继续?","确认重试",{type:"warning"})}catch{return}if(!(!r.current(a)||!((t=l.value)!=null&&t.can_retry)||l.value.status!=="failed"||!W.value)){O.value="retry",ie();try{await jl(l.value.id,a.signal),r.current(a)&&await Ae(C.value)}catch(o){r.current(a)&&(x.value=ue(o))}finally{r.current(a)&&(O.value="",await M())}}}async function fa(a){await pa(wl(a))}async function Ya(){Ye(),await pa()}async function Ea(a){var e;await pa((((e=Te.value)==null?void 0:e.currentTime)||0)*1e3,a==="original"?void 0:a)}async function pa(a,e){var k;if(!oe.value||!((k=l.value)!=null&&k.audio_available))return;const t=++ce;if(se.value="",e!==void 0&&(!me.value||e!==0&&e!==1)){Ye(),se.value="未取得可验证的双声道片段,无法隔离声道;请使用原音播放。";return}const o=r.capture(),g=l.value.id;if(!j.value){const B=++Ne;we.value=!0;try{const N=await Kl(g,o.signal);if(!r.current(o)||B!==Ne||g!==C.value)return;j.value=URL.createObjectURL(N)}catch(N){r.current(o)&&B===Ne&&(x.value=ue(N))}finally{r.current(o)&&B===Ne&&(we.value=!1)}}if(await Vl(),!r.current(o)||t!==ce||g!==C.value||!j.value||!Te.value)return;const y=Te.value;sa!==y&&(ee==null||ee.dispose(),ee=Hl(y),sa=y);const E=ee;ke.value=!0;try{if(!E||!await E.select(e??"original")||!r.current(o)||t!==ce||g!==C.value||(X.value=e??"original",typeof a!="number"||!Number.isFinite(a)))return;y.currentTime=Math.max(0,a/1e3);try{await y.play()}catch{r.current(o)&&t===ce&&(se.value="播放未启动,请使用播放器控件继续。")}}catch(B){r.current(o)&&t===ce&&(X.value="original",se.value=ue(B))}finally{r.current(o)&&t===ce&&(ke.value=!1)}}function Ha(a){if(!a)return"由保留策略控制";const e=typeof a=="number"||/^\d+$/.test(a)?new Date(Number(a)*1e3):new Date(a);return Number.isNaN(e.getTime())?String(a):e.toLocaleString("zh-CN",{timeZone:"Asia/Shanghai"})}function Ra(){ba.value=document.visibilityState!=="hidden"}return ga([()=>n.diagnosisId,Oe,()=>!!n.capabilities.preview_only],([a,e])=>{xe(),a!==ka&&(Ve(),ka=a,C.value=0,l.value=null,w.value=[],V.value="[]",U.value=[],le.value=null,Re.value="",_e.value="unconfirmed",ge.value=!1,Y.value=[],Ee.value=!1,x.value="",q.value="",$.value=!1),e&&(M(),De())},{immediate:!0}),ga([()=>JSON.stringify(w.value),D],()=>{H||De()},{flush:"sync"}),ga(()=>n.capabilities.models,a=>{var e;a.some(t=>t.value===be.value)||(be.value=((e=a[0])==null?void 0:e.value)||"")}),Ll(()=>document.addEventListener("visibilitychange",Ra)),Nl(()=>{xe(),document.removeEventListener("visibilitychange",Ra)}),c({confirmLeave:ra,refresh:M,hasUnsavedChanges:()=>ae.value}),(a,e)=>{var Ia,Oa,Ua,La;const t=Za,o=Xa,g=al,y=ll,E=el,k=il,B=tl,N=nl,Be=ul,F=rl,fe=vl,Qe=ol,Ga=cl,Qa=sl;return oe.value?(i(),f("section",Gl,[m("div",Ql,[m("div",Zl,[C.value?(i(),R(t,{key:0,link:"",type:"primary",disabled:A.value,onClick:Ma},{default:p(()=>[...e[13]||(e[13]=[S("返回列表",-1)])]),_:1},8,["disabled"])):(i(),f("h3",Xl,[e[14]||(e[14]=S("回访录音 ",-1)),m("span",null,v(U.value.length),1)]))]),m("div",et,[_(t,{link:"","aria-expanded":Ee.value,onClick:e[0]||(e[0]=s=>Ee.value=!Ee.value)},{default:p(()=>[...e[15]||(e[15]=[S("使用说明",-1)])]),_:1},8,["aria-expanded"]),_(t,{loading:ze.value,disabled:A.value,onClick:M},{default:p(()=>[...e[16]||(e[16]=[S("刷新",-1)])]),_:1},8,["loading","disabled"]),!C.value&&!u.viewOnly&&u.capabilities.can_upload?(i(),R(t,{key:0,type:"primary",disabled:!W.value||A.value||$.value,onClick:Pa},{default:p(()=>[...e[17]||(e[17]=[S("上传录音",-1)])]),_:1},8,["disabled"])):d("",!0)])]),Ee.value?(i(),f("div",at,[te.value?(i(),f("p",lt,v(u.capabilities.preview_only?"当前仅开放测试识别与提炼,可核对并保存审核草稿;测试预览任务不提供确认写入。":"这是历史测试任务,不写入病例;新上传的真实录音可按正常业务流程审核后确认入单。"),1)):(i(),f("p",tt,"录音只生成建议,不会自动写入。逐项核对后选择采纳,再确认写入;日常记录按日期和时段分别保留。")),e[18]||(e[18]=m("p",null,"仅当前可见标签页每 5 秒刷新;已编辑内容不会被覆盖。后台分析不受关闭页面影响,未知结果请先核对任务或账单,勿重复上传。",-1)),l.value?(i(),f("p",it,"任务 #"+v(l.value.id)+" · 版本 "+v(l.value.version)+" · 保留至 "+v(Ha(l.value.expires_at)),1)):d("",!0)])):d("",!0),te.value?(i(),R(o,{key:1,type:"warning",closable:!1,title:u.capabilities.preview_only?"仅测试识别与提炼,不写入病例":"历史测试任务,仅供查看和审阅",description:"此任务保留测试用途。新业务录音请新建任务,人工核对后确认入单。","show-icon":""},null,8,["title"])):d("",!0),wa.value?u.capabilities.can_upload&&!u.capabilities.models.length?(i(),R(o,{key:3,type:"warning",closable:!1,title:"暂无可用的分析模型,暂不可上传。已有任务可查看。"})):d("",!0):(i(),R(o,{key:2,type:"warning",closable:!1,title:u.capabilities.preview_only?"测试预览尚未就绪,暂不可上传或重试。已有任务可查看。":"当前环境尚未通过音频能力验证,暂不可上传或重试。已有任务可查看。"},null,8,["title"])),u.basicDirty?(i(),R(o,{key:4,type:"warning",closable:!1,title:te.value?"病历有未保存修改,测试预览不会覆盖这些修改。":"病历有未保存修改,请先保存病历,再写入录音建议。"},null,8,["title"])):d("",!0),$.value?(i(),R(o,{key:5,type:"warning",closable:!1,title:"创建结果未确认,已停止重复提交。请刷新列表并联系管理员核对,不要重新上传同一录音。"})):d("",!0),x.value?(i(),R(o,{key:6,type:"error",closable:!1,title:x.value,"show-icon":""},null,8,["title"])):d("",!0),C.value?l.value?d("",!0):(i(),f("div",ot,"正在加载录音任务…")):(i(),f("div",ut,[_(E,{data:U.value,"max-height":"440",size:"small","table-layout":"fixed","empty-text":"暂无录音,上传后可提炼回访资料","aria-label":"录音任务列表"},{default:p(()=>[_(g,{label:"录音","min-width":"210"},{default:p(({row:s})=>[_(t,{class:"filename-button",link:"",type:"primary",disabled:A.value,onClick:G=>va(s.id)},{default:p(()=>[S(v(s.file_name),1)]),_:2},1032,["disabled","onClick"]),m("div",nt,v(s.recorded_at),1)]),_:1}),_(g,{label:"状态",width:"145"},{default:p(({row:s})=>[_(y,{size:"small",type:Aa(s.status)},{default:p(()=>[S(v(Q(Na)(s)),1)]),_:2},1032,["type"]),s.transcript_available&&(s.status==="failed"||s.status==="needs_reconciliation")?(i(),f("div",st,"转写已保留")):d("",!0)]),_:1}),_(g,{label:"操作",width:"112",align:"right"},{default:p(({row:s})=>[_(t,{link:"",type:"primary",disabled:A.value,onClick:G=>va(s.id)},{default:p(()=>[...e[19]||(e[19]=[S("查看",-1)])]),_:1},8,["disabled","onClick"]),!u.viewOnly&&s.can_delete!==void 0?(i(),R(t,{key:0,link:"",type:"danger",disabled:A.value||!Ge(s),title:s.delete_block_reason||"删除未入单录音任务",onClick:G=>Sa(s)},{default:p(()=>[...e[20]||(e[20]=[S("删除",-1)])]),_:1},8,["disabled","title","onClick"])):d("",!0)]),_:1})]),_:1},8,["data"])])),C.value&&l.value?(i(),f("section",rt,[m("div",vt,[m("div",ct,[m("h3",null,v(l.value.file_name),1),m("span",null,"通话时间 "+v(l.value.recorded_at),1)]),m("div",dt,[_(y,{size:"small",type:Aa(l.value.status)},{default:p(()=>[S(v(Q(Na)(l.value)),1)]),_:1},8,["type"]),!u.viewOnly&&l.value.can_delete!==void 0?(i(),R(t,{key:0,link:"",type:"danger",disabled:A.value||!Ge(l.value),title:l.value.delete_block_reason||"删除未入单录音任务",onClick:e[1]||(e[1]=s=>Sa(l.value))},{default:p(()=>[...e[21]||(e[21]=[S("删除录音",-1)])]),_:1},8,["disabled","title"])):d("",!0)])]),l.value.status==="running"||l.value.status==="queued"?(i(),f("p",ft,v(Q(yl)(l.value)),1)):d("",!0),l.value.error_message||l.value.status==="failed"?(i(),R(o,{key:1,type:l.value.status==="failed"?"error":"warning",closable:!1,title:l.value.error_message||"任务处理失败,不能写入;请先核对失败原因。"},null,8,["type","title"])):d("",!0),Q(ya)(l.value)?(i(),R(o,{key:2,type:"warning",closable:!1,title:Q(ya)(l.value)},null,8,["title"])):d("",!0),l.value.status==="needs_reconciliation"?(i(),R(o,{key:3,type:"error",closable:!1,title:"上游结果待核对,禁止重发。请管理员先确认上游任务或账单。"})):d("",!0),l.value.status==="expired"?(i(),R(o,{key:4,type:"warning",closable:!1,title:"录音和转录已过保留期,不能继续写入;已采纳的业务记录保留。"})):d("",!0),l.value.can_retry&&l.value.status==="failed"&&!u.viewOnly?(i(),R(t,{key:5,class:"retry-button",disabled:!W.value||A.value,onClick:Ka},{default:p(()=>[...e[22]||(e[22]=[S("重试已确认失败的任务",-1)])]),_:1},8,["disabled"])):d("",!0),m("div",pt,[e[26]||(e[26]=m("div",{class:"muted"},"回访摘要 · AI未核实草稿,不代表已确认病情",-1)),m("p",null,v(l.value.summary||"暂无回访摘要"),1),m("div",yt,[m("span",null,[S(v(l.value.status==="applied"?"已写入":"已选")+" ",1),m("strong",null,v(Ce.value),1),e[23]||(e[23]=S(" 项",-1))]),m("span",null,[e[24]||(e[24]=S("待核实 ",-1)),m("strong",null,v(Fa.value),1),e[25]||(e[25]=S(" 项",-1))])])]),l.value.status==="review"&&!w.value.length?(i(),R(o,{key:6,type:"warning",closable:!1,title:"未生成可写入信息",description:l.value.uncertainties.length?`本次提炼保留了 ${l.value.uncertainties.length} 条待核实原因,已展示在下方。请结合原文回听核对,尤其注意声道角色是否相符。`:"请查看回访摘要并回听录音;本次没有可供确认写入的结构化候选。","show-icon":""},null,8,["description"])):d("",!0),me.value&&!["queued","running"].includes(l.value.status)?(i(),f("section",mt,[J.value!=="unconfirmed"&&!pe.value&&!K.value?(i(),f("div",gt,[m("span",null,v(J.value==="left_service"?"左客服端 / 右患者或家属端":"右客服端 / 左患者或家属端")+" · 已确认",1),re.value?(i(),R(t,{key:0,link:"",type:"primary",onClick:e[2]||(e[2]=s=>pe.value=!0)},{default:p(()=>[...e[27]||(e[27]=[S("修改",-1)])]),_:1})):d("",!0)])):(i(),f("label",_t,[e[28]||(e[28]=S("声道角色(人工确认)",-1)),_(B,{"model-value":D.value,disabled:!re.value||A.value&&O.value!=="save","onUpdate:modelValue":$a},{default:p(()=>[_(k,{label:"角色待确认",value:"unconfirmed"}),_(k,{label:"左客服端 / 右患者或家属端",value:"left_service"}),_(k,{label:"右客服端 / 左患者或家属端",value:"right_service"})]),_:1},8,["model-value","disabled"])])),J.value==="unconfirmed"||pe.value||K.value?(i(),f("p",bt,"声道不等于已核实的说话人身份。角色标注不自动重新提炼;变更后保存草稿会取消全部采纳,须重新核对。")):d("",!0),J.value!=="unconfirmed"&&!K.value?(i(),f("p",wt,"当前角色已确认,无需再次选择;只有左右标错时才需修改。")):d("",!0),K.value?(i(),f("p",kt,"角色标注正在等待保存;保存后请逐项重新核对。")):d("",!0)])):d("",!0),(Ia=l.value.role_check)!=null&&Ia.conflict||l.value.can_reextract!==void 0&&J.value!==he.value&&J.value!=="unconfirmed"?(i(),f("section",ht,[m("strong",null,v((Oa=l.value.role_check)!=null&&Oa.conflict?"声道角色与转写内容可能不一致":"审核角色已修改,原提炼结果尚未更新"),1),m("p",null,v(((Ua=l.value.role_check)==null?void 0:Ua.message)||"修改角色标注不会自动改变已生成的建议,可按核实后的角色重新提炼。"),1),(i(!0),f(Me,null,Pe(((La=l.value.role_check)==null?void 0:La.evidence)||[],(s,G)=>(i(),f("blockquote",{key:G},[m("span",null,v(s.channel===0?"左声道":"右声道")+" · "+v(Q(ma)(s.start_ms))+":"+v(s.text),1),l.value.audio_available?(i(),R(t,{key:0,link:"",type:"primary",onClick:Kt=>fa(s.start_ms)},{default:p(()=>[...e[29]||(e[29]=[S("回听依据",-1)])]),_:1},8,["onClick"])):d("",!0)]))),128)),m("p",null,"当前提炼依据:"+v(He(he.value))+"。"+v(Ie.value!=="unconfirmed"?`待确认的新角色:${He(Ie.value)}。`:"请先回听并修改上方角色标注。")+"建议仅供核对,系统不会自动交换角色。",1),_(t,{type:"primary",plain:"",disabled:!na.value||A.value||ae.value||Ie.value==="unconfirmed"||Ie.value===he.value,onClick:ja},{default:p(()=>[...e[30]||(e[30]=[S("确认角色并重新提炼",-1)])]),_:1},8,["disabled"]),ae.value?(i(),f("p",Ct,"请先完成当前单项核对或取消编辑,等待审核草稿保存后再重新提炼。")):l.value.reextract_block_reason?(i(),f("p",xt,v(l.value.reextract_block_reason),1)):d("",!0),e[31]||(e[31]=m("p",{class:"muted"},"复用已完成的转写,不重复语音识别;旧结果保留,重新提炼不自动写入病例。",-1))])):d("",!0),(l.value.extraction_revision||0)>0?(i(),f("p",At,"第 "+v((l.value.extraction_revision||0)+1)+" 版提炼 · "+v(He(he.value))+" · 历史结果已保留",1)):d("",!0),(i(),R(fl,{key:C.value,ref_key:"reviewRef",ref:Se,items:w.value,"onUpdate:items":e[4]||(e[4]=s=>w.value=s),fields:l.value.fields||u.capabilities.fields,disabled:!re.value||z.value||O.value!==""&&O.value!=="save","can-daily":u.capabilities.can_daily,applied:l.value.status==="applied",uncertainties:l.value.uncertainties,"snapshot-items":l.value.items,"channel-roles":J.value,"save-state":T.value,"persisted-revision":ta.value,onSavedNext:e[5]||(e[5]=s=>da(!0)),onSeek:fa},{player:p(()=>[m("div",St,[l.value.audio_available?(i(),R(t,{key:0,size:"small",loading:we.value,onClick:Ya},{default:p(()=>[S(v(j.value?"重新加载录音":"加载录音播放"),1)]),_:1},8,["loading"])):(i(),f("span",Et,"录音不可播放或已清理")),j.value?(i(),f("audio",{key:j.value,ref_key:"audioElement",ref:Te,src:j.value,controls:"",preload:"metadata"},null,8,Rt)):d("",!0)]),me.value&&l.value.audio_available?(i(),f("div",Tt,[_(t,{size:"small",type:X.value==="original"?"primary":"default","aria-pressed":X.value==="original",disabled:we.value||ke.value,onClick:e[3]||(e[3]=s=>Ea("original"))},{default:p(()=>[...e[32]||(e[32]=[S("完整对话",-1)])]),_:1},8,["type","aria-pressed","disabled"]),(i(),f(Me,null,Pe([0,1],s=>_(t,{key:s,size:"small",type:X.value===s?"primary":"default","aria-pressed":X.value===s,disabled:we.value||ke.value,onClick:G=>Ea(s)},{default:p(()=>[S(v(Q(ml)(s,J.value)),1)]),_:2},1032,["type","aria-pressed","disabled","onClick"])),64)),m("span",It,v(ke.value?"正在切换声道…":j.value?X.value==="original"?"回听模式:双方对话":`回听模式:仅${X.value===0?"左":"右"}声道`:"尚未加载录音"),1)])):d("",!0),se.value?(i(),f("p",Ot,v(se.value),1)):d("",!0),l.value.audio_available?(i(),f("p",Ut,"回听对话默认从该区间前 3 秒开始,连续播放双方声音;可随时切换为只听一方。")):d("",!0)]),_:1},8,["items","fields","disabled","can-daily","applied","uncertainties","snapshot-items","channel-roles","save-state","persisted-revision"])),_(Be,{modelValue:Y.value,"onUpdate:modelValue":e[6]||(e[6]=s=>Y.value=s),class:"original-collapse"},{default:p(()=>[_(N,{title:"完整对话转写",name:"original"},{default:p(()=>[ia.value.length?(i(),f("div",Lt,[e[34]||(e[34]=m("p",{class:"muted"},"双方转写按同一时间区间并列展示,不表示发言先后;重叠发言与具体问答请结合录音核对。",-1)),(i(!0),f(Me,null,Pe(Ba.value,s=>(i(),f("section",{key:s.id,class:"transcript-segment"},[m("div",Nt,[m("span",null,v(Q(ma)(s.start_ms))+"–"+v(Q(ma)(s.end_ms)),1),l.value.audio_available?(i(),R(t,{key:0,link:"",type:"primary",onClick:G=>fa(s.start_ms)},{default:p(()=>[...e[33]||(e[33]=[S("回听双方对话",-1)])]),_:1},8,["onClick"])):d("",!0)]),m("div",Vt,[(i(!0),f(Me,null,Pe(s.segments,G=>(i(),f("div",{key:G.id,class:"dialogue-side"},[m("strong",null,v(Q(gl)(G.channel,J.value)),1),m("pre",null,v(G.text||"(该区间无转写文本,不代表没有说话)"),1)]))),128))])]))),128))])):(i(),f("pre",Dt,v(l.value.transcript||"暂无转录"),1))]),_:1})]),_:1},8,["modelValue"]),l.value.status==="review"?(i(),f("div",Bt,[m("div",Ft,[m("strong",null,"已选 "+v(Ce.value)+" 项",1),m("span",null,v(Da.value),1)]),re.value?(i(),f("div",$t,[_(t,{link:"",disabled:A.value,loading:O.value==="save",onClick:e[7]||(e[7]=s=>da())},{default:p(()=>[S(v(T.value==="error"||T.value==="conflict"?"重试保存草稿":"立即保存草稿"),1)]),_:1},8,["disabled","loading"]),qe.value?(i(),R(t,{key:0,type:"primary",disabled:A.value||u.basicDirty||!Ce.value||!!ve.value,loading:O.value==="apply",onClick:qa},{default:p(()=>[...e[35]||(e[35]=[S("确认写入",-1)])]),_:1},8,["disabled","loading"])):d("",!0)])):d("",!0),ve.value?(i(),f("p",Mt,v(ve.value),1)):d("",!0)])):d("",!0),l.value.status==="applied"?(i(),f("p",Pt,v(te.value?"该任务已有历史采纳记录;当前为测试预览,不允许再次写入。":"本次审核已完成,所选项已写入诊单或日常记录,不能重复写入。"),1)):d("",!0)])):d("",!0),_(Qa,{modelValue:ge.value,"onUpdate:modelValue":e[12]||(e[12]=s=>ge.value=s),title:"上传回访录音",width:"min(520px, calc(100vw - 32px))","append-to-body":"","close-on-click-modal":!1,"close-on-press-escape":!z.value,"show-close":!z.value,"before-close":xa},{footer:p(()=>[_(t,{disabled:z.value,onClick:e[11]||(e[11]=s=>xa())},{default:p(()=>[...e[37]||(e[37]=[S("取消",-1)])]),_:1},8,["disabled"]),_(t,{type:"primary",disabled:!W.value||A.value||$.value,loading:z.value,onClick:za},{default:p(()=>[...e[38]||(e[38]=[S("上传并分析",-1)])]),_:1},8,["disabled","loading"])]),default:p(()=>[_(Qe,{"label-position":"top",class:"upload-form"},{default:p(()=>[_(F,{label:"录音文件"},{default:p(()=>[m("input",{ref_key:"fileInput",ref:ua,type:"file",accept:"audio/mpeg,audio/mp4,audio/wav,audio/amr,.mp3,.m4a,.wav,.amr",disabled:!W.value||A.value||$.value,"aria-label":"录音文件",onChange:Ja},null,40,Jt),m("small",null,"支持 MP3 / M4A / WAV / AMR,最多 "+v(Math.floor(u.capabilities.limits.max_bytes/1024/1024))+" MB / "+v(Math.floor(u.capabilities.limits.max_seconds/60))+" 分钟。",1)]),_:1}),_(F,{label:"实际通话时间(北京时间)"},{default:p(()=>[_(fe,{modelValue:Re.value,"onUpdate:modelValue":e[8]||(e[8]=s=>Re.value=s),type:"datetime","value-format":"YYYY-MM-DD HH:mm:ss",placeholder:"用于识别昨天、前天等相对日期",disabled:!W.value||A.value||$.value},null,8,["modelValue","disabled"])]),_:1}),_(F,{label:"本次录音的声道角色"},{default:p(()=>[_(B,{modelValue:_e.value,"onUpdate:modelValue":e[9]||(e[9]=s=>_e.value=s),"aria-label":"本次录音的声道角色",disabled:!W.value||A.value||$.value},{default:p(()=>[_(k,{label:"暂不确定 / 单声道",value:"unconfirmed"}),_(k,{label:"左客服 / 右患者或家属",value:"left_service"}),_(k,{label:"右客服 / 左患者或家属",value:"right_service"})]),_:1},8,["modelValue","disabled"]),e[36]||(e[36]=m("small",null,"已知角色会在提炼前提供给模型;不确定请勿猜测。单声道不按左右区分身份。",-1))]),_:1}),_(Be,{class:"advanced-settings"},{default:p(()=>[_(N,{title:"高级设置 · 分析模型",name:"model"},{default:p(()=>[_(F,{label:"分析模型"},{default:p(()=>[_(B,{modelValue:be.value,"onUpdate:modelValue":e[10]||(e[10]=s=>be.value=s),disabled:!W.value||A.value||$.value,placeholder:"选择已配置的模型"},{default:p(()=>[(i(!0),f(Me,null,Pe(u.capabilities.models,s=>(i(),R(k,{key:s.value,label:s.label,value:s.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"])]),_:1})]),_:1})]),_:1})]),_:1}),x.value?(i(),R(o,{key:0,type:"error",closable:!1,title:x.value,"show-icon":""},null,8,["title"])):d("",!0),$.value&&!z.value?(i(),R(o,{key:1,type:"warning",closable:!1,title:"创建结果未确认,请关闭弹窗后刷新任务列表并联系管理员核对,不要重新上传。"})):d("",!0),z.value?(i(),R(Ga,{key:2,percentage:We.value},null,8,["percentage"])):d("",!0),q.value?(i(),f("p",zt,v(q.value),1)):d("",!0),m("p",Wt,v(te.value?"本次仅测试识别与提炼,可保存审核草稿,不允许写入病历。":"分析仅生成建议,人工确认后才会写入。"),1)]),_:1},8,["modelValue","close-on-press-escape","show-close"])])):d("",!0)}}}),jt=dl(qt,[["__scopeId","data-v-6f2b5251"]]),li=Object.freeze(Object.defineProperty({__proto__:null,default:jt},Symbol.toStringTag,{value:"Module"}));export{jt as F,li as a,ai as f};
|