1 line
5.7 KiB
JavaScript
1 line
5.7 KiB
JavaScript
import{D as e,E as t,M as n,O as r,P as i,S as a,_ as o,f as s,h as c,j as l,k as u,l as d,m as f,n as p,o as m,s as h,u as g,v as _,w as v,x as y,y as b}from"./index-C_7kTAur.js";import{r as x}from"./utils-COFIQvWo.js";var S={class:`page-container`},C={class:`page-header`},w={key:0,class:`loading-state`},T={key:1,class:`table-container`},E={class:`data-table`},D={class:`action-buttons`,style:{display:`flex`,gap:`4px`}},O=[`onClick`],k=[`onClick`],A=[`onClick`],j={class:`modal-content`},M={class:`modal-header`},N={class:`modal-body`},P={class:`form-group`},F=[`disabled`],I={class:`form-group`},L={key:0,class:`form-group`},R={class:`form-group`},z={class:`form-group`},B={class:`checkbox-group`,style:{"flex-direction":`column`,gap:`8px`}},V=[`value`],H={class:`modal-footer`},U=a({__name:`UsersView`,setup(a){let U=d(),W=h(),G=W.user,K=u({users:[],roles:[],loading:!0,showUserModal:!1,editingUser:null,userForm:{username:``,email:``,password:``,full_name:``,role_ids:[]}}),q=async()=>{try{K.users=await m(`/api/auth/users`)}catch(e){p(e.message||`加载用户列表失败`,`error`)}finally{K.loading=!1}},J=async()=>{try{K.roles=await m(`/api/auth/roles`)}catch(e){p(e.message||`加载角色列表失败`,`error`)}},Y=(e=null)=>{K.editingUser=e,e?K.userForm={username:e.username,email:e.email,password:``,full_name:e.full_name||``,role_ids:e.roles.map(e=>{let t=K.roles.find(t=>t.code===e);return t?t.id:null}).filter(e=>e!==null)}:K.userForm={username:``,email:``,password:``,full_name:``,role_ids:[]},K.showUserModal=!0},X=async()=>{if(!K.userForm.username||!K.userForm.email){p(`请填写用户名和邮箱`,`error`);return}if(!K.editingUser&&!K.userForm.password){p(`请填写密码`,`error`);return}try{K.editingUser?(await m(`/api/auth/users/${K.editingUser.id}`,{method:`PUT`,body:JSON.stringify({email:K.userForm.email,full_name:K.userForm.full_name||null,role_ids:K.userForm.role_ids})}),p(`用户更新成功`,`success`)):(await m(`/api/auth/users`,{method:`POST`,body:JSON.stringify(K.userForm)}),p(`用户创建成功`,`success`)),K.showUserModal=!1,q()}catch(e){p(e.message||`保存用户失败`,`error`)}},Z=async e=>{if(confirm(`确定要删除用户 ${e.username} 吗?`))try{await m(`/api/auth/users/${e.id}`,{method:`DELETE`}),p(`用户已删除`,`success`),q()}catch(e){p(e.message||`删除用户失败`,`error`)}},Q=async e=>{let t=prompt(`请输入 ${e.username} 的新密码:`);if(!t||t.length<6){p(`密码长度至少6位`,`error`);return}try{await m(`/api/auth/users/${e.id}/reset-password`,{method:`PUT`,body:JSON.stringify(t)}),p(`密码已重置`,`success`)}catch(e){p(e.message||`重置密码失败`,`error`)}};return v(async()=>{if(!W.user?.is_superuser){U.push(`/`);return}await J(),q()}),(a,u)=>(t(),b(`div`,S,[o(`div`,C,[u[9]||=o(`div`,null,[o(`h1`,null,`用户管理`),o(`p`,null,`管理系统用户和权限`)],-1),o(`button`,{class:`btn btn-primary`,onClick:u[0]||=e=>Y()},`+ 添加用户`)]),K.loading?(t(),b(`div`,w,[...u[10]||=[o(`div`,{class:`loading-spinner`},null,-1),o(`span`,null,`加载中...`,-1)]])):(t(),b(`div`,T,[o(`table`,E,[u[11]||=o(`thead`,null,[o(`tr`,null,[o(`th`,null,`用户名`),o(`th`,null,`邮箱`),o(`th`,null,`姓名`),o(`th`,null,`状态`),o(`th`,null,`角色`),o(`th`,null,`注册时间`),o(`th`,null,`操作`)])],-1),o(`tbody`,null,[(t(!0),b(c,null,e(K.users,r=>(t(),b(`tr`,{key:r.id},[o(`td`,null,i(r.username),1),o(`td`,null,i(r.email),1),o(`td`,null,i(r.full_name||`-`),1),o(`td`,null,[o(`span`,{class:n([`badge`,r.is_active?`badge-success`:`badge-error`])},i(r.is_active?`正常`:`禁用`),3)]),o(`td`,null,[(t(!0),b(c,null,e(r.roles,e=>(t(),b(`span`,{key:e,class:`badge badge-info`,style:{"margin-right":`4px`}},i(e),1))),128))]),o(`td`,null,i(l(x)(r.created_at)),1),o(`td`,null,[o(`div`,D,[o(`button`,{class:`btn btn-sm`,style:{background:`var(--primary-500)`,color:`white`},onClick:e=>Y(r)},`编辑`,8,O),o(`button`,{class:`btn btn-sm`,style:{background:`#eab308`,color:`white`},onClick:e=>Q(r)},`重置密码`,8,k),r.id===l(G)?.id?_(``,!0):(t(),b(`button`,{key:0,class:`btn btn-sm`,style:{background:`var(--error)`,color:`white`},onClick:e=>Z(r)},`删除`,8,A))])])]))),128))])])])),K.showUserModal?(t(),b(`div`,{key:2,class:`modal-overlay`,onClick:u[8]||=f(e=>K.showUserModal=!1,[`self`])},[o(`div`,j,[o(`div`,M,[o(`h2`,null,i(K.editingUser?`编辑用户`:`添加用户`),1),o(`button`,{class:`modal-close`,onClick:u[1]||=e=>K.showUserModal=!1},`×`)]),o(`div`,N,[o(`div`,P,[u[12]||=o(`label`,{class:`form-label`},`用户名`,-1),r(o(`input`,{"onUpdate:modelValue":u[2]||=e=>K.userForm.username=e,type:`text`,class:`form-input`,disabled:!!K.editingUser},null,8,F),[[s,K.userForm.username]])]),o(`div`,I,[u[13]||=o(`label`,{class:`form-label`},`邮箱`,-1),r(o(`input`,{"onUpdate:modelValue":u[3]||=e=>K.userForm.email=e,type:`email`,class:`form-input`},null,512),[[s,K.userForm.email]])]),K.editingUser?_(``,!0):(t(),b(`div`,L,[u[14]||=o(`label`,{class:`form-label`},`密码`,-1),r(o(`input`,{"onUpdate:modelValue":u[4]||=e=>K.userForm.password=e,type:`password`,class:`form-input`},null,512),[[s,K.userForm.password]])])),o(`div`,R,[u[15]||=o(`label`,{class:`form-label`},`姓名`,-1),r(o(`input`,{"onUpdate:modelValue":u[5]||=e=>K.userForm.full_name=e,type:`text`,class:`form-input`},null,512),[[s,K.userForm.full_name]])]),o(`div`,z,[u[16]||=o(`label`,{class:`form-label`},`角色`,-1),o(`div`,B,[(t(!0),b(c,null,e(K.roles,e=>(t(),b(`label`,{key:e.id,class:`checkbox-label`},[r(o(`input`,{type:`checkbox`,value:e.id,"onUpdate:modelValue":u[6]||=e=>K.userForm.role_ids=e,class:`checkbox-input`},null,8,V),[[g,K.userForm.role_ids]]),y(` `+i(e.name),1)]))),128))])])]),o(`div`,H,[o(`button`,{class:`btn btn-secondary`,onClick:u[7]||=e=>K.showUserModal=!1},`取消`),o(`button`,{class:`btn btn-primary`,onClick:X},`保存`)])])])):_(``,!0)]))}});export{U as default}; |