diff --git a/src/views/ContentCreationView.vue b/src/views/ContentCreationView.vue index f098141..f816398 100644 --- a/src/views/ContentCreationView.vue +++ b/src/views/ContentCreationView.vue @@ -1031,9 +1031,10 @@ const removeImage = (index) => { } } +// 1. generateContent 함수 - 완전한 버전 const generateContent = async () => { - if (!canGenerate.value) { - appStore.showSnackbar('모든 필수 항목을 입력해주세요.', 'warning') + if (!formData.value.title?.trim()) { + appStore.showSnackbar('제목을 입력해주세요.', 'warning') return } @@ -1056,22 +1057,59 @@ const generateContent = async () => { console.log('📋 [UI] 폼 데이터:', formData.value) console.log('📁 [UI] 이미지 데이터:', previewImages.value) - // 매장 ID 가져오기 - let storeId = 1 + // 매장 ID 가져오기 - API 호출로 변경 + let storeId = null try { - const storeInfo = JSON.parse(localStorage.getItem('storeInfo') || '{}') - const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}') + const storeApiUrl = (window.__runtime_config__ && window.__runtime_config__.STORE_URL) + ? window.__runtime_config__.STORE_URL + : 'http://localhost:8082/api/store' - if (storeInfo.storeId) { - storeId = storeInfo.storeId - } else if (userInfo.storeId) { - storeId = userInfo.storeId + const token = localStorage.getItem('accessToken') || localStorage.getItem('auth_token') || localStorage.getItem('token') + + if (!token) { + throw new Error('인증 토큰이 없습니다.') + } + + const storeResponse = await fetch(`${storeApiUrl}`, { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + }) + + if (storeResponse.ok) { + const storeData = await storeResponse.json() + storeId = storeData.data?.storeId + console.log('✅ 매장 정보 조회 성공, storeId:', storeId) } else { - console.warn('⚠️ localStorage에서 매장 ID를 찾을 수 없음, 기본값 사용:', storeId) + throw new Error(`매장 정보 조회 실패: ${storeResponse.status}`) } } catch (error) { - console.warn('⚠️ 매장 정보 파싱 실패, 기본값 사용:', storeId) + console.error('❌ 매장 정보 조회 실패:', error) + + // fallback: localStorage에서 이전에 저장된 매장 정보 확인 + try { + const storeInfo = JSON.parse(localStorage.getItem('storeInfo') || '{}') + const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}') + + if (storeInfo.storeId) { + storeId = storeInfo.storeId + console.log('⚠️ fallback - localStorage에서 매장 ID 사용:', storeId) + } else if (userInfo.storeId) { + storeId = userInfo.storeId + console.log('⚠️ fallback - userInfo에서 매장 ID 사용:', storeId) + } else { + throw new Error('매장 정보를 찾을 수 없습니다. 매장 관리 페이지에서 매장을 등록해주세요.') + } + } catch (fallbackError) { + console.error('❌ fallback 실패:', fallbackError) + throw new Error('매장 정보를 찾을 수 없습니다. 매장 관리 페이지에서 매장을 등록해주세요.') + } + } + + if (!storeId) { + throw new Error('매장 ID를 가져올 수 없습니다. 매장 관리 페이지에서 매장을 등록해주세요.') } console.log('🏪 [UI] 사용할 매장 ID:', storeId) @@ -1213,6 +1251,7 @@ const selectVersion = (index) => { selectedVersion.value = index } +// 2. saveVersion 함수 - 완전한 버전 const saveVersion = async (index) => { isPublishing.value = true publishingIndex.value = index @@ -1222,10 +1261,38 @@ const saveVersion = async (index) => { console.log('💾 [UI] 저장할 버전 데이터:', version) - // 매장 ID 가져오기 - let storeId = 1 + // 매장 ID 가져오기 - API 호출로 변경 + let storeId = null try { + const storeApiUrl = (window.__runtime_config__ && window.__runtime_config__.STORE_URL) + ? window.__runtime_config__.STORE_URL + : 'http://localhost:8082/api/store' + + const token = localStorage.getItem('accessToken') || localStorage.getItem('auth_token') || localStorage.getItem('token') + + if (!token) { + throw new Error('인증 토큰이 없습니다.') + } + + const storeResponse = await fetch(`${storeApiUrl}`, { + headers: { + 'Authorization': `Bearer ${token}`, + 'Content-Type': 'application/json' + } + }) + + if (storeResponse.ok) { + const storeData = await storeResponse.json() + storeId = storeData.data?.storeId + console.log('✅ [저장] 매장 정보 조회 성공, storeId:', storeId) + } else { + throw new Error(`매장 정보 조회 실패: ${storeResponse.status}`) + } + } catch (error) { + console.error('❌ [저장] 매장 정보 조회 실패:', error) + + // fallback const storeInfo = JSON.parse(localStorage.getItem('storeInfo') || '{}') const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}') @@ -1234,10 +1301,12 @@ const saveVersion = async (index) => { } else if (userInfo.storeId) { storeId = userInfo.storeId } else { - console.warn('⚠️ localStorage에서 매장 ID를 찾을 수 없음, 기본값 사용:', storeId) + throw new Error('매장 정보를 찾을 수 없습니다.') } - } catch (error) { - console.warn('⚠️ 매장 정보 파싱 실패, 기본값 사용:', storeId) + } + + if (!storeId) { + throw new Error('매장 ID를 가져올 수 없습니다.') } console.log('🏪 [UI] 사용할 매장 ID:', storeId) diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index a1cfd37..ef9a0ee 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -29,7 +29,7 @@ @keyup.enter="handleLogin" /> - + -
데모 계정 정보
- 아이디: user01 + 아이디: test
- 비밀번호: passw0rd + 비밀번호: test1234!
데모 계정 자동 입력 @@ -328,8 +327,8 @@ const emailChecked = ref(false) // 로그인 자격 증명 const credentials = ref({ - username: 'user01', - password: 'passw0rd', + username: 'test', + password: 'test1234!', }) // 회원가입 데이터 @@ -410,8 +409,8 @@ const businessNumberRules = [ // 로그인 관련 메서드 const fillDemoCredentials = () => { - credentials.value.username = 'user01' - credentials.value.password = 'passw0rd' + credentials.value.username = 'test' + credentials.value.password = 'test1234!' loginError.value = '' }