diff --git a/src/app/api/survey-sales/[id]/route.ts b/src/app/api/survey-sales/[id]/route.ts index 6cc460a..d70471a 100644 --- a/src/app/api/survey-sales/[id]/route.ts +++ b/src/app/api/survey-sales/[id]/route.ts @@ -13,7 +13,7 @@ interface Survey { interface SessionParams { role: string | null storeId: string | null - builderNo: string | null + builderId: string | null isLoggedIn: string | null } @@ -37,9 +37,9 @@ const checkAdminSubRole = (survey: Survey, storeId: string | null): boolean => { return survey.STORE_ID === storeId && survey.CONSTRUCTION_POINT_ID === null } -const checkPartnerOrBuilderRole = (survey: Survey, builderNo: string | null): boolean => { - if (!builderNo) return false - return survey.CONSTRUCTION_POINT_ID === builderNo +const checkPartnerOrBuilderRole = (survey: Survey, builderId: string | null): boolean => { + if (!builderId) return false + return survey.CONSTRUCTION_POINT_ID === builderId } const checkRole = (survey: Survey, sessionParams: SessionParams): boolean => { @@ -58,7 +58,7 @@ const checkRole = (survey: Survey, sessionParams: SessionParams): boolean => { case 'Partner': // 2차점 시공권한 user case 'Builder': - return checkPartnerOrBuilderRole(survey, sessionParams.builderNo) + return checkPartnerOrBuilderRole(survey, sessionParams.builderId) default: return false } @@ -72,7 +72,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{ const sessionParams: SessionParams = { role: searchParams.get('role'), storeId: searchParams.get('storeId'), - builderNo: searchParams.get('builderNo'), + builderId: searchParams.get('builderId'), isLoggedIn: searchParams.get('isLoggedIn'), } // @ts-ignore @@ -87,7 +87,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{ if (checkRole(survey, sessionParams)) { return NextResponse.json(survey) } else { - return NextResponse.json({ error: '権限がありません。' }, { status: 403 }) + return NextResponse.json({ error: '該当物件の照会権限がありません。' }, { status: 403 }) } } catch (error: any) { console.error('Error fetching survey:', error) diff --git a/src/app/api/survey-sales/route.ts b/src/app/api/survey-sales/route.ts index 6d01bb0..39c8f02 100644 --- a/src/app/api/survey-sales/route.ts +++ b/src/app/api/survey-sales/route.ts @@ -12,7 +12,7 @@ type SearchParams = { offset?: string | null role?: string | null // 회원권한한 storeId?: string | null // 판매점ID - builderNo?: string | null // 시공ID + builderId?: string | null // 시공ID } type WhereCondition = { @@ -90,7 +90,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { where.OR = [ { // MUSUBI (시공권한 X) 같은 판매점에서 작성한 제출/제출되지 않은 매물 - AND: [{ STORE_ID: { equals: params.storeId } }, { CONSTRUCTION_POINT_ID: { equals: params.builderNo } }], + AND: [{ STORE_ID: { equals: params.storeId } }, { CONSTRUCTION_POINT_ID: { equals: params.builderId } }], }, { // MUSUBI (시공권한 O) 가 MUSUBI 에 제출한 매물 + PARTNER 가 제출한 매물 @@ -108,7 +108,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { case 'Partner': // PARTNER // 시공ID 같은 매물 where.AND?.push({ - CONSTRUCTION_POINT_ID: { equals: params.builderNo }, + CONSTRUCTION_POINT_ID: { equals: params.builderId }, }) break @@ -146,12 +146,12 @@ export async function GET(request: Request) { const params: SearchParams = { keyword: searchParams.get('keyword'), searchOption: searchParams.get('searchOption'), - isMySurvey: searchParams.get('isMySurvey'), //representativeId + isMySurvey: searchParams.get('isMySurvey'), sort: searchParams.get('sort'), offset: searchParams.get('offset'), role: searchParams.get('role'), - storeId: searchParams.get('storeId'), //storeId - builderNo: searchParams.get('builderNo'), + storeId: searchParams.get('storeId'), + builderId: searchParams.get('builderId'), } // 검색 조건 구성 @@ -172,7 +172,6 @@ export async function GET(request: Request) { if (Object.keys(roleCondition).length > 0) { where.AND.push(roleCondition) } - // 페이지네이션 데이터 조회 //@ts-ignore const surveys = await prisma.SD_SURVEY_SALES_BASIC_INFO.findMany({ diff --git a/src/components/inquiry/Detail.tsx b/src/components/inquiry/Detail.tsx index 0aae351..f01ec54 100644 --- a/src/components/inquiry/Detail.tsx +++ b/src/components/inquiry/Detail.tsx @@ -38,7 +38,7 @@ export default function Detail() { 顧客名 - {session?.userNm} {session?.builderNo ? `[${session?.builderNo}]` : ''} + {session?.userNm} {session?.builderNm ? `[${session?.builderNm}]` : ''} diff --git a/src/components/pdf/SurveySaleDownloadPdf.tsx b/src/components/pdf/SurveySaleDownloadPdf.tsx index b987f04..71d2922 100644 --- a/src/components/pdf/SurveySaleDownloadPdf.tsx +++ b/src/components/pdf/SurveySaleDownloadPdf.tsx @@ -10,6 +10,7 @@ import { useSpinnerStore } from '@/store/spinnerStore' export default function SurveySaleDownloadPdf() { const params = useParams() const id = params.id + const router = useRouter() const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id)) const { setIsShow } = useSpinnerStore() @@ -49,6 +50,7 @@ export default function SurveySaleDownloadPdf() { generatePDF(targetRef, options).then(() => { setIsShow(false) + router.replace(`/survey-sale/${id}`) alert('PDFの生成が完了しました。 ポップアップウィンドウからダウンロードしてください。') }) } diff --git a/src/components/survey-sale/detail/ButtonForm.tsx b/src/components/survey-sale/detail/ButtonForm.tsx index a6236f0..2088629 100644 --- a/src/components/survey-sale/detail/ButtonForm.tsx +++ b/src/components/survey-sale/detail/ButtonForm.tsx @@ -78,10 +78,10 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { return false case 'Admin': case 'Admin_Sub': - return session.storeNm === basicData.store && session.builderNo === basicData.constructionPointId + return session.storeNm === basicData.store && session.builderId === basicData.constructionPointId case 'Builder': case 'Partner': - return session.builderNo === basicData.constructionPointId + return session.builderId === basicData.constructionPointId default: return false } diff --git a/src/components/survey-sale/detail/DetailForm.tsx b/src/components/survey-sale/detail/DetailForm.tsx index 2cadf6c..8fd1ead 100644 --- a/src/components/survey-sale/detail/DetailForm.tsx +++ b/src/components/survey-sale/detail/DetailForm.tsx @@ -85,7 +85,7 @@ export default function DetailForm() { store: session?.storeNm ?? null, storeId: session?.storeId ?? null, constructionPoint: session?.builderNm ?? null, - constructionPointId: session?.builderNo ?? null, + constructionPointId: session?.builderId ?? null, })) const [roofInfoData, setRoofInfoData] = useState(roofInfoForm) @@ -99,7 +99,7 @@ export default function DetailForm() { store: session.storeNm ?? null, storeId: session.storeId ?? null, constructionPoint: session.builderNm ?? null, - constructionPointId: session.builderNo ?? null, + constructionPointId: session.builderId ?? null, })) }, [session?.isLoggedIn]) diff --git a/src/components/survey-sale/list/ListTable.tsx b/src/components/survey-sale/list/ListTable.tsx index b1bc137..50030ac 100644 --- a/src/components/survey-sale/list/ListTable.tsx +++ b/src/components/survey-sale/list/ListTable.tsx @@ -28,6 +28,11 @@ export default function ListTable() { useEffect(() => { if (!session.isLoggedIn || isLoadingSurveyList) return + // if ('status' in surveyList && surveyList.status === 403) { + // alert('権限がありません。') + // router.push('/survey-sale') + // return + // } if ('count' in surveyList && surveyList.count > 0) { if (offset > 0) { setHeldSurveyList((prev) => [...prev, ...surveyList.data]) @@ -54,7 +59,7 @@ export default function ListTable() { {heldSurveyList.map((survey) => (
  • handleDetailClick(survey.id)}>
    -
    +
    {survey.srlNo}
    {survey.investigationDate}
    diff --git a/src/hooks/useSurvey.ts b/src/hooks/useSurvey.ts index 9abb7b8..abbbb74 100644 --- a/src/hooks/useSurvey.ts +++ b/src/hooks/useSurvey.ts @@ -78,13 +78,44 @@ export function useSurvey(id?: number): { const { axiosInstance } = useAxios() const router = useRouter() + const checkSession = () => { + if (session?.isLoggedIn) { + switch (session?.role) { + case 'T01': + case 'Admin': + case 'Admin_Sub': + if (session?.storeId === null) { + alert('販売店IDがありません。') + return false + } + return true + case 'Builder': + case 'Partner': + if (session?.builderId === null) { + alert('施工店IDがありません。') + return false + } + return true + default: + alert('権限が間違っています。') + return false + } + } + alert('ログインしていません。') + return false + } + const { data: surveyListData, isLoading: isLoadingSurveyList, refetch: refetchSurveyList, } = useQuery({ - queryKey: ['survey', 'list', keyword, searchOption, isMySurvey, sort, offset, session?.storeNm, session?.builderNo, session?.role], + queryKey: ['survey', 'list', keyword, searchOption, isMySurvey, sort, offset, session?.storeNm, session?.builderId, session?.role], queryFn: async () => { + if (!checkSession()) { + router.replace('/') + return { data: [], count: 0 } + } const resp = await axiosInstance(null).get<{ data: SurveyBasicInfo[]; count: number }>('/api/survey-sales', { params: { keyword, @@ -93,7 +124,7 @@ export function useSurvey(id?: number): { sort, offset, storeId: session?.storeId, - builderNo: session?.builderNo, + builderId: session?.builderId, role: session?.role, }, }) @@ -111,13 +142,17 @@ export function useSurvey(id?: number): { const { data: surveyDetail, isLoading: isLoadingSurveyDetail } = useQuery({ queryKey: ['survey', id], queryFn: async () => { - if (!session?.isLoggedIn || id === 0 || id === undefined) return null + if (!checkSession()) { + router.replace('/survey-sale') + return null + } + if (id === 0 || id === undefined) return null try { const resp = await axiosInstance(null).get(`/api/survey-sales/${id}`, { params: { role: session?.role, storeId: session?.storeId, - builderNo: session?.builderNo, + builderId: session?.builderId, isLoggedIn: session?.isLoggedIn, }, })