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
5.7 KiB

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