From 54ada5cac05c9dd0088829b2b035e0060e1d34af Mon Sep 17 00:00:00 2001 From: YH Date: Thu, 21 Aug 2025 21:35:08 +0900 Subject: [PATCH 01/26] =?UTF-8?q?api(#29):=20=ED=8F=BC=20submit=20?= =?UTF-8?q?=EB=A7=A4=EC=86=8C=EB=93=9C=20=EB=B0=8F=20=EC=8A=A4=ED=82=A4?= =?UTF-8?q?=EB=A7=88=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20&=20API=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=EB=8C=80=EA=B8=B0=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_api/types/AnalyzeSubmitResponse.ts | 4 ++ app/pages/analyze/_components/FormPanel.vue | 70 +++---------------- app/pages/analyze/_utils/formSchema.ts | 45 ++++++++++++ app/pages/analyze/index.vue | 36 ++++++++-- 4 files changed, 87 insertions(+), 68 deletions(-) create mode 100644 app/pages/analyze/_api/types/AnalyzeSubmitResponse.ts create mode 100644 app/pages/analyze/_utils/formSchema.ts diff --git a/app/pages/analyze/_api/types/AnalyzeSubmitResponse.ts b/app/pages/analyze/_api/types/AnalyzeSubmitResponse.ts new file mode 100644 index 0000000..6bb83c2 --- /dev/null +++ b/app/pages/analyze/_api/types/AnalyzeSubmitResponse.ts @@ -0,0 +1,4 @@ +export interface AnalyzeSubmitResponse { + reportId: number; + processingStatus: string; +} diff --git a/app/pages/analyze/_components/FormPanel.vue b/app/pages/analyze/_components/FormPanel.vue index 7e7da11..bc98850 100644 --- a/app/pages/analyze/_components/FormPanel.vue +++ b/app/pages/analyze/_components/FormPanel.vue @@ -1,57 +1,11 @@ - - - diff --git a/app/pages/analyze/_utils/formSchema.ts b/app/pages/analyze/_utils/formSchema.ts new file mode 100644 index 0000000..1b96a58 --- /dev/null +++ b/app/pages/analyze/_utils/formSchema.ts @@ -0,0 +1,45 @@ +import z from "zod"; + +export const formSchema = z + .object({ + rentType: z.literal("전세").or(z.literal("월세")), + deposit_hundred_million: z + .string() + .regex(/^[0-9]*$/) + .refine((val) => Number(val) <= 999), + deposit_ten_million: z + .string() + .regex(/^[0-9]?$/) + .refine((val) => Number(val) <= 9), + deposit_million: z + .string() + .regex(/^[0-9]{0,3}$/) + .refine((val) => Number(val) <= 999), + monthlyRent_hundred: z.string().regex(/^[0-9]*$/), + monthlyRent_ten_thousand: z + .string() + .regex(/^[0-9]{0,2}$/) + .refine((val) => Number(val) <= 99), + detailed_address_dong: z.string().min(1), + detailed_address_ho: z.string().min(1), + selected_file: z.union([z.instanceof(File), z.null()]), + selected_example: z.string(), + }) + .refine((data) => { + const hasFile = data.selected_file; + const hasExample = data.selected_example.length > 0; + return hasFile || hasExample; + }) + .refine((data) => { + if ( + data.deposit_hundred_million?.length && + data.deposit_ten_million?.length && + data.deposit_million?.length + ) { + return ( + data.rentType === "전세" || + (data.monthlyRent_hundred?.length && data.monthlyRent_ten_thousand?.length) + ); + } + return false; + }); diff --git a/app/pages/analyze/index.vue b/app/pages/analyze/index.vue index 9379efa..6f5853a 100644 --- a/app/pages/analyze/index.vue +++ b/app/pages/analyze/index.vue @@ -1,3 +1,29 @@ + + - + + + From e0dcb281eed343a426dff7c0ed21316ea956a360 Mon Sep 17 00:00:00 2001 From: Daeuni Date: Sun, 24 Aug 2025 19:48:11 +0900 Subject: [PATCH 02/26] =?UTF-8?q?UI(#37)=20=ED=80=B4=EC=A6=88=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pages/checklist/index.vue | 5 +++++ app/pages/quiz/index.vue | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 app/pages/quiz/index.vue diff --git a/app/pages/checklist/index.vue b/app/pages/checklist/index.vue index e7bef46..2cd6ef7 100644 --- a/app/pages/checklist/index.vue +++ b/app/pages/checklist/index.vue @@ -12,6 +12,7 @@ @@ -256,4 +257,8 @@ import Four from "~/assets/image/checkFour.jpg"; import Five from "~/assets/image/checkFive.jpg"; import CheckCard from "./_components/CheckCard.vue"; import CheckTipBox from "./_components/CheckTipBox.vue"; + +const gotoQuiz = () => { + navigateTo("/quiz"); +}; diff --git a/app/pages/quiz/index.vue b/app/pages/quiz/index.vue new file mode 100644 index 0000000..9b47a84 --- /dev/null +++ b/app/pages/quiz/index.vue @@ -0,0 +1,34 @@ + From 8bae33a2b92eaddf01e5f8e52780464f2ca8f57b Mon Sep 17 00:00:00 2001 From: YH Date: Sun, 24 Aug 2025 21:14:04 +0900 Subject: [PATCH 03/26] =?UTF-8?q?chore(taliwind):=201440px=20=EB=AF=B8?= =?UTF-8?q?=EB=94=94=EC=96=B4=20=EC=BF=BC=EB=A6=AC=EC=9A=A9=20desktop=20?= =?UTF-8?q?=EC=9C=A0=ED=8B=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tailwind.config.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tailwind.config.ts b/tailwind.config.ts index 8ac2fc7..00ebf49 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -23,6 +23,9 @@ export default >{ foreground: "rgb(var(--foreground) / )", }, }, + screens: { + desktop: "1440px", + }, }, content: [ "app/**/*.{vue,js,jsx,mjs,ts,tsx}", From 60c2cef5044d9ee84cc46346a4d88917842b984b Mon Sep 17 00:00:00 2001 From: Daeuni Date: Mon, 25 Aug 2025 01:02:24 +0900 Subject: [PATCH 04/26] =?UTF-8?q?ui(#37)=20=ED=80=B4=EC=A6=88=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20UI=20=EC=A0=95=EB=8B=B5=20=EC=98=A4?= =?UTF-8?q?=EB=8B=B5=EC=B0=BD,=20=EB=AA=A8=EB=8B=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pages/quiz/Correct.vue | 16 +++++++ app/pages/quiz/False.vue | 16 +++++++ app/pages/quiz/_components/Explain.vue | 62 +++++++++++++++++++++++++ app/pages/quiz/_modals/CompleteQuiz.vue | 52 +++++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 app/pages/quiz/Correct.vue create mode 100644 app/pages/quiz/False.vue create mode 100644 app/pages/quiz/_components/Explain.vue create mode 100644 app/pages/quiz/_modals/CompleteQuiz.vue diff --git a/app/pages/quiz/Correct.vue b/app/pages/quiz/Correct.vue new file mode 100644 index 0000000..b141337 --- /dev/null +++ b/app/pages/quiz/Correct.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/pages/quiz/False.vue b/app/pages/quiz/False.vue new file mode 100644 index 0000000..4660f49 --- /dev/null +++ b/app/pages/quiz/False.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/pages/quiz/_components/Explain.vue b/app/pages/quiz/_components/Explain.vue new file mode 100644 index 0000000..6e0c12e --- /dev/null +++ b/app/pages/quiz/_components/Explain.vue @@ -0,0 +1,62 @@ + + + diff --git a/app/pages/quiz/_modals/CompleteQuiz.vue b/app/pages/quiz/_modals/CompleteQuiz.vue new file mode 100644 index 0000000..59889a0 --- /dev/null +++ b/app/pages/quiz/_modals/CompleteQuiz.vue @@ -0,0 +1,52 @@ + + + From e04068227d51c29ac1dc62f203854d83ef8fc765 Mon Sep 17 00:00:00 2001 From: YH Date: Mon, 25 Aug 2025 01:06:05 +0900 Subject: [PATCH 05/26] =?UTF-8?q?api(#29):=20=EB=B6=84=EC=84=9D=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=ED=8F=BC=20=EC=A0=9C=EC=B6=9C=20?= =?UTF-8?q?API=20=EC=97=B0=EB=8F=99=20=EC=99=84=EB=A3=8C=20&=20=ED=94=8C?= =?UTF-8?q?=EB=A1=9C=EC=9A=B0=20=EA=B5=AC=ED=98=84=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?&=20=EC=98=88=EC=8B=9C=ED=8C=8C=EC=9D=BC=20=EC=97=85=EB=A1=9C?= =?UTF-8?q?=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pages/analyze/_components/FormPanel.vue | 24 ++++++ app/pages/analyze/_modals/PdfSubmitted.vue | 71 ++++++++++++++++-- app/pages/analyze/_modals/PdfUpload.vue | 19 ++--- app/pages/analyze/_utils/calculations.ts | 22 ++++++ app/pages/analyze/_utils/formSchema.ts | 33 ++++---- app/pages/analyze/index.vue | 67 ++++++++++++++++- .../_components/ProcessAndDisclaimer.vue | 0 .../{ => [id]}/_components/ProcessStep.vue | 0 app/pages/analyze/result/{ => [id]}/index.vue | 0 ...0\353\266\200\353\223\261\353\263\270.pdf" | Bin ...0\353\266\200\353\223\261\353\263\270.pdf" | Bin ...0\353\266\200\353\223\261\353\263\270.pdf" | Bin 12 files changed, 206 insertions(+), 30 deletions(-) create mode 100644 app/pages/analyze/_utils/calculations.ts rename app/pages/analyze/result/{ => [id]}/_components/ProcessAndDisclaimer.vue (100%) rename app/pages/analyze/result/{ => [id]}/_components/ProcessStep.vue (100%) rename app/pages/analyze/result/{ => [id]}/index.vue (100%) rename "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2741_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" => "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2741_\354\225\210\354\240\204_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" (100%) rename "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2742_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" => "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2742_\353\266\210\354\225\210_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" (100%) rename "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2743_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" => "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2743_\354\234\204\355\227\230_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" (100%) diff --git a/app/pages/analyze/_components/FormPanel.vue b/app/pages/analyze/_components/FormPanel.vue index bc98850..7293585 100644 --- a/app/pages/analyze/_components/FormPanel.vue +++ b/app/pages/analyze/_components/FormPanel.vue @@ -34,8 +34,27 @@ watch( form.setFieldValue("selected_file", fileStore.selectedFile); form.setFieldValue("selected_example", ""); } else { + // 예시 파일 선택 시 form.setFieldValue("selected_file", null); form.setFieldValue("selected_example", String(fileStore.selectedExample)); + + const exampleNo = String(fileStore.selectedExample).match(/\d+/)?.[0]; + switch (exampleNo) { + case "1": + form.setFieldValue("detailed_address_dong", "1"); + form.setFieldValue("detailed_address_ho", "914"); + break; + case "2": + form.setFieldValue("detailed_address_dong", ""); + form.setFieldValue("detailed_address_ho", "202"); + break; + case "3": + form.setFieldValue("detailed_address_dong", "가"); + form.setFieldValue("detailed_address_ho", "204"); + break; + default: + break; + } } } else { form.setFieldValue("selected_file", null); @@ -106,6 +125,7 @@ const emit = defineEmits<{ :id="field.name" :name="field.name" :value="field.state.value" + placeholder="0" type="text" autocomplete="off" :class="[ @@ -127,6 +147,7 @@ const emit = defineEmits<{ :id="field.name" :name="field.name" :value="field.state.value" + placeholder="0" type="text" autocomplete="off" :class="[ @@ -148,6 +169,7 @@ const emit = defineEmits<{ :id="field.name" :name="field.name" :value="field.state.value" + placeholder="0" type="text" autocomplete="off" :class="[ @@ -177,6 +199,7 @@ const emit = defineEmits<{ :id="field.name" :name="field.name" :value="field.state.value" + placeholder="0" type="text" autocomplete="off" :class="[ @@ -198,6 +221,7 @@ const emit = defineEmits<{ :id="field.name" :name="field.name" :value="field.state.value" + placeholder="0" type="text" autocomplete="off" :class="[ diff --git a/app/pages/analyze/_modals/PdfSubmitted.vue b/app/pages/analyze/_modals/PdfSubmitted.vue index 8860228..cca608e 100644 --- a/app/pages/analyze/_modals/PdfSubmitted.vue +++ b/app/pages/analyze/_modals/PdfSubmitted.vue @@ -1,10 +1,73 @@ + + From 0354591c80e6ffe6e44aa6c1215cde9436bed0b9 Mon Sep 17 00:00:00 2001 From: YH Date: Mon, 25 Aug 2025 13:41:02 +0900 Subject: [PATCH 07/26] =?UTF-8?q?ui(#44):=20=EB=B6=84=EC=84=9D=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=ED=8E=98=EC=9D=B4=EC=A7=80=20API=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/components/SafetyTypeChip.vue | 14 ++- .../_api/types/AnalyzeResultResponse.ts | 11 +++ .../_components/ProcessAndDisclaimer.vue | 98 +++++++++++++++++++ .../[reportId]/_components/ProcessStep.vue | 21 ++++ app/pages/analyze/result/[reportId]/index.vue | 78 +++++++++++++++ app/utils/getSafetyTypeByScore.ts | 4 +- 6 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 app/pages/analyze/result/[reportId]/_api/types/AnalyzeResultResponse.ts create mode 100644 app/pages/analyze/result/[reportId]/_components/ProcessAndDisclaimer.vue create mode 100644 app/pages/analyze/result/[reportId]/_components/ProcessStep.vue create mode 100644 app/pages/analyze/result/[reportId]/index.vue diff --git a/app/components/SafetyTypeChip.vue b/app/components/SafetyTypeChip.vue index ac1e5e3..29b8bec 100644 --- a/app/components/SafetyTypeChip.vue +++ b/app/components/SafetyTypeChip.vue @@ -7,7 +7,9 @@ ? 'rgb(var(--primary))' : safetyType === SafetyType.Caution ? 'rgb(var(--accent-2))' - : 'rgb(var(--destructive))', + : safetyType === SafetyType.Dangerous + ? 'rgb(var(--destructive))' + : 'rgb(var(--gray-8f))', }" > 이 부동산은 거래에 주의가 필요합니다. - + 이 부동산은 거래에 위험합니다. + + 분석 결과를 불러오는 중... + @@ -33,7 +41,7 @@ import getSafetyTypeByScore from "~/utils/getSafetyTypeByScore"; import { SafetyType } from "~/types/SafetyType"; const props = defineProps<{ - score: number; + score: number | null; }>(); const safetyType = computed(() => getSafetyTypeByScore(props.score)); diff --git a/app/pages/analyze/result/[reportId]/_api/types/AnalyzeResultResponse.ts b/app/pages/analyze/result/[reportId]/_api/types/AnalyzeResultResponse.ts new file mode 100644 index 0000000..e7aacc5 --- /dev/null +++ b/app/pages/analyze/result/[reportId]/_api/types/AnalyzeResultResponse.ts @@ -0,0 +1,11 @@ +export interface AnalyzeResultResponse { + reportId: number; + analysisReportUrl: string; + address: string; + safetyScore: number; + summary: string; + comment: string; + safetyDescription: string; + insuranceDescription: string; + warning: "WARN" | "DEFAULT"; +} diff --git a/app/pages/analyze/result/[reportId]/_components/ProcessAndDisclaimer.vue b/app/pages/analyze/result/[reportId]/_components/ProcessAndDisclaimer.vue new file mode 100644 index 0000000..fb20f5a --- /dev/null +++ b/app/pages/analyze/result/[reportId]/_components/ProcessAndDisclaimer.vue @@ -0,0 +1,98 @@ + + + diff --git a/app/pages/analyze/result/[reportId]/_components/ProcessStep.vue b/app/pages/analyze/result/[reportId]/_components/ProcessStep.vue new file mode 100644 index 0000000..f632782 --- /dev/null +++ b/app/pages/analyze/result/[reportId]/_components/ProcessStep.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/pages/analyze/result/[reportId]/index.vue b/app/pages/analyze/result/[reportId]/index.vue new file mode 100644 index 0000000..c82f8a7 --- /dev/null +++ b/app/pages/analyze/result/[reportId]/index.vue @@ -0,0 +1,78 @@ + + + diff --git a/app/utils/getSafetyTypeByScore.ts b/app/utils/getSafetyTypeByScore.ts index b29e866..1d1de92 100644 --- a/app/utils/getSafetyTypeByScore.ts +++ b/app/utils/getSafetyTypeByScore.ts @@ -1,6 +1,8 @@ import { SafetyType } from "~/types/SafetyType"; -const getSafetyTypeByScore = (score: number) => { +const getSafetyTypeByScore = (score: number | null) => { + if (score === null) return null; + if (score >= 7) return SafetyType.Safe; if (score >= 3) return SafetyType.Caution; return SafetyType.Dangerous; From 69d2624e7cf02a85050bc9dc6ff1b618082d3b12 Mon Sep 17 00:00:00 2001 From: YH Date: Mon, 25 Aug 2025 13:49:51 +0900 Subject: [PATCH 08/26] =?UTF-8?q?api(#29):=20API=20=EC=9A=94=EC=B2=AD=20?= =?UTF-8?q?=ED=9B=84=20=EB=AA=A8=EB=8B=AC=20=EC=88=98=EC=A0=95=20&=20?= =?UTF-8?q?=EC=98=88=EC=8B=9C=ED=8C=8C=EC=9D=BC=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pages/analyze/_components/FormPanel.vue | 2 +- app/pages/analyze/_modals/PdfSubmitted.vue | 4 ++-- app/pages/analyze/_modals/PdfUpload.vue | 13 ++++++------- ...70\260\353\266\200\353\223\261\353\263\270.pdf" | Bin ...70\260\353\266\200\353\223\261\353\263\270.pdf" | Bin ...70\260\353\266\200\353\223\261\353\263\270.pdf" | Bin 6 files changed, 9 insertions(+), 10 deletions(-) rename "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2741_\354\225\210\354\240\204_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" => "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2741_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" (100%) rename "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2742_\353\266\210\354\225\210_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" => "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2742_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" (100%) rename "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2743_\354\234\204\355\227\230_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" => "public/pdf/\354\230\210\354\213\234\355\214\214\354\235\2743_\353\223\261\352\270\260\353\266\200\353\223\261\353\263\270.pdf" (100%) diff --git a/app/pages/analyze/_components/FormPanel.vue b/app/pages/analyze/_components/FormPanel.vue index 7293585..bc269fe 100644 --- a/app/pages/analyze/_components/FormPanel.vue +++ b/app/pages/analyze/_components/FormPanel.vue @@ -72,7 +72,7 @@ const emit = defineEmits<{