Files
chat/backend/public/admin/assets/InvitationCodesView-BlIcR7Zk.js
T
2026-08-05 15:56:08 +08:00

2 lines
5.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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};