Files
CloudSearch/source_clean/frontend/assets/SystemConfig-CPVt3sA3.js
admin d7b055f88b v0.5.4: 全面修复 — template literal URL, Cookie验证, 用户默认is_active, 默认账号路由, 空间信息, 密钥清理, promoForm修复
修复:
- quark-share.ts/storage.ts: 9处template literal ${}缺失导致fetch URL写死
- user/routes.ts: testCloudConnectionWithCookie缺await + 按cloudType分发驱动
- credential.service.ts: INSERT缺?参数 (9values/10cols)
- user/routes.ts: 用户新增网盘默认is_active=0
- admin.routes.ts: 新增PUT /admin/cloud-configs/:id/primary路由
- database.ts: is_primary列迁移
- UserDashboard.vue: 保存时传递storage_used/storage_total
- SystemConfig.vue: promoForm const重赋值bug
- config/index.ts: 移除泄露的默认密钥token
2026-05-19 23:09:11 +08:00

28 lines
60 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{d as ot,o as nt,E as p,v as it,c as g,K as D,L as G,e as t,w as o,a as l,q as Y,g as y,B as Q,h as P,i as m,k as d,j as sl,N as dt,b as F,t as b,m as ee,x as V,F as T,M as rt,r as $,y as ut,u as pt,_ as mt}from"./index-xijwxLU3.js";import{j as ft,v as vt,w as ct,x as yt,o as gt,y as _t,z as ne,A as bt,B as xt,C as wt,D as kt,E as Vt,F as ht,G as Pt}from"./index-iQrvdwZD.js";import"./index-DZ_Kha3d.js";const Ct={class:"system-config"},Ut={class:"fallback-upload-wrap"},St={class:"fallback-upload-row"},zt={key:0,class:"fallback-preview"},jt=["src"],Tt={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},It={key:0,style:{"font-size":"11px",color:"#e6a23c","white-space":"nowrap"}},Ot={class:"pansou-status-grid"},$t={class:"db-stat-item"},At={class:"db-stat-item"},Rt={class:"db-stat-value"},Bt={class:"db-stat-item"},Et={class:"db-stat-value"},Lt={class:"db-stat-item"},Ft={class:"db-stat-value"},Nt={class:"db-stat-item"},Dt={class:"db-stat-value"},Gt={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},Kt={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},Wt={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},qt={style:{display:"flex","flex-direction":"column",gap:"8px",width:"100%"}},Mt={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},Ht={key:0,style:{"text-align":"center",padding:"16px"}},Jt={key:1,class:"db-status-grid"},Yt={class:"db-stat-item"},Qt={class:"db-stat-item"},Xt={class:"db-stat-value"},Zt={class:"db-stat-item"},es={class:"db-stat-value"},ls={class:"db-stat-item"},ts={class:"db-stat-value"},ss={class:"db-stat-item"},as={class:"db-stat-value"},os={class:"db-stat-item"},ns={class:"db-stat-value"},is={class:"strategy-section"},ds={class:"field-block"},rs={class:"field-label-row"},us={class:"field-block"},ps={class:"field-label-row"},ms={class:"strategy-grid"},fs={class:"grid-cell"},vs={class:"field-label-row"},cs={class:"grid-cell"},ys={class:"field-label-row"},gs={class:"grid-cell"},_s={class:"field-label-row"},bs={class:"grid-cell"},xs={class:"field-label-row"},ws={class:"grid-cell"},ks={class:"field-label-row"},Vs={class:"grid-cell"},hs={class:"field-label-row"},Ps={class:"field-block"},Cs={style:{display:"flex",gap:"8px","align-items":"stretch"}},Us={key:0,class:"tag-list"},Ss={key:1,class:"tag-empty"},zs={class:"field-block"},js={style:{display:"flex",gap:"8px","align-items":"stretch"}},Ts={key:0,class:"tag-list"},Is={key:1,class:"tag-empty"},Os={class:"field-block"},$s={style:{display:"flex",gap:"8px","align-items":"stretch"}},As={key:0,class:"tag-list"},Rs={key:1,class:"tag-empty"},Bs={class:"field-block"},Es={style:{display:"flex",gap:"8px","align-items":"stretch"}},Ls={key:0,class:"tag-list"},Fs={key:1,class:"tag-empty"},Ns={class:"field-block"},Ds={style:{display:"flex",gap:"8px","align-items":"stretch"}},Gs={key:0,class:"tag-list"},Ks={key:1,class:"tag-empty"},Ws={class:"strategy-section"},qs={style:{display:"grid","grid-template-columns":"repeat(2,1fr)",gap:"8px"}},Ms={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"6px"}},Hs={key:0},Js={style:{display:"grid","grid-template-columns":"repeat(2,1fr)",gap:"10px"}},Ys={style:{display:"flex","align-items":"center","justify-content":"space-between"}},Qs={style:{"margin-top":"4px"}},Xs={style:{display:"flex","align-items":"center","justify-content":"space-between"}},Zs={style:{"margin-top":"4px"}},ea={style:{display:"flex","align-items":"center","justify-content":"space-between"}},la={style:{"margin-top":"4px"}},ta={style:{display:"flex","align-items":"center","justify-content":"space-between"}},sa={style:{"margin-top":"4px"}},aa={style:{border:"1px solid var(--el-border-color-light)","border-radius":"6px",padding:"12px 16px","margin-bottom":"16px"}},oa={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},na={style:{"font-size":"13px",color:"var(--el-text-color-secondary)","white-space":"nowrap"}},ia={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},da={key:1,style:{color:"#ccc"}},ra={key:1,style:{color:"#ccc"}},ua={key:1,style:{color:"#ccc"}},pa={key:1,style:{color:"#ccc"}},ma={style:{"font-size":"11px",color:"var(--el-text-color-secondary)","margin-left":"4px"}},fa={key:1,style:{color:"#909399","font-size":"12px"}},va={style:{display:"flex","align-items":"center","justify-content":"space-between"}},ca={style:{display:"flex","flex-wrap":"wrap",gap:"16px"}},ya={style:{"white-space":"pre-wrap","font-family":"monospace",background:"var(--el-fill-color-light)",padding:"16px","border-radius":"8px","max-height":"500px","overflow-y":"auto"}},ga={style:{"margin-bottom":"10px","font-size":"12px",color:"var(--el-text-color-secondary)","line-height":"2"}},_a={style:{"margin-top":"12px"}},ba={class:"save-bar"},xa=ot({__name:"SystemConfig",props:{section:{}},setup(al){const ol=al,nl=ut();pt();const z=Y(()=>ol.section||nl.query.section||""),Oe=y(),xe=y([]),u=Q({}),K=y([]),le=y(""),W=y([]),te=y(""),q=y([]),se=y(""),M=y([]),ae=y(""),oe=y(""),H=y([]),we=y(!1),ke=y(!1),E=Q({db_size:"-",save_records:0,search_stats:0,cloud_configs:0,content_cache:0,redis_status:"未连接"}),$e=y(!0),ie=y(!1),de=y(!1),re=y(!1),ue=y(!1),pe=y(!1),me=y(!1),I=y(null),Ae=y(!0),fe=y(!1),Re=y([]),X=y(!1),Z=y(null),j=Q({name:"",join_url:"",sort_order:0}),Ve=y(!1),he=Y({get:()=>String(u.search_proxy_enabled)==="true",set:s=>{u.search_proxy_enabled=s?"true":"false"}}),Be=Y({get:()=>String(u.pansou_web_enabled)==="true",set:s=>{u.pansou_web_enabled=s?"true":"false"}}),Ee=Y({get:()=>String(u.search_all_channels)==="true",set:s=>{u.search_all_channels=s?"true":"false"}}),Le=Y({get:()=>String(u.auto_update_enabled)==="true",set:s=>{u.auto_update_enabled=s?"true":"false"}}),h=Q({enabled:!0,time:"08:00",includeSearch:!0,includeSaves:!0,includeStorage:!0,includeUsers:!0,channels:[]}),Pe=y(!1),Ce=y(!1),Fe=y(""),Ue=y(!1),Ne=y("");async function il(){try{const s=await fetch("/api/admin/daily-report/config",{headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")}`}});if(s.ok){const e=await s.json();Object.assign(h,e)}}catch{}}async function dl(){try{const s=await fetch("/api/admin/daily-report/last-run",{headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")}`}});if(s.ok){const e=await s.json();e.date&&(Ne.value=`${e.date} ${new Date(e.sentAt).toLocaleTimeString("zh-CN")}`)}}catch{}}async function rl(){try{await fetch("/api/admin/daily-report/config",{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${localStorage.getItem("admin_token")}`},body:JSON.stringify({...h})})}catch{}}async function ul(){Pe.value=!0;try{const s=await fetch("/api/admin/daily-report/preview",{headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")}`}});if(s.ok){const e=await s.json();Fe.value=e.content,Ue.value=!0}}finally{Pe.value=!1}}async function pl(){Ce.value=!0;try{(await fetch("/api/admin/daily-report/test",{method:"POST",headers:{Authorization:`Bearer ${localStorage.getItem("admin_token")}`}})).ok?p.success("测试报告已发送到全局通知通道"):p.error("发送失败")}catch{p.error("发送失败")}finally{Ce.value=!1}}const De=y([]),R=y({}),Se=y(!1),Ge=y([]);async function ml(){try{const s=await fetch("/api/admin/cloud-configs",{headers:{Authorization:"Bearer "+(localStorage.getItem("admin_token")||"")}});if(!s.ok)return;const e=await s.json(),n=Array.isArray(e)?[...new Set(e.map(i=>i.promotion_account||"").filter(Boolean))]:[];Ge.value=n}catch{}}const f=Q({id:null,account:"",channel:"",channelParams:{},events:{on_save_success:!0,on_save_fail:!0,on_cookie_expire:!0,on_cleanup:!1}});function fl(){f.channelParams={}}const vl=Y(()=>{var e;const s={};for(const[n,i]of Object.entries(R.value))(e=v.channels[n])!=null&&e._enabled&&(s[n]=i);return s}),v=Q({channels:{},events:{on_save_success:!0,on_save_fail:!0,on_cookie_expire:!0,on_cleanup:!1},eventTemplates:{on_save_success:{title:"✅ 转存成功",content:`**{cloud_type}** · {nickname}
文件: {file_name}
大小: {file_size}
耗时: {duration}s
链接: {share_url}`},on_save_fail:{title:"❌ 转存连续失败 {fail_count} 次",content:`**{cloud_type}** · {nickname}
连续失败次数: {fail_count}
最后失败: {error_message}
请检查网盘状态`},on_cookie_expire:{title:"⚠️ Cookie 已过期",content:`**{cloud_type}** · {nickname}
Cookie 已过期或失效,请重新登录
最后操作: {share_url}`},on_cleanup:{title:"🧹 清理完成",content:`**{cloud_type}** · {nickname}
清理完成
释放空间: {freed_space}`}}});function cl(s){var e,n,i,x;if(s){f.id=s.id,f.account=s.account;const r=s.notify_config||{},_=Object.keys(r.channels||{});f.channel=_[0]||"",f.channelParams=_[0]?r.channels[_[0]]||{}:{},f.events={on_save_success:((e=r.events)==null?void 0:e.on_save_success)!==!1,on_save_fail:((n=r.events)==null?void 0:n.on_save_fail)!==!1,on_cookie_expire:((i=r.events)==null?void 0:i.on_cookie_expire)!==!1,on_cleanup:((x=r.events)==null?void 0:x.on_cleanup)===!0}}else f.id=null,f.account="",f.channel="",f.channelParams={},f.events={on_save_success:!0,on_save_fail:!0,on_cookie_expire:!0,on_cleanup:!1}}function yl(){f.id=null,f.account="",f.channel="",f.channelParams={},f.events={on_save_success:!0,on_save_fail:!0,on_cookie_expire:!0,on_cleanup:!1}}function ve(s,e){return((s.notify_config||{}).events||{})[e]===!0}async function gl(){if(!f.account){p.warning("请填写推广账号");return}Se.value=!0;try{const s={account:f.account,notify_config:{channels:{},events:f.events}},e={};f.channel&&(e[f.channel]={...f.channelParams}),s.notify_config.channels=e,f.id?await fetch("/api/admin/push-users/"+f.id,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:"Bearer "+(localStorage.getItem("admin_token")||"")},body:JSON.stringify(s)}):await fetch("/api/admin/push-users",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+(localStorage.getItem("admin_token")||"")},body:JSON.stringify(s)});const n=!!f.id;f.id=null,f.account="",f.channel="",f.channelParams={},f.events={on_save_success:!0,on_save_fail:!0,on_cookie_expire:!0,on_cleanup:!1},p.success(n?"推送用户已更新":"推送用户已添加"),await ze()}catch(s){p.error(s.message||"保存失败")}finally{Se.value=!1}}async function ze(){try{const s=await fetch("/api/admin/push-users",{headers:{Authorization:"Bearer "+(localStorage.getItem("admin_token")||"")}});s.ok&&(De.value=await s.json())}catch(s){console.error("Failed to load push users",s)}}async function _l(){try{R.value=await yt()}catch(s){console.error("Failed to load providers",s)}}async function bl(s){try{await fetch("/api/admin/push-users/"+s.id,{method:"DELETE",headers:{Authorization:"Bearer "+(localStorage.getItem("admin_token")||"")}}),p.success("已删除"),await ze()}catch(e){p.error(e.message||"删除失败")}}function Ke(s){var n;return((n=s.notify_config)==null?void 0:n.channels)||{}}function xl(s){const e=R.value[s];if(!e||!e.params)return[];const n=["title","content","level","priority"];return e.params.filter(i=>!(n.includes(i.key)||s==="smtp"&&i.key!=="to"))}function wl(s){var e;return((e=R.value[s])==null?void 0:e.label)||s}function kl(s){return Object.keys(Ke(s)).length>0}function Vl(s){var r;const e=((r=s.notify_config)==null?void 0:r.channels)||{},n=Object.keys(e);if(n.length===0)return"";const i=e[n[0]]||{},x=[];for(const[_,C]of Object.entries(i))if(C&&typeof C=="string"){const k=_.includes("token")||_.includes("key")||_.includes("secret")||_.includes("password")?C.substring(0,4)+"***":C.length>20?C.substring(0,20)+"...":C;x.push(k)}return x.join(" | ")}function hl(){const s={};for(const[e,n]of Object.entries(R.value)){s[e]={_enabled:!1,_testing:!1};for(const i of n.params||[])s[e][i.key]=i.default||""}v.channels=s,v.events={on_save_success:!0,on_save_fail:!0,on_cookie_expire:!0,on_cleanup:!1}}async function Pl(){try{const n=(await(await fetch("/api/admin/system-configs",{headers:{Authorization:"Bearer "+(localStorage.getItem("admin_token")||"")}})).json()).find(i=>i.key==="global_notify_config");if(n&&n.value)try{const i=JSON.parse(n.value),x=i.channels||{};for(const[r,_]of Object.entries(x))if(v.channels[r]){v.channels[r]._enabled=!0;for(const[C,k]of Object.entries(_))v.channels[r][C]=k}if(i.events&&(v.events.on_save_success=i.events.on_save_success!==!1,v.events.on_save_fail=i.events.on_save_fail!==!1,v.events.on_cookie_expire=i.events.on_cookie_expire!==!1,v.events.on_cleanup=i.events.on_cleanup===!0),i.eventTemplates)for(const[r,_]of Object.entries(i.eventTemplates))v.eventTemplates[r]=_}catch{}}catch{}}const ce=y(!1),L=y(""),Cl=Y(()=>({on_save_success:"转存成功",on_save_fail:"转存失败",on_cookie_expire:"Cookie过期",on_cleanup:"清理完成"})[L.value]||"");function ye(s){L.value=s,ce.value=!0,v.eventTemplates[s]||(v.eventTemplates[s]={title:"",content:""})}async function Ul(s){const e=v.channels[s];if(!(!e||!e._enabled)){e._testing=!0;try{const n={};for(const[x,r]of Object.entries(e))x.startsWith("_")||(n[x]=r);const i=await Pt(s,void 0,n);i.success?p.success(i.message):p.error(i.message)}catch(n){p.error(n.message||"测试失败")}finally{e._testing=!1}}}const O=Q({oldPassword:"",newPassword:"",confirmPassword:""}),Sl={oldPassword:[{required:!0,message:"请输入原密码",trigger:"blur"}],newPassword:[{required:!0,message:"请输入新密码",trigger:"blur"},{min:6,message:"新密码至少需要6个字符",trigger:"blur"}],confirmPassword:[{required:!0,message:"请确认新密码",trigger:"blur"},{validator:(s,e,n)=>{e!==O.newPassword?n(new Error("两次输入的密码不一致")):n()},trigger:"blur"}]};nt(async()=>{Te();try{xe.value=await ft();for(const r of xe.value)u[r.key]=r.value;const s=String(u.title_filter_rules||"");K.value=s.split(`
`).filter(r=>r.trim());const e=String(u.link_invalid_keywords||"");W.value=e.split(`
`).filter(r=>r.trim());const n=String(u.quark_ad_keywords||"");q.value=n.split(`
`).filter(r=>r.trim());const i=String(u.quark_warning_folder_names||"");M.value=i.split(`
`).filter(r=>r.trim());const x=String(u.quark_sus_extensions||"");H.value=x.split(`
`).filter(r=>r.trim())}catch{p.error("加载系统配置失败")}try{const s=await vt();Object.assign(E,s)}catch{E.db_size="无法读取"}finally{$e.value=!1}je(),await _l(),hl(),await Pl(),ze(),il(),dl(),ml()}),it(R,()=>{for(const[s,e]of Object.entries(R.value))if(!v.channels[s]){v.channels[s]={_enabled:!1,_testing:!1};for(const n of e.params||[])v.channels[s][n.key]=n.default||""}});async function zl(){var e,n;const s=String(u.redis_url||"redis://redis:6379");ie.value=!0;try{const i=await _t(s);i.ok?p.success(`✅ Redis 连接成功 — ${i.info}`):p.error(`❌ Redis 连接失败 — ${i.info}`)}catch(i){p.error(((n=(e=i.response)==null?void 0:e.data)==null?void 0:n.error)||"测试请求失败")}finally{ie.value=!1}}async function je(){Ae.value=!0;try{const s=localStorage.getItem("admin_token"),e={};s&&(e.Authorization="Bearer "+s);const n=await fetch("/api/admin/pansou-info",{headers:e});if(!n.ok)throw new Error("HTTP "+n.status);const i=await n.json();I.value=i}catch{I.value={status:"disconnected",version:"-",channelCount:0,pluginCount:0,diskCount:0}}finally{Ae.value=!1}}async function jl(){fe.value=!0;try{const s=localStorage.getItem("admin_token"),e={"Content-Type":"application/json"};s&&(e.Authorization="Bearer "+s);const i=await(await fetch("/api/admin/update-pansou",{method:"POST",headers:e})).json();i.ok?(p.success("✅ PanSou 已更新并重启"),setTimeout(()=>je(),3e3)):p.error("❌ 更新失败 — "+(i.error||"未知错误"))}catch(s){p.error(s.message||"更新请求失败")}finally{fe.value=!1}}async function Tl(){var s,e;de.value=!0;try{const n=await ne({type:"pansou",url:String(u.pansou_url||"")});n.ok?(je(),p.success(`✅ PanSou 连接成功 — ${n.info}`)):p.error(`❌ PanSou 连接失败 — ${n.info}`)}catch(n){p.error(((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.error)||"测试请求失败")}finally{de.value=!1}}async function Il(){var s,e;re.value=!0;try{const n=await ne({type:"video_parser",url:String(u.video_parser_url||"")});n.ok?p.success(`✅ 视频解析服务连接成功 — ${n.info}`):p.error(`❌ 视频解析服务连接失败 — ${n.info}`)}catch(n){p.error(((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.error)||"测试请求失败")}finally{re.value=!1}}async function Ol(){var s,e;ue.value=!0;try{const n=await ne({type:"tmdb",token:String(u.tmdb_api_token||"")});n.ok?p.success(`✅ TMDB 令牌有效 — ${n.info}`):p.error(`❌ TMDB 连接失败 — ${n.info}`)}catch(n){p.error(((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.error)||"测试请求失败")}finally{ue.value=!1}}async function $l(){var s,e;pe.value=!0;try{const n=await ne({type:"proxy",url:String(u.search_proxy_url||"")});n.ok?p.success(`✅ 搜索代理可用 — ${n.info}`):p.error(`❌ 搜索代理不可用 — ${n.info}`)}catch(n){p.error(((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.error)||"测试请求失败")}finally{pe.value=!1}}async function Al(){var s,e;me.value=!0;try{const n=String(u.ip_geo_api_id||"");if(!n){p.warning("请先输入 API ID");return}const i=await ne({type:"ip_geo",url:n});i.ok?p.success("✅ IP 归属地接口可用 — "+i.info):p.error("❌ IP 归属地接口不可用 — "+i.info)}catch(n){p.error(((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.error)||"测试请求失败")}finally{me.value=!1}}function Rl(){const s=le.value.trim();if(!s)return;const e=s.split(`
`).map(i=>i.trim()).filter(i=>i);let n=0;for(const i of e)K.value.includes(i)||(K.value.push(i),n++);le.value="",We(),n>0?p.success(`已添加 ${n} 条规则`):p.info("所有规则已存在")}function Bl(s){K.value.splice(s,1),We()}function El(s){return s.startsWith("#")?"info":s.startsWith("/")&&(s.endsWith("/")||s.endsWith("/g")||s.endsWith("/i")||s.endsWith("/gi"))?"warning":""}function We(){u.title_filter_rules=K.value.join(`
`)}function Ll(){const s=te.value.trim();if(!s)return;const e=s.split(`
`).map(i=>i.trim()).filter(i=>i);let n=0;for(const i of e)W.value.includes(i)||(W.value.push(i),n++);te.value="",qe(),n>0?p.success(`已添加 ${n} 个关键词`):p.info("所有关键词已存在")}function Fl(s){W.value.splice(s,1),qe()}function qe(){u.link_invalid_keywords=W.value.join(`
`)}function Nl(){const s=se.value.trim();if(!s)return;const e=s.split(`
`).map(i=>i.trim()).filter(i=>i);let n=0;for(const i of e)q.value.includes(i)||(q.value.push(i),n++);se.value="",Me(),n>0?p.success():p.info("所有关键词已存在")}function Dl(s){q.value.splice(s,1),Me()}function Me(){u.quark_ad_keywords=q.value.join(`
`)}function Gl(){const s=ae.value.trim();if(!s)return;const e=s.split(`
`).map(i=>i.trim()).filter(i=>i);let n=0;for(const i of e)M.value.includes(i)||(M.value.push(i),n++);ae.value="",He(),n>0?p.success():p.info("所有文件夹名已存在")}function Kl(s){M.value.splice(s,1),He()}function He(){u.quark_warning_folder_names=M.value.join(`
`)}function Wl(){const s=oe.value.trim();if(!s)return;const e=s.split(`
`).map(i=>i.trim().toLowerCase().replace(/^\./,"")).filter(i=>i);let n=0;for(const i of e)H.value.includes(i)||(H.value.push(i),n++);oe.value="",Je(),n>0?p.success("已添加 ${added} 个后缀"):p.info("所有后缀已存在")}function ql(s){H.value.splice(s,1),Je()}function Je(){u.quark_sus_extensions=H.value.join(`
`)}async function Ml(){var s,e;we.value=!0;try{const n={};for(const[x,r]of Object.entries(v.channels))if(r._enabled){const _={};for(const[C,k]of Object.entries(r))!C.startsWith("_")&&k!==""&&(_[C]=String(k));Object.keys(_).length>0&&(n[x]=_)}const i=xe.value.map(x=>({key:x.key,value:String(u[x.key]??x.value)}));await rl(),i.push({key:"global_notify_config",value:JSON.stringify({channels:n,events:v.events,eventTemplates:v.eventTemplates})}),await gt(i),p.success("配置已保存")}catch(n){p.error(((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.error)||"保存失败")}finally{we.value=!1}}async function Te(){try{Re.value=await ct()}catch{}}function Hl(s){Z.value=s.id,j.name=s.name,j.join_url=s.join_url,j.sort_order=s.sort_order,X.value=!0}async function Jl(){var s,e;if(!j.name||!j.join_url){p.warning("平台名称和邀请链接不能为空");return}Ve.value=!0;try{Z.value?(await bt(Z.value,{...j}),p.success("更新成功")):(await xt({...j}),p.success("添加成功")),X.value=!1,Z.value=null,Te()}catch(n){p.error(((e=(s=n.response)==null?void 0:s.data)==null?void 0:e.error)||"保存失败")}finally{Ve.value=!1}}async function Yl(s){var e,n;try{await wt(s),p.success("已删除"),Te()}catch(i){p.error(((n=(e=i.response)==null?void 0:e.data)==null?void 0:n.error)||"删除失败")}}async function Ql(){var e,n,i;if(await((e=Oe.value)==null?void 0:e.validate().catch(()=>!1))){ke.value=!0;try{const x=await kt(O.oldPassword,O.newPassword);x.success?(p.success("✅ 密码修改成功,下次登录请使用新密码"),O.oldPassword="",O.newPassword="",O.confirmPassword=""):p.error(x.message)}catch(x){p.error(((i=(n=x.response)==null?void 0:n.data)==null?void 0:i.error)||"密码修改失败")}finally{ke.value=!1}}}const Ye=y();function Xl(){var s;(s=Ye.value)==null||s.click()}async function Zl(s){var i,x,r;const e=s.target,n=(i=e.files)==null?void 0:i[0];if(n){if(!n.type.startsWith("image/")){p.error("仅支持图片文件JPEG/PNG/WebP"),e.value="";return}if(n.size>2*1024*1024){p.error("图片大小不能超过 2MB"),e.value="";return}try{const _=await Vt(n);_.success?(u.site_logo=_.url,p.success("✅ LOGO 已上传并生效")):p.error(_.message)}catch(_){p.error(((r=(x=_.response)==null?void 0:x.data)==null?void 0:r.error)||"上传失败")}e.value=""}}async function et(){try{u.site_logo="",await ht("site_logo",""),p.success("已移除 LOGO")}catch{p.error("移除失败")}}return(s,e)=>{const n=P("el-input"),i=P("el-form-item"),x=P("el-icon"),r=P("el-button"),_=P("el-form"),C=P("el-card"),k=P("el-switch"),ge=P("el-option"),_e=P("el-select"),N=P("el-divider"),Qe=P("el-radio"),lt=P("el-radio-group"),J=P("el-input-number"),S=P("el-tag"),tt=P("el-collapse-item"),st=P("el-collapse"),A=P("el-table-column"),Xe=P("el-popconfirm"),Ze=P("el-table"),at=P("el-time-picker"),Ie=P("el-dialog");return m(),g("div",Ct,[D(t(C,{id:"section-sys-site"},{header:o(()=>[...e[65]||(e[65]=[l("span",null,"🌐 网站设置",-1)])]),default:o(()=>[t(_,{"label-width":"180px","label-position":"left"},{default:o(()=>[t(i,{label:"网站名称"},{default:o(()=>[t(n,{modelValue:u.site_name,"onUpdate:modelValue":e[0]||(e[0]=a=>u.site_name=a),placeholder:"CloudSearch",style:{"max-width":"300px"}},null,8,["modelValue"]),e[66]||(e[66]=l("div",{class:"form-tip"},"显示在网站标题和页脚",-1))]),_:1}),t(i,{label:"网站 LOGO"},{default:o(()=>[l("div",Ut,[l("div",St,[t(r,{type:"primary",onClick:Xl},{icon:o(()=>[t(x,null,{default:o(()=>[t(sl(dt))]),_:1})]),default:o(()=>[e[67]||(e[67]=d(" 选择LOGO图片并上传 ",-1))]),_:1}),l("input",{ref_key:"logoInputRef",ref:Ye,type:"file",accept:".jpg,.jpeg,.png,.webp",hidden:"",onChange:Zl},null,544),e[68]||(e[68]=l("div",{class:"form-tip",style:{"margin-left":"12px"}},[d(" 推荐 "),l("strong",null,"320×60"),d(" 或宽比例(如 4:1JPEG/PNG/WebP最大 2MB。"),l("br"),d(" LOGO 同时也作为搜索结果无封面图时的兜底图使用。 ")],-1))]),u.site_logo?(m(),g("div",zt,[l("img",{src:String(u.site_logo),alt:"LOGO预览",onError:e[1]||(e[1]=a=>a.target.style.display="none")},null,40,jt),t(r,{size:"small",type:"danger",plain:"",onClick:et},{default:o(()=>[...e[69]||(e[69]=[d("移除",-1)])]),_:1})])):F("",!0)])]),_:1}),t(i,{label:"底部免责声明"},{default:o(()=>[t(n,{modelValue:u.site_disclaimer,"onUpdate:modelValue":e[2]||(e[2]=a=>u.site_disclaimer=a),type:"textarea",rows:4,placeholder:"输入免责声明内容"},null,8,["modelValue"]),e[70]||(e[70]=l("div",{class:"form-tip"},"显示在网站底部,留空则不显示",-1))]),_:1}),t(i,{label:"滚动通知文字"},{default:o(()=>[t(n,{modelValue:u.site_marquee,"onUpdate:modelValue":e[3]||(e[3]=a=>u.site_marquee=a),placeholder:"📢 欢迎使用CloudSearch",style:{"max-width":"500px"}},null,8,["modelValue"]),e[71]||(e[71]=l("div",{class:"form-tip"},"搜索栏下方滚动的通知条(从右往左滚动),留空则不显示",-1))]),_:1}),t(i,{label:"系统时区"},{default:o(()=>[t(n,{modelValue:u.timezone,"onUpdate:modelValue":e[4]||(e[4]=a=>u.timezone=a),placeholder:"Asia/Shanghai",style:{"max-width":"300px"}},null,8,["modelValue"]),e[72]||(e[72]=l("div",{class:"form-tip"},"例如 Asia/Shanghai、America/New_York、UTC修改后保存配置即可生效",-1))]),_:1})]),_:1})]),_:1},512),[[G,!z.value||z.value==="sys-site"]]),D(t(C,{id:"section-sys-services"},{header:o(()=>[...e[73]||(e[73]=[l("span",null,"🔗 外部服务 & 缓存",-1)])]),default:o(()=>[t(_,{"label-width":"180px","label-position":"left"},{default:o(()=>{var a,c,w,B,el,ll;return[t(i,{label:"PanSou 搜索引擎地址"},{default:o(()=>{var U,tl;return[l("div",Tt,[t(n,{modelValue:u.pansou_url,"onUpdate:modelValue":e[5]||(e[5]=be=>u.pansou_url=be),placeholder:"http://pansou:8888",style:{"max-width":"360px"}},null,8,["modelValue"]),t(r,{type:"primary",loading:de.value,onClick:Tl,size:"default",style:{width:"100px"}},{default:o(()=>[d(b(de.value?"测试中...":"验证连接"),1)]),_:1},8,["loading"]),t(r,{type:"warning",loading:fe.value,onClick:jl,size:"default",style:{width:"130px"},disabled:!((U=I.value)!=null&&U.hasUpdate)},{default:o(()=>{var be;return[d(b(fe.value?"更新中...":(be=I.value)!=null&&be.hasUpdate?"🔄 有新版本":"无更新"),1)]}),_:1},8,["loading","disabled"]),(tl=I.value)!=null&&tl.latestVersion?(m(),g("span",It,b(I.value.latestVersion),1)):F("",!0)]),e[74]||(e[74]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},"盘搜搜索引擎的地址",-1))]}),_:1}),l("div",Ot,[l("div",$t,[l("div",{class:ee(["db-stat-value",((a=I.value)==null?void 0:a.status)==="connected"?"text-success":"text-warning"])},b(((c=I.value)==null?void 0:c.status)==="connected"?"已连接":I.value?"未连接":"-"),3),e[75]||(e[75]=l("div",{class:"db-stat-label"},"PanSou 状态",-1))]),l("div",At,[l("div",Rt,b(((w=I.value)==null?void 0:w.channelCount)??"-"),1),e[76]||(e[76]=l("div",{class:"db-stat-label"},"频道数量",-1))]),l("div",Bt,[l("div",Et,b(((B=I.value)==null?void 0:B.pluginCount)??"-"),1),e[77]||(e[77]=l("div",{class:"db-stat-label"},"插件数量",-1))]),l("div",Lt,[l("div",Ft,b(((el=I.value)==null?void 0:el.diskCount)??"-"),1),e[78]||(e[78]=l("div",{class:"db-stat-label"},"网盘数量",-1))]),l("div",Nt,[l("div",Dt,b(((ll=I.value)==null?void 0:ll.version)||"-"),1),e[79]||(e[79]=l("div",{class:"db-stat-label"},"版本",-1))])]),t(i,{label:"PanSou Web 端访问"},{default:o(()=>[t(k,{modelValue:Be.value,"onUpdate:modelValue":e[6]||(e[6]=U=>Be.value=U),"active-text":"启用","inactive-text":"关闭"},null,8,["modelValue"]),e[80]||(e[80]=l("div",{class:"form-tip",style:{"margin-left":"12px"}},[d(" 开启后可通过 "),l("code",null,"/pansou/"),d(" 路径访问 PanSou 搜索引擎管理界面 ")],-1))]),_:1}),t(i,{label:"启用代理"},{default:o(()=>[t(k,{modelValue:he.value,"onUpdate:modelValue":e[7]||(e[7]=U=>he.value=U),"active-text":"启用","inactive-text":"关闭"},null,8,["modelValue"]),e[81]||(e[81]=l("div",{class:"form-tip",style:{"margin-left":"8px"}}," 仅 PanSou 需要此配置,开启后搜索请求将经过代理转发 ",-1))]),_:1}),he.value?(m(),V(i,{key:0,label:"代理地址",style:{"margin-top":"-12px"}},{default:o(()=>[l("div",Gt,[t(n,{modelValue:u.search_proxy_url,"onUpdate:modelValue":e[8]||(e[8]=U=>u.search_proxy_url=U),placeholder:"http://127.0.0.1:7890",style:{"max-width":"360px"}},null,8,["modelValue"]),t(r,{type:"primary",loading:pe.value,onClick:$l,size:"default",style:{width:"100px"}},{default:o(()=>[d(b(pe.value?"测试中...":"测试代理"),1)]),_:1},8,["loading"])]),e[82]||(e[82]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},"HTTP 或 SOCKS5 协议地址",-1))]),_:1})):F("",!0),t(i,{label:"视频解析服务地址"},{default:o(()=>[l("div",Kt,[t(n,{modelValue:u.video_parser_url,"onUpdate:modelValue":e[9]||(e[9]=U=>u.video_parser_url=U),placeholder:"http://video-parser:3001",style:{"max-width":"360px"}},null,8,["modelValue"]),t(r,{type:"primary",loading:re.value,onClick:Il,size:"default",style:{width:"100px"}},{default:o(()=>[d(b(re.value?"测试中...":"验证连接"),1)]),_:1},8,["loading"])]),e[83]||(e[83]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},"视频链接解析服务地址",-1))]),_:1}),t(i,{label:"TMDB 读取令牌"},{default:o(()=>[l("div",Wt,[t(n,{modelValue:u.tmdb_api_token,"onUpdate:modelValue":e[10]||(e[10]=U=>u.tmdb_api_token=U),type:"password","show-password":"",placeholder:"输入 TMDB API 读取令牌Bearer Token",style:{"max-width":"360px"}},null,8,["modelValue"]),t(r,{type:"primary",loading:ue.value,onClick:Ol,size:"default",style:{width:"100px"}},{default:o(()=>[d(b(ue.value?"测试中...":"验证令牌"),1)]),_:1},8,["loading"])]),e[84]||(e[84]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},[d(" 用于搜索 TMDB 获取评分、导演、演员等完整内容信息。 "),l("a",{href:"https://www.themoviedb.org/settings/api",target:"_blank",rel:"noopener",style:{color:"var(--primary-color)"}},"获取令牌 →")],-1))]),_:1}),t(i,{label:"IP 归属地查询"},{default:o(()=>[l("div",qt,[t(_e,{modelValue:u.ip_geo_provider,"onUpdate:modelValue":e[11]||(e[11]=U=>u.ip_geo_provider=U),placeholder:"选择接口",style:{"max-width":"260px"}},{default:o(()=>[t(ge,{label:"接口盒子 (apihz.cn)",value:"apihz"})]),_:1},8,["modelValue"]),u.ip_geo_provider==="apihz"?(m(),g(T,{key:0},[t(n,{modelValue:u.ip_geo_api_id,"onUpdate:modelValue":e[12]||(e[12]=U=>u.ip_geo_api_id=U),placeholder:"API ID10014356",style:{"max-width":"360px"}},null,8,["modelValue"]),t(n,{modelValue:u.ip_geo_api_key,"onUpdate:modelValue":e[13]||(e[13]=U=>u.ip_geo_api_key=U),placeholder:"API Key",type:"password","show-password":"",style:{"max-width":"360px"}},null,8,["modelValue"])],64)):F("",!0),t(r,{type:"primary",loading:me.value,onClick:Al,size:"small",style:{width:"100px"}},{default:o(()=>[d(b(me.value?"测试中...":"验证接口"),1)]),_:1},8,["loading"]),e[85]||(e[85]=l("div",{class:"form-tip"},"用于查询用户 IP 归属地(搜索/转存记录中显示)。留空则不做 IP 归属地查询。",-1))])]),_:1}),t(N,{"content-position":"left"},{default:o(()=>[...e[86]||(e[86]=[d("Redis 缓存",-1)])]),_:1}),t(i,{label:"Redis 连接地址"},{default:o(()=>[l("div",Mt,[t(n,{modelValue:u.redis_url,"onUpdate:modelValue":e[14]||(e[14]=U=>u.redis_url=U),placeholder:"redis://:***@172.17.0.1:6379",style:{"max-width":"360px"}},null,8,["modelValue"]),t(r,{type:"primary",size:"default",loading:ie.value,onClick:zl,style:{width:"100px"}},{default:o(()=>[d(b(ie.value?"测试中...":"验证连接"),1)]),_:1},8,["loading"])]),e[87]||(e[87]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},[d(" Redis 用于缓存搜索验证结果,提升响应速度。"),l("br"),l("strong",null,"带密码格式:"),l("code",null,"redis://:你的密码@地址:6379"),l("br"),d(" 修改后保存配置即可生效,无需重启。"),l("strong",null,"切换 Redis 只会清空缓存,不影响任何重要数据。")],-1))]),_:1})]}),_:1}),$e.value?(m(),g("div",Ht,[t(x,{class:"is-loading",size:20},{default:o(()=>[t(sl(rt))]),_:1}),e[88]||(e[88]=l("span",{style:{"margin-left":"8px",color:"#909399"}},"加载中...",-1))])):(m(),g("div",Jt,[l("div",Yt,[l("div",{class:ee(["db-stat-value",E.redis_status==="已连接"?"text-success":"text-warning"])},b(E.redis_status),3),e[89]||(e[89]=l("div",{class:"db-stat-label"},"Redis 状态",-1))]),l("div",Qt,[l("div",Xt,b(E.db_size),1),e[90]||(e[90]=l("div",{class:"db-stat-label"},"数据库大小",-1))]),l("div",Zt,[l("div",es,b(E.save_records),1),e[91]||(e[91]=l("div",{class:"db-stat-label"},"转存记录",-1))]),l("div",ls,[l("div",ts,b(E.search_stats),1),e[92]||(e[92]=l("div",{class:"db-stat-label"},"搜索记录",-1))]),l("div",ss,[l("div",as,b(E.cloud_configs),1),e[93]||(e[93]=l("div",{class:"db-stat-label"},"网盘配置",-1))]),l("div",os,[l("div",ns,b(E.content_cache),1),e[94]||(e[94]=l("div",{class:"db-stat-label"},"内容缓存",-1))])]))]),_:1},512),[[G,!z.value||z.value==="sys-services"]]),D(t(C,{id:"section-sys-strategy"},{header:o(()=>[...e[95]||(e[95]=[l("span",null,"🔧 性能配置",-1)])]),default:o(()=>[l("div",is,[t(N,{"content-position":"left"},{default:o(()=>[...e[96]||(e[96]=[d("搜索结果返回方式",-1)])]),_:1}),l("div",ds,[l("div",rs,[e[97]||(e[97]=l("span",{class:"field-label"},"开启资源链接有效性监测",-1)),t(k,{modelValue:u.link_validation_enabled,"onUpdate:modelValue":e[15]||(e[15]=a=>u.link_validation_enabled=a),"active-value":"true","inactive-value":"false","active-text":"开启","inactive-text":"关闭"},null,8,["modelValue"])]),e[98]||(e[98]=l("div",{class:"field-desc"},"开启后搜索时会自动检测链接是否有效,过滤失效链接。关闭则直接返回所有结果(更快)",-1))]),l("div",us,[l("div",ps,[e[101]||(e[101]=l("span",{class:"field-label"},"搜索结果方式",-1)),t(lt,{modelValue:u.search_strategy,"onUpdate:modelValue":e[16]||(e[16]=a=>u.search_strategy=a)},{default:o(()=>[t(Qe,{value:"wait_all"},{default:o(()=>[...e[99]||(e[99]=[d("等待全部结果后展示",-1)])]),_:1}),t(Qe,{value:"stream_channel"},{default:o(()=>[...e[100]||(e[100]=[d("频道结果逐步展示",-1)])]),_:1})]),_:1},8,["modelValue"])]),e[102]||(e[102]=l("div",{class:"field-desc"},"逐步展示会分频道并发请求并优先展示先返回的频道;该模式下频道顺序按返回先后,不按配置顺序。",-1))]),t(N,{"content-position":"left"},{default:o(()=>[...e[103]||(e[103]=[d("搜索策略",-1)])]),_:1}),l("div",ms,[l("div",fs,[l("div",vs,[e[104]||(e[104]=l("span",{class:"field-label"},"使用所有频道参与搜索",-1)),t(k,{modelValue:Ee.value,"onUpdate:modelValue":e[17]||(e[17]=a=>Ee.value=a),"active-text":"开启","inactive-text":"关闭"},null,8,["modelValue"])]),e[105]||(e[105]=l("div",{class:"field-desc"},"包含未启用频道,命中更广但请求压力更高。",-1))]),l("div",cs,[l("div",ys,[e[106]||(e[106]=l("span",{class:"field-label"},"每类网盘有效结果数",-1)),t(J,{modelValue:u.search_result_limit,"onUpdate:modelValue":e[18]||(e[18]=a=>u.search_result_limit=a),min:1,max:100},null,8,["modelValue"])]),e[107]||(e[107]=l("div",{class:"field-desc"},"每个网盘类型最多展示的有效链接数量",-1))]),l("div",gs,[l("div",_s,[e[108]||(e[108]=l("span",{class:"field-label"},"验证并发数",-1)),t(J,{modelValue:u.validation_concurrency,"onUpdate:modelValue":e[19]||(e[19]=a=>u.validation_concurrency=a),min:1,max:50},null,8,["modelValue"])]),e[109]||(e[109]=l("div",{class:"field-desc"},"同时验证的链接数量",-1))]),l("div",bs,[l("div",xs,[e[110]||(e[110]=l("span",{class:"field-label"},"有效链接缓存 (s)",-1)),t(J,{modelValue:u.validation_cache_ttl_valid,"onUpdate:modelValue":e[20]||(e[20]=a=>u.validation_cache_ttl_valid=a),min:60,max:86400,step:60},null,8,["modelValue"])]),e[111]||(e[111]=l("div",{class:"field-desc"},"有效验证结果的缓存时间",-1))]),l("div",ws,[l("div",ks,[e[112]||(e[112]=l("span",{class:"field-label"},"无效链接缓存 (s)",-1)),t(J,{modelValue:u.validation_cache_ttl_invalid,"onUpdate:modelValue":e[21]||(e[21]=a=>u.validation_cache_ttl_invalid=a),min:60,max:86400,step:60},null,8,["modelValue"])]),e[113]||(e[113]=l("div",{class:"field-desc"},"无效验证结果的缓存时间",-1))]),l("div",Vs,[l("div",hs,[e[114]||(e[114]=l("span",{class:"field-label"},"验证超时 (ms)",-1)),t(J,{modelValue:u.validation_timeout,"onUpdate:modelValue":e[22]||(e[22]=a=>u.validation_timeout=a),min:1e3,max:3e4,step:500},null,8,["modelValue"])]),e[115]||(e[115]=l("div",{class:"field-desc"},"单个链接验证超时毫秒数",-1))])]),t(N,{"content-position":"left"},{default:o(()=>[...e[116]||(e[116]=[d("链接检测配置",-1)])]),_:1}),l("div",Ps,[e[118]||(e[118]=l("div",{class:"field-label-row"},[l("span",{class:"field-label"},"搜索标题过滤规则")],-1)),l("div",Cs,[t(n,{modelValue:le.value,"onUpdate:modelValue":e[23]||(e[23]=a=>le.value=a),type:"textarea",rows:1,placeholder:"每行一条规则,回车分隔",style:{"max-width":"420px","font-family":"monospace","font-size":"12px"}},null,8,["modelValue"]),t(r,{type:"primary",onClick:Rl,disabled:!le.value.trim()},{default:o(()=>[...e[117]||(e[117]=[d(" 确认添加 ",-1)])]),_:1},8,["disabled"])]),K.value.length>0?(m(),g("div",Us,[(m(!0),g(T,null,$(K.value,(a,c)=>(m(),V(S,{key:c,closable:"",type:El(a),"disable-transitions":!1,onClose:w=>Bl(c)},{default:o(()=>[d(b(a),1)]),_:2},1032,["type","onClose"]))),128))])):(m(),g("div",Ss,"暂无过滤规则")),e[119]||(e[119]=l("div",{class:"filter-rule-help"},[l("div",{class:"help-title"},"📖 规则说明"),l("div",{class:"help-row"},[l("code",null,"# 注释内容"),d(" — "),l("code",null,"#"),d(" 后必须跟"),l("strong",null,"空格"),d("才会被识别为注释,单纯的 "),l("code",null,"#动漫"),d(" 会被当作要移除的文本")]),l("div",{class:"help-row"},[l("code",null,"/正则表达式/标志"),d(" — 正则匹配,匹配到的内容会被删除。如 "),l("code",null,"/^\\\\d+[、,.\\\\s]/"),d(" 去掉开头的序号")]),l("div",{class:"help-row"},[l("code",null,"纯文本"),d(" — 直接写要移除的文字(支持 emoji凡是标题中含有的都会被删除")])],-1))]),l("div",zs,[e[121]||(e[121]=l("div",{class:"field-label-row"},[l("span",{class:"field-label"},"失效关键词")],-1)),l("div",js,[t(n,{modelValue:te.value,"onUpdate:modelValue":e[24]||(e[24]=a=>te.value=a),type:"textarea",rows:1,placeholder:"每行一个关键词,回车分隔",style:{"max-width":"420px","font-family":"monospace","font-size":"12px"}},null,8,["modelValue"]),t(r,{type:"danger",onClick:Ll,disabled:!te.value.trim()},{default:o(()=>[...e[120]||(e[120]=[d(" 确认添加 ",-1)])]),_:1},8,["disabled"])]),e[122]||(e[122]=l("div",{class:"field-desc"},"自定义失效关键词PanSou 检测 summary 或 HTML 页面内容包含即判为失效。",-1)),W.value.length>0?(m(),g("div",Ts,[(m(!0),g(T,null,$(W.value,(a,c)=>(m(),V(S,{key:c,closable:"",type:"danger","disable-transitions":!1,onClose:w=>Fl(c)},{default:o(()=>[d(b(a),1)]),_:2},1032,["onClose"]))),128))])):(m(),g("div",Is,"暂无失效关键词,所有链接将默认判为有效"))]),t(N,{"content-position":"left"},{default:o(()=>[...e[123]||(e[123]=[d("转存文件清理",-1)])]),_:1}),l("div",Os,[e[125]||(e[125]=l("div",{class:"field-label-row"},[l("span",{class:"field-label"},"广告关键词")],-1)),l("div",$s,[t(n,{modelValue:se.value,"onUpdate:modelValue":e[25]||(e[25]=a=>se.value=a),type:"textarea",rows:1,placeholder:"每行一个关键词,回车分隔",style:{"max-width":"420px","font-family":"monospace","font-size":"12px"}},null,8,["modelValue"]),t(r,{type:"danger",onClick:Nl,disabled:!se.value.trim()},{default:o(()=>[...e[124]||(e[124]=[d(" 确认添加 ",-1)])]),_:1},8,["disabled"])]),e[126]||(e[126]=l("div",{class:"field-desc"},"夸克转存完成后自动删除文件名/文件夹名含这些关键词的内容(防广告病毒)",-1)),q.value.length>0?(m(),g("div",As,[(m(!0),g(T,null,$(q.value,(a,c)=>(m(),V(S,{key:c,closable:"",type:"warning","disable-transitions":!1,onClose:w=>Dl(c)},{default:o(()=>[d(b(a),1)]),_:2},1032,["onClose"]))),128))])):(m(),g("div",Rs,"暂未配置广告关键词,不会进行广告清理"))]),l("div",Bs,[e[128]||(e[128]=l("div",{class:"field-label-row"},[l("span",{class:"field-label"},"警示文件夹名")],-1)),l("div",Es,[t(n,{modelValue:ae.value,"onUpdate:modelValue":e[26]||(e[26]=a=>ae.value=a),type:"textarea",rows:1,placeholder:"每行一个文件夹名,回车分隔",style:{"max-width":"420px","font-family":"monospace","font-size":"12px"}},null,8,["modelValue"]),t(r,{type:"primary",onClick:Gl,disabled:!ae.value.trim()},{default:o(()=>[...e[127]||(e[127]=[d(" 确认添加 ",-1)])]),_:1},8,["disabled"])]),e[129]||(e[129]=l("div",{class:"field-desc"},"夸克转存完成后在网盘根目录自动创建这些警示文件夹(自动加上 ⚠️ 前缀)",-1)),M.value.length>0?(m(),g("div",Ls,[(m(!0),g(T,null,$(M.value,(a,c)=>(m(),V(S,{key:c,closable:"",type:"info","disable-transitions":!1,onClose:w=>Kl(c)},{default:o(()=>[d(b(a),1)]),_:2},1032,["onClose"]))),128))])):(m(),g("div",Fs,"暂未配置警示文件夹"))]),l("div",Ns,[e[131]||(e[131]=l("div",{class:"field-label-row"},[l("span",{class:"field-label"},"可疑文件后缀")],-1)),l("div",Ds,[t(n,{modelValue:oe.value,"onUpdate:modelValue":e[27]||(e[27]=a=>oe.value=a),type:"textarea",rows:1,placeholder:"每行一个后缀,不要带点号,回车分隔",style:{"max-width":"420px","font-family":"monospace","font-size":"12px"}},null,8,["modelValue"]),t(r,{type:"danger",onClick:Wl,disabled:!oe.value.trim()},{default:o(()=>[...e[130]||(e[130]=[d(" 确认添加 ",-1)])]),_:1},8,["disabled"])]),e[132]||(e[132]=l("div",{class:"field-desc"},"夸克转存完成后自动删除后缀匹配的文件(防病毒,如 bat、exe、scr 等)",-1)),H.value.length>0?(m(),g("div",Gs,[(m(!0),g(T,null,$(H.value,(a,c)=>(m(),V(S,{key:c,closable:"",type:"danger","disable-transitions":!1,onClose:w=>ql(c)},{default:o(()=>[d("."+b(a),1)]),_:2},1032,["onClose"]))),128))])):(m(),g("div",Ks,"暂无配置使用默认列表bat、exe、vbs、scr、cmd、com、pif、js、jar、msi、reg、inf、ps1"))])])]),_:1},512),[[G,!z.value||z.value==="sys-strategy"]]),D(t(C,{id:"section-sys-password"},{header:o(()=>[...e[133]||(e[133]=[l("span",null,"🔑 修改管理员密码",-1)])]),default:o(()=>[t(_,{ref_key:"passwordFormRef",ref:Oe,model:O,rules:Sl,"label-width":"120px","label-position":"left"},{default:o(()=>[t(i,{label:"原密码",prop:"oldPassword"},{default:o(()=>[t(n,{modelValue:O.oldPassword,"onUpdate:modelValue":e[28]||(e[28]=a=>O.oldPassword=a),type:"password","show-password":"",placeholder:"输入原密码",style:{"max-width":"300px"}},null,8,["modelValue"])]),_:1}),t(i,{label:"新密码",prop:"newPassword"},{default:o(()=>[t(n,{modelValue:O.newPassword,"onUpdate:modelValue":e[29]||(e[29]=a=>O.newPassword=a),type:"password","show-password":"",placeholder:"输入新密码至少6位",style:{"max-width":"300px"}},null,8,["modelValue"])]),_:1}),t(i,{label:"确认新密码",prop:"confirmPassword"},{default:o(()=>[t(n,{modelValue:O.confirmPassword,"onUpdate:modelValue":e[30]||(e[30]=a=>O.confirmPassword=a),type:"password","show-password":"",placeholder:"再次输入新密码",style:{"max-width":"300px"}},null,8,["modelValue"])]),_:1}),t(i,null,{default:o(()=>[t(r,{type:"primary",loading:ke.value,onClick:Ql},{default:o(()=>[...e[134]||(e[134]=[d("修改密码",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])]),_:1},512),[[G,!z.value||z.value==="sys-password"]]),D(t(C,{id:"section-sys-notify"},{header:o(()=>[...e[135]||(e[135]=[l("div",{style:{display:"flex","align-items":"center","justify-content":"space-between"}},[l("span",null,"📬 消息推送")],-1)])]),default:o(()=>[t(st,{"model-value":["global"]},{default:o(()=>[t(tt,{title:"全局推送(管理员兜底)",name:"global"},{default:o(()=>[l("div",Ws,[t(_,{"label-width":"140px","label-position":"left"},{default:o(()=>[l("div",qs,[(m(!0),g(T,null,$(R.value,(a,c)=>(m(),g("div",{key:c,style:{border:"1px solid var(--el-border-color-light)","border-radius":"6px",padding:"8px 12px"}},[l("div",Ms,[t(k,{modelValue:v.channels[c]._enabled,"onUpdate:modelValue":w=>v.channels[c]._enabled=w,size:"small"},null,8,["modelValue","onUpdate:modelValue"]),l("strong",null,b(a.label),1),v.channels[c]._enabled?(m(),V(r,{key:0,size:"small",text:"",type:"primary",onClick:w=>Ul(c),loading:v.channels[c]._testing},{default:o(()=>[...e[136]||(e[136]=[d("测试",-1)])]),_:1},8,["onClick","loading"])):F("",!0)]),v.channels[c]._enabled?(m(),g("div",Hs,[(m(!0),g(T,null,$(a.params,w=>(m(),V(i,{key:w.key,label:w.label,style:{"margin-bottom":"6px"}},{default:o(()=>[w.type==="password"?(m(),V(n,{key:0,modelValue:v.channels[c][w.key],"onUpdate:modelValue":B=>v.channels[c][w.key]=B,type:"password","show-password":"",placeholder:w.placeholder||"",style:{"max-width":"360px"}},null,8,["modelValue","onUpdate:modelValue","placeholder"])):w.type==="switch"?(m(),V(k,{key:1,modelValue:v.channels[c][w.key],"onUpdate:modelValue":B=>v.channels[c][w.key]=B},null,8,["modelValue","onUpdate:modelValue"])):w.type==="number"?(m(),V(J,{key:2,modelValue:v.channels[c][w.key],"onUpdate:modelValue":B=>v.channels[c][w.key]=B,min:1,max:10,style:{"max-width":"160px"}},null,8,["modelValue","onUpdate:modelValue"])):(m(),V(n,{key:3,modelValue:v.channels[c][w.key],"onUpdate:modelValue":B=>v.channels[c][w.key]=B,placeholder:w.placeholder||"",style:{"max-width":"360px"}},null,8,["modelValue","onUpdate:modelValue","placeholder"]))]),_:2},1032,["label"]))),128))])):F("",!0)]))),128))]),t(N,{"content-position":"left"},{default:o(()=>[...e[137]||(e[137]=[d("全局事件开关",-1)])]),_:1}),l("div",Js,[l("div",{class:ee(["event-card",{active:v.events.on_save_success}]),style:{padding:"10px 14px","border-radius":"8px",border:"1px solid var(--el-border-color-light)",transition:"all .2s"}},[l("div",Ys,[e[138]||(e[138]=l("span",{style:{display:"flex","align-items":"center",gap:"6px","font-size":"14px","font-weight":"500"}},[l("span",null,"✅"),d(" 转存成功 ")],-1)),t(k,{modelValue:v.events.on_save_success,"onUpdate:modelValue":e[31]||(e[31]=a=>v.events.on_save_success=a),size:"small"},null,8,["modelValue"])]),l("div",Qs,[t(r,{size:"small",text:"",type:"primary",onClick:e[32]||(e[32]=a=>ye("on_save_success"))},{default:o(()=>[...e[139]||(e[139]=[d("✏️ 编辑模板",-1)])]),_:1})])],2),l("div",{class:ee(["event-card",{active:v.events.on_save_fail}]),style:{padding:"10px 14px","border-radius":"8px",border:"1px solid var(--el-border-color-light)",transition:"all .2s"}},[l("div",Xs,[e[140]||(e[140]=l("span",{style:{display:"flex","align-items":"center",gap:"6px","font-size":"14px","font-weight":"500"}},[l("span",null,"⚠️"),d(" 转存失败 ")],-1)),t(k,{modelValue:v.events.on_save_fail,"onUpdate:modelValue":e[33]||(e[33]=a=>v.events.on_save_fail=a),size:"small"},null,8,["modelValue"])]),l("div",Zs,[t(r,{size:"small",text:"",type:"primary",onClick:e[34]||(e[34]=a=>ye("on_save_fail"))},{default:o(()=>[...e[141]||(e[141]=[d("✏️ 编辑模板",-1)])]),_:1})])],2),l("div",{class:ee(["event-card",{active:v.events.on_cookie_expire}]),style:{padding:"10px 14px","border-radius":"8px",border:"1px solid var(--el-border-color-light)",transition:"all .2s"}},[l("div",ea,[e[142]||(e[142]=l("span",{style:{display:"flex","align-items":"center",gap:"6px","font-size":"14px","font-weight":"500"}},[l("span",null,"🍪"),d(" Cookie过期 ")],-1)),t(k,{modelValue:v.events.on_cookie_expire,"onUpdate:modelValue":e[35]||(e[35]=a=>v.events.on_cookie_expire=a),size:"small"},null,8,["modelValue"])]),l("div",la,[t(r,{size:"small",text:"",type:"primary",onClick:e[36]||(e[36]=a=>ye("on_cookie_expire"))},{default:o(()=>[...e[143]||(e[143]=[d("✏️ 编辑模板",-1)])]),_:1})])],2),l("div",{class:ee(["event-card",{active:v.events.on_cleanup}]),style:{padding:"10px 14px","border-radius":"8px",border:"1px solid var(--el-border-color-light)",transition:"all .2s"}},[l("div",ta,[e[144]||(e[144]=l("span",{style:{display:"flex","align-items":"center",gap:"6px","font-size":"14px","font-weight":"500"}},[l("span",null,"🧹"),d(" 清理完成 ")],-1)),t(k,{modelValue:v.events.on_cleanup,"onUpdate:modelValue":e[37]||(e[37]=a=>v.events.on_cleanup=a),size:"small"},null,8,["modelValue"])]),l("div",sa,[t(r,{size:"small",text:"",type:"primary",onClick:e[38]||(e[38]=a=>ye("on_cleanup"))},{default:o(()=>[...e[145]||(e[145]=[d("✏️ 编辑模板",-1)])]),_:1})])],2)]),e[146]||(e[146]=l("div",{class:"form-tip",style:{"margin-top":"8px"}},"全局推送作为兜底通道。设置了推送用户的网盘配置走用户推送,未设置的走全局推送。",-1))]),_:1})])]),_:1})]),_:1}),e[156]||(e[156]=d()),t(N,{"content-position":"left"},{default:o(()=>[...e[147]||(e[147]=[d("添加推送用户",-1)])]),_:1}),l("div",aa,[l("div",oa,[t(_e,{modelValue:f.account,"onUpdate:modelValue":e[39]||(e[39]=a=>f.account=a),filterable:"","allow-create":"",clearable:"",placeholder:"选择推广账户",style:{width:"200px"}},{default:o(()=>[(m(!0),g(T,null,$(Ge.value,a=>(m(),V(ge,{key:a,label:a,value:a},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),t(_e,{modelValue:f.channel,"onUpdate:modelValue":e[40]||(e[40]=a=>f.channel=a),clearable:"",placeholder:"选择消息频道",style:{width:"220px"},onChange:fl},{default:o(()=>[(m(!0),g(T,null,$(vl.value,(a,c)=>(m(),V(ge,{key:c,label:a.label,value:c},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),f.channel&&R.value[f.channel]?(m(!0),g(T,{key:0},$(xl(f.channel),a=>(m(),g("div",{key:a.key,style:{display:"inline-flex","align-items":"center",gap:"4px"}},[l("span",na,b(a.label)+":",1),a.type==="password"?(m(),V(n,{key:0,modelValue:f.channelParams[a.key],"onUpdate:modelValue":c=>f.channelParams[a.key]=c,type:"password","show-password":"",placeholder:a.placeholder||a.label,style:{width:"200px"},size:"small"},null,8,["modelValue","onUpdate:modelValue","placeholder"])):(m(),V(n,{key:1,modelValue:f.channelParams[a.key],"onUpdate:modelValue":c=>f.channelParams[a.key]=c,placeholder:a.placeholder||a.label,style:{width:"200px"},size:"small"},null,8,["modelValue","onUpdate:modelValue","placeholder"]))]))),128)):F("",!0),l("div",ia,[t(k,{modelValue:f.events.on_save_success,"onUpdate:modelValue":e[41]||(e[41]=a=>f.events.on_save_success=a),"active-text":"转存成功"},null,8,["modelValue"]),t(k,{modelValue:f.events.on_save_fail,"onUpdate:modelValue":e[42]||(e[42]=a=>f.events.on_save_fail=a),"active-text":"转存失败"},null,8,["modelValue"]),t(k,{modelValue:f.events.on_cookie_expire,"onUpdate:modelValue":e[43]||(e[43]=a=>f.events.on_cookie_expire=a),"active-text":"Cookie过期"},null,8,["modelValue"]),t(k,{modelValue:f.events.on_cleanup,"onUpdate:modelValue":e[44]||(e[44]=a=>f.events.on_cleanup=a),"active-text":"清理完成"},null,8,["modelValue"])]),t(r,{type:"primary",size:"small",loading:Se.value,onClick:gl},{default:o(()=>[d(b(f.id?"更新":"确认添加"),1)]),_:1},8,["loading"]),f.id?(m(),V(r,{key:1,size:"small",onClick:yl},{default:o(()=>[...e[148]||(e[148]=[d("取消编辑",-1)])]),_:1})):F("",!0)])]),t(N,{"content-position":"left"},{default:o(()=>[...e[149]||(e[149]=[d("推送用户列表",-1)])]),_:1}),t(Ze,{data:De.value,stripe:"",style:{width:"100%"},"empty-text":"暂无推送用户"},{default:o(()=>[t(A,{prop:"account",label:"推广账号","min-width":"140"}),t(A,{label:"转存成功",width:"90",align:"center"},{default:o(({row:a})=>[ve(a,"on_save_success")?(m(),V(S,{key:0,type:"success",size:"small"},{default:o(()=>[...e[150]||(e[150]=[d("✔",-1)])]),_:1})):(m(),g("span",da,"—"))]),_:1}),t(A,{label:"转存失败",width:"90",align:"center"},{default:o(({row:a})=>[ve(a,"on_save_fail")?(m(),V(S,{key:0,type:"success",size:"small"},{default:o(()=>[...e[151]||(e[151]=[d("✔",-1)])]),_:1})):(m(),g("span",ra,"—"))]),_:1}),t(A,{label:"Cookie过期",width:"90",align:"center"},{default:o(({row:a})=>[ve(a,"on_cookie_expire")?(m(),V(S,{key:0,type:"success",size:"small"},{default:o(()=>[...e[152]||(e[152]=[d("✔",-1)])]),_:1})):(m(),g("span",ua,"—"))]),_:1}),t(A,{label:"清理完成",width:"90",align:"center"},{default:o(({row:a})=>[ve(a,"on_cleanup")?(m(),V(S,{key:0,type:"success",size:"small"},{default:o(()=>[...e[153]||(e[153]=[d("✔",-1)])]),_:1})):(m(),g("span",pa,"—"))]),_:1}),t(A,{label:"消息频道","min-width":"180"},{default:o(({row:a})=>[kl(a)?(m(),g(T,{key:0},[(m(!0),g(T,null,$(Ke(a),(c,w)=>(m(),V(S,{key:w,size:"small",style:{"margin-right":"4px","margin-bottom":"2px"}},{default:o(()=>[d(b(wl(w)),1)]),_:2},1024))),128)),l("span",ma,b(Vl(a)),1)],64)):(m(),g("span",fa,"走全局推送"))]),_:1}),t(A,{label:"操作",width:"180",fixed:"right"},{default:o(({row:a})=>[t(r,{text:"",type:"primary",size:"small",onClick:c=>cl(a)},{default:o(()=>[...e[154]||(e[154]=[d("编辑",-1)])]),_:1},8,["onClick"]),t(Xe,{title:"确定删除该推送用户?",onConfirm:c=>bl(a)},{reference:o(()=>[t(r,{text:"",type:"danger",size:"small"},{default:o(()=>[...e[155]||(e[155]=[d("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:1})]),_:1},8,["data"])]),_:1},512),[[G,!z.value||z.value==="sys-notify"]]),D(t(C,{id:"section-sys-daily-report"},{header:o(()=>[l("div",va,[e[159]||(e[159]=l("span",null,"📊 每日汇报",-1)),l("div",null,[t(r,{size:"small",loading:Pe.value,onClick:ul},{default:o(()=>[...e[157]||(e[157]=[d("📋 预览",-1)])]),_:1},8,["loading"]),t(r,{size:"small",type:"primary",loading:Ce.value,onClick:pl},{default:o(()=>[...e[158]||(e[158]=[d("▶ 发送测试",-1)])]),_:1},8,["loading"])])])]),default:o(()=>[t(_,{"label-width":"140px","label-position":"left"},{default:o(()=>[t(i,{label:"启用每日汇报"},{default:o(()=>[t(k,{modelValue:h.enabled,"onUpdate:modelValue":e[45]||(e[45]=a=>h.enabled=a),"active-text":"每天8点自动发送"},null,8,["modelValue"])]),_:1}),t(i,{label:"发送时间"},{default:o(()=>[t(at,{modelValue:h.time,"onUpdate:modelValue":e[46]||(e[46]=a=>h.time=a),format:"HH:mm","value-format":"HH:mm",placeholder:"选择时间",disabled:!h.enabled},null,8,["modelValue","disabled"]),e[160]||(e[160]=l("div",{class:"form-tip"},"默认每天 08:00 发送前一天的汇总报告",-1))]),_:1}),t(i,{label:"报告内容"},{default:o(()=>[l("div",ca,[t(k,{modelValue:h.includeSearch,"onUpdate:modelValue":e[47]||(e[47]=a=>h.includeSearch=a),"active-text":"搜索统计",disabled:!h.enabled},null,8,["modelValue","disabled"]),t(k,{modelValue:h.includeSaves,"onUpdate:modelValue":e[48]||(e[48]=a=>h.includeSaves=a),"active-text":"转存统计",disabled:!h.enabled},null,8,["modelValue","disabled"]),t(k,{modelValue:h.includeStorage,"onUpdate:modelValue":e[49]||(e[49]=a=>h.includeStorage=a),"active-text":"网盘容量",disabled:!h.enabled},null,8,["modelValue","disabled"]),t(k,{modelValue:h.includeUsers,"onUpdate:modelValue":e[50]||(e[50]=a=>h.includeUsers=a),"active-text":"用户数",disabled:!h.enabled},null,8,["modelValue","disabled"])])]),_:1}),t(i,{label:"推送通道"},{default:o(()=>[t(_e,{modelValue:h.channels,"onUpdate:modelValue":e[51]||(e[51]=a=>h.channels=a),multiple:"",placeholder:"留空=全部全局通道",disabled:!h.enabled,style:{width:"100%","max-width":"480px"}},{default:o(()=>[(m(!0),g(T,null,$(R.value,(a,c)=>(m(),V(ge,{key:c,label:a.label,value:c},null,8,["label","value"]))),128))]),_:1},8,["modelValue","disabled"]),e[161]||(e[161]=l("div",{class:"form-tip"},"留空则发送至全部已启用的全局通道",-1))]),_:1}),t(i,{label:"上次发送"},{default:o(()=>[l("span",null,b(Ne.value||"从未发送"),1)]),_:1})]),_:1}),t(Ie,{modelValue:Ue.value,"onUpdate:modelValue":e[52]||(e[52]=a=>Ue.value=a),title:"📊 每日汇报预览",width:"600px"},{default:o(()=>[l("div",ya,b(Fe.value),1)]),_:1},8,["modelValue"])]),_:1},512),[[G,!z.value||z.value==="sys-daily-report"]]),D(t(C,{id:"section-sys-maintenance"},{header:o(()=>[...e[162]||(e[162]=[l("span",null,"🔄 系统维护",-1)])]),default:o(()=>[e[167]||(e[167]=d()),t(_,{"label-width":"180px","label-position":"left"},{default:o(()=>[t(i,{label:"自动更新镜像"},{default:o(()=>[t(k,{modelValue:Le.value,"onUpdate:modelValue":e[53]||(e[53]=a=>Le.value=a),"active-text":"启用","inactive-text":"禁用"},null,8,["modelValue"]),e[163]||(e[163]=d()),e[164]||(e[164]=l("div",{class:"form-tip"},"启用后 CloudSearch 将自动检测并更新到最新镜像版本",-1)),e[165]||(e[165]=d()),e[166]||(e[166]=l("div",{class:"form-tip",style:{color:"var(--(--el-color-warning,#e6a23c))"}}," 当前需手动在服务器执行docker-compose -f /opt/CloudSearch/docker-compose.yml pull && docker-compose -f /opt/CloudSearch/docker-compose.yml up -d ",-1))]),_:1})]),_:1})]),_:1},512),[[G,!z.value||z.value==="sys-maintenance"]]),t(Ie,{modelValue:ce.value,"onUpdate:modelValue":e[57]||(e[57]=a=>ce.value=a),title:"✏️ 编辑消息模板 — "+Cl.value,width:"560px",onClose:e[58]||(e[58]=a=>L.value="")},{footer:o(()=>[t(r,{onClick:e[56]||(e[56]=a=>ce.value=!1)},{default:o(()=>[...e[188]||(e[188]=[d("关闭",-1)])]),_:1})]),default:o(()=>[l("div",ga,[e[177]||(e[177]=d(" 可用变量:",-1)),e[178]||(e[178]=l("br",null,null,-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[168]||(e[168]=[d("{cloud_type}",-1)])]),_:1}),e[179]||(e[179]=d(" 网盘类型 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[169]||(e[169]=[d("{nickname}",-1)])]),_:1}),e[180]||(e[180]=d(" 网盘昵称 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[170]||(e[170]=[d("{file_name}",-1)])]),_:1}),e[181]||(e[181]=d(" 文件名 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[171]||(e[171]=[d("{file_size}",-1)])]),_:1}),e[182]||(e[182]=d(" 文件大小 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[172]||(e[172]=[d("{duration}",-1)])]),_:1}),e[183]||(e[183]=d(" 耗时 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[173]||(e[173]=[d("{share_url}",-1)])]),_:1}),e[184]||(e[184]=d(" 分享链接 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[174]||(e[174]=[d("{fail_count}",-1)])]),_:1}),e[185]||(e[185]=d(" 连续失败次数 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[175]||(e[175]=[d("{error_message}",-1)])]),_:1}),e[186]||(e[186]=d(" 错误信息 ",-1)),t(S,{size:"small",style:{margin:"2px"}},{default:o(()=>[...e[176]||(e[176]=[d("{freed_space}",-1)])]),_:1}),e[187]||(e[187]=d(" 释放空间 ",-1))]),L.value&&v.eventTemplates[L.value]?(m(),V(_,{key:0,"label-width":"60px"},{default:o(()=>[t(i,{label:"标题"},{default:o(()=>[t(n,{modelValue:v.eventTemplates[L.value].title,"onUpdate:modelValue":e[54]||(e[54]=a=>v.eventTemplates[L.value].title=a),placeholder:"消息标题"},null,8,["modelValue"])]),_:1}),t(i,{label:"内容"},{default:o(()=>[t(n,{modelValue:v.eventTemplates[L.value].content,"onUpdate:modelValue":e[55]||(e[55]=a=>v.eventTemplates[L.value].content=a),type:"textarea",rows:5,placeholder:"消息正文,支持 Markdown 和 {变量}"},null,8,["modelValue"])]),_:1})]),_:1})):F("",!0)]),_:1},8,["modelValue","title"]),D(t(C,{id:"section-sys-platforms"},{header:o(()=>[...e[189]||(e[189]=[l("span",null,"👥 推广平台管理",-1)])]),default:o(()=>[e[193]||(e[193]=l("div",{class:"form-tip",style:{"margin-bottom":"12px"}},"配置注册页面可选的推广平台,每个平台需提供邀请链接(将自动生成二维码供用户扫码加入)",-1)),t(Ze,{data:Re.value,stripe:"",size:"small","empty-text":"暂无推广平台"},{default:o(()=>[t(A,{prop:"name",label:"平台名称",width:"160"}),t(A,{prop:"join_url",label:"邀请链接","min-width":"300","show-overflow-tooltip":""}),t(A,{prop:"sort_order",label:"排序",width:"80",align:"center"}),t(A,{label:"操作",width:"160",align:"center"},{default:o(({row:a})=>[t(r,{size:"small",text:"",type:"primary",onClick:c=>Hl(a)},{default:o(()=>[...e[190]||(e[190]=[d("编辑",-1)])]),_:1},8,["onClick"]),t(Xe,{title:"确定删除该平台?",onConfirm:c=>Yl(a.id)},{reference:o(()=>[t(r,{size:"small",text:"",type:"danger"},{default:o(()=>[...e[191]||(e[191]=[d("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:1})]),_:1},8,["data"]),l("div",_a,[t(r,{size:"small",type:"primary",onClick:e[59]||(e[59]=a=>{X.value=!0,Z.value=null,j={name:"",join_url:"",sort_order:0}})},{default:o(()=>[...e[192]||(e[192]=[d("新增平台",-1)])]),_:1})])]),_:1},512),[[G,!z.value||z.value==="sys-platforms"]]),t(Ie,{modelValue:X.value,"onUpdate:modelValue":e[64]||(e[64]=a=>X.value=a),title:Z.value?"编辑推广平台":"新增推广平台",width:"480px"},{footer:o(()=>[t(r,{onClick:e[63]||(e[63]=a=>X.value=!1)},{default:o(()=>[...e[194]||(e[194]=[d("取消",-1)])]),_:1}),t(r,{type:"primary",loading:Ve.value,onClick:Jl},{default:o(()=>[...e[195]||(e[195]=[d("保存",-1)])]),_:1},8,["loading"])]),default:o(()=>[t(_,{model:j,"label-width":"100px"},{default:o(()=>[t(i,{label:"平台名称"},{default:o(()=>[t(n,{modelValue:j.name,"onUpdate:modelValue":e[60]||(e[60]=a=>j.name=a),placeholder:"如:蜂小推"},null,8,["modelValue"])]),_:1}),t(i,{label:"邀请链接"},{default:o(()=>[t(n,{modelValue:j.join_url,"onUpdate:modelValue":e[61]||(e[61]=a=>j.join_url=a),placeholder:"https://..."},null,8,["modelValue"])]),_:1}),t(i,{label:"排序"},{default:o(()=>[t(J,{modelValue:j.sort_order,"onUpdate:modelValue":e[62]||(e[62]=a=>j.sort_order=a),min:0,max:999},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),_:1},8,["modelValue","title"]),l("div",ba,[t(r,{type:"primary",size:"large",loading:we.value,onClick:Ml},{default:o(()=>[...e[196]||(e[196]=[d(" 保存配置 ",-1)])]),_:1},8,["loading"])])])}}}),ha=mt(xa,[["__scopeId","data-v-c8d2dca8"]]);export{ha as default};