diff --git a/src/entities/home/ui/day-status-box-container1.tsx b/src/entities/home/ui/day-status-box-container1.tsx index a353322..c8597d3 100644 --- a/src/entities/home/ui/day-status-box-container1.tsx +++ b/src/entities/home/ui/day-status-box-container1.tsx @@ -13,6 +13,7 @@ import { PATHS } from '@/shared/constants/paths'; import { useStore } from '@/shared/model/store'; import { useTranslation } from 'react-i18next'; import { showAlert } from '@/widgets/show-alert'; +import { checkGrant } from '@/shared/lib/check-grant'; export const BoxContainer1 = () => { const { navigate } = useNavigate(); @@ -57,17 +58,8 @@ export const BoxContainer1 = () => { }); }; - const checkGrant = (menuId?: number) => { - const menuGrantsByKey = useStore.getState().UserStore.menuGrantsByKey; - const myGrants = menuGrantsByKey['' + menuId]; - if(myGrants?.includes('R')){ - return true - } - return false; - }; - const onClickToNavigate = () => { - if(checkGrant(36)){ + if(checkGrant(36, 'R')){ navigate(PATHS.settlement.list); } else{ diff --git a/src/entities/home/ui/day-status-box-container2.tsx b/src/entities/home/ui/day-status-box-container2.tsx index a8e7f94..f4ca226 100644 --- a/src/entities/home/ui/day-status-box-container2.tsx +++ b/src/entities/home/ui/day-status-box-container2.tsx @@ -9,6 +9,7 @@ import { PATHS } from '@/shared/constants/paths'; import { useStore } from '@/shared/model/store'; import { useTranslation } from 'react-i18next'; import { showAlert } from '@/widgets/show-alert'; +import { checkGrant } from '@/shared/lib/check-grant'; export const BoxContainer2 = () => { const { navigate } = useNavigate(); @@ -81,17 +82,8 @@ export const BoxContainer2 = () => { callOverview(); }, []); - const checkGrant = (menuId?: number) => { - const menuGrantsByKey = useStore.getState().UserStore.menuGrantsByKey; - const myGrants = menuGrantsByKey['' + menuId]; - if(myGrants?.includes('R')){ - return true - } - return false; - }; - const onClickToNavigate = () => { - if(checkGrant(36)){ + if(checkGrant(36, 'R')){ navigate(PATHS.settlement.list); } else{ diff --git a/src/entities/home/ui/favorite-wrapper.tsx b/src/entities/home/ui/favorite-wrapper.tsx index 9baef29..61b3d8c 100644 --- a/src/entities/home/ui/favorite-wrapper.tsx +++ b/src/entities/home/ui/favorite-wrapper.tsx @@ -7,6 +7,7 @@ import { UserFavorite } from '@/entities/user/model/types'; import { useStore } from '@/shared/model/store'; import { useTranslation } from 'react-i18next'; import { showAlert } from '@/widgets/show-alert'; +import { checkGrant } from '@/shared/lib/check-grant'; export interface FavoriteWrapperProps { usingType: 'home' | 'menu', @@ -25,8 +26,7 @@ export const FavoriteWrapper = ({ }: FavoriteWrapperProps) => { const { navigate } = useNavigate(); const { i18n, t } = useTranslation(); - const menuGrantsByKey = useStore.getState().UserStore.menuGrantsByKey; - + const [favoriteItems, setFavoriteItems] = useState>([]); const itemAdd: UserFavorite = { @@ -42,16 +42,9 @@ export const FavoriteWrapper = ({ setEditMode(true); } }; - const checkGrant = (menuId?: number) => { - const myGrants = menuGrantsByKey['' + menuId]; - if(myGrants?.includes('R') || menuId === -1){ - return true - } - return false; - }; const onClickToNavigate = (menuId?: number, path?: string) => { - if(menuId && checkGrant(menuId)){ + if(menuId && checkGrant(menuId, 'R')){ if(!!path){ navigate(path); if(setMenuOn){ diff --git a/src/entities/home/ui/home-notice-item.tsx b/src/entities/home/ui/home-notice-item.tsx index 93a3eed..654167b 100644 --- a/src/entities/home/ui/home-notice-item.tsx +++ b/src/entities/home/ui/home-notice-item.tsx @@ -6,12 +6,12 @@ import { useTranslation } from 'react-i18next'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { useStore } from '@/shared/model/store'; import { showAlert } from '@/widgets/show-alert'; +import { checkGrant } from '@/shared/lib/check-grant'; export const HomeNoticeItem = ({ noticeItem, setDetailData, }: NoticeItemProps) => { - const { navigate } = useNavigate(); const { t, i18n } = useTranslation(); const formatDate = (date?: string) => { @@ -22,16 +22,9 @@ export const HomeNoticeItem = ({ } return moment(date).format('YYYY.MM.DD'); }; - const checkGrant = (menuId?: number) => { - const menuGrantsByKey = useStore.getState().UserStore.menuGrantsByKey; - const myGrants = menuGrantsByKey['' + menuId]; - if(myGrants?.includes('R')){ - return true - } - return false; - }; + const onClickToDetail = () => { - if(checkGrant(62)){ + if(checkGrant(62, 'R')){ if(setDetailData){ setDetailData({ seq: noticeItem.seq, diff --git a/src/entities/menu/ui/menu-category.tsx b/src/entities/menu/ui/menu-category.tsx index 497aaa9..40a4015 100644 --- a/src/entities/menu/ui/menu-category.tsx +++ b/src/entities/menu/ui/menu-category.tsx @@ -6,6 +6,7 @@ import { MenuItem } from '../model/types'; import { useTranslation } from 'react-i18next'; import { MenuItems } from '@/entities/common/model/constant'; import { showAlert } from '@/widgets/show-alert'; +import { checkGrant } from '@/shared/lib/check-grant'; export interface MenuCategoryProps { menuId?: number; @@ -34,21 +35,12 @@ export const MenuCategory = ({ }: MenuCategoryProps) => { const { navigate } = useNavigate(); const { i18n } = useTranslation(); - const menuGrantsByKey = useStore.getState().UserStore.menuGrantsByKey; const [favoriteItems, setFavoriteItems] = useState>([]); const [menuIds, setMenuIds] = useState>([]); - - const checkGrant = (menuId?: number) => { - const myGrants = menuGrantsByKey['' + menuId]; - if(myGrants?.includes('R')){ - return true - } - return false; - }; - + const onClickToNavigate = (menuId?: number, path?: string) => { - if(menuId && checkGrant(menuId)){ + if(menuId && checkGrant(menuId, 'R')){ if(!!path && !!setMenuOn && !editMode){ setMenuOn(false); navigate(path); diff --git a/src/entities/transaction/ui/detail/all-transaction-detail.tsx b/src/entities/transaction/ui/detail/all-transaction-detail.tsx index 7cb4020..9a574fa 100644 --- a/src/entities/transaction/ui/detail/all-transaction-detail.tsx +++ b/src/entities/transaction/ui/detail/all-transaction-detail.tsx @@ -30,6 +30,8 @@ import { DetailMotionVariants } from '@/entities/common/model/constant'; import { FullMenuClose } from '@/entities/common/ui/full-menu-close'; +import { checkGrant } from '@/shared/lib/check-grant'; +import { showAlert } from '@/widgets/show-alert'; export interface AllTransactionDetailProps { detailOn: boolean; @@ -38,6 +40,8 @@ export interface AllTransactionDetailProps { serviceCode: string; }; +/* 거래내역조회 31 */ +const menuId = 31; export const AllTransactionDetail = ({ detailOn, setDetailOn, @@ -94,25 +98,30 @@ export const AllTransactionDetail = ({ }; const onClickToCancel = () => { - let msg = t('transaction.confirmCancel'); + if(checkGrant(menuId, 'X')){ + let msg = t('transaction.confirmCancel'); - overlay.open(({ - isOpen, - close, - unmount - }) => { - return ( - onClickToNavigate(PATHS.transaction.allTransaction.cancel) } - // onConfirmClick={ () => callCancelInfo() } - message={ msg } - buttonLabel={[t('common.cancel'), t('common.confirm')]} - /> - ); - }); + overlay.open(({ + isOpen, + close, + unmount + }) => { + return ( + onClickToNavigate(PATHS.transaction.allTransaction.cancel) } + // onConfirmClick={ () => callCancelInfo() } + message={ msg } + buttonLabel={[t('common.cancel'), t('common.confirm')]} + /> + ); + }); + } + else{ + showAlert('권한이 없습니다.'); + } }; const onClickToClose = () => { diff --git a/src/entities/transaction/ui/detail/cash-receit-detail.tsx b/src/entities/transaction/ui/detail/cash-receit-detail.tsx index ad64a84..a9adace 100644 --- a/src/entities/transaction/ui/detail/cash-receit-detail.tsx +++ b/src/entities/transaction/ui/detail/cash-receit-detail.tsx @@ -24,6 +24,7 @@ import { AmountInfoSection } from '@/entities/transaction/ui/section/amount-info import { snackBar } from '@/shared/lib'; import { DetailMotionDuration, DetailMotionStyle, DetailMotionVariants } from '@/entities/common/model/constant'; import { FullMenuClose } from '@/entities/common/ui/full-menu-close'; +import { checkGrant } from '@/shared/lib/check-grant'; export interface CashReceiptDetailProps { detailOn: boolean; @@ -31,6 +32,8 @@ export interface CashReceiptDetailProps { tid: string; }; +/* 현금영수증 32 */ +const menuId = 32; export const CashReceiptDetail = ({ detailOn, setDetailOn, @@ -105,7 +108,12 @@ export const CashReceiptDetail = ({ }; const onClickToPurposeUpdate = () => { - setBottomSheetOn(true); + if(checkGrant(menuId, 'X')){ + setBottomSheetOn(true); + } + else{ + showAlert('권한이 없습니다.'); + } }; return ( diff --git a/src/entities/transaction/ui/detail/escrow-detail.tsx b/src/entities/transaction/ui/detail/escrow-detail.tsx index 5fe230f..7256e61 100644 --- a/src/entities/transaction/ui/detail/escrow-detail.tsx +++ b/src/entities/transaction/ui/detail/escrow-detail.tsx @@ -27,6 +27,8 @@ import { AmountInfoSection } from '@/entities/transaction/ui/section/amount-info import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import { DetailMotionDuration, DetailMotionStyle, DetailMotionVariants } from '@/entities/common/model/constant'; import { FullMenuClose } from '@/entities/common/ui/full-menu-close'; +import { checkGrant } from '@/shared/lib/check-grant'; +import { showAlert } from '@/widgets/show-alert'; export interface EscrowDetailProps { detailOn: boolean; @@ -35,6 +37,8 @@ export interface EscrowDetailProps { serviceCode: string; }; +/* 에스크로 33 */ +const menuId = 33; export const EscrowDetail = ({ detailOn, setDetailOn, @@ -91,7 +95,12 @@ export const EscrowDetail = ({ const onClickToShowMailResend = () => { - setBottomSheetOn(true); + if(checkGrant(menuId, 'X')){ + setBottomSheetOn(true); + } + else{ + showAlert('권한이 없습니다.'); + } }; const callMailResend = () => { diff --git a/src/pages/transaction/all-transaction/list-page.tsx b/src/pages/transaction/all-transaction/list-page.tsx index 53a155c..e610ad0 100644 --- a/src/pages/transaction/all-transaction/list-page.tsx +++ b/src/pages/transaction/all-transaction/list-page.tsx @@ -34,8 +34,10 @@ import { useTranslation } from 'react-i18next'; import { AllTransactionDetail } from '@/entities/transaction/ui/detail/all-transaction-detail'; import { showAlert } from '@/widgets/show-alert'; import { snackBar } from '@/shared/lib'; +import { checkGrant } from '@/shared/lib/check-grant'; /* 거래내역조회 31 */ +const menuId = 31; export const AllTransactionListPage = () => { const { navigate } = useNavigate(); @@ -54,8 +56,7 @@ export const AllTransactionListPage = () => { const [tid, setTid] = useState(''); const [dateCl, setDateCl] = useState(''); const [goodsName, setGoodsName] = useState(''); - // const [fromDate, setFromDate] = useState(moment().subtract(1, 'month').format('YYYYMMDD')); - const [fromDate, setFromDate] = useState(moment().subtract(2, 'year').format('YYYYMMDD')); + const [fromDate, setFromDate] = useState(moment().subtract(1, 'month').format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [statusCode, setStatusCode] = useState(''); const [serviceCode, setServiceCode] = useState('01'); @@ -174,18 +175,17 @@ export const AllTransactionListPage = () => { const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; + const onClickToDownloadExcel = () => { - setEmailBottomSheetOn(true); + if(checkGrant(menuId, 'D')){ + setEmailBottomSheetOn(true); + } + else{ + showAlert('권한이 없습니다.'); + } }; const onRequestDownloadExcel = (userEmail?: string) => { - // tid??? 확인 필요 - /* - downloadExcel({ - // tid: tid - }).then((rs) => { - - }); - */ + }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); diff --git a/src/pages/transaction/billing/list-page.tsx b/src/pages/transaction/billing/list-page.tsx index 8b4f445..623c0d5 100644 --- a/src/pages/transaction/billing/list-page.tsx +++ b/src/pages/transaction/billing/list-page.tsx @@ -33,7 +33,11 @@ import { import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import useIntersectionObserver from '@/widgets/intersection-observer'; import { BillingDetail } from '@/entities/transaction/ui/detail/billing-detail'; +import { showAlert } from '@/widgets/show-alert'; +import { checkGrant } from '@/shared/lib/check-grant'; +/* 빌링 34 */ +const menuId = 34; export const BillingListPage = () => { const { navigate } = useNavigate(); const { t } = useTranslation(); @@ -144,7 +148,12 @@ export const BillingListPage = () => { setFilterOn(!filterOn); }; const onClickToOpenDownloadBottomSheet = () => { - setDownloadBottomSheetOn(true); + if(checkGrant(menuId, 'D')){ + setDownloadBottomSheetOn(true); + } + else{ + showAlert('권한이 없습니다.'); + } }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); @@ -154,7 +163,12 @@ export const BillingListPage = () => { setRequestStatus(val); }; const onClickToNavigate = () => { - navigate(PATHS.transaction.billing.charge); + if(checkGrant(menuId, 'X')){ + navigate(PATHS.transaction.billing.charge); + } + else{ + showAlert('권한이 없습니다.'); + } }; const onRequestDownload = (userEmail?: string) => { diff --git a/src/pages/transaction/cash-receipt/list-page.tsx b/src/pages/transaction/cash-receipt/list-page.tsx index 0a2a28a..9a59870 100644 --- a/src/pages/transaction/cash-receipt/list-page.tsx +++ b/src/pages/transaction/cash-receipt/list-page.tsx @@ -36,7 +36,11 @@ import { useCashReceiptSummaryMutation } from '@/entities/transaction/api/use-ca import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import useIntersectionObserver from '@/widgets/intersection-observer'; import { CashReceiptDetail } from '@/entities/transaction/ui/detail/cash-receit-detail'; +import { checkGrant } from '@/shared/lib/check-grant'; +import { showAlert } from '@/widgets/show-alert'; +/* 현금영수증 32 */ +const menuId = 32; export const CashReceiptListPage = () => { const { navigate } = useNavigate(); const { t, i18n } = useTranslation(); @@ -174,12 +178,12 @@ export const CashReceiptListPage = () => { setFilterOn(!filterOn); }; const onClickToDownloadExcel = () => { - // tid??? 확인 필요 - downloadExcel({ - // tid: tid - }).then((rs) => { - - }); + if(checkGrant(menuId, 'D')){ + setEmailBottomSheetOn(true); + } + else{ + showAlert('권한이 없습니다.'); + } }; const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); diff --git a/src/pages/transaction/escrow/list-page.tsx b/src/pages/transaction/escrow/list-page.tsx index 4d23f3e..e172646 100644 --- a/src/pages/transaction/escrow/list-page.tsx +++ b/src/pages/transaction/escrow/list-page.tsx @@ -32,7 +32,11 @@ import { import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; import useIntersectionObserver from '@/widgets/intersection-observer'; import { EscrowDetail } from '@/entities/transaction/ui/detail/escrow-detail'; +import { checkGrant } from '@/shared/lib/check-grant'; +import { showAlert } from '@/widgets/show-alert'; +/* 에스크로 33 */ +const menuId = 33; export const EscrowListPage = () => { const { navigate } = useNavigate(); const { t } = useTranslation(); @@ -144,7 +148,12 @@ export const EscrowListPage = () => { setFilterOn(!filterOn); }; const onClickToDownloadExcel = () => { - setEmailBottomSheetOn(true); + if(checkGrant(menuId, 'D')){ + setEmailBottomSheetOn(true); + } + else{ + showAlert('권한이 없습니다.'); + } }; const onRequestDownloadExcel = (userEmail?: string) => { // tid??? 확인 필요 diff --git a/src/shared/lib/check-grant.ts b/src/shared/lib/check-grant.ts new file mode 100644 index 0000000..56e8c55 --- /dev/null +++ b/src/shared/lib/check-grant.ts @@ -0,0 +1,10 @@ +import { useStore } from "../model/store"; + +export const checkGrant = (menuId?: number, authType: string = 'R') => { + const menuGrantsByKey = useStore.getState().UserStore.menuGrantsByKey; + const myGrants = menuGrantsByKey['' + menuId]; + if(myGrants?.includes(authType) || menuId === -1){ + return true + } + return false; +}; \ No newline at end of file diff --git a/src/widgets/navigation/footer.tsx b/src/widgets/navigation/footer.tsx index 72edfef..2a000d3 100644 --- a/src/widgets/navigation/footer.tsx +++ b/src/widgets/navigation/footer.tsx @@ -10,6 +10,7 @@ import { useAppBridge } from '@/hooks'; import { useTranslation } from 'react-i18next'; import { useStore } from '@/shared/model/store'; import { showAlert } from '../show-alert'; +import { checkGrant } from '@/shared/lib/check-grant'; export const FooterNavigation = ({ setMenuOn, @@ -18,20 +19,11 @@ export const FooterNavigation = ({ }: FooterProps) => { const { navigate } = useNavigate(); const { t } = useTranslation(); - const menuGrantsByKey = useStore.getState().UserStore.menuGrantsByKey; - + const [isFooterOn, setIsFooterOn] = useState(true); - const checkGrant = (menuId?: number) => { - const myGrants = menuGrantsByKey['' + menuId]; - if(myGrants?.includes('R') || menuId === -1){ - return true - } - return false; - }; - const onClickToNavigate = (menuId?: number, path?: string) => { - if(menuId && checkGrant(menuId)){ + if(menuId && checkGrant(menuId, 'R')){ if(!!path){ navigate(path); }