import{$ as e,$t as t,Dt as n,Et as r,Ft as i,Gt as a,It as ee,K as o,Ot as te,Q as s,St as c,U as ne,Ut as l,X as u,Z as d,at as f,et as p,hn as m,it as h,mn as re,rt as g,wt as _,yt as v}from"./editor-DJ72UhpY.js";import{Br as ie,Hr as ae,Jr as y,Lr as b,Xr as oe,Yr as x,kr as S}from"./vendor-BqxQPPIo.js";import{l as C,r as w,t as T}from"./index-BsmF42t4.js";import{t as E}from"./_plugin-vue_export-helper-BzmG9fMN.js";var se={class:`space-y-6`},ce={class:`grid grid-cols-1 md:grid-cols-4 gap-4`},le={class:`flex items-center gap-4`},ue={class:`w-12 h-12 rounded-xl bg-blue-50 flex items-center justify-center`},de={class:`text-2xl font-bold`},fe={class:`flex items-center gap-4`},pe={class:`w-12 h-12 rounded-xl bg-red-50 flex items-center justify-center`},me={class:`text-2xl font-bold`},he={class:`flex items-center gap-4`},ge={class:`w-12 h-12 rounded-xl bg-green-50 flex items-center justify-center`},_e={class:`text-2xl font-bold`},ve={class:`flex items-center gap-4`},ye={class:`w-12 h-12 rounded-xl bg-gray-50 flex items-center justify-center`},be={class:`text-2xl font-bold`},xe={class:`flex flex-col sm:flex-row justify-between items-start sm:items-center gap-4`},Se={class:`flex items-center gap-3`},Ce={class:`w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center`},we={class:`flex items-center gap-3 w-full sm:w-auto`},Te={class:`flex items-center gap-3`},Ee={class:`flex flex-col`},De={class:`font-medium`},Oe={class:`text-xs text-gray-400`},ke={class:`flex flex-col`},Ae={class:`text-xs text-gray-400`},je={key:0,class:`py-16 text-center`},Me={class:`flex justify-end mt-4`},Ne={class:`flex flex-col`},Pe={class:`text-xs text-gray-400`},Fe={key:0,class:`text-amber-500 text-sm`},Ie={class:`flex items-start gap-3`},D=E(f({__name:`Users`,setup(f){let E=T(),D=a([]),O=a(!1),k=a(!1),A=a(null),j=a(null),M=a(``),N=a(!1),P=a(!1),F=a(!1),I=a(!1),L=a(),R=a(),z=a(),B=l({username:``,password:``,role:`viewer`}),V=l({username:``,role:`viewer`}),H=l({old_password:``,new_password:``,confirm_password:``}),U=u(()=>({total:D.value.length,admin:D.value.filter(e=>e.role===`admin`).length,editor:D.value.filter(e=>e.role===`editor`).length,viewer:D.value.filter(e=>e.role===`viewer`).length})),W=u(()=>{if(!M.value)return D.value;let e=M.value.toLowerCase();return D.value.filter(t=>t.username.toLowerCase().includes(e))}),G=[{label:`管理员`,value:`admin`,description:`拥有所有权限,可管理用户和系统设置`},{label:`编辑`,value:`editor`,description:`可管理文章、分类、标签等内容`},{label:`访客`,value:`viewer`,description:`仅可查看内容,无法进行修改操作`}],K={admin:{color:`#f5222d`,icon:b,label:`管理员`},editor:{color:`#52c41a`,icon:S,label:`编辑`},viewer:{color:`#8c8c8c`,icon:x,label:`访客`}},Le={username:[{required:!0,message:`请输入用户名`,trigger:`blur`},{min:3,max:50,message:`用户名长度 3-50 个字符`,trigger:`blur`}],password:[{required:!0,message:`请输入密码`,trigger:`blur`},{min:6,max:50,message:`密码长度 6-50 个字符`,trigger:`blur`}],role:[{required:!0,message:`请选择角色`,trigger:`change`}]},Re={username:[{required:!0,message:`请输入用户名`,trigger:`blur`},{min:3,max:50,message:`用户名长度 3-50 个字符`,trigger:`blur`}],role:[{required:!0,message:`请选择角色`,trigger:`change`}]},ze={old_password:[{required:!0,message:`请输入原密码`,trigger:`blur`}],new_password:[{required:!0,message:`请输入新密码`,trigger:`blur`},{min:6,max:50,message:`密码长度 6-50 个字符`,trigger:`blur`}],confirm_password:[{required:!0,message:`请再次输入新密码`,trigger:`blur`},{validator:(e,t)=>t===H.new_password?!0:Error(`两次输入的密码不一致`),trigger:`blur`}]},q=l({page:1,pageSize:10,itemCount:0});function Be(e){return{admin:`danger`,editor:`success`,viewer:`info`}[e]||`info`}function Ve(e){let t=new Date(e),n=new Date().getTime()-t.getTime(),r=Math.floor(n/6e4),i=Math.floor(n/36e5),a=Math.floor(n/864e5);return r<1?`刚刚`:r<60?`${r}分钟前`:i<24?`${i}小时前`:a<30?`${a}天前`:t.toLocaleDateString(`zh-CN`)}async function J(){O.value=!0;try{let e=await w.getUsers({page:q.page,size:q.pageSize});D.value=e.list,q.itemCount=e.total}catch(e){C.error(e.message||`获取用户列表失败`)}finally{O.value=!1}}function He(e){q.page=e,J()}function Ue(){}function Y(){B.username=``,B.password=``,B.role=`viewer`,L.value?.resetFields()}async function We(){try{await L.value?.validate(),k.value=!0,await w.createUser({username:B.username,password:B.password,role:B.role}),C.success(`用户创建成功`),N.value=!1,Y(),J()}catch(e){e.message&&C.error(e.message)}finally{k.value=!1}}function Ge(e){A.value=e.id,V.username=e.username,V.role=e.role,P.value=!0}async function Ke(){if(A.value)try{await R.value?.validate(),k.value=!0,await w.updateUser(A.value,{username:V.username,role:V.role}),C.success(`用户信息更新成功`),P.value=!1,J(),A.value===E.user?.id&&await E.fetchCurrentUser()}catch(e){e.message&&C.error(e.message)}finally{k.value=!1}}function qe(e){A.value=e.id,H.old_password=``,H.new_password=``,H.confirm_password=``,F.value=!0}async function Je(){if(A.value)try{await z.value?.validate(),k.value=!0,await w.resetPassword(A.value,{old_password:H.old_password,new_password:H.new_password}),C.success(`密码重置成功`),F.value=!1}catch(e){e.message&&C.error(e.message)}finally{k.value=!1}}function Ye(e){if(e.id===E.user?.id){C.error(`不能删除当前登录用户`);return}j.value=e,I.value=!0}async function Xe(){if(j.value){k.value=!0;try{await w.deleteUser(j.value.id),C.success(`用户删除成功`),J()}catch(e){C.error(e.message||`删除失败`)}finally{k.value=!1,I.value=!1,j.value=null}}}return v(()=>{J()}),(a,l)=>{let u=r(`el-icon`),f=r(`el-card`),v=r(`el-input`),C=r(`el-button`),w=r(`el-table-column`),T=r(`el-tag`),D=r(`el-divider`),Ze=r(`el-table`),Qe=r(`el-empty`),$e=r(`el-pagination`),X=r(`el-form-item`),Z=r(`el-option`),et=r(`el-select`),Q=r(`el-form`),$=r(`el-dialog`),tt=r(`el-alert`),nt=n(`loading`);return c(),p(`div`,se,[d(`div`,ce,[h(f,{class:`stat-card`,"body-style":{padding:`20px`}},{default:i(()=>[d(`div`,le,[d(`div`,ue,[h(u,{size:24,class:`text-blue-500`},{default:i(()=>[h(t(y))]),_:1})]),d(`div`,null,[d(`div`,de,m(U.value.total),1),l[20]||=d(`div`,{class:`text-gray-500 text-sm`},`总用户`,-1)])])]),_:1}),h(f,{class:`stat-card`,"body-style":{padding:`20px`}},{default:i(()=>[d(`div`,fe,[d(`div`,pe,[h(u,{size:24,class:`text-red-500`},{default:i(()=>[h(t(b))]),_:1})]),d(`div`,null,[d(`div`,me,m(U.value.admin),1),l[21]||=d(`div`,{class:`text-gray-500 text-sm`},`管理员`,-1)])])]),_:1}),h(f,{class:`stat-card`,"body-style":{padding:`20px`}},{default:i(()=>[d(`div`,he,[d(`div`,ge,[h(u,{size:24,class:`text-green-500`},{default:i(()=>[h(t(S))]),_:1})]),d(`div`,null,[d(`div`,_e,m(U.value.editor),1),l[22]||=d(`div`,{class:`text-gray-500 text-sm`},`编辑`,-1)])])]),_:1}),h(f,{class:`stat-card`,"body-style":{padding:`20px`}},{default:i(()=>[d(`div`,ve,[d(`div`,ye,[h(u,{size:24,class:`text-gray-500`},{default:i(()=>[h(t(x))]),_:1})]),d(`div`,null,[d(`div`,be,m(U.value.viewer),1),l[23]||=d(`div`,{class:`text-gray-500 text-sm`},`访客`,-1)])])]),_:1})]),h(f,{"body-style":{padding:`20px`},class:`header-card`},{default:i(()=>[d(`div`,xe,[d(`div`,Se,[d(`div`,Ce,[h(u,{size:20,class:`text-primary`},{default:i(()=>[h(t(y))]),_:1})]),l[24]||=d(`div`,null,[d(`h2`,{class:`text-lg font-bold`},`用户管理`),d(`p`,{class:`text-gray-500 text-sm`},`管理系统用户及其权限`)],-1)]),d(`div`,we,[h(v,{modelValue:M.value,"onUpdate:modelValue":l[0]||=e=>M.value=e,placeholder:`搜索用户名...`,clearable:``,class:`w-full sm:w-64`,onKeyup:ne(Ue,[`enter`])},{prefix:i(()=>[h(u,null,{default:i(()=>[h(t(ae))]),_:1})]),_:1},8,[`modelValue`]),h(C,{type:`primary`,onClick:l[1]||=e=>N.value=!0},{default:i(()=>[h(u,{class:`mr-1`},{default:i(()=>[h(t(ie))]),_:1}),l[25]||=g(` 创建用户 `,-1)]),_:1})])])]),_:1}),h(f,{"body-style":{padding:`20px`},class:`table-card`},{default:i(()=>[ee((c(),s(Ze,{data:W.value,stripe:``},{default:i(()=>[h(w,{label:`用户`,"min-width":`200`},{default:i(({row:e})=>[d(`div`,Te,[d(`div`,{class:`w-10 h-10 rounded-full flex items-center justify-center text-white font-medium text-lg`,style:re({backgroundColor:K[e.role]?.color||`#8c8c8c`})},m(e.username.charAt(0).toUpperCase()),5),d(`div`,Ee,[d(`span`,De,m(e.username),1),d(`span`,Oe,`ID: `+m(e.id),1)])])]),_:1}),h(w,{label:`角色`,width:`120`,align:`center`},{default:i(({row:e})=>[h(T,{type:Be(e.role),effect:`light`,class:`min-w-[80px]`},{default:i(()=>[h(u,{class:`mr-1`},{default:i(()=>[(c(),s(te(K[e.role]?.icon)))]),_:2},1024),g(` `+m(K[e.role]?.label||e.role),1)]),_:2},1032,[`type`])]),_:1}),h(w,{label:`创建时间`,width:`180`},{default:i(({row:e})=>[d(`div`,ke,[d(`span`,null,m(Ve(e.created_at)),1),d(`span`,Ae,m(new Date(e.created_at).toLocaleString(`zh-CN`)),1)])]),_:1}),h(w,{label:`操作`,width:`160`,align:`center`,fixed:`right`},{default:i(({row:e})=>[h(C,{link:``,type:`primary`,onClick:t=>Ge(e)},{default:i(()=>[...l[26]||=[g(` 编辑 `,-1)]]),_:1},8,[`onClick`]),h(D,{direction:`vertical`}),h(C,{link:``,type:`warning`,onClick:t=>qe(e)},{default:i(()=>[...l[27]||=[g(` 重置密码 `,-1)]]),_:1},8,[`onClick`]),h(D,{direction:`vertical`}),h(C,{link:``,type:`danger`,disabled:e.id===t(E).user?.id,onClick:t=>Ye(e)},{default:i(()=>[...l[28]||=[g(` 删除 `,-1)]]),_:1},8,[`disabled`,`onClick`])]),_:1})]),_:1},8,[`data`])),[[nt,O.value]]),!O.value&&W.value.length===0?(c(),p(`div`,je,[h(Qe,{description:M.value?`未找到匹配的用户`:`暂无用户数据`},null,8,[`description`])])):e(``,!0),d(`div`,Me,[h($e,{"current-page":q.page,"onUpdate:currentPage":l[2]||=e=>q.page=e,"page-size":q.pageSize,"onUpdate:pageSize":l[3]||=e=>q.pageSize=e,"page-sizes":[10,20,50],total:q.itemCount,layout:`total, sizes, prev, pager, next`,onSizeChange:J,onCurrentChange:He},null,8,[`current-page`,`page-size`,`total`])])]),_:1}),h($,{modelValue:N.value,"onUpdate:modelValue":l[8]||=e=>N.value=e,title:`创建用户`,width:`480px`,"close-on-click-modal":!1,onClosed:Y},{footer:i(()=>[h(C,{onClick:l[7]||=e=>N.value=!1},{default:i(()=>[...l[29]||=[g(`取消`,-1)]]),_:1}),h(C,{type:`primary`,loading:k.value,onClick:We},{default:i(()=>[...l[30]||=[g(`创建用户`,-1)]]),_:1},8,[`loading`])]),default:i(()=>[h(Q,{ref_key:`createFormRef`,ref:L,model:B,rules:Le,"label-position":`top`},{default:i(()=>[h(X,{label:`用户名`,prop:`username`},{default:i(()=>[h(v,{modelValue:B.username,"onUpdate:modelValue":l[4]||=e=>B.username=e,placeholder:`请输入用户名`},null,8,[`modelValue`])]),_:1}),h(X,{label:`密码`,prop:`password`},{default:i(()=>[h(v,{modelValue:B.password,"onUpdate:modelValue":l[5]||=e=>B.password=e,type:`password`,placeholder:`请输入密码`,"show-password":``},null,8,[`modelValue`])]),_:1}),h(X,{label:`角色`,prop:`role`},{default:i(()=>[h(et,{modelValue:B.role,"onUpdate:modelValue":l[6]||=e=>B.role=e,placeholder:`请选择角色`,class:`w-full`},{default:i(()=>[(c(),p(o,null,_(G,e=>h(Z,{key:e.value,label:e.label,value:e.value},{default:i(()=>[d(`div`,Ne,[d(`span`,null,m(e.label),1),d(`span`,Pe,m(e.description),1)])]),_:2},1032,[`label`,`value`])),64))]),_:1},8,[`modelValue`])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`modelValue`]),h($,{modelValue:P.value,"onUpdate:modelValue":l[12]||=e=>P.value=e,title:`编辑用户`,width:`480px`,"close-on-click-modal":!1},{footer:i(()=>[h(C,{onClick:l[11]||=e=>P.value=!1},{default:i(()=>[...l[31]||=[g(`取消`,-1)]]),_:1}),h(C,{type:`primary`,loading:k.value,onClick:Ke},{default:i(()=>[...l[32]||=[g(`保存修改`,-1)]]),_:1},8,[`loading`])]),default:i(()=>[h(Q,{ref_key:`editFormRef`,ref:R,model:V,rules:Re,"label-position":`top`},{default:i(()=>[h(X,{label:`用户名`,prop:`username`},{default:i(()=>[h(v,{modelValue:V.username,"onUpdate:modelValue":l[9]||=e=>V.username=e,placeholder:`请输入用户名`},null,8,[`modelValue`])]),_:1}),h(X,{label:`角色`,prop:`role`},{default:i(()=>[h(et,{modelValue:V.role,"onUpdate:modelValue":l[10]||=e=>V.role=e,placeholder:`请选择角色`,class:`w-full`,disabled:A.value===t(E).user?.id},{default:i(()=>[(c(),p(o,null,_(G,e=>h(Z,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`,`disabled`]),A.value===t(E).user?.id?(c(),p(`span`,Fe,`不能修改自己的角色`)):e(``,!0)]),_:1})]),_:1},8,[`model`])]),_:1},8,[`modelValue`]),h($,{modelValue:F.value,"onUpdate:modelValue":l[17]||=e=>F.value=e,title:`重置密码`,width:`480px`,"close-on-click-modal":!1},{footer:i(()=>[h(C,{onClick:l[16]||=e=>F.value=!1},{default:i(()=>[...l[34]||=[g(`取消`,-1)]]),_:1}),h(C,{type:`primary`,loading:k.value,onClick:Je},{default:i(()=>[...l[35]||=[g(`确认重置`,-1)]]),_:1},8,[`loading`])]),default:i(()=>[h(tt,{type:`warning`,closable:!1,class:`mb-4`},{default:i(()=>[...l[33]||=[g(` 为了安全起见,重置密码需要验证原密码。 `,-1)]]),_:1}),h(Q,{ref_key:`resetFormRef`,ref:z,model:H,rules:ze,"label-position":`top`},{default:i(()=>[h(X,{label:`原密码`,prop:`old_password`},{default:i(()=>[h(v,{modelValue:H.old_password,"onUpdate:modelValue":l[13]||=e=>H.old_password=e,type:`password`,placeholder:`请输入原密码`,"show-password":``},null,8,[`modelValue`])]),_:1}),h(X,{label:`新密码`,prop:`new_password`},{default:i(()=>[h(v,{modelValue:H.new_password,"onUpdate:modelValue":l[14]||=e=>H.new_password=e,type:`password`,placeholder:`请输入新密码`,"show-password":``},null,8,[`modelValue`])]),_:1}),h(X,{label:`确认新密码`,prop:`confirm_password`},{default:i(()=>[h(v,{modelValue:H.confirm_password,"onUpdate:modelValue":l[15]||=e=>H.confirm_password=e,type:`password`,placeholder:`请再次输入新密码`,"show-password":``},null,8,[`modelValue`])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`modelValue`]),h($,{modelValue:I.value,"onUpdate:modelValue":l[19]||=e=>I.value=e,title:`确认删除`,width:`400px`,"close-on-click-modal":!1},{footer:i(()=>[h(C,{onClick:l[18]||=e=>I.value=!1},{default:i(()=>[...l[39]||=[g(`取消`,-1)]]),_:1}),h(C,{type:`danger`,loading:k.value,onClick:Xe},{default:i(()=>[...l[40]||=[g(`删除`,-1)]]),_:1},8,[`loading`])]),default:i(()=>[d(`div`,Ie,[h(u,{size:24,class:`text-red-500 mt-1`},{default:i(()=>[h(t(oe))]),_:1}),d(`div`,null,[d(`p`,null,[l[36]||=g(`确定要删除用户 `,-1),d(`strong`,null,m(j.value?.username),1),l[37]||=g(` 吗?`,-1)]),l[38]||=d(`p`,{class:`text-gray-500 text-sm mt-1`},`此操作不可撤销,该用户将无法再登录系统。`,-1)])])]),_:1},8,[`modelValue`])])}}}),[[`__scopeId`,`data-v-590fef8f`]]);export{D as default};