Merge branch 'dev' into dev-yj

This commit is contained in:
yjnoh 2025-01-06 16:43:19 +09:00
commit dacad22e9b
12 changed files with 3720 additions and 3364 deletions

View File

@ -125,7 +125,10 @@ export default function MainContents() {
<>
<div className="notice-day pre">{dayjs(recentNoticeList[0]?.regDt).format('YYYY.MM.DD')}</div>
<div className="notice-title">{recentNoticeList[0]?.title}</div>
<div className="notice-contents">{recentNoticeList[0]?.contents}</div>
<div
className="notice-contents"
dangerouslySetInnerHTML={{ __html: recentNoticeList[0]?.contents ? recentNoticeList[0].contents.replaceAll('\n', '<br/>') : '' }}
></div>
</>
) : (
<MainSkeleton count={5} />

View File

@ -50,17 +50,15 @@ export default function Stuff() {
// }
// Navigator clipboard api needs a secure context (https)
if (navigator.clipboard && window.isSecureContext) {
console.log('확인11', value)
await navigator.clipboard
.writeText(value)
.then(() => {
alert(getMessage('stuff.detail.header.successCopy'))
})
.catch((err) => {
.catch(() => {
alert(getMessage('stuff.detail.header.failCopy'))
})
} else {
console.log('확인22', value)
// Use the 'out of viewport hidden text area' trick
const textArea = document.createElement('textArea')
textArea.value = value
@ -73,7 +71,6 @@ export default function Stuff() {
textArea.select()
try {
console.log('deprecated::document.execCommand(`copy`)', document.execCommand('copy'))
document.execCommand('copy')
alert(getMessage('stuff.detail.header.successCopy'))
} catch (err) {

View File

@ -1,7 +1,7 @@
'use client'
import { useState, useEffect, useRef, useContext } from 'react'
import { useRouter, useSearchParams, usePathname } from 'next/navigation'
import { useRouter, useSearchParams } from 'next/navigation'
import { Button } from '@nextui-org/react'
import Select, { components } from 'react-select'
import Link from 'next/link'
@ -147,7 +147,8 @@ export default function StuffDetail() {
let capacity
if (origin) {
capacity = origin / 1000
return capacity.toFixed(3)
//#400 2
return capacity.toFixed(2) + 'kW'
} else {
return null
}
@ -317,6 +318,7 @@ export default function StuffDetail() {
setIsFormValid(true)
}
promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => {
// console.log('res::::', res.data)
if (res.status === 200) {
if (isObjectNotEmpty(res.data)) {
let surfaceTypeValue
@ -1450,14 +1452,43 @@ export default function StuffDetail() {
)
}
//
const getCellDoubleClicked = (params) => {
// if (params?.column?.colId !== 'estimateDate') {
// if (params?.data?.planNo && params?.data?.objectNo) {
// let objectNo = params?.data?.objectNo
// let planNo = params?.data?.planNo
// router.push(`/floor-plan?pid=${planNo}&objectNo=${objectNo}`)
// }
// }
}
return (
<>
{(editMode === 'NEW' && (
<form onSubmit={handleSubmit(onValid)}>
<div className="sub-table-box">
<div className="promise-gudie">
<span className="important">*</span>
{getMessage('stuff.detail.required')}
<div className="promise-title-wrap">
<div className="promise-gudie">
<span className="important">*</span>
{getMessage('stuff.detail.required')}
</div>
<div className="left-unit-box">
{!isFormValid ? (
<Button className="btn-origin grey mr5" onPress={onTempSave}>
{getMessage('stuff.detail.btn.tempSave')}
</Button>
) : (
<Button type="submit" className="btn-origin navy mr5">
{getMessage('stuff.detail.btn.save')}
</Button>
)}
<Link href="/management/stuff" scroll={false}>
<button type="button" className="btn-origin grey">
{getMessage('stuff.detail.btn.moveList')}
</button>
</Link>
</div>
</div>
<div className="infomation-table">
<table>
@ -1692,7 +1723,7 @@ export default function StuffDetail() {
onChange={onSelectionChange2}
getOptionLabel={(x) => x.saleStoreName}
getOptionValue={(x) => x.saleStoreId}
isDisabled={otherSaleStoreList.length > 0 ? false : true}
isDisabled={otherSaleStoreList.length > 1 ? false : true}
isClearable={true}
value={otherSaleStoreList.filter(function (option) {
return option.saleStoreId === otherSelOptions
@ -1952,8 +1983,46 @@ export default function StuffDetail() {
<>
<form onSubmit={handleSubmit(onValid)}>
<div className="sub-table-box">
<div className="promise-gudie">
<span className="important">*</span> {getMessage('stuff.detail.required')}
<div className="promise-title-wrap">
<div className="promise-gudie">
<span className="important">*</span> {getMessage('stuff.detail.required')}
</div>
{managementState?.tempFlg === '0' ? (
<>
<div className="left-unit-box">
<Link href="/management/stuff" scroll={false}>
<button type="button" className="btn-origin grey mr5">
{getMessage('stuff.detail.btn.moveList')}
</button>
</Link>
<Button type="submit" className="btn-origin navy mr5">
{getMessage('stuff.detail.btn.save')}
</Button>
<Button type="button" className="btn-origin grey" onPress={onDelete}>
{getMessage('stuff.detail.btn.delete')}
</Button>
</div>
</>
) : (
<>
<div className="left-unit-box">
{!isFormValid ? (
<Button className="btn-origin grey mr5" onPress={onTempSave}>
{getMessage('stuff.detail.btn.tempSave')}
</Button>
) : (
<Button type="submit" className="btn-origin navy mr5">
{getMessage('stuff.detail.btn.save')}
</Button>
)}
<Link href="/management/stuff" scroll={false}>
<button type="button" className="btn-origin grey">
{getMessage('stuff.detail.btn.moveList')}
</button>
</Link>
</div>
</>
)}
</div>
<div className="infomation-wrap">
<div className="infomation-table">
@ -2492,7 +2561,7 @@ export default function StuffDetail() {
</div>
<div className="information-grid">
<div className="q-grid no-cols">
<StuffPlanQGrid {...planGridProps} />
<StuffPlanQGrid {...planGridProps} getCellDoubleClicked={getCellDoubleClicked} />
</div>
</div>
{/* 진짜R 플랜끝 */}

View File

@ -22,17 +22,15 @@ export default function StuffHeader() {
const copyObjectNo = async (objectNo) => {
if (navigator.clipboard && window.isSecureContext) {
console.log('확인11', objectNo)
await navigator.clipboard
.writeText(objectNo)
.then(() => {
alert(getMessage('stuff.detail.header.successCopy'))
})
.catch((err) => {
.catch(() => {
alert(getMessage('stuff.detail.header.failCopy'))
})
} else {
console.log('확인22', objectNo)
// Use the 'out of viewport hidden text area' trick
const textArea = document.createElement('textArea')
textArea.value = objectNo
@ -45,7 +43,6 @@ export default function StuffHeader() {
textArea.select()
try {
console.log('deprecated::document.execCommand(`copy`)', document.execCommand('copy'))
document.execCommand('copy')
alert(getMessage('stuff.detail.header.successCopy'))
} catch (err) {

View File

@ -27,13 +27,10 @@ export default function StuffPlanQGrid(props) {
planGridData ? setRowData(planGridData) : ''
}, [planGridData])
// const onGridReady = useCallback(
// (params) => {
// setGridApi(params.api)
// planGridData ? setRowData(planGridData) : ''
// },
// [planGridData],
// )
//
const onCellDoubleClicked = useCallback((params) => {
props.getCellDoubleClicked(params)
}, [])
return (
<div className="ag-theme-quartz" style={{ height: '100%' }}>
@ -47,6 +44,7 @@ export default function StuffPlanQGrid(props) {
pagination={isPageable}
domLayout="autoHeight"
suppressCellFocus={true}
onCellDoubleClicked={onCellDoubleClicked}
overlayNoRowsTemplate={`<span className="ag-overlay-loading-center">${getMessage('stuff.grid.noData')}</span>`}
/>
</div>

View File

@ -86,14 +86,14 @@ export default function StuffSearchCondition() {
if (stuffSearch.code === 'S') {
if (stuffSearch.pageNo !== 1) {
setStuffSearch({
schObjectNo: objectNo ? objectNo : stuffSearch.schObjectNo,
schSaleStoreName: saleStoreName ? saleStoreName : '',
schAddress: address ? address : '',
schObjectName: objectName ? objectName : '',
schDispCompanyName: dispCompanyName ? dispCompanyName : '',
schObjectNo: objectNo ? objectNo.trim() : stuffSearch.schObjectNo.trim(),
schSaleStoreName: saleStoreName ? saleStoreName.trim() : '',
schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '',
schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schReceiveUser: receiveUser ? receiveUser : '',
schReceiveUser: receiveUser ? receiveUser.trim() : '',
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
@ -106,14 +106,14 @@ export default function StuffSearchCondition() {
})
} else {
setStuffSearch({
schObjectNo: objectNo ? objectNo : stuffSearch.schObjectNo,
schSaleStoreName: saleStoreName ? saleStoreName : '',
schAddress: address ? address : '',
schObjectName: objectName ? objectName : '',
schDispCompanyName: dispCompanyName ? dispCompanyName : '',
schObjectNo: objectNo ? objectNo.trim() : stuffSearch.schObjectNo.trim(),
schSaleStoreName: saleStoreName ? saleStoreName.trim() : '',
schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '',
schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schReceiveUser: receiveUser ? receiveUser : '',
schReceiveUser: receiveUser ? receiveUser.trim() : '',
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
@ -127,14 +127,14 @@ export default function StuffSearchCondition() {
}
} else if (stuffSearch.code === 'FINISH') {
setStuffSearch({
schObjectNo: objectNo,
schSaleStoreName: saleStoreName,
schAddress: address,
schObjectName: objectName,
schDispCompanyName: dispCompanyName,
schObjectNo: objectNo.trim(),
schSaleStoreName: saleStoreName.trim(),
schAddress: address.trim(),
schObjectName: objectName.trim(),
schDispCompanyName: dispCompanyName.trim(),
schSelSaleStoreId: schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId,
schReceiveUser: receiveUser,
schReceiveUser: receiveUser.trim(),
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
@ -146,14 +146,14 @@ export default function StuffSearchCondition() {
} else if (stuffSearch.code === 'E') {
if (session.storeId !== 'T01' && session.storeLvl === '1') {
setStuffSearch({
schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo,
schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName,
schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress : address,
schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName,
schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName,
schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(),
schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(),
schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(),
schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(),
schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(),
schSelSaleStoreId: otherSaleStoreId ? schSelSaleStoreId : '',
schOtherSelSaleStoreId: otherSaleStoreId,
schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser,
schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(),
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
@ -167,35 +167,34 @@ export default function StuffSearchCondition() {
} else if (session.storeId === 'T01') {
if (stuffSearch.pageNo !== 1) {
setStuffSearch({
schObjectNo: objectNo ? objectNo : stuffSearch.schObjectNo,
schSaleStoreName: saleStoreName ? saleStoreName : '',
schAddress: address ? address : '',
schObjectName: objectName ? objectName : '',
schDispCompanyName: dispCompanyName ? dispCompanyName : '',
schObjectNo: objectNo ? objectNo.trim() : stuffSearch.schObjectNo.trim(),
schSaleStoreName: saleStoreName ? saleStoreName.trim() : '',
schAddress: address ? address.trim() : '',
schObjectName: objectName ? objectName.trim() : '',
schDispCompanyName: dispCompanyName ? dispCompanyName.trim() : '',
schSelSaleStoreId: stuffSearch?.schSelSaleStoreId ? stuffSearch.schSelSaleStoreId : '',
schOtherSelSaleStoreId: stuffSearch?.schOtherSelSaleStoreId ? stuffSearch.schOtherSelSaleStoreId : '',
schReceiveUser: receiveUser ? receiveUser : '',
schReceiveUser: receiveUser ? receiveUser.trim() : '',
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
code: 'E',
startRow: 1,
endRow: 1 * stuffSearch?.pageSize,
// schSortType: stuffSearch?.schSortType ? stuffSearch.schSortType : 'R',
schSortType: 'R',
pageNo: 1,
pageSize: stuffSearch?.pageSize,
})
} else {
setStuffSearch({
schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo,
schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName,
schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress : address,
schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName,
schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName,
schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(),
schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(),
schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(),
schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(),
schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(),
schSelSaleStoreId: schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId,
schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser,
schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(),
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
@ -209,14 +208,14 @@ export default function StuffSearchCondition() {
}
} else {
setStuffSearch({
schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo,
schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName,
schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress : address,
schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName,
schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName,
schObjectNo: stuffSearch?.schObjectNo ? stuffSearch.schObjectNo.trim() : objectNo.trim(),
schSaleStoreName: stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName.trim() : saleStoreName.trim(),
schAddress: stuffSearch?.schAddress ? stuffSearch.schAddress.trim() : address.trim(),
schObjectName: stuffSearch?.schObjectName ? stuffSearch.schObjectName.trim() : objectName.trim(),
schDispCompanyName: stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName.trim() : dispCompanyName.trim(),
schSelSaleStoreId: schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId,
schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser,
schReceiveUser: stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser.trim() : receiveUser.trim(),
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
@ -230,14 +229,14 @@ export default function StuffSearchCondition() {
}
} else {
setStuffSearch({
schObjectNo: objectNo,
schSaleStoreName: saleStoreName,
schAddress: address,
schObjectName: objectName,
schDispCompanyName: dispCompanyName,
schObjectNo: objectNo.trim(),
schSaleStoreName: saleStoreName.trim(),
schAddress: address.trim(),
schObjectName: objectName.trim(),
schDispCompanyName: dispCompanyName.trim(),
schSelSaleStoreId: schSelSaleStoreId,
schOtherSelSaleStoreId: otherSaleStoreId,
schReceiveUser: receiveUser,
schReceiveUser: receiveUser.trim(),
schDateType: dateType,
schFromDt: startDate ? dayjs(startDate).format('YYYY-MM-DD') : '',
schToDt: endDate ? dayjs(endDate).format('YYYY-MM-DD') : '',
@ -347,6 +346,8 @@ export default function StuffSearchCondition() {
get({ url: url }).then((res) => {
if (!isEmptyArray(res)) {
res.map((row) => {
//#399
row.saleStoreName = row.saleStoreName + ' - ' + row.saleStoreId
row.value = row.saleStoreId
row.label = row.saleStoreName
})
@ -367,6 +368,8 @@ export default function StuffSearchCondition() {
get({ url: url }).then((res) => {
if (!isEmptyArray(res)) {
res.map((row) => {
//#399
row.saleStoreName = row.saleStoreName + ' - ' + row.saleStoreId
row.value = row.saleStoreId
row.label = row.saleStoreName
})
@ -456,6 +459,8 @@ export default function StuffSearchCondition() {
get({ url: url }).then((res) => {
if (!isEmptyArray(res)) {
res.map((row) => {
//#399
row.saleStoreName = row.saleStoreName + ' - ' + row.saleStoreId
row.value = row.saleStoreId
row.label = row.saleStoreName
})
@ -474,6 +479,10 @@ export default function StuffSearchCondition() {
if (stuffSearch.code === 'S') {
stuffSearch.schSelSaleStoreId = ''
stuffSearch.schOtherSelSaleStoreId = ''
} else if (stuffSearch.code === 'E') {
//#401
stuffSearch.schSelSaleStoreId = ''
stuffSearch.schOtherSelSaleStoreId = ''
}
//2

View File

@ -42,7 +42,7 @@ export function useRoofFn() {
const cols = Math.floor(patternSourceCanvas.width / patternSize.width)
ctx.strokeStyle = mode === 'allPainted' ? 'black' : ROOF_COLOR[index]
ctx.lineWidth = mode === 'allPainted' ? 1 : 0.4
ctx.lineWidth = 2
ctx.fillStyle = mode === 'allPainted' ? 'rgba(0, 159, 64, 0.7)' : 'white'
if (trestleMode) {

View File

@ -43,6 +43,8 @@ const defaultDotLineGridSetting = {
LINE: false,
}
let previousRoofMaterialsYn = 'N'; // 지붕재 select 정보 비교 후 변경된 것이 없으면 1회만 실행
export function useCanvasSetting() {
const canvas = useRecoilValue(canvasState)
// canvas가 null이 아닐 때에만 getObjects 호출
@ -147,12 +149,13 @@ export function useCanvasSetting() {
const previousRoofMaterialsRef = useRef(null);
useEffect(() => { // 지붕재 select 정보 비교 후 변경된 것이 없으면 1회만 실행
if (JSON.stringify(previousRoofMaterialsRef.current) !== JSON.stringify(roofMaterials)) {
// 지붕재 select 정보가 존재해야 배치면초기설정 DB 정보 비교 후 지붕재 정보를 가져올 수 있음
if (roofMaterials) {
useEffect(() => {
// 지붕재 select 정보가 존재해야 배치면초기설정 DB 정보 비교 후 지붕재 정보를 가져올 수 있음
if (roofMaterials.length !== 0 && JSON.stringify(previousRoofMaterialsRef.current) !== JSON.stringify(roofMaterials)) {
// 지붕재 select 정보 비교 후 변경된 것이 없으면 1회만 실행
if (roofMaterials && previousRoofMaterialsYn === 'N') {
fetchBasicSettings();
previousRoofMaterialsYn = 'Y';
}
// 이전 값을 업데이트

View File

@ -157,7 +157,7 @@ export function useRoofAllocationSetting(id) {
}
const apply = () => {
const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF && !obj.isFixed)
const roofBases = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.ROOF)
const wallLines = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.WALL)
roofBases.forEach((roofBase) => {
try {

View File

@ -103,6 +103,7 @@ export function useRoofShapePassivitySetting(id) {
strokeWidth,
})
})
canvas.renderAll()
if (!currentObject) {
return
}
@ -116,7 +117,6 @@ export function useRoofShapePassivitySetting(id) {
})
currentLineRef.current = currentObject
canvas.renderAll()
}, [currentObject])

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff