更新日志页面和统计页面
- 更新 LogsPage 和 StatsPage 组件 - 添加 taskSource 工具模块 - 更新 db/tasks.py - 重新构建前端静态资源
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/admin/assets/LogsPage-BqqryFPi.js
Normal file
1
static/admin/assets/LogsPage-BqqryFPi.js
Normal file
File diff suppressed because one or more lines are too long
1
static/admin/assets/LogsPage-Cmm-qHAH.css
Normal file
1
static/admin/assets/LogsPage-Cmm-qHAH.css
Normal file
@@ -0,0 +1 @@
|
||||
.page-stack[data-v-080a6c1f]{display:flex;flex-direction:column;gap:12px}.card[data-v-080a6c1f]{border-radius:var(--app-radius);border:1px solid var(--app-border)}.filters[data-v-080a6c1f]{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.table-wrap[data-v-080a6c1f]{overflow-x:auto}.ellipsis[data-v-080a6c1f]{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pagination[data-v-080a6c1f]{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;flex-wrap:wrap}.page-hint[data-v-080a6c1f]{font-size:12px}
|
||||
@@ -1 +0,0 @@
|
||||
.page-stack[data-v-a7a68d16]{display:flex;flex-direction:column;gap:12px}.card[data-v-a7a68d16]{border-radius:var(--app-radius);border:1px solid var(--app-border)}.filters[data-v-a7a68d16]{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.table-wrap[data-v-a7a68d16]{overflow-x:auto}.ellipsis[data-v-a7a68d16]{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pagination[data-v-a7a68d16]{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:14px;flex-wrap:wrap}.page-hint[data-v-a7a68d16]{font-size:12px}
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{f as E,a as I,r as A}from"./users-a9w9WKCH.js";import{_ as M,r as p,o as q,c as W,a as i,b as t,w as a,d,i as T,f as F,e as G,g as f,h as r,j as $,k as x,l as H,t as k,E as m,m as g,n as J,p as K}from"./index-BkLe6kG5.js";import{p as L}from"./datetime-ZCuLLiQt.js";const O={class:"page-stack"},Q={class:"app-page-title"},X={class:"table-wrap"},Y={class:"user-cell"},Z={class:"table-wrap"},ee={__name:"PendingPage",setup(te){const B=T("refreshStats",null),_=T("refreshNavBadges",null),v=p([]),c=p([]),w=p(!1),y=p(!1);function D(s){const e=s?.vip_expire_time;if(!e)return!1;if(String(e).startsWith("2099-12-31"))return!0;const o=L(e);return o?o.getTime()>Date.now():!1}async function j(){w.value=!0;try{v.value=await E()}catch{v.value=[]}finally{w.value=!1}}async function h(){y.value=!0;try{c.value=await F()}catch{c.value=[]}finally{y.value=!1}}async function u(){await Promise.all([j(),h()]),await _?.({pendingResets:c.value.length})}async function N(s){try{await m.confirm(`确定通过用户「${s.username}」的注册申请吗?`,"审核通过",{confirmButtonText:"通过",cancelButtonText:"取消",type:"success"})}catch{return}try{await I(s.id),g.success("用户审核通过"),await u(),await B?.()}catch{}}async function U(s){try{await m.confirm(`确定拒绝用户「${s.username}」的注册申请吗?`,"拒绝申请",{confirmButtonText:"拒绝",cancelButtonText:"取消",type:"warning"})}catch{return}try{await A(s.id),g.success("已拒绝用户"),await u(),await B?.()}catch{}}async function V(s){try{await m.confirm(`确定批准「${s.username}」的密码重置申请吗?`,"批准重置",{confirmButtonText:"批准",cancelButtonText:"取消",type:"success"})}catch{return}try{const e=await J(s.id);g.success(e?.message||"密码重置申请已批准"),await h(),await _?.({pendingResets:c.value.length})}catch{}}async function z(s){try{await m.confirm(`确定拒绝「${s.username}」的密码重置申请吗?`,"拒绝重置",{confirmButtonText:"拒绝",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await K(s.id);g.success(e?.message||"密码重置申请已拒绝"),await h(),await _?.({pendingResets:c.value.length})}catch{}}return q(u),(s,e)=>{const o=d("el-button"),l=d("el-table-column"),S=d("el-tag"),R=d("el-table"),C=d("el-card"),P=G("loading");return f(),W("div",O,[i("div",Q,[e[1]||(e[1]=i("h2",null,"待审核",-1)),i("div",null,[t(o,{onClick:u},{default:a(()=>[...e[0]||(e[0]=[r("刷新",-1)])]),_:1})])]),t(C,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:a(()=>[e[5]||(e[5]=i("h3",{class:"section-title"},"用户注册审核",-1)),i("div",X,[$((f(),x(R,{data:v.value,style:{width:"100%"}},{default:a(()=>[t(l,{prop:"id",label:"ID",width:"80"}),t(l,{label:"用户名","min-width":"200"},{default:a(({row:n})=>[i("div",Y,[i("strong",null,k(n.username),1),D(n)?(f(),x(S,{key:0,type:"warning",effect:"light",size:"small"},{default:a(()=>[...e[2]||(e[2]=[r("VIP",-1)])]),_:1})):H("",!0)])]),_:1}),t(l,{prop:"email",label:"邮箱","min-width":"220"},{default:a(({row:n})=>[r(k(n.email||"-"),1)]),_:1}),t(l,{prop:"created_at",label:"注册时间","min-width":"180"}),t(l,{label:"操作",width:"180",fixed:"right"},{default:a(({row:n})=>[t(o,{type:"success",size:"small",onClick:b=>N(n)},{default:a(()=>[...e[3]||(e[3]=[r("通过",-1)])]),_:1},8,["onClick"]),t(o,{type:"danger",size:"small",onClick:b=>U(n)},{default:a(()=>[...e[4]||(e[4]=[r("拒绝",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[P,w.value]])])]),_:1}),t(C,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:a(()=>[e[8]||(e[8]=i("h3",{class:"section-title"},"密码重置审核",-1)),i("div",Z,[$((f(),x(R,{data:c.value,style:{width:"100%"}},{default:a(()=>[t(l,{prop:"id",label:"申请ID",width:"90"}),t(l,{prop:"username",label:"用户名","min-width":"200"}),t(l,{prop:"email",label:"邮箱","min-width":"220"},{default:a(({row:n})=>[r(k(n.email||"-"),1)]),_:1}),t(l,{prop:"created_at",label:"申请时间","min-width":"180"}),t(l,{label:"操作",width:"180",fixed:"right"},{default:a(({row:n})=>[t(o,{type:"success",size:"small",onClick:b=>V(n)},{default:a(()=>[...e[6]||(e[6]=[r("批准",-1)])]),_:1},8,["onClick"]),t(o,{type:"danger",size:"small",onClick:b=>z(n)},{default:a(()=>[...e[7]||(e[7]=[r("拒绝",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[P,y.value]])])]),_:1})])}}},le=M(ee,[["__scopeId","data-v-f2aa6820"]]);export{le as default};
|
||||
import{f as E,a as I,r as A}from"./users-BH0CdfvW.js";import{_ as M,r as p,o as q,c as W,a as i,b as t,w as a,d,i as T,f as F,e as G,g as f,h as r,j as $,k as x,l as H,t as k,E as m,m as g,n as J,p as K}from"./index-ZGOE7TRg.js";import{p as L}from"./datetime-ZCuLLiQt.js";const O={class:"page-stack"},Q={class:"app-page-title"},X={class:"table-wrap"},Y={class:"user-cell"},Z={class:"table-wrap"},ee={__name:"PendingPage",setup(te){const B=T("refreshStats",null),_=T("refreshNavBadges",null),v=p([]),c=p([]),w=p(!1),y=p(!1);function D(s){const e=s?.vip_expire_time;if(!e)return!1;if(String(e).startsWith("2099-12-31"))return!0;const o=L(e);return o?o.getTime()>Date.now():!1}async function j(){w.value=!0;try{v.value=await E()}catch{v.value=[]}finally{w.value=!1}}async function h(){y.value=!0;try{c.value=await F()}catch{c.value=[]}finally{y.value=!1}}async function u(){await Promise.all([j(),h()]),await _?.({pendingResets:c.value.length})}async function N(s){try{await m.confirm(`确定通过用户「${s.username}」的注册申请吗?`,"审核通过",{confirmButtonText:"通过",cancelButtonText:"取消",type:"success"})}catch{return}try{await I(s.id),g.success("用户审核通过"),await u(),await B?.()}catch{}}async function U(s){try{await m.confirm(`确定拒绝用户「${s.username}」的注册申请吗?`,"拒绝申请",{confirmButtonText:"拒绝",cancelButtonText:"取消",type:"warning"})}catch{return}try{await A(s.id),g.success("已拒绝用户"),await u(),await B?.()}catch{}}async function V(s){try{await m.confirm(`确定批准「${s.username}」的密码重置申请吗?`,"批准重置",{confirmButtonText:"批准",cancelButtonText:"取消",type:"success"})}catch{return}try{const e=await J(s.id);g.success(e?.message||"密码重置申请已批准"),await h(),await _?.({pendingResets:c.value.length})}catch{}}async function z(s){try{await m.confirm(`确定拒绝「${s.username}」的密码重置申请吗?`,"拒绝重置",{confirmButtonText:"拒绝",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await K(s.id);g.success(e?.message||"密码重置申请已拒绝"),await h(),await _?.({pendingResets:c.value.length})}catch{}}return q(u),(s,e)=>{const o=d("el-button"),l=d("el-table-column"),S=d("el-tag"),R=d("el-table"),C=d("el-card"),P=G("loading");return f(),W("div",O,[i("div",Q,[e[1]||(e[1]=i("h2",null,"待审核",-1)),i("div",null,[t(o,{onClick:u},{default:a(()=>[...e[0]||(e[0]=[r("刷新",-1)])]),_:1})])]),t(C,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:a(()=>[e[5]||(e[5]=i("h3",{class:"section-title"},"用户注册审核",-1)),i("div",X,[$((f(),x(R,{data:v.value,style:{width:"100%"}},{default:a(()=>[t(l,{prop:"id",label:"ID",width:"80"}),t(l,{label:"用户名","min-width":"200"},{default:a(({row:n})=>[i("div",Y,[i("strong",null,k(n.username),1),D(n)?(f(),x(S,{key:0,type:"warning",effect:"light",size:"small"},{default:a(()=>[...e[2]||(e[2]=[r("VIP",-1)])]),_:1})):H("",!0)])]),_:1}),t(l,{prop:"email",label:"邮箱","min-width":"220"},{default:a(({row:n})=>[r(k(n.email||"-"),1)]),_:1}),t(l,{prop:"created_at",label:"注册时间","min-width":"180"}),t(l,{label:"操作",width:"180",fixed:"right"},{default:a(({row:n})=>[t(o,{type:"success",size:"small",onClick:b=>N(n)},{default:a(()=>[...e[3]||(e[3]=[r("通过",-1)])]),_:1},8,["onClick"]),t(o,{type:"danger",size:"small",onClick:b=>U(n)},{default:a(()=>[...e[4]||(e[4]=[r("拒绝",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[P,w.value]])])]),_:1}),t(C,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:a(()=>[e[8]||(e[8]=i("h3",{class:"section-title"},"密码重置审核",-1)),i("div",Z,[$((f(),x(R,{data:c.value,style:{width:"100%"}},{default:a(()=>[t(l,{prop:"id",label:"申请ID",width:"90"}),t(l,{prop:"username",label:"用户名","min-width":"200"}),t(l,{prop:"email",label:"邮箱","min-width":"220"},{default:a(({row:n})=>[r(k(n.email||"-"),1)]),_:1}),t(l,{prop:"created_at",label:"申请时间","min-width":"180"}),t(l,{label:"操作",width:"180",fixed:"right"},{default:a(({row:n})=>[t(o,{type:"success",size:"small",onClick:b=>V(n)},{default:a(()=>[...e[6]||(e[6]=[r("批准",-1)])]),_:1},8,["onClick"]),t(o,{type:"danger",size:"small",onClick:b=>z(n)},{default:a(()=>[...e[7]||(e[7]=[r("拒绝",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[P,y.value]])])]),_:1})])}}},le=M(ee,[["__scopeId","data-v-f2aa6820"]]);export{le as default};
|
||||
@@ -1 +1 @@
|
||||
import{B as m,_ as T,r as p,c as h,a as r,b as a,w as s,d as u,g as k,h as b,m as d,E as x}from"./index-BkLe6kG5.js";async function C(o){const{data:t}=await m.put("/admin/username",{new_username:o});return t}async function E(o){const{data:t}=await m.put("/admin/password",{new_password:o});return t}async function P(){const{data:o}=await m.post("/logout");return o}const U={class:"page-stack"},N={__name:"SettingsPage",setup(o){const t=p(""),i=p(""),n=p(!1);async function f(){try{await P()}catch{}finally{window.location.href="/yuyx"}}async function B(){const l=t.value.trim();if(!l){d.error("请输入新用户名");return}try{await x.confirm(`确定将管理员用户名修改为「${l}」吗?修改后需要重新登录。`,"修改用户名",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await C(l),d.success("用户名修改成功,请重新登录"),t.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}async function V(){const l=i.value;if(!l){d.error("请输入新密码");return}if(l.length<6){d.error("密码至少6个字符");return}try{await x.confirm("确定修改管理员密码吗?修改后需要重新登录。","修改密码",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await E(l),d.success("密码修改成功,请重新登录"),i.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}return(l,e)=>{const w=u("el-input"),v=u("el-form-item"),y=u("el-form"),_=u("el-button"),g=u("el-card");return k(),h("div",U,[e[7]||(e[7]=r("div",{class:"app-page-title"},[r("h2",null,"设置"),r("span",{class:"app-muted"},"管理员账号设置")],-1)),a(g,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:s(()=>[e[3]||(e[3]=r("h3",{class:"section-title"},"修改管理员用户名",-1)),a(y,{"label-width":"120px"},{default:s(()=>[a(v,{label:"新用户名"},{default:s(()=>[a(w,{modelValue:t.value,"onUpdate:modelValue":e[0]||(e[0]=c=>t.value=c),placeholder:"输入新用户名",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(_,{type:"primary",loading:n.value,onClick:B},{default:s(()=>[...e[2]||(e[2]=[b("保存用户名",-1)])]),_:1},8,["loading"])]),_:1}),a(g,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:s(()=>[e[5]||(e[5]=r("h3",{class:"section-title"},"修改管理员密码",-1)),a(y,{"label-width":"120px"},{default:s(()=>[a(v,{label:"新密码"},{default:s(()=>[a(w,{modelValue:i.value,"onUpdate:modelValue":e[1]||(e[1]=c=>i.value=c),type:"password","show-password":"",placeholder:"输入新密码",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(_,{type:"primary",loading:n.value,onClick:V},{default:s(()=>[...e[4]||(e[4]=[b("保存密码",-1)])]),_:1},8,["loading"]),e[6]||(e[6]=r("div",{class:"help"},"建议使用更强密码(至少8位且包含字母与数字)。",-1))]),_:1})])}}},M=T(N,[["__scopeId","data-v-2f4b840f"]]);export{M as default};
|
||||
import{C as m,_ as T,r as p,c as h,a as r,b as a,w as s,d as u,g as k,h as b,m as d,E as x}from"./index-ZGOE7TRg.js";async function C(o){const{data:t}=await m.put("/admin/username",{new_username:o});return t}async function E(o){const{data:t}=await m.put("/admin/password",{new_password:o});return t}async function P(){const{data:o}=await m.post("/logout");return o}const U={class:"page-stack"},N={__name:"SettingsPage",setup(o){const t=p(""),i=p(""),n=p(!1);async function f(){try{await P()}catch{}finally{window.location.href="/yuyx"}}async function V(){const l=t.value.trim();if(!l){d.error("请输入新用户名");return}try{await x.confirm(`确定将管理员用户名修改为「${l}」吗?修改后需要重新登录。`,"修改用户名",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await C(l),d.success("用户名修改成功,请重新登录"),t.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}async function B(){const l=i.value;if(!l){d.error("请输入新密码");return}if(l.length<6){d.error("密码至少6个字符");return}try{await x.confirm("确定修改管理员密码吗?修改后需要重新登录。","修改密码",{confirmButtonText:"确认修改",cancelButtonText:"取消",type:"warning"})}catch{return}n.value=!0;try{await E(l),d.success("密码修改成功,请重新登录"),i.value="",setTimeout(f,1200)}catch{}finally{n.value=!1}}return(l,e)=>{const w=u("el-input"),v=u("el-form-item"),y=u("el-form"),_=u("el-button"),g=u("el-card");return k(),h("div",U,[e[7]||(e[7]=r("div",{class:"app-page-title"},[r("h2",null,"设置"),r("span",{class:"app-muted"},"管理员账号设置")],-1)),a(g,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:s(()=>[e[3]||(e[3]=r("h3",{class:"section-title"},"修改管理员用户名",-1)),a(y,{"label-width":"120px"},{default:s(()=>[a(v,{label:"新用户名"},{default:s(()=>[a(w,{modelValue:t.value,"onUpdate:modelValue":e[0]||(e[0]=c=>t.value=c),placeholder:"输入新用户名",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(_,{type:"primary",loading:n.value,onClick:V},{default:s(()=>[...e[2]||(e[2]=[b("保存用户名",-1)])]),_:1},8,["loading"])]),_:1}),a(g,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:s(()=>[e[5]||(e[5]=r("h3",{class:"section-title"},"修改管理员密码",-1)),a(y,{"label-width":"120px"},{default:s(()=>[a(v,{label:"新密码"},{default:s(()=>[a(w,{modelValue:i.value,"onUpdate:modelValue":e[1]||(e[1]=c=>i.value=c),type:"password","show-password":"",placeholder:"输入新密码",disabled:n.value},null,8,["modelValue","disabled"])]),_:1})]),_:1}),a(_,{type:"primary",loading:n.value,onClick:B},{default:s(()=>[...e[4]||(e[4]=[b("保存密码",-1)])]),_:1},8,["loading"]),e[6]||(e[6]=r("div",{class:"help"},"建议使用更强密码(至少8位且包含字母与数字)。",-1))]),_:1})])}}},M=T(N,[["__scopeId","data-v-2f4b840f"]]);export{M as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
.page-stack[data-v-56211e34]{display:flex;flex-direction:column;gap:12px}.metric-card[data-v-56211e34],.card[data-v-56211e34]{border-radius:var(--app-radius);border:1px solid var(--app-border)}.metric-label[data-v-56211e34]{font-size:12px;color:var(--app-muted)}.metric-value[data-v-56211e34]{margin-top:6px;font-size:18px;font-weight:800}.metric-sub[data-v-56211e34]{margin-top:4px;font-size:12px}.section-head[data-v-56211e34]{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:12px}.section-title[data-v-56211e34]{margin:0;font-size:14px;font-weight:800}.count-row[data-v-56211e34]{margin-bottom:10px}.count-card[data-v-56211e34]{border-radius:10px;border:1px solid var(--app-border)}.count-card.ok[data-v-56211e34]{background:#10b98114}.count-card.warn[data-v-56211e34]{background:#f59e0b14}.count-value[data-v-56211e34]{font-size:22px;font-weight:900;line-height:1.1}.count-label[data-v-56211e34]{margin-top:4px;font-size:12px;color:var(--app-muted)}.sub-title[data-v-56211e34]{margin-top:14px;margin-bottom:8px;font-size:13px;font-weight:800}.empty[data-v-56211e34]{padding:10px 0}.task-list[data-v-56211e34]{display:flex;flex-direction:column;gap:8px}.task-item[data-v-56211e34]{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid var(--app-border);background:#fff}.task-item.queue[data-v-56211e34]{background:#f59e0b0f}.task-line[data-v-56211e34]{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.task-line2[data-v-56211e34]{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px;font-size:12px}.task-user[data-v-56211e34]{font-weight:600}.task-account[data-v-56211e34]{font-weight:700;color:#2563eb}.dot[data-v-56211e34]{width:8px;height:8px;border-radius:999px;display:inline-block}.task-status[data-v-56211e34]{font-weight:700}.task-right[data-v-56211e34]{font-size:12px;font-weight:700;color:#10b981;white-space:nowrap}.task-right.warn[data-v-56211e34]{color:#f59e0b}@media(max-width:768px){.task-item[data-v-56211e34]{flex-direction:column}.task-right[data-v-56211e34]{align-self:flex-end}}.stat-grid[data-v-56211e34]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stat-box[data-v-56211e34]{border-radius:12px;border:1px solid var(--app-border);padding:12px}.stat-box.ok[data-v-56211e34]{background:#10b98114}.stat-box.err[data-v-56211e34]{background:#ef444414}.stat-box.info[data-v-56211e34]{background:#3b82f614}.stat-box.info2[data-v-56211e34]{background:#06b6d414}.stat-name[data-v-56211e34]{font-size:12px;font-weight:800;margin-bottom:6px}.stat-row[data-v-56211e34]{display:flex;align-items:baseline;gap:8px}.stat-big[data-v-56211e34]{font-size:20px;font-weight:900}.stat-row2[data-v-56211e34]{margin-top:6px;font-size:12px}
|
||||
1
static/admin/assets/StatsPage-CiLeKa5o.css
Normal file
1
static/admin/assets/StatsPage-CiLeKa5o.css
Normal file
@@ -0,0 +1 @@
|
||||
.page-stack[data-v-84b6799b]{display:flex;flex-direction:column;gap:12px}.metric-card[data-v-84b6799b],.card[data-v-84b6799b]{border-radius:var(--app-radius);border:1px solid var(--app-border)}.metric-label[data-v-84b6799b]{font-size:12px;color:var(--app-muted)}.metric-value[data-v-84b6799b]{margin-top:6px;font-size:18px;font-weight:800}.metric-sub[data-v-84b6799b]{margin-top:4px;font-size:12px}.section-head[data-v-84b6799b]{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:12px}.section-title[data-v-84b6799b]{margin:0;font-size:14px;font-weight:800}.count-row[data-v-84b6799b]{margin-bottom:10px}.count-card[data-v-84b6799b]{border-radius:10px;border:1px solid var(--app-border)}.count-card.ok[data-v-84b6799b]{background:#10b98114}.count-card.warn[data-v-84b6799b]{background:#f59e0b14}.count-value[data-v-84b6799b]{font-size:22px;font-weight:900;line-height:1.1}.count-label[data-v-84b6799b]{margin-top:4px;font-size:12px;color:var(--app-muted)}.sub-title[data-v-84b6799b]{margin-top:14px;margin-bottom:8px;font-size:13px;font-weight:800}.empty[data-v-84b6799b]{padding:10px 0}.task-list[data-v-84b6799b]{display:flex;flex-direction:column;gap:8px}.task-item[data-v-84b6799b]{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:10px 12px;border-radius:10px;border:1px solid var(--app-border);background:#fff}.task-item.queue[data-v-84b6799b]{background:#f59e0b0f}.task-line[data-v-84b6799b]{display:flex;align-items:center;flex-wrap:wrap;gap:8px}.task-line2[data-v-84b6799b]{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:6px;font-size:12px}.task-user[data-v-84b6799b]{font-weight:600}.task-account[data-v-84b6799b]{font-weight:700;color:#2563eb}.dot[data-v-84b6799b]{width:8px;height:8px;border-radius:999px;display:inline-block}.task-status[data-v-84b6799b]{font-weight:700}.task-right[data-v-84b6799b]{font-size:12px;font-weight:700;color:#10b981;white-space:nowrap}.task-right.warn[data-v-84b6799b]{color:#f59e0b}@media(max-width:768px){.task-item[data-v-84b6799b]{flex-direction:column}.task-right[data-v-84b6799b]{align-self:flex-end}}.stat-grid[data-v-84b6799b]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.stat-box[data-v-84b6799b]{border-radius:12px;border:1px solid var(--app-border);padding:12px}.stat-box.ok[data-v-84b6799b]{background:#10b98114}.stat-box.err[data-v-84b6799b]{background:#ef444414}.stat-box.info[data-v-84b6799b]{background:#3b82f614}.stat-box.info2[data-v-84b6799b]{background:#06b6d414}.stat-name[data-v-84b6799b]{font-size:12px;font-weight:800;margin-bottom:6px}.stat-row[data-v-84b6799b]{display:flex;align-items:baseline;gap:8px}.stat-big[data-v-84b6799b]{font-size:20px;font-weight:900}.stat-row2[data-v-84b6799b]{margin-top:6px;font-size:12px}
|
||||
1
static/admin/assets/StatsPage-D7Miz3zC.js
Normal file
1
static/admin/assets/StatsPage-D7Miz3zC.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
import{B as w,_ as Ue,r as d,y as Ce,o as Pe,z as he,j as se,e as Be,c as B,a as c,b as l,w as t,d as p,k as f,g as u,h as n,l as V,F as Te,s as Ne,t as _,E,m as x}from"./index-BkLe6kG5.js";async function Ie(){const{data:s}=await w.get("/system/config");return s}async function X(s){const{data:b}=await w.post("/system/config",s);return b}async function Ae(){const{data:s}=await w.post("/schedule/execute",{});return s}async function Se(){const{data:s}=await w.get("/proxy/config");return s}async function $e(s){const{data:b}=await w.post("/proxy/config",s);return b}async function Ee(s){const{data:b}=await w.post("/proxy/test",s);return b}async function Le(){const{data:s}=await w.get("/update/status");return s}async function je(){const{data:s}=await w.get("/update/result");return s}async function Re(s={}){const{data:b}=await w.get("/update/log",{params:s});return b}async function De(){const{data:s}=await w.post("/update/check",{});return s}async function Fe(s={}){const{data:b}=await w.post("/update/run",s);return b}const He={class:"page-stack"},Me={class:"app-page-title"},ze={class:"row-actions"},qe={class:"row-actions"},Oe={class:"row-actions",style:{"align-items":"center"}},We={class:"row-actions"},Ge={key:0},Je={key:1},Ke={key:2},Qe={key:3,class:"help"},Xe={key:4,class:"help"},Ye={__name:"SystemPage",setup(s){const b=d(!1),L=d(2),j=d(1),R=d(3),k=d(!1),D=d("02:00"),T=d("应读"),U=d(["1","2","3","4","5","6","7"]),N=d(!1),C=d(""),F=d(3),H=d(!1),M=d(10),z=d(7),J=d(!1),P=d(!1),g=d(null),q=d(""),i=d(null),O=d(""),K=d(!1),W=d(!1);let I=null;const re=[{label:"周一",value:"1"},{label:"周二",value:"2"},{label:"周三",value:"3"},{label:"周四",value:"4"},{label:"周五",value:"5"},{label:"周六",value:"6"},{label:"周日",value:"7"}],de={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},ie=Ce(()=>(U.value||[]).map(a=>de[Number(a)]||a).join("、"));function ce(a){return String(a)==="注册前未读"?"注册前未读":"应读"}function A(a){const e=String(a||"").trim();return e?e.length>12?`${e.slice(0,12)}…`:e:"-"}async function S({withLog:a=!0}={}){J.value=!0,q.value="";try{const[e,r]=await Promise.all([Le(),je()]);e?.ok?g.value=e.data||null:(g.value=null,q.value=e?.error||"未发现更新状态(Update-Agent 可能未运行)"),i.value=r?.ok?r.data:null;const y=i.value?.job_id;if(a&&y){const m=await Re({job_id:y,max_bytes:2e5});O.value=m?.log||"",K.value=!!m?.truncated}else O.value="",K.value=!1}catch{}finally{J.value=!1}}function Y(){I||(I=setInterval(async()=>{i.value?.status==="running"&&await S()},5e3))}function pe(){I&&(clearInterval(I),I=null)}async function Z(){b.value=!0;try{const[a,e]=await Promise.all([Ie(),Se()]);L.value=a.max_concurrent_global??2,j.value=a.max_concurrent_per_account??1,R.value=a.max_screenshot_concurrent??3,k.value=(a.schedule_enabled??0)===1,D.value=a.schedule_time||"02:00",T.value=ce(a.schedule_browse_type);const r=String(a.schedule_weekdays||"1,2,3,4,5,6,7").split(",").map(y=>y.trim()).filter(Boolean);U.value=r.length?r:["1","2","3","4","5","6","7"],H.value=(a.auto_approve_enabled??0)===1,M.value=a.auto_approve_hourly_limit??10,z.value=a.auto_approve_vip_days??7,N.value=(e.proxy_enabled??0)===1,C.value=e.proxy_api_url||"",F.value=e.proxy_expire_minutes??3,await S({withLog:!1}),Y()}catch{}finally{b.value=!1}}async function me(){const a={max_concurrent_global:Number(L.value),max_concurrent_per_account:Number(j.value),max_screenshot_concurrent:Number(R.value)};try{await E.confirm(`确定更新并发配置吗?
|
||||
import{C as w,_ as Ue,r as d,y as Ce,o as Pe,z as he,j as se,e as Be,c as B,a as c,b as l,w as t,d as p,k as f,g as u,h as n,l as V,F as Te,s as Ne,t as _,E,m as x}from"./index-ZGOE7TRg.js";async function Ie(){const{data:s}=await w.get("/system/config");return s}async function X(s){const{data:b}=await w.post("/system/config",s);return b}async function Ae(){const{data:s}=await w.post("/schedule/execute",{});return s}async function Se(){const{data:s}=await w.get("/proxy/config");return s}async function $e(s){const{data:b}=await w.post("/proxy/config",s);return b}async function Ee(s){const{data:b}=await w.post("/proxy/test",s);return b}async function Le(){const{data:s}=await w.get("/update/status");return s}async function je(){const{data:s}=await w.get("/update/result");return s}async function Re(s={}){const{data:b}=await w.get("/update/log",{params:s});return b}async function De(){const{data:s}=await w.post("/update/check",{});return s}async function Fe(s={}){const{data:b}=await w.post("/update/run",s);return b}const He={class:"page-stack"},Me={class:"app-page-title"},ze={class:"row-actions"},qe={class:"row-actions"},Oe={class:"row-actions",style:{"align-items":"center"}},We={class:"row-actions"},Ge={key:0},Je={key:1},Ke={key:2},Qe={key:3,class:"help"},Xe={key:4,class:"help"},Ye={__name:"SystemPage",setup(s){const b=d(!1),L=d(2),j=d(1),R=d(3),k=d(!1),D=d("02:00"),T=d("应读"),U=d(["1","2","3","4","5","6","7"]),N=d(!1),C=d(""),F=d(3),H=d(!1),M=d(10),z=d(7),J=d(!1),P=d(!1),g=d(null),q=d(""),i=d(null),O=d(""),K=d(!1),W=d(!1);let I=null;const re=[{label:"周一",value:"1"},{label:"周二",value:"2"},{label:"周三",value:"3"},{label:"周四",value:"4"},{label:"周五",value:"5"},{label:"周六",value:"6"},{label:"周日",value:"7"}],de={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},ie=Ce(()=>(U.value||[]).map(a=>de[Number(a)]||a).join("、"));function ce(a){return String(a)==="注册前未读"?"注册前未读":"应读"}function A(a){const e=String(a||"").trim();return e?e.length>12?`${e.slice(0,12)}…`:e:"-"}async function S({withLog:a=!0}={}){J.value=!0,q.value="";try{const[e,r]=await Promise.all([Le(),je()]);e?.ok?g.value=e.data||null:(g.value=null,q.value=e?.error||"未发现更新状态(Update-Agent 可能未运行)"),i.value=r?.ok?r.data:null;const y=i.value?.job_id;if(a&&y){const m=await Re({job_id:y,max_bytes:2e5});O.value=m?.log||"",K.value=!!m?.truncated}else O.value="",K.value=!1}catch{}finally{J.value=!1}}function Y(){I||(I=setInterval(async()=>{i.value?.status==="running"&&await S()},5e3))}function pe(){I&&(clearInterval(I),I=null)}async function Z(){b.value=!0;try{const[a,e]=await Promise.all([Ie(),Se()]);L.value=a.max_concurrent_global??2,j.value=a.max_concurrent_per_account??1,R.value=a.max_screenshot_concurrent??3,k.value=(a.schedule_enabled??0)===1,D.value=a.schedule_time||"02:00",T.value=ce(a.schedule_browse_type);const r=String(a.schedule_weekdays||"1,2,3,4,5,6,7").split(",").map(y=>y.trim()).filter(Boolean);U.value=r.length?r:["1","2","3","4","5","6","7"],H.value=(a.auto_approve_enabled??0)===1,M.value=a.auto_approve_hourly_limit??10,z.value=a.auto_approve_vip_days??7,N.value=(e.proxy_enabled??0)===1,C.value=e.proxy_api_url||"",F.value=e.proxy_expire_minutes??3,await S({withLog:!1}),Y()}catch{}finally{b.value=!1}}async function me(){const a={max_concurrent_global:Number(L.value),max_concurrent_per_account:Number(j.value),max_screenshot_concurrent:Number(R.value)};try{await E.confirm(`确定更新并发配置吗?
|
||||
|
||||
全局并发数: ${a.max_concurrent_global}
|
||||
单账号并发数: ${a.max_concurrent_per_account}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/admin/assets/taskSource-D0AL5oGK.js
Normal file
1
static/admin/assets/taskSource-D0AL5oGK.js
Normal file
@@ -0,0 +1 @@
|
||||
import{C as e}from"./index-ZGOE7TRg.js";async function l(){const{data:t}=await e.get("/server/info");return t}async function d(){const{data:t}=await e.get("/docker_stats");return t}async function p(){const{data:t}=await e.get("/task/stats");return t}async function f(){const{data:t}=await e.get("/task/running");return t}async function g(t){const{data:a}=await e.get("/task/logs",{params:t});return a}async function h(t){const{data:a}=await e.post("/task/logs/clear",{days:t});return a}function r(t){return String(t||"").trim()}function c(t){return!t.startsWith("user_scheduled")||!t.includes(":")?"":t.split(":",2)[1]||""}function m(t){const a=r(t);if(!a||a==="manual")return{group:"manual",label:"手动",type:"success",tooltip:""};if(a==="scheduled")return{group:"scheduled",label:"定时任务",type:"primary",tooltip:"系统定时"};if(a.startsWith("user_scheduled")){const n=c(a),s=String(n||"").replace(/^batch_/,"");return{group:"scheduled",label:"定时任务",type:"primary",tooltip:s?`用户定时批次:${s}`:"用户定时"}}return{group:"manual",label:"手动",type:"success",tooltip:{batch:"手动批量",manual_screenshot:"手动截图",immediate:"立即执行",resumed:"断点恢复"}[a]||a}}export{d as a,p as b,f as c,g as d,h as e,l as f,m as g};
|
||||
@@ -1 +0,0 @@
|
||||
import{B as a}from"./index-BkLe6kG5.js";async function c(){const{data:t}=await a.get("/server/info");return t}async function e(){const{data:t}=await a.get("/docker_stats");return t}async function o(){const{data:t}=await a.get("/task/stats");return t}async function r(){const{data:t}=await a.get("/task/running");return t}async function i(t){const{data:s}=await a.get("/task/logs",{params:t});return s}async function f(t){const{data:s}=await a.post("/task/logs/clear",{days:t});return s}export{e as a,o as b,r as c,i as d,f as e,c as f};
|
||||
@@ -1 +1 @@
|
||||
import{B as a}from"./index-BkLe6kG5.js";async function r(){const{data:s}=await a.get("/users");return s}async function c(){const{data:s}=await a.get("/users/pending");return s}async function o(s){const{data:t}=await a.post(`/users/${s}/approve`);return t}async function i(s){const{data:t}=await a.post(`/users/${s}/reject`);return t}async function u(s){const{data:t}=await a.delete(`/users/${s}`);return t}async function d(s,t){const{data:e}=await a.post(`/users/${s}/vip`,{days:t});return e}async function p(s){const{data:t}=await a.delete(`/users/${s}/vip`);return t}async function f(s,t){const{data:e}=await a.post(`/users/${s}/reset_password`,{new_password:t});return e}export{o as a,r as b,p as c,f as d,u as e,c as f,i as r,d as s};
|
||||
import{C as a}from"./index-ZGOE7TRg.js";async function r(){const{data:s}=await a.get("/users");return s}async function c(){const{data:s}=await a.get("/users/pending");return s}async function o(s){const{data:t}=await a.post(`/users/${s}/approve`);return t}async function i(s){const{data:t}=await a.post(`/users/${s}/reject`);return t}async function u(s){const{data:t}=await a.delete(`/users/${s}`);return t}async function d(s,t){const{data:e}=await a.post(`/users/${s}/vip`,{days:t});return e}async function p(s){const{data:t}=await a.delete(`/users/${s}/vip`);return t}async function f(s,t){const{data:e}=await a.post(`/users/${s}/reset_password`,{new_password:t});return e}export{o as a,r as b,p as c,f as d,u as e,c as f,i as r,d as s};
|
||||
Reference in New Issue
Block a user