Merge branch 'dev' into dev-yj

This commit is contained in:
yjnoh 2025-02-04 11:02:24 +09:00
commit f1828b73ab
21 changed files with 743 additions and 778 deletions

View File

@ -1,5 +1,7 @@
NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080" NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080"
NEXT_PUBLIC_HOST_URL="http://localhost:4000"
SESSION_SECRET="i3iHH1yp2/2SpQSIySQ4bpyc4g0D+zCF9FAn5xUG0+Y=" SESSION_SECRET="i3iHH1yp2/2SpQSIySQ4bpyc4g0D+zCF9FAn5xUG0+Y="
NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3" NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3"

View File

@ -1,5 +1,7 @@
NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080" NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080"
NEXT_PUBLIC_HOST_URL="http://localhost:4000"
SESSION_SECRET="i3iHH1yp2/2SpQSIySQ4bpyc4g0D+zCF9FAn5xUG0+Y=" SESSION_SECRET="i3iHH1yp2/2SpQSIySQ4bpyc4g0D+zCF9FAn5xUG0+Y="
NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3" NEXT_PUBLIC_CONVERTER_API_URL="https://v2.convertapi.com/convert/dwg/to/png?Secret=secret_bV5zuYMyyIYFlOb3"

View File

@ -177,6 +177,7 @@ export const SAVE_KEY = [
'moduleRowsTotCnt', 'moduleRowsTotCnt',
'seq', 'seq',
'smartRackId', 'smartRackId',
'directionText',
'quotationParam', 'quotationParam',
'pcses', 'pcses',
] ]

View File

@ -13,6 +13,8 @@ import { QcastContext } from '@/app/QcastProvider'
import { sessionStore } from '@/store/commonAtom' import { sessionStore } from '@/store/commonAtom'
import { isObjectNotEmpty } from '@/util/common-utils' import { isObjectNotEmpty } from '@/util/common-utils'
import BoardDetailModal from './community/modal/BoardDetailModal'
export default function MainPage() { export default function MainPage() {
const [sessionState, setSessionState] = useRecoilState(sessionStore) const [sessionState, setSessionState] = useRecoilState(sessionStore)
const [chagePasswordPopOpen, setChagePasswordPopOpen] = useState(false) const [chagePasswordPopOpen, setChagePasswordPopOpen] = useState(false)
@ -79,8 +81,13 @@ export default function MainPage() {
} }
}, [sessionState]) }, [sessionState])
// FAQ
const [open, setOpen] = useState(false)
const [modalNoticeNo, setModalNoticeNo] = useState('')
return ( return (
<> <>
{open && <BoardDetailModal noticeNo={modalNoticeNo} setOpen={setOpen} />}
{(!chagePasswordPopOpen && ( {(!chagePasswordPopOpen && (
<> <>
<div className="background-bord"></div> <div className="background-bord"></div>
@ -120,7 +127,7 @@ export default function MainPage() {
<button className="search-icon" onClick={handleOnSubmit}></button> <button className="search-icon" onClick={handleOnSubmit}></button>
</div> </div>
</div> </div>
<MainContents /> <MainContents setFaqOpen={setOpen} setFaqModalNoticeNo={setModalNoticeNo} />
</div> </div>
</> </>
)) || ( )) || (

View File

@ -28,8 +28,10 @@ export const Orientation = forwardRef(({ tabNum }, ref) => {
}, [compasDeg]) }, [compasDeg])
const checkDegree = (e) => { const checkDegree = (e) => {
if (numberCheck(Number(e)) && Number(e) >= -180 && Number(e) <= 180) { if (Number(e) >= -180 && Number(e) <= 180) {
setCompasDeg(Number(e)) if (numberCheck(Number(e))) {
setCompasDeg(Number(e))
}
} else { } else {
setCompasDeg(compasDeg) setCompasDeg(compasDeg)
} }
@ -46,8 +48,8 @@ export const Orientation = forwardRef(({ tabNum }, ref) => {
{Array.from({ length: 180 / 15 }).map((dot, index) => ( {Array.from({ length: 180 / 15 }).map((dot, index) => (
<div <div
key={index} key={index}
className={`circle ${getDegreeInOrientation(compasDeg) === 15 * (12 + index) ? 'act' : ''}`} className={`circle ${getDegreeInOrientation(compasDeg) === -1 * (-15 * index + 180) ? 'act' : ''}`}
onClick={() => setCompasDeg(15 * (12 + index))} onClick={() => setCompasDeg(-1 * (-15 * index + 180))}
> >
{index === 0 && <i>180°</i>} {index === 0 && <i>180°</i>}
{index === 6 && <i>-90°</i>} {index === 6 && <i>-90°</i>}

View File

@ -51,7 +51,9 @@ export default function CircuitTrestleSetting({ id }) {
const [selectedStepUpValues, setSelectedStepUpValues] = useState({}) const [selectedStepUpValues, setSelectedStepUpValues] = useState({})
const [getStepUpSelections, setGetStepUpSelections] = useState(null) const [getStepUpSelections, setGetStepUpSelections] = useState(null)
const [stepUpListData, setStepUpListData] = useRecoilState(stepUpListDataState) // const [stepUpListData, setStepUpListData] = useRecoilState(stepUpListDataState)
const [stepUpListData, setStepUpListData] = useState([])
const [seletedOption, setSeletedOption] = useState(null)
useEffect(() => { useEffect(() => {
if (!managementState) { if (!managementState) {
@ -67,10 +69,6 @@ export default function CircuitTrestleSetting({ id }) {
} }
}, [tabNum]) }, [tabNum])
useEffect(() => {
console.log('stepUpListData >>> ', stepUpListData)
}, [stepUpListData])
const onAutoRecommend = () => { const onAutoRecommend = () => {
if (series.filter((s) => s.selected).length === 0) { if (series.filter((s) => s.selected).length === 0) {
swalFire({ swalFire({
@ -159,27 +157,26 @@ export default function CircuitTrestleSetting({ id }) {
} }
const getRoofSurfaceList = () => { const getRoofSurfaceList = () => {
return canvas const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
.getObjects() roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top)
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) return roofSurfaceList.map((obj) => {
.map((obj) => { return {
return { roofSurfaceId: obj.id,
roofSurfaceId: obj.id, roofSurface: canvas
roofSurface: canvas .getObjects()
.getObjects() .filter((o) => o.id === obj.parentId)[0]
.filter((o) => o.id === obj.parentId)[0] .directionText.replace(/[0-9]/g, ''),
.directionText.replace(/[0-9]/g, ''), roofSurfaceIncl: canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch,
roofSurfaceIncl: canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch, moduleList: getModuleList(obj).map((module) => {
moduleList: getModuleList(obj).map((module) => { return {
return { itemId: module.moduleInfo.itemId,
itemId: module.moduleInfo.itemId, circuit: module.circuitNumber ? module.circuitNumber : null,
circuit: module.circuitNumber ? module.circuitNumber : null, pcsItemId: module.circuit ? module.circuit?.pcsItemId : null,
pcsItemId: module.circuit ? module.circuit?.pcsItemId : null, uniqueId: module.id ? module.id : null,
uniqueId: module.id ? module.id : null, }
} }),
}), }
} })
})
} }
const getModuleList = (surface) => { const getModuleList = (surface) => {
@ -358,60 +355,17 @@ export default function CircuitTrestleSetting({ id }) {
setGetStepUpSelections(() => getCurrentSelections) setGetStepUpSelections(() => getCurrentSelections)
} }
// apply // ()
const onApply = () => { const onApply = () => {
// canvas
const currentSelections = getStepUpSelections ? getStepUpSelections() : {} .getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
console.log('currentSelections >>> ', currentSelections) .map((obj) => {
obj.pcses = getStepUpListData()
//
const hasSelections = Object.values(currentSelections).some((stepUpConfig) => Object.values(stepUpConfig).length > 0)
console.log('hasSelections >>> ', hasSelections)
if (!hasSelections) {
swalFire({
title: '승압 설정값을 선택해주세요.1',
type: 'alert',
}) })
return
}
// console.log(canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE))
console.log('Applying StepUp configurations:', currentSelections) apply()
// StepUp stepUpListData
//const stepUpData = getStepUpSelections().stepUpListData
//console.log('stepUpData >>> ', stepUpData)
// stepUpListData Recoil state
// setStepUpListData(stepUpData)
//
const configurations = Object.values(currentSelections)
.map((stepUpConfig) => {
const firstConfig = Object.values(stepUpConfig)[0] //
return {
pcsInfo: firstConfig.pcsInfo,
allocation: firstConfig.allocation,
}
})
.filter((config) => config.pcsInfo && config.allocation) //
console.log('Processed configurations:', configurations)
// stepUpListData Recoil state
setStepUpListData(configurations)
// apply
if (configurations.length > 0) {
apply()
} else {
swalFire({
title: '승압 설정값을 선택해주세요.2',
type: 'alert',
})
}
} }
const onClickPrev = () => { const onClickPrev = () => {
@ -474,6 +428,32 @@ export default function CircuitTrestleSetting({ id }) {
getRoofSurfaceList, // getRoofSurfaceList, //
getPcsItemList, // PCS getPcsItemList, // PCS
onValuesSelected: handleStepUpValuesSelected, // onValuesSelected: handleStepUpValuesSelected, //
stepUpListData,
setStepUpListData,
seletedOption,
setSeletedOption,
}
const getStepUpListData = () => {
return stepUpListData[0].pcsItemList.map((item) => {
return item.serQtyList
.filter((serQty) => serQty.selected)
.map((serQty) => {
return {
pcsMkrCd: item.pcsMkrCd,
pcsSerCd: item.pcsSerCd,
pcsItemId: item.itemId,
pscOptCd: seletedOption.code,
// pcsOptCd: 'CLC_RMC',
paralQty: serQty.paralQty,
connections: [
{
connItemId: item.connList[0].itemId,
},
],
}
})[0]
})
} }
return ( return (

View File

@ -12,6 +12,7 @@ import { useMasterController } from '@/hooks/common/useMasterController'
import { v4 as uuidv4 } from 'uuid' import { v4 as uuidv4 } from 'uuid'
export default function StepUp(props) { export default function StepUp(props) {
const { stepUpListData, setStepUpListData, seletedOption, setSeletedOption } = props
const { getMessage } = useMessage() const { getMessage } = useMessage()
const [moduleTab, setModuleTab] = useState(1) const [moduleTab, setModuleTab] = useState(1)
const [moduleTabs, setModuleTabs] = useState({}) const [moduleTabs, setModuleTabs] = useState({})
@ -22,7 +23,6 @@ export default function StepUp(props) {
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const selectedModules = useRecoilValue(selectedModuleState) const selectedModules = useRecoilValue(selectedModuleState)
const [stepUpListData, setStepUpListData] = useState([])
const [optCodes, setOptCodes] = useState([]) const [optCodes, setOptCodes] = useState([])
const [selectedRows, setSelectedRows] = useState({}) const [selectedRows, setSelectedRows] = useState({})
@ -65,6 +65,7 @@ export default function StepUp(props) {
// PCS // PCS
const formattedOptCodes = formatOptionCodes(res.data.optionList) const formattedOptCodes = formatOptionCodes(res.data.optionList)
setOptCodes(formattedOptCodes) setOptCodes(formattedOptCodes)
setSeletedOption(formattedOptCodes[0])
} }
} catch (error) { } catch (error) {
console.error('Error fetching step up data:', error) console.error('Error fetching step up data:', error)
@ -80,16 +81,6 @@ export default function StepUp(props) {
})) }))
} }
// // PCS
// const formatStepUpListData = (dataArray = []) => {
// return dataArray?.map((stepUps) => ({
// ...stepUps,
// optionList: formatOptionList(stepUps.optionList),
// pcsItemList: formatPcsItemList(stepUps.pcsItemList),
// selectedPcsItem: formatPcsItemList(stepUps.pcsItemList),
// }))
// }
// PCS // PCS
const formatStepUpListData = (dataArray = []) => { const formatStepUpListData = (dataArray = []) => {
const formattedData = dataArray?.map((stepUps) => ({ const formattedData = dataArray?.map((stepUps) => ({
@ -98,12 +89,12 @@ export default function StepUp(props) {
pcsItemList: formatPcsItemList(stepUps.pcsItemList), pcsItemList: formatPcsItemList(stepUps.pcsItemList),
selectedPcsItem: formatPcsItemList(stepUps.pcsItemList), selectedPcsItem: formatPcsItemList(stepUps.pcsItemList),
})) }))
console.log('🚀 ~ formatStepUpListData ~ formattedData:', formattedData)
// selectedValues // selectedValues
const initialSelectedValues = {} const initialSelectedValues = {}
formattedData.forEach((stepUp) => { formattedData.forEach((stepUp) => {
stepUp.pcsItemList.forEach((pcsItem, pcsIdx) => { stepUp.pcsItemList.forEach((pcsItem, pcsIdx) => {
const pcsKey = `${stepUp.id}_${pcsIdx}` const pcsKey = `${pcsItem.goodsNo}_${pcsIdx}`
// (rmdYn === 'Y') // (rmdYn === 'Y')
const recommendedRow = pcsItem.serQtyList.find((item) => item.rmdYn === 'Y') const recommendedRow = pcsItem.serQtyList.find((item) => item.rmdYn === 'Y')
@ -122,8 +113,8 @@ export default function StepUp(props) {
}, },
} }
initialSelectedValues[stepUp.id] = { initialSelectedValues[pcsItem.goodsNo] = {
...initialSelectedValues[stepUp.id], ...initialSelectedValues[pcsItem.goodsNo],
[pcsKey]: selectionData, [pcsKey]: selectionData,
} }
} }
@ -212,12 +203,7 @@ export default function StepUp(props) {
} }
// //
// const handleRowClick = (goodsNo, pcsIdx, serQtyIdx, serQty, paralQty) => {
const handleRowClick = (mainIdx, subIdx) => { const handleRowClick = (mainIdx, subIdx) => {
// const rowKey = `${goodsNo}_${pcsIdx}_${serQtyIdx}`
// const pcsKey = `${goodsNo}_${pcsIdx}`
// setSelectedRow(rowKey)
// item.selected = !item.selected\
let tempStepUpListData = [...stepUpListData] let tempStepUpListData = [...stepUpListData]
let selectedData = {} let selectedData = {}
tempStepUpListData[0].pcsItemList[mainIdx].serQtyList.forEach((item, index) => { tempStepUpListData[0].pcsItemList[mainIdx].serQtyList.forEach((item, index) => {
@ -227,6 +213,7 @@ export default function StepUp(props) {
item.selected = index === subIdx item.selected = index === subIdx
}) })
setStepUpListData(tempStepUpListData) setStepUpListData(tempStepUpListData)
console.log('🚀 ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData) console.log('🚀 ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData)
console.log('🚀 ~ handleRowClick ~ selectedData:', selectedData) console.log('🚀 ~ handleRowClick ~ selectedData:', selectedData)
@ -235,19 +222,16 @@ export default function StepUp(props) {
const moduleIds = targetSurface.modules.map((module) => { const moduleIds = targetSurface.modules.map((module) => {
return module.id return module.id
}) })
console.log(moduleIds)
canvas canvas
.getObjects() .getObjects()
.filter((obj) => moduleIds.includes(obj.parentId)) .filter((obj) => moduleIds.includes(obj.parentId))
.map((text) => { .map((text) => {
console.log('🚀 ~ handleRowClick ~ text:', text)
canvas.remove(text) canvas.remove(text)
}) })
canvas.renderAll() canvas.renderAll()
roofSurface.moduleList.forEach((module) => { roofSurface.moduleList.forEach((module) => {
console.log('🚀 ~ handleRowClick ~ module:', module.uniqueId)
const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0] const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0]
const moduleCircuitText = new fabric.Text(module.circuit, { const moduleCircuitText = new fabric.Text(module.circuit, {
left: targetModule.left + targetModule.width / 2, left: targetModule.left + targetModule.width / 2,
@ -270,69 +254,26 @@ export default function StepUp(props) {
}) })
canvas.renderAll() canvas.renderAll()
// console.log('goodsNo >> ', goodsNo, serQty, paralQty)
// PCS
// const pcsItem = stepUpListData.find((stepUp) => stepUp.pcsItemList.find((item) => item.goodsNo === goodsNo))?.pcsItemList[pcsIdx]
// -
// const selectionData = {
// goodsNo: tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo,
// pcsInfo: {
// itemId: tempStepUpListData[mainIdx].pcsItemList[subIdx].itemId,
// goodsNo: tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo,
// pcsMkrCd: tempStepUpListData[mainIdx].pcsItemList[subIdx].pcsMkrCd,
// pcsSerCd: tempStepUpListData[mainIdx].pcsItemList[subIdx].pcsSerCd,
// },
// allocation: {
// serQty: tempStepUpListData[mainIdx].pcsItemList[subIdx].serQtyList[subIdx].serQty,
// paralQty: tempStepUpListData[mainIdx].pcsItemList[subIdx].serQtyList[subIdx]. paralQty,
// },
// }
// //
// setSelectedValues((prev) => ({
// ...prev,
// [tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo]: {
// ...prev[tempStepUpListData[mainIdx].pcsItemList[subIdx].goodsNo],
// [pcsKey]: selectionData,
// },
// }))
// //
// if (props.onValuesSelected) {
// props.onValuesSelected(selectionData)
// }
// setSelectedRows((prev) => {
// // stepUpId
// const currentStepUpSelections = prev[goodsNo] || {}
// // ,
// if (currentStepUpSelections[pcsKey] === rowKey) {
// return prev
// }
// return {
// ...prev,
// [goodsNo]: {
// ...currentStepUpSelections,
// [pcsKey]: rowKey,
// },
// }
// })
// // ,
// setIsManualSelection((prev) => ({
// ...prev,
// [goodsNo]: {
// ...prev[goodsNo],
// [pcsKey]: true,
// },
// }))
} }
// //
const getCurrentSelections = () => { const getCurrentSelections = () => {
const selectedValues = stepUpListData[0].pcsItemList.forEach((item) => {
item.serQtyList.filter((serQty) => serQty.selected)
return item.serQtyList.map((serQty) => {
return {
pcsMkrCd: serQty.pcsMkrCd,
pcsSerCd: serQty.pcsSerCd,
pcsItemId: serQty.itemId,
pcsOptCd: seletedOption,
paralQty: serQty.paralQty,
connections: {
connItemId: item.connList[0].itemId,
},
}
})
})
return selectedValues return selectedValues
} }
@ -472,7 +413,15 @@ export default function StepUp(props) {
{optCodes.length > 0 && ( {optCodes.length > 0 && (
<div className="grid-select mr10"> <div className="grid-select mr10">
{/* <QSelectBox title={'電力検出ユニット (モニター付き)'} /> */} {/* <QSelectBox title={'電力検出ユニット (モニター付き)'} /> */}
<QSelectBox options={optCodes} title={optCodes[0].name} value={optCodes[0].name} sourceKey="code" targetKey="code" showKey="name" /> <QSelectBox
options={optCodes}
title={optCodes[0].name}
value={seletedOption}
sourceKey="code"
targetKey="code"
showKey="name"
onChange={(e) => setSeletedOption(e)}
/>
</div> </div>
)} )}
</div> </div>

View File

@ -206,6 +206,9 @@ export default function PassivityCircuitAllocation(props) {
.getObjects() .getObjects()
.filter((obj) => targetModules.includes(obj.id)) .filter((obj) => targetModules.includes(obj.id))
.forEach((obj) => { .forEach((obj) => {
if (obj.circuit) {
canvas.remove(obj.circuit)
}
const moduleCircuitText = new fabric.Text(getCircuitNumber(), { const moduleCircuitText = new fabric.Text(getCircuitNumber(), {
left: obj.left + obj.width / 2, left: obj.left + obj.width / 2,
top: obj.top + obj.height / 2, top: obj.top + obj.height / 2,

View File

@ -14,10 +14,9 @@ import { useMainContentsController } from '@/hooks/main/useMainContentsControlle
import { QcastContext } from '@/app/QcastProvider' import { QcastContext } from '@/app/QcastProvider'
import { useSwal } from '@/hooks/useSwal' import { useSwal } from '@/hooks/useSwal'
import BoardDetailModal from '../community/modal/BoardDetailModal'
import { handleFileDown } from '@/util/board-utils' import { handleFileDown } from '@/util/board-utils'
export default function MainContents() { export default function MainContents({ setFaqOpen, setFaqModalNoticeNo }) {
const { swalFire } = useSwal() const { swalFire } = useSwal()
const { getMessage } = useMessage() const { getMessage } = useMessage()
@ -116,10 +115,6 @@ export default function MainContents() {
} }
} }
// FAQ
const [open, setOpen] = useState(false)
const [modalNoticeNo, setModalNoticeNo] = useState('')
return ( return (
<div className="main-product-list-wrap"> <div className="main-product-list-wrap">
<div className="main-product-list"> <div className="main-product-list">
@ -178,7 +173,6 @@ export default function MainContents() {
</ProductItem> </ProductItem>
</div> </div>
{open && <BoardDetailModal noticeNo={modalNoticeNo} setOpen={setOpen} />}
<div className="main-product-list"> <div className="main-product-list">
<ProductItem num={3} name={getMessage('main.faq')}> <ProductItem num={3} name={getMessage('main.faq')}>
{recentFaqList.length > 0 ? ( {recentFaqList.length > 0 ? (
@ -192,8 +186,8 @@ export default function MainContents() {
className="faq-title pre" className="faq-title pre"
style={{ cursor: 'pointer' }} style={{ cursor: 'pointer' }}
onClick={() => { onClick={() => {
setOpen(true) setFaqOpen(true)
setModalNoticeNo(row.noticeNo) setFaqModalNoticeNo(row.noticeNo)
}} }}
> >
{row.title} {row.title}

View File

@ -303,11 +303,6 @@ export default function Stuff() {
stuffSearchParams.schSaleStoreId = session.storeId stuffSearchParams.schSaleStoreId = session.storeId
stuffSearchParams.schOtherSelSaleStoreId = '' stuffSearchParams.schOtherSelSaleStoreId = ''
stuffSearchParams.schSelSaleStoreId = '' stuffSearchParams.schSelSaleStoreId = ''
// if (session.storeLvl === '1') {
// stuffSearchParams.schSaleStoreId = session.storeId
// stuffSearchParams.schOtherSelSaleStoreId = ''
// stuffSearchParams.schSelSaleStoreId = ''
// }
} }
async function fetchData() { async function fetchData() {

View File

@ -283,15 +283,19 @@ export default function StuffDetail() {
cellStyle: { justifyContent: 'center' }, cellStyle: { justifyContent: 'center' },
cellRenderer: (params) => { cellRenderer: (params) => {
let buttonStyle let buttonStyle
let buttonStyle2
if (params.value == null) { if (params.value == null) {
buttonStyle = { buttonStyle = {
display: 'none', display: 'none',
} }
} buttonStyle2 = {
if (managementState?.createUser === 'T01') { display: 'none',
if (session.userId !== 'T01') { }
// #474 } else {
buttonStyle = { display: 'none' } if (managementState?.createSaleStoreId === 'T01') {
if (session?.storeId !== 'T01') {
buttonStyle = { display: 'none' }
}
} }
} }
return ( return (
@ -312,7 +316,7 @@ export default function StuffDetail() {
{getMessage('stuff.detail.planGrid.btn1')} {getMessage('stuff.detail.planGrid.btn1')}
</button> </button>
<button <button
style={buttonStyle} style={buttonStyle2}
type="button" type="button"
className="grid-btn" className="grid-btn"
onClick={() => { onClick={() => {
@ -347,15 +351,10 @@ export default function StuffDetail() {
} }
promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => { promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => {
if (res.status === 200) { if (res.status === 200) {
// if (res?.data?.createSaleStoreId === 'T01' && session?.storeId !== 'T01') { if (res?.data?.createSaleStoreId === 'T01') {
// setShowButton('none') if (session?.storeId !== 'T01') {
// } else { setShowButton('none')
// if (session.storeId !== res?.data?.createSaleStoreId) { }
// setShowButton('none')
// }
// }
if (res?.data?.createSaleStoreId !== session?.storeId) {
setShowButton('none')
} }
if (isObjectNotEmpty(res.data)) { if (isObjectNotEmpty(res.data)) {
let surfaceTypeValue let surfaceTypeValue
@ -366,6 +365,7 @@ export default function StuffDetail() {
} }
setManagementState({ ...res.data, surfaceTypeValue: surfaceTypeValue }) setManagementState({ ...res.data, surfaceTypeValue: surfaceTypeValue })
} else { } else {
setIsGlobalLoading(false)
setManagementState({}) setManagementState({})
swalFire({ swalFire({
text: getMessage('stuff.detail.header.notExistObjectNo'), text: getMessage('stuff.detail.header.notExistObjectNo'),
@ -381,9 +381,9 @@ export default function StuffDetail() {
setPlanGridProps({ ...planGridProps, planGridData: [] }) setPlanGridProps({ ...planGridProps, planGridData: [] })
} }
} else { } else {
setIsGlobalLoading(false)
setManagementState({}) setManagementState({})
setPlanGridProps({ ...planGridProps, planGridData: [] }) setPlanGridProps({ ...planGridProps, planGridData: [] })
swalFire({ swalFire({
text: getMessage('stuff.detail.header.notExistObjectNo'), text: getMessage('stuff.detail.header.notExistObjectNo'),
type: 'alert', type: 'alert',
@ -1395,7 +1395,7 @@ export default function StuffDetail() {
// //
if (res.status === 201) { if (res.status === 201) {
setIsGlobalLoading(false) setIsGlobalLoading(false)
setFloorPlanObjectNo({ floorPlanObjectNo: objectNo }) setFloorPlanObjectNo({ floorPlanObjectNo: res?.data?.objectNo })
swalFire({ swalFire({
text: getMessage('stuff.detail.save'), text: getMessage('stuff.detail.save'),
type: 'alert', type: 'alert',
@ -1423,7 +1423,7 @@ export default function StuffDetail() {
type: 'alert', type: 'alert',
confirmFn: () => { confirmFn: () => {
setManagementState(res?.data) setManagementState(res?.data)
// callDetailApi(objectNo) router.push(`/management/stuff/detail?objectNo=${res.data.objectNo.toString()}`, { scroll: false })
}, },
}) })
} }
@ -1435,30 +1435,6 @@ export default function StuffDetail() {
} }
} }
const callDetailApi = async (objectNo) => {
await promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => {
// if (res?.data?.createSaleStoreId === 'T01' && session?.storeId !== 'T01') {
// setShowButton('none')
// } else {
// if (session.storeId !== res?.data?.createSaleStoreId) {
// setShowButton('none')
// }
// }
if (res?.data?.createSaleStoreId !== session?.storeId) {
setShowButton('none')
}
let surfaceTypeValue
if (res.data.surfaceType === 'Ⅲ・Ⅳ') {
surfaceTypeValue = '3'
} else {
surfaceTypeValue = '2'
}
setManagementState({ ...res.data, surfaceTypeValue: surfaceTypeValue })
})
}
// //
const onTempSave = async () => { const onTempSave = async () => {
const formData = form.getValues() const formData = form.getValues()
@ -1570,6 +1546,7 @@ export default function StuffDetail() {
setFloorPlanObjectNo({ floorPlanObjectNo: '' }) setFloorPlanObjectNo({ floorPlanObjectNo: '' })
del({ url: `/api/object/${objectNo}?${queryStringFormatter(delParams)}` }) del({ url: `/api/object/${objectNo}?${queryStringFormatter(delParams)}` })
.then(() => { .then(() => {
console.log('트루555')
setIsGlobalLoading(true) setIsGlobalLoading(true)
setFloorPlanObjectNo({ floorPlanObjectNo: '' }) setFloorPlanObjectNo({ floorPlanObjectNo: '' })
if (session.storeId === 'T01') { if (session.storeId === 'T01') {
@ -1645,15 +1622,10 @@ export default function StuffDetail() {
// //
const getCellDoubleClicked = (params) => { const getCellDoubleClicked = (params) => {
//#474 if (managementState?.createSaleStoreId === 'T01') {
// if (managementState.createUser === 'T01') { if (session?.storeId !== 'T01') {
// if (session.userId !== 'T01') { return false
// return false }
// }
// }
if (managementState?.createSaleStoreId !== session?.storeId) {
return false
} }
if (params?.column?.colId !== 'estimateDate') { if (params?.column?.colId !== 'estimateDate') {

View File

@ -68,7 +68,7 @@ export default function StuffHeader() {
<div className="sub-table-box"> <div className="sub-table-box">
<div className="info-title">{getMessage('stuff.detail.header.specificationConfirmDate')}</div> <div className="info-title">{getMessage('stuff.detail.header.specificationConfirmDate')}</div>
<div className="info-inner"> <div className="info-inner">
{managementState?.specificationConfirmDate ? `${dayjs(managementState.specificationConfirmDate).format('YYYY.MM.DD HH:mm:ss')}` : ''} {managementState?.specificationConfirmDate ? `${dayjs(managementState.specificationConfirmDate).format('YYYY.MM.DD')}` : ''}
</div> </div>
</div> </div>
<div className="sub-table-box"> <div className="sub-table-box">

View File

@ -56,7 +56,7 @@ export default function StuffSearchCondition() {
const [objectNo, setObjectNo] = useState('') // const [objectNo, setObjectNo] = useState('') //
const [saleStoreName, setSaleStoreName] = useState('') // const [saleStoreName, setSaleStoreName] = useState('') //
const [address, setAddress] = useState('') // const [address, setAddress] = useState('') //
const [objectName, setobjectName] = useState('') // const [objectName, setObjectName] = useState('') //
const [dispCompanyName, setDispCompanyName] = useState('') // const [dispCompanyName, setDispCompanyName] = useState('') //
const [schSelSaleStoreId, setSchSelSaleStoreId] = useState('') // const [schSelSaleStoreId, setSchSelSaleStoreId] = useState('') //
const [receiveUser, setReceiveUser] = useState('') // const [receiveUser, setReceiveUser] = useState('') //
@ -87,7 +87,6 @@ export default function StuffSearchCondition() {
} }
setIsGlobalLoading(true) setIsGlobalLoading(true)
if (stuffSearch.code === 'S') { if (stuffSearch.code === 'S') {
if (stuffSearch.pageNo !== 1) { if (stuffSearch.pageNo !== 1) {
setStuffSearch({ setStuffSearch({
@ -96,8 +95,6 @@ export default function StuffSearchCondition() {
schAddress: address ? address.trim() : '', schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '', schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
// schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '',
// schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schSaleStoreId: stuffSearch?.schMyDataCheck ? stuffSearch?.schSaleStoreId : '', schSaleStoreId: stuffSearch?.schMyDataCheck ? stuffSearch?.schSaleStoreId : '',
schSelSaleStoreId: stuffSearch?.schMyDataCheck ? '' : stuffSearch.schSelSaleStoreId, schSelSaleStoreId: stuffSearch?.schMyDataCheck ? '' : stuffSearch.schSelSaleStoreId,
schOtherSelSaleStoreId: stuffSearch?.schMyDataCheck ? '' : stuffSearch.schOtherSelSaleStoreId, schOtherSelSaleStoreId: stuffSearch?.schMyDataCheck ? '' : stuffSearch.schOtherSelSaleStoreId,
@ -122,8 +119,6 @@ export default function StuffSearchCondition() {
schAddress: address ? address.trim() : '', schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '', schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
// schSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? '' : stuffSearch.schSelSaleStoreId,
// schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId,
schReceiveUser: receiveUser ? receiveUser.trim() : '', schReceiveUser: receiveUser ? receiveUser.trim() : '',
@ -146,8 +141,6 @@ export default function StuffSearchCondition() {
schAddress: address ? address.trim() : '', schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '', schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
// schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '',
// schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId,
schReceiveUser: receiveUser ? receiveUser.trim() : '', schReceiveUser: receiveUser ? receiveUser.trim() : '',
@ -194,8 +187,6 @@ export default function StuffSearchCondition() {
schAddress: address ? address.trim() : '', schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '', schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
// schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '',
// schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId,
schReceiveUser: receiveUser ? receiveUser.trim() : '', schReceiveUser: receiveUser ? receiveUser.trim() : '',
@ -242,8 +233,6 @@ export default function StuffSearchCondition() {
schAddress: address ? address.trim() : '', schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '', schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '', schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
// schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '',
// schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId, schSelSaleStoreId: schSelSaleStoreId ? schSelSaleStoreId : stuffSearch.schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId, schOtherSelSaleStoreId: otherSaleStoreId ? otherSaleStoreId : stuffSearch.schOtherSelSaleStoreId,
schReceiveUser: receiveUser ? receiveUser.trim() : '', schReceiveUser: receiveUser ? receiveUser.trim() : '',
@ -346,7 +335,7 @@ export default function StuffSearchCondition() {
stuffSearch.schSaleStoreId = '' stuffSearch.schSaleStoreId = ''
setObjectNo('') setObjectNo('')
setAddress('') setAddress('')
setobjectName('') setObjectName('')
setSaleStoreName('') setSaleStoreName('')
setReceiveUser('') setReceiveUser('')
setDispCompanyName('') setDispCompanyName('')
@ -714,7 +703,7 @@ export default function StuffSearchCondition() {
setObjectNo('') setObjectNo('')
setSaleStoreName('') setSaleStoreName('')
setAddress('') setAddress('')
setobjectName('') setObjectName('')
setDispCompanyName('') setDispCompanyName('')
setReceiveUser('') setReceiveUser('')
objectNoRef.current.value = '' objectNoRef.current.value = ''
@ -749,7 +738,7 @@ export default function StuffSearchCondition() {
setObjectNo('') setObjectNo('')
setSaleStoreName('') setSaleStoreName('')
setAddress('') setAddress('')
setobjectName('') setObjectName('')
setDispCompanyName('') setDispCompanyName('')
setReceiveUser('') setReceiveUser('')
objectNoRef.current.value = '' objectNoRef.current.value = ''
@ -780,15 +769,6 @@ export default function StuffSearchCondition() {
setSchSelSaleStoreId('') setSchSelSaleStoreId('')
setOtherSaleStoreId('') setOtherSaleStoreId('')
} else { } else {
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'))
setObjectNo(stuffSearch.schObjectNo ? stuffSearch.schObjectNo : objectNo)
setSaleStoreName(stuffSearch.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName)
setAddress(stuffSearch.schAddress ? stuffSearch.schAddress : address)
setobjectName(stuffSearch.schObjectName ? stuffSearch.schObjectName : objectName)
setDispCompanyName(stuffSearch.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName)
setReceiveUser(stuffSearch.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser)
setDateType(stuffSearch.schDateType ? stuffSearch.schDateType : dateType)
setTempFlg(stuffSearch.schTempFlg ? stuffSearch.schTempFlg : tempFlg) setTempFlg(stuffSearch.schTempFlg ? stuffSearch.schTempFlg : tempFlg)
setMyDataCheck(stuffSearch.schMyDataCheck) setMyDataCheck(stuffSearch.schMyDataCheck)
} }
@ -807,7 +787,7 @@ export default function StuffSearchCondition() {
setObjectNo('') setObjectNo('')
setSaleStoreName('') setSaleStoreName('')
setAddress('') setAddress('')
setobjectName('') setObjectName('')
setDispCompanyName('') setDispCompanyName('')
setReceiveUser('') setReceiveUser('')
objectNoRef.current.value = '' objectNoRef.current.value = ''
@ -838,7 +818,7 @@ export default function StuffSearchCondition() {
setObjectNo(stuffSearch.schObjectNo ? stuffSearch.schObjectNo : objectNo) setObjectNo(stuffSearch.schObjectNo ? stuffSearch.schObjectNo : objectNo)
setSaleStoreName(stuffSearch.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName) setSaleStoreName(stuffSearch.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName)
setAddress(stuffSearch.schAddress ? stuffSearch.schAddress : address) setAddress(stuffSearch.schAddress ? stuffSearch.schAddress : address)
setobjectName(stuffSearch.schObjectName ? stuffSearch.schObjectName : objectName) setObjectName(stuffSearch.schObjectName ? stuffSearch.schObjectName : objectName)
setDispCompanyName(stuffSearch.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName) setDispCompanyName(stuffSearch.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName)
setReceiveUser(stuffSearch.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser) setReceiveUser(stuffSearch.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser)
setDateType(stuffSearch.schDateType ? stuffSearch.schDateType : dateType) setDateType(stuffSearch.schDateType ? stuffSearch.schDateType : dateType)
@ -1019,7 +999,7 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo} defaultValue={stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo}
onChange={() => { onChange={() => {
stuffSearch.schObjectNo = objectNoRef.current.value // stuffSearch.schObjectNo = objectNoRef.current.value
setObjectNo(objectNoRef.current.value) setObjectNo(objectNoRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1035,7 +1015,7 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName} defaultValue={stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName}
onChange={() => { onChange={() => {
stuffSearch.schSaleStoreName = saleStoreNameRef.current.value // stuffSearch.schSaleStoreName = saleStoreNameRef.current.value
setSaleStoreName(saleStoreNameRef.current.value) setSaleStoreName(saleStoreNameRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1052,7 +1032,7 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName} defaultValue={stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName}
onChange={() => { onChange={() => {
stuffSearch.schDispCompanyName = dispCompanyNameRef.current.value // stuffSearch.schDispCompanyName = dispCompanyNameRef.current.value
setDispCompanyName(dispCompanyNameRef.current.value) setDispCompanyName(dispCompanyNameRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1070,8 +1050,8 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName} defaultValue={stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName}
onChange={() => { onChange={() => {
stuffSearch.schObjectName = objectNameRef.current.value // stuffSearch.schObjectName = objectNameRef.current.value
setobjectName(objectNameRef.current.value) setObjectName(objectNameRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
/> />
@ -1086,7 +1066,7 @@ export default function StuffSearchCondition() {
ref={receiveUserRef} ref={receiveUserRef}
defaultValue={stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser} defaultValue={stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser}
onChange={() => { onChange={() => {
stuffSearch.schReceiveUser = receiveUserRef.current.value // stuffSearch.schReceiveUser = receiveUserRef.current.value
setReceiveUser(receiveUserRef.current.value) setReceiveUser(receiveUserRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1102,7 +1082,7 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schAddress ? stuffSearch.schAddress : address} defaultValue={stuffSearch?.schAddress ? stuffSearch.schAddress : address}
onChange={() => { onChange={() => {
stuffSearch.schAddress = addressRef.current.value // stuffSearch.schAddress = addressRef.current.value
setAddress(addressRef.current.value) setAddress(addressRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1124,7 +1104,7 @@ export default function StuffSearchCondition() {
value={'U'} value={'U'}
onChange={(e) => { onChange={(e) => {
setDateType(e.target.value) setDateType(e.target.value)
stuffSearch.schDateType = e.target.value // stuffSearch.schDateType = e.target.value
}} }}
/> />
<label htmlFor="radio_u">{getMessage('stuff.search.schDateTypeU')}</label> <label htmlFor="radio_u">{getMessage('stuff.search.schDateTypeU')}</label>
@ -1138,7 +1118,7 @@ export default function StuffSearchCondition() {
value={'R'} value={'R'}
onChange={(e) => { onChange={(e) => {
setDateType(e.target.value) setDateType(e.target.value)
stuffSearch.schDateType = e.target.value // stuffSearch.schDateType = e.target.value
}} }}
/> />
<label htmlFor="radio_r">{getMessage('stuff.search.schDateTypeR')}</label> <label htmlFor="radio_r">{getMessage('stuff.search.schDateTypeR')}</label>

View File

@ -38,14 +38,10 @@ export default function StuffSubHeader({ type }) {
useEffect(() => { useEffect(() => {
if (isObjectNotEmpty(managementState)) { if (isObjectNotEmpty(managementState)) {
// if (managementState.createUser === 'T01') { if (managementState?.createSaleStoreId === 'T01') {
// if (session.userId !== 'T01') { if (session?.storeId !== 'T01') {
// // #457 #474 setButtonStyle('none')
// setButtonStyle('none') }
// }
// }
if (managementState.createSaleStoreId !== session?.storeId) {
setButtonStyle('none')
} }
} }
}, [managementState]) }, [managementState])

View File

@ -19,6 +19,7 @@ import { useSurfaceShapeBatch } from '@/hooks/surface/useSurfaceShapeBatch'
import { useRecoilValue } from 'recoil' import { useRecoilValue } from 'recoil'
import { currentMenuState } from '@/store/canvasAtom' import { currentMenuState } from '@/store/canvasAtom'
import { MENU } from '@/common/common' import { MENU } from '@/common/common'
import { useTrestle } from '@/hooks/module/useTrestle'
export default function useMenu() { export default function useMenu() {
const menus = [] const menus = []
@ -26,6 +27,7 @@ export default function useMenu() {
const [popupId, setPopupId] = useState(uuidv4()) const [popupId, setPopupId] = useState(uuidv4())
const { addPopup } = usePopup() const { addPopup } = usePopup()
const { deleteAllSurfacesAndObjects } = useSurfaceShapeBatch({}) const { deleteAllSurfacesAndObjects } = useSurfaceShapeBatch({})
const { clear: trestleClear } = useTrestle()
const handleMenu = (type) => { const handleMenu = (type) => {
if (type === 'outline') { if (type === 'outline') {
switch (currentMenu) { switch (currentMenu) {
@ -79,6 +81,7 @@ export default function useMenu() {
if (type === 'module') { if (type === 'module') {
switch (currentMenu) { switch (currentMenu) {
case MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING: case MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING:
trestleClear()
addPopup(popupId, 1, <BasicSetting id={popupId} />) addPopup(popupId, 1, <BasicSetting id={popupId} />)
break break
case MENU.MODULE_CIRCUIT_SETTING.CIRCUIT_TRESTLE_SETTING: case MENU.MODULE_CIRCUIT_SETTING.CIRCUIT_TRESTLE_SETTING:

View File

@ -1,16 +1,18 @@
import { useRecoilValue } from 'recoil' import { useRecoilState, useRecoilValue } from 'recoil'
import { canvasState } from '@/store/canvasAtom' import { canvasState } from '@/store/canvasAtom'
import { POLYGON_TYPE } from '@/common/common' import { POLYGON_TYPE } from '@/common/common'
import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { moduleSelectionDataState } from '@/store/selectedModuleOptions'
import { getDegreeByChon, getTrestleLength } from '@/util/canvas-util' import { getDegreeByChon, getTrestleLength } from '@/util/canvas-util'
import { v4 as uuidv4 } from 'uuid' import { v4 as uuidv4 } from 'uuid'
import { useMasterController } from '@/hooks/common/useMasterController' import { useMasterController } from '@/hooks/common/useMasterController'
import { estimateParamAtom } from '@/store/estimateAtom'
// 회로 및 가대설정 // 회로 및 가대설정
export const useTrestle = () => { export const useTrestle = () => {
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //다음으로 넘어가는 최종 데이터 const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //다음으로 넘어가는 최종 데이터
const { getQuotationItem } = useMasterController() const { getQuotationItem } = useMasterController()
const [estimateParam, setEstimateParam] = useRecoilState(estimateParamAtom)
const apply = () => { const apply = () => {
//처마력바가 체크되어 있는 경우 exposedBottomPoints를 이용해 처마력바 그려줘야함. //처마력바가 체크되어 있는 경우 exposedBottomPoints를 이용해 처마력바 그려줘야함.
@ -54,6 +56,10 @@ export const useTrestle = () => {
}) })
const result = calculateForApi(surface) const result = calculateForApi(surface)
if (!result) {
return
}
const centerPoints = result.centerPoints const centerPoints = result.centerPoints
const exposedBottomModules = [] // 아래 두면이 모두 노출 되어있는 경우 const exposedBottomModules = [] // 아래 두면이 모두 노출 되어있는 경우
@ -194,7 +200,6 @@ export const useTrestle = () => {
height = Math.floor(height) height = Math.floor(height)
let { x: startX, y: startY } = { ...module.getCenterPoint() } let { x: startX, y: startY } = { ...module.getCenterPoint() }
let { x, y } = { ...module.getCenterPoint() } let { x, y } = { ...module.getCenterPoint() }
//TODO : 방향별로 가대 설치해야함
let leftRows = 1 let leftRows = 1
let rightRows = 1 let rightRows = 1
@ -440,16 +445,50 @@ export const useTrestle = () => {
const quotationParam = getTrestleParams(surface) const quotationParam = getTrestleParams(surface)
surface.set({ quotationParam }) surface.set({ quotationParam })
getQuoationItems() })
setQuoationItem()
}
// itemList 조회 후 estimateParam에 저장
const setQuoationItem = () => {
const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
//surfaces.pcses들을 배열로 묶는다
const pcses = surfaces[0].pcses
surfaces.forEach((surface, index) => {
if (index !== 0) {
pcses.concat(surface.pcses)
}
})
const params = { trestles: surfaces.map((surface) => surface.quotationParam), pcses }
//견적서 itemList 조회
getQuotationItem(params).then((res) => {
if (!res.data) {
return
}
const itemList = res.data
//northArrangement 북면 설치 여부
const northArrangement = getNorthArrangement()
setEstimateParam({ ...estimateParam, itemList, northArrangement })
}) })
} }
const getQuoationItems = () => { const getNorthArrangement = () => {
const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
const params = { trestles: surfaces.map((surface) => surface.quotationParam), pcses: [] } let northArrangement = '0'
getQuotationItem(params).then((res) => {
console.log(res) surfaces.forEach((surface) => {
const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId)
const directionText = parent.directionText
// ['西北西','東北東'] 의 경우를 제외하고는 北이 들어간 경우 전부 북면으로 간주
if (directionText.includes('北') && !directionText.includes('西北西') && !directionText.includes('東北東')) {
if (surface.modules.length > 0) {
northArrangement = '1'
}
}
}) })
return northArrangement
} }
const findNextModule = (currentPoint, centerPoints, direction) => { const findNextModule = (currentPoint, centerPoints, direction) => {
@ -1882,5 +1921,13 @@ export const useTrestle = () => {
} }
} }
return { apply, getTrestleParams } const clear = () => {
canvas.getObjects().forEach((obj) => {
if (obj.name === 'eaveBar' || obj.name === 'rack' || obj.name === 'halfEaveBar' || obj.name === 'smartRack' || obj.name === 'bracket') {
canvas.remove(obj)
}
})
}
return { apply, getTrestleParams, clear }
} }

View File

@ -13,7 +13,7 @@ export function useTempGrid() {
//임의 그리드 모드일 경우 //임의 그리드 모드일 경우
let pointer = canvas.getPointer(e.e) let pointer = canvas.getPointer(e.e)
const tempGrid = new fabric.Line([pointer.x, 0, pointer.x, canvas.height], { const tempGrid = new fabric.Line([pointer.x, -1500, pointer.x, 2500], {
stroke: gridColor, stroke: gridColor,
strokeWidth: 1, strokeWidth: 1,
selectable: true, selectable: true,
@ -41,7 +41,7 @@ export function useTempGrid() {
//임의 그리드 모드일 경우 //임의 그리드 모드일 경우
let pointer = { x: e.offsetX, y: e.offsetY } let pointer = { x: e.offsetX, y: e.offsetY }
const tempGrid = new fabric.Line([0, pointer.y, canvas.width, pointer.y], { const tempGrid = new fabric.Line([-1500, pointer.y, 2500, pointer.y], {
stroke: gridColor, stroke: gridColor,
strokeWidth: 1, strokeWidth: 1,
selectable: true, selectable: true,

File diff suppressed because it is too large Load Diff

View File

@ -3,19 +3,19 @@
"welcome": "환영합니다. {0}님", "welcome": "환영합니다. {0}님",
"header.menus.home": "Home", "header.menus.home": "Home",
"header.menus.management": "물건 및 도면 관리", "header.menus.management": "물건 및 도면 관리",
"header.menus.management.newStuff": "신규 물건 등록", "header.menus.management.newStuff": "신규물건등록",
"header.menus.management.detail": "물건 상세", "header.menus.management.detail": "물건상세",
"header.menus.management.stuffList": "물건 현황", "header.menus.management.stuffList": "물건현황",
"header.menus.community": "커뮤니티", "header.menus.community": "커뮤니티",
"header.menus.community.notice": "공지", "header.menus.community.notice": "공지사항",
"header.menus.community.faq": "FAQ", "header.menus.community.faq": "FAQ",
"header.menus.community.archive": "자료 다운로드", "header.menus.community.archive": "문서다운로드",
"header.logout": "로그아웃", "header.logout": "로그아웃",
"header.go": "이동", "header.go": "이동",
"header.online.warranty.system": "온라인 보증 시스템", "header.online.warranty.system": "온라인보증시스템",
"header.stem": "Stem", "header.stem": "Stem",
"plan.menu.plan.drawing": "물건정보", "plan.menu.plan.drawing": "물건정보",
"plan.menu.placement.surface.initial.setting": "배치면 초기 설정", "plan.menu.placement.surface.initial.setting": "배치면 초기설정",
"modal.placement.initial.setting.plan.drawing": "도면 작성방법", "modal.placement.initial.setting.plan.drawing": "도면 작성방법",
"modal.placement.initial.setting.plan.drawing.size.stuff": "치수 입력에 의한 물건 작성", "modal.placement.initial.setting.plan.drawing.size.stuff": "치수 입력에 의한 물건 작성",
"modal.placement.initial.setting.size": "치수 입력방법", "modal.placement.initial.setting.size": "치수 입력방법",
@ -29,7 +29,7 @@
"modal.placement.initial.setting.roof.angle.setting": "지붕각도 설정", "modal.placement.initial.setting.roof.angle.setting": "지붕각도 설정",
"modal.placement.initial.setting.roof.pitch": "경사", "modal.placement.initial.setting.roof.pitch": "경사",
"modal.placement.initial.setting.roof.angle": "각도", "modal.placement.initial.setting.roof.angle": "각도",
"modal.placement.initial.setting.roof.material": "지붕재 선택(단위: mm)", "modal.placement.initial.setting.roof.material": "지붕재 선택(단위mm)",
"modal.placement.initial.setting.roof.material.info": "대응 가능한 지붕재 및 발판은 한정되므로 반드시 사전 매뉴얼을 확인하십시오.", "modal.placement.initial.setting.roof.material.info": "대응 가능한 지붕재 및 발판은 한정되므로 반드시 사전 매뉴얼을 확인하십시오.",
"modal.placement.initial.setting.rafter": "서까래", "modal.placement.initial.setting.rafter": "서까래",
"modal.roof.shape.setting": "지붕형상 설정", "modal.roof.shape.setting": "지붕형상 설정",
@ -44,7 +44,7 @@
"plan.menu.roof.cover.eaves.kerava.edit": "처마·케라바 변경", "plan.menu.roof.cover.eaves.kerava.edit": "처마·케라바 변경",
"plan.menu.roof.cover.movement.shape.updown": "동선이동·형올림내림", "plan.menu.roof.cover.movement.shape.updown": "동선이동·형올림내림",
"modal.movement.flow.line.move": "동선 이동", "modal.movement.flow.line.move": "동선 이동",
"modal.movement.flow.line.move.alert": "이동 할 수 없습니다.", "modal.movement.flow.line.move.alert": "이동할 수 없습니다.",
"modal.movement.flow.line.updown": "형 올림·내림", "modal.movement.flow.line.updown": "형 올림·내림",
"modal.movement.flow.line.updown.info": "자릿수가 다른 변을 선택하고 폭을 지정하십시오.", "modal.movement.flow.line.updown.info": "자릿수가 다른 변을 선택하고 폭을 지정하십시오.",
"modal.movement.flow.line.updown.up": "자릿수를 올리다", "modal.movement.flow.line.updown.up": "자릿수를 올리다",
@ -63,7 +63,7 @@
"modal.cover.outline.angle": "각도", "modal.cover.outline.angle": "각도",
"modal.cover.outline.diagonal": "대각선", "modal.cover.outline.diagonal": "대각선",
"modal.cover.outline.setting": "설정", "modal.cover.outline.setting": "설정",
"modal.cover.outline.length": "길이 (mm)", "modal.cover.outline.length": "길이(mm)",
"modal.cover.outline.arrow": "방향(화살표)", "modal.cover.outline.arrow": "방향(화살표)",
"modal.cover.outline.fix": "외벽선 확정", "modal.cover.outline.fix": "외벽선 확정",
"modal.cover.outline.rollback": "일변전으로 돌아가기", "modal.cover.outline.rollback": "일변전으로 돌아가기",
@ -71,7 +71,7 @@
"common.setting.finish": "설정완료", "common.setting.finish": "설정완료",
"common.setting.rollback": "일변전으로 돌아가기", "common.setting.rollback": "일변전으로 돌아가기",
"modal.cover.outline.remove": "외벽 제거", "modal.cover.outline.remove": "외벽 제거",
"modal.cover.outline.select.move": "외벽 선택, 이동", "modal.cover.outline.select.move": "외벽 선택 이동",
"plan.menu.placement.surface": "배치면", "plan.menu.placement.surface": "배치면",
"plan.menu.placement.surface.slope.setting": "경사설정", "plan.menu.placement.surface.slope.setting": "경사설정",
"plan.menu.placement.surface.drawing": "배치면 그리기", "plan.menu.placement.surface.drawing": "배치면 그리기",
@ -84,8 +84,8 @@
"plan.menu.placement.surface.arrangement": "면형상 배치", "plan.menu.placement.surface.arrangement": "면형상 배치",
"plan.menu.placement.surface.object": "오브젝트 배치", "plan.menu.placement.surface.object": "오브젝트 배치",
"plan.menu.placement.surface.all.remove": "배치면 전체 삭제", "plan.menu.placement.surface.all.remove": "배치면 전체 삭제",
"plan.menu.module.circuit.setting": "모듈,회로 구성", "plan.menu.module.circuit.setting": "모듈·회로 구성",
"plan.menu.module.circuit.setting.default": "기본 설정", "plan.menu.module.circuit.setting.default": "모듈·가대설정",
"modal.module.basic.setting.orientation.setting": "방위 설정", "modal.module.basic.setting.orientation.setting": "방위 설정",
"modal.module.basic.setting.orientation.setting.info": "※시뮬레이션 계산용 방위를 지정합니다. 남쪽의 방위를 설정해주세요.", "modal.module.basic.setting.orientation.setting.info": "※시뮬레이션 계산용 방위를 지정합니다. 남쪽의 방위를 설정해주세요.",
"modal.module.basic.setting.orientation.setting.angle.passivity": "각도를 직접 입력", "modal.module.basic.setting.orientation.setting.angle.passivity": "각도를 직접 입력",
@ -96,32 +96,32 @@
"modal.module.basic.setting.module.under.roof": "지붕밑바탕", "modal.module.basic.setting.module.under.roof": "지붕밑바탕",
"modal.module.basic.setting.module.setting": "모듈 선택", "modal.module.basic.setting.module.setting": "모듈 선택",
"modal.module.basic.setting.module.hajebichi": "망둥어 피치", "modal.module.basic.setting.module.hajebichi": "망둥어 피치",
"modal.module.basic.setting.module.setting.info1": "※ 구배의 범위에는 제한이 있습니다. 지붕경사가 2.5치 미만, 10치를 초과하는 경우에는 시공이 가능한지 시공 매뉴얼을 확인해주십시오.", "modal.module.basic.setting.module.setting.info1": "※ 구배의 범위에는 제한이 있습니다. 지붕경사가 2.5치 미만 10치를 초과하는 경우에는 시공이 가능한지 시공 매뉴얼을 확인해주십시오.",
"modal.module.basic.setting.module.setting.info2": "※ 모듈 배치 시에는 시공 매뉴얼에 기재된 <모듈 배치 조건>을 반드시 확인해주십시오.", "modal.module.basic.setting.module.setting.info2": "※ 모듈 배치 시에는 시공 매뉴얼에 기재된 <모듈 배치 조건>을 반드시 확인해주십시오.",
"modal.module.basic.setting.module.stuff.info": "물건정보", "modal.module.basic.setting.module.stuff.info": "물건정보",
"modal.module.basic.setting.module.surface.type": "면조도구분", "modal.module.basic.setting.module.surface.type": "면조도",
"modal.module.basic.setting.module.fitting.height": "설치높이", "modal.module.basic.setting.module.fitting.height": "설치높이",
"modal.module.basic.setting.module.standard.wind.speed": "기준 풍속", "modal.module.basic.setting.module.standard.wind.speed": "기준풍속",
"modal.module.basic.setting.module.standard.snowfall.amount": "기준 적설량", "modal.module.basic.setting.module.standard.snowfall.amount": "적설량",
"modal.module.basic.setting.module.standard.construction": "표준시공", "modal.module.basic.setting.module.standard.construction": "표준시공",
"modal.module.basic.setting.module.enforce.construction": "강화시공", "modal.module.basic.setting.module.enforce.construction": "강화시공",
"modal.module.basic.setting.module.multiple.construction": "다설시공", "modal.module.basic.setting.module.multiple.construction": "다설시공",
"modal.module.basic.setting.module.eaves.bar.fitting": "처마력 바의 설치", "modal.module.basic.setting.module.eaves.bar.fitting": "처마커버설치",
"modal.module.basic.setting.module.blind.metal.fitting": "눈막이 금구 설치", "modal.module.basic.setting.module.blind.metal.fitting": "적설방지금구설치",
"modal.module.basic.setting.module.select": "모듈 선택", "modal.module.basic.setting.module.select": "모듈/가대 선택",
"modal.module.basic.setting.module.placement": "모듈 배치", "modal.module.basic.setting.module.placement": "모듈 배치",
"modal.module.basic.setting.module.placement.select.fitting.type": "설치형태를 선택해주세요.", "modal.module.basic.setting.module.placement.select.fitting.type": "설치형태를 선택해주세요.",
"modal.module.basic.setting.module.placement.waterfowl.arrangement": "물떼새 배치", "modal.module.basic.setting.module.placement.waterfowl.arrangement": "물떼새 배치",
"modal.module.basic.setting.module.placement.do": "한다", "modal.module.basic.setting.module.placement.do": "한다",
"modal.module.basic.setting.module.placement.do.not": "하지 않는다", "modal.module.basic.setting.module.placement.do.not": "하지 않는다",
"modal.module.basic.setting.module.placement.arrangement.standard": "배치 기준", "modal.module.basic.setting.module.placement.arrangement.standard": "배치 기준",
"modal.module.basic.setting.module.placement.arrangement.standard.center": "중앙배치", "modal.module.basic.setting.module.placement.arrangement.standard.center": "중앙",
"modal.module.basic.setting.module.placement.arrangement.standard.eaves": "처마", "modal.module.basic.setting.module.placement.arrangement.standard.eaves": "처마",
"modal.module.basic.setting.module.placement.arrangement.standard.ridge": "용마루", "modal.module.basic.setting.module.placement.arrangement.standard.ridge": "용마루",
"modal.module.basic.setting.module.placement.maximum": "최대배치 실시한다.", "modal.module.basic.setting.module.placement.maximum": "최대배치",
"modal.module.basic.setting.pitch.module.placement.standard.setting": "배치 기준 설정", "modal.module.basic.setting.pitch.module.placement.standard.setting": "배치기준 설정",
"modal.module.basic.setting.pitch.module.placement.standard.setting.south": "남향으로 설치한다", "modal.module.basic.setting.pitch.module.placement.standard.setting.south": "남향설치",
"modal.module.basic.setting.pitch.module.placement.standard.setting.select": "지정한 변을 기준으로 설치한다", "modal.module.basic.setting.pitch.module.placement.standard.setting.select": "지정한 변을 기준으로 설치",
"modal.module.basic.setting.pitch.module.allocation.setting": "할당 설정", "modal.module.basic.setting.pitch.module.allocation.setting": "할당 설정",
"modal.module.basic.setting.pitch.module.allocation.setting.info": "※배치 패널 종류가 1종류일 경우에만 사용할 수 있습니다.", "modal.module.basic.setting.pitch.module.allocation.setting.info": "※배치 패널 종류가 1종류일 경우에만 사용할 수 있습니다.",
"modal.module.basic.setting.pitch.module.row.amount": "단수", "modal.module.basic.setting.pitch.module.row.amount": "단수",
@ -131,22 +131,22 @@
"modal.module.basic.setting.prev": "이전", "modal.module.basic.setting.prev": "이전",
"modal.module.basic.setting.passivity.placement": "수동 배치", "modal.module.basic.setting.passivity.placement": "수동 배치",
"modal.module.basic.setting.auto.placement": "설정값으로 자동 배치", "modal.module.basic.setting.auto.placement": "설정값으로 자동 배치",
"plan.menu.module.circuit.setting.circuit.trestle.setting": "회로 및 가대 설정", "plan.menu.module.circuit.setting.circuit.trestle.setting": "회로설정",
"modal.circuit.trestle.setting": "회로 및 가대설정", "modal.circuit.trestle.setting": "회로설정",
"modal.circuit.trestle.setting.alloc.trestle": "가대할당", "modal.circuit.trestle.setting.alloc.trestle": "가대할당",
"modal.circuit.trestle.setting.power.conditional.select": "파워컨디셔너 선택", "modal.circuit.trestle.setting.power.conditional.select": "파워컨디셔너 선택",
"modal.circuit.trestle.setting.power.conditional.select.cold.region": "한랭지사양", "modal.circuit.trestle.setting.power.conditional.select.cold.region": "한랭지사양",
"modal.circuit.trestle.setting.power.conditional.select.name": "명칭", "modal.circuit.trestle.setting.power.conditional.select.name": "명칭",
"modal.circuit.trestle.setting.power.conditional.select.rated.output": "정격출력", "modal.circuit.trestle.setting.power.conditional.select.rated.output": "정격출력",
"modal.circuit.trestle.setting.power.conditional.select.circuit.amount": "회로수", "modal.circuit.trestle.setting.power.conditional.select.circuit.amount": "회로수",
"modal.circuit.trestle.setting.power.conditional.select.max.connection": "최대접속매수", "modal.circuit.trestle.setting.power.conditional.select.max.connection": "표준매수",
"modal.circuit.trestle.setting.power.conditional.select.max.overload": "과적최대매수", "modal.circuit.trestle.setting.power.conditional.select.max.overload": "최대매수",
"modal.circuit.trestle.setting.power.conditional.select.output.current": "출력전류", "modal.circuit.trestle.setting.power.conditional.select.output.current": "출력전류",
"modal.circuit.trestle.setting.power.conditional.select.check1": "동일경사 동일 방면의 면적인 경우, 같은 면으로서 회로를 나눈다.", "modal.circuit.trestle.setting.power.conditional.select.check1": "동일경사 동일방면의 면적인 경우 같은 면으로서 회로를 나눈다.",
"modal.circuit.trestle.setting.power.conditional.select.check2": "MAX 접속(과적)으로 회로를 나눈다.", "modal.circuit.trestle.setting.power.conditional.select.check2": "MAX 접속(과적)으로 회로를 나눈다.",
"modal.circuit.trestle.setting.circuit.allocation": "회로 할당", "modal.circuit.trestle.setting.circuit.allocation": "회로 할당",
"modal.circuit.trestle.setting.circuit.allocation.auto": "자동 회로 할당", "modal.circuit.trestle.setting.circuit.allocation.auto": "자동회로 할당",
"modal.circuit.trestle.setting.circuit.allocation.passivity": "수동 회로 할당", "modal.circuit.trestle.setting.circuit.allocation.passivity": "수동회로 할당",
"modal.circuit.trestle.setting.circuit.allocation.passivity.circuit": "회로", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit": "회로",
"modal.circuit.trestle.setting.circuit.allocation.passivity.info": "동일한 회로의 모듈을 선택 상태로 만든 후 [번호 확정] 버튼을 누르면 번호가 할당됩니다.", "modal.circuit.trestle.setting.circuit.allocation.passivity.info": "동일한 회로의 모듈을 선택 상태로 만든 후 [번호 확정] 버튼을 누르면 번호가 할당됩니다.",
"modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional": "선택된 파워컨디셔너", "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional": "선택된 파워컨디셔너",
@ -155,20 +155,18 @@
"modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset": "선택된 파워컨디셔너의 회로번호 초기화", "modal.circuit.trestle.setting.circuit.allocation.passivity.selected.power.conditional.reset": "선택된 파워컨디셔너의 회로번호 초기화",
"modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset": "모든 회로번호 초기화", "modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.reset": "모든 회로번호 초기화",
"modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "번호 확정", "modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "번호 확정",
"modal.circuit.trestle.setting.circuit.allocation.passivity.init.info": "선택된 파워 컨디셔너의 회로할당을 초기화합니다.",
"modal.circuit.trestle.setting.circuit.allocation.passivity.init.setting.info": "회로 할당의 설정을 초기화합니다.",
"modal.circuit.trestle.setting.step.up.allocation": "승압 설정", "modal.circuit.trestle.setting.step.up.allocation": "승압 설정",
"modal.circuit.trestle.setting.step.up.allocation.serial.amount": "직렬매수", "modal.circuit.trestle.setting.step.up.allocation.serial.amount": "직렬매수",
"modal.circuit.trestle.setting.step.up.allocation.total.amount": "총 회로수", "modal.circuit.trestle.setting.step.up.allocation.total.amount": "총 회로수",
"modal.circuit.trestle.setting.step.up.allocation.connected": "연결함", "modal.circuit.trestle.setting.step.up.allocation.connected": "연결함",
"modal.circuit.trestle.setting.step.up.allocation.circuit.amount": "승압회로수", "modal.circuit.trestle.setting.step.up.allocation.circuit.amount": "승압회로수",
"modal.circuit.trestle.setting.step.up.allocation.option": "승압옵션", "modal.circuit.trestle.setting.step.up.allocation.option": "승압옵션",
"modal.circuit.trestle.setting.step.up.allocation.select.monitor": "모니터 선택", "modal.circuit.trestle.setting.step.up.allocation.select.monitor": "옵션선택",
"plan.menu.module.circuit.setting.plan.orientation": "도면 방위 적용", "plan.menu.module.circuit.setting.plan.orientation": "도면 방위 적용",
"plan.menu.estimate": "견적서", "plan.menu.estimate": "견적서",
"plan.menu.estimate.roof.alloc": "지붕면 할당", "plan.menu.estimate.roof.alloc": "지붕면 할당",
"modal.roof.alloc.info": "※ 배치면 초기설정에서 저장한 [기본 지붕재]를 변경하거나, 지붕재를 추가하여 할당할 수 있습니다.", "modal.roof.alloc.info": "※ 배치면 초기설정에서 저장한 [기본 지붕재]를 변경하거나 지붕재를 추가하여 할당할 수 있습니다.",
"modal.roof.alloc.default.roof.material": "기본지붕재", "modal.roof.alloc.default.roof.material": "기본 지붕재",
"modal.roof.alloc.select.roof.material": "지붕재 선택", "modal.roof.alloc.select.roof.material": "지붕재 선택",
"modal.roof.alloc.select.parallel": "병렬식", "modal.roof.alloc.select.parallel": "병렬식",
"modal.roof.alloc.select.stairs": "계단식", "modal.roof.alloc.select.stairs": "계단식",
@ -262,10 +260,10 @@
"modal.canvas.setting.first.option.line": "라인해치", "modal.canvas.setting.first.option.line": "라인해치",
"modal.canvas.setting.first.option.all": "All painted", "modal.canvas.setting.first.option.all": "All painted",
"modal.canvas.setting.wallline.properties.setting": "외벽선 속성 설정", "modal.canvas.setting.wallline.properties.setting": "외벽선 속성 설정",
"modal.canvas.setting.wallline.properties.setting.info": "※ 속성을 변경할 외벽선을 선택하고, 처마로 설정 또는 케라바로 설정\n 버튼을 클릭하여 설정값을 적용하십시오.\n", "modal.canvas.setting.wallline.properties.setting.info": "※ 속성을 변경할 외벽선을 선택하고 처마로 설정 또는 케라바로 설정\n 버튼을 클릭하여 설정값을 적용하십시오.\n",
"modal.canvas.setting.wallline.properties.setting.eaves": "처마로 설정", "modal.canvas.setting.wallline.properties.setting.eaves": "처마로 설정",
"modal.canvas.setting.wallline.properties.setting.edge": "케라바로 설정", "modal.canvas.setting.wallline.properties.setting.edge": "케라바로 설정",
"modal.eaves.gable.edit": "처마케라바 변경", "modal.eaves.gable.edit": "처마/케라바 변경",
"modal.eaves.gable.edit.basic": "통상", "modal.eaves.gable.edit.basic": "통상",
"modal.eaves.gable.edit.wall.merge.info": "하옥 등 벽에 접하는 지붕을 작성합니다.", "modal.eaves.gable.edit.wall.merge.info": "하옥 등 벽에 접하는 지붕을 작성합니다.",
"modal.wallline.offset.setting": "외벽선 편집 및 오프셋", "modal.wallline.offset.setting": "외벽선 편집 및 오프셋",
@ -304,17 +302,17 @@
"modal.flow.direction.setting": "흐름 방향 설정", "modal.flow.direction.setting": "흐름 방향 설정",
"modal.flow.direction.setting.info": "흐름방향을 선택하세요.", "modal.flow.direction.setting.info": "흐름방향을 선택하세요.",
"modal.actual.size.setting": "실측치 설정", "modal.actual.size.setting": "실측치 설정",
"modal.actual.size.setting.info": "※隅棟・谷・棟의 실제 치수를 입력해주세요.", "modal.actual.size.setting.info": "※실제 치수를 입력해주세요.",
"modal.actual.size.setting.not.exist.auxiliary.line": "실측치 입력할 보조선을 선택해 주세요", "modal.actual.size.setting.not.exist.auxiliary.line": "실측치 입력할 보조선을 선택해 주세요",
"modal.actual.size.setting.not.exist.size": "실제치수 길이를 입력해 주세요", "modal.actual.size.setting.not.exist.size": "실제치수 길이를 입력해 주세요",
"modal.actual.size.setting.plane.size.length": "복도치수 길이", "modal.actual.size.setting.plane.size.length": "복도치수 길이",
"modal.actual.size.setting.actual.size.length": "실제치수 길이", "modal.actual.size.setting.actual.size.length": "실제치수 길이",
"plan.message.confirm.save": "PLAN을 저장하시겠습니까?", "plan.message.confirm.save": "플랜을 저장하시겠습니까?",
"plan.message.confirm.copy": "PLAN을 복사하시겠습니까?", "plan.message.confirm.copy": "플랜을 복사하시겠습니까?",
"plan.message.confirm.delete": "PLAN을 삭제하시겠습니까?", "plan.message.confirm.delete": "플랜을 삭제하시겠습니까?",
"plan.message.save": "저장되었습니다.", "plan.message.save": "저장되었습니다.",
"plan.message.delete": "삭제되었습니다.", "plan.message.delete": "삭제되었습니다.",
"plan.message.leave": "물건현황(목록)으로 이동하시겠습니까? [예]를 선택한 경우, 저장하고 이동합니다.", "plan.message.leave": "물건현황(목록)으로 이동하시겠습니까? [예]를 선택한 경우 저장하고 이동합니다.",
"plan.message.corfirm.yes": "예", "plan.message.corfirm.yes": "예",
"plan.message.confirm.no": "아니오", "plan.message.confirm.no": "아니오",
"setting": "설정", "setting": "설정",
@ -328,7 +326,7 @@
"contextmenu.roof.material.remove": "지붕재 삭제", "contextmenu.roof.material.remove": "지붕재 삭제",
"contextmenu.roof.material.remove.all": "지붕재 전체 삭제", "contextmenu.roof.material.remove.all": "지붕재 전체 삭제",
"contextmenu.dormer.offset": "도머 오프셋", "contextmenu.dormer.offset": "도머 오프셋",
"contextmenu.select.move": "선택이동", "contextmenu.select.move": "선택이동",
"contextmenu.wallline.remove": "외벽선 삭제", "contextmenu.wallline.remove": "외벽선 삭제",
"contextmenu.size.edit": "사이즈 변경", "contextmenu.size.edit": "사이즈 변경",
"modal.auxiliary.size.edit": "보조선 사이즈 변경", "modal.auxiliary.size.edit": "보조선 사이즈 변경",
@ -391,7 +389,7 @@
"modal.display.edit.info": "치수선에 표시할 수치를 입력해 주세요.", "modal.display.edit.info": "치수선에 표시할 수치를 입력해 주세요.",
"modal.display.edit.before.length": "기존 길이", "modal.display.edit.before.length": "기존 길이",
"modal.display.edit.after.length": "변경 길이", "modal.display.edit.after.length": "변경 길이",
"modal.display.edit.corner.valley": "구석골의 경우", "modal.display.edit.corner.valley": "구석골의 경우",
"modal.display.edit.input.slope": "경사를 입력해주세요.", "modal.display.edit.input.slope": "경사를 입력해주세요.",
"modal.display.edit.input.slope.info": "경사 설정되어 있는 경우 입력한 수치에 경사 계산을 한 수치가 표시됩니다.", "modal.display.edit.input.slope.info": "경사 설정되어 있는 경우 입력한 수치에 경사 계산을 한 수치가 표시됩니다.",
"modal.distance": "거리 측정", "modal.distance": "거리 측정",
@ -440,7 +438,7 @@
"common.message.transfer.error": "An error occurred while transfer the data. Please contact site administrator.", "common.message.transfer.error": "An error occurred while transfer the data. Please contact site administrator.",
"common.message.delete.error": "An error occurred while deleting data. Please contact site administrator.", "common.message.delete.error": "An error occurred while deleting data. Please contact site administrator.",
"common.message.batch.error": "An error occurred while executing the batch. Please contact site administrator.", "common.message.batch.error": "An error occurred while executing the batch. Please contact site administrator.",
"common.message.send.error": "Error sending data, please contact your administrator.", "common.message.send.error": "Error sending data please contact your administrator.",
"common.message.communication.error": "Network error occurred. \n Please contact site administrator.", "common.message.communication.error": "Network error occurred. \n Please contact site administrator.",
"common.message.data.error": "{0} The data format is not valid.", "common.message.data.error": "{0} The data format is not valid.",
"common.message.data.setting.error": "{0} is data that has been deleted or already configured.", "common.message.data.setting.error": "{0} is data that has been deleted or already configured.",
@ -453,10 +451,10 @@
"common.message.file.template.validation01": "Unable to upload folder", "common.message.file.template.validation01": "Unable to upload folder",
"common.message.file.template.validation02": "Only Excel files can be uploaded.", "common.message.file.template.validation02": "Only Excel files can be uploaded.",
"common.message.file.template.validation03": "Non-registerable extension", "common.message.file.template.validation03": "Non-registerable extension",
"common.message.file.template.validation04": "Exceed capacity \n Uploadable capacity : {0} MB", "common.message.file.template.validation04": "Exceed capacity \n Uploadable capacity ",
"common.message.file.template.validation05": "업로드 파일을 선택해주세요.", "common.message.file.template.validation05": "업로드 파일을 선택해주세요. {0} MB",
"common.message.multi.insert": "Total {0} cases ({1} successes, {2} failures {3})", "common.message.multi.insert": "Total {0} cases ({1} successes {2} failures {3})",
"common.message.error": "Error occurred, please contact site administrator.", "common.message.error": "Error occurred please contact site administrator.",
"common.message.data.save": "Do you want to save it?", "common.message.data.save": "Do you want to save it?",
"common.message.data.delete": "정말로 삭제하시겠습니까?", "common.message.data.delete": "정말로 삭제하시겠습니까?",
"common.message.data.exists": "{0} is data that already exists.", "common.message.data.exists": "{0} is data that already exists.",
@ -486,7 +484,7 @@
"common.message.no.editfield": "Can not edit field", "common.message.no.editfield": "Can not edit field",
"common.message.success.rmmail": "You have successfully sent mail to the Risk Management team.", "common.message.success.rmmail": "You have successfully sent mail to the Risk Management team.",
"common.message.password.validation01": "Change passwords do not match.", "common.message.password.validation01": "Change passwords do not match.",
"common.message.password.validation02": "Please enter at least 8 digits combining English, numbers, and special characters.", "common.message.password.validation02": "Please enter at least 8 digits combining English numbers and special characters.",
"common.message.password.validation03": "Password cannot be the same as ID.", "common.message.password.validation03": "Password cannot be the same as ID.",
"common.message.menu.validation01": "There is no menu to save the order.", "common.message.menu.validation01": "There is no menu to save the order.",
"common.message.menu.validation02": "The same sort order exists.", "common.message.menu.validation02": "The same sort order exists.",
@ -537,7 +535,7 @@
"color.gold": "황금색", "color.gold": "황금색",
"color.darkblue": "남색", "color.darkblue": "남색",
"site.name": "Q.CAST III", "site.name": "Q.CAST III",
"site.sub_name": "태양광 발전 시스템 도면관리 사이트", "site.sub_name": "태양광발전시스템 도면ㆍ견적 시스템",
"site.header.link1": "선택하세요.", "site.header.link1": "선택하세요.",
"site.header.link2": "온라인보증시스템", "site.header.link2": "온라인보증시스템",
"board.notice.title": "공지사항", "board.notice.title": "공지사항",
@ -556,9 +554,9 @@
"board.sub.fileList": "첨부파일 목록", "board.sub.fileList": "첨부파일 목록",
"board.sub.updDt": "업데이트", "board.sub.updDt": "업데이트",
"board.sub.btn.close": "닫기", "board.sub.btn.close": "닫기",
"myinfo.title": "My profile", "myinfo.title": "내정보",
"myinfo.info.userId": "사용자ID", "myinfo.info.userId": "사용자ID",
"myinfo.info.nameKana": "담당자명 후리가나", "myinfo.info.nameKana": "담당자명 일본어",
"myinfo.info.name": "담당자명", "myinfo.info.name": "담당자명",
"myinfo.info.password": "비밀번호", "myinfo.info.password": "비밀번호",
"myinfo.info.chg.password": "변경 비밀번호 입력", "myinfo.info.chg.password": "변경 비밀번호 입력",
@ -583,7 +581,7 @@
"login.id.save": "ID Save", "login.id.save": "ID Save",
"login.id.placeholder": "아이디를 입력해주세요.", "login.id.placeholder": "아이디를 입력해주세요.",
"login.password.placeholder": "비밀번호를 입력해주세요.", "login.password.placeholder": "비밀번호를 입력해주세요.",
"login.guide.text": "당 사이트를 이용할 때는, 사전 신청이 필요합니다.", "login.guide.text": "당 사이트를 이용할 때는 사전 신청이 필요합니다.",
"login.guide.sub1": "ID가 없는 분은", "login.guide.sub1": "ID가 없는 분은",
"login.guide.sub2": "을 클릭해주십시오.", "login.guide.sub2": "을 클릭해주십시오.",
"login.guide.join.btn": "ID신청", "login.guide.join.btn": "ID신청",
@ -623,7 +621,7 @@
"join.btn.login_page": "로그인 화면으로 이동", "join.btn.login_page": "로그인 화면으로 이동",
"join.btn.approval_request": "ID 승인요청", "join.btn.approval_request": "ID 승인요청",
"join.complete.title": "Q.CAST3 로그인ID 발행신청 완료", "join.complete.title": "Q.CAST3 로그인ID 발행신청 완료",
"join.complete.contents": "※ 신청한 ID가 승인되면, 담당자 정보에 입력한 이메일 주소로 로그인 관련 안내 메일이 전송됩니다.", "join.complete.contents": "※ 신청한 ID가 승인되면 담당자 정보에 입력한 이메일 주소로 로그인 관련 안내 메일이 전송됩니다.",
"join.complete.email_comment": "담당자 이메일 주소", "join.complete.email_comment": "담당자 이메일 주소",
"join.validation.check1": "{0} 형식을 확인해주세요.", "join.validation.check1": "{0} 형식을 확인해주세요.",
"join.complete.save.confirm": "Hanwha Japan 담당자에게 ID승인이 요청되면 더 이상 정보를 수정할 수 없습니다. 정말로 요청하시겠습니까?", "join.complete.save.confirm": "Hanwha Japan 담당자에게 ID승인이 요청되면 더 이상 정보를 수정할 수 없습니다. 정말로 요청하시겠습니까?",
@ -672,7 +670,7 @@
"stuff.detail.zipNo": "우편번호", "stuff.detail.zipNo": "우편번호",
"stuff.detail.address": "주소", "stuff.detail.address": "주소",
"stuff.detail.btn.addressPop": "주소검색", "stuff.detail.btn.addressPop": "주소검색",
"stuff.detail.btn.addressPop.guide": "※ 주소검색 버튼을 클릭한 후, 도도부현 정보를 선택해주십시오.", "stuff.detail.btn.addressPop.guide": "※ 주소검색 버튼을 클릭한 후 도도부현 정보를 선택해주십시오.",
"stuff.detail.prefId": "도도부현 / 주소", "stuff.detail.prefId": "도도부현 / 주소",
"stuff.detail.areaId": "발전량시뮬레이션지역", "stuff.detail.areaId": "발전량시뮬레이션지역",
"stuff.detail.standardWindSpeedId": "기준풍속", "stuff.detail.standardWindSpeedId": "기준풍속",
@ -680,7 +678,7 @@
"stuff.detail.btn.windSpeedPop": "풍속선택", "stuff.detail.btn.windSpeedPop": "풍속선택",
"stuff.detail.verticalSnowCover": "수직적설량", "stuff.detail.verticalSnowCover": "수직적설량",
"stuff.detail.coldRegionFlg": "한랭지대책시행", "stuff.detail.coldRegionFlg": "한랭지대책시행",
"stuff.detail.surfaceType": "면조도구분", "stuff.detail.surfaceType": "면조도",
"stuff.detail.saltAreaFlg": "염해지역용아이템사용", "stuff.detail.saltAreaFlg": "염해지역용아이템사용",
"stuff.detail.installHeight": "설치높이", "stuff.detail.installHeight": "설치높이",
"stuff.detail.conType": "계약조건", "stuff.detail.conType": "계약조건",
@ -688,17 +686,17 @@
"stuff.detail.conType1": "전량", "stuff.detail.conType1": "전량",
"stuff.detail.remarks": "메모", "stuff.detail.remarks": "메모",
"stuff.detail.tooltip.saleStoreId": "판매대리점 또는 판매대리점ID를 1자 이상 입력하세요", "stuff.detail.tooltip.saleStoreId": "판매대리점 또는 판매대리점ID를 1자 이상 입력하세요",
"stuff.detail.tooltip.surfaceType": "염해지역 정의는 각 메이커의 설치 뉴얼을 확인해주십시오", "stuff.detail.tooltip.surfaceType": "염해지역 정의는 각 메이커의 설치 뉴얼을 확인해주십시오",
"stuff.detail.tempSave.message1": "임시저장 되었습니다. 물건번호를 획득하려면 필수 항목을 모두 입력해 주십시오.", "stuff.detail.tempSave.message1": "임시저장 되었습니다. 물건번호를 획득하려면 필수 항목을 모두 입력해 주십시오.",
"stuff.detail.tempSave.message2": "담당자 10자리 이하로 입력해 주십시오.", "stuff.detail.tempSave.message2": "담당자이름은 10자리 이하로 입력해 주십시오.",
"stuff.detail.tempSave.message3": "2차 판매점을 선택해주세요.", "stuff.detail.tempSave.message3": "2차 판매점을 선택해주세요.",
"stuff.detail.confirm.message1": "판매점 정보를 변경하면, 설계의뢰 문서번호가 삭제됩니다. 변경하시겠습니까?", "stuff.detail.confirm.message1": "판매점 정보를 변경하면 설계의뢰 문서번호가 삭제됩니다. 변경하시겠습니까?",
"stuff.detail.delete.message1": "사양이 확정된 물건은 삭제할 수 없습니다.", "stuff.detail.delete.message1": "사양이 확정된 물건은 삭제할 수 없습니다.",
"stuff.detail.planList.title": "플랜리스트", "stuff.detail.planList.title": "플랜목록",
"stuff.detail.planList.cnt": "전체", "stuff.detail.planList.cnt": "전체",
"stuff.detail.planList.help": "도움말", "stuff.detail.planList.help": "도움말",
"stuff.detail.planList.guide1": "1.발주는 동일 물건번호 기준 1건만 가능합니다.", "stuff.detail.planList.guide1": "1.발주는 동일 물건번호 기준 1건만 가능합니다.",
"stuff.detail.planList.guide2": "2.[Excel 다운로드]는 견적서, 도면, 시뮬레이션 결과를 엑셀파일로 한번에 다운로드 합니다.", "stuff.detail.planList.guide2": "2.[Excel 다운로드]는 견적서 도면 시뮬레이션 결과를 엑셀파일로 한번에 다운로드 합니다.",
"stuff.detail.planList.guide3": "3.플랜정보를 더블 클릭하면 도면작성 화면으로 이동합니다.", "stuff.detail.planList.guide3": "3.플랜정보를 더블 클릭하면 도면작성 화면으로 이동합니다.",
"stuff.detail.btn.delete": "물건삭제", "stuff.detail.btn.delete": "물건삭제",
"stuff.detail.btn.moveList": "물건목록", "stuff.detail.btn.moveList": "물건목록",
@ -846,8 +844,8 @@
"main.popup.login.newPassword1": "새 비밀번호 입력", "main.popup.login.newPassword1": "새 비밀번호 입력",
"main.popup.login.newPassword2": "새 비밀번호 재입력", "main.popup.login.newPassword2": "새 비밀번호 재입력",
"main.popup.login.placeholder": "반각 10자 이내", "main.popup.login.placeholder": "반각 10자 이내",
"main.popup.login.guide1": "초기화된 비밀번호로 로그인한 경우, 비밀번호를 변경해야 사이트 이용이 가능합니다.", "main.popup.login.guide1": "초기화된 비밀번호로 로그인한 경우 비밀번호를 변경해야 사이트 이용이 가능합니다.",
"main.popup.login.guide2": "비밀번호를 변경하지 않을 경우, 로그인 화면으로 이동합니다.", "main.popup.login.guide2": "비밀번호를 변경하지 않을 경우 로그인 화면으로 이동합니다.",
"main.popup.login.btn1": "변경", "main.popup.login.btn1": "변경",
"main.popup.login.btn2": "변경안함", "main.popup.login.btn2": "변경안함",
"main.popup.login.validate1": "입력한 패스워드가 다릅니다.", "main.popup.login.validate1": "입력한 패스워드가 다릅니다.",
@ -858,11 +856,8 @@
"surface.shape.validate.size.1to2": "①길이는 ②보다 큰 값을 넣어주세요.", "surface.shape.validate.size.1to2": "①길이는 ②보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.1to3": "①길이는 ③보다 큰 값을 넣어주세요.", "surface.shape.validate.size.1to3": "①길이는 ③보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.1to23": "①길이는 ②+③보다 큰 값을 넣어주세요.", "surface.shape.validate.size.1to23": "①길이는 ②+③보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.1to23low": "②+③길이는 ①보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.2to3": "②길이는 ③보다 큰 값을 넣어주세요.", "surface.shape.validate.size.2to3": "②길이는 ③보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.3to2": "③길이는 ②보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.3to4": "③길이는 ④보다 큰 값을 넣어주세요.", "surface.shape.validate.size.3to4": "③길이는 ④보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.4to3": "④길이는 ③보다 큰 값을 넣어주세요.",
"surface.shape.validate.size.4to5": "④길이는 ⑤보다 큰 값을 넣어주세요.", "surface.shape.validate.size.4to5": "④길이는 ⑤보다 큰 값을 넣어주세요.",
"estimate.detail.header.title": "기본정보", "estimate.detail.header.title": "기본정보",
"estimate.detail.objectNo": "물건번호", "estimate.detail.objectNo": "물건번호",
@ -902,7 +897,7 @@
"estimate.detail.showPrice.pricingBtn": "Pricing", "estimate.detail.showPrice.pricingBtn": "Pricing",
"estimate.detail.showPrice.pricingBtn.noItemId": "Pricing이 누락된 아이템이 있습니다. Pricing을 진행해주세요.", "estimate.detail.showPrice.pricingBtn.noItemId": "Pricing이 누락된 아이템이 있습니다. Pricing을 진행해주세요.",
"estimate.detail.showPrice.description1": "제품 가격 OPEN", "estimate.detail.showPrice.description1": "제품 가격 OPEN",
"estimate.detail.showPrice.description2": "추가, 변경 자재", "estimate.detail.showPrice.description2": "추가 변경 자재",
"estimate.detail.showPrice.description3": "첨부필수", "estimate.detail.showPrice.description3": "첨부필수",
"estimate.detail.showPrice.description4": "클릭하여 제품 특이사항 확인", "estimate.detail.showPrice.description4": "클릭하여 제품 특이사항 확인",
"estimate.detail.showPrice.addItem": "제품추가", "estimate.detail.showPrice.addItem": "제품추가",
@ -944,7 +939,7 @@
"estimate.detail.productFeaturesPopup.close": "닫기", "estimate.detail.productFeaturesPopup.close": "닫기",
"estimate.detail.productFeaturesPopup.requiredStoreId": "1차 판매점은 필수값 입니다.", "estimate.detail.productFeaturesPopup.requiredStoreId": "1차 판매점은 필수값 입니다.",
"estimate.detail.productFeaturesPopup.requiredReceiveUser": "담당자는 필수값 입니다.", "estimate.detail.productFeaturesPopup.requiredReceiveUser": "담당자는 필수값 입니다.",
"estimate.detail.save.alertMsg": "저장되었습니다. 견적서에서 제품을 변경할 경우, 도면 및 회로에 반영되지 않습니다.", "estimate.detail.save.alertMsg": "저장되었습니다. 견적서에서 제품을 변경할 경우 도면 및 회로에 반영되지 않습니다.",
"estimate.detail.copy.alertMsg": "복사되었습니다.", "estimate.detail.copy.alertMsg": "복사되었습니다.",
"estimate.detail.save.requiredFileUpload": "파일첨부가 필수인 아이템이 있습니다. 파일을 첨부하거나 후일첨부를 체크해주십시오.", "estimate.detail.save.requiredFileUpload": "파일첨부가 필수인 아이템이 있습니다. 파일을 첨부하거나 후일첨부를 체크해주십시오.",
"estimate.detail.save.requiredItem": "제품은 1개이상 등록해야 됩니다.", "estimate.detail.save.requiredItem": "제품은 1개이상 등록해야 됩니다.",
@ -956,8 +951,8 @@
"estimate.detail.save.requiredAmount": "수량은 0보다 큰값을 입력해주세요.", "estimate.detail.save.requiredAmount": "수량은 0보다 큰값을 입력해주세요.",
"estimate.detail.save.requiredSalePrice": "단가는 0보다 큰값을 입력해주세요.", "estimate.detail.save.requiredSalePrice": "단가는 0보다 큰값을 입력해주세요.",
"estimate.detail.reset.alertMsg": "초기화 되었습니다.", "estimate.detail.reset.alertMsg": "초기화 되었습니다.",
"estimate.detail.reset.confirmMsg": "수기 변경(저장)한 견적 정보가 초기화되고, 최근 저장된 도면정보가 반영됩니다. 정말로 초기화하시겠습니까?", "estimate.detail.reset.confirmMsg": "수기 변경(저장)한 견적 정보가 초기화되고 최근 저장된 도면정보가 반영됩니다. 정말로 초기화하시겠습니까?",
"estimate.detail.lock.alertMsg": "견적서를 [잠금]하면, 수정할 수 없습니다. <br />견적서를 수정하려면 잠금해제를 하십시오.", "estimate.detail.lock.alertMsg": "견적서를 [잠금]하면 수정할 수 없습니다. <br />견적서를 수정하려면 잠금해제를 하십시오.",
"estimate.detail.unlock.alertMsg": "[잠금해제]하면 견적서를 수정할 수 있습니다. <br />해제하시겠습니까?", "estimate.detail.unlock.alertMsg": "[잠금해제]하면 견적서를 수정할 수 있습니다. <br />해제하시겠습니까?",
"estimate.detail.unlock.confirmBtnName": "해제", "estimate.detail.unlock.confirmBtnName": "해제",
"estimate.detail.alert.delFile": "첨부파일을 완전히 삭제하려면 [저장]버튼을 클릭하십시오.", "estimate.detail.alert.delFile": "첨부파일을 완전히 삭제하려면 [저장]버튼을 클릭하십시오.",
@ -983,7 +978,7 @@
"simulator.table.sub9": "예측발전량 (kWh)", "simulator.table.sub9": "예측발전량 (kWh)",
"simulator.notice.sub1": "Hanwha Japan 연간 발전량", "simulator.notice.sub1": "Hanwha Japan 연간 발전량",
"simulator.notice.sub2": "시뮬레이션 안내사항", "simulator.notice.sub2": "시뮬레이션 안내사항",
"simulator.menu.move.valid1": "견적서를 생성한 후에, 발전시뮬레이션 결과를 조회할 수 있습니다.", "simulator.menu.move.valid1": "견적서를 생성한 후에 발전시뮬레이션 결과를 조회할 수 있습니다.",
"master.moduletypeitem.message.error": "지붕재 코드를 입력하세요.", "master.moduletypeitem.message.error": "지붕재 코드를 입력하세요.",
"can.not.move.module": "모듈을 이동할 수 없습니다.", "can.not.move.module": "모듈을 이동할 수 없습니다.",
"can.not.copy.module": "모듈을 복사할 수 없습니다.", "can.not.copy.module": "모듈을 복사할 수 없습니다.",

23
src/store/estimateAtom.js Normal file
View File

@ -0,0 +1,23 @@
import { atom } from 'recoil'
export const estimateParamAtom = atom({
// 견적서 post parameter
key: 'estimateParamAtom',
default: {
saleStoreId: '',
objectNo: '',
planNo: '',
slope: '',
angle: '',
surfaceType: '',
setupHeight: '',
standardWindSpeedId: '',
snowfall: '',
northArrangement: '',
drawingFlg: '',
userId: '',
roofSurfaceList: [],
circuitItemList: [],
itemList: [],
},
})

View File

@ -957,7 +957,7 @@ export const getAllRelatedObjects = (id, canvas) => {
// 모듈,회로 구성에서 사용하는 degree 범위 별 값 // 모듈,회로 구성에서 사용하는 degree 범위 별 값
export const getDegreeInOrientation = (degree) => { export const getDegreeInOrientation = (degree) => {
if (degree >= 352) { if (degree >= 180 || degree < -180) {
return 0 return 0
} }
if (degree % 15 === 0) return degree if (degree % 15 === 0) return degree