diff --git a/src/views/scada/picture/screen.vue b/src/views/scada/picture/screen.vue index 9183950..f63a7ee 100644 --- a/src/views/scada/picture/screen.vue +++ b/src/views/scada/picture/screen.vue @@ -1,141 +1,141 @@ \ No newline at end of file +.header { + text-align: center; + padding: 10px 0; + font-size: 28px; + font-weight: bold; + color: #ffffff; + text-shadow: 0 0 20px rgba(0, 255, 255, 0.5); + flex-shrink: 0; +} + +.top-section { + display: grid; + grid-template-columns: 30% 68%; + gap: 30px; + flex: 1; + padding: 40px; + padding-bottom: 20px; + overflow: hidden; +} + +.device-sidebar { + background: url('../../../assets/picture/c73de8bc60f90ef1a6e63178f6d8f862.png') no-repeat center; + background-size: 100% 100%; + padding: 15px; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.sidebar-title { + font-size: 16px; + font-weight: bold; + color: #ffffff; + margin-bottom: 10px; + padding-bottom: 8px; + border-bottom: 1px solid #00ffff; + flex-shrink: 0; + padding-left: 20px; +} + +.table-container { + padding: 15px; + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; +} + +.table-section { + display: flex; + flex-direction: column; + flex: 1; + overflow: hidden; +} + +.table-content { + flex: 1; + overflow: auto; + display: flex; + flex-direction: column; +} + +.table-controls { + display: flex; + gap: 0; + margin-bottom: 10px; +} + +.control-btn { + padding: 6px 12px; + background: #0066cc; + border: 1px solid #0066cc; + color: #ffffff; + cursor: pointer; + font-size: 11px; + transition: all 0.3s ease; +} + +.control-btn:first-child { + border-radius: 4px 0 0 4px; +} + +.control-btn:last-child { + border-radius: 0 4px 4px 0; +} + +.control-btn:hover { + background: #0088ff; +} + +.control-btn.active { + background: #0088ff; +} + +.device-table { + width: 100%; + border-collapse: collapse; + font-size: 11px; + flex: 1; + overflow: auto; +} + +.device-table th, +.device-table td { + padding: 8px 10px; + text-align: left; + border-bottom: 1px solid rgba(0, 255, 255, 0.2); +} + +.device-table th { + background: rgba(0, 255, 255, 0.1); + color: #ffffff; + font-weight: bold; +} + +.device-table tbody tr:hover { + background: rgba(0, 255, 255, 0.1); +} + +.pagination { + display: flex; + justify-content: flex-end; + margin-top: 15px; + gap: 5px; + align-items: center; +} + +.page-btn { + width: 30px; + height: 30px; + background: transparent; + border: none; + color: #ffffff; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; + transition: all 0.3s ease; +} + +.page-btn.arrow-btn { + background: rgba(0, 255, 255, 0.1); + border-radius: 4px; +} + +.page-btn:hover { + background: rgba(0, 255, 255, 0.2); +} + +.page-btn.active { + background: #00ffff; + color: #000000; + border-radius: 4px; + font-weight: bold; +} + +.status-badge { + padding: 4px 8px; + border-radius: 12px; + font-size: 10px; + font-weight: bold; +} + +.status-running { + background: rgba(0, 255, 0, 0.2); + color: #00ff00; +} + +.status-warning { + background: rgba(255, 255, 0, 0.2); + color: #ffff00; +} + +.status-error { + background: rgba(255, 0, 0, 0.2); + color: #ff0000; +} + +.bottom-section { + flex: 1; + padding: 20px; + overflow: hidden; + display: flex; + align-items: center; + justify-content: center; +} + +.layout-image { + width: 100%; + height: 100%; + object-fit: contain; +} + +.layout-container { + position: relative; + width: 90%; + height: 90%; + display: flex; + align-items: center; + justify-content: center; +} + +.marker { + position: absolute; + width: 30px; + height: 30px; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + transform: translate(-50%, -50%); + cursor: pointer; + transition: transform 0.3s ease; +} + +.marker:hover { + transform: translate(-50%, -50%) scale(1.2); +} + +.marker-1 { + transform: scale(1.5); + top: 45%; /* 相对于父元素高度的百分比 */ + left: 16%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/371b06b22391dea6aa6adf7fb36c7d2b.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-2 { + transform: scale(1.5); + top: 45%; /* 相对于父元素高度的百分比 */ + left: 24.6%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/371b06b22391dea6aa6adf7fb36c7d2b.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-3 { + transform: scale(1.5); + top: 45%; /* 相对于父元素高度的百分比 */ + left: 33.5%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/371b06b22391dea6aa6adf7fb36c7d2b.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-4 { + transform: scale(1.5); + top: 42%; /* 相对于父元素高度的百分比 */ + left: 42.6%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/371b06b22391dea6aa6adf7fb36c7d2b.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-5 { + transform: scale(1.5); + top: 55%; /* 相对于父元素高度的百分比 */ + left: 26.6%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/633bec62b4c6d35098f06c189591135d.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-6 { + transform: scale(1.5); + top: 55%; /* 相对于父元素高度的百分比 */ + left: 35.6%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/633bec62b4c6d35098f06c189591135d.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-15 { + transform: scale(1.5); + top: 55%; /* 相对于父元素高度的百分比 */ + left: 44.6%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/633bec62b4c6d35098f06c189591135d.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-16 { + transform: scale(1.5); + top: 55%; /* 相对于父元素高度的百分比 */ + left: 17.6%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/633bec62b4c6d35098f06c189591135d.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-7 { + transform: scale(1.5); + top: 10%; /* 相对于父元素高度的百分比 */ + left: 64%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/b257f08f180fba833e8302c54f815ba8.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-8 { + transform: scale(1.5); + top: 24%; /* 相对于父元素高度的百分比 */ + left: 64.7%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/b257f08f180fba833e8302c54f815ba8.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-9 { + transform: scale(1.5); + top: 39%; /* 相对于父元素高度的百分比 */ + left: 65.3%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/b257f08f180fba833e8302c54f815ba8.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ +} + +.marker-17 { + transform: scale(1.5); + top: 68%; /* 相对于父元素高度的百分比 */ + left: 15%; /* 相对于父元素宽度的百分比 */ + background-image: url('../../../assets/picture/2729bbc4b984dec97dbb2d97ceb39ae6.png'); + position: absolute; /* 确保使用绝对定位,父元素需设置相对定位 */ + + /* 可选:防止标记点变形 */ + background-size: contain; + background-repeat: no-repeat; + background-position: center; + + /* 可选:使用视口单位作为备选 */ + /* top: 10vh; + left: 64vw; */ + +} + +.chart-container { + padding: 15px; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.chart-title { + font-size: 14px; + font-weight: bold; + color: #ffffff; + margin-bottom: 10px; + flex-shrink: 0; + margin-top: -10px; + padding-left: 10px; +} + +.chart { + flex: 1; + min-height: 0; +} + +.maintenance-panel { + background: url('../../../assets/picture/f0f06ffbc9509f233fe5b4e670416c31.png') no-repeat center; + background-size: 100% 100%; + padding: 15px; + display: grid; + grid-template-columns: 2fr 3fr; + gap: 10px; + overflow: hidden; + +} + +/* 流动线样式 */ +.flow-line { + position: absolute; + background: linear-gradient(90deg, transparent, rgba(0, 153, 255, 1), transparent); + border-radius: 3px; + animation: flow 2s linear infinite; + z-index: 5; + height: 4px; + box-shadow: 0 0 10px rgba(0, 153, 255, 0.8); + transform: rotate(0deg); +} + +@keyframes flow { + 0% { + transform: rotate(var(--flow-rotation, 0deg)) translateX(-100%); + } + 100% { + transform: rotate(var(--flow-rotation, 0deg)) translateX(100%); + } +} + +/* 左侧流水线 */ +.flow-line-1 { + top: 45%; + left: 10%; + width: 15%; + animation-delay: 0s; + --flow-rotation: 5deg; +} + +.flow-line-2 { + top: 45%; + left: 20%; + width: 15%; + animation-delay: 0.3s; + --flow-rotation: 10deg; +} + +.flow-line-3 { + top: 55%; + left: 10%; + width: 15%; + animation-delay: 0.9s; + --flow-rotation: -5deg; +} + +.flow-line-4 { + top: 55%; + left: 20%; + width: 15%; + animation-delay: 1.2s; + --flow-rotation: -10deg; +} + +.flow-line-5 { + top: 55%; + left: 20%; + width: 15%; + animation-delay: 1.2s; + --flow-rotation: -15deg; +} + +.flow-line-6 { + top: 55%; + left: 30%; + width: 15%; + animation-delay: 1.5s; + --flow-rotation: -20deg; +} + +/* 右侧流水线 */ +.flow-line-7 { + top: 20%; + left: 60%; + width: 25%; + animation-delay: 0s; + --flow-rotation: 15deg; +} + +.flow-line-8 { + top: 30%; + left: 65%; + width: 20%; + animation-delay: 0.5s; + --flow-rotation: 10deg; +} + +.flow-line-9 { + top: 40%; + left: 70%; + width: 15%; + animation-delay: 1s; + --flow-rotation: 5deg; +} + +.flow-line-10 { + top: 50%; + left: 75%; + width: 10%; + animation-delay: 1.5s; + --flow-rotation: 0deg; +} + +