3 lines
7.4 KiB
JavaScript
3 lines
7.4 KiB
JavaScript
import{R as P,by as H,M as h,o as J,q as i,r as p,s as r,v as N,K as Q,u as l,D as E,w as X,bz as Y,L as S,O as C,bo as w,P as y,ac as ee,bn as te,F as R,aA as se,bB as ae,T as u,G as ne,ae as ie,bm as le,bu as re,bC as ue,p as L}from"./.pnpm-CyuAWpdG.js";import{ap as oe}from"./tcm-CiKToMpm.js";import{j as A,_ as ce}from"./index-Bv3nGWNs.js";function de(t,m){if(!Array.isArray(t))throw new Error("面诊记录返回格式异常,请重试");const f=new Set;return t.filter(s=>!s||!Number.isSafeInteger(Number(s.id))||Number(s.id)<=0||f.has(Number(s.id))||s.diagnosis_id!=null&&Number(s.diagnosis_id)!==m?!1:(f.add(Number(s.id)),!0)).map(s=>({...s,id:Number(s.id),diagnosis_id:m,transcript_text:typeof s.transcript_text=="string"?s.transcript_text.replace(/\r\n/g,`
|
|
`).trim():""})).sort((s,v)=>v.id-s.id)}function z(t){return typeof(t==null?void 0:t.transcript_text)=="string"?t.transcript_text.trim():""}function B(t){switch(t.transcription_status){case"running":return{label:"录音转写中",type:"info"};case"completed":return{label:"文字已生成",type:"success"};case"partial":return{label:"文字部分保存",type:"warning"};case"failed":return{label:"文字生成失败",type:"danger"};default:return z(t)?{label:"文字已保存",type:"success"}:{label:"未生成文字",type:"info"}}}function q(t){return t.transcription_status==="running"?"正在转写,可点击刷新查看最新保存的文字。":t.transcription_status==="failed"?"本次面诊文字生成失败,暂无已保存的对话。":Number(t.status)===3?"本次通话未接听,暂无文字对话。":Number(t.status)===4?"本次通话已取消,暂无文字对话。":"本次面诊暂无已保存的文字对话。"}function D(t){return Number(t.call_type)===1?"语音面诊":Number(t.call_type)===2?"视频面诊":"面诊记录"}function pe(t){const m=h([]),f=h(!1),s=h("");let v=0,g;const b=async()=>{const c=Number(t()),_=++v;if(g==null||g.abort(),s.value="",!Number.isSafeInteger(c)||c<=0){m.value=[],f.value=!1;return}g=new AbortController,f.value=!0;try{const d=await oe({diagnosis_id:c},g.signal);if(_!==v||Number(t())!==c)return;m.value=de(d,c)}catch(d){if(_!==v||Number(t())!==c)return;s.value=String((d==null?void 0:d.msg)||(d==null?void 0:d.message)||"面诊文字对话加载失败,请重试")}finally{_===v&&(f.value=!1)}};return P(t,()=>{m.value=[],b()},{immediate:!0,flush:"sync"}),H(()=>{v++,g==null||g.abort(),m.value=[]}),{records:m,loading:f,error:s,refresh:b}}const _e={class:"consultation-transcripts"},me={class:"transcript-toolbar"},ve={class:"transcript-body"},fe={class:"transcript-sessions","aria-label":"历次面诊记录"},ge={class:"session-count"},ye={class:"session-list"},be=["aria-pressed","onClick"],he={class:"session-time"},xe={class:"session-meta"},ke={class:"session-preview"},Ne={class:"transcript-detail-header"},Ce={key:0},Te={key:1},Ee={class:"transcript-status"},Se={key:0},ze={key:0,class:"transcript-note"},Le={key:1,class:"transcript-note"},Be={key:2,class:"transcript-note"},Ie={key:3,class:"transcript-text"},T=10,Ve=J({__name:"ConsultationTranscriptPanel",props:{diagnosisId:{}},setup(t){const m=t,{records:f,loading:s,error:v,refresh:g}=pe(()=>m.diagnosisId),b=h(""),c=h(null),_=h(1),d=h(!1),x=L(()=>{const n=b.value.trim().toLocaleLowerCase();return f.value.filter(e=>e.diagnosis_id===m.diagnosisId&&(!n||`${e.start_time_text||""} ${e.id} ${z(e)}`.toLocaleLowerCase().includes(n)))}),U=L(()=>x.value.slice((_.value-1)*T,_.value*T)),a=L(()=>x.value.find(n=>n.id===c.value)),k=L(()=>z(a.value));P(x,n=>{if(!n.some(e=>e.id===c.value)){const e=n.find(I=>z(I))||n[0];c.value=(e==null?void 0:e.id)??null,_.value=e?Math.floor(n.indexOf(e)/T)+1:1}_.value=Math.min(_.value,Math.max(1,Math.ceil(n.length/T)))},{immediate:!0,flush:"sync"}),P(b,()=>{_.value=1},{flush:"sync"});function F(n){const e=z(n).replace(/\s+/g," ");return e?e.slice(0,90)+(e.length>90?"…":""):q(n)}function G(n){return{1:"进行中",2:"已结束",3:"未接听",4:"已取消"}[Number(n)]||"状态未记录"}async function O(){var e;const n=k.value;if(!(!n||d.value)){if(!((e=navigator.clipboard)!=null&&e.writeText)){A.msgWarning("当前浏览器不支持自动复制,请选中文字复制");return}d.value=!0;try{await navigator.clipboard.writeText(n),A.msgSuccess("已复制本次面诊文字对话")}catch{A.msgWarning("复制失败,请选中文字复制")}finally{d.value=!1}}}return(n,e)=>{const I=X,$=Q,W=w,j=se,M=le,K=re,V=ue,Z=te;return i(),p("section",_e,[r("header",me,[e[3]||(e[3]=r("div",null,[r("h3",null,"面诊文字对话"),r("p",null,"按每次通话分别查看已保存的文字记录。")],-1)),N($,{loading:l(s),onClick:l(g)},{default:E(()=>[N(I,null,{default:E(()=>[N(l(Y))]),_:1}),e[2]||(e[2]=S("刷新",-1))]),_:1},8,["loading","onClick"])]),l(v)?(i(),C(W,{key:0,title:l(v),type:"error",closable:!1,"show-icon":"",class:"transcript-error"},null,8,["title"])):y("",!0),ee((i(),p("div",ve,[l(f).length?(i(),p(R,{key:0},[r("aside",fe,[N(j,{modelValue:b.value,"onUpdate:modelValue":e[0]||(e[0]=o=>b.value=o),clearable:"",placeholder:"搜索面诊时间或对话内容","prefix-icon":l(ae)},null,8,["modelValue","prefix-icon"]),r("p",ge,u(x.value.length)+" 条面诊记录",1),r("div",ye,[(i(!0),p(R,null,ne(U.value,o=>(i(),p("button",{key:o.id,type:"button",class:ie(["session-item",{selected:c.value===o.id}]),"aria-pressed":c.value===o.id,onClick:Ae=>c.value=o.id},[r("span",he,u(o.start_time_text||"开始时间未记录"),1),r("span",xe,u(l(D)(o))+" · 记录 #"+u(o.id),1),N(M,{size:"small",type:l(B)(o).type},{default:E(()=>[S(u(l(B)(o).label),1)]),_:2},1032,["type"]),r("span",ke,u(F(o)),1)],10,be))),128))]),x.value.length>T?(i(),C(K,{key:0,"current-page":_.value,"onUpdate:currentPage":e[1]||(e[1]=o=>_.value=o),"page-size":T,total:x.value.length,layout:"prev, pager, next",small:""},null,8,["current-page","total"])):y("",!0)]),a.value?(i(),p("article",{class:"transcript-detail",key:`${t.diagnosisId}-${a.value.id}`},[r("header",Ne,[r("div",null,[r("h4",null,u(a.value.start_time_text||"开始时间未记录")+" · "+u(l(D)(a.value)),1),r("p",null,[S(" 通话记录 #"+u(a.value.id)+" ",1),a.value.duration_text?(i(),p("span",Ce," · 时长 "+u(a.value.duration_text),1)):y("",!0),a.value.end_time_text?(i(),p("span",Te," · 结束 "+u(a.value.end_time_text),1)):y("",!0)])]),k.value?(i(),C($,{key:0,loading:d.value,onClick:O},{default:E(()=>[...e[4]||(e[4]=[S("复制全文",-1)])]),_:1},8,["loading"])):y("",!0)]),r("div",Ee,[N(M,{type:l(B)(a.value).type},{default:E(()=>[S(u(l(B)(a.value).label),1)]),_:1},8,["type"]),r("span",null,u(G(a.value.status)),1),a.value.transcription_segment_count?(i(),p("span",Se,u(a.value.transcription_segment_count)+" 段对话",1)):y("",!0)]),a.value.transcription_status==="partial"?(i(),p("p",ze,"本次文字记录不完整,以下展示已保存的内容。")):a.value.transcription_status==="failed"&&k.value?(i(),p("p",Le,"本次转写未完成,以下展示已保存的内容。")):a.value.transcription_status==="running"&&k.value?(i(),p("p",Be,"转写仍在进行,可刷新查看最新保存的文字。")):y("",!0),k.value?(i(),p("pre",Ie,u(k.value),1)):(i(),C(V,{key:4,description:l(q)(a.value),"image-size":72},null,8,["description"]))])):(i(),C(V,{key:1,description:"没有匹配的面诊记录,请调整搜索内容",class:"transcript-detail","image-size":72}))],64)):!l(s)&&!l(v)?(i(),C(V,{key:1,description:"该诊单暂无面诊通话记录","image-size":80,class:"transcript-empty"})):y("",!0)])),[[Z,l(s)]])])}}}),Re=ce(Ve,[["__scopeId","data-v-e51f1814"]]);export{Re as default};
|