feat: 공지게시판 목록 테이블 컬럼 작업

This commit is contained in:
2025-04-29 18:41:32 +09:00
parent 983d67983e
commit 50b97a466e
3 changed files with 44 additions and 2 deletions
@@ -1,6 +1,7 @@
import dayjs from "dayjs"; import dayjs from "dayjs";
import type { ColumnDef } from "@tanstack/react-table"; import type { ColumnDef } from "@tanstack/react-table";
import type { Post } from "@/entities/post"; import type { Post } from "@/entities/post";
import { Badge, Button } from "@common/components/ui";
export const columns: ColumnDef<Post>[] = [ export const columns: ColumnDef<Post>[] = [
{ {
@@ -11,6 +12,19 @@ export const columns: ColumnDef<Post>[] = [
{ {
accessorKey: "pstTtl", accessorKey: "pstTtl",
header: "제목", header: "제목",
cell: ({ row }) => {
const { pstTtl, inqNocs } = row.original;
return (
<div className="flex min-w-[20vw] items-center gap-2 text-left">
{inqNocs >= 100 && <Badge color="red">HOT</Badge>}
{dayjs().diff(dayjs(row.original.regDt), "hour") < 24 && (
<Badge color="blue">NEW</Badge>
)}
{pstTtl}
</div>
);
},
}, },
{ {
accessorKey: "inqNocs", accessorKey: "inqNocs",
@@ -19,6 +33,11 @@ export const columns: ColumnDef<Post>[] = [
{ {
accessorKey: "atflCd", accessorKey: "atflCd",
header: "첨부파일", header: "첨부파일",
cell: ({ row }) => {
const atflCd = row.original.atflCd;
if (!atflCd) return null;
return <AttachmentButton atflCd={atflCd} />;
},
}, },
{ {
accessorKey: "rgtrNm", accessorKey: "rgtrNm",
@@ -30,3 +49,13 @@ export const columns: ColumnDef<Post>[] = [
cell: ({ row }) => dayjs(row.original.regDt).format("YYYY-MM-DD"), cell: ({ row }) => dayjs(row.original.regDt).format("YYYY-MM-DD"),
}, },
]; ];
const AttachmentButton = ({ atflCd }: { atflCd: string }) => {
if (!atflCd) return null;
return (
<Button size="sm" color="white" className="flex items-center gap-2">
<i className="diveicon di-download" />
다운로드
</Button>
);
};
@@ -9,6 +9,7 @@ import {
type PaginationState, type PaginationState,
type RowSelectionState, type RowSelectionState,
} from "@tanstack/react-table"; } from "@tanstack/react-table";
import { useLocalStorage } from "@frontend-opensource/use-react-hooks";
import { import {
Button, Button,
DataTable, DataTable,
@@ -20,6 +21,7 @@ import {
SelectTrigger, SelectTrigger,
SelectValue, SelectValue,
} from "@common/components/ui"; } from "@common/components/ui";
import type { Board } from "@/entities/board";
import { PostApi, type Post, type PostParams } from "@/entities/post"; import { PostApi, type Post, type PostParams } from "@/entities/post";
import { ENDPOINT } from "@/shared/config"; import { ENDPOINT } from "@/shared/config";
import { PageLayout } from "@/shared/ui/page-layout"; import { PageLayout } from "@/shared/ui/page-layout";
@@ -27,7 +29,8 @@ import { columns } from "../model/notice-table-columns";
function NoticePage({ bbsId }: { bbsId: string }) { function NoticePage({ bbsId }: { bbsId: string }) {
const router = useRouter(); const router = useRouter();
const [storedBbsInfo] = useLocalStorage("bbs-info", "");
const [bbsInfo, setBbsInfo] = useState<Board | null>(null);
const [rowSelection, setRowSelection] = useState<RowSelectionState>({}); const [rowSelection, setRowSelection] = useState<RowSelectionState>({});
const [postParams, setPostParams] = useState<PostParams>({ const [postParams, setPostParams] = useState<PostParams>({
keywordType: "title", keywordType: "title",
@@ -79,8 +82,15 @@ function NoticePage({ bbsId }: { bbsId: string }) {
refetch(); refetch();
}, [pagination]); }, [pagination]);
useEffect(() => {
if (storedBbsInfo) setBbsInfo(JSON.parse(storedBbsInfo));
}, [storedBbsInfo]);
return ( return (
<PageLayout title="공지게시판" menuPaths={["서비스관리", "게시판관리"]}> <PageLayout
title={bbsInfo?.bbsNm ?? ""}
menuPaths={["서비스관리", "게시판관리"]}
>
<div className="card card-border !mt-6"> <div className="card card-border !mt-6">
<div className="card card-border"> <div className="card card-border">
<form onSubmit={handleSubmit} className="flex items-center gap-2 p-2"> <form onSubmit={handleSubmit} className="flex items-center gap-2 p-2">
@@ -1,6 +1,7 @@
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import type { ColumnDef, Row } from "@tanstack/react-table"; import type { ColumnDef, Row } from "@tanstack/react-table";
import { useLocalStorage } from "@frontend-opensource/use-react-hooks";
import type { Board } from "@/entities/board/model/board-interface"; import type { Board } from "@/entities/board/model/board-interface";
import { Button } from "@common/components/ui"; import { Button } from "@common/components/ui";
@@ -44,12 +45,14 @@ export const columns: ColumnDef<Board>[] = [
const ManageButton = ({ row }: { row: Row<Board> }) => { const ManageButton = ({ row }: { row: Row<Board> }) => {
const router = useRouter(); const router = useRouter();
const { bbsTypeCd, bbsId } = row.original; const { bbsTypeCd, bbsId } = row.original;
const [, setBbsInfo] = useLocalStorage("bbs-info", "");
return ( return (
<Button <Button
size="sm" size="sm"
onClick={(e) => { onClick={(e) => {
e.stopPropagation(); e.stopPropagation();
router.push(`/pst/${bbsTypeCd.toLowerCase()}/${bbsId}`); router.push(`/pst/${bbsTypeCd.toLowerCase()}/${bbsId}`);
setBbsInfo(JSON.stringify(row.original));
}} }}
> >
관리 관리