fix: correct layout interface and enhance user session management
This commit is contained in:
parent
c06a96bc1b
commit
da0d77724d
@ -27,7 +27,7 @@ export async function POST(request: Request) {
|
|||||||
const session = await getIronSession<SessionData>(cookieStore, sessionOptions)
|
const session = await getIronSession<SessionData>(cookieStore, sessionOptions)
|
||||||
console.log('start session edit!')
|
console.log('start session edit!')
|
||||||
session.userNm = user.username!
|
session.userNm = user.username!
|
||||||
// session.email = user.email!
|
session.email = user.email!
|
||||||
session.isLoggedIn = true
|
session.isLoggedIn = true
|
||||||
console.log('end session edit!')
|
console.log('end session edit!')
|
||||||
await session.save()
|
await session.save()
|
||||||
|
|||||||
@ -18,7 +18,7 @@ interface RootLayoutProps {
|
|||||||
header: ReactNode
|
header: ReactNode
|
||||||
footer: ReactNode
|
footer: ReactNode
|
||||||
floatBtn: ReactNode
|
floatBtn: ReactNode
|
||||||
}
|
}6
|
||||||
|
|
||||||
export default async function RootLayout({ children, header, footer, floatBtn }: RootLayoutProps): Promise<ReactNode> {
|
export default async function RootLayout({ children, header, footer, floatBtn }: RootLayoutProps): Promise<ReactNode> {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -3,7 +3,6 @@
|
|||||||
import { useSurveySaleTabState } from '@/store/surveySaleTabState'
|
import { useSurveySaleTabState } from '@/store/surveySaleTabState'
|
||||||
import { usePathname, useRouter, useSearchParams, useParams } from 'next/navigation'
|
import { usePathname, useRouter, useSearchParams, useParams } from 'next/navigation'
|
||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
import { usePopupController } from '@/store/popupController'
|
|
||||||
|
|
||||||
export default function NavTab() {
|
export default function NavTab() {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@ -11,6 +10,7 @@ export default function NavTab() {
|
|||||||
|
|
||||||
const searchParams = useSearchParams()
|
const searchParams = useSearchParams()
|
||||||
const id = searchParams.get('id')
|
const id = searchParams.get('id')
|
||||||
|
const isTemp = searchParams.get('isTemp')
|
||||||
|
|
||||||
const params = useParams()
|
const params = useParams()
|
||||||
const detailId = params.id
|
const detailId = params.id
|
||||||
@ -40,6 +40,10 @@ export default function NavTab() {
|
|||||||
|
|
||||||
const handleRoofInfoClick = () => {
|
const handleRoofInfoClick = () => {
|
||||||
if (id) {
|
if (id) {
|
||||||
|
if (isTemp === 'true') {
|
||||||
|
alert('基本情報が一時保存された状態です。')
|
||||||
|
return
|
||||||
|
}
|
||||||
router.push(`/survey-sale/roof-info?id=${id}`)
|
router.push(`/survey-sale/roof-info?id=${id}`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -48,8 +52,7 @@ export default function NavTab() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (pathname === '/survey-sale/basic-info') {
|
if (pathname === '/survey-sale/basic-info') {
|
||||||
// TODO: 팝업 추가
|
alert('基本情報を先に保存してください。')
|
||||||
alert('Save essential information first')
|
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,12 +16,12 @@ export default function DataTable() {
|
|||||||
const tab = searchParams.get('tab')
|
const tab = searchParams.get('tab')
|
||||||
|
|
||||||
const { surveyDetail, isLoadingSurveyDetail } = useServey(Number(id))
|
const { surveyDetail, isLoadingSurveyDetail } = useServey(Number(id))
|
||||||
const [isTemporary, setIsTemporary] = useState(false)
|
const [isTemporary, setIsTemporary] = useState(true)
|
||||||
const { setBasicInfoSelected, setRoofInfoSelected } = useSurveySaleTabState()
|
const { setBasicInfoSelected, setRoofInfoSelected } = useSurveySaleTabState()
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!surveyDetail?.representative || !surveyDetail?.store || !surveyDetail?.construction_point) {
|
if (surveyDetail?.representative && surveyDetail?.store && surveyDetail?.construction_point) {
|
||||||
setIsTemporary(true)
|
setIsTemporary(false)
|
||||||
}
|
}
|
||||||
if (tab === 'roof-info') {
|
if (tab === 'roof-info') {
|
||||||
setRoofInfoSelected()
|
setRoofInfoSelected()
|
||||||
@ -66,8 +66,9 @@ export default function DataTable() {
|
|||||||
<td>
|
<td>
|
||||||
{surveyDetail?.submission_status && surveyDetail?.submission_date ? (
|
{surveyDetail?.submission_status && surveyDetail?.submission_date ? (
|
||||||
<>
|
<>
|
||||||
|
{/* TODO: 제출한 판매점 ID 추가 필요 */}
|
||||||
<div>{new Date(surveyDetail.submission_date).toLocaleString()}</div>
|
<div>{new Date(surveyDetail.submission_date).toLocaleString()}</div>
|
||||||
<div>제출한 판매점 ID 추가 필요</div>
|
<div>販売店 ID...</div>
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
'-'
|
'-'
|
||||||
|
|||||||
@ -2,29 +2,29 @@
|
|||||||
import { useRouter } from 'next/navigation'
|
import { useRouter } from 'next/navigation'
|
||||||
import { useServey } from '@/hooks/useSurvey'
|
import { useServey } from '@/hooks/useSurvey'
|
||||||
|
|
||||||
export default function DetailButton({ isTemporary, surveyId }: { isTemporary: boolean, surveyId: number }) {
|
export default function DetailButton({ isTemporary, surveyId }: { isTemporary: boolean; surveyId: number }) {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
const { submitSurvey, deleteSurvey } = useServey(surveyId)
|
const { submitSurvey, deleteSurvey } = useServey(surveyId)
|
||||||
|
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
if (isTemporary) {
|
if (isTemporary) {
|
||||||
alert('SAVE FIRST')
|
alert('一時保存されたデータは提出できません。')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (confirm('submit?')) {
|
if (confirm('提出しますか??')) {
|
||||||
if (surveyId) {
|
if (surveyId) {
|
||||||
// TODO: 제출 페이지 추가
|
// TODO: 제출 페이지 추가
|
||||||
alert('SUBMIT POPUP')
|
alert('SUBMIT POPUP!!!!!!!!!!!')
|
||||||
await submitSurvey()
|
await submitSurvey()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const handleUpdate = () => {
|
const handleUpdate = () => {
|
||||||
router.push(`/survey-sale/basic-info?id=${surveyId}`)
|
router.push(`/survey-sale/basic-info?id=${surveyId}&isTemp=${isTemporary}`)
|
||||||
}
|
}
|
||||||
const handleDelete = async () => {
|
const handleDelete = async () => {
|
||||||
if (confirm('delete?')) {
|
if (confirm('削除しますか?')) {
|
||||||
if (surveyId) {
|
if (surveyId) {
|
||||||
await deleteSurvey()
|
await deleteSurvey()
|
||||||
router.push('/survey-sale')
|
router.push('/survey-sale')
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import { useState, useEffect } from 'react'
|
|||||||
import { useSurveySaleTabState } from '@/store/surveySaleTabState'
|
import { useSurveySaleTabState } from '@/store/surveySaleTabState'
|
||||||
import { usePopupController } from '@/store/popupController'
|
import { usePopupController } from '@/store/popupController'
|
||||||
import { useAddressStore } from '@/store/addressStore'
|
import { useAddressStore } from '@/store/addressStore'
|
||||||
|
import { useSessionStore } from '@/store/session'
|
||||||
|
|
||||||
const defaultBasicInfoForm: SurveyBasicRequest = {
|
const defaultBasicInfoForm: SurveyBasicRequest = {
|
||||||
representative: '',
|
representative: '',
|
||||||
@ -78,16 +79,17 @@ export default function BasicForm() {
|
|||||||
const handleSave = async (isTemporary: boolean) => {
|
const handleSave = async (isTemporary: boolean) => {
|
||||||
if (id) {
|
if (id) {
|
||||||
updateSurvey(basicInfoData)
|
updateSurvey(basicInfoData)
|
||||||
|
alert('保存しました。')
|
||||||
router.push(`/survey-sale/${id}?tab=basic-info`)
|
router.push(`/survey-sale/${id}?tab=basic-info`)
|
||||||
}
|
}
|
||||||
if (isTemporary) {
|
if (isTemporary) {
|
||||||
const saveId = await createSurvey(basicInfoData)
|
const saveId = await createSurvey(basicInfoData)
|
||||||
alert('save success temporary id: ' + saveId)
|
alert('一時保存されました。')
|
||||||
router.push(`/survey-sale/${saveId}?tab=basic-info`)
|
router.push(`/survey-sale/${saveId}?tab=basic-info`)
|
||||||
} else {
|
} else {
|
||||||
if (validateSurvey(basicInfoData)) {
|
if (validateSurvey(basicInfoData)) {
|
||||||
const saveId = await createSurvey(basicInfoData)
|
const saveId = await createSurvey(basicInfoData)
|
||||||
alert('save success id: ' + saveId)
|
alert('保存しました。 登録番号: ' + saveId)
|
||||||
router.push(`/survey-sale/${saveId}?tab=basic-info`)
|
router.push(`/survey-sale/${saveId}?tab=basic-info`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -109,7 +111,6 @@ export default function BasicForm() {
|
|||||||
id="representative"
|
id="representative"
|
||||||
value={basicInfoData.representative}
|
value={basicInfoData.representative}
|
||||||
onChange={(e) => handleChange('representative', e.target.value)}
|
onChange={(e) => handleChange('representative', e.target.value)}
|
||||||
required
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="data-input-form-bx">
|
<div className="data-input-form-bx">
|
||||||
@ -120,7 +121,6 @@ export default function BasicForm() {
|
|||||||
id="store"
|
id="store"
|
||||||
value={basicInfoData.store ?? ''}
|
value={basicInfoData.store ?? ''}
|
||||||
onChange={(e) => handleChange('store', e.target.value)}
|
onChange={(e) => handleChange('store', e.target.value)}
|
||||||
required
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="data-input-form-bx">
|
<div className="data-input-form-bx">
|
||||||
@ -131,7 +131,6 @@ export default function BasicForm() {
|
|||||||
id="construction_point"
|
id="construction_point"
|
||||||
value={basicInfoData.construction_point ?? ''}
|
value={basicInfoData.construction_point ?? ''}
|
||||||
onChange={(e) => handleChange('construction_point', e.target.value)}
|
onChange={(e) => handleChange('construction_point', e.target.value)}
|
||||||
required
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -73,8 +73,8 @@ export default function RoofInfoForm() {
|
|||||||
const handleNumberInput = (key: keyof SurveyDetailRequest, value: number | string) => {
|
const handleNumberInput = (key: keyof SurveyDetailRequest, value: number | string) => {
|
||||||
if (key === 'roof_slope' || key === 'open_field_plate_thickness') {
|
if (key === 'roof_slope' || key === 'open_field_plate_thickness') {
|
||||||
const stringValue = value.toString()
|
const stringValue = value.toString()
|
||||||
if (stringValue.length > 4) {
|
if (stringValue.length > 5) {
|
||||||
alert('over db size')
|
alert('保存できるサイズを超えました。')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (stringValue.includes('.')) {
|
if (stringValue.includes('.')) {
|
||||||
@ -118,17 +118,18 @@ export default function RoofInfoForm() {
|
|||||||
surveyId: Number(id),
|
surveyId: Number(id),
|
||||||
surveyDetail: updatedBasicInfoData,
|
surveyDetail: updatedBasicInfoData,
|
||||||
})
|
})
|
||||||
|
alert('調査物件を保存しました。')
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
alert(error)
|
||||||
throw new Error('failed to create survey detail: ' + error)
|
throw new Error('failed to create survey detail: ' + error)
|
||||||
}
|
}
|
||||||
alert('created successfully')
|
|
||||||
router.push(`/survey-sale`)
|
router.push(`/survey-sale`)
|
||||||
} else {
|
} else {
|
||||||
alert(emptyField + ' is required')
|
alert(emptyField + ' は必須項目です。')
|
||||||
focusOnInput(emptyField)
|
focusOnInput(emptyField)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
alert('save essential information first')
|
alert('基本情報を作成した後、屋根情報を作成することができます。')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const focusOnInput = (field: string) => {
|
const focusOnInput = (field: string) => {
|
||||||
|
|||||||
@ -215,16 +215,10 @@ export default function SelectBoxForm({
|
|||||||
name={column}
|
name={column}
|
||||||
id={column}
|
id={column}
|
||||||
onChange={handleSelectChange}
|
onChange={handleSelectChange}
|
||||||
value={
|
value={detailInfoData[column] ? detailInfoData[column] : detailInfoData[`${column}_etc`] ? 'etc' : ''}
|
||||||
detailInfoData[column]
|
|
||||||
? detailInfoData[column]
|
|
||||||
: detailInfoData[`${column}_etc`]
|
|
||||||
? 'etc'
|
|
||||||
: ''
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
<option value="" hidden>
|
<option value="" hidden>
|
||||||
선택해주세요
|
選択してください
|
||||||
</option>
|
</option>
|
||||||
{selectBoxOptions[column].map((option) => (
|
{selectBoxOptions[column].map((option) => (
|
||||||
<option key={option.id} value={option.id}>
|
<option key={option.id} value={option.id}>
|
||||||
|
|||||||
@ -2,10 +2,11 @@
|
|||||||
|
|
||||||
import LoadMoreButton from '@/components/LoadMoreButton'
|
import LoadMoreButton from '@/components/LoadMoreButton'
|
||||||
import { useServey } from '@/hooks/useSurvey'
|
import { useServey } from '@/hooks/useSurvey'
|
||||||
import { useEffect, useState, useRef } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import { useRouter } from 'next/navigation'
|
import { useRouter } from 'next/navigation'
|
||||||
import SearchForm from './SearchForm'
|
import SearchForm from './SearchForm'
|
||||||
import { useSurveyFilterStore } from '@/store/surveyFilterStore'
|
import { useSurveyFilterStore } from '@/store/surveyFilterStore'
|
||||||
|
import { useSessionStore } from '@/store/session'
|
||||||
|
|
||||||
export default function ListTable() {
|
export default function ListTable() {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@ -15,6 +16,9 @@ export default function ListTable() {
|
|||||||
const [heldSurveyList, setHeldSurveyList] = useState<typeof surveyList>([])
|
const [heldSurveyList, setHeldSurveyList] = useState<typeof surveyList>([])
|
||||||
const [hasMore, setHasMore] = useState(false)
|
const [hasMore, setHasMore] = useState(false)
|
||||||
|
|
||||||
|
const { session } = useSessionStore()
|
||||||
|
console.log('session:: ', session)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (surveyList && surveyList.length > 0) {
|
if (surveyList && surveyList.length > 0) {
|
||||||
if (offset === 0) {
|
if (offset === 0) {
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
'use client'
|
'use client'
|
||||||
|
|
||||||
import { useRouter } from 'next/navigation'
|
import { useRouter } from 'next/navigation'
|
||||||
|
|
||||||
export default function Main() {
|
export default function Main() {
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
|
||||||
|
|||||||
@ -60,6 +60,7 @@ export const SEARCH_OPTIONS_PARTNERS = [
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
export type MEMBER_TYPE = 'hwj' | 'order' | 'musubi' | 'partner'
|
||||||
export type SEARCH_OPTIONS_ENUM = (typeof SEARCH_OPTIONS)[number]['id']
|
export type SEARCH_OPTIONS_ENUM = (typeof SEARCH_OPTIONS)[number]['id']
|
||||||
export type SEARCH_OPTIONS_PARTNERS_ENUM = (typeof SEARCH_OPTIONS_PARTNERS)[number]['id']
|
export type SEARCH_OPTIONS_PARTNERS_ENUM = (typeof SEARCH_OPTIONS_PARTNERS)[number]['id']
|
||||||
export type SORT_OPTIONS_ENUM = 'created' | 'updated'
|
export type SORT_OPTIONS_ENUM = 'created' | 'updated'
|
||||||
|
|||||||
@ -9,11 +9,11 @@ export interface SessionData {
|
|||||||
storeId: null
|
storeId: null
|
||||||
userId: null
|
userId: null
|
||||||
category: null
|
category: null
|
||||||
userNm: null
|
userNm: null | string
|
||||||
userNmKana: null
|
userNmKana: null | string
|
||||||
telNo: null
|
telNo: null
|
||||||
fax: null
|
fax: null
|
||||||
email: null
|
email: null | string
|
||||||
lastEditUser: null
|
lastEditUser: null
|
||||||
storeGubun: null
|
storeGubun: null
|
||||||
pwCurr: null
|
pwCurr: null
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user