Files
CloudSearch/source_clean/frontend-src/dist-vite/assets/SystemConfig-DFW9m6V4.js

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