From 799b0025c48e9715cb0885289b56fb76704f5c2d Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Fri, 30 May 2025 13:58:41 +0900 Subject: [PATCH] feat: add spinning when create/update/delete survey & fix rules for displaying store, contructionPoint input --- src/app/api/survey-sales/route.ts | 12 ++-- .../popup/SurveySaleSubmitPopup.tsx | 28 ++++---- .../survey-sale/detail/BasicForm.tsx | 64 ++++++++++++------- .../survey-sale/detail/ButtonForm.tsx | 36 ++++++++--- .../survey-sale/detail/DataTable.tsx | 2 +- 5 files changed, 92 insertions(+), 50 deletions(-) diff --git a/src/app/api/survey-sales/route.ts b/src/app/api/survey-sales/route.ts index a5d60c8..5aee157 100644 --- a/src/app/api/survey-sales/route.ts +++ b/src/app/api/survey-sales/route.ts @@ -90,9 +90,9 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { // MUSUBI (시공권한 X) 같은 판매점에서 작성한 제출/제출되지 않은 매물 AND: [ { STORE_ID: { equals: params.store } }, - { - OR: [{ CONSTRUCTION_POINT: { equals: null } }, { CONSTRUCTION_POINT: { equals: '' } }], - }, + // { + // OR: [{ CONSTRUCTION_POINT: { equals: null } }, { CONSTRUCTION_POINT: { equals: '' } }], + // }, ], }, { @@ -109,10 +109,10 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => { case 'Builder': // MUSUBI (시공권한 O) case 'Partner': // PARTNER - // 시공점이 있고 STORE_ID가 시공ID와 같은 매물 + // 시공점이 있고 STORE_ID 가 시공ID와 같은 매물 where.AND?.push({ - CONSTRUCTION_POINT: { not: null }, - STORE_ID: { equals: params.builderNo }, + // CONSTRUCTION_POINT: { not: null }, + CONSTRUCTION_POINT: { equals: params.builderNo }, }) break diff --git a/src/components/popup/SurveySaleSubmitPopup.tsx b/src/components/popup/SurveySaleSubmitPopup.tsx index f4387e7..8617035 100644 --- a/src/components/popup/SurveySaleSubmitPopup.tsx +++ b/src/components/popup/SurveySaleSubmitPopup.tsx @@ -35,13 +35,28 @@ export default function SurveySaleSubmitPopup() { const { getCommCode } = useCommCode() const { surveyDetail } = useSurvey(Number(routeId)) + const [submitData, setSubmitData] = useState({ + saleBase: null, + store: '', + sender: session?.email ?? '', + receiver: [], + reference: null, + title: '[HANASYS現地調査] 調査物件が提出.', + contents: '', + }) + const [commCodeList, setCommCodeList] = useState([]) useEffect(() => { - if (session?.isLoggedIn && session?.role === 'Admin') { + if (!session?.isLoggedIn) return + if (session?.role === 'Admin') { getCommCode('SALES_OFFICE_CD').then((codes) => { setCommCodeList(codes) }) } + setSubmitData({ + ...submitData, + sender: session?.email ?? '', + }) }, [session]) const FORM_FIELDS: FormField[] = [ @@ -54,16 +69,6 @@ export default function SurveySaleSubmitPopup() { { id: 'contents', name: '内容', required: false }, ] - const [submitData, setSubmitData] = useState({ - saleBase: null, - store: '', - sender: session?.email ?? '', - receiver: [], - reference: null, - title: '[HANASYS現地調査] 調査物件が提出.', - contents: '', - }) - const { submitSurvey, isSubmittingSurvey } = useSurvey(Number(routeId)) const handleInputChange = (field: keyof SubmitFormData, value: string) => { @@ -108,6 +113,7 @@ export default function SurveySaleSubmitPopup() { }) .finally(() => { setIsShow(false) + submitSurvey({ targetId: submitData.store }) popupController.setSurveySaleSubmitPopup(false) }) }) diff --git a/src/components/survey-sale/detail/BasicForm.tsx b/src/components/survey-sale/detail/BasicForm.tsx index 99814b1..202d4a2 100644 --- a/src/components/survey-sale/detail/BasicForm.tsx +++ b/src/components/survey-sale/detail/BasicForm.tsx @@ -29,7 +29,7 @@ export default function BasicForm(props: { basicInfo: SurveyBasicRequest; setBas representative: session.userNm ?? '', representativeId: session.userId ?? null, store: session.role === 'Partner' ? null : session.storeNm ?? null, - storeId: session.role === 'Partner' || session.role === 'Builder' ? session.builderNo : session.storeId ?? null, + storeId: session.role === 'Partner' ? session.builderNo : session.storeId ?? null, constructionPoint: session.builderNo ?? null, }) } @@ -67,29 +67,15 @@ export default function BasicForm(props: { basicInfo: SurveyBasicRequest; setBas onChange={(e) => setBasicInfo({ ...basicInfo, representative: e.target.value })} /> - {(session?.role === 'Builder' || session?.role?.includes('Admin')) && ( -
-
販売店
- setBasicInfo({ ...basicInfo, store: e.target.value })} - /> -
- )} - {(session?.role === 'Builder' || session?.role === 'Partner') && ( -
-
施工店
- setBasicInfo({ ...basicInfo, constructionPoint: e.target.value })} - /> -
+ {mode === 'READ' || session?.role === 'Builder' ? ( + <> + {storeInput(basicInfo, setBasicInfo, mode)} + {builderInput(basicInfo, setBasicInfo, mode)} + + ) : session?.role === 'Partner' ? ( + <>{builderInput(basicInfo, setBasicInfo, mode)} + ) : ( + <>{storeInput(basicInfo, setBasicInfo, mode)} )} @@ -169,3 +155,33 @@ export default function BasicForm(props: { basicInfo: SurveyBasicRequest; setBas ) } + +const storeInput = (basicInfo: SurveyBasicRequest, setBasicInfo: (basicInfo: SurveyBasicRequest) => void, mode: Mode) => { + return ( +
+
販売店
+ setBasicInfo({ ...basicInfo, store: e.target.value })} + /> +
+ ) +} + +const builderInput = (basicInfo: SurveyBasicRequest, setBasicInfo: (basicInfo: SurveyBasicRequest) => void, mode: Mode) => { + return ( +
+
施工店
+ setBasicInfo({ ...basicInfo, constructionPoint: e.target.value })} + /> +
+ ) +} diff --git a/src/components/survey-sale/detail/ButtonForm.tsx b/src/components/survey-sale/detail/ButtonForm.tsx index db66b53..79fa557 100644 --- a/src/components/survey-sale/detail/ButtonForm.tsx +++ b/src/components/survey-sale/detail/ButtonForm.tsx @@ -6,6 +6,7 @@ import { useEffect, useState } from 'react' import { useParams, useRouter, useSearchParams } from 'next/navigation' import { requiredFields, useSurvey } from '@/hooks/useSurvey' import { usePopupController } from '@/store/popupController' +import { useSpinnerStore } from '@/store/spinnerStore' export default function ButtonForm(props: { mode: Mode @@ -29,6 +30,8 @@ export default function ButtonForm(props: { ...props.data.basic, detailInfo: props.data.roof, }) + + const { setIsShow } = useSpinnerStore() // -------------------------------------------------------------- // 권한 @@ -75,7 +78,16 @@ export default function ButtonForm(props: { const { deleteSurvey, updateSurvey, isDeletingSurvey, isUpdatingSurvey } = useSurvey(Number(id)) const { validateSurveyDetail, createSurvey, isCreatingSurvey } = useSurvey() - const handleSave = (isTemporary: boolean, isSubmitProcess = false) => { + useEffect(() => { + if (isCreatingSurvey || isUpdatingSurvey || isDeletingSurvey) { + setIsShow(true) + } + if (!isCreatingSurvey && !isUpdatingSurvey && !isDeletingSurvey) { + setIsShow(false) + } + }, [isCreatingSurvey, isUpdatingSurvey, isDeletingSurvey]) + + const handleSave = (isTemporary: boolean, isSubmitProcess: boolean) => { const emptyField = validateSurveyDetail(props.data.roof) const hasEmptyField = emptyField?.trim() !== '' @@ -89,14 +101,18 @@ export default function ButtonForm(props: { const tempSaveProcess = async () => { if (idParam) { await updateSurvey({ survey: saveData, isTemporary: true }) - router.push(`/survey-sale/${idParam}`) + if (!isUpdatingSurvey) { + router.push(`/survey-sale/${idParam}`) + } } else { const updatedData = { ...saveData, srlNo: '一時保存', } const id = await createSurvey(updatedData) - router.push(`/survey-sale/${id}`) + if (!isCreatingSurvey) { + router.push(`/survey-sale/${id}`) + } } alert('一時保存されました。') } @@ -112,10 +128,14 @@ export default function ButtonForm(props: { if (emptyField?.trim() === '') { if (idParam) { await updateSurvey({ survey: saveData, isTemporary: false, storeId: session.storeId ?? '' }) - router.push(`/survey-sale/${idParam}`) + if (!isUpdatingSurvey) { + router.push(`/survey-sale/${idParam}`) + } } else { const id = await createSurvey(saveData) - router.push(`/survey-sale/${id}`) + if (!isCreatingSurvey) { + router.push(`/survey-sale/${id}`) + } } if (isSubmitProcess) { if (!isCreatingSurvey && !isUpdatingSurvey) { @@ -196,9 +216,9 @@ export default function ButtonForm(props: {
- - - {session?.role !== 'T01' && } + handleSave(true, false)} /> + handleSave(false, false)} /> + {session?.role === 'T01' || props.data.basic.submissionStatus ? <> : }
)} diff --git a/src/components/survey-sale/detail/DataTable.tsx b/src/components/survey-sale/detail/DataTable.tsx index 93d314e..966d099 100644 --- a/src/components/survey-sale/detail/DataTable.tsx +++ b/src/components/survey-sale/detail/DataTable.tsx @@ -20,7 +20,7 @@ export default function DataTable() { const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id)) if (isLoadingSurveyDetail) { - return
Loading...
+ return <> } return (