Files
jizhi/backend/MiaoJiZhang.Api/wwwroot/assets/Users-BMT8aDm5.js
T

1 line
7.6 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{Bn as e,Cn as t,Kn as n,Ln as r,Pn as i,Qn as a,Sn as o,_n as s,a as c,ar as l,bn as u,fn as d,or as f,vn as p,xn as m,yn as h}from"./config-provider-q7ATIdCu.js";import{t as ee}from"./ReloadOutlined-CVrW_3-b.js";import{t as g}from"./api-wmB-hCXT.js";import{t as _}from"./time-pIfF89ap.js";var v={style:{display:`flex`,"justify-content":`space-between`,"align-items":`center`,"margin-bottom":`16px`}},y={style:{"margin-bottom":`14px`,display:`flex`,gap:`8px`}},te={style:{"font-size":`10px`,color:`#999`}},b={key:0},ne={key:1,style:{color:`#ccc`}},x={style:{color:`#999`}},S={key:2,style:{"font-size":`10px`,color:`#999`,"margin-top":`3px`}},C=15,w=t({__name:`Users`,setup(t){let w=a([]),T=a(0),E=a(!0),D=a(``),O=a(1),k=[{title:`ID`,dataIndex:`id`,key:`id`,width:60},{title:`用户名`,dataIndex:`username`,key:`un`,width:120},{title:`模式`,dataIndex:`appMode`,key:`mode`,width:80},{title:`AI 权限`,key:`aiPermission`,width:100},{title:`AI 对话额度`,key:`aiQuota`,width:150},{title:`AI 伙伴`,key:`comp`,width:150},{title:`账单(总/AI)`,key:`tx`},{title:`状态`,key:`status`,width:100},{title:`注册时间`,dataIndex:`createdAt`,key:`reg`,width:110},{title:`最后登录`,dataIndex:`lastLoginAt`,key:`login`,width:110},{title:``,key:`act`,width:250}],A=a(!1),j=a(``),M=a(null),N=a(!1),P=a(!1),F=a(null),I=a(50),L=a(`day`),R=a(!1),z={day:`每天`,week:`每周`,month:`每月`},B=e=>z[e];i(V);async function V(){E.value=!0;try{let e=await g.users({search:D.value||void 0,page:O.value,limit:C});w.value=e.list,T.value=e.total}finally{E.value=!1}}async function H(){O.value=1,V()}async function U(e){let t=await g.toggleBan(e.id);c.success(t.isBanned?`已封禁 ${e.username}`:`已解封 ${e.username}`),V()}async function W(e,t){let n=e.aiEnabled;e.aiEnabled=t;try{await g.updateUserPermissions(e.id,t),c.success(t?`已开放 AI 功能`:`已关闭该用户全部 AI 功能`)}catch{e.aiEnabled=n,c.error(`AI 权限修改失败`)}}function G(e){F.value=e,I.value=e.aiChatLimit,L.value=e.aiChatPeriod,R.value=!1,N.value=!0}async function K(){let e=F.value;if(e){P.value=!0;try{await g.updateAiChatQuota(e.id,I.value,L.value,R.value),c.success(`AI 对话额度已更新`),N.value=!1,await V()}catch{c.error(`AI 对话额度更新失败`)}finally{P.value=!1}}}async function re(e){await g.cancelAccountClosure(e.id),c.success(`已取消 `+e.username+` 的注销流程`),V()}async function ie(e){j.value=e.nickname||e.username,A.value=!0,M.value=await g.userStats(e.id)}return(t,i)=>{let a=e(`a-button`),c=e(`a-input-search`),g=e(`a-tag`),z=e(`a-switch`),q=e(`a-popconfirm`),ae=e(`a-table`),oe=e(`a-alert`),se=e(`a-input-number`),J=e(`a-form-item`),Y=e(`a-select-option`),ce=e(`a-select`),le=e(`a-checkbox`),ue=e(`a-form`),X=e(`a-modal`),Z=e(`a-statistic`),Q=e(`a-card`),$=e(`a-col`),de=e(`a-row`);return r(),u(d,null,[s(`div`,v,[i[7]||=s(`h2`,null,`用户管理`,-1),o(a,{onClick:V},{default:n(()=>[o(l(ee)),i[6]||=m(` 刷新`,-1)]),_:1})]),s(`div`,y,[o(c,{value:D.value,"onUpdate:value":i[0]||=e=>D.value=e,placeholder:`搜索用户名...`,style:{"max-width":`280px`},onSearch:H},null,8,[`value`])]),o(ae,{columns:k,dataSource:w.value,loading:E.value,rowKey:`id`,size:`small`,pagination:{current:O.value,total:T.value,pageSize:C,showTotal:e=>`共 ${e} 人`,onChange:e=>{O.value=e,V()}}},{bodyCell:n(({column:e,record:t})=>[e.key===`mode`?(r(),p(g,{key:0,color:t.appMode===`ai`?`blue`:`green`},{default:n(()=>[m(f(t.appMode===`ai`?`全AI`:`普通`),1)]),_:2},1032,[`color`])):h(``,!0),e.key===`aiPermission`?(r(),p(z,{key:1,checked:t.aiEnabled,"checked-children":`开`,"un-checked-children":`关`,onChange:e=>W(t,e)},null,8,[`checked`,`onChange`])):h(``,!0),e.key===`aiQuota`?(r(),u(d,{key:2},[o(a,{type:`link`,size:`small`,onClick:e=>G(t),style:{padding:`0`}},{default:n(()=>[m(f(t.aiChatUsed)+`/`+f(t.aiChatLimit===0?`不限`:t.aiChatLimit)+` · `+f(B(t.aiChatPeriod)),1)]),_:2},1032,[`onClick`]),s(`div`,te,f(l(_)(t.aiChatResetAt))+` 重置 `,1)],64)):h(``,!0),e.key===`comp`?(r(),u(d,{key:3},[t.companion?(r(),u(`span`,b,`形象:`+f(t.companion.avatarKey)+` · 性格:`+f(t.companion.personaKey),1)):(r(),u(`span`,ne,`未设置`))],64)):h(``,!0),e.key===`tx`?(r(),u(d,{key:4},[m(f(t.txCount)+` `,1),s(`span`,x,`(AI:`+f(t.aiTxCount)+`)`,1)],64)):h(``,!0),e.key===`status`?(r(),u(d,{key:5},[t.accountClosureScheduledAt?(r(),p(g,{key:0,color:`orange`},{default:n(()=>[...i[8]||=[m(`注销中`,-1)]]),_:1})):(r(),p(g,{key:1,color:t.isBanned?`red`:`default`},{default:n(()=>[m(f(t.isBanned?`已封`:`正常`),1)]),_:2},1032,[`color`])),t.accountClosureScheduledAt?(r(),u(`div`,S,f(l(_)(t.accountClosureScheduledAt))+` 删除 `,1)):h(``,!0)],64)):h(``,!0),e.key===`reg`?(r(),u(d,{key:6},[m(f(l(_)(t.createdAt)),1)],64)):h(``,!0),e.key===`login`?(r(),u(d,{key:7},[m(f(t.lastLoginAt?l(_)(t.lastLoginAt):`从未`),1)],64)):h(``,!0),e.key===`act`?(r(),u(d,{key:8},[o(a,{size:`small`,style:{"margin-right":`6px`},onClick:e=>G(t)},{default:n(()=>[...i[9]||=[m(`额度`,-1)]]),_:1},8,[`onClick`]),o(a,{size:`small`,style:{"margin-right":`6px`},onClick:e=>ie(t)},{default:n(()=>[...i[10]||=[m(`📊 统计`,-1)]]),_:1},8,[`onClick`]),t.accountClosureScheduledAt?(r(),p(q,{key:0,title:`确定取消该用户的注销流程?`,onConfirm:e=>re(t)},{default:n(()=>[o(a,{size:`small`,type:`primary`},{default:n(()=>[...i[11]||=[m(`取消注销`,-1)]]),_:1})]),_:1},8,[`onConfirm`])):(r(),p(q,{key:1,title:t.isBanned?`确定解封?`:`确定封禁?`,onConfirm:e=>U(t)},{default:n(()=>[o(a,{size:`small`,danger:!t.isBanned},{default:n(()=>[m(f(t.isBanned?`解封`:`封禁`),1)]),_:2},1032,[`danger`])]),_:2},1032,[`title`,`onConfirm`]))],64)):h(``,!0)]),_:1},8,[`dataSource`,`loading`,`pagination`]),o(X,{open:N.value,"onUpdate:open":i[4]||=e=>N.value=e,title:`调整 AI 对话额度`,"confirm-loading":P.value,"ok-text":`保存`,"cancel-text":`取消`,onOk:K},{default:n(()=>[F.value?(r(),p(oe,{key:0,type:`info`,message:F.value.nickname||F.value.username,"show-icon":``,style:{"margin-bottom":`14px`}},null,8,[`message`])):h(``,!0),o(ue,{layout:`vertical`},{default:n(()=>[o(J,{label:`周期内可用次数`},{default:n(()=>[o(se,{value:I.value,"onUpdate:value":i[1]||=e=>I.value=e,min:0,max:1e6,style:{width:`100%`}},null,8,[`value`]),i[12]||=s(`div`,{style:{"font-size":`11px`,color:`#999`,"margin-top":`4px`}},`设置为 0 表示不限次数。`,-1)]),_:1}),o(J,{label:`重置周期`},{default:n(()=>[o(ce,{value:L.value,"onUpdate:value":i[2]||=e=>L.value=e},{default:n(()=>[o(Y,{value:`day`},{default:n(()=>[...i[13]||=[m(`每天(上海时间 00:00`,-1)]]),_:1}),o(Y,{value:`week`},{default:n(()=>[...i[14]||=[m(`每周(周一 00:00`,-1)]]),_:1}),o(Y,{value:`month`},{default:n(()=>[...i[15]||=[m(`每月(每月 1 日 00:00`,-1)]]),_:1})]),_:1},8,[`value`])]),_:1}),o(le,{checked:R.value,"onUpdate:checked":i[3]||=e=>R.value=e},{default:n(()=>[...i[16]||=[m(`立即将本周期已用次数清零`,-1)]]),_:1},8,[`checked`])]),_:1})]),_:1},8,[`open`,`confirm-loading`]),o(X,{open:A.value,"onUpdate:open":i[5]||=e=>A.value=e,title:`${j.value} 使用统计`,footer:null,width:420},{default:n(()=>[M.value?(r(),p(de,{key:0,gutter:12},{default:n(()=>[o($,{span:8},{default:n(()=>[o(Q,{size:`small`},{default:n(()=>[o(Z,{title:`总账单`,value:M.value.totalTransactions},null,8,[`value`])]),_:1})]),_:1}),o($,{span:8},{default:n(()=>[o(Q,{size:`small`},{default:n(()=>[o(Z,{title:`AI 记账`,value:M.value.aiBooked},null,8,[`value`])]),_:1})]),_:1}),o($,{span:8},{default:n(()=>[o(Q,{size:`small`},{default:n(()=>[o(Z,{title:`AI 准确率`,value:M.value.aiAccuracy,suffix:`%`,"value-style":{color:M.value.aiAccuracy>=70?`#00B386`:`#F0642D`}},null,8,[`value`,`value-style`])]),_:1})]),_:1})]),_:1})):h(``,!0)]),_:1},8,[`open`,`title`])],64)}}});export{w as default};