import { useEffect, useState, useRef } from 'react' import { useAxios } from '@/hooks/useAxios' import { globalLocaleStore } from '@/store/localeAtom' import { useRecoilValue } from 'recoil' import { useMessage } from '@/hooks/useMessage' import { isNotEmptyArray } from '@/util/common-utils' import SingleDatePicker from '@/components/common/datepicker/SingleDatePicker' import dayjs from 'dayjs' import PlanRequestPopQGrid from './PlanRequestPopQGrid' import { isObjectNotEmpty, queryStringFormatter } from '@/util/common-utils' import { useCommonCode } from '@/hooks/common/useCommonCode' import Select from 'react-select' import QPagination from '@/components/common/pagination/QPagination' export default function PlanRequestPop(props) { const [pageNo, setPageNo] = useState(1) //현재 페이지 번호 const [pageSize, setPageSize] = useState(20) //페이지 당 게시물 개수 const [totalCount, setTotalCount] = useState(0) //총 갯수 //공통코드 const { commonCode, findCommonCode } = useCommonCode() const [planStatCdList, setPlanStatCdList] = useState([]) const globalLocaleState = useRecoilValue(globalLocaleStore) const [planReqObject, setPlanReqObject] = useState({}) const { promiseGet } = useAxios(globalLocaleState) const { getMessage } = useMessage() //Select ref const ref = useRef() // 검색조건 달력 셋팅 const [startDate, setStartDate] = useState(dayjs(new Date()).add(-3, 'month').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, } const [schPlanReqNo, setSchPlanReqNo] = useState('') //설계의뢰번호 const [schTitle, setSchTitle] = useState('') //안건명 const [schAddress, setSchAddress] = useState('') //도도부현 const [schSaleStoreName, setSchSaleStoreName] = useState('') //판매대리점명 const [schPlanReqName, setSchPlanReqName] = useState('') //의뢰자명 const [schPlanStatCd, setSchPlanStatCd] = useState('') //상태코드 const [schDateGbn, setSchDateGbn] = useState('S') //기간구분코드(S/R) //초기화 const resetRecoil = () => { setSchPlanReqNo('') setSchTitle('') setSchAddress('') setSchSaleStoreName('') setSchPlanReqName('') setSchDateGbn('S') setStartDate(dayjs(new Date()).add(-3, 'month').format('YYYY-MM-DD')) setEndDate(dayjs(new Date()).format('YYYY-MM-DD')) setSchPlanStatCd('') handleClear() //셀렉트 자동완성 초기화 } //셀렉트 자동완성 초기화 const handleClear = () => { if (ref.current) { ref.current.clearValue() } } // 상태 검색조건 변경 const onSelectionChange = (key) => { if (isObjectNotEmpty(key)) { setSchPlanStatCd(key.clCode) } else { //X누름 setSchPlanStatCd('') } } // 조회 const onSubmit = (page, type) => { //2차점 테스트 201X112 const params = { // saleStoreId: 'T100', // saleStoreLevel: '1', saleStoreId: props?.otherSaleStoreId ? props.otherSaleStoreId : props.saleStoreId, saleStoreLevel: props?.otherSaleStoreLevel ? props.otherSaleStoreLevel : props.saleStoreLevel, schPlanReqNo: schPlanReqNo, schTitle: schTitle, schAddress: schAddress, schSaleStoreName: schSaleStoreName, schPlanReqName: schPlanReqName, schPlanStatCd: schPlanStatCd, schDateGbn: schDateGbn, schStartDt: dayjs(startDate).format('YYYY-MM-DD'), schEndDt: dayjs(endDate).format('YYYY-MM-DD'), startRow: type === 'S' ? (1 - 1) * pageSize + 1 : (page - 1) * pageSize + 1, endRow: type === 'S' ? 1 * pageSize : page * pageSize, } if (type === 'S') { setPageNo(1) } else { setPageNo(page) } const apiUrl = `/api/object/planReq/list?${queryStringFormatter(params)}` promiseGet({ url: apiUrl }).then((res) => { if (res.status === 200) { if (isNotEmptyArray(res.data.data)) { setGridProps({ ...gridProps, gridData: res.data.data, gridCount: res.data.data[0].totCnt }) setTotalCount(res.data.data[0].totCnt) } else { setGridProps({ ...gridProps, gridData: [], gridCount: 0 }) setTotalCount(0) } } else { setGridProps({ ...gridProps, gridData: [], gridCount: 0 }) setTotalCount(0) } }) } // 페이징 현재페이지 변경 const handleChangePage = (page) => { setPageNo(page) onSubmit(page, 'P') } //페이지 갯수 변경 이벤트 const onChangePerPage = (e) => { const params = { // saleStoreId: 'T100', // saleStoreLevel: '1', saleStoreId: props?.otherSaleStoreId ? props.otherSaleStoreId : props.saleStoreId, saleStoreLevel: props?.otherSaleStoreLevel ? props.otherSaleStoreLevel : props.saleStoreLevel, schTitle: schTitle, schAddress: schAddress, schPlanReqNo: schPlanReqNo, schSaleStoreName: schSaleStoreName, schPlanReqName: schPlanReqName, schPlanStatCd: schPlanStatCd, schDateGbn: schDateGbn, schStartDt: dayjs(startDate).format('YYYY-MM-DD'), schEndDt: dayjs(endDate).format('YYYY-MM-DD'), startRow: (1 - 1) * e.target.value + 1, endRow: 1 * e.target.value, } setPageSize(e.target.value) setPageNo(1) const apiUrl = `/api/object/planReq/list?${queryStringFormatter(params)}` promiseGet({ url: apiUrl }).then((res) => { if (res.status === 200) { if (isNotEmptyArray(res.data.data)) { setGridProps({ ...gridProps, gridData: res.data.data, gridCount: res.data.data[0].totCnt }) setTotalCount(res.data.data[0].totCnt) } else { setGridProps({ ...gridProps, gridData: [], gridCount: 0 }) setTotalCount(0) } } else { setGridProps({ ...gridProps, gridData: [], gridCount: 0 }) setTotalCount(0) } }) } const [gridProps, setGridProps] = useState({ gridData: [], isPageable: false, gridColumns: [ { field: 'planStatName', headerName: getMessage('stuff.planReqPopup.gridHeader.planStatName'), minWidth: 150, checkboxSelection: true, showDisabledCheckboxes: true, }, { field: 'planReqNo', headerName: getMessage('stuff.planReqPopup.gridHeader.planReqNo'), minWidth: 150, }, { field: 'saleStoreId', headerName: getMessage('stuff.planReqPopup.gridHeader.saleStoreId'), minWidth: 150, }, { field: 'saleStoreName', headerName: getMessage('stuff.planReqPopup.gridHeader.saleStoreName'), minWidth: 150, }, { field: 'title', headerName: getMessage('stuff.planReqPopup.gridHeader.title'), minWidth: 150, }, { field: 'address1', headerName: getMessage('stuff.planReqPopup.gridHeader.address1'), minWidth: 150, }, { field: 'houseCntName', headerName: getMessage('stuff.planReqPopup.gridHeader.houseCntName'), minWidth: 150, }, { field: 'planReqName', headerName: getMessage('stuff.planReqPopup.gridHeader.planReqName'), minWidth: 150, }, { field: 'submitDt', headerName: getMessage('stuff.planReqPopup.gridHeader.submitDt'), minWidth: 150, }, ], }) //설계의뢰 그리드에서 선택한 설계의로 정보 const getSelectedRowdata = (data) => { if (isNotEmptyArray(data)) { setPlanReqObject(data[0]) } else { setPlanReqObject({}) } } // 설계의뢰 적용 클릭 const applyPlanReq = () => { if (isObjectNotEmpty(planReqObject)) { props.planReqInfo(planReqObject) // 팝업닫기 props.setShowDesignRequestButtonValid(false) } else { alert(getMessage('stuff.planReqPopup.error.message1')) } } useEffect(() => { const code1 = findCommonCode(115800) //상태 if (code1 != null) { setPlanStatCdList(code1) } }, [commonCode]) // 숫자만 입력 가능 const handleKeyUp = (e) => { let input = e.target input.value = input.value.replace(/[^0-9]/g, '') if (e.key === 'Enter') { onSubmit(pageNo, 'S') } } // 엔터 이벤트 const handleByOnKeyUp = (e) => { if (e.key === 'Enter') { onSubmit(pageNo, 'S') } } return (

{getMessage('stuff.planReqPopup.title')}

{getMessage('stuff.planReqPopup.popTitle')}

{getMessage('stuff.planReqPopup.search.planReqNo')}
{ setSchPlanReqNo(e.target.value) }} />
{getMessage('stuff.planReqPopup.search.title')}
{ setSchTitle(e.target.value) }} onKeyUp={handleByOnKeyUp} />
{getMessage('stuff.planReqPopup.search.address1')}
{ setSchAddress(e.target.value) }} onKeyUp={handleByOnKeyUp} />
{getMessage('stuff.planReqPopup.search.saleStoreName')}
{ setSchSaleStoreName(e.target.value) }} onKeyUp={handleByOnKeyUp} />
{getMessage('stuff.planReqPopup.search.planReqName')}
{ setSchPlanReqName(e.target.value) }} onKeyUp={handleByOnKeyUp} />
{getMessage('stuff.planReqPopup.search.planStatName')}
{getMessage('stuff.planReqPopup.search.period')}
{ setSchDateGbn(e.target.value) }} />
{ setSchDateGbn(e.target.value) }} />
~
Plan List
) }