Merge pull request 'feature/survey : Session builderId필드 추가' (#59) from feature/survey into dev
Reviewed-on: #59
This commit is contained in:
commit
a7ea7ce4bc
@ -13,7 +13,7 @@ interface Survey {
|
|||||||
interface SessionParams {
|
interface SessionParams {
|
||||||
role: string | null
|
role: string | null
|
||||||
storeId: string | null
|
storeId: string | null
|
||||||
builderNo: string | null
|
builderId: string | null
|
||||||
isLoggedIn: 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
|
return survey.STORE_ID === storeId && survey.CONSTRUCTION_POINT_ID === null
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkPartnerOrBuilderRole = (survey: Survey, builderNo: string | null): boolean => {
|
const checkPartnerOrBuilderRole = (survey: Survey, builderId: string | null): boolean => {
|
||||||
if (!builderNo) return false
|
if (!builderId) return false
|
||||||
return survey.CONSTRUCTION_POINT_ID === builderNo
|
return survey.CONSTRUCTION_POINT_ID === builderId
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkRole = (survey: Survey, sessionParams: SessionParams): boolean => {
|
const checkRole = (survey: Survey, sessionParams: SessionParams): boolean => {
|
||||||
@ -58,7 +58,7 @@ const checkRole = (survey: Survey, sessionParams: SessionParams): boolean => {
|
|||||||
case 'Partner':
|
case 'Partner':
|
||||||
// 2차점 시공권한 user
|
// 2차점 시공권한 user
|
||||||
case 'Builder':
|
case 'Builder':
|
||||||
return checkPartnerOrBuilderRole(survey, sessionParams.builderNo)
|
return checkPartnerOrBuilderRole(survey, sessionParams.builderId)
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
|
|||||||
const sessionParams: SessionParams = {
|
const sessionParams: SessionParams = {
|
||||||
role: searchParams.get('role'),
|
role: searchParams.get('role'),
|
||||||
storeId: searchParams.get('storeId'),
|
storeId: searchParams.get('storeId'),
|
||||||
builderNo: searchParams.get('builderNo'),
|
builderId: searchParams.get('builderId'),
|
||||||
isLoggedIn: searchParams.get('isLoggedIn'),
|
isLoggedIn: searchParams.get('isLoggedIn'),
|
||||||
}
|
}
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
@ -87,7 +87,7 @@ export async function GET(request: NextRequest, { params }: { params: Promise<{
|
|||||||
if (checkRole(survey, sessionParams)) {
|
if (checkRole(survey, sessionParams)) {
|
||||||
return NextResponse.json(survey)
|
return NextResponse.json(survey)
|
||||||
} else {
|
} else {
|
||||||
return NextResponse.json({ error: '権限がありません。' }, { status: 403 })
|
return NextResponse.json({ error: '該当物件の照会権限がありません。' }, { status: 403 })
|
||||||
}
|
}
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
console.error('Error fetching survey:', error)
|
console.error('Error fetching survey:', error)
|
||||||
|
|||||||
@ -12,7 +12,7 @@ type SearchParams = {
|
|||||||
offset?: string | null
|
offset?: string | null
|
||||||
role?: string | null // 회원권한한
|
role?: string | null // 회원권한한
|
||||||
storeId?: string | null // 판매점ID
|
storeId?: string | null // 판매점ID
|
||||||
builderNo?: string | null // 시공ID
|
builderId?: string | null // 시공ID
|
||||||
}
|
}
|
||||||
|
|
||||||
type WhereCondition = {
|
type WhereCondition = {
|
||||||
@ -90,7 +90,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => {
|
|||||||
where.OR = [
|
where.OR = [
|
||||||
{
|
{
|
||||||
// MUSUBI (시공권한 X) 같은 판매점에서 작성한 제출/제출되지 않은 매물
|
// 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 가 제출한 매물
|
// MUSUBI (시공권한 O) 가 MUSUBI 에 제출한 매물 + PARTNER 가 제출한 매물
|
||||||
@ -108,7 +108,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => {
|
|||||||
case 'Partner': // PARTNER
|
case 'Partner': // PARTNER
|
||||||
// 시공ID 같은 매물
|
// 시공ID 같은 매물
|
||||||
where.AND?.push({
|
where.AND?.push({
|
||||||
CONSTRUCTION_POINT_ID: { equals: params.builderNo },
|
CONSTRUCTION_POINT_ID: { equals: params.builderId },
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
|
|
||||||
@ -146,12 +146,12 @@ export async function GET(request: Request) {
|
|||||||
const params: SearchParams = {
|
const params: SearchParams = {
|
||||||
keyword: searchParams.get('keyword'),
|
keyword: searchParams.get('keyword'),
|
||||||
searchOption: searchParams.get('searchOption'),
|
searchOption: searchParams.get('searchOption'),
|
||||||
isMySurvey: searchParams.get('isMySurvey'), //representativeId
|
isMySurvey: searchParams.get('isMySurvey'),
|
||||||
sort: searchParams.get('sort'),
|
sort: searchParams.get('sort'),
|
||||||
offset: searchParams.get('offset'),
|
offset: searchParams.get('offset'),
|
||||||
role: searchParams.get('role'),
|
role: searchParams.get('role'),
|
||||||
storeId: searchParams.get('storeId'), //storeId
|
storeId: searchParams.get('storeId'),
|
||||||
builderNo: searchParams.get('builderNo'),
|
builderId: searchParams.get('builderId'),
|
||||||
}
|
}
|
||||||
|
|
||||||
// 검색 조건 구성
|
// 검색 조건 구성
|
||||||
@ -172,7 +172,6 @@ export async function GET(request: Request) {
|
|||||||
if (Object.keys(roleCondition).length > 0) {
|
if (Object.keys(roleCondition).length > 0) {
|
||||||
where.AND.push(roleCondition)
|
where.AND.push(roleCondition)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 페이지네이션 데이터 조회
|
// 페이지네이션 데이터 조회
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const surveys = await prisma.SD_SURVEY_SALES_BASIC_INFO.findMany({
|
const surveys = await prisma.SD_SURVEY_SALES_BASIC_INFO.findMany({
|
||||||
|
|||||||
@ -38,7 +38,7 @@ export default function Detail() {
|
|||||||
<tr>
|
<tr>
|
||||||
<th>顧客名</th>
|
<th>顧客名</th>
|
||||||
<td>
|
<td>
|
||||||
{session?.userNm} {session?.builderNo ? `[${session?.builderNo}]` : ''}
|
{session?.userNm} {session?.builderNm ? `[${session?.builderNm}]` : ''}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import { useSpinnerStore } from '@/store/spinnerStore'
|
|||||||
export default function SurveySaleDownloadPdf() {
|
export default function SurveySaleDownloadPdf() {
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
const id = params.id
|
const id = params.id
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id))
|
const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id))
|
||||||
const { setIsShow } = useSpinnerStore()
|
const { setIsShow } = useSpinnerStore()
|
||||||
@ -49,6 +50,7 @@ export default function SurveySaleDownloadPdf() {
|
|||||||
|
|
||||||
generatePDF(targetRef, options).then(() => {
|
generatePDF(targetRef, options).then(() => {
|
||||||
setIsShow(false)
|
setIsShow(false)
|
||||||
|
router.replace(`/survey-sale/${id}`)
|
||||||
alert('PDFの生成が完了しました。 ポップアップウィンドウからダウンロードしてください。')
|
alert('PDFの生成が完了しました。 ポップアップウィンドウからダウンロードしてください。')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -78,10 +78,10 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) {
|
|||||||
return false
|
return false
|
||||||
case 'Admin':
|
case 'Admin':
|
||||||
case 'Admin_Sub':
|
case 'Admin_Sub':
|
||||||
return session.storeNm === basicData.store && session.builderNo === basicData.constructionPointId
|
return session.storeNm === basicData.store && session.builderId === basicData.constructionPointId
|
||||||
case 'Builder':
|
case 'Builder':
|
||||||
case 'Partner':
|
case 'Partner':
|
||||||
return session.builderNo === basicData.constructionPointId
|
return session.builderId === basicData.constructionPointId
|
||||||
default:
|
default:
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,7 +85,7 @@ export default function DetailForm() {
|
|||||||
store: session?.storeNm ?? null,
|
store: session?.storeNm ?? null,
|
||||||
storeId: session?.storeId ?? null,
|
storeId: session?.storeId ?? null,
|
||||||
constructionPoint: session?.builderNm ?? null,
|
constructionPoint: session?.builderNm ?? null,
|
||||||
constructionPointId: session?.builderNo ?? null,
|
constructionPointId: session?.builderId ?? null,
|
||||||
}))
|
}))
|
||||||
const [roofInfoData, setRoofInfoData] = useState<SurveyDetailRequest>(roofInfoForm)
|
const [roofInfoData, setRoofInfoData] = useState<SurveyDetailRequest>(roofInfoForm)
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ export default function DetailForm() {
|
|||||||
store: session.storeNm ?? null,
|
store: session.storeNm ?? null,
|
||||||
storeId: session.storeId ?? null,
|
storeId: session.storeId ?? null,
|
||||||
constructionPoint: session.builderNm ?? null,
|
constructionPoint: session.builderNm ?? null,
|
||||||
constructionPointId: session.builderNo ?? null,
|
constructionPointId: session.builderId ?? null,
|
||||||
}))
|
}))
|
||||||
}, [session?.isLoggedIn])
|
}, [session?.isLoggedIn])
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,11 @@ export default function ListTable() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!session.isLoggedIn || isLoadingSurveyList) return
|
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 ('count' in surveyList && surveyList.count > 0) {
|
||||||
if (offset > 0) {
|
if (offset > 0) {
|
||||||
setHeldSurveyList((prev) => [...prev, ...surveyList.data])
|
setHeldSurveyList((prev) => [...prev, ...surveyList.data])
|
||||||
|
|||||||
@ -78,13 +78,44 @@ export function useSurvey(id?: number): {
|
|||||||
const { axiosInstance } = useAxios()
|
const { axiosInstance } = useAxios()
|
||||||
const router = useRouter()
|
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 {
|
const {
|
||||||
data: surveyListData,
|
data: surveyListData,
|
||||||
isLoading: isLoadingSurveyList,
|
isLoading: isLoadingSurveyList,
|
||||||
refetch: refetchSurveyList,
|
refetch: refetchSurveyList,
|
||||||
} = useQuery({
|
} = 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 () => {
|
queryFn: async () => {
|
||||||
|
if (!checkSession()) {
|
||||||
|
router.replace('/')
|
||||||
|
return { data: [], count: 0 }
|
||||||
|
}
|
||||||
const resp = await axiosInstance(null).get<{ data: SurveyBasicInfo[]; count: number }>('/api/survey-sales', {
|
const resp = await axiosInstance(null).get<{ data: SurveyBasicInfo[]; count: number }>('/api/survey-sales', {
|
||||||
params: {
|
params: {
|
||||||
keyword,
|
keyword,
|
||||||
@ -93,7 +124,7 @@ export function useSurvey(id?: number): {
|
|||||||
sort,
|
sort,
|
||||||
offset,
|
offset,
|
||||||
storeId: session?.storeId,
|
storeId: session?.storeId,
|
||||||
builderNo: session?.builderNo,
|
builderId: session?.builderId,
|
||||||
role: session?.role,
|
role: session?.role,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -111,13 +142,17 @@ export function useSurvey(id?: number): {
|
|||||||
const { data: surveyDetail, isLoading: isLoadingSurveyDetail } = useQuery({
|
const { data: surveyDetail, isLoading: isLoadingSurveyDetail } = useQuery({
|
||||||
queryKey: ['survey', id],
|
queryKey: ['survey', id],
|
||||||
queryFn: async () => {
|
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 {
|
try {
|
||||||
const resp = await axiosInstance(null).get<SurveyBasicInfo>(`/api/survey-sales/${id}`, {
|
const resp = await axiosInstance(null).get<SurveyBasicInfo>(`/api/survey-sales/${id}`, {
|
||||||
params: {
|
params: {
|
||||||
role: session?.role,
|
role: session?.role,
|
||||||
storeId: session?.storeId,
|
storeId: session?.storeId,
|
||||||
builderNo: session?.builderNo,
|
builderId: session?.builderId,
|
||||||
isLoggedIn: session?.isLoggedIn,
|
isLoggedIn: session?.isLoggedIn,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user