mirror of
https://git-qiuchenly.yltfspace.com/QiuChenly/corepatch
synced 2025-11-25 05:40:27 +08:00
### 后端更新 性能优化 - Redis、数据库索引优化, 复杂联表查询查询速度从10秒降低到500ms 功能增强 - 统一文件上传 API - 论坛权限管理优化 ### 前端更新 问题修复 - 统一错误提示、组件复用、图标本地化、密码加密传输、大文件分片上传 新增功能 - 全局通知系统、WebSocket 实时消息、图标批量同步、IP 封禁管理、应用版本批量查询、头像上传、TypeScript 类型完善、讨论区功能增强 代码优化 - 删除冗余组件、统一 API 错误处理、优化代码结构、统一 UI 风格
24 lines
12 KiB
JavaScript
24 lines
12 KiB
JavaScript
import{d as e,f as a,k as t,m as l,q as s,v as n,e as o,l as c,r as i,o as d,g as u,B as r,C as v,A as p,b as m,j as _,u as h,i as g}from"./Cf-ihD4f.js"
|
||
import{a as f,c as k,e as y,_ as x,T as w,M as b,A as V}from"./C_NDl53k.js"
|
||
const C={class:"slider-wrapper"},U=["value","min","max","step"],S={class:"slider-value"},T=f(e({__name:"Slider",props:{modelValue:{},min:{default:0},max:{default:100},step:{default:1},suffix:{default:""}},emits:["update:modelValue"],setup(e,{emit:c}){const i=e,d=c,u=a(()=>i.suffix?`${i.modelValue} ${i.suffix}`:i.modelValue.toString()),r=a(()=>{let e=i.modelValue
|
||
return e<i.min?e=i.min:e>i.max&&(e=i.max),e}),v=a(()=>{const e=(r.value-i.min)/(i.max-i.min)*100
|
||
return{"--progress-percent":`${Math.max(0,Math.min(100,e))}%`}}),p=e=>{const a=e.target
|
||
d("update:modelValue",Number(a.value))}
|
||
return(a,c)=>(o(),t("div",C,[l("input",{value:r.value,type:"range",class:"setting-slider",style:s(v.value),min:e.min,max:e.max,step:e.step,onInput:p},null,44,U),l("div",S,n(u.value),1)]))}}),[["__scopeId","data-v-0979b282"]]),j={class:"toggle-wrapper"},B=["checked"],I={class:"toggle-slider"},M={key:0,class:"toggle-text"},D=f(e({__name:"Toggle",props:{modelValue:{type:Boolean},showLabel:{type:Boolean,default:!0}},emits:["update:modelValue"],setup(e,{emit:a}){const s=a,i=e=>{const a=e.target
|
||
s("update:modelValue",a.checked)}
|
||
return(a,s)=>(o(),t("label",j,[l("input",{checked:e.modelValue,type:"checkbox",class:"toggle-input",onChange:i},null,40,B),l("span",I,[e.showLabel?(o(),t("span",M,n(e.modelValue?"开":"关"),1)):c("",!0)])]))}}),[["__scopeId","data-v-c85b3e46"]]),L={class:"settings-page"},A={class:"settings-container"},Q={class:"settings-list"},R={class:"setting-item"},$={class:"setting-icon"},q={class:"setting-content"},H={class:"setting-input-wrapper"},N={key:0,class:"setting-error"},z={class:"setting-item"},G={class:"setting-icon"},P={class:"setting-content"},E={class:"setting-item"},F={class:"setting-icon"},J={class:"setting-content"},K={class:"setting-item"},O={class:"setting-icon"},W={class:"setting-item"},X={class:"setting-icon"},Y={class:"setting-content"},Z={class:"setting-item"},ee={class:"setting-icon"},ae={class:"setting-content"},te={class:"setting-item"},le={class:"setting-icon"},se={class:"setting-content"},ne={class:"setting-description"},oe={class:"setting-item"},ce={class:"setting-icon"},ie={class:"setting-content"},de={class:"theme-options"},ue={class:"settings-actions"},re=["disabled"],ve=["disabled"],pe={class:"about-section"},me={class:"about-icon"},_e={class:"version-info"},he={key:0,class:"version-text"},ge={key:1,class:"beta-badge"},fe={key:2,class:"release-badge"},ke={key:0,class:"about-details"},ye={class:"detail-section"},xe={class:"detail-content"},we={class:"detail-item"},be={class:"detail-value"},Ve={key:0},Ce={key:1,class:"beta-badge"},Ue={key:2,class:"release-badge"},Se={key:0,class:"detail-item"},Te={class:"detail-value"},je={key:1,class:"detail-item"},Be={class:"detail-value"},Ie={class:"detail-item"},Me={class:"detail-value"},De=f(e({__name:"Settings",setup(e){const s=i({download_path:"",auto_check_update:!0,concurrent_downloads:3,theme:"auto",update_check_interval:10,update_check_threads:16,download_concurrent_threads:16,proxy_max_connections:10}),f=a(()=>2*(s.value.cpu_cores||4)),C=i(""),U=i(!1),S=i(!1),j=i(""),B=i(""),{toasts:I,success:M,error:De,removeToast:Le}=k(),Ae=y(),Qe=(new Date).toLocaleDateString("zh-CN",{year:"numeric",month:"long",day:"numeric"}),Re=a(()=>"20251112"),$e=a(()=>!0),qe=()=>{S.value=!S.value},He=async()=>{var e
|
||
const a=null==(e=s.value.download_path)?void 0:e.trim()
|
||
if(a)try{const e=await V.validatePath(a)
|
||
e.exists?e.isDirectory?C.value="":C.value="路径不是目录":C.value="路径不存在"}catch(t){C.value="验证路径失败"}else C.value=""},Ne=async()=>{var e,a
|
||
if(!C.value){U.value=!0
|
||
try{const e={}
|
||
void 0!==s.value.download_path&&(e.download_path=s.value.download_path),void 0!==s.value.auto_check_update&&(e.auto_check_update=s.value.auto_check_update),void 0!==s.value.concurrent_downloads&&(e.concurrent_downloads=s.value.concurrent_downloads),void 0!==s.value.theme&&(e.theme=s.value.theme),void 0!==s.value.update_check_interval&&(e.update_check_interval=s.value.update_check_interval),void 0!==s.value.update_check_threads&&(e.update_check_threads=s.value.update_check_threads),void 0!==s.value.download_concurrent_threads&&(e.download_concurrent_threads=s.value.download_concurrent_threads),void 0!==s.value.proxy_max_connections&&(e.proxy_max_connections=s.value.proxy_max_connections)
|
||
const a=await V.updateSettings(e)
|
||
a.success?M(a.message||"设置已保存",3e3):De(a.message||"保存设置失败",4e3)}catch(t){const l=(null==(a=null==(e=t.response)?void 0:e.data)?void 0:a.message)||t.message||"保存设置失败"
|
||
De(l,4e3)}finally{U.value=!1}}},ze=async()=>{await Ae.show({title:"重置设置",message:"确定要重置所有设置为默认值吗?",type:"warning",confirmText:"重置",cancelText:"取消"})&&(s.value={download_path:"",auto_check_update:!0,concurrent_downloads:3,theme:"auto",update_check_interval:10,update_check_threads:16,download_concurrent_threads:16,proxy_max_connections:10},C.value="")}
|
||
return d(()=>{(async()=>{try{const e=await V.getStatus(),a=e.cpu_cores||4
|
||
j.value=e.os_version||"",B.value=e.build_version||"",s.value.cpu_cores=a
|
||
const t=await V.getAllSettings(),l=2*a,n=t.proxy_max_connections??10,o=Math.min(Math.max(n,1),l)
|
||
s.value={download_path:t.download_path??"",auto_check_update:t.auto_check_update??!0,concurrent_downloads:t.concurrent_downloads??3,theme:t.theme??"auto",update_check_interval:t.update_check_interval??10,update_check_threads:t.update_check_threads??16,download_concurrent_threads:t.download_concurrent_threads??16,proxy_max_connections:o,cpu_cores:a}}catch(e){De("加载设置失败",4e3)}})()}),(e,a)=>(o(),t("div",L,[l("div",A,[a[38]||(a[38]=l("h1",{class:"page-title"},"设置",-1)),l("div",Q,[l("div",R,[l("div",$,[u(x,{icon:"fluent-color:document-folder-24"})]),l("div",q,[a[10]||(a[10]=l("h3",{class:"setting-title"},"下载路径",-1)),a[11]||(a[11]=l("p",{class:"setting-description"}," 请输入完整的绝对路径,不能使用 ~ 符号 ",-1)),l("div",H,[u(x,{icon:"fluent-color:document-folder-24",class:"input-icon"}),r(l("input",{"onUpdate:modelValue":a[0]||(a[0]=e=>s.value.download_path=e),type:"text",class:"setting-input",placeholder:"/Users/你的用户名/Downloads/Hayaku/",onInput:He},null,544),[[v,s.value.download_path]])]),C.value?(o(),t("p",N,[u(x,{icon:"fluent-color:error-circle-24",class:"error-icon"}),p(" "+n(C.value),1)])):c("",!0)])]),l("div",z,[l("div",G,[u(x,{icon:"fluent-color:send-24"})]),l("div",P,[a[12]||(a[12]=l("h3",{class:"setting-title"},"最大并发下载数",-1)),a[13]||(a[13]=l("p",{class:"setting-description"},"同时进行的下载任务数量",-1)),u(T,{modelValue:s.value.concurrent_downloads,"onUpdate:modelValue":a[1]||(a[1]=e=>s.value.concurrent_downloads=e),min:1,max:16,step:1},null,8,["modelValue"])])]),l("div",E,[l("div",F,[u(x,{icon:"fluent-color:link-multiple-24"})]),l("div",J,[a[14]||(a[14]=l("h3",{class:"setting-title"},"下载并发线程数",-1)),a[15]||(a[15]=l("p",{class:"setting-description"}," 每个下载任务使用的并发线程数(默认:16) ",-1)),u(T,{modelValue:s.value.download_concurrent_threads,"onUpdate:modelValue":a[2]||(a[2]=e=>s.value.download_concurrent_threads=e),min:1,max:64,step:1},null,8,["modelValue"])])]),l("div",K,[l("div",O,[u(x,{icon:"fluent-color:arrow-sync-24"})]),a[16]||(a[16]=l("div",{class:"setting-content"},[l("h3",{class:"setting-title"},"自动检查更新"),l("p",{class:"setting-description"},"是否在后台自动检查应用更新")],-1)),u(D,{modelValue:s.value.auto_check_update,"onUpdate:modelValue":a[3]||(a[3]=e=>s.value.auto_check_update=e)},null,8,["modelValue"])]),l("div",W,[l("div",X,[u(x,{icon:"fluent-color:clock-24"})]),l("div",Y,[a[17]||(a[17]=l("h3",{class:"setting-title"},"更新检查间隔(分钟)",-1)),a[18]||(a[18]=l("p",{class:"setting-description"}," 后台自动检查更新的时间间隔(默认:10分钟) ",-1)),u(T,{modelValue:s.value.update_check_interval,"onUpdate:modelValue":a[4]||(a[4]=e=>s.value.update_check_interval=e),min:1,max:1440,step:1,suffix:"分钟"},null,8,["modelValue"])])]),l("div",Z,[l("div",ee,[u(x,{icon:"fluent-color:link-multiple-24"})]),l("div",ae,[a[19]||(a[19]=l("h3",{class:"setting-title"},"更新检查并发线程数",-1)),a[20]||(a[20]=l("p",{class:"setting-description"}," 同时检查更新的URL数量(默认:16) ",-1)),u(T,{modelValue:s.value.update_check_threads,"onUpdate:modelValue":a[5]||(a[5]=e=>s.value.update_check_threads=e),min:1,max:64,step:1},null,8,["modelValue"])])]),l("div",te,[l("div",le,[u(x,{icon:"fluent-color:wifi-20"})]),l("div",se,[a[21]||(a[21]=l("h3",{class:"setting-title"},"网络请求并发线程数",-1)),l("p",ne," 同时处理的网络请求数量(默认:10,最大:"+n(f.value)+") ",1),u(T,{modelValue:s.value.proxy_max_connections,"onUpdate:modelValue":a[6]||(a[6]=e=>s.value.proxy_max_connections=e),min:1,max:f.value,step:1},null,8,["modelValue","max"])])]),l("div",oe,[l("div",ce,[u(x,{icon:"fluent-color:options-24"})]),l("div",ie,[a[25]||(a[25]=l("h3",{class:"setting-title"},"主题",-1)),a[26]||(a[26]=l("p",{class:"setting-description"},"选择应用主题",-1)),l("div",de,[l("button",{class:m(["theme-option",{active:"light"===s.value.theme}]),onClick:a[7]||(a[7]=e=>s.value.theme="light")},[u(x,{icon:"fluent-color:weather-sunny-low-24"}),a[22]||(a[22]=l("span",null,"浅色",-1))],2),l("button",{class:m(["theme-option",{active:"dark"===s.value.theme}]),onClick:a[8]||(a[8]=e=>s.value.theme="dark")},[u(x,{icon:"fluent-emoji-flat:crescent-moon"}),a[23]||(a[23]=l("span",null,"深色",-1))],2),l("button",{class:m(["theme-option",{active:"auto"===s.value.theme}]),onClick:a[9]||(a[9]=e=>s.value.theme="auto")},[u(x,{icon:"fluent-emoji-flat:a-button-blood-type"}),a[24]||(a[24]=l("span",null,"自动",-1))],2)])])])]),l("div",ue,[l("button",{class:"btn btn-secondary",onClick:ze,disabled:U.value},[u(x,{icon:"fluent-color:arrow-sync-24"}),a[27]||(a[27]=p(" 重置为默认值 ",-1))],8,re),l("button",{class:"btn btn-primary",onClick:Ne,disabled:U.value},[u(x,{icon:"fluent-color:document-add-24"}),p(" "+n(U.value?"保存中...":"保存设置"),1)],8,ve)]),l("div",pe,[a[37]||(a[37]=l("h2",{class:"section-title"},"关于",-1)),l("div",{class:"about-item",onClick:qe},[l("div",me,[u(x,{icon:"fluent-color:apps-24"})]),a[28]||(a[28]=l("div",{class:"about-content"},[l("h3",{class:"about-title"},"秋城落叶 应用商店"),l("p",{class:"about-description"},"由 QiuChenly 发布")],-1)),l("div",_e,[$e.value?(o(),t("span",he,"v"+n(Re.value),1)):c("",!0),$e.value?(o(),t("span",ge,"Beta")):(o(),t("span",fe,"v"+n(Re.value),1)),u(x,{icon:"mdi:chevron-down",class:m(["version-arrow",{expanded:S.value}])},null,8,["class"])])]),u(g,{name:"slide-down"},{default:_(()=>[S.value?(o(),t("div",ke,[l("div",ye,[a[36]||(a[36]=l("h4",{class:"detail-title"},"个人信息",-1)),l("div",xe,[a[33]||(a[33]=l("div",{class:"detail-item"},[l("span",{class:"detail-label"},"开发者:"),l("span",{class:"detail-value"},"QiuChenly")],-1)),a[34]||(a[34]=l("div",{class:"detail-item"},[l("span",{class:"detail-label"},"邮箱:"),l("span",{class:"detail-value"},"qiuchenly@outlook.com")],-1)),a[35]||(a[35]=l("div",{class:"detail-item"},[l("span",{class:"detail-label"},"GitHub:"),l("span",{class:"detail-value"},"github.com/QiuChenly")],-1)),l("div",we,[a[29]||(a[29]=l("span",{class:"detail-label"},"版本号:",-1)),l("span",be,[$e.value?(o(),t("span",Ve,"v"+n(Re.value),1)):c("",!0),$e.value?(o(),t("span",Ce,"Beta")):(o(),t("span",Ue,"v"+n(Re.value),1))])]),j.value?(o(),t("div",Se,[a[30]||(a[30]=l("span",{class:"detail-label"},"系统版本:",-1)),l("span",Te,n(j.value),1)])):c("",!0),B.value?(o(),t("div",je,[a[31]||(a[31]=l("span",{class:"detail-label"},"构建号:",-1)),l("span",Be,n(B.value),1)])):c("",!0),l("div",Ie,[a[32]||(a[32]=l("span",{class:"detail-label"},"构建日期:",-1)),l("span",Me,n(h(Qe)),1)])])])])):c("",!0)]),_:1})])]),u(w,{toasts:h(I),onRemove:h(Le)},null,8,["toasts","onRemove"]),u(b,{visible:h(Ae).visible.value,title:h(Ae).config.value.title||"",message:h(Ae).config.value.message||"",type:"danger"===h(Ae).config.value.type?"error":h(Ae).config.value.type||"warning","confirm-text":h(Ae).config.value.confirmText,"cancel-text":h(Ae).config.value.cancelText,onConfirm:h(Ae).handleConfirm,onCancel:h(Ae).handleCancel},null,8,["visible","title","message","type","confirm-text","cancel-text","onConfirm","onCancel"])]))}}),[["__scopeId","data-v-e8a9ed5b"]])
|
||
export{De as default}
|