diff --git a/src/app/management/stuff/detail/page.jsx b/src/app/management/stuff/detail/page.jsx index 6759b282..8783e17e 100644 --- a/src/app/management/stuff/detail/page.jsx +++ b/src/app/management/stuff/detail/page.jsx @@ -1,18 +1,45 @@ import React from 'react' -import Hero from '@/components/Hero' -import StuffDetail from '@/components/management/StuffDetail' import Link from 'next/link' +import Image from 'next/image' +import '@/styles/contents.scss' +import StuffHeader from '@/components/management/StuffHeader' +import StuffDetail from '@/components/management/StuffDetail' export default function ManagementStuffDetailPage() { return ( <> -
-

물건정보

- -

도면작성

- +
+
+
    +
  • + + 商品情報 + +
  • +
+
    +
  • + + react + +
  • +
  • + 物品及び図面管理 +
  • +
  • + 商品情報 +
  • +
+
-
- +
+
+
+ +
+
+ +
+
) diff --git a/src/app/management/stuff/page.jsx b/src/app/management/stuff/page.jsx index 7590a7cf..9c1abdfb 100644 --- a/src/app/management/stuff/page.jsx +++ b/src/app/management/stuff/page.jsx @@ -1,20 +1,40 @@ import StuffSearchCondition from '@/components/management/StuffSearchCondition' import Stuff from '@/components/management/Stuff' import { initCheck } from '@/util/session-util' -import Hero from '@/components/Hero' +import Image from 'next/image' +import '@/styles/contents.scss' export default async function ManagementStuffPage() { await initCheck() return ( <> - -
-
- +
+
+

物品及び図面管理

+
    +
  • + + react + +
  • +
  • + 物品及び図面管理 +
  • +
  • + 新規物件登録 +
  • +
-
- +
+
+
+ +
+
+ +
+
) diff --git a/src/app/management/stuff/tempdetail/page.jsx b/src/app/management/stuff/tempdetail/page.jsx index 8b84287a..d122d717 100644 --- a/src/app/management/stuff/tempdetail/page.jsx +++ b/src/app/management/stuff/tempdetail/page.jsx @@ -1,14 +1,41 @@ import React from 'react' -import Hero from '@/components/Hero' +import Link from 'next/link' +import Image from 'next/image' +import '@/styles/contents.scss' import StuffDetail from '@/components/management/StuffDetail' export default function ManagementStuffDetailPage() { return ( <> -
-

물건정보

+
+
+
    +
  • + + 商品情報 + +
  • +
+
    +
  • + + react + +
  • +
  • + 物品及び図面管理 +
  • +
  • + 商品情報 +
  • +
+
-
- +
+
+
+ +
+
) diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index 6f615c3c..c46bd504 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -12,7 +12,7 @@ import { queryStringFormatter, isEmptyArray } from '@/util/common-utils' import dayjs from 'dayjs' import isLeapYear from 'dayjs/plugin/isLeapYear' // 윤년 판단 플러그인 dayjs.extend(isLeapYear) - +import { globalLocaleStore } from '@/store/localeAtom' export default function Stuff() { const stuffSearchParams = useRecoilValue(stuffSearchState) const [stuffSearch, setStuffSearch] = useRecoilState(stuffSearchState) @@ -20,7 +20,9 @@ export default function Stuff() { const [curPage, setCurPage] = useState(1) //현재 페이지 번호 const [defaultSize, setDefaultSize] = useState(100) //페이지 당 게시물 수 const [defaultSortType, setDefaultSortType] = useState('R') - const { get } = useAxios() + + const globalLocaleState = useRecoilValue(globalLocaleStore) + const { get } = useAxios(globalLocaleState) const gridRef = useRef() const [gridCount, setGridCount] = useState(0) @@ -364,50 +366,46 @@ export default function Stuff() { } return ( <> -
- 물건목록 - - 전체 : {gridCount} // 선택 : {selectedRowDataCount} - - - -
- {/* */} - {/* - */} + {/* 퍼블시작 */} +
+
+
+

물건목록

+
    +
  • + 전체 + {gridCount} +
  • +
  • + 선택 + {selectedRowDataCount} +
  • +
+
+
+
+ +
+
+ +
+
-
- +
+
+ +
페이징 컴포넌트예정
+
+ {/* 퍼블종료 */} ) } diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 66baf8e3..898b4176 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -4,16 +4,20 @@ import React, { useState, useEffect } from 'react' import { useRouter, useSearchParams } from 'next/navigation' import { Input, RadioGroup, Radio, Button, Autocomplete, AutocompleteItem, Select, SelectItem, Checkbox, Textarea, button } from '@nextui-org/react' import Link from 'next/link' -import { del, get, post } from '@/lib/Axios' +import { useAxios } from '@/hooks/useAxios' +import { globalLocaleStore } from '@/store/localeAtom' import { queryStringFormatter, isEmptyArray } from '@/util/common-utils' import dayjs from 'dayjs' import { useMessage } from '@/hooks/useMessage' import { useForm } from 'react-hook-form' +import { useRecoilState, useRecoilValue } from 'recoil' export default function StuffDetail() { const router = useRouter() const searchParams = useSearchParams() const { getMessage } = useMessage() + const globalLocaleState = useRecoilValue(globalLocaleStore) + const { get, post, del } = useAxios(globalLocaleState) //form const formInitValue = { // 물건번호 T...(임시) R...(진짜) @@ -63,7 +67,7 @@ export default function StuffDetail() { useEffect(() => { if (objectNo) { - console.log('수정화면') + //console.log('수정화면') setEditMode('EDIT') if (objectNo.substring(0, 1) === 'R') { @@ -90,7 +94,7 @@ export default function StuffDetail() { //1차점 : X167 get({ url: `/api/object/saleStore/X167/list` }).then((res) => { if (!isEmptyArray(res)) { - console.log('판매점 결과:::::', res) + // console.log('판매점 결과:::::', res) setSaleStoreList(res) //1차 판매점 자동완성 값 셋팅 form.setValue('saleStoreId', res[0].saleStoreId) @@ -99,9 +103,6 @@ export default function StuffDetail() { setOtherSaleStoreList([]) } }) - } else { - alert('삭제된 물건입니다') - router.push('/management/stuff') } }) } else { @@ -385,6 +386,312 @@ export default function StuffDetail() { return ( <> {(editMode === 'NEW' && ( +
+
+
+ * 필수 입력항목 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ 담당자 * + +
+ +
+
+ 물건구분/물건명 * + +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+
물건명 후리가나 +
+ +
+
+
+
+ 1차 판매점명 / ID + * +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+ 2차 판매점명 / ID * +
+
+
+
+
+
+ +
+
+
+ +
+
+ 우편번호 * + +
+
+ +
+ +
*우편번호 7자리를 입력한 후, 주소검색 버튼을 클릭해 주십시오
+
+
+ 도도부현 / 주소 * + +
+
+ {/* {prefCodeList?.length > 0 && ( + + )} */} +
+
+ +
+
+
+ 발전량시뮬레이션지역 * + +
+
+ 기준풍속 * + +
+
+ +
+ m/s이하 +
+
+ 수직적설량 * + +
+
+ cm +
+ + +
+
+
+ 면조도구분 * + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ 설치높이 * + +
+
+ +
+ m +
+
계약조건 +
+
+ + +
+
+ + +
+
+
메모 +
+ +
+
+
+
+ {!isFormValid ? ( + + ) : ( + + )} + + + +
+
+
+ )) || ( + <> + {objectNo.substring(0, 1) === 'R' ? ( + <> + + + + + + + ) : ( + <> + + + + + + )} + + )} + {/* {(editMode === 'NEW' && (
(*필수 입력항목)
@@ -610,7 +917,7 @@ export default function StuffDetail() { )} - )} + )} */} ) } diff --git a/src/components/management/StuffHeader.jsx b/src/components/management/StuffHeader.jsx new file mode 100644 index 00000000..fb4d831c --- /dev/null +++ b/src/components/management/StuffHeader.jsx @@ -0,0 +1,51 @@ +'use client' + +import React, { useState, useEffect } from 'react' +import { useAxios } from '@/hooks/useAxios' +import { useRouter, useSearchParams } from 'next/navigation' +import { globalLocaleStore } from '@/store/localeAtom' +import { useRecoilValue } from 'recoil' +export default function StuffHeader() { + const router = useRouter() + const searchParams = useSearchParams() + const objectNo = searchParams.get('objectNo') //url에서 물건번호 꺼내서 바로 set + const globalLocaleState = useRecoilValue(globalLocaleStore) + const { get } = useAxios(globalLocaleState) + const [headerData, setHeaderData] = useState({}) + + useEffect(() => { + get({ url: `/api/object/${objectNo}/detail` }).then((res) => { + //console.log('res::', res) + if (res != null && res != '') { + console.log('헤더상세::::::::::', res) + setHeaderData(res) + } else { + alert('삭제된 물건입니다') + router.push('/management/stuff') + } + }) + }, [objectNo]) + + return ( +
+
+
물건번호
+
+ {headerData.objectNo} +
+
+
+
사양확정일
+
{headerData.specificationConfirmDate}
+
+
+
갱신일시
+
{headerData.lastEditDatetime}
+
+
+
등록일
+
{headerData.createDatetime}
+
+
+ ) +} diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index 58aa4ce9..420b2145 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -2,25 +2,36 @@ import React, { useEffect } from 'react' import { useState } from 'react' -import { Input, RadioGroup, Radio, Button, Autocomplete, AutocompleteItem } from '@nextui-org/react' +import { Autocomplete, AutocompleteItem } from '@nextui-org/react' +import { useAxios } from '@/hooks/useAxios' +import { useRecoilState, useRecoilValue, useResetRecoilState } from 'recoil' +import { globalLocaleStore } from '@/store/localeAtom' + import RangeDatePicker from '@/components/common/datepicker/RangeDatePicker' -import { useRecoilState, useResetRecoilState } from 'recoil' import { stuffSearchState } from '@/store/stuffAtom' import { isEmptyArray } from '@/util/common-utils' -import { get } from '@/lib/Axios' import dayjs from 'dayjs' import isLeapYear from 'dayjs/plugin/isLeapYear' // 윤년 판단 플러그인 dayjs.extend(isLeapYear) import Link from 'next/link' +import SingleDatePicker from '../common/datepicker/SingleDatePicker' export default function StuffSearchCondition() { - //달력 props 관련 날짜 셋팅 - const [dateRange, setDateRange] = useState([dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'), dayjs(new Date()).format('YYYY-MM-DD')]) - const [startRangeDate, endRangeDate] = dateRange + const globalLocaleState = useRecoilValue(globalLocaleStore) - const rangeDatePickerProps = { - startRangeDate, //시작일 - endRangeDate, //종료일 - setDateRange, + const { get } = useAxios(globalLocaleState) + + //달력 props 관련 날짜 셋팅 + const [startDate, setStartDate] = useState(dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD')) + const [endDate, setEndDate] = useState(dayjs(new Date()).format('YYYY-MM-DD')) + + const rangeDatePickerProps1 = { + startDate, //시작일 + setStartDate, + } + + const rangeDatePickerProps2 = { + startDate: endDate, //종료일 + setStartDate: setEndDate, } //여기서 선택한 검색조건들을 recoil로 관리 @@ -40,7 +51,7 @@ export default function StuffSearchCondition() { const [schSelSaleStoreList, setSchSelSaleStoreList] = useState([]) //판매대리점 자동완성 SELECT // 조회 const onSubmit = () => { - let diff = dayjs(endRangeDate).diff(startRangeDate, 'day') + let diff = dayjs(endDate).diff(startDate, 'day') if (diff > 366) { return alert('최대1년 조회 가능합니다.') } @@ -55,8 +66,8 @@ export default function StuffSearchCondition() { schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser, schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName, schDateType: stuffSearch?.schDateType ? stuffSearch.schDateType : dateType, - schFromDt: dayjs(startRangeDate).format('YYYY-MM-DD'), - schToDt: dayjs(endRangeDate).format('YYYY-MM-DD'), + schFromDt: dayjs(startDate).format('YYYY-MM-DD'), + schToDt: dayjs(endDate).format('YYYY-MM-DD'), code: 'E', schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : schSelSaleStoreId, startRow: stuffSearch?.startRow ? stuffSearch.startRow : 1, @@ -76,7 +87,8 @@ export default function StuffSearchCondition() { setReceiveUser('') setDispCompanyName('') setDateType('U') - setDateRange([dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'), dayjs(new Date()).format('YYYY-MM-DD')]) + setStartDate(dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD')) + setEndDate(dayjs(new Date()).format('YYYY-MM-DD')) setSchSelSaleStoreId('') resetStuffRecoil() } @@ -102,23 +114,207 @@ export default function StuffSearchCondition() { } } - //x로 날짜 비웠을때 기본값으로 셋팅 useEffect(() => { - if (!startRangeDate && !endRangeDate) { - setDateRange([dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'), dayjs(new Date()).format('YYYY-MM-DD')]) - } - }, [startRangeDate, endRangeDate]) - - useEffect(() => { - setDateRange([ - stuffSearch?.schFromDt ? stuffSearch.schFromDt : dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD'), - stuffSearch?.schToDt ? stuffSearch.schToDt : dayjs(new Date()).format('YYYY-MM-DD'), - ]) + setStartDate(stuffSearch?.schFromDt ? stuffSearch.schFromDt : dayjs(new Date()).add(-1, 'year').format('YYYY-MM-DD')) + setEndDate(stuffSearch?.schToDt ? stuffSearch.schToDt : dayjs(new Date()).format('YYYY-MM-DD')) }, [stuffSearch]) return ( <> -
+ {/* 퍼블적용시작 */} +
+
+
+

물건현황

+
+
+ + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
물건번호 +
+ { + setObjectNo(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schObjectNo: e.target.value }) + }} + /> +
+
판매대리점명 +
+ { + setSaleStoreId(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schSaleStoreId: e.target.value }) + }} + /> +
+
물건주소 +
+ { + setAddress(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schAddress: e.target.value }) + }} + /> +
+
물건명 +
+ { + setobjectName(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schObjectName: e.target.value }) + }} + /> +
+
견적처 +
+ { + setDispCompanyName(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schDispCompanyName: e.target.value }) + }} + /> +
+
판매대리점 선택 + {/*
+ +
*/} + {schSelSaleStoreList?.length > 0 && ( + + {(option) => {option.saleStoreName}} + + )} +
담당자 +
+ { + setReceiveUser(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schReceiveUser: e.target.value }) + }} + /> +
+
기간검색 +
+
+
+ { + setDateType(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schDateType: e.target.value }) + }} + /> + +
+
+ { + setDateType(e.target.value) + setStuffSearch({ ...stuffSearch, code: 'S', schDateType: e.target.value }) + }} + /> + +
+
+
+
+ +
+ ~ +
+ +
+
+
+
+
+
+ {/* 퍼블적용끝 */} + {/*
@@ -300,7 +496,7 @@ export default function StuffSearchCondition() { ) } })} -
+
*/} ) }