You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

250 lines
6.1 KiB
Vue

2 months ago
<!-- ContenidoPrincipal.vue (refactorizado) -->
2 months ago
<template>
<NavbarModerno />
<div class="main-content">
2 months ago
<HeroSection
2 months ago
@scroll-to-convocatoria="scrollToConvocatoria"
@virtual-tour="openVirtualTour"
/>
2 months ago
2 months ago
<ProcessSection />
2 months ago
2 months ago
<ConvocatoriasSection
2 months ago
@show-modal="showModal"
@open-preinscripcion="openPreinscripcion"
/>
2 months ago
2 months ago
<ProgramasSection :facultades="facultades" />
2 months ago
2 months ago
<StatsSection />
2 months ago
2 months ago
<NoticiasSection :noticias="noticias" />
2 months ago
2 months ago
<ModalidadesSection :modalidades="modalidades" />
2 months ago
2 months ago
<ContactSection />
2 months ago
</div>
2 months ago
<PreinscripcionModal
2 months ago
v-model:visible="preinscripcionModalVisible"
:facultades="facultades"
@submit="submitPreinscripcion"
/>
<FooterModerno />
2 months ago
</template>
<script setup>
2 months ago
import { ref, markRaw } from "vue"
import { message } from "ant-design-vue"
2 months ago
// Components
import NavbarModerno from '../components/nabvar.vue'
import FooterModerno from '../components/footer.vue'
// Secciones
import HeroSection from './WebPageSections/HeroSection.vue'
import ProcessSection from './WebPageSections/ProcessSection.vue'
import ConvocatoriasSection from './WebPageSections/ConvocatoriasSection.vue'
import ProgramasSection from './WebPageSections/ProgramasSection.vue'
import StatsSection from './WebPageSections/StatsSection.vue'
import NoticiasSection from './WebPageSections/NoticiasSection.vue'
import ModalidadesSection from './WebPageSections/ModalidadesSection.vue'
import ContactSection from './WebPageSections/ContactSection.vue'
import PreinscripcionModal from './WebPageSections//modal/PreinscripcionModal.vue'
2 months ago
// Iconos
import {
2 months ago
MedicineBoxOutlined,
BuildOutlined,
CodeOutlined,
2 months ago
BookOutlined,
TrophyOutlined,
BankOutlined,
2 months ago
ExperimentOutlined,
UserOutlined,
} from "@ant-design/icons-vue"
2 months ago
// Estado
const preinscripcionModalVisible = ref(false)
2 months ago
// Datos (estáticos → const, no ref)
const facultades = [
2 months ago
{
2 months ago
id: "1",
nombre: "Ciencias de la Salud",
2 months ago
carreras: [
2 months ago
{
id: 1,
nombre: "Medicina Humana",
grado: "Bachiller",
descripcion: "Formación médica integral con prácticas desde primer año",
vacantes: 50,
puntaje: "1800+",
icono: markRaw(MedicineBoxOutlined),
},
{
id: 2,
nombre: "Enfermería",
grado: "Bachiller",
descripcion: "Cuidado integral de la salud",
vacantes: 60,
puntaje: "1500+",
icono: markRaw(UserOutlined),
},
],
2 months ago
},
{
2 months ago
id: "2",
nombre: "Ingenierías",
2 months ago
carreras: [
2 months ago
{
id: 3,
nombre: "Ingeniería Civil",
grado: "Bachiller",
descripcion: "Diseño y construcción de infraestructura",
vacantes: 80,
puntaje: "1700+",
icono: markRaw(BuildOutlined),
},
{
id: 4,
nombre: "Ingeniería de Sistemas",
grado: "Bachiller",
descripcion: "Desarrollo de software e inteligencia artificial",
vacantes: 100,
puntaje: "1600+",
icono: markRaw(CodeOutlined),
},
],
2 months ago
},
{
2 months ago
id: "3",
nombre: "Derecho y Humanidades",
2 months ago
carreras: [
2 months ago
{
id: 5,
nombre: "Derecho",
grado: "Bachiller",
descripcion: "Formación jurídica integral",
vacantes: 120,
puntaje: "1550+",
icono: markRaw(BookOutlined),
},
{
id: 6,
nombre: "Psicología",
grado: "Bachiller",
descripcion: "Ciencias del comportamiento humano",
vacantes: 70,
puntaje: "1450+",
icono: markRaw(UserOutlined),
},
],
},
]
const modalidades = [
2 months ago
{
id: 1,
2 months ago
nombre: "Admisión Ordinaria",
descripcion: "Examen de conocimientos generales",
estado: "Abierto",
estadoColor: "success",
color: "#1890ff",
icono: markRaw(BookOutlined),
2 months ago
},
{
id: 2,
2 months ago
nombre: "Evaluación de Talentos",
descripcion: "Para deportistas y artistas destacados",
estado: "Próximamente",
estadoColor: "orange",
color: "#faad14",
icono: markRaw(TrophyOutlined),
2 months ago
},
{
id: 3,
2 months ago
nombre: "Traslado Externo",
descripcion: "Estudiantes de otras universidades",
estado: "Cerrado",
estadoColor: "red",
color: "#ff4d4f",
icono: markRaw(BankOutlined),
},
{
id: 4,
nombre: "Segunda Carrera",
descripcion: "Para profesionales graduados",
estado: "Abierto",
estadoColor: "success",
color: "#52c41a",
icono: markRaw(ExperimentOutlined),
},
]
const noticias = [
{
id: 1,
titulo: "Nuevo Laboratorio de Investigación",
descripcion: "Inauguramos el moderno laboratorio de ciencias con tecnología de punta.",
fecha: "15 Nov 2023",
categoria: "Infraestructura",
tagColor: "blue",
imagen:
"https://images.unsplash.com/photo-1532094349884-543bc11b234d?auto=format&fit=crop&w=600&q=80",
},
{
id: 2,
titulo: "Convenio Internacional",
descripcion: "Firmamos acuerdo con universidad europea para intercambio estudiantil.",
fecha: "10 Nov 2023",
categoria: "Internacional",
tagColor: "green",
imagen:
"https://images.unsplash.com/photo-1523050854058-8df90110c9f1?auto=format&fit=crop&w=600&q=80",
},
{
id: 3,
titulo: "Resultados Publicados",
descripcion: "Consulta los resultados del examen de admisión extraordinario.",
fecha: "5 Nov 2023",
categoria: "Resultados",
tagColor: "red",
imagen:
"https://images.unsplash.com/photo-1562774053-701939374585?auto=format&fit=crop&w=600&q=80",
},
]
2 months ago
// Métodos
const scrollToConvocatoria = () => {
2 months ago
const el = document.getElementById("convocatorias")
el?.scrollIntoView({ behavior: "smooth", block: "start" })
2 months ago
}
const openVirtualTour = () => {
2 months ago
// pon aquí tu URL real
window.open("https://example.com", "_blank", "noopener,noreferrer")
2 months ago
}
const openPreinscripcion = () => {
preinscripcionModalVisible.value = true
}
const showModal = (type) => {
2 months ago
console.log("Mostrar modal:", type)
2 months ago
}
const submitPreinscripcion = () => {
2 months ago
message.success("Preinscripción iniciada exitosamente")
2 months ago
preinscripcionModalVisible.value = false
}
</script>
<style scoped>
2 months ago
.main-content {
min-height: 100vh;
2 months ago
}
</style>