diff --git a/packages/common/components/src/ui/layout/common.css b/packages/common/components/src/ui/layout/common.css index 70961a4be..5ab365cd3 100644 --- a/packages/common/components/src/ui/layout/common.css +++ b/packages/common/components/src/ui/layout/common.css @@ -29,6 +29,45 @@ font-weight: 600; } +.card { + position: relative; + margin: 0.6rem; + box-sizing: border-box; + min-height: 2rem; + border-radius: 0.5rem; + padding: 0.6rem; + font-size: 1.3rem; + color: #666; +} + +.card-border { + box-shadow: 0 0 10px -1px rgba(0, 0, 0, 0.06); + border: 1px solid #dbe2e6; + background-color: rgba(255, 255, 255, 0.6); +} + +.card-header { + margin-left: -0.6rem; + margin-right: -0.6rem; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid #e1e7eb; + padding: 1rem; +} + +.card-footer { + margin-left: -0.6rem; + margin-right: -0.6rem; + margin-top: 0.5rem; + display: flex; + align-items: center; + justify-content: center; + border-top: 1px solid #e1e7eb; + padding-top: 1rem; + padding-bottom: 1rem; +} + #lnb { position: relative; width: 100%; diff --git a/packages/common/components/src/ui/layout/layout.stories.tsx b/packages/common/components/src/ui/layout/layout.stories.tsx index 261726e1f..f8a1e999d 100644 --- a/packages/common/components/src/ui/layout/layout.stories.tsx +++ b/packages/common/components/src/ui/layout/layout.stories.tsx @@ -1,7 +1,96 @@ import type { Meta, StoryObj } from "@storybook/react"; +import { Input } from "../input"; +import { Button } from "../button"; +import { DataTable } from "../data-table"; import { BaseLayout } from "./base"; import "./stories.css"; +import { + createColumnHelper, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table"; +import { fakerKO as faker } from "@faker-js/faker"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "../table"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "../dropdown-menu"; +import { RadioGroup, RadioGroupItem } from "../radio-group"; +import { Label } from "../label"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "../dialog"; +import { Checkbox } from "../checkbox"; + +type Site = { + id: number; + 사이트코드: string; + 사이트명: string; + 대표_URL: string; + 기본_사이트_여부: boolean; + 사용_여부: boolean; + 등록자: string; + 등록일: string; +}; + +faker.seed(123); + +const data: Site[] = Array.from({ length: 100 }, (_, i) => ({ + id: i + 1, + 사이트코드: faker.string.alpha(2).toUpperCase(), + 사이트명: faker.lorem.word(), + 대표_URL: faker.internet.url(), + 기본_사이트_여부: faker.datatype.boolean(), + 사용_여부: faker.datatype.boolean(), + 등록자: faker.person.fullName(), + 등록일: faker.date.recent().toISOString().split("T")[0] as string, +})); + +const columnHelper = createColumnHelper(); + +const columns = [ + columnHelper.accessor("id", { + header: "NO", + }), + columnHelper.accessor("사이트코드", { + header: "사이트코드", + }), + columnHelper.accessor("사이트명", { + header: "사이트명", + }), + columnHelper.accessor("대표_URL", { + header: "대표 URL", + }), + columnHelper.accessor("기본_사이트_여부", { + header: "기본 사이트 여부", + cell: (info) => (info.getValue() ? "Y" : "N"), + }), + columnHelper.accessor("사용_여부", { + header: "사용 여부", + cell: (info) => (info.getValue() ? "Y" : "N"), + }), + columnHelper.accessor("등록자", { + header: "등록자", + }), + columnHelper.accessor("등록일", { + header: "등록일", + }), +]; + const meta: Meta = { title: "Layout/Base", component: BaseLayout, @@ -25,3 +114,298 @@ export const Default: Story = { ), }; + +export const 사이트_관리: Story = { + render: function Component() { + const table = useReactTable({ + data, + columns, + getCoreRowModel: getCoreRowModel(), + }); + return ( + +
+

+ 사이트 관리 +

+
+
+
+ + + +
+
+
+
+

+ 사이트 목록 +

+ +
+
+ +
+
+
+
+
+ ); + }, +}; + +export const 사이트_등록: Story = { + render: function Component() { + return ( + +
+

+ 사이트 관리 +

+
+
+

+ 사이트 등록/수정 +

+
+
+ + + + + + + + 사이트 코드 + + + + + + 사이트 구분 + +
+ + + + + + + 내부 + 외부 + + + + +
+
+
+ + 사이트 디자인 + + + + + + + + 라이트 + 다크 + + + + + + + 사이트명 + + + + + + 사이트 설명 + + + + + + 사이트 하단 표기 주소 + + + + + + 사이트 하단 표기 전화번호 + + + + + + 사이트 하단 표기 팩스번호 + + + + + + 사이트 하단 표기 내용 + + + + + + 북마크 아이콘 + + + + + + 기본 사이트 여부 + + +
+ + +
+
+ + +
+
+
+
+ + 사용 여부 + + +
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ + + +
+
+
+ ); + }, +}; + +function IPManagementDialog() { + return ( + + + + + + + IP 관리 + +
+ + + + +
+
+ + + + + + + + + + NO + 선택 + IP 주소 + 허용여부 + + + + + 1 + + + + + + + + +
+ + +
+
+ + +
+
+
+
+
+
+
+
+
+ ); +}