Merge branch 'dev' into feature/dev-yj
This commit is contained in:
commit
4b8287579c
3
.gitmessage.txt
Normal file
3
.gitmessage.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[일감번호] : [제목]
|
||||||
|
|
||||||
|
[작업내용] :
|
||||||
4
public/static/images/sub/oneonone_profile_icon.svg
Normal file
4
public/static/images/sub/oneonone_profile_icon.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="12" cy="12" r="8.25" stroke="#101010" stroke-width="1.5"/>
|
||||||
|
<path d="M7.94995 16.5C10.0485 14.302 13.9289 14.1986 16.05 16.5M14.2455 9.75C14.2455 10.9926 13.2367 12 11.9923 12C10.7479 12 9.73912 10.9926 9.73912 9.75C9.73912 8.50736 10.7479 7.5 11.9923 7.5C13.2367 7.5 14.2455 8.50736 14.2455 9.75Z" stroke="#101010" stroke-width="1.5" stroke-linecap="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 474 B |
@ -125,6 +125,11 @@ export const TRESTLE_MATERIAL = {
|
|||||||
BRACKET: 'bracket',
|
BRACKET: 'bracket',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const MODULE_SETUP_TYPE = {
|
||||||
|
LAYOUT: 'layout',
|
||||||
|
AUTO: 'auto',
|
||||||
|
}
|
||||||
|
|
||||||
export const SAVE_KEY = [
|
export const SAVE_KEY = [
|
||||||
'selectable',
|
'selectable',
|
||||||
'name',
|
'name',
|
||||||
|
|||||||
@ -26,6 +26,7 @@ export default function QSelectBox({
|
|||||||
targetKey = '',
|
targetKey = '',
|
||||||
showKey = '',
|
showKey = '',
|
||||||
params = {},
|
params = {},
|
||||||
|
tagTitle = '',
|
||||||
}) {
|
}) {
|
||||||
const { getMessage } = useMessage()
|
const { getMessage } = useMessage()
|
||||||
|
|
||||||
@ -82,6 +83,7 @@ export default function QSelectBox({
|
|||||||
className={`sort-select ${openSelect ? 'active' : ''} ${disabled ? 'disabled' : ''}`}
|
className={`sort-select ${openSelect ? 'active' : ''} ${disabled ? 'disabled' : ''}`}
|
||||||
ref={ref}
|
ref={ref}
|
||||||
onClick={disabled ? () => {} : () => setOpenSelect(!openSelect)}
|
onClick={disabled ? () => {} : () => setOpenSelect(!openSelect)}
|
||||||
|
title={tagTitle}
|
||||||
>
|
>
|
||||||
<p>{selected}</p>
|
<p>{selected}</p>
|
||||||
<ul className="select-item-wrap">
|
<ul className="select-item-wrap">
|
||||||
|
|||||||
@ -564,6 +564,7 @@ export default function Estimate({}) {
|
|||||||
updateList.push({
|
updateList.push({
|
||||||
...item,
|
...item,
|
||||||
openFlg: data.data2[i].unitPrice === '0.0' ? '1' : '0',
|
openFlg: data.data2[i].unitPrice === '0.0' ? '1' : '0',
|
||||||
|
unitOpenFlg: (showPriceCd === 'QSP_PRICE' && item.openFlg === '1') ? '1' : '0',
|
||||||
salePrice: data.data2[i].unitPrice === null ? '0' : data.data2[i].unitPrice,
|
salePrice: data.data2[i].unitPrice === null ? '0' : data.data2[i].unitPrice,
|
||||||
saleTotPrice: (item.amount * data.data2[i].unitPrice).toString(),
|
saleTotPrice: (item.amount * data.data2[i].unitPrice).toString(),
|
||||||
})
|
})
|
||||||
|
|||||||
@ -548,13 +548,26 @@ export default function CanvasMenu(props) {
|
|||||||
{
|
{
|
||||||
<div className={`vertical-horizontal ${verticalHorizontalMode ? 'on' : ''}`}>
|
<div className={`vertical-horizontal ${verticalHorizontalMode ? 'on' : ''}`}>
|
||||||
<span>{getMessage('plan.mode.vertical.horizontal')}</span>
|
<span>{getMessage('plan.mode.vertical.horizontal')}</span>
|
||||||
<button onClick={() => setVerticalHorizontalMode(!verticalHorizontalMode)}>{verticalHorizontalMode ? 'ON' : 'OFF'}</button>
|
<button
|
||||||
|
title={`${getMessage('plan.mode.vertical.horizontal')} ${verticalHorizontalMode ? 'ON' : 'OFF'}`}
|
||||||
|
onClick={() => setVerticalHorizontalMode(!verticalHorizontalMode)}
|
||||||
|
>
|
||||||
|
{verticalHorizontalMode ? 'ON' : 'OFF'}
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
<div className="btn-from">
|
<div className="btn-from">
|
||||||
<button className={`btn01 ${commonUtils.text ? 'active' : ''}`} onClick={() => commonFunctions('text')}></button>
|
<button className={`btn01 ${commonUtils.text ? 'active' : ''}`} onClick={() => commonFunctions('text')} title="文字作成"></button>
|
||||||
<button className={`btn02 ${commonUtils.dimension ? 'active' : ''} `} onClick={() => commonFunctions('dimension')}></button>
|
<button
|
||||||
<button className={`btn03 ${commonUtils.distance ? 'active' : ''} `} onClick={() => commonFunctions('distance')}></button>
|
className={`btn02 ${commonUtils.dimension ? 'active' : ''} `}
|
||||||
|
onClick={() => commonFunctions('dimension')}
|
||||||
|
title="寸法作成"
|
||||||
|
></button>
|
||||||
|
<button
|
||||||
|
className={`btn03 ${commonUtils.distance ? 'active' : ''} `}
|
||||||
|
onClick={() => commonFunctions('distance')}
|
||||||
|
title="定規"
|
||||||
|
></button>
|
||||||
</div>
|
</div>
|
||||||
{isObjectNotEmpty(selectedRoofMaterial) && addedRoofs.length > 0 && (
|
{isObjectNotEmpty(selectedRoofMaterial) && addedRoofs.length > 0 && (
|
||||||
<div className="select-box">
|
<div className="select-box">
|
||||||
@ -580,6 +593,7 @@ export default function CanvasMenu(props) {
|
|||||||
sourceKey={'index'}
|
sourceKey={'index'}
|
||||||
targetKey={'index'}
|
targetKey={'index'}
|
||||||
disabled={+basicSetting.roofSizeSet === 3}
|
disabled={+basicSetting.roofSizeSet === 3}
|
||||||
|
tagTitle={'屋根材変更'}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
@ -588,9 +602,10 @@ export default function CanvasMenu(props) {
|
|||||||
<button
|
<button
|
||||||
className={`btn10 ${floorPlanState.refFileModalOpen && 'active'}`}
|
className={`btn10 ${floorPlanState.refFileModalOpen && 'active'}`}
|
||||||
onClick={() => setFloorPlanState({ ...floorPlanState, refFileModalOpen: true })}
|
onClick={() => setFloorPlanState({ ...floorPlanState, refFileModalOpen: true })}
|
||||||
|
title="読込"
|
||||||
></button>
|
></button>
|
||||||
{/*<button className="btn04" onClick={() => setShowCanvasSettingModal(true)}></button>*/}
|
{/*<button className="btn04" onClick={() => setShowCanvasSettingModal(true)}></button>*/}
|
||||||
<button className="btn04" onClick={handlePopup}></button>
|
<button className="btn04" onClick={handlePopup} title="設定"></button>
|
||||||
</div>
|
</div>
|
||||||
<div className="size-control">
|
<div className="size-control">
|
||||||
<button
|
<button
|
||||||
@ -599,7 +614,9 @@ export default function CanvasMenu(props) {
|
|||||||
handleZoom(false)
|
handleZoom(false)
|
||||||
}}
|
}}
|
||||||
></button>
|
></button>
|
||||||
<span onClick={handleZoomClear}>{canvasZoom}%</span>
|
<span onClick={handleZoomClear} title="拡大・縮小">
|
||||||
|
{canvasZoom}%
|
||||||
|
</span>
|
||||||
<button
|
<button
|
||||||
className="control-btn plus"
|
className="control-btn plus"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
@ -608,8 +625,8 @@ export default function CanvasMenu(props) {
|
|||||||
></button>
|
></button>
|
||||||
</div>
|
</div>
|
||||||
<div className="btn-from">
|
<div className="btn-from">
|
||||||
<button className="btn08" onClick={handleSaveCanvas}></button>
|
<button className="btn08" onClick={handleSaveCanvas} title="保存"></button>
|
||||||
<button className="btn09" onClick={handleLeaveCanvas}></button>
|
<button className="btn09" onClick={handleLeaveCanvas} title="物件検索画面へ移動"></button>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { POLYGON_TYPE } from '@/common/common'
|
import { POLYGON_TYPE, MODULE_SETUP_TYPE } from '@/common/common'
|
||||||
import WithDraggable from '@/components/common/draggable/WithDraggable'
|
import WithDraggable from '@/components/common/draggable/WithDraggable'
|
||||||
import { Orientation } from '@/components/floor-plan/modal/basic/step/Orientation'
|
import { Orientation } from '@/components/floor-plan/modal/basic/step/Orientation'
|
||||||
import PitchPlacement from '@/components/floor-plan/modal/basic/step/pitch/PitchPlacement'
|
import PitchPlacement from '@/components/floor-plan/modal/basic/step/pitch/PitchPlacement'
|
||||||
@ -331,10 +331,13 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) {
|
|||||||
<button className={`btn-frame modal mr5 ${isManualModuleLayoutSetup ? 'act' : ''}`} onClick={handleManualModuleLayoutSetup}>
|
<button className={`btn-frame modal mr5 ${isManualModuleLayoutSetup ? 'act' : ''}`} onClick={handleManualModuleLayoutSetup}>
|
||||||
{getMessage('modal.module.basic.setting.row.batch')}
|
{getMessage('modal.module.basic.setting.row.batch')}
|
||||||
</button>
|
</button>
|
||||||
|
<button className="btn-frame modal mr5" onClick={() => autoModuleSetup(MODULE_SETUP_TYPE.LAYOUT, layoutSetup)}>
|
||||||
|
{getMessage('modal.module.basic.setting.auto.row.batch')}
|
||||||
|
</button>
|
||||||
<button className={`btn-frame modal mr5 ${isManualModuleSetup ? 'act' : ''}`} onClick={handleManualModuleSetup}>
|
<button className={`btn-frame modal mr5 ${isManualModuleSetup ? 'act' : ''}`} onClick={handleManualModuleSetup}>
|
||||||
{getMessage('modal.module.basic.setting.passivity.placement')}
|
{getMessage('modal.module.basic.setting.passivity.placement')}
|
||||||
</button>
|
</button>
|
||||||
<button className="btn-frame modal act" onClick={() => autoModuleSetup()}>
|
<button className="btn-frame modal act mr5" onClick={() => autoModuleSetup(MODULE_SETUP_TYPE.AUTO)}>
|
||||||
{getMessage('modal.module.basic.setting.auto.placement')}
|
{getMessage('modal.module.basic.setting.auto.placement')}
|
||||||
</button>
|
</button>
|
||||||
</>
|
</>
|
||||||
|
|||||||
@ -37,7 +37,7 @@ const Placement = forwardRef((props, refs) => {
|
|||||||
const resetModuleSetupOption = useResetRecoilState(moduleSetupOptionState)
|
const resetModuleSetupOption = useResetRecoilState(moduleSetupOptionState)
|
||||||
|
|
||||||
const [colspan, setColspan] = useState(1)
|
const [colspan, setColspan] = useState(1)
|
||||||
const [moduleRowColArray, setModuleRowColArray] = useRecoilState(moduleRowColArrayState)
|
const moduleRowColArray = useRecoilValue(moduleRowColArrayState)
|
||||||
|
|
||||||
//모듈 배치면 생성
|
//모듈 배치면 생성
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -64,9 +64,9 @@ const Placement = forwardRef((props, refs) => {
|
|||||||
}
|
}
|
||||||
}, [])
|
}, [])
|
||||||
|
|
||||||
useEffect(() => {
|
// useEffect(() => {
|
||||||
console.log('moduleRowColArray', moduleRowColArray)
|
// console.log('moduleRowColArray', moduleRowColArray)
|
||||||
}, [moduleRowColArray])
|
// }, [moduleRowColArray])
|
||||||
|
|
||||||
//최초 지입시 체크
|
//최초 지입시 체크
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -110,8 +110,8 @@ const Placement = forwardRef((props, refs) => {
|
|||||||
{ type: 'check', name: '', prop: 'check', width: 70 },
|
{ type: 'check', name: '', prop: 'check', width: 70 },
|
||||||
{ type: 'color-box', name: getMessage('module'), prop: 'module' },
|
{ type: 'color-box', name: getMessage('module'), prop: 'module' },
|
||||||
{ type: 'text', name: getMessage('modal.module.basic.setting.module.placement.mix.asg.yn'), prop: 'mixAsgYn', width: 50 },
|
{ type: 'text', name: getMessage('modal.module.basic.setting.module.placement.mix.asg.yn'), prop: 'mixAsgYn', width: 50 },
|
||||||
{ type: 'text', name: `単数`, prop: 'rows', width: 60 },
|
{ type: 'text', name: `段数`, prop: 'rows', width: 60 },
|
||||||
{ type: 'text', name: `熱水`, prop: 'cols', width: 60 },
|
{ type: 'text', name: `列数`, prop: 'cols', width: 60 },
|
||||||
],
|
],
|
||||||
rows: [],
|
rows: [],
|
||||||
}
|
}
|
||||||
@ -330,19 +330,21 @@ const Placement = forwardRef((props, refs) => {
|
|||||||
<th rowSpan={2} style={{ width: '22%' }}></th>
|
<th rowSpan={2} style={{ width: '22%' }}></th>
|
||||||
{selectedModules &&
|
{selectedModules &&
|
||||||
selectedModules.itemList.map((item) => (
|
selectedModules.itemList.map((item) => (
|
||||||
<th colSpan={colspan}>
|
// <th colSpan={colspan}>
|
||||||
|
<th>
|
||||||
<div className="color-wrap">
|
<div className="color-wrap">
|
||||||
<span className="color-box" style={{ backgroundColor: item.color }}></span>
|
<span className="color-box" style={{ backgroundColor: item.color }}></span>
|
||||||
<span className="name">{item.itemNm}</span>
|
<span className="name">{item.itemNm}</span>
|
||||||
</div>
|
</div>
|
||||||
</th>
|
</th>
|
||||||
))}
|
))}
|
||||||
|
{colspan > 1 && <th rowSpan={2}>{getMessage('modal.module.basic.setting.module.placement.max.rows.multiple')}</th>}
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
{selectedModules.itemList.map((item) => (
|
{selectedModules.itemList.map((item) => (
|
||||||
<>
|
<>
|
||||||
<th>{getMessage('modal.module.basic.setting.module.placement.max.row')}</th>
|
<th>{getMessage('modal.module.basic.setting.module.placement.max.row')}</th>
|
||||||
{colspan > 1 && <th>{getMessage('modal.module.basic.setting.module.placement.max.rows.multiple')}</th>}
|
{/* {colspan > 1 && <th>{getMessage('modal.module.basic.setting.module.placement.max.rows.multiple')}</th>} */}
|
||||||
</>
|
</>
|
||||||
))}
|
))}
|
||||||
</tr>
|
</tr>
|
||||||
@ -356,10 +358,11 @@ const Placement = forwardRef((props, refs) => {
|
|||||||
<span className="name">{item.addRoof?.roofMatlNmJp}</span>
|
<span className="name">{item.addRoof?.roofMatlNmJp}</span>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
{moduleRowColArray[index]?.map((item) => (
|
{moduleRowColArray[index]?.map((item, index2) => (
|
||||||
<>
|
<>
|
||||||
<td className="al-c">{item.moduleMaxRows}</td>
|
<td className="al-c">{item.moduleMaxRows}</td>
|
||||||
{colspan > 1 && <td className="al-c">{item.mixModuleMaxRows}</td>}
|
{/* {colspan > 1 && <td className="al-c">{item.mixModuleMaxRows}</td>} */}
|
||||||
|
{colspan > 1 && index2 === moduleRowColArray[index].length - 1 && <td className="al-c">{item.maxRow}</td>}
|
||||||
</>
|
</>
|
||||||
))}
|
))}
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@ -92,7 +92,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (raftBaseList.length > 0) {
|
if (raftBaseList.length > 0) {
|
||||||
setSelectedRaftBase(raftBaseList.find((raft) => raft.clCode === trestleState?.raftBaseCd) ?? null)
|
setSelectedRaftBase(raftBaseList.find((raft) => raft.clCode === selectedRoof?.raft) ?? null)
|
||||||
} else {
|
} else {
|
||||||
setSelectedRaftBase(null)
|
setSelectedRaftBase(null)
|
||||||
}
|
}
|
||||||
@ -125,6 +125,12 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (constructionList.length > 0) {
|
if (constructionList.length > 0) {
|
||||||
setSelectedConstruction(constructionList.find((construction) => construction.constTp === trestleState?.construction?.constTp) ?? null)
|
setSelectedConstruction(constructionList.find((construction) => construction.constTp === trestleState?.construction?.constTp) ?? null)
|
||||||
|
if (constructionList.filter((construction) => construction.constPossYn === 'Y').length === 0) {
|
||||||
|
Swal.fire({
|
||||||
|
title: getMessage('modal.module.basic.settting.module.error4', [selectedRoof?.nameJp]), // 시공법법을 선택해주세요.
|
||||||
|
icon: 'warning',
|
||||||
|
})
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
setSelectedConstruction(null)
|
setSelectedConstruction(null)
|
||||||
}
|
}
|
||||||
@ -143,6 +149,19 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
return 'no-click'
|
return 'no-click'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onChangeLength = (e) => {
|
||||||
|
setLengthBase(e)
|
||||||
|
dispatch({
|
||||||
|
type: 'SET_LENGTH',
|
||||||
|
roof: {
|
||||||
|
length: e,
|
||||||
|
moduleTpCd: selectedModules.itemTp ?? '',
|
||||||
|
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
||||||
|
raft: selectedRaftBase?.clCode,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const onChangeRaftBase = (e) => {
|
const onChangeRaftBase = (e) => {
|
||||||
setSelectedRaftBase(e)
|
setSelectedRaftBase(e)
|
||||||
dispatch({
|
dispatch({
|
||||||
@ -150,7 +169,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
roof: {
|
roof: {
|
||||||
moduleTpCd: selectedModules.itemTp ?? '',
|
moduleTpCd: selectedModules.itemTp ?? '',
|
||||||
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
||||||
raftBaseCd: e.clCode,
|
raft: e.clCode,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -162,7 +181,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
roof: {
|
roof: {
|
||||||
moduleTpCd: selectedModules.itemTp ?? '',
|
moduleTpCd: selectedModules.itemTp ?? '',
|
||||||
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
||||||
raftBaseCd: selectedRaftBase?.clCode,
|
raft: selectedRaftBase?.clCode,
|
||||||
trestleMkrCd: e.trestleMkrCd,
|
trestleMkrCd: e.trestleMkrCd,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@ -175,7 +194,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
roof: {
|
roof: {
|
||||||
moduleTpCd: selectedModules.itemTp ?? '',
|
moduleTpCd: selectedModules.itemTp ?? '',
|
||||||
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
||||||
raftBaseCd: selectedRaftBase?.clCode,
|
raft: selectedRaftBase?.clCode,
|
||||||
trestleMkrCd: selectedTrestle.trestleMkrCd,
|
trestleMkrCd: selectedTrestle.trestleMkrCd,
|
||||||
constMthdCd: e.constMthdCd,
|
constMthdCd: e.constMthdCd,
|
||||||
},
|
},
|
||||||
@ -189,7 +208,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
roof: {
|
roof: {
|
||||||
moduleTpCd: selectedModules.itemTp ?? '',
|
moduleTpCd: selectedModules.itemTp ?? '',
|
||||||
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
||||||
raftBaseCd: selectedRaftBase?.clCode,
|
raft: selectedRaftBase?.clCode,
|
||||||
trestleMkrCd: selectedTrestle.trestleMkrCd,
|
trestleMkrCd: selectedTrestle.trestleMkrCd,
|
||||||
constMthdCd: selectedConstMthd.constMthdCd,
|
constMthdCd: selectedConstMthd.constMthdCd,
|
||||||
roofBaseCd: e.roofBaseCd,
|
roofBaseCd: e.roofBaseCd,
|
||||||
@ -210,7 +229,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
roof: {
|
roof: {
|
||||||
moduleTpCd: selectedModules.itemTp ?? '',
|
moduleTpCd: selectedModules.itemTp ?? '',
|
||||||
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
|
||||||
raftBaseCd: selectedRaftBase?.clCode,
|
raft: selectedRaftBase?.clCode,
|
||||||
trestleMkrCd: selectedTrestle.trestleMkrCd,
|
trestleMkrCd: selectedTrestle.trestleMkrCd,
|
||||||
constMthdCd: selectedConstMthd.constMthdCd,
|
constMthdCd: selectedConstMthd.constMthdCd,
|
||||||
roofBaseCd: selectedRoofBase.roofBaseCd,
|
roofBaseCd: selectedRoofBase.roofBaseCd,
|
||||||
@ -224,7 +243,8 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
snowGdPossYn: constructionList[index].snowGdPossYn,
|
snowGdPossYn: constructionList[index].snowGdPossYn,
|
||||||
cvrYn: constructionList[index].cvrYn,
|
cvrYn: constructionList[index].cvrYn,
|
||||||
mixMatlNo: selectedModules.mixMatlNo,
|
mixMatlNo: selectedModules.mixMatlNo,
|
||||||
workingWidth: selectedRoof?.length?.toString() ?? '',
|
// workingWidth: selectedRoof?.length?.toString() ?? '',
|
||||||
|
workingWidth: lengthBase,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -241,11 +261,12 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
return {
|
return {
|
||||||
...selectedRoof,
|
...selectedRoof,
|
||||||
hajebichi,
|
hajebichi,
|
||||||
lenBase: lengthBase,
|
length: lengthBase,
|
||||||
eavesMargin,
|
eavesMargin,
|
||||||
ridgeMargin,
|
ridgeMargin,
|
||||||
kerabaMargin,
|
kerabaMargin,
|
||||||
roofIndex: selectedRoof.index,
|
roofIndex: selectedRoof.index,
|
||||||
|
raft: selectedRaftBase?.clCode,
|
||||||
trestle: {
|
trestle: {
|
||||||
hajebichi: hajebichi,
|
hajebichi: hajebichi,
|
||||||
length: lengthBase,
|
length: lengthBase,
|
||||||
@ -282,6 +303,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
ridgeMargin,
|
ridgeMargin,
|
||||||
kerabaMargin,
|
kerabaMargin,
|
||||||
roofIndex: roof.index,
|
roofIndex: roof.index,
|
||||||
|
raft: selectedRaftBase?.clCode,
|
||||||
trestle: {
|
trestle: {
|
||||||
length: lengthBase,
|
length: lengthBase,
|
||||||
hajebichi: hajebichi,
|
hajebichi: hajebichi,
|
||||||
@ -328,7 +350,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
}
|
}
|
||||||
if (!roof.trestle?.roofBaseCd) {
|
if (!roof.trestle?.roofBaseCd) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: getMessage('modal.module.basic.settting.module.error3', [roof.nameJp]), // 지붕밑바탕탕을 선택해주세요.
|
title: getMessage('modal.module.basic.settting.module.error3', [roof.nameJp]), // 지붕밑바탕을 선택해주세요.
|
||||||
icon: 'warning',
|
icon: 'warning',
|
||||||
})
|
})
|
||||||
result = false
|
result = false
|
||||||
@ -336,7 +358,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
}
|
}
|
||||||
if (!roof.construction?.constTp) {
|
if (!roof.construction?.constTp) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: getMessage('modal.module.basic.settting.module.error4', [roof.nameJp]), // 시공법법을 선택해주세요.
|
title: getMessage('modal.module.basic.settting.module.error12', [roof.nameJp]), // 시공법법을 선택해주세요.
|
||||||
icon: 'warning',
|
icon: 'warning',
|
||||||
})
|
})
|
||||||
result = false
|
result = false
|
||||||
@ -354,7 +376,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (['C', 'R'].includes(roof.raftAuth)) {
|
if (['C', 'R'].includes(roof.raftAuth)) {
|
||||||
if (!roof?.raftBaseCd) {
|
if (!roof?.raft) {
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
title: getMessage('modal.module.basic.settting.module.error6', [roof.nameJp]), // 서까래 간격을 입력해주세요.
|
title: getMessage('modal.module.basic.settting.module.error6', [roof.nameJp]), // 서까래 간격을 입력해주세요.
|
||||||
icon: 'warning',
|
icon: 'warning',
|
||||||
@ -457,7 +479,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
addRoof: newRoofs[index],
|
addRoof: newRoofs[index],
|
||||||
trestle: {
|
trestle: {
|
||||||
...roof.trestle,
|
...roof.trestle,
|
||||||
raftBaseCd: roof.raftBaseCd,
|
raft: roof.raftBaseCd,
|
||||||
},
|
},
|
||||||
construction: {
|
construction: {
|
||||||
// ...constructionList.find((construction) => newAddedRoofs[index].construction.constTp === construction.constTp),
|
// ...constructionList.find((construction) => newAddedRoofs[index].construction.constTp === construction.constTp),
|
||||||
@ -482,8 +504,6 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
const onMarginCheck = (target, data) => {}
|
|
||||||
|
|
||||||
useImperativeHandle(ref, () => ({
|
useImperativeHandle(ref, () => ({
|
||||||
isComplete,
|
isComplete,
|
||||||
}))
|
}))
|
||||||
@ -517,7 +537,7 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
type="text"
|
type="text"
|
||||||
className="input-origin block"
|
className="input-origin block"
|
||||||
value={lengthBase}
|
value={lengthBase}
|
||||||
onChange={(e) => setLengthBase(e.target.value)}
|
onChange={(e) => onChangeLength(e.target.value)}
|
||||||
disabled={selectedRoof.lenAuth === 'R'}
|
disabled={selectedRoof.lenAuth === 'R'}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@ -666,46 +686,67 @@ const Trestle = forwardRef((props, ref) => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="module-area mt10">
|
<div className="module-input-area">
|
||||||
<div className="module-area-title">{getMessage('modal.module.basic.setting.module.placement.area')}</div>
|
<div className="module-area-title">{getMessage('modal.module.basic.setting.module.placement.area')}</div>
|
||||||
<div className="outline-form mr15">
|
<div className="module-input-wrap">
|
||||||
<span>{getMessage('modal.module.basic.setting.module.placement.area.eaves')}</span>
|
<div className="outline-form mr15">
|
||||||
<div className="input-grid mr10">
|
<span>{getMessage('modal.module.basic.setting.module.placement.area.eaves')}</span>
|
||||||
<input
|
<div className="input-grid mr10">
|
||||||
type="number"
|
<input
|
||||||
className="input-origin block"
|
type="number"
|
||||||
value={eavesMargin ?? 0}
|
className="input-origin block"
|
||||||
// onChange={(e) => dispatch({ type: 'SET_TRESTLE_DETAIL', roof: { ...trestleState, eavesMargin: e.target.value } })}
|
value={eavesMargin ?? 0}
|
||||||
onChange={(e) => setEavesMargin(+e.target.value)}
|
// onChange={(e) => dispatch({ type: 'SET_TRESTLE_DETAIL', roof: { ...trestleState, eavesMargin: e.target.value } })}
|
||||||
/>
|
onChange={(e) => setEavesMargin(+e.target.value)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span className="thin">mm</span>
|
||||||
|
</div>
|
||||||
|
<div className="outline-form mr15">
|
||||||
|
<span>{getMessage('modal.module.basic.setting.module.placement.area.ridge')}</span>
|
||||||
|
<div className="input-grid mr10">
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
className="input-origin block"
|
||||||
|
value={ridgeMargin ?? 0}
|
||||||
|
// onChange={(e) => dispatch({ type: 'SET_TRESTLE_DETAIL', roof: { ...trestleState, ridgeMargin: e.target.value } })}
|
||||||
|
onChange={(e) => setRidgeMargin(+e.target.value)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span className="thin">mm</span>
|
||||||
|
</div>
|
||||||
|
<div className="outline-form ">
|
||||||
|
<span>{getMessage('modal.module.basic.setting.module.placement.area.keraba')}</span>
|
||||||
|
<div className="input-grid mr10">
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
className="input-origin block"
|
||||||
|
value={kerabaMargin ?? 0}
|
||||||
|
// onChange={(e) => dispatch({ type: 'SET_TRESTLE_DETAIL', roof: { ...trestleState, kerabaMargin: e.target.value } })}
|
||||||
|
onChange={(e) => setKerabaMargin(+e.target.value)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span className="thin">mm</span>
|
||||||
</div>
|
</div>
|
||||||
<span className="thin">mm</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div className="outline-form mr15">
|
</div>
|
||||||
<span>{getMessage('modal.module.basic.setting.module.placement.area.ridge')}</span>
|
<div className="module-input-area">
|
||||||
<div className="input-grid mr10">
|
<div className="module-area-title">{getMessage('modal.module.basic.setting.module.placement.margin')}</div>
|
||||||
<input
|
<div className="module-input-wrap">
|
||||||
type="number"
|
<div className="outline-form">
|
||||||
className="input-origin block"
|
<span>{getMessage('modal.module.basic.setting.module.placement.margin.horizontal')}</span>
|
||||||
value={ridgeMargin ?? 0}
|
<div className="input-grid mr10">
|
||||||
// onChange={(e) => dispatch({ type: 'SET_TRESTLE_DETAIL', roof: { ...trestleState, ridgeMargin: e.target.value } })}
|
<input type="text" className="input-origin block" defaultValue={trestleDetail?.moduleIntvlHor} readOnly />
|
||||||
onChange={(e) => setRidgeMargin(+e.target.value)}
|
</div>
|
||||||
/>
|
<span className="thin">mm</span>
|
||||||
</div>
|
</div>
|
||||||
<span className="thin">mm</span>
|
<div className="outline-form">
|
||||||
</div>
|
<span>{getMessage('modal.module.basic.setting.module.placement.margin.vertical')}</span>
|
||||||
<div className="outline-form ">
|
<div className="input-grid mr10">
|
||||||
<span>{getMessage('modal.module.basic.setting.module.placement.area.keraba')}</span>
|
<input type="text" className="input-origin block" defaultValue={trestleDetail?.moduleIntvlVer} readOnly />
|
||||||
<div className="input-grid mr10">
|
</div>
|
||||||
<input
|
<span className="thin">mm</span>
|
||||||
type="number"
|
|
||||||
className="input-origin block"
|
|
||||||
value={kerabaMargin ?? 0}
|
|
||||||
// onChange={(e) => dispatch({ type: 'SET_TRESTLE_DETAIL', roof: { ...trestleState, kerabaMargin: e.target.value } })}
|
|
||||||
onChange={(e) => setKerabaMargin(+e.target.value)}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
<span className="thin">mm</span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -75,19 +75,19 @@ export default function Header(props) {
|
|||||||
userSession.storeId === 'T01'
|
userSession.storeId === 'T01'
|
||||||
? [
|
? [
|
||||||
{ id: 0, name: getMessage('site.header.link1'), target: '_blank' },
|
{ id: 0, name: getMessage('site.header.link1'), target: '_blank' },
|
||||||
{ id: 1, name: 'Q.ORDER', link: `${qOrderUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
{ id: 1, name: 'HANASYS ORDER', link: `${qOrderUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
||||||
{ id: 2, name: 'Q.Musubi', link: `${qMusubiUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
{ id: 2, name: 'HANASYS Musubi', link: `${qMusubiUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
||||||
{ id: 3, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' },
|
{ id: 3, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' },
|
||||||
]
|
]
|
||||||
: userSession.groupId === '60000'
|
: userSession.groupId === '60000'
|
||||||
? [
|
? [
|
||||||
{ id: 0, name: getMessage('site.header.link1'), target: '_blank' },
|
{ id: 0, name: getMessage('site.header.link1'), target: '_blank' },
|
||||||
{ id: 1, name: 'Q.ORDER', link: `${qOrderUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
{ id: 1, name: 'HANASYS ORDER', link: `${qOrderUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
||||||
{ id: 2, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' },
|
{ id: 2, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' },
|
||||||
]
|
]
|
||||||
: [
|
: [
|
||||||
{ id: 0, name: getMessage('site.header.link1'), target: '_blank' },
|
{ id: 0, name: getMessage('site.header.link1'), target: '_blank' },
|
||||||
{ id: 1, name: 'Q.Musubi', link: `${qMusubiUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
{ id: 1, name: 'HANASYS Musubi', link: `${qMusubiUrl}?autoLoginParam1=${encodeURIComponent(res.data)}`, target: '_blank' },
|
||||||
{ id: 2, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' },
|
{ id: 2, name: getMessage('site.header.link2'), link: `https://q-warranty.q-cells.jp/seller_login`, target: '_blank' },
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export function useMasterController() {
|
|||||||
*/
|
*/
|
||||||
const getRoofMaterialList = async () => {
|
const getRoofMaterialList = async () => {
|
||||||
return await get({ url: '/api/v1/master/getRoofMaterialList' }).then((res) => {
|
return await get({ url: '/api/v1/master/getRoofMaterialList' }).then((res) => {
|
||||||
console.log('🚀🚀 ~ getRoofMaterialList ~ res:', res)
|
// console.log('🚀🚀 ~ getRoofMaterialList ~ res:', res)
|
||||||
return res
|
return res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -310,6 +310,7 @@ export const useEstimateController = (planNo, flag) => {
|
|||||||
|
|
||||||
//봄 컴포넌트 제품은 0으로
|
//봄 컴포넌트 제품은 0으로
|
||||||
item.openFlg = '0'
|
item.openFlg = '0'
|
||||||
|
item.unitOpenFlg = '0'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -10,6 +10,7 @@ const RAFT_BASE_CODE = '203800'
|
|||||||
|
|
||||||
const trestleReducer = (state, action) => {
|
const trestleReducer = (state, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
|
case 'SET_LENGTH':
|
||||||
case 'SET_RAFT_BASE':
|
case 'SET_RAFT_BASE':
|
||||||
case 'SET_TRESTLE_MAKER':
|
case 'SET_TRESTLE_MAKER':
|
||||||
case 'SET_CONST_MTHD':
|
case 'SET_CONST_MTHD':
|
||||||
@ -24,7 +25,7 @@ const trestleReducer = (state, action) => {
|
|||||||
moduleTpCd: action.roof.module?.itemTp ?? '',
|
moduleTpCd: action.roof.module?.itemTp ?? '',
|
||||||
roofMatlCd: action.roof?.roofMatlCd ?? '',
|
roofMatlCd: action.roof?.roofMatlCd ?? '',
|
||||||
hajebichi: action.roof?.hajebichi ?? 0,
|
hajebichi: action.roof?.hajebichi ?? 0,
|
||||||
raftBaseCd: action.roof?.raftBaseCd ?? null,
|
raft: action.roof?.raft ?? null,
|
||||||
trestleMkrCd: action.roof.trestle?.trestleMkrCd ?? null,
|
trestleMkrCd: action.roof.trestle?.trestleMkrCd ?? null,
|
||||||
constMthdCd: action.roof.trestle?.constMthdCd ?? null,
|
constMthdCd: action.roof.trestle?.constMthdCd ?? null,
|
||||||
constTp: action.roof.construction?.constTp ?? null,
|
constTp: action.roof.construction?.constTp ?? null,
|
||||||
@ -71,7 +72,6 @@ export function useModuleTrestle(props) {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const raftCodeList = findCommonCode(RAFT_BASE_CODE)
|
const raftCodeList = findCommonCode(RAFT_BASE_CODE)
|
||||||
|
|
||||||
setRaftBaseList(raftCodeList)
|
setRaftBaseList(raftCodeList)
|
||||||
setTrestleList([])
|
setTrestleList([])
|
||||||
setConstMthdList([])
|
setConstMthdList([])
|
||||||
@ -96,11 +96,15 @@ export function useModuleTrestle(props) {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (trestleState) {
|
if (trestleState) {
|
||||||
handleSetTrestleList()
|
handleSetTrestleList()
|
||||||
|
|
||||||
if (!trestleState?.trestleMkrCd) {
|
if (!trestleState?.trestleMkrCd) {
|
||||||
setConstMthdList([])
|
setConstMthdList([])
|
||||||
setRoofBaseList([])
|
setRoofBaseList([])
|
||||||
setConstructionList([])
|
setConstructionList([])
|
||||||
setTrestleDetail(null)
|
setTrestleDetail(null)
|
||||||
|
setEavesMargin(0)
|
||||||
|
setRidgeMargin(0)
|
||||||
|
setKerabaMargin(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,6 +113,9 @@ export function useModuleTrestle(props) {
|
|||||||
setRoofBaseList([])
|
setRoofBaseList([])
|
||||||
setConstructionList([])
|
setConstructionList([])
|
||||||
setTrestleDetail(null)
|
setTrestleDetail(null)
|
||||||
|
setEavesMargin(0)
|
||||||
|
setRidgeMargin(0)
|
||||||
|
setKerabaMargin(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,12 +123,18 @@ export function useModuleTrestle(props) {
|
|||||||
if (!trestleState?.roofBaseCd) {
|
if (!trestleState?.roofBaseCd) {
|
||||||
setConstructionList([])
|
setConstructionList([])
|
||||||
setTrestleDetail(null)
|
setTrestleDetail(null)
|
||||||
|
setEavesMargin(0)
|
||||||
|
setRidgeMargin(0)
|
||||||
|
setKerabaMargin(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
handleSetConstructionList()
|
handleSetConstructionList()
|
||||||
if (!trestleState?.constTp) {
|
if (!trestleState?.constTp) {
|
||||||
setTrestleDetail(null)
|
setTrestleDetail(null)
|
||||||
|
setEavesMargin(0)
|
||||||
|
setRidgeMargin(0)
|
||||||
|
setKerabaMargin(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +149,7 @@ export function useModuleTrestle(props) {
|
|||||||
getTrestleList({
|
getTrestleList({
|
||||||
moduleTpCd: trestleState?.moduleTpCd ?? '',
|
moduleTpCd: trestleState?.moduleTpCd ?? '',
|
||||||
roofMatlCd: trestleState?.roofMatlCd ?? '',
|
roofMatlCd: trestleState?.roofMatlCd ?? '',
|
||||||
raftBaseCd: trestleState?.raftBaseCd ?? '',
|
raftBaseCd: trestleState?.raft ?? '',
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
if (res?.data) setTrestleList(res.data)
|
if (res?.data) setTrestleList(res.data)
|
||||||
@ -152,7 +165,7 @@ export function useModuleTrestle(props) {
|
|||||||
getTrestleList({
|
getTrestleList({
|
||||||
moduleTpCd: trestleState?.moduleTpCd ?? '',
|
moduleTpCd: trestleState?.moduleTpCd ?? '',
|
||||||
roofMatlCd: trestleState?.roofMatlCd ?? '',
|
roofMatlCd: trestleState?.roofMatlCd ?? '',
|
||||||
raftBaseCd: trestleState?.raftBaseCd ?? '',
|
raftBaseCd: trestleState?.raft ?? '',
|
||||||
trestleMkrCd: trestleState?.trestleMkrCd ?? '',
|
trestleMkrCd: trestleState?.trestleMkrCd ?? '',
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
@ -169,7 +182,7 @@ export function useModuleTrestle(props) {
|
|||||||
getTrestleList({
|
getTrestleList({
|
||||||
moduleTpCd: trestleState?.moduleTpCd ?? '',
|
moduleTpCd: trestleState?.moduleTpCd ?? '',
|
||||||
roofMatlCd: trestleState?.roofMatlCd ?? '',
|
roofMatlCd: trestleState?.roofMatlCd ?? '',
|
||||||
raftBaseCd: trestleState?.raftBaseCd ?? '',
|
raftBaseCd: trestleState?.raft ?? '',
|
||||||
trestleMkrCd: trestleState?.trestleMkrCd ?? '',
|
trestleMkrCd: trestleState?.trestleMkrCd ?? '',
|
||||||
constMthdCd: trestleState?.constMthdCd ?? '',
|
constMthdCd: trestleState?.constMthdCd ?? '',
|
||||||
})
|
})
|
||||||
@ -195,7 +208,7 @@ export function useModuleTrestle(props) {
|
|||||||
stdWindSpeed: trestleState.stdWindSpeed ?? '',
|
stdWindSpeed: trestleState.stdWindSpeed ?? '',
|
||||||
stdSnowLd: trestleState.stdSnowLd ?? '',
|
stdSnowLd: trestleState.stdSnowLd ?? '',
|
||||||
inclCd: trestleState.inclCd ?? '',
|
inclCd: trestleState.inclCd ?? '',
|
||||||
raftBaseCd: trestleState.raftBaseCd ?? '',
|
raftBaseCd: trestleState.raft ?? '',
|
||||||
roofPitch: Math.round(trestleState.roofPitch) ?? '',
|
roofPitch: Math.round(trestleState.roofPitch) ?? '',
|
||||||
})
|
})
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
@ -224,7 +237,8 @@ export function useModuleTrestle(props) {
|
|||||||
constTp: trestleState.constTp ?? '',
|
constTp: trestleState.constTp ?? '',
|
||||||
mixMatlNo: trestleState.mixMatlNo ?? '',
|
mixMatlNo: trestleState.mixMatlNo ?? '',
|
||||||
roofPitch: trestleState.roofPitch ?? '',
|
roofPitch: trestleState.roofPitch ?? '',
|
||||||
workingWidth: trestleState.workingWidth ?? '',
|
// workingWidth: trestleState.length ?? '',
|
||||||
|
workingWidth: lengthBase ?? '',
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
|
|||||||
@ -2251,7 +2251,15 @@ export const useTrestle = () => {
|
|||||||
let halfMaxX
|
let halfMaxX
|
||||||
let halfMaxY
|
let halfMaxY
|
||||||
const { direction, trestleDetail } = surface
|
const { direction, trestleDetail } = surface
|
||||||
const { moduleIntvlHor, moduleIntvlVer } = trestleDetail
|
let moduleIntvlHor, moduleIntvlVer
|
||||||
|
if (+roofSizeSet === 3) {
|
||||||
|
//육지붕의 경우 값 고정
|
||||||
|
moduleIntvlHor = 300
|
||||||
|
moduleIntvlVer = 100
|
||||||
|
} else {
|
||||||
|
moduleIntvlHor = trestleDetail.moduleIntvlHor
|
||||||
|
moduleIntvlVer = trestleDetail.moduleIntvlVer
|
||||||
|
}
|
||||||
|
|
||||||
if (direction === 'south' || direction === 'north') {
|
if (direction === 'south' || direction === 'north') {
|
||||||
maxX = width + moduleIntvlHor / 10
|
maxX = width + moduleIntvlHor / 10
|
||||||
|
|||||||
@ -469,7 +469,7 @@ export function useRoofAllocationSetting(id) {
|
|||||||
const selectedRoofMaterial = roofMaterials.find((roof) => roof.roofMatlCd === value.id)
|
const selectedRoofMaterial = roofMaterials.find((roof) => roof.roofMatlCd === value.id)
|
||||||
const newRoofList = currentRoofList.map((roof, idx) => {
|
const newRoofList = currentRoofList.map((roof, idx) => {
|
||||||
if (idx === index) {
|
if (idx === index) {
|
||||||
return { ...selectedRoofMaterial, selected: roof.selected }
|
return { ...selectedRoofMaterial, selected: roof.selected, index }
|
||||||
}
|
}
|
||||||
return roof
|
return roof
|
||||||
})
|
})
|
||||||
|
|||||||
@ -14,7 +14,7 @@ import { useMouse } from '@/hooks/useMouse'
|
|||||||
import { useLine } from '@/hooks/useLine'
|
import { useLine } from '@/hooks/useLine'
|
||||||
import { useTempGrid } from '@/hooks/useTempGrid'
|
import { useTempGrid } from '@/hooks/useTempGrid'
|
||||||
import { useEffect, useRef } from 'react'
|
import { useEffect, useRef } from 'react'
|
||||||
import { distanceBetweenPoints } from '@/util/canvas-util'
|
import { calculateIntersection, distanceBetweenPoints, findClosestPoint } from '@/util/canvas-util'
|
||||||
import { fabric } from 'fabric'
|
import { fabric } from 'fabric'
|
||||||
import { calculateAngle } from '@/util/qpolygon-utils'
|
import { calculateAngle } from '@/util/qpolygon-utils'
|
||||||
import {
|
import {
|
||||||
@ -37,12 +37,13 @@ import { useSurfaceShapeBatch } from './useSurfaceShapeBatch'
|
|||||||
import { roofDisplaySelector } from '@/store/settingAtom'
|
import { roofDisplaySelector } from '@/store/settingAtom'
|
||||||
import { useRoofFn } from '@/hooks/common/useRoofFn'
|
import { useRoofFn } from '@/hooks/common/useRoofFn'
|
||||||
import PlacementSurfaceLineProperty from '@/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty'
|
import PlacementSurfaceLineProperty from '@/components/floor-plan/modal/placementShape/PlacementSurfaceLineProperty'
|
||||||
|
import { useAdsorptionPoint } from '@/hooks/useAdsorptionPoint'
|
||||||
|
|
||||||
// 배치면 그리기
|
// 배치면 그리기
|
||||||
export function usePlacementShapeDrawing(id) {
|
export function usePlacementShapeDrawing(id) {
|
||||||
const canvas = useRecoilValue(canvasState)
|
const canvas = useRecoilValue(canvasState)
|
||||||
const roofDisplay = useRecoilValue(roofDisplaySelector)
|
const roofDisplay = useRecoilValue(roofDisplaySelector)
|
||||||
const { addCanvasMouseEventListener, addDocumentEventListener, removeAllMouseEventListeners, removeAllDocumentEventListeners, removeMouseEvent } =
|
const { addCanvasMouseEventListener, addDocumentEventListener, removeAllMouseEventListeners, removeAllDocumentEventListeners, removeMouseLine } =
|
||||||
useEvent()
|
useEvent()
|
||||||
// const { addCanvasMouseEventListener, addDocumentEventListener, removeAllMouseEventListeners, removeAllDocumentEventListeners, removeMouseEvent } =
|
// const { addCanvasMouseEventListener, addDocumentEventListener, removeAllMouseEventListeners, removeAllDocumentEventListeners, removeMouseEvent } =
|
||||||
// useContext(EventContext)
|
// useContext(EventContext)
|
||||||
@ -118,6 +119,7 @@ export function usePlacementShapeDrawing(id) {
|
|||||||
}, [type])
|
}, [type])
|
||||||
|
|
||||||
const clear = () => {
|
const clear = () => {
|
||||||
|
addCanvasMouseEventListener('mouse:move', mouseMove)
|
||||||
setLength1(0)
|
setLength1(0)
|
||||||
setLength2(0)
|
setLength2(0)
|
||||||
|
|
||||||
@ -173,6 +175,80 @@ export function usePlacementShapeDrawing(id) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
mouseMove
|
||||||
|
*/
|
||||||
|
const roofs = canvas?.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF)
|
||||||
|
const roofAdsorptionPoints = useRef([])
|
||||||
|
const intersectionPoints = useRef([])
|
||||||
|
const { getAdsorptionPoints } = useAdsorptionPoint()
|
||||||
|
|
||||||
|
const mouseMove = (e) => {
|
||||||
|
removeMouseLine();
|
||||||
|
const pointer = canvas.getPointer(e.e)
|
||||||
|
const roofsPoints = roofs.map((roof) => roof.points).flat()
|
||||||
|
roofAdsorptionPoints.current = [...roofsPoints]
|
||||||
|
|
||||||
|
const auxiliaryLines = canvas.getObjects().filter((obj) => obj.name === 'auxiliaryLine' && !obj.isFixed)
|
||||||
|
const otherAdsorptionPoints = []
|
||||||
|
|
||||||
|
auxiliaryLines.forEach((line1) => {
|
||||||
|
auxiliaryLines.forEach((line2) => {
|
||||||
|
if (line1 === line2) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const intersectionPoint = calculateIntersection(line1, line2)
|
||||||
|
if (!intersectionPoint || intersectionPoints.current.some((point) => point.x === intersectionPoint.x && point.y === intersectionPoint.y)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
otherAdsorptionPoints.push(intersectionPoint)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
let innerLinePoints = []
|
||||||
|
canvas
|
||||||
|
.getObjects()
|
||||||
|
.filter((obj) => obj.innerLines)
|
||||||
|
.forEach((polygon) => {
|
||||||
|
polygon.innerLines.forEach((line) => {
|
||||||
|
innerLinePoints.push({ x: line.x1, y: line.y1 })
|
||||||
|
innerLinePoints.push({ x: line.x2, y: line.y2 })
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
const adsorptionPoints = [
|
||||||
|
...getAdsorptionPoints(),
|
||||||
|
...roofAdsorptionPoints.current,
|
||||||
|
...otherAdsorptionPoints,
|
||||||
|
...intersectionPoints.current,
|
||||||
|
...innerLinePoints,
|
||||||
|
]
|
||||||
|
|
||||||
|
let arrivalPoint = { x: pointer.x, y: pointer.y }
|
||||||
|
let adsorptionPoint = findClosestPoint(pointer, adsorptionPoints)
|
||||||
|
|
||||||
|
if (adsorptionPoint && distanceBetweenPoints(pointer, adsorptionPoint) <= adsorptionRange) {
|
||||||
|
arrivalPoint = { ...adsorptionPoint }
|
||||||
|
}
|
||||||
|
const horizontalLine = new fabric.Line([-1 * canvas.width, arrivalPoint.y, 2 * canvas.width, arrivalPoint.y], {
|
||||||
|
stroke: 'red',
|
||||||
|
strokeWidth: 1,
|
||||||
|
selectable: false,
|
||||||
|
name: 'mouseLine',
|
||||||
|
})
|
||||||
|
|
||||||
|
const verticalLine = new fabric.Line([arrivalPoint.x, -1 * canvas.height, arrivalPoint.x, 2 * canvas.height], {
|
||||||
|
stroke: 'red',
|
||||||
|
strokeWidth: 1,
|
||||||
|
selectable: false,
|
||||||
|
name: 'mouseLine',
|
||||||
|
})
|
||||||
|
canvas?.add(horizontalLine, verticalLine)
|
||||||
|
canvas?.renderAll()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
canvas
|
canvas
|
||||||
?.getObjects()
|
?.getObjects()
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { v4 as uuidv4 } from 'uuid'
|
|||||||
import { canvasSizeState, canvasState, canvasZoomState, currentMenuState, currentObjectState } from '@/store/canvasAtom'
|
import { canvasSizeState, canvasState, canvasZoomState, currentMenuState, currentObjectState } from '@/store/canvasAtom'
|
||||||
import { QPolygon } from '@/components/fabric/QPolygon'
|
import { QPolygon } from '@/components/fabric/QPolygon'
|
||||||
import { fontSelector } from '@/store/fontAtom'
|
import { fontSelector } from '@/store/fontAtom'
|
||||||
import { MENU } from '@/common/common'
|
import { MENU, POLYGON_TYPE } from '@/common/common'
|
||||||
|
|
||||||
// 캔버스에 필요한 이벤트
|
// 캔버스에 필요한 이벤트
|
||||||
export function useCanvasEvent() {
|
export function useCanvasEvent() {
|
||||||
@ -204,8 +204,12 @@ export function useCanvasEvent() {
|
|||||||
|
|
||||||
if (selected?.length > 0) {
|
if (selected?.length > 0) {
|
||||||
selected.forEach((obj) => {
|
selected.forEach((obj) => {
|
||||||
if (obj.type === 'QPolygon' && currentMenu !== MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
// if (obj.type === 'QPolygon' && currentMenu !== MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
||||||
|
if (obj.type === 'QPolygon') {
|
||||||
obj.set({ stroke: 'red' })
|
obj.set({ stroke: 'red' })
|
||||||
|
if (obj.name === POLYGON_TYPE.MODULE && currentMenu === MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
||||||
|
obj.set({ strokeWidth: 3 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
canvas.renderAll()
|
canvas.renderAll()
|
||||||
@ -217,10 +221,13 @@ export function useCanvasEvent() {
|
|||||||
|
|
||||||
if (deselected?.length > 0) {
|
if (deselected?.length > 0) {
|
||||||
deselected.forEach((obj) => {
|
deselected.forEach((obj) => {
|
||||||
if (obj.type === 'QPolygon' && currentMenu !== MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
if (obj.type === 'QPolygon') {
|
||||||
if (obj.name !== 'moduleSetupSurface') {
|
if (obj.name !== 'moduleSetupSurface') {
|
||||||
obj.set({ stroke: 'black' })
|
obj.set({ stroke: 'black' })
|
||||||
}
|
}
|
||||||
|
if (obj.name === POLYGON_TYPE.MODULE && currentMenu === MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
||||||
|
obj.set({ strokeWidth: 0.3 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -233,16 +240,24 @@ export function useCanvasEvent() {
|
|||||||
|
|
||||||
if (deselected?.length > 0) {
|
if (deselected?.length > 0) {
|
||||||
deselected.forEach((obj) => {
|
deselected.forEach((obj) => {
|
||||||
if (obj.type === 'QPolygon' && currentMenu !== MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
if (obj.type === 'QPolygon') {
|
||||||
obj.set({ stroke: 'black' })
|
obj.set({ stroke: 'black' })
|
||||||
|
if (obj.name === POLYGON_TYPE.MODULE && currentMenu === MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
||||||
|
//모듈 미선택시 라인 두께 변경
|
||||||
|
obj.set({ strokeWidth: 0.3 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected?.length > 0) {
|
if (selected?.length > 0) {
|
||||||
selected.forEach((obj) => {
|
selected.forEach((obj) => {
|
||||||
if (obj.type === 'QPolygon' && currentMenu !== MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
if (obj.type === 'QPolygon') {
|
||||||
obj.set({ stroke: 'red' })
|
obj.set({ stroke: 'red' })
|
||||||
|
if (obj.name === POLYGON_TYPE.MODULE && currentMenu === MENU.MODULE_CIRCUIT_SETTING.BASIC_SETTING) {
|
||||||
|
//모듈 선택시 라인 두께 변경
|
||||||
|
obj.set({ strokeWidth: 3 })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedM
|
|||||||
import { useCanvasPopupStatusController } from './common/useCanvasPopupStatusController'
|
import { useCanvasPopupStatusController } from './common/useCanvasPopupStatusController'
|
||||||
import { useCanvasMenu } from './common/useCanvasMenu'
|
import { useCanvasMenu } from './common/useCanvasMenu'
|
||||||
import { QcastContext } from '@/app/QcastProvider'
|
import { QcastContext } from '@/app/QcastProvider'
|
||||||
|
import { unescapeString } from '@/util/common-utils'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 플랜 처리 훅
|
* 플랜 처리 훅
|
||||||
@ -264,7 +265,7 @@ export function usePlan(params = {}) {
|
|||||||
objectNo,
|
objectNo,
|
||||||
planNo: parseInt(newPlan.planNo),
|
planNo: parseInt(newPlan.planNo),
|
||||||
popupType: 1,
|
popupType: 1,
|
||||||
popupStatus: sourceDegree.popupStatus,
|
popupStatus: unescapeString(sourceDegree.popupStatus),
|
||||||
}
|
}
|
||||||
console.log('🚀 ~ postObjectPlan ~ degreeData:', degreeData)
|
console.log('🚀 ~ postObjectPlan ~ degreeData:', degreeData)
|
||||||
await post({ url: `/api/v1/canvas-popup-status`, data: degreeData })
|
await post({ url: `/api/v1/canvas-popup-status`, data: degreeData })
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"welcome": "ようこそ。 {0}さん",
|
"welcome": "ようこそ。 {0}さん",
|
||||||
"header.menus.home": "ホーム",
|
"header.menus.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": "コミュニティ",
|
||||||
@ -97,9 +97,12 @@
|
|||||||
"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.placement.area": "モジュール配置領域",
|
"modal.module.basic.setting.module.placement.area": "モジュール配置領域",
|
||||||
|
"modal.module.basic.setting.module.placement.margin": "モジュール間の間隙",
|
||||||
"modal.module.basic.setting.module.placement.area.eaves": "軒側",
|
"modal.module.basic.setting.module.placement.area.eaves": "軒側",
|
||||||
"modal.module.basic.setting.module.placement.area.ridge": "棟側",
|
"modal.module.basic.setting.module.placement.area.ridge": "棟側",
|
||||||
"modal.module.basic.setting.module.placement.area.keraba": "けらぱ",
|
"modal.module.basic.setting.module.placement.area.keraba": "けらぱ",
|
||||||
|
"modal.module.basic.setting.module.placement.margin.horizontal": "左右",
|
||||||
|
"modal.module.basic.setting.module.placement.margin.vertical": "上下",
|
||||||
"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": "※モジュール配置時は、施工マニュアルに記載されている<モジュール配置条件>を必ずご確認ください。",
|
||||||
@ -110,26 +113,27 @@
|
|||||||
"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.settting.module.error1": "架台メーカーを選択してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error1": "架台メーカーを選択してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error2": "工法を選択してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error2": "工法を選択してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error3": "屋根の下を選択してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error3": "屋根の下を選択してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error4": "施工法を選択してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error4": "設置可能な施工条件がないので設置条件を変更してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error5": "L を選択してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error5": "L を選択してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error6": "垂木の間隔を入力してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error6": "垂木の間隔を入力してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error7": "下在ビーチを入力してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error7": "下在ビーチを入力してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error8": "モジュール配置領域の値を入力してください。\n(屋根材: {0})(JA)",
|
"modal.module.basic.settting.module.error8": "モジュール配置領域の値を入力してください。\n(屋根材: {0})",
|
||||||
"modal.module.basic.settting.module.error9": "軒側の値は{0} mm以上でなければなりません。\n(屋根材: {1})(JA)",
|
"modal.module.basic.settting.module.error9": "軒側の値は{0} mm以上でなければなりません。\n(屋根材: {1})",
|
||||||
"modal.module.basic.settting.module.error10": "吊下側の値は{0} mm以上でなければなりません。\n(屋根材: {1})(JA)",
|
"modal.module.basic.settting.module.error10": "吊下側の値は{0} mm以上でなければなりません。\n(屋根材: {1})",
|
||||||
"modal.module.basic.settting.module.error11": "ケラバ側の値は{0} mm以上でなければなりません。\n(屋根材: {1})(JA)",
|
"modal.module.basic.settting.module.error11": "ケラバ側の値は{0} mm以上でなければなりません。\n(屋根材: {1})",
|
||||||
|
"modal.module.basic.settting.module.error12": "施工方法を選択してください。\n(屋根材: {0})",
|
||||||
"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.max.row.amount": "Max単数",
|
"modal.module.basic.setting.module.placement.max.row.amount": "Max段数",
|
||||||
"modal.module.basic.setting.module.placement.mix.max.row.amount": "混合Max単数",
|
"modal.module.basic.setting.module.placement.mix.max.row.amount": "混合Max段数",
|
||||||
"modal.module.basic.setting.module.placement.row.amount": "段数",
|
"modal.module.basic.setting.module.placement.row.amount": "段数",
|
||||||
"modal.module.basic.setting.module.placement.column.amount": "列数",
|
"modal.module.basic.setting.module.placement.column.amount": "列数",
|
||||||
"modal.module.basic.setting.module.placement.do": "する",
|
"modal.module.basic.setting.module.placement.do": "する",
|
||||||
@ -149,9 +153,10 @@
|
|||||||
"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.row.batch": "段・列数指定配置",
|
"modal.module.basic.setting.row.batch": "レイアウト指定",
|
||||||
"modal.module.basic.setting.passivity.placement": "手動配置",
|
"modal.module.basic.setting.passivity.placement": "手動配置",
|
||||||
"modal.module.basic.setting.auto.placement": "自動配置",
|
"modal.module.basic.setting.auto.placement": "自動配置",
|
||||||
|
"modal.module.basic.setting.auto.row.batch": "自動レイアウト指定",
|
||||||
"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": "架台配置",
|
||||||
@ -183,7 +188,7 @@
|
|||||||
"modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error02": "シリーズを選択してください。",
|
"modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error02": "シリーズを選択してください。",
|
||||||
"modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "番号確定",
|
"modal.circuit.trestle.setting.circuit.allocation.passivity.circuit.num.fix": "番号確定",
|
||||||
"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": "昇圧回路数",
|
||||||
@ -320,7 +325,7 @@
|
|||||||
"modal.object.setting.offset.width": "幅の出幅",
|
"modal.object.setting.offset.width": "幅の出幅",
|
||||||
"modal.object.setting.offset.slope": "勾配",
|
"modal.object.setting.offset.slope": "勾配",
|
||||||
"modal.object.setting.direction.select": "方向の選択",
|
"modal.object.setting.direction.select": "方向の選択",
|
||||||
"modal.placement.surface.setting.info": "ⓘ①の長さ入力後、対角線長を入力すると②の長さを自動計算します。",
|
"modal.placement.surface.setting.info": "①の長さを入力後、③の長さを入力すると②の長さを自動計算します。",
|
||||||
"modal.placement.surface.setting.diagonal.length": "斜めの長さ",
|
"modal.placement.surface.setting.diagonal.length": "斜めの長さ",
|
||||||
"modal.color.picker.title": "色設定",
|
"modal.color.picker.title": "色設定",
|
||||||
"modal.color.picker.default.color": "基本色",
|
"modal.color.picker.default.color": "基本色",
|
||||||
@ -1066,13 +1071,13 @@
|
|||||||
"roof.line.not.found": "屋根形状がありません",
|
"roof.line.not.found": "屋根形状がありません",
|
||||||
"roof.material.can.not.delete": "割り当てられた配置面があります。",
|
"roof.material.can.not.delete": "割り当てられた配置面があります。",
|
||||||
"chidory.can.not.install": "千鳥配置できない工法です。",
|
"chidory.can.not.install": "千鳥配置できない工法です。",
|
||||||
"module.layout.setup.max.count": "モジュールの最大段数は{0}、最大列数は{1}です。 (JA)",
|
"module.layout.setup.max.count": "モジュールの単体での最大段数は{0}、最大列数は{1}です。 (JA)",
|
||||||
"module.layout.setup.max.count.multiple": "モジュール{0}の最大段数は{1}、最大列数は{2}です。 (JA)",
|
"module.layout.setup.max.count.multiple": "モジュール{0}の単体での最大段数は{1}、最大列数は{2}です。 (JA)",
|
||||||
"roofAllocation.not.found": "割り当てる屋根がありません。 (JA)",
|
"roofAllocation.not.found": "割り当てる屋根がありません。 (JA)",
|
||||||
"modal.module.basic.setting.module.placement.max.size.check": "屋根材別モジュールの単体の最大段数、2種混合の段数を確認して下さい",
|
"modal.module.basic.setting.module.placement.max.size.check": "屋根材別モジュールの単体の単体での最大段数、2種混合の段数を確認して下さい",
|
||||||
"modal.module.basic.setting.module.placement.max.row": "最大段数",
|
"modal.module.basic.setting.module.placement.max.row": "単体で\rの最大段数",
|
||||||
"modal.module.basic.setting.module.placement.max.rows.multiple": "2種混合最大段数",
|
"modal.module.basic.setting.module.placement.max.rows.multiple": "2種混合時\rの最大段数",
|
||||||
"modal.module.basic.setting.module.placement.mix.asg.yn.error": "混合インストール不可能なモジュールです。 (JA)",
|
"modal.module.basic.setting.module.placement.mix.asg.yn.error": "混合インストール不可能なモジュールです。 (JA)",
|
||||||
"modal.module.basic.setting.module.placement.mix.asg.yn": "混合",
|
"modal.module.basic.setting.module.placement.mix.asg.yn": "混合",
|
||||||
"modal.module.basic.setting.layoutpassivity.placement": "layout配置 (JA)"
|
"modal.module.basic.setting.module.placement.over.max.row": "{0} 最大段数超過しました。最大段数表を参考にしてください。"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,9 +97,12 @@
|
|||||||
"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.placement.area": "모듈 배치 영역",
|
"modal.module.basic.setting.module.placement.area": "모듈 배치 영역",
|
||||||
|
"modal.module.basic.setting.module.placement.margin": "모듈 배치 간격",
|
||||||
"modal.module.basic.setting.module.placement.area.eaves": "처마쪽",
|
"modal.module.basic.setting.module.placement.area.eaves": "처마쪽",
|
||||||
"modal.module.basic.setting.module.placement.area.ridge": "용마루쪽",
|
"modal.module.basic.setting.module.placement.area.ridge": "용마루쪽",
|
||||||
"modal.module.basic.setting.module.placement.area.keraba": "케라바쪽",
|
"modal.module.basic.setting.module.placement.area.keraba": "케라바쪽",
|
||||||
|
"modal.module.basic.setting.module.placement.margin.horizontal": "좌우",
|
||||||
|
"modal.module.basic.setting.module.placement.margin.vertical": "상하",
|
||||||
"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": "※ 모듈 배치 시에는 시공 매뉴얼에 기재된 <모듈 배치 조건>을 반드시 확인해주십시오.",
|
||||||
@ -117,7 +120,7 @@
|
|||||||
"modal.module.basic.settting.module.error1": "가대메이커를 선택해주세요.\n(지붕재: {0})",
|
"modal.module.basic.settting.module.error1": "가대메이커를 선택해주세요.\n(지붕재: {0})",
|
||||||
"modal.module.basic.settting.module.error2": "공법를 선택해주세요.\n(지붕재: {0})",
|
"modal.module.basic.settting.module.error2": "공법를 선택해주세요.\n(지붕재: {0})",
|
||||||
"modal.module.basic.settting.module.error3": "지붕밑바탕을 선택해주세요.\n(지붕재: {0})",
|
"modal.module.basic.settting.module.error3": "지붕밑바탕을 선택해주세요.\n(지붕재: {0})",
|
||||||
"modal.module.basic.settting.module.error4": "시공법을 선택해주세요.\n(지붕재: {0})",
|
"modal.module.basic.settting.module.error4": "설치 조건이 없으므로 설치 조건을 변경하십시오.\n(지붕재: {0})",
|
||||||
"modal.module.basic.settting.module.error5": "L 을 입력해주세요.\n(지붕재: {0})",
|
"modal.module.basic.settting.module.error5": "L 을 입력해주세요.\n(지붕재: {0})",
|
||||||
"modal.module.basic.settting.module.error6": "서까래 간격을 입력해주세요.\n(지붕재: {0})",
|
"modal.module.basic.settting.module.error6": "서까래 간격을 입력해주세요.\n(지붕재: {0})",
|
||||||
"modal.module.basic.settting.module.error7": "하제비치를 입력해주세요.\n(지붕재: {0})",
|
"modal.module.basic.settting.module.error7": "하제비치를 입력해주세요.\n(지붕재: {0})",
|
||||||
@ -125,6 +128,7 @@
|
|||||||
"modal.module.basic.settting.module.error9": "처마쪽 값은 {0}mm 이상이어야 합니다.\n(지붕재: {1})",
|
"modal.module.basic.settting.module.error9": "처마쪽 값은 {0}mm 이상이어야 합니다.\n(지붕재: {1})",
|
||||||
"modal.module.basic.settting.module.error10": "용마루쪽 값은 {0}mm 이상이어야 합니다.\n(지붕재: {1})",
|
"modal.module.basic.settting.module.error10": "용마루쪽 값은 {0}mm 이상이어야 합니다.\n(지붕재: {1})",
|
||||||
"modal.module.basic.settting.module.error11": "케라바쪽 값은 {0}mm 이상이어야 합니다.\n(지붕재: {1})",
|
"modal.module.basic.settting.module.error11": "케라바쪽 값은 {0}mm 이상이어야 합니다.\n(지붕재: {1})",
|
||||||
|
"modal.module.basic.settting.module.error12": "시공법을 선택해주세요.\n(지붕재: {0})",
|
||||||
"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": "물떼새 배치",
|
||||||
@ -152,7 +156,8 @@
|
|||||||
"modal.module.basic.setting.prev": "이전",
|
"modal.module.basic.setting.prev": "이전",
|
||||||
"modal.module.basic.setting.row.batch": "단·열수 지정 배치",
|
"modal.module.basic.setting.row.batch": "단·열수 지정 배치",
|
||||||
"modal.module.basic.setting.passivity.placement": "수동 배치",
|
"modal.module.basic.setting.passivity.placement": "수동 배치",
|
||||||
"modal.module.basic.setting.auto.placement": "설정값으로 자동 배치",
|
"modal.module.basic.setting.auto.placement": "자동 배치",
|
||||||
|
"modal.module.basic.setting.auto.row.batch": "자동 단·열수 지정 배치 ",
|
||||||
"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": "가대할당",
|
||||||
@ -1075,5 +1080,5 @@
|
|||||||
"modal.module.basic.setting.module.placement.max.rows.multiple": "2종 혼합 최대단수",
|
"modal.module.basic.setting.module.placement.max.rows.multiple": "2종 혼합 최대단수",
|
||||||
"modal.module.basic.setting.module.placement.mix.asg.yn.error": "혼합 설치 불가능한 모듈입니다.",
|
"modal.module.basic.setting.module.placement.mix.asg.yn.error": "혼합 설치 불가능한 모듈입니다.",
|
||||||
"modal.module.basic.setting.module.placement.mix.asg.yn": "혼합",
|
"modal.module.basic.setting.module.placement.mix.asg.yn": "혼합",
|
||||||
"modal.module.basic.setting.layoutpassivity.placement": "레이아웃 배치"
|
"modal.module.basic.setting.module.placement.over.max.row": "{0}의 최대단수를 초과했습니다. 최대단수표를 참고해 주세요."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -806,28 +806,28 @@
|
|||||||
color: #45576F;
|
color: #45576F;
|
||||||
margin-left: 5px;
|
margin-left: 5px;
|
||||||
}
|
}
|
||||||
.drag-file-box{
|
.btn-area{
|
||||||
padding: 10px;
|
padding-bottom: 15px;
|
||||||
.btn-area{
|
border-bottom: 1px solid #ECF0F4;
|
||||||
padding-bottom: 15px;
|
.file-upload{
|
||||||
border-bottom: 1px solid #ECF0F4;
|
display: inline-block;
|
||||||
.file-upload{
|
height: 30px;
|
||||||
display: inline-block;
|
background-color: #94A0AD;
|
||||||
height: 30px;
|
padding: 0 10px;
|
||||||
background-color: #94A0AD;
|
border-radius: 2px;
|
||||||
padding: 0 10px;
|
font-size: 13px;
|
||||||
border-radius: 2px;
|
line-height: 30px;
|
||||||
font-size: 13px;
|
color: #fff;
|
||||||
line-height: 30px;
|
font-weight: 500;
|
||||||
color: #fff;
|
cursor: pointer;
|
||||||
font-weight: 500;
|
transition: background .15s ease-in-out;
|
||||||
cursor: pointer;
|
&:hover{
|
||||||
transition: background .15s ease-in-out;
|
background-color: #607F9A;
|
||||||
&:hover{
|
|
||||||
background-color: #607F9A;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
.drag-file-box{
|
||||||
|
padding: 10px;
|
||||||
.drag-file-area{
|
.drag-file-area{
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
|
|||||||
@ -2363,20 +2363,6 @@ $alert-color: #101010;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.module-area{
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
.module-area-title{
|
|
||||||
flex: none;
|
|
||||||
font-size: 12px;
|
|
||||||
color: #fff;
|
|
||||||
font-weight: 500;
|
|
||||||
margin-right: 20px;
|
|
||||||
}
|
|
||||||
.outline-form{
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.placement-name-guide{
|
.placement-name-guide{
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
@ -2422,4 +2408,32 @@ $alert-color: #101010;
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
height: 0;
|
height: 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2025-05-07 지붕모듈
|
||||||
|
.module-input-area{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-top: 10px;
|
||||||
|
.module-area-title{
|
||||||
|
flex: none;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 500;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
.module-input-wrap{
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
.outline-form{
|
||||||
|
width: calc(33.333% - 10px);
|
||||||
|
margin-right: 15px;
|
||||||
|
&:last-child{
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
.input-grid{
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -377,6 +377,7 @@ button{
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
line-height: 1.4;
|
line-height: 1.4;
|
||||||
|
text-align: left;
|
||||||
}
|
}
|
||||||
&:hover{
|
&:hover{
|
||||||
background-color: #2C2C2C;
|
background-color: #2C2C2C;
|
||||||
@ -1023,4 +1024,23 @@ input:checked + .slider {
|
|||||||
// alert z-index
|
// alert z-index
|
||||||
.swal2-container{
|
.swal2-container{
|
||||||
z-index: 120000;
|
z-index: 120000;
|
||||||
|
}
|
||||||
|
|
||||||
|
// textarea
|
||||||
|
.textarea-form{
|
||||||
|
width: 100%;
|
||||||
|
outline: none;
|
||||||
|
resize: none;
|
||||||
|
border: none;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
min-height: 150px;
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 13px;
|
||||||
|
color: #45576F;
|
||||||
|
border-radius: 2px;
|
||||||
|
font-family: "Noto Sans JP", sans-serif;
|
||||||
|
transition: border .15s ease-in-out;
|
||||||
|
&:focus{
|
||||||
|
border-color: #94a0ad;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -288,55 +288,56 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 커뮤니티
|
// 커뮤니티
|
||||||
.community_detail{
|
.community_detail-tit{
|
||||||
.community_detail-tit{
|
font-size: 16px;
|
||||||
font-size: 16px;
|
color: #101010;
|
||||||
color: #101010;
|
font-weight: 600;
|
||||||
font-weight: 600;
|
padding-bottom: 14px;
|
||||||
padding-bottom: 14px;
|
border-bottom: 2px solid #101010;
|
||||||
border-bottom: 2px solid #101010;
|
}
|
||||||
}
|
.community_detail-file-wrap{
|
||||||
.community_detail-file-wrap{
|
padding: 24px 0;
|
||||||
padding: 24px 0;
|
border-bottom: 1px solid #E5E5E5;
|
||||||
border-bottom: 1px solid #E5E5E5;
|
dt{
|
||||||
dt{
|
|
||||||
font-size: 13px;
|
|
||||||
color: #101010;
|
|
||||||
font-weight: 500;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
dd{
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 400;
|
|
||||||
margin-bottom: 3px;
|
|
||||||
color: #344356;
|
|
||||||
&:last-child{
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.community_detail-inner{
|
|
||||||
max-height: 300px;
|
|
||||||
overflow-y: auto;
|
|
||||||
margin-top: 20px;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
|
color: #101010;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
dd{
|
||||||
|
font-size: 12px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
color: #45576F;
|
margin-bottom: 3px;
|
||||||
line-height: 26px;
|
color: #344356;
|
||||||
word-break: keep-all;
|
&:nth-child(2){
|
||||||
&::-webkit-scrollbar {
|
margin-top: 15px;
|
||||||
width: 4px;
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
}
|
||||||
&::-webkit-scrollbar-thumb {
|
&:last-child{
|
||||||
background-color: #C1CCD7;
|
margin-bottom: 0;
|
||||||
}
|
|
||||||
&::-webkit-scrollbar-track {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.community_detail-inner{
|
||||||
|
max-height: 300px;
|
||||||
|
overflow-y: auto;
|
||||||
|
margin-top: 20px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #45576F;
|
||||||
|
line-height: 26px;
|
||||||
|
word-break: keep-all;
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 4px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #C1CCD7;
|
||||||
|
}
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 견적 복사
|
// 견적 복사
|
||||||
.estimate-copy-info-item{
|
.estimate-copy-info-item{
|
||||||
@ -368,4 +369,117 @@
|
|||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1:1문의
|
||||||
|
.one-on-one{
|
||||||
|
.select-wrap{
|
||||||
|
width: 250px;
|
||||||
|
}
|
||||||
|
.input-wrap{
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
&.btn-area{
|
||||||
|
padding-bottom: 0;
|
||||||
|
border: none;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
&.drag-file-box{
|
||||||
|
border: 1px solid #eee;
|
||||||
|
.drag-file-area{
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.oneonone-header-wrap{
|
||||||
|
padding-bottom: 14px;
|
||||||
|
border-bottom: 2px solid #101010;
|
||||||
|
.oneonone-title{
|
||||||
|
font-size: 16px;
|
||||||
|
color: #101010;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-bottom: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.oneonone-infor{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.profile{
|
||||||
|
position: relative;
|
||||||
|
padding-left: 26px;
|
||||||
|
padding-right: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #101010;
|
||||||
|
&::before{
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 0;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
background: url(./../../public/static/images/sub/oneonone_profile_icon.svg)no-repeat center;
|
||||||
|
}
|
||||||
|
&::after{
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
right: 0;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
width: 1px;
|
||||||
|
height: 8px;
|
||||||
|
background-color: #CCCCCC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.date{
|
||||||
|
padding-left: 8px;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #101010;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.oneonone-detail{
|
||||||
|
padding: 20px;
|
||||||
|
border: 1px solid #101010;
|
||||||
|
border-top: none;
|
||||||
|
.community_detail-file-wrap{
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
.community_detail-inner{
|
||||||
|
max-height: 110px;
|
||||||
|
margin-top: 24px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.oneonone-answer{
|
||||||
|
margin-top: 8px;
|
||||||
|
padding: 20px;
|
||||||
|
border: 1px solid #101010;
|
||||||
|
.community_detail-inner{
|
||||||
|
max-height: 110px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.community_detail-file-wrap{
|
||||||
|
border-top: 1px solid #D4DCE7;
|
||||||
|
padding: 16px 0 0 0;
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.answer-title-wrap{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
padding-bottom: 14px;
|
||||||
|
border-bottom: 1px solid #D4DCE7;
|
||||||
|
.answer-title{
|
||||||
|
font-size: 14px;
|
||||||
|
color: #101010;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
.oneonone-infor{
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -145,9 +145,19 @@ export const unescapeString = (str) => {
|
|||||||
''': "'",
|
''': "'",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
1. 한번 변환은 {" 로 변환됨 : 에러 발생 => while 변경
|
||||||
|
2. 변환할 내용이 없으면 리턴값이 undefined
|
||||||
|
|
||||||
if (regex.test(str)) {
|
if (regex.test(str)) {
|
||||||
return str.replace(regex, (matched) => chars[matched] || matched)
|
return str.replace(regex, (matched) => chars[matched] || matched)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
while (regex.test(str)) {
|
||||||
|
str = str.replace(regex, (matched) => chars[matched] || matched);
|
||||||
|
}
|
||||||
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
export const isNullOrUndefined = (value) => {
|
export const isNullOrUndefined = (value) => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user