Compare commits
10 Commits
7fbaf4a1e0
...
4ed8a78192
| Author | SHA1 | Date | |
|---|---|---|---|
| 4ed8a78192 | |||
| 39645affa6 | |||
| 53966a16e1 | |||
| 1022ef7023 | |||
| 05f0abb194 | |||
| 78beaa7b8a | |||
| 14ba63e2b5 | |||
| dcb7bc2ff4 | |||
| c2e76fa764 | |||
| 0bcb0f58e5 |
@ -5,8 +5,8 @@ NEXT_PUBLIC_RUN_MODE=development
|
|||||||
NEXT_PUBLIC_API_URL=http://localhost:3000
|
NEXT_PUBLIC_API_URL=http://localhost:3000
|
||||||
|
|
||||||
#qsp 로그인 api
|
#qsp 로그인 api
|
||||||
NEXT_PUBLIC_QSP_API_URL=http://1.248.227.176:8120
|
# NEXT_PUBLIC_QSP_API_URL=http://1.248.227.176:8120
|
||||||
# NEXT_PUBLIC_QSP_API_URL=https://jp-dev.qsalesplatform.com
|
NEXT_PUBLIC_QSP_API_URL=https://jp-dev.qsalesplatform.com
|
||||||
|
|
||||||
#1:1문의 api
|
#1:1문의 api
|
||||||
NEXT_PUBLIC_INQUIRY_API_URL=https://jp-dev.qsalesplatform.com
|
NEXT_PUBLIC_INQUIRY_API_URL=https://jp-dev.qsalesplatform.com
|
||||||
|
|||||||
@ -5,8 +5,8 @@ NEXT_PUBLIC_RUN_MODE=local
|
|||||||
NEXT_PUBLIC_API_URL=http://localhost:3000
|
NEXT_PUBLIC_API_URL=http://localhost:3000
|
||||||
|
|
||||||
#qsp 로그인 api
|
#qsp 로그인 api
|
||||||
NEXT_PUBLIC_QSP_API_URL=http://1.248.227.176:8120
|
# NEXT_PUBLIC_QSP_API_URL=http://1.248.227.176:8120
|
||||||
# NEXT_PUBLIC_QSP_API_URL=https://jp-dev.qsalesplatform.com
|
NEXT_PUBLIC_QSP_API_URL=https://jp-dev.qsalesplatform.com
|
||||||
|
|
||||||
#1:1문의 api
|
#1:1문의 api
|
||||||
NEXT_PUBLIC_INQUIRY_API_URL=https://jp-dev.qsalesplatform.com
|
NEXT_PUBLIC_INQUIRY_API_URL=https://jp-dev.qsalesplatform.com
|
||||||
|
|||||||
@ -123,7 +123,7 @@ session에 있는 role 키로 구분한다
|
|||||||
session.role === 'Builder'
|
session.role === 'Builder'
|
||||||
- teshg44 / 1234 -> 시공사\
|
- teshg44 / 1234 -> 시공사\
|
||||||
session.role === 'Builder'
|
session.role === 'Builder'
|
||||||
- partners -> Q.Partners 계정\
|
- isogai@yanegiken.co.jp / password -> Q.Partners 계정\
|
||||||
session.role === 'Partner'
|
session.role === 'Partner'
|
||||||
- 이외의 경우 -> 굳이 체크할 필요 없어보임\
|
- 이외의 경우 -> 굳이 체크할 필요 없어보임\
|
||||||
session.role === 'User'
|
session.role === 'User'
|
||||||
|
|||||||
71
diagram/layout.md
Normal file
71
diagram/layout.md
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
# 루트 레이아웃 구조
|
||||||
|
|
||||||
|
이 문서는 애플리케이션의 모든 페이지에서 공통으로 사용되는 루트 레이아웃(`src/app/layout.tsx`)의 구조를 설명합니다.
|
||||||
|
|
||||||
|
## 컴포넌트 계층 구조
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[RootLayout] --> B[ReactQueryProviders]
|
||||||
|
B --> C[EdgeProvider]
|
||||||
|
C --> D[HTML Structure]
|
||||||
|
|
||||||
|
D --> E[Header]
|
||||||
|
D --> F[Children/Main Content]
|
||||||
|
D --> G[Footer]
|
||||||
|
D --> H[Float Button]
|
||||||
|
D --> I[PopupController]
|
||||||
|
|
||||||
|
J[Session Management] --> |Session Data| C
|
||||||
|
|
||||||
|
subgraph Providers
|
||||||
|
B
|
||||||
|
C
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Layout Components
|
||||||
|
E
|
||||||
|
F
|
||||||
|
G
|
||||||
|
H
|
||||||
|
I
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Session
|
||||||
|
J
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
## 주요 컴포넌트
|
||||||
|
|
||||||
|
### 프로바이더
|
||||||
|
|
||||||
|
- **ReactQueryProviders**: React Query 상태 관리를 위한 최상위 프로바이더
|
||||||
|
- **EdgeProvider**: 세션 데이터를 관리하고 애플리케이션에 제공
|
||||||
|
|
||||||
|
### 레이아웃 컴포넌트
|
||||||
|
|
||||||
|
- **Header**: 공통 헤더 컴포넌트
|
||||||
|
- **Children**: 메인 콘텐츠 영역 (페이지별 콘텐츠)
|
||||||
|
- **Footer**: 공통 푸터 컴포넌트
|
||||||
|
- **Float Button**: 플로팅 액션 버튼
|
||||||
|
- **PopupController**: 팝업/모달 상태 관리
|
||||||
|
|
||||||
|
### 세션 관리
|
||||||
|
|
||||||
|
- `iron-session`을 사용한 서버 사이드 세션 관리
|
||||||
|
- 세션 데이터는 EdgeProvider를 통해 전역적으로 접근 가능
|
||||||
|
|
||||||
|
## 데이터 흐름
|
||||||
|
|
||||||
|
1. 세션 데이터는 서버 사이드에서 관리됨
|
||||||
|
2. 세션 데이터는 EdgeProvider로 전달됨
|
||||||
|
3. 모든 레이아웃 컴포넌트는 세션 컨텍스트에 접근 가능
|
||||||
|
4. React Query는 데이터 페칭과 캐싱 기능을 제공
|
||||||
|
|
||||||
|
## 구현 세부사항
|
||||||
|
|
||||||
|
- 서버 컴포넌트로 구현
|
||||||
|
- Next.js App Router 구조 사용
|
||||||
|
- 서버 사이드 렌더링 지원
|
||||||
|
- 하이드레이션 억제를 통한 성능 최적화
|
||||||
@ -13,6 +13,7 @@ model SD_SURVEY_SALES_BASIC_INFO {
|
|||||||
REPRESENTATIVE String @db.NVarChar(200)
|
REPRESENTATIVE String @db.NVarChar(200)
|
||||||
STORE String? @db.NVarChar(200)
|
STORE String? @db.NVarChar(200)
|
||||||
CONSTRUCTION_POINT String? @db.NVarChar(200)
|
CONSTRUCTION_POINT String? @db.NVarChar(200)
|
||||||
|
CONSTRUCTION_POINT_ID String? @db.NVarChar(200)
|
||||||
INVESTIGATION_DATE String? @db.NVarChar(10)
|
INVESTIGATION_DATE String? @db.NVarChar(10)
|
||||||
BUILDING_NAME String? @db.NVarChar(200)
|
BUILDING_NAME String? @db.NVarChar(200)
|
||||||
CUSTOMER_NAME String? @db.NVarChar(200)
|
CUSTOMER_NAME String? @db.NVarChar(200)
|
||||||
@ -22,6 +23,7 @@ model SD_SURVEY_SALES_BASIC_INFO {
|
|||||||
SUBMISSION_STATUS Boolean @default(false)
|
SUBMISSION_STATUS Boolean @default(false)
|
||||||
SUBMISSION_DATE DateTime? @db.Date
|
SUBMISSION_DATE DateTime? @db.Date
|
||||||
SUBMISSION_TARGET_ID String? @db.NVarChar(200)
|
SUBMISSION_TARGET_ID String? @db.NVarChar(200)
|
||||||
|
SUBMISSION_TARGET_NM String? @db.NVarChar(200)
|
||||||
REG_DT DateTime @default(now())
|
REG_DT DateTime @default(now())
|
||||||
UPT_DT DateTime @updatedAt
|
UPT_DT DateTime @updatedAt
|
||||||
REPRESENTATIVE_ID String? @db.NVarChar(100)
|
REPRESENTATIVE_ID String? @db.NVarChar(100)
|
||||||
|
|||||||
@ -57,6 +57,7 @@ export async function POST(request: Request) {
|
|||||||
session.storeLvl = result.data.data.storeLvl
|
session.storeLvl = result.data.data.storeLvl
|
||||||
session.custCd = result.data.data.custCd
|
session.custCd = result.data.data.custCd
|
||||||
session.builderNo = result.data.data.builderNo
|
session.builderNo = result.data.data.builderNo
|
||||||
|
session.builderNm = ''
|
||||||
session.isLoggedIn = true
|
session.isLoggedIn = true
|
||||||
|
|
||||||
if (result.data.data.userId === 'T01') {
|
if (result.data.data.userId === 'T01') {
|
||||||
@ -104,6 +105,7 @@ export async function POST(request: Request) {
|
|||||||
STORE_LVL: result.data.data.storeLvl,
|
STORE_LVL: result.data.data.storeLvl,
|
||||||
CUST_CD: result.data.data.custCd,
|
CUST_CD: result.data.data.custCd,
|
||||||
BUILDER_NO: result.data.data.builderNo,
|
BUILDER_NO: result.data.data.builderNo,
|
||||||
|
BUILDER_NM: '',
|
||||||
IS_LOGGED_IN: true,
|
IS_LOGGED_IN: true,
|
||||||
ROLE: '',
|
ROLE: '',
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,6 +85,7 @@ export async function POST(request: Request) {
|
|||||||
session.storeLvl = null
|
session.storeLvl = null
|
||||||
session.custCd = null
|
session.custCd = null
|
||||||
session.builderNo = data[0].user_seko_id
|
session.builderNo = data[0].user_seko_id
|
||||||
|
session.builderNm = data[0].supplier_name
|
||||||
session.isLoggedIn = true
|
session.isLoggedIn = true
|
||||||
session.role = 'Partner'
|
session.role = 'Partner'
|
||||||
|
|
||||||
@ -123,6 +124,7 @@ export async function POST(request: Request) {
|
|||||||
STORE_LVL: null,
|
STORE_LVL: null,
|
||||||
CUST_CD: null,
|
CUST_CD: null,
|
||||||
BUILDER_NO: data[0].user_seko_id,
|
BUILDER_NO: data[0].user_seko_id,
|
||||||
|
BUILDER_NM: data[0].supplier_name,
|
||||||
IS_LOGGED_IN: true,
|
IS_LOGGED_IN: true,
|
||||||
ROLE: 'Partner',
|
ROLE: 'Partner',
|
||||||
}
|
}
|
||||||
|
|||||||
@ -124,6 +124,7 @@ export async function PATCH(request: NextRequest, { params }: { params: Promise<
|
|||||||
SUBMISSION_STATUS: true,
|
SUBMISSION_STATUS: true,
|
||||||
SUBMISSION_DATE: new Date(),
|
SUBMISSION_DATE: new Date(),
|
||||||
SUBMISSION_TARGET_ID: body.targetId,
|
SUBMISSION_TARGET_ID: body.targetId,
|
||||||
|
SUBMISSION_TARGET_NM: body.targetNm,
|
||||||
UPT_DT: new Date(),
|
UPT_DT: new Date(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@ -112,7 +112,7 @@ const createMemberRoleCondition = (params: SearchParams): WhereCondition => {
|
|||||||
// 시공점이 있고 STORE_ID 가 시공ID와 같은 매물
|
// 시공점이 있고 STORE_ID 가 시공ID와 같은 매물
|
||||||
where.AND?.push({
|
where.AND?.push({
|
||||||
// CONSTRUCTION_POINT: { not: null },
|
// CONSTRUCTION_POINT: { not: null },
|
||||||
CONSTRUCTION_POINT: { equals: params.builderNo },
|
CONSTRUCTION_POINT_ID: { equals: params.builderNo },
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,8 @@ import { useSpinnerStore } from '@/store/spinnerStore'
|
|||||||
|
|
||||||
interface SubmitFormData {
|
interface SubmitFormData {
|
||||||
saleBase: string | null
|
saleBase: string | null
|
||||||
store: string
|
targetId: string
|
||||||
|
targetNm: string
|
||||||
sender: string
|
sender: string
|
||||||
receiver: string[] | string
|
receiver: string[] | string
|
||||||
reference: string | null
|
reference: string | null
|
||||||
@ -37,7 +38,8 @@ export default function SurveySaleSubmitPopup() {
|
|||||||
|
|
||||||
const [submitData, setSubmitData] = useState<SubmitFormData>({
|
const [submitData, setSubmitData] = useState<SubmitFormData>({
|
||||||
saleBase: null,
|
saleBase: null,
|
||||||
store: '',
|
targetId: session?.role === 'Builder' ? surveyDetail?.storeId ?? '' : '',
|
||||||
|
targetNm: session?.role === 'Builder' ? surveyDetail?.store ?? '' : '',
|
||||||
sender: session?.email ?? '',
|
sender: session?.email ?? '',
|
||||||
receiver: [],
|
receiver: [],
|
||||||
reference: null,
|
reference: null,
|
||||||
@ -63,7 +65,7 @@ export default function SurveySaleSubmitPopup() {
|
|||||||
const FORM_FIELDS: FormField[] = [
|
const FORM_FIELDS: FormField[] = [
|
||||||
{ id: 'sender', name: '発送者', required: true },
|
{ id: 'sender', name: '発送者', required: true },
|
||||||
{ id: 'saleBase', name: '提出地点選択', required: session?.role === 'Admin' },
|
{ id: 'saleBase', name: '提出地点選択', required: session?.role === 'Admin' },
|
||||||
{ id: 'store', name: '提出販売店', required: true },
|
{ id: 'targetNm', name: '提出販売店', required: session?.role !== 'Admin' },
|
||||||
{ id: 'receiver', name: '受信者', required: true },
|
{ id: 'receiver', name: '受信者', required: true },
|
||||||
{ id: 'reference', name: '参考', required: false },
|
{ id: 'reference', name: '参考', required: false },
|
||||||
{ id: 'title', name: 'タイトル', required: true },
|
{ id: 'title', name: 'タイトル', required: true },
|
||||||
@ -103,7 +105,7 @@ export default function SurveySaleSubmitPopup() {
|
|||||||
})
|
})
|
||||||
.then(() => {
|
.then(() => {
|
||||||
if (!isSubmittingSurvey) {
|
if (!isSubmittingSurvey) {
|
||||||
submitSurvey({ targetId: submitData.store })
|
submitSurvey({ targetId: submitData.targetId, targetNm: submitData.targetNm })
|
||||||
alert('提出が完了しました。')
|
alert('提出が完了しました。')
|
||||||
popupController.setSurveySaleSubmitPopup(false)
|
popupController.setSurveySaleSubmitPopup(false)
|
||||||
}
|
}
|
||||||
@ -114,7 +116,6 @@ export default function SurveySaleSubmitPopup() {
|
|||||||
})
|
})
|
||||||
.finally(() => {
|
.finally(() => {
|
||||||
setIsShow(false)
|
setIsShow(false)
|
||||||
submitSurvey({ targetId: submitData.store })
|
|
||||||
popupController.setSurveySaleSubmitPopup(false)
|
popupController.setSurveySaleSubmitPopup(false)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -133,6 +134,9 @@ export default function SurveySaleSubmitPopup() {
|
|||||||
if (field.id === 'saleBase' && session?.role !== 'Admin') {
|
if (field.id === 'saleBase' && session?.role !== 'Admin') {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
if (field.id === 'targetNm' && session?.role === 'Admin') {
|
||||||
|
return null
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<div className="data-input-form-bx" key={field.id}>
|
<div className="data-input-form-bx" key={field.id}>
|
||||||
<div className="data-input-form-tit">
|
<div className="data-input-form-tit">
|
||||||
|
|||||||
@ -20,17 +20,16 @@ export default function BasicForm(props: { basicInfo: SurveyBasicRequest; setBas
|
|||||||
setBasicInfoSelected()
|
setBasicInfoSelected()
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
// 시공권한 user(Builder), Partner 계정은 조사매물 등록 할 때 STORE_ID에 시공점ID가 들어감
|
|
||||||
// 권한 별 목록 필터링 시 시공권한 user(Builder), Partner는 시공점ID가 같은 것들만 조회
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (session?.isLoggedIn) {
|
if (session?.isLoggedIn) {
|
||||||
setBasicInfo({
|
setBasicInfo({
|
||||||
...basicInfo,
|
...basicInfo,
|
||||||
representative: session.userNm ?? '',
|
representative: session.userNm ?? '',
|
||||||
representativeId: session.userId ?? null,
|
representativeId: session.userId ?? null,
|
||||||
store: session.role === 'Partner' ? null : session.storeNm ?? null,
|
store: session.storeNm ?? null,
|
||||||
storeId: session.role === 'Partner' ? session.builderNo : session.storeId ?? null,
|
storeId: session.storeId ?? null,
|
||||||
constructionPoint: session.builderNo ?? null,
|
constructionPoint: session.builderNm ?? null,
|
||||||
|
constructionPointId: session.builderNo ?? null,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if (addressData) {
|
if (addressData) {
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import { useEffect, useState } from 'react'
|
|||||||
import { useParams, useRouter, useSearchParams } from 'next/navigation'
|
import { useParams, useRouter, useSearchParams } from 'next/navigation'
|
||||||
import { requiredFields, useSurvey } from '@/hooks/useSurvey'
|
import { requiredFields, useSurvey } from '@/hooks/useSurvey'
|
||||||
import { usePopupController } from '@/store/popupController'
|
import { usePopupController } from '@/store/popupController'
|
||||||
import { useSpinnerStore } from '@/store/spinnerStore'
|
|
||||||
|
|
||||||
export default function ButtonForm(props: {
|
export default function ButtonForm(props: {
|
||||||
mode: Mode
|
mode: Mode
|
||||||
@ -31,7 +30,6 @@ export default function ButtonForm(props: {
|
|||||||
detailInfo: props.data.roof,
|
detailInfo: props.data.roof,
|
||||||
})
|
})
|
||||||
|
|
||||||
const { setIsShow } = useSpinnerStore()
|
|
||||||
// --------------------------------------------------------------
|
// --------------------------------------------------------------
|
||||||
// 권한
|
// 권한
|
||||||
|
|
||||||
@ -78,14 +76,6 @@ export default function ButtonForm(props: {
|
|||||||
const { deleteSurvey, updateSurvey, isDeletingSurvey, isUpdatingSurvey } = useSurvey(Number(id))
|
const { deleteSurvey, updateSurvey, isDeletingSurvey, isUpdatingSurvey } = useSurvey(Number(id))
|
||||||
const { validateSurveyDetail, createSurvey, isCreatingSurvey } = useSurvey()
|
const { validateSurveyDetail, createSurvey, isCreatingSurvey } = useSurvey()
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (isCreatingSurvey || isUpdatingSurvey || isDeletingSurvey) {
|
|
||||||
setIsShow(true)
|
|
||||||
}
|
|
||||||
if (!isCreatingSurvey && !isUpdatingSurvey && !isDeletingSurvey) {
|
|
||||||
setIsShow(false)
|
|
||||||
}
|
|
||||||
}, [isCreatingSurvey, isUpdatingSurvey, isDeletingSurvey])
|
|
||||||
|
|
||||||
const handleSave = (isTemporary: boolean, isSubmitProcess: boolean) => {
|
const handleSave = (isTemporary: boolean, isSubmitProcess: boolean) => {
|
||||||
const emptyField = validateSurveyDetail(props.data.roof)
|
const emptyField = validateSurveyDetail(props.data.roof)
|
||||||
@ -139,7 +129,7 @@ export default function ButtonForm(props: {
|
|||||||
}
|
}
|
||||||
if (isSubmitProcess) {
|
if (isSubmitProcess) {
|
||||||
if (!isCreatingSurvey && !isUpdatingSurvey) {
|
if (!isCreatingSurvey && !isUpdatingSurvey) {
|
||||||
popupController.setSurveySaleSubmitPopup(true)
|
await popupController.setSurveySaleSubmitPopup(true)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
alert('保存されました。')
|
alert('保存されました。')
|
||||||
|
|||||||
@ -57,7 +57,7 @@ export default function DataTable() {
|
|||||||
<>
|
<>
|
||||||
<div>{new Date(surveyDetail.submissionDate).toLocaleString()}</div>
|
<div>{new Date(surveyDetail.submissionDate).toLocaleString()}</div>
|
||||||
<div>
|
<div>
|
||||||
({surveyDetail.submissionTargetId} - {surveyDetail.submissionTargetId})
|
({surveyDetail.submissionTargetNm} - {surveyDetail.submissionTargetId})
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
|
|||||||
@ -52,6 +52,7 @@ const basicInfoForm: SurveyBasicRequest = {
|
|||||||
store: null,
|
store: null,
|
||||||
storeId: null,
|
storeId: null,
|
||||||
constructionPoint: null,
|
constructionPoint: null,
|
||||||
|
constructionPointId: null,
|
||||||
investigationDate: new Date().toLocaleDateString('en-CA'),
|
investigationDate: new Date().toLocaleDateString('en-CA'),
|
||||||
buildingName: null,
|
buildingName: null,
|
||||||
customerName: null,
|
customerName: null,
|
||||||
@ -61,6 +62,7 @@ const basicInfoForm: SurveyBasicRequest = {
|
|||||||
submissionStatus: false,
|
submissionStatus: false,
|
||||||
submissionDate: null,
|
submissionDate: null,
|
||||||
submissionTargetId: null,
|
submissionTargetId: null,
|
||||||
|
submissionTargetNm: null,
|
||||||
srlNo: null,
|
srlNo: null,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,21 +3,19 @@ import Config from '@/config/config.export'
|
|||||||
import { useSpinnerStore } from '@/store/spinnerStore'
|
import { useSpinnerStore } from '@/store/spinnerStore'
|
||||||
|
|
||||||
export function useAxios() {
|
export function useAxios() {
|
||||||
// const { setIsShow } = useSpinnerStore()
|
|
||||||
|
|
||||||
const requestHandler = (config: InternalAxiosRequestConfig) => {
|
const requestHandler = (config: InternalAxiosRequestConfig) => {
|
||||||
// setIsShow(true)
|
useSpinnerStore.getState().setIsShow(true)
|
||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
|
|
||||||
const responseHandler = (response: AxiosResponse) => {
|
const responseHandler = (response: AxiosResponse) => {
|
||||||
// setIsShow(false)
|
useSpinnerStore.getState().setIsShow(false)
|
||||||
response.data = transferResponse(response)
|
response.data = transferResponse(response)
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
const errorHandler = (error: any) => {
|
const errorHandler = (error: any) => {
|
||||||
// setIsShow(false)
|
useSpinnerStore.getState().setIsShow(false)
|
||||||
return Promise.reject(error)
|
return Promise.reject(error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -66,7 +66,7 @@ export function useSurvey(id?: number): {
|
|||||||
createSurvey: (survey: SurveyRegistRequest) => Promise<number>
|
createSurvey: (survey: SurveyRegistRequest) => Promise<number>
|
||||||
updateSurvey: ({ survey, isTemporary, storeId }: { survey: SurveyRegistRequest; isTemporary: boolean; storeId?: string }) => void
|
updateSurvey: ({ survey, isTemporary, storeId }: { survey: SurveyRegistRequest; isTemporary: boolean; storeId?: string }) => void
|
||||||
deleteSurvey: () => Promise<boolean>
|
deleteSurvey: () => Promise<boolean>
|
||||||
submitSurvey: (params: { saveId?: number; targetId?: string; storeId?: string; srlNo?: string }) => void
|
submitSurvey: (params: { saveId?: number; targetId?: string; targetNm?: string; storeId?: string; srlNo?: string }) => void
|
||||||
validateSurveyDetail: (surveyDetail: SurveyDetailRequest) => string
|
validateSurveyDetail: (surveyDetail: SurveyDetailRequest) => string
|
||||||
getZipCode: (zipCode: string) => Promise<ZipCode[] | null>
|
getZipCode: (zipCode: string) => Promise<ZipCode[] | null>
|
||||||
refetchSurveyList: () => void
|
refetchSurveyList: () => void
|
||||||
@ -163,10 +163,11 @@ export function useSurvey(id?: number): {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const { mutateAsync: submitSurvey, isPending: isSubmittingSurvey } = useMutation({
|
const { mutateAsync: submitSurvey, isPending: isSubmittingSurvey } = useMutation({
|
||||||
mutationFn: async ({ targetId, storeId, srlNo }: { targetId?: string; storeId?: string; srlNo?: string }) => {
|
mutationFn: async ({ targetId, targetNm, storeId, srlNo }: { targetId?: string; targetNm?: string; storeId?: string; srlNo?: string }) => {
|
||||||
if (!id) throw new Error('id is required')
|
if (!id) throw new Error('id is required')
|
||||||
const resp = await axiosInstance(null).patch<boolean>(`/api/survey-sales/${id}`, {
|
const resp = await axiosInstance(null).patch<boolean>(`/api/survey-sales/${id}`, {
|
||||||
targetId,
|
targetId,
|
||||||
|
targetNm,
|
||||||
storeId,
|
storeId,
|
||||||
srlNo,
|
srlNo,
|
||||||
role: session?.role ?? null,
|
role: session?.role ?? null,
|
||||||
|
|||||||
@ -11,6 +11,7 @@ export default function ReactQueryProviders({ children }: React.PropsWithChildre
|
|||||||
defaultOptions: {
|
defaultOptions: {
|
||||||
queries: {
|
queries: {
|
||||||
staleTime: 60 * 1000,
|
staleTime: 60 * 1000,
|
||||||
|
retry: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
|
|||||||
@ -27,6 +27,7 @@ export interface SessionData {
|
|||||||
storeLvl: null
|
storeLvl: null
|
||||||
custCd: null
|
custCd: null
|
||||||
builderNo: null
|
builderNo: null
|
||||||
|
builderNm: null | string
|
||||||
isLoggedIn: boolean
|
isLoggedIn: boolean
|
||||||
role: string | null
|
role: string | null
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ export type SurveyBasicInfo = {
|
|||||||
store: string | null
|
store: string | null
|
||||||
storeId: string | null
|
storeId: string | null
|
||||||
constructionPoint: string | null
|
constructionPoint: string | null
|
||||||
|
constructionPointId: string | null
|
||||||
investigationDate: string | null
|
investigationDate: string | null
|
||||||
buildingName: string | null
|
buildingName: string | null
|
||||||
customerName: string | null
|
customerName: string | null
|
||||||
@ -17,6 +18,7 @@ export type SurveyBasicInfo = {
|
|||||||
regDt: Date
|
regDt: Date
|
||||||
uptDt: Date
|
uptDt: Date
|
||||||
submissionTargetId: string | null
|
submissionTargetId: string | null
|
||||||
|
submissionTargetNm: string | null
|
||||||
srlNo: string | null //판매점IDyyMMdd000
|
srlNo: string | null //판매점IDyyMMdd000
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,6 +70,7 @@ export type SurveyBasicRequest = {
|
|||||||
store: string | null
|
store: string | null
|
||||||
storeId: string | null
|
storeId: string | null
|
||||||
constructionPoint: string | null
|
constructionPoint: string | null
|
||||||
|
constructionPointId: string | null
|
||||||
investigationDate: string | null
|
investigationDate: string | null
|
||||||
buildingName: string | null
|
buildingName: string | null
|
||||||
customerName: string | null
|
customerName: string | null
|
||||||
@ -77,6 +80,7 @@ export type SurveyBasicRequest = {
|
|||||||
submissionStatus: boolean
|
submissionStatus: boolean
|
||||||
submissionDate: string | null
|
submissionDate: string | null
|
||||||
submissionTargetId: string | null
|
submissionTargetId: string | null
|
||||||
|
submissionTargetNm: string | null
|
||||||
srlNo: string | null //판매점IDyyMMdd000
|
srlNo: string | null //판매점IDyyMMdd000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user