2 lines
5.3 KiB
JavaScript
2 lines
5.3 KiB
JavaScript
import{_ as E,u as L,i as O,j as _,c as n,b as t,F as h,l as g,k as N,f as c,w as U,e as S,m as j,v as q,t as o,r,p as P,n as G,o as l,q as I}from"./index-9aV50nsX.js";const H={class:"toolbar invitation-toolbar"},J={class:"filter-group"},K=["onClick"],Q={class:"panel invitation-panel"},R={class:"table-scroll"},W={class:"data-table"},X={class:"invite-code"},Y={class:"creator-cell"},Z=["onClick"],tt=["onClick"],et={key:0,class:"empty"},at={key:1,class:"empty"},st={class:"modal"},nt={class:"modal-body"},lt={class:"form-group"},ot=["value"],it={class:"form-group"},rt=["min"],ut={key:0,class:"form-error"},dt={class:"modal-footer"},ct=["disabled"],vt={__name:"InvitationCodesView",setup(pt){const k=L(),f=r([]),w=r([]),m=r(!1),v=r(!1),y=r(!1),u=r(""),d=r(""),i=P({department_id:"",expires_at:""}),T=[{label:"全部",value:""},{label:"可使用",value:"active"},{label:"已使用",value:"used"},{label:"已作废",value:"revoked"}],V=G(()=>{const e=new Date(Date.now()+36e5);return e.setMinutes(e.getMinutes()-e.getTimezoneOffset()),e.toISOString().slice(0,16)});O(async()=>{await Promise.all([p(),B()])});async function p(){m.value=!0;try{const e=await _.get("/admin/invitations",{params:u.value?{status:u.value}:{}});f.value=e.data.data||[]}finally{m.value=!1}}async function B(){const e=await _.get("/admin/department-options");w.value=e.data.data||[]}function $(e){u.value=e,p()}function F(){i.department_id="",i.expires_at="",d.value="",y.value=!0}function b(){y.value=!1}async function z(){v.value=!0,d.value="";try{const e=await _.post("/admin/invitations",{department_id:i.department_id||null,expires_at:i.expires_at||null});await C(e.data.data.code),b(),u.value="",await p()}catch(e){d.value=e.message||"生成失败"}finally{v.value=!1}}async function A(e){if(confirm(`确定作废邀请码「${e.code}」?`))try{await _.put(`/admin/invitations/${e.id}/revoke`),await p()}catch(s){alert(s.message||"作废失败")}}async function C(e){try{await navigator.clipboard.writeText(e)}catch{window.prompt("请复制邀请码",e)}}function x(e){return e.status==="used"?{label:"已使用",className:"badge-info"}:e.status==="revoked"?{label:"已作废",className:"badge-danger"}:e.expires_at&&new Date(e.expires_at.replace(" ","T")).getTime()<=Date.now()?{label:"已过期",className:"badge-warn"}:{label:"可使用",className:"badge-success"}}function D(e){return e?new Date(String(e).replace(" ","T")).toLocaleString("zh-CN",{hour12:!1}):"-"}return(e,s)=>(l(),n("div",null,[s[9]||(s[9]=t("div",{class:"page-header"},[t("h2",null,"邀请码管理"),t("p",null,"生成一次性注册码并绑定部门,新用户注册成功后会自动归属到该部门")],-1)),t("div",H,[t("div",J,[(l(),n(h,null,g(T,a=>t("button",{key:a.value,type:"button",class:I(["btn btn-ghost filter-btn",{active:u.value===a.value}]),onClick:M=>$(a.value)},o(a.label),11,K)),64))]),N(k).hasButton("btn:invitation:create")?(l(),n("button",{key:0,class:"btn btn-primary",onClick:F}," 生成邀请码 ")):c("",!0)]),t("div",Q,[t("div",R,[t("table",W,[s[2]||(s[2]=t("thead",null,[t("tr",null,[t("th",null,"邀请码"),t("th",null,"归属部门"),t("th",null,"状态"),t("th",null,"有效期"),t("th",null,"使用用户"),t("th",null,"创建人 / 时间"),t("th",null,"操作")])],-1)),t("tbody",null,[(l(!0),n(h,null,g(f.value,a=>(l(),n("tr",{key:a.id},[t("td",null,[t("code",X,o(a.code),1)]),t("td",null,o(a.department_name||"未指定部门"),1),t("td",null,[t("span",{class:I(["badge",x(a).className])},o(x(a).label),3)]),t("td",null,o(a.expires_at?D(a.expires_at):"长期有效"),1),t("td",null,o(a.used_by_name||"-"),1),t("td",null,[t("div",Y,[t("span",null,o(a.creator_name||"-"),1),t("small",null,o(D(a.created_at)),1)])]),t("td",null,[t("button",{class:"btn btn-ghost",type:"button",onClick:M=>C(a.code)},"复制",8,Z),a.status==="active"&&N(k).hasButton("btn:invitation:revoke")?(l(),n("button",{key:0,class:"btn btn-ghost danger",type:"button",onClick:M=>A(a)},"作废",8,tt)):c("",!0)])]))),128))])])]),m.value?(l(),n("p",et,"正在加载...")):f.value.length?c("",!0):(l(),n("p",at,"暂无邀请码"))]),y.value?(l(),n("div",{key:0,class:"modal-overlay",onClick:U(b,["self"])},[t("div",st,[t("div",{class:"modal-header"},[s[3]||(s[3]=t("h3",null,"生成邀请码",-1)),t("button",{type:"button",onClick:b},"×")]),t("div",nt,[t("div",lt,[s[5]||(s[5]=t("label",null,"注册后归属部门",-1)),S(t("select",{"onUpdate:modelValue":s[0]||(s[0]=a=>i.department_id=a),class:"form-select"},[s[4]||(s[4]=t("option",{value:""},"不指定部门",-1)),(l(!0),n(h,null,g(w.value,a=>(l(),n("option",{key:a.id,value:a.id},o(a.label||a.name),9,ot))),128))],512),[[j,i.department_id]]),s[6]||(s[6]=t("p",{class:"form-help"},"指定后,使用该邀请码注册的用户会自动加入此部门。",-1))]),t("div",it,[s[7]||(s[7]=t("label",null,"过期时间",-1)),S(t("input",{"onUpdate:modelValue":s[1]||(s[1]=a=>i.expires_at=a),type:"datetime-local",class:"form-input",min:V.value},null,8,rt),[[q,i.expires_at]]),s[8]||(s[8]=t("p",{class:"form-help"},"留空表示长期有效;邀请码无论是否设置有效期,都只能使用一次。",-1))]),d.value?(l(),n("p",ut,o(d.value),1)):c("",!0)]),t("div",dt,[t("button",{class:"btn btn-ghost",type:"button",onClick:b},"取消"),t("button",{class:"btn btn-primary",type:"button",disabled:v.value,onClick:z},o(v.value?"生成中...":"确认生成"),9,ct)])])])):c("",!0)]))}},_t=E(vt,[["__scopeId","data-v-f3c9dbd2"]]);export{_t as default};
|