diff --git a/apps/cm/.env.local b/apps/cm/.env.local index 59eac2cc7..da20c3611 100644 --- a/apps/cm/.env.local +++ b/apps/cm/.env.local @@ -3,7 +3,8 @@ NEXT_PUBLIC_PORT=3000 NEXT_PUBLIC_PROXY_HOST=http://localhost:3000 NEXT_PUBLIC_SITE_ID=CM NEXT_PUBLIC_SUB_DOMAIN=http://localhost:13000 -NEXT_PUBLIC_SERVER_API_URL=http://dev.onasys.co.kr:8000 +NEXT_PUBLIC_SERVER_API_URL=http://localhost:8000 +//NEXT_PUBLIC_SERVER_API_URL=http://dev.onasys.co.kr:8000 NEXT_PUBLIC_LINK_BACKEND_API_HOST=http://rsone.iptime.org:10014 NEXT_PUBLIC_TINY_API_KEY=t9nc4z6inquvvd5pq1vea8wcp7lb01qmqseh6egms9vpaju2 diff --git a/apps/cm/public/images/icon_loginID.png b/apps/cm/public/images/icon_loginID.png new file mode 100644 index 000000000..062b41e41 Binary files /dev/null and b/apps/cm/public/images/icon_loginID.png differ diff --git a/apps/cm/src/entities/post/api/post-service.ts b/apps/cm/src/entities/post/api/post-service.ts index 30370458b..6b1f9c40a 100644 --- a/apps/cm/src/entities/post/api/post-service.ts +++ b/apps/cm/src/entities/post/api/post-service.ts @@ -45,7 +45,7 @@ export class PostApiService implements PostService { params?: MyPostParams, ): Promise { const response = await client.get( - `${ENDPOINT.BOARD_SERVICE.POSTS}/mypost`, + `${ENDPOINT.BOARD_SERVICE.MY_POSTS}`, { params }, ); return response.data; diff --git a/apps/cm/src/pages/dashboard/api/schedule-service.ts b/apps/cm/src/pages/dashboard/api/schedule-service.ts new file mode 100644 index 000000000..34b8c9dd2 --- /dev/null +++ b/apps/cm/src/pages/dashboard/api/schedule-service.ts @@ -0,0 +1,66 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; +import type { PageableList } from "@/shared/model"; + +export interface ScheduleParams { + siteId?: string; + schdlTtl?: string; + schdlSeCd?: string; + schdlBgngYmd?: string; + schdlEndYmd?: string; + reptYn?: string; + commSchdlYn?: string; +} + +export interface Schedule { + schdlSn: number; + siteId: string; + schdlTtl: string; + schdlSeCd: string; + schdlSeNm?: string; + schdlBgngDt: string; + schdlEndDt: string; + reptYn: string; + commSchdlYn: string; + schdlCn?: string; + actualDate?: string; + atflCd?: string | null; +} + + +export const getScheduleList = async (params?: ScheduleParams): Promise> => { + const response = await client.get( + ENDPOINT.CMS_SERVICE.SCHEDULES, + { params }, + ); + const data = response.data; + + return { + content: data as Schedule[], + pageable: { + sort: { + sorted: false, + unsorted: true, + empty: true, + }, + offset: 0, + pageNumber: 0, + pageSize: data.length as number, + paged: false, + unpaged: true, + }, + sort: { + sorted: false, + unsorted: true, + empty: true, + }, + totalPages: 1, + totalElements: data.length, + number: 0, + numberOfElements: data.length, + size: data.length, + first: true, + last: true, + empty: data.length === 0, + }; +}; diff --git a/apps/cm/src/pages/dashboard/model/dashboard-interface.ts b/apps/cm/src/pages/dashboard/model/dashboard-interface.ts deleted file mode 100644 index 9e038eef7..000000000 --- a/apps/cm/src/pages/dashboard/model/dashboard-interface.ts +++ /dev/null @@ -1,32 +0,0 @@ -export interface SiteStatisticsContent { - siteId: string; - siteNm: string; - accessHour: string; - accessCnt: number; -} - -export interface MenuStatisticsContent { - menuCd: number; - menuNm: string; - accessCnt: number; -} - -export interface Dashboard { - memberTotCnt: number; - memberTodayCnt: number; - pstTotCnt: number; - pstTodayCnt: number; - accessTodayCnt: number; - accessBefDayPer: number; - apiTodayCnt: number; - waitMemberCnt: number; - waitCntnCnt: number; - notiList: []; - schdlList: []; - siteAccessList: SiteStatisticsContent[]; - menuAccessList: MenuStatisticsContent[]; -} - -export interface DashboardService { - getDashboard(): Promise; -} diff --git a/apps/cm/src/pages/dashboard/model/table-columns.tsx b/apps/cm/src/pages/dashboard/model/table-columns.tsx index cee8e7412..ea1e4f0d0 100644 --- a/apps/cm/src/pages/dashboard/model/table-columns.tsx +++ b/apps/cm/src/pages/dashboard/model/table-columns.tsx @@ -1,6 +1,7 @@ import dayjs from "dayjs"; import type { ColumnDef } from "@tanstack/react-table"; import type { MyPost, NoticePost } from "@/entities/post"; +import type { Schedule } from "../api/schedule-service"; const noticePostTableColumns: ColumnDef[] = [ { @@ -27,20 +28,31 @@ const myPostTableColumns: ColumnDef[] = [ accessorKey: "pstTtl", header: "제목", }, - { - accessorKey: "wrtrNm", - header: "작성자", - }, { accessorKey: "regDt", header: "작성일", cell: ({ row }) => dayjs(row.original.regDt).format("YYYY-MM-DD"), }, +]; + + +const scheduleTableColumns: ColumnDef[] = [ { - accessorKey: "inqNocs", - header: "조회수", + accessorKey: "schdlTtl", + header: "주요일정", + cell: ({ row }) => { + const startDate = dayjs(row.original.schdlBgngDt).format("YYYY-MM-DD"); + const endDate = dayjs(row.original.schdlEndDt).format("YYYY-MM-DD"); + const schdlTtl = row.original.schdlTtl; + return ( +
+ [{startDate} ~ {endDate}]
{schdlTtl} +
+ ); + }, }, ]; -export { noticePostTableColumns, myPostTableColumns }; + +export { noticePostTableColumns, myPostTableColumns, scheduleTableColumns }; diff --git a/apps/cm/src/pages/dashboard/ui/banner-list.tsx b/apps/cm/src/pages/dashboard/ui/banner-list.tsx index da2ee5641..865540672 100644 --- a/apps/cm/src/pages/dashboard/ui/banner-list.tsx +++ b/apps/cm/src/pages/dashboard/ui/banner-list.tsx @@ -38,7 +38,7 @@ const BannerList: React.FC = () => { if (isLoading) { return ( -
+
로딩 중...
); @@ -46,7 +46,7 @@ const BannerList: React.FC = () => { if (!imageUrl) { return ( -
+
이미지 없음
); diff --git a/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx b/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx index ec6fceee4..5f9ce3440 100644 --- a/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx +++ b/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx @@ -28,6 +28,8 @@ import NoticeList from "./notice-list"; import BannerList from "./banner-list"; import SupportList from "./support-list"; import DataStatusList from "./datastatus-list"; +import MyPostList from "./mypost-list"; +import ScheduleList from "./schedule-list"; // Chart.js 등록 ChartJS.register( @@ -179,22 +181,10 @@ function DashboardPage() { ) : ( !error &&
사용자 정보를 불러오는 중...
)} -
-
-

일정 알림

-
-
- -
-
-
-
-

내 작성글

-
-
- -
-
+ + + +
diff --git a/apps/cm/src/pages/dashboard/ui/mypost-list.tsx b/apps/cm/src/pages/dashboard/ui/mypost-list.tsx new file mode 100644 index 000000000..ec5f97d48 --- /dev/null +++ b/apps/cm/src/pages/dashboard/ui/mypost-list.tsx @@ -0,0 +1,47 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { useQuery } from "@tanstack/react-query"; +import { getCoreRowModel } from "@tanstack/react-table"; +import { PostApi, type MyPost } from "@/entities/post"; +import { ENDPOINT } from "@/shared/config"; +import { useDataTable } from "@/shared/lib"; +import { + myPostTableColumns, +} from "../model/table-columns"; +import { Button } from "@common/components"; + + +const MyPostList: React.FC = () => { + const router = useRouter(); + const myPostQuery = useQuery({ + queryKey: [ENDPOINT.BOARD_SERVICE.MY_POSTS], + queryFn: () => + PostApi.getMyPostList({ + page: 0, + size: 5, + }), + }); + + const { tableComponent: myPostTableComponent } = useDataTable({ + query: myPostQuery, + tableOptions: { + columns: myPostTableColumns, + getCoreRowModel: getCoreRowModel(), + }, + dataTableOptions: { + variant: "line", + }, + }); + + return ( +
+
+

내 게시글

+
+ {myPostTableComponent} +
+ ); +}; + +export default MyPostList; \ No newline at end of file diff --git a/apps/cm/src/pages/dashboard/ui/schedule-list.tsx b/apps/cm/src/pages/dashboard/ui/schedule-list.tsx new file mode 100644 index 000000000..3cbfe0fe3 --- /dev/null +++ b/apps/cm/src/pages/dashboard/ui/schedule-list.tsx @@ -0,0 +1,70 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { useQuery } from "@tanstack/react-query"; +import { getCoreRowModel } from "@tanstack/react-table"; +import { ENDPOINT } from "@/shared/config"; +import { useDataTable } from "@/shared/lib"; +import { + scheduleTableColumns, +} from "../model/table-columns"; +import { getScheduleList } from "../api/schedule-service"; + +// 날짜를 YYYY-MM-DD 형식으로 포맷팅 +const formatDate = (date: Date): string => { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const day = String(date.getDate()).padStart(2, "0"); + return `${year}-${month}-${day}`; +}; + +// 오늘부터 한 달 후까지의 날짜 계산 +const getDateRange = () => { + const today = new Date(); + const oneMonthLater = new Date(); + oneMonthLater.setMonth(today.getMonth() + 1); + + return { + startDate: formatDate(today), + endDate: formatDate(oneMonthLater), + }; +}; + +const ScheduleList: React.FC = () => { + const router = useRouter(); + const { startDate, endDate } = getDateRange(); + + const scheduleQuery = useQuery({ + queryKey: [ENDPOINT.BOARD_SERVICE.POSTS, startDate, endDate], + queryFn: () => + getScheduleList({ + siteId: "", + schdlTtl: "", + schdlSeCd: "", + schdlBgngYmd: startDate, + schdlEndYmd: endDate, + reptYn: "", + commSchdlYn: "Y", + }), + }); + + + const { tableComponent: scheduleTableComponent } = useDataTable({ + query: scheduleQuery, + tableOptions: { + columns: scheduleTableColumns, + getCoreRowModel: getCoreRowModel(), + }, + dataTableOptions: { + variant: "line", + }, + }); + + return ( +
+ {scheduleTableComponent} +
+ ); +}; + +export default ScheduleList; \ No newline at end of file diff --git a/apps/cm/src/shared/config/api.ts b/apps/cm/src/shared/config/api.ts index 241188bee..d6e151094 100644 --- a/apps/cm/src/shared/config/api.ts +++ b/apps/cm/src/shared/config/api.ts @@ -61,13 +61,17 @@ export const ENDPOINT = { APILOG: "/cms-service/api/v1/api-logs", SITE_AUTHORITY: "/cms-service/api/v1/site-authrt", CONNECTION_LOG: "/cms-service/api/v1/cntnlog", + SCEHDULES: "/cms-service/api/v1/schdls", }, BOARD_SERVICE: { BBS: "/board-service/api/v1/bbs", BBS_TEMPLATES: "/board-service/api/v1/bbsTmplt", POSTS: "/board-service/api/v1/posts", + MY_POSTS: "/board-service/api/v1/posts/me", POSTS_COMMENTS: "/board-service/api/v1/posts-cmnts", POST_EVALUATION: "/board-service/api/v1/pstEvl", + SITE_AUTHORITY_LIST: "/cms-service/api/v1/site-authrt/user", + CONNECTION_LOG_LIST: "/cms-service/api/v1/cntnlog/user", }, SEWERAGE_SERVICE: { PPL_LENGTH: "/sewerage-service/api/v1/ms/pplLength",