mirror of
https://github.com/MarSeventh/CloudFlare-ImgBed.git
synced 2026-01-31 09:03:19 +08:00
2 lines
51 KiB
JavaScript
2 lines
51 KiB
JavaScript
"use strict";(self["webpackChunksanyue_imghub"]=self["webpackChunksanyue_imghub"]||[]).push([[459],{1459:function(e,a,t){t.r(a),t.d(a,{default:function(){return Ea}});var l=t(1420),s=(t(5331),t(213),t(6768));const n={class:"sidebar-container"};function o(e,a,t,o,i,d){const r=(0,s.g2)("font-awesome-icon"),c=l.ct,u=l.lj;return(0,s.uX)(),(0,s.CE)("div",n,[(0,s.bF)(u,{"default-active":t.activeIndex,class:"el-menu-vertical",collapse:i.isCollapse,onSelect:d.handleSelect},{default:(0,s.k6)(()=>[(0,s.bF)(c,{index:"status",class:"menu-item"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{icon:"chart-bar",style:{width:"18px"}}),a[1]||(a[1]=(0,s.Lk)("span",{slot:"title"},"系统状态",-1))]),_:1}),(0,s.bF)(c,{index:"upload",class:"menu-item"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{icon:"cloud-upload",style:{width:"18px"}}),a[2]||(a[2]=(0,s.Lk)("span",{slot:"title"},"上传设置",-1))]),_:1}),(0,s.bF)(c,{index:"security",class:"menu-item"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{icon:"shield",style:{width:"18px"}}),a[3]||(a[3]=(0,s.Lk)("span",{slot:"title"},"安全设置",-1))]),_:1}),(0,s.bF)(c,{index:"page",class:"menu-item"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{icon:"pager",style:{width:"18px"}}),a[4]||(a[4]=(0,s.Lk)("span",{slot:"title"},"网页设置",-1))]),_:1}),(0,s.bF)(c,{index:"others",class:"menu-item"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{icon:"cog",style:{width:"18px"}}),a[5]||(a[5]=(0,s.Lk)("span",{slot:"title"},"其他设置",-1))]),_:1})]),_:1},8,["default-active","collapse","onSelect"]),(0,s.Lk)("div",{class:"toggle-button",onClick:a[0]||(a[0]=(...e)=>d.toggleCollapse&&d.toggleCollapse(...e))},[(0,s.bF)(r,{icon:i.isCollapse?"angle-double-right":"angle-double-left"},null,8,["icon"])])])}var i={name:"SysConfigTabs",props:{activeIndex:{type:String,default:"status"},isCollapse:{type:Boolean,default:!1}},data(){return{isCollapse:!1}},methods:{toggleCollapse(){this.isCollapse=!this.isCollapse,this.$emit("update:isCollapse",this.isCollapse)},checkMobile(){const e=window.innerWidth<=768;this.isCollapse=e,this.$emit("update:isCollapse",this.isCollapse)},handleSelect(e){this.$emit("update:activeIndex",e)}},mounted(){this.checkMobile(),window.addEventListener("resize",this.checkMobile)},beforeDestroy(){window.removeEventListener("resize",this.checkMobile)}},d=t(1241);const r=(0,d.A)(i,[["render",o],["__scopeId","data-v-3d81e43c"]]);var c=r,u=t(4880),m=(t(7128),t(8507)),p=t(3731),h=t(4232);const b={class:"container"},g={class:"header-content"},k={class:"header-action"};function f(e,a,t,l,n,o){const i=p.A,d=(0,s.g2)("font-awesome-icon"),r=m.R7,f=u.bZ,w=c;return(0,s.uX)(),(0,s.CE)("div",b,[(0,s.bF)(f,null,{default:(0,s.k6)(()=>[(0,s.Lk)("div",g,[(0,s.bF)(i,{activeTab:"systemConfig"}),(0,s.Lk)("div",k,[(0,s.bF)(r,{disabled:o.disableTooltip,content:"退出登录",placement:"bottom"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{icon:"sign-out-alt",class:"header-icon",onClick:o.handleLogout},null,8,["onClick"])]),_:1},8,["disabled"])])])]),_:1}),(0,s.bF)(w,{activeIndex:n.activeIndex,"onUpdate:activeIndex":a[0]||(a[0]=e=>n.activeIndex=e),isCollapse:n.isSidebarCollapse,"onUpdate:isCollapse":a[1]||(a[1]=e=>n.isSidebarCollapse=e)},null,8,["activeIndex","isCollapse"]),((0,s.uX)(),(0,s.Wv)((0,s.$y)(o.currentComponent),{class:(0,h.C4)(["main-container",{collapsed:n.isSidebarCollapse}])},null,8,["class"]))])}t(4114);var w=t(9114),v=(t(694),t(47));t(9648);const F={class:"status-panel"},y={class:"overview-cards"},_={class:"card-icon"},C={class:"card-content"},V={class:"card-value"},S={class:"overview-card index-status"},T={class:"card-icon"},L={class:"card-content"},I={class:"card-value"},x={class:"card-subtitle"},A={class:"overview-card system-version"},U={class:"card-icon"},P={class:"card-content"},E={class:"card-value"},W={class:"charts-section"},D={class:"chart-card"},$={class:"chart-header"},X={class:"chart-content"},j={key:0,class:"empty-state"},N={key:1,class:"stats-list"},R={class:"stats-label"},K={class:"stats-bar"},q={class:"stats-value"},O={class:"chart-card"},B={class:"chart-header"},M={class:"chart-content"},Q={key:0,class:"empty-state"},z={key:1,class:"stats-list"},J={class:"stats-label"},Z={class:"stats-bar"},G={class:"stats-value"},H={class:"actions-section"},Y={class:"action-card"},ee={class:"action-header"},ae={class:"action-content"},te={class:"action-buttons"},le={class:"restore-section"},se={key:0,class:"file-info-section"},ne={key:0,class:"file-info-card"},oe={class:"file-info-header"},ie={class:"file-info-content"},de={class:"file-name"},re={class:"file-meta"},ce={key:1,class:"file-info-card"},ue={class:"file-info-header"},me={class:"file-info-content"},pe={class:"file-name"},he={class:"file-meta"};function be(e,a,t,l,n,o){const i=(0,s.g2)("font-awesome-icon"),d=v.S2,r=m.R7,c=w.A;return(0,s.bo)(((0,s.uX)(),(0,s.CE)("div",F,[(0,s.Lk)("div",y,[(0,s.Lk)("div",{class:"overview-card total-files",onClick:a[0]||(a[0]=(...e)=>o.fetchIndexInfo&&o.fetchIndexInfo(...e))},[(0,s.Lk)("div",_,[(0,s.bF)(i,{icon:"database"})]),(0,s.Lk)("div",C,[a[2]||(a[2]=(0,s.Lk)("div",{class:"card-title"},"文件总数",-1)),(0,s.Lk)("div",V,(0,h.v_)(n.indexInfo.totalFiles?.toLocaleString()||"0"),1),a[3]||(a[3]=(0,s.Lk)("div",{class:"card-subtitle"},"点击刷新",-1))])]),(0,s.Lk)("div",S,[(0,s.Lk)("div",T,[(0,s.bF)(i,{icon:"clock"})]),(0,s.Lk)("div",L,[a[4]||(a[4]=(0,s.Lk)("div",{class:"card-title"},"索引更新时间",-1)),(0,s.Lk)("div",I,(0,h.v_)(o.formatTime(n.indexInfo.lastUpdated)),1),(0,s.Lk)("div",x,(0,h.v_)(o.getTimeAgo(n.indexInfo.lastUpdated)),1)])]),(0,s.Lk)("div",A,[(0,s.Lk)("div",U,[(0,s.bF)(i,{icon:"code-branch"})]),(0,s.Lk)("div",P,[a[5]||(a[5]=(0,s.Lk)("div",{class:"card-title"},"系统版本",-1)),(0,s.Lk)("div",E,"v"+(0,h.v_)(n.version),1)])])]),(0,s.Lk)("div",W,[(0,s.Lk)("div",D,[(0,s.Lk)("div",$,[(0,s.bF)(i,{icon:"share-alt"}),a[6]||(a[6]=(0,s.Lk)("span",null,"上传渠道分布",-1))]),(0,s.Lk)("div",X,[0===Object.keys(n.indexInfo.channelStats||{}).length?((0,s.uX)(),(0,s.CE)("div",j,[(0,s.bF)(i,{icon:"inbox"}),a[7]||(a[7]=(0,s.Lk)("span",null,"暂无数据",-1))])):((0,s.uX)(),(0,s.CE)("div",N,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(n.indexInfo.channelStats,(e,a)=>((0,s.uX)(),(0,s.CE)("div",{key:a,class:"stats-item"},[(0,s.Lk)("div",R,(0,h.v_)(a),1),(0,s.Lk)("div",K,[(0,s.Lk)("div",{class:"stats-fill",style:(0,h.Tr)({width:o.getPercentage(e,n.indexInfo.totalFiles)+"%"})},null,4)]),(0,s.Lk)("div",q,(0,h.v_)(e.toLocaleString()),1)]))),128))]))])]),(0,s.Lk)("div",O,[(0,s.Lk)("div",B,[(0,s.bF)(i,{icon:"file-alt"}),a[8]||(a[8]=(0,s.Lk)("span",null,"文件状态分布",-1))]),(0,s.Lk)("div",M,[0===Object.keys(n.indexInfo.typeStats||{}).length?((0,s.uX)(),(0,s.CE)("div",Q,[(0,s.bF)(i,{icon:"inbox"}),a[9]||(a[9]=(0,s.Lk)("span",null,"暂无数据",-1))])):((0,s.uX)(),(0,s.CE)("div",z,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(n.indexInfo.typeStats,(e,a)=>((0,s.uX)(),(0,s.CE)("div",{key:a,class:"stats-item"},[(0,s.Lk)("div",J,(0,h.v_)(a||"未知类型"),1),(0,s.Lk)("div",Z,[(0,s.Lk)("div",{class:"stats-fill type-fill",style:(0,h.Tr)({width:o.getPercentage(e,n.indexInfo.totalFiles)+"%"})},null,4)]),(0,s.Lk)("div",G,(0,h.v_)(e.toLocaleString()),1)]))),128))]))])])]),(0,s.Lk)("div",H,[(0,s.Lk)("div",Y,[(0,s.Lk)("div",ee,[(0,s.bF)(i,{icon:"tools"}),a[10]||(a[10]=(0,s.Lk)("span",null,"系统维护",-1))]),(0,s.Lk)("div",ae,[(0,s.Lk)("div",te,[(0,s.bF)(r,{content:"重新扫描所有文件并更新索引数据,适用于数据不一致时的修复",placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{type:"primary",loading:n.rebuilding,onClick:o.rebuildIndex,class:"action-btn rebuild-btn"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"sync-alt"}),(0,s.eW)(" "+(0,h.v_)(n.rebuilding?"重建中...":"重建索引"),1)]),_:1},8,["loading","onClick"])]),_:1}),(0,s.bF)(r,{content:"备份所有文件元数据和系统设置到JSON文件",placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{type:"success",loading:n.backing,onClick:o.backupData,class:"action-btn backup-btn"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"download"}),(0,s.eW)(" "+(0,h.v_)(n.backing?"备份中...":"备份数据"),1)]),_:1},8,["loading","onClick"])]),_:1}),(0,s.bF)(r,{content:"从备份文件恢复数据,将覆盖现有的文件元数据和系统设置",placement:"top"},{default:(0,s.k6)(()=>[(0,s.Lk)("div",le,[(0,s.Lk)("input",{type:"file",ref:"fileInput",accept:".json",onChange:a[1]||(a[1]=(...e)=>o.handleFileSelect&&o.handleFileSelect(...e)),style:{display:"none"}},null,544),(0,s.bF)(d,{type:"warning",loading:n.restoring,onClick:o.selectRestoreFile,class:"action-btn restore-btn"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"upload"}),(0,s.eW)(" "+(0,h.v_)(n.restoring?"恢复中...":"恢复数据"),1)]),_:1},8,["loading","onClick"])])]),_:1})])])])]),n.indexInfo.newestFile||n.indexInfo.oldestFile?((0,s.uX)(),(0,s.CE)("div",se,[n.indexInfo.newestFile?((0,s.uX)(),(0,s.CE)("div",ne,[(0,s.Lk)("div",oe,[(0,s.bF)(i,{icon:"arrow-up"}),a[11]||(a[11]=(0,s.Lk)("span",null,"最近上传",-1))]),(0,s.Lk)("div",ie,[(0,s.Lk)("div",de,(0,h.v_)(n.indexInfo.newestFile.metadata?.FileName||n.indexInfo.newestFile.id),1),(0,s.Lk)("div",re,(0,h.v_)(o.formatTime(n.indexInfo.newestFile.metadata?.TimeStamp)),1)])])):(0,s.Q3)("",!0),n.indexInfo.oldestFile?((0,s.uX)(),(0,s.CE)("div",ce,[(0,s.Lk)("div",ue,[(0,s.bF)(i,{icon:"arrow-down"}),a[12]||(a[12]=(0,s.Lk)("span",null,"最早上传",-1))]),(0,s.Lk)("div",me,[(0,s.Lk)("div",pe,(0,h.v_)(n.indexInfo.oldestFile.metadata?.FileName||n.indexInfo.oldestFile.id),1),(0,s.Lk)("div",he,(0,h.v_)(o.formatTime(n.indexInfo.oldestFile.metadata?.TimeStamp)),1)])])):(0,s.Q3)("",!0)])):(0,s.Q3)("",!0)])),[[c,n.loading]])}t(4603),t(7566),t(8721);var ge=t(797),ke={rE:"2.2.6"},fe={name:"SysCogStatus",data(){return{loading:!1,rebuilding:!1,backing:!1,restoring:!1,indexInfo:{},version:ke.rE}},mounted(){this.fetchIndexInfo()},methods:{async fetchIndexInfo(){this.loading=!0;try{const e=await(0,ge.A)("/api/manage/list?action=info",{method:"GET"});if(!e.ok)throw new Error("API请求失败");{const a=await e.json();this.indexInfo=a}}catch(e){console.error("获取索引信息失败:",e),this.$message.error("获取索引信息失败")}finally{this.loading=!1}},async rebuildIndex(){this.rebuilding=!0;try{const e=await(0,ge.A)("/api/manage/list?action=rebuild",{method:"GET"});if(!e.ok)throw new Error("API请求失败");this.$message.success("索引重建已启动,请稍后刷新查看最新状态"),setTimeout(()=>{this.fetchIndexInfo()},3e3)}catch(e){console.error("重建索引失败:",e),this.$message.error("重建索引失败")}finally{this.rebuilding=!1}},async backupData(){this.backing=!0;try{const e=await(0,ge.A)("/api/manage/sysConfig/backup?action=backup",{method:"GET"});if(!e.ok){const a=await e.json();throw new Error(a.error||"API请求失败")}{const a=await e.blob(),t=window.URL.createObjectURL(a),l=document.createElement("a");l.href=t,l.download=`imgbed_backup_${(new Date).toISOString().split("T")[0]}.json`,document.body.appendChild(l),l.click(),document.body.removeChild(l),window.URL.revokeObjectURL(t),this.$message.success("备份文件已下载")}}catch(e){console.error("备份数据失败:",e),this.$message.error("备份数据失败: "+e.message)}finally{this.backing=!1}},selectRestoreFile(){this.restoring||this.$refs.fileInput.click()},async handleFileSelect(e){const a=e.target.files[0];if(a)if(a.name.endsWith(".json")){try{await this.$confirm("恢复操作将覆盖现有的文件元数据和系统设置,此操作不可逆。确定要继续吗?","确认恢复",{confirmButtonText:"确定恢复",cancelButtonText:"取消",type:"warning"}),await this.restoreData(a)}catch(t){"cancel"!==t&&console.error("确认恢复失败:",t)}e.target.value=""}else this.$message.error("请选择JSON格式的备份文件")},async restoreData(e){this.restoring=!0;try{const a=await(0,ge.A)("/api/manage/sysConfig/backup?action=restore",{method:"POST",headers:{"Content-Type":"application/json"},body:await e.text()});if(!a.ok){const e=await a.json();throw new Error(e.error||"API请求失败")}{const e=await a.json();this.$message.success(`恢复完成!已恢复 ${e.stats.restoredFiles} 个文件和 ${e.stats.restoredSettings} 个设置项`),setTimeout(()=>{this.fetchIndexInfo()},1e3)}}catch(a){console.error("恢复数据失败:",a),this.$message.error("恢复数据失败: "+a.message)}finally{this.restoring=!1}},formatTime(e){if(!e)return"未知";const a=new Date(e);return a.toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})},getPercentage(e,a){return a&&0!==a?Math.round(e/a*100):0},getTimeAgo(e){if(!e)return"";const a=Date.now(),t=a-e,l=Math.floor(t/6e4),s=Math.floor(t/36e5),n=Math.floor(t/864e5);return n>0?`${n}天前`:s>0?`${s}小时前`:l>0?`${l}分钟前`:"刚刚"}}};const we=(0,d.A)(fe,[["render",be],["__scopeId","data-v-aa93b322"]]);var ve=we,Fe=t(9623),ye=(t(6711),t(2006)),_e=(t(8642),t(3003),t(5558)),Ce=(t(8075),t(6810));t(4396),t(4885);const Ve={class:"upload-settings"},Se={class:"upload-channel"},Te={class:"first-title"},Le={class:"channel-settings"},Ie={class:"second-title"},xe={key:0},Ae={key:1},Ue={key:2},Pe={class:"actions"};function Ee(e,a,t,l,n,o){const i=(0,s.g2)("font-awesome-icon"),d=m.R7,r=Ce.ll,c=Ce.MQ,u=_e.qi,p=ye.xE,b=ye.US,g=Fe.WK,k=v.S2,f=w.A;return(0,s.bo)(((0,s.uX)(),(0,s.CE)("div",Ve,[(0,s.Lk)("div",Se,[(0,s.Lk)("h3",Te,[a[3]||(a[3]=(0,s.eW)("上传渠道 ",-1)),(0,s.bF)(d,{content:"设置每类上传渠道的详细配置 <br> 点击“保存设置”会同时保存对每类配置的修改",placement:"right","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),(0,s.bF)(c,{modelValue:n.activeChannel,"onUpdate:modelValue":a[0]||(a[0]=e=>n.activeChannel=e)},{default:(0,s.k6)(()=>[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(n.channels,e=>((0,s.uX)(),(0,s.Wv)(r,{key:e.value,label:e.value},{default:(0,s.k6)(()=>[(0,s.eW)((0,h.v_)(e.label),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue"])]),(0,s.Lk)("div",Le,[(0,s.Lk)("h4",Ie,[(0,s.eW)((0,h.v_)(o.activeChannelLabel)+" 设置 ",1),"telegram"===n.activeChannel?((0,s.uX)(),(0,s.Wv)(d,{key:0,content:"为保证兼容性,v2版本前设置的 Telegram 相关环境变量请保留",placement:"right"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})):(0,s.Q3)("",!0)]),"telegram"===n.activeChannel?((0,s.uX)(),(0,s.CE)("div",xe,[(0,s.bF)(b,{model:n.telegramSettings,"label-width":"120px",class:"channel-form"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{label:"负载均衡"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{modelValue:n.telegramSettings.loadBalance.enabled,"onUpdate:modelValue":a[1]||(a[1]=e=>n.telegramSettings.loadBalance.enabled=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"]),((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(n.telegramSettings.channels,(e,a)=>((0,s.uX)(),(0,s.Wv)(b,{key:a,model:e,"label-width":"120px",rules:n.tgRules,ref_for:!0,ref:"tgChannelForm",class:"channel-form"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{label:"渠道名",prop:"name"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.name,"onUpdate:modelValue":a=>e.name=a,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"启用渠道",prop:"enabled"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{modelValue:e.enabled,"onUpdate:modelValue":a=>e.enabled=a},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),(0,s.bF)(p,{label:"Bot Token",prop:"botToken"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.botToken,"onUpdate:modelValue":a=>e.botToken=a,disabled:e.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"Chat ID",prop:"chatId"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.chatId,"onUpdate:modelValue":a=>e.chatId=a,disabled:e.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,null,{default:(0,s.k6)(()=>[(0,s.bF)(k,{type:"danger",onClick:e=>o.deleteChannel(a),size:"small",disabled:e.fixed},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"trash-alt"})]),_:1},8,["onClick","disabled"])]),_:2},1024)]),_:2},1032,["model","rules"]))),128))])):(0,s.Q3)("",!0),"cfr2"===n.activeChannel?((0,s.uX)(),(0,s.CE)("div",Ae,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(n.cfr2Settings.channels,(e,t)=>((0,s.uX)(),(0,s.Wv)(b,{model:e,"label-width":"120px",class:"channel-form"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{label:"渠道名"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.name,"onUpdate:modelValue":a=>e.name=a,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"启用渠道"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{modelValue:e.enabled,"onUpdate:modelValue":a=>e.enabled=a},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),(0,s.bF)(p,null,{label:(0,s.k6)(()=>[a[4]||(a[4]=(0,s.eW)(" 公开访问链接 ",-1)),(0,s.bF)(d,{content:"若启用图像审查,请设置该项",placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.publicUrl,"onUpdate:modelValue":a=>e.publicUrl=a},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024)]),_:2},1032,["model"]))),256))])):(0,s.Q3)("",!0),"s3"===n.activeChannel?((0,s.uX)(),(0,s.CE)("div",Ue,[(0,s.bF)(b,{model:n.s3Settings,"label-width":"120px",class:"channel-form"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{label:"负载均衡"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{modelValue:n.s3Settings.loadBalance.enabled,"onUpdate:modelValue":a[2]||(a[2]=e=>n.s3Settings.loadBalance.enabled=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"]),((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(n.s3Settings.channels,(e,t)=>((0,s.uX)(),(0,s.Wv)(b,{model:e,"label-width":"120px",rules:n.s3Rules,ref_for:!0,ref:"s3ChannelForm",class:"channel-form"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{label:"渠道名",prop:"name"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.name,"onUpdate:modelValue":a=>e.name=a,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"启用渠道",prop:"enabled"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{modelValue:e.enabled,"onUpdate:modelValue":a=>e.enabled=a},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024),(0,s.bF)(p,{prop:"endpoint"},{label:(0,s.k6)(()=>[a[5]||(a[5]=(0,s.eW)(" Endpoint ",-1)),(0,s.bF)(d,{content:"服务提供商 Endpoint,例如 https://s3.us-east-005.backblazeb2.com",placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.endpoint,"onUpdate:modelValue":a=>e.endpoint=a,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"路径风格",prop:"pathStyle"},{default:(0,s.k6)(()=>[(0,s.bF)(u,{modelValue:e.pathStyle,"onUpdate:modelValue":a=>e.pathStyle=a,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"存储桶名称",prop:"bucketName"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.bucketName,"onUpdate:modelValue":a=>e.bucketName=a,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"存储桶区域",prop:"region"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.region,"onUpdate:modelValue":a=>e.region=a,placeholder:"默认填写 auto 即可",disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"访问密钥 ID",prop:"accessKeyId"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.accessKeyId,"onUpdate:modelValue":a=>e.accessKeyId=a,disabled:e.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,{label:"机密访问密钥",prop:"secretAccessKey"},{default:(0,s.k6)(()=>[(0,s.bF)(g,{modelValue:e.secretAccessKey,"onUpdate:modelValue":a=>e.secretAccessKey=a,disabled:e.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","onUpdate:modelValue","disabled"])]),_:2},1024),(0,s.bF)(p,null,{default:(0,s.k6)(()=>[(0,s.bF)(k,{type:"danger",onClick:e=>o.deleteChannel(t),size:"small",disabled:e.fixed},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"trash-alt"})]),_:1},8,["onClick","disabled"])]),_:2},1024)]),_:2},1032,["model","rules"]))),256))])):(0,s.Q3)("",!0)]),(0,s.Lk)("div",Pe,[(0,s.bF)(k,{type:"primary",onClick:o.addChannel},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"plus"})]),_:1},8,["onClick"]),(0,s.bF)(k,{type:"primary",onClick:o.saveSettings},{default:(0,s.k6)(()=>[...a[6]||(a[6]=[(0,s.eW)("保存设置",-1)])]),_:1},8,["onClick"])])])),[[f,n.loading]])}t(8111),t(1148),t(2489),t(116),t(7588),t(1701),t(3110);var We={data(){return{channels:[{value:"telegram",label:"Telegram"},{value:"cfr2",label:"CloudFlareR2"},{value:"s3",label:"S3"}],activeChannel:"telegram",telegramSettings:{loadBalance:{},channels:[]},tgRules:{name:[{required:!0,message:"请输入渠道名",trigger:"blur"},{validator:(e,a,t)=>{const l=this.telegramSettings.channels.map(e=>e.name);if(l.filter(e=>e===a).length>1)t(new Error("渠道名不能重复"));else if("Telegram_env"===a){const e=this.telegramSettings.channels.find(e=>e.name===a).savePath;"environment variable"!==e?t(new Error("渠道名不能为保留值")):t()}else t()},trigger:"blur"}],botToken:[{required:!0,message:"请输入 Bot Token",trigger:"blur"}],chatId:[{required:!0,message:"请输入 Chat ID",trigger:"blur"}]},cfr2Settings:{channels:[]},s3Settings:{loadBalance:{},channels:[]},s3Rules:{name:[{required:!0,message:"请输入渠道名",trigger:"blur"},{validator:(e,a,t)=>{const l=this.s3Settings.channels.map(e=>e.name);if(l.filter(e=>e===a).length>1)t(new Error("渠道名不能重复"));else if("S3_env"===a){const e=this.s3Settings.channels.find(e=>e.name===a).savePath;"environment variable"!==e?t(new Error("渠道名不能为保留值")):t()}else t()},trigger:"blur"}],endpoint:[{required:!0,message:"请输入 Endpoint",trigger:"blur"}],bucketName:[{required:!0,message:"请输入存储桶名称",trigger:"blur"}],region:[{required:!0,message:"请输入存储桶区域",trigger:"blur"}],accessKeyId:[{required:!0,message:"请输入访问密钥 ID",trigger:"blur"}],secretAccessKey:[{required:!0,message:"请输入机密访问密钥",trigger:"blur"}]},loading:!1}},computed:{activeChannelLabel(){const e=this.channels.find(e=>e.value===this.activeChannel);return e?e.label:""}},methods:{addChannel(){switch(this.activeChannel){case"telegram":this.telegramSettings.channels.push({id:this.telegramSettings.channels.length+1,name:"",type:"telegram",savePath:"database",botToken:"",chatId:"",enabled:!0,fixed:!1});break;case"cfr2":this.$message.error("R2渠道请通过绑定 R2 存储桶或通过 S3 渠道添加");break;case"s3":this.s3Settings.channels.push({id:this.s3Settings.channels.length+1,name:"",type:"s3",savePath:"database",accessKeyId:"",secretAccessKey:"",region:"",bucketName:"",endpoint:"",pathStyle:!1,enabled:!0,fixed:!1});break}},deleteChannel(e){switch(this.activeChannel){case"telegram":this.telegramSettings.channels.forEach((a,t)=>{t>e&&(a.id-=1)}),this.telegramSettings.channels.splice(e,1);break;case"cfr2":this.cfr2Settings.channels.forEach((a,t)=>{t>e&&(a.id-=1)}),this.cfr2Settings.channels.splice(e,1);break;case"s3":this.s3Settings.channels.forEach((a,t)=>{t>e&&(a.id-=1)}),this.s3Settings.channels.splice(e,1);break}},saveSettings(){let e=[];this.$refs.tgChannelForm&&this.$refs.tgChannelForm.forEach(a=>{e.push(new Promise(e=>{a.validate(a=>e(a))}))}),this.$refs.s3ChannelForm&&this.$refs.s3ChannelForm.forEach(a=>{e.push(new Promise(e=>{a.validate(a=>e(a))}))}),Promise.all(e).then(e=>{const a=e.every(e=>e);if(!a)return;const t={telegram:this.telegramSettings,cfr2:this.cfr2Settings,s3:this.s3Settings};(0,ge.A)("/api/manage/sysConfig/upload",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).then(()=>{this.$message.success("设置已保存")})})}},mounted(){this.loading=!0,(0,ge.A)("/api/manage/sysConfig/upload").then(e=>e.json()).then(e=>{this.telegramSettings=e.telegram,this.cfr2Settings=e.cfr2,this.s3Settings=e.s3}).finally(()=>{this.loading=!1})}};const De=(0,d.A)(We,[["render",Ee],["__scopeId","data-v-f7451eda"]]);var $e=De,Xe=t(9267),je=(t(5616),t(850)),Ne=(t(8736),t(6018)),Re=(t(6808),t(200),t(7138)),Ke=(t(5802),t(2687)),qe=(t(8785),t(4752),t(5130));const Oe={class:"security-settings"},Be={class:"first-settings"},Me={class:"second-title token-title"},Qe={class:"token-actions"},ze={class:"token-table-container"},Je={class:"table-cell-content"},Ze={class:"table-cell-content"},Ge={class:"token-display"},He={class:"table-cell-content"},Ye={class:"table-cell-content"},ea={class:"table-cell-content action-buttons"},aa={class:"first-settings"},ta={class:"second-title"},la={class:"first-settings"},sa={class:"actions"},na={class:"dialog-footer"},oa={class:"dialog-footer"},ia={class:"token-result"},da={style:{"margin-bottom":"15px",color:"#e6a23c"}},ra={class:"dialog-footer"};function ca(e,a,t,l,n,o){const i=Fe.WK,d=ye.xE,r=ye.US,c=(0,s.g2)("font-awesome-icon"),u=v.S2,p=Re.o8,b=Ke.u,g=Re.Up,k=m.R7,f=_e.qi,F=Ne.P9,y=Ne.AV,_=je.dI,C=je.o5,V=Xe.kZ,S=w.A;return(0,s.bo)(((0,s.uX)(),(0,s.CE)("div",Oe,[(0,s.Lk)("div",Be,[a[26]||(a[26]=(0,s.Lk)("h3",{class:"first-title"},"认证管理",-1)),a[27]||(a[27]=(0,s.Lk)("h4",{class:"second-title"},"用户端认证",-1)),(0,s.bF)(r,{model:n.authSettings.user,rules:n.userPassRules,ref:"userPassForm","label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{label:"上传密码",prop:"authCode"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.authSettings.user.authCode,"onUpdate:modelValue":a[0]||(a[0]=e=>n.authSettings.user.authCode=e),type:"password","show-password":"",onInput:o.handleUserPassInput,autocomplete:"new-password"},null,8,["modelValue","onInput"])]),_:1}),(0,s.bF)(qe.eB,{name:"fade-slide",mode:"out-in"},{default:(0,s.k6)(()=>[n.showUserPassConfirm?((0,s.uX)(),(0,s.Wv)(d,{label:"确认密码",prop:"confirmNewUserPassword",key:"user-confirm"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.authSettings.user.confirmNewUserPassword,"onUpdate:modelValue":a[1]||(a[1]=e=>n.authSettings.user.confirmNewUserPassword=e),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1})):(0,s.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),a[28]||(a[28]=(0,s.Lk)("h4",{class:"second-title"},"管理端认证",-1)),(0,s.bF)(r,{model:n.authSettings.admin,rules:n.adminPassRules,ref:"adminPassForm","label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{label:"用户名",prop:"adminUsername"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.authSettings.admin.adminUsername,"onUpdate:modelValue":a[2]||(a[2]=e=>n.authSettings.admin.adminUsername=e),autocomplete:"new-password"},null,8,["modelValue"])]),_:1}),(0,s.bF)(d,{label:"密码",prop:"adminPassword"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.authSettings.admin.adminPassword,"onUpdate:modelValue":a[3]||(a[3]=e=>n.authSettings.admin.adminPassword=e),type:"password","show-password":"",onInput:o.handleAdminPassInput,autocomplete:"new-password"},null,8,["modelValue","onInput"])]),_:1}),(0,s.bF)(qe.eB,{name:"fade-slide",mode:"out-in"},{default:(0,s.k6)(()=>[n.showAdminPassConfirm?((0,s.uX)(),(0,s.Wv)(d,{label:"确认密码",prop:"confirmNewAdminPassword",key:"admin-confirm"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.authSettings.admin.confirmNewAdminPassword,"onUpdate:modelValue":a[4]||(a[4]=e=>n.authSettings.admin.confirmNewAdminPassword=e),type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue"])]),_:1})):(0,s.Q3)("",!0)]),_:1})]),_:1},8,["model","rules"]),(0,s.Lk)("h4",Me,[a[23]||(a[23]=(0,s.eW)("API Token 管理 ",-1)),(0,s.Lk)("a",Qe,[(0,s.bF)(u,{type:"primary",size:"small",onClick:a[5]||(a[5]=e=>n.showCreateTokenDialog=!0),circle:""},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"plus"})]),_:1})])]),(0,s.Lk)("div",ze,[(0,s.bo)(((0,s.uX)(),(0,s.Wv)(g,{data:n.apiTokens,class:"token-table"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{prop:"name",label:"名称","header-align":"center"},{default:(0,s.k6)(e=>[(0,s.Lk)("div",Je,(0,h.v_)(e.row.name),1)]),_:1}),(0,s.bF)(p,{prop:"token",label:"Token","header-align":"center"},{default:(0,s.k6)(e=>[(0,s.Lk)("div",Ze,[(0,s.Lk)("span",Ge,(0,h.v_)(e.row.token),1)])]),_:1}),(0,s.bF)(p,{prop:"permissions",label:"权限","header-align":"center"},{default:(0,s.k6)(e=>[(0,s.Lk)("div",He,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(e.row.permissions,e=>((0,s.uX)(),(0,s.Wv)(b,{key:e,size:"small",class:"permission-tag"},{default:(0,s.k6)(()=>[(0,s.eW)((0,h.v_)(o.getPermissionText(e)),1)]),_:2},1024))),128))])]),_:1}),(0,s.bF)(p,{prop:"createdAt",label:"创建时间","header-align":"center"},{default:(0,s.k6)(e=>[(0,s.Lk)("div",Ye,(0,h.v_)(o.formatDate(e.row.createdAt)),1)]),_:1}),(0,s.bF)(p,{label:"操作",fixed:"right","header-align":"center"},{default:(0,s.k6)(e=>[(0,s.Lk)("div",ea,[(0,s.bF)(u,{class:"action-button",size:"small",onClick:a=>o.editToken(e.row)},{default:(0,s.k6)(()=>[...a[24]||(a[24]=[(0,s.eW)("编辑",-1)])]),_:1},8,["onClick"]),(0,s.bF)(u,{class:"action-button",size:"small",type:"danger",onClick:a=>o.deleteToken(e.row.id)},{default:(0,s.k6)(()=>[...a[25]||(a[25]=[(0,s.eW)("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[S,n.tokenLoading]])])]),(0,s.Lk)("div",aa,[a[30]||(a[30]=(0,s.Lk)("h3",{class:"first-title"},"上传管理",-1)),(0,s.Lk)("h4",ta,[a[29]||(a[29]=(0,s.eW)("图像审查 ",-1)),(0,s.bF)(k,{content:"仅对非分块上传文件生效,支持 nsfwjs 和 moderatecontent.com 渠道",placement:"top"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),(0,s.bF)(r,{model:n.uploadSettings.moderate,"label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{label:"开启审查"},{default:(0,s.k6)(()=>[(0,s.bF)(f,{modelValue:n.uploadSettings.moderate.enabled,"onUpdate:modelValue":a[6]||(a[6]=e=>n.uploadSettings.moderate.enabled=e)},null,8,["modelValue"])]),_:1}),(0,s.bF)(d,{label:"审查渠道"},{default:(0,s.k6)(()=>[(0,s.bF)(y,{modelValue:n.uploadSettings.moderate.channel,"onUpdate:modelValue":a[7]||(a[7]=e=>n.uploadSettings.moderate.channel=e),placeholder:"请选择审查渠道"},{default:(0,s.k6)(()=>[(0,s.bF)(F,{label:"默认(官方提供)",value:"default"}),(0,s.bF)(F,{label:"moderatecontent.com",value:"moderatecontent.com"}),(0,s.bF)(F,{label:"nsfwjs",value:"nsfwjs"})]),_:1},8,["modelValue"])]),_:1}),"moderatecontent.com"===n.uploadSettings.moderate.channel?((0,s.uX)(),(0,s.Wv)(d,{key:0,label:"API Key"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.uploadSettings.moderate.moderateContentApiKey,"onUpdate:modelValue":a[8]||(a[8]=e=>n.uploadSettings.moderate.moderateContentApiKey=e)},null,8,["modelValue"])]),_:1})):(0,s.Q3)("",!0),"nsfwjs"===n.uploadSettings.moderate.channel?((0,s.uX)(),(0,s.Wv)(d,{key:1,label:"API 路径"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.uploadSettings.moderate.nsfwApiPath,"onUpdate:modelValue":a[9]||(a[9]=e=>n.uploadSettings.moderate.nsfwApiPath=e),placeholder:"https://nsfwjs.your.domain"},null,8,["modelValue"])]),_:1})):(0,s.Q3)("",!0)]),_:1},8,["model"])]),(0,s.Lk)("div",la,[a[33]||(a[33]=(0,s.Lk)("h3",{class:"first-title"},"访问管理",-1)),a[34]||(a[34]=(0,s.Lk)("h4",{class:"second-title"},"域名过滤",-1)),(0,s.bF)(r,{model:n.accessSettings,"label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,null,{label:(0,s.k6)(()=>[a[31]||(a[31]=(0,s.eW)(" 放行域名 ",-1)),(0,s.bF)(k,{content:"1.针对访问域名设置权限 <br/> 2.留空默认全部放行,多个域名请用英文逗号分隔",placement:"top","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.accessSettings.allowedDomains,"onUpdate:modelValue":a[10]||(a[10]=e=>n.accessSettings.allowedDomains=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"]),a[35]||(a[35]=(0,s.Lk)("h4",{class:"second-title"},"白名单模式",-1)),(0,s.bF)(r,{model:n.accessSettings,"label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,null,{label:(0,s.k6)(()=>[a[32]||(a[32]=(0,s.eW)(" 是否开启 ",-1)),(0,s.bF)(k,{content:"1.针对文件设置权限 <br> 2.开启后,仅被加入白名单的文件可被访问",placement:"top","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(c,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(f,{modelValue:n.accessSettings.whiteListMode,"onUpdate:modelValue":a[11]||(a[11]=e=>n.accessSettings.whiteListMode=e)},null,8,["modelValue"])]),_:1})]),_:1},8,["model"])]),(0,s.Lk)("div",sa,[(0,s.bF)(u,{type:"primary",onClick:o.saveSettings},{default:(0,s.k6)(()=>[...a[36]||(a[36]=[(0,s.eW)("保存设置",-1)])]),_:1},8,["onClick"])]),(0,s.bF)(V,{modelValue:n.showCreateTokenDialog,"onUpdate:modelValue":a[15]||(a[15]=e=>n.showCreateTokenDialog=e),title:"创建新 API Token",width:o.dialogWidth},{footer:(0,s.k6)(()=>[(0,s.Lk)("span",na,[(0,s.bF)(u,{onClick:a[14]||(a[14]=e=>n.showCreateTokenDialog=!1)},{default:(0,s.k6)(()=>[...a[40]||(a[40]=[(0,s.eW)("取消",-1)])]),_:1}),(0,s.bF)(u,{type:"primary",onClick:o.createToken},{default:(0,s.k6)(()=>[...a[41]||(a[41]=[(0,s.eW)("创建",-1)])]),_:1},8,["onClick"])])]),default:(0,s.k6)(()=>[(0,s.bF)(r,{model:n.newToken,rules:n.tokenRules,ref:"tokenForm","label-width":"100px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{label:"Token 名称",prop:"name"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.newToken.name,"onUpdate:modelValue":a[12]||(a[12]=e=>n.newToken.name=e),placeholder:"请输入Token名称"},null,8,["modelValue"])]),_:1}),(0,s.bF)(d,{label:"权限",prop:"permissions"},{default:(0,s.k6)(()=>[(0,s.bF)(C,{modelValue:n.newToken.permissions,"onUpdate:modelValue":a[13]||(a[13]=e=>n.newToken.permissions=e)},{default:(0,s.k6)(()=>[(0,s.bF)(_,{label:"upload"},{default:(0,s.k6)(()=>[...a[37]||(a[37]=[(0,s.eW)("上传",-1)])]),_:1}),(0,s.bF)(_,{label:"delete"},{default:(0,s.k6)(()=>[...a[38]||(a[38]=[(0,s.eW)("删除",-1)])]),_:1}),(0,s.bF)(_,{label:"list"},{default:(0,s.k6)(()=>[...a[39]||(a[39]=[(0,s.eW)("列出",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["modelValue","width"]),(0,s.bF)(V,{modelValue:n.showEditTokenDialog,"onUpdate:modelValue":a[19]||(a[19]=e=>n.showEditTokenDialog=e),title:"编辑 API Token",width:o.dialogWidth},{footer:(0,s.k6)(()=>[(0,s.Lk)("span",oa,[(0,s.bF)(u,{onClick:a[18]||(a[18]=e=>n.showEditTokenDialog=!1)},{default:(0,s.k6)(()=>[...a[45]||(a[45]=[(0,s.eW)("取消",-1)])]),_:1}),(0,s.bF)(u,{type:"primary",onClick:o.updateToken},{default:(0,s.k6)(()=>[...a[46]||(a[46]=[(0,s.eW)("更新",-1)])]),_:1},8,["onClick"])])]),default:(0,s.k6)(()=>[(0,s.bF)(r,{model:n.editingToken,rules:n.tokenRules,ref:"editTokenForm","label-width":"100px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{label:"Token 名称"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.editingToken.name,"onUpdate:modelValue":a[16]||(a[16]=e=>n.editingToken.name=e),disabled:""},null,8,["modelValue"])]),_:1}),(0,s.bF)(d,{label:"权限",prop:"permissions"},{default:(0,s.k6)(()=>[(0,s.bF)(C,{modelValue:n.editingToken.permissions,"onUpdate:modelValue":a[17]||(a[17]=e=>n.editingToken.permissions=e)},{default:(0,s.k6)(()=>[(0,s.bF)(_,{label:"upload"},{default:(0,s.k6)(()=>[...a[42]||(a[42]=[(0,s.eW)("上传",-1)])]),_:1}),(0,s.bF)(_,{label:"delete"},{default:(0,s.k6)(()=>[...a[43]||(a[43]=[(0,s.eW)("删除",-1)])]),_:1}),(0,s.bF)(_,{label:"list"},{default:(0,s.k6)(()=>[...a[44]||(a[44]=[(0,s.eW)("列出",-1)])]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["modelValue","width"]),(0,s.bF)(V,{modelValue:n.showTokenResultDialog,"onUpdate:modelValue":a[22]||(a[22]=e=>n.showTokenResultDialog=e),title:"Token 创建成功",width:o.dialogWidth},{footer:(0,s.k6)(()=>[(0,s.Lk)("span",ra,[(0,s.bF)(u,{type:"primary",onClick:a[21]||(a[21]=e=>n.showTokenResultDialog=!1)},{default:(0,s.k6)(()=>[...a[49]||(a[49]=[(0,s.eW)("我已保存",-1)])]),_:1})])]),default:(0,s.k6)(()=>[(0,s.Lk)("div",ia,[(0,s.Lk)("p",da,[(0,s.bF)(c,{icon:"exclamation-triangle",style:{"margin-right":"5px"}}),a[47]||(a[47]=(0,s.eW)(" 请妥善保存以下Token,关闭此窗口后将无法再次查看完整Token! ",-1))]),(0,s.bF)(r,{"label-width":"100px"},{default:(0,s.k6)(()=>[(0,s.bF)(d,{label:"Token 名称"},{default:(0,s.k6)(()=>[(0,s.Lk)("span",null,(0,h.v_)(n.createdToken.name),1)]),_:1}),(0,s.bF)(d,{label:"完整Token"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{modelValue:n.createdToken.token,"onUpdate:modelValue":a[20]||(a[20]=e=>n.createdToken.token=e),readonly:""},{append:(0,s.k6)(()=>[(0,s.bF)(u,{onClick:o.copyToken},{default:(0,s.k6)(()=>[...a[48]||(a[48]=[(0,s.eW)("复制",-1)])]),_:1},8,["onClick"])]),_:1},8,["modelValue"])]),_:1})]),_:1})])]),_:1},8,["modelValue","width"])])),[[S,n.loading]])}var ua={data(){return{authSettings:{user:{},admin:{}},uploadSettings:{moderate:{}},accessSettings:{},apiTokens:[],loading:!1,tokenLoading:!1,oriUserPassword:"",oriAdminPassword:"",showUserPassConfirm:!1,showAdminPassConfirm:!1,showCreateTokenDialog:!1,showEditTokenDialog:!1,showTokenResultDialog:!1,newToken:{name:"",owner:"",permissions:[]},editingToken:{id:"",name:"",owner:"",permissions:[]},createdToken:{name:"",token:""},userPassRules:{authCode:[{validator:(e,a,t)=>{const l=["%","&","?","#","/"],s=l.some(e=>a&&a.includes(e));s?t(new Error("密码不能包含部分URL保留字符: % & ? # /")):t()},trigger:"blur"}],confirmNewUserPassword:[{message:"请再次输入上传密码",trigger:"blur"},{validator:(e,a,t)=>{a&&a!==this.authSettings.user.authCode?t(new Error("两次输入密码不一致")):t()},trigger:"blur"}]},adminPassRules:{confirmNewAdminPassword:[{message:"请再次输入管理密码",trigger:"blur"},{validator:(e,a,t)=>{a&&a!==this.authSettings.admin.adminPassword?t(new Error("两次输入密码不一致")):t()},trigger:"blur"}]},tokenRules:{name:[{required:!0,message:"请输入Token名称",trigger:"blur"}],permissions:[{required:!0,message:"请选择权限",trigger:"change"}]}}},computed:{dialogWidth(){return window.innerWidth>768?"50%":"90%"}},methods:{handleUserPassInput(){this.authSettings.user.authCode!==this.oriUserPassword?this.showUserPassConfirm=!0:this.showUserPassConfirm=!1},handleAdminPassInput(){this.authSettings.admin.adminPassword!==this.oriAdminPassword?this.showAdminPassConfirm=!0:this.showAdminPassConfirm=!1},getPermissionText(e){const a={upload:"上传",delete:"删除",list:"列出"};return a[e]||e},formatDate(e){return new Date(e).toLocaleString("zh-CN")},async loadApiTokens(){this.tokenLoading=!0;try{const e=await(0,ge.A)("/api/manage/apiTokens"),a=await e.json();this.apiTokens=a.tokens||[]}catch(e){this.$message.error("获取Token列表失败")}finally{this.tokenLoading=!1}},createToken(){this.$refs.tokenForm.validate(async e=>{if(e)try{this.newToken.owner="admin";const e=await(0,ge.A)("/api/manage/apiTokens",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.newToken)}),a=await e.json();e.ok?(this.createdToken={name:a.name,token:a.token},this.showCreateTokenDialog=!1,this.showTokenResultDialog=!0,this.newToken={name:"",owner:"",permissions:[]},await this.loadApiTokens(),this.$message.success("Token创建成功")):this.$message.error(a.error||"Token创建失败")}catch(a){this.$message.error("Token创建失败")}})},editToken(e){this.editingToken={id:e.id,name:e.name,owner:e.owner,permissions:[...e.permissions]},this.showEditTokenDialog=!0},updateToken(){this.$refs.editTokenForm.validate(async e=>{if(e)try{const e=await(0,ge.A)("/api/manage/apiTokens",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({tokenId:this.editingToken.id,permissions:this.editingToken.permissions})}),a=await e.json();e.ok?(this.showEditTokenDialog=!1,await this.loadApiTokens(),this.$message.success("Token权限更新成功")):this.$message.error(a.error||"Token更新失败")}catch(a){this.$message.error("Token更新失败")}})},async deleteToken(e){try{await this.$confirm("此操作将永久删除该Token,是否继续?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"});const a=await(0,ge.A)(`/api/manage/apiTokens?id=${e}`,{method:"DELETE"}),t=await a.json();a.ok?(await this.loadApiTokens(),this.$message.success("Token删除成功")):this.$message.error(t.error||"Token删除失败")}catch(a){"cancel"!==a&&this.$message.error("Token删除失败")}},async copyToken(){try{await navigator.clipboard.writeText(this.createdToken.token),this.$message.success("Token已复制到剪贴板")}catch(e){this.$message.error("复制失败,请手动复制")}},saveSettings(){let e=[];e.push(new Promise(e=>{this.$refs.userPassForm.validate(a=>{e(a)})})),e.push(new Promise(e=>{this.$refs.adminPassForm.validate(a=>{e(a)})})),Promise.all(e).then(e=>{const a=e.every(e=>e);if(!a)return;const t={auth:this.authSettings,upload:this.uploadSettings,access:this.accessSettings};delete t.auth.user.confirmNewUserPassword,delete t.auth.admin.confirmNewAdminPassword,(0,ge.A)("/api/manage/sysConfig/security",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).then(()=>{this.$message.success("设置已保存"),this.oriUserPassword=this.authSettings.user.authCode,this.oriAdminPassword=this.authSettings.admin.adminPassword,this.showUserPassConfirm=!1,this.showAdminPassConfirm=!1})})}},mounted(){this.loading=!0,(0,ge.A)("/api/manage/sysConfig/security").then(e=>e.json()).then(e=>{this.authSettings=e.auth,this.uploadSettings=e.upload,this.accessSettings=e.access,this.oriUserPassword=this.authSettings.user.authCode,this.oriAdminPassword=this.authSettings.admin.adminPassword,this.authSettings.user.confirmNewUserPassword="",this.authSettings.admin.confirmNewAdminPassword="",this.loadApiTokens()}).finally(()=>{this.loading=!1})}};const ma=(0,d.A)(ua,[["render",ca],["__scopeId","data-v-8600e6ea"]]);var pa=ma;const ha={class:"page-settings"},ba={class:"first-title"},ga={class:"actions"};function ka(e,a,t,l,n,o){const i=(0,s.g2)("font-awesome-icon"),d=m.R7,r=Ne.P9,c=Ne.AV,u=_e.qi,p=Fe.WK,b=ye.xE,g=ye.US,k=v.S2,f=w.A;return(0,s.bo)(((0,s.uX)(),(0,s.CE)("div",ha,[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(o.groupedSettings,(e,a)=>((0,s.uX)(),(0,s.CE)("div",{key:a,class:"first-settings"},[(0,s.Lk)("h3",ba,(0,h.v_)(a),1),(0,s.bF)(g,{model:n.settings,"label-width":"150px"},{default:(0,s.k6)(()=>[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(e,(e,a)=>((0,s.uX)(),(0,s.Wv)(b,{key:e.id},{label:(0,s.k6)(()=>[(0,s.eW)((0,h.v_)(e.label)+" ",1),e.tooltip?((0,s.uX)(),(0,s.Wv)(d,{key:0,content:e.tooltip,placement:"top","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1},8,["content"])):(0,s.Q3)("",!0)]),default:(0,s.k6)(()=>["select"===e.type?((0,s.uX)(),(0,s.Wv)(c,{key:0,modelValue:e.value,"onUpdate:modelValue":a=>e.value=a,disabled:e.fixed,placeholder:e.placeholder,style:{width:"100%"}},{default:(0,s.k6)(()=>[((0,s.uX)(!0),(0,s.CE)(s.FK,null,(0,s.pI)(e.options,e=>((0,s.uX)(),(0,s.Wv)(r,{key:e.value,label:e.label,value:e.value},null,8,["label","value"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue","disabled","placeholder"])):"boolean"===e.type?((0,s.uX)(),(0,s.Wv)(u,{key:1,modelValue:e.value,"onUpdate:modelValue":a=>e.value=a,disabled:e.fixed},null,8,["modelValue","onUpdate:modelValue","disabled"])):((0,s.uX)(),(0,s.Wv)(p,{key:2,modelValue:e.value,"onUpdate:modelValue":a=>e.value=a,disabled:e.fixed,placeholder:e.placeholder},null,8,["modelValue","onUpdate:modelValue","disabled","placeholder"]))]),_:2},1024))),128))]),_:2},1032,["model"])]))),128)),(0,s.Lk)("div",ga,[(0,s.bF)(k,{type:"primary",onClick:o.saveSettings},{default:(0,s.k6)(()=>[...a[0]||(a[0]=[(0,s.eW)("保存设置",-1)])]),_:1},8,["onClick"])])])),[[f,n.loading]])}var fa={data(){return{settings:{config:[]},loading:!1}},computed:{groupedSettings(){const e={};return this.settings.config&&this.settings.config.forEach(a=>{const t=a.category||"其他设置";e[t]||(e[t]=[]),e[t].push(a)}),e}},methods:{saveSettings(){(0,ge.A)("/api/manage/sysConfig/page",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.settings)}).then(()=>this.$message.success("设置已保存"))}},mounted(){this.loading=!0,(0,ge.A)("/api/manage/sysConfig/page").then(e=>e.json()).then(e=>{this.settings=e,this.settings.config&&this.settings.config.forEach(e=>{"boolean"===e.type&&("string"===typeof e.value?e.value="true"===e.value:void 0!==e.value&&null!==e.value||(e.value=e.default||!1))})}).finally(()=>{this.loading=!1})}};const wa=(0,d.A)(fa,[["render",ka],["__scopeId","data-v-72823014"]]);var va=wa;const Fa={class:"others-settings"},ya={class:"first-settings"},_a={class:"second-title"},Ca={class:"second-title"},Va={class:"second-title"},Sa={class:"second-title"},Ta={class:"actions"};function La(e,a,t,l,n,o){const i=(0,s.g2)("font-awesome-icon"),d=m.R7,r=_e.qi,c=ye.xE,u=ye.US,p=Fe.WK,h=v.S2,b=w.A;return(0,s.bo)(((0,s.uX)(),(0,s.CE)("div",Fa,[(0,s.Lk)("div",ya,[a[14]||(a[14]=(0,s.Lk)("h3",{class:"first-title"},"其他设置",-1)),(0,s.Lk)("h4",_a,[a[9]||(a[9]=(0,s.eW)("远端遥测 ",-1)),(0,s.bF)(d,{content:"便于问题查找和定位,建议开启",placement:"right"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),(0,s.bF)(u,{model:n.settings.telemetry,"label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{label:"启用"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{modelValue:n.settings.telemetry.enabled,"onUpdate:modelValue":a[0]||(a[0]=e=>n.settings.telemetry.enabled=e),disabled:n.settings.telemetry.fixed},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,s.Lk)("h4",Ca,[a[10]||(a[10]=(0,s.eW)("随机图像API ",-1)),(0,s.bF)(d,{content:"API具体用法请查阅文档",placement:"right"},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),(0,s.bF)(u,{model:n.settings.randomImageAPI,"label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{label:"启用"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{modelValue:n.settings.randomImageAPI.enabled,"onUpdate:modelValue":a[1]||(a[1]=e=>n.settings.randomImageAPI.enabled=e),disabled:n.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,s.bF)(c,{prop:"randomImageAPI.allowedDir"},{label:(0,s.k6)(()=>[a[11]||(a[11]=(0,s.Lk)("span",null,"目录",-1)),(0,s.bF)(d,{content:"1. 开放随机图权限的目录,默认为根目录,多个目录用逗号分隔 <br/> 2. 目录均采用绝对路径,例如/img/cover,表示该目录及其所有子目录的文件可被随机图API访问",placement:"right","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),default:(0,s.k6)(()=>[(0,s.bF)(p,{modelValue:n.settings.randomImageAPI.allowedDir,"onUpdate:modelValue":a[2]||(a[2]=e=>n.settings.randomImageAPI.allowedDir=e),disabled:n.settings.randomImageAPI.fixed},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,s.Lk)("h4",Va,[a[12]||(a[12]=(0,s.eW)("CloudFlare API Token ",-1)),(0,s.bF)(d,{content:"设置后可以使后端拉黑、删除等操作不受CDN缓存限制 <br/> 建议设置,设置方式请查阅文档",placement:"right","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),(0,s.bF)(u,{model:n.settings.cloudflareApiToken,"label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{label:"区域ID"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{modelValue:n.settings.cloudflareApiToken.CF_ZONE_ID,"onUpdate:modelValue":a[3]||(a[3]=e=>n.settings.cloudflareApiToken.CF_ZONE_ID=e),disabled:n.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,s.bF)(c,{label:"账户邮箱"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{modelValue:n.settings.cloudflareApiToken.CF_EMAIL,"onUpdate:modelValue":a[4]||(a[4]=e=>n.settings.cloudflareApiToken.CF_EMAIL=e),disabled:n.settings.cloudflareApiToken.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,s.bF)(c,{label:"API Key"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{modelValue:n.settings.cloudflareApiToken.CF_API_KEY,"onUpdate:modelValue":a[5]||(a[5]=e=>n.settings.cloudflareApiToken.CF_API_KEY=e),disabled:n.settings.cloudflareApiToken.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"]),(0,s.Lk)("h4",Sa,[a[13]||(a[13]=(0,s.eW)("WebDAV ",-1)),(0,s.bF)(d,{content:"启用后,可以通过WebDAV协议访问和管理图片",placement:"right","raw-content":""},{default:(0,s.k6)(()=>[(0,s.bF)(i,{icon:"question-circle",style:{"margin-left":"5px",cursor:"pointer"}})]),_:1})]),(0,s.bF)(u,{model:n.settings.webDAV,"label-width":"120px"},{default:(0,s.k6)(()=>[(0,s.bF)(c,{label:"启用"},{default:(0,s.k6)(()=>[(0,s.bF)(r,{modelValue:n.settings.webDAV.enabled,"onUpdate:modelValue":a[6]||(a[6]=e=>n.settings.webDAV.enabled=e),disabled:n.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,s.bF)(c,{label:"用户名"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{modelValue:n.settings.webDAV.username,"onUpdate:modelValue":a[7]||(a[7]=e=>n.settings.webDAV.username=e),disabled:n.settings.webDAV.fixed},null,8,["modelValue","disabled"])]),_:1}),(0,s.bF)(c,{label:"密码"},{default:(0,s.k6)(()=>[(0,s.bF)(p,{modelValue:n.settings.webDAV.password,"onUpdate:modelValue":a[8]||(a[8]=e=>n.settings.webDAV.password=e),disabled:n.settings.webDAV.fixed,type:"password","show-password":"",autocomplete:"new-password"},null,8,["modelValue","disabled"])]),_:1})]),_:1},8,["model"])]),(0,s.Lk)("div",Ta,[(0,s.bF)(h,{type:"primary",onClick:o.saveSettings},{default:(0,s.k6)(()=>[...a[15]||(a[15]=[(0,s.eW)("保存设置",-1)])]),_:1},8,["onClick"])])])),[[b,n.loading]])}var Ia={data(){return{settings:{telemetry:{},randomImageAPI:{},cloudflareApiToken:{},webDAV:{}},loading:!1}},computed:{},methods:{saveSettings(){(0,ge.A)("/api/manage/sysConfig/others",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(this.settings)}).then(()=>this.$message.success("设置已保存"))}},mounted(){this.loading=!0,(0,ge.A)("/api/manage/sysConfig/others").then(e=>e.json()).then(e=>{this.settings=e}).finally(()=>{this.loading=!1})}};const xa=(0,d.A)(Ia,[["render",La],["__scopeId","data-v-6931a50a"]]);var Aa=xa,Ua={name:"SystemConfig",data(){return{activeIndex:"status",isSidebarCollapse:!1}},watch:{"$route.hash":{immediate:!0,handler(e){this.activeIndex=e.replace("#",""),window.scrollTo(0,0)}},activeIndex(e){const a=`#${e}`;this.$router.push({hash:a})}},components:{DashboardTabs:p.A,SysConfigTabs:c,SysCogStatus:ve,SysCogUpload:$e,SysCogSecurity:pa,SysCogPage:va,SysCogOthers:Aa},computed:{disableTooltip(){return window.innerWidth<768},currentComponent(){const e=this.$route.hash.replace("#","");switch(e){case"status":return ve;case"upload":return $e;case"security":return pa;case"page":return va;case"others":return Aa;default:return ve}}},methods:{handleLogout(){this.$store.commit("setCredentials",null),this.$router.push("/adminLogin")},setDefaultHash(){const e="#status";window.location.hash=e,this.activeIndex=e.replace("#","")}},mounted(){window.location.hash||this.setDefaultHash()}};const Pa=(0,d.A)(Ua,[["render",f],["__scopeId","data-v-17e70f21"]]);var Ea=Pa},3003:function(e,a,t){t(5331)},4396:function(e,a,t){t(5331),t(4885)},4885:function(e,a,t){t(5331)},5616:function(e,a,t){t(5331),t(7197)},8642:function(e,a,t){t(5331)}}]);
|
||
//# sourceMappingURL=459.35f225ef.js.map
|