From 318bae3a1e417d9ae268d3cf7a9ddb8c5efcc917 Mon Sep 17 00:00:00 2001 From: bicochan Date: Tue, 17 Jun 2025 11:06:33 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EA=B7=B8=EB=A3=B9=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cs/app/(with-base-layout)/groups/page.tsx | 2 + .../api/menu-authority-service.ts | 10 + apps/cs/src/entities/menu-authority/index.ts | 7 + .../model/menu-authority-interface.ts | 3 + .../role/api/role-service.ts | 2 +- apps/cs/src/entities/role/index.ts | 8 + .../role/model/role-interface.ts | 2 +- apps/cs/src/entities/site/ui/site-select.tsx | 5 +- .../pages/groups/api/group-users-service.ts | 6 +- .../cs/src/pages/groups/api/groups-service.ts | 21 +- apps/cs/src/pages/groups/api/index.ts | 2 - apps/cs/src/pages/groups/index.ts | 1 + .../group-menu-authority-table-columns.tsx | 117 ++++++++++ .../groups/model/group-users-interface.ts | 13 +- .../model/group-users-table-columns.tsx | 57 +++++ .../pages/groups/model/groups-interface.ts | 105 ++++----- .../groups/model/groups-table-columns.tsx | 27 +++ apps/cs/src/pages/groups/model/index.ts | 2 - apps/cs/src/pages/groups/ui/group-form.tsx | 204 ++++++++++++++++++ .../pages/groups/ui/group-users-section.tsx | 92 ++++++++ apps/cs/src/pages/groups/ui/groups-dialog.tsx | 112 ++++++++++ apps/cs/src/pages/groups/ui/groups-page.tsx | 18 ++ .../cs/src/pages/groups/ui/groups-section.tsx | 68 ++++++ apps/cs/src/pages/groups/ui/index.ts | 1 + .../pages/groups/ui/menu-authority-dialog.tsx | 110 ++++++++++ apps/cs/src/pages/groups/ui/role-select.tsx | 41 ++++ apps/cs/src/pages/role/ui/create-page.tsx | 3 +- apps/cs/src/pages/role/ui/modify-page.tsx | 3 +- apps/cs/src/pages/role/ui/role-form.tsx | 3 +- apps/cs/src/pages/role/ui/role-page.tsx | 3 +- 30 files changed, 952 insertions(+), 96 deletions(-) create mode 100644 apps/cs/app/(with-base-layout)/groups/page.tsx rename apps/cs/src/{pages => entities}/role/api/role-service.ts (95%) create mode 100644 apps/cs/src/entities/role/index.ts rename apps/cs/src/{pages => entities}/role/model/role-interface.ts (94%) delete mode 100644 apps/cs/src/pages/groups/api/index.ts create mode 100644 apps/cs/src/pages/groups/index.ts create mode 100644 apps/cs/src/pages/groups/model/group-menu-authority-table-columns.tsx create mode 100644 apps/cs/src/pages/groups/model/group-users-table-columns.tsx create mode 100644 apps/cs/src/pages/groups/model/groups-table-columns.tsx delete mode 100644 apps/cs/src/pages/groups/model/index.ts create mode 100644 apps/cs/src/pages/groups/ui/group-form.tsx create mode 100644 apps/cs/src/pages/groups/ui/group-users-section.tsx create mode 100644 apps/cs/src/pages/groups/ui/groups-dialog.tsx create mode 100644 apps/cs/src/pages/groups/ui/groups-page.tsx create mode 100644 apps/cs/src/pages/groups/ui/groups-section.tsx create mode 100644 apps/cs/src/pages/groups/ui/index.ts create mode 100644 apps/cs/src/pages/groups/ui/menu-authority-dialog.tsx create mode 100644 apps/cs/src/pages/groups/ui/role-select.tsx diff --git a/apps/cs/app/(with-base-layout)/groups/page.tsx b/apps/cs/app/(with-base-layout)/groups/page.tsx new file mode 100644 index 000000000..8491e59bb --- /dev/null +++ b/apps/cs/app/(with-base-layout)/groups/page.tsx @@ -0,0 +1,2 @@ +import { GroupsPage } from "@/pages/groups"; +export default GroupsPage; diff --git a/apps/cs/src/entities/menu-authority/api/menu-authority-service.ts b/apps/cs/src/entities/menu-authority/api/menu-authority-service.ts index 14988eee0..ec07d88ad 100644 --- a/apps/cs/src/entities/menu-authority/api/menu-authority-service.ts +++ b/apps/cs/src/entities/menu-authority/api/menu-authority-service.ts @@ -35,6 +35,16 @@ export class MenuAuthorityApiService implements MenuAuthorityService { ); return response.data; } + + public async getGroupMenuAuthorityList( + params: MenuAuthorityParams, + ): Promise { + const response = await client.get( + `${ENDPOINT.CMS_SERVICE.MENU_AUTHRTS}/group`, + { params }, + ); + return response.data; + } } export const MenuAuthorityApi = new MenuAuthorityApiService(); diff --git a/apps/cs/src/entities/menu-authority/index.ts b/apps/cs/src/entities/menu-authority/index.ts index 2a555b77e..5a1b11606 100644 --- a/apps/cs/src/entities/menu-authority/index.ts +++ b/apps/cs/src/entities/menu-authority/index.ts @@ -1,2 +1,9 @@ +export { MenuAuthorityApi } from "./api/menu-authority-service"; +export { + menuAuthorityFormSchema, + type MenuAuthority, + type MenuAuthorityPayload, + type MenuAuthorityFormData, +} from "./model/menu-authority-interface"; export { AuthorityButton } from "./ui/authority-button"; export { ManagementAuthorityDialog } from "./ui/management-authority-dialog"; diff --git a/apps/cs/src/entities/menu-authority/model/menu-authority-interface.ts b/apps/cs/src/entities/menu-authority/model/menu-authority-interface.ts index b59574c2f..7f5401872 100644 --- a/apps/cs/src/entities/menu-authority/model/menu-authority-interface.ts +++ b/apps/cs/src/entities/menu-authority/model/menu-authority-interface.ts @@ -43,6 +43,9 @@ export type MenuAuthorityFormData = z.infer; export interface MenuAuthorityService { getMenuAuthorityList(params: MenuAuthorityParams): Promise; + getGroupMenuAuthorityList( + params: MenuAuthorityParams, + ): Promise; getPageMenuAuthority(menuCd: number): Promise; saveMenuAuthority(data: MenuAuthorityPayload[]): Promise; } diff --git a/apps/cs/src/pages/role/api/role-service.ts b/apps/cs/src/entities/role/api/role-service.ts similarity index 95% rename from apps/cs/src/pages/role/api/role-service.ts rename to apps/cs/src/entities/role/api/role-service.ts index d2db7e5bc..95aac330f 100644 --- a/apps/cs/src/pages/role/api/role-service.ts +++ b/apps/cs/src/entities/role/api/role-service.ts @@ -9,7 +9,7 @@ import type { } from "../model/role-interface"; export class RoleApiService implements RoleService { - public async getRoles(params: RoleParams): Promise { + public async getRoles(params?: RoleParams): Promise { const response = await client.get(ENDPOINT.USER_SERVICE.ROLES, { params, }); diff --git a/apps/cs/src/entities/role/index.ts b/apps/cs/src/entities/role/index.ts new file mode 100644 index 000000000..28fe5f7fb --- /dev/null +++ b/apps/cs/src/entities/role/index.ts @@ -0,0 +1,8 @@ +export { RoleApi } from "./api/role-service"; +export { + roleFormSchema, + type Role, + type RoleParams, + type RoleFormData, + type RoleList, +} from "./model/role-interface"; diff --git a/apps/cs/src/pages/role/model/role-interface.ts b/apps/cs/src/entities/role/model/role-interface.ts similarity index 94% rename from apps/cs/src/pages/role/model/role-interface.ts rename to apps/cs/src/entities/role/model/role-interface.ts index 1b9b8eea2..065d89259 100644 --- a/apps/cs/src/pages/role/model/role-interface.ts +++ b/apps/cs/src/entities/role/model/role-interface.ts @@ -28,7 +28,7 @@ export type RoleList = PageableList; export type RoleFormData = z.infer; export interface RoleService { - getRoles: (params: RoleParams) => Promise; + getRoles: (params?: RoleParams) => Promise; getRoleInfo: (roleId: string) => Promise; createRole: (data: RoleFormData) => Promise; updateRole: (roleId: string, data: RoleFormData) => Promise; diff --git a/apps/cs/src/entities/site/ui/site-select.tsx b/apps/cs/src/entities/site/ui/site-select.tsx index 6c5a0d005..3d56a5658 100644 --- a/apps/cs/src/entities/site/ui/site-select.tsx +++ b/apps/cs/src/entities/site/ui/site-select.tsx @@ -1,5 +1,6 @@ import { useQuery } from "@tanstack/react-query"; import { + cn, Select, SelectContent, SelectItem, @@ -12,12 +13,14 @@ import { SiteApi } from "../api/site-service"; type SiteSelectProps = { placeholder?: string; enabledAllSite?: boolean; + className?: string; } & React.ComponentPropsWithoutRef; function SiteSelect({ defaultValue, placeholder = "선택", enabledAllSite, + className, ...props }: SiteSelectProps) { const { data: sites } = useQuery({ @@ -36,7 +39,7 @@ function SiteSelect({ return ( + + + + )} + /> + + + + 그룹명 + + ( + + + + + + + )} + /> + + + + 그룹구분 + + ( + + + + + + + )} + /> + + + + 그룹설명 + + ( + + +