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) } }, )