361 lines
11 KiB
Vue
361 lines
11 KiB
Vue
<template>
|
|
<section class="schools-section">
|
|
<div class="section-header">
|
|
<span class="section-badge">{{ regionDong }} {{ grade }} 맞춤 출제경향</span>
|
|
<h2 class="section-title">{{ regionDong }} 관내 {{ targetSchoolType }} {{ subjectName }} 내신 기출 분석</h2>
|
|
<p class="section-desc">
|
|
{{ regionDong }} {{ targetSchoolType }}마다 교과서 출판사와 부교재, 서술형 배점이 완전히 다릅니다. {{ subjectName }} 전문 강사진이 학교별 족보를 1:1로 밀착 대비합니다.
|
|
</p>
|
|
</div>
|
|
|
|
<!-- 나이스(NEIS) 연동 관내 실제 고등학교 칩 영역 -->
|
|
<div v-if="nearbyHighSchools.length > 0" class="neis-schools-box">
|
|
<div class="neis-header">
|
|
<span class="neis-title">
|
|
<i class="fa-solid fa-school-flag text-blue-600 mr-1.5"></i>
|
|
<strong>{{ regionDong }} 인근 주요 고등학교 내신 대비 현황</strong>
|
|
</span>
|
|
<span class="neis-source">NEIS 학교정보 연동</span>
|
|
</div>
|
|
<div class="school-tags-wrap">
|
|
<div
|
|
v-for="school in nearbyHighSchools"
|
|
:key="school.code"
|
|
class="school-tag-pill"
|
|
>
|
|
<span class="school-tag-name">{{ school.name }}</span>
|
|
<span class="school-tag-type">{{ school.type }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 고등학생 타겟인 경우 -->
|
|
<div v-if="isHigh" class="schools-grid">
|
|
<div class="school-card">
|
|
<div class="school-type-badge high">고1·고2 내신 집중</div>
|
|
<h3 class="school-name">{{ regionDong }} 일반고 및 자사·특목고 {{ subjectName }}</h3>
|
|
<p class="school-focus">
|
|
<strong>내신 평가 특징:</strong> 모의고사 변형 부교재(수능특강·올림포스·자이스토리) 연계율 70% 이상, 1등급 가르는 복합 서술형/킬러 배점 35점 이상
|
|
</p>
|
|
<ul class="school-checklist">
|
|
<li>- 5등급 상대평가 체제 1등급 선점 집중 훈련</li>
|
|
<li>- 학교 부교재 전 지문 어휘·문맥 변형 심층 분석</li>
|
|
<li>- 시험 시간 부족 방지를 위한 50분 실전 타임어택</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="school-card">
|
|
<div class="school-type-badge high">수능·수시 연계</div>
|
|
<h3 class="school-name">{{ regionDong }} 고등 수시 내신 & 수능 최저 {{ subjectName }}</h3>
|
|
<p class="school-focus">
|
|
<strong>대입 연계 전략:</strong> 1학기/2학기 지필평가뿐만 아니라 과목별 세특 탐구 보고서와 수행평가 만점을 동시에 설계하여 학생부 경쟁력 극대화
|
|
</p>
|
|
<ul class="school-checklist">
|
|
<li>- 1:1 오답 역추적 노트로 킬러 문항 정복</li>
|
|
<li>- 학교별 전년도 기출 3개년 족보 유사 변형 문항 완파</li>
|
|
<li>- 진로 맞춤형 {{ subjectName }} 심화 세특 보고서 1:1 피드백</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 중학생 타겟인 경우 -->
|
|
<div v-else-if="isMiddle" class="schools-grid">
|
|
<div class="school-card">
|
|
<div class="school-type-badge middle">중2·중3 지필대비</div>
|
|
<h3 class="school-name">{{ regionDong }} 관내 주요 중학교 {{ subjectName }}</h3>
|
|
<p class="school-focus">
|
|
<strong>내신 평가 특징:</strong> 자유학기제 이후 치러지는 첫 지필고사에서 교과서 기본 문제 외에 부교재 및 외부 지문 변형 출제 비중 급증
|
|
</p>
|
|
<ul class="school-checklist">
|
|
<li>- 교과서 핵심 개념 응용 킬러 서술형 1:1 대비</li>
|
|
<li>- 3개년 중간·기말고사 기출 족보 유사 변형 문항 풀이</li>
|
|
<li>- 수행평가(말하기·쓰기·보고서) 만점 기준 사전 첨삭</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<div class="school-card">
|
|
<div class="school-type-badge middle">예비고 선행 연계</div>
|
|
<h3 class="school-name">{{ regionDong }} 중등 심화 & 고등 연계 {{ subjectName }}</h3>
|
|
<p class="school-focus">
|
|
<strong>상위권 도약 전략:</strong> 중학교 내신 90점대(A등급)에 안주하지 않고, 고등학교 진학 시 1등급을 지탱할 고난도 문해력/추론 사고력 체계 구축
|
|
</p>
|
|
<ul class="school-checklist">
|
|
<li>- 고등 필수 기본 개념 및 어휘/공식 선행 체화</li>
|
|
<li>- 서술형 조건 누락 감점 방지 3초 검토법 훈련</li>
|
|
<li>- 자기주도 학습 습관 정착을 위한 매일 플래너 관리</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 초등학생 또는 기타인 경우 -->
|
|
<div v-else class="schools-grid">
|
|
<div class="school-card">
|
|
<div class="school-type-badge elem">초등 고학년</div>
|
|
<h3 class="school-name">{{ regionDong }} 초등 {{ subjectName }} 기초·심화</h3>
|
|
<p class="school-focus"><strong>학습 목표:</strong> 중학교 진학 전 공부에 대한 흥미와 핵심 기초 개념 완벽 정립</p>
|
|
<ul class="school-checklist">
|
|
<li>- 교과 단원별 필수 개념 어휘 및 논리적 문해력 완성</li>
|
|
<li>- 연산 및 문장 구조 오류 습관 조기 교정</li>
|
|
<li>- 매일 30분 스스로 공부하는 올바른 학습 습관 형성</li>
|
|
</ul>
|
|
</div>
|
|
<div class="school-card">
|
|
<div class="school-type-badge middle">중등 입학 대비</div>
|
|
<h3 class="school-name">{{ regionDong }} 중등 첫 시험 안착 프로그램</h3>
|
|
<p class="school-focus"><strong>학습 목표:</strong> 중학교 자유학기 기간 학습 결손 방지 및 중등 지필평가 사전 적응</p>
|
|
<ul class="school-checklist">
|
|
<li>- 중1 교과서 선행 진도 및 서술형 평가 적응</li>
|
|
<li>- 단원별 핵심 평가 및 취약 단원 1:1 클리닉</li>
|
|
<li>- 1:1 전담 멘토의 밀착 학습 관리</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { computed } from 'vue'
|
|
import schoolsIndex from '../data/schools_index.json'
|
|
|
|
const props = defineProps({
|
|
regionDong: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
grade: {
|
|
type: String,
|
|
default: '중학생'
|
|
},
|
|
subjectName: {
|
|
type: String,
|
|
default: '영어'
|
|
}
|
|
})
|
|
|
|
const isHigh = computed(() => (props.grade || '').includes('고등'))
|
|
const isMiddle = computed(() => (props.grade || '').includes('중학') || (props.grade || '').includes('중등'))
|
|
|
|
const targetSchoolType = computed(() => {
|
|
if (isHigh.value) return '고등학교'
|
|
if (isMiddle.value) return '중학교'
|
|
return '초·중학교'
|
|
})
|
|
|
|
// 동네 기준 또는 구 기준 인근 고등학교 목록
|
|
const nearbyHighSchools = computed(() => {
|
|
const dong = props.regionDong || ''
|
|
const cleanDong = dong.trim()
|
|
|
|
// 1. 해당 동네에 직접 위치한 고등학교
|
|
if (schoolsIndex.byDong && schoolsIndex.byDong[cleanDong]) {
|
|
return schoolsIndex.byDong[cleanDong]
|
|
}
|
|
|
|
// 2. 부분 일치 검색 (예: '개포' -> '개포동')
|
|
for (const [d, list] of Object.entries(schoolsIndex.byDong || {})) {
|
|
if (d.includes(cleanDong) || cleanDong.includes(d)) {
|
|
return list
|
|
}
|
|
}
|
|
|
|
// 3. 동네에 고등학교가 없으면 관할 구/시 또는 인접 구의 학교 상위 6개
|
|
for (const [gu, list] of Object.entries(schoolsIndex.bySigungu || {})) {
|
|
if (cleanDong.includes(gu) || gu.includes(cleanDong)) {
|
|
return list.slice(0, 6)
|
|
}
|
|
}
|
|
|
|
// 4. 기본 샘플 학교
|
|
const allDongs = Object.keys(schoolsIndex.byDong || {})
|
|
if (allDongs.length > 0) {
|
|
return (schoolsIndex.byDong[allDongs[0]] || []).slice(0, 4)
|
|
}
|
|
return []
|
|
})
|
|
</script>
|
|
|
|
<style scoped>
|
|
.schools-section {
|
|
max-width: 1080px;
|
|
margin: 0 auto 50px;
|
|
padding: 0 16px;
|
|
}
|
|
|
|
.section-header {
|
|
text-align: center;
|
|
margin-bottom: 30px;
|
|
}
|
|
|
|
.section-badge {
|
|
display: inline-block;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
color: #2563eb;
|
|
background-color: #eff6ff;
|
|
padding: 4px 14px;
|
|
border-radius: 9999px;
|
|
margin-bottom: 10px;
|
|
border: 1px solid #bfdbfe;
|
|
}
|
|
|
|
.section-title {
|
|
font-size: 26px;
|
|
font-weight: 800;
|
|
color: #0f172a;
|
|
letter-spacing: -0.02em;
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
.section-desc {
|
|
font-size: 15px;
|
|
color: #64748b;
|
|
max-width: 720px;
|
|
margin: 0 auto;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
/* 나이스 고등학교 칩 영역 */
|
|
.neis-schools-box {
|
|
background: #f8fafc;
|
|
border: 1.5px solid #e2e8f0;
|
|
border-radius: 18px;
|
|
padding: 18px 22px;
|
|
margin-bottom: 28px;
|
|
}
|
|
|
|
.neis-header {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.neis-title {
|
|
font-size: 14.5px;
|
|
color: #1e293b;
|
|
}
|
|
|
|
.neis-source {
|
|
font-size: 11.5px;
|
|
color: #64748b;
|
|
background: #ffffff;
|
|
padding: 3px 8px;
|
|
border-radius: 6px;
|
|
border: 1px solid #e2e8f0;
|
|
}
|
|
|
|
.school-tags-wrap {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 8px;
|
|
}
|
|
|
|
.school-tag-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
background: #ffffff;
|
|
border: 1.5px solid #cbd5e1;
|
|
padding: 7px 14px;
|
|
border-radius: 999px;
|
|
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
|
|
transition: all 0.2s ease;
|
|
}
|
|
|
|
.school-tag-pill:hover {
|
|
border-color: #2563eb;
|
|
transform: translateY(-1px);
|
|
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.12);
|
|
}
|
|
|
|
.school-tag-name {
|
|
font-size: 13.5px;
|
|
font-weight: 800;
|
|
color: #0f172a;
|
|
}
|
|
|
|
.school-tag-type {
|
|
font-size: 11px;
|
|
font-weight: 700;
|
|
color: #2563eb;
|
|
background: #eff6ff;
|
|
padding: 2px 6px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.schools-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
gap: 20px;
|
|
}
|
|
|
|
.school-card {
|
|
background-color: #ffffff;
|
|
border: 1.5px solid #e2e8f0;
|
|
border-radius: 20px;
|
|
padding: 26px 24px;
|
|
box-shadow: 0 4px 16px rgba(15, 23, 42, 0.04);
|
|
}
|
|
|
|
.school-type-badge {
|
|
display: inline-block;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
padding: 4px 10px;
|
|
border-radius: 6px;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.school-type-badge.high {
|
|
background-color: #fef2f2;
|
|
color: #dc2626;
|
|
border: 1px solid #fecaca;
|
|
}
|
|
|
|
.school-type-badge.middle {
|
|
background-color: #ecfdf5;
|
|
color: #059669;
|
|
border: 1px solid #a7f3d0;
|
|
}
|
|
|
|
.school-type-badge.elem {
|
|
background-color: #fffbeb;
|
|
color: #d97706;
|
|
border: 1px solid #fde68a;
|
|
}
|
|
|
|
.school-name {
|
|
font-size: 18px;
|
|
font-weight: 800;
|
|
color: #0f172a;
|
|
margin-bottom: 12px;
|
|
}
|
|
|
|
.school-focus {
|
|
font-size: 14px;
|
|
color: #334155;
|
|
line-height: 1.6;
|
|
margin-bottom: 16px;
|
|
}
|
|
|
|
.school-checklist {
|
|
list-style: none;
|
|
padding: 0;
|
|
margin: 0;
|
|
border-top: 1px dashed #e2e8f0;
|
|
padding-top: 14px;
|
|
}
|
|
|
|
.school-checklist li {
|
|
font-size: 13.5px;
|
|
color: #475569;
|
|
line-height: 1.7;
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.schools-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
</style>
|