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