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,
},
})