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