7 lines
10 KiB
JavaScript
7 lines
10 KiB
JavaScript
import{c as pe,j as e,a as b,r as s,b as fe,u as he,d as ve,e as ge,f as L,g as je,I as ye,S as N,B as k,P as Q,h as ee,L as te,G as se,R as be,i as ae,k as Ne,l as ke,T as we,E as ne,m as Ce,n as Ee,o as Se,C as _e,p as ze,q as qe,s as Le,t as Re,v as De}from"./index-C0Fp67iE.js";/**
|
|
* @license lucide-react v0.475.0 - ISC
|
|
*
|
|
* This source code is licensed under the ISC license.
|
|
* See the LICENSE file in the root directory of this source tree.
|
|
*/const Ie=[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]],Pe=pe("Ellipsis",Ie);function Te({className:n,...a}){return e.jsx("div",{className:b("overflow-x-auto",n),...a})}function Be({className:n,...a}){return e.jsx("table",{className:b("w-full border-collapse text-[13px]",n),...a})}function x({className:n,...a}){return e.jsx("th",{className:b("sticky top-0 z-10 border-b border-line bg-surface-2 px-3 py-2 text-left text-[12px] font-semibold text-ink-3 whitespace-nowrap",n),...a})}function m({className:n,...a}){return e.jsx("td",{className:b("border-b border-line px-3 py-2 align-middle text-ink-1",n),...a})}function Qe({className:n,onClick:a,...c}){return e.jsx("tr",{className:b("group transition-colors",a&&"cursor-pointer hover:bg-surface-2",n),onClick:a,...c})}function Me({trigger:n,children:a,align:c="end",className:E}){const[d,f]=s.useState(!1),[l,S]=s.useState(null),u=s.useRef(null),w=s.useRef(null),j=()=>{var i;const o=(i=u.current)==null?void 0:i.getBoundingClientRect();o&&(S({top:o.bottom+4,left:c==="end"?o.right-176:o.left}),f(!0))};return s.useLayoutEffect(()=>{var p;if(!d||!l)return;const o=w.current,i=(p=u.current)==null?void 0:p.getBoundingClientRect();if(!o||!i)return;const h=o.getBoundingClientRect();let r=l.top;r+h.height>window.innerHeight-8&&(r=Math.max(8,i.top-h.height-4));let v=Math.min(Math.max(8,l.left),window.innerWidth-h.width-8);(r!==l.top||v!==l.left)&&S({top:r,left:v})},[d,l]),s.useEffect(()=>{if(!d)return;const o=v=>{var _,g;const p=v.target;(_=u.current)!=null&&_.contains(p)||(g=w.current)!=null&&g.contains(p)||f(!1)},i=v=>{v.key==="Escape"&&f(!1)},h=()=>f(!1),r=()=>f(!1);return document.addEventListener("mousedown",o),document.addEventListener("keydown",i),window.addEventListener("scroll",h,!0),window.addEventListener("resize",r),()=>{document.removeEventListener("mousedown",o),document.removeEventListener("keydown",i),window.removeEventListener("scroll",h,!0),window.removeEventListener("resize",r)}},[d]),e.jsxs("div",{ref:u,children:[e.jsx("div",{onClick:j,children:n}),d&&l&&fe.createPortal(e.jsx("div",{ref:w,className:b("fixed z-[60] min-w-[160px] rounded-md border border-line bg-surface py-1 shadow-pop",E),style:{top:l.top,left:l.left},role:"menu",children:typeof a=="function"?a(()=>f(!1)):a}),document.body)]})}function le({className:n,danger:a,...c}){return e.jsx("button",{className:b("flex w-full items-center gap-2 px-3 py-1.5 text-left text-[13px] transition-colors",a?"text-danger hover:bg-danger-subtle":"text-ink-1 hover:bg-surface-3",n),...c})}const ie=20;function Oe(){var A,H,Y,Z,J,U,V,X,$;const n=he(),a=ve(),[c,E]=ge(),[d,f]=s.useState(c.get("q")??""),[l,S]=s.useState(""),[u,w]=s.useState(""),[j,o]=s.useState(""),[i,h]=s.useState(""),[r,v]=s.useState(""),[p,_]=s.useState("date_desc"),[g,R]=s.useState(1),[re,D]=s.useState(null),[oe,z]=s.useState(!1),[C,I]=s.useState(null),[ce,de]=s.useState(null),[ue,P]=s.useState(!1);s.useEffect(()=>{c.get("new")==="1"&&(D(null),z(!0),c.delete("new"),E(c,{replace:!0}))},[c,E]);const xe=L({queryKey:["types"],queryFn:qe}),M=L({queryKey:["taxonomy-all"],queryFn:()=>Le()}),me=L({queryKey:["stats",void 0],queryFn:()=>Re(void 0)}),K=s.useMemo(()=>({q:d||void 0,types:l?[Number(l)]:void 0,levels:j?[j]:void 0,roles:i?[i]:void 0,statuses:r?[r]:void 0,year:u?Number(u):void 0,sort:p,page:g,page_size:ie}),[d,l,u,j,i,r,p,g]),y=L({queryKey:["footprints",K],queryFn:()=>De(K)});s.useEffect(()=>{R(1)},[d,l,u,j,i,r]);const O=je({mutationFn:t=>ze(t),onSuccess:()=>{a("success","记录已删除"),n.invalidateQueries({queryKey:["footprints"]}),n.invalidateQueries({queryKey:["timeline"]}),n.invalidateQueries({queryKey:["stats"]}),I(null)}}),T=((A=y.data)==null?void 0:A.total)??0,F=Math.max(1,Math.ceil(T/ie)),B=()=>{D(null),z(!0)},G=t=>{D(t),z(!0)},W=t=>{de(t),P(!0)};return e.jsxs("div",{className:"px-3 py-4 sm:px-6 sm:py-5",children:[e.jsxs("div",{className:"mb-3 flex flex-wrap items-center gap-2",children:[e.jsx(ye,{className:"w-[220px]",placeholder:"搜索标题、内容、结果、标签…",value:d,onChange:t=>f(t.target.value)}),e.jsxs("div",{className:"grid w-full grid-cols-2 gap-2 sm:flex sm:w-auto sm:items-center sm:gap-2",children:[e.jsx(N,{className:"w-full sm:w-[130px]",value:l,onChange:t=>S(t.target.value),options:[{value:"",label:"全部类型"},...(((H=xe.data)==null?void 0:H.items)??[]).map(t=>({value:String(t.id),label:t.name}))]}),e.jsx(N,{className:"w-full sm:w-[110px]",value:u,onChange:t=>w(t.target.value),options:[{value:"",label:"全部年份"},...(((Y=me.data)==null?void 0:Y.years)??[]).map(t=>({value:String(t),label:t+" 年"}))]}),e.jsx(N,{className:"w-full sm:w-[110px]",value:j,onChange:t=>o(t.target.value),options:[{value:"",label:"全部级别"},...(((Z=M.data)==null?void 0:Z.items)??[]).filter(t=>t.kind==="level").map(t=>({value:t.value,label:t.value}))]}),e.jsx(N,{className:"w-full sm:w-[100px]",value:i,onChange:t=>h(t.target.value),options:[{value:"",label:"全部角色"},...(((J=M.data)==null?void 0:J.items)??[]).filter(t=>t.kind==="role").map(t=>({value:t.value,label:t.value}))]}),e.jsx(N,{className:"w-full sm:w-[110px]",value:r,onChange:t=>v(t.target.value),options:[{value:"",label:"全部状态"},{value:"draft",label:"草稿"},{value:"ongoing",label:"进行中"},{value:"submitted",label:"已提交待果"},{value:"finished",label:"已完结"}]}),e.jsx(N,{className:"w-full sm:w-[130px]",value:p,onChange:t=>_(t.target.value),options:[{value:"date_desc",label:"时间从新到旧"},{value:"date_asc",label:"时间从旧到新"},{value:"updated_desc",label:"最近修改"},{value:"weight_desc",label:"重要度优先"}]})]}),e.jsxs("div",{className:"flex w-full items-center justify-between gap-2 sm:contents",children:[e.jsxs("span",{className:"num text-[12px] text-ink-3 sm:ml-auto",children:["共 ",T," 条"]}),e.jsxs(k,{variant:"primary",size:"md",onClick:B,children:[e.jsx(Q,{size:14}),"新建"]})]})]}),e.jsxs("div",{className:"hidden rounded-lg border border-line bg-surface shadow-card md:block",children:[e.jsxs(Te,{className:"max-h-[calc(100vh-260px)] overflow-y-auto",children:[e.jsxs(Be,{children:[e.jsx("thead",{children:e.jsxs("tr",{children:[e.jsx(x,{className:"w-[32%]",children:"标题"}),e.jsx(x,{children:"类型"}),e.jsx(x,{children:"时间"}),e.jsx(x,{children:"级别"}),e.jsx(x,{children:"奖等"}),e.jsx(x,{children:"角色"}),e.jsx(x,{children:"状态"}),e.jsx(x,{className:"text-right",children:"附件"}),e.jsx(x,{children:"更新时间"}),e.jsx(x,{className:"w-[52px]"})]})}),e.jsx("tbody",{children:(((U=y.data)==null?void 0:U.items)??[]).map(t=>e.jsxs(Qe,{onClick:()=>W(t.id),children:[e.jsx(m,{children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"size-2 shrink-0 rounded-full",style:{backgroundColor:t.type_color}}),e.jsx("span",{className:"truncate font-medium",title:t.title,children:t.title})]})}),e.jsx(m,{className:"whitespace-nowrap text-ink-2",children:t.type_name}),e.jsx(m,{className:"num whitespace-nowrap text-ink-2",children:ee(t.start_date,t.end_date)}),e.jsx(m,{children:e.jsx(te,{level:t.level})}),e.jsx(m,{children:e.jsx(se,{grade:t.award_grade})}),e.jsx(m,{children:e.jsx(be,{role:t.role})}),e.jsx(m,{children:e.jsx(ae,{status:t.status})}),e.jsx(m,{className:"num text-right text-ink-2",children:t.attachment_count>0?t.attachment_count:""}),e.jsx(m,{className:"num whitespace-nowrap text-ink-3",children:Ne(t.updated_at)}),e.jsx(m,{onClick:q=>q.stopPropagation(),children:e.jsx(Me,{trigger:e.jsx(k,{variant:"ghost",size:"icon-sm","aria-label":"更多操作",children:e.jsx(Pe,{size:15})}),children:q=>e.jsxs(e.Fragment,{children:[e.jsxs(le,{onClick:()=>{q(),G(t.id)},children:[e.jsx(ke,{size:13})," 编辑"]}),e.jsxs(le,{danger:!0,onClick:()=>{q(),I(t)},children:[e.jsx(we,{size:13})," 删除"]})]})})})]},t.id))})]}),!y.isLoading&&!((V=y.data)!=null&&V.items.length)&&e.jsx(ne,{title:"没有匹配的记录",description:"调整筛选条件,或新建一条记录。",action:e.jsxs(k,{variant:"primary",onClick:B,children:[e.jsx(Q,{size:14})," 新建记录"]})})]}),e.jsxs("div",{className:"divide-y divide-line rounded-lg border border-line bg-surface md:hidden",children:[(((X=y.data)==null?void 0:X.items)??[]).map(t=>e.jsxs("button",{onClick:()=>W(t.id),className:"block w-full px-3 py-3 text-left transition-colors active:bg-surface-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"size-2 shrink-0 rounded-full",style:{backgroundColor:t.type_color}}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-[13.5px] font-medium text-ink-1",children:t.title}),t.attachment_count>0&&e.jsxs("span",{className:"num shrink-0 text-[11px] text-ink-3",children:[t.attachment_count," 附件"]})]}),e.jsxs("div",{className:"mt-1.5 flex flex-wrap items-center gap-1.5",children:[e.jsx(Ce,{color:t.type_color,children:t.type_name}),e.jsx(ae,{status:t.status}),t.level&&e.jsx(te,{level:t.level}),t.award_grade&&e.jsx(se,{grade:t.award_grade})]}),e.jsx("div",{className:"num mt-1 text-[11.5px] text-ink-3",children:ee(t.start_date,t.end_date)})]},t.id)),!y.isLoading&&!(($=y.data)!=null&&$.items.length)&&e.jsx(ne,{title:"没有匹配的记录",description:"调整筛选条件,或新建一条记录。",action:e.jsxs(k,{variant:"primary",onClick:B,children:[e.jsx(Q,{size:14})," 新建记录"]})})]}),T>0&&e.jsxs("div",{className:"flex h-11 items-center justify-end gap-3 border-t border-line bg-surface px-4 text-[12px] text-ink-3",children:[e.jsxs("span",{className:"num",children:["第 ",g," / ",F," 页"]}),e.jsx(k,{variant:"secondary",size:"sm",disabled:g<=1,onClick:()=>R(t=>t-1),children:"上一页"}),e.jsx(k,{variant:"secondary",size:"sm",disabled:g>=F,onClick:()=>R(t=>t+1),children:"下一页"})]})]}),e.jsx(Ee,{open:ue,onClose:()=>P(!1),footprintId:ce,onEdit:t=>{P(!1),G(t)}}),e.jsx(Se,{open:oe,onClose:()=>z(!1),footprintId:re}),e.jsx(_e,{open:!!C,title:"删除记录",content:C?"确定删除「"+C.title+"」吗?该操作不可撤销。":"",onCancel:()=>I(null),onOk:()=>C&&O.mutate(C.id),loading:O.isPending})]})}export{Oe as RecordsPage};
|