mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 00:53:33 +00:00
4 lines
29 KiB
JavaScript
4 lines
29 KiB
JavaScript
import{aR as ie,r as m,aV as de,o as ue,q as ce,Z as ge,x as i,z as e,L as S,C as W,O as g,u as b,K as x,S as L,aq as A,P as h,al as O,Q as P,ac as B,aW as fe,aX as be,R as me,J as ye,T as ve,Y as xe,y as d}from"./vue-vendor-Ig-GgGwA.js";import{s as l}from"./toast-BvwA7Mwb.js";import{b as C,_ as pe}from"./index-CQGf_uoy.js";import"./element-plus-Bq6mBxnk.js";import"./vendor-BDiMbLwQ.js";const ke=ie("settings",()=>{const v=m({siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",updatedAt:null}),w=m(!1),E=m(!1),T=async()=>{w.value=!0;try{const a=await C.get("/admin/oem-settings");return a&&a.success&&(v.value={...v.value,...a.data},p()),a}catch(a){throw console.error("Failed to load OEM settings:",a),a}finally{w.value=!1}},f=async a=>{E.value=!0;try{const u=await C.put("/admin/oem-settings",a);return u&&u.success&&(v.value={...v.value,...u.data},p()),u}catch(u){throw console.error("Failed to save OEM settings:",u),u}finally{E.value=!1}},R=async()=>{const a={siteName:"Claude Relay Service",siteIcon:"",siteIconData:"",updatedAt:null};return v.value={...a},await f(a)},p=()=>{if(v.value.siteName&&(document.title=`${v.value.siteName} - 管理后台`),v.value.siteIconData||v.value.siteIcon){const a=document.querySelector('link[rel="icon"]')||document.createElement("link");a.rel="icon",a.href=v.value.siteIconData||v.value.siteIcon,document.querySelector('link[rel="icon"]')||document.head.appendChild(a)}};return{oemSettings:v,loading:w,saving:E,loadOemSettings:T,saveOemSettings:f,resetOemSettings:R,applyOemSettings:p,formatDateTime:a=>a?new Date(a).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}):"",validateIconFile:a=>{const u=[];return a.size>350*1024&&u.push("图标文件大小不能超过 350KB"),["image/x-icon","image/png","image/jpeg","image/jpg","image/svg+xml"].includes(a.type)||u.push("不支持的文件类型,请选择 .ico, .png, .jpg 或 .svg 文件"),{isValid:u.length===0,errors:u}},fileToBase64:a=>new Promise((u,D)=>{const c=new FileReader;c.onload=V=>u(V.target.result),c.onerror=D,c.readAsDataURL(a)})}}),he={class:"settings-container"},we={class:"card p-4 sm:p-6"},_e={class:"mb-6"},Se={class:"flex space-x-8"},Ce={key:0,class:"py-12 text-center"},Ie={key:1},De={class:"table-container hidden sm:block"},Ve={class:"min-w-full"},Te={class:"divide-y divide-gray-200/50 dark:divide-gray-600/50"},We={class:"table-row"},Ae={class:"px-6 py-4"},Ee={class:"table-row"},Ue={class:"px-6 py-4"},je={class:"space-y-3"},Ne={key:0,class:"inline-flex items-center gap-3 rounded-lg bg-gray-50 p-3 dark:bg-gray-700"},Re=["src"],Oe={class:"px-6 py-6",colspan:"2"},Pe={class:"flex items-center justify-between"},Fe={class:"flex gap-3"},$e=["disabled"],Me={key:0,class:"loading-spinner mr-2"},Le={key:1,class:"fas fa-save mr-2"},Be=["disabled"],qe={key:0,class:"text-sm text-gray-500 dark:text-gray-400"},ze={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Ke={class:"flex items-center justify-between"},He={class:"relative inline-flex cursor-pointer items-center"},Je={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},Qe={class:"space-y-3"},Xe={class:"font-medium text-gray-700 dark:text-gray-300"},Ye={class:"ml-2 text-sm text-gray-500 dark:text-gray-400"},Ze={class:"relative inline-flex cursor-pointer items-center"},Ge=["onUpdate:modelValue"],et={class:"mb-6 rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},tt={class:"mb-4 flex items-center justify-between"},rt={key:0,class:"space-y-4"},st={class:"flex items-start justify-between"},at={class:"flex-1"},ot={class:"flex items-center"},lt={class:"font-semibold text-gray-800 dark:text-gray-200"},nt={class:"text-sm text-gray-500 dark:text-gray-400"},it={class:"mt-3 space-y-1 text-sm"},dt={class:"flex items-center text-gray-600 dark:text-gray-400"},ut={class:"truncate"},ct={key:0,class:"flex items-center text-gray-600 dark:text-gray-400"},gt={class:"ml-4 flex items-center space-x-2"},ft={class:"relative inline-flex cursor-pointer items-center"},bt=["checked","onChange"],mt=["onClick"],yt=["onClick"],vt=["onClick"],xt={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},pt={class:"rounded-lg bg-white/80 p-6 shadow-lg backdrop-blur-sm dark:bg-gray-800/80"},kt={class:"grid grid-cols-1 gap-4 md:grid-cols-3"},ht={class:"dark:to-gray-750 relative border-b border-gray-200 bg-gradient-to-r from-blue-50 to-indigo-50 px-6 py-5 dark:border-gray-700 dark:from-gray-800"},wt={class:"flex items-center justify-between"},_t={class:"flex items-center space-x-3"},St={class:"text-xl font-semibold text-gray-900 dark:text-white"},Ct={class:"mt-0.5 text-sm text-gray-600 dark:text-gray-400"},It={class:"p-6"},Dt={class:"space-y-5"},Vt={class:"relative"},Tt=["disabled"],Wt={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},At={class:"relative"},Et={key:0,class:"absolute inset-y-0 right-0 flex items-center pr-3"},Ut={key:1,class:"absolute inset-y-0 right-0 flex items-center pr-3"},jt={key:0,class:"mt-2 flex items-start rounded-lg bg-blue-50 p-3 dark:bg-blue-900/20"},Nt={class:"text-sm text-blue-700 dark:text-blue-300"},Rt={key:0,class:"rounded-xl border border-gray-200 bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-900/50"},Ot={class:"space-y-4"},Pt={class:"flex items-center justify-between"},Ft={class:"flex cursor-pointer items-center",for:"enableSign"},$t={key:0,class:"rounded-full bg-green-100 px-2 py-1 text-xs font-medium text-green-700 dark:bg-green-900/50 dark:text-green-400"},Mt={key:0},Lt={class:"border-t border-gray-200 bg-gray-50 px-6 py-4 dark:border-gray-700 dark:bg-gray-900/50"},Bt={class:"flex items-center justify-between"},qt={class:"flex space-x-3"},zt=["disabled"],Kt=["disabled"],Ht=Object.assign({name:"SettingsView"},{__name:"SettingsView",setup(v){const w=ke(),{loading:E,saving:T,oemSettings:f}=de(w),R=m(),p=m("branding"),o=m(!0),k=m(new AbortController),I=m(!1),a=m(!1),u=m(!1),D=m(!1),c=m({enabled:!1,platforms:[],notificationTypes:{accountAnomaly:!0,quotaWarning:!0,systemError:!0,securityAlert:!0},retrySettings:{maxRetries:3,retryDelay:1e3,timeout:1e4}}),V=m(!1),_=m(null),n=m({type:"wechat_work",name:"",url:"",enableSign:!1,secret:""}),F=ue(p,async r=>{o.value&&r==="webhook"&&await U()});ce(async()=>{try{await w.loadOemSettings(),p.value==="webhook"&&await U()}catch{l("加载设置失败","error")}}),ge(()=>{o.value=!1,k.value&&k.value.abort(),F&&F(),V.value&&(V.value=!1,_.value=null)});const U=async()=>{if(o.value)try{const r=await C.get("/admin/webhook/config",{signal:k.value.signal});r.success&&o.value&&(c.value=r.config)}catch(r){if(r.name==="AbortError"||!o.value)return;l("获取webhook配置失败","error"),console.error(r)}},j=async()=>{if(o.value)try{(await C.post("/admin/webhook/config",c.value,{signal:k.value.signal})).success&&o.value&&l("配置已保存","success")}catch(r){if(r.name==="AbortError"||!o.value)return;l("保存配置失败","error"),console.error(r)}},q=()=>{const r=n.value.url;if(!r){I.value=!1,a.value=!1;return}try{new URL(r),r.startsWith("http://")||r.startsWith("https://")?(I.value=!1,a.value=!0):(I.value=!0,a.value=!1)}catch{I.value=!0,a.value=!1}},z=async()=>{if(o.value){if(!n.value.url){l("请输入Webhook URL","error");return}if(I.value){l("请输入有效的Webhook URL","error");return}D.value=!0;try{let r;_.value?r=await C.put(`/admin/webhook/platforms/${_.value.id}`,n.value,{signal:k.value.signal}):r=await C.post("/admin/webhook/platforms",n.value,{signal:k.value.signal}),r.success&&o.value&&(l(_.value?"平台已更新":"平台已添加","success"),await U(),N())}catch(r){if(r.name==="AbortError"||!o.value)return;l(r.message||"操作失败","error"),console.error(r)}finally{o.value&&(D.value=!1)}}},K=r=>{_.value=r,n.value={...r},V.value=!0},H=async r=>{if(o.value&&confirm("确定要删除这个平台吗?"))try{(await C.delete(`/admin/webhook/platforms/${r}`,{signal:k.value.signal})).success&&o.value&&(l("平台已删除","success"),await U())}catch(t){if(t.name==="AbortError"||!o.value)return;l("删除失败","error"),console.error(t)}},J=async r=>{if(o.value)try{const t=await C.post(`/admin/webhook/platforms/${r}/toggle`,{},{signal:k.value.signal});t.success&&o.value&&(l(t.message,"success"),await U())}catch(t){if(t.name==="AbortError"||!o.value)return;l("操作失败","error"),console.error(t)}},Q=async r=>{if(o.value)try{(await C.post("/admin/webhook/test",{url:r.url,type:r.type,secret:r.secret,enableSign:r.enableSign},{signal:k.value.signal})).success&&o.value&&l("测试成功,webhook连接正常","success")}catch(t){if(t.name==="AbortError"||!o.value)return;l(t.error||t.message||"测试失败","error"),console.error(t)}},X=async()=>{if(o.value){if(!n.value.url){l("请先输入Webhook URL","error");return}if(I.value){l("请输入有效的Webhook URL","error");return}u.value=!0;try{(await C.post("/admin/webhook/test",n.value,{signal:k.value.signal})).success&&o.value&&l("测试成功,webhook连接正常","success")}catch(r){if(r.name==="AbortError"||!o.value)return;l(r.error||r.message||"测试失败","error"),console.error(r)}finally{o.value&&(u.value=!1)}}},Y=async()=>{if(o.value)try{(await C.post("/admin/webhook/test-notification",{},{signal:k.value.signal})).success&&o.value&&l("测试通知已发送","success")}catch(r){if(r.name==="AbortError"||!o.value)return;l("发送失败","error"),console.error(r)}},N=()=>{o.value&&(V.value=!1,setTimeout(()=>{o.value&&(_.value=null,n.value={type:"wechat_work",name:"",url:"",enableSign:!1,secret:""},I.value=!1,a.value=!1,u.value=!1,D.value=!1)},0))},$=r=>({wechat_work:"企业微信",dingtalk:"钉钉",feishu:"飞书",slack:"Slack",discord:"Discord",custom:"自定义"})[r]||r,Z=r=>({wechat_work:"fab fa-weixin text-green-600",dingtalk:"fas fa-comment-dots text-blue-500",feishu:"fas fa-dove text-blue-600",slack:"fab fa-slack text-purple-600",discord:"fab fa-discord text-indigo-600",custom:"fas fa-webhook text-gray-600"})[r]||"fas fa-bell",M=r=>({wechat_work:"请在企业微信群机器人设置中获取Webhook地址",dingtalk:"请在钉钉群机器人设置中获取Webhook地址",feishu:"请在飞书群机器人设置中获取Webhook地址",slack:"请在Slack应用的Incoming Webhooks中获取地址",discord:"请在Discord服务器的集成设置中创建Webhook",custom:"请输入完整的Webhook接收地址"})[r]||"",G=r=>({accountAnomaly:"账号异常",quotaWarning:"配额警告",systemError:"系统错误",securityAlert:"安全警报"})[r]||r,ee=r=>({accountAnomaly:"账号状态异常、认证失败等",quotaWarning:"API调用配额不足警告",systemError:"系统运行错误和故障",securityAlert:"安全相关的警报通知"})[r]||"",te=async()=>{try{const r={siteName:f.value.siteName,siteIcon:f.value.siteIcon,siteIconData:f.value.siteIconData},t=await w.saveOemSettings(r);t&&t.success?l("OEM设置保存成功","success"):l((t==null?void 0:t.message)||"保存失败","error")}catch{l("保存OEM设置失败","error")}},re=async()=>{if(confirm(`确定要重置为默认设置吗?
|
||
|
||
这将清除所有自定义的网站名称和图标设置。`))try{const r=await w.resetOemSettings();r&&r.success?l("已重置为默认设置","success"):l("重置失败","error")}catch{l("重置失败","error")}},se=async r=>{const t=r.target.files[0];if(!t)return;const s=w.validateIconFile(t);if(!s.isValid){s.errors.forEach(y=>l(y,"error"));return}try{const y=await w.fileToBase64(t);f.value.siteIconData=y}catch{l("文件读取失败","error")}r.target.value=""},ae=()=>{f.value.siteIcon="",f.value.siteIconData=""},oe=()=>{console.warn("Icon failed to load")},le=w.formatDateTime;return(r,t)=>(d(),i(P,null,[e("div",he,[e("div",we,[t[45]||(t[45]=e("div",{class:"mb-4 sm:mb-6"},[e("h3",{class:"mb-1 text-lg font-bold text-gray-900 dark:text-gray-100 sm:mb-2 sm:text-xl"}," 系统设置 "),e("p",{class:"text-sm text-gray-600 dark:text-gray-400 sm:text-base"},"网站定制和通知配置")],-1)),e("div",_e,[e("nav",Se,[e("button",{class:W(["border-b-2 pb-2 text-sm font-medium transition-colors",p.value==="branding"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[0]||(t[0]=s=>p.value="branding")},t[15]||(t[15]=[e("i",{class:"fas fa-palette mr-2"},null,-1),g(" 品牌设置 ",-1)]),2),e("button",{class:W(["border-b-2 pb-2 text-sm font-medium transition-colors",p.value==="webhook"?"border-blue-500 text-blue-600 dark:border-blue-400 dark:text-blue-400":"border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"]),onClick:t[1]||(t[1]=s=>p.value="webhook")},t[16]||(t[16]=[e("i",{class:"fas fa-bell mr-2"},null,-1),g(" 通知设置 ",-1)]),2)])]),b(E)?(d(),i("div",Ce,t[17]||(t[17]=[e("div",{class:"loading-spinner mx-auto mb-4"},[e("p",{class:"text-gray-500 dark:text-gray-400"},"正在加载设置...")],-1)]))):(d(),i("div",Ie,[x(e("div",null,[e("div",De,[e("table",Ve,[e("tbody",Te,[e("tr",We,[t[19]||(t[19]=e("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[e("div",{class:"flex items-center"},[e("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-blue-500 to-blue-600"},[e("i",{class:"fas fa-font text-xs text-white"})]),e("div",null,[e("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站名称 "),e("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"品牌标识")])])],-1)),e("td",Ae,[x(e("input",{"onUpdate:modelValue":t[2]||(t[2]=s=>b(f).siteName=s),class:"form-input w-full max-w-md dark:border-gray-600 dark:bg-gray-700 dark:text-gray-200",maxlength:"100",placeholder:"Claude Relay Service",type:"text"},null,512),[[A,b(f).siteName]]),t[18]||(t[18]=e("p",{class:"mt-1 text-xs text-gray-500 dark:text-gray-400"}," 将显示在浏览器标题和页面头部 ",-1))])]),e("tr",Ee,[t[24]||(t[24]=e("td",{class:"w-48 whitespace-nowrap px-6 py-4"},[e("div",{class:"flex items-center"},[e("div",{class:"mr-3 flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-purple-500 to-purple-600"},[e("i",{class:"fas fa-image text-xs text-white"})]),e("div",null,[e("div",{class:"text-sm font-semibold text-gray-900 dark:text-gray-100"}," 网站图标 "),e("div",{class:"text-xs text-gray-500 dark:text-gray-400"},"Favicon")])])],-1)),e("td",Ue,[e("div",je,[b(f).siteIconData||b(f).siteIcon?(d(),i("div",Ne,[e("img",{alt:"图标预览",class:"h-8 w-8",src:b(f).siteIconData||b(f).siteIcon,onError:oe},null,40,Re),t[21]||(t[21]=e("span",{class:"text-sm text-gray-600 dark:text-gray-400"},"当前图标",-1)),e("button",{class:"rounded-lg px-3 py-1 font-medium text-red-600 transition-colors hover:bg-red-50 hover:text-red-900",onClick:ae},t[20]||(t[20]=[e("i",{class:"fas fa-trash mr-1"},null,-1),g("删除 ",-1)]))])):S("",!0),e("div",null,[e("input",{ref_key:"iconFileInput",ref:R,accept:".ico,.png,.jpg,.jpeg,.svg",class:"hidden",type:"file",onChange:se},null,544),e("button",{class:"btn btn-success px-4 py-2",onClick:t[3]||(t[3]=s=>r.$refs.iconFileInput.click())},t[22]||(t[22]=[e("i",{class:"fas fa-upload mr-2"},null,-1),g(" 上传图标 ",-1)])),t[23]||(t[23]=e("span",{class:"ml-3 text-xs text-gray-500 dark:text-gray-400"},"支持 .ico, .png, .jpg, .svg 格式,最大 350KB",-1))])])])]),e("tr",null,[e("td",Oe,[e("div",Pe,[e("div",Fe,[e("button",{class:W(["btn btn-primary px-6 py-3",{"cursor-not-allowed opacity-50":b(T)}]),disabled:b(T),onClick:te},[b(T)?(d(),i("div",Me)):(d(),i("i",Le)),g(" "+h(b(T)?"保存中...":"保存设置"),1)],10,$e),e("button",{class:"btn bg-gray-100 px-6 py-3 text-gray-700 hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-300 dark:hover:bg-gray-600",disabled:b(T),onClick:re},t[25]||(t[25]=[e("i",{class:"fas fa-undo mr-2"},null,-1),g(" 重置为默认 ",-1)]),8,Be)]),b(f).updatedAt?(d(),i("div",qe,[t[26]||(t[26]=e("i",{class:"fas fa-clock mr-1"},null,-1)),g(" 最后更新:"+h(b(le)(b(f).updatedAt)),1)])):S("",!0)])])])])])]),t[27]||(t[27]=e("div",{class:"space-y-4 sm:hidden"},null,-1))],512),[[L,p.value==="branding"]]),x(e("div",null,[e("div",ze,[e("div",Ke,[t[29]||(t[29]=e("div",null,[e("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"}," 启用 Webhook 通知 "),e("p",{class:"mt-1 text-sm text-gray-600 dark:text-gray-400"}," 开启后,系统将按配置发送通知到指定平台 ")],-1)),e("label",He,[x(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>c.value.enabled=s),class:"peer sr-only",type:"checkbox",onChange:j},null,544),[[O,c.value.enabled]]),t[28]||(t[28]=e("div",{class:"peer h-6 w-11 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-blue-600 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:border-gray-600 dark:bg-gray-700 dark:peer-focus:ring-blue-800"},null,-1))])])]),e("div",Je,[t[31]||(t[31]=e("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知类型",-1)),e("div",Qe,[(d(!0),i(P,null,B(c.value.notificationTypes,(s,y)=>(d(),i("div",{key:y,class:"flex items-center justify-between"},[e("div",null,[e("span",Xe,h(G(y)),1),e("span",Ye,h(ee(y)),1)]),e("label",Ze,[x(e("input",{"onUpdate:modelValue":ne=>c.value.notificationTypes[y]=ne,class:"peer sr-only",type:"checkbox",onChange:j},null,40,Ge),[[O,c.value.notificationTypes[y]]]),t[30]||(t[30]=e("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))])]))),128))])]),e("div",et,[e("div",tt,[t[33]||(t[33]=e("h2",{class:"text-lg font-semibold text-gray-800 dark:text-gray-200"},"通知平台",-1)),e("button",{class:"rounded-lg bg-blue-600 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-blue-700",onClick:t[5]||(t[5]=s=>V.value=!0)},t[32]||(t[32]=[e("i",{class:"fas fa-plus mr-2"},null,-1),g(" 添加平台 ",-1)]))]),c.value.platforms&&c.value.platforms.length>0?(d(),i("div",rt,[(d(!0),i(P,null,B(c.value.platforms,s=>(d(),i("div",{key:s.id,class:"rounded-lg border border-gray-200 p-4 dark:border-gray-700"},[e("div",st,[e("div",at,[e("div",ot,[e("i",{class:W(["mr-3 text-xl",Z(s.type)])},null,2),e("div",null,[e("h3",lt,h(s.name||$(s.type)),1),e("p",nt,h($(s.type)),1)])]),e("div",it,[e("div",dt,[t[34]||(t[34]=e("i",{class:"fas fa-link mr-2"},null,-1)),e("span",ut,h(s.url),1)]),s.enableSign?(d(),i("div",ct,t[35]||(t[35]=[e("i",{class:"fas fa-shield-alt mr-2"},null,-1),e("span",null,"已启用签名验证",-1)]))):S("",!0)])]),e("div",gt,[e("label",ft,[e("input",{checked:s.enabled,class:"peer sr-only",type:"checkbox",onChange:y=>J(s.id)},null,40,bt),t[36]||(t[36]=e("div",{class:"peer h-5 w-9 rounded-full bg-gray-200 after:absolute after:left-[2px] after:top-[2px] after:h-4 after:w-4 after:rounded-full after:border after:border-gray-300 after:bg-white after:transition-all after:content-[''] peer-checked:bg-green-600 peer-checked:after:translate-x-full peer-checked:after:border-white dark:border-gray-600 dark:bg-gray-700"},null,-1))]),e("button",{class:"rounded-lg bg-blue-100 p-2 text-blue-600 transition-colors hover:bg-blue-200 dark:bg-blue-900 dark:text-blue-400 dark:hover:bg-blue-800",title:"测试连接",onClick:y=>Q(s)},t[37]||(t[37]=[e("i",{class:"fas fa-vial"},null,-1)]),8,mt),e("button",{class:"rounded-lg bg-gray-100 p-2 text-gray-600 transition-colors hover:bg-gray-200 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600",title:"编辑",onClick:y=>K(s)},t[38]||(t[38]=[e("i",{class:"fas fa-edit"},null,-1)]),8,yt),e("button",{class:"rounded-lg bg-red-100 p-2 text-red-600 transition-colors hover:bg-red-200 dark:bg-red-900 dark:text-red-400 dark:hover:bg-red-800",title:"删除",onClick:y=>H(s.id)},t[39]||(t[39]=[e("i",{class:"fas fa-trash"},null,-1)]),8,vt)])])]))),128))])):(d(),i("div",xt,' 暂无配置的通知平台,请点击"添加平台"按钮添加 '))]),e("div",pt,[t[43]||(t[43]=e("h2",{class:"mb-4 text-lg font-semibold text-gray-800 dark:text-gray-200"},"高级设置",-1)),e("div",kt,[e("div",null,[t[40]||(t[40]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 最大重试次数 ",-1)),x(e("input",{"onUpdate:modelValue":t[6]||(t[6]=s=>c.value.retrySettings.maxRetries=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10",min:"0",type:"number",onChange:j},null,544),[[A,c.value.retrySettings.maxRetries,void 0,{number:!0}]])]),e("div",null,[t[41]||(t[41]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 重试延迟 (毫秒) ",-1)),x(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>c.value.retrySettings.retryDelay=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"10000",min:"100",step:"100",type:"number",onChange:j},null,544),[[A,c.value.retrySettings.retryDelay,void 0,{number:!0}]])]),e("div",null,[t[42]||(t[42]=e("label",{class:"block text-sm font-medium text-gray-700 dark:text-gray-300"}," 超时时间 (毫秒) ",-1)),x(e("input",{"onUpdate:modelValue":t[8]||(t[8]=s=>c.value.retrySettings.timeout=s),class:"mt-1 block w-full rounded-lg border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white sm:text-sm",max:"30000",min:"1000",step:"1000",type:"number",onChange:j},null,544),[[A,c.value.retrySettings.timeout,void 0,{number:!0}]])])])]),e("div",{class:"mt-6 text-center"},[e("button",{class:"rounded-lg bg-green-600 px-6 py-3 text-white shadow-lg transition-all hover:bg-green-700 hover:shadow-xl",onClick:Y},t[44]||(t[44]=[e("i",{class:"fas fa-paper-plane mr-2"},null,-1),g(" 发送测试通知 ",-1)]))])],512),[[L,p.value==="webhook"]])]))])]),V.value?(d(),i("div",{key:0,class:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-sm transition-all duration-300 ease-out",onClick:N},[e("div",{class:"relative mx-4 w-full max-w-2xl overflow-hidden rounded-2xl bg-white shadow-2xl transition-all duration-300 ease-out dark:bg-gray-800",onClick:t[14]||(t[14]=xe(()=>{},["stop"]))},[e("div",ht,[e("div",wt,[e("div",_t,[t[46]||(t[46]=e("div",{class:"flex h-10 w-10 items-center justify-center rounded-full bg-gradient-to-br from-blue-500 to-indigo-600 text-white shadow-lg"},[e("i",{class:"fas fa-bell"})],-1)),e("div",null,[e("h3",St,h(_.value?"编辑":"添加")+"通知平台 ",1),e("p",Ct," 配置"+h(_.value?"并更新":"新的")+"Webhook通知渠道 ",1)])]),e("button",{class:"rounded-lg p-2 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",onClick:N},t[47]||(t[47]=[e("i",{class:"fas fa-times text-lg"},null,-1)]))])]),e("div",It,[e("div",Dt,[e("div",null,[t[51]||(t[51]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-layer-group mr-2 text-gray-400"}),g(" 平台类型 ")],-1)),e("div",Vt,[x(e("select",{"onUpdate:modelValue":t[9]||(t[9]=s=>n.value.type=s),class:"w-full appearance-none rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 text-gray-900 shadow-sm transition-all focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white",disabled:_.value},t[48]||(t[48]=[be('<option value="wechat_work" data-v-44082597>🟢 企业微信</option><option value="dingtalk" data-v-44082597>🔵 钉钉</option><option value="feishu" data-v-44082597>🟦 飞书</option><option value="slack" data-v-44082597>🟣 Slack</option><option value="discord" data-v-44082597>🟪 Discord</option><option value="custom" data-v-44082597>⚙️ 自定义</option>',6)]),8,Tt),[[fe,n.value.type]]),t[49]||(t[49]=e("div",{class:"pointer-events-none absolute inset-y-0 right-0 flex items-center pr-3"},[e("i",{class:"fas fa-chevron-down text-gray-400"})],-1))]),_.value?(d(),i("p",Wt,t[50]||(t[50]=[e("i",{class:"fas fa-info-circle mr-1"},null,-1),g(" 编辑模式下不能更改平台类型 ",-1)]))):S("",!0)]),e("div",null,[t[52]||(t[52]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-tag mr-2 text-gray-400"}),g(" 名称 "),e("span",{class:"ml-2 text-xs text-gray-500"},"(可选)")],-1)),x(e("input",{"onUpdate:modelValue":t[10]||(t[10]=s=>n.value.name=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",placeholder:"例如:运维群通知、开发测试群",type:"text"},null,512),[[A,n.value.name]])]),e("div",null,[t[56]||(t[56]=e("label",{class:"mb-2 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-link mr-2 text-gray-400"}),g(" Webhook URL "),e("span",{class:"ml-1 text-xs text-red-500"},"*")],-1)),e("div",At,[x(e("input",{"onUpdate:modelValue":t[11]||(t[11]=s=>n.value.url=s),class:W(["w-full rounded-xl border border-gray-300 bg-white px-4 py-3 pr-10 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder:text-gray-500",{"border-red-500 focus:border-red-500 focus:ring-red-500/20":I.value,"border-green-500 focus:border-green-500 focus:ring-green-500/20":a.value}]),placeholder:"https://...",required:"",type:"url",onInput:q},null,34),[[A,n.value.url]]),a.value?(d(),i("div",Et,t[53]||(t[53]=[e("i",{class:"fas fa-check-circle text-green-500"},null,-1)]))):S("",!0),I.value?(d(),i("div",Ut,t[54]||(t[54]=[e("i",{class:"fas fa-exclamation-circle text-red-500"},null,-1)]))):S("",!0)]),M(n.value.type)?(d(),i("div",jt,[t[55]||(t[55]=e("i",{class:"fas fa-info-circle mr-2 mt-0.5 text-blue-600 dark:text-blue-400"},null,-1)),e("p",Nt,h(M(n.value.type)),1)])):S("",!0)]),n.value.type==="dingtalk"||n.value.type==="feishu"?(d(),i("div",Rt,[e("div",Ot,[e("div",Pt,[e("label",Ft,[x(e("input",{id:"enableSign","onUpdate:modelValue":t[12]||(t[12]=s=>n.value.enableSign=s),class:"h-4 w-4 rounded border-gray-300 text-blue-600 focus:ring-2 focus:ring-blue-500 focus:ring-offset-0",type:"checkbox"},null,512),[[O,n.value.enableSign]]),t[57]||(t[57]=e("span",{class:"ml-3 flex items-center text-sm font-medium text-gray-700 dark:text-gray-300"},[e("i",{class:"fas fa-shield-alt mr-2 text-gray-400"}),g(" 启用签名验证 ")],-1))]),n.value.enableSign?(d(),i("span",$t," 已启用 ")):S("",!0)]),me(ve,{"enter-active-class":"transition-all duration-200 ease-out","enter-from-class":"opacity-0 -translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition-all duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 -translate-y-2"},{default:ye(()=>[n.value.enableSign?(d(),i("div",Mt,[t[58]||(t[58]=e("label",{class:"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"}," 签名密钥 ",-1)),x(e("input",{"onUpdate:modelValue":t[13]||(t[13]=s=>n.value.secret=s),class:"w-full rounded-xl border border-gray-300 bg-white px-4 py-3 font-mono text-sm text-gray-900 shadow-sm transition-all placeholder:text-gray-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 dark:border-gray-600 dark:bg-gray-800 dark:text-white dark:placeholder:text-gray-500",placeholder:"SEC...",type:"text"},null,512),[[A,n.value.secret]])])):S("",!0)]),_:1})])])):S("",!0)])]),e("div",Lt,[e("div",Bt,[t[60]||(t[60]=e("div",{class:"text-xs text-gray-500 dark:text-gray-400"},[e("i",{class:"fas fa-asterisk mr-1 text-red-500"}),g(" 必填项 ")],-1)),e("div",qt,[e("button",{class:"group flex items-center rounded-xl border border-gray-300 bg-white px-4 py-2.5 text-sm font-medium text-gray-700 shadow-sm transition-all hover:bg-gray-50 hover:shadow-md dark:border-gray-600 dark:bg-gray-800 dark:text-gray-300 dark:hover:bg-gray-700",onClick:N},t[59]||(t[59]=[e("i",{class:"fas fa-times mr-2 transition-transform group-hover:scale-110"},null,-1),g(" 取消 ",-1)])),e("button",{class:"group flex items-center rounded-xl border border-blue-200 bg-blue-50 px-4 py-2.5 text-sm font-medium text-blue-700 shadow-sm transition-all hover:bg-blue-100 hover:shadow-md dark:border-blue-800 dark:bg-blue-900/50 dark:text-blue-300 dark:hover:bg-blue-900/70",disabled:u.value,onClick:X},[e("i",{class:W(["mr-2 transition-transform",u.value?"fas fa-spinner fa-spin":"fas fa-vial group-hover:scale-110"])},null,2),g(" "+h(u.value?"测试中...":"测试连接"),1)],8,zt),e("button",{class:"group flex items-center rounded-xl bg-gradient-to-r from-blue-600 to-indigo-600 px-5 py-2.5 text-sm font-medium text-white shadow-md transition-all hover:from-blue-700 hover:to-indigo-700 hover:shadow-lg disabled:cursor-not-allowed disabled:from-gray-400 disabled:to-gray-500",disabled:!n.value.url||D.value,onClick:z},[e("i",{class:W(["mr-2 transition-transform",D.value?"fas fa-spinner fa-spin":"fas fa-save group-hover:scale-110"])},null,2),g(" "+h(D.value?"保存中...":_.value?"保存修改":"添加平台"),1)],8,Kt)])])])])])):S("",!0)],64))}}),Gt=pe(Ht,[["__scopeId","data-v-44082597"]]);export{Gt as default};
|