diff --git a/.env.development b/.env.development index f8aa1483..468efc67 100644 --- a/.env.development +++ b/.env.development @@ -2,6 +2,7 @@ NEXT_PUBLIC_TEST="테스트변수입니다. development" NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080" # NEXT_PUBLIC_API_SERVER_PATH="http://localhost:8080" +# NEXT_PUBLIC_API_SERVER_PATH="http://172.30.1.60:8080" DATABASE_URL="sqlserver://mssql.devgrr.kr:1433;database=qcast;user=qcast;password=Qwertqaz12345;trustServerCertificate=true" diff --git a/Nextjs 14 컴포넌트에 대해서....pdf b/docs/Nextjs 14 컴포넌트에 대해서....pdf similarity index 100% rename from Nextjs 14 컴포넌트에 대해서....pdf rename to docs/Nextjs 14 컴포넌트에 대해서....pdf diff --git a/Qcast coding convention.pdf b/docs/Qcast coding convention.pdf similarity index 100% rename from Qcast coding convention.pdf rename to docs/Qcast coding convention.pdf diff --git a/Qcast development guilde.pdf b/docs/Qcast development guilde.pdf similarity index 100% rename from Qcast development guilde.pdf rename to docs/Qcast development guilde.pdf diff --git a/docs/메세지 처리 가이드.pdf b/docs/메세지 처리 가이드.pdf new file mode 100644 index 00000000..b6f316e1 Binary files /dev/null and b/docs/메세지 처리 가이드.pdf differ diff --git a/src/app/[locale]/join/complete/page.jsx b/src/app/[locale]/join/complete/page.jsx index 3c5c61c3..3f9fc462 100644 --- a/src/app/[locale]/join/complete/page.jsx +++ b/src/app/[locale]/join/complete/page.jsx @@ -1,17 +1,17 @@ 'use client' -import { useI18n } from '@/locales/client' +import { useMessage } from '@/hooks/useMessage' export default function CompletePage() { - const t = useI18n() + const { getMessage } = useMessage() return ( <>
-

{t('join.complete.title')}

-
{t('join.complete.contents')}
+

{getMessage('join.complete.title')}

+
{getMessage('join.complete.contents')}
- {t('join.complete.email_comment')} : {t('join.complete.email')} + {getMessage('join.complete.email_comment')} : {getMessage('join.complete.email')}
diff --git a/src/app/[locale]/layout.js b/src/app/[locale]/layout.js index 334cfbb3..28847d66 100644 --- a/src/app/[locale]/layout.js +++ b/src/app/[locale]/layout.js @@ -1,13 +1,34 @@ 'use client' -import { useCurrentLocale } from '@/locales/client' +import { useEffect } from 'react' +import { useRecoilState, useRecoilValue } from 'recoil' +import { appMessageStore, globalLocaleState } from '@/store/localeAtom' import { LocaleProvider } from './LocaleProvider' +import { useCurrentLocale } from '@/locales/client' import ServerError from './error' import { ErrorBoundary } from 'next/dist/client/components/error-boundary' import '@/styles/common.scss' +import KO from '@/locales/ko.json' +import JA from '@/locales/ja.json' + export default function LocaleLayout({ children }) { const locale = useCurrentLocale() + const globalLocale = useRecoilValue(globalLocaleState) + const [appMessageState, setAppMessageState] = useRecoilState(appMessageStore) + + useEffect(() => { + console.log(globalLocale) + console.log(sessionStorage.getItem('hi')) + console.log(Object.keys(appMessageState).length) + if (Object.keys(appMessageState).length === 0) { + if (globalLocale === 'ko') { + setAppMessageState(KO) + } else { + setAppMessageState(JA) + } + } + }, []) return ( <> diff --git a/src/components/Playground.jsx b/src/components/Playground.jsx index da470ab3..f0a71e44 100644 --- a/src/components/Playground.jsx +++ b/src/components/Playground.jsx @@ -119,7 +119,7 @@ export default function Playground() {

Sass 테스트입니다.

-
{getMessage('hi')}
+
test']) }}>

React ColorPicker

diff --git a/src/components/auth/Join.jsx b/src/components/auth/Join.jsx index 971c30a0..03fc8ecb 100644 --- a/src/components/auth/Join.jsx +++ b/src/components/auth/Join.jsx @@ -2,10 +2,10 @@ import { post } from '@/lib/Axios' import { redirect } from 'next/navigation' -import { useI18n } from '@/locales/client' +import { useMessage } from '@/hooks/useMessage' export default function Join() { - const t = useI18n() + const { getMessage } = useMessage() const joinProcess = async (formData) => { const param = { @@ -48,11 +48,11 @@ export default function Join() { return (
-

{t('join.title')}

+

{getMessage('join.title')}

- ● {t('join.sub1.title')} (*{t('common.require')}) {t('join.sub1.comment')} + ● {getMessage('join.sub1.title')} (*{getMessage('common.require')}) {getMessage('join.sub1.comment')}
@@ -61,21 +61,21 @@ export default function Join() { - + - + - + - + @@ -140,7 +140,7 @@ export default function Join() {
{t('join.sub1.storeQcastNm')} *{getMessage('join.sub1.storeQcastNm')} *
{t('join.sub1.storeQcastNmKana')} *{getMessage('join.sub1.storeQcastNmKana')} *
- {t('join.sub1.postCd')}/{t('join.sub1.addr')} * + {getMessage('join.sub1.postCd')}/{getMessage('join.sub1.addr')} *
{t('join.sub1.telNo')} *{getMessage('join.sub1.telNo')} *
{t('join.sub1.fax')} *{getMessage('join.sub1.fax')} *
- ● {t('join.sub2.title')} (*{t('common.require')}) + ● {getMessage('join.sub2.title')} (*{getMessage('common.require')})
@@ -149,7 +149,7 @@ export default function Join() { - + - + - + - + - + - + - + @@ -233,7 +233,7 @@ export default function Join() {
{t('join.sub2.userNm')} *{getMessage('join.sub2.userNm')} *
{t('join.sub2.userNmKana')} *{getMessage('join.sub2.userNmKana')} *
{t('join.sub2.userId')} *{getMessage('join.sub2.userId')} *
{t('join.sub2.email')} *{getMessage('join.sub2.email')} *
{t('join.sub2.telNo')} *{getMessage('join.sub2.telNo')} *
{t('join.sub2.fax')} *{getMessage('join.sub2.fax')} *
{t('join.sub2.category')}{getMessage('join.sub2.category')}
- ● {t('join.sub3.title')} (*{t('common.require')}) + ● {getMessage('join.sub3.title')} (*{getMessage('common.require')})
@@ -242,14 +242,14 @@ export default function Join() { - + - + - + - + @@ -312,7 +312,7 @@ export default function Join() { type="submit" className="w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" > - {t('join.btn.approval_request')} + {getMessage('join.btn.approval_request')} diff --git a/src/components/auth/Login.jsx b/src/components/auth/Login.jsx index 1d75d69a..5772ab79 100644 --- a/src/components/auth/Login.jsx +++ b/src/components/auth/Login.jsx @@ -3,7 +3,7 @@ import { post, patch } from '@/lib/Axios' import { setSession } from '@/lib/authActions' import { redirect } from 'next/navigation' -import { useI18n } from '@/locales/client' +import { useMessage } from '@/hooks/useMessage' import { Button } from '@nextui-org/react' import { useRecoilState } from 'recoil' @@ -11,7 +11,7 @@ import { modalContent, modalState } from '@/store/modalAtom' export default function Login(props) { const { currentLocale } = props - const t = useI18n() + const { getMessage } = useMessage() // login process const loginProcess = async (formData) => { @@ -55,7 +55,7 @@ export default function Login(props) { await patch({ url: '/api/login/v1.0/user/init-password', data: param }).then((res) => { if (res) { if (res.result.resultCode == 'S') { - alert(t('login.init_password.complete_message')) + alert(getMessage('login.init_password.complete_message')) redirect('/login') } else { alert(res.result.resultMsg) @@ -67,8 +67,8 @@ export default function Login(props) { const initPasswordContent = (
-

{t('login.init_password.title')}

-

{t('login.init_password.sub_title')}

+

{getMessage('login.init_password.title')}

+

{getMessage('login.init_password.sub_title')}

@@ -113,8 +113,8 @@ export default function Login(props) {
-

{t('site.name')}

-

{t('site.sub_name')}

+

{getMessage('site.name')}

+

{getMessage('site.sub_name')}

@@ -158,7 +158,7 @@ export default function Login(props) { type="submit" className="mt-10 flex w-full justify-center rounded-md bg-indigo-600 px-3 py-1.5 text-sm font-semibold leading-6 text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600" > - {t('login.login')} + {getMessage('login')}
@@ -171,7 +171,7 @@ export default function Login(props) { }} className="font-semibold leading-6 text-indigo-600 hover:text-indigo-500" > - {t('login.init_password.btn')} + {getMessage('login.init_password.btn')}

diff --git a/src/components/common/context-menu/QContextMenu.jsx b/src/components/common/context-menu/QContextMenu.jsx index cacb041c..9654c514 100644 --- a/src/components/common/context-menu/QContextMenu.jsx +++ b/src/components/common/context-menu/QContextMenu.jsx @@ -14,7 +14,7 @@ export default function QContextMenu(props) { if (activeObject) { if (activeObject.initOptions && activeObject.initOptions.name) { //이건 바뀔 가능성이 있음 - if (activeObject.initOptions.name.indexOf('guide') > -1) { + if (activeObject.initOptions?.name?.indexOf('guide') > -1) { contextType = 'surface' //면형상 } } diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index 5923888f..7c3e6c7c 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -1,7 +1,15 @@ -export default function CanvasFrame () { - return( -
- -
- ) -} \ No newline at end of file +import { useCanvas } from '@/hooks/useCanvas' +import { useRef } from 'react' +import { useEvent } from '@/hooks/useEvent' + +export default function CanvasFrame() { + const canvasRef = useRef(null) + useCanvas('canvas') + useEvent() + + return ( +
+ +
+ ) +} diff --git a/src/components/header/Header.jsx b/src/components/header/Header.jsx index efb58a52..028ef6ed 100644 --- a/src/components/header/Header.jsx +++ b/src/components/header/Header.jsx @@ -20,7 +20,7 @@ export const ToggleonMouse = (e, act, target) => { export default function Header() { const pathName = usePathname() - if (pathName.includes('login')) { + if (pathName.includes('login') || pathName.includes('join')) { return null } const SelectOption = [{ name: 'オンライン保証シ' }, { name: 'ステム' }] diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index e26b11a3..cf427814 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -4,21 +4,22 @@ import React, { useEffect, useState, useRef } from 'react' import { useRouter, usePathname } from 'next/navigation' import { Button } from '@nextui-org/react' import { useAxios } from '@/hooks/useAxios' +import { useMessage } from '@/hooks/useMessage' import StuffQGrid from './StuffQGrid' -import { useI18n } from '@/locales/client' import { useRecoilValue } from 'recoil' import { stuffSearchState } from '@/store/stuffAtom' -import { queryStringFormatter } from '@/util/common-utils' +import { queryStringFormatter, isEmptyArray } from '@/util/common-utils' import dayjs from 'dayjs' import isLeapYear from 'dayjs/plugin/isLeapYear' // 윤년 판단 플러그인 dayjs.extend(isLeapYear) export default function Stuff() { const stuffSearchParams = useRecoilValue(stuffSearchState) - + const { getMessage } = useMessage() + const [curPage, setCurPage] = useState(1) //현재 페이지 번호 + const [size, setSize] = useState(100) //페이지 당 게시물 수 const { get, del } = useAxios() const gridRef = useRef() - const lang = useI18n() const [gridCount, setGridCount] = useState(0) const [selectedRowData, setSelectedRowData] = useState([]) @@ -47,7 +48,7 @@ export default function Stuff() { gridColumns: [ { field: 'lastEditDatetime', - headerName: lang('stuff.gridHeader.lastEditDatetime'), + headerName: getMessage('stuff.gridHeader.lastEditDatetime'), headerCheckboxSelection: true, headerCheckboxSelectionCurrentPageOnly: true, //페이징시 현재 페이지만 체크되도록 checkboxSelection: true, @@ -73,7 +74,7 @@ export default function Stuff() { }, { field: 'objectNo', - headerName: lang('stuff.gridHeader.objectNo'), + headerName: getMessage('stuff.gridHeader.objectNo'), // headerClass: 'centered', //_test.scss에 추가 테스트 cellRenderer: function (params) { if (params.data.objectNo) { @@ -100,22 +101,22 @@ export default function Stuff() { }, { field: 'planTotCnt', - headerName: lang('stuff.gridHeader.planTotCnt'), + headerName: getMessage('stuff.gridHeader.planTotCnt'), cellStyle: { textAlign: 'right' }, }, - { field: 'objectName', headerName: lang('stuff.gridHeader.objectName'), cellStyle: { textAlign: 'left' } }, + { field: 'objectName', headerName: getMessage('stuff.gridHeader.objectName'), cellStyle: { textAlign: 'left' } }, { field: 'saleStoreId', - headerName: lang('stuff.gridHeader.saleStoreId'), + headerName: getMessage('stuff.gridHeader.saleStoreId'), cellStyle: { textAlign: 'left' }, }, - { field: 'saleStoreName', headerName: lang('stuff.gridHeader.saleStoreName'), cellStyle: { textAlign: 'left' } }, - { field: 'address', headerName: lang('stuff.gridHeader.address'), cellStyle: { textAlign: 'left' } }, - { field: 'dispCompanyName', headerName: lang('stuff.gridHeader.dispCompanyName'), cellStyle: { textAlign: 'left' } }, - { field: 'receiveUser', headerName: lang('stuff.gridHeader.receiveUser'), cellStyle: { textAlign: 'left' } }, + { field: 'saleStoreName', headerName: getMessage('stuff.gridHeader.saleStoreName'), cellStyle: { textAlign: 'left' } }, + { field: 'address', headerName: getMessage('stuff.gridHeader.address'), cellStyle: { textAlign: 'left' } }, + { field: 'dispCompanyName', headerName: getMessage('stuff.gridHeader.dispCompanyName'), cellStyle: { textAlign: 'left' } }, + { field: 'receiveUser', headerName: getMessage('stuff.gridHeader.receiveUser'), cellStyle: { textAlign: 'left' } }, { field: 'specDate', - headerName: lang('stuff.gridHeader.specDate'), + headerName: getMessage('stuff.gridHeader.specDate'), valueFormatter: function (params) { if (params.value) { return dayjs(params?.value).format('YYYY.MM.DD') @@ -127,7 +128,7 @@ export default function Stuff() { }, { field: 'createDatetime', - headerName: lang('stuff.gridHeader.createDatetime'), + headerName: getMessage('stuff.gridHeader.createDatetime'), valueFormatter: function (params) { if (params.value) { return dayjs(params?.value).format('YYYY.MM.DD') @@ -264,18 +265,36 @@ export default function Stuff() { schDateType: 'U', schFromDt: dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'), schToDt: dayjs(new Date()).format('YYYY-MM-DD'), + startRow: (curPage - 1) * size + 1, + endRow: curPage * size, } async function fetchData() { console.log('화면진입:::::::::::::', params) - const apiUrl = `/api/object/v1.0/object?saleStoreId=201TES01&${queryStringFormatter(params)}` - // console.log('apiUrl::', apiUrl) + console.log('현재페이지::::::', curPage) + console.log('페이지당 게시물수::::::', size) + + //api에 넘길값 startRow, endRow + // let startRow + // let endRow + // startRow = (curPage - 1) * size + 1 + // endRow = curPage * size + // console.log('startrow::', startRow) + // console.log('endRow::', endRow) + + // let curPage + // let totalpage + // let totalCount + // let size + // let pageCount + + const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(params)}` await get({ url: apiUrl, }).then((res) => { - if (res.length > 0) { - console.log('API결과:::::::', res) + if (!isEmptyArray(res)) { + console.log('화면진입API결과::', res) setGridProps({ ...gridProps, gridData: res, count: res.length }) setGridCount(res.length) } @@ -289,11 +308,13 @@ export default function Stuff() { if (stuffSearchParams?.code === 'E') { console.log('조회 눌럿을때 ::::::::::::::', stuffSearchParams) async function fetchData() { - const apiUrl = `/api/object/v1.0/object?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}` + const apiUrl = `/api/object/list?saleStoreId=201TES01&${queryStringFormatter(stuffSearchParams)}` await get({ url: apiUrl }).then((res) => { console.log('API결과:::::::', res) - setGridProps({ ...gridProps, gridData: res, count: res.length }) - setGridCount(res.length) + if (!isEmptyArray(res)) { + setGridProps({ ...gridProps, gridData: res, count: res.length }) + setGridCount(res.length) + } }) } fetchData() diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 2f39b066..0c0692c7 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -2,14 +2,49 @@ import React, { useState, useEffect } from 'react' import { useRouter, useSearchParams } from 'next/navigation' -import { Input, RadioGroup, Radio, Button, Autocomplete, AutocompleteItem, Select, SelectItem, Checkbox, Textarea } from '@nextui-org/react' +import { Input, RadioGroup, Radio, Button, Autocomplete, AutocompleteItem, Select, SelectItem, Checkbox, Textarea, button } from '@nextui-org/react' import Link from 'next/link' import { get } from '@/lib/Axios' -import { queryStringFormatter } from '@/util/common-utils' +import { queryStringFormatter, isEmptyArray } from '@/util/common-utils' import dayjs from 'dayjs' +import { useForm } from 'react-hook-form' export default function StuffDetail() { const router = useRouter() const searchParams = useSearchParams() + + //form + const formInitValue = { + // 물건번호 T...(임시) R...(진짜) + dispCompanyName: '', //담당자 + objectStatusId: '0', //물건구분(신축:0 기축 : 1) + objectName: '', //물건명 + objectNameOmit: '', //경칭선택 + objectNameKana: '', //물건명 후리가나 + saleStoreId: '', //판매점ID + saleStoreName: '', //판매점명 + zipNo: '', //우편번호 + prefId: '', //도도부현 + address: '', //주소 + powerSimArea: '', //발전량시뮬레이션지역 + windSpeed: '', //기준풍속 + snowCover: '', //수직적설량 + coldAreaChk: false, //한랭지대책시행 + surfaceType: 'Ⅲ・Ⅳ', //면조도구분(Ⅲ・Ⅳ / Ⅱ) + saltAreaChk: false, //염해지역용아이템사용 + installHeight: '', //설치높이 + powerConTerms: '0', //계약조건(잉여 / 전량) + remark: '', //메모 + tempFlag: 'T', //임시저장(1) 저장(0) + } + const { register, setValue, getValues, handleSubmit, resetField, control, watch } = useForm({ + defaultValues: formInitValue, + }) + + const form = { register, setValue, getValues, handleSubmit, resetField, control, watch } + + const [prefCodeList, setPrefCodeList] = useState([]) //도도부현 코트 리스트 + const [prefValue, setPrefValue] = useState('') + const [receiveUser, setReceiveUser] = useState('') //담당자 const [name2, setName2] = useState('') //물건명 const [name3, setName3] = useState('') //물건명후리가나 @@ -25,7 +60,7 @@ export default function StuffDetail() { const [isFormValid, setIsFormValid] = useState(false) //임시저장, 진짜저장 버튼 컨트롤 const [testSelOption, setTestSelOption] = useState([]) // 테스트용 const [autoSelectValue, setAutoSelectValue] = useState('') //판매점명 자동완성 - const [buttonValid, setButtonValid] = useState(true) //주소검색 활성화 컨트롤 + const [buttonValid, setButtonValid] = useState(false) //주소검색 활성화 컨트롤 const [isSelected, setIsSelected] = useState(false) //한랭지대첵 체크박스 const [isSelected2, setIsSelected2] = useState(false) //염해지역용아이템사용 체크박스 const [gubun2, setGubun2] = useState('1') //면조도구분 라디오 @@ -33,47 +68,51 @@ export default function StuffDetail() { const [memo, setMemo] = useState('') //메모 const objectNo = searchParams.get('objectNo') //url에서 물건번호 꺼내서 바로 set - const [address1, setAddress1] = useState('') //우편API리턴 도도부현명 - const [address2, setAddress2] = useState('') //우편API리턴 시구정촌명 - const [address3, setAddress3] = useState('') //우편API리턴 마을 지역명 - const [prefcode, setPrefCode] = useState(1) //우편API prefcode + // const [address1, setAddress1] = useState('') //우편API리턴 도도부현명 + // const [address2, setAddress2] = useState('') //우편API리턴 시구정촌명 + // const [address3, setAddress3] = useState('') //우편API리턴 마을 지역명 + // const [prefCode, setPrefCode] = useState(1) //우편API prefcode const [editMode, setEditMode] = useState('NEW') const [detailData, setDetailData] = useState({}) useEffect(() => { + get({ url: '/api/object/prefecture/list' }).then((res) => { + if (!isEmptyArray(res)) { + console.log('도도부현API 결과:::', res) + setPrefCodeList(res) + } + }) // console.log('상세화면진입:::::::::', searchParams.get('objectNo')) // console.log('물건번호::::', objectNo) if (objectNo) { - console.log('상세::') setEditMode('EDIT') - //http://localhost:8080/api/object/v1.0/object/R201TES01240906007/1 - //일단 플랜번호 무조건 1로 - //API 호출 - get({ url: `/api/object/v1.0/object/${objectNo}/1` }).then((res) => { + if (objectNo.substring(0, 1) === 'R') { + setIsFormValid(true) + } + get({ url: `/api/object/${objectNo}/detail` }).then((res) => { if (res != null) { // console.log('res:::::::', res) setDetailData(res) - //setTestSelOption(res) } }) - } else { - console.log('신규:::') } }, [objectNo]) useEffect(() => { - validateForm() + // validateForm() }, [receiveUser, name2, name3, gubun, sel, autoSelectValue, zipCode, sel2, sel3, name5, sel4]) // 우편번호 숫자만 체크 - const textTypeHandler = (e) => { - //\D 숫자가 아닌것(특수문자포함)과 매치, [^0-9]와 동일 - if (!e.target.value.match(/\D/g)) { - setZipCode(e.target.value) + const _zipNo = watch('zipNo') + useEffect(() => { + if (_zipNo !== '' && _zipNo.length === 7 && !_zipNo.match(/\D/g)) { + setButtonValid(true) + } else { + setButtonValid(false) } - } + }, [_zipNo]) // 수직적설량 숫자만 const textTypeHandler2 = (e) => { @@ -127,30 +166,34 @@ export default function StuffDetail() { errors.name5 = '수직적설량 is required.' } - // console.log('errors::', errors) + console.log('errors::', errors) setErrors(errors) setIsFormValid(Object.keys(errors).length === 0) } - // 우편번호 API + // 주소검색 API const onSearchPostNumber = () => { - if (!zipCode) { - return alert('우편번호 입력해') - } const params = { - zipcode: zipCode, + zipcode: _zipNo, } - get({ url: `https://zipcloud.ibsnet.co.jp/api/search?${queryStringFormatter(params)}` }).then((res) => { - console.log('우편API RES::::::::', res) + //7830060 if (res.status === 200) { - if (res.results.length > 0) { - setAddress1(res.results[0].address1) - setAddress2(res.results[0].address2) - setAddress3(res.results[0].address3) - setPrefCode(res.results[0].prefcode) + console.log('res.results::', res.results) + if (res.results != null) { + console.log('res.results::', res.results) + // prefId: '', //도도부현 + // address: '', //주소 + console.log('prefcode::', res.results[0].prefcode) + console.log('address::', res.results[0].address2 + res.results[0].address3) + setPrefValue(res.results[0].prefcode) + form.setValue('prefId', res.results[0].prefcode) + form.setValue('address', res.results[0].address2 + res.results[0].address3) } else { alert('등록된 우편번호에서 주소를 찾을 수 없습니다. 다시 입력해주세요.') + form.setValue('prefId', '') + form.setValue('address', '') + setPrefValue('') } } else { alert(res.message) @@ -174,10 +217,173 @@ export default function StuffDetail() { console.log('e:::::::', e.target.value) } + //필수값 다 입력했을때 + const onValid = (data) => { + console.log('data::::::', data) + const formData = form.getValues() + //console.log('formData::::', formData) + const _dispCompanyName = watch('dispCompanyName') + const _objectStatusId = watch('objectStatusId') + const _objectNameOmit = watch('objectNameOmit') + const _zipNo = watch('zipNo') + const _prefId = watch('prefId') + const _address = watch('address') + const _coldAreaChk = watch('coldAreaChk') + console.log(_dispCompanyName) + console.log(_objectStatusId) + console.log(_objectNameOmit) + console.log(_zipNo) + console.log(_prefId) + console.log('prefValue::', prefValue) + console.log(_address) + console.log('_coldAreaChk::', _coldAreaChk) + } + + //필수값 안넣었을때 + const onInvalid = (errors) => { + console.log('실패', errors) + } + return ( <> - {(editMode === 'NEW' &&
신규:::::::::::
) ||
상세:::::::::::
} -
+ {(editMode === 'NEW' && ( +
+
+
(*필수 입력항목)
+
+ + +
+
+ + + + + + +
+ +
+
+
+ + +
+
+ +
+
+ +
+
+ + + + *우편번호 7자리를 입력한 후, 주소검색 버튼을 클릭해 주십시오 +
+
+ +
+ {prefCodeList?.length > 0 && ( + + )} +
+ + +
+
+ +
+
+ +
+
+ + {' '} + cm + { + form.setValue('coldAreaChk', e) + }} + {...form.register('coldAreaChk')} + > + 한랭지대책시행 + +
+
+ + + + + + { + form.setValue('saltAreaChk', e) + }} + > + 염해지역용아이템사용 + +
+
+ +
+
+ + + + + +
+
+ +
{t('join.sub3.qtCompNm')}{getMessage('join.sub3.qtCompNm')}
- {t('join.sub3.qtPostCd')}/{t('join.sub3.qtAddr')} + {getMessage('join.sub3.qtPostCd')}/{getMessage('join.sub3.qtAddr')}
{t('join.sub3.qtEmail')}{getMessage('join.sub3.qtEmail')}
{t('join.sub3.qtTelNo')}{getMessage('join.sub3.qtTelNo')}
{t('join.sub3.qtFax')}{getMessage('join.sub3.qtFax')}