DSADDSA
parent
53dbbe5382
commit
495595033d
Binary file not shown.
|
After Width: | Height: | Size: 6.3 MiB |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,139 @@
|
||||
<!-- components/contact/ContactSection.vue -->
|
||||
<template>
|
||||
<section class="contact-section">
|
||||
<div class="section-container">
|
||||
<div class="contact-grid">
|
||||
<div class="contact-info">
|
||||
<h2 class="section-title">¿Necesitas Ayuda?</h2>
|
||||
<p class="contact-subtitle">Nuestro equipo está listo para asistirte en todo el proceso de admisión</p>
|
||||
|
||||
<div class="contact-methods">
|
||||
<div class="contact-method">
|
||||
<PhoneOutlined />
|
||||
<div>
|
||||
<h4>Teléfono</h4>
|
||||
<p>(01) 123-4567</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-method">
|
||||
<MailOutlined />
|
||||
<div>
|
||||
<h4>Email</h4>
|
||||
<p>admision@universidad.edu.pe</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="contact-method">
|
||||
<ClockCircleOutlined />
|
||||
<div>
|
||||
<h4>Horario</h4>
|
||||
<p>Lun-Vie: 8:00 AM - 6:00 PM</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="contact-form">
|
||||
<h3>Envíanos un Mensaje</h3>
|
||||
<a-form layout="vertical">
|
||||
<a-form-item label="Nombre completo">
|
||||
<a-input placeholder="Ingresa tu nombre completo" />
|
||||
</a-form-item>
|
||||
<a-form-item label="Email">
|
||||
<a-input placeholder="tu@email.com" />
|
||||
</a-form-item>
|
||||
<a-form-item label="Consulta">
|
||||
<a-textarea placeholder="Describe tu consulta..." :rows="4" />
|
||||
</a-form-item>
|
||||
<a-button type="primary" block>Enviar Mensaje</a-button>
|
||||
</a-form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { PhoneOutlined, MailOutlined, ClockCircleOutlined } from '@ant-design/icons-vue'
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.contact-section {
|
||||
padding: 80px 0;
|
||||
}
|
||||
|
||||
.section-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.contact-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 80px;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
color: #1a237e;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.contact-subtitle {
|
||||
color: #666;
|
||||
font-size: 1.125rem;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.contact-methods {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
.contact-method {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.contact-method svg {
|
||||
color: #1890ff;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.contact-method h4 {
|
||||
margin: 0 0 4px;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
.contact-method p {
|
||||
margin: 0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.contact-form {
|
||||
background: white;
|
||||
padding: 40px;
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
|
||||
}
|
||||
|
||||
.contact-form h3 {
|
||||
margin: 0 0 32px;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.contact-grid {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 48px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,310 @@
|
||||
<!-- components/convocatorias/ConvocatoriasSection.vue -->
|
||||
<template>
|
||||
<section id="convocatorias" class="convocatorias-modern">
|
||||
<div class="section-container">
|
||||
<div class="section-header">
|
||||
<div class="header-with-badge">
|
||||
<h2 class="section-title">Convocatorias Vigentes</h2>
|
||||
<a-badge count="Nuevo" class="new-badge" />
|
||||
</div>
|
||||
<p class="section-subtitle">Selecciona el proceso de admisión que se ajuste a tu perfil</p>
|
||||
</div>
|
||||
|
||||
<div class="convocatorias-grid">
|
||||
<!-- Convocatoria Principal -->
|
||||
<!-- Convocatoria Principal -->
|
||||
<a-card class="main-convocatoria-card">
|
||||
<div class="card-badge">Principal</div>
|
||||
|
||||
<div class="main-card-content">
|
||||
|
||||
<!-- IZQUIERDA: CONTENIDO -->
|
||||
<div class="main-card-text">
|
||||
<div class="convocatoria-header">
|
||||
<div>
|
||||
<h3>Admisión Ordinaria 2024-I</h3>
|
||||
<p class="convocatoria-date">
|
||||
Inscripciones: 20 Oct - 30 Nov 2023
|
||||
</p>
|
||||
</div>
|
||||
<a-tag color="success" class="status-tag">Abierto</a-tag>
|
||||
</div>
|
||||
|
||||
<p class="convocatoria-desc">
|
||||
Proceso de admisión general para todas las carreras profesionales de pregrado.
|
||||
Examen de conocimientos: 15 de diciembre 2023.
|
||||
</p>
|
||||
|
||||
<a-divider class="custom-divider" />
|
||||
|
||||
<div class="quick-actions">
|
||||
<h4>Acciones Rápidas</h4>
|
||||
|
||||
<div class="action-buttons-grid">
|
||||
<a-button class="action-btn" @click="$emit('show-modal', 'requisitos')">
|
||||
<template #icon><FileTextOutlined /></template>
|
||||
Requisitos
|
||||
</a-button>
|
||||
|
||||
<a-button class="action-btn" @click="$emit('show-modal', 'pagos')">
|
||||
<template #icon><DollarOutlined /></template>
|
||||
Pagos
|
||||
</a-button>
|
||||
|
||||
<a-button class="action-btn" @click="$emit('show-modal', 'vacantes')">
|
||||
<template #icon><TeamOutlined /></template>
|
||||
Vacantes
|
||||
</a-button>
|
||||
|
||||
<a-button class="action-btn" @click="$emit('show-modal', 'cronograma')">
|
||||
<template #icon><CalendarOutlined /></template>
|
||||
Cronograma
|
||||
</a-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a-divider class="custom-divider" />
|
||||
|
||||
<div class="preinscripcion-section">
|
||||
<div class="preinscripcion-info">
|
||||
<h4>Preinscripción en Línea</h4>
|
||||
<p>Completa tu preinscripción de manera digital y segura</p>
|
||||
</div>
|
||||
|
||||
<a-button
|
||||
type="primary"
|
||||
size="large"
|
||||
class="preinscripcion-btn"
|
||||
@click="$emit('open-preinscripcion')"
|
||||
>
|
||||
<template #icon><FormOutlined /></template>
|
||||
Iniciar Preinscripción
|
||||
</a-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</a-card>
|
||||
<!-- IMAGEN DERECHA -->
|
||||
<div class="convocatoria-image-wrapper">
|
||||
<a-image
|
||||
src="/images/extra.jpg"
|
||||
alt="Convocatoria"
|
||||
:preview="true"
|
||||
class="convocatoria-image"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Otras convocatorias -->
|
||||
<a-card class="secondary-convocatoria-card" >
|
||||
<div class="convocatoria-header">
|
||||
<div>
|
||||
<h4>cepreuna</h4>
|
||||
<p class="convocatoria-date">30 de enero</p>
|
||||
</div>
|
||||
<a-tag class="status-tag">FINALIZADO</a-tag>
|
||||
</div>
|
||||
<p class="convocatoria-desc">postulaNTES DEL CEPRE </p>
|
||||
<div class="card-footer">
|
||||
<a-button type="link" size="small">Ver detalles</a-button>
|
||||
<a-button type="primary" ghost size="small">Consultar</a-button>
|
||||
</div>
|
||||
</a-card>
|
||||
<a-card class="secondary-convocatoria-card" >
|
||||
<div class="convocatoria-header">
|
||||
<div>
|
||||
<h4>cepreuna</h4>
|
||||
<p class="convocatoria-date">30 de enero</p>
|
||||
</div>
|
||||
<a-tag class="status-tag">FINALIZADO</a-tag>
|
||||
</div>
|
||||
<p class="convocatoria-desc">postulaNTES DEL CEPRE </p>
|
||||
<div class="card-footer">
|
||||
<a-button type="link" size="small">Ver detalles</a-button>
|
||||
<a-button type="primary" ghost size="small">Consultar</a-button>
|
||||
</div>
|
||||
</a-card>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { FileTextOutlined, DollarOutlined, TeamOutlined, CalendarOutlined, FormOutlined } from '@ant-design/icons-vue'
|
||||
|
||||
defineProps({
|
||||
otrasConvocatorias: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
defineEmits(['show-modal', 'open-preinscripcion'])
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.convocatorias-modern {
|
||||
padding: 80px 0;
|
||||
font-family: "Times New Roman", Times, serif;
|
||||
}
|
||||
|
||||
.section-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
text-align: center;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.8rem;
|
||||
font-weight: 700;
|
||||
color: #0d1b52;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.section-subtitle {
|
||||
font-size: 1.125rem;
|
||||
color: #666;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.header-with-badge {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.new-badge :deep(.ant-badge-count) {
|
||||
background: linear-gradient(45deg, #ff6b6b, #ffd700);
|
||||
box-shadow: 0 2px 8px rgba(255, 107, 107, 0.3);
|
||||
}
|
||||
|
||||
.convocatorias-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 2fr 1fr;
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
.main-convocatoria-card {
|
||||
position: relative;
|
||||
border: none;
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08);
|
||||
border-radius: 16px;
|
||||
padding: 32px;
|
||||
}
|
||||
|
||||
.card-badge {
|
||||
position: absolute;
|
||||
top: -12px;
|
||||
left: 24px;
|
||||
background: linear-gradient(45deg, #1890ff, #52c41a);
|
||||
color: white;
|
||||
padding: 6px 16px;
|
||||
border-radius: 20px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.convocatoria-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.convocatoria-header h3 {
|
||||
margin: 0;
|
||||
font-size: 1.5rem;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
.convocatoria-date {
|
||||
color: #666;
|
||||
margin: 8px 0 0;
|
||||
}
|
||||
|
||||
.status-tag {
|
||||
font-weight: 600;
|
||||
padding: 4px 12px;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.convocatoria-desc {
|
||||
color: #666;
|
||||
line-height: 1.6;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.custom-divider {
|
||||
margin: 24px 0;
|
||||
}
|
||||
|
||||
.action-buttons-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 12px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
height: 48px;
|
||||
}
|
||||
|
||||
.preinscripcion-section {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
.preinscripcion-info h4 {
|
||||
margin: 0 0 8px;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
.preinscripcion-btn {
|
||||
background: linear-gradient(135deg, #1a237e 0%, #283593 100%);
|
||||
border: none;
|
||||
height: 56px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.secondary-convocatoria-card {
|
||||
border: none;
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.card-footer {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.convocatorias-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.preinscripcion-section {
|
||||
flex-direction: column;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,147 @@
|
||||
<!-- components/hero/HeroSection.vue -->
|
||||
<template>
|
||||
<section class="modern-hero">
|
||||
<div class="hero-container">
|
||||
<div class="hero-content">
|
||||
<a-tag color="blue" class="hero-tag">Convocatoria 2026</a-tag>
|
||||
<h1 class="hero-title">
|
||||
Admision
|
||||
<span class="gradient-text">2026</span>
|
||||
</h1>
|
||||
<p class="hero-subtitle">
|
||||
Forma parte de la comunidad universitaria más prestigiosa del país.
|
||||
<br>Admisión 2024-I | Inscripciones abiertas
|
||||
</p>
|
||||
<div class="hero-actions">
|
||||
<a-button type="primary" size="large" class="cta-button" @click="$emit('scroll-to-convocatoria')">
|
||||
<template #icon><RightCircleOutlined /></template>
|
||||
Postular Ahora
|
||||
</a-button>
|
||||
<a-button size="large" class="secondary-button" @click="$emit('virtual-tour')">
|
||||
<template #icon><PlayCircleOutlined /></template>
|
||||
Tour Virtual
|
||||
</a-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hero-visual">
|
||||
<div class="floating-card">
|
||||
<div class="card-header">
|
||||
<CalendarOutlined />
|
||||
<span>Próximo Evento</span>
|
||||
</div>
|
||||
<h3>Charla Informativa</h3>
|
||||
<p>25 Nov | 4:00 PM - Virtual</p>
|
||||
<a-button type="link" size="small">Registrarse</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { RightCircleOutlined, PlayCircleOutlined, CalendarOutlined } from '@ant-design/icons-vue'
|
||||
|
||||
defineEmits(['scroll-to-convocatoria', 'virtual-tour'])
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.modern-hero {
|
||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
color: white;
|
||||
padding: 80px 0;
|
||||
}
|
||||
|
||||
.hero-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 80px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.hero-tag {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
border: none;
|
||||
color: white;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
font-size: 3.5rem;
|
||||
font-weight: 800;
|
||||
line-height: 1.1;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.gradient-text {
|
||||
background: linear-gradient(45deg, #ffd700, #ff6b6b);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.hero-subtitle {
|
||||
font-size: 1.25rem;
|
||||
opacity: 0.9;
|
||||
margin-bottom: 32px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.hero-actions {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.cta-button {
|
||||
background: white;
|
||||
border: none;
|
||||
color: #1a237e;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.secondary-button {
|
||||
background: transparent;
|
||||
border: 2px solid rgba(255, 255, 255, 0.3);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.floating-card {
|
||||
background: white;
|
||||
color: #333;
|
||||
padding: 24px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.card-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
color: #666;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.hero-container {
|
||||
grid-template-columns: 1fr;
|
||||
text-align: center;
|
||||
gap: 48px;
|
||||
}
|
||||
|
||||
.hero-title {
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
.hero-actions {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.hero-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,120 @@
|
||||
<!-- components/modalidades/ModalidadesSection.vue -->
|
||||
<template>
|
||||
<section class="modalidades-section">
|
||||
<div class="section-container">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">Modalidades de Admisión</h2>
|
||||
<p class="section-subtitle">Diferentes formas de ingresar a nuestra universidad</p>
|
||||
</div>
|
||||
|
||||
<div class="modalidades-grid">
|
||||
<a-card v-for="modalidad in modalidades" :key="modalidad.id" class="modalidad-card">
|
||||
<div class="modalidad-icon" :style="{ backgroundColor: modalidad.color }">
|
||||
<component :is="modalidad.icono" />
|
||||
</div>
|
||||
<h4>{{ modalidad.nombre }}</h4>
|
||||
<p>{{ modalidad.descripcion }}</p>
|
||||
<a-tag :color="modalidad.estadoColor" class="modalidad-status">
|
||||
{{ modalidad.estado }}
|
||||
</a-tag>
|
||||
</a-card>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineProps({
|
||||
modalidades: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.modalidades-section {
|
||||
padding: 80px 0;
|
||||
background: #f8f9fa;
|
||||
}
|
||||
|
||||
.section-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
text-align: center;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
color: #1a237e;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.section-subtitle {
|
||||
font-size: 1.125rem;
|
||||
color: #666;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.modalidades-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
.modalidad-card {
|
||||
border: none;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
|
||||
text-align: center;
|
||||
padding: 32px 24px;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.modalidad-card:hover {
|
||||
transform: translateY(-4px);
|
||||
}
|
||||
|
||||
.modalidad-icon {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 auto 20px;
|
||||
color: white;
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.modalidad-card h4 {
|
||||
margin: 0 0 12px;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
.modalidad-card p {
|
||||
color: #666;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.5;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.modalidad-status {
|
||||
font-weight: 500;
|
||||
padding: 4px 16px;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,134 @@
|
||||
<!-- components/noticias/NoticiasSection.vue -->
|
||||
<template>
|
||||
<section class="noticias-modern">
|
||||
<div class="section-container">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">Noticias y Comunicados</h2>
|
||||
<a-button type="link" class="view-all">Ver todos</a-button>
|
||||
</div>
|
||||
|
||||
<div class="noticias-grid-modern">
|
||||
<a-card v-for="noticia in noticias" :key="noticia.id" class="noticia-card-modern">
|
||||
<div class="noticia-image" :style="{ backgroundImage: `url(${noticia.imagen})` }">
|
||||
<a-tag :color="noticia.tagColor" class="noticia-tag">{{ noticia.categoria }}</a-tag>
|
||||
</div>
|
||||
<div class="noticia-content">
|
||||
<div class="noticia-meta">
|
||||
<CalendarOutlined />
|
||||
<span>{{ noticia.fecha }}</span>
|
||||
</div>
|
||||
<h4>{{ noticia.titulo }}</h4>
|
||||
<p>{{ noticia.descripcion }}</p>
|
||||
<a-button type="link" size="small">Leer más</a-button>
|
||||
</div>
|
||||
</a-card>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { CalendarOutlined } from '@ant-design/icons-vue'
|
||||
|
||||
defineProps({
|
||||
noticias: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.noticias-modern {
|
||||
padding: 80px 0;
|
||||
}
|
||||
|
||||
.section-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
color: #1a237e;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.view-all {
|
||||
color: #1890ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.noticias-grid-modern {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
||||
gap: 32px;
|
||||
}
|
||||
|
||||
.noticia-card-modern {
|
||||
border: none;
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.noticia-card-modern:hover {
|
||||
transform: translateY(-4px);
|
||||
}
|
||||
|
||||
.noticia-image {
|
||||
height: 200px;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.noticia-tag {
|
||||
position: absolute;
|
||||
top: 16px;
|
||||
left: 16px;
|
||||
border: none;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.noticia-content {
|
||||
padding: 24px;
|
||||
}
|
||||
|
||||
.noticia-meta {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
color: #666;
|
||||
font-size: 0.875rem;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.noticia-content h4 {
|
||||
margin: 0 0 12px;
|
||||
color: #1a237e;
|
||||
font-size: 1.125rem;
|
||||
}
|
||||
|
||||
.noticia-content p {
|
||||
color: #666;
|
||||
line-height: 1.5;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,115 @@
|
||||
<!-- components/process/ProcessSection.vue -->
|
||||
<template>
|
||||
<section class="process-section">
|
||||
<div class="section-container">
|
||||
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">Proceso de Admisión 2026</h2>
|
||||
<p class="section-subtitle">
|
||||
Sigue estos pasos para postular al Examen General 2026-I
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="process-timeline">
|
||||
<a-steps :current="2" class="modern-steps">
|
||||
<a-step title="Preinscripción Virtual" description="20 Oct - 30 Nov" />
|
||||
<a-step title="Inscripción Presencial" description="1 - 5 Dic" />
|
||||
<a-step title="Examen" description="15 Diciembre" />
|
||||
<a-step title="Resultados" description="20 Diciembre" />
|
||||
<a-step title="Control Biométrico Ingresantes" description="8 - 12 Ene" />
|
||||
</a-steps>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.process-section {
|
||||
padding: 30px 0; /* mucho menos espacio */
|
||||
background: #ffffff; /* quitamos el gris */
|
||||
font-family: "Times New Roman", Times, serif;
|
||||
}
|
||||
|
||||
.section-container {
|
||||
max-width: 1100px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
text-align: center;
|
||||
margin-bottom: 25px; /* reducido */
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.1rem;
|
||||
font-weight: 600;
|
||||
color: #2c3e50;
|
||||
margin: 0 0 6px 0; /* sin espacio exagerado */
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.section-subtitle {
|
||||
font-size: 1rem;
|
||||
color: #777;
|
||||
margin: 0;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
/* ====== STEPS ====== */
|
||||
|
||||
.process-timeline {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.modern-steps {
|
||||
padding: 15px 10px; /* MUY compacto */
|
||||
}
|
||||
|
||||
/* QUITAR ESPACIO EXTRA DE ANT DESIGN */
|
||||
.modern-steps :deep(.ant-steps-item) {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.modern-steps :deep(.ant-steps-item-title) {
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
color: #34495e;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.modern-steps :deep(.ant-steps-item-description) {
|
||||
font-size: 0.8rem;
|
||||
color: #888;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
/* Iconos más pequeños */
|
||||
.modern-steps :deep(.ant-steps-item-icon) {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
/* Línea más fina */
|
||||
.modern-steps :deep(.ant-steps-item-tail::after) {
|
||||
height: 2px;
|
||||
background: #dfe6e9;
|
||||
}
|
||||
|
||||
/* Step activo */
|
||||
.modern-steps :deep(.ant-steps-item-process .ant-steps-item-icon) {
|
||||
background-color: #4a69bd;
|
||||
border-color: #4a69bd;
|
||||
}
|
||||
|
||||
/* Quitar altura extra que mete Ant */
|
||||
.modern-steps :deep(.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item) {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
@ -0,0 +1,161 @@
|
||||
<!-- components/programas/ProgramasSection.vue -->
|
||||
<template>
|
||||
<section class="programas-section">
|
||||
<div class="section-container">
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">Programas Académicos</h2>
|
||||
<p class="section-subtitle">Explora nuestra oferta académica de pregrado y posgrado</p>
|
||||
</div>
|
||||
|
||||
<div class="facultades-tabs">
|
||||
<a-tabs v-model:activeKey="facultadActiva">
|
||||
<a-tab-pane v-for="facultad in facultades" :key="facultad.id" :tab="facultad.nombre">
|
||||
<div class="carreras-grid">
|
||||
<a-card v-for="carrera in facultad.carreras" :key="carrera.id" class="carrera-card">
|
||||
<div class="carrera-header">
|
||||
<div class="carrera-icon">
|
||||
<component :is="carrera.icono" />
|
||||
</div>
|
||||
<div>
|
||||
<h4>{{ carrera.nombre }}</h4>
|
||||
<p class="carrera-grado">{{ carrera.grado }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<p class="carrera-desc">{{ carrera.descripcion }}</p>
|
||||
<div class="carrera-stats">
|
||||
<span><UserOutlined /> Vacantes: {{ carrera.vacantes }}</span>
|
||||
<span><TrophyOutlined /> Puntaje: {{ carrera.puntaje }}</span>
|
||||
</div>
|
||||
<a-button type="link" size="small" class="carrera-link">Ver plan de estudios</a-button>
|
||||
</a-card>
|
||||
</div>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { UserOutlined, TrophyOutlined } from '@ant-design/icons-vue'
|
||||
|
||||
defineProps({
|
||||
facultades: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
const facultadActiva = ref('1')
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.programas-section {
|
||||
padding: 80px 0;
|
||||
background: #f8f9fa;
|
||||
}
|
||||
|
||||
.section-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
text-align: center;
|
||||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 700;
|
||||
color: #1a237e;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.section-subtitle {
|
||||
font-size: 1.125rem;
|
||||
color: #666;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.facultades-tabs :deep(.ant-tabs-nav) {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.carreras-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 24px;
|
||||
}
|
||||
|
||||
.carrera-card {
|
||||
border: none;
|
||||
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
|
||||
border-radius: 12px;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
.carrera-card:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
|
||||
}
|
||||
|
||||
.carrera-header {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
align-items: center;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.carrera-icon {
|
||||
background: linear-gradient(135deg, #1a237e 0%, #283593 100%);
|
||||
color: white;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border-radius: 8px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.carrera-header h4 {
|
||||
margin: 0;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
.carrera-grado {
|
||||
color: #666;
|
||||
font-size: 0.875rem;
|
||||
margin: 4px 0 0;
|
||||
}
|
||||
|
||||
.carrera-desc {
|
||||
color: #666;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.5;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.carrera-stats {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
color: #666;
|
||||
font-size: 0.875rem;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.carrera-link {
|
||||
color: #1890ff;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
@media (max-width: 992px) {
|
||||
.section-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,63 @@
|
||||
|
||||
<!-- components/stats/StatsSection.vue -->
|
||||
<template>
|
||||
<section class="stats-section">
|
||||
<div class="section-container">
|
||||
<div class="stats-grid">
|
||||
<div class="stat-card">
|
||||
<h3>25+</h3>
|
||||
<p>Carreras Profesionales</p>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<h3>98%</h3>
|
||||
<p>Indice de Satisfacción</p>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<h3>15,000+</h3>
|
||||
<p>Estudiantes Activos</p>
|
||||
</div>
|
||||
<div class="stat-card">
|
||||
<h3>85%</h3>
|
||||
<p>Egresados Laborando</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.stats-section {
|
||||
padding: 60px 0;
|
||||
background: linear-gradient(135deg, #1a237e 0%, #283593 100%);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.section-container {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
.stats-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
gap: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stat-card h3 {
|
||||
font-size: 3rem;
|
||||
font-weight: 800;
|
||||
margin: 0;
|
||||
background: linear-gradient(45deg, #ffd700, #ff6b6b);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
}
|
||||
|
||||
.stat-card p {
|
||||
font-size: 1rem;
|
||||
opacity: 0.9;
|
||||
margin: 8px 0 0;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,118 @@
|
||||
<!-- components/modals/PreinscripcionModal.vue -->
|
||||
<template>
|
||||
<a-modal
|
||||
:open="visible"
|
||||
@update:open="$emit('update:visible', $event)"
|
||||
title="Preinscripción en Línea"
|
||||
width="600px"
|
||||
:footer="null"
|
||||
class="modern-modal"
|
||||
>
|
||||
|
||||
<div class="modal-steps">
|
||||
<a-steps :current="0" size="small">
|
||||
<a-step title="Datos Personales" />
|
||||
<a-step title="Programa" />
|
||||
<a-step title="Documentos" />
|
||||
<a-step title="Confirmación" />
|
||||
</a-steps>
|
||||
</div>
|
||||
|
||||
<a-form layout="vertical" class="modal-form">
|
||||
<h3>Información Personal</h3>
|
||||
|
||||
<a-row :gutter="16">
|
||||
<a-col :span="12">
|
||||
<a-form-item label="Nombres">
|
||||
<a-input placeholder="Ingresa tus nombres" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="Apellidos">
|
||||
<a-input placeholder="Ingresa tus apellidos" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
|
||||
<a-form-item label="Correo Electrónico">
|
||||
<a-input type="email" placeholder="ejemplo@correo.com" />
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item label="Programa de Interés">
|
||||
<a-select placeholder="Selecciona un programa">
|
||||
<a-select-option v-for="facultad in facultades" :key="facultad.id">
|
||||
<optgroup :label="facultad.nombre">
|
||||
<a-select-option v-for="carrera in facultad.carreras" :key="carrera.id" :value="carrera.id">
|
||||
{{ carrera.nombre }}
|
||||
</a-select-option>
|
||||
</optgroup>
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item>
|
||||
<a-checkbox>
|
||||
Acepto los términos y condiciones del proceso de admisión
|
||||
</a-checkbox>
|
||||
</a-form-item>
|
||||
|
||||
<div class="modal-actions">
|
||||
<a-button @click="$emit('update:visible', false)">Cancelar</a-button>
|
||||
<a-button type="primary" @click="$emit('submit')">Continuar</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true
|
||||
},
|
||||
facultades: {
|
||||
type: Array,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
defineEmits(['update:visible', 'submit'])
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.modern-modal :deep(.ant-modal-content) {
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.modern-modal :deep(.ant-modal-header) {
|
||||
border-bottom: none;
|
||||
padding: 32px 32px 0;
|
||||
}
|
||||
|
||||
.modern-modal :deep(.ant-modal-body) {
|
||||
padding: 32px;
|
||||
}
|
||||
|
||||
.modern-modal :deep(.ant-modal-title) {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 600;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
.modal-steps {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.modal-form h3 {
|
||||
margin: 0 0 24px;
|
||||
color: #1a237e;
|
||||
}
|
||||
|
||||
.modal-actions {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
justify-content: flex-end;
|
||||
margin-top: 32px;
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue