diff --git a/apps/cs/app/site/register/page.tsx b/apps/cs/app/site/register/page.tsx new file mode 100644 index 000000000..a11d0b60c --- /dev/null +++ b/apps/cs/app/site/register/page.tsx @@ -0,0 +1,2 @@ +import { RegisterPage } from "@/pages/site"; +export default RegisterPage; diff --git a/apps/cs/src/app/styles/components.css b/apps/cs/src/app/styles/components.css index 4d5caaf96..ec137cf25 100644 --- a/apps/cs/src/app/styles/components.css +++ b/apps/cs/src/app/styles/components.css @@ -5,7 +5,7 @@ @apply relative m-[0.6rem] box-border min-h-[2rem] rounded-[0.5rem] p-[0.6rem] text-[1.3rem] text-[#666]; } .card-border { - @apply shadow-blur border border-[#dbe2e6] bg-[rgba(255,255,255,0.6)]; + @apply border border-[#dbe2e6] bg-[rgba(255,255,255,0.6)] shadow-blur; } .card-header { @apply -mx-[0.6rem] flex items-center justify-between border-b border-b-[#e1e7eb] p-4; @@ -13,4 +13,13 @@ .card-footer { @apply -mx-[0.6rem] mt-2 flex items-center justify-center border-t border-t-[#e1e7eb] py-4; } + + [data-mode="dark"] { + .card-border { + @apply border-[#3f4042] bg-[rgba(255,255,255,0.065)]; + } + .card-header { + @apply border-b-[#3f4042]; + } + } } diff --git a/apps/cs/src/entities/code/ui/code-select.tsx b/apps/cs/src/entities/code/ui/code-select.tsx index 88c8a1368..5d73ee1d3 100644 --- a/apps/cs/src/entities/code/ui/code-select.tsx +++ b/apps/cs/src/entities/code/ui/code-select.tsx @@ -28,7 +28,7 @@ function CodeSelect({ upCd, defaultValue, ...props }: CodeSelectProps) { return ( + handleDomainUrlChange(row.id, e.target.value) + } + className="!text-[1.3rem]" + /> + + + handleRepresentativeChange(row.id)} + className="cursor-pointer" + /> + + + + + + ))} + + + + + + + + + + + + + + ); +} + +export { DomainManagementDialog }; diff --git a/apps/cs/src/pages/site/ui/ip-management-dialog.tsx b/apps/cs/src/pages/site/ui/ip-management-dialog.tsx index 9f637e3be..1390efd45 100644 --- a/apps/cs/src/pages/site/ui/ip-management-dialog.tsx +++ b/apps/cs/src/pages/site/ui/ip-management-dialog.tsx @@ -18,6 +18,8 @@ import { RadioGroup, RadioGroupItem, Checkbox, + DialogFooter, + DialogClose, } from "@common/components"; type IP = { @@ -34,7 +36,7 @@ function IPManagementDialog({ triggerDisabled }: IPManagementDialogProps) { const [rows, setRows] = useState([]); const [rowSelection, setRowSelection] = useState([]); - const handleSave = () => {}; + const onSave = () => {}; const handleAddIP = () => { const newIP: IP = { @@ -86,9 +88,6 @@ function IPManagementDialog({ triggerDisabled }: IPManagementDialogProps) { - @@ -102,7 +101,7 @@ function IPManagementDialog({ triggerDisabled }: IPManagementDialogProps) {
- +
@@ -160,6 +159,18 @@ function IPManagementDialog({ triggerDisabled }: IPManagementDialogProps) {
+ + + + + + + + ); diff --git a/apps/cs/src/pages/site/ui/layout.tsx b/apps/cs/src/pages/site/ui/layout.tsx index a5d85dee3..c9b12a1f1 100644 --- a/apps/cs/src/pages/site/ui/layout.tsx +++ b/apps/cs/src/pages/site/ui/layout.tsx @@ -3,8 +3,8 @@ import { BaseLayout } from "@common/components"; function SitePageLayout({ children }: { children: React.ReactNode }) { return ( -
-

+
+

사이트 관리

{children} diff --git a/apps/cs/src/pages/site/ui/register-page.tsx b/apps/cs/src/pages/site/ui/register-page.tsx index 0257176ab..48347e823 100644 --- a/apps/cs/src/pages/site/ui/register-page.tsx +++ b/apps/cs/src/pages/site/ui/register-page.tsx @@ -1,6 +1,7 @@ "use client"; import { useState } from "react"; +import { useRouter } from "next/navigation"; import { SiteApi } from "@/entities/site"; import { ENDPOINT } from "@/shared/config/api"; import { @@ -19,25 +20,45 @@ import { useQuery } from "@tanstack/react-query"; import { CodeSelect } from "@/entities/code"; import { SitePageLayout } from "./layout"; import { IPManagementDialog } from "./ip-management-dialog"; +import { + DomainManagementDialog, + type Domain, +} from "./domain-management-dialog"; +import type { ISiteDetail } from "@/entities/site/model/site-interface"; + +type ViewState = Partial; function RegisterPage({ siteId }: { siteId: string }) { + const router = useRouter(); const { data: siteDetail } = useQuery({ queryKey: [ENDPOINT.CMS_SERVICE.SITES, siteId], queryFn: () => SiteApi.siteDetail(siteId), select: (data) => { - setSiteKndCd(data.siteKndCd); + handleViewStateChange("siteKndCd")(data.siteKndCd); + handleViewStateChange("siteSkn")(data.siteSkn); return data; }, enabled: !!siteId, }); - const [siteKndCd, setSiteKndCd] = useState(""); - const [, setSiteSkinCd] = useState(""); + + const [viewState, setViewState] = useState({}); + const [representativeDomain, setRepresentativeDomain] = useState(""); + + const handleViewStateChange = (key: keyof ISiteDetail) => (value: string) => { + setViewState({ ...viewState, [key]: value }); + }; + + const handleDomainSave = (rows: Domain[]) => { + setRepresentativeDomain( + rows.find((row) => row.isRepresentative)?.domainUrl || "", + ); + }; return (
-

사이트 등록/수정

+

사이트 등록/수정

@@ -53,6 +74,9 @@ function RegisterPage({ siteId }: { siteId: string }) { className="w-[12rem] !text-[1.3rem]" defaultValue={siteDetail?.siteId} disabled={!!siteId} + onChange={(e) => + handleViewStateChange("siteId")(e.target.value) + } /> @@ -63,11 +87,13 @@ function RegisterPage({ siteId }: { siteId: string }) { { - setSiteKndCd(value); - }} + onValueChange={handleViewStateChange("siteKndCd")} /> - + {siteId && ( + + )} @@ -77,9 +103,7 @@ function RegisterPage({ siteId }: { siteId: string }) { { - setSiteSkinCd(value); - }} + onValueChange={handleViewStateChange("siteSkn")} /> @@ -90,6 +114,9 @@ function RegisterPage({ siteId }: { siteId: string }) { className="!text-[1.3rem]" placeholder="사이트명을 입력하십시오." defaultValue={siteDetail?.siteNm} + onChange={(e) => + handleViewStateChange("siteNm")(e.target.value) + } /> @@ -100,9 +127,23 @@ function RegisterPage({ siteId }: { siteId: string }) { className="!text-[1.3rem]" placeholder="사이트 설명을 입력하십시오." defaultValue={siteDetail?.siteExpln} + onChange={(e) => + handleViewStateChange("siteExpln")(e.target.value) + } /> + + 사이트 도메인 + +
+
+ {representativeDomain} +
+ +
+
+
사이트 하단 표기 주소 @@ -110,6 +151,9 @@ function RegisterPage({ siteId }: { siteId: string }) { className="!text-[1.3rem]" placeholder="사이트 하단 주소를 입력하십시오." defaultValue={siteDetail?.siteAddr} + onChange={(e) => + handleViewStateChange("siteAddr")(e.target.value) + } /> @@ -120,6 +164,9 @@ function RegisterPage({ siteId }: { siteId: string }) { className="!text-[1.3rem]" placeholder="사이트 하단 전화번호를 입력하십시오." defaultValue={siteDetail?.telNo} + onChange={(e) => + handleViewStateChange("telNo")(e.target.value) + } /> @@ -130,6 +177,9 @@ function RegisterPage({ siteId }: { siteId: string }) { className="!text-[1.3rem]" placeholder="사이트 하단 팩스번호를 입력하십시오." defaultValue={siteDetail?.faxNumber} + onChange={(e) => + handleViewStateChange("faxNumber")(e.target.value) + } /> @@ -140,6 +190,9 @@ function RegisterPage({ siteId }: { siteId: string }) { className="!text-[1.3rem]" placeholder="사이트 표기 내용을 입력하십시오. (ex. COPYRIGHT c 2013 KECO. ALL RIGHTS RESERVED.)" defaultValue={siteDetail?.lwndCn} + onChange={(e) => + handleViewStateChange("lwndCn")(e.target.value) + } /> @@ -150,6 +203,9 @@ function RegisterPage({ siteId }: { siteId: string }) { className="!text-[1.3rem]" placeholder="아이콘 파일 경로 및 파일명을 입력하여 주십시오." defaultValue={siteDetail?.bkmkIcon} + onChange={(e) => + handleViewStateChange("bkmkIcon")(e.target.value) + } /> @@ -157,18 +213,17 @@ function RegisterPage({ siteId }: { siteId: string }) { 기본 사이트 여부 { - console.log(value); - }} + onValueChange={handleViewStateChange("basicSiteYn")} >
- - + +
- - + +
@@ -177,18 +232,17 @@ function RegisterPage({ siteId }: { siteId: string }) { 사용 여부 { - console.log(value); - }} + onValueChange={handleViewStateChange("useYn")} >
- - + +
- - + +
@@ -199,7 +253,7 @@ function RegisterPage({ siteId }: { siteId: string }) {
-