added data and restrictions
This commit is contained in:
@@ -116,6 +116,36 @@ textarea {
|
||||
}
|
||||
}
|
||||
|
||||
.formGroup {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.suggestions {
|
||||
position: absolute; // mantiene fuera del flujo
|
||||
top: 100%; // justo debajo del input
|
||||
left: 0;
|
||||
width: 100%;
|
||||
background: #fff;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 6px;
|
||||
list-style: none;
|
||||
margin: 4px 0 0 0;
|
||||
padding: 0;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
z-index: 10;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.suggestions li {
|
||||
padding: 8px;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background: #f2f2f2;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 1075px) {
|
||||
.equipoForm {
|
||||
flex-wrap: wrap;
|
||||
|
||||
@@ -7,11 +7,17 @@ import Cookies from "js-cookie";
|
||||
import toast from "react-hot-toast";
|
||||
|
||||
import "../app/styles/layout/agregarEquipo.scss";
|
||||
import { AREAS } from "@/data/areas";
|
||||
import { SO_POR_EQUIPO } from "@/data/so_por_equipo";
|
||||
import { PROCESADORES_POR_EQUIPO } from "@/data/procesadores";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
export default function Page() {
|
||||
const searchParams = useSearchParams();
|
||||
const inventario = searchParams.get("equipoId");
|
||||
|
||||
const router = useRouter();
|
||||
|
||||
const [formData, setFormData] = useState({
|
||||
serie: "",
|
||||
marca: "",
|
||||
@@ -57,7 +63,7 @@ export default function Page() {
|
||||
|
||||
interface Marca {
|
||||
id_marca: number;
|
||||
tipo_marca: string;
|
||||
marca: string;
|
||||
}
|
||||
|
||||
interface Adscripcion {
|
||||
@@ -80,7 +86,7 @@ export default function Page() {
|
||||
adscripcion: [] as string[],
|
||||
});
|
||||
|
||||
const mostrarCamposComputadora = formData.tipoEquipo !== "Impresora";
|
||||
const mostrarCamposComputadora = formData.tipoEquipo !== "PERIFÉRICO";
|
||||
const api_url = process.env.NEXT_PUBLIC_API_URL;
|
||||
|
||||
useEffect(() => {
|
||||
@@ -151,6 +157,30 @@ export default function Page() {
|
||||
|
||||
const handleInputChange = (field: string, value: string) => {
|
||||
setFormData((prev) => ({ ...prev, [field]: value }));
|
||||
|
||||
if (field === "adscripcion") {
|
||||
if (value.length < 3) {
|
||||
// Si no hay al menos 3 letras, no mostrar sugerencias
|
||||
setSuggestions((prev) => ({ ...prev, adscripcion: [] }));
|
||||
return;
|
||||
}
|
||||
|
||||
// Función para normalizar: minúsculas y quitar acentos
|
||||
const normalize = (str: string) =>
|
||||
str
|
||||
.normalize("NFD")
|
||||
.replace(/[\u0300-\u036f]/g, "")
|
||||
.toLowerCase()
|
||||
.trim();
|
||||
|
||||
const searchValue = normalize(value);
|
||||
|
||||
const matches = AREAS.map((a) => a.label)
|
||||
.filter((label) => normalize(label).includes(searchValue))
|
||||
.slice(0, 5); // máximo 10 sugerencias
|
||||
|
||||
setSuggestions((prev) => ({ ...prev, adscripcion: matches }));
|
||||
}
|
||||
};
|
||||
|
||||
const handleSelectSuggestion = (field: string, value: string) => {
|
||||
@@ -159,6 +189,12 @@ export default function Page() {
|
||||
};
|
||||
|
||||
const handleGuardar = async () => {
|
||||
const adscripcionesValidas = AREAS.map((a) => a.label);
|
||||
if (!adscripcionesValidas.includes(formData.adscripcion)) {
|
||||
toast.error("Debes seleccionar una adscripción válida.");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const token = Cookies.get("token");
|
||||
const headers = { Authorization: `Bearer ${token}` };
|
||||
@@ -184,7 +220,7 @@ export default function Page() {
|
||||
};
|
||||
|
||||
const handleCancelar = () => {
|
||||
toast.error("Acción cancelada");
|
||||
router.push("/Escaner");
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -224,8 +260,8 @@ export default function Page() {
|
||||
>
|
||||
<option value="">Selecciona una marca</option>
|
||||
{marcas.map((m) => (
|
||||
<option key={m.id_marca} value={m.tipo_marca}>
|
||||
{m.tipo_marca}
|
||||
<option key={m.id_marca} value={m.marca}>
|
||||
{m.marca}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
@@ -304,9 +340,9 @@ export default function Page() {
|
||||
}
|
||||
>
|
||||
<option value="">Selecciona procesador</option>
|
||||
{procesadores.map((p) => (
|
||||
<option key={p.id_procesador} value={p.procesador}>
|
||||
{p.procesador}
|
||||
{PROCESADORES_POR_EQUIPO[formData.tipoEquipo]?.map((p) => (
|
||||
<option key={p} value={p}>
|
||||
{p}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
@@ -321,12 +357,9 @@ export default function Page() {
|
||||
}
|
||||
>
|
||||
<option value="">Selecciona sistema operativo</option>
|
||||
{sistemasOperativos.map((so) => (
|
||||
<option
|
||||
key={so.id_sistema_operativo}
|
||||
value={so.sistema_operativo}
|
||||
>
|
||||
{so.sistema_operativo}
|
||||
{SO_POR_EQUIPO[formData.tipoEquipo]?.map((so) => (
|
||||
<option key={so} value={so}>
|
||||
{so}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
@@ -334,7 +367,16 @@ export default function Page() {
|
||||
</>
|
||||
)}
|
||||
|
||||
<div className="formGroup">
|
||||
{!mostrarCamposComputadora && (
|
||||
<div className="formGroup">
|
||||
<label>Tipos de Perifericos</label>
|
||||
<select>
|
||||
<option value="">Selecciona periferico</option>
|
||||
</select>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="formGroup" style={{ position: "relative" }}>
|
||||
<label>Adscripción</label>
|
||||
<input
|
||||
required
|
||||
|
||||
+21
-13
@@ -8,6 +8,8 @@ import toast from "react-hot-toast";
|
||||
|
||||
import "../app/styles/layout/agregarEquipo.scss";
|
||||
import "./editar.css";
|
||||
import { SO_POR_EQUIPO } from "@/data/so_por_equipo";
|
||||
import { PROCESADORES_POR_EQUIPO } from "@/data/procesadores";
|
||||
|
||||
export default function Editar() {
|
||||
const searchParams = useSearchParams();
|
||||
@@ -56,7 +58,7 @@ export default function Editar() {
|
||||
|
||||
interface Marca {
|
||||
id_marca: number;
|
||||
tipo_marca: string;
|
||||
marca: string;
|
||||
}
|
||||
|
||||
interface Adscripcion {
|
||||
@@ -75,7 +77,7 @@ export default function Editar() {
|
||||
const [procesadores, setProcesadores] = useState<Procesador[]>([]);
|
||||
|
||||
const api_url = process.env.NEXT_PUBLIC_API_URL;
|
||||
const mostrarCamposComputadora = formData.tipoEquipo !== "Impresora";
|
||||
const mostrarCamposComputadora = formData.tipoEquipo !== "PERIFÉRICO";
|
||||
|
||||
// 🔹 Cargar catálogos
|
||||
useEffect(() => {
|
||||
@@ -214,8 +216,8 @@ export default function Editar() {
|
||||
>
|
||||
<option value="">Selecciona marca</option>
|
||||
{marcas.map((m) => (
|
||||
<option key={m.id_marca} value={m.tipo_marca}>
|
||||
{m.tipo_marca}
|
||||
<option key={m.id_marca} value={m.marca}>
|
||||
{m.marca}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
@@ -298,9 +300,9 @@ export default function Editar() {
|
||||
}
|
||||
>
|
||||
<option value="">Selecciona procesador</option>
|
||||
{procesadores.map((p) => (
|
||||
<option key={p.id_procesador} value={p.procesador}>
|
||||
{p.procesador}
|
||||
{PROCESADORES_POR_EQUIPO[formData.tipoEquipo]?.map((p) => (
|
||||
<option key={p} value={p}>
|
||||
{p}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
@@ -318,12 +320,9 @@ export default function Editar() {
|
||||
}
|
||||
>
|
||||
<option value="">Selecciona sistema operativo</option>
|
||||
{sistemasOperativos.map((so) => (
|
||||
<option
|
||||
key={so.id_sistema_operativo}
|
||||
value={so.sistema_operativo}
|
||||
>
|
||||
{so.sistema_operativo}
|
||||
{SO_POR_EQUIPO[formData.tipoEquipo]?.map((so) => (
|
||||
<option key={so} value={so}>
|
||||
{so}
|
||||
</option>
|
||||
))}
|
||||
</select>
|
||||
@@ -331,6 +330,15 @@ export default function Editar() {
|
||||
</>
|
||||
)}
|
||||
|
||||
{!mostrarCamposComputadora && (
|
||||
<div className="formGroup">
|
||||
<label>Tipos de Perifericos</label>
|
||||
<select>
|
||||
<option value="">Selecciona periferico</option>
|
||||
</select>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="formGroup">
|
||||
<label>Adscripción</label>
|
||||
<select
|
||||
|
||||
@@ -0,0 +1,114 @@
|
||||
//Esto es culpa de los webservices
|
||||
|
||||
export const AREAS: Array<{ id: number; label: string }> = [
|
||||
{ id: 128, label: "Coordinación de Actividades Deportivas y Recreativas" },
|
||||
{ id: 122, label: "Coordinación de Comunicación Social" },
|
||||
{ id: 9, label: "Coordinación de Cuerpos Colegiados" },
|
||||
{
|
||||
id: 126,
|
||||
label:
|
||||
"Coordinación de Derecho del Sistema de Universidad Abierta y Educación a Distancia",
|
||||
},
|
||||
{ id: 206, label: "Coordinación de Especializaciones" },
|
||||
{ id: 120, label: "Coordinación de Estudios de Posgrado" },
|
||||
{
|
||||
id: 182,
|
||||
label:
|
||||
"Coordinación de la Unidad de Investigación Multidisciplinaria Aplicada",
|
||||
},
|
||||
{
|
||||
id: 174,
|
||||
label:
|
||||
"Coordinación de LICEL Sistema de Universidad Abierta y Educación a Distancia",
|
||||
},
|
||||
{ id: 221, label: "Coordinación de Maestrías y Doctorados" },
|
||||
{
|
||||
id: 152,
|
||||
label:
|
||||
"Coordinación de Relaciones Internacionales del Sistema de Universidad Abierta y Educación a Distancia",
|
||||
},
|
||||
{ id: 121, label: "Coordinación de Servicios Académicos" },
|
||||
{ id: 125, label: "Coordinación del Centro de Difusión Cultural" },
|
||||
{ id: 124, label: "Coordinación del Centro de Educación Continua" },
|
||||
{ id: 129, label: "Coordinación del Centro de Enseñanza de Idiomas" },
|
||||
{
|
||||
id: 214,
|
||||
label: "Coordinación del Centro de Estudios Municipales y Metropolitanos",
|
||||
},
|
||||
{
|
||||
id: 176,
|
||||
label: "Coordinación del Centro Tecnológico para la Educación a Distancia",
|
||||
},
|
||||
{ id: 58, label: "Coordinación del Programa de Actuaría" },
|
||||
{ id: 57, label: "Coordinación del Programa de Arquitectura" },
|
||||
{ id: 46, label: "Coordinación del Programa de Comunicación" },
|
||||
{ id: 56, label: "Coordinación del Programa de Derecho" },
|
||||
{ id: 55, label: "Coordinación del Programa de Diseño Gráfico" },
|
||||
{ id: 54, label: "Coordinación del Programa de Economía" },
|
||||
{ id: 49, label: "Coordinación del Programa de Enseñanza de Inglés" },
|
||||
{ id: 51, label: "Coordinación del Programa de Ingeniería Civil" },
|
||||
{
|
||||
id: 48,
|
||||
label: "Coordinación del Programa de Matemáticas Aplicadas y Computación",
|
||||
},
|
||||
{ id: 47, label: "Coordinación del Programa de Pedagogía" },
|
||||
{ id: 44, label: "Coordinación del Programa de Sociología" },
|
||||
{ id: 43, label: "Coordinación del Programa Político" },
|
||||
{ id: 194, label: "Departamento de Intendencia" },
|
||||
{
|
||||
id: 193,
|
||||
label:
|
||||
"Departamento de Investigación en Comunicación y Estudios Culturales",
|
||||
},
|
||||
{
|
||||
id: 222,
|
||||
label:
|
||||
"Departamento de Orientación Académica del Sistema de Universidad Abierta y Educación a Distancia",
|
||||
},
|
||||
{ id: 204, label: "Departamento de Proyectos Administrativos" },
|
||||
{ id: 86, label: "Departamento de Talleres y Laboratorios" },
|
||||
{ id: 72, label: "Dirección" },
|
||||
{ id: 80, label: "División de Ciencias Jurídicas" },
|
||||
{ id: 79, label: "División de Ciencias Socioeconómicas" },
|
||||
{ id: 78, label: "División de Diseño y Edificación" },
|
||||
{ id: 77, label: "División de Humanidades" },
|
||||
{ id: 76, label: "División de Matemáticas e Ingeniería" },
|
||||
{
|
||||
id: 74,
|
||||
label:
|
||||
"División del Sistema de Universidad Abierta y Educación a Distancia",
|
||||
},
|
||||
{ id: 70, label: "Especialización en Costos en la Construcción" },
|
||||
{ id: 69, label: "Especialización en Finanzas Públicas" },
|
||||
{ id: 68, label: "Especialización en Geotecnia" },
|
||||
{ id: 71, label: "Especialización en Sistemas de Calidad" },
|
||||
{
|
||||
id: 220,
|
||||
label:
|
||||
"Especialización en Tecnología Digital para la Enseñanza de Matemáticas",
|
||||
},
|
||||
{ id: 207, label: "Grupo de Trabajo de Educación para Adultos (GTEA)" },
|
||||
{ id: 173, label: "Maestría en Docencia para la Educación Media Superior" },
|
||||
{ id: 224, label: "Posgrado en Ciencias Políticas y Sociales" },
|
||||
{ id: 62, label: "Posgrado en Derecho" },
|
||||
{ id: 164, label: "Posgrado en Economía" },
|
||||
{ id: 197, label: "Posgrado en Pedagogía" },
|
||||
{ id: 63, label: "Posgrado en Urbanismo" },
|
||||
{ id: 226, label: "Programa Único de Especializaciones en Derecho" },
|
||||
{ id: 127, label: "Secretaría Administrativa" },
|
||||
{ id: 181, label: "Secretaría de Asuntos Académicos Estudiantiles" },
|
||||
{
|
||||
id: 177,
|
||||
label: "Secretaría de Extensión Universitaria y Vinculación Institucional",
|
||||
},
|
||||
{ id: 119, label: "Secretaría de Posgrado e Investigación" },
|
||||
{ id: 8, label: "Secretaría General" },
|
||||
{ id: 6, label: "Unidad de Administración Escolar" },
|
||||
{ id: 5, label: "Unidad de Administración y Recursos" },
|
||||
{ id: 4, label: "Unidad de Planeación" },
|
||||
{ id: 3, label: "Unidad de Servicios a la Comunidad" },
|
||||
{ id: 2, label: "Unidad de Servicios Editoriales" },
|
||||
{ id: 1, label: "Unidad de Talleres, Laboratorios y Audiovisuales" },
|
||||
{ id: 130, label: "Unidad del Centro de Desarrollo Tecnológico" },
|
||||
{ id: 123, label: "Unidad del Centro de Información y Documentación" },
|
||||
];
|
||||
@@ -0,0 +1,97 @@
|
||||
export const PROCESADORES_POR_EQUIPO: Record<string, string[]> = {
|
||||
"ESCRITORIO PC": [
|
||||
"i7 o equivalentes (13a generación en adelante)",
|
||||
"i7 o equivalentes (9a - 12a generación)",
|
||||
"i7 o equivalentes (5a - 8a generación)",
|
||||
"i7 o equivalentes (1a - 4a generación)",
|
||||
"i5 o equivalentes (13a generación en adelante)",
|
||||
"i5 o equivalentes (9a - 12a generación)",
|
||||
"i5 o equivalentes (5a - 8a generación)",
|
||||
"i5 o equivalentes (1a - 4a generación)",
|
||||
"i3 o equivalentes (13a generación en adelante)",
|
||||
"i3 o equivalentes (9a - 12a generación)",
|
||||
"i3 o equivalentes (5a - 8a generación)",
|
||||
"i3 o equivalentes (1a - 4a generación)",
|
||||
"Pentium Silver O Gold",
|
||||
"Pentium Dual Core o anteriores",
|
||||
"Celeron (adquirido en 2018 hasta la fecha)",
|
||||
"Celeron Dual Core o anteriores",
|
||||
"Core2 Duo, Quad Core, Pentium Dual Core o anteriores",
|
||||
"Pentium Series J, G",
|
||||
"Celeron Serie J, G",
|
||||
],
|
||||
"ESCRITORIO LINUX": [
|
||||
"i7 o equivalentes (13a generación en adelante)",
|
||||
"i7 o equivalentes (9a - 12a generación)",
|
||||
"i7 o equivalentes (5a - 8a generación)",
|
||||
"i7 o equivalentes (1a - 4a generación)",
|
||||
"i5 o equivalentes (13a generación en adelante)",
|
||||
"i5 o equivalentes (9a - 12a generación)",
|
||||
"i5 o equivalentes (5a - 8a generación)",
|
||||
"i5 o equivalentes (1a - 4a generación)",
|
||||
"i3 o equivalentes (13a generación en adelante)",
|
||||
"i3 o equivalentes (9a - 12a generación)",
|
||||
"i3 o equivalentes (5a - 8a generación)",
|
||||
"i3 o equivalentes (1a - 4a generación)",
|
||||
"Pentium Silver O Gold",
|
||||
"Pentium Dual Core o anteriores",
|
||||
],
|
||||
"PORTÁTILES WINDOWS": [
|
||||
"i7 o equivalentes (13a generación en adelante)",
|
||||
"i7 o equivalentes (9a - 12a generación)",
|
||||
"i7 o equivalentes (5a - 8a generación)",
|
||||
"i7 o equivalentes (1a - 4a generación)",
|
||||
"i5 o equivalentes (13a generación en adelante)",
|
||||
"i5 o equivalentes (9a - 12a generación)",
|
||||
"i5 o equivalentes (5a - 8a generación)",
|
||||
"i5 o equivalentes (1a - 4a generación)",
|
||||
"i3 o equivalentes (13a generación en adelante)",
|
||||
"i3 o equivalentes (9a - 12a generación)",
|
||||
"i3 o equivalentes (5a - 8a generación)",
|
||||
"i3 o equivalentes (1a - 4a generación)",
|
||||
"Pentium Silver O Gold",
|
||||
"Pentium Dual Core o anteriores",
|
||||
],
|
||||
"PORTÁTILES CHROMEBOOK": [
|
||||
"i7 o equivalentes (13a generación en adelante)",
|
||||
"i7 o equivalentes (9a - 12a generación)",
|
||||
"i7 o equivalentes (5a - 8a generación)",
|
||||
"i7 o equivalentes (1a - 4a generación)",
|
||||
"i5 o equivalentes (13a generación en adelante)",
|
||||
"i5 o equivalentes (9a - 12a generación)",
|
||||
"i5 o equivalentes (5a - 8a generación)",
|
||||
"i5 o equivalentes (1a - 4a generación)",
|
||||
"i3 o equivalentes (13a generación en adelante)",
|
||||
"i3 o equivalentes (9a - 12a generación)",
|
||||
"i3 o equivalentes (5a - 8a generación)",
|
||||
"i3 o equivalentes (1a - 4a generación)",
|
||||
],
|
||||
"ESCRITORIO MAC OS": [
|
||||
"Familia M2",
|
||||
"Familia M1",
|
||||
"i7 o equivalentes (9a - 12a generación)",
|
||||
"i7 o equivalentes (1a - 4a generación)",
|
||||
"i5 o equivalentes (9a - 12a generación)",
|
||||
"i5 o equivalentes (5a - 8a generación)",
|
||||
"i5 o equivalentes (1a - 4a generación)",
|
||||
"i3 o equivalentes (1a - 4a generación)",
|
||||
"Core2 Mac, Quad Core o anteriores",
|
||||
],
|
||||
"PORTÁTILES MAC OS": [
|
||||
"Familia M2",
|
||||
"Familia M1",
|
||||
"i7 o equivalentes (9a - 12a generación)",
|
||||
"i7 o equivalentes (1a - 4a generación)",
|
||||
"i5 o equivalentes (9a - 12a generación)",
|
||||
"i5 o equivalentes (5a - 8a generación)",
|
||||
"i5 o equivalentes (1a - 4a generación)",
|
||||
"i3 o equivalentes (1a - 4a generación)",
|
||||
"Core2 Mac, Quad Core o anteriores",
|
||||
],
|
||||
SERVIDOR: [
|
||||
"Xeon Bronce, Plata, Oro 1a generación",
|
||||
"Xeon E3, E5, E7",
|
||||
"Xeon Phi",
|
||||
"Xeon o anteriores",
|
||||
],
|
||||
};
|
||||
@@ -0,0 +1,36 @@
|
||||
export const SO_POR_EQUIPO: Record<string, string[]> = {
|
||||
"ESCRITORIO PC": [
|
||||
"Windows 11",
|
||||
"Windows 10",
|
||||
"Windows 7/8",
|
||||
"Windows XP/Vista",
|
||||
"Linux",
|
||||
],
|
||||
"ESCRITORIO APPLE": [
|
||||
"Mac OS (13 - Ventura, 14 - Sonoma)",
|
||||
"Mac OS X (Mojave, Catalina, 11 - Big Sur, 12 - Monterrey)",
|
||||
"Mac OS X (Yosemite, El Capitan, Sierra, High Sierra)",
|
||||
"Mac OS X (Snow Leopard, Lion, Mountain Lion, Mavericks)",
|
||||
],
|
||||
"TABLETA ANDROID": [
|
||||
"Windows 11",
|
||||
"Windows 10",
|
||||
"Windows 7/8",
|
||||
"Windows XP/Vista",
|
||||
"Chrome OS",
|
||||
],
|
||||
"TABLETA iPAD OS": [
|
||||
"Mac OS (13 - Ventura, 14 - Sonoma)",
|
||||
"Mac OS X (Mojave, Catalina, 11 - Big Sur, 12 - Monterrey)",
|
||||
"Mac OS X (Yosemite, El Capitan, Sierra, High Sierra)",
|
||||
"Mac OS X (Snow Leopard, Lion, Mountain Lion, Mavericks)",
|
||||
],
|
||||
SERVIDOR: [
|
||||
"Linux (CentOS, Fedora, Ubuntu, Red Hat Enterprise, entre otros)",
|
||||
"Unix (AIX, MAC OS Server, Solaris, entre otros)",
|
||||
"Windows Server 2022/2023",
|
||||
"Windows Server 2016/2019",
|
||||
"Windows Server 2008/2012",
|
||||
"Windows Server 2000/2003",
|
||||
],
|
||||
};
|
||||
Reference in New Issue
Block a user