Compare commits

..

21 Commits

Author SHA1 Message Date
df712657c3 Merge pull request 'dev' (#799) from dev into prd-deploy
Reviewed-on: #799
2026-04-28 18:07:08 +09:00
0e3acedf2d 평면도 확정 시 확인 다이얼로그 추가 (버튼/Enter 키) 2026-04-27 17:43:35 +09:00
7d1e49a158 외벽선 확정 시 확인 다이얼로그 추가 (버튼/Enter 키) 2026-04-27 17:28:00 +09:00
1d00e000be 잔여선 삭제 및 라벨표시(local) 2026-04-27 15:11:39 +09:00
428ff36afb 라인줄표시, 인덱스 재설치 2026-04-27 13:24:21 +09:00
6b02b2cad0 빌드 오류 수정: debugLabels import 제거
dev-deploy 빌드에서 untracked 파일(@/util/debugLabels) 참조로 실패.
디버그 전용 라벨 부착 호출은 로컬 한정이므로 커밋 대상에서 제거.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-27 13:20:19 +09:00
8fef6c9f28 라인줄표시, 인덱스 재설치 2026-04-27 13:09:28 +09:00
26b583e2f5 라인오버하면 평행라인으로 변경 2026-04-24 20:02:39 +09:00
01b9625a13 [1806]서까래 높이 조정에 따른 지붕 형상 불일치 - 라인오버체크2 2026-04-23 15:24:21 +09:00
3c1a1f89b4 보조라인 맞춤 2026-04-23 12:24:21 +09:00
7a987116b8 sk라인 기록 보존 2026-04-22 16:39:28 +09:00
0eb888fbb9 Cross Mix(DC3) 접속함을 PCS 담당 모듈 타입으로 필터링해 1건만 내려가도록 통합 로직 적용 2026-04-22 13:35:47 +09:00
795c9789bd PassivityCircuitAllocation에 전달하던 미사용 ref prop 제거
passivityCircuitAllocationRef (useRef) 선언 제거
원인: function component에 ref 전달 시 React warning 발생 (forwardRef 미사용)
PCS 접속함 응답에 추가된 moduleTpCd 필드를 Cross Mix 식별을 위해 프론트 상태 보존 및 getQuotationItem 제출 파라미터까지 흘려보내고, dedupe 키를 (itemId, moduleTpCd) 조합으로 변경.
2026-04-21 17:51:47 +09:00
cd2c2d0b91 Merge branch 'dev' of https://git.hanasys.jp/qcast3/qcast-front into hotfix/dev_yscha 2026-04-21 16:10:36 +09:00
f022956c44 trestles[]에 subModuleTpCd 추가 (Cross Mix 식별용, 단일/동계열은 빈 값) 2026-04-21 16:10:15 +09:00
554e1cc876 Merge pull request '[1960]출력된 [배치도·계통도]에 가대가 표시되는 경우' (#785) from hotfix/dev_yscha into dev
Reviewed-on: #785
2026-04-17 18:05:29 +09:00
4d91da5f9d [1960]출력된 [배치도·계통도]에 가대가 표시되는 경우 2026-04-17 18:04:05 +09:00
83101a8e09 Merge branch 'dev' of https://git.hanasys.jp/qcast3/qcast-front into hotfix/dev_yscha 2026-04-16 13:18:59 +09:00
caab0d9d81 [1806]서까래 높이 조정에 따른 지붕 형상 불일치 - 라인오버체크 2026-04-16 13:18:39 +09:00
a40c47699c 회로 설정 이상 수정 2026-04-16 11:23:23 +09:00
b9bb4708a8 [1485] 오브젝트 복사기능 권한 설정 2026-04-15 17:59:28 +09:00
2 changed files with 44 additions and 13 deletions

View File

@ -2,6 +2,8 @@
import { useEffect, useState, useContext, useRef } from 'react'
import { useMessage } from '@/hooks/useMessage'
import { useAxios } from '@/hooks/useAxios'
import { useRecoilValue } from 'recoil'
import { globalLocaleStore } from '@/store/localeAtom'
import Select from 'react-select'
import { SessionContext } from '@/app/SessionProvider'
import { isEmptyArray, isObjectNotEmpty } from '@/util/common-utils'
@ -10,24 +12,35 @@ import { useEstimateController } from '@/hooks/floorPlan/estimate/useEstimateCon
export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
const { getMessage } = useMessage()
const { get } = useAxios()
const globalLocale = useRecoilValue(globalLocaleStore)
const { handleEstimateCopy, estimateContextState } = useEstimateController(planNo, true)
const { session } = useContext(SessionContext)
// storeLvl
const lvl = session?.storeLvl || '1'
const nextLvl = Number(lvl) + 1
const saleStoreLabel = globalLocale === 'ko'
? `${lvl}차 판매점명 / ID`
: `${lvl}次販売店名/ID`
const otherSaleStoreLabel = globalLocale === 'ko'
? `${nextLvl}차+하위 판매점명 / ID`
: `${nextLvl}次下位販売店名/ID`
const [saleStoreList, setSaleStoreList] = useState([]) //
const [favoriteStoreList, setFavoriteStoreList] = useState([]) //
const [showSaleStoreList, setShowSaleStoreList] = useState([]) //
const [otherSaleStoreList, setOtherSaleStoreList] = useState([])
const [originOtherSaleStoreList, setOriginOtherSaleStoreList] = useState([])
const [saleStoreId, setSaleStoreId] = useState('') // 1
const [otherSaleStoreId, setOtherSaleStoreId] = useState('') // 1
const [saleStoreId, setSaleStoreId] = useState('') //
const [saleStoreName, setSaleStoreName] = useState('') //
const [otherSaleStoreId, setOtherSaleStoreId] = useState('') //
const [sendPlanNo, setSendPlanNo] = useState('1')
const [copyReceiveUser, setCopyReceiveUser] = useState('')
const ref = useRef() //2
const ref = useRef() //
useEffect(() => {
let url
@ -40,8 +53,9 @@ export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
if (session.storeLvl === '1') {
url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}`
} else {
//T01 or 1
// url = `/api/object/saleStore/${session?.storeId}/list?firstFlg=1&userId=${session?.userId}`
// 2+ : ,
setSaleStoreId(session?.storeId)
url = `/api/object/saleStore/${session?.storeId}/childList?storeLvl=${session?.storeLvl}&userId=${session?.userId}`
}
}
@ -91,7 +105,14 @@ export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
setOtherSaleStoreList(otherList)
} else {
//T01 or 1
// 2+ : ,
const myself = res.find((row) => row.saleStoreId === session?.storeId)
if (myself) {
setSaleStoreName(myself.saleStoreName)
}
otherList = res.filter((row) => row.saleStoreId !== session?.storeId)
setOtherSaleStoreList(otherList)
setOriginOtherSaleStoreList(otherList)
}
}
}
@ -119,7 +140,7 @@ export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
}
}
// 1
//
const onSelectionChange = (key) => {
if (isObjectNotEmpty(key)) {
if (key.saleStoreId === saleStoreId) {
@ -154,7 +175,7 @@ export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
}
}
// 2
//
const onSelectionChange2 = (key) => {
if (isObjectNotEmpty(key)) {
if (key.saleStoreId === otherSaleStoreId) {
@ -169,7 +190,7 @@ export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
}
}
//2
//
const handleClear = () => {
if (ref.current) {
ref.current.clearValue()
@ -198,7 +219,7 @@ export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
<div className="estimate-copy-info-wrap">
<div className="estimate-copy-info-item">
<div className="estimate-copy-info-tit">
{getMessage('estimate.detail.estimateCopyPopup.label.saleStoreId')} <span className="red">*</span>
{saleStoreLabel} <span className="red">*</span>
</div>
{session.storeId === 'T01' && (
<div className="estimate-copy-info-box">
@ -247,9 +268,17 @@ export default function EstimateCopyPop({ planNo, setEstimateCopyPopupOpen }) {
<div className="estimate-copy-id">{saleStoreId}</div>
</div>
)}
{session.storeId !== 'T01' && session.storeLvl !== '1' && (
<div className="estimate-copy-info-box">
<div className="estimate-copy-sel">
<input type="text" className="input-light" value={saleStoreName || ''} disabled />
</div>
<div className="estimate-copy-id">{saleStoreId}</div>
</div>
)}
</div>
<div className="estimate-copy-info-item">
<div className="estimate-copy-info-tit">{getMessage('estimate.detail.estimateCopyPopup.label.otherSaleStoreId')}</div>
<div className="estimate-copy-info-tit">{otherSaleStoreLabel}</div>
<div className="estimate-copy-info-box">
<div className="estimate-copy-sel">
<Select

View File

@ -455,6 +455,7 @@ export default function CanvasMenu(props) {
if (createUser && tempFlg && lockFlg) {
if (createUser === 'T01' && sessionState.storeId !== 'T01') {
setAllButtonStyles('none')
setCopyButtonStyle('')
} else {
handleButtonStyles(tempFlg, lockFlg, docNo)
}
@ -516,6 +517,7 @@ export default function CanvasMenu(props) {
if (createUser && tempFlg && lockFlg) {
if (createUser === 'T01' && sessionState.storeId !== 'T01') {
setAllButtonStyles('none')
setCopyButtonStyle('')
} else {
setEstimateContextState({
tempFlg: estimateRecoilState.tempFlg,
@ -693,7 +695,7 @@ export default function CanvasMenu(props) {
<span className="name">{getMessage('plan.menu.estimate.reset')}</span>
</button>
{estimateRecoilState?.docNo !== null && (sessionState.storeId === 'T01' || sessionState.storeLvl === '1') && (
{estimateRecoilState?.docNo !== null && (sessionState.storeId === 'T01' || sessionState.storeLvl) && (
<button
type="button"
style={{ display: copyButtonStyle }}