Files
senmesh-zc/deployment/ow/web/assets/user-DH9RBR-X.js

4 lines
14 KiB
JavaScript
Raw Normal View History

import{t as e}from"./useQuery-Hj7E43Q9.js";import{a as t,i as n,n as r,o as i,t as a}from"./select-C0ycPDDY.js";import{i as o,n as s,r as c,t as l}from"./xlsx-Cs4_i-yi.js";import{t as u}from"./plus-CC0y9Hxa.js";import{n as d,t as f}from"./search-C8UYEB7H.js";import{t as p}from"./upload-BqFYY0Ao.js";import{Lt as m,N as h,Qt as g,Rt as _,V as v,Vn as y,Zt as b,fn as x,ln as S,qn as C,yn as w,zn as T}from"./index-CjPx3lfT.js";import{n as E,r as D,t as O}from"./data-table-B1a8BMaf.js";import{t as k}from"./pagination-DP8LewWY.js";import{a as A,i as j,n as M,o as N,r as P,s as F,t as I}from"./dialog-ITi__DUr.js";import{t as L}from"./textarea-CVosTSyk.js";import{i as R,n as z,r as B,t as V}from"./tabs-M_SCzRq7.js";import{n as H,r as U,t as W}from"./edit-user-dialog-CGOttUMI.js";import{r as G}from"./org-djpHv-g6.js";var K=x(`file-spreadsheet`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M8 13h2`,key:`yr2amv`}],[`path`,{d:`M14 13h2`,key:`un5t4a`}],[`path`,{d:`M8 17h2`,key:`2yhykz`}],[`path`,{d:`M14 17h2`,key:`10kma7`}]]),q=x(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),J=C(y(),1);const Y=t=>{var n,r,i;let[a,o]=(0,J.useState)({pageIndex:0,pageSize:10}),[s,c]=(0,J.useState)({}),l=e({queryKey:[`userList`,a,s],queryFn:()=>G({...s,pageSize:a.pageSize,pageNo:a.pageIndex+1}).then(e=>e.data)}),u=(e={})=>{let t={};Object.entries(e||{}).forEach(([e,n])=>{n!==``&&n!=null&&(t[e]=n)}),c(t),o(e=>({...e,pageIndex:0}))},d=t();return{pagination:a,table:E({data:(l==null||(n=l.data)==null?void 0:n.entityList)||[],columns:d,getCoreRowModel:D(),manualPagination:!1,rowCount:(l==null||(r=l.data)==null?void 0:r.totalCount)||0,pageCount:(l==null||(i=l.data)==null?void 0:i.pageCount)||0,onPaginationChange:o,autoResetPageIndex:!1,state:{pagination:a}}),query:l,search:u}};var X=C(T(),1),Z=/^1\d{10}$/,Q=500,ee=e=>{let t=[],n=[];return e.split(`
`).forEach(e=>{let r=e.trim();if(!r)return;let[i,...a]=r.split(/[,,\t\s]+/).filter(Boolean);if(!i||a.length===0){n.push({line:r,msg:`格式错误,应为「手机号,姓名」`});return}if(!Z.test(i)){n.push({line:r,msg:`手机号格式不正确`});return}t.push({phone:i,realName:a.join(` `),line:r})}),{rows:t,failed:n}},te=e=>{let t=[],n=[],r=(e||[]).map(e=>(e||[]).map(e=>String(e??``).trim())).filter(e=>e.some(e=>e!==``));return r.length>0&&r[0][0].includes(`手机`)&&(r=r.slice(1)),r.forEach(e=>{let r=e.join(`, `),[i,a]=e;if(!i||!a){n.push({line:r,msg:`格式错误,应为「手机号,姓名」`});return}if(!Z.test(i)){n.push({line:r,msg:`手机号格式不正确`});return}t.push({phone:i,realName:a,line:r})}),{rows:t,failed:n}};function ne({open:e,setOpen:t,refetch:n}){let[r,i]=(0,J.useState)(`text`),[a,u]=(0,J.useState)(``),[d,f]=(0,J.useState)(!1),[h,_]=(0,J.useState)([]),[v,y]=(0,J.useState)(``),[x,C]=(0,J.useState)({rows:[],failed:[]}),w=(0,J.useRef)(null);(0,J.useEffect)(()=>{e&&(i(`text`),u(``),f(!1),_([]),y(``),C({rows:[],failed:[]}))},[e]);let T=(0,J.useMemo)(()=>a.split(`
`).filter(e=>e.trim()).length,[a]),E=e=>{d||t(e)},D=()=>{let e=s.aoa_to_sheet([[`手机号`,`姓名`],[`13800000001`,`张三`],[`13800000002`,`李四`]]);e[`!cols`]=[{wch:20},{wch:24}];let t=s.book_new();s.book_append_sheet(t,e,`用户列表`),c(t,`批量创建用户模板.xlsx`)},O=async e=>{if(e)try{let t=l(await e.arrayBuffer(),{type:`array`}),n=t.Sheets[t.SheetNames[0]];if(!n){S.error(`文件中没有工作表`);return}let r=te(s.sheet_to_json(n,{header:1,defval:``}));if(r.rows.length===0&&r.failed.length===0){S.error(`文件中没有用户数据`);return}y(e.name),C(r)}catch{S.error(`文件解析失败,请使用下载的模板填写`)}finally{w.current&&(w.current.value=``)}};return(0,X.jsx)(I,{open:e,onOpenChange:E,children:(0,X.jsxs)(P,{className:`w-[480px] max-w-[calc(100%-2rem)]`,children:[(0,X.jsxs)(N,{children:[(0,X.jsx)(F,{children:h.length>0?`批量创建失败项`:`批量创建用户`}),(0,X.jsx)(j,{children:h.length>0?`以下 ${h.length} 条数据创建失败,修正后可重新提交`:`支持贴内容或上传 Excel 文件导入,每条用户为「手机号,姓名」`})]}),h.length>0?(0,X.jsx)(`div`,{className:`max-h-[320px] space-y-1 overflow-auto rounded-md border p-2 text-xs`,children:h.map((e,t)=>(0,X.jsxs)(`div`,{className:`flex items-start gap-2 rounded p-1.5 bg-red-50`,children:[(0,X.jsxs)(`span`,{className:`shrink-0 text-black/40`,children:[t+1,`.`]}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 break-all font-mono`,children:e.line}),(0,X.jsx)(`span`,{className:`shrink-0 text-red-600`,children:e.msg})]},`${e.line}-${t}`))}):(0,X.jsxs)(V,{value:r,onValueChange:e=>i(e),children:[(0,X.jsxs)(B,{className:`w-full mb-2`,children:[(0,X.jsx)(R,{value:`text`,disabled:d,className:`flex-1`,children:`贴内容导入`}),(0,X.jsx)(R,{value:`excel`,disabled:d,className:`flex-1`,children:`Excel 导入`})]}),(0,X.jsxs)(z,{value:`text`,className:`space-y-2`,children:[(0,X.jsx)(L,{value:a,onChange:e=>u(e.target.value),placeholder:`13800000001,张三
13800000002,李四`,className:`h-[240px] resize-none font-mono`,disabled:d}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-black/50`,children:[(0,X.jsxs)(`span`,{children:[`已输入 `,T,` 条`]}),d&&(0,X.jsx)(`span`,{children:`正在创建...`})]})]}),(0,X.jsxs)(z,{value:`excel`,className:`space-y-2`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsxs)(g,{variant:`outline`,size:`sm`,onClick:D,disabled:d,className:`shrink-0`,children:[(0,X.jsx)(o,{}),`下载模板`]}),(0,X.jsxs)(g,{className:`flex-1`,size:`sm`,onClick:()=>{var e;return(e=w.current)==null?void 0:e.click()},disabled:d,children:[(0,X.jsx)(p,{}),x.rows.length>0||x.failed.length>0?`重新选择文件`:`选择文件`]}),(0,X.jsx)(`input`,{ref:w,type:`file`,accept:`.xlsx,.xls`,className:`hidden`,onChange:e=>{var t;return O((t=e.target.files)==null?void 0:t[0])},disabled:d})]}),v?(0,X.jsxs)(`div`,{className:`h-[200px] rounded-md border p-3 space-y-2 overflow-auto`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[(0,X.jsx)(K,{className:`size-4 text-green-600`}),(0,X.jsx)(`span`,{className:`break-all`,children:v})]}),(0,X.jsxs)(`div`,{className:`text-xs text-black/50`,children:[(0,X.jsxs)(`div`,{children:[`解析出有效数据`,` `,(0,X.jsx)(`span`,{className:`text-black font-medium`,children:x.rows.length}),` `,`条`,x.failed.length>0&&(0,X.jsxs)(X.Fragment,{children:[`,格式错误`,` `,(0,X.jsx)(`span`,{className:`text-red-600 font-medium`,children:x.failed.length}),` `,`条(提交后将展示明细)`]})]}),x.rows.length>0&&(0,X.jsxs)(`div`,{className:`mt-1 max-h-[130px] overflow-auto font-mono`,children:[x.rows.slice(0,5).map(e=>(0,X.jsxs)(`div`,{children:[e.phone,`, `,e.realName]},e.line)),x.rows.length>5&&(0,X.jsxs)(`div`,{children:[`...共 `,x.rows.length,` 条`]})]})]})]}):(0,X.jsxs)(`div`,{className:`h-[200px] rounded-md border border-dashed flex flex-col items-center justify-center gap-1 text-xs text-black/50`,children:[(0,X.jsx)(`span`,{children:`请先下载模板,按模板格式填写后上传`}),(0,X.jsxs)(`span`,{children:[`支持 .xlsx / .xls 文件,最多 `,Q,` 条`]})]}),(0,X.jsxs)(`div`,{className:`flex items-center justify-between text-xs text-black/50`,children:[(0,X.jsx)(`span`,{}),d&&(0,X.jsx)(`span`,{children:`正在创建...`})]})]})]}),(0,X.jsx)(A,{children:h.length>0?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(g,{variant:`outline`,onClick:()=>_([]),disabled:d,children:`返回修改`}),(0,X.jsx)(M,{asChild:!0,children:(0,X.jsx)(g,{children:`关闭`})})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(M,{asChild:!0,children:(0,X.jsx)(g,{variant:`outline`,disabled:d,children:`取消`})}),(0,X.jsxs)(g,{onClick:async()=>{let{rows:e,failed:i}=r===`text`?ee(a):x;if(e.length===0){i.length>0?_(i):S.error(r===`text`?`请输入用户数据`:`请先选择 Excel 文件`);return}if(e.length+i.length>Q){S.error(`单次批量创建不能超过 ${Q} 条`);return}f(!0);try{let r=await m(e.map(({phone:e,realName:t})=>({phone:e,realName:t}))),a=(r==null?void 0:r.data)||[],o=[...i];a.forEach((t,n)=>{if(!(t!=null&&t.success)){var r;o.push({line:((r=e[n])==null?void 0:r.line)??``,msg:(t==null?void 0:t.msg)||`创建失败`})}}),n==null||n(),o.length>0?(_(o),S.error(`创建完成:成功 ${a.length-(o.length-i.length)} 条,失败 ${o.length} 条`)):(S.success(`创建成功:共 ${a.length} 条`),t(!1))}catch{}finally{f(!1)}},disabled:d,children:[d&&(0,X.jsx)(b,{}),`开始创建`]})]})})]})})}const re=e=>{let{mutateAsync:t,isPending:n}=w({mutationFn:_,...e||{}});return{cancel:e=>{S.promise(t(e),{loading:`提交中...`,success:`操作成功`})},cancelIsPending:n}};function ie({open:e,setOpen:t,data:n,refetch:r}){let{cancel:i,cancelIsPending:a}=re({onSuccess(){r==null||r(),t(!1)}});return(0,X.jsx)(I,{open:e,onOpenChange:t,children:(0,X.jsxs)(P,{className:`w-[400px]`,children:[(0,X.jsxs)(N,{children:[(0,X.jsx)(F,{children:`您确定要注销该用户吗?`}),(0,X.jsx)(j,{children:`注销后,该用户将无法访问系统`}),(0,X.jsxs)(`div`,{className:`mt-1