@@ -265,20 +265,40 @@ const closeModal = () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 모달 내 과목 선택 후 상담 신청 폼으로 이동
|
||||
// 모달 내 과목 선택 후 상담 신청 폼으로 이동 및 해당 과목 자동 선택
|
||||
const applyWithSubject = (subjectName) => {
|
||||
closeModal()
|
||||
const cleanSubj = subjectName.replace(/과외$/, '')
|
||||
const cleanSubj = subjectName.replace(/과외$/, '').trim()
|
||||
|
||||
const subjSelect = document.getElementById('weakSubject') || document.getElementById('c-subject')
|
||||
if (subjSelect) {
|
||||
subjSelect.value = cleanSubj
|
||||
subjSelect.dispatchEvent(new Event('change'))
|
||||
}
|
||||
|
||||
const formTarget = document.getElementById('leadFormSection') || document.getElementById('consult-section')
|
||||
if (formTarget) {
|
||||
formTarget.scrollIntoView({ behavior: 'smooth' })
|
||||
if (typeof window !== 'undefined') {
|
||||
// 1. 커스텀 이벤트 발송 (Vue 반응형 formData.subject 즉시 업데이트)
|
||||
window.dispatchEvent(new CustomEvent('select-subject', { detail: { subject: cleanSubj } }))
|
||||
|
||||
setTimeout(() => {
|
||||
// 2. 칩 버튼 DOM 직접 클릭 트리거 (완벽 호환)
|
||||
const buttons = document.querySelectorAll('#leadFormSection button')
|
||||
for (const btn of buttons) {
|
||||
const text = btn.innerText.trim()
|
||||
const dataSubj = btn.getAttribute('data-subject')
|
||||
if (text.startsWith(cleanSubj) || dataSubj === cleanSubj) {
|
||||
btn.click()
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// 3. input/select fallback
|
||||
const subjSelect = document.getElementById('weakSubject') || document.getElementById('c-subject')
|
||||
if (subjSelect) {
|
||||
subjSelect.value = cleanSubj
|
||||
subjSelect.dispatchEvent(new Event('change'))
|
||||
}
|
||||
|
||||
// 4. 상단 폼 위치로 부드럽게 스크롤 이동
|
||||
const formTarget = document.getElementById('leadFormSection') || document.getElementById('consult-section')
|
||||
if (formTarget) {
|
||||
formTarget.scrollIntoView({ behavior: 'smooth' })
|
||||
}
|
||||
}, 60)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+46
-14
@@ -190,6 +190,7 @@
|
||||
v-for="subj in subjects"
|
||||
:key="subj.name"
|
||||
type="button"
|
||||
:data-subject="subj.name"
|
||||
@click="formData.subject = subj.name"
|
||||
:class="[
|
||||
'py-2.5 px-2 rounded-xl text-xs sm:text-sm font-bold transition border',
|
||||
@@ -478,11 +479,43 @@ const currentNotice = ref(rollingMessages[0])
|
||||
let rollingIdx = 0
|
||||
|
||||
onMounted(() => {
|
||||
// 외부 모달에서 과목 선택 시 반응형 폼 자동 동기화
|
||||
if (typeof window !== 'undefined') {
|
||||
window.addEventListener('select-subject', (e) => {
|
||||
if (e.detail && e.detail.subject) {
|
||||
const target = e.detail.subject;
|
||||
try {
|
||||
if (typeof subjects !== 'undefined' && Array.isArray(subjects)) {
|
||||
const found = subjects.find(s => s.name === target || s.label.startsWith(target));
|
||||
if (found) formData.subject = found.name;
|
||||
} else if (typeof subjectOptions !== 'undefined' && Array.isArray(subjectOptions)) {
|
||||
const found = subjectOptions.find(s => s === target || s.startsWith(target));
|
||||
if (found) formData.subject = found;
|
||||
} else {
|
||||
formData.subject = target;
|
||||
}
|
||||
} catch (_) {
|
||||
formData.subject = target;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
formData.grade = currentGradeOptions.value[1] || currentGradeOptions.value[0]
|
||||
setInterval(() => {
|
||||
rollingIdx = (rollingIdx + 1) % rollingMessages.length
|
||||
currentNotice.value = rollingMessages[rollingIdx]
|
||||
}, 3500)
|
||||
|
||||
// 외부 컴포넌트(과목 갤러리 모달 등)에서 과목 선택 시 반응형 폼 자동 동기화
|
||||
window.addEventListener('select-subject', (e) => {
|
||||
if (e.detail && e.detail.subject) {
|
||||
const target = e.detail.subject
|
||||
const found = subjects.find(s => s.name === target || s.label.startsWith(target))
|
||||
if (found) {
|
||||
formData.subject = found.name
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const subjects = [
|
||||
@@ -583,28 +616,27 @@ async function handleSubmit() {
|
||||
}
|
||||
}
|
||||
|
||||
// SEO 태그 설정 (사용자 가이드 30~35자 내외 글자 수 및 고의도 롱테일 키워드 100% 준수)
|
||||
// SEO 태그 및 소셜 메타데이터 (네이버/구글 검색 최적화 및 3종 구조화 데이터 JSON-LD)
|
||||
useHead({
|
||||
title: '로열클래스 1:1 과외 | 서울 초·중·고 검증된 맞춤 과외 매칭',
|
||||
link: [
|
||||
{ rel: 'canonical', href: 'https://aeseo.cloud/' }
|
||||
{ rel: 'canonical', href: siteDomain.endsWith('/') ? siteDomain : `${siteDomain}/` }
|
||||
],
|
||||
meta: [
|
||||
{ name: 'naver-site-verification', content: '299523ed34c7419d7fb724426e14b5def8badac7' },
|
||||
{ name: 'description', content: '과외 비용·시세 투명 비교부터 무료 시범수업 신청까지. 명문대 및 베테랑 전문 강사진 1:1 맞춤 배정 솔루션' },
|
||||
{ name: 'description', content: '과외 비용·시세 투명 비교부터 무료 시범수업 신청까지. 서울대·연고대 및 베테랑 전문 강사진 1:1 맞춤 배정 솔루션' },
|
||||
{ property: 'og:type', content: 'website' },
|
||||
{ property: 'og:site_name', content: '로열클래스 1:1 과외' },
|
||||
{ property: 'og:title', content: '로열클래스 1:1 과외 | 서울 초·중·고 맞춤 과외 매칭' },
|
||||
{ property: 'og:description', content: '과외 비용·시세 투명 비교부터 무료 시범수업 신청까지. 검증된 전문 선생님 100% 매칭' },
|
||||
{ property: 'og:url', content: 'https://aeseo.cloud/' },
|
||||
{ property: 'og:image', content: 'https://aeseo.cloud/img/og-main.png' },
|
||||
{ property: 'og:url', content: siteDomain.endsWith('/') ? siteDomain : `${siteDomain}/` },
|
||||
{ property: 'og:image', content: `${siteDomain}/img/og-main.png` },
|
||||
{ property: 'og:image:width', content: '1200' },
|
||||
{ property: 'og:image:height', content: '630' },
|
||||
{ name: 'twitter:card', content: 'summary_large_image' },
|
||||
{ name: 'twitter:title', content: '로열클래스 1:1 과외 | 서울 초·중·고 맞춤 과외 매칭' },
|
||||
{ name: 'twitter:description', content: '과외 비용·시세 투명 비교부터 무료 시범수업 신청까지. 검증된 전문 선생님 100% 매칭' },
|
||||
{ name: 'twitter:image', content: 'https://aeseo.cloud/img/og-main.png' }
|
||||
{ name: 'twitter:image', content: `${siteDomain}/img/og-main.png` }
|
||||
],
|
||||
script: [
|
||||
// 1. EducationalOrganization / LocalBusiness 스키마
|
||||
@@ -615,8 +647,8 @@ useHead({
|
||||
'@type': ['EducationalOrganization', 'LocalBusiness'],
|
||||
name: '로열클래스 1:1 과외',
|
||||
telephone: '+82-10-5961-5807',
|
||||
url: 'https://aeseo.cloud/',
|
||||
image: 'https://aeseo.cloud/img/og-main.png',
|
||||
url: siteDomain.endsWith('/') ? siteDomain : `${siteDomain}/`,
|
||||
image: `${siteDomain}/img/og-main.png`,
|
||||
address: {
|
||||
'@type': 'PostalAddress',
|
||||
streetAddress: '테헤란로 123 비전타워 4층',
|
||||
@@ -624,7 +656,7 @@ useHead({
|
||||
addressRegion: '서울특별시',
|
||||
addressCountry: 'KR'
|
||||
},
|
||||
description: '서울 초·중·고 1:1 맞춤 과외 및 방문·화상 시범수업 전문 교육 기관',
|
||||
description: '과외 비용·시세 투명 비교부터 무료 시범수업 신청까지. 서울대·연고대 및 베테랑 전문 강사진 1:1 맞춤 배정 솔루션',
|
||||
areaServed: '서울특별시 전지역'
|
||||
})
|
||||
},
|
||||
@@ -657,35 +689,35 @@ useHead({
|
||||
position: 1,
|
||||
name: '수학과외',
|
||||
description: '개념 구멍 추적 및 킬러 문항 1:1 완파',
|
||||
image: 'https://aeseo.cloud/img/math-tutoring.png'
|
||||
image: `${siteDomain}/img/math-tutoring.png`
|
||||
},
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 2,
|
||||
name: '영어과외',
|
||||
description: '교과서·부교재 전 지문 변형 및 서술형 영작',
|
||||
image: 'https://aeseo.cloud/img/english-tutoring.png'
|
||||
image: `${siteDomain}/img/english-tutoring.png`
|
||||
},
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 3,
|
||||
name: '국어과외',
|
||||
description: '비문학 독해 논리와 교과서 문학 1:1 정밀 분석',
|
||||
image: 'https://aeseo.cloud/img/korean-tutoring.png'
|
||||
image: `${siteDomain}/img/korean-tutoring.png`
|
||||
},
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 4,
|
||||
name: '과학과외',
|
||||
description: '통합과학 원리 이해 및 물화생지 킬러 단원 정복',
|
||||
image: 'https://aeseo.cloud/img/science-tutoring.png'
|
||||
image: `${siteDomain}/img/science-tutoring.png`
|
||||
},
|
||||
{
|
||||
'@type': 'ListItem',
|
||||
position: 5,
|
||||
name: '사회과외',
|
||||
description: '통합사회·한국사 핵심 흐름 및 사탐 만점 전략',
|
||||
image: 'https://aeseo.cloud/img/social-studies-tutoring.png'
|
||||
image: `${siteDomain}/img/social-studies-tutoring.png`
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user