From 772bc85bae037e1ecd57ce9089a9b36488d0e05d Mon Sep 17 00:00:00 2001 From: ByungCheol Date: Sun, 31 May 2026 19:52:23 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=86=A0=EC=8A=A4=ED=8A=B8=20=EC=97=90?= =?UTF-8?q?=EB=94=94=ED=84=B0=20=ED=95=9C=EA=B8=80(IME)=20=EC=A1=B0?= =?UTF-8?q?=ED=95=A9=20=EB=81=8A=EA=B9=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 부모가 되돌린 echo 값이면 setMarkdown 생략 → 문자 조합 유지 Co-Authored-By: Claude Opus 4.8 --- .env.capacitor | 13 ++++++++++--- capacitor.config.json | 5 ++++- src/components/editor/MarkdownEditor.vue | 17 +++++++++++++---- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/.env.capacitor b/.env.capacitor index 97b4ca3..b600764 100644 --- a/.env.capacitor +++ b/.env.capacitor @@ -1,4 +1,11 @@ # 앱(Capacitor) 빌드 전용 환경변수 — `vite build --mode capacitor` 가 로드합니다. -# 앱 안에서는 상대경로(/api)가 서버로 가지 않으므로 백엔드 절대 URL 로 지정해야 합니다. -# 운영 백엔드 도메인으로 교체하세요. 예) https://api.yourdomain.com/api 또는 https://yourdomain.com/api -VITE_API_BASE_URL=https://your-backend-domain/api +# 앱 안에서는 상대경로(/api)가 서버로 가지 않으므로 백엔드 절대 URL 을 지정해야 합니다. +# +# [로컬 + 에뮬레이터 테스트] 에뮬레이터에서 10.0.2.2 = PC의 localhost +VITE_API_BASE_URL=http://10.0.2.2:8080/api +# +# [실기기 테스트] 같은 Wi-Fi 의 PC LAN IP 로 (예) +# VITE_API_BASE_URL=http://192.168.0.10:8080/api +# +# [배포 서버(HTTPS)] 운영 시 +# VITE_API_BASE_URL=https://yourdomain.com/api diff --git a/capacitor.config.json b/capacitor.config.json index 37da108..21d4c7e 100644 --- a/capacitor.config.json +++ b/capacitor.config.json @@ -2,7 +2,10 @@ "appId": "kr.sblog.slimbudget", "appName": "Slim Budget", "webDir": "dist", + "server": { + "cleartext": true + }, "android": { - "allowMixedContent": false + "allowMixedContent": true } } diff --git a/src/components/editor/MarkdownEditor.vue b/src/components/editor/MarkdownEditor.vue index 7e06967..8909924 100644 --- a/src/components/editor/MarkdownEditor.vue +++ b/src/components/editor/MarkdownEditor.vue @@ -16,6 +16,8 @@ const emit = defineEmits(['update:modelValue']) const el = ref(null) let editor = null +// 에디터가 마지막으로 emit 한 값. 부모가 되돌려준 echo 를 구분해 한글 조합(IME)이 깨지지 않게 한다. +let lastEmitted = props.modelValue || '' onMounted(() => { editor = new Editor({ @@ -29,17 +31,24 @@ onMounted(() => { usageStatistics: false, autofocus: false, events: { - change: () => emit('update:modelValue', editor.getMarkdown()), + change: () => { + lastEmitted = editor.getMarkdown() + emit('update:modelValue', lastEmitted) + }, }, }) }) -// 외부 값 변경(수정 로드, 제출 후 초기화 등)을 에디터에 반영 (입력 중 루프 방지 가드) +// 외부 값 변경(수정 로드, 제출 후 초기화 등)만 에디터에 반영. +// 에디터 자신이 방금 emit 한 값(echo)이면 무시 → 입력 중 setMarkdown 으로 IME(한글) 조합이 끊기지 않게 한다. watch( () => props.modelValue, (val) => { - if (editor && (val || '') !== editor.getMarkdown()) { - editor.setMarkdown(val || '') + const v = val || '' + if (v === lastEmitted) return + if (editor && v !== editor.getMarkdown()) { + lastEmitted = v + editor.setMarkdown(v) } }, )