From e61913355e539a42fd19abe694d5e853a981be7d Mon Sep 17 00:00:00 2001 From: yscha Date: Sun, 11 Jan 2026 15:24:43 +0900 Subject: [PATCH 1/4] =?UTF-8?q?1=EC=B0=A8=EC=A0=90=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=A7=8C=EB=93=A0=20=EA=B2=AC=EC=A0=81=EC=84=9C=202=EC=B0=A8?= =?UTF-8?q?=EC=A0=90=20=EA=B0=80=EA=B2=A9=20=EB=AF=B8=EB=85=B8=EC=B6=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/popup/DocDownOptionPop.jsx | 5 +++-- src/components/management/StuffDetail.jsx | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/components/estimate/popup/DocDownOptionPop.jsx b/src/components/estimate/popup/DocDownOptionPop.jsx index f5a967f1..9a48999f 100644 --- a/src/components/estimate/popup/DocDownOptionPop.jsx +++ b/src/components/estimate/popup/DocDownOptionPop.jsx @@ -8,7 +8,7 @@ import { usePathname, useSearchParams } from 'next/navigation' import { QcastContext } from '@/app/QcastProvider' import { sessionStore } from '@/store/commonAtom' -export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg }) { +export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg, saleStoreId = '' }) { const { setIsGlobalLoading } = useContext(QcastContext) const { getMessage } = useMessage() @@ -69,7 +69,8 @@ export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDown schDrawingFlg: defaultSchDrawingFlg, pwrGnrSimType: 'D', //default 화면에 안보여줌 userId: sessionState.userId ? sessionState.userId : "", - saleStoreId: sessionState.storeId ? sessionState.storeId : "", + saleStoreId: saleStoreId ? saleStoreId : (sessionState.saleStoreId ? sessionState.saleStoreId : ""), + storeLvl: sessionState.storeLvl } const options = { responseType: 'blob' } diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index cc9d71ea..611ba72a 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -2936,7 +2936,7 @@ export default function StuffDetail() { )} - {estimatePopupOpen && } + {estimatePopupOpen && } ) } From bdd7a475d51c3f126496cd7f89c3a08eb6a03215 Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 12 Jan 2026 11:08:49 +0900 Subject: [PATCH 2/4] =?UTF-8?q?1=EC=B0=A8=EC=A0=90=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?2=EC=B0=A8=EC=A0=90=20=EA=B0=80=EA=B2=A9=20=EB=AF=B8=EB=85=B8?= =?UTF-8?q?=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/popup/DocDownOptionPop.jsx | 7 ++++--- src/components/management/StuffDetail.jsx | 7 ++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/components/estimate/popup/DocDownOptionPop.jsx b/src/components/estimate/popup/DocDownOptionPop.jsx index 9a48999f..2f250646 100644 --- a/src/components/estimate/popup/DocDownOptionPop.jsx +++ b/src/components/estimate/popup/DocDownOptionPop.jsx @@ -8,7 +8,7 @@ import { usePathname, useSearchParams } from 'next/navigation' import { QcastContext } from '@/app/QcastProvider' import { sessionStore } from '@/store/commonAtom' -export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg, saleStoreId = '' }) { +export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDownPopLockFlg, createStoreId = '' }) { const { setIsGlobalLoading } = useContext(QcastContext) const { getMessage } = useMessage() @@ -69,8 +69,9 @@ export default function DocDownOptionPop({ planNo, setEstimatePopupOpen, docDown schDrawingFlg: defaultSchDrawingFlg, pwrGnrSimType: 'D', //default 화면에 안보여줌 userId: sessionState.userId ? sessionState.userId : "", - saleStoreId: saleStoreId ? saleStoreId : (sessionState.saleStoreId ? sessionState.saleStoreId : ""), - storeLvl: sessionState.storeLvl + saleStoreId: sessionState.storeId ? sessionState.storeId : "", + storeLvl: sessionState.storeLvl, + createStoreId: createStoreId ? createStoreId : '', } const options = { responseType: 'blob' } diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 611ba72a..75db2623 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -54,6 +54,8 @@ export default function StuffDetail() { const globalLocaleState = useRecoilValue(globalLocaleStore) const ref = useRef() const { get, promiseGet, del, promisePost, promisePut } = useAxios(globalLocaleState) + const [createSaleStoreId, setCreateSaleStoreId] = useState('') + //form const formInitValue = { // 물건번호 T...(임시) S...(진짜) @@ -350,6 +352,9 @@ export default function StuffDetail() { promiseGet({ url: `/api/object/${objectNo}/detail` }).then((res) => { setIsGlobalLoading(false) if (res.status === 200) { + + setCreateSaleStoreId(res?.data?.createSaleStoreId); + if (res?.data?.createSaleStoreId === 'T01') { if (session?.storeId !== 'T01') { setShowButton('none') @@ -2936,7 +2941,7 @@ export default function StuffDetail() { )} - {estimatePopupOpen && } + {estimatePopupOpen && } ) } From aa837d8dbf3e6344f9ee59b2aca4c037d8ccdfe1 Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 12 Jan 2026 11:12:29 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=EB=B8=94=EB=9F=AD=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/common/input/CalcInput.jsx | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/components/common/input/CalcInput.jsx b/src/components/common/input/CalcInput.jsx index 9cfddfd4..e8a97b93 100644 --- a/src/components/common/input/CalcInput.jsx +++ b/src/components/common/input/CalcInput.jsx @@ -63,6 +63,33 @@ export const CalculatorInput = forwardRef( const calculator = calculatorRef.current let newDisplayValue = '' + // 블록 지정(Selection) 확인 및 처리 + if (inputRef.current) { + const { selectionStart, selectionEnd } = inputRef.current + // 텍스트 전체 또는 일부가 블록 지정된 경우 + if (selectionStart !== null && selectionEnd !== null && selectionStart !== selectionEnd) { + // 연산 중이 아닐 때만 전체 초기화 후 입력 처리 (계산기 모드 유지를 위해) + if (!hasOperation) { + calculator.currentOperand = num.toString() + calculator.previousOperand = '' + calculator.operation = undefined + calculator.shouldResetDisplay = false + + newDisplayValue = calculator.currentOperand + setDisplayValue(newDisplayValue) + onChange(newDisplayValue) + + requestAnimationFrame(() => { + if (inputRef.current) { + inputRef.current.focus() + inputRef.current.setSelectionRange(newDisplayValue.length, newDisplayValue.length) + } + }) + return // 블록 처리 로직 완료 후 종료 + } + } + } + // maxLength 체크 if (maxLength > 0) { const currentLength = (calculator.currentOperand || '').length + (calculator.previousOperand || '').length + (calculator.operation || '').length From 3dd96d043fc7055af4c298549d94c13b1c53fa4e Mon Sep 17 00:00:00 2001 From: ysCha Date: Mon, 12 Jan 2026 15:38:21 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[1383]=EA=B2=AC=EC=A0=81=EC=84=9C=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=9D=B8=EC=BD=94=EB=94=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/estimate/Estimate.jsx | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index ee2fab4b..9107dde0 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -2039,7 +2039,11 @@ export default function Estimate({}) { } }} menuPlacement={'auto'} - getOptionLabel={(x) => x.itemName + ' (' + x.itemNo + ')'} + getOptionLabel={(x) => { + // 메뉴 리스트에 보이는 텍스트 디코딩 + const doc = new DOMParser().parseFromString(x.itemName, 'text/html'); + return (doc.documentElement.textContent || x.itemName) + ' (' + x.itemNo + ')'; + }} getOptionValue={(x) => x.itemNo} components={{ SingleValue: ({ children, ...props }) => { @@ -2048,13 +2052,21 @@ export default function Estimate({}) { }} isClearable={false} isDisabled={!!item?.paDispOrder} - value={displayItemList.filter(function (option) { - if (item.itemNo === '') { - return false - } else { - return option.itemId === item.itemId + value={(() => { + const selectedOption = displayItemList.find((option) => { + return item.itemNo !== '' && option.itemId === item.itemId; + }); + + if (selectedOption) { + // 현재 선택된 값의 itemName을 실시간으로 디코딩하여 전달 + const doc = new DOMParser().parseFromString(selectedOption.itemName, 'text/html'); + return { + ...selectedOption, + itemName: doc.documentElement.textContent || selectedOption.itemName + }; } - })} + return null; + })()} /> ) : (