'use client' import { useSurveySaleTabState } from '@/store/surveySaleTabState' import { useServey } from '@/hooks/useSurvey' import { SurveyDetailRequest } from '@/types/Survey' import { useRouter, useSearchParams } from 'next/navigation' import { useEffect, useState } from 'react' import MultiCheckEtc from './etcProcess/MultiCheckEtc' import SelectBoxEtc from './etcProcess/SelectBoxEtc' import RadioEtc from './etcProcess/RadioEtc' const defaultDetailInfoForm: SurveyDetailRequest = { CONTRACT_CAPACITY: null, RETAIL_COMPANY: null, SUPPLEMENTARY_FACILITIES: null, SUPPLEMENTARY_FACILITIES_ETC: null, INSTALLATION_SYSTEM: null, INSTALLATION_SYSTEM_ETC: null, CONSTRUCTION_YEAR: null, CONSTRUCTION_YEAR_ETC: null, ROOF_MATERIAL: null, ROOF_MATERIAL_ETC: null, ROOF_SHAPE: null, ROOF_SHAPE_ETC: null, ROOF_SLOPE: null, HOUSE_STRUCTURE: '1', HOUSE_STRUCTURE_ETC: null, RAFTER_MATERIAL: '1', RAFTER_MATERIAL_ETC: null, RAFTER_SIZE: null, RAFTER_SIZE_ETC: null, RAFTER_PITCH: null, RAFTER_PITCH_ETC: null, RAFTER_DIRECTION: '1', OPEN_FIELD_PLATE_KIND: null, OPEN_FIELD_PLATE_KIND_ETC: null, OPEN_FIELD_PLATE_THICKNESS: null, LEAK_TRACE: false, WATERPROOF_MATERIAL: null, WATERPROOF_MATERIAL_ETC: null, INSULATION_PRESENCE: '1', INSULATION_PRESENCE_ETC: null, STRUCTURE_ORDER: null, STRUCTURE_ORDER_ETC: null, INSTALLATION_AVAILABILITY: null, INSTALLATION_AVAILABILITY_ETC: null, MEMO: null, } export default function RoofInfoForm() { const { setRoofInfoSelected } = useSurveySaleTabState() useEffect(() => { setRoofInfoSelected() }, []) const router = useRouter() const searchParams = useSearchParams() const id = searchParams.get('id') const { surveyDetail, createSurveyDetail, validateSurveyDetail } = useServey(Number(id)) const [detailInfoData, setDetailInfoData] = useState(defaultDetailInfoForm) useEffect(() => { if (surveyDetail?.DETAIL_INFO) { const { ID, UPT_DT, REG_DT, BASIC_INFO_ID, ...rest } = surveyDetail.DETAIL_INFO setDetailInfoData(rest) } }, [surveyDetail]) const handleNumberInput = (key: keyof SurveyDetailRequest, value: number | string) => { if (key === 'ROOF_SLOPE' || key === 'OPEN_FIELD_PLATE_THICKNESS') { const stringValue = value.toString() if (stringValue.length > 5) { alert('保存できるサイズを超えました。') return } if (stringValue.includes('.')) { const decimalPlaces = stringValue.split('.')[1].length if (decimalPlaces > 1) { alert('小数点以下1桁までしか許されません。') return } } setDetailInfoData({ ...detailInfoData, [key]: value.toString() }) } else { setDetailInfoData({ ...detailInfoData, [key]: value.toString() }) } } const handleTextInput = (key: keyof SurveyDetailRequest, value: string) => { setDetailInfoData({ ...detailInfoData, [key]: value || null }) } const handleBooleanInput = (key: keyof SurveyDetailRequest, value: boolean) => { setDetailInfoData({ ...detailInfoData, [key]: value }) } const handleUnitInput = (value: string) => { const numericValue = detailInfoData.CONTRACT_CAPACITY?.replace(/[^0-9.]/g, '') || '' setDetailInfoData({ ...detailInfoData, CONTRACT_CAPACITY: numericValue ? `${numericValue} ${value}` : value, }) } const handleSave = async () => { console.log(detailInfoData) if (id) { const emptyField = validateSurveyDetail(detailInfoData) if (emptyField.trim() === '') { const updatedBasicInfoData = { DETAIL_INFO: detailInfoData, } try { createSurveyDetail({ surveyId: Number(id), surveyDetail: updatedBasicInfoData, }) alert('調査物件を保存しました。') } catch (error) { alert(error) throw new Error('failed to create survey detail: ' + error) } router.push(`/survey-sale`) } else { alert(emptyField + ' は必須項目です。') focusOnInput(emptyField) } } else { alert('基本情報を作成した後、屋根情報を作成することができます。') } } const focusOnInput = (field: string) => { const input = document.getElementById(field) if (input) { input.focus() } } return ( <>
電気関係
{/* 전기계약 용량 - contract_capacity */}
電気契約容量
handleNumberInput('CONTRACT_CAPACITY', e.target.value)} />
{/* 전기 소매 회사 - retail_company */}
電気小売会社
handleTextInput('RETAIL_COMPANY', e.target.value)} />
{/* 전기 부대 설비 - supplementary_facilities */}
{/* 설치 희망 시스템 - installation_system */}
屋根関係
{/* 건축 연수 - construction_year */} {/* 지붕재 - roof_material */}
{/* 지붕 모양 - roof_shape */} {/* 지붕 경사도 - roof_slope */}
屋根の斜面
handleNumberInput('ROOF_SLOPE', e.target.value)} />
{/* 주택 구조 - house_structure */} {/* 서까래 재질 - rafter_material */} {/* 서까래 크기 - rafter_size */} {/* 서까래 피치 - rafter_pitch */} {/* 서까래 방향 - rafter_direction */}
垂木の方向
handleNumberInput('RAFTER_DIRECTION', Number(e.target.value))} checked={detailInfoData.RAFTER_DIRECTION === '1'} />
handleNumberInput('RAFTER_DIRECTION', Number(e.target.value))} checked={detailInfoData.RAFTER_DIRECTION === '2'} />
{/* 노지판 종류 - open_field_plate_kind */} {/* 노지판 두께 - open_field_plate_thickness */}
路地板厚※小幅板を選択した場合, 厚さ. 小幅板間の間隔寸法を記載
handleNumberInput('OPEN_FIELD_PLATE_THICKNESS', e.target.value)} /> mm
{/* 누수 흔적 - leak_trace */}
水漏れの痕跡
handleBooleanInput('LEAK_TRACE', true)} />
handleBooleanInput('LEAK_TRACE', false)} />
{/* 방수재 종류 - waterproof_material */} {/* 단열재 유무 - insulation_presence */} {/* 노지판 종류 - open_field_plate_kind */} {/* 설치 가능 여부 - installation_availability */} {/* 메모 - memo */}
メモ
) }