Files
zsglpt/static/admin/assets/EmailPage-BHdschU6.js
yuyx 4ba933b001 feat: 添加安全仪表板前端页面
- 新增 SecurityPage.vue: 统计卡片、威胁事件表格、封禁管理、风险查询
- 新增 api/security.js: 安全相关API封装
- 路由添加 /security 页面
- 侧边栏添加"安全防护"菜单项

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 01:56:22 +08:00

2 lines
21 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{a as $e,c as Ae,b as De,f as He,u as Ne}from"./email-DoKk83fr.js";import{S as L,_ as Fe,r as p,T as pe,U as ze,c as ce,o as Ie,e as f,I as Qe,f as T,g as _,h as o,J as O,j as l,w as n,p as d,m as M,q as u,n as C,F as ae,v as fe,K as U,L as c}from"./index-CDhtYQo-.js";async function je(){const{data:v}=await L.get("/smtp/configs");return v}async function Ke(v){const{data:y}=await L.post("/smtp/configs",v);return y}async function Oe(v,y){const{data:h}=await L.put(`/smtp/configs/${v}`,y);return h}async function Ge(v){const{data:y}=await L.delete(`/smtp/configs/${v}`);return y}async function Je(v,y){const{data:h}=await L.post(`/smtp/configs/${v}/test`,{email:y});return h}async function Re(v){const{data:y}=await L.post(`/smtp/configs/${v}/primary`);return y}async function We(){const{data:v}=await L.post("/smtp/configs/primary/clear");return v}const Xe={class:"page-stack"},Ye={class:"app-page-title"},Ze={class:"toolbar"},el={class:"help app-muted"},ll={class:"section-head"},tl={class:"table-wrap"},al={class:"stat-value"},sl={class:"stat-value ok"},nl={class:"stat-value err"},ol={class:"stat-value"},il={class:"sub-stats"},ul={class:"help app-muted"},rl={class:"section-head"},dl={class:"toolbar"},ml={class:"table-wrap"},pl=["title"],cl=["title"],fl=["title"],_l={class:"pagination"},vl={class:"page-hint app-muted"},yl={style:{width:"100%"}},bl={key:0,class:"help"},gl={key:0},hl={key:0},wl={key:0},kl={class:"dialog-actions"},_e=15,Vl={__name:"EmailPage",setup(v){const y=p(!1),h=p(!1),r=pe({enabled:!1,failover_enabled:!0,register_verify_enabled:!1,task_notify_enabled:!1,base_url:"",updated_at:null});let E=null;async function se(){y.value=!0;try{const s=await De();r.enabled=!!s.enabled,r.failover_enabled=!!s.failover_enabled,r.register_verify_enabled=!!s.register_verify_enabled,r.task_notify_enabled=!!s.task_notify_enabled,r.base_url=s.base_url||"",r.updated_at=s.updated_at||null}catch{}finally{y.value=!1}}async function ve(){if(!y.value){h.value=!0;try{const s=await Ne({enabled:r.enabled,failover_enabled:r.failover_enabled,register_verify_enabled:r.register_verify_enabled,task_notify_enabled:r.task_notify_enabled,base_url:(r.base_url||"").trim()});if(!s?.success){c.error(s?.error||"更新失败");return}c.success("邮件设置已更新"),await se()}catch{}finally{h.value=!1}}}function D(){E&&window.clearTimeout(E),E=window.setTimeout(ve,300)}ze(()=>{E&&window.clearTimeout(E),E=null});const G=p(!1),J=p([]),x=p(!1),g=p(!1),R=p(!1),N=p(!1),a=pe({id:null,name:"默认配置",enabled:!0,host:"",port:465,username:"",password:"",use_ssl:!0,use_tls:!1,sender_name:"自动化学习",sender_email:"",daily_limit:0,priority:0}),F=[{key:"custom",label:"自定义(手动填写)",defaults:null,note:"适用于其他邮箱/自建SMTP",links:[]},{key:"gmail",label:"Gmail",defaults:{host:"smtp.gmail.com",port:465,use_ssl:!0,use_tls:!1},note:"通常需要开启两步验证并创建应用专用密码App Password",links:[{label:"SMTP 设置说明",url:"https://support.google.com/mail/answer/7126229?hl=zh-Hans"},{label:"App Password",url:"https://myaccount.google.com/apppasswords"}]},{key:"qq",label:"QQ 邮箱",defaults:{host:"smtp.qq.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并获取授权码不是QQ登录密码",links:[{label:"QQ邮箱 SMTP 帮助",url:"https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256"}]},{key:"163",label:"163 邮箱",defaults:{host:"smtp.163.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并使用授权码/客户端授权密码",links:[{label:"网易邮箱 SMTP 帮助",url:"https://help.mail.163.com/faqDetail.do?code=d7a5dc8471a22b76"}]},{key:"126",label:"126 邮箱",defaults:{host:"smtp.126.com",port:465,use_ssl:!0,use_tls:!1},note:"需要在邮箱设置中开启 SMTP 并使用授权码/客户端授权密码",links:[{label:"网易邮箱帮助",url:"https://help.mail.163.com/"}]},{key:"outlook",label:"Outlook/Hotmail",defaults:{host:"smtp-mail.outlook.com",port:587,use_ssl:!1,use_tls:!0},note:"建议使用 TLS 587部分账号需开启 SMTP AUTH",links:[{label:"微软 SMTP 设置",url:"https://support.microsoft.com/office/pop-imap-and-smtp-settings-for-outlook-com-d088b0b7-0d38-4f9a-bc5d-509f9e4c6d3d"}]},{key:"office365",label:"Microsoft 365/Exchange",defaults:{host:"smtp.office365.com",port:587,use_ssl:!1,use_tls:!0},note:"企业邮箱常用配置(需启用 SMTP AUTH",links:[{label:"微软官方说明",url:"https://learn.microsoft.com/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission"}]},{key:"icloud",label:"iCloud",defaults:{host:"smtp.mail.me.com",port:587,use_ssl:!1,use_tls:!0},note:"需要在 Apple ID 中生成“App 专用密码”",links:[{label:"Apple 邮件服务器设置",url:"https://support.apple.com/zh-cn/HT202304"}]},{key:"tencent_exmail",label:"腾讯企业邮箱",defaults:{host:"smtp.exmail.qq.com",port:465,use_ssl:!0,use_tls:!1},note:"企业邮箱常用配置",links:[{label:"腾讯企业邮箱帮助",url:"https://service.exmail.qq.com/cgi-bin/help?subtype=1&id=23&no=1001068"}]},{key:"aliyun_exmail",label:"阿里企业邮箱",defaults:{host:"smtp.mxhichina.com",port:465,use_ssl:!0,use_tls:!1},note:"企业邮箱常用配置",links:[{label:"阿里云文档",url:"https://help.aliyun.com/document_detail/50652.html"}]}],q=p("custom"),k=ce(()=>F.find(s=>s.key===q.value)||F[0]),ye=ce(()=>g.value&&R.value?"留空保持不变":"SMTP密码或授权码");function be(s){const e=String(s?.host||"").trim().toLowerCase();return e&&{"smtp.gmail.com":"gmail","smtp.qq.com":"qq","smtp.163.com":"163","smtp.126.com":"126","smtp-mail.outlook.com":"outlook","smtp.office365.com":"office365","smtp.mail.me.com":"icloud","smtp.exmail.qq.com":"tencent_exmail","smtp.mxhichina.com":"aliyun_exmail"}[e]||"custom"}function ge(s){const e=F.find(i=>i.key===s);!e||!e.defaults||(a.host=e.defaults.host,a.port=e.defaults.port,a.use_ssl=e.defaults.use_ssl,a.use_tls=e.defaults.use_tls)}function ne(){a.id=null,a.name="默认配置",a.enabled=!0,a.host="",a.port=465,a.username="",a.password="",a.use_ssl=!0,a.use_tls=!1,a.sender_name="自动化学习",a.sender_email="",a.daily_limit=0,a.priority=0,R.value=!1,N.value=!1,q.value="custom"}async function $(){G.value=!0;try{J.value=await je()}catch{J.value=[]}finally{G.value=!1}}function he(){g.value=!1,ne(),q.value="custom",x.value=!0}function we(s){g.value=!0,ne(),a.id=s.id,a.name=s.name||"默认配置",a.enabled=!!s.enabled,a.host=s.host||"",a.port=s.port||465,a.username=s.username||"",a.password="",a.use_ssl=!!s.use_ssl,a.use_tls=!!s.use_tls,a.sender_name=s.sender_name||"自动化学习",a.sender_email=s.sender_email||"",a.daily_limit=s.daily_limit??0,a.priority=s.priority??0,R.value=!!s.has_password,N.value=!!s.is_primary,q.value=be(s),x.value=!0}function oe(s){return s.is_primary?{label:"主",type:"warning"}:s.enabled?{label:"备用",type:"success"}:{label:"禁用",type:"info"}}function ke(s){return s.daily_limit&&s.daily_limit>0?`${s.daily_sent}/${s.daily_limit}`:`${s.daily_sent}/∞`}async function Ve(){if(!a.host.trim()){c.error("SMTP服务器地址不能为空");return}if(!a.username.trim()){c.error("SMTP用户名不能为空");return}const s={name:a.name.trim()||"默认配置",enabled:!!a.enabled,priority:Number(a.priority)||0,host:a.host.trim(),port:Number(a.port)||465,username:a.username.trim(),use_ssl:!!a.use_ssl,use_tls:!!a.use_tls,sender_name:(a.sender_name||"").trim(),sender_email:(a.sender_email||"").trim(),daily_limit:Number(a.daily_limit)||0};try{if(g.value){const e={...s};a.password&&(e.password=a.password);const i=await Oe(a.id,e);if(!i?.success){c.error(i?.error||"更新失败");return}c.success("保存成功")}else{const e={...s};a.password&&(e.password=a.password);const i=await Ke(e);if(!i?.success){c.error(i?.error||"创建失败");return}c.success("创建成功")}x.value=!1,await $()}catch{}}async function Se(){if(!g.value||!a.id){c.error("请先保存配置后再测试");return}let s;try{const e=await U.prompt("请输入测试收件邮箱","测试连接",{inputPlaceholder:"name@example.com",confirmButtonText:"发送测试邮件",cancelButtonText:"取消",inputValidator:i=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(i||"").trim()),inputErrorMessage:"邮箱格式不正确"});s=String(e.value||"").trim()}catch{return}try{const e=await Je(a.id,s);e?.success?(c.success("测试成功,邮件已发送"),await $()):await U.alert(e?.error||"测试失败","测试失败",{confirmButtonText:"知道了"})}catch{}}async function xe(){if(!(!g.value||!a.id)){try{await U.confirm("确定将该配置设为主配置吗?","设为主配置",{confirmButtonText:"设为主配置",cancelButtonText:"取消",type:"warning"})}catch{return}try{const s=await Re(a.id);if(!s?.success){c.error(s?.error||"设置失败");return}c.success("已设为主配置"),x.value=!1,await $()}catch{}}}async function Te(){if(g.value){try{await U.confirm("确定取消主配置吗取消后将按优先级选择可用SMTP。","取消主配置",{confirmButtonText:"取消主配置",cancelButtonText:"保留",type:"warning"})}catch{return}try{const s=await We();if(!s?.success){c.error(s?.error||"操作失败");return}c.success("已取消主配置"),x.value=!1,await $()}catch{}}}async function Pe(){if(!(!g.value||!a.id)){try{await U.confirm("确定删除该SMTP配置吗此操作不可恢复。","删除配置",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{const s=await Ge(a.id);if(!s?.success){c.error(s?.error||"删除失败");return}c.success("已删除"),x.value=!1,await $()}catch{}}}const W=p(!1),w=p({}),X=p(!1),z=p(""),I=p(""),Q=p(1),Y=p([]),Z=p(0),ee=p(1);function Ce(s){return{register:"注册验证",reset:"密码重置",bind:"邮箱绑定",task_complete:"任务完成",security_alert:"安全告警"}[s]||s}function ie(s){return s?.username&&s?.user_id?`${s.username} (#${s.user_id})`:s?.user_id?`用户#${s.user_id}`:"系统"}async function Be(){W.value=!0;try{w.value=await He()}catch{w.value={}}finally{W.value=!1}}async function H(s=1){X.value=!0;try{const e={page:s,page_size:_e};z.value&&(e.type=z.value),I.value&&(e.status=I.value);const i=await $e(e);Y.value=i?.logs||[],Z.value=i?.total||0,Q.value=i?.page||s,ee.value=i?.total_pages||1}catch{Y.value=[],Z.value=0,ee.value=1}finally{X.value=!1}}async function Me(){let s;try{const e=await U.prompt("请输入保留天数(将删除该天数之前的日志)","清理日志",{inputValue:"30",confirmButtonText:"清理",cancelButtonText:"取消",inputValidator:i=>{const V=parseInt(String(i),10);return Number.isFinite(V)&&V>=7},inputErrorMessage:"天数必须大于等于7"});s=parseInt(String(e.value),10)}catch{return}try{await U.confirm(`确定删除 ${s} 天之前的邮件日志吗?`,"二次确认",{confirmButtonText:"删除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await Ae(s);if(!e?.success){c.error(e?.error||"清理失败");return}c.success(`已清理 ${e.deleted} 条日志`),await H(1)}catch{}}async function ue(){await Promise.all([se(),$(),Be(),H(1)])}return Ie(ue),(s,e)=>{const i=f("el-button"),V=f("el-switch"),m=f("el-form-item"),B=f("el-input"),re=f("el-form"),P=f("el-card"),A=f("el-tag"),b=f("el-table-column"),de=f("el-table"),j=f("el-col"),Ue=f("el-row"),S=f("el-option"),le=f("el-select"),Le=f("el-pagination"),Ee=f("el-link"),te=f("el-input-number"),qe=f("el-dialog"),K=Qe("loading");return _(),T("div",Xe,[o("div",Ye,[e[26]||(e[26]=o("h2",null,"邮件配置",-1)),o("div",Ze,[l(i,{onClick:ue},{default:n(()=>[...e[25]||(e[25]=[d("刷新",-1)])]),_:1})])]),O((_(),M(P,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[e[28]||(e[28]=o("h3",{class:"section-title"},"全局设置",-1)),l(re,{"label-width":"140px"},{default:n(()=>[l(m,{label:"启用邮件功能"},{default:n(()=>[l(V,{modelValue:r.enabled,"onUpdate:modelValue":e[0]||(e[0]=t=>r.enabled=t),disabled:h.value,onChange:D},null,8,["modelValue","disabled"])]),_:1}),l(m,{label:"启用故障转移"},{default:n(()=>[l(V,{modelValue:r.failover_enabled,"onUpdate:modelValue":e[1]||(e[1]=t=>r.failover_enabled=t),disabled:h.value,onChange:D},null,8,["modelValue","disabled"])]),_:1}),l(m,{label:"启用注册邮箱验证"},{default:n(()=>[l(V,{modelValue:r.register_verify_enabled,"onUpdate:modelValue":e[2]||(e[2]=t=>r.register_verify_enabled=t),disabled:h.value,onChange:D},null,8,["modelValue","disabled"])]),_:1}),l(m,{label:"启用任务完成通知"},{default:n(()=>[l(V,{modelValue:r.task_notify_enabled,"onUpdate:modelValue":e[3]||(e[3]=t=>r.task_notify_enabled=t),disabled:h.value,onChange:D},null,8,["modelValue","disabled"])]),_:1}),l(m,{label:"网站基础URL"},{default:n(()=>[l(B,{modelValue:r.base_url,"onUpdate:modelValue":e[4]||(e[4]=t=>r.base_url=t),placeholder:"例如: https://example.com",disabled:h.value,onBlur:D},null,8,["modelValue","disabled"]),e[27]||(e[27]=o("div",{class:"help"},"用于生成邮件中的验证链接,留空则使用默认配置。",-1))]),_:1})]),_:1}),o("div",el,"最近更新时间:"+u(r.updated_at||"-"),1)]),_:1})),[[K,y.value]]),l(P,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[o("div",ll,[e[30]||(e[30]=o("h3",{class:"section-title"},"SMTP配置列表",-1)),l(i,{type:"primary",onClick:he},{default:n(()=>[...e[29]||(e[29]=[d("+ 添加配置",-1)])]),_:1})]),o("div",tl,[O((_(),M(de,{data:J.value,style:{width:"100%"}},{default:n(()=>[l(b,{label:"状态",width:"90"},{default:n(({row:t})=>[l(A,{type:oe(t).type,effect:"light"},{default:n(()=>[d(u(oe(t).label),1)]),_:2},1032,["type"])]),_:1}),l(b,{prop:"name",label:"名称","min-width":"160"}),l(b,{label:"服务器","min-width":"200"},{default:n(({row:t})=>[d(u(t.host)+":"+u(t.port),1)]),_:1}),l(b,{label:"今日/限额",width:"110"},{default:n(({row:t})=>[d(u(ke(t)),1)]),_:1}),l(b,{label:"成功率",width:"100"},{default:n(({row:t})=>[d(u(t.success_rate)+"%",1)]),_:1}),l(b,{label:"操作",width:"120",fixed:"right"},{default:n(({row:t})=>[l(i,{size:"small",onClick:me=>we(t)},{default:n(()=>[...e[31]||(e[31]=[d("编辑",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[K,G.value]])])]),_:1}),O((_(),M(P,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[e[36]||(e[36]=o("h3",{class:"section-title"},"邮件发送统计",-1)),l(Ue,{gutter:12},{default:n(()=>[l(j,{xs:12,sm:6},{default:n(()=>[l(P,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:n(()=>[o("div",al,u(w.value.total_sent||0),1),e[32]||(e[32]=o("div",{class:"stat-label"},"总发送",-1))]),_:1})]),_:1}),l(j,{xs:12,sm:6},{default:n(()=>[l(P,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:n(()=>[o("div",sl,u(w.value.total_success||0),1),e[33]||(e[33]=o("div",{class:"stat-label"},"成功",-1))]),_:1})]),_:1}),l(j,{xs:12,sm:6},{default:n(()=>[l(P,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:n(()=>[o("div",nl,u(w.value.total_failed||0),1),e[34]||(e[34]=o("div",{class:"stat-label"},"失败",-1))]),_:1})]),_:1}),l(j,{xs:12,sm:6},{default:n(()=>[l(P,{shadow:"never",class:"stat-card","body-style":{padding:"14px"}},{default:n(()=>[o("div",ol,u(w.value.success_rate||0)+"%",1),e[35]||(e[35]=o("div",{class:"stat-label"},"成功率",-1))]),_:1})]),_:1})]),_:1}),o("div",il,[l(A,{effect:"light"},{default:n(()=>[d("注册验证 "+u(w.value.register_sent||0),1)]),_:1}),l(A,{effect:"light"},{default:n(()=>[d("密码重置 "+u(w.value.reset_sent||0),1)]),_:1}),l(A,{effect:"light"},{default:n(()=>[d("邮箱绑定 "+u(w.value.bind_sent||0),1)]),_:1}),l(A,{effect:"light"},{default:n(()=>[d("任务完成 "+u(w.value.task_complete_sent||0),1)]),_:1})]),o("div",ul,"最后更新:"+u(w.value.last_updated||"-"),1)]),_:1})),[[K,W.value]]),l(P,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:n(()=>[o("div",rl,[e[38]||(e[38]=o("h3",{class:"section-title"},"邮件发送日志",-1)),o("div",dl,[l(le,{modelValue:z.value,"onUpdate:modelValue":e[5]||(e[5]=t=>z.value=t),style:{width:"140px"},onChange:e[6]||(e[6]=t=>H(1))},{default:n(()=>[l(S,{label:"全部类型",value:""}),l(S,{label:"注册验证",value:"register"}),l(S,{label:"密码重置",value:"reset"}),l(S,{label:"邮箱绑定",value:"bind"}),l(S,{label:"任务完成",value:"task_complete"}),l(S,{label:"安全告警",value:"security_alert"})]),_:1},8,["modelValue"]),l(le,{modelValue:I.value,"onUpdate:modelValue":e[7]||(e[7]=t=>I.value=t),style:{width:"120px"},onChange:e[8]||(e[8]=t=>H(1))},{default:n(()=>[l(S,{label:"全部状态",value:""}),l(S,{label:"成功",value:"success"}),l(S,{label:"失败",value:"failed"})]),_:1},8,["modelValue"]),l(i,{type:"danger",plain:"",onClick:Me},{default:n(()=>[...e[37]||(e[37]=[d("清理日志",-1)])]),_:1})])]),o("div",ml,[O((_(),M(de,{data:Y.value,style:{width:"100%"}},{default:n(()=>[l(b,{prop:"created_at",label:"时间",width:"180"}),l(b,{prop:"email_to",label:"收件人","min-width":"180"}),l(b,{label:"来源用户","min-width":"160"},{default:n(({row:t})=>[o("span",{class:"ellipsis",title:ie(t)},u(ie(t)),9,pl)]),_:1}),l(b,{label:"类型",width:"120"},{default:n(({row:t})=>[d(u(Ce(t.email_type)),1)]),_:1}),l(b,{label:"主题","min-width":"220"},{default:n(({row:t})=>[o("span",{class:"ellipsis",title:t.subject},u(t.subject),9,cl)]),_:1}),l(b,{label:"状态",width:"90"},{default:n(({row:t})=>[l(A,{type:t.status==="success"?"success":"danger",effect:"light"},{default:n(()=>[d(u(t.status==="success"?"成功":"失败"),1)]),_:2},1032,["type"])]),_:1}),l(b,{label:"错误","min-width":"200"},{default:n(({row:t})=>[o("span",{class:"ellipsis",title:t.error_message||""},u(t.error_message||"-"),9,fl)]),_:1})]),_:1},8,["data"])),[[K,X.value]])]),o("div",_l,[l(Le,{"current-page":Q.value,"onUpdate:currentPage":e[9]||(e[9]=t=>Q.value=t),"page-size":_e,total:Z.value,layout:"prev, pager, next, ->, total",onCurrentChange:H},null,8,["current-page","total"]),o("div",vl,"第 "+u(Q.value)+" / "+u(ee.value)+" 页",1)])]),_:1}),l(qe,{modelValue:x.value,"onUpdate:modelValue":e[24]||(e[24]=t=>x.value=t),title:g.value?"编辑SMTP配置":"添加SMTP配置",width:"min(560px, 92vw)"},{footer:n(()=>[o("div",kl,[l(i,{onClick:Se},{default:n(()=>[...e[39]||(e[39]=[d("测试连接",-1)])]),_:1}),g.value&&N.value?(_(),M(i,{key:0,type:"warning",plain:"",onClick:Te},{default:n(()=>[...e[40]||(e[40]=[d("取消主配置",-1)])]),_:1})):C("",!0),g.value&&!N.value?(_(),M(i,{key:1,onClick:xe},{default:n(()=>[...e[41]||(e[41]=[d("设为主配置",-1)])]),_:1})):C("",!0),g.value?(_(),M(i,{key:2,type:"danger",plain:"",onClick:Pe},{default:n(()=>[...e[42]||(e[42]=[d("删除配置",-1)])]),_:1})):C("",!0),e[45]||(e[45]=o("div",{class:"spacer"},null,-1)),l(i,{onClick:e[23]||(e[23]=t=>x.value=!1)},{default:n(()=>[...e[43]||(e[43]=[d("取消",-1)])]),_:1}),l(i,{type:"primary",onClick:Ve},{default:n(()=>[...e[44]||(e[44]=[d("保存",-1)])]),_:1})])]),default:n(()=>[l(re,{"label-width":"120px"},{default:n(()=>[l(m,{label:"名称"},{default:n(()=>[l(B,{modelValue:a.name,"onUpdate:modelValue":e[10]||(e[10]=t=>a.name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"启用"},{default:n(()=>[l(V,{modelValue:a.enabled,"onUpdate:modelValue":e[11]||(e[11]=t=>a.enabled=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"邮箱模板"},{default:n(()=>[o("div",yl,[l(le,{modelValue:q.value,"onUpdate:modelValue":e[12]||(e[12]=t=>q.value=t),placeholder:"选择常用邮箱模板",style:{width:"100%"},onChange:ge},{default:n(()=>[(_(),T(ae,null,fe(F,t=>l(S,{key:t.key,label:t.label,value:t.key},null,8,["label","value"])),64))]),_:1},8,["modelValue"]),k.value.note||k.value.links&&k.value.links.length?(_(),T("div",bl,[k.value.note?(_(),T("span",gl,u(k.value.note),1)):C("",!0),k.value.links&&k.value.links.length?(_(),T(ae,{key:1},[k.value.note?(_(),T("span",hl," · ")):C("",!0),(_(!0),T(ae,null,fe(k.value.links,(t,me)=>(_(),T("span",{key:t.url},[l(Ee,{href:t.url,target:"_blank",type:"primary",underline:!1},{default:n(()=>[d(u(t.label),1)]),_:2},1032,["href"]),me<k.value.links.length-1?(_(),T("span",wl," · ")):C("",!0)]))),128))],64)):C("",!0)])):C("",!0)])]),_:1}),l(m,{label:"服务器"},{default:n(()=>[l(B,{modelValue:a.host,"onUpdate:modelValue":e[13]||(e[13]=t=>a.host=t),placeholder:"smtp.example.com"},null,8,["modelValue"])]),_:1}),l(m,{label:"端口"},{default:n(()=>[l(te,{modelValue:a.port,"onUpdate:modelValue":e[14]||(e[14]=t=>a.port=t),min:1,max:65535},null,8,["modelValue"])]),_:1}),l(m,{label:"用户名"},{default:n(()=>[l(B,{modelValue:a.username,"onUpdate:modelValue":e[15]||(e[15]=t=>a.username=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"密码"},{default:n(()=>[l(B,{modelValue:a.password,"onUpdate:modelValue":e[16]||(e[16]=t=>a.password=t),type:"password","show-password":"",placeholder:ye.value},null,8,["modelValue","placeholder"])]),_:1}),l(m,{label:"SSL"},{default:n(()=>[l(V,{modelValue:a.use_ssl,"onUpdate:modelValue":e[17]||(e[17]=t=>a.use_ssl=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"TLS"},{default:n(()=>[l(V,{modelValue:a.use_tls,"onUpdate:modelValue":e[18]||(e[18]=t=>a.use_tls=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"发件人名称"},{default:n(()=>[l(B,{modelValue:a.sender_name,"onUpdate:modelValue":e[19]||(e[19]=t=>a.sender_name=t)},null,8,["modelValue"])]),_:1}),l(m,{label:"发件人邮箱"},{default:n(()=>[l(B,{modelValue:a.sender_email,"onUpdate:modelValue":e[20]||(e[20]=t=>a.sender_email=t),placeholder:"可选"},null,8,["modelValue"])]),_:1}),l(m,{label:"每日限额"},{default:n(()=>[l(te,{modelValue:a.daily_limit,"onUpdate:modelValue":e[21]||(e[21]=t=>a.daily_limit=t),min:0,max:1e6},null,8,["modelValue"])]),_:1}),l(m,{label:"优先级"},{default:n(()=>[l(te,{modelValue:a.priority,"onUpdate:modelValue":e[22]||(e[22]=t=>a.priority=t),min:0,max:1e3},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue","title"])])}}},Tl=Fe(Vl,[["__scopeId","data-v-ff849557"]]);export{Tl as default};