Files
geMoldInsight/static/assets/UsersView-x2MT0yp7.js
T
2026-07-31 16:55:52 +08:00

1 line
5.8 KiB
JavaScript

import{C as e,D as t,F as n,M as r,N as i,O as a,R as o,S as s,T as c,_ as l,c as u,f as d,g as f,j as p,k as m,m as h,r as g,s as _,t as v,u as y,v as b,x,y as S}from"./index-Dngmm__P.js";import{r as C}from"./utils-COFIQvWo.js";var w={class:`page-container`},T={class:`page-header`},E={style:{display:`flex`,"flex-direction":`column`,gap:`8px`}},D=[`value`],O=e({__name:`UsersView`,setup(e){let O=y(),k=u(),A=k.user,j=i({users:[],roles:[],loading:!0,showUserModal:!1,editingUser:null,userForm:{username:``,email:``,password:``,full_name:``,role_ids:[]}});function M(e,t,n,r,i){return new Promise(a=>{let o=v.confirm({header:e,body:t,theme:n,confirmBtn:r,cancelBtn:i,onConfirm:()=>{o.hide(),a(!0)},onCancel:()=>{o.hide(),a(!1)},onClose:()=>{a(!1)}})})}let N=async()=>{try{j.users=await _(`/api/auth/users`)}catch(e){g(e.message||`加载用户列表失败`,`error`)}finally{j.loading=!1}},P=async()=>{try{j.roles=await _(`/api/auth/roles`)}catch(e){g(e.message||`加载角色列表失败`,`error`)}},F=(e=null)=>{j.editingUser=e,e?j.userForm={username:e.username,email:e.email,password:``,full_name:e.full_name||``,role_ids:e.roles.map(e=>{let t=j.roles.find(t=>t.code===e);return t?t.id:null}).filter(e=>e!==null)}:j.userForm={username:``,email:``,password:``,full_name:``,role_ids:[]},j.showUserModal=!0},I=async()=>{if(!j.userForm.username||!j.userForm.email){g(`请填写用户名和邮箱`,`error`);return}if(!j.editingUser&&!j.userForm.password){g(`请填写密码`,`error`);return}try{j.editingUser?(await _(`/api/auth/users/${j.editingUser.id}`,{method:`PUT`,body:JSON.stringify({email:j.userForm.email,full_name:j.userForm.full_name||null,role_ids:j.userForm.role_ids})}),g(`用户更新成功`,`success`)):(await _(`/api/auth/users`,{method:`POST`,body:JSON.stringify(j.userForm)}),g(`用户创建成功`,`success`)),j.showUserModal=!1,N()}catch(e){g(e.message||`保存用户失败`,`error`)}},L=async e=>{if(await M(`删除确认`,`确定要删除用户 ${e.username} 吗?`,`warning`,`删除`,`取消`))try{await _(`/api/auth/users/${e.id}`,{method:`DELETE`}),g(`用户已删除`,`success`),N()}catch(e){g(e.message||`删除用户失败`,`error`)}},R=async e=>{let t=prompt(`请输入 ${e.username} 的新密码:`);if(!t||t.length<6){g(`密码长度至少6位`,`error`);return}try{await _(`/api/auth/users/${e.id}/reset-password`,{method:`PUT`,body:JSON.stringify(t)}),g(`密码已重置`,`success`)}catch(e){g(e.message||`重置密码失败`,`error`)}};return c(async()=>{if(!k.user?.is_superuser){O.push(`/`);return}await P(),N()}),(e,i)=>{let c=m(`t-button`),u=m(`t-table-column`),g=m(`t-tag`),_=m(`t-space`),v=m(`t-table`),y=m(`t-empty`),O=m(`t-loading`),k=m(`t-input`),M=m(`t-form-item`),N=m(`t-form`),P=m(`t-dialog`);return t(),S(`div`,w,[f(`div`,T,[i[9]||=f(`div`,null,[f(`h1`,null,`用户管理`),f(`p`,null,`管理系统用户和权限`)],-1),s(c,{theme:`primary`,onClick:i[0]||=e=>F()},{default:p(()=>[...i[8]||=[x(`+ 添加用户`,-1)]]),_:1})]),s(O,{loading:j.loading,size:`large`},{default:p(()=>[s(v,{data:j.users,"row-key":`id`,stripe:``},{default:p(()=>[s(u,{colKey:`username`,title:`用户名`}),s(u,{colKey:`email`,title:`邮箱`}),s(u,{colKey:`full_name`,title:`姓名`},{cell:p(({row:e})=>[x(o(e.full_name||`-`),1)]),_:1}),s(u,{colKey:`is_active`,title:`状态`},{cell:p(({row:e})=>[s(g,{theme:e.is_active?`success`:`danger`},{default:p(()=>[x(o(e.is_active?`正常`:`禁用`),1)]),_:2},1032,[`theme`])]),_:1}),s(u,{colKey:`roles`,title:`角色`},{cell:p(({row:e})=>[(t(!0),S(h,null,a(e.roles,e=>(t(),l(g,{key:e,theme:`primary`,variant:`light`,style:{"margin-right":`4px`}},{default:p(()=>[x(o(e),1)]),_:2},1024))),128))]),_:1}),s(u,{colKey:`created_at`,title:`注册时间`},{cell:p(({row:e})=>[x(o(n(C)(e.created_at)),1)]),_:1}),s(u,{colKey:`actions`,title:`操作`},{cell:p(({row:e})=>[s(_,{size:4},{default:p(()=>[s(c,{theme:`primary`,size:`small`,onClick:t=>F(e)},{default:p(()=>[...i[10]||=[x(`编辑`,-1)]]),_:1},8,[`onClick`]),s(c,{theme:`warning`,size:`small`,onClick:t=>R(e)},{default:p(()=>[...i[11]||=[x(`重置密码`,-1)]]),_:1},8,[`onClick`]),e.id===n(A)?.id?b(``,!0):(t(),l(c,{key:0,theme:`danger`,size:`small`,onClick:t=>L(e)},{default:p(()=>[...i[12]||=[x(`删除`,-1)]]),_:1},8,[`onClick`]))]),_:2},1024)]),_:1})]),_:1},8,[`data`]),!j.loading&&j.users.length===0?(t(),l(y,{key:0,description:`暂无用户数据`})):b(``,!0)]),_:1},8,[`loading`]),s(P,{visible:j.showUserModal,"onUpdate:visible":i[7]||=e=>j.showUserModal=e,header:j.editingUser?`编辑用户`:`添加用户`,"close-on-overlay-click":!0,width:`520px`},{footer:p(()=>[s(c,{theme:`default`,onClick:i[6]||=e=>j.showUserModal=!1},{default:p(()=>[...i[13]||=[x(`取消`,-1)]]),_:1}),s(c,{theme:`primary`,onClick:I},{default:p(()=>[...i[14]||=[x(`保存`,-1)]]),_:1})]),default:p(()=>[s(N,{"label-width":`80px`},{default:p(()=>[s(M,{label:`用户名`},{default:p(()=>[s(k,{modelValue:j.userForm.username,"onUpdate:modelValue":i[1]||=e=>j.userForm.username=e,disabled:!!j.editingUser},null,8,[`modelValue`,`disabled`])]),_:1}),s(M,{label:`邮箱`},{default:p(()=>[s(k,{modelValue:j.userForm.email,"onUpdate:modelValue":i[2]||=e=>j.userForm.email=e,type:`email`},null,8,[`modelValue`])]),_:1}),j.editingUser?b(``,!0):(t(),l(M,{key:0,label:`密码`},{default:p(()=>[s(k,{modelValue:j.userForm.password,"onUpdate:modelValue":i[3]||=e=>j.userForm.password=e,type:`password`},null,8,[`modelValue`])]),_:1})),s(M,{label:`姓名`},{default:p(()=>[s(k,{modelValue:j.userForm.full_name,"onUpdate:modelValue":i[4]||=e=>j.userForm.full_name=e},null,8,[`modelValue`])]),_:1}),s(M,{label:`角色`},{default:p(()=>[f(`div`,E,[(t(!0),S(h,null,a(j.roles,e=>(t(),S(`label`,{key:e.id,style:{display:`flex`,"align-items":`center`,gap:`6px`,cursor:`pointer`}},[r(f(`input`,{type:`checkbox`,value:e.id,"onUpdate:modelValue":i[5]||=e=>j.userForm.role_ids=e},null,8,D),[[d,j.userForm.role_ids]]),x(` `+o(e.name),1)]))),128))])]),_:1})]),_:1})]),_:1},8,[`visible`,`header`])])}}});export{O as default};