You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1 lines
25 KiB

import{g as de,B as re,c as o,J as Z,a as e,F as k,r as w,t as i,d as y,L as A,m as r,s as O,l as c,q as C,v as ce,C as z,x as S,y as N,z as P,o as a,n as x,p as $,_ as ue}from"./T3_facgV.js";import{u as pe}from"./D7TmXHpa.js";import{u as ve}from"./YYZWHM5Z.js";import"./BaPL5gDJ.js";const me={class:"flex gap-4",style:{"align-items":"flex-start"}},xe={style:{width:"208px","flex-shrink":"0"}},be={class:"flex flex-col gap-1.5"},ye=["onClick"],fe={width:"17",height:"17",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},he=["d"],ge={class:"flex-1 min-w-0"},_e={class:"text-sm font-medium text-slate-700"},ke={class:"text-[11px] text-slate-400 truncate"},we={key:0,class:"dot-on",title:"已启用"},Ce={class:"flex-1 min-w-0"},Se={key:0},qe={class:"rounded-xl px-4 py-3 mb-4 flex items-center gap-3",style:{background:"linear-gradient(135deg,#ecfdf5,#f0fdfa)",border:"1px solid #a7f3d0"}},Me={style:{width:"36px",height:"36px","border-radius":"10px",background:"#10b981",display:"flex","align-items":"center","justify-content":"center","flex-shrink":"0"}},Te={style:{width:"19px",height:"19px",color:"#fff"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},Ke={class:"flex-1"},Ae={class:"text-sm font-semibold text-emerald-800"},Ie={class:"grid grid-cols-4 gap-3 mb-4"},Ve=["onClick"],Pe={class:"flex items-center justify-between"},$e={key:0,class:"text-[10px] text-emerald-500 font-semibold"},je={key:1,class:"text-[10px] text-slate-300 font-semibold"},Ue={class:"text-sm font-semibold text-slate-700 mt-2"},De={class:"text-[11px] text-slate-400 mb-2.5"},Le=["onClick"],Be=["checked","onClick"],Oe={class:"bg-white rounded-2xl border border-slate-100 shadow-sm p-6"},ze={class:"flex items-center justify-between mb-5"},Ne={class:"flex items-center gap-3"},Re={class:"text-base font-semibold text-slate-800"},Ee={class:"text-xs text-slate-400 mt-0.5"},Ge={class:"flex items-center gap-2"},He={class:"flex items-center gap-2 mr-1"},Fe={class:"grid grid-cols-2 gap-x-5 gap-y-4"},Je={class:"label py-1"},Qe={class:"label-text text-sm"},Ze={key:0,class:"text-rose-500 ml-0.5"},We={key:1,class:"lock-tag ml-1.5"},Xe={class:"relative"},Ye=["onUpdate:modelValue","type","placeholder"],et=["onClick"],tt={key:0,class:"text-[11px] text-slate-400 mt-1"},st={key:1},lt={class:"rounded-xl px-4 py-3 mb-4 flex items-center gap-3",style:{background:"#fffbeb",border:"1px solid #fde68a"}},ot={style:{width:"36px",height:"36px","border-radius":"10px",background:"#f59e0b",display:"flex","align-items":"center","justify-content":"center","flex-shrink":"0"}},at={style:{width:"19px",height:"19px",color:"#fff"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},nt={class:"bg-white rounded-2xl border border-slate-100 shadow-sm p-6"},it={class:"flex items-center justify-between mb-5"},dt={class:"flex items-center gap-2"},rt={class:"flex items-center gap-2 mr-1"},ct={class:"grid grid-cols-2 gap-x-5 gap-y-4"},ut={class:"form-control"},pt={class:"form-control"},vt={class:"form-control"},mt=["value"],xt={class:"form-control"},bt={class:"form-control"},yt={class:"form-control"},ft={class:"relative"},ht=["type"],gt={class:"form-control col-span-2"},_t={class:"flex items-end gap-3"},kt={class:"form-control flex-1"},wt={key:2},Ct={class:"rounded-xl px-4 py-3 mb-4 flex items-center gap-3",style:{background:"#f0fdfa",border:"1px solid #99f6e4"}},St={style:{width:"36px",height:"36px","border-radius":"10px",background:"#14b8a6",display:"flex","align-items":"center","justify-content":"center","flex-shrink":"0"}},qt={style:{width:"19px",height:"19px",color:"#fff"},fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},Mt={class:"badge badge-sm text-white",style:{background:"#14b8a6",border:"none"}},Tt={class:"grid grid-cols-4 gap-3 mb-4"},Kt=["onClick"],At={class:"flex items-center justify-between"},It={key:0,class:"text-[10px] text-emerald-500 font-semibold"},Vt={key:1,class:"text-[10px] text-slate-300 font-semibold"},Pt={class:"text-sm font-semibold text-slate-700 mt-2"},$t={class:"text-[11px] text-slate-400 mb-2.5"},jt=["onClick"],Ut=["checked","onClick"],Dt={class:"bg-white rounded-2xl border border-slate-100 shadow-sm p-6"},Lt={class:"flex items-center justify-between mb-5"},Bt={class:"flex items-center gap-3"},Ot={class:"text-base font-semibold text-slate-800"},zt={class:"text-xs text-slate-400 mt-0.5"},Nt={class:"flex items-center gap-2"},Rt={class:"flex items-center gap-2 mr-1"},Et={class:"grid grid-cols-2 gap-x-5 gap-y-4"},Gt={class:"label py-1"},Ht={class:"label-text text-sm"},Ft={key:0,class:"text-rose-500 ml-0.5"},Jt={key:1,class:"lock-tag ml-1.5"},Qt={class:"relative"},Zt=["onUpdate:modelValue","type","placeholder"],Wt=["onClick"],Xt={key:0,class:"text-[11px] text-slate-400 mt-1"},W="6",Yt=de({__name:"systemconfig",setup(es){const{success:q,info:M,error:R}=pe(),{webApi:E}=ve(),X=[{id:"storage",label:"对象存储",desc:"固件 / 头像 / 文件",color:"#6366f1",icon:"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8"},{id:"mail",label:"邮件服务",desc:"生产通知 / 厂家发信",color:"#f59e0b",icon:"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"},{id:"translate",label:"翻译服务",desc:"后台文案多语言同步",color:"#14b8a6",icon:"M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129"}],T=S("storage"),n=N({enable:!0,host:"smtp.exmail.qq.com",port:"465",secure:"SSL",user:"noreply@yunyan.com",pass:"",_showPass:!1,fromName:"云岩科技",cc:"ops@yunyan.com",testTo:""}),Y=["SSL","STARTTLS","不加密"];function ee(){if(!n.testTo){M("请先填测试收件邮箱");return}M(`正在向 ${n.testTo} 发送测试邮件…(演示)`),setTimeout(()=>q(`测试邮件已发送至 ${n.testTo}`),600)}function te(l){return l==="storage"?!0:l==="mail"?n.enable:l==="translate"?G.value?.enable??!1:!1}const I=N([{id:"volc",name:"火山引擎翻译",short:"火山",tag:"Volcengine MT",color:"#1664ff",enable:!0,fields:[{key:"region",label:"Region",value:"cn-beijing",mono:!0,required:!0},{key:"accessKey",label:"AccessKey",value:"AKLTZjJmODdk****",mono:!0,encrypted:!0,required:!0},{key:"secretKey",label:"SecretKey",value:"",mono:!0,encrypted:!0,required:!0,hint:"留空保留原密文"}]},{id:"aliyun",name:"阿里云翻译",short:"阿里",tag:"Aliyun MT",color:"#ff6a00",enable:!0,fields:[{key:"region",label:"Region",value:"cn-hangzhou",mono:!0,required:!0},{key:"accessKeyId",label:"AccessKey ID",value:"LTAI5txxxxxxxx",mono:!0,encrypted:!0,required:!0},{key:"accessKeySecret",label:"AccessKey Secret",value:"",mono:!0,encrypted:!0,required:!0,hint:"留空保留原密文"},{key:"scene",label:"翻译场景",value:"general",mono:!0,hint:"general / social / ecommerce / tech"}]},{id:"google",name:"Google 翻译",short:"G",tag:"Cloud Translation",color:"#ea4335",enable:!1,fields:[{key:"project",label:"Project ID",value:"",mono:!0,required:!0},{key:"apiKey",label:"API Key",value:"",mono:!0,encrypted:!0,required:!0}]},{id:"deepl",name:"DeepL",short:"DL",tag:"DeepL API",color:"#0f2b46",enable:!1,fields:[{key:"authKey",label:"Auth Key",value:"",mono:!0,encrypted:!0,required:!0},{key:"plan",label:"套餐",value:"free",mono:!0,hint:"free / pro"}]}]),f=S("volc"),h=S("volc"),p=P(()=>I.find(l=>l.id===h.value)),G=P(()=>I.find(l=>l.id===f.value));function j(l){const s=I.find(t=>t.id===l);s&&(f.value=l,h.value=l,s.enable=!0,q(`已将「${s.name}」设为默认翻译服务,后台多语言同步将走该服务`))}function se(){M(`正在测试 ${p.value.name} …(演示)`),setTimeout(()=>q(`${p.value.name} 连接正常,可调用翻译`),600)}const K=N([{id:"aliyun",name:"阿里云 OSS",short:"OSS",tag:"Aliyun",color:"#ff6a00",enable:!1,fields:[{key:"endpoint",label:"Endpoint",value:"",placeholder:"oss-cn-shanghai.aliyuncs.com",mono:!0,required:!0},{key:"bucket",label:"Bucket",value:"",placeholder:"yunyan-firmware",mono:!0,required:!0},{key:"access_key_id",label:"AccessKey ID",value:"",mono:!0,encrypted:!0,required:!0},{key:"access_key_secret",label:"AccessKey Secret",value:"",mono:!0,encrypted:!0,required:!0,hint:"留空保留原密文"},{key:"domain",label:"自定义域名 (CDN)",value:"",placeholder:"cdn.yunyan.com",wide:!0,hint:"可选,配置后文件下载 URL 走该域名"}]},{id:"tencent",name:"腾讯云 COS",short:"COS",tag:"Tencent",color:"#00a4ff",enable:!0,fields:[{key:"region",label:"Region",value:"ap-guangzhou",mono:!0,required:!0},{key:"appid",label:"AppId",value:"1253517901",mono:!0,required:!0},{key:"bucket",label:"Bucket",value:"yunyan-1253517901",mono:!0,required:!0},{key:"secretId",label:"SecretId",value:"AKIDxxxxxxxx",mono:!0,encrypted:!0,required:!0},{key:"secretKey",label:"SecretKey",value:"",mono:!0,encrypted:!0,required:!0,hint:"留空保留原密文"},{key:"domain",label:"自定义域名 (CDN)",value:"",wide:!0,hint:"可选"}]},{id:"qiniu",name:"七牛云 Kodo",short:"KODO",tag:"Qiniu",color:"#00aaff",enable:!1,fields:[{key:"zone",label:"存储区域",value:"",mono:!0,required:!0},{key:"bucket",label:"Bucket",value:"",mono:!0,required:!0},{key:"accessKey",label:"AccessKey",value:"",mono:!0,encrypted:!0,required:!0},{key:"secretKey",label:"SecretKey",value:"",mono:!0,encrypted:!0,required:!0},{key:"domain",label:"加速域名",value:"",wide:!0}]},{id:"minio",name:"MinIO",short:"S3",tag:"S3 兼容",color:"#c72e49",enable:!1,fields:[{key:"endpoint",label:"Endpoint",value:"",mono:!0,required:!0,placeholder:"minio.内网:9000"},{key:"bucket",label:"Bucket",value:"",mono:!0,required:!0},{key:"accessKey",label:"AccessKey",value:"",mono:!0,encrypted:!0,required:!0},{key:"secretKey",label:"SecretKey",value:"",mono:!0,encrypted:!0,required:!0},{key:"useSSL",label:"使用 HTTPS",value:"false",mono:!0}]}]),b=S("aliyun"),g=S("aliyun"),v=P(()=>K.find(l=>l.id===g.value)),le=P(()=>K.find(l=>l.id===b.value)),H={aliyun:{svcId:"storage_aliyun_oss",provider:"aliyun_oss"},tencent:{svcId:"storage_tencent_cos",provider:"tencent_cos"},qiniu:{svcId:"storage_qiniu_kodo",provider:"qiniu_kodo"},minio:{svcId:"storage_minio",provider:"minio"}},F={},V={};for(const[l,s]of Object.entries(H))F[s.provider]=l,V[l]=s.svcId;const U=S(new Set);async function oe(){try{const s=(await E("getsvcconfigs",{app_name:""}))?.items||[];let t="";for(const d of s){if(!String(d.categories||"").split(",").map(m=>m.trim()).includes(W))continue;const u=F[d.provider],_=K.find(m=>m.id===u);if(_){U.value.add(d.id),V[u]=d.id,_.enable=!!d.enable,_.enable&&!t&&(t=u);for(const m of d.fields||[]){const B=_.fields.find(ie=>ie.key===m.key);B&&(B.value=m.encrypted?"":m.def_value||"",m.encrypted&&m.def_value==="[encrypted]"&&(B.hint="已配置(留空保留原密文)"))}}}t&&(b.value=t)}catch(l){M("对象存储配置读取失败(console 接口不可用?):"+(l?.message??l))}}re(oe);async function J(l){const s=H[l.id];if(!s)return R("未知的存储厂商: "+l.id),!1;const t=V[l.id]||s.svcId,d={id:t,name:l.name,provider:s.provider,categories:W,description:`${l.tag} · 对象存储`,enable:l.enable,app_name:"",fields:l.fields.map((u,_)=>({key:u.key,description:u.label,type:"",encrypted:!!u.encrypted,def_value:u.value||"",sort:_}))},Q=U.value.has(t)?"updatesvcconfig":"addsvcconfig";try{return await E(Q,d),U.value.add(t),V[l.id]=t,!0}catch(u){return R(u?.message??"保存失败"),!1}}function ae(){D(g.value)}async function D(l){const s=K.find(t=>t.id===l);s&&(b.value=l,g.value=l,s.enable=!0,await J(s)&&q(`已将「${s.name}」设为默认对象存储并保存,固件 / 头像上传将指向该存储桶`))}function ne(){M(`连接测试暂未接后端:保存后到「产品 → 版本管理」上传一个固件即可验证 ${v.value.name} 是否可写`)}async function L(){const l=v.value;await J(l)&&q(`「${l.name}」配置已保存${l.enable?"并启用":""}`)}return(l,s)=>(a(),o("div",null,[s[39]||(s[39]=Z('<div class="mb-4 rounded-lg px-4 py-2.5 text-xs flex items-center gap-2" style="background:#ecfdf5;border:1px solid #a7f3d0;color:#047857;" data-v-af95cc3b><span class="font-semibold" data-v-af95cc3b>对象存储已接后端</span><span class="text-emerald-400" data-v-af95cc3b>·</span><span data-v-af95cc3b>对象存储配置已落库(存 svc_config,与「第三方服务配置 → 存储」共用同一份),启用的「阿里云 OSS」即固件 / 头像上传所用存储。邮件 / 翻译两项仍为演示。</span></div><div class="flex items-center justify-between mb-5" data-v-af95cc3b><div data-v-af95cc3b><h2 class="text-lg font-semibold text-slate-800" data-v-af95cc3b>系统配置</h2><p class="text-xs text-slate-400 mt-1" data-v-af95cc3b>平台级服务配置:① 对象存储(固件 / 头像等文件,默认阿里云 OSS);② 邮件服务(生产环节给厂家发通知邮件);③ 翻译服务(后台配置多语言同步)。</p></div></div>',2)),e("div",me,[e("div",xe,[e("div",be,[(a(),o(k,null,w(X,t=>e("div",{key:t.id,class:x(["cat-item",{active:T.value===t.id}]),onClick:d=>T.value=t.id},[e("div",{class:"cat-icon",style:A({background:t.color})},[(a(),o("svg",fe,[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:t.icon},null,8,he)]))],4),e("div",ge,[e("div",_e,i(t.label),1),e("div",ke,i(t.desc),1)]),te(t.id)?(a(),o("span",we)):c("",!0)],10,ye)),64))])]),e("div",Ce,[T.value==="storage"?(a(),o("div",Se,[e("div",qe,[e("div",Me,[(a(),o("svg",Te,[...s[13]||(s[13]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4"},null,-1)])]))]),e("div",Ke,[e("div",Ae,"设备固件上传当前指向:"+i(le.value.name),1),s[14]||(s[14]=e("div",{class:"text-[11px] text-emerald-600 mt-0.5"},"固件包、用户头像等文件均上传至此存储桶。切换默认存储不影响历史文件 URL。",-1))]),s[15]||(s[15]=e("span",{class:"badge badge-success badge-sm text-white"},"运行中",-1))]),s[19]||(s[19]=e("div",{class:"flex items-center justify-between mb-2"},[e("span",{class:"text-xs font-semibold text-slate-500"},[y("选择默认对象存储 "),e("span",{class:"text-slate-400 font-normal"},"(固件 / 头像等文件上传指向此服务)")])],-1)),e("div",Ie,[(a(!0),o(k,null,w(K,t=>(a(),o("div",{key:t.id,class:x(["provider-card",{active:g.value===t.id,"is-default":t.id===b.value}]),onClick:d=>g.value=t.id},[e("div",Pe,[e("div",{class:"provider-logo",style:A({background:t.color})},i(t.short),5),t.enable?(a(),o("span",$e,"已配置")):(a(),o("span",je,"未配置"))]),e("div",Ue,i(t.name),1),e("div",De,i(t.tag),1),e("label",{class:x(["default-pick",{on:t.id===b.value}]),onClick:$(d=>D(t.id),["stop"])},[e("input",{type:"radio",class:"radio radio-xs radio-primary",checked:t.id===b.value,onClick:$(d=>D(t.id),["stop"])},null,8,Be),e("span",null,i(t.id===b.value?"默认使用":"设为默认"),1)],10,Le)],10,Ve))),128))]),e("div",Oe,[e("div",ze,[e("div",Ne,[e("div",{class:"provider-logo",style:A({background:v.value.color,width:"44px",height:"44px",fontSize:"15px"})},i(v.value.short),5),e("div",null,[e("h3",Re,i(v.value.name),1),e("p",Ee,i(v.value.tag)+" · 对象存储",1)])]),e("div",Ge,[e("label",He,[s[16]||(s[16]=e("span",{class:"text-xs text-slate-500"},"启用",-1)),r(e("input",{"onUpdate:modelValue":s[0]||(s[0]=t=>v.value.enable=t),type:"checkbox",class:"toggle toggle-primary toggle-sm"},null,512),[[O,v.value.enable]])]),e("button",{class:"btn btn-outline btn-sm",onClick:ne},"测试连接"),g.value!==b.value?(a(),o("button",{key:0,class:"btn btn-ghost btn-sm text-indigo-600",onClick:ae},"设为默认存储")):c("",!0),e("button",{class:"btn btn-primary btn-sm text-white",onClick:L},"保存")])]),s[17]||(s[17]=e("div",{class:"divider text-xs text-slate-400 my-3"},"连接配置",-1)),e("div",Fe,[(a(!0),o(k,null,w(v.value.fields,t=>(a(),o("div",{key:t.key,class:x(["form-control",{"col-span-2":t.wide}])},[e("label",Je,[e("span",Qe,[y(i(t.label),1),t.required?(a(),o("span",Ze,"*")):c("",!0),t.encrypted?(a(),o("span",We,"🔒 加密存储")):c("",!0)])]),e("div",Xe,[r(e("input",{"onUpdate:modelValue":d=>t.value=d,type:t.encrypted&&!t._show?"password":"text",class:x(["input input-bordered input-sm w-full",{"font-mono":t.mono,"pr-14":t.encrypted}]),placeholder:t.placeholder},null,10,Ye),[[z,t.value]]),t.encrypted?(a(),o("button",{key:0,type:"button",class:"absolute right-3 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700",onClick:d=>t._show=!t._show},i(t._show?"隐藏":"显示"),9,et)):c("",!0)]),t.hint?(a(),o("span",tt,i(t.hint),1)):c("",!0)],2))),128))]),s[18]||(s[18]=Z('<div class="divider text-xs text-slate-400 my-4" data-v-af95cc3b>上传规则</div><div class="grid grid-cols-3 gap-4" data-v-af95cc3b><div class="rule-box" data-v-af95cc3b><div class="text-[11px] text-slate-400" data-v-af95cc3b>固件包路径前缀</div><div class="font-mono text-sm text-slate-700 mt-1" data-v-af95cc3b>/firmware/</div></div><div class="rule-box" data-v-af95cc3b><div class="text-[11px] text-slate-400" data-v-af95cc3b>头像路径前缀</div><div class="font-mono text-sm text-slate-700 mt-1" data-v-af95cc3b>/userAvatar/</div></div><div class="rule-box" data-v-af95cc3b><div class="text-[11px] text-slate-400" data-v-af95cc3b>签名 URL 有效期</div><div class="font-mono text-sm text-slate-700 mt-1" data-v-af95cc3b>3600 s</div></div></div>',2))])])):T.value==="mail"?(a(),o("div",st,[e("div",lt,[e("div",ot,[(a(),o("svg",at,[...s[20]||(s[20]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"},null,-1)])]))]),s[21]||(s[21]=e("div",{class:"flex-1"},[e("div",{class:"text-sm font-semibold text-amber-800"},"生产环节邮件通知"),e("div",{class:"text-[11px] text-amber-600 mt-0.5"},"用于给目标厂家发送授权信息、公码批次、设备出货等通知邮件;账号告警也走此通道。")],-1))]),e("div",nt,[e("div",it,[s[23]||(s[23]=e("div",{class:"flex items-center gap-3"},[e("div",{class:"provider-logo",style:{background:"#f59e0b",width:"44px",height:"44px",fontSize:"13px"}},"SMTP"),e("div",null,[e("h3",{class:"text-base font-semibold text-slate-800"},"邮件服务"),e("p",{class:"text-xs text-slate-400 mt-0.5"},"SMTP 发信")])],-1)),e("div",dt,[e("label",rt,[s[22]||(s[22]=e("span",{class:"text-xs text-slate-500"},"启用",-1)),r(e("input",{"onUpdate:modelValue":s[1]||(s[1]=t=>n.enable=t),type:"checkbox",class:"toggle toggle-primary toggle-sm"},null,512),[[O,n.enable]])]),e("button",{class:"btn btn-primary btn-sm text-white",onClick:L},"保存")])]),s[32]||(s[32]=e("div",{class:"divider text-xs text-slate-400 my-3"},"发信配置",-1)),e("div",ct,[e("div",ut,[s[24]||(s[24]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},[y("SMTP 主机 "),e("span",{class:"text-rose-500"},"*")])],-1)),r(e("input",{"onUpdate:modelValue":s[2]||(s[2]=t=>n.host=t),class:"input input-bordered input-sm font-mono",placeholder:"smtp.exmail.qq.com"},null,512),[[C,n.host]])]),e("div",pt,[s[25]||(s[25]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},[y("端口 "),e("span",{class:"text-rose-500"},"*")])],-1)),r(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>n.port=t),class:"input input-bordered input-sm font-mono",placeholder:"465"},null,512),[[C,n.port]])]),e("div",vt,[s[26]||(s[26]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},"加密方式")],-1)),r(e("select",{"onUpdate:modelValue":s[4]||(s[4]=t=>n.secure=t),class:"select select-bordered select-sm"},[(a(),o(k,null,w(Y,t=>e("option",{key:t,value:t},i(t),9,mt)),64))],512),[[ce,n.secure]])]),e("div",xt,[s[27]||(s[27]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},"发件人显示名")],-1)),r(e("input",{"onUpdate:modelValue":s[5]||(s[5]=t=>n.fromName=t),class:"input input-bordered input-sm",placeholder:"云岩科技"},null,512),[[C,n.fromName]])]),e("div",bt,[s[28]||(s[28]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},[y("发信账号 "),e("span",{class:"text-rose-500"},"*")])],-1)),r(e("input",{"onUpdate:modelValue":s[6]||(s[6]=t=>n.user=t),class:"input input-bordered input-sm font-mono",placeholder:"noreply@yunyan.com"},null,512),[[C,n.user]])]),e("div",yt,[s[29]||(s[29]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},[y("授权码 / 密码 "),e("span",{class:"lock-tag ml-1.5"},"🔒 加密存储")])],-1)),e("div",ft,[r(e("input",{"onUpdate:modelValue":s[7]||(s[7]=t=>n.pass=t),type:n._showPass?"text":"password",class:"input input-bordered input-sm w-full font-mono pr-14",placeholder:"留空保留原密文"},null,8,ht),[[z,n.pass]]),e("button",{type:"button",class:"absolute right-3 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700",onClick:s[8]||(s[8]=t=>n._showPass=!n._showPass)},i(n._showPass?"隐藏":"显示"),1)])]),e("div",gt,[s[30]||(s[30]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},"默认抄送 (CC)")],-1)),r(e("input",{"onUpdate:modelValue":s[9]||(s[9]=t=>n.cc=t),class:"input input-bordered input-sm font-mono",placeholder:"多个邮箱用逗号分隔,可留空"},null,512),[[C,n.cc]])])]),s[33]||(s[33]=e("div",{class:"divider text-xs text-slate-400 my-4"},"测试发信",-1)),e("div",_t,[e("div",kt,[s[31]||(s[31]=e("label",{class:"label py-1"},[e("span",{class:"label-text text-sm"},"测试收件邮箱")],-1)),r(e("input",{"onUpdate:modelValue":s[10]||(s[10]=t=>n.testTo=t),class:"input input-bordered input-sm font-mono",placeholder:"填一个邮箱,发送一封测试邮件验证配置"},null,512),[[C,n.testTo]])]),e("button",{class:"btn btn-outline btn-sm",onClick:ee},"发送测试")])])])):T.value==="translate"?(a(),o("div",wt,[e("div",Ct,[e("div",St,[(a(),o("svg",qt,[...s[34]||(s[34]=[e("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129"},null,-1)])]))]),s[35]||(s[35]=e("div",{class:"flex-1"},[e("div",{class:"text-sm font-semibold text-teal-800"},"后台配置多语言同步"),e("div",{class:"text-[11px] text-teal-600 mt-0.5"},"应用文案、通知 / 邮件模板、公告等后台配置内容,按目标语种自动翻译,保证多语言版本一致。")],-1)),e("span",Mt,"默认 "+i(G.value.name),1)]),s[38]||(s[38]=e("div",{class:"flex items-center justify-between mb-2"},[e("span",{class:"text-xs font-semibold text-slate-500"},[y("选择默认翻译服务 "),e("span",{class:"text-slate-400 font-normal"},"(后台多语言同步走此服务)")])],-1)),e("div",Tt,[(a(!0),o(k,null,w(I,t=>(a(),o("div",{key:t.id,class:x(["provider-card",{active:h.value===t.id,"is-default":t.id===f.value}]),onClick:d=>h.value=t.id},[e("div",At,[e("div",{class:"provider-logo",style:A({background:t.color})},i(t.short),5),t.enable?(a(),o("span",It,"已配置")):(a(),o("span",Vt,"未配置"))]),e("div",Pt,i(t.name),1),e("div",$t,i(t.tag),1),e("label",{class:x(["default-pick",{on:t.id===f.value}]),onClick:$(d=>j(t.id),["stop"])},[e("input",{type:"radio",class:"radio radio-xs radio-primary",checked:t.id===f.value,onClick:$(d=>j(t.id),["stop"])},null,8,Ut),e("span",null,i(t.id===f.value?"默认使用":"设为默认"),1)],10,jt)],10,Kt))),128))]),e("div",Dt,[e("div",Lt,[e("div",Bt,[e("div",{class:"provider-logo",style:A({background:p.value.color,width:"44px",height:"44px",fontSize:"13px"})},i(p.value.short),5),e("div",null,[e("h3",Ot,i(p.value.name),1),e("p",zt,i(p.value.tag)+" · 机器翻译",1)])]),e("div",Nt,[e("label",Rt,[s[36]||(s[36]=e("span",{class:"text-xs text-slate-500"},"启用",-1)),r(e("input",{"onUpdate:modelValue":s[11]||(s[11]=t=>p.value.enable=t),type:"checkbox",class:"toggle toggle-primary toggle-sm"},null,512),[[O,p.value.enable]])]),e("button",{class:"btn btn-outline btn-sm",onClick:se},"测试连接"),h.value!==f.value?(a(),o("button",{key:0,class:"btn btn-ghost btn-sm text-indigo-600",onClick:s[12]||(s[12]=t=>j(h.value))},"设为默认")):c("",!0),e("button",{class:"btn btn-primary btn-sm text-white",onClick:L},"保存")])]),s[37]||(s[37]=e("div",{class:"divider text-xs text-slate-400 my-3"},"连接配置",-1)),e("div",Et,[(a(!0),o(k,null,w(p.value.fields,t=>(a(),o("div",{key:t.key,class:x(["form-control",{"col-span-2":t.wide}])},[e("label",Gt,[e("span",Ht,[y(i(t.label),1),t.required?(a(),o("span",Ft,"*")):c("",!0),t.encrypted?(a(),o("span",Jt,"🔒 加密存储")):c("",!0)])]),e("div",Qt,[r(e("input",{"onUpdate:modelValue":d=>t.value=d,type:t.encrypted&&!t._show?"password":"text",class:x(["input input-bordered input-sm w-full",{"font-mono":t.mono,"pr-14":t.encrypted}]),placeholder:t.placeholder},null,10,Zt),[[z,t.value]]),t.encrypted?(a(),o("button",{key:0,type:"button",class:"absolute right-3 top-1/2 -translate-y-1/2 text-xs text-slate-400 hover:text-slate-700",onClick:d=>t._show=!t._show},i(t._show?"隐藏":"显示"),9,Wt)):c("",!0)]),t.hint?(a(),o("span",Xt,i(t.hint),1)):c("",!0)],2))),128))])])])):c("",!0)])])]))}}),as=ue(Yt,[["__scopeId","data-v-af95cc3b"]]);export{as as default};