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/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/inquiry/RegistForm.tsx b/src/components/inquiry/RegistForm.tsx index 21e4e61..2f5f677 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', @@ -255,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" /> @@ -271,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} > @@ -301,7 +314,13 @@ export default function RegistForm() {
- + {surveyDetail.submissionStatus ? ( + + ) : ( + '-' + )} 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/components/survey-sale/list/ListTable.tsx b/src/components/survey-sale/list/ListTable.tsx index 12088fe..b99c864 100644 --- a/src/components/survey-sale/list/ListTable.tsx +++ b/src/components/survey-sale/list/ListTable.tsx @@ -3,7 +3,7 @@ import LoadMoreButton from '@/components/LoadMoreButton' import { useSurvey } from '@/hooks/useSurvey' import { useEffect, useState } from 'react' -import { useRouter, usePathname } from 'next/navigation' +import { useRouter, usePathname, useSearchParams } from 'next/navigation' import SearchForm from './SearchForm' import { useSurveyFilterStore } from '@/store/surveyFilterStore' import { useSessionStore } from '@/store/session' @@ -14,20 +14,32 @@ export default function ListTable() { const pathname = usePathname() const { surveyList, isLoadingSurveyList } = useSurvey() - const { offset, setOffset } = useSurveyFilterStore() + const { offset, setOffset, setIsMySurvey, reset } = useSurveyFilterStore() const { session } = useSessionStore() const [heldSurveyList, setHeldSurveyList] = useState([]) const [hasMore, setHasMore] = useState(false) + const searchParams = useSearchParams() useEffect(() => { setOffset(0) setHeldSurveyList([]) - }, [pathname]) + }, [pathname, searchParams]) useEffect(() => { - if (isLoadingSurveyList) return + if (searchParams.get('isMySurvey') === 'true') { + setIsMySurvey(session.userId) + router.replace('/survey-sale') + } else if (searchParams.get('isMySurvey') === 'false') { + reset() + router.replace('/survey-sale') + } + }, [searchParams]) + + useEffect(() => { + if (isLoadingSurveyList || !session.isLoggedIn) return + if ('count' in surveyList && surveyList.count > 0) { if (offset > 0) { setHeldSurveyList((prev) => [...prev, ...surveyList.data]) @@ -39,7 +51,7 @@ export default function ListTable() { setHeldSurveyList([]) setHasMore(false) } - }, [surveyList, offset, isLoadingSurveyList]) + }, [surveyList, offset, isLoadingSurveyList, searchParams]) const handleDetailClick = (id: number) => { router.push(`/survey-sale/${id}`) diff --git a/src/components/survey-sale/list/SearchForm.tsx b/src/components/survey-sale/list/SearchForm.tsx index 66bf38e..6a42ae1 100644 --- a/src/components/survey-sale/list/SearchForm.tsx +++ b/src/components/survey-sale/list/SearchForm.tsx @@ -1,8 +1,8 @@ 'use client' import { SEARCH_OPTIONS, SEARCH_OPTIONS_ENUM, SEARCH_OPTIONS_PARTNERS, useSurveyFilterStore } from '@/store/surveyFilterStore' -import { useRouter } from 'next/navigation' -import { useState } from 'react' +import { useRouter, useSearchParams } from 'next/navigation' +import { useEffect, useState } from 'react' import { useAlertMsg, WARNING_MESSAGE } from '@/hooks/useAlertMsg' export default function SearchForm({ memberRole, userId }: { memberRole: string; userId: string }) { @@ -11,6 +11,13 @@ export default function SearchForm({ memberRole, userId }: { memberRole: string; const { setSearchOption, setSort, setIsMySurvey, setKeyword, isMySurvey, keyword, searchOption, sort, setOffset } = useSurveyFilterStore() const [searchKeyword, setSearchKeyword] = useState(keyword) const [option, setOption] = useState(searchOption) + const searchParams = useSearchParams() + + useEffect(() => { + if (searchParams.get('isMySurvey') === 'false') { + setSearchKeyword('') + } + }, [searchParams]) const handleSearch = () => { if (option !== 'id' && searchKeyword.trim().length < 2) { @@ -39,8 +46,6 @@ export default function SearchForm({ memberRole, userId }: { memberRole: string; value={option} onChange={(e) => { if (e.target.value === 'all') { - setKeyword('') - setSearchKeyword('') setSearchOption('all') setOption('all') } else { diff --git a/src/components/ui/Main.tsx b/src/components/ui/Main.tsx index 24db4a9..098d3c6 100644 --- a/src/components/ui/Main.tsx +++ b/src/components/ui/Main.tsx @@ -22,7 +22,7 @@ export default function Main() {
- +
調査物件一覧
@@ -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/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文字以内で入力してください', 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/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) 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 /* 검색 종료 일자 */ diff --git a/src/types/Survey.ts b/src/types/Survey.ts index 8cc8d55..e45ccd3 100644 --- a/src/types/Survey.ts +++ b/src/types/Survey.ts @@ -324,7 +324,6 @@ export type SurveySearchParams = { builderId?: string | null } - type RadioEtcKeys = | 'structureOrder' | 'houseStructure'