| | |
| | | justify-content: center; |
| | | align-items: center; |
| | | height: 100vh; |
| | | |
| | | background: linear-gradient(135deg, #e6f7ff 0%, #f0f8ff 100%); |
| | | overflow: hidden; |
| | | position: relative; |
| | | } |
| | | .tech-background { |
| | | position: fixed; |
| | | top: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | z-index: -1; |
| | | pointer-events: none; |
| | | opacity: 0.6; |
| | | } |
| | | |
| | | .grid-overlay { |
| | | position: absolute; |
| | | top: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | background-image: |
| | | linear-gradient(rgba(66, 134, 244, 0.08) 1px, transparent 1px), |
| | | linear-gradient(90deg, rgba(66, 134, 244, 0.08) 1px, transparent 1px); |
| | | background-size: 40px 40px; |
| | | perspective: 1000px; |
| | | transform-style: preserve-3d; |
| | | transform: perspective(500px) rotateX(60deg); |
| | | } |
| | | |
| | | .glow-effect { |
| | | position: absolute; |
| | | width: 100%; |
| | | height: 100%; |
| | | top: 0; |
| | | left: 0; |
| | | background: |
| | | radial-gradient(circle at 20% 30%, rgba(41, 128, 185, 0.3) 0%, transparent 40%), |
| | | radial-gradient(circle at 80% 70%, rgba(46, 204, 113, 0.3) 0%, transparent 40%); |
| | | filter: blur(10px); |
| | | } |
| | | |
| | | .particles-container { |
| | | position: absolute; |
| | | width: 100%; |
| | | height: 100%; |
| | | top: 0; |
| | | left: 0; |
| | | } |
| | | |
| | | .particle { |
| | | position: absolute; |
| | | background-color: rgba(255, 255, 255, 0.5); |
| | | border-radius: 50%; |
| | | animation: float 15s infinite ease-in-out; |
| | | } |
| | | |
| | | @keyframes float { |
| | | 0%, 100% { |
| | | transform: translateY(0) translateX(0); |
| | | opacity: 0.2; |
| | | } |
| | | 50% { |
| | | transform: translateY(-20px) translateX(20px); |
| | | opacity: 0.6; |
| | | } |
| | | } |
| | | |
| | | header { |
| | | background-color: #2196F3; |
| | | color: white; |
| | |
| | | .bus { |
| | | font-size: 10px; |
| | | background-color: #2196F3; |
| | | border: 10px solid #ffffff; |
| | | /*border: 10px solid #ffffff;*/ |
| | | position: absolute; |
| | | width: 15px; |
| | | height: 15px; |
| | |
| | | line-height: 15px; |
| | | font-weight: bold; |
| | | transition: transform 0.3s ease; |
| | | /* 3D效果 */ |
| | | transform: translateZ(0); |
| | | border: 10px solid rgba(255, 255, 255, 0.8); |
| | | } |
| | | |
| | | @keyframes pulse { |
| | | 0% { box-shadow: 0 0 0 0 rgba(33, 150, 243, 0.7); } |
| | | 70% { box-shadow: 0 0 0 10px rgba(33, 150, 243, 0); } |
| | | 100% { box-shadow: 0 0 0 0 rgba(33, 150, 243, 0); } |
| | | } |
| | | .station:hover, .bus:hover { |
| | | transform: scale(1.4); |
| | |
| | | left: 1000px; |
| | | text-align: center; |
| | | } |
| | | |
| | | /* 新设计的站点样式 - 基于第二张图片 */ |
| | | .station { |
| | | position: absolute; |
| | | width: 24px; |
| | | height: 24px; |
| | | text-align: center; |
| | | line-height: 24px; |
| | | font-size: 10px; |
| | | font-weight: bold; |
| | | transition: all 0.3s ease; |
| | | background-color: #ab1839; |
| | | border-radius: 4px; |
| | | color: white; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); |
| | | transform: scale(1); |
| | | z-index: 10; |
| | | /* 嵌套效果 */ |
| | | border: 2px solid white; |
| | | } |
| | | |
| | | .station::before { |
| | | content: ''; |
| | | position: absolute; |
| | | top: 3px; |
| | | left: 3px; |
| | | right: 3px; |
| | | bottom: 3px; |
| | | border: 1px solid rgba(255, 255, 255, 0.8); |
| | | border-radius: 2px; |
| | | pointer-events: none; |
| | | } |
| | | |
| | | /* 四个角的三角形指示器 */ |
| | | .station::after { |
| | | content: ''; |
| | | position: absolute; |
| | | width: 100%; |
| | | height: 100%; |
| | | top: 0; |
| | | left: 0; |
| | | pointer-events: none; |
| | | } |
| | | |
| | | .station .corner { |
| | | position: absolute; |
| | | width: 0; |
| | | height: 0; |
| | | border-style: solid; |
| | | border-width: 0 4px 4px 0; |
| | | border-color: transparent #ffffff transparent transparent; |
| | | } |
| | | |
| | | .station .corner-tl { |
| | | top: -2px; |
| | | left: -2px; |
| | | transform: rotate(0deg); |
| | | } |
| | | |
| | | .station .corner-tr { |
| | | top: -2px; |
| | | right: -2px; |
| | | transform: rotate(90deg); |
| | | } |
| | | |
| | | .station .corner-bl { |
| | | bottom: -2px; |
| | | left: -2px; |
| | | transform: rotate(270deg); |
| | | } |
| | | |
| | | .station .corner-br { |
| | | bottom: -2px; |
| | | right: -2px; |
| | | transform: rotate(180deg); |
| | | } |
| | | |
| | | /* 站点悬停效果 */ |
| | | .station:hover { |
| | | transform: scale(1.6); |
| | | z-index: 999; |
| | | box-shadow: 0 0 15px rgba(171, 24, 57, 0.8); |
| | | } |
| | | </style> |
| | | </head> |
| | | <body id="app1"> |
| | | <!--<header>--> |
| | | <body > |
| | | |
| | | <!-- 科技感背景元素 --> |
| | | <div class="tech-background"> |
| | | <div class="grid-overlay"></div> |
| | | <div class="glow-effect"></div> |
| | | <div class="particles-container" id="particles-container"></div> |
| | | </div> |
| | | <!--<header>--> |
| | | <!-- 环形穿梭车智能系统--> |
| | | <!--</header>--> |
| | | <div id="app"> |
| | |
| | | C 60,750 10,750 10,800 |
| | | C 10,800 10,850 60,850 |
| | | L 1100,850 |
| | | C 1100,850 1200,850 1200,750 |
| | | " |
| | | style="fill:none; stroke:blue; stroke-width:2;" /> |
| | | C 1100,850 1200,850 1200,750" |
| | | style="fill:none; stroke:blue; stroke-width:3; stroke-dasharray:10,1;"/> |
| | | </svg> |
| | | <!-- <div v-for="station in tableDataDev" class="station" :style="{ top: station.valueY + 'px', left: station.valueX + 'px' , backgroundColor: station.modeColor}">{{ station.index }}</div>--> |
| | | |
| | | <div v-for="station in tableDataDev" class="station" :style="{ |
| | | top: convertToCSSPosition(station.valueX, station.valueY).y + 'px', |
| | | left: convertToCSSPosition(station.valueX, station.valueY).x + 'px', |
| | | backgroundColor: station.modeColor}">{{ station.index }}</div> |
| | | backgroundColor: station.modeColor}"> |
| | | <div class="corner corner-tl"></div> |
| | | <div class="corner corner-tr"></div> |
| | | <div class="corner corner-bl"></div> |
| | | <div class="corner corner-br"></div> |
| | | {{ station.index }} |
| | | </div> |
| | | |
| | | <div> |
| | | <el-switch |
| | | style="display: block" |
| | |
| | | @change='upDateValueSystem'> |
| | | </el-switch> |
| | | </div> |
| | | |
| | | <!-- Buses --> |
| | | <!-- <div v-for="bus in tableDataRgv" class="bus" :style="{ top: bus.valueY + 'px', left: bus.valueX + 'px' , borderColor: bus.modeColor, backgroundColor: bus.statusColor}">{{ bus.index }}</div>--> |
| | | <div v-for="bus in tableDataRgv" class="bus" :style="{ |
| | | top: convertToCSSPositionWithOffset(bus.valueX, bus.valueY).y + 'px', |
| | | left: convertToCSSPositionWithOffset(bus.valueX, bus.valueY).x + 'px', |
| | | borderColor: bus.modeColor, backgroundColor: bus.statusColor}">{{ bus.index }}</div> |
| | | animation: 'pulse ' + bus.animation + 's infinite', |
| | | borderColor: bus.modeColor, backgroundColor: bus.statusColor}">{{ bus.index }} |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <!-- Left Task Bar --> |
| | |
| | | </div> |
| | | |
| | | <script> |
| | | // 在Vue实例外添加粒子生成函数 |
| | | function createParticles() { |
| | | const container = document.getElementById('particles-container'); |
| | | const particleCount = 30; |
| | | |
| | | for (let i = 0; i < particleCount; i++) { |
| | | const particle = document.createElement('div'); |
| | | particle.classList.add('particle'); |
| | | |
| | | // 随机大小和位置 |
| | | const size = Math.random() * 3 + 1; |
| | | const posX = Math.random() * 100; |
| | | const posY = Math.random() * 100; |
| | | const delay = Math.random() * 15; |
| | | |
| | | particle.style.width = `${size}px`; |
| | | particle.style.height = `${size}px`; |
| | | particle.style.left = `${posX}vw`; |
| | | particle.style.top = `${posY}vh`; |
| | | particle.style.animationDelay = `${delay}s`; |
| | | |
| | | container.appendChild(particle); |
| | | } |
| | | } |
| | | |
| | | // 页面加载完成后创建粒子 |
| | | document.addEventListener('DOMContentLoaded', createParticles); |
| | | // 在Vue实例外获取body尺寸 |
| | | function getBodySize() { |
| | | return { |
| | |
| | | tableDataLeft: [], |
| | | tableDataLeft1: [], |
| | | tableDataRight: [], |
| | | tableDataRight1: [], |
| | | devpPos1:[ |
| | | {dev_no: 116,pos:633980}, |
| | | {dev_no: 117,pos:604043}, |
| | | {dev_no: 118,pos:574323}, |
| | | {dev_no: 119,pos:559534}, |
| | | {dev_no: 120,pos:544682}, |
| | | {dev_no: 121,pos:514912}, |
| | | {dev_no: 122,pos:485227}, |
| | | {dev_no: 123,pos:470367}, |
| | | {dev_no: 124,pos:455514}, |
| | | {dev_no: 125,pos:425768}, |
| | | {dev_no: 126,pos:396268}, |
| | | {dev_no: 127,pos:381106}, |
| | | {dev_no: 128,pos:366311}, |
| | | {dev_no: 129,pos:336638}, |
| | | {dev_no: 130,pos:306820}, |
| | | {dev_no: 131,pos:277067}, |
| | | {dev_no: 132,pos:257418}, |
| | | {dev_no: 133,pos:217730}, |
| | | ], |
| | | devpPos2:[ |
| | | {dev_no: 112,pos:891000}, |
| | | {dev_no: 113,pos:865000}, |
| | | {dev_no: 114,pos:800000}, |
| | | {dev_no: 115,pos:780000}, |
| | | ], |
| | | devpPos3:[ |
| | | {dev_no: 101,pos:1269958}, |
| | | {dev_no: 102,pos:1243454}, |
| | | {dev_no: 103,pos:1229081}, |
| | | {dev_no: 104,pos:1202099}, |
| | | {dev_no: 105,pos:1187564}, |
| | | {dev_no: 106,pos:1160630}, |
| | | {dev_no: 107,pos:1146152}, |
| | | {dev_no: 108,pos:1119463}, |
| | | {dev_no: 109,pos:1105038}, |
| | | {dev_no: 110,pos:1077961}, |
| | | {dev_no: 111,pos:1063813}, |
| | | ], |
| | | tableDataRight1: [] |
| | | }, |
| | | created(){ |
| | | this.init(); |
| | | this.devpPos1.reverse() |
| | | this.devpPos3.reverse() |
| | | }, |
| | | watch: { |
| | | |
| | |
| | | const basePos = this.convertToCSSPosition(svgX, svgY); |
| | | // 示例:向右偏移半径的距离(可根据需求调整偏移方向) |
| | | return { |
| | | x: basePos.x -14, |
| | | y: basePos.y -14 |
| | | x: basePos.x -16.5, |
| | | y: basePos.y -16.5 |
| | | }; |
| | | }, |
| | | // 更新body尺寸 |
| | |
| | | }); |
| | | }, |
| | | handleChange(val) { |
| | | console.log(val); |
| | | if (val.length === 0){ |
| | | valueRight = '0'; |
| | | } else { |
| | | console.log("2222"+val); |
| | | |
| | | if (val.length >= 1){ |
| | | this.handleChangeValueRight(1) |
| | |
| | | } |
| | | }, |
| | | handleChange1(val) { |
| | | console.log(val); |
| | | if (val.length === 0){ |
| | | valueRight1 = '0'; |
| | | } else { |
| | | console.log("2222"+val); |
| | | |
| | | if (val.length >= 1){ |
| | | this.handleChangeValueRight1(1) |
| | | } |
| | |
| | | }); |
| | | }, |
| | | handleChangeValueRight(val) { |
| | | console.log("33333"+val); |
| | | |
| | | switch (val){ |
| | | case 1: |
| | | valueRight = '100'; |
| | |
| | | } |
| | | }, |
| | | handleChangeValueRight1(val) { |
| | | console.log("33333"+val); |
| | | |
| | | switch (val){ |
| | | case 1: |
| | | valueRight1 = '100'; |
| | |
| | | }, |
| | | getTableDataRgv() { |
| | | let that = this; |
| | | // that.tableDataRgv = busPsto |
| | | // return |
| | | $.ajax({ |
| | | url: baseUrl + "/rgv/ring/through/rgv/position/data", |
| | | headers: { |