Files
zsglpt/static/admin/assets/UsersPage-C6sG2ovw.js

2 lines
8.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{f as Q,a as X,r as Y,s as ee,b as te,c as se,d as ae}from"./users-CgASQeNW.js";import{_ as ne,r as P,o as ie,a as V,b as d,d as n,w as a,e as g,i as A,g as le,n as re,h as c,j as o,p as E,l as p,m,t as w,E as y,q as _,s as oe,u as ce}from"./index-Do26tg8I.js";function M(v){if(!v)return null;if(v instanceof Date)return v;let i=String(v).trim();if(!i)return null;/^\d{4}-\d{2}-\d{2}$/.test(i)&&(i=`${i}T00:00:00`);let u=i.includes("T")?i:i.replace(" ","T");u=u.replace(/\.(\d{3})\d+/,".$1"),/([zZ]|[+-]\d{2}:\d{2})$/.test(u)||(u=`${u}+08:00`);const b=new Date(u);return Number.isNaN(b.getTime())?null:b}function L(v){const i=String(v||"");if(!i)return{ok:!1,message:"密码不能为空"};if(i.length<8)return{ok:!1,message:"密码长度不能少于8个字符"};if(i.length>128)return{ok:!1,message:"密码长度不能超过128个字符"};const u=/[a-zA-Z]/.test(i),h=/\d/.test(i);return!u||!h?{ok:!1,message:"密码必须包含字母和数字"}:{ok:!0,message:""}}const ue={class:"page-stack"},de={class:"app-page-title"},fe={class:"table-wrap"},pe={class:"user-block"},me={class:"user-main"},ye={key:0,class:"app-muted user-sub"},_e={key:1,class:"vip-sub"},ge={key:0,class:"app-muted"},ve={class:"actions"},ke={class:"table-wrap"},we={__name:"UsersPage",setup(v){const i=A("refreshStats",null),u=A("refreshNavBadges",null),h=P(!1),b=P([]),I=P(!1),x=P([]);function k(t){const e=t?.vip_expire_time;if(!e)return!1;if(String(e).startsWith("2099-12-31"))return!0;const l=M(e);return l?l.getTime()>Date.now():!1}function D(t){const e=t?.vip_expire_time;if(!e||!k(t))return"";if(String(e).startsWith("2099-12-31"))return"永久VIP";const l=M(e);if(!l)return`到期: ${e}`;const r=Math.ceil((l.getTime()-Date.now())/(1e3*60*60*24));return`到期: ${e}(剩${r}天)`}function z(t){return t==="rejected"?{label:"禁用",type:"danger"}:{label:"正常",type:"success"}}async function T(){h.value=!0;try{b.value=await Q()}catch{b.value=[]}finally{h.value=!1}}async function R(){I.value=!0;try{const t=await le();x.value=Array.isArray(t)?t:[]}catch{x.value=[]}finally{I.value=!1}}async function U(){await Promise.all([T(),R()]),await u?.({pendingResets:x.value.length})}async function q(t){try{await y.confirm(`确定启用用户「${t.username}」吗?启用后用户可正常登录。`,"启用用户",{confirmButtonText:"启用",cancelButtonText:"取消",type:"success"})}catch{return}try{await X(t.id),_.success("用户已启用"),await T(),await i?.()}catch{}}async function W(t){try{await y.confirm(`确定禁用用户「${t.username}」吗?禁用后用户将无法登录。`,"禁用用户",{confirmButtonText:"禁用",cancelButtonText:"取消",type:"warning"})}catch{return}try{await Y(t.id),_.success("用户已禁用"),await T(),await i?.()}catch{}}async function Z(t){try{await y.confirm(`确定批准「${t.username}」的密码重置申请吗?`,"批准重置",{confirmButtonText:"批准",cancelButtonText:"取消",type:"success"})}catch{return}try{const e=await oe(t.id);_.success(e?.message||"密码重置申请已批准"),await R(),await u?.({pendingResets:x.value.length})}catch{}}async function F(t){try{await y.confirm(`确定拒绝「${t.username}」的密码重置申请吗?`,"拒绝重置",{confirmButtonText:"拒绝",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await ce(t.id);_.success(e?.message||"密码重置申请已拒绝"),await R(),await u?.({pendingResets:x.value.length})}catch{}}async function G(t){try{await y.confirm(`确定删除用户「${t.username}」吗?此操作将删除该用户的所有数据,不可恢复!`,"删除用户",{confirmButtonText:"删除",cancelButtonText:"取消",type:"error"})}catch{return}try{await ae(t.id),_.success("用户已删除"),await T(),await i?.()}catch{}}async function C(t,e){const l={7:"一周",30:"一个月",365:"一年",999999:"永久"}[e]||`${e}`;try{await y.confirm(`确定为用户「${t.username}」开通 ${l} VIP 吗?`,"设置VIP",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"})}catch{return}try{const r=await ee(t.id,e);_.success(r?.message||"VIP设置成功"),await T(),await i?.()}catch{}}async function H(t){try{await y.confirm(`确定移除用户「${t.username}」的 VIP 吗?`,"移除VIP",{confirmButtonText:"移除",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await te(t.id);_.success(e?.message||"VIP已移除"),await T(),await i?.()}catch{}}async function J(t){let e;try{e=(await y.prompt("请输入新密码至少8位且包含字母和数字","重置密码",{confirmButtonText:"提交",cancelButtonText:"取消",inputType:"password",inputPlaceholder:"新密码",inputValidator:B=>L(B).ok,inputErrorMessage:"密码至少8位且包含字母和数字"})).value}catch{return}const l=L(e);if(!l.ok){_.error(l.message);return}try{await y.confirm(`确定将用户「${t.username}」的密码重置为该新密码吗?`,"二次确认",{confirmButtonText:"确认重置",cancelButtonText:"取消",type:"warning"})}catch{return}try{const r=await se(t.id,e);_.success(r?.message||"密码重置成功")}catch{}}return ie(U),(t,e)=>{const l=g("el-button"),r=g("el-table-column"),B=g("el-tag"),$=g("el-dropdown-item"),K=g("el-dropdown-menu"),O=g("el-dropdown"),S=g("el-table"),N=g("el-card"),j=re("loading");return c(),V("div",ue,[d("div",de,[e[1]||(e[1]=d("h2",null,"用户",-1)),d("div",null,[n(l,{onClick:U},{default:a(()=>[...e[0]||(e[0]=[o("刷新",-1)])]),_:1})])]),n(N,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:a(()=>[d("div",fe,[E((c(),p(S,{data:b.value,style:{width:"100%"}},{default:a(()=>[n(r,{prop:"id",label:"ID",width:"80"}),n(r,{label:"用户","min-width":"240"},{default:a(({row:s})=>[d("div",pe,[d("div",me,[d("strong",null,w(s.username),1),k(s)?(c(),p(B,{key:0,type:"warning",effect:"light",size:"small"},{default:a(()=>[...e[2]||(e[2]=[o("VIP",-1)])]),_:1})):m("",!0)]),s.email?(c(),V("div",ye,w(s.email),1)):m("",!0),D(s)?(c(),V("div",_e,w(D(s)),1)):m("",!0)])]),_:1}),n(r,{label:"状态",width:"120"},{default:a(({row:s})=>[n(B,{type:z(s.status).type,effect:"light"},{default:a(()=>[o(w(z(s.status).label),1)]),_:2},1032,["type"])]),_:1}),n(r,{label:"时间","min-width":"220"},{default:a(({row:s})=>[d("div",null,w(s.created_at),1),s.vip_expire_time?(c(),V("div",ge,"VIP到期: "+w(s.vip_expire_time),1)):m("",!0)]),_:1}),n(r,{label:"操作",width:"280",fixed:"right"},{default:a(({row:s})=>[d("div",ve,[s.status==="rejected"?(c(),p(l,{key:0,type:"success",size:"small",onClick:f=>q(s)},{default:a(()=>[...e[3]||(e[3]=[o("启用",-1)])]),_:1},8,["onClick"])):(c(),p(l,{key:1,type:"warning",size:"small",onClick:f=>W(s)},{default:a(()=>[...e[4]||(e[4]=[o("禁用",-1)])]),_:1},8,["onClick"])),n(O,{trigger:"click"},{dropdown:a(()=>[n(K,null,{default:a(()=>[k(s)?m("",!0):(c(),p($,{key:0,onClick:f=>C(s,7)},{default:a(()=>[...e[6]||(e[6]=[o("开通一周",-1)])]),_:1},8,["onClick"])),k(s)?m("",!0):(c(),p($,{key:1,onClick:f=>C(s,30)},{default:a(()=>[...e[7]||(e[7]=[o("开通一月",-1)])]),_:1},8,["onClick"])),k(s)?m("",!0):(c(),p($,{key:2,onClick:f=>C(s,365)},{default:a(()=>[...e[8]||(e[8]=[o("开通一年",-1)])]),_:1},8,["onClick"])),k(s)?m("",!0):(c(),p($,{key:3,onClick:f=>C(s,999999)},{default:a(()=>[...e[9]||(e[9]=[o("永久VIP",-1)])]),_:1},8,["onClick"])),k(s)?(c(),p($,{key:4,onClick:f=>H(s)},{default:a(()=>[...e[10]||(e[10]=[o("移除VIP",-1)])]),_:1},8,["onClick"])):m("",!0)]),_:2},1024)]),default:a(()=>[n(l,{size:"small"},{default:a(()=>[...e[5]||(e[5]=[o("VIP",-1)])]),_:1})]),_:2},1024),n(l,{size:"small",onClick:f=>J(s)},{default:a(()=>[...e[11]||(e[11]=[o("重置密码",-1)])]),_:1},8,["onClick"]),n(l,{type:"danger",size:"small",onClick:f=>G(s)},{default:a(()=>[...e[12]||(e[12]=[o("删除",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["data"])),[[j,h.value]])])]),_:1}),n(N,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:a(()=>[e[15]||(e[15]=d("h3",{class:"section-title"},"密码重置申请",-1)),d("div",ke,[E((c(),p(S,{data:x.value,style:{width:"100%"}},{default:a(()=>[n(r,{prop:"id",label:"申请ID",width:"90"}),n(r,{prop:"username",label:"用户名","min-width":"200"}),n(r,{prop:"email",label:"邮箱","min-width":"220"},{default:a(({row:s})=>[o(w(s.email||"-"),1)]),_:1}),n(r,{prop:"created_at",label:"申请时间","min-width":"180"}),n(r,{label:"操作",width:"180",fixed:"right"},{default:a(({row:s})=>[n(l,{type:"success",size:"small",onClick:f=>Z(s)},{default:a(()=>[...e[13]||(e[13]=[o("批准",-1)])]),_:1},8,["onClick"]),n(l,{type:"danger",size:"small",onClick:f=>F(s)},{default:a(()=>[...e[14]||(e[14]=[o("拒绝",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[j,I.value]])]),e[16]||(e[16]=d("div",{class:"help app-muted"},"当未启用邮件找回密码时,用户会提交申请,由管理员在此处处理。",-1))]),_:1})])}}},xe=ne(we,[["__scopeId","data-v-84b2f73a"]]);export{xe as default};