Disponibilidad: | |
---|---|
Minghung
Crearé un tablero completo y moderno que proporcione monitoreo y control en tiempo real para la línea de producción de partículas. El diseño se centrará en la eficiencia operativa, la visualización de métricas críticas y los controles intuitivos.
:raíz {
--Primary: #1a3a5f;
--secundario: #2C5282;
--Ccent: #0EA5E9;
--suCess: #10b981;
--Warning: #F59E0B;
--danger: #EF4444;
--Dark: #1e293b;
--light: #f1f5f9;
--gray: #94A3B8;
}
* {
margen: 0;
relleno: 0;
dimensionamiento de la caja: border-box;
Font-Family: 'Segoe Ui', Tahoma, Ginebra, Verdana, Sans-Serif;
}
cuerpo {
Color de fondo: #0f172a;
color: var (-luz);
desbordamiento-x: oculto;
}
.Container {
Pantalla: cuadrícula;
Columna de plantilla de cuadrícula: 240px 1fr;
Min-altura: 100VH;
}
/ * Estilos de barra lateral */
.sidebar {
Color de fondo: var (-primario);
relleno: 20px 0;
Border-Right: 1px Solid #334155;
}
.logo {
Pantalla: Flex;
Alineación de ítems: Centro;
relleno: 0 20px 20px;
Border-Bottom: 1px Solid #334155;
margen-fondo: 20px;
}
.logo img {
Altura: 40px;
margen-derecha: 12px;
}
.logo H1 {
tamaño de fuente: 18px;
Font-peso: 600;
}
.nav-item {
relleno: 12px 20px;
Pantalla: Flex;
Alineación de ítems: Centro;
cursor: puntero;
Transición: todos 0.3s;
Border-izquierda: 3px sólido transparente;
}
.nav-item: hover, .nav-item.active {
Color de fondo: RGBA (14, 165, 233, 0.1);
Border-izquierda: 3px sólido var (-acento);
}
.nav-item i {
margen-derecha: 12px;
Ancho: 20px;
Text-Align: Center;
}
/ * Estilos de contenido principales */
.
relleno: 20px;
Pantalla: Flex;
Dirección flexible: columna;
}
.header {
Pantalla: Flex;
Justify-Content: Space-between;
Alineación de ítems: Centro;
margen-fondo: 20px;
Botón de relleno: 15px;
Border-Bottom: 1px Solid #334155;
}
.header H2 {
tamaño de fuente: 24px;
Font-peso: 600;
color: var (-acento);
}
.status-bar {
Pantalla: Flex;
Alineación de ítems: Centro;
brecha: 20px;
}
.Status-Indicator {
Pantalla: Flex;
Alineación de ítems: Centro;
Gap: 8px;
tamaño de fuente: 14px;
}
.status-dot {
Ancho: 10px;
Altura: 10px;
Radio fronterizo: 50%;
}
.running {Background-Color: var (-éxito); }
.Warning {Background-Color: var (-advertencia); }
.stopped {Background-Color: var (-peligro); }
/ * Cuadrícula de tablero */
.panel {
Pantalla: cuadrícula;
columnas de plantilla de cuadrícula: repetir (4, 1fr);
Grid-Auto-Rows: Minmax (200px, Auto);
brecha: 20px;
Flex-Crow: 1;
}
.tarjeta {
Color de fondo: #1E293B;
Border-Radius: 10px;
relleno: 20px;
Box Shadow: 0 4PX 6PX RGBA (0, 0, 0, 0.1);
borde: 1px sólido #334155;
Pantalla: Flex;
Dirección flexible: columna;
}
.card-cabeza {
Pantalla: Flex;
Justify-Content: Space-between;
Alineación de ítems: Centro;
margen-fondo: 15px;
Botón de relleno: 10px;
Border-Bottom: 1px Solid #334155;
}
. CARDA TITLE {
tamaño de fuente: 16px;
Font-peso: 600;
color: var (-acento);
}
.card-contento {
Flex-Crow: 1;
Pantalla: Flex;
Dirección flexible: columna;
Justify-Content: Center;
}
/ * Estilos de tarjeta específicos */
.kpi-tarjeta .value {
tamaño de fuente: 36px;
Font-peso: 700;
Text-Align: Center;
margen: 10px 0;
}
.kpi-card .abel {
Text-Align: Center;
color: var (-gris);
tamaño de fuente: 14px;
}
.kpi-comd .trend {
Pantalla: Flex;
Justify-Content: Center;
Alineación de ítems: Centro;
Gap: 5px;
tamaño de fuente: 14px;
margen-top: 5px;
}
.trend.up {color: var (-éxito); }
.trend.down {color: var (-peligro); }
. Chart de producción {
Columna de cuadrícula: Span 2;
Altura: 300px;
}
.status-grid {
Pantalla: cuadrícula;
columnas de plantilla de cuadrícula: repetir (3, 1fr);
Gap: 15px;
}
.machine-status {
Color de fondo: #0f172a;
Border-Radius: 8px;
relleno: 15px;
Pantalla: Flex;
Dirección flexible: columna;
Alineación de ítems: Centro;
borde: 1px sólido #334155;
Transición: todos 0.3s;
}
.Machine-Status: Hover {
transformar: traduce (-3px);
Shadow de caja: 0 6px 12px RGBA (0, 0, 0, 0.15);
}
.machine-status i {
tamaño de fuente: 28px;
margen-fondo: 10px;
}
.machine-status.running {color: var (-éxito); border-top: 3px sólido var (-éxito); }
.machine-status.warning {color: var (-advertencia); Border-top: 3px sólido var (-advertencia); }
.machine-status.stopped {color: var (-peligro); Border-top: 3px sólido var (-peligro); }
.Machine-Name {
tamaño de fuente: 14px;
Botón de margen: 8px;
Text-Align: Center;
}
.machine-valor {
tamaño de fuente: 18px;
Font-peso: 600;
}
.alerts-tarjeta .alert-Ítem {
relleno: 10px 0;
Border-Bottom: 1px Solid #334155;
Pantalla: Flex;
Gap: 10px;
}
.alert-ítem: último hijo {
Border-Bottom: Ninguno;
}
.alert-icon {
Ancho: 24px;
Altura: 24px;
Radio fronterizo: 50%;
Pantalla: Flex;
Alineación de ítems: Centro;
Justify-Content: Center;
Flex-shrink: 0;
}
.alert-altura {Color de fondo: RGBA (239, 68, 68, 0.2); color: var (-peligro); }
.alert-medium {Color de fondo: RGBA (245, 158, 11, 0.2); color: var (-advertencia); }
.alert-low {Color de fondo: RGBA (59, 130, 246, 0.2); Color: #3B82F6; }
.alert-contento {
Flex-Crow: 1;
}
.alert-tito {
Font-peso: 600;
tamaño de fuente: 14px;
}
.l-alert {
tamaño de fuente: 12px;
color: var (-gris);
}
.controls {
Pantalla: cuadrícula;
Columna de plantilla de cuadrícula: repita (2, 1fr);
Gap: 15px;
}
.control-btn {
Color de fondo: var (-secundario);
borde: ninguno;
Border-Radius: 8px;
relleno: 12px;
Color: blanco;
Font-peso: 600;
cursor: puntero;
Transición: todos 0.3s;
Pantalla: Flex;
Alineación de ítems: Centro;
Justify-Content: Center;
Gap: 8px;
}
.control-btn: hover {
Color de fondo: var (-acento);
Transform: traduce (-2px);
}
.control-btn.emergency {
Color de fondo: var (-peligro);
Columna de cuadrícula: Span 2;
}
.control-btn.emergency: hover {
Color de fondo: #DC2626;
}
/ * Ajustes receptivos */
@Media (max-width: 1200px) {
.panel {
columnas de plantilla de cuadrícula: repetir (3, 1fr);
}
}
@Media (max-width: 992px) {
.panel {
Columna de plantilla de cuadrícula: repita (2, 1fr);
}
}
@Media (max-width: 768px) {
.Container {
Columna de plantilla de cuadrícula: 1fr;
}
.sidebar {
Pantalla: ninguno;
}
.panel {
Columna de plantilla de cuadrícula: 1fr;
}
. Chart de producción {
Columna de cuadrícula: Span 1;
}
}
Panel
Control de producción
Estado de la máquina
Control de calidad
Alertas y notificaciones
Análisis e informes
Mantenimiento
Ajustes
Producción: Running
2 advertencias
3 nuevas alertas
Operador: Zhang Wei
+2.1% de ayer
-8 del objetivo
+0.4% desde el último turno
-0.15 de la semana pasada
// Inicializar la tabla de producción
document.adDeventListener ('DomContentLoaded', function () {
const ctx = document.getElementById ('ProductionChart'). GetContext ('2d');
CONST gráfico = nuevo gráfico (CTX, {
Tipo: 'Línea',
datos: {
Etiquetas: ['06: 00 ', '08: 00', '10: 00 ', '12: 00', '14: 00 ', '16: 00', '18: 00 ', '20: 00'],,
conjuntos de datos: [{
Etiqueta: 'Producción real',
Datos: [265, 280, 295, 285, 270, 290, 305, 295],
BorderColor: '#0ea5e9',
backgroundcolor: 'rgba (14, 165, 233, 0.1)',
BorderWidth: 2,
Relleno: Verdadero,
Tensión: 0.3
}, {
Etiqueta: 'objetivo',
Datos: [280, 280, 290, 295, 295, 300, 300, 300],
BorderColor: '#10b981',
BorderWidth: 2,
Borderdash: [5, 5],
Relleno: Falso
}]
},
Opciones: {
Responsivo: Verdadero,
mantenimiento de la captura: falso,
complementos: {
leyenda: {
Etiquetas: {
Color: '#F1F5F9'
}
}
},
Escalas: {
Y: {
beginatzero: falso,
Min: 250,
red: {
Color: 'RGBA (255, 255, 255, 0.1)'
},
Ticks: {
Color: '#94A3B8'
}
},
x: {
red: {
Color: 'RGBA (255, 255, 255, 0.1)'
},
Ticks: {
Color: '#94A3B8'
}
}
}
}
});
// simular actualizaciones en tiempo real
setInterval (() => {
// actualizar los valores de estado de la máquina al azar para la simulación
document.QueryselectorAll ('. Machine-Value'). foreach (el => {
if (el.parentelement.classlist.contains ('running')) {
if (el.previouselementsibling.textContent.includes ('° C')) {
const temp = 80 + math.floor (math.random () * 5);
El.TextContent = `$ {temp} ° C`;
} else if (el.previouselementsibling.textcontent.includes ('%')) {
const carga = 95 + math.floor (math.random () * 5);
El.TextContent = `$ {load}%`;
}
}
});
// actualizar los valores de KPI ligeramente para la simulación
const oeeValue = document.querySelector ('. KPI-CARD: NTH-Child (1) .Value');
Sea oee = parsefloat (oeValue.textContent);
oeEvalue.TextContent = (OEE + (Math.random () - 0.5) * 0.1) .tofixed (1) + '%';
const rateValue = document.QuerySelector ('. KPI-CARD: NTH-Child (2) .Value');
Let tasa = parseInt (rateValue.TextContent);
rateValue.TextContent = Math.max (280, Math.min (310, tasa + math.floor ((math.random () - 0.5) * 5));
}, 5000);
});
WhatsApp: +86 18769900191 +86 15589105786 +86 18954906501
Correo electrónico: osbmdfmachinery@gmail.com
Crearé un tablero completo y moderno que proporcione monitoreo y control en tiempo real para la línea de producción de partículas. El diseño se centrará en la eficiencia operativa, la visualización de métricas críticas y los controles intuitivos.
:raíz {
--Primary: #1a3a5f;
--secundario: #2C5282;
--Ccent: #0EA5E9;
--suCess: #10b981;
--Warning: #F59E0B;
--danger: #EF4444;
--Dark: #1e293b;
--light: #f1f5f9;
--gray: #94A3B8;
}
* {
margen: 0;
relleno: 0;
dimensionamiento de la caja: border-box;
Font-Family: 'Segoe Ui', Tahoma, Ginebra, Verdana, Sans-Serif;
}
cuerpo {
Color de fondo: #0f172a;
color: var (-luz);
desbordamiento-x: oculto;
}
.Container {
Pantalla: cuadrícula;
Columna de plantilla de cuadrícula: 240px 1fr;
Min-altura: 100VH;
}
/ * Estilos de barra lateral */
.sidebar {
Color de fondo: var (-primario);
relleno: 20px 0;
Border-Right: 1px Solid #334155;
}
.logo {
Pantalla: Flex;
Alineación de ítems: Centro;
relleno: 0 20px 20px;
Border-Bottom: 1px Solid #334155;
margen-fondo: 20px;
}
.logo img {
Altura: 40px;
margen-derecha: 12px;
}
.logo H1 {
tamaño de fuente: 18px;
Font-peso: 600;
}
.nav-item {
relleno: 12px 20px;
Pantalla: Flex;
Alineación de ítems: Centro;
cursor: puntero;
Transición: todos 0.3s;
Border-izquierda: 3px sólido transparente;
}
.nav-item: hover, .nav-item.active {
Color de fondo: RGBA (14, 165, 233, 0.1);
Border-izquierda: 3px sólido var (-acento);
}
.nav-item i {
margen-derecha: 12px;
Ancho: 20px;
Text-Align: Center;
}
/ * Estilos de contenido principales */
.
relleno: 20px;
Pantalla: Flex;
Dirección flexible: columna;
}
.header {
Pantalla: Flex;
Justify-Content: Space-between;
Alineación de ítems: Centro;
margen-fondo: 20px;
Botón de relleno: 15px;
Border-Bottom: 1px Solid #334155;
}
.header H2 {
tamaño de fuente: 24px;
Font-peso: 600;
color: var (-acento);
}
.status-bar {
Pantalla: Flex;
Alineación de ítems: Centro;
brecha: 20px;
}
.Status-Indicator {
Pantalla: Flex;
Alineación de ítems: Centro;
Gap: 8px;
tamaño de fuente: 14px;
}
.status-dot {
Ancho: 10px;
Altura: 10px;
Radio fronterizo: 50%;
}
.running {Background-Color: var (-éxito); }
.Warning {Background-Color: var (-advertencia); }
.stopped {Background-Color: var (-peligro); }
/ * Cuadrícula de tablero */
.panel {
Pantalla: cuadrícula;
columnas de plantilla de cuadrícula: repetir (4, 1fr);
Grid-Auto-Rows: Minmax (200px, Auto);
brecha: 20px;
Flex-Crow: 1;
}
.tarjeta {
Color de fondo: #1E293B;
Border-Radius: 10px;
relleno: 20px;
Box Shadow: 0 4PX 6PX RGBA (0, 0, 0, 0.1);
borde: 1px sólido #334155;
Pantalla: Flex;
Dirección flexible: columna;
}
.card-cabeza {
Pantalla: Flex;
Justify-Content: Space-between;
Alineación de ítems: Centro;
margen-fondo: 15px;
Botón de relleno: 10px;
Border-Bottom: 1px Solid #334155;
}
. CARDA TITLE {
tamaño de fuente: 16px;
Font-peso: 600;
color: var (-acento);
}
.card-contento {
Flex-Crow: 1;
Pantalla: Flex;
Dirección flexible: columna;
Justify-Content: Center;
}
/ * Estilos de tarjeta específicos */
.kpi-tarjeta .value {
tamaño de fuente: 36px;
Font-peso: 700;
Text-Align: Center;
margen: 10px 0;
}
.kpi-card .abel {
Text-Align: Center;
color: var (-gris);
tamaño de fuente: 14px;
}
.kpi-comd .trend {
Pantalla: Flex;
Justify-Content: Center;
Alineación de ítems: Centro;
Gap: 5px;
tamaño de fuente: 14px;
margen-top: 5px;
}
.trend.up {color: var (-éxito); }
.trend.down {color: var (-peligro); }
. Chart de producción {
Columna de cuadrícula: Span 2;
Altura: 300px;
}
.status-grid {
Pantalla: cuadrícula;
columnas de plantilla de cuadrícula: repetir (3, 1fr);
Gap: 15px;
}
.machine-status {
Color de fondo: #0f172a;
Border-Radius: 8px;
relleno: 15px;
Pantalla: Flex;
Dirección flexible: columna;
Alineación de ítems: Centro;
borde: 1px sólido #334155;
Transición: todos 0.3s;
}
.Machine-Status: Hover {
transformar: traduce (-3px);
Shadow de caja: 0 6px 12px RGBA (0, 0, 0, 0.15);
}
.machine-status i {
tamaño de fuente: 28px;
margen-fondo: 10px;
}
.machine-status.running {color: var (-éxito); border-top: 3px sólido var (-éxito); }
.machine-status.warning {color: var (-advertencia); Border-top: 3px sólido var (-advertencia); }
.machine-status.stopped {color: var (-peligro); Border-top: 3px sólido var (-peligro); }
.Machine-Name {
tamaño de fuente: 14px;
Botón de margen: 8px;
Text-Align: Center;
}
.machine-valor {
tamaño de fuente: 18px;
Font-peso: 600;
}
.alerts-tarjeta .alert-Ítem {
relleno: 10px 0;
Border-Bottom: 1px Solid #334155;
Pantalla: Flex;
Gap: 10px;
}
.alert-ítem: último hijo {
Border-Bottom: Ninguno;
}
.alert-icon {
Ancho: 24px;
Altura: 24px;
Radio fronterizo: 50%;
Pantalla: Flex;
Alineación de ítems: Centro;
Justify-Content: Center;
Flex-shrink: 0;
}
.alert-altura {Color de fondo: RGBA (239, 68, 68, 0.2); color: var (-peligro); }
.alert-medium {Color de fondo: RGBA (245, 158, 11, 0.2); color: var (-advertencia); }
.alert-low {Color de fondo: RGBA (59, 130, 246, 0.2); Color: #3B82F6; }
.alert-contento {
Flex-Crow: 1;
}
.alert-tito {
Font-peso: 600;
tamaño de fuente: 14px;
}
.l-alert {
tamaño de fuente: 12px;
color: var (-gris);
}
.controls {
Pantalla: cuadrícula;
Columna de plantilla de cuadrícula: repita (2, 1fr);
Gap: 15px;
}
.control-btn {
Color de fondo: var (-secundario);
borde: ninguno;
Border-Radius: 8px;
relleno: 12px;
Color: blanco;
Font-peso: 600;
cursor: puntero;
Transición: todos 0.3s;
Pantalla: Flex;
Alineación de ítems: Centro;
Justify-Content: Center;
Gap: 8px;
}
.control-btn: hover {
Color de fondo: var (-acento);
Transform: traduce (-2px);
}
.control-btn.emergency {
Color de fondo: var (-peligro);
Columna de cuadrícula: Span 2;
}
.control-btn.emergency: hover {
Color de fondo: #DC2626;
}
/ * Ajustes receptivos */
@Media (max-width: 1200px) {
.panel {
columnas de plantilla de cuadrícula: repetir (3, 1fr);
}
}
@Media (max-width: 992px) {
.panel {
Columna de plantilla de cuadrícula: repita (2, 1fr);
}
}
@Media (max-width: 768px) {
.Container {
Columna de plantilla de cuadrícula: 1fr;
}
.sidebar {
Pantalla: ninguno;
}
.panel {
Columna de plantilla de cuadrícula: 1fr;
}
. Chart de producción {
Columna de cuadrícula: Span 1;
}
}
Panel
Control de producción
Estado de la máquina
Control de calidad
Alertas y notificaciones
Análisis e informes
Mantenimiento
Ajustes
Producción: Running
2 advertencias
3 nuevas alertas
Operador: Zhang Wei
+2.1% de ayer
-8 del objetivo
+0.4% desde el último turno
-0.15 de la semana pasada
// Inicializar la tabla de producción
document.adDeventListener ('DomContentLoaded', function () {
const ctx = document.getElementById ('ProductionChart'). GetContext ('2d');
CONST gráfico = nuevo gráfico (CTX, {
Tipo: 'Línea',
datos: {
Etiquetas: ['06: 00 ', '08: 00', '10: 00 ', '12: 00', '14: 00 ', '16: 00', '18: 00 ', '20: 00'],,
conjuntos de datos: [{
Etiqueta: 'Producción real',
Datos: [265, 280, 295, 285, 270, 290, 305, 295],
BorderColor: '#0ea5e9',
backgroundcolor: 'rgba (14, 165, 233, 0.1)',
BorderWidth: 2,
Relleno: Verdadero,
Tensión: 0.3
}, {
Etiqueta: 'objetivo',
Datos: [280, 280, 290, 295, 295, 300, 300, 300],
BorderColor: '#10b981',
BorderWidth: 2,
Borderdash: [5, 5],
Relleno: Falso
}]
},
Opciones: {
Responsivo: Verdadero,
mantenimiento de la captura: falso,
complementos: {
leyenda: {
Etiquetas: {
Color: '#F1F5F9'
}
}
},
Escalas: {
Y: {
beginatzero: falso,
Min: 250,
red: {
Color: 'RGBA (255, 255, 255, 0.1)'
},
Ticks: {
Color: '#94A3B8'
}
},
x: {
red: {
Color: 'RGBA (255, 255, 255, 0.1)'
},
Ticks: {
Color: '#94A3B8'
}
}
}
}
});
// simular actualizaciones en tiempo real
setInterval (() => {
// actualizar los valores de estado de la máquina al azar para la simulación
document.QueryselectorAll ('. Machine-Value'). foreach (el => {
if (el.parentelement.classlist.contains ('running')) {
if (el.previouselementsibling.textContent.includes ('° C')) {
const temp = 80 + math.floor (math.random () * 5);
El.TextContent = `$ {temp} ° C`;
} else if (el.previouselementsibling.textcontent.includes ('%')) {
const carga = 95 + math.floor (math.random () * 5);
El.TextContent = `$ {load}%`;
}
}
});
// actualizar los valores de KPI ligeramente para la simulación
const oeeValue = document.querySelector ('. KPI-CARD: NTH-Child (1) .Value');
Sea oee = parsefloat (oeValue.textContent);
oeEvalue.TextContent = (OEE + (Math.random () - 0.5) * 0.1) .tofixed (1) + '%';
const rateValue = document.QuerySelector ('. KPI-CARD: NTH-Child (2) .Value');
Let tasa = parseInt (rateValue.TextContent);
rateValue.TextContent = Math.max (280, Math.min (310, tasa + math.floor ((math.random () - 0.5) * 5));
}, 5000);
});
WhatsApp: +86 18769900191 +86 15589105786 +86 18954906501
Correo electrónico: osbmdfmachinery@gmail.com