diff --git a/src/entities/account/ui/user-account-auth-wrap.tsx b/src/entities/account/ui/user-account-auth-wrap.tsx index d1e9088..fc64a71 100644 --- a/src/entities/account/ui/user-account-auth-wrap.tsx +++ b/src/entities/account/ui/user-account-auth-wrap.tsx @@ -13,7 +13,7 @@ export const UserAccountAuthWrap = ({ }: UserAccountAuthWrapProps) => { const [currentStatus, setCurrentStatus] = useState(status); const [currentIdCL, setCurrentIdCl] = useState(idCL); - const [menuGrants, setMenuGrants] = useState>([]); + const [permissions, setPermissions] = useState>([]); const [hasChanges, setHasChanges] = useState(false); console.log('mid : ', mid); console.log('usrid : ', usrid); @@ -24,20 +24,21 @@ export const UserAccountAuthWrap = ({ useEffect(() => { if (mid && usrid) { console.log('userMenuPermissions'); - userMenuPermissions({mid: mid, usrid: usrid}).then((res) => { + userMenuPermissions({mid: mid, usrid: usrid}).then((res: any) => { console.log('res : ', res); - setMenuGrants(res?.data || res || []); + console.log('permissions : ', res?.permissions); + setPermissions(res?.permissions || []); }).catch((error) => { console.error('Failed to fetch menu permissions:', error); - setMenuGrants([]); + setPermissions([]); }); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [mid, usrid]); useEffect(() => { - console.log('menuGrants : ', menuGrants); - }, [menuGrants]); + console.log('permissions : ', permissions); + }, [permissions]); // 변경 사항 감지 useEffect(() => { @@ -50,7 +51,7 @@ export const UserAccountAuthWrap = ({ {menuId: '30', parent: '30', menuName: '거래조회', subMenu: [ {menuId: '31', parent: '30', menuName: '거래내역조회'}, - {menuId: '32', parent: '30', menuName: '현금영수증 발행'}, + {menuId: '32', parent: '30', menuName: '현금영수증발행'}, {menuId: '33', parent: '30', menuName: '에스크로'}, {menuId: '34', parent: '30', menuName: '빌링'} ] @@ -61,15 +62,15 @@ export const UserAccountAuthWrap = ({ {menuId: '37', parent: '35', menuName: '정산내역'}, ] }, - {menuId: '38', parent: '38', menuName: '가맹점 관리', subMenu: + {menuId: '38', parent: '38', menuName: '가맹점관리', subMenu: [ - {menuId: '39', parent: '38', menuName: '가맹점 정보'}, - {menuId: '40', parent: '38', menuName: '등록 현황'}, + {menuId: '39', parent: '38', menuName: '가맹점정보'}, + {menuId: '40', parent: '38', menuName: '등록현황'}, ] }, - {menuId: '41', parent: '41', menuName: '결제 관리', subMenu: + {menuId: '41', parent: '41', menuName: '결제관리', subMenu: [ - {menuId: '42', parent: '41', menuName: '결제 정보'}, + {menuId: '42', parent: '41', menuName: '결제정보'}, {menuId: '43', parent: '41', menuName: '결제데이터통보'}, ] }, @@ -81,7 +82,7 @@ export const UserAccountAuthWrap = ({ }, {menuId: '47', parent: '47', menuName: '부가세신고자료', subMenu: [ - {menuId: '48', parent: '47', menuName: '부가세신고자료'}, + {menuId: '48', parent: '47', menuName: '세금계산서'}, {menuId: '49', parent: '47', menuName: '부가세참고'}, ] }, @@ -89,14 +90,14 @@ export const UserAccountAuthWrap = ({ [ {menuId: '51', parent: '50', menuName: '부가서비스소개'}, {menuId: '52', parent: '50', menuName: '신용카드ARS카드결제'}, - {menuId: '53', parent: '50', menuName: '계좌이체ARS카드결제'}, - {menuId: '54', parent: '50', menuName: '가상계좌ARS카드결제'}, - {menuId: '55', parent: '50', menuName: '휴대폰ARS카드결제'}, - {menuId: '56', parent: '50', menuName: '계좌간편결제ARS카드결제'}, - {menuId: '57', parent: '50', menuName: 'SSG머니ARS카드결제'}, - {menuId: '58', parent: '50', menuName: 'SSG은행계좌ARS카드결제'}, - {menuId: '59', parent: '50', menuName: '문화상품권ARS카드결제'}, - {menuId: '60', parent: '50', menuName: '티머니페이ARS카드결제'}, + {menuId: '53', parent: '50', menuName: '지급대행'}, + {menuId: '54', parent: '50', menuName: '링크결제'}, + {menuId: '55', parent: '50', menuName: '자금이체'}, + {menuId: '56', parent: '50', menuName: 'KEY-IN결제'}, + {menuId: '57', parent: '50', menuName: 'SMS결제통보'}, + {menuId: '58', parent: '50', menuName: '알림톡결제통보'}, + {menuId: '59', parent: '50', menuName: '계좌점유인증'}, + {menuId: '60', parent: '50', menuName: '계좌성명조회'}, ] }, {menuId: '61', parent: '61', menuName: '고객지원', subMenu: @@ -139,7 +140,7 @@ export const UserAccountAuthWrap = ({ idCL={ currentIdCL } status={ currentStatus } menuItems={ menuItems } - menuGrants={ menuGrants } + menuGrants={ permissions } >
diff --git a/src/entities/user/model/types.ts b/src/entities/user/model/types.ts index d4e5a0b..b31bae5 100644 --- a/src/entities/user/model/types.ts +++ b/src/entities/user/model/types.ts @@ -115,8 +115,7 @@ export interface UserMenuPermissionsParams { } export interface UserMenuPermissionsResponse { - status: boolean; - data: Array; + permissions: Array; } export interface UserMenuPermissionsSaveParams { @@ -134,6 +133,7 @@ export interface UserMenuPermissionData { menuId: number; usrid: string; grant: number; + defaultGrant: number; } export interface ChangePasswordParams { diff --git a/src/pages/account/password/modify-cancel-password-page.tsx b/src/pages/account/password/modify-cancel-password-page.tsx index f2d8f21..ca6ddf1 100644 --- a/src/pages/account/password/modify-cancel-password-page.tsx +++ b/src/pages/account/password/modify-cancel-password-page.tsx @@ -14,14 +14,14 @@ import { snackBar } from '@/shared/lib/toast'; export const PasswordModifyCancelPasswordPage = () => { const { navigate } = useNavigate(); const [mid, setMid] = useState('nictest00m'); - const [newPassword, setNewPassword] = useState(''); + const [password, setPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const changeCancelPasswordMutation = useUserChangeCancelPasswordMutation({ onSuccess: () => { snackBar('비밀번호가 성공적으로 변경되었습니다.'); // Clear form - setNewPassword(''); + setPassword(''); setConfirmPassword(''); // Navigate back navigate(PATHS.account.password.manage); @@ -32,6 +32,7 @@ export const PasswordModifyCancelPasswordPage = () => { }); const midList = [ + { value: 'nictest00', label: 'nictest00' }, { value: 'nictest00m', label: 'nictest00m' }, { value: 'nictest01m', label: 'nictest01m' }, { value: 'nictest02m', label: 'nictest02m' }, @@ -47,9 +48,9 @@ export const PasswordModifyCancelPasswordPage = () => { // 저장 버튼 활성화 조건 체크 const isFormValid = () => { return ( - newPassword.length >= 8 && + password.length >= 8 && confirmPassword.length >= 8 && - newPassword === confirmPassword + password === confirmPassword ); }; @@ -60,7 +61,7 @@ export const PasswordModifyCancelPasswordPage = () => { // TODO: Validate current password before submitting changeCancelPasswordMutation.mutate({ mid, - password: newPassword + password: password }); }; @@ -82,24 +83,24 @@ export const PasswordModifyCancelPasswordPage = () => {
변경 비밀번호 *
setNewPassword(e.target.value)} + value={password} + onChange={(e) => setPassword(e.target.value)} />
변경 비밀번호 재입력 *
setConfirmPassword(e.target.value)} />
- {confirmPassword && newPassword !== confirmPassword && ( + {confirmPassword && password !== confirmPassword && (
입력 정보 불일치
)}
diff --git a/src/pages/account/user/menu-auth-page.tsx b/src/pages/account/user/menu-auth-page.tsx index 4d65047..c713a8d 100644 --- a/src/pages/account/user/menu-auth-page.tsx +++ b/src/pages/account/user/menu-auth-page.tsx @@ -30,11 +30,19 @@ export const UserMenuAuthPage = () => { // 메뉴별 권한 상태 관리 const [permissions, setPermissions] = useState>({}); const [initialPermissions, setInitialPermissions] = useState>({}); + const [defaultPermissions, setDefaultPermissions] = useState>({}); const [hasChanges, setHasChanges] = useState(false); const savePermissionsMutation = useUserMenuPermissionsSaveMutation({ onSuccess: () => { snackBar('권한이 성공적으로 저장되었습니다.'); - navigate(PATHS.account.password.manage); + navigate(PATHS.account.user.accountAuth, { + state: { + mid, + usrid, + idCl: location.state?.idCl, + status: location.state?.status + } + }); }, onError: (error) => { snackBar(error?.response?.data?.message || '권한 저장에 실패했습니다.'); @@ -84,12 +92,15 @@ export const UserMenuAuthPage = () => { useEffect(() => { if (menuGrants && Array.isArray(menuGrants) && menuGrants.length > 0) { // menuGrants 데이터가 있으면 사용 - const initial: Record = {}; - menuGrants.forEach((grant: { menuId: number; grant: number }) => { - initial[grant.menuId] = grant.grant || 0; + const grants: Record = {}; + const defaultGrants: Record = {}; + menuGrants.forEach((grant: { menuId: number; grant: number; defaultGrant: number }) => { + grants[grant.menuId] = grant.grant || 0; + defaultGrants[grant.menuId] = grant.defaultGrant || 0; }); - setPermissions(initial); - setInitialPermissions(initial); + setPermissions(grants); + setInitialPermissions(grants); // 초기값은 현재 grant 값으로 설정 + setDefaultPermissions(defaultGrants); // defaultGrant는 별도로 관리 } else { // menuGrants가 없거나 빈 배열이면 API에서 권한 조회 // loadPermissions(); @@ -114,6 +125,11 @@ export const UserMenuAuthPage = () => { return (grant & flag) === flag; }; + const hasDefaultPermission = (menuId: number, flag: number): boolean => { + const grant = defaultPermissions[menuId] || 0; + return (grant & flag) === flag; + }; + // 권한 토글 처리 const togglePermission = (menuId: number, flag: number) => { setPermissions(prev => { @@ -152,7 +168,8 @@ export const UserMenuAuthPage = () => { ([menuId, grant]) => ({ menuId: Number(menuId), usrid: usrid, - grant: grant + grant: grant, + defaultGrant: defaultPermissions[Number(menuId)] || 0 }) ); @@ -210,17 +227,21 @@ export const UserMenuAuthPage = () => { }} >
-
- 저장 - -
+ {hasDefaultPermission(menu.menuId, PERMISSION.SAVE) && ( +
+ 저장 + +
+ )} + + {hasDefaultPermission(menu.menuId, PERMISSION.EXECUTE) && (
실행
+ )} + + {hasDefaultPermission(menu.menuId, PERMISSION.DOWNLOAD) && (
다운로드
+ )}
diff --git a/src/shared/api/api-url-user.ts b/src/shared/api/api-url-user.ts index b16aa21..676cc75 100644 --- a/src/shared/api/api-url-user.ts +++ b/src/shared/api/api-url-user.ts @@ -42,6 +42,6 @@ export const API_URL_USER = { return `${API_BASE_URL}/api/v1/${API_URL_KEY}/user/password`; }, userChangeCancelPassword: () => { - return `${API_BASE_URL}/api/v1/${API_URL_KEY}/user/cancel/change`; + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/user/cancle/change`; } } \ No newline at end of file