Files
Inyeccion_Dashboard/ui/templates/graphs.html
2025-11-20 15:27:34 -06:00

291 lines
7.2 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<style>
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@600;700&display=swap');
/* SCALE: align 100% zoom with prior 125% appearance */
:root {
font-size: 125%;
--bg-0: #0c1117;
--bg-1: #131a23;
--panel: #151e2b;
--panel-hi: #1a2433;
--text: #ecf3ff;
--muted: #96a5b7;
--accent: #2ea3ff;
--accent-2: #1f8cf3;
--good: #24d06f;
--warn: #ffd100;
--bad: #ff4d4f;
--radius: 0.75rem;
--shadow: 0 0.5rem 1rem rgba(0, 0, 0, .35), inset 0 0.0625rem 0 rgba(255, 255, 255, .05);
--sidebar-width: 3.75rem;
--sidebar-gap: clamp(0.75rem, 1.2vh, 1rem);
--content-max: 100rem;
--content-pad: clamp(1rem, 1.2vw, 1.4rem);
--section-gap: clamp(0.75rem, 1vw, 1rem);
--card-pad: clamp(1rem, 1.1vw, 1.25rem);
--fs-page-title: clamp(1.2rem, 1vw + 0.35rem, 1.7rem);
--fs-section-title: clamp(0.95rem, 0.9vw + 0.25rem, 1.25rem);
}
* {
box-sizing: border-box;
}
html,
body,
#oee {
width: 100vw;
height: 100vh;
}
html,
body {
margin: 0;
padding: 0;
overflow-x: hidden;
background: var(--bg-0);
color: var(--text);
font-family: 'Poppins', system-ui, 'Segoe UI', 'Roboto', sans-serif;
font-weight: 600;
}
body {
overflow: hidden;
}
body > md-content,
body > md-content > md-content,
.nr-dashboard-template,
.nr-dashboard-template md-content,
.nr-dashboard-cardpanel,
.nr-dashboard-cardpanel md-content {
background: transparent !important;
height: 100%;
overflow: hidden;
}
.nr-dashboard-cardpanel,
.nr-dashboard-cardpanel md-card,
.nr-dashboard-cardpanel md-card-content {
background: transparent !important;
box-shadow: none !important;
padding: 0 !important;
}
/* LAYOUT: lock sidebar + content grid across tabs */
#oee {
position: fixed;
inset: 0;
display: flex;
overflow: hidden;
}
.sidebar {
width: var(--sidebar-width);
background: #0b1119;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: clamp(0.625rem, 1.4vh, 0.9rem) clamp(0.5rem, 0.8vw, 0.75rem);
}
.side-top {
display: flex;
flex-direction: column;
gap: var(--sidebar-gap);
align-items: center;
}
.sb-btn {
width: 2.75rem;
height: 2.75rem;
border-radius: 0.75rem;
background: #0f1721;
border: 1px solid #19222e;
display: grid;
place-items: center;
color: #8fb3d9;
cursor: pointer;
transition: 0.16s box-shadow, 0.16s transform, 0.16s border-color;
}
.sb-btn.active {
border-color: #2fd289;
box-shadow: 0 0 0 0.125rem rgba(36, 208, 111, .25), 0 0.625rem 1.125rem rgba(36, 208, 111, .28);
color: #2fd289;
}
.sb-ico {
font-size: clamp(1.1rem, 1.2vw, 1.25rem);
line-height: 1;
}
.sb-foot {
font-size: clamp(0.6rem, 0.6vw, 0.7rem);
color: #6c7b8d;
letter-spacing: 0.12em;
text-transform: uppercase;
}
.main {
flex: 1;
overflow: auto;
padding: var(--content-pad);
}
.container {
max-width: var(--content-max);
margin: 0 auto;
display: flex;
flex-direction: column;
gap: var(--section-gap);
}
.card {
background: linear-gradient(160deg, var(--panel) 0%, var(--panel-hi) 100%);
border-radius: var(--radius);
box-shadow: var(--shadow);
}
/* HEADER: maintain title styling */
.page-heading {
display: flex;
align-items: center;
padding: 0 0.25rem;
}
.page-title {
margin: 0;
font-size: var(--fs-page-title);
letter-spacing: 0.05em;
text-transform: uppercase;
color: var(--text);
}
/* CHART GRID: preserve 2x2 symmetry without wrapping glitches */
.chart-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr));
gap: var(--section-gap);
}
.chart-card {
display: flex;
flex-direction: column;
gap: clamp(0.85rem, 1vw, 1rem);
padding: var(--card-pad);
}
.chart-title {
margin: 0;
font-size: var(--fs-section-title);
letter-spacing: 0.05em;
text-transform: uppercase;
color: var(--text);
}
.chart-placeholder {
flex: 1;
border-radius: var(--radius);
background: #121c28;
border: 1px dashed rgba(58, 96, 136, 0.35);
min-height: 13.75rem;
}
</style>
<link rel="stylesheet" href="styles/oee-theme-override.css">
<div id="oee">
<aside class="sidebar">
<div class="side-top">
<button class="sb-btn" data-label="Home" ng-click="gotoTab('Home')"><span class="sb-ico">🏠</span></button>
<button class="sb-btn" data-label="Work Orders" ng-click="gotoTab('Work Orders')"><span class="sb-ico">📋</span></button>
<button class="sb-btn" data-label="Alerts" ng-click="gotoTab('Alerts')"><span class="sb-ico">⚠️</span></button>
<button class="sb-btn active" data-label="Graphs" ng-click="gotoTab('Graphs')"><span class="sb-ico">📊</span></button>
<button class="sb-btn" data-label="Help" ng-click="gotoTab('Help')"><span class="sb-ico"></span></button>
<button class="sb-btn" data-label="Settings" ng-click="gotoTab('Settings')"><span class="sb-ico">⚙️</span></button>
</div>
<div class="sb-foot">OEE V1.0</div>
</aside>
<main class="main">
<div class="container">
<section class="page-heading">
<h1 class="page-title">Graphs</h1>
</section>
<section class="chart-grid">
<article class="card chart-card">
<h2 class="chart-title">OEE Last 24h</h2>
<div class="chart-placeholder" id="chart-oee"></div>
</article>
<article class="card chart-card">
<h2 class="chart-title">Availability Last 7 days</h2>
<div class="chart-placeholder" id="chart-availability"></div>
</article>
<article class="card chart-card">
<h2 class="chart-title">Performance Last 7 days</h2>
<div class="chart-placeholder" id="chart-performance"></div>
</article>
<article class="card chart-card">
<h2 class="chart-title">Quality Last 7 days</h2>
<div class="chart-placeholder" id="chart-quality"></div>
</article>
</section>
</div>
</main>
</div>
<script>
(function(scope) {
scope.gotoTab = function(tabName) {
scope.send({ ui_control: { tab: tabName } });
};
})(scope);
(function ensureNoMaterialTint(){
setTimeout(() => {
const root = document.getElementById('oee') || document.body;
const targets = root.querySelectorAll([
'.md-toolbar','md-toolbar',
'.md-subheader','md-subheader',
'.md-toolbar-tools','.md-card-title'
].join(','));
targets.forEach(el => {
if (el && el.style) {
el.style.background = 'transparent';
el.style.backgroundColor = 'transparent';
}
if (el && el.classList) {
el.classList.remove(
'md-whiteframe-1dp','md-whiteframe-2dp','md-whiteframe-3dp',
'md-whiteframe-z1','md-whiteframe-z2','md-whiteframe-z3'
);
}
});
if (!document.getElementById('oee-theme-sentinel')) {
const style = document.createElement('style');
style.id = 'oee-theme-sentinel';
style.textContent = `
#oee .md-toolbar::before, #oee .md-toolbar::after,
#oee .md-subheader::before, #oee .md-subheader::after,
#oee md-toolbar::before, #oee md-toolbar::after,
#oee md-subheader::before, #oee md-subheader::after {
display: none !important;
content: none !important;
}
`;
document.head.appendChild(style);
}
}, 300);
})();
// optional render trigger
scope.$evalAsync(function() {});
</script>