diff --git a/src/app/management/ManagementProvider.js b/src/app/management/ManagementProvider.js new file mode 100644 index 00000000..197b30c0 --- /dev/null +++ b/src/app/management/ManagementProvider.js @@ -0,0 +1,20 @@ +'ues client' + +import { createContext, useEffect, useState } from 'react' + +export const ManagementContext = createContext({ + managementState: {}, + setManagementState: () => {}, +}) + +const ManagementProvider = ({ children }) => { + const [managementState, setManagementState] = useState({}) + + useEffect(() => { + console.log('๐Ÿš€ ~ managementState:', managementState) + }, [managementState]) + + return {children} +} + +export default ManagementProvider diff --git a/src/app/management/layout.js b/src/app/management/layout.js new file mode 100644 index 00000000..b0e031c7 --- /dev/null +++ b/src/app/management/layout.js @@ -0,0 +1,7 @@ +'use client' + +import ManagementProvider from './ManagementProvider' + +export default function ManagementLayout({ children }) { + return {children} +} diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index c4faccba..1030962c 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -18,6 +18,7 @@ import Select, { components } from 'react-select' import { convertNumberToPriceDecimal } from '@/util/common-utils' import ProductFeaturesPop from './popup/ProductFeaturesPop' export default function Estimate({ params }) { + const [itemChangeYn, setItemChangeYn] = useState(false) const { session } = useContext(SessionContext) const [objectNo, setObjectNo] = useState('') //๋ฌผ๊ฑด๋ฒˆํ˜ธ const [planNo, setPlanNo] = useState('') //ํ”Œ๋žœ๋ฒˆํ˜ธ @@ -54,7 +55,7 @@ export default function Estimate({ params }) { const objectRecoil = useRecoilValue(floorPlanObjectState) //๊ฒฌ์ ์„œ ์ƒ์„ธ๋ฐ์ดํ„ฐ - const { state, setState, addItem } = useEstimateController(params.pid) + const { state, setState, addItem, handleEstimateFileDownload } = useEstimateController(params.pid) //๊ฒฌ์ ํŠน์ด์‚ฌํ•ญ List const [specialNoteList, setSpecialNoteList] = useState([]) @@ -169,7 +170,6 @@ export default function Estimate({ params }) { objectNo: objectNo, no: no, } - await promisePost({ url: 'api/file/fileDelete', data: delParams }).then((res) => { if (res.status === 204) { setOriginFiles(originFiles.filter((file) => file.objectNo === objectNo && file.no !== no)) @@ -180,13 +180,6 @@ export default function Estimate({ params }) { }) } - //์•„์ดํ…œ ๋ชฉ๋ก - // useEffect(() => { - // if (isNotEmptyArray(state.itemList)) { - // setItemList(state.itemList) - // } - // }, [state?.itemList]) - //๊ฐ€๊ฒฉํ‘œ์‹œ option ์ตœ์ดˆ์„ธํŒ… useEffect(() => { if (state.estimateType !== '') { @@ -266,19 +259,49 @@ export default function Estimate({ params }) { setSelection(newSelection) } - // ์•„์ดํ…œ ์ž๋™์™„์„ฑ ๊ฒ€์ƒ‰์‹œ + // ์•„์ดํ…œ ์ž๋™์™„์„ฑ ๊ฒ€์ƒ‰์‹œ ์•„์ดํ…œ ๋ณ€๊ฒฝ const onChangeDisplayItem = (itemId, dispOrder) => { - console.log('์•„์ดํ…œ ์ž๋™์™„์„ฑ:::::::', dispOrder) const param = { itemId: itemId, } const apiUrl = `/api/display-item/item-detail?${queryStringFormatter(param)}` + let updateList = [] + let updates = {} get({ url: apiUrl }).then((res) => { - console.log('์ œํ’ˆ์ƒ์„ธ ๊ฒฐ๊ณผ::::::::', res) + console.log('์•„์ดํ…œ์ƒ์„ธ์ •๋ณด:::::::', res) + updates.objectNo = objectNo + updates.planNo = planNo + updates.itemId = res.itemId + updates.itemNo = res.itemNo + updates.itemName = res.itemName + updates.itemChangeFlg = '1' //๋ฌด์กฐ๊ฑด 1 + updates.partAdd = '1' //๋ฌด์กฐ๊ฑด1 NEW + updates.fileUploadFlg = res.fileUploadFlg + updates.unit = res.unit + updates.unitPrice = res.salePrice //unitPrice๋„ salePrice๋กœ + updates.moduleFlg = res.moduleFlg + updates.pkgMaterialFlg = res.pkgMaterialFlg + updates.pnowW = res.pnowW + updates.salePrice = res.salePrice + updates.specification = res.specification + updates.unit = res.unit + updates.specialNoteCd = res.spnAttrCds + updates.itemGroup = res.itemGroup + updates.delFlg = '0' // ์‚ญ์ œํ”Œ๋ž˜๊ทธ 0 + + updateList = state.itemList.map((item) => { + if (item.dispOrder === dispOrder) { + return { ...item, ...updates } + } else { + return item + } + }) + setState({ + itemList: updateList, + }) + + setItemChangeYn(true) }) - // setState({ - // itemList: [{ itemNo: '123123123123' }], - // }) } //์ œํ’ˆ ์‚ญ์ œ @@ -293,6 +316,7 @@ export default function Estimate({ params }) { }) }) + // ํ•„ํ„ฐ์•ˆํ•˜๊ณ  ํ”Œ๋ž˜๊ทธ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฑฐ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ const result = state.itemList.filter((item) => { return !tempList.some((other) => other.dispOrder === item.dispOrder) }) @@ -302,8 +326,19 @@ export default function Estimate({ params }) { }) setSelection(new Set()) + setItemChangeYn(true) } + useEffect(() => { + if (itemChangeYn) { + // console.log('์•„์ดํ…œ์— ๋ญ”๊ฐ€ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚ฌ์–ด', itemChangeYn) + // console.log('์•„์ดํ…œ์ƒํƒœ๊ฐ€์ ธ์˜ค๊ธฐ::::::::::', state.itemList) + } + + //๋‹ค์‹œ false๋กœ ๋Œ๋ฆฌ๊ธฐ ์—ฌ๊ธฐ์„œํ• ์ง€ ๊ฐ€๊ฒฉ์ •๋ณด ๋ณ€๊ฒฝํ•˜๋Š”๊ฑฐ ๋๋‚˜๊ณ ํ• ์ง€.. + setItemChangeYn(false) + }, [itemChangeYn]) + return (
@@ -579,9 +614,16 @@ export default function Estimate({ params }) { originFiles.map((originFile) => { return (
  • - + handleEstimateFileDownload(originFile)}> {originFile.faileName} - +
  • ) @@ -838,18 +880,21 @@ export default function Estimate({ params }) { classNamePrefix="custom" placeholder="Select" options={displayItemList} - onChange={(e) => onChangeDisplayItem(e.itemId, item.dispOrder)} + onChange={(e) => { + if (isObjectNotEmpty(e)) { + onChangeDisplayItem(e.itemId, item.dispOrder) + } + }} getOptionLabel={(x) => x.itemName} getOptionValue={(x) => x.itemId} isClearable={true} isDisabled={false} value={displayItemList.filter(function (option) { - // console.log('์˜ต์…˜๊ฐ’???', option.itemId) - // console.log('๊ณจ๋ž์„๋•Œ ์—ฌ๊ธฐ์˜ค์ง€???', item.itemId) return option.itemId === item.itemId })} />
    + {/* {item?.partAdd === '1' && ( */} {item?.itemChangeFlg === '1' && (
    @@ -877,14 +922,32 @@ export default function Estimate({ params }) {
    - + { + //onChangeDisplayItem์ฐธ๊ณ  + //itemChangeFlg = 1, partAdd = 0 ์…‹ํŒ… + console.log('์ˆ˜๋Ÿ‰๋ณ€๊ฒฝ::::::::', e.target.value) + }} + />
    {item.unit}
    - + { + //onChangeDisplayItem์ฐธ๊ณ  + //itemChangeFlg, partAdd ๋ฐ›์•„์˜จ ๊ทธ๋Œ€๋กœ + console.log('๋‹จ๊ฐ€๋ณ€๊ฒฝ:::::::', e.target.value) + }} + />
    {/*
    OPEN์•„์ด์ฝ˜ ์ฒ˜๋ฆฌ diff --git a/src/components/main/MainContents.jsx b/src/components/main/MainContents.jsx index 77df845a..d2b3cc90 100644 --- a/src/components/main/MainContents.jsx +++ b/src/components/main/MainContents.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react' +import { useEffect, useState, useContext } from 'react' import ProductItem from './ProductItem' import { useMessage } from '@/hooks/useMessage' import Image from 'next/image' @@ -8,17 +8,16 @@ import { useRecoilValue } from 'recoil' import { useRouter } from 'next/navigation' import { globalLocaleStore } from '@/store/localeAtom' import { queryStringFormatter } from '@/util/common-utils' -import { sessionStore } from '@/store/commonAtom' import MainSkeleton from '../ui/MainSkeleton' +import { SessionContext } from '@/app/SessionProvider' export default function MainContents() { + const { session } = useContext(SessionContext) const { getMessage } = useMessage() const router = useRouter() const globalLocaleState = useRecoilValue(globalLocaleStore) const { promiseGet } = useAxios(globalLocaleState) - const sessionState = useRecoilValue(sessionStore) - //์ตœ๊ทผ ๋ฌผ๊ฑด const [objectList, setObjectList] = useState([]) @@ -36,12 +35,12 @@ export default function MainContents() { fetchObjectList() fetchNoticeList() fetchFaqList() - }, [sessionState]) + }, []) //์ตœ๊ทผ ๊ฐฑ์‹  ๋ฌผ๊ฑด๋ชฉ๋ก / Sales Contact info ์ •๋ณด const fetchObjectList = async () => { try { - const apiUrl = `/api/main-page/object/${sessionState?.storeId}/list` + const apiUrl = `/api/main-page/object/${session?.storeId}/list` await promiseGet({ url: apiUrl, }).then((res) => { diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index b7b0d8d7..3dc9a2f4 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -218,10 +218,6 @@ export default function Stuff() { stuffSearchParams.endRow = 1 * pageSize stuffSearchParams.schSortType = defaultSortType setPageNo(1) - setStuffSearch({ - ...stuffSearch, - code: 'FINISH', - }) async function fetchData() { const apiUrl = `/api/object/list?saleStoreId=${session?.storeId}&${queryStringFormatter(stuffSearchParams)}` @@ -239,6 +235,25 @@ export default function Stuff() { fetchData() } else if (stuffSearchParams?.code === 'C') { resetStuffRecoil() + } else if (stuffSearchParams?.code === 'FINISH') { + stuffSearchParams.startRow = 1 + stuffSearchParams.endRow = 1 * pageSize + stuffSearchParams.schSortType = defaultSortType + setPageNo(1) + async function fetchData() { + const apiUrl = `/api/object/list?saleStoreId=${session?.storeId}&${queryStringFormatter(stuffSearchParams)}` + await get({ url: apiUrl }).then((res) => { + if (!isEmptyArray(res)) { + setGridProps({ ...gridProps, gridData: res, count: res[0].totCnt }) + setTotalCount(res[0].totCnt) + } else { + setGridProps({ ...gridProps, gridData: [], count: 0 }) + setTotalCount(0) + } + }) + } + + fetchData() } }, [stuffSearchParams]) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 93328de3..6378aeec 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -18,6 +18,7 @@ import WindSelectPop from './popup/WindSelectPop' import { useCommonCode } from '@/hooks/common/useCommonCode' import StuffPlanQGrid from './StuffPlanQGrid' import { floorPlanObjectState } from '@/store/floorPlanObjectAtom' +import { ManagementContext } from '@/app/management/ManagementProvider' export default function StuffDetail() { const setFloorPlanObjectNo = useSetRecoilState(floorPlanObjectState) //๊ฒฌ์ ์„œ ํ™”๋ฉด์šฉ ๋ฌผ๊ฑด๋ฒˆํ˜ธ๋ฆฌ์ฝ”์ผ @@ -96,7 +97,7 @@ export default function StuffDetail() { const objectNo = searchParams.get('objectNo') //url์—์„œ ๋ฌผ๊ฑด๋ฒˆํ˜ธ ๊บผ๋‚ด์„œ ๋ฐ”๋กœ set const [editMode, setEditMode] = useState('NEW') - const [detailData, setDetailData] = useState({}) + const { managementState, setManagementState } = useContext(ManagementContext) const [planGridProps, setPlanGridProps] = useState({ planGridData: [], @@ -289,9 +290,9 @@ export default function StuffDetail() { promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => { if (res.status === 200) { if (res.data != null) { - setDetailData(res.data) + setManagementState(res.data) } else { - setDetailData({}) + setManagementState({}) } if (isNotEmptyArray(res.data.planList)) { setPlanGridProps({ ...planGridProps, planGridData: res.data.planList }) @@ -299,7 +300,7 @@ export default function StuffDetail() { setPlanGridProps({ ...planGridProps, planGridData: [] }) } } else { - setDetailData({}) + setManagementState({}) setPlanGridProps({ ...planGridProps, planGridData: [] }) } }) @@ -415,7 +416,7 @@ export default function StuffDetail() { }, [commonCode]) useEffect(() => { - if (isObjectNotEmpty(detailData)) { + if (isObjectNotEmpty(managementState)) { // ๋„๋„๋ถ€ํ˜„API get({ url: '/api/object/prefecture/list' }).then((res) => { if (!isEmptyArray(res)) { @@ -449,18 +450,17 @@ export default function StuffDetail() { setFavoriteStoreList(favList) setShowSaleStoreList(favList) - if (detailData.firstAgentId != null) { - form.setValue('saleStoreId', detailData.firstAgentId) - setSelOptions(detailData.firstAgentId) + if (managementState.firstAgentId != null) { + form.setValue('saleStoreId', managementState.firstAgentId) + setSelOptions(managementState.firstAgentId) } else { - form.setValue('saleStoreId', detailData.saleStoreId) - setSelOptions(detailData.saleStoreId) + form.setValue('saleStoreId', managementState.saleStoreId) + setSelOptions(managementState.saleStoreId) } //์ƒ์„ธ๋ฐ์ดํ„ฐ์˜ 1์ฐจ์  ์•„์ด๋””๋กœ 2์ฐจ์  ๋ชฉ๋ก ์กฐํšŒํ•˜๊ธฐ - let data = detailData?.firstAgentId ? detailData.firstAgentId : detailData.saleStoreId - // url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=0&userId=${session?.userId}` + let data = managementState?.firstAgentId ? managementState.firstAgentId : managementState.saleStoreId url = `/api/object/saleStore/${data}/list?firstFlg=0&userId=${session?.userId}` get({ url: url }).then((res) => { @@ -502,74 +502,74 @@ export default function StuffDetail() { //์ƒ์„ธ๋ฐ์ดํ„ฐ๊ฐ€ 1์ฐจ์ ์ด๋ฉด 1์ฐจ์ ์— ์„ธํŒ… //์ƒ์„ธ๋ฐ์ดํ„ฐ๊ฐ€ 2์ฐจ์ ์ด๋ฉด 2์ฐจ์ ์— ์„ธํŒ…ํ•˜๊ณ  ์„ธ์…˜์œผ๋กœ 1์ฐจ์  ์„ธํŒ… - if (detailData.saleStoreLevel === '1') { - setSelOptions(detailData.saleStoreId) - form.setValue('saleStoreId', detailData.saleStoreId) - form.setValue('saleStoreLevel', detailData.saleStoreLevel) + if (managementState.saleStoreLevel === '1') { + setSelOptions(managementState.saleStoreId) + form.setValue('saleStoreId', managementState.saleStoreId) + form.setValue('saleStoreLevel', managementState.saleStoreLevel) } else { - setOtherSelOptions(detailData.saleStoreId) - form.setValue('otherSaleStoreId', detailData.saleStoreId) - form.setValue('otherSaleStoreLevel', detailData.saleStoreLevel) + setOtherSelOptions(managementState.saleStoreId) + form.setValue('otherSaleStoreId', managementState.saleStoreId) + form.setValue('otherSaleStoreLevel', managementState.saleStoreLevel) form.setValue('saleStoreLevel', '1') } //์„ค๊ณ„์˜๋ขฐNo. - form.setValue('planReqNo', detailData.planReqNo) + form.setValue('planReqNo', managementState.planReqNo) //๋‹ด๋‹น์ž - form.setValue('receiveUser', detailData.receiveUser) + form.setValue('receiveUser', managementState.receiveUser) //๋ฌผ๊ฑด๊ตฌ๋ถ„objectStatusId - setSelectObjectStatusId(detailData.objectStatusId) - form.setValue('objectStatusId', detailData.objectStatusId) + setSelectObjectStatusId(managementState.objectStatusId) + form.setValue('objectStatusId', managementState.objectStatusId) //๋ฌผ๊ฑด๋ช… - form.setValue('objectName', detailData.objectName) + form.setValue('objectName', managementState.objectName) //๊ฒฝ์นญ์ฝ”๋“œ - setSelHonorificCode(detailData.objectNameOmit) - form.setValue('objectNameOmit', detailData.objectNameOmit) + setSelHonorificCode(managementState.objectNameOmit) + form.setValue('objectNameOmit', managementState.objectNameOmit) //๋ฌผ๊ฑด๋ช… ํ›„๋ฆฌ๊ฐ€๋‚˜ - form.setValue('objectNameKana', detailData.objectNameKana) + form.setValue('objectNameKana', managementState.objectNameKana) //์šฐํŽธ๋ฒˆํ˜ธ - form.setValue('zipNo', detailData.zipNo) + form.setValue('zipNo', managementState.zipNo) //๋„๋„๋ถ€ํ˜„ / ์ฃผ์†Œ - setPrefValue(detailData.prefId) - form.setValue('prefId', detailData.prefId) - form.setValue('prefName', detailData.prefName) - form.setValue('address', detailData.address) + setPrefValue(managementState.prefId) + form.setValue('prefId', managementState.prefId) + form.setValue('prefName', managementState.prefName) + form.setValue('address', managementState.address) //๋ฐœ์ „์‹œ๋ฎฌ - form.setValue('areaId', detailData.areaId) + form.setValue('areaId', managementState.areaId) //๊ธฐ์ค€ํ’์† - form.setValue('standardWindSpeedId', detailData.standardWindSpeedId) + form.setValue('standardWindSpeedId', managementState.standardWindSpeedId) //์ˆ˜์ง์ ์„ค๋Ÿ‰ - form.setValue('verticalSnowCover', detailData.verticalSnowCover) + form.setValue('verticalSnowCover', managementState.verticalSnowCover) //ํ•œ๋žญ์ง€๋Œ€์ฑ…์‹œํ–‰ coldRegionFlg 1์ด๋ฉด true - form.setValue('coldRegionFlg', detailData.coldRegionFlg === '1' ? true : false) + form.setValue('coldRegionFlg', managementState.coldRegionFlg === '1' ? true : false) //๋ฉด์กฐ๋„๊ตฌ๋ถ„ surfaceType null๋กœ ๋‚ด๋ ค์˜ค๋ฉด ์…‹ํŒ… ์•ˆํ•˜๊ณ  ์ €์žฅํ• ๋•Œ ํ•„์ˆ˜๊ฐ’ ์ฒดํฌํ•˜๋„๋ก // form.setValue('surfaceType', 'โ…ก') // form.setValue('surfaceType', 'โ…ขใƒปโ…ฃ') - form.setValue('surfaceType', detailData.surfaceType) + form.setValue('surfaceType', managementState.surfaceType) //์—ผํ•ด์ง€์—ญ์šฉ์•„์ดํ…œ์‚ฌ์šฉ saltAreaFlg 1์ด๋ฉด true - form.setValue('saltAreaFlg', detailData.saltAreaFlg === '1' ? true : false) + form.setValue('saltAreaFlg', managementState.saltAreaFlg === '1' ? true : false) //์„ค์น˜๋†’์ด - form.setValue('installHeight', detailData.installHeight) + form.setValue('installHeight', managementState.installHeight) //๊ณ„์•ฝ์กฐ๊ฑด null๋กœ ๋‚ด๋ ค์˜ค๋ฉด 0์œผ๋กœ ๋””ํดํŠธ์…‹ํŒ… - if (detailData.conType === null) { + if (managementState.conType === null) { form.setValue('conType', '0') } else { - form.setValue('conType', detailData.conType) + form.setValue('conType', managementState.conType) } //๋ฉ”๋ชจ - form.setValue('remarks', detailData.remarks) + form.setValue('remarks', managementState.remarks) }) } - }, [detailData, session]) + }, [managementState, session]) //๊ฒฝ์นญ์„ ํƒ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ const onChangeHonorificCode = (key) => { @@ -1189,9 +1189,9 @@ export default function StuffDetail() { return alert(getMessage('stuff.detail.save.valierror2')) } - let detail_sort = Object.keys(detailData) + let detail_sort = Object.keys(managementState) .sort() - .reduce((obj, key) => ((obj[key] = detailData[key]), obj), {}) + .reduce((obj, key) => ((obj[key] = managementState[key]), obj), {}) let params_sort = Object.keys(params) .sort() .reduce((obj, key) => ((obj[key] = params[key]), obj), {}) @@ -1313,7 +1313,7 @@ export default function StuffDetail() { // ๋ฌผ๊ฑด์‚ญ์ œ const onDelete = () => { - const specificationConfirmDate = detailData.specificationConfirmDate + const specificationConfirmDate = managementState.specificationConfirmDate if (specificationConfirmDate != null) { alert(getMessage('stuff.detail.delete.message1')) } else { @@ -1860,8 +1860,7 @@ export default function StuffDetail() {
    - {/* {detailData?.tempFlg === '1' && form.watch('planReqNo') ? ( */} - {detailData?.tempFlg === '1' && form.watch('planReqNo') ? ( + {managementState?.tempFlg === '1' && form.watch('planReqNo') ? ( ) : null}
    - {detailData?.tempFlg === '1' ? ( + {managementState?.tempFlg === '1' ? ( <>
    - {/* {detailData?.tempFlg === '0' ? ( */} - {detailData?.tempFlg === '0' ? ( + {managementState?.tempFlg === '0' ? ( <> {/* ์ง„์งœR ํ”Œ๋žœ์‹œ์ž‘ */}
    @@ -2355,7 +2359,7 @@ export default function StuffDetail() {
    • {getMessage('stuff.detail.planList.cnt')} - {detailData.planList?.length} + {managementState.planList?.length}
    diff --git a/src/components/management/StuffHeader.jsx b/src/components/management/StuffHeader.jsx index d7e3246d..f32c971c 100644 --- a/src/components/management/StuffHeader.jsx +++ b/src/components/management/StuffHeader.jsx @@ -1,40 +1,21 @@ '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' +import { useContext } from 'react' import { useMessage } from '@/hooks/useMessage' import dayjs from 'dayjs' - +import { ManagementContext } from '@/app/management/ManagementProvider' export default function StuffHeader() { const { getMessage } = useMessage() - 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) => { - if (res != null && res != '') { - setHeaderData(res) - } else { - alert(getMessage('stuff.detail.header.message1')) - router.push('/management/stuff') - } - }) - }, [objectNo]) + const { managementState } = useContext(ManagementContext) //๋ฌผ๊ฑด๋ฒˆํ˜ธ ๋ณต์‚ฌ const copyObjectNo = async (objectNo) => { await navigator.clipboard.writeText(objectNo) - alert(getMessage('stuff.detail.header.message2')) + alert(getMessage('stuff.detail.header.successCopy')) try { } catch (error) { - alert(getMessage('stuff.detail.header.message3')) + alert(getMessage('stuff.detail.header.failCopy')) } } @@ -43,31 +24,31 @@ export default function StuffHeader() {
    {getMessage('stuff.detail.header.objectNo')}
    - {headerData.objectNo}{' '} + {managementState?.objectNo}{' '}
    {getMessage('stuff.detail.header.specificationConfirmDate')}
    -
    {headerData.specificationConfirmDate}
    +
    {managementState?.specificationConfirmDate}
    {getMessage('stuff.detail.header.lastEditDatetime')}
    - {headerData?.lastEditDatetime ? `${dayjs(headerData.lastEditDatetime).format('YYYY.MM.DD HH:mm:ss')}` : ''}{' '} - {headerData?.lastEditUserName ? `(${headerData.lastEditUserName})` : null} + {managementState?.lastEditDatetime ? `${dayjs(managementState.lastEditDatetime).format('YYYY.MM.DD HH:mm:ss')}` : ''}{' '} + {managementState?.lastEditUserName ? `(${managementState.lastEditUserName})` : null}
    {getMessage('stuff.detail.header.createDatetime')}
    - {headerData?.createDatetime ? `${dayjs(headerData.lastEditDatetime).format('YYYY.MM.DD')}` : ''}{' '} - {headerData?.createUserName ? `(${headerData.createUserName})` : null} + {managementState?.createDatetime ? `${dayjs(managementState.lastEditDatetime).format('YYYY.MM.DD')}` : ''}{' '} + {managementState?.createUserName ? `(${managementState.createUserName})` : null}
    diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index f82d83f3..6a16695a 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -223,10 +223,6 @@ export default function StuffSearchCondition() { } }) } - // setStuffSearch({ - // ...stuffSearch, - // code: 'S', - // }) } else { if (session?.storeLvl === '1') { allList = res diff --git a/src/hooks/floorPlan/estimate/useEstimateController.js b/src/hooks/floorPlan/estimate/useEstimateController.js index 06f3d4b4..4330a208 100644 --- a/src/hooks/floorPlan/estimate/useEstimateController.js +++ b/src/hooks/floorPlan/estimate/useEstimateController.js @@ -29,8 +29,8 @@ const defaultEstimateData = { } // Helper functions -const updateItemInList = (itemList, itemId, updates) => { - return itemList.map((item) => (item.itemId === itemId ? { ...item, ...updates } : item)) +const updateItemInList = (itemList, dispOrder, updates) => { + return itemList.map((item) => (item.dispOrder === dispOrder ? { ...item, ...updates } : item)) } export const useEstimateController = (planNo) => { @@ -69,9 +69,9 @@ export const useEstimateController = (planNo) => { } } - const updateItem = (itemId, updates) => { + const updateItem = (dispOrder, updates) => { setState({ - itemList: updateItemInList(state.itemList, itemId, updates), + itemList: updateItemInList(state.itemList, dispOrder, updates), }) } @@ -85,14 +85,16 @@ export const useEstimateController = (planNo) => { planNo: planNo, dispOrder: newItemDispOrder.toString(), itemId: '', //์ œํ’ˆ๋ฒˆํ˜ธ - itemNo: '', //ํ˜•๋ช… - itemName: '', + itemNo: '', + itemName: '', //ํ˜•๋ช… amount: '', //์ˆ˜๋Ÿ‰ unitPrice: '0', unit: '', //๋‹จ์œ„ salePrice: '0', //๋‹จ๊ฐ€ saleTotPrice: '0', //๊ธˆ์•ก(๋ถ€๊ฐ€์„ธ๋ณ„๋„) itemChangeFlg: '1', //์ถ”๊ฐ€์‹œ ์ฒด์ธ์ง€ํ”Œ๋ž˜๊ทธ 1๋กœ + partAdd: '1', //NEW ์ฒด์ธ์ง€ ํ”Œ๋ž˜๊ทธ + delFlg: '0', //์‚ญ์ œ ํ”Œ๋ž˜๊ทธ 0 ์‚ญ์ œํ•˜๋ฉด 1 }, ], }) @@ -102,34 +104,61 @@ export const useEstimateController = (planNo) => { setEstimateData({ ...state, userId: session.userId, sapSalesStoreCd: session.custCd }) }, [state]) + // ์ฒจ๋ถ€ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ + const handleEstimateFileDownload = async (originFile) => { + const options = { responseType: 'blob' } + + await promisePost({ url: `/api/file/fileDownload`, data: originFile, option: options }) + .then((resultData) => { + if (resultData) { + const blob = new Blob([resultData.data], { type: resultData.headers['content-type'] || 'application/octet-stream' }) + const fileUrl = window.URL.createObjectURL(blob) + const link = document.createElement('a') + + link.href = fileUrl + link.download = originFile.faileName + document.body.appendChild(link) + link.click() + link.remove() + window.URL.revokeObjectURL(fileUrl) + } + }) + .catch((error) => { + console.log('::FileDownLoad Error::', error) + alert('File does not exist.') + }) + } + //๊ฒฌ์ ์„œ ์ €์žฅ const handleEstimateSubmit = async () => { //0. ํ•„์ˆ˜์ฒดํฌ let flag = true console.log('::๋‹ด๊ธด estimateData:::', estimateData) - + // console.log('์ฒจ๋ถ€ํŒŒ์ผ:::::', estimateData.fileList) + //์ฒจ๋ถ€ํŒŒ์ผ์„ ์ฒจ๋ถ€์•ˆํ–ˆ๋Š”๋ฐ //์•„์ดํ…œ fileUploadFlg๊ฐ€1(์ฒจ๋ถ€ํŒŒ์ผ ํ•„์ˆ˜)์ด 1๊ฐœ๋ผ๋„ ์žˆ๋Š”๋ฐ ํ›„์ผ ์ž๋ฃŒ ์ œ์ถœ(fileFlg) ์ฒดํฌ์•ˆํ–ˆ์œผ๋ฉด(0) alert ์ €์žฅ์•ˆ๋ผ - if (estimateData.itemList.length > 1) { - estimateData.itemList.map((row) => { - if (row.fileUploadFlg === '1') { - if (estimateData.fileFlg === '0') { - alert(getMessage('estimate.detail.save.requiredMsg')) - flag = false + if (estimateData.fileList.length < 1) { + if (estimateData.itemList.length > 1) { + estimateData.itemList.map((row) => { + if (row.fileUploadFlg === '1') { + if (estimateData.fileFlg === '0') { + alert(getMessage('estimate.detail.save.requiredMsg')) + flag = false + } } - } - }) + }) + } } + if (flag) { //1. ์ฒจ๋ถ€ํŒŒ์ผ ์ €์žฅ const formData = new FormData() + console.log('์ฒจ๋ถ€ํŒŒ์ผ:!!!', estimateData.fileList) formData.append('file', estimateData.fileList) formData.append('objectNo', estimateData.objectNo) formData.append('planNo', estimateData.planNo) formData.append('category', '10') formData.append('userId', estimateData.userId) - // for (const value of formData.values()) { - // console.log('formData::', value) - // } await post({ url: '/api/file/fileUpload', data: formData }) @@ -162,5 +191,6 @@ export const useEstimateController = (planNo) => { addItem, handleEstimateSubmit, fetchSetting, + handleEstimateFileDownload, } } diff --git a/src/locales/ja.json b/src/locales/ja.json index 97d3f599..fad3e4df 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -616,9 +616,9 @@ "stuff.planReqPopup.title": "่จญ่จˆไพ้ ผใฎใ‚คใƒณใƒใƒผใƒˆ", "stuff.temp.subTitle": "ๅ•†ๅ“ๆƒ…ๅ ฑ", "stuff.temp.subTitle2": "ไฝœๅ›ณ", - "stuff.detail.header.message1": "ๅญ˜ๅœจใ—ใชใ„ใ‚‚ใฎใงใ™ใ€‚", - "stuff.detail.header.message2": "ๅ•†ๅ“็•ชๅทใŒใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸใ€‚", - "stuff.detail.header.message3": "ๅญ˜ๅœจใ—ใชใ„ใ‚‚ใฎใงใ™ใ€‚", + "stuff.detail.header.notExistObjectNo": "ๅญ˜ๅœจใ—ใชใ„ใ‚‚ใฎใงใ™ใ€‚", + "stuff.detail.header.successCopy": "ๅ•†ๅ“็•ชๅทใŒใ‚ณใƒ”ใƒผใ•ใ‚Œใพใ—ใŸใ€‚", + "stuff.detail.header.failCopy": "ๅญ˜ๅœจใ—ใชใ„ใ‚‚ใฎใงใ™ใ€‚", "stuff.detail.header.objectNo": "ๅ•†ๅ“็•ชๅทใฎใ‚ณใƒ”ใƒผใซๅคฑๆ•—ใ—ใพใ—ใŸใ€‚", "stuff.detail.header.specificationConfirmDate": "ไป•ๆง˜ๆ‹กๅผตๆ—ฅ", "stuff.detail.header.lastEditDatetime": "ๆ›ดๆ–ฐๆ—ฅๆ™‚", diff --git a/src/locales/ko.json b/src/locales/ko.json index 2d42a11c..1220279b 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -626,9 +626,9 @@ "stuff.planReqPopup.title": "์„ค๊ณ„์˜๋ขฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ", "stuff.temp.subTitle": "๋ฌผ๊ฑด์ •๋ณด", "stuff.temp.subTitle2": "๋„๋ฉด์ž‘์„ฑ", - "stuff.detail.header.message1": "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฌผ๊ฑด์ž…๋‹ˆ๋‹ค.", - "stuff.detail.header.message2": "๋ฌผ๊ฑด๋ฒˆํ˜ธ๊ฐ€ ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", - "stuff.detail.header.message3": "๋ฌผ๊ฑด๋ฒˆํ˜ธ ๋ณต์‚ฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", + "stuff.detail.header.notExistObjectNo": "์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฌผ๊ฑด์ž…๋‹ˆ๋‹ค.", + "stuff.detail.header.successCopy": "๋ฌผ๊ฑด๋ฒˆํ˜ธ๊ฐ€ ๋ณต์‚ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", + "stuff.detail.header.failCopy": "๋ฌผ๊ฑด๋ฒˆํ˜ธ ๋ณต์‚ฌ์— ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.", "stuff.detail.header.objectNo": "๋ฌผ๊ฑด๋ฒˆํ˜ธ", "stuff.detail.header.specificationConfirmDate": "์‚ฌ์–‘ํ™•์žฅ์ผ", "stuff.detail.header.lastEditDatetime": "๊ฐฑ์‹ ์ผ์‹œ",