PageSourceSearch

https://immersivetranslate.com/blog-assets/AdminCategories-BjOvsX2N.js

js immersivetranslate.com collected 2026-09-24 09:38:08 UTC 16,850 bytes, 1 lines download raw bytes

1import{r as a,j as e}from"./vendor-react-BkMFKX73.js";import{u as de}from"./useCmsAuth-B2Y_nCA8.js";import{k as le,a as h,t as n,B as l,J as r,Q as F,R as B,T as G,U as P,V as J,W as re}from"./index-Bfg-XJU8.js";import{A as oe}from"./AdminHeader-mgVNYAEV.js";import{L as c}from"./label-BGmDm5nZ.js";import{T as me}from"./textarea-CStrJDNv.js";import{T as ge,a as xe,b as K,c as o,d as pe,e as m}from"./table-BsaG_oGo.js";import{L as ue}from"./LocaleTabs-CBVPojIL.js";import{s as Ce,j as I,X as he,x as Ae,y as je,w as fe,T as Ne}from"./vendor-ui-oZo59cqF.js";import"./vendor-api-DYmBxxT6.js";function Le(){const{adminUser:Q,isAdmin:H,loading:$}=de({redirectOnUnauthenticated:!0});le();const[q,A]=a.useState(!1),[g,T]=a.useState(null),[x,j]=a.useState(""),[t,p]=a.useState(""),[w,f]=a.useState(""),[u,N]=a.useState(""),[C,v]=a.useState(""),[_,b]=a.useState(""),[D,V]=a.useState("ja"),[S,R]=a.useState(""),[W,U]=a.useState(!1),[k,X]=a.useState(""),[Y,E]=a.useState(!1),[M,y]=a.useState("");a.useEffect(()=>{if(!t||t.length<1){U(!1);return}U(!0);const s=setTimeout(()=>X(t),500);return()=>clearTimeout(s)},[t]);const i=h.admin.checkSlug.useQuery({entityType:"category",slug:k,excludeId:g??void 0},{enabled:W&&k.length>0&&k===t,retry:!1}),{data:Z,refetch:O}=h.admin.categories.useQuery({locale:D},{enabled:H}),ee=h.admin.createCategory.useMutation({onSuccess:()=>{n.success("分类创建成功"),O(),L()},onError:s=>{if(s.message?.includes("TRASHED_SLUG_CONFLICT")){try{const d=JSON.parse(s.message.replace("TRASHED_SLUG_CONFLICT:",""));y(d.slug||"")}catch{y("")}E(!0)}else n.error(s.message)}}),se=h.admin.updateCategory.useMutation({onSuccess:()=>{n.success("分类更新成功"),O(),L()},onError:s=>{if(s.message?.includes("TRASHED_SLUG_CONFLICT")){try{const d=JSON.parse(s.message.replace("TRASHED_SLUG_CONFLICT:",""));y(d.slug||"")}catch{y("")}E(!0)}else n.error(s.message)}}),ae=h.admin.deleteCategory.useMutation({onSuccess:()=>{n.success("分类已删除"),O()},onError:s=>n.error(s.message)});if($||!Q||!H)return null;const L=()=>{A(!1),T(null),j(""),p(""),f(""),N(""),v(""),b("")},te=()=>{T(null),j(""),p(""),f(""),N(""),v(""),b(""),A(!0)},ie=s=>{T(s.id),j(s.name),p(s.slug),f(s.description||""),N(s.seoTitle||""),v(s.seoDescription||""),b(s.keywords||""),A(!0)},ne=()=>{if(!x||!t){n.error("名称和 Slug 为必填项");return}const s={name:x,slug:t,description:w||void 0,seoTitle:u||void 0,seoDescription:C||void 0,keywords:_||void 0};g?se.mutate({id:g,...s}):ee.mutate({...s,locale:D})},z=u||x,ce=C||w||"";return e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:146",className:"min-h-screen bg-background","data-lang":"zh",children:[e.jsx(oe,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:147",currentPage:"categories"}),e.jsxs("main",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:149",className:"container py-8",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:150",className:"flex items-center justify-between mb-6",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:151",className:"flex items-center gap-4",children:[e.jsx("h2",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:152",className:"text-2xl font-bold",children:"分类管理"}),e.jsx(ue,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:153",value:D,onChange:V})]}),e.jsxs(l,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:155",onClick:te,children:[e.jsx(Ce,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:155",className:"size-4 mr-1"}),"新建分类"]})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:159",className:"relative mb-4 max-w-md",children:[e.jsx(I,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:160",className:"absolute left-3 top-1/2 -translate-y-1/2 size-4 text-muted-foreground"}),e.jsx(r,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:161",placeholder:"搜索分类名称或 slug...",value:S,onChange:s=>R(s.target.value),className:"pl-9 pr-9"}),S&&e.jsx("button",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:168",onClick:()=>R(""),className:"absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground",children:e.jsx(he,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:172",className:"size-4"})})]}),e.jsxs(ge,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:177",children:[e.jsx(xe,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:178",children:e.jsxs(K,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:179",children:[e.jsx(o,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:180",children:"名称"}),e.jsx(o,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:181",children:"Slug"}),e.jsx(o,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:182",children:"描述"}),e.jsx(o,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:183",children:"SEO"}),e.jsx(o,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:184",children:"文章数"}),e.jsx(o,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:185",className:"text-right",children:"操作"})]})}),e.jsx(pe,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:188",children:Z?.filter(s=>{if(!S.trim())return!0;const d=S.trim().toLowerCase();return s.name.toLowerCase().includes(d)||s.slug.toLowerCase().includes(d)}).map(s=>e.jsxs(K,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:194",children:[e.jsx(m,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:195",className:"font-medium",children:s.name}),e.jsx(m,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:196",className:"text-muted-foreground",children:s.slug}),e.jsx(m,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:197",className:"text-sm text-muted-foreground max-w-[200px] truncate",children:s.description||"—"}),e.jsx(m,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:198",children:s.seoTitle||s.seoDescription?e.jsxs("span",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:200",className:"inline-flex items-center gap-1 text-xs text-green-600 dark:text-green-400",children:[e.jsx(I,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:201",className:"size-3"}),"已设置"]}):e.jsx("span",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:204",className:"text-xs text-muted-foreground",children:"未设置"})}),e.jsx(m,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:207",children:s.postCount}),e.jsx(m,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:208",className:"text-right",children:e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:209",className:"flex items-center justify-end gap-1",children:[e.jsx(l,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:210",variant:"ghost",size:"icon-sm",onClick:()=>ie(s),children:e.jsx(Ae,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:210",className:"size-4"})}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:211",variant:"ghost",size:"icon-sm",onClick:()=>{confirm("确定要删除这个分类吗?")&&ae.mutate({id:s.id})},children:e.jsx(je,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:213",className:"size-4 text-destructive"})})]})})]},s.id))})]}),e.jsx(F,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:221",open:q,onOpenChange:A,children:e.jsxs(B,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:222",className:"max-w-lg",children:[e.jsx(G,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:223",children:e.jsx(P,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:224",children:g?"编辑分类":"新建分类"})}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:226",className:"space-y-4 max-h-[70vh] overflow-y-auto pr-1",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:228",className:"space-y-2",children:[e.jsxs(c,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:229",children:["名称 ",e.jsx("span",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:229",className:"text-destructive",children:"*"})]}),e.jsx(r,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:230",value:x,onChange:s=>j(s.target.value),placeholder:"分类名称"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:232",className:"space-y-2",children:[e.jsxs(c,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:233",children:["Slug ",e.jsx("span",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:233",className:"text-destructive",children:"*"})]}),e.jsx(r,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:234",value:t,onChange:s=>p(s.target.value),placeholder:"category-slug",className:i.data&&!i.data.available?"border-destructive focus-visible:ring-destructive":""}),i.data&&!i.data.available&&e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:241",className:"rounded-md bg-destructive/10 border border-destructive/20 p-2 space-y-1",children:[e.jsxs("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:242",className:"text-xs text-destructive font-medium",children:['Slug "',t,'" 已被使用']}),i.data.suggestion&&e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:244",className:"flex items-center gap-1.5",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:245",className:"text-xs text-muted-foreground",children:"建议使用:"}),e.jsx("button",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:246",type:"button",className:"text-xs text-primary hover:underline font-medium cursor-pointer",onClick:()=>p(i.data.suggestion),children:i.data.suggestion})]})]}),i.data?.available&&t.length>0&&e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:252",className:"text-xs text-green-600",children:"✓ Slug 可用"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:255",className:"space-y-2",children:[e.jsx(c,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:256",children:"描述(可选)"}),e.jsx(r,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:257",value:w,onChange:s=>
1f(s.target.value),placeholder:"分类描述"})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:261",className:"border-t pt-4 mt-4",children:[e.jsxs("h3",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:262",className:"text-sm font-semibold flex items-center gap-1.5 mb-3",children:[e.jsx(I,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:263",className:"size-4 text-primary"}),"SEO 设置"]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:267",className:"space-y-3",children:[e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:268",className:"space-y-2",children:[e.jsx(c,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:269",children:"SEO 标题"}),e.jsx(r,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:270",value:u,onChange:s=>N(s.target.value),placeholder:"搜索结果中显示的标题(留空则使用分类名称)"}),e.jsxs("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:275",className:`text-xs ${u.length>60?"text-destructive font-medium":"text-muted-foreground"}`,children:[u.length,"/60 字符"]})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:280",className:"space-y-2",children:[e.jsx(c,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:281",children:"SEO 描述"}),e.jsx(me,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:282",value:C,onChange:s=>v(s.target.value),placeholder:"搜索结果中显示的描述(留空则使用分类描述)",rows:3}),e.jsxs("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:288",className:`text-xs ${C.length>160?"text-destructive font-medium":"text-muted-foreground"}`,children:[C.length,"/160 字符"]})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:293",className:"space-y-2",children:[e.jsx(c,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:294",children:"Keywords 关键词"}),e.jsx(r,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:295",value:_,onChange:s=>b(s.target.value),placeholder:"用英文逗号分隔,如:翻译工具,语言学习,沉浸式翻译"}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:300",className:"text-xs text-muted-foreground",children:"用于 SEO meta keywords 标签"})]}),z&&e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:305",className:"space-y-2",children:[e.jsxs(c,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:306",className:"flex items-center gap-1.5",children:[e.jsx(fe,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:307",className:"size-3.5"}),"搜索结果预览"]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:310",className:"border rounded-lg p-3 bg-white dark:bg-zinc-900 space-y-0.5",children:[e.jsxs("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:311",className:"text-xs text-muted-foreground truncate",children:[typeof window<"u"?window.location.origin:"https://example.com","/category/",t||"..."]}),e.jsxs("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:314",className:"text-[#1a0dab] dark:text-blue-400 text-sm font-medium leading-snug",children:[z.slice(0,65),z.length>65?"...":""]}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:317",className:"text-xs text-muted-foreground leading-relaxed line-clamp-2",children:(ce||`「${x}」カテゴリーの記事一覧`).slice(0,165)})]})]})]})]})]}),e.jsxs(J,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:326",children:[e.jsx(l,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:327",variant:"outline",onClick:L,children:"取消"}),e.jsx(l,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:328",onClick:ne,children:g?"更新":"创建"})]})]})})]}),e.jsx(F,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:335",open:Y,onOpenChange:()=>{},children:e.jsxs(B,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:336",className:"sm:max-w-[440px]",showCloseButton:!1,onEscapeKeyDown:s=>s.preventDefault(),onPointerDownOutside:s=>s.preventDefault(),children:[e.jsxs(G,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:337",children:[e.jsx("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:338",className:"mx-auto flex size-12 items-center justify-center rounded-full bg-amber-100",children:e.jsx(Ne,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:339",className:"size-6 text-amber-600"})}),e.jsx(P,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:341",className:"text-center text-lg pt-2",children:"Slug 与回收站冲突"}),e.jsx(re,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:342",className:"text-center",children:"无法保存,因为该 Slug 已被回收站中的分类占用"})]}),M&&e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:347",className:"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:348",className:"text-xs text-amber-600/80 mb-1",children:"冲突的 Slug"}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:349",className:"font-mono text-sm font-medium text-amber-900 break-all",children:M})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:352",className:"space-y-2 text-sm text-muted-foreground",children:[e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:353",className:"font-medium text-foreground",children:"如何解决?"}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:354",className:"flex items-start gap-2",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:355",className:"flex size-5 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-medium",children:"1"}),e.jsxs("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:356",children:["联系",e.jsx("span",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:356",className:"font-medium text-foreground",children:"超级管理员"}),"前往回收站永久删除该分类,释放此 Slug"]})]}),e.jsxs("div",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:358",className:"flex items-start gap-2",children:[e.jsx("span",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:359",className:"flex size-5 shrink-0 items-center justify-center rounded-full bg-muted text-xs font-medium",children:"2"}),e.jsx("p",{"data-loc":"client/src/pages/admin/AdminCategories.tsx:360",children:"或者修改当前分类的 Slug 为其他值"})]})]}),e.jsx(J,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:363",className:"pt-2",children:e.jsx(l,{"data-loc":"client/src/pages/admin/AdminCategories.tsx:364",className:"w-full",onClick:()=>E(!1),children:"我知道了"})})]})})]})}export{Le 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.