feat: add spinning when create/update/delete survey & fix rules for displaying store, contructionPoint input
This commit is contained in:
parent
5cc1cc9247
commit
799b0025c4
@ -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
|
||||
|
||||
|
||||
@ -35,13 +35,28 @@ export default function SurveySaleSubmitPopup() {
|
||||
const { getCommCode } = useCommCode()
|
||||
const { surveyDetail } = useSurvey(Number(routeId))
|
||||
|
||||
const [submitData, setSubmitData] = useState<SubmitFormData>({
|
||||
saleBase: null,
|
||||
store: '',
|
||||
sender: session?.email ?? '',
|
||||
receiver: [],
|
||||
reference: null,
|
||||
title: '[HANASYS現地調査] 調査物件が提出.',
|
||||
contents: '',
|
||||
})
|
||||
|
||||
const [commCodeList, setCommCodeList] = useState<CommCode[]>([])
|
||||
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<SubmitFormData>({
|
||||
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)
|
||||
})
|
||||
})
|
||||
|
||||
@ -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 })}
|
||||
/>
|
||||
</div>
|
||||
{(session?.role === 'Builder' || session?.role?.includes('Admin')) && (
|
||||
<div className="data-input-form-bx">
|
||||
<div className="data-input-form-tit">販売店</div>
|
||||
<input
|
||||
type="text"
|
||||
className="input-frame"
|
||||
readOnly
|
||||
value={basicInfo?.store ?? ''}
|
||||
onChange={(e) => setBasicInfo({ ...basicInfo, store: e.target.value })}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
{(session?.role === 'Builder' || session?.role === 'Partner') && (
|
||||
<div className="data-input-form-bx">
|
||||
<div className="data-input-form-tit">施工店</div>
|
||||
<input
|
||||
type="text"
|
||||
className="input-frame"
|
||||
readOnly
|
||||
value={basicInfo?.constructionPoint ?? ''}
|
||||
onChange={(e) => setBasicInfo({ ...basicInfo, constructionPoint: e.target.value })}
|
||||
/>
|
||||
</div>
|
||||
{mode === 'READ' || session?.role === 'Builder' ? (
|
||||
<>
|
||||
{storeInput(basicInfo, setBasicInfo, mode)}
|
||||
{builderInput(basicInfo, setBasicInfo, mode)}
|
||||
</>
|
||||
) : session?.role === 'Partner' ? (
|
||||
<>{builderInput(basicInfo, setBasicInfo, mode)}</>
|
||||
) : (
|
||||
<>{storeInput(basicInfo, setBasicInfo, mode)}</>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
@ -169,3 +155,33 @@ export default function BasicForm(props: { basicInfo: SurveyBasicRequest; setBas
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const storeInput = (basicInfo: SurveyBasicRequest, setBasicInfo: (basicInfo: SurveyBasicRequest) => void, mode: Mode) => {
|
||||
return (
|
||||
<div className="data-input-form-bx">
|
||||
<div className="data-input-form-tit">販売店</div>
|
||||
<input
|
||||
type="text"
|
||||
className="input-frame"
|
||||
readOnly
|
||||
value={basicInfo?.store ?? ''}
|
||||
onChange={(e) => setBasicInfo({ ...basicInfo, store: e.target.value })}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
const builderInput = (basicInfo: SurveyBasicRequest, setBasicInfo: (basicInfo: SurveyBasicRequest) => void, mode: Mode) => {
|
||||
return (
|
||||
<div className="data-input-form-bx">
|
||||
<div className="data-input-form-tit">施工店</div>
|
||||
<input
|
||||
type="text"
|
||||
className="input-frame"
|
||||
readOnly
|
||||
value={basicInfo?.constructionPoint ?? ''}
|
||||
onChange={(e) => setBasicInfo({ ...basicInfo, constructionPoint: e.target.value })}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@ -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: {
|
||||
<div className="sale-form-btn-wrap">
|
||||
<div className="btn-flex-wrap">
|
||||
<ListButton />
|
||||
<TempButton setMode={setMode} handleSave={handleSave} />
|
||||
<SaveButton handleSave={handleSave} />
|
||||
{session?.role !== 'T01' && <SubmitButton handleSubmit={handleSubmit} />}
|
||||
<TempButton setMode={setMode} handleSave={() => handleSave(true, false)} />
|
||||
<SaveButton handleSave={() => handleSave(false, false)} />
|
||||
{session?.role === 'T01' || props.data.basic.submissionStatus ? <></> : <SubmitButton handleSubmit={handleSubmit} />}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
@ -20,7 +20,7 @@ export default function DataTable() {
|
||||
const { surveyDetail, isLoadingSurveyDetail } = useSurvey(Number(id))
|
||||
|
||||
if (isLoadingSurveyDetail) {
|
||||
return <div>Loading...</div>
|
||||
return <></>
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user