From da00bbf203534b2663289d6fe45b6ed8663e7e11 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 23 Sep 2025 02:44:05 +0000 Subject: (최겸) 구매 인포메이션, 공지사항 수정 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/information/information-button.tsx | 29 +++++-- components/information/information-client.tsx | 36 ++++++--- components/notice/notice-create-dialog.tsx | 107 +++++++++++++++++++------- 3 files changed, 128 insertions(+), 44 deletions(-) (limited to 'components') diff --git a/components/information/information-button.tsx b/components/information/information-button.tsx index 2cff96d0..e9163093 100644 --- a/components/information/information-button.tsx +++ b/components/information/information-button.tsx @@ -18,6 +18,11 @@ import { UpdateInformationDialog } from "@/lib/information/table/update-informat import { NoticeViewDialog } from "@/components/notice/notice-view-dialog" // import { PDFTronViewerDialog } from "@/components/document-viewer/pdftron-viewer-dialog" // 주석 처리 - 브라우저 내장 뷰어 사용 import type { PageInformation, InformationAttachment } from "@/db/schema/information" + +type PageInformationWithUpdatedBy = PageInformation & { + updatedByName?: string | null + updatedByEmail?: string | null +} import type { Notice } from "@/db/schema/notice" import { useSession } from "next-auth/react" import { formatDate } from "@/lib/utils" @@ -44,7 +49,7 @@ export function InformationButton({ }: InformationButtonProps) { const { data: session } = useSession() const [isOpen, setIsOpen] = useState(false) - const [information, setInformation] = useState<(PageInformation & { attachments: InformationAttachment[] }) | null>(null) + const [information, setInformation] = useState(null) const [notices, setNotices] = useState([]) const [hasEditPermission, setHasEditPermission] = useState(false) const [isEditDialogOpen, setIsEditDialogOpen] = useState(false) @@ -211,10 +216,10 @@ export function InformationButton({ variant={variant} size={size} className={className} - title="인포메이션" + title="안내사항" > - {size !== "icon" && 정보} + {size !== "icon" && 안내사항} @@ -277,7 +282,7 @@ export function InformationButton({ )} - {/* 인포메이션 컨텐츠 */} + {/* 안내사항 컨텐츠 */}

안내사항

@@ -295,8 +300,20 @@ export function InformationButton({
{information?.informationContent ? ( -
- {information.informationContent} +
+
+ {information.informationContent} +
+
+
+ + 수정자: {information.updatedByName || '시스템'} + + + 수정일: {formatDate(information.updatedAt, "KR")} + +
+
) : (
diff --git a/components/information/information-client.tsx b/components/information/information-client.tsx index 48bb683d..53350d13 100644 --- a/components/information/information-client.tsx +++ b/components/information/information-client.tsx @@ -28,13 +28,18 @@ import { toast } from "sonner" import { formatDate } from "@/lib/utils" import { getInformationLists, syncInformationFromMenuAssignments, getInformationDetail } from "@/lib/information/service" import type { PageInformation } from "@/db/schema/information" + +type PageInformationWithUpdatedBy = PageInformation & { + updatedByName?: string | null + updatedByEmail?: string | null +} import { UpdateInformationDialog } from "@/lib/information/table/update-information-dialog" interface InformationClientProps { initialData?: PageInformation[] } -type SortField = "pageName" | "pagePath" | "createdAt" +type SortField = "pageName" | "pagePath" | "updatedAt" type SortDirection = "asc" | "desc" export function InformationClient({ initialData = [] }: InformationClientProps) { @@ -58,12 +63,12 @@ export function InformationClient({ initialData = [] }: InformationClientProps) } } - const [informations, setInformations] = useState(initialData) + const [informations, setInformations] = useState(initialData) const [loading, setLoading] = useState(false) const [searchQuery, setSearchQuery] = useState("") const [sortField, setSortField] = useState("createdAt") const [sortDirection, setSortDirection] = useState("desc") - const [editingInformation, setEditingInformation] = useState(null) + const [editingInformation, setEditingInformation] = useState(null) const [isEditDialogOpen, setIsEditDialogOpen] = useState(false) const [isSyncing, setIsSyncing] = useState(false) const [, startTransition] = useTransition() @@ -327,13 +332,14 @@ export function InformationClient({ initialData = [] }: InformationClientProps) 정보 내용 상태 + 수정자 + 수정일 작업 {loading ? ( - + 로딩 중... ) : filteredAndSortedInformations.length === 0 ? ( - - 정보가 없습니다. + + 안내사항이 없습니다. ) : ( @@ -388,7 +395,16 @@ export function InformationClient({ initialData = [] }: InformationClientProps) - {formatDate(information.createdAt, "KR")} + {information.updatedByName || '시스템'} + + + {formatDate(information.updatedAt, "KR")} + + + {information.updatedAt && information.updatedAt !== information.createdAt + ? formatDate(information.updatedAt, "KR") + : '-' + } + + + + + + + 검색 결과가 없습니다 + + {filteredOptions.map((option) => ( + { + field.onChange(option.value) + setOpen(false) + }} + > + + {safeTranslate(option.label)} + - {option.value} + + ))} + + + + + + + + ) + }} />