import{d as xe,o as we,c as ae,a as l,w as a,x as te,l as w,D as ke,m as A,I as Ue,r as i,b as o,H as Ce,e as g,h as k,j as ze,k as u,t as d,A as V,z as E,J as Se,E as x,K as De,L as Ee,M as Be,N as Pe,O as Te,P as $e,Q as Ke,R as Ne,S as qe}from"./index-7syy_I7y.js";import{u as se,f as B,d as ue}from"./format-BLhrtLRJ.js";import{_ as Me}from"./_plugin-vue_export-helper-DlAUqK2U.js";const Fe={class:"toolbar"},Ie={class:"actions"},Le=xe({__name:"UsersView",setup(Oe){const J=ke(),Q=i([]),G=i(0),U=i(1),K=i(20),c=A({status:"",supervisor:"",keyword:""}),N=i(!1),W={active:"success",disabled:"info",expired:"danger"};async function y(){N.value=!0;try{const m=await Ue({page:U.value,page_size:K.value,status:c.status||void 0,supervisor:c.supervisor||void 0});Q.value=m.items,G.value=m.total}catch{}finally{N.value=!1}}function q(){U.value=1,y()}function X(m){U.value=m,y()}const C=i(!1),M=i(!1),n=A({username:"",email:"",supervisor:"",purpose:"",ttl_days:0});async function oe(){if(!n.username||!n.email){x.warning("用户名和邮箱必填");return}M.value=!0;try{await De({username:n.username,email:n.email,supervisor:n.supervisor,purpose:n.purpose,ttl_days:n.ttl_days||void 0}),x.success("创建成功"),C.value=!1,Object.assign(n,{username:"",email:"",supervisor:"",purpose:"",ttl_days:0}),y()}catch{}finally{M.value=!1}}const P=i(!1),s=i(null),F=i([]),I=i(!1);async function z(m){s.value=m,P.value=!0,I.value=!0;try{const[e,f]=await Promise.all([Ee(m.id),Be(m.id)]);s.value=e,F.value=f.items}catch{}finally{I.value=!1}}const S=i(!1),L=i(!1),p=A({email:"",supervisor:"",purpose:""});function ne(){s.value&&(p.email=s.value.email,p.supervisor=s.value.supervisor,p.purpose=s.value.purpose,S.value=!0)}async function ie(){if(s.value){L.value=!0;try{await Pe(s.value.id,{email:p.email||void 0,supervisor:p.supervisor||void 0,purpose:p.purpose||void 0}),x.success("已更新"),S.value=!1,z(s.value),y()}catch{}finally{L.value=!1}}}const D=i(!1),O=i(!1),T=i(0);function Y(){T.value=0,D.value=!0}async function re(){if(s.value){O.value=!0;try{const m=await Te(s.value.id,T.value);x.success(`已延期,新过期时间:${B(m.expire_at)}`),D.value=!1,z(s.value),y()}catch{}finally{O.value=!1}}}async function de(){if(s.value)try{await $e(s.value.id),x.success("已禁用(authorized_keys 已清空)"),z(s.value),y()}catch{}}async function pe(){if(s.value)try{await Ke(s.value.id),x.success("已启用"),z(s.value),y()}catch{}}async function me(){if(s.value){try{await Ne.confirm(`将删除用户 ${s.value.username}(系统账号 + 家目录 + 密钥),审计记录保留。确认?`,"危险操作",{type:"warning",confirmButtonText:"确认删除",cancelButtonText:"取消"})}catch{return}try{await qe(s.value.id),x.success("已删除"),P.value=!1,y()}catch{}}}return we(()=>{J.query.status&&(c.status=String(J.query.status)),y()}),(m,e)=>{var le;const f=o("el-input"),j=o("el-option"),ve=o("el-select"),r=o("el-button"),fe=o("Plus"),ye=o("el-icon"),v=o("el-table-column"),$=o("el-tag"),Z=o("el-table"),_e=o("el-pagination"),be=o("el-card"),_=o("el-form-item"),h=o("el-input-number"),H=o("el-form"),R=o("el-dialog"),b=o("el-descriptions-item"),ge=o("el-descriptions"),Ve=o("el-divider"),ce=o("el-drawer"),ee=Ce("loading");return g(),ae("div",null,[l(be,{shadow:"never"},{default:a(()=>[k("div",Fe,[l(f,{modelValue:c.supervisor,"onUpdate:modelValue":e[0]||(e[0]=t=>c.supervisor=t),placeholder:"挂靠老师",clearable:"",style:{width:"180px"},onKeyup:ze(q,["enter"])},null,8,["modelValue"]),l(ve,{modelValue:c.status,"onUpdate:modelValue":e[1]||(e[1]=t=>c.status=t),placeholder:"状态",clearable:"",style:{width:"130px"},onChange:q},{default:a(()=>[l(j,{label:"正常",value:"active"}),l(j,{label:"已禁用",value:"disabled"}),l(j,{label:"已过期",value:"expired"})]),_:1},8,["modelValue"]),l(r,{type:"primary",onClick:q},{default:a(()=>[...e[21]||(e[21]=[u("查询",-1)])]),_:1}),e[23]||(e[23]=k("div",{class:"spacer"},null,-1)),l(r,{type:"primary",onClick:e[2]||(e[2]=t=>C.value=!0)},{default:a(()=>[l(ye,null,{default:a(()=>[l(fe)]),_:1}),e[22]||(e[22]=u(" 新建用户 ",-1))]),_:1})]),te((g(),w(Z,{data:Q.value,stripe:""},{default:a(()=>[l(v,{prop:"id",label:"ID",width:"70"}),l(v,{prop:"username",label:"用户名","min-width":"140"}),l(v,{prop:"email",label:"邮箱","min-width":"200"}),l(v,{prop:"supervisor",label:"挂靠老师",width:"130"}),l(v,{label:"状态",width:"90"},{default:a(({row:t})=>[l($,{type:W[t.status]??"info",size:"small"},{default:a(()=>[u(d(V(se)[t.status]??t.status),1)]),_:2},1032,["type"])]),_:1}),l(v,{label:"过期时间",width:"170"},{default:a(({row:t})=>[k("span",null,d(V(B)(t.expire_at)),1),t.status==="active"&&(V(ue)(t.expire_at)??999)<=30?(g(),w($,{key:0,type:"warning",size:"small",class:"soon-tag"},{default:a(()=>[u(" 剩 "+d(V(ue)(t.expire_at))+" 天 ",1)]),_:2},1024)):E("",!0)]),_:1}),l(v,{label:"操作",width:"100",fixed:"right"},{default:a(({row:t})=>[l(r,{link:"",type:"primary",onClick:je=>z(t)},{default:a(()=>[...e[24]||(e[24]=[u("详情",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1},8,["data"])),[[ee,N.value]]),l(_e,{"current-page":U.value,"onUpdate:currentPage":e[3]||(e[3]=t=>U.value=t),"page-size":K.value,"onUpdate:pageSize":e[4]||(e[4]=t=>K.value=t),total:G.value,"page-sizes":[10,20,50],layout:"total, sizes, prev, pager, next",class:"pager",onCurrentChange:X,onSizeChange:X},null,8,["current-page","page-size","total"])]),_:1}),l(R,{modelValue:C.value,"onUpdate:modelValue":e[11]||(e[11]=t=>C.value=t),title:"新建外部用户",width:"480px"},{footer:a(()=>[l(r,{onClick:e[10]||(e[10]=t=>C.value=!1)},{default:a(()=>[...e[26]||(e[26]=[u("取消",-1)])]),_:1}),l(r,{type:"primary",loading:M.value,onClick:oe},{default:a(()=>[...e[27]||(e[27]=[u("创建",-1)])]),_:1},8,["loading"])]),default:a(()=>[l(H,{"label-width":"90px"},{default:a(()=>[l(_,{label:"用户名",required:""},{default:a(()=>[l(f,{modelValue:n.username,"onUpdate:modelValue":e[5]||(e[5]=t=>n.username=t),placeholder:"不含 ext_ 前缀(自动生成 ext_)"},null,8,["modelValue"])]),_:1}),l(_,{label:"邮箱",required:""},{default:a(()=>[l(f,{modelValue:n.email,"onUpdate:modelValue":e[6]||(e[6]=t=>n.email=t),placeholder:"接收 OTP 与通知邮件"},null,8,["modelValue"])]),_:1}),l(_,{label:"挂靠老师"},{default:a(()=>[l(f,{modelValue:n.supervisor,"onUpdate:modelValue":e[7]||(e[7]=t=>n.supervisor=t)},null,8,["modelValue"])]),_:1}),l(_,{label:"用途"},{default:a(()=>[l(f,{modelValue:n.purpose,"onUpdate:modelValue":e[8]||(e[8]=t=>n.purpose=t),type:"textarea",rows:2},null,8,["modelValue"])]),_:1}),l(_,{label:"有效期(天)"},{default:a(()=>[l(h,{modelValue:n.ttl_days,"onUpdate:modelValue":e[9]||(e[9]=t=>n.ttl_days=t),min:0,max:3650},null,8,["modelValue"]),e[25]||(e[25]=k("div",{class:"tip"},"留空/0 表示使用系统默认有效期",-1))]),_:1})]),_:1})]),_:1},8,["modelValue"]),te((g(),w(ce,{modelValue:P.value,"onUpdate:modelValue":e[12]||(e[12]=t=>P.value=t),title:((le=s.value)==null?void 0:le.username)??"",size:"560px"},{default:a(()=>[s.value?(g(),ae(Se,{key:0},[l(ge,{column:1,border:""},{default:a(()=>[l(b,{label:"用户名"},{default:a(()=>[u(d(s.value.username),1)]),_:1}),l(b,{label:"邮箱"},{default:a(()=>[u(d(s.value.email),1)]),_:1}),l(b,{label:"挂靠老师"},{default:a(()=>[u(d(s.value.supervisor||"-"),1)]),_:1}),l(b,{label:"用途"},{default:a(()=>[u(d(s.value.purpose||"-"),1)]),_:1}),l(b,{label:"状态"},{default:a(()=>[l($,{type:W[s.value.status]??"info",size:"small"},{default:a(()=>[u(d(V(se)[s.value.status]??s.value.status),1)]),_:1},8,["type"])]),_:1}),l(b,{label:"过期时间"},{default:a(()=>[u(d(V(B)(s.value.expire_at)),1)]),_:1}),l(b,{label:"Shell"},{default:a(()=>[u(d(s.value.shell),1)]),_:1}),l(b,{label:"最近登录"},{default:a(()=>[u(d(V(B)(s.value.last_login_at)),1)]),_:1}),l(b,{label:"创建时间"},{default:a(()=>[u(d(V(B)(s.value.created_at)),1)]),_:1})]),_:1}),k("div",Ie,[s.value.status==="active"?(g(),w(r,{key:0,onClick:de},{default:a(()=>[...e[28]||(e[28]=[u("禁用",-1)])]),_:1})):E("",!0),s.value.status==="disabled"?(g(),w(r,{key:1,type:"success",onClick:pe},{default:a(()=>[...e[29]||(e[29]=[u("启用",-1)])]),_:1})):E("",!0),s.value.status==="expired"?(g(),w(r,{key:2,type:"warning",onClick:Y},{default:a(()=>[...e[30]||(e[30]=[u("延期恢复",-1)])]),_:1})):E("",!0),l(r,{type:"primary",plain:"",onClick:Y},{default:a(()=>[...e[31]||(e[31]=[u("延期",-1)])]),_:1}),l(r,{onClick:ne},{default:a(()=>[...e[32]||(e[32]=[u("编辑信息",-1)])]),_:1}),l(r,{type:"danger",plain:"",onClick:me},{default:a(()=>[...e[33]||(e[33]=[u("删除",-1)])]),_:1})]),l(Ve,{"content-position":"left"},{default:a(()=>[u("SSH 公钥("+d(F.value.length)+")",1)]),_:1}),l(Z,{data:F.value,size:"small"},{default:a(()=>[l(v,{prop:"name",label:"名称",width:"140"}),l(v,{prop:"key_type",label:"类型",width:"120"}),l(v,{prop:"fingerprint",label:"指纹","min-width":"180","show-overflow-tooltip":""}),l(v,{label:"状态",width:"80"},{default:a(({row:t})=>[l($,{type:t.status==="active"?"success":"danger",size:"small"},{default:a(()=>[u(d(t.status==="active"?"生效":"已吊销"),1)]),_:2},1032,["type"])]),_:1})]),_:1},8,["data"])],64)):E("",!0)]),_:1},8,["modelValue","title"])),[[ee,I.value]]),l(R,{modelValue:S.value,"onUpdate:modelValue":e[17]||(e[17]=t=>S.value=t),title:"编辑用户信息",width:"460px"},{footer:a(()=>[l(r,{onClick:e[16]||(e[16]=t=>S.value=!1)},{default:a(()=>[...e[34]||(e[34]=[u("取消",-1)])]),_:1}),l(r,{type:"primary",loading:L.value,onClick:ie},{default:a(()=>[...e[35]||(e[35]=[u("保存",-1)])]),_:1},8,["loading"])]),default:a(()=>[l(H,{"label-width":"90px"},{default:a(()=>[l(_,{label:"邮箱"},{default:a(()=>[l(f,{modelValue:p.email,"onUpdate:modelValue":e[13]||(e[13]=t=>p.email=t)},null,8,["modelValue"])]),_:1}),l(_,{label:"挂靠老师"},{default:a(()=>[l(f,{modelValue:p.supervisor,"onUpdate:modelValue":e[14]||(e[14]=t=>p.supervisor=t)},null,8,["modelValue"])]),_:1}),l(_,{label:"用途"},{default:a(()=>[l(f,{modelValue:p.purpose,"onUpdate:modelValue":e[15]||(e[15]=t=>p.purpose=t),type:"textarea",rows:2},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),l(R,{modelValue:D.value,"onUpdate:modelValue":e[20]||(e[20]=t=>D.value=t),title:"延长有效期",width:"400px"},{footer:a(()=>[l(r,{onClick:e[19]||(e[19]=t=>D.value=!1)},{default:a(()=>[...e[37]||(e[37]=[u("取消",-1)])]),_:1}),l(r,{type:"primary",loading:O.value,onClick:re},{default:a(()=>[...e[38]||(e[38]=[u("确认延期",-1)])]),_:1},8,["loading"])]),default:a(()=>[l(H,{"label-width":"120px"},{default:a(()=>[l(_,{label:"延长天数"},{default:a(()=>[l(h,{modelValue:T.value,"onUpdate:modelValue":e[18]||(e[18]=t=>T.value=t),min:0,max:3650},null,8,["modelValue"]),e[36]||(e[36]=k("div",{class:"tip"},"留空/0 表示使用系统默认有效期",-1))]),_:1})]),_:1})]),_:1},8,["modelValue"])])}}}),Je=Me(Le,[["__scopeId","data-v-e4076ba9"]]);export{Je as default};