Files
senmesh-zc/deployment/ow/web/assets/file-record-DMzz0W98.js
KodouWZF d39b3b035d feat(部署): 新增 deployment/ 内外网两套按侧部署包
按 demo/ 的写法把交付包改成「角色由目录决定」:iw/ 拷内网机、ow/ 拷外网机,
各自含镜像 tar、SQL、配置与 install.sh,install.sh 不再收 iw/ow 参数。

前端不再打进镜像,改为静态包放在 <侧>/web/ 只读挂进 nginx:1.27-alpine,
现场临时改页面直接替换文件 + restart web 即可。数据仍全部挂宿主机,
子目录命名与 deploy/offline 一致(pgdata/redis/mq/upload/logs/gate),
默认根改为包内 ./volumes,放数据盘只改 .env 的 SFILE_DATA_ROOT。

后端镜像 sfile-app:1.0.1 含传输优化那一批(实测组包 11.4×、解包 9.9×)。
出包脚本 deployment/scripts/build-package.sh 负责 jar→镜像→前端双包→sql→tar→VERSION。
2026-11-04 21:44:56 +08:00

1 line
10 KiB
JavaScript

import{t as e}from"./useQuery-Hj7E43Q9.js";import{t}from"./date-range-picker-CAMQRUB2.js";import{a as n,i as r,n as i,o as a,t as o}from"./select-C0ycPDDY.js";import{t as s}from"./file-DlDBClxy.js";import{t as c}from"./folder-DDlXKK_x.js";import{n as l,t as u}from"./search-C8UYEB7H.js";import{At as d,M as f,N as p,Qt as m,V as h,Vn as g,Zt as _,_t as v,ct as y,kt as b,ln as x,n as S,qn as C,tn as w,ut as T,yn as E,zn as D}from"./index-CjPx3lfT.js";import{n as O,r as k,t as A}from"./data-table-B1a8BMaf.js";import{t as j}from"./pagination-DP8LewWY.js";import{a as M,n as N,o as P,r as F,s as I,t as L}from"./dialog-ITi__DUr.js";import{t as R}from"./use-security-enabled-BPm4WtM5.js";import{t as z}from"./textarea-CVosTSyk.js";var B=C(g(),1);const V=()=>{let{mutateAsync:e,isPending:t}=E({mutationFn:d}),{mutateAsync:n,isPending:r}=E({mutationFn:e=>b(e)});return{reviewFileSecurityMutate:e,reviewIsPending:t,rescanMutate:n,rescanIsPending:r}};var H=C(D(),1);function U({open:e,setOpen:t,data:l,refetch:u}){let[d,f]=(0,B.useState)(`pass`),[p,h]=(0,B.useState)(``),{reviewFileSecurityMutate:g,reviewIsPending:v}=V();return(0,B.useEffect)(()=>{e&&(f(`pass`),h(``))},[e]),(0,H.jsx)(L,{open:e,onOpenChange:t,children:(0,H.jsxs)(F,{className:`w-[460px]`,children:[(0,H.jsxs)(P,{children:[(0,H.jsx)(I,{children:`安全检测复核`}),(0,H.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-sm p-2 rounded-md bg-gray-50`,children:[(l==null?void 0:l.fileType)===y.FILE?(0,H.jsx)(s,{size:16,className:`text-primary flex-none`}):(0,H.jsx)(c,{size:16,className:`text-amber-500 flex-none`}),(0,H.jsx)(`span`,{className:`break-all`,children:l==null?void 0:l.fileName})]}),(l==null?void 0:l.securityReason)&&(0,H.jsxs)(`div`,{className:`text-xs text-black/50 break-all`,children:[`最近检测结论:`,l.securityReason]})]}),(0,H.jsxs)(`div`,{className:`space-y-3`,children:[(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(0,H.jsx)(`div`,{className:`text-sm`,children:`复核结论`}),(0,H.jsxs)(o,{value:d,onValueChange:f,children:[(0,H.jsx)(n,{className:`w-full`,children:(0,H.jsx)(a,{placeholder:`请选择复核结论`})}),(0,H.jsxs)(i,{children:[(0,H.jsx)(r,{value:`pass`,children:`通过(允许分享/传输)`}),(0,H.jsx)(r,{value:`reject`,children:`不通过(禁止分享/传输)`})]})]})]}),(0,H.jsxs)(`div`,{className:`space-y-1`,children:[(0,H.jsx)(`div`,{className:`text-sm`,children:`复核说明(必填)`}),(0,H.jsx)(z,{placeholder:`请填写复核说明,例如:经人工查验为误报`,value:p,onChange:e=>h(e.target.value),rows:3})]})]}),(0,H.jsxs)(M,{children:[(0,H.jsx)(N,{asChild:!0,children:(0,H.jsx)(m,{variant:`outline`,children:`取消`})}),(0,H.jsxs)(m,{type:`submit`,disabled:v,onClick:()=>{if(!p.trim()){x.error(`请填写复核说明`);return}g({fileCode:l==null?void 0:l.fileCode,decision:d,comment:p.trim()}).then(()=>{x.success(`复核结果已保存`),u==null||u(),t(!1)})},children:[v&&(0,H.jsx)(_,{}),`确定`]})]})]})})}const W=(t,...n)=>{var r,i,a;let[o,s]=(0,B.useState)({pageIndex:0,pageSize:10}),[c,l]=(0,B.useState)({}),u=e({queryKey:[`userFileRecordList`,o,c],queryFn:()=>v({...c,pageSize:o.pageSize,pageNo:o.pageIndex+1}).then(e=>e.data),enabled:!!c.phone,refetchInterval:e=>{var t;return((e==null||(t=e.state)==null||(t=t.data)==null?void 0:t.entityList)||[]).some(e=>e.securityStatus===T.SCANNING)?2e3:!1}}),d=(e={})=>{let t={};Object.entries(e||{}).forEach(([e,n])=>{n!==``&&n!=null&&(t[e]=n)}),l(t),s(e=>({...e,pageIndex:0}))},f=t(...n);return{pagination:o,table:O({data:(u==null||(r=u.data)==null?void 0:r.entityList)||[],columns:f,getCoreRowModel:k(),manualPagination:!1,rowCount:(u==null||(i=u.data)==null?void 0:i.totalCount)||0,pageCount:(u==null||(a=u.data)==null?void 0:a.pageCount)||0,onPaginationChange:s,autoResetPageIndex:!1,state:{pagination:o}}),query:u,search:d,params:c}};var G={1:{text:`上传记录`,color:`bg-blue-500/10 text-blue-500`},2:{text:`发送记录`,color:`bg-amber-500/10 text-amber-500`},3:{text:`接收记录`,color:`bg-emerald-500/10 text-emerald-500`}},K={1:{text:`重度`,color:`bg-red-500/10 text-red-500`},2:{text:`中度`,color:`bg-amber-500/10 text-amber-500`},3:{text:`轻度`,color:`bg-emerald-500/10 text-emerald-500`}};function q(e,t){return[{accessorKey:`recordType`,header:`记录类型`,cell:({row:e})=>{let t=G[Number(e.getValue(`recordType`))];return(0,H.jsx)(p,{className:t==null?void 0:t.color,children:e.original.recordTypeDesc||(t==null?void 0:t.text)||`-`})}},{accessorKey:`phone`,header:`手机号`,cell:({row:e})=>(0,H.jsx)(`div`,{children:e.getValue(`phone`)})},{accessorKey:`username`,header:`归属账号`,cell:({row:e})=>(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`div`,{children:e.getValue(`username`)}),(0,H.jsxs)(`div`,{className:`text-xs text-black/50`,children:[e.original.realName,e.original.userType===2?`(个人用户)`:``]})]})},{accessorKey:`fileName`,header:`文件名`,cell:({row:e})=>(0,H.jsx)(`div`,{className:`max-w-[280px] break-all`,children:e.getValue(`fileName`)})},{accessorKey:`fileType`,header:`类型`,cell:({row:e})=>(0,H.jsx)(`div`,{children:e.getValue(`fileType`)===`2`?`文件夹`:`文件`})},{accessorKey:`fileSize`,header:`大小`,cell:({row:e})=>{let t=e.getValue(`fileSize`);return(0,H.jsx)(`div`,{children:t==null?`-`:w(Number(t))})}},{accessorKey:`fileStatus`,header:`文件状态`,cell:({row:e})=>(0,H.jsx)(f,{status:e.getValue(`fileStatus`)})},{accessorKey:`fileCategory`,header:`文件种类`,cell:({row:e})=>(0,H.jsx)(`div`,{children:e.getValue(`fileCategory`)||`-`})},{accessorKey:`maxRiskLevel`,header:`风险等级`,cell:({row:e})=>{let t=K[String(e.getValue(`maxRiskLevel`))];return t?(0,H.jsx)(p,{className:t.color,children:t.text}):(0,H.jsx)(`div`,{children:`-`})}},...t?[{accessorKey:`securityStatus`,header:`安全检测`,cell:({row:e})=>(0,H.jsx)(S,{status:e.original.securityStatus,reason:e.original.securityReason,action:e.original.securityAction,reviewComment:e.original.securityReviewComment,time:e.original.securityTime,fileType:e.original.fileType})}]:[],{accessorKey:`createTime`,header:`记录时间`,cell:({row:e})=>(0,H.jsx)(`div`,{children:e.getValue(`createTime`)})},...t?[{id:`actions`,enableHiding:!1,header:`操作`,cell:({row:t})=>{let n=t.original;if(n.fileType!==y.FILE||!n.fileCode)return(0,H.jsx)(`div`,{children:`-`});let r=n.securityStatus===T.SCANNING;return(0,H.jsxs)(`div`,{className:`space-x-2`,children:[n.securityStatus&&(0,H.jsx)(m,{size:`sm`,variant:`outline`,disabled:r,title:r?`文件正在安全检测中`:void 0,onClick:()=>e(n),children:`复核`}),(0,H.jsx)(m,{size:`sm`,variant:`outline`,disabled:r,title:r?`文件正在安全检测中`:void 0,onClick:()=>{x.promise(b(n.fileCode),{loading:`正在重新提交检测...`,success:`已重新提交安全检测`})},children:`重新检测`})]})}}]:[]]}var J={phone:``,recordType:``,fileNameLike:``,fileType:``,fileStatus:``,createTimeBegin:``,createTimeEnd:``};function Y(){let[e,s]=(0,B.useState)(null),[c,d]=(0,B.useState)(!1),f=e=>{s(e),d(!0)},{securityEnabled:p}=R(),{table:g,query:_,search:v,params:y}=W(q,f,p),[b,x]=(0,B.useState)(J),S=(e,t)=>{x(n=>({...n,[e]:t}))};return(0,H.jsxs)(`div`,{className:`p-4 box-border min-h-full space-y-4`,children:[(0,H.jsx)(U,{open:c,setOpen:d,data:e,refetch:()=>_.refetch()}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`div`,{className:`text-lg`,children:`记录查询`}),(0,H.jsx)(`div`,{className:`text-xs text-black/50`,children:`按手机号查询用户文件的上传/发送/接收记录`})]}),(0,H.jsxs)(`div`,{className:`p-4 rounded-lg border bg-white space-y-2`,children:[(0,H.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,H.jsx)(h,{placeholder:`手机号(必填)`,className:`w-[140px]`,value:b.phone,onChange:e=>S(`phone`,e.target.value)}),(0,H.jsxs)(o,{value:b.recordType||`all`,onValueChange:e=>S(`recordType`,e===`all`?``:e),children:[(0,H.jsx)(n,{className:`w-[110px]`,children:(0,H.jsx)(a,{placeholder:`记录类型`})}),(0,H.jsxs)(i,{children:[(0,H.jsx)(r,{value:`all`,children:`记录类型`}),(0,H.jsx)(r,{value:`1`,children:`上传记录`}),(0,H.jsx)(r,{value:`2`,children:`发送记录`}),(0,H.jsx)(r,{value:`3`,children:`接收记录`})]})]}),(0,H.jsx)(h,{placeholder:`文件名`,className:`w-[160px]`,value:b.fileNameLike,onChange:e=>S(`fileNameLike`,e.target.value)}),(0,H.jsxs)(o,{value:b.fileType||`all`,onValueChange:e=>S(`fileType`,e===`all`?``:e),children:[(0,H.jsx)(n,{className:`w-[100px]`,children:(0,H.jsx)(a,{placeholder:`文件类型`})}),(0,H.jsxs)(i,{children:[(0,H.jsx)(r,{value:`all`,children:`文件类型`}),(0,H.jsx)(r,{value:`1`,children:`文件`}),(0,H.jsx)(r,{value:`2`,children:`文件夹`})]})]}),(0,H.jsxs)(o,{value:b.fileStatus||`all`,onValueChange:e=>S(`fileStatus`,e===`all`?``:e),children:[(0,H.jsx)(n,{className:`w-[100px]`,children:(0,H.jsx)(a,{placeholder:`文件状态`})}),(0,H.jsxs)(i,{children:[(0,H.jsx)(r,{value:`all`,children:`文件状态`}),(0,H.jsx)(r,{value:`1`,children:`正常`}),(0,H.jsx)(r,{value:`2`,children:`失效`}),(0,H.jsx)(r,{value:`11`,children:`解析中`}),(0,H.jsx)(r,{value:`12`,children:`待审核`}),(0,H.jsx)(r,{value:`13`,children:`传输中`}),(0,H.jsx)(r,{value:`14`,children:`失败`})]})]}),(0,H.jsxs)(`div`,{className:`flex items-center gap-1 text-sm text-black/60`,children:[`记录时间`,(0,H.jsx)(t,{from:b.createTimeBegin,to:b.createTimeEnd,onChange:e=>{S(`createTimeBegin`,e.from??``),S(`createTimeEnd`,e.to??``)}})]}),(0,H.jsxs)(m,{onClick:()=>{v({...b,createTimeBegin:b.createTimeBegin?`${b.createTimeBegin} 00:00:00`:``,createTimeEnd:b.createTimeEnd?`${b.createTimeEnd} 23:59:59`:``})},disabled:!b.phone.trim(),children:[(0,H.jsx)(u,{}),`查询`]}),(0,H.jsxs)(m,{variant:`outline`,onClick:()=>{x(J),v({})},children:[(0,H.jsx)(l,{}),`重置`]})]}),(0,H.jsx)(`div`,{className:`relative overflow-hidden`,children:y.phone?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(A,{table:g,query:_}),(0,H.jsx)(j,{table:g,className:`justify-end p-2 sticky bottom-0 left-0 right-0 z-10 bg-white`})]}):(0,H.jsx)(`div`,{className:`flex flex-col justify-center items-center p-16 gap-2`,children:(0,H.jsx)(`span`,{className:`text-gray-500 text-sm`,children:`请输入手机号后点击查询,将返回该手机号名下所有账号的文件记录`})})})]})]})}export{Y as component,q as useColumns};