PageSourceSearch

https://www.damodel.com/3.8.18/UserManage-DQXe3xl8.js

js damodel.com collected 2026-10-06 03:05:39 UTC 8,222 bytes, 1 lines download raw bytes

1import{r as e,j as s,aj as a,w as l,bF as r,$ as t,bD as n,v as i,A as o,ai as d,a4 as c,a5 as u,G as m,ak as h,h as x,aH as p,J as j,aq as _,aw as b,b1 as g,bk as w,aJ as f,W as v}from"./vendor-ic2EBoqS.js";import{u as k,c as y,a as C,d as I,m as z,b as N,g as F,e as S}from"./user-manage-apis-BKyKx3L8.js";import{P as A}from"./PageHeader-BNLY62aG.js";import{u as P}from"./useModal-DJ6dudw9.js";import{b as Y}from"./index-CIR7493z.js";import"./index-DFEDUUSj.js";import"./axios-BrNB3knv.js";import"./TimeUtils-Cxh6byDf.js";const O=({onChange:o,value:d})=>{const[c,u]=e.useState([]),[m,h]=e.useState(d||[]);return e.useEffect((()=>{(async()=>{const e=await Y();e&&u(e.result)})()}),[]),s.jsxs("div",{children:[s.jsxs(a,{align:"center",size:[8,16],wrap:!0,className:"mt-1 mb-2 min-h-8",children:["已选角色:",m.map((e=>{var a;return s.jsxs(l,{type:"primary",disabled:"overview_role"===e,onClick:()=>(e=>{const s=m.findIndex((s=>s===e));s>-1&&(m.splice(s,1),h([...m]),null==o||o([...m]))})(e),size:"small",className:"flex items-center",children:[null==(a=c.find((s=>s.role_code===e)))?void 0:a.role_name,s.jsx(r,{})]},e)}))]}),0===c.length&&s.jsx(t,{active:!0}),c.length>0&&s.jsx(n.Group,{className:"w-full h-[17rem] overflow-auto",value:m,onChange:e=>{h(e),null==o||o(e)},children:c.map((e=>s.jsx(i,{size:"small",className:"mt-2 w-full",title:s.jsx(n,{disabled:"overview_role"===e.role_code,value:e.role_code,children:e.role_name}),children:e.role_description},e.role_code)))})]})},$=["overview_role","instance_role","image_role","storage_role","public-data_role","key_role"],q=({open:a=!1,success:l=(()=>{}),close:r=(()=>{}),props:t})=>{const{message:n}=o.useApp(),[i]=d.useForm(),[m,h]=e.useState(!1);return e.useEffect((()=>{t&&i.setFieldsValue(t)})),s.jsx(c,{open:a,width:800,destroyOnClose:!0,closable:!1,confirmLoading:m,onCancel:r,maskClosable:!1,onOk:async()=>{const e=await i.validateFields();let s;h(!0),t?(s=await k({sub_uid:t.sub_uid,nick_name:e.nick_name,roles:e.roles}),s&&(n.success("编辑子账号成功"),l())):(e.password=btoa(e.password),s=await y(e),s&&(n.success("创建子账号成功"),l())),h(!1)},okText:"确认",cancelText:"取消",title:t?"编辑子账号":"创建子账户",children:s.jsxs(d,{form:i,preserve:!1,layout:"vertical",children:[t?s.jsx(d.Item,{label:"用户名",name:"username",children:s.jsx(u,{disabled:!0,placeholder:"请输入用户名,5-20位字符"})}):s.jsx(d.Item,{label:"用户名",name:"username",rules:[{required:!0,message:"请输入用户名"},{pattern:/^[a-zA-Z0-9_]{5,20}$/,message:"用户名由5-20个字母、数字、下划线组成"}],children:s.jsx(u,{placeholder:"请输入用户名,5-20位字符"})}),s.jsx(d.Item,{label:"昵称",name:"nick_name",rules:[{required:!0,message:"请输入昵称"}],children:s.jsx(u,{placeholder:"请输入昵称"})}),t?s.jsx(d.Item,{label:"密码",children:s.jsx(u,{disabled:!0,placeholder:"*******"})}):s.jsx(d.Item,{label:"密码",name:"password",rules:[{required:!0,message:"密码不能为空"},{pattern:/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d]{8,32}$/,message:"密码长度8-32个字符,仅支持字母、数字,至少包含大写字母、小写字母、数字"}],children:s.jsx(u.Password,{placeholder:"请输入密码"})}),s.jsx(d.Item,{label:"角色",initialValue:t?t.roles:$,name:"roles",rules:[{required:!0,message:"请选择角色"}],children:s.jsx(O,{})})]})})},E=({open:a=!1,success:l=(()=>{}),close:r=(()=>{}),props:t})=>{const{message:n}=o.useApp(),[i]=d.useForm(),[u,x]=e.useState(!1);return e.useEffect((()=>{t&&a&&i.setFieldsValue({virtual_balance:t.virtual_balance})}),[t,a,i]),s.jsx(c,{open:a,width:520,destroyOnClose:!0,closable:!1,confirmLoading:u,onCancel:r,maskClosable:!1,onOk:async()=>{const e=await i.validateFields();x(!0);await C({user_id:t.user_id,virtual_balance:e.virtual_balance})&&(n.success("配置余额成功"),l()),x(!1)},okText:"确认",cancelText:"取消",title:"配置虚拟余额",children:s.jsxs(d,{form:i,preserve:!1,layout:"vertical",children:[s.jsx(m,{message:s.jsxs(s.Fragment,{children:["⚙️ 给子账号配置虚拟余额不会立即消耗主账号的余额,通过虚拟余额限定用户创建新资源。",s.jsx("br",{}),s.jsx("br",{}),"⚠️ 当子账号余额或主账号余额不足时,子账号不能创建新的实例和云磁盘。"]}),type:"info",showIcon:!0,style:{marginBottom:16}}),s.jsx(d.Item,{label:"子账号",children:s.jsx("span",{className:"ant-form-text",children:null==t?void 0:t.username})}),s.jsx(d.Item,{label:"虚拟余额",name:"virtual_balance",rules:[{required:!0,message:"请输入虚拟余额"}],children:s.jsx(h,{style:{width:"100%"},placeholder:"请输入虚拟余额",min:0,precision:2,prefix:"¥"})})]})})},{Paragraph:H}=v,T=async({current:e,pageSize:s})=>{const a={page:e,page_size:s},l=await F(a);
1return l.result.sub_users.forEach((e=>{e.loading=!1})),{total:l.result.total,list:l.result.sub_users}},D=()=>{const{message:e,modal:r}=o.useApp(),t=x(),[n]=d.useForm(),{tableProps:i,data:c,search:u,mutate:m,refreshAsync:h}=p(T,{defaultPageSize:10,form:n}),{submit:v}=u,{modal:k}=P(q),{modal:y}=P(E),C=[{title:"用户名",dataIndex:"username",width:300,render:e=>s.jsx(H,{copyable:!0,className:"mb-0",children:e})},{title:"昵称",dataIndex:"nick_name",width:200},{title:"共享主账号余额",dataIndex:"shared_mode",width:150,render:(e,a)=>s.jsx(g,{checkedChildren:"共享",unCheckedChildren:"独立",checked:1===a.shared_mode,loading:a.loading,onClick:()=>D(a.id,a.shared_mode)})},{title:"子账号虚拟余额",dataIndex:"virtual_balance",width:200,render:(e,r)=>0===r.shared_mode?s.jsxs(a,{children:[s.jsxs("span",{children:["¥",r.virtual_balance]}),s.jsx(l,{type:"link",onClick:()=>(e=>{y({user_id:e.id,virtual_balance:e.virtual_balance,username:e.username}).then((()=>{h()}))})(r),children:"配置余额"})]}):"-(共享主账号余额)"},{title:"累计消费",dataIndex:"total_consumed_amount",width:200,render:e=>`¥${e}`},{title:"最后登录时间",dataIndex:"last_login_time",width:180,render:(e,s)=>s.last_login_time===s.create_time?"-":w(1e3*s.last_login_time).format("YYYY-MM-DD HH:mm:ss")},{title:"创建时间",dataIndex:"create_time",width:180,render:e=>w(1e3*e).format("YYYY-MM-DD HH:mm:ss")},{title:"操作",fixed:"right",width:280,render:({sub_uid:e,username:r,state:t,loading:n})=>s.jsxs(a,{children:[s.jsx(l,{type:"link",onClick:()=>(async e=>{const s=await S({sub_uid:e});if(s){const{result:e}=s;e&&k(e).then((()=>{h()}))}})(e),children:"编辑"}),s.jsx(l,{type:"link",onClick:()=>F(e,r),children:"重置密码"}),s.jsx(l,{type:"link",danger:!0,onClick:()=>Y(e,r),children:"删除"}),s.jsx(g,{checkedChildren:"启用",onClick:()=>$(e,t),unCheckedChildren:"禁用",checked:1===t,loading:n})]})}],F=(e,s)=>{t(`/console/user-manager/sub-user-pwd-reset/${s}?uid=${e}`)},Y=(a,l)=>{r.confirm({icon:s.jsx(f,{}),content:s.jsxs("p",{children:["确认删除子用户 ",s.jsx("strong",{className:"text-primary",children:l})," 吗?"]}),onOk:async()=>await I({sub_uid:a})?(e.success({content:"删除成功!"}),v(),Promise.resolve()):Promise.reject(),onCancel(){}})},O=s.jsxs(d,{form:n,className:"flex justify-between",children:[s.jsx(l,{type:"primary",onClick:()=>{k().then((()=>{v()}))},children:"创建子账户"}),s.jsx(d.Item,{children:s.jsx(l,{icon:s.jsx(j,{}),onClick:v})})]}),$=async(s,a)=>{var l;let r=1;r=1===a?2:1,null==(l=i.dataSource)||l.forEach((e=>{e.sub_uid===s&&(e.loading=!0)})),m(c);await z({sub_uid:s,enable:r})&&(e.success("修改成功"),await h())},D=async(s,a)=>{var l;const r=0===a?1:0;null==(l=i.dataSource)||l.forEach((e=>{e.id===s&&(e.loading=!0)})),m(c);await N({user_id:s,shared_mode:r})&&(e.success("修改成功"),await h())};return s.jsx(_,{type:["right","left"],ease:["easeOutQuart","easeInOutQuart"],className:"flex-fit-content overflow-x-auto md:overflow-x-hidden",children:s.jsxs("div",{className:"bg-white dark:bg-dark-extend-1 px-6 py-4 rounded-lg min-h-full w-[1000px] md:w-auto",children:[s.jsx(A,{content:"用户管理",border:!0}),O,s.jsx(b,{scroll:{x:900},columns:C,...i,rowKey:"sub_uid",pagination:{total:i.pagination.total,current:i.pagination.current,showQuickJumper:!0,showSizeChanger:!0,showTotal:e=>`共 ${e} 条`}})]},"user-manager")})};export{D as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.