Files
CloudSearch/source_clean/frontend/assets/SystemConfig-BeJ_jebO.js

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