import{g as ae,j as oe,c as a,a as e,k as d,p as m,F as c,r,v as I,t as i,q as F,n as N,l as h,d as ie,s as u,x as de,C as ce,o,A as R,_ as re}from"./ydFS6PsN.js";import{u as ue}from"./CWcpm1jv.js";import{u as ve}from"./CQ70mTiW.js";const be={class:"flex items-center justify-between mb-5"},me={class:"flex items-center gap-3"},xe=["value"],pe={class:"editor-panel"},fe={class:"flex items-center justify-between mb-4"},ge={class:"font-semibold text-slate-800 text-sm"},_e={class:"grid grid-cols-3 gap-4 mb-4"},ye={class:"form-control"},ke=["value"],he={class:"form-control"},Se=["value"],Te={class:"form-control"},Ce={class:"flex gap-3 mb-4"},we={key:0,class:"grid grid-cols-3 gap-4"},Ae={class:"form-control"},Ve={key:0,value:""},Me=["value"],je={class:"form-control"},Ue={key:0,value:""},Ne=["value"],Re={class:"form-control"},$e={key:0,value:""},Oe=["value"],Pe={key:1,class:"form-control max-w-xs"},ze={key:0,value:""},Be=["value"],De={class:"flex items-center justify-between pt-4 border-t border-slate-100 mt-4"},Ee={class:"flex items-center gap-2 text-sm"},Le={class:"grid grid-cols-1 gap-4",style:{"grid-template-columns":"repeat(auto-fill,minmax(360px,1fr))"}},Ie={key:0,class:"col-span-full text-center py-20 text-slate-300"},Fe=["onClick"],Ge={class:"flex items-center justify-between"},qe={class:"flex items-center gap-2"},He={class:"lang-badge"},Je={class:"text-slate-400 font-bold text-lg"},Ke={class:"lang-badge"},Qe={class:"flex items-center gap-2"},We={key:0,class:"mode-badge mode-pipeline"},Xe={key:1,class:"mode-badge mode-e2e"},Ye={key:2,class:"badge badge-success badge-xs"},Ze={key:3,class:"badge badge-ghost badge-xs"},et=["onClick"],tt={key:0,class:"flex flex-wrap items-center gap-2 mt-3"},st={class:"svc-pill",style:{background:"#1664ff"}},lt={class:"svc-pill",style:{background:"#059669"}},nt={class:"svc-pill",style:{background:"#7c3aed"}},at={key:1,class:"flex items-center gap-2 mt-3"},ot={class:"svc-pill",style:{background:"#f97316"}},it={class:"sync-overlay"},dt={class:"sync-box"},ct={class:"flex items-start gap-3 mb-4"},rt={style:{width:"42px",height:"42px",background:"linear-gradient(135deg,#4f46e5,#7c3aed)","border-radius":"13px",display:"flex","align-items":"center","justify-content":"center","flex-shrink":"0"}},ut={style:{width:"20px",height:"20px",color:"#fff"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},vt={class:"text-xs text-slate-400 mt-1"},bt={class:"flex items-center justify-between mb-1"},mt={class:"flex gap-2"},xt={class:"sync-region-grid"},pt=["onClick"],ft=["checked","onClick"],G=1,q=2,H=3,J=4,gt=ae({__name:"calltranslate",setup(_t){const j=[{c:"zh",n:"中文"},{c:"en",n:"英文"},{c:"ja",n:"日语"},{c:"ko",n:"韩语"},{c:"fr",n:"法语"},{c:"de",n:"德语"},{c:"es",n:"西班牙语"},{c:"pt",n:"葡萄牙语"},{c:"ru",n:"俄语"},{c:"ar",n:"阿拉伯语"},{c:"th",n:"泰语"},{c:"vi",n:"越南语"},{c:"id",n:"印尼语"},{c:"ms",n:"马来语"},{c:"hi",n:"印地语"}];function S(l){const t=j.find(s=>s.c===l);return t?t.n:l||""}const f=[{value:1,label:"中国"},{value:2,label:"美国"},{value:3,label:"东亚"},{value:4,label:"东南亚"},{value:5,label:"南亚"},{value:6,label:"中东"},{value:7,label:"欧洲"},{value:8,label:"俄罗斯"},{value:9,label:"非洲"},{value:10,label:"南美"},{value:11,label:"北美"},{value:12,label:"大洋洲"},{value:13,label:"巴西"},{value:14,label:"印度"}];function K(l){const t=f.find(s=>s.value===l);return t?t.label:"区域"+l}const{webApi:g}=ue(),{success:T,error:x}=ve(),C=u([]),_=u([]),y=u(f.length?f[0].value:1),w=u(!1),p=u(null),$=u(0),n=de({src:"zh",dst:"en",bidir:!1,mode:0,asr:"",mt:"",tts:"",ast:"",enable:!0});async function Q(){try{const l=await g("getsvcconfigs",{});C.value=l?.items??[]}catch(l){x(l?.message??"加载服务列表失败"),C.value=[]}}async function A(){try{const l=await g("getcalltranslatepairs",{region:y.value});_.value=l?.items??[]}catch(l){x(l?.message??"加载失败"),_.value=[]}}function v(l){return C.value.filter(t=>t.enable&&(t.categories||"").split(",").map(Number).indexOf(l)>=0)}function V(l){const t=C.value.find(s=>s.id===l);return t?t.name:l||"未配置"}function O(l){n.src=l?.src_lang||"zh",n.dst=l?.dst_lang||"en",n.bidir=!!l?.bidir,n.mode=l?.mode!=null?l.mode:0,n.asr=l?.asr_svc_id||"",n.mt=l?.mt_svc_id||"",n.tts=l?.tts_svc_id||"",n.ast=l?.ast_svc_id||"",n.enable=l?l.enable!==!1:!0}function W(){p.value=null,O(null),w.value=!0}function X(l){const t=_.value.find(s=>s.id===l)||null;p.value=t,O(t),w.value=!0}function M(){w.value=!1,p.value=null}function Y(){const l=n.mode;return{id:p.value?p.value.id:0,region:y.value,src_lang:n.src,dst_lang:n.dst,bidir:n.bidir,mode:l,asr_svc_id:l===0&&n.asr||"",mt_svc_id:l===0&&n.mt||"",tts_svc_id:l===0&&n.tts||"",ast_svc_id:l===1&&n.ast||"",enable:n.enable}}async function P(){const l=Y();if(!l.src_lang||!l.dst_lang)return x("源语言和目标语言必填"),!1;try{const t=await g("savecalltranslatepair",l);return $.value=t?.id??0,await A(),!0}catch(t){return x(t?.message??"保存失败"),!1}}function Z(l){window.confirm("确定删除这条语言对配置?")&&g("delcalltranslatepair",{ids:[l]}).then(()=>{T("已删除"),A()}).catch(t=>x(t?.message??"删除失败"))}const U=u(!1),z=u(""),b=u([]),B=ce(()=>f.filter(l=>l.value!==y.value));function ee(){const l=n.mode===0?"三段式拼接":"端到端 AST";z.value="将「"+S(n.src)+" → "+S(n.dst)+"」("+l+(n.bidir?",双向":"")+" )的服务编排同步到其他区域。",b.value=[],U.value=!0}function D(l){const t=b.value.indexOf(l);t>=0?b.value.splice(t,1):b.value.push(l)}function E(l){b.value=l?B.value.map(t=>t.value):[]}function L(){U.value=!1}async function te(){L(),await P()&&(M(),T("保存成功"))}async function se(){const l=[...b.value];if(L(),!!await P()){if(M(),!l.length){T("保存成功");return}try{const k=(await g("synccalltranslatepairs",{pair_ids:[$.value],target_regions:l}))?.synced??0,le=l.map(ne=>K(ne));T("已保存并同步到:"+le.join("、")+"("+k+" 个)")}catch(s){x(s?.message??"同步失败")}}}return oe(async()=>{await Promise.all([Q(),A()])}),(l,t)=>(o(),a("div",null,[e("div",be,[t[14]||(t[14]=e("div",null,[e("h2",{class:"text-lg font-semibold text-slate-800"},"通话翻译配置"),e("p",{class:"text-xs text-slate-400 mt-1"},"按区域和语言对配置翻译服务。支持三段式(ASR→MT→TTS)和端到端 AST 两种模式。")],-1)),e("div",me,[t[13]||(t[13]=e("span",{class:"text-sm text-slate-500"},"区域",-1)),d(e("select",{"onUpdate:modelValue":t[0]||(t[0]=s=>y.value=s),class:"select select-bordered select-sm",onChange:A},[(o(),a(c,null,r(f,s=>e("option",{key:s.value,value:s.value},i(s.label),9,xe)),64))],544),[[m,y.value,void 0,{number:!0}]]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:W},"+ 新增语言对")])]),d(e("div",pe,[e("div",fe,[e("h3",ge,i(p.value?"编辑语言对":"新增语言对"),1),e("button",{class:"btn btn-ghost btn-xs",onClick:M},"✕ 关闭")]),e("div",_e,[e("div",ye,[t[15]||(t[15]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"源语言 *")],-1)),d(e("select",{"onUpdate:modelValue":t[1]||(t[1]=s=>n.src=s),class:"select select-bordered select-sm"},[(o(),a(c,null,r(j,s=>e("option",{key:s.c,value:s.c},i(s.n),9,ke)),64))],512),[[m,n.src]])]),e("div",he,[t[16]||(t[16]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"目标语言 *")],-1)),d(e("select",{"onUpdate:modelValue":t[2]||(t[2]=s=>n.dst=s),class:"select select-bordered select-sm"},[(o(),a(c,null,r(j,s=>e("option",{key:s.c,value:s.c},i(s.n),9,Se)),64))],512),[[m,n.dst]])]),e("div",Te,[t[17]||(t[17]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"双向")],-1)),d(e("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>n.bidir=s),type:"checkbox",class:"toggle toggle-primary mt-1"},null,512),[[F,n.bidir]])])]),e("div",Ce,[e("div",{class:N(["mtab",{on:n.mode===0}]),onClick:t[4]||(t[4]=s=>n.mode=0)},[...t[18]||(t[18]=[e("div",null,[e("div",{class:"font-bold text-sm"},"🧩 三段式拼接"),e("div",{class:"text-xs text-slate-400 mt-0.5"},"ASR → MT → TTS")],-1)])],2),e("div",{class:N(["mtab",{on:n.mode===1}]),onClick:t[5]||(t[5]=s=>n.mode=1)},[...t[19]||(t[19]=[e("div",null,[e("div",{class:"font-bold text-sm"},"⚡ 端到端 AST"),e("div",{class:"text-xs text-slate-400 mt-0.5"},"单服务直接完成语音翻译")],-1)])],2)]),e("div",null,[n.mode===0?(o(),a("div",we,[e("div",Ae,[t[20]||(t[20]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"语音识别(ASR)")],-1)),d(e("select",{"onUpdate:modelValue":t[6]||(t[6]=s=>n.asr=s),class:"select select-bordered select-sm"},[v(G).length?h("",!0):(o(),a("option",Ve,"(无可用服务)")),(o(!0),a(c,null,r(v(G),s=>(o(),a("option",{key:s.id,value:s.id},i(s.name),9,Me))),128))],512),[[m,n.asr]])]),e("div",je,[t[21]||(t[21]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"机器翻译(MT)")],-1)),d(e("select",{"onUpdate:modelValue":t[7]||(t[7]=s=>n.mt=s),class:"select select-bordered select-sm"},[v(H).length?h("",!0):(o(),a("option",Ue,"(无可用服务)")),(o(!0),a(c,null,r(v(H),s=>(o(),a("option",{key:s.id,value:s.id},i(s.name),9,Ne))),128))],512),[[m,n.mt]])]),e("div",Re,[t[22]||(t[22]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"语音合成(TTS)")],-1)),d(e("select",{"onUpdate:modelValue":t[8]||(t[8]=s=>n.tts=s),class:"select select-bordered select-sm"},[v(q).length?h("",!0):(o(),a("option",$e,"(无可用服务)")),(o(!0),a(c,null,r(v(q),s=>(o(),a("option",{key:s.id,value:s.id},i(s.name),9,Oe))),128))],512),[[m,n.tts]])])])):(o(),a("div",Pe,[t[23]||(t[23]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-xs"},"端到端语音翻译服务(AST)")],-1)),d(e("select",{"onUpdate:modelValue":t[9]||(t[9]=s=>n.ast=s),class:"select select-bordered select-sm"},[v(J).length?h("",!0):(o(),a("option",ze,"(无可用服务)")),(o(!0),a(c,null,r(v(J),s=>(o(),a("option",{key:s.id,value:s.id},i(s.name),9,Be))),128))],512),[[m,n.ast]])]))]),e("div",De,[e("label",Ee,[d(e("input",{"onUpdate:modelValue":t[10]||(t[10]=s=>n.enable=s),type:"checkbox",class:"checkbox checkbox-sm checkbox-primary"},null,512),[[F,n.enable]]),t[24]||(t[24]=ie(" 启用 ",-1))]),e("div",{class:"flex gap-2"},[e("button",{class:"btn btn-ghost btn-sm",onClick:M},"取消"),e("button",{class:"btn btn-primary btn-sm text-white",onClick:ee},"保存")])])],512),[[I,w.value]]),e("div",Le,[_.value.length?h("",!0):(o(),a("div",Ie,[...t[25]||(t[25]=[e("div",{class:"text-5xl mb-3"},"🌐",-1),e("p",{class:"text-sm"},"当前区域暂无语言对配置",-1)])])),(o(!0),a(c,null,r(_.value,s=>(o(),a("div",{key:s.id,class:"pair-card",onClick:k=>X(s.id)},[e("div",Ge,[e("div",qe,[e("span",He,i(S(s.src_lang)),1),e("span",Je,i(s.bidir?"⇄":"→"),1),e("span",Ke,i(S(s.dst_lang)),1)]),e("div",Qe,[s.mode===0?(o(),a("span",We,"三段式拼接")):(o(),a("span",Xe,"端到端 AST")),s.enable?(o(),a("span",Ye,"启用")):(o(),a("span",Ze,"停用")),e("button",{class:"btn btn-ghost btn-xs text-error",onClick:R(k=>Z(s.id),["stop"])},"删除",8,et)])]),s.mode===0?(o(),a("div",tt,[e("span",st,"ASR: "+i(V(s.asr_svc_id)),1),t[26]||(t[26]=e("span",{class:"text-slate-300 text-sm"},"→",-1)),e("span",lt,"MT: "+i(V(s.mt_svc_id)),1),t[27]||(t[27]=e("span",{class:"text-slate-300 text-sm"},"→",-1)),e("span",nt,"TTS: "+i(V(s.tts_svc_id)),1)])):(o(),a("div",at,[e("span",ot,"AST: "+i(V(s.ast_svc_id)),1)]))],8,Fe))),128))]),d(e("div",it,[e("div",dt,[e("div",ct,[e("div",rt,[(o(),a("svg",ut,[...t[28]||(t[28]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"},null,-1)])]))]),e("div",null,[t[29]||(t[29]=e("h3",{class:"text-base font-semibold text-slate-800"},"同步到其他区域",-1)),e("p",vt,i(z.value),1)])]),t[31]||(t[31]=e("div",{class:"text-xs px-3 py-2 rounded-lg mb-3",style:{background:"#f0fdf4",border:"1px solid #bbf7d0",color:"#15803d"}}," ✦ 同步内容:服务组合(模式 + 各段服务)将被复制到目标区域。 ",-1)),e("div",bt,[t[30]||(t[30]=e("span",{class:"text-xs font-semibold text-slate-500"},"选择目标区域",-1)),e("div",mt,[e("button",{class:"btn btn-ghost btn-xs",onClick:t[11]||(t[11]=s=>E(!0))},"全选"),e("button",{class:"btn btn-ghost btn-xs",onClick:t[12]||(t[12]=s=>E(!1))},"清空")])]),e("div",xt,[(o(!0),a(c,null,r(B.value,s=>(o(),a("label",{key:s.value,class:N(["sync-region-item",{checked:b.value.includes(s.value)}]),onClick:R(k=>D(s.value),["prevent"])},[e("input",{type:"checkbox",class:"checkbox checkbox-xs checkbox-primary",checked:b.value.includes(s.value),onClick:R(k=>D(s.value),["stop"])},null,8,ft),e("span",null,i(s.label),1)],10,pt))),128))]),t[32]||(t[32]=e("p",{class:"text-[11px] text-slate-400 mb-5"},"⚠ 目标区域相同语言对已存在则覆盖,否则新建。",-1)),e("div",{class:"flex gap-3 justify-end"},[e("button",{class:"btn btn-ghost",onClick:te},"仅保存当前区域"),e("button",{class:"btn btn-primary text-white",onClick:se},"保存并同步")])])],512),[[I,U.value]])]))}}),St=re(gt,[["__scopeId","data-v-23837fd5"]]);export{St as default};