이용내역 권한 관련

This commit is contained in:
focp212@naver.com
2025-11-05 15:26:14 +09:00
parent ad28ccd82f
commit fb889a9f2c
14 changed files with 119 additions and 102 deletions

View File

@@ -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{

View File

@@ -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{

View File

@@ -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<Array<UserFavorite>>([]);
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){

View File

@@ -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,

View File

@@ -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<Array<UserFavorite>>([]);
const [menuIds, setMenuIds] = useState<Array<number | undefined>>([]);
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);

View File

@@ -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 (
<Dialog
afterLeave={ unmount }
open={ isOpen }
onClose={ close }
onConfirmClick={ () => onClickToNavigate(PATHS.transaction.allTransaction.cancel) }
// onConfirmClick={ () => callCancelInfo() }
message={ msg }
buttonLabel={[t('common.cancel'), t('common.confirm')]}
/>
);
});
overlay.open(({
isOpen,
close,
unmount
}) => {
return (
<Dialog
afterLeave={ unmount }
open={ isOpen }
onClose={ close }
onConfirmClick={ () => onClickToNavigate(PATHS.transaction.allTransaction.cancel) }
// onConfirmClick={ () => callCancelInfo() }
message={ msg }
buttonLabel={[t('common.cancel'), t('common.confirm')]}
/>
);
});
}
else{
showAlert('권한이 없습니다.');
}
};
const onClickToClose = () => {

View File

@@ -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 (

View File

@@ -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 = () => {

View File

@@ -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<string>('');
const [dateCl, setDateCl] = useState<string>('');
const [goodsName, setGoodsName] = useState<string>('');
// 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<string>('');
const [serviceCode, setServiceCode] = useState<string>('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);

View File

@@ -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) => {

View File

@@ -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);

View File

@@ -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??? 확인 필요

View File

@@ -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;
};

View File

@@ -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<boolean>(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);
}