You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1 line
6.2 KiB

import{n as e}from"./axios-CiYFffbI.js";import{I as t,N as n,V as r,Y as i,_ as a,d as o,i as s,it as c,kt as l,l as u,nt as d,p as f,q as p,ut as m,v as h,y as g,z as _}from"./runtime-core.esm-bundler-CnFWH3R5.js";import{n as v}from"./http-LCi9aT1G.js";import{t as y}from"./listTableRowIndex-Bl-nc9Qt.js";var b=920,x=g({__name:`Admins`,setup(g){let x=c(!1),S=c([]),C=c([]),w=c([]),T=c(!1),E=c(null),D=d({username:``,name:``,email:``,password:``,role:`venue_admin`,is_active:!0,venue_ids:[]}),O={maxHeight:`70vh`,overflow:`auto`},k=d({current:1,pageSize:10}),A=c(void 0),j=u(()=>{let e=A.value;return e==null||e<=0?S.value:S.value.filter(t=>t.venues.some(t=>t.id===e))});p(A,()=>{k.current=1});let M=u(()=>E.value!==null);function N(){E.value=null,D.username=``,D.name=``,D.email=``,D.password=``,D.role=`venue_admin`,D.is_active=!0,D.venue_ids=[]}async function P(){x.value=!0;try{let[e,t,n]=await Promise.all([v.get(`/admin-users`),v.get(`/venues`),v.get(`/admin-roles`)]);S.value=e.data,C.value=t.data,w.value=(n.data||[]).map(e=>({slug:e.slug,name:e.name})),k.current=1,A.value=void 0}catch(t){e.error(t?.response?.data?.message??`加载失败`)}finally{x.value=!1}}function F(){N(),T.value=!0}function I(e){E.value=e.id,D.username=e.username,D.name=e.name,D.email=e.email??``,D.password=``,D.role=e.role,D.is_active=e.is_active,D.venue_ids=e.venues.map(e=>e.id),T.value=!0}async function L(){try{return M.value?(await v.put(`/admin-users/${E.value}`,{name:D.name,email:D.email.trim()||void 0,password:D.password||void 0,role:D.role,is_active:D.is_active,venue_ids:D.venue_ids}),e.success(`更新管理员成功`)):(await v.post(`/admin-users`,{username:D.username,name:D.name,email:D.email.trim()||void 0,password:D.password,role:D.role,is_active:D.is_active,venue_ids:D.venue_ids}),e.success(`创建管理员成功`)),T.value=!1,await P(),!0}catch(t){return e.error(t?.response?.data?.message??`保存失败`),!1}}function R(e){return e?.length?e.map(e=>e.name).join(``):`-`}function z(e){return w.value.find(t=>t.slug===e)?.name??e}function B(e){return e===`super_admin`?`arcoblue`:e===`venue_admin`?`orangered`:`purple`}return n(P),(e,n)=>{let c=r(`a-button`),u=r(`a-space`),d=r(`a-alert`),p=r(`a-option`),g=r(`a-select`),v=r(`a-table-column`),S=r(`a-tag`),E=r(`a-table`),N=r(`a-card`),V=r(`a-input`),H=r(`a-form-item`),U=r(`a-input-password`),W=r(`a-switch`),G=r(`a-form`),K=r(`a-modal`);return t(),f(s,null,[h(N,{title:`用户与权限 / 管理员账号`},{extra:i(()=>[h(u,null,{default:i(()=>[h(c,{onClick:P},{default:i(()=>[...n[11]||=[a(`刷新`,-1)]]),_:1}),h(c,{type:`primary`,onClick:F},{default:i(()=>[...n[12]||=[a(`新建管理员`,-1)]]),_:1})]),_:1})]),default:i(()=>[h(d,{style:{"margin-bottom":`12px`}},{default:i(()=>[...n[13]||=[a(` 场馆管理员可绑定多个场馆;后续将用于限制“仅查看/编辑自己的场馆”及“仅核销自己场馆预约二维码”。 `,-1)]]),_:1}),h(u,{wrap:``,size:12,style:{"margin-bottom":`12px`}},{default:i(()=>[h(g,{modelValue:A.value,"onUpdate:modelValue":n[0]||=e=>A.value=e,"allow-clear":``,placeholder:`按绑定场馆筛选`,style:{width:`240px`}},{default:i(()=>[(t(!0),f(s,null,_(C.value,e=>(t(),o(p,{key:e.id,value:e.id},{default:i(()=>[a(l(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),h(E,{class:`list-data-table`,scroll:{x:b},data:j.value,loading:x.value,"row-key":`id`,pagination:{current:k.current,pageSize:k.pageSize,total:j.value.length,showTotal:!0},onPageChange:n[1]||=e=>k.current=e},{columns:i(()=>[h(v,{title:``,width:50,ellipsis:!0,tooltip:!0},{cell:i(({rowIndex:e})=>[a(l(m(y)(e,k.current,k.pageSize)),1)]),_:1}),h(v,{title:`用户名`,"data-index":`username`,width:140,"min-width":120,ellipsis:!0,tooltip:!0}),h(v,{title:`姓名`,"data-index":`name`,width:120,ellipsis:!0,tooltip:!0}),h(v,{title:`角色`,width:130},{cell:i(({record:e})=>[h(S,{color:B(e.role)},{default:i(()=>[a(l(z(e.role)),1)]),_:2},1032,[`color`])]),_:1}),h(v,{title:`绑定场馆`,width:220,"min-width":160,ellipsis:!0,tooltip:!0},{cell:i(({record:e})=>[a(l(R(e.venues)),1)]),_:1}),h(v,{title:`状态`,width:100},{cell:i(({record:e})=>[h(S,{color:e.is_active?`green`:`gray`},{default:i(()=>[a(l(e.is_active?`启用`:`禁用`),1)]),_:2},1032,[`color`])]),_:1}),h(v,{title:`操作`,width:120,fixed:`right`,align:`center`},{cell:i(({record:e})=>[h(c,{type:`text`,onClick:t=>I(e)},{default:i(()=>[...n[14]||=[a(`编辑`,-1)]]),_:1},8,[`onClick`])]),_:1})]),_:1},8,[`scroll`,`data`,`loading`,`pagination`])]),_:1}),h(K,{visible:T.value,"onUpdate:visible":n[9]||=e=>T.value=e,title:M.value?`编辑管理员`:`新建管理员`,width:`70%`,"body-style":O,"on-before-ok":L,onCancel:n[10]||=e=>T.value=!1},{default:i(()=>[h(G,{model:D,layout:`vertical`,class:`admin-modal-form`},{default:i(()=>[h(H,{label:`用户名`,required:``},{default:i(()=>[h(V,{modelValue:D.username,"onUpdate:modelValue":n[2]||=e=>D.username=e,disabled:M.value},null,8,[`modelValue`,`disabled`])]),_:1}),h(H,{label:`姓名`,required:``},{default:i(()=>[h(V,{modelValue:D.name,"onUpdate:modelValue":n[3]||=e=>D.name=e},null,8,[`modelValue`])]),_:1}),h(H,{label:`邮箱(选填)`},{default:i(()=>[h(V,{modelValue:D.email,"onUpdate:modelValue":n[4]||=e=>D.email=e,placeholder:`可留空`},null,8,[`modelValue`])]),_:1}),h(H,{label:M.value?`密码(留空不修改)`:`密码`,required:!M.value},{default:i(()=>[h(U,{modelValue:D.password,"onUpdate:modelValue":n[5]||=e=>D.password=e},null,8,[`modelValue`])]),_:1},8,[`label`,`required`]),h(H,{label:`角色`,required:``},{default:i(()=>[h(g,{modelValue:D.role,"onUpdate:modelValue":n[6]||=e=>D.role=e},{default:i(()=>[(t(!0),f(s,null,_(w.value,e=>(t(),o(p,{key:e.slug,value:e.slug},{default:i(()=>[a(l(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),h(H,{label:`绑定场馆`,class:`admin-modal-form__full`},{default:i(()=>[h(g,{modelValue:D.venue_ids,"onUpdate:modelValue":n[7]||=e=>D.venue_ids=e,multiple:``,"allow-clear":``},{default:i(()=>[(t(!0),f(s,null,_(C.value,e=>(t(),o(p,{key:e.id,value:e.id},{default:i(()=>[a(l(e.name),1)]),_:2},1032,[`value`]))),128))]),_:1},8,[`modelValue`])]),_:1}),h(H,{label:`状态`},{default:i(()=>[h(W,{modelValue:D.is_active,"onUpdate:modelValue":n[8]||=e=>D.is_active=e},null,8,[`modelValue`])]),_:1})]),_:1},8,[`model`])]),_:1},8,[`visible`,`title`])],64)}}});export{x as default};