feat: 공지게시판 목록 테이블 컬럼 작업
This commit is contained in:
@@ -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));
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
관리
|
관리
|
||||||
|
|||||||
Reference in New Issue
Block a user