This commit is contained in:
Daseul Kim 2025-02-05 10:33:21 +09:00
commit 14e8909f64
12 changed files with 429 additions and 397 deletions

View File

@ -28,6 +28,8 @@ import useSWRMutation from 'swr/mutation'
import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController' import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController'
import { canvasPopupStatusStore } from '@/store/canvasPopupStatusAtom' import { canvasPopupStatusStore } from '@/store/canvasPopupStatusAtom'
import { moduleSelectionDataPlanListState } from '@/store/selectedModuleOptions' import { moduleSelectionDataPlanListState } from '@/store/selectedModuleOptions'
import { useRouter } from 'next/navigation'
import { QcastContext } from '@/app/QcastProvider'
export default function Playground() { export default function Playground() {
const [useCadFile, setUseCadFile] = useRecoilState(useCadFileState) const [useCadFile, setUseCadFile] = useRecoilState(useCadFileState)
@ -56,6 +58,13 @@ export default function Playground() {
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const router = useRouter()
const { setIsGlobalLoading } = useContext(QcastContext)
useEffect(() => {
setIsGlobalLoading(false)
}, [])
useEffect(() => { useEffect(() => {
console.log('textInput:', textInput) console.log('textInput:', textInput)
}, [textInput]) }, [textInput])
@ -891,6 +900,19 @@ export default function Playground() {
Test Data insert Test Data insert
</Button> </Button>
</div> </div>
<div className="my-2">
<Button
onClick={() => {
const params = {
pid: 1,
objectNo: 'RT01250131002',
}
router.push(`/floor-plan/estimate/5?pid=${params.pid}&objectNo=${params.objectNo}`)
}}
>
견적서 페이지 이동
</Button>
</div>
</div> </div>
</> </>
) )

View File

@ -28,7 +28,6 @@ export default function CanvasFrame() {
const { currentCanvasPlan } = usePlan() const { currentCanvasPlan } = usePlan()
const totalDisplay = useRecoilValue(totalDisplaySelector) // const totalDisplay = useRecoilValue(totalDisplaySelector) //
const { setIsGlobalLoading } = useContext(QcastContext) const { setIsGlobalLoading } = useContext(QcastContext)
const [moduleStatistics, setModuleStatistics] = useRecoilState(moduleStatisticsState)
const reset = useResetRecoilState(moduleStatisticsState) const reset = useResetRecoilState(moduleStatisticsState)
const loadCanvas = () => { const loadCanvas = () => {
if (canvas) { if (canvas) {

View File

@ -354,22 +354,28 @@ export default function CircuitTrestleSetting({ id }) {
id: uuidv4(), id: uuidv4(),
} }
}) })
const PcsVoltageChkParams = { const pcsVoltageChkParams = {
...getOptYn(), ...getOptYn(),
useModuleItemList: getUseModuleItemList(), useModuleItemList: getUseModuleItemList(),
roofSurfaceList: getRoofSurfaceList(), roofSurfaceList: getRoofSurfaceList(),
pcsItemList: getPcsItemList(), pcsItemList: getPcsItemList(),
} }
setSelectedModels(selectedModels) setSelectedModels(selectedModels)
getPcsVoltageChk(PcsVoltageChkParams).then((res) => {}) getPcsVoltageChk(pcsVoltageChkParams).then((res) => {
setAllocationType(ALLOCATION_TYPE.PASSIVITY)
})
} else { } else {
swalFire({ swalFire({
title: '파워컨디셔너를 추가해 주세요.', title: res.result.resultMsg,
type: 'alert', type: 'alert',
confirmFn: () => {
return
},
}) })
return
} }
}) })
} else if (pcsCheck.max) { } else {
const moduleStdQty = selectedModels.reduce((acc, model) => { const moduleStdQty = selectedModels.reduce((acc, model) => {
return acc + parseInt(model.moduleStdQty) return acc + parseInt(model.moduleStdQty)
}, 0) }, 0)
@ -387,9 +393,9 @@ export default function CircuitTrestleSetting({ id }) {
}) })
return return
} }
}
setAllocationType(ALLOCATION_TYPE.PASSIVITY) setAllocationType(ALLOCATION_TYPE.PASSIVITY)
}
} }
// StepUp // StepUp

View File

@ -1,6 +1,7 @@
import { GlobalDataContext } from '@/app/GlobalDataProvider' import { GlobalDataContext } from '@/app/GlobalDataProvider'
import { POLYGON_TYPE } from '@/common/common' import { POLYGON_TYPE } from '@/common/common'
import { useMasterController } from '@/hooks/common/useMasterController' import { useMasterController } from '@/hooks/common/useMasterController'
import { useModule } from '@/hooks/module/useModule'
import { useMessage } from '@/hooks/useMessage' import { useMessage } from '@/hooks/useMessage'
import { useSwal } from '@/hooks/useSwal' import { useSwal } from '@/hooks/useSwal'
import { canvasState } from '@/store/canvasAtom' import { canvasState } from '@/store/canvasAtom'
@ -11,37 +12,29 @@ import { useRecoilState, useRecoilValue } from 'recoil'
export default function PassivityCircuitAllocation(props) { export default function PassivityCircuitAllocation(props) {
const { const {
tabNum,
setTabNum,
selectedModels, selectedModels,
setSelectedModels, setSelectedModels,
getOptYn: getApiProps, getOptYn: getApiProps,
getUseModuleItemList: getSelectedModuleList, getUseModuleItemList: getSelectedModuleList,
getSelectModelList: getSelectModelList, getSelectModelList: getSelectModelList,
getRoofSurfaceList,
getModelList,
} = props } = props
const { swalFire } = useSwal() const { swalFire } = useSwal()
const { getMessage } = useMessage() const { getMessage } = useMessage()
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const selectedModules = useRecoilValue(selectedModuleState) const selectedModules = useRecoilValue(selectedModuleState)
const [moduleStatistics, setModuleStatistics] = useRecoilState(moduleStatisticsState)
// const [totalWpout, setTotalWpout] = useState(0)
const [selectedPcs, setSelectedPcs] = useState(selectedModels[0]) const [selectedPcs, setSelectedPcs] = useState(selectedModels[0])
// const { header, rows: row } = moduleStatistics const { header, rows, footer } = useRecoilValue(moduleStatisticsState)
const [header, setHeader] = useState(moduleStatistics.header)
const [rows, setRows] = useState(moduleStatistics.rows)
const [footer, setFooter] = useState(['합계'])
const [circuitNumber, setCircuitNumber] = useState(1) const [circuitNumber, setCircuitNumber] = useState(1)
const [targetModules, setTargetModules] = useState([]) const [targetModules, setTargetModules] = useState([])
const { setModuleStatisticsData } = useModule()
const { getPcsManualConfChk } = useMasterController() const { getPcsManualConfChk } = useMasterController()
useEffect(() => { useEffect(() => {
console.log('header, rows', header, rows) console.log('header, rows', header, rows)
console.log('selectedModels', selectedModels) console.log('selectedModels', selectedModels)
// setSurfaceInfo() // setSurfaceInfo()
setTableData() setModuleStatisticsData()
if (!managementState) { if (!managementState) {
setManagementState(managementStateLoaded) setManagementState(managementStateLoaded)
} }
@ -158,7 +151,14 @@ export default function PassivityCircuitAllocation(props) {
} }
const handleCircuitNumberFix = () => { const handleCircuitNumberFix = () => {
let uniqueCircuitNumbers = null let uniqueCircuitNumbers = [
...new Set(
canvas
.getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuitNumber)
.map((obj) => obj.circuitNumber),
),
]
if (!circuitNumber || circuitNumber === 0) { if (!circuitNumber || circuitNumber === 0) {
swalFire({ swalFire({
text: '회로번호를 1 이상입력해주세요.', text: '회로번호를 1 이상입력해주세요.',
@ -174,15 +174,6 @@ export default function PassivityCircuitAllocation(props) {
}) })
return return
} else if (selectedModels.length > 1) { } else if (selectedModels.length > 1) {
uniqueCircuitNumbers = [
...new Set(
canvas
.getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuitNumber)
.map((obj) => obj.circuitNumber),
),
]
let result = false let result = false
uniqueCircuitNumbers.forEach((number) => { uniqueCircuitNumbers.forEach((number) => {
if ( if (
@ -335,7 +326,7 @@ export default function PassivityCircuitAllocation(props) {
setTargetModules([]) setTargetModules([])
setCircuitNumber(+circuitNumber + 1) setCircuitNumber(+circuitNumber + 1)
setTableData() setModuleStatisticsData()
}) })
} }
@ -347,100 +338,6 @@ export default function PassivityCircuitAllocation(props) {
} }
} }
const setTableData = () => {
const tempHeader = [
{ name: getMessage('simulator.table.sub1'), prop: 'name' },
{ name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.circuit'), prop: 'circuit' },
...selectedModules.itemList.map((module) => {
return {
name: module.itemNm,
prop: module.itemId,
}
}),
{ name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' },
]
const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
const surfaceIds = surfaces.map((surface) => surface.parentId)
const surfaceObjects = {}
const rows = surfaces.map((surface) => {
const moduleObject = {}
surfaceObjects[surface.id] = {
roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText,
circuit: '-',
amount: 0,
wpOut: 0,
circuits: {},
}
surface.modules.forEach((module) => {
if (!surfaceObjects[surface.id][module.moduleInfo.itemId]) {
//
surfaceObjects[surface.id][module.moduleInfo.itemId] = 0 //
}
surfaceObjects[surface.id][module.moduleInfo.itemId]++
surfaceObjects[surface.id].wpOut += +module.moduleInfo.wpOut
if (module.circuit) {
if (!surfaceObjects[surface.id].circuits[module.circuitNumber]) {
surfaceObjects[surface.id].circuits[module.circuitNumber] = {
circuit: module.circuitNumber,
wpOut: 0,
circuits: { wpOut: 0 },
}
if (!surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]) {
surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId] = 0
}
}
surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]++
surfaceObjects[surface.id].circuits[module.circuitNumber].circuits.wpOut += +module.moduleInfo.wpOut
surfaceObjects[surface.id].wpOut -= +module.moduleInfo.wpOut
surfaceObjects[surface.id][module.moduleInfo.itemId]--
}
})
})
console.log('rows', rows)
console.log('surfaceObjects', surfaceObjects)
let tempRows = []
Object.keys(surfaceObjects).forEach((key) => {
let tempRow = {
name: surfaceObjects[key].roofSurface,
circuit: surfaceObjects[key].circuit,
wpOut: surfaceObjects[key].wpOut,
}
selectedModules.itemList.forEach((module) => {
tempRow[module.itemId] = surfaceObjects[key][module.itemId]
})
tempRows.push(tempRow)
Object.keys(surfaceObjects[key].circuits).forEach((circuit) => {
let row = {
name: surfaceObjects[key].roofSurface,
circuit: surfaceObjects[key].circuits[circuit].circuit,
wpOut: surfaceObjects[key].circuits[circuit].circuits.wpOut,
}
selectedModules.itemList.forEach((module) => {
row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId]
})
tempRows.push(row)
})
})
const tempFooter = {
name: '총합',
circuit: '-',
wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0),
}
selectedModules.itemList.forEach((module) => {
tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + row[module.itemId], 0)
})
setHeader(tempHeader)
setRows(tempRows.filter((row) => row.wpOut !== 0))
setFooter(tempFooter)
setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter })
}
const initSelectedPcsCircuitNumber = () => { const initSelectedPcsCircuitNumber = () => {
swalFire({ swalFire({
title: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.init.info'), title: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.init.info'),
@ -516,9 +413,7 @@ export default function PassivityCircuitAllocation(props) {
<tr> <tr>
{header.map((header, i) => ( {header.map((header, i) => (
<td className="al-c" key={'footer' + i}> <td className="al-c" key={'footer' + i}>
{typeof footer[header.prop] === 'number' {footer[header.prop]}
? footer[header.prop].toLocaleString('ko-KR', { maximumFractionDigits: 4 })
: footer[header.prop]}
</td> </td>
))} ))}
</tr> </tr>

View File

@ -45,175 +45,188 @@ export default function ContextRoofAllocationSetting(props) {
return ( return (
<WithDraggable isShow={true} pos={pos}> <WithDraggable isShow={true} pos={pos}>
<div className={`modal-pop-wrap lr mount`}> <div className={`modal-pop-wrap lr mount`}>
<div className="modal-head modal-handle"> {currentRoofList && (
<h1 className="title">{getMessage('plan.menu.estimate.roof.alloc')}</h1> <>
<button className="modal-close" onClick={() => closePopup(id)}> <div className="modal-head modal-handle">
닫기 <h1 className="title">{getMessage('plan.menu.estimate.roof.alloc')}</h1>
</button> <button className="modal-close" onClick={() => closePopup(id)}>
</div> 닫기
<div className="modal-body"> </button>
<div className="properties-guide">{getMessage('modal.roof.alloc.info')}</div>
<div className="allocation-select-wrap">
<span>{getMessage('modal.roof.alloc.select.roof.material')}</span>
<div className="grid-select">
<QSelectBox
options={roofMaterials}
value={roofMaterials[0]}
onChange={(e) => {
// const selected = roofMaterials.find((roofMaterial) => roofMaterial.roofMatlCd === e.id)
setCurrentRoofMaterial(e)
}}
showKey={'roofMatlNm'}
sourceKey={'roofMatlCd'}
targetKey={'roofMatlCd'}
/>
</div> </div>
<button <div className="modal-body">
className="allocation-edit" <div className="properties-guide">{getMessage('modal.roof.alloc.info')}</div>
onClick={() => { <div className="allocation-select-wrap">
onAddRoofMaterial() <span>{getMessage('modal.roof.alloc.select.roof.material')}</span>
}} <div className="grid-select">
> <QSelectBox
<i className="edit-ico"></i> options={roofMaterials}
{getMessage('modal.common.add')} value={roofMaterials[0]}
</button> onChange={(e) => {
</div> // const selected = roofMaterials.find((roofMaterial) => roofMaterial.roofMatlCd === e.id)
<div className="grid-option-wrap"> setCurrentRoofMaterial(e)
{currentRoofList.length > 0 && }}
currentRoofList.map((roof, index) => { showKey={'roofMatlNm'}
return ( sourceKey={'roofMatlCd'}
<div className="grid-option-box" key={index}> targetKey={'roofMatlCd'}
<div className="d-check-radio pop no-text"> />
<input type="radio" name="radio01" checked={roof.selected && 'checked'} readOnly={true} /> </div>
<label <button
htmlFor="ra01" className="allocation-edit"
onClick={(e) => { onClick={() => {
handleDefaultRoofMaterial(index) onAddRoofMaterial()
}} }}
></label> >
</div> <i className="edit-ico"></i>
<div className="grid-option-block-form"> {getMessage('modal.common.add')}
<div className="block-box"> </button>
<div className="flex-ment"> </div>
<div className="grid-select" style={{ width: '248px' }}> <div className="grid-option-overflow">
<QSelectBox <div className="grid-option-wrap">
options={roofMaterials} {currentRoofList.map((roof, index) => {
value={roof} return (
showKey={'roofMatlNm'} <div className="grid-option-box" key={index}>
sourceKey={'roofMatlCd'} <div className="d-check-radio pop no-text">
targetKey={'roofMatlCd'} <input type="radio" name="radio01" checked={roof.selected && 'checked'} readOnly={true} />
onChange={(e) => handleChangeRoofMaterial(e, index)} <label
/> htmlFor="ra01"
</div> onClick={(e) => {
{index === 0 && <span className="dec">{getMessage('modal.roof.alloc.default.roof.material')}</span>} handleDefaultRoofMaterial(index)
{index !== 0 && <button className="delete" onClick={() => onDeleteRoofMaterial(index)}></button>} }}
></label>
</div> </div>
</div> <div className="grid-option-block-form">
<div className="block-box"> <div className="block-box">
<div className="flex-ment">
<span>{getMessage('slope')}</span>
<div className="input-grid" style={{ width: '214px' }}>
<input
type="text"
className="input-origin block"
onChange={(e) => {
handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index)
}}
defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle}
/>
</div>
<span>{pitchText}</span>
</div>
</div>
{(roof.widAuth || roof.lenAuth) && (
<div className="block-box">
{roof.widAuth && (
<div className="flex-ment"> <div className="flex-ment">
<span>W</span> <div className="grid-select">
<div className="input-grid" style={{ width: '100px' }}> <QSelectBox
<input type="text" className="input-origin block" defaultValue={roof.width} readOnly={roof.widAuth === 'R'} /> options={roofMaterials}
value={roof}
showKey={'roofMatlNm'}
sourceKey={'roofMatlCd'}
targetKey={'roofMatlCd'}
onChange={(e) => handleChangeRoofMaterial(e, index)}
/>
</div> </div>
{index === 0 && <span className="absol dec">{getMessage('modal.roof.alloc.default.roof.material')}</span>}
{index !== 0 && (
<span className="absol">
<button className="delete" onClick={() => onDeleteRoofMaterial(index)}></button>
</span>
)}
</div> </div>
)} </div>
{roof.lenAuth && ( <div className="block-box">
<div className="flex-ment"> <div className="flex-ment">
<span>L</span> <span>{getMessage('slope')}</span>
<div className="input-grid" style={{ width: '100px' }}> <div className="input-grid">
<input type="text" className="input-origin block" defaultValue={roof.length} readOnly={roof.lenAuth === 'R'} /> <input
type="text"
className="input-origin block"
onChange={(e) => {
handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index)
}}
defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle}
/>
</div> </div>
<span className="absol">{pitchText}</span>
</div> </div>
)} </div>
</div> {(roof.widAuth || roof.lenAuth) && (
)} <>
{(roof.raftAuth || roof.roofPchAuth) && ( {roof.widAuth && (
<div className="block-box"> <div className="block-box">
{roof.raftAuth && ( <div className="flex-ment">
<div className="block-box"> <span>W</span>
<div className="flex-ment"> <div className="input-grid">
<span>{getMessage('modal.placement.initial.setting.rafter')}</span> <input type="text" className="input-origin block" defaultValue={roof.width} readOnly={roof.widAuth === 'R'} />
{raftCodes.length > 0 && ( </div>
<div className="grid-select" style={{ width: '160px' }}>
<QSelectBox
options={raftCodes}
value={roof}
showKey={'clCodeNm'}
sourceKey={'clCode'}
targetKey={roof.raft ? 'raft' : 'raftBaseCd'}
/>
</div> </div>
)}
</div>
</div>
)}
{roof.roofPchAuth && (
<div className="block-box">
<div className="flex-ment">
<span>{getMessage('hajebichi')}</span>
<div className="input-grid" style={{ width: '84px' }}>
<input
type="text"
className="input-origin block"
value={parseInt(roof.hajebichi)}
readOnly={roof.roofPchAuth === 'R'}
/>
</div> </div>
</div> )}
</div> {roof.lenAuth && (
<div className="block-box">
<div className="flex-ment">
<span>L</span>
<div className="input-grid">
<input type="text" className="input-origin block" defaultValue={roof.length} readOnly={roof.lenAuth === 'R'} />
</div>
</div>
</div>
)}
</>
)} )}
</div> {(roof.raftAuth || roof.roofPchAuth) && (
)} <>
<div className="block-box"> {roof.raftAuth && (
<div className="icon-btn-wrap"> <div className="block-box">
<button <div className="flex-ment">
className={roof.layout === ROOF_MATERIAL_LAYOUT.PARALLEL ? 'act' : ''} <span>{getMessage('modal.placement.initial.setting.rafter')}</span>
onClick={() => { {raftCodes.length > 0 && (
handleChangeLayout(ROOF_MATERIAL_LAYOUT.PARALLEL, index) <div className="grid-select">
}} <QSelectBox
> options={raftCodes}
{getMessage('modal.roof.alloc.select.parallel')} value={roof}
<i className="allocation01"></i> showKey={'clCodeNm'}
</button> sourceKey={'clCode'}
<button targetKey={roof.raft ? 'raft' : 'raftBaseCd'}
className={roof.layout === ROOF_MATERIAL_LAYOUT.STAIRS ? 'act' : ''} />
onClick={() => { </div>
handleChangeLayout(ROOF_MATERIAL_LAYOUT.STAIRS, index) )}
}} </div>
> </div>
{getMessage('modal.roof.alloc.select.stairs')} <i className="allocation02"></i> )}
</button> {roof.roofPchAuth && (
<div className="block-box">
<div className="flex-ment">
<span>{getMessage('hajebichi')}</span>
<div className="input-grid">
<input
type="text"
className="input-origin block"
value={parseInt(roof.hajebichi)}
readOnly={roof.roofPchAuth === 'R'}
/>
</div>
</div>
</div>
)}
</>
)}
<div className="block-box">
<div className="icon-btn-wrap">
<button
className={roof.layout === ROOF_MATERIAL_LAYOUT.PARALLEL ? 'act' : ''}
onClick={() => {
handleChangeLayout(ROOF_MATERIAL_LAYOUT.PARALLEL, index)
}}
>
{getMessage('modal.roof.alloc.select.parallel')}
<i className="allocation01"></i>
</button>
<button
className={roof.layout === ROOF_MATERIAL_LAYOUT.STAIRS ? 'act' : ''}
onClick={() => {
handleChangeLayout(ROOF_MATERIAL_LAYOUT.STAIRS, index)
}}
>
{getMessage('modal.roof.alloc.select.stairs')} <i className="allocation02"></i>
</button>
</div>
</div>
</div> </div>
</div> </div>
</div> )
</div> })}
) </div>
})} </div>
</div> <div className="grid-btn-wrap">
<div className="grid-btn-wrap"> <button className="btn-frame modal act" onClick={handleSaveContext}>
<button className="btn-frame modal act" onClick={handleSaveContext}> {getMessage('modal.roof.alloc.apply')}
{getMessage('modal.roof.alloc.apply')} </button>
</button> </div>
</div> </div>
</div> </>
)}
<div className="modal-foot modal-handle"></div> <div className="modal-foot modal-handle"></div>
</div> </div>
</WithDraggable> </WithDraggable>

View File

@ -1,12 +1,14 @@
import { BATCH_TYPE, POLYGON_TYPE } from '@/common/common' import { BATCH_TYPE, POLYGON_TYPE } from '@/common/common'
import { canvasState } from '@/store/canvasAtom' import { canvasState } from '@/store/canvasAtom'
import { isOverlap, polygonToTurfPolygon, rectToPolygon } from '@/util/canvas-util' import { isOverlap, polygonToTurfPolygon, rectToPolygon } from '@/util/canvas-util'
import { useRecoilValue } from 'recoil' import { useRecoilValue, useSetRecoilState } from 'recoil'
import { v4 as uuidv4 } from 'uuid' import { v4 as uuidv4 } from 'uuid'
import * as turf from '@turf/turf' import * as turf from '@turf/turf'
import { useSwal } from '../useSwal' import { useSwal } from '../useSwal'
import { useModuleBasicSetting } from './useModuleBasicSetting' import { useModuleBasicSetting } from './useModuleBasicSetting'
import { useMessage } from '../useMessage' import { useMessage } from '../useMessage'
import { selectedModuleState } from '@/store/selectedModuleOptions'
import { moduleStatisticsState } from '@/store/circuitTrestleAtom'
export const MODULE_REMOVE_TYPE = { export const MODULE_REMOVE_TYPE = {
LEFT: 'left', LEFT: 'left',
@ -35,6 +37,8 @@ export function useModule() {
const { swalFire } = useSwal() const { swalFire } = useSwal()
const { getMessage } = useMessage() const { getMessage } = useMessage()
const { checkModuleDisjointObjects } = useModuleBasicSetting() const { checkModuleDisjointObjects } = useModuleBasicSetting()
const selectedModules = useRecoilValue(selectedModuleState)
const setModuleStatistics = useSetRecoilState(moduleStatisticsState)
const moduleMove = (length, direction) => { const moduleMove = (length, direction) => {
const selectedObj = canvas.getActiveObjects() //선택된 객체들을 가져옴 const selectedObj = canvas.getActiveObjects() //선택된 객체들을 가져옴
@ -929,6 +933,92 @@ export function useModule() {
.filter((obj) => [BATCH_TYPE.OPENING, BATCH_TYPE.TRIANGLE_DORMER, BATCH_TYPE.PENTAGON_DORMER, BATCH_TYPE.SHADOW].includes(obj.name)) .filter((obj) => [BATCH_TYPE.OPENING, BATCH_TYPE.TRIANGLE_DORMER, BATCH_TYPE.PENTAGON_DORMER, BATCH_TYPE.SHADOW].includes(obj.name))
} }
const setModuleStatisticsData = () => {
const tempHeader = [
{ name: getMessage('simulator.table.sub1'), prop: 'name' },
{ name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.circuit'), prop: 'circuit' },
...selectedModules.itemList.map((module) => {
return {
name: module.itemNm,
prop: module.itemId,
}
}),
{ name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' },
]
const surfaceObjects = {}
const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
const rows = surfaces.map((surface) => {
surfaceObjects[surface.id] = {
roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText,
circuit: '-',
amount: 0,
wpOut: 0,
circuits: {},
}
surface.modules.forEach((module) => {
if (!surfaceObjects[surface.id][module.moduleInfo.itemId]) {
// 지붕면에 모듈 존재 여부
surfaceObjects[surface.id][module.moduleInfo.itemId] = 0 // 모듈 초기화
}
surfaceObjects[surface.id][module.moduleInfo.itemId]++
surfaceObjects[surface.id].wpOut += +module.moduleInfo.wpOut
if (module.circuit) {
if (!surfaceObjects[surface.id].circuits[module.circuitNumber]) {
surfaceObjects[surface.id].circuits[module.circuitNumber] = {
circuit: module.circuitNumber,
wpOut: 0,
circuits: { wpOut: 0 },
}
if (!surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]) {
surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId] = 0
}
}
surfaceObjects[surface.id].circuits[module.circuitNumber].circuits[module.moduleInfo.itemId]++
surfaceObjects[surface.id].circuits[module.circuitNumber].circuits.wpOut += +module.moduleInfo.wpOut
surfaceObjects[surface.id].wpOut -= +module.moduleInfo.wpOut
surfaceObjects[surface.id][module.moduleInfo.itemId]--
}
})
})
let tempRows = []
Object.keys(surfaceObjects).forEach((key) => {
let tempRow = {
name: surfaceObjects[key].roofSurface,
circuit: surfaceObjects[key].circuit,
wpOut: parseInt((surfaceObjects[key].wpOut / 1000).toFixed(3)),
}
selectedModules.itemList.forEach((module) => {
tempRow[module.itemId] = surfaceObjects[key][module.itemId]
})
tempRows.push(tempRow)
Object.keys(surfaceObjects[key].circuits).forEach((circuit) => {
let row = {
name: surfaceObjects[key].roofSurface,
circuit: surfaceObjects[key].circuits[circuit].circuit,
wpOut: parseInt((surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000).toFixed(3)),
}
selectedModules.itemList.forEach((module) => {
row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId]
})
tempRows.push(row)
})
})
const tempFooter = {
name: getMessage('modal.panel.batch.statistic.total'),
circuit: '-',
wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0),
}
selectedModules.itemList.forEach((module) => {
tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + row[module.itemId], 0)
})
setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter })
}
return { return {
moduleMove, moduleMove,
moduleMultiMove, moduleMultiMove,
@ -942,5 +1032,6 @@ export function useModule() {
muduleRowInsert, muduleRowInsert,
modulesRemove, modulesRemove,
alignModule, alignModule,
setModuleStatisticsData,
} }
} }

View File

@ -2468,7 +2468,7 @@ export function useModuleBasicSetting(tabNum) {
...surface, ...surface,
name: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, // 지붕면 name: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, // 지붕면
// powerGeneration: wpOut.toLocaleString('ko-KR', { maximumFractionDigits: 4 }), // powerGeneration: wpOut.toLocaleString('ko-KR', { maximumFractionDigits: 4 }),
wpOut: wpOut, wpOut: (wpOut / 1000).toFixed(3),
} }
}) })
@ -2481,7 +2481,7 @@ export function useModuleBasicSetting(tabNum) {
}), }),
{ name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' }, { name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'wpOut' },
] ]
let footer = ['합계'] let footer = [getMessage('modal.panel.batch.statistic.total')]
let footerData = {} let footerData = {}
rows.forEach((row) => { rows.forEach((row) => {
Object.keys(moduleInfo).map((key) => { Object.keys(moduleInfo).map((key) => {
@ -2492,7 +2492,7 @@ export function useModuleBasicSetting(tabNum) {
Object.keys(footerData).forEach((key) => { Object.keys(footerData).forEach((key) => {
footer.push(footerData[key]) footer.push(footerData[key])
}) })
footer.push(totalWpout) footer.push((totalWpout / 1000).toFixed(3))
console.log({ header: header, rows, footer: footer }) console.log({ header: header, rows, footer: footer })
setModuleStatistics({ header: header, rows, footer: footer }) setModuleStatistics({ header: header, rows, footer: footer })
} }

View File

@ -2,9 +2,10 @@ import { useRecoilValue } from 'recoil'
import { canvasState, currentAngleTypeSelector } from '@/store/canvasAtom' import { canvasState, currentAngleTypeSelector } 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 } 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 { basicSettingState } from '@/store/settingAtom'
// 회로 및 가대설정 // 회로 및 가대설정
export const useTrestle = () => { export const useTrestle = () => {
@ -12,6 +13,7 @@ export const useTrestle = () => {
const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //다음으로 넘어가는 최종 데이터 const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //다음으로 넘어가는 최종 데이터
const { getQuotationItem } = useMasterController() const { getQuotationItem } = useMasterController()
const currentAngleType = useRecoilValue(currentAngleTypeSelector) const currentAngleType = useRecoilValue(currentAngleTypeSelector)
const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet
const apply = () => { const apply = () => {
try { try {
@ -1787,6 +1789,16 @@ export const useTrestle = () => {
return groups return groups
} }
// 각도에 따른 길이 반환
function getTrestleLength(length, degree) {
if (roofSizeSet !== 1) {
// 복시도 입력이 아닌경우 그냥 길이 return
return length
}
const radians = (degree * Math.PI) / 180
return length * Math.cos(radians)
}
// 견적서 아이템 조회 api parameter 생성 // 견적서 아이템 조회 api parameter 생성
const getTrestleParams = (surface) => { const getTrestleParams = (surface) => {
const result = calculateForApi(surface) const result = calculateForApi(surface)

View File

@ -5,11 +5,11 @@
"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": "オンライン保証システム",
@ -17,23 +17,23 @@
"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": "寸法入力方法",
"modal.placement.initial.setting.size.info": "寸法入力方法案内", "modal.placement.initial.setting.size.info": "寸法入力方法案内",
"modal.placement.initial.setting.size.roof": "複視図入力", "modal.placement.initial.setting.size.roof": "図入力",
"modal.placement.initial.setting.size.roof.info": "平面の外壁線と立面の屋根勾配に基づいて作画する場合選択", "modal.placement.initial.setting.size.roof.info": "平面の外壁線と立面の屋根勾配に基づいて作画する場合選択",
"modal.placement.initial.setting.size.actual": "実測値入力", "modal.placement.initial.setting.size.actual": "実測値入力",
"modal.placement.initial.setting.size.actual.info": "現地屋根の外周寸法を入力して作画する場合選択", "modal.placement.initial.setting.size.actual.info": "屋根の外周寸法を入力して作画する場合選択",
"modal.placement.initial.setting.size.none.pitch": "陸屋根", "modal.placement.initial.setting.size.none.pitch": "陸屋根",
"modal.placement.initial.setting.size.none.pitch.info": "傾斜のない平面形状の屋根にパネルを配置する場合に選択", "modal.placement.initial.setting.size.none.pitch.info": "傾斜のない平面形状の屋根にパネルを配置する場合に選択",
"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": "屋根形状の設定",
"modal.roof.shape.setting.ridge": "龍丸", "modal.roof.shape.setting.ridge": "",
"modal.roof.shape.setting.patten.a": "Aパターン", "modal.roof.shape.setting.patten.a": "Aパターン",
"modal.roof.shape.setting.patten.b": "Bパターン", "modal.roof.shape.setting.patten.b": "Bパターン",
"modal.roof.shape.setting.side": "別に設定", "modal.roof.shape.setting.side": "別に設定",
@ -42,14 +42,14 @@
"plan.menu.roof.cover.roof.shape.setting": "屋根形状の設定", "plan.menu.roof.cover.roof.shape.setting": "屋根形状の設定",
"plan.menu.roof.cover.roof.shape.passivity.setting": "屋根形状の手動設定", "plan.menu.roof.cover.roof.shape.passivity.setting": "屋根形状の手動設定",
"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": "桁を上げる",
"modal.movement.flow.line.updown.down": "桁数を下げる", "modal.movement.flow.line.updown.down": "桁数を下げる",
"modal.movement.flow.line.info": "線を選択して移動幅を指定します", "modal.movement.flow.line.info": "線を選択して移動幅を指定します",
"modal.movement.flow.line.bottom.left": "高さ変更:下、左", "modal.movement.flow.line.bottom.left": "高さ変更:下、左",
"modal.movement.flow.line.top.right": "高さ変更:上、右", "modal.movement.flow.line.top.right": "高さ変更:上、右",
"plan.menu.roof.cover.outline.edit.offset": "外壁の編集とオフセット", "plan.menu.roof.cover.outline.edit.offset": "外壁の編集とオフセット",
@ -59,17 +59,17 @@
"modal.cover.outline.drawing": "外壁線の作成", "modal.cover.outline.drawing": "外壁線の作成",
"modal.cover.outline": "外壁線", "modal.cover.outline": "外壁線",
"modal.cover.outline.right.angle": "直角", "modal.cover.outline.right.angle": "直角",
"modal.cover.outline2": "イ・グベ", "modal.cover.outline2": "異勾配",
"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": "に戻る",
"modal.cover.outline.finish": "設定完了", "modal.cover.outline.finish": "設定完了",
"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": "配置面",
@ -77,29 +77,29 @@
"plan.menu.placement.surface.drawing": "配置面の描画", "plan.menu.placement.surface.drawing": "配置面の描画",
"modal.placement.surface.drawing.straight.line": "直線", "modal.placement.surface.drawing.straight.line": "直線",
"modal.placement.surface.drawing.right.angle": "直角", "modal.placement.surface.drawing.right.angle": "直角",
"modal.placement.surface.drawing.double.pitch": "イ・グベ", "modal.placement.surface.drawing.double.pitch": "異勾配",
"modal.placement.surface.drawing.angle": "角度", "modal.placement.surface.drawing.angle": "角度",
"modal.placement.surface.drawing.diagonal": "対角線", "modal.placement.surface.drawing.diagonal": "対角線",
"modal.placement.surface.drawing.fix": "配置面確定", "modal.placement.surface.drawing.fix": "配置面確定",
"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": "勾配を直接入力",
"modal.module.basic.setting.module.roof.material": "屋根材", "modal.module.basic.setting.module.roof.material": "屋根材",
"modal.module.basic.setting.module.trestle.maker": "カデメーガー", "modal.module.basic.setting.module.trestle.maker": "架台メーカー",
"modal.module.basic.setting.module.rafter.margin": "垂木の間隔", "modal.module.basic.setting.module.rafter.margin": "垂木の間隔",
"modal.module.basic.setting.module.construction.method": "工法", "modal.module.basic.setting.module.construction.method": "工法",
"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": "積雪量",
@ -107,33 +107,33 @@
"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": "単数",
"modal.module.basic.setting.pitch.module.row.margin": "上下間隔", "modal.module.basic.setting.pitch.module.row.margin": "上下間隔",
"modal.module.basic.setting.pitch.module.column.amount": "熱水", "modal.module.basic.setting.pitch.module.column.amount": "列数",
"modal.module.basic.setting.pitch.module.column.margin": "左右間隔", "modal.module.basic.setting.pitch.module.column.margin": "左右間隔",
"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": "名称",
@ -169,7 +169,7 @@
"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": "階段式",
"modal.roof.alloc.apply": "選択した屋根材として割り当て", "modal.roof.alloc.apply": "選択した屋根材として割り当て",
"plan.menu.estimate.docDown": "文書のダウンロード", "plan.menu.estimate.docDown": "文書のダウンロード",
"plan.menu.estimate.save": "保存", "plan.menu.estimate.save": "保存",
@ -191,7 +191,7 @@
"common.vertical": "縦", "common.vertical": "縦",
"modal.font.setting.display": "見る", "modal.font.setting.display": "見る",
"modal.font.setting.info": "これはOpen Typeフォントです。プリンタや画面でも同じフォントを使用してください。", "modal.font.setting.info": "これはOpen Typeフォントです。プリンタや画面でも同じフォントを使用してください。",
"modal.canvas.setting": "Canvasの設定", "modal.canvas.setting": "作図の設定",
"modal.canvas.setting.display": "ディスプレイ設定", "modal.canvas.setting.display": "ディスプレイ設定",
"modal.canvas.setting.font.plan": "フォントと図面サイズの設定", "modal.canvas.setting.font.plan": "フォントと図面サイズの設定",
"modal.canvas.setting.grid": "グリッド", "modal.canvas.setting.grid": "グリッド",
@ -252,7 +252,7 @@
"modal.canvas.setting.first.option.image": "画像表示", "modal.canvas.setting.first.option.image": "画像表示",
"modal.canvas.setting.first.option.total": "集計表を表示", "modal.canvas.setting.first.option.total": "集計表を表示",
"modal.canvas.setting.first.option.dimension": "寸法表示", "modal.canvas.setting.first.option.dimension": "寸法表示",
"modal.canvas.setting.first.option.corridor.dimension": "廊下寸法表示", "modal.canvas.setting.first.option.corridor.dimension": "伏せ図寸法表示",
"modal.canvas.setting.first.option.real.dimension": "実寸表示", "modal.canvas.setting.first.option.real.dimension": "実寸表示",
"modal.canvas.setting.first.option.none.dimension": "寸法表示なし", "modal.canvas.setting.first.option.none.dimension": "寸法表示なし",
"modal.canvas.setting.first.option.display": "画面表示", "modal.canvas.setting.first.option.display": "画面表示",
@ -269,7 +269,7 @@
"modal.wallline.offset.setting": "外壁の編集とオフセット", "modal.wallline.offset.setting": "外壁の編集とオフセット",
"modal.wallline.offset.setting.wallline.edit": "外壁の編集", "modal.wallline.offset.setting.wallline.edit": "外壁の編集",
"modal.wallline.offset.setting.wallline.edit.info": "辺と始点を選択して長さと方向を指定してください。", "modal.wallline.offset.setting.wallline.edit.info": "辺と始点を選択して長さと方向を指定してください。",
"modal.wallline.offset.setting.wallline.edit.position": "支店", "modal.wallline.offset.setting.wallline.edit.position": "始点",
"modal.wallline.offset.setting.offset": "オフセット", "modal.wallline.offset.setting.offset": "オフセット",
"modal.wallline.offset.setting.offset.info": "オフセットしたい外壁線を選択してください。", "modal.wallline.offset.setting.offset.info": "オフセットしたい外壁線を選択してください。",
"modal.object.setting.type.open.space.placement": "開口部の配置", "modal.object.setting.type.open.space.placement": "開口部の配置",
@ -282,7 +282,7 @@
"modal.object.setting.height": "縦長", "modal.object.setting.height": "縦長",
"modal.object.setting.area.cross": "エリア交差", "modal.object.setting.area.cross": "エリア交差",
"modal.object.setting.size.setting": "サイズ設定", "modal.object.setting.size.setting": "サイズ設定",
"modal.object.setting.agreement.depth": "同意の深さ", "modal.object.setting.agreement.depth": "棟の長さ・深さ",
"modal.object.setting.offset.depth": "出幅(深さ)", "modal.object.setting.offset.depth": "出幅(深さ)",
"modal.object.setting.offset.width": "出幅(幅)", "modal.object.setting.offset.width": "出幅(幅)",
"modal.object.setting.direction.select": "方向の選択", "modal.object.setting.direction.select": "方向の選択",
@ -330,7 +330,7 @@
"contextmenu.wallline.remove": "外壁の削除", "contextmenu.wallline.remove": "外壁の削除",
"contextmenu.size.edit": "サイズ変更", "contextmenu.size.edit": "サイズ変更",
"modal.auxiliary.size.edit": "補助線サイズ変更", "modal.auxiliary.size.edit": "補助線サイズ変更",
"modal.auxiliary.size.edit.point": "支店", "modal.auxiliary.size.edit.point": "始点",
"contextmenu.auxiliary.move": "補助線の移動", "contextmenu.auxiliary.move": "補助線の移動",
"modal.auxiliary.move": "補助線の移動", "modal.auxiliary.move": "補助線の移動",
"modal.auxiliary.move.info": "移動する方向を入力してください。", "modal.auxiliary.move.info": "移動する方向を入力してください。",
@ -361,12 +361,12 @@
"modal.panel.column.insert.type.left": "左挿入", "modal.panel.column.insert.type.left": "左挿入",
"modal.panel.column.insert.type.right": "右挿入", "modal.panel.column.insert.type.right": "右挿入",
"modal.image.load.size.rotate": "サイズ変更と回転", "modal.image.load.size.rotate": "サイズ変更と回転",
"contextmenu.row.move": "ただし移動", "contextmenu.row.move": "移動",
"contextmenu.row.copy": "コピー", "contextmenu.row.copy": "コピー",
"contextmenu.row.remove": "ただし削除", "contextmenu.row.remove": "削除",
"modal.row.remove": "ただし削除", "modal.row.remove": "削除",
"modal.row.remove.info": "削除ステージをどのようにしますか?", "modal.row.remove.info": "削除ステージをどのようにしますか?",
"modal.row.remove.type.up": "違足に減る", "modal.row.remove.type.up": "上に減らす",
"modal.row.remove.type.down": "下向きに減らす", "modal.row.remove.type.down": "下向きに減らす",
"modal.row.remove.type.side": "両側に減る", "modal.row.remove.type.side": "両側に減る",
"modal.row.remove.type.none": "減らさない", "modal.row.remove.type.none": "減らさない",
@ -374,7 +374,7 @@
"modal.row.insert": "段挿入", "modal.row.insert": "段挿入",
"modal.row.insert.info": "挿入する方向を選択してください。", "modal.row.insert.info": "挿入する方向を選択してください。",
"modal.row.insert.type.up": "上部挿入", "modal.row.insert.type.up": "上部挿入",
"modal.row.insert.type.down": "下挿入", "modal.row.insert.type.down": "下挿入",
"modal.move.setting": "移動設定", "modal.move.setting": "移動設定",
"modal.move.setting.info": "間隔を設定し、移動方向を選択します。", "modal.move.setting.info": "間隔を設定し、移動方向を選択します。",
"modal.copy.setting": "コピー設定", "modal.copy.setting": "コピー設定",
@ -389,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": "距離測定",
@ -466,7 +466,7 @@
"common.message.confirm.confirm": "承認しますか?", "common.message.confirm.confirm": "承認しますか?",
"common.message.confirm.request": "承認をリクエストしますか?", "common.message.confirm.request": "承認をリクエストしますか?",
"common.message.confirm.delete": "削除しますか?", "common.message.confirm.delete": "削除しますか?",
"common.message.confirm.close": "閉じか?", "common.message.confirm.close": "閉じますか?",
"common.message.confirm.unclose": "クローズをキャンセルしますか?", "common.message.confirm.unclose": "クローズをキャンセルしますか?",
"common.message.confirm.cancel": "キャンセルしますか?", "common.message.confirm.cancel": "キャンセルしますか?",
"common.message.confirm.uncancel": "キャンセルをキャンセルしますか?", "common.message.confirm.uncancel": "キャンセルをキャンセルしますか?",
@ -497,7 +497,7 @@
"common.message.approved ": "承認されました。", "common.message.approved ": "承認されました。",
"common.message.errorFieldExist": "エラーフィールドが存在します", "common.message.errorFieldExist": "エラーフィールドが存在します",
"common.message.storeIdExist ": "すでに使用している販売店IDです。", "common.message.storeIdExist ": "すでに使用している販売店IDです。",
"common.message.userIdExist ": "すでに使用しているユーザーID。", "common.message.userIdExist ": "すでに使用しているユーザーIDです。",
"common.message.noExists ": "削除された投稿です。", "common.message.noExists ": "削除された投稿です。",
"common.message.emailReqTo": "Email To is required", "common.message.emailReqTo": "Email To is required",
"common.message.downloadPeriod": "Please select the download search period within {0} days.", "common.message.downloadPeriod": "Please select the download search period within {0} days.",
@ -506,9 +506,9 @@
"common.message.writeToConfirm": "作成解除を実行しますか?", "common.message.writeToConfirm": "作成解除を実行しますか?",
"common.message.password.init.success": "パスワード[{0}]に初期化されました。", "common.message.password.init.success": "パスワード[{0}]に初期化されました。",
"common.message.no.edit.save": "このドキュメントは変更できません。", "common.message.no.edit.save": "このドキュメントは変更できません。",
"common.load": "読", "common.load": "読込",
"common.input.file": "ファイルを読み込む", "common.input.file": "ファイルを読み込む",
"common.input.file.load": "読", "common.input.file.load": "読込",
"common.input.image.load": "画像を読み込む", "common.input.image.load": "画像を読み込む",
"common.input.address.load": "アドレスを読み込む", "common.input.address.load": "アドレスを読み込む",
"common.require": "必須", "common.require": "必須",
@ -534,7 +534,7 @@
"color.pink": "ピンク", "color.pink": "ピンク",
"color.gold": "黄金色", "color.gold": "黄金色",
"color.darkblue": "藍色", "color.darkblue": "藍色",
"site.name": "Q.CAST III", "site.name": "HANASYS設計",
"site.sub_name": "太陽光発電システム図面管理サイト", "site.sub_name": "太陽光発電システム図面管理サイト",
"site.header.link1": "選択してください。", "site.header.link1": "選択してください。",
"site.header.link2": "オンライン保証システム", "site.header.link2": "オンライン保証システム",
@ -542,7 +542,7 @@
"board.notice.sub.title": "お知らせ一覧", "board.notice.sub.title": "お知らせ一覧",
"board.faq.title": "FAQ", "board.faq.title": "FAQ",
"board.faq.sub.title": "FAQリスト", "board.faq.sub.title": "FAQリスト",
"board.archive.title": "素材のダウンロード", "board.archive.title": "資料のダウンロード",
"board.archive.sub.title": "文書一覧", "board.archive.sub.title": "文書一覧",
"board.list.header.rownum": "番号", "board.list.header.rownum": "番号",
"board.list.header.title": "タイトル", "board.list.header.title": "タイトル",
@ -554,7 +554,7 @@
"board.sub.fileList": "添付ファイル一覧", "board.sub.fileList": "添付ファイル一覧",
"board.sub.updDt": "更新", "board.sub.updDt": "更新",
"board.sub.btn.close": "閉じる", "board.sub.btn.close": "閉じる",
"myinfo.title": "私の情報", "myinfo.title": "社員情報",
"myinfo.info.userId": "ユーザーID", "myinfo.info.userId": "ユーザーID",
"myinfo.info.nameKana": "担当者名日本語", "myinfo.info.nameKana": "担当者名日本語",
"myinfo.info.name": "担当者名", "myinfo.info.name": "担当者名",
@ -578,7 +578,7 @@
"myinfo.message.password.error": "パスワードが間違っています。", "myinfo.message.password.error": "パスワードが間違っています。",
"login": "ログイン", "login": "ログイン",
"login.auto.page.text": "自動ログイン中です。", "login.auto.page.text": "自動ログイン中です。",
"login.id.save": "IDセーブ", "login.id.save": "ID保存",
"login.id.placeholder": "IDを入力してください。", "login.id.placeholder": "IDを入力してください。",
"login.password.placeholder": "パスワードを入力してください。", "login.password.placeholder": "パスワードを入力してください。",
"login.guide.text": "当サイトをご利用の際は事前申請が必要です。", "login.guide.text": "当サイトをご利用の際は事前申請が必要です。",
@ -592,11 +592,11 @@
"login.init_password.complete_message": "パスワードが初期化されました。初期化されたパスワードはIDと同じです。", "login.init_password.complete_message": "パスワードが初期化されました。初期化されたパスワードはIDと同じです。",
"login.init_password.id.placeholder": "IDを入力してください。", "login.init_password.id.placeholder": "IDを入力してください。",
"login.init_password.email.placeholder": "メールを入力してください。", "login.init_password.email.placeholder": "メールを入力してください。",
"join.title": "Q.CAST3 ログインID発行申請", "join.title": "HANASYS設計ログインID発行申請",
"join.sub1.title": "販売代理店情報", "join.sub1.title": "販売代理店情報",
"join.sub1.comment": "※登録されるリセラーの会社名を入力してください。 2次店は「○○販売株式会社2次店××設備株式会社」でご記入ください。", "join.sub1.comment": "※登録される販売店の会社名を入力してください。 2次店は「○○販売株式会社2次店××設備株式会社」でご記入ください。",
"join.sub1.storeQcastNm": "販売代理店名", "join.sub1.storeQcastNm": "販売代理店名",
"join.sub1.storeQcastNm_placeholder": "株式会社エネルギーギアソリューションアンサービス(2次点山口周期販売有限公司", "join.sub1.storeQcastNm_placeholder": "株式会社エネルギーギアソリューションアンサービス(2次点山口周期販売有限会社",
"join.sub1.storeQcastNmKana": "販売代理店名フリガナ", "join.sub1.storeQcastNmKana": "販売代理店名フリガナ",
"join.sub1.storeQcastNmKana_placeholder": "株式会社エネルギーギアソリューション", "join.sub1.storeQcastNmKana_placeholder": "株式会社エネルギーギアソリューション",
"join.sub1.postCd": "郵便番号", "join.sub1.postCd": "郵便番号",
@ -611,7 +611,7 @@
"join.sub2.title": "担当者情報", "join.sub2.title": "担当者情報",
"join.sub2.userNm": "担当者名", "join.sub2.userNm": "担当者名",
"join.sub2.userNmKana": "担当者名ふりがな", "join.sub2.userNmKana": "担当者名ふりがな",
"join.sub2.userId": "アプリケーションID", "join.sub2.userId": "申請ID",
"join.sub2.email": "メールアドレス", "join.sub2.email": "メールアドレス",
"join.sub2.telNo": "電話番号", "join.sub2.telNo": "電話番号",
"join.sub2.telNo_placeholder": "00-0000-0000", "join.sub2.telNo_placeholder": "00-0000-0000",
@ -620,18 +620,18 @@
"join.sub2.category": "部署名", "join.sub2.category": "部署名",
"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": "HANASYS設計ログインID発行申請完了",
"join.complete.contents": "※申請したIDが承認されると、担当者情報に入力したEメールアドレスにログイン関連案内メールが送信されます。", "join.complete.contents": "※申請したIDが承認されると、担当者情報に入力したEメールアドレスにログイン関連案内メールが送信されます。",
"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": "ハンファジャパンの担当者にID承認が要求された場合、これ以上情報を修正することはできません。申請しますか?",
"stuff.gridHeader.lastEditDatetime": "更新日時", "stuff.gridHeader.lastEditDatetime": "更新日時",
"stuff.gridHeader.objectNo": "品番", "stuff.gridHeader.objectNo": "物件番号",
"stuff.gridHeader.planTotCnt": "プラン数", "stuff.gridHeader.planTotCnt": "プラン数",
"stuff.gridHeader.objectName": "商品名", "stuff.gridHeader.objectName": "商品名",
"stuff.gridHeader.saleStoreId": "代理店ID", "stuff.gridHeader.saleStoreId": "代理店ID",
"stuff.gridHeader.saleStoreName": "代理店名", "stuff.gridHeader.saleStoreName": "代理店名",
"stuff.gridHeader.address": "商品アドレス", "stuff.gridHeader.address": "物件住所",
"stuff.gridHeader.dispCompanyName": "見積もり", "stuff.gridHeader.dispCompanyName": "見積もり",
"stuff.gridHeader.receiveUser": "担当者", "stuff.gridHeader.receiveUser": "担当者",
"stuff.gridHeader.specificationConfirmDate": "仕様確認日", "stuff.gridHeader.specificationConfirmDate": "仕様確認日",
@ -651,9 +651,9 @@
"stuff.temp.subTitle": "商品情報", "stuff.temp.subTitle": "商品情報",
"stuff.temp.subTitle2": "作図", "stuff.temp.subTitle2": "作図",
"stuff.detail.header.notExistObjectNo": "存在しないものです。", "stuff.detail.header.notExistObjectNo": "存在しないものです。",
"stuff.detail.header.successCopy": "商品番号がコピーされました。", "stuff.detail.header.successCopy": "物件番号がコピーされました。",
"stuff.detail.header.failCopy": "商品番号のコピーに失敗しました。", "stuff.detail.header.failCopy": "物件番号のコピーに失敗しました。",
"stuff.detail.header.objectNo": "品番", "stuff.detail.header.objectNo": "物件番号",
"stuff.detail.header.specificationConfirmDate": "仕様確認日", "stuff.detail.header.specificationConfirmDate": "仕様確認日",
"stuff.detail.header.lastEditDatetime": "更新日時", "stuff.detail.header.lastEditDatetime": "更新日時",
"stuff.detail.header.createDatetime": "登録日", "stuff.detail.header.createDatetime": "登録日",
@ -662,9 +662,9 @@
"stuff.detail.receiveUser": "担当者", "stuff.detail.receiveUser": "担当者",
"stuff.detail.objectStatusId": "物品区分/物件名", "stuff.detail.objectStatusId": "物品区分/物件名",
"stuff.detail.objectStatus0": "新築", "stuff.detail.objectStatus0": "新築",
"stuff.detail.objectStatus1": "基軸", "stuff.detail.objectStatus1": "既築",
"stuff.detail.objectNameOmit": "敬称", "stuff.detail.objectNameOmit": "敬称",
"stuff.detail.objectNameKana": "物名フリガナ", "stuff.detail.objectNameKana": "フリガナ",
"stuff.detail.saleStoreId": "一次販売店名/ID", "stuff.detail.saleStoreId": "一次販売店名/ID",
"stuff.detail.otherSaleStoreId": "二次販売店名/ID", "stuff.detail.otherSaleStoreId": "二次販売店名/ID",
"stuff.detail.zipNo": "郵便番号", "stuff.detail.zipNo": "郵便番号",
@ -676,9 +676,9 @@
"stuff.detail.standardWindSpeedId": "基準風速", "stuff.detail.standardWindSpeedId": "基準風速",
"stuff.detail.standardWindSpeedIdSpan": "m/s以下", "stuff.detail.standardWindSpeedIdSpan": "m/s以下",
"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": "契約条件",
@ -687,7 +687,7 @@
"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": "二次販売店を選択してください。", "stuff.detail.tempSave.message3": "二次販売店を選択してください。",
"stuff.detail.confirm.message1": "販売店情報を変更すると、設計依頼文書番号が削除されます。変更しますか?", "stuff.detail.confirm.message1": "販売店情報を変更すると、設計依頼文書番号が削除されます。変更しますか?",
@ -695,7 +695,7 @@
"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ダウンロード]は見積書図面シミュレーション結果をExcelファイルとして一度にダウンロードします。", "stuff.detail.planList.guide2": "2. [Excelダウンロード]は見積書図面シミュレーション結果をExcelファイルとして一度にダウンロードします。",
"stuff.detail.planList.guide3": "3. プラン情報をダブルクリックすると図面作成画面に移動します。", "stuff.detail.planList.guide3": "3. プラン情報をダブルクリックすると図面作成画面に移動します。",
"stuff.detail.btn.delete": "物の削除", "stuff.detail.btn.delete": "物の削除",
@ -705,7 +705,7 @@
"stuff.detail.save": "保存しました", "stuff.detail.save": "保存しました",
"stuff.detail.tempSave": "一時保存されました", "stuff.detail.tempSave": "一時保存されました",
"stuff.detail.noChgData": "変更内容はありません", "stuff.detail.noChgData": "変更内容はありません",
"stuff.detail.save.valierror1": "垂直説説は0より大きい値を入力してください", "stuff.detail.save.valierror1": "垂直積雪量は0より大きい値を入力してください",
"stuff.detail.save.valierror2": "設置高さ0より大きい値を入力してください", "stuff.detail.save.valierror2": "設置高さ0より大きい値を入力してください",
"stuff.detail.save.valierror3": "{0} 必須入力項目です。", "stuff.detail.save.valierror3": "{0} 必須入力項目です。",
"stuff.detail.save.valierror4": "二次販売店名は必須オプションです。", "stuff.detail.save.valierror4": "二次販売店名は必須オプションです。",
@ -739,7 +739,7 @@
"stuff.search.btn.register": "新規物件登録", "stuff.search.btn.register": "新規物件登録",
"stuff.search.btn.search": "照会", "stuff.search.btn.search": "照会",
"stuff.search.btn.reset": "初期化", "stuff.search.btn.reset": "初期化",
"stuff.search.schObjectNo": "品番", "stuff.search.schObjectNo": "物件番号",
"stuff.search.schSaleStoreName": "販売代理店名", "stuff.search.schSaleStoreName": "販売代理店名",
"stuff.search.schAddress": "商品アドレス", "stuff.search.schAddress": "商品アドレス",
"stuff.search.schObjectName": "商品名", "stuff.search.schObjectName": "商品名",
@ -784,7 +784,7 @@
"output": "出力", "output": "出力",
"slope": "傾斜", "slope": "傾斜",
"eaves.offset": "軒の幅", "eaves.offset": "軒の幅",
"gable.offset": "ケラバ出爆", "gable.offset": "ケラバ",
"offset": "出幅", "offset": "出幅",
"width": "幅", "width": "幅",
"size": "寸法", "size": "寸法",
@ -794,9 +794,9 @@
"gable": "ケラバ", "gable": "ケラバ",
"gable.left": "ケラバ左", "gable.left": "ケラバ左",
"gable.right": "ケラバ右", "gable.right": "ケラバ右",
"ridge": "龍丸", "ridge": "",
"oneside.flow.ridge": "片側の流れ", "oneside.flow.ridge": "片流れの棟側",
"yosemune": "ヨセムネ", "yosemune": "寄棟",
"valley": "谷", "valley": "谷",
"l.abandon.valley": "Lの捨て渓谷", "l.abandon.valley": "Lの捨て渓谷",
"mansard": "メンサード", "mansard": "メンサード",
@ -807,30 +807,30 @@
"wall.merge.flow.left": "壁取り(流れ左)", "wall.merge.flow.left": "壁取り(流れ左)",
"wall.merge.flow.right": "壁取り(流れ右)", "wall.merge.flow.right": "壁取り(流れ右)",
"no.setting": "設定なし", "no.setting": "設定なし",
"hajebichi": "ハゼビーチ", "hajebichi": "ハゼピッチ",
"straight.line": "直線", "straight.line": "直線",
"right.angle": "直角", "right.angle": "直角",
"double.pitch": "イ・グベ", "double.pitch": "異勾配",
"angle": "角度", "angle": "角度",
"diagonal": "対角線", "diagonal": "対角線",
"hipandgable": "八作屋根", "hipandgable": "入母屋造",
"hipandgable.width": "八作屋根の幅", "hipandgable.width": "入母屋造の幅",
"jerkinhead": "半", "jerkinhead": "半切妻",
"shed": "片側の流れ", "shed": "片側の流れ",
"apply": "適用", "apply": "適用",
"module": "モジュール", "module": "モジュール",
"legend": "凡例", "legend": "凡例",
"has.sleeve": "袖あり", "has.sleeve": "袖あり",
"has.not.sleeve": "袖なし", "has.not.sleeve": "袖なし",
"jerkinhead.width": "半折先幅", "jerkinhead.width": "半切妻幅",
"jerkinhead.slope": "半折先傾斜", "jerkinhead.slope": "半切妻傾斜",
"shed.width": "片流幅", "shed.width": "片流幅",
"windage": "漂流", "windage": "片流れ",
"windage.width": "漂流の出幅", "windage.width": "片流れの出幅",
"write": "作成", "write": "作成",
"main.storeId": "販売店ID", "main.storeId": "販売店ID",
"main.storeName": "販売店名", "main.storeName": "販売店名",
"main.objectNo": "品番", "main.objectNo": "物件番号",
"main.faq": "FAQ", "main.faq": "FAQ",
"main.content.objectList.noData1": "登録された商品情報はありません。", "main.content.objectList.noData1": "登録された商品情報はありません。",
"main.content.objectList.noData2": "下のボタンをクリックして商品情報を登録してください。", "main.content.objectList.noData2": "下のボタンをクリックして商品情報を登録してください。",
@ -839,7 +839,7 @@
"main.content.download1": "操作マニュアル", "main.content.download1": "操作マニュアル",
"main.content.download2": "屋根の説明書", "main.content.download2": "屋根の説明書",
"main.content.noBusiness": "Hanwha Japanにお問い合わせください", "main.content.noBusiness": "Hanwha Japanにお問い合わせください",
"main.content.alert.noFile": "資料準備中です", "main.content.alert.noFile": "資料準備中です",
"main.popup.login.popupTitle": "パスワード変更", "main.popup.login.popupTitle": "パスワード変更",
"main.popup.login.newPassword1": "新しいパスワードを入力", "main.popup.login.newPassword1": "新しいパスワードを入力",
"main.popup.login.newPassword2": "新しいパスワードの再入力", "main.popup.login.newPassword2": "新しいパスワードの再入力",
@ -860,7 +860,7 @@
"surface.shape.validate.size.3to4": "③長さは④より大きい値を入れてください。", "surface.shape.validate.size.3to4": "③長さは④より大きい値を入れてください。",
"surface.shape.validate.size.4to5": "④長さは⑤より大きい値を入れてください。", "surface.shape.validate.size.4to5": "④長さは⑤より大きい値を入れてください。",
"estimate.detail.header.title": "基本情報", "estimate.detail.header.title": "基本情報",
"estimate.detail.objectNo": "品番", "estimate.detail.objectNo": "物件番号",
"estimate.detail.docNo": "見積書番号", "estimate.detail.docNo": "見積書番号",
"estimate.detail.drawingEstimateCreateDate": "登録日", "estimate.detail.drawingEstimateCreateDate": "登録日",
"estimate.detail.lastEditDatetime": "変更日時", "estimate.detail.lastEditDatetime": "変更日時",
@ -877,7 +877,6 @@
"estimate.detail.roofCns": "屋根材・仕様施工", "estimate.detail.roofCns": "屋根材・仕様施工",
"estimate.detail.remarks": "備考", "estimate.detail.remarks": "備考",
"estimate.detail.fileFlg": "後日資料提出", "estimate.detail.fileFlg": "後日資料提出",
"estimate.detail.dragFileGuide": "(※北面設置の場合、ファイル添付が必須です.)",
"estimate.detail.header.fileList1": "ファイル添付", "estimate.detail.header.fileList1": "ファイル添付",
"estimate.detail.fileList.btn": "ファイル選択", "estimate.detail.fileList.btn": "ファイル選択",
"estimate.detail.fileList.extCheck": "画像ファイルのみ添付可能です。", "estimate.detail.fileList.extCheck": "画像ファイルのみ添付可能です。",
@ -905,17 +904,17 @@
"estimate.detail.showPrice.delItem": "製品の削除", "estimate.detail.showPrice.delItem": "製品の削除",
"estimate.detail.itemTableHeader.dispOrder": "No.", "estimate.detail.itemTableHeader.dispOrder": "No.",
"estimate.detail.itemTableHeader.itemId": "品番", "estimate.detail.itemTableHeader.itemId": "品番",
"estimate.detail.itemTableHeader.itemNo": "兄弟", "estimate.detail.itemTableHeader.itemNo": "型名",
"estimate.detail.itemTableHeader.amount": "数量", "estimate.detail.itemTableHeader.amount": "数量",
"estimate.detail.itemTableHeader.unit": "単位", "estimate.detail.itemTableHeader.unit": "単位",
"estimate.detail.itemTableHeader.salePrice": "単価", "estimate.detail.itemTableHeader.salePrice": "単価",
"estimate.detail.itemTableHeader.saleTotPrice": "金額(税別", "estimate.detail.itemTableHeader.saleTotPrice": "金額(税別",
"estimate.detail.docPopup.title": "ドキュメントダウンロードオプションの設定", "estimate.detail.docPopup.title": "文章ダウンロードオプションの設定",
"estimate.detail.docPopup.explane": "ダウンロードする文書オプションを選択し、[文書のダウンロード]ボタンをクリックします。", "estimate.detail.docPopup.explane": "ダウンロードする文書オプションを選択し、[文書のダウンロード]ボタンをクリックします。",
"estimate.detail.docPopup.schUnitPriceFlg": "ダウンロードファイル", "estimate.detail.docPopup.schUnitPriceFlg": "ダウンロードファイル",
"estimate.detail.docPopup.schUnitPriceFlg.excelFlg0": "見積もりExcel", "estimate.detail.docPopup.schUnitPriceFlg.excelFlg0": "仕切用Excel",
"estimate.detail.docPopup.schUnitPriceFlg.excelFlg1": "定価用Excel", "estimate.detail.docPopup.schUnitPriceFlg.excelFlg1": "定価用Excel",
"estimate.detail.docPopup.schUnitPriceFlg.pdfFlg0": "見積もりPDF", "estimate.detail.docPopup.schUnitPriceFlg.pdfFlg0": "仕切用PDF",
"estimate.detail.docPopup.schUnitPriceFlg.pdfFlg1": "定価用PDF", "estimate.detail.docPopup.schUnitPriceFlg.pdfFlg1": "定価用PDF",
"estimate.detail.docPopup.schDisplayFlg": "見積提出書の表示名", "estimate.detail.docPopup.schDisplayFlg": "見積提出書の表示名",
"estimate.detail.docPopup.schDisplayFlg.schDisplayFlg0": "販売店名", "estimate.detail.docPopup.schDisplayFlg.schDisplayFlg0": "販売店名",
@ -928,13 +927,13 @@
"estimate.detail.docPopup.schDrawingFlg.schDrawingFlg0": "含まない", "estimate.detail.docPopup.schDrawingFlg.schDrawingFlg0": "含まない",
"estimate.detail.docPopup.close": "閉じる", "estimate.detail.docPopup.close": "閉じる",
"estimate.detail.docPopup.docDownload": "文書のダウンロード", "estimate.detail.docPopup.docDownload": "文書のダウンロード",
"estimate.detail.estimateCopyPopup.title": "見積もり", "estimate.detail.estimateCopyPopup.title": "見積コピー",
"estimate.detail.estimateCopyPopup.explane": "見積書をコピーする販売店を設定します。見積書は定価でコピーされます。", "estimate.detail.estimateCopyPopup.explane": "見積書をコピーする販売店を設定します。見積書は定価でコピーされます。",
"estimate.detail.estimateCopyPopup.label.saleStoreId": "一次販売店名/ID", "estimate.detail.estimateCopyPopup.label.saleStoreId": "一次販売店名/ID",
"estimate.detail.estimateCopyPopup.label.otherSaleStoreId": "二次販売店名/ID", "estimate.detail.estimateCopyPopup.label.otherSaleStoreId": "二次販売店名/ID",
"estimate.detail.estimateCopyPopup.label.receiveUser": "担当者", "estimate.detail.estimateCopyPopup.label.receiveUser": "担当者",
"estimate.detail.estimateCopyPopup.close": "閉じる", "estimate.detail.estimateCopyPopup.close": "閉じる",
"estimate.detail.estimateCopyPopup.copyBtn": "見積もり", "estimate.detail.estimateCopyPopup.copyBtn": "見積コピー",
"estimate.detail.estimateCopyPopup.copy.alertMessage": "見積書がコピーされました。コピーした商品情報に移動します。", "estimate.detail.estimateCopyPopup.copy.alertMessage": "見積書がコピーされました。コピーした商品情報に移動します。",
"estimate.detail.productFeaturesPopup.title": "製品特異事項", "estimate.detail.productFeaturesPopup.title": "製品特異事項",
"estimate.detail.productFeaturesPopup.close": "閉じる", "estimate.detail.productFeaturesPopup.close": "閉じる",
@ -943,7 +942,6 @@
"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.requiredNorthArrangementFileUpload": "北面にモジュールを配置した場合、北面配置許可書を必ず添付する必要があります.",
"estimate.detail.save.requiredItem": "製品は1つ以上登録する必要があります。", "estimate.detail.save.requiredItem": "製品は1つ以上登録する必要があります。",
"estimate.detail.save.requiredCharger": "担当者は必須です。", "estimate.detail.save.requiredCharger": "担当者は必須です。",
"estimate.detail.save.requiredObjectName": "案件名は必須です。", "estimate.detail.save.requiredObjectName": "案件名は必須です。",
@ -953,14 +951,14 @@
"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": "添付ファイルを完全に削除するには、[保存]ボタンをクリックしてください。",
"estimate.detail.alert.selectDelItem": "削除する商品を選択してください。", "estimate.detail.alert.selectDelItem": "削除する商品を選択してください。",
"estimate.menu.move.valid1": "回路を分割していないため、見積もりを呼び出すことはできません。", "estimate.menu.move.valid1": "回路を分割していないため、見積もりを呼び出すことはできません。",
"simulator.title.sub1": "品番", "simulator.title.sub1": "物件番号",
"simulator.title.sub2": "作成日", "simulator.title.sub2": "作成日",
"simulator.title.sub3": "システム容量", "simulator.title.sub3": "システム容量",
"simulator.title.sub4": "年間予測発電量", "simulator.title.sub4": "年間予測発電量",

View File

@ -50,8 +50,8 @@
"modal.movement.flow.line.updown.up": "자릿수를 올리다", "modal.movement.flow.line.updown.up": "자릿수를 올리다",
"modal.movement.flow.line.updown.down": "자릿수를 낮추다", "modal.movement.flow.line.updown.down": "자릿수를 낮추다",
"modal.movement.flow.line.info": "동선을 선택하고 이동 폭을 지정하십시오", "modal.movement.flow.line.info": "동선을 선택하고 이동 폭을 지정하십시오",
"modal.movement.flow.line.bottom.left": "높이 변경: 아래, 왼쪽", "modal.movement.flow.line.bottom.left": "높이변경 : 아래, 왼쪽",
"modal.movement.flow.line.top.right": "높이 변경: 위, 오른쪽", "modal.movement.flow.line.top.right": "높이변경 : 위, 오른쪽",
"plan.menu.roof.cover.outline.edit.offset": "외벽선 편집 및 오프셋", "plan.menu.roof.cover.outline.edit.offset": "외벽선 편집 및 오프셋",
"plan.menu.roof.cover.roof.surface.alloc": "지붕면 할당", "plan.menu.roof.cover.roof.surface.alloc": "지붕면 할당",
"plan.menu.roof.cover.roof.shape.edit": "지붕형상 편집", "plan.menu.roof.cover.roof.shape.edit": "지붕형상 편집",
@ -84,13 +84,13 @@
"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": "각도를 직접 입력",
"modal.module.basic.setting.module.roof.material": "지붕재", "modal.module.basic.setting.module.roof.material": "지붕재",
"modal.module.basic.setting.module.trestle.maker": "가대메이", "modal.module.basic.setting.module.trestle.maker": "가대메이",
"modal.module.basic.setting.module.rafter.margin": "서까래 간격", "modal.module.basic.setting.module.rafter.margin": "서까래 간격",
"modal.module.basic.setting.module.construction.method": "공법", "modal.module.basic.setting.module.construction.method": "공법",
"modal.module.basic.setting.module.under.roof": "지붕밑바탕", "modal.module.basic.setting.module.under.roof": "지붕밑바탕",
@ -634,7 +634,7 @@
"stuff.gridHeader.address": "물건주소", "stuff.gridHeader.address": "물건주소",
"stuff.gridHeader.dispCompanyName": "견적처", "stuff.gridHeader.dispCompanyName": "견적처",
"stuff.gridHeader.receiveUser": "담당자", "stuff.gridHeader.receiveUser": "담당자",
"stuff.gridHeader.specificationConfirmDate": "사양확일", "stuff.gridHeader.specificationConfirmDate": "사양확일",
"stuff.gridHeader.createDatetime": "등록일", "stuff.gridHeader.createDatetime": "등록일",
"stuff.gridData.tempObjectNo": "임시저장물건", "stuff.gridData.tempObjectNo": "임시저장물건",
"stuff.message.periodError": "최대1년 조회 가능합니다.", "stuff.message.periodError": "최대1년 조회 가능합니다.",
@ -877,7 +877,6 @@
"estimate.detail.roofCns": "지붕재・사양시공", "estimate.detail.roofCns": "지붕재・사양시공",
"estimate.detail.remarks": "비고", "estimate.detail.remarks": "비고",
"estimate.detail.fileFlg": "후일자료제출", "estimate.detail.fileFlg": "후일자료제출",
"estimate.detail.dragFileGuide": "(※ 북면설치인 경우, 파일 첨부가 필수입니다.)",
"estimate.detail.header.fileList1": "파일첨부", "estimate.detail.header.fileList1": "파일첨부",
"estimate.detail.fileList.btn": "파일선택", "estimate.detail.fileList.btn": "파일선택",
"estimate.detail.fileList.extCheck": "이미지 파일만 첨부 가능합니다.", "estimate.detail.fileList.extCheck": "이미지 파일만 첨부 가능합니다.",
@ -943,7 +942,6 @@
"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.requiredNorthArrangementFileUpload": "북면에 모듈을 배치한 경우, 북면배치허가서를 반드시 첨부해야 합니다.",
"estimate.detail.save.requiredItem": "제품은 1개이상 등록해야 됩니다.", "estimate.detail.save.requiredItem": "제품은 1개이상 등록해야 됩니다.",
"estimate.detail.save.requiredCharger": "담당자는 필수값 입니다.", "estimate.detail.save.requiredCharger": "담당자는 필수값 입니다.",
"estimate.detail.save.requiredObjectName": "안건명은 필수값 입니다.", "estimate.detail.save.requiredObjectName": "안건명은 필수값 입니다.",

View File

@ -40,7 +40,10 @@ export const moduleStatisticsState = atom({
{ name: `발전량(kW)`, prop: 'amount' }, { name: `발전량(kW)`, prop: 'amount' },
], ],
rows: [], rows: [],
footer: ['합계', '0'], footer: [
{ name: '-', prop: 'name' },
{ name: 0, prop: 'amount' },
],
}, },
dangerouslyAllowMutability: true, dangerouslyAllowMutability: true,
}) })

View File

@ -1031,8 +1031,3 @@ export function calculateVisibleModuleHeight(sourceWidth, sourceHeight, angle, d
height: Number(visibleHeight.toFixed(1)), // 소수점 두 자리로 고정 height: Number(visibleHeight.toFixed(1)), // 소수점 두 자리로 고정
} }
} }
export function getTrestleLength(length, degree) {
const radians = (degree * Math.PI) / 180
return length * Math.cos(radians)
}