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

1 month ago
import{C as e,Ct as t,D as n,E as r,G as i,S as a,T as o,X as s,Xt as c,Y as l,at as u,b as d,d as f,ht as p,m,ot as h,q as g,tn as _,x as v}from"./vue.runtime.esm-bundler-DUiYyeqQ.js";import{c as y,l as b,r as x}from"./index-BAoVGmph.js";import{t as S}from"./usePageLoad-DFTLo_Lv.js";import{r as C}from"./admin-list-CBoToEFo.js";import{r as w}from"./research-directions-CXTaBZC3.js";import{p as T}from"./teachers-DxdLqUXX.js";async function E(e){let{data:t}=await x.get(`/admin/v1/grid-members`,{params:e});return t.data}async function D(e){let{data:t}=await x.post(`/admin/v1/grid-members`,e);return t.data}async function O(e,t){let{data:n}=await x.put(`/admin/v1/grid-members/${e}`,t);return n}async function k(e,t){let{data:n}=await x.post(`/admin/v1/grid-members/${e}/password`,{password:t});return n}async function A(e){let{data:t}=await x.delete(`/admin/v1/grid-members/${e}`);return t}var j={class:`list-page`},M={class:`page-header`},N={class:`list-filter-bar`},P={class:`table-row-actions`},F={class:`list-pager`},I=n({__name:`index`,setup(n){let x=p(!1),I=p([]),L=p({current_page:1,per_page:20,total:0}),R=p(``),z=p(1),B=p([]),V=p([]),H=p(!1),U=p(null),W=p({username:``,password:``,real_name:``,mobile:``,email:``,status:1,university_ids:[],research_direction_ids:[]});async function G(){let[e,t]=await Promise.all([T({page:1,page_size:500,simple:1}),w()]);B.value=e.items.map(e=>({id:e.id,name:e.name})),V.value=t.map(e=>({id:e.id,name:e.name}))}async function K(){x.value=!0;try{let e=await E({page:z.value,page_size:L.value.per_page,keyword:R.value||void 0});I.value=e.items,L.value=e.meta}finally{x.value=!1}}function q(){U.value=null,W.value={username:``,password:``,real_name:``,mobile:``,email:``,status:1,university_ids:[],research_direction_ids:[]},H.value=!0}function J(e){U.value=e,W.value={username:e.username,password:``,real_name:e.real_name||``,mobile:e.mobile||``,email:e.email||``,status:e.status,university_ids:e.universities?.map(e=>e.id)||[],research_direction_ids:e.research_directions?.map(e=>e.id)||[]},H.value=!0}async function Y(){if(!U.value&&!W.value.password){b.warning(`请设置初始密码`);return}if(!W.value.university_ids.length){b.warning(`请至少选择一个负责高校`);return}if(!W.value.research_direction_ids.length){b.warning(`请至少选择一个研究方向`);return}let e={real_name:W.value.real_name||null,mobile:W.value.mobile||null,email:W.value.email||null,status:W.value.status,university_ids:W.value.university_ids,research_direction_ids:W.value.research_direction_ids};U.value?(await O(U.value.id,e),W.value.password&&await k(U.value.id,W.value.password)):await D({username:W.value.username,password:W.value.password,...e}),b.success(`已保存`),H.value=!1,await K()}async function X(e){await y.confirm(`确定删除网格员「${e.username}」?`,`提示`,{type:`warning`}),await A(e.id),b.success(`已删除`),await K()}function Z(){z.value=1,K()}function Q(){R.value=``,z.value=1,K()}return S(async()=>{await G(),await K()}),(n,p)=>{let y=l(`el-button`),b=l(`el-input`),S=l(`el-table-column`),w=l(`el-tag`),T=l(`el-table`),E=l(`el-pagination`),D=l(`el-card`),O=l(`el-form-item`),k=l(`el-switch`),A=l(`el-option`),G=l(`el-select`),$=l(`el-form`),ee=l(`el-dialog`),te=s(`loading`);return i(),e(m,null,[d(`div`,j,[d(`div`,M,[p[13]||=d(`h1`,{class:`page-title`},`网格员管理`,-1),r(y,{type:`primary`,size:`small`,class:`btn-create`,onClick:q},{default:u(()=>[...p[12]||=[o(`新增网格员`,-1)]]),_:1})]),r(D,{shadow:`never`,class:`admin-list-card`},{default:u(()=>[d(`div`,N,[r(b,{modelValue:R.value,"onUpdate:modelValue":p[0]||=e=>R.value=e,placeholder:`账号/姓名/手机`,clearable:``,class:`filter-search`,onKeyup:f(Z,[`enter`])},null,8,[`modelValue`]),r(y,{type:`primary`,onClick:Z},{default:u(()=>[...p[14]||=[o(`搜索`,-1)]]),_:1}),r(y,{onClick:Q},{default:u(()=>[...p[15]||=[o(`重置`,-1)]]),_:1})]),h((i(),v(T,{data:I.value,"row-key":`id`},{default:u(()=>[r(S,{prop:`username`,label:`账号`,width:`130`}),r(S,{prop:`real_name`,label:`姓名`,width:`110`}),r(S,{label:`负责高校`,"min-width":`180`},{defa