Files
CloudSearch/source_clean/frontend.bak.old/assets/SystemConfig-DRttMhxK.js

8 lines
28 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 De,o as Fe,E as u,a as c,c as _,J as R,K as L,f as t,w as i,b as l,v as B,h as f,i as Q,j as w,l as r,k as ce,M as Ke,e as X,t as p,n as ye,y as Z,L as Ne,F as ge,r as we,u as qe,z as He}from"./index-C5b4pIQL.js";import{m as Je,p as Ye,n as Qe,v as Xe,w as O,x as Ze,y as el,z as ll,_ as sl}from"./_plugin-vue_export-helper-CzL5NdOX.js";const tl={class:"system-config"},al={class:"fallback-upload-wrap"},ol={class:"fallback-upload-row"},il={key:0,class:"fallback-preview"},nl=["src"],dl={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},rl={key:0,style:{"font-size":"11px",color:"#e6a23c","white-space":"nowrap"}},ul={class:"pansou-status-grid"},pl={class:"db-stat-item"},fl={class:"db-stat-item"},vl={class:"db-stat-value"},ml={class:"db-stat-item"},cl={class:"db-stat-value"},yl={class:"db-stat-item"},gl={class:"db-stat-value"},wl={class:"db-stat-item"},_l={class:"db-stat-value"},bl={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},xl={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},Vl={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},kl={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},Pl={style:{display:"flex",gap:"8px","align-items":"center",width:"100%"}},Sl={key:0,style:{"text-align":"center",padding:"16px"}},hl={key:1,class:"db-status-grid"},Cl={class:"db-stat-item"},Ul={class:"db-stat-item"},Tl={class:"db-stat-value"},zl={class:"db-stat-item"},Il={class:"db-stat-value"},Rl={class:"db-stat-item"},Ll={class:"db-stat-value"},Bl={class:"db-stat-item"},Ol={class:"db-stat-value"},$l={class:"db-stat-item"},El={class:"db-stat-value"},Gl={class:"strategy-section"},Al={class:"field-block"},Ml={class:"field-label-row"},Wl={class:"field-block"},jl={class:"field-label-row"},Dl={class:"strategy-grid"},Fl={class:"grid-cell"},Kl={class:"field-label-row"},Nl={class:"grid-cell"},ql={class:"field-label-row"},Hl={class:"grid-cell"},Jl={class:"field-label-row"},Yl={class:"grid-cell"},Ql={class:"field-label-row"},Xl={class:"grid-cell"},Zl={class:"field-label-row"},es={class:"grid-cell"},ls={class:"field-label-row"},ss={class:"field-block"},ts={style:{display:"flex",gap:"8px","align-items":"stretch"}},as={key:0,class:"tag-list"},os={key:1,class:"tag-empty"},is={class:"field-block"},ns={style:{display:"flex",gap:"8px","align-items":"stretch"}},ds={key:0,class:"tag-list"},rs={key:1,class:"tag-empty"},us={class:"save-bar"},ps=De({__name:"SystemConfig",props:{section:{}},setup(_e){const be=_e,xe=He(),Ve=qe(),b=B(()=>be.section||xe.query.section||""),ee=f(),N=f([]),o=Q({}),S=f([]),C=f(""),h=f([]),U=f(""),q=f(!1),H=f(!1),k=Q({db_size:"-",save_records:0,search_stats:0,cloud_configs:0,content_cache:0,redis_status:"未连接"}),le=f(!0),$=f(!1),E=f(!1),G=f(!1),A=f(!1),M=f(!1),W=f(!1),y=f(null),se=f(!0),j=f(!1),J=B({get:()=>String(o.search_proxy_enabled)==="true",set:a=>{o.search_proxy_enabled=a?"true":"false"}}),te=B({get:()=>String(o.pansou_web_enabled)==="true",set:a=>{o.pansou_web_enabled=a?"true":"false"}}),ae=B({get:()=>String(o.search_all_channels)==="true",set:a=>{o.search_all_channels=a?"true":"false"}}),oe=B({get:()=>String(o.auto_update_enabled)==="true",set:a=>{o.auto_update_enabled=a?"true":"false"}}),g=Q({oldPassword:"",newPassword:"",confirmPassword:""}),ke={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:(a,e,s)=>{e!==g.newPassword?s(new Error("两次输入的密码不一致")):s()},trigger:"blur"}]};Fe(async()=>{try{N.value=await Je();for(const s of N.value)o[s.key]=s.value;const a=String(o.title_filter_rules||"");S.value=a.split(`
`).filter(s=>s.trim());const e=String(o.link_invalid_keywords||"");h.value=e.split(`
`).filter(s=>s.trim())}catch{u.error("加载系统配置失败")}try{const a=await Ye();Object.assign(k,a)}catch{k.db_size="无法读取"}finally{le.value=!1}Y()});async function Pe(){var e,s;const a=String(o.redis_url||"redis://redis:6379");$.value=!0;try{const n=await Xe(a);n.ok?u.success(`✅ Redis 连接成功 — ${n.info}`):u.error(`❌ Redis 连接失败 — ${n.info}`)}catch(n){u.error(((s=(e=n.response)==null?void 0:e.data)==null?void 0:s.error)||"测试请求失败")}finally{$.value=!1}}async function Y(){se.value=!0;try{const a=localStorage.getItem("admin_token"),e={};a&&(e.Authorization="Bearer "+a);const s=await fetch("/api/admin/pansou-info",{headers:e});if(!s.ok)throw new Error("HTTP "+s.status);const n=await s.json();y.value=n}catch{y.value={status:"disconnected",version:"-",channelCount:0,pluginCount:0,diskCount:0}}finally{se.value=!1}}async function Se(){j.value=!0;try{const a=localStorage.getItem("admin_token"),e={"Content-Type":"application/json"};a&&(e.Authorization="Bearer "+a);const n=await(await fetch("/api/admin/update-pansou",{method:"POST",headers:e})).json();n.ok?(u.success("✅ PanSou 已更新并重启"),setTimeout(()=>Y(),3e3)):u.error("❌ 更新失败 — "+(n.error||"未知错误"))}catch(a){u.error(a.message||"更新请求失败")}finally{j.value=!1}}async function he(){var a,e;E.value=!0;try{const s=await O({type:"pansou",url:String(o.pansou_url||"")});s.ok?(Y(),u.success(`✅ PanSou 连接成功 — ${s.info}`)):u.error(`❌ PanSou 连接失败 — ${s.info}`)}catch(s){u.error(((e=(a=s.response)==null?void 0:a.data)==null?void 0:e.error)||"测试请求失败")}finally{E.value=!1}}async function Ce(){var a,e;G.value=!0;try{const s=await O({type:"video_parser",url:String(o.video_parser_url||"")});s.ok?u.success(`✅ 视频解析服务连接成功 — ${s.info}`):u.error(`❌ 视频解析服务连接失败 — ${s.info}`)}catch(s){u.error(((e=(a=s.response)==null?void 0:a.data)==null?void 0:e.error)||"测试请求失败")}finally{G.value=!1}}async function Ue(){var a,e;A.value=!0;try{const s=await O({type:"tmdb",token:String(o.tmdb_api_token||"")});s.ok?u.success(`✅ TMDB 令牌有效 — ${s.info}`):u.error(`❌ TMDB 连接失败 — ${s.info}`)}catch(s){u.error(((e=(a=s.response)==null?void 0:a.data)==null?void 0:e.error)||"测试请求失败")}finally{A.value=!1}}async function Te(){var a,e;M.value=!0;try{const s=await O({type:"proxy",url:String(o.search_proxy_url||"")});s.ok?u.success(`✅ 搜索代理可用 — ${s.info}`):u.error(`❌ 搜索代理不可用 — ${s.info}`)}catch(s){u.error(((e=(a=s.response)==null?void 0:a.data)==null?void 0:e.error)||"测试请求失败")}finally{M.value=!1}}async function ze(){var a,e;W.value=!0;try{const s=String(o.ip_geo_api_url||"");if(!s){u.warning("请先输入 IP 归属地查询 API 地址");return}const n=await O({type:"ip_geo",url:s});n.ok?u.success("✅ IP 归属地接口可用 — "+n.info):u.error("❌ IP 归属地接口不可用 — "+n.info)}catch(s){u.error(((e=(a=s.response)==null?void 0:a.data)==null?void 0:e.error)||"测试请求失败")}finally{W.value=!1}}function Ie(){const a=C.value.trim();if(!a)return;const e=a.split(`
`).map(n=>n.trim()).filter(n=>n);let s=0;for(const n of e)S.value.includes(n)||(S.value.push(n),s++);C.value="",ie(),s>0?u.success(`已添加 ${s} 条规则`):u.info("所有规则已存在")}function Re(a){S.value.splice(a,1),ie()}function Le(a){return a.startsWith("#")?"info":a.startsWith("/")&&(a.endsWith("/")||a.endsWith("/g")||a.endsWith("/i")||a.endsWith("/gi"))?"warning":""}function ie(){o.title_filter_rules=S.value.join(`
`)}function Be(){const a=U.value.trim();if(!a)return;const e=a.split(`
`).map(n=>n.trim()).filter(n=>n);let s=0;for(const n of e)h.value.includes(n)||(h.value.push(n),s++);U.value="",ne(),s>0?u.success(`已添加 ${s} 个关键词`):u.info("所有关键词已存在")}function Oe(a){h.value.splice(a,1),ne()}function ne(){o.link_invalid_keywords=h.value.join(`
`)}function $e(){localStorage.removeItem("admin_token"),Ve.push("/admin/login")}async function Ee(){var a,e;q.value=!0;try{const s=N.value.map(n=>({key:n.key,value:String(o[n.key]??n.value)}));await Qe(s),u.success("配置已保存")}catch(s){u.error(((e=(a=s.response)==null?void 0:a.data)==null?void 0:e.error)||"保存失败")}finally{q.value=!1}}async function Ge(){var e,s,n;if(await((e=ee.value)==null?void 0:e.validate().catch(()=>!1))){H.value=!0;try{const x=await Ze(g.oldPassword,g.newPassword);x.success?(u.success("✅ 密码修改成功,下次登录请使用新密码"),g.oldPassword="",g.newPassword="",g.confirmPassword=""):u.error(x.message)}catch(x){u.error(((n=(s=x.response)==null?void 0:s.data)==null?void 0:n.error)||"密码修改失败")}finally{H.value=!1}}}const de=f();function Ae(){var a;(a=de.value)==null||a.click()}async function Me(a){var n,x,v;const e=a.target,s=(n=e.files)==null?void 0:n[0];if(s){if(!s.type.startsWith("image/")){u.error("仅支持图片文件JPEG/PNG/WebP"),e.value="";return}if(s.size>2*1024*1024){u.error("图片大小不能超过 2MB"),e.value="";return}try{const V=await el(s);V.success?(o.site_logo=V.url,u.success("✅ LOGO 已上传并生效")):u.error(V.message)}catch(V){u.error(((v=(x=V.response)==null?void 0:x.data)==null?void 0:v.error)||"上传失败")}e.value=""}}async function We(){try{o.site_logo="",await ll("site_logo",""),u.success("已移除 LOGO")}catch{u.error("移除失败")}}return(a,e)=>{const s=w("el-input"),n=w("el-form-item"),x=w("el-icon"),v=w("el-button"),V=w("el-form"),T=w("el-card"),z=w("el-switch"),D=w("el-divider"),re=w("el-radio"),je=w("el-radio-group"),I=w("el-input-number"),ue=w("el-tag");return c(),_("div",tl,[R(t(T,{id:"section-sys-site"},{header:i(()=>[...e[27]||(e[27]=[l("span",null,"🌐 网站设置",-1)])]),default:i(()=>[t(V,{"label-width":"180px","label-position":"left"},{default:i(()=>[t(n,{label:"网站名称"},{default:i(()=>[t(s,{modelValue:o.site_name,"onUpdate:modelValue":e[0]||(e[0]=d=>o.site_name=d),placeholder:"CloudSearch",style:{"max-width":"300px"}},null,8,["modelValue"]),e[28]||(e[28]=l("div",{class:"form-tip"},"显示在网站标题和页脚",-1))]),_:1}),t(n,{label:"网站 LOGO"},{default:i(()=>[l("div",al,[l("div",ol,[t(v,{type:"primary",onClick:Ae},{icon:i(()=>[t(x,null,{default:i(()=>[t(ce(Ke))]),_:1})]),default:i(()=>[e[29]||(e[29]=r(" 选择LOGO图片并上传 ",-1))]),_:1}),l("input",{ref_key:"logoInputRef",ref:de,type:"file",accept:".jpg,.jpeg,.png,.webp",hidden:"",onChange:Me},null,544),e[30]||(e[30]=l("div",{class:"form-tip",style:{"margin-left":"12px"}},[r(" 推荐 "),l("strong",null,"320×60"),r(" 或宽比例(如 4:1JPEG/PNG/WebP最大 2MB。"),l("br"),r(" LOGO 同时也作为搜索结果无封面图时的兜底图使用。 ")],-1))]),o.site_logo?(c(),_("div",il,[l("img",{src:String(o.site_logo),alt:"LOGO预览",onError:e[1]||(e[1]=d=>d.target.style.display="none")},null,40,nl),t(v,{size:"small",type:"danger",plain:"",onClick:We},{default:i(()=>[...e[31]||(e[31]=[r("移除",-1)])]),_:1})])):X("",!0)])]),_:1}),t(n,{label:"底部免责声明"},{default:i(()=>[t(s,{modelValue:o.site_disclaimer,"onUpdate:modelValue":e[2]||(e[2]=d=>o.site_disclaimer=d),type:"textarea",rows:4,placeholder:"输入免责声明内容"},null,8,["modelValue"]),e[32]||(e[32]=l("div",{class:"form-tip"},"显示在网站底部,留空则不显示",-1))]),_:1}),t(n,{label:"滚动通知文字"},{default:i(()=>[t(s,{modelValue:o.site_marquee,"onUpdate:modelValue":e[3]||(e[3]=d=>o.site_marquee=d),placeholder:"📢 欢迎使用CloudSearch",style:{"max-width":"500px"}},null,8,["modelValue"]),e[33]||(e[33]=l("div",{class:"form-tip"},"搜索栏下方滚动的通知条(从右往左滚动),留空则不显示",-1))]),_:1}),t(n,{label:"系统时区"},{default:i(()=>[t(s,{modelValue:o.timezone,"onUpdate:modelValue":e[4]||(e[4]=d=>o.timezone=d),placeholder:"Asia/Shanghai",style:{"max-width":"300px"}},null,8,["modelValue"]),e[34]||(e[34]=l("div",{class:"form-tip"},"例如 Asia/Shanghai、America/New_York、UTC修改后保存配置即可生效",-1))]),_:1})]),_:1})]),_:1},512),[[L,!b.value||b.value==="sys-site"]]),R(t(T,{id:"section-sys-services"},{header:i(()=>[...e[35]||(e[35]=[l("span",null,"🔗 外部服务 & 缓存",-1)])]),default:i(()=>[t(V,{"label-width":"180px","label-position":"left"},{default:i(()=>{var d,P,F,pe,fe,ve;return[t(n,{label:"PanSou 搜索引擎地址"},{default:i(()=>{var m,me;return[l("div",dl,[t(s,{modelValue:o.pansou_url,"onUpdate:modelValue":e[5]||(e[5]=K=>o.pansou_url=K),placeholder:"http://pansou:8888",style:{"max-width":"360px"}},null,8,["modelValue"]),t(v,{type:"primary",loading:E.value,onClick:he,size:"default",style:{width:"100px"}},{default:i(()=>[r(p(E.value?"测试中...":"验证连接"),1)]),_:1},8,["loading"]),t(v,{type:"warning",loading:j.value,onClick:Se,size:"default",style:{width:"130px"},disabled:!((m=y.value)!=null&&m.hasUpdate)},{default:i(()=>{var K;return[r(p(j.value?"更新中...":(K=y.value)!=null&&K.hasUpdate?"🔄 有新版本":"无更新"),1)]}),_:1},8,["loading","disabled"]),(me=y.value)!=null&&me.latestVersion?(c(),_("span",rl,p(y.value.latestVersion),1)):X("",!0)]),e[36]||(e[36]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},"盘搜搜索引擎的地址",-1))]}),_:1}),l("div",ul,[l("div",pl,[l("div",{class:ye(["db-stat-value",((d=y.value)==null?void 0:d.status)==="connected"?"text-success":"text-warning"])},p(((P=y.value)==null?void 0:P.status)==="connected"?"已连接":y.value?"未连接":"-"),3),e[37]||(e[37]=l("div",{class:"db-stat-label"},"PanSou 状态",-1))]),l("div",fl,[l("div",vl,p(((F=y.value)==null?void 0:F.channelCount)??"-"),1),e[38]||(e[38]=l("div",{class:"db-stat-label"},"频道数量",-1))]),l("div",ml,[l("div",cl,p(((pe=y.value)==null?void 0:pe.pluginCount)??"-"),1),e[39]||(e[39]=l("div",{class:"db-stat-label"},"插件数量",-1))]),l("div",yl,[l("div",gl,p(((fe=y.value)==null?void 0:fe.diskCount)??"-"),1),e[40]||(e[40]=l("div",{class:"db-stat-label"},"网盘数量",-1))]),l("div",wl,[l("div",_l,p(((ve=y.value)==null?void 0:ve.version)||"-"),1),e[41]||(e[41]=l("div",{class:"db-stat-label"},"版本",-1))])]),t(n,{label:"PanSou Web 端访问"},{default:i(()=>[t(z,{modelValue:te.value,"onUpdate:modelValue":e[6]||(e[6]=m=>te.value=m),"active-text":"启用","inactive-text":"关闭"},null,8,["modelValue"]),e[42]||(e[42]=l("div",{class:"form-tip",style:{"margin-left":"12px"}},[r(" 开启后可通过 "),l("code",null,"/pansou/"),r(" 路径访问 PanSou 搜索引擎管理界面 ")],-1))]),_:1}),t(n,{label:"启用代理"},{default:i(()=>[t(z,{modelValue:J.value,"onUpdate:modelValue":e[7]||(e[7]=m=>J.value=m),"active-text":"启用","inactive-text":"关闭"},null,8,["modelValue"]),e[43]||(e[43]=l("div",{class:"form-tip",style:{"margin-left":"8px"}}," 仅 PanSou 需要此配置,开启后搜索请求将经过代理转发 ",-1))]),_:1}),J.value?(c(),Z(n,{key:0,label:"代理地址",style:{"margin-top":"-12px"}},{default:i(()=>[l("div",bl,[t(s,{modelValue:o.search_proxy_url,"onUpdate:modelValue":e[8]||(e[8]=m=>o.search_proxy_url=m),placeholder:"http://127.0.0.1:7890",style:{"max-width":"360px"}},null,8,["modelValue"]),t(v,{type:"primary",loading:M.value,onClick:Te,size:"default",style:{width:"100px"}},{default:i(()=>[r(p(M.value?"测试中...":"测试代理"),1)]),_:1},8,["loading"])]),e[44]||(e[44]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},"HTTP 或 SOCKS5 协议地址",-1))]),_:1})):X("",!0),t(n,{label:"视频解析服务地址"},{default:i(()=>[l("div",xl,[t(s,{modelValue:o.video_parser_url,"onUpdate:modelValue":e[9]||(e[9]=m=>o.video_parser_url=m),placeholder:"http://video-parser:3001",style:{"max-width":"360px"}},null,8,["modelValue"]),t(v,{type:"primary",loading:G.value,onClick:Ce,size:"default",style:{width:"100px"}},{default:i(()=>[r(p(G.value?"测试中...":"验证连接"),1)]),_:1},8,["loading"])]),e[45]||(e[45]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},"视频链接解析服务地址",-1))]),_:1}),t(n,{label:"TMDB 读取令牌"},{default:i(()=>[l("div",Vl,[t(s,{modelValue:o.tmdb_api_token,"onUpdate:modelValue":e[10]||(e[10]=m=>o.tmdb_api_token=m),type:"password","show-password":"",placeholder:"输入 TMDB API 读取令牌Bearer Token",style:{"max-width":"360px"}},null,8,["modelValue"]),t(v,{type:"primary",loading:A.value,onClick:Ue,size:"default",style:{width:"100px"}},{default:i(()=>[r(p(A.value?"测试中...":"验证令牌"),1)]),_:1},8,["loading"])]),e[46]||(e[46]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},[r(" 用于搜索 TMDB 获取评分、导演、演员等完整内容信息。 "),l("a",{href:"https://www.themoviedb.org/settings/api",target:"_blank",rel:"noopener",style:{color:"var(--primary-color)"}},"获取令牌 →")],-1))]),_:1}),t(n,{label:"IP 归属地查询"},{default:i(()=>[l("div",kl,[t(s,{modelValue:o.ip_geo_api_url,"onUpdate:modelValue":e[11]||(e[11]=m=>o.ip_geo_api_url=m),placeholder:"https://cn.apihz.cn/api/ip/chaapi.php?id=xxx&key=***&ip={ip}&td=0",style:{"max-width":"360px"}},null,8,["modelValue"]),t(v,{type:"primary",loading:W.value,onClick:ze,size:"default",style:{width:"100px"}},{default:i(()=>[r(p(W.value?"测试中...":"验证接口"),1)]),_:1},8,["loading"])]),e[47]||(e[47]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},[r(" IP 归属地查询 API 地址,"),l("code",null,"{ip}"),r(" 会被替换为实际 IP。 ")],-1)),e[48]||(e[48]=l("div",{style:{color:"var(--el-color-warning)","font-size":"13px","margin-top":"2px",width:"100%"}}," ⚠ 当前仅支持 接口盒子(apihz.cn) 格式 ",-1))]),_:1}),t(D,{"content-position":"left"},{default:i(()=>[...e[49]||(e[49]=[r("Redis 缓存",-1)])]),_:1}),t(n,{label:"Redis 连接地址"},{default:i(()=>[l("div",Pl,[t(s,{modelValue:o.redis_url,"onUpdate:modelValue":e[12]||(e[12]=m=>o.redis_url=m),placeholder:"redis://:***@172.17.0.1:6379",style:{"max-width":"360px"}},null,8,["modelValue"]),t(v,{type:"primary",size:"default",loading:$.value,onClick:Pe,style:{width:"100px"}},{default:i(()=>[r(p($.value?"测试中...":"验证连接"),1)]),_:1},8,["loading"])]),e[50]||(e[50]=l("div",{class:"form-tip",style:{"margin-top":"4px"}},[r(" Redis 用于缓存搜索验证结果,提升响应速度。"),l("br"),l("strong",null,"带密码格式:"),l("code",null,"redis://:你的密码@地址:6379"),l("br"),r(" 修改后保存配置即可生效,无需重启。"),l("strong",null,"切换 Redis 只会清空缓存,不影响任何重要数据。")],-1))]),_:1})]}),_:1}),le.value?(c(),_("div",Sl,[t(x,{class:"is-loading",size:20},{default:i(()=>[t(ce(Ne))]),_:1}),e[51]||(e[51]=l("span",{style:{"margin-left":"8px",color:"#909399"}},"加载中...",-1))])):(c(),_("div",hl,[l("div",Cl,[l("div",{class:ye(["db-stat-value",k.redis_status==="已连接"?"text-success":"text-warning"])},p(k.redis_status),3),e[52]||(e[52]=l("div",{class:"db-stat-label"},"Redis 状态",-1))]),l("div",Ul,[l("div",Tl,p(k.db_size),1),e[53]||(e[53]=l("div",{class:"db-stat-label"},"数据库大小",-1))]),l("div",zl,[l("div",Il,p(k.save_records),1),e[54]||(e[54]=l("div",{class:"db-stat-label"},"转存记录",-1))]),l("div",Rl,[l("div",Ll,p(k.search_stats),1),e[55]||(e[55]=l("div",{class:"db-stat-label"},"搜索记录",-1))]),l("div",Bl,[l("div",Ol,p(k.cloud_configs),1),e[56]||(e[56]=l("div",{class:"db-stat-label"},"网盘配置",-1))]),l("div",$l,[l("div",El,p(k.content_cache),1),e[57]||(e[57]=l("div",{class:"db-stat-label"},"内容缓存",-1))])]))]),_:1},512),[[L,!b.value||b.value==="sys-services"]]),R(t(T,{id:"section-sys-strategy"},{header:i(()=>[...e[58]||(e[58]=[l("span",null,"🔧 性能配置",-1)])]),default:i(()=>[l("div",Gl,[t(D,{"content-position":"left"},{default:i(()=>[...e[59]||(e[59]=[r("搜索结果返回方式",-1)])]),_:1}),l("div",Al,[l("div",Ml,[e[60]||(e[60]=l("span",{class:"field-label"},"开启资源链接有效性监测",-1)),t(z,{modelValue:o.link_validation_enabled,"onUpdate:modelValue":e[13]||(e[13]=d=>o.link_validation_enabled=d),"active-value":"true","inactive-value":"false","active-text":"开启","inactive-text":"关闭"},null,8,["modelValue"])]),e[61]||(e[61]=l("div",{class:"field-desc"},"开启后搜索时会自动检测链接是否有效,过滤失效链接。关闭则直接返回所有结果(更快)",-1))]),l("div",Wl,[l("div",jl,[e[64]||(e[64]=l("span",{class:"field-label"},"搜索结果方式",-1)),t(je,{modelValue:o.search_strategy,"onUpdate:modelValue":e[14]||(e[14]=d=>o.search_strategy=d)},{default:i(()=>[t(re,{value:"wait_all"},{default:i(()=>[...e[62]||(e[62]=[r("等待全部结果后展示",-1)])]),_:1}),t(re,{value:"stream_channel"},{default:i(()=>[...e[63]||(e[63]=[r("频道结果逐步展示",-1)])]),_:1})]),_:1},8,["modelValue"])]),e[65]||(e[65]=l("div",{class:"field-desc"},"逐步展示会分频道并发请求并优先展示先返回的频道;该模式下频道顺序按返回先后,不按配置顺序。",-1))]),t(D,{"content-position":"left"},{default:i(()=>[...e[66]||(e[66]=[r("搜索策略",-1)])]),_:1}),l("div",Dl,[l("div",Fl,[l("div",Kl,[e[67]||(e[67]=l("span",{class:"field-label"},"使用所有频道参与搜索",-1)),t(z,{modelValue:ae.value,"onUpdate:modelValue":e[15]||(e[15]=d=>ae.value=d),"active-text":"开启","inactive-text":"关闭"},null,8,["modelValue"])]),e[68]||(e[68]=l("div",{class:"field-desc"},"包含未启用频道,命中更广但请求压力更高。",-1))]),l("div",Nl,[l("div",ql,[e[69]||(e[69]=l("span",{class:"field-label"},"每类网盘有效结果数",-1)),t(I,{modelValue:o.search_result_limit,"onUpdate:modelValue":e[16]||(e[16]=d=>o.search_result_limit=d),min:1,max:100},null,8,["modelValue"])]),e[70]||(e[70]=l("div",{class:"field-desc"},"每个网盘类型最多展示的有效链接数量",-1))]),l("div",Hl,[l("div",Jl,[e[71]||(e[71]=l("span",{class:"field-label"},"验证并发数",-1)),t(I,{modelValue:o.validation_concurrency,"onUpdate:modelValue":e[17]||(e[17]=d=>o.validation_concurrency=d),min:1,max:50},null,8,["modelValue"])]),e[72]||(e[72]=l("div",{class:"field-desc"},"同时验证的链接数量",-1))]),l("div",Yl,[l("div",Ql,[e[73]||(e[73]=l("span",{class:"field-label"},"有效链接缓存 (s)",-1)),t(I,{modelValue:o.validation_cache_ttl_valid,"onUpdate:modelValue":e[18]||(e[18]=d=>o.validation_cache_ttl_valid=d),min:60,max:86400,step:60},null,8,["modelValue"])]),e[74]||(e[74]=l("div",{class:"field-desc"},"有效验证结果的缓存时间",-1))]),l("div",Xl,[l("div",Zl,[e[75]||(e[75]=l("span",{class:"field-label"},"无效链接缓存 (s)",-1)),t(I,{modelValue:o.validation_cache_ttl_invalid,"onUpdate:modelValue":e[19]||(e[19]=d=>o.validation_cache_ttl_invalid=d),min:60,max:86400,step:60},null,8,["modelValue"])]),e[76]||(e[76]=l("div",{class:"field-desc"},"无效验证结果的缓存时间",-1))]),l("div",es,[l("div",ls,[e[77]||(e[77]=l("span",{class:"field-label"},"验证超时 (ms)",-1)),t(I,{modelValue:o.validation_timeout,"onUpdate:modelValue":e[20]||(e[20]=d=>o.validation_timeout=d),min:1e3,max:3e4,step:500},null,8,["modelValue"])]),e[78]||(e[78]=l("div",{class:"field-desc"},"单个链接验证超时毫秒数",-1))])]),t(D,{"content-position":"left"},{default:i(()=>[...e[79]||(e[79]=[r("链接检测配置",-1)])]),_:1}),l("div",ss,[e[81]||(e[81]=l("div",{class:"field-label-row"},[l("span",{class:"field-label"},"搜索标题过滤规则")],-1)),l("div",ts,[t(s,{modelValue:C.value,"onUpdate:modelValue":e[21]||(e[21]=d=>C.value=d),type:"textarea",rows:1,placeholder:"每行一条规则,回车分隔",style:{"max-width":"420px","font-family":"monospace","font-size":"12px"}},null,8,["modelValue"]),t(v,{type:"primary",onClick:Ie,disabled:!C.value.trim()},{default:i(()=>[...e[80]||(e[80]=[r(" 确认添加 ",-1)])]),_:1},8,["disabled"])]),S.value.length>0?(c(),_("div",as,[(c(!0),_(ge,null,we(S.value,(d,P)=>(c(),Z(ue,{key:P,closable:"",type:Le(d),"disable-transitions":!1,onClose:F=>Re(P)},{default:i(()=>[r(p(d),1)]),_:2},1032,["type","onClose"]))),128))])):(c(),_("div",os,"暂无过滤规则")),e[82]||(e[82]=l("div",{class:"filter-rule-help"},[l("div",{class:"help-title"},"📖 规则说明"),l("div",{class:"help-row"},[l("code",null,"# 注释内容"),r(" — "),l("code",null,"#"),r(" 后必须跟"),l("strong",null,"空格"),r("才会被识别为注释,单纯的 "),l("code",null,"#动漫"),r(" 会被当作要移除的文本")]),l("div",{class:"help-row"},[l("code",null,"/正则表达式/标志"),r(" — 正则匹配,匹配到的内容会被删除。如 "),l("code",null,"/^\\\\d+[、,.\\\\s]/"),r(" 去掉开头的序号")]),l("div",{class:"help-row"},[l("code",null,"纯文本"),r(" — 直接写要移除的文字(支持 emoji凡是标题中含有的都会被删除")])],-1))]),l("div",is,[e[84]||(e[84]=l("div",{class:"field-label-row"},[l("span",{class:"field-label"},"失效关键词")],-1)),l("div",ns,[t(s,{modelValue:U.value,"onUpdate:modelValue":e[22]||(e[22]=d=>U.value=d),type:"textarea",rows:1,placeholder:"每行一个关键词,回车分隔",style:{"max-width":"420px","font-family":"monospace","font-size":"12px"}},null,8,["modelValue"]),t(v,{type:"danger",onClick:Be,disabled:!U.value.trim()},{default:i(()=>[...e[83]||(e[83]=[r(" 确认添加 ",-1)])]),_:1},8,["disabled"])]),e[85]||(e[85]=l("div",{class:"field-desc"},"自定义失效关键词PanSou 检测 summary 或 HTML 页面内容包含即判为失效。",-1)),h.value.length>0?(c(),_("div",ds,[(c(!0),_(ge,null,we(h.value,(d,P)=>(c(),Z(ue,{key:P,closable:"",type:"danger","disable-transitions":!1,onClose:F=>Oe(P)},{default:i(()=>[r(p(d),1)]),_:2},1032,["onClose"]))),128))])):(c(),_("div",rs,"暂无失效关键词,所有链接将默认判为有效"))])])]),_:1},512),[[L,!b.value||b.value==="sys-strategy"]]),R(t(T,{id:"section-sys-password"},{header:i(()=>[...e[86]||(e[86]=[l("span",null,"🔑 修改管理员密码",-1)])]),default:i(()=>[t(V,{ref_key:"passwordFormRef",ref:ee,model:g,rules:ke,"label-width":"120px","label-position":"left"},{default:i(()=>[t(n,{label:"原密码",prop:"oldPassword"},{default:i(()=>[t(s,{modelValue:g.oldPassword,"onUpdate:modelValue":e[23]||(e[23]=d=>g.oldPassword=d),type:"password","show-password":"",placeholder:"输入原密码",style:{"max-width":"300px"}},null,8,["modelValue"])]),_:1}),t(n,{label:"新密码",prop:"newPassword"},{default:i(()=>[t(s,{modelValue:g.newPassword,"onUpdate:modelValue":e[24]||(e[24]=d=>g.newPassword=d),type:"password","show-password":"",placeholder:"输入新密码至少6位",style:{"max-width":"300px"}},null,8,["modelValue"])]),_:1}),t(n,{label:"确认新密码",prop:"confirmPassword"},{default:i(()=>[t(s,{modelValue:g.confirmPassword,"onUpdate:modelValue":e[25]||(e[25]=d=>g.confirmPassword=d),type:"password","show-password":"",placeholder:"再次输入新密码",style:{"max-width":"300px"}},null,8,["modelValue"])]),_:1}),t(n,null,{default:i(()=>[t(v,{type:"primary",loading:H.value,onClick:Ge},{default:i(()=>[...e[87]||(e[87]=[r("修改密码",-1)])]),_:1},8,["loading"])]),_:1})]),_:1},8,["model"])]),_:1},512),[[L,!b.value||b.value==="sys-password"]]),R(t(T,{id:"section-sys-maintenance"},{header:i(()=>[...e[88]||(e[88]=[l("span",null,"🔄 系统维护",-1)])]),default:i(()=>[e[93]||(e[93]=r()),t(V,{"label-width":"180px","label-position":"left"},{default:i(()=>[t(n,{label:"自动更新镜像"},{default:i(()=>[t(z,{modelValue:oe.value,"onUpdate:modelValue":e[26]||(e[26]=d=>oe.value=d),"active-text":"启用","inactive-text":"禁用"},null,8,["modelValue"]),e[89]||(e[89]=r()),e[90]||(e[90]=l("div",{class:"form-tip"},"启用后 CloudSearch 将自动检测并更新到最新镜像版本",-1)),e[91]||(e[91]=r()),e[92]||(e[92]=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),[[L,!b.value||b.value==="sys-maintenance"]]),l("div",us,[t(v,{type:"primary",size:"large",loading:q.value,onClick:Ee},{default:i(()=>[...e[94]||(e[94]=[r(" 保存配置 ",-1)])]),_:1},8,["loading"]),t(v,{size:"large",onClick:$e},{default:i(()=>[...e[95]||(e[95]=[r("退出登录",-1)])]),_:1})])])}}}),ms=sl(ps,[["__scopeId","data-v-79a959cf"]]);export{ms as default};