From 6f7f406e97418ce53e438241658f8a1b5796cc0a Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Tue, 1 Jul 2025 10:47:51 +0900 Subject: [PATCH 1/8] fix: delete console.log --- src/hooks/useSurvey.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/hooks/useSurvey.ts b/src/hooks/useSurvey.ts index c76ce56..6de1d11 100644 --- a/src/hooks/useSurvey.ts +++ b/src/hooks/useSurvey.ts @@ -253,7 +253,6 @@ export function useSurvey( false, true, ) - console.log(resp) const blob = await resp.blob() if (!blob || blob.size === 0) { @@ -264,7 +263,7 @@ export function useSurvey( const url = window.URL.createObjectURL(blob) const a = document.createElement('a') a.href = url - a.download = `${filename}.pdf` + a.download = `${filename}` a.click() window.URL.revokeObjectURL(url) -- 2.47.2 From 334db221c9c0512d1c25c8d8959c81c7f855ed24 Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Tue, 1 Jul 2025 11:14:33 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20admin=20=EC=A0=9C=EC=B6=9C=20?= =?UTF-8?q?=EB=8C=80=EC=83=81=20=EC=9D=B4=EB=A6=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/popup/SurveySaleSubmitPopup.tsx | 4 +++- src/components/survey-sale/detail/ButtonForm.tsx | 16 ++++++++++------ src/components/survey-sale/detail/DataTable.tsx | 8 +++----- src/types/Survey.ts | 1 + 4 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/components/popup/SurveySaleSubmitPopup.tsx b/src/components/popup/SurveySaleSubmitPopup.tsx index b482da5..508d4f9 100644 --- a/src/components/popup/SurveySaleSubmitPopup.tsx +++ b/src/components/popup/SurveySaleSubmitPopup.tsx @@ -2,13 +2,14 @@ import Image from 'next/image' import { usePopupController } from '@/store/popupController' import { useParams } from 'next/navigation' import { useSurvey } from '@/hooks/useSurvey' -import { useEffect, useRef, useState } from 'react' +import { useEffect, useState } from 'react' import { useSessionStore } from '@/store/session' import { useCommCode } from '@/hooks/useCommCode' import { CommCode } from '@/types/CommCode' import { sendEmail } from '@/libs/mailer' import { useSpinnerStore } from '@/store/spinnerStore' import { CONFIRM_MESSAGE, SUCCESS_MESSAGE, ERROR_MESSAGE, useAlertMsg, WARNING_MESSAGE } from '@/hooks/useAlertMsg' +import { ADMIN_SUBMIT_TARGET_NM } from '@/types/Survey' interface SubmitFormData { saleBase: string | null @@ -65,6 +66,7 @@ export default function SurveySaleSubmitPopup() { setSubmitData((prev) => ({ ...prev, ...baseUpdate, + targetNm: ADMIN_SUBMIT_TARGET_NM, })) /** Builder, Admin_Sub 제출 폼 데이터 삽입 - 2차 판매점, 2차 판매점 시공권한*/ } else if (session?.role === 'Builder' || session?.role === 'Admin_Sub') { diff --git a/src/components/survey-sale/detail/ButtonForm.tsx b/src/components/survey-sale/detail/ButtonForm.tsx index 732b5ec..479a85d 100644 --- a/src/components/survey-sale/detail/ButtonForm.tsx +++ b/src/components/survey-sale/detail/ButtonForm.tsx @@ -1,12 +1,13 @@ 'use client' import type { Mode, SurveyBasicRequest, SurveyDetailInfo, SurveyDetailRequest } from '@/types/Survey' -import { useSessionStore } from '@/store/session' -import { useEffect, useState } from 'react' -import { useParams, useRouter } from 'next/navigation' -import { requiredFields, useSurvey } from '@/hooks/useSurvey' -import { usePopupController } from '@/store/popupController' import { CONFIRM_MESSAGE, SUCCESS_MESSAGE, useAlertMsg, WARNING_MESSAGE } from '@/hooks/useAlertMsg' +import { ADMIN_SUBMIT_TARGET_NM } from '@/types/Survey' +import { useSessionStore } from '@/store/session' +import { useParams, useRouter } from 'next/navigation' +import { useEffect, useState } from 'react' +import { usePopupController } from '@/store/popupController' +import { requiredFields, useSurvey } from '@/hooks/useSurvey' interface ButtonFormProps { mode: Mode @@ -68,7 +69,10 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { const calculatePermissions = (session: any, basicData: SurveyBasicRequest): PermissionState => { const isSubmiter = calculateSubmitPermission(session, basicData) const isWriter = session.userId === basicData.representativeId - const isReceiver = session?.storeId === basicData.submissionTargetId || session?.storeNm === basicData.submissionTargetNm + const isReceiver = + session?.storeId === basicData.submissionTargetId || + session?.storeNm === basicData.submissionTargetNm || + (session?.role === 'T01' && basicData.submissionTargetNm === ADMIN_SUBMIT_TARGET_NM) return { isSubmiter, isWriter, isReceiver } } diff --git a/src/components/survey-sale/detail/DataTable.tsx b/src/components/survey-sale/detail/DataTable.tsx index a04f906..6d21ec5 100644 --- a/src/components/survey-sale/detail/DataTable.tsx +++ b/src/components/survey-sale/detail/DataTable.tsx @@ -1,21 +1,19 @@ 'use client' -import { useRouter } from 'next/navigation' import { SurveyBasicInfo } from '@/types/Survey' import { useSurvey } from '@/hooks/useSurvey' export default function DataTable({ surveyDetail }: { surveyDetail: SurveyBasicInfo }) { - const router = useRouter() /** 제출 상태 처리 */ const submitStatus = () => { const { submissionTargetNm, submissionTargetId } = surveyDetail ?? {} - if (!submissionTargetId && !submissionTargetNm) { - return
( Hanwha Japan )
- } if (!submissionTargetId && submissionTargetNm) { return
( {submissionTargetNm} )
} + if (!submissionTargetId && !submissionTargetNm) { + return null + } return (
({submissionTargetNm} - {submissionTargetId}) diff --git a/src/types/Survey.ts b/src/types/Survey.ts index 8cc8d55..481d994 100644 --- a/src/types/Survey.ts +++ b/src/types/Survey.ts @@ -324,6 +324,7 @@ export type SurveySearchParams = { builderId?: string | null } +export const ADMIN_SUBMIT_TARGET_NM = 'Hanwha Japan' type RadioEtcKeys = | 'structureOrder' -- 2.47.2 From f693062d969fe601b11e4b18822555fde4aaa673 Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Wed, 2 Jul 2025 10:31:13 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat:=20=EB=82=B4=EA=B0=80=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=ED=95=9C=20=EB=A7=A4=EB=AC=BC/=EB=AC=B8=EC=9D=98=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EB=B3=84=20=EC=A0=81=EC=9A=A9=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 메인 화면에서 진입 시 내가 작성한 매물/문의 해제 - 사이드바에서 진입 시 내가 작성환 매물/문의 체크 --- src/components/inquiry/RegistForm.tsx | 11 +++++-- src/components/inquiry/list/ListForm.tsx | 15 +++++++--- src/components/inquiry/list/ListTable.tsx | 29 ++++++++++++------- src/components/survey-sale/list/ListTable.tsx | 22 ++++++++++---- .../survey-sale/list/SearchForm.tsx | 13 ++++++--- src/components/ui/Main.tsx | 4 +-- src/components/ui/common/Header.tsx | 11 ++----- src/hooks/useInquiry.ts | 6 ++-- src/store/inquiryFilterStore.ts | 13 +++++---- src/types/Inquiry.ts | 2 -- 10 files changed, 79 insertions(+), 47 deletions(-) diff --git a/src/components/inquiry/RegistForm.tsx b/src/components/inquiry/RegistForm.tsx index 21e4e61..e44dd82 100644 --- a/src/components/inquiry/RegistForm.tsx +++ b/src/components/inquiry/RegistForm.tsx @@ -6,13 +6,14 @@ import { InquiryRequest } from '@/types/Inquiry' import { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { CONFIRM_MESSAGE, SUCCESS_MESSAGE, useAlertMsg, WARNING_MESSAGE } from '@/hooks/useAlertMsg' +import { useInquiryFilterStore } from '@/store/inquiryFilterStore' export default function RegistForm() { const { saveInquiry, isSavingInquiry, commonCodeList } = useInquiry(undefined, false) const { showErrorAlert, showSuccessAlert, showConfirm } = useAlertMsg() const { session } = useSessionStore() const router = useRouter() - + const { setIsMyInquiry } = useInquiryFilterStore() const [inquiryRequest, setInquiryRequest] = useState({ compCd: '5200', siteTpCd: 'QC', @@ -301,7 +302,13 @@ export default function RegistForm() {
- +
調査物件一覧
@@ -46,7 +46,7 @@ export default function Main() {
- +
1:1お問い合わせ リスト
diff --git a/src/components/ui/common/Header.tsx b/src/components/ui/common/Header.tsx index 3c146cb..dc741de 100644 --- a/src/components/ui/common/Header.tsx +++ b/src/components/ui/common/Header.tsx @@ -11,8 +11,6 @@ import { useSideNavState } from '@/store/sideNavState' import { useHeaderStore } from '@/store/header' import { useSessionStore } from '@/store/session' import { usePopupController } from '@/store/popupController' -import { useSurveyFilterStore } from '@/store/surveyFilterStore' -import { useInquiryFilterStore } from '@/store/inquiryFilterStore' import { useTitle } from '@/hooks/useTitle' import { useAxios } from '@/hooks/useAxios' @@ -32,9 +30,6 @@ export default function Header() { const popupController = usePopupController() - const { setIsMySurvey } = useSurveyFilterStore() - const { setInquiryListRequest, inquiryListRequest } = useInquiryFilterStore() - if (pathname === '/login') { return null } @@ -88,8 +83,7 @@ export default function Header() {
{ - setIsMySurvey(session?.userId) - router.push('/survey-sale') + router.push('/survey-sale?isMySurvey=true') setSideNavIsOpen(false) }} > @@ -101,8 +95,7 @@ export default function Header() {
{ - setInquiryListRequest({ ...inquiryListRequest, schRegId: session?.userId }) - router.push('/inquiry/list') + router.push('/inquiry/list?isMyInquiry=true') setSideNavIsOpen(false) }} > diff --git a/src/hooks/useInquiry.ts b/src/hooks/useInquiry.ts index 3533084..6525638 100644 --- a/src/hooks/useInquiry.ts +++ b/src/hooks/useInquiry.ts @@ -35,7 +35,7 @@ export function useInquiry( commonCodeList: CommonCode[] } { const queryClient = useQueryClient() - const { inquiryListRequest, offset } = useInquiryFilterStore() + const { inquiryListRequest, offset, isMyInquiry } = useInquiryFilterStore() const { axiosInstance } = useAxios() const router = useRouter() const { showErrorAlert } = useAlertMsg() @@ -104,7 +104,7 @@ export function useInquiry( * @returns {boolean} isLoading - 문의사항 목록 로딩 상태 */ const { data: inquiryList, isLoading: isLoadingInquiryList } = useQuery({ - queryKey: ['inquiryList', inquiryListRequest, offset], + queryKey: ['inquiryList', inquiryListRequest.loginId, inquiryListRequest.schTitle, inquiryListRequest.schAnswerYn, offset, isMyInquiry], queryFn: async () => { const isListQuery = true const shouldThrowError = false @@ -112,7 +112,7 @@ export function useInquiry( const resp = await tryFunction( () => axiosInstance(null).get<{ data: InquiryList[] }>(`/api/qna/list`, { - params: { inquiryListRequest, startRow: offset, endRow: offset + 9 }, + params: { inquiryListRequest, startRow: offset, endRow: offset + 9, schRegId: isMyInquiry }, }), isListQuery, shouldThrowError, diff --git a/src/store/inquiryFilterStore.ts b/src/store/inquiryFilterStore.ts index 6a3f676..47fea1e 100644 --- a/src/store/inquiryFilterStore.ts +++ b/src/store/inquiryFilterStore.ts @@ -10,6 +10,8 @@ type InquiryFilterState = { reset: () => void offset: number setOffset: (offset: number) => void + isMyInquiry: string | null + setIsMyInquiry: (isMyInquiry: string | null) => void } /** @@ -28,7 +30,6 @@ export const useInquiryFilterStore = create((set) => ({ storeId: '', siteTpCd: 'QC', schTitle: null, - schRegId: null, schFromDt: null, schToDt: null, schAnswerYn: null, @@ -42,15 +43,17 @@ export const useInquiryFilterStore = create((set) => ({ langCd: 'JA', storeId: '', siteTpCd: 'QC', - schTitle: '', - schRegId: '', - schFromDt: '', - schToDt: '', + schTitle: null, + schFromDt: null, + schToDt: null, schAnswerYn: null, loginId: '', }, offset: 1, + isMyInquiry: null, }), offset: 1, setOffset: (offset) => set({ offset }), + isMyInquiry: null, + setIsMyInquiry: (isMyInquiry) => set({ isMyInquiry }), })) diff --git a/src/types/Inquiry.ts b/src/types/Inquiry.ts index 646cce7..ee2cfe9 100644 --- a/src/types/Inquiry.ts +++ b/src/types/Inquiry.ts @@ -12,8 +12,6 @@ export type InquiryListRequest = { siteTpCd: string /* 검색 제목 */ schTitle: string | null - /* 검색 등록자 ID */ - schRegId: string | null /* 검색 시작 일자 */ schFromDt: string | null /* 검색 종료 일자 */ -- 2.47.2 From 9c9ddd16b663b393dfdbf9c9877a4d816e0a19ec Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Wed, 2 Jul 2025 10:34:03 +0900 Subject: [PATCH 4/8] =?UTF-8?q?style:=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EB=B9=88=20=EA=B0=92=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=20=ED=95=98?= =?UTF-8?q?=EC=9D=B4=ED=94=88(-)=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/inquiry/Detail.tsx | 2 +- src/components/popup/SurveySaleSubmitPopup.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/inquiry/Detail.tsx b/src/components/inquiry/Detail.tsx index 3470c10..eaac1fe 100644 --- a/src/components/inquiry/Detail.tsx +++ b/src/components/inquiry/Detail.tsx @@ -56,7 +56,7 @@ export default function Detail() { お問い合わせ - {inquiryDetail?.regUserTelNo} + {inquiryDetail?.regUserTelNo ? inquiryDetail?.regUserTelNo : '-'} diff --git a/src/components/popup/SurveySaleSubmitPopup.tsx b/src/components/popup/SurveySaleSubmitPopup.tsx index 508d4f9..eba8bb1 100644 --- a/src/components/popup/SurveySaleSubmitPopup.tsx +++ b/src/components/popup/SurveySaleSubmitPopup.tsx @@ -178,7 +178,7 @@ export default function SurveySaleSubmitPopup() {

-施工店名: - ${surveyDetail?.constructionPoint} + ${surveyDetail?.constructionPoint ?? ' - '}

Date: Wed, 2 Jul 2025 10:35:47 +0900 Subject: [PATCH 5/8] =?UTF-8?q?fix:=20Alert=20=EB=A9=94=EC=84=B8=EC=A7=80?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 제출 confirm 메세지 내용 변경 - 최대/최소 값 입력 시 alert 처리 --- src/components/inquiry/RegistForm.tsx | 16 ++++++++++++++-- src/components/survey-sale/detail/RoofForm.tsx | 9 ++++++++- src/hooks/useAlertMsg.ts | 6 +++--- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/components/inquiry/RegistForm.tsx b/src/components/inquiry/RegistForm.tsx index e44dd82..2f5f677 100644 --- a/src/components/inquiry/RegistForm.tsx +++ b/src/components/inquiry/RegistForm.tsx @@ -256,7 +256,13 @@ export default function RegistForm() { className="input-frame" type="text" placeholder="お問い合わせタイトルを記入してください" - onChange={(e) => setInquiryRequest({ ...inquiryRequest, title: e.target.value })} + onChange={(e) => { + if (e.target.value.length >= 100) { + showErrorAlert(WARNING_MESSAGE.TITLE_MAX_LENGTH) + return + } + setInquiryRequest({ ...inquiryRequest, title: e.target.value }) + }} maxLength={100} id="title" /> @@ -272,7 +278,13 @@ export default function RegistForm() { rows={6} id="contents" placeholder="お問い合わせ内容を入力してください" - onChange={(e) => setInquiryRequest({ ...inquiryRequest, contents: e.target.value })} + onChange={(e) => { + if (e.target.value.length >= 2000) { + showErrorAlert(WARNING_MESSAGE.CONTENTS_MAX_LENGTH) + return + } + setInquiryRequest({ ...inquiryRequest, contents: e.target.value }) + }} value={inquiryRequest.contents} maxLength={2000} > diff --git a/src/components/survey-sale/detail/RoofForm.tsx b/src/components/survey-sale/detail/RoofForm.tsx index aa66cf5..d00d2c7 100644 --- a/src/components/survey-sale/detail/RoofForm.tsx +++ b/src/components/survey-sale/detail/RoofForm.tsx @@ -262,7 +262,14 @@ export default function RoofForm(props: { id="memo" value={roofInfo?.memo ?? ''} disabled={mode === 'READ'} - onChange={(e) => setRoofInfo({ ...roofInfo, memo: e.target.value })} + onChange={(e) => { + if (e.target.value.length >= 2000) { + showErrorAlert(WARNING_MESSAGE.CONTENTS_MAX_LENGTH) + return + } + setRoofInfo({ ...roofInfo, memo: e.target.value }) + }} + maxLength={2000} >

diff --git a/src/hooks/useAlertMsg.ts b/src/hooks/useAlertMsg.ts index d0e82b9..43b7313 100644 --- a/src/hooks/useAlertMsg.ts +++ b/src/hooks/useAlertMsg.ts @@ -28,8 +28,8 @@ export const SUCCESS_MESSAGE = { * @description 확인 메세지 상수 객체 */ export const CONFIRM_MESSAGE = { - /** 제출 확인 - "제출하시겠습니까?" */ - SUBMIT_CONFIRM: '提出しますか?', + /** 제출 확인 - "전송하시겠습니까? 전송 후에는 수정/삭제 할 수 없습니다." */ + SUBMIT_CONFIRM: '送信しますか? 送信後は変更・修正することはできません。', /** 저장 확인 - "저장하시겠습니까?" */ SAVE_CONFIRM: '保存しますか?', @@ -56,7 +56,7 @@ export const WARNING_MESSAGE = { EMAIL_PREFIX_IS_INVALID: '有効なメールアドレスを入力してください。', /** 최소값 오류 - "2자 이상 입력하세요" */ - KEYWORD_MINIMUM_LENGTH: '2文字以上入力してください', + KEYWORD_MINIMUM_LENGTH: 'タイトルを入力してください(2文字以上)。', /** 최대값 오류 - "30자 이내로 입력하세요" */ KEYWORD_MAX_LENGTH: '30文字以内で入力してください', -- 2.47.2 From a549643e699ae6d7a7279c3cb5fbe2973fdcd9b2 Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Wed, 2 Jul 2025 10:40:17 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20T01=20=EC=A0=9C=EC=B6=9C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/popup/SurveySaleSubmitPopup.tsx | 2 +- src/components/survey-sale/detail/ButtonForm.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/popup/SurveySaleSubmitPopup.tsx b/src/components/popup/SurveySaleSubmitPopup.tsx index eba8bb1..89df985 100644 --- a/src/components/popup/SurveySaleSubmitPopup.tsx +++ b/src/components/popup/SurveySaleSubmitPopup.tsx @@ -101,7 +101,7 @@ export default function SurveySaleSubmitPopup() { const FORM_FIELDS: FormField[] = [ { id: 'sender', name: '発送者', required: true }, { id: 'saleBase', name: '提出地点選択', required: session?.role === 'Admin' }, - { id: 'targetNm', name: '提出販売店', required: session?.role !== 'Admin' }, + { id: 'targetNm', name: '提出販売店', required: session?.role !== 'Admin' && session?.role !== 'T01' }, { id: 'receiver', name: '受信者', required: true }, { id: 'reference', name: '参考', required: false }, { id: 'title', name: 'タイトル', required: true }, diff --git a/src/components/survey-sale/detail/ButtonForm.tsx b/src/components/survey-sale/detail/ButtonForm.tsx index 479a85d..535aa03 100644 --- a/src/components/survey-sale/detail/ButtonForm.tsx +++ b/src/components/survey-sale/detail/ButtonForm.tsx @@ -72,7 +72,7 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { const isReceiver = session?.storeId === basicData.submissionTargetId || session?.storeNm === basicData.submissionTargetNm || - (session?.role === 'T01' && basicData.submissionTargetNm === ADMIN_SUBMIT_TARGET_NM) + (session?.role === 'T01' && basicData.submissionStatus && basicData.submissionTargetId === null && basicData.submissionTargetNm !== null) return { isSubmiter, isWriter, isReceiver } } @@ -258,7 +258,7 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { handleSave(true, false)} /> handleSave(false, false)} /> - {session?.role === 'T01' || isSubmit ? null : } + {!isSubmit && permissions.isSubmiter && }
)} -- 2.47.2 From ed36d288c55c6a481f4f9bf1de16a2c8560d3682 Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Wed, 2 Jul 2025 10:41:21 +0900 Subject: [PATCH 7/8] =?UTF-8?q?fix:=20Admin(1=EC=B0=A8=20=ED=8C=90?= =?UTF-8?q?=EB=A7=A4=EC=A0=90)=20=EC=A0=9C=EC=B6=9C=20=EB=8C=80=EC=83=81?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/popup/SurveySaleSubmitPopup.tsx | 9 ++++++--- src/types/Survey.ts | 2 -- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/components/popup/SurveySaleSubmitPopup.tsx b/src/components/popup/SurveySaleSubmitPopup.tsx index 89df985..5146d75 100644 --- a/src/components/popup/SurveySaleSubmitPopup.tsx +++ b/src/components/popup/SurveySaleSubmitPopup.tsx @@ -9,7 +9,6 @@ import { CommCode } from '@/types/CommCode' import { sendEmail } from '@/libs/mailer' import { useSpinnerStore } from '@/store/spinnerStore' import { CONFIRM_MESSAGE, SUCCESS_MESSAGE, ERROR_MESSAGE, useAlertMsg, WARNING_MESSAGE } from '@/hooks/useAlertMsg' -import { ADMIN_SUBMIT_TARGET_NM } from '@/types/Survey' interface SubmitFormData { saleBase: string | null @@ -66,7 +65,6 @@ export default function SurveySaleSubmitPopup() { setSubmitData((prev) => ({ ...prev, ...baseUpdate, - targetNm: ADMIN_SUBMIT_TARGET_NM, })) /** Builder, Admin_Sub 제출 폼 데이터 삽입 - 2차 판매점, 2차 판매점 시공권한*/ } else if (session?.role === 'Builder' || session?.role === 'Admin_Sub') { @@ -232,7 +230,12 @@ export default function SurveySaleSubmitPopup() { if (selectedOffice) { //@ts-ignore const receiver = selectedOffice.REF_CHR1.split(';') - setSubmitData((prev) => ({ ...prev, receiver: receiver, saleBase: e.target.value })) + setSubmitData((prev) => ({ + ...prev, + receiver: receiver, + saleBase: e.target.value, + targetNm: selectedOffice.codeJp ?? '', + })) } }} > diff --git a/src/types/Survey.ts b/src/types/Survey.ts index 481d994..e45ccd3 100644 --- a/src/types/Survey.ts +++ b/src/types/Survey.ts @@ -324,8 +324,6 @@ export type SurveySearchParams = { builderId?: string | null } -export const ADMIN_SUBMIT_TARGET_NM = 'Hanwha Japan' - type RadioEtcKeys = | 'structureOrder' | 'houseStructure' -- 2.47.2 From f64cc4ea41eeef83b881a1524032137f8b7d88cf Mon Sep 17 00:00:00 2001 From: keyy1315 Date: Wed, 2 Jul 2025 10:43:19 +0900 Subject: [PATCH 8/8] =?UTF-8?q?fix:=20=EC=A1=B0=EC=82=AC=EB=A7=A4=EB=AC=BC?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C/=EC=A0=9C=EC=B6=9C/=EC=A0=80=EC=9E=A5/?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=A1=B0=EA=B1=B4=20=EA=B0=95=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AdminSub(2차 판매점 super 유저) 조회 조건 강화 - 임시저장 매물 제출 조건 강화 - 미제출 매물 pdf 다운로드 버튼 비활성화 --- src/app/api/survey-sales/service.ts | 6 +++--- .../survey-sale/detail/ButtonForm.tsx | 20 ++++++++----------- .../survey-sale/detail/DataTable.tsx | 11 ++++++---- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/app/api/survey-sales/service.ts b/src/app/api/survey-sales/service.ts index 291a9f3..83c2716 100644 --- a/src/app/api/survey-sales/service.ts +++ b/src/app/api/survey-sales/service.ts @@ -124,7 +124,7 @@ export class SurveySalesService { case 'Admin_Sub': where.OR = [ { - AND: [{ STORE_ID: { equals: this.session?.storeId } }, { CONSTRUCTION_POINT_ID: { equals: this.session?.builderId } }], + AND: [{ STORE_ID: { equals: this.session?.storeId } }], }, { AND: [ @@ -440,8 +440,8 @@ export class SurveySalesService { return survey.SUBMISSION_STATUS ? survey.SUBMISSION_TARGET_ID === storeId || survey.SUBMISSION_TARGET_NM === storeNm || - (survey.STORE_ID === storeId && !survey.CONSTRUCTION_POINT_ID) - : survey.STORE_ID === storeId && !survey.CONSTRUCTION_POINT_ID + survey.STORE_ID === storeId + : survey.STORE_ID === storeId } /** diff --git a/src/components/survey-sale/detail/ButtonForm.tsx b/src/components/survey-sale/detail/ButtonForm.tsx index 535aa03..b52e071 100644 --- a/src/components/survey-sale/detail/ButtonForm.tsx +++ b/src/components/survey-sale/detail/ButtonForm.tsx @@ -2,7 +2,6 @@ import type { Mode, SurveyBasicRequest, SurveyDetailInfo, SurveyDetailRequest } from '@/types/Survey' import { CONFIRM_MESSAGE, SUCCESS_MESSAGE, useAlertMsg, WARNING_MESSAGE } from '@/hooks/useAlertMsg' -import { ADMIN_SUBMIT_TARGET_NM } from '@/types/Survey' import { useSessionStore } from '@/store/session' import { useParams, useRouter } from 'next/navigation' import { useEffect, useState } from 'react' @@ -81,10 +80,10 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { const calculateSubmitPermission = (session: any, basicData: SurveyBasicRequest): boolean => { switch (session?.role) { case 'T01': - return false case 'Admin': + return session.storeId === basicData.storeId case 'Admin_Sub': - return session.storeNm === basicData.store && session.builderId === basicData.constructionPointId + return session.storeId === basicData.storeId && session.builderId === basicData.constructionPointId case 'Builder': case 'Partner': return session.builderId === basicData.constructionPointId @@ -201,15 +200,12 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { /** 제출 로직 */ const handleSubmit = async () => { - if (data.basic.srlNo?.startsWith('一時保存') && Number.isNaN(id)) { - showErrorAlert(WARNING_MESSAGE.TEMP_CANNOT_SUBMIT) - return - } - if (mode === 'READ') { - showConfirm(CONFIRM_MESSAGE.SUBMIT_CONFIRM, async () => { - popupController.setSurveySaleSubmitPopup(true) - }) + if (data.basic.srlNo?.includes('一時保存')) { + showErrorAlert(WARNING_MESSAGE.TEMP_CANNOT_SUBMIT) + return + } + popupController.setSurveySaleSubmitPopup(true) } else { showConfirm(CONFIRM_MESSAGE.SAVE_AND_SUBMIT_CONFIRM, async () => { handleSave(false, true) @@ -220,7 +216,7 @@ export default function ButtonForm({ mode, setMode, data }: ButtonFormProps) { /** 로그인 여부 체크 */ if (!session?.isLoggedIn) return null - /** 읽기 모드, 제출 된 데이터, 제출 권한자는 리스트 버튼만 표시 */ + /** 읽기 모드, 제출 된 데이터, 제출 권한자는 리스트 버튼만 표시, 작성자만 삭제 가능*/ if (mode === 'READ' && isSubmit && permissions.isSubmiter) { return (
diff --git a/src/components/survey-sale/detail/DataTable.tsx b/src/components/survey-sale/detail/DataTable.tsx index 6d21ec5..72976d0 100644 --- a/src/components/survey-sale/detail/DataTable.tsx +++ b/src/components/survey-sale/detail/DataTable.tsx @@ -4,7 +4,6 @@ import { SurveyBasicInfo } from '@/types/Survey' import { useSurvey } from '@/hooks/useSurvey' export default function DataTable({ surveyDetail }: { surveyDetail: SurveyBasicInfo }) { - /** 제출 상태 처리 */ const submitStatus = () => { const { submissionTargetNm, submissionTargetId } = surveyDetail ?? {} @@ -65,9 +64,13 @@ export default function DataTable({ surveyDetail }: { surveyDetail: SurveyBasicI ダウンロード - + {surveyDetail.submissionStatus ? ( + + ) : ( + '-' + )} -- 2.47.2