| | |
| | | :id="item.stationCode" |
| | | @click="handleClick" |
| | | > |
| | | <h1>{{ item.stationCode }}--{{ item.orderData.length > 0 ?item.orderData[0].orderCode +"-"+ item.orderData[0].cusName + "-" +item.orderData[0].orderName : 'ææ è®¢å'}}</h1> |
| | | <h1>{{ item.stationCode }}--{{ item.orderData.length > 0 ?item.orderCode +"-"+ item.cusName + "-" +item.orderName : 'ææ è®¢å'}}</h1> |
| | | <!-- <h1></h1> --> |
| | | <div class="bigdata-content"> |
| | | <div class="content-item" :data-value="item.sortedNum">已忣æ°é</div> |
| | | <div class="content-item" :data-value="item.unsortedNum">æªåæ£æ°é</div> |
| | | <div class="content-item" :data-value="item.orderTotalNum">è®¢åæ»æ°é</div> |
| | | <div class="content-item" :data-value="item.stationSortedNum">工使°</div> |
| | | <div class="content-item" :data-value="item.sortedNum">已忣</div> |
| | | <div class="content-item" :data-value="item.unsortedNum">æªåæ£</div> |
| | | <div class="content-item" :data-value="item.orderTotalNum">è®¢åæ°</div> |
| | | </div> |
| | | <div class="bigdata-table"> |
| | | <table> |
| | | <thead> |
| | | <tr> |
| | | <th>订åç¼å·</th> |
| | | <th>客æ·åç§°</th> |
| | | <th>订ååç§°</th> |
| | | <th>æ¹æ¬¡</th> |
| | | <th>产ååç§°</th> |
| | | <th>工件å</th> |
| | | <th>ç©æå</th> |
| | | <th>尺寸</th> |
| | | <th>å·¥åº</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | <tr v-for="(order,index) in item.orderData" :key="index"> |
| | | <td>{{ order.orderCode }}</td> |
| | | <td>{{ order.cusName }}</td> |
| | | <td>{{ order.orderName }}</td> |
| | | <td>{{ order.batch }}</td> |
| | | <td>{{ order.productName }}</td> |
| | | <td>{{ order.name }}</td> |
| | | <td>{{ order.baseName }}</td> |
| | | <td>{{ order.size }}</td> |
| | | <td>{{ order.process }}</td> |
| | | </tr> |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | <div :id="item.stationCode + '-modal'" class="modal-overlay"> |
| | | <div class="modal-content">请æ¾è¡</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | this.getStations(deviceCode); |
| | | }, |
| | | methods: { |
| | | modalOverlay(stationCode, show) { |
| | | const modal = document.getElementById(stationCode + "-modal"); |
| | | if (modal) { |
| | | if (show) { |
| | | const element = document.getElementById(stationCode); // è·åå
ç´ |
| | | modal.style.display = "flex"; // æ¾ç¤ºé®ç½©å± |
| | | modal.style.left = element.offsetLeft + "px"; // 设置é®ç½©å±ä½ç½® |
| | | modal.style.top = element.offsetTop + "px"; // 设置é®ç½©å±ä½ç½® |
| | | modal.style.width = element.offsetWidth + "px"; // 设置é®ç½©å±å®½åº¦ |
| | | modal.style.height = element.offsetHeight + "px"; // 设置é®ç½©å±é«åº¦ |
| | | } else { |
| | | modal.style.display = "none"; // éèé®ç½©å± |
| | | } |
| | | // modal.classList.add("modal-blink"); // æ·»å éªçææ |
| | | } |
| | | }, |
| | | handleClick() { |
| | | const parent = event.target.closest(".bigdata"); |
| | | parent.classList.remove("flash-bg"); |
| | | void parent.offsetWidth; // 强å¶DOMéç» |
| | | parent.classList.add("flash-bg"); |
| | | |
| | | const stationCode = parent.id; |
| | | this.modalOverlay(stationCode, true); // æ¾ç¤ºé®ç½©å± |
| | | |
| | | setTimeout(() => { |
| | | this.modalOverlay(stationCode, false); // éèé®ç½©å± |
| | | }, 10000); // 2ç§åéèé®ç½©å± |
| | | }, |
| | | handleBackgroundColor(stationCode) { |
| | | const element = document.getElementById(stationCode); |
| | | if (element) { |
| | | element.classList.remove("flash-bg"); |
| | | void element.offsetWidth; // 强å¶DOMéç» |
| | | element.classList.add("flash-bg"); |
| | | } |
| | | }, |
| | | clearStationContent(stationCode) { |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).orderTotalNum = 0; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).sortedNum = 0; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).unsortedNum = 0; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).stationSortedNum = 0; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).orderData = []; |
| | | }, |
| | | createSocket(url) { |
| | | // å建WebSocketè¿æ¥ |
| | | //"ws://127.0.0.1:9295/admin" |
| | | this.client = new WebSocket(url); |
| | | var _this = this; // ä¿åthisçå¼ç¨ |
| | | this.client.onopen = function() { |
| | |
| | | this.client.onerror = function() {}; |
| | | }, |
| | | handleMessage(event) { |
| | | console.log(this.contentData); |
| | | const data = JSON.parse(event.data); |
| | | console.log("æ¶å°æ¶æ¯ï¼", event.data); |
| | | if (data.release === 1) { |
| | | this.clearStationContent(data.stationCode); |
| | | } else { |
| | | const stationCode = data.stationCode; |
| | | const orderData = data.orderData; |
| | | const orderTotalNum = data.orderTotalNum; |
| | | const sortedNum = data.sortedNum; |
| | | const unsortedNum = data.unsortedNum; |
| | | const stationSortedNum = data.stationSortedNum; |
| | | const orderCode = data.orderCode; |
| | | const cusName = data.cusName; |
| | | const orderName = data.orderName; |
| | | const orderId = data.orderId; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).orderId = orderId; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).orderCode = orderCode; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).cusName = cusName; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).orderName = orderName; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).orderData = orderData; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).orderTotalNum = orderTotalNum; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).sortedNum = sortedNum; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).unsortedNum = unsortedNum; |
| | | this.contentData.find( |
| | | item => item.stationCode === stationCode |
| | | ).stationSortedNum = stationSortedNum; |
| | | |
| | | this.handleBackgroundColor(stationCode); |
| | | |
| | | this.contentData.forEach(item => { |
| | | if (item.orderId === orderId) { |
| | | item.sortedNum = sortedNum; |
| | | item.unsortedNum = unsortedNum; |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | getStations(deviceCode){ |
| | | getStations(deviceCode) { |
| | | this.http |
| | | .post( |
| | | "/api/Container/GetPutStations?deviceCode=" + deviceCode, |
| | | {}, |
| | | true |
| | | ) |
| | | .then((x) => { |
| | | .then(x => { |
| | | if (!x.status) return this.$message.error(x.message); |
| | | this.contentData = x.data; |
| | | }); |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .modal-overlay { |
| | | display: none; /* é»è®¤ä¸æ¾ç¤º */ |
| | | position: fixed; /* å
¨å±å®ä½ */ |
| | | background-color: rgba(0, 0, 0, 1); /* åéæé»è²é®ç½© */ |
| | | z-index: 5; /* ç¡®ä¿é®ç½©å¨å
容ä¹ä¸ */ |
| | | opacity: 1; /* åå§å®å
¨ä¸éæ */ |
| | | animation: modal-overlay 1.5s infinite; /* 1ç§éªç䏿¬¡ï¼æ 鿬¡éå¤ */ |
| | | } |
| | | |
| | | @keyframes modal-overlay { |
| | | 0%, |
| | | 100% { |
| | | opacity: 1; |
| | | } |
| | | 50% { |
| | | opacity: 0; |
| | | } |
| | | } |
| | | |
| | | .modal-content { |
| | | position: absolute; /* ç¸å¯¹å®ä½ */ |
| | | top: 50%; /* åç´å±
ä¸ */ |
| | | left: 50%; /* æ°´å¹³å±
ä¸ */ |
| | | transform: translate(-50%, -50%); /* 精确å±
ä¸ */ |
| | | padding: 20px; /* å
è¾¹è· */ |
| | | border-radius: 10px; /* åè§ */ |
| | | font-size: 20px; /* åä½å¤§å° */ |
| | | animation: modal-content 1.5s infinite; /* 1ç§éªç䏿¬¡ï¼æ 鿬¡éå¤ */ |
| | | font-family: "Microsoft YaHei", sans-serif; /* å使 ·å¼ */ |
| | | color: #f0f0f0; /* åä½é¢è² */ |
| | | } |
| | | |
| | | @keyframes modal-content { |
| | | 0%, |
| | | 100% { |
| | | font-size: 40px; |
| | | color: #f0f0f0; |
| | | } |
| | | 50% { |
| | | font-size: 20px; |
| | | color: #000000; |
| | | } |
| | | } |
| | | |
| | | .bigdata-container { |
| | | width: 100%; |
| | | height: 100%; |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | grid-template-columns: repeat(2, 1fr); |
| | | grid-template-rows: repeat(2, 1fr); |
| | | gap: 15px; |
| | | padding: 20px; |
| | | gap: 5px; |
| | | padding: 10px; |
| | | background: #f8f9fa; |
| | | } |
| | | |
| | |
| | | background: #ffffff; |
| | | border-radius: 12px; |
| | | box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); |
| | | padding: 20px; |
| | | padding: 5px; |
| | | transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); |
| | | border: 1px solid #e9ecef; |
| | | overflow: hidden; /* å¤å±å®¹å¨éèæº¢åº */ |
| | |
| | | left: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | border-radius: 12px; |
| | | border-radius: 5px; |
| | | animation: bg-flash 1s ease-in-out; |
| | | z-index: 1; |
| | | } |
| | |
| | | |
| | | /* ä¿®å¤è¡¨æ ¼å®¹å¨æ ·å¼ */ |
| | | .bigdata-table { |
| | | margin-top: 15px; |
| | | padding-top: 10px; |
| | | margin-top: 5px; |
| | | padding-top: 5px; |
| | | border-top: 1px solid #eee; |
| | | flex: 1; |
| | | overflow: hidden; |
| | |
| | | } |
| | | |
| | | .bigdata h1 { |
| | | font-size: 20px; |
| | | font-size: 14px; |
| | | color: #2d8cf0; |
| | | font-weight: 700; |
| | | margin-bottom: 15px; |
| | | margin-bottom: 5px; |
| | | text-shadow: 1px 1px 2px rgba(45, 140, 240, 0.15); |
| | | letter-spacing: 0.5px; |
| | | font-family: "Microsoft YaHei", sans-serif; |
| | |
| | | |
| | | .bigdata-content { |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | gap: 12px; |
| | | margin: 18px 0; |
| | | grid-template-columns: repeat(4, 1fr); |
| | | gap: 5px; |
| | | margin: 5px 0; |
| | | } |
| | | |
| | | .content-item { |
| | | position: relative; |
| | | background: linear-gradient(145deg, #f8f9fa 0%, #e9ecef 100%); |
| | | border-radius: 10px; |
| | | padding: 16px 12px; |
| | | border-radius: 5px; |
| | | padding: 5px 5px; |
| | | color: #343a40; |
| | | font-size: 18px; |
| | | font-size: 20px; |
| | | font-weight: 600; |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | .content-item::after { |
| | | content: attr(data-value); |
| | | color: #2d8cf0; |
| | | font-size: 24px; |
| | | font-size: 50px; |
| | | font-weight: 800; |
| | | margin-top: 12px; |
| | | text-shadow: 0 2px 4px rgba(45, 140, 240, 0.15); |
| | |
| | | border-radius: 10px; |
| | | overflow: hidden; |
| | | box-shadow: 0 3px 8px rgba(0, 0, 0, 0.1); |
| | | margin-top: 15px; |
| | | margin-top: 5px; |
| | | max-height: 290px; /* æ ¹æ®å®é
éè¦è°æ´ */ |
| | | display: block; |
| | | overflow-y: hidden; /* éèæ»å¨æ¡ */ |
| | |
| | | z-index: 2; |
| | | background: linear-gradient(145deg, #e6f3ff 0%, #d4e7ff 100%); |
| | | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); |
| | | opacity: 1; |
| | | } |
| | | |
| | | /* è°æ´tbodyæ¾ç¤ºé«åº¦ */ |
| | |
| | | background: linear-gradient(145deg, #e6f3ff 0%, #d4e7ff 100%); |
| | | color: #2d8cf0; |
| | | font-weight: 600; |
| | | padding: 14px 12px; |
| | | padding: 5px 12px; |
| | | border-bottom: 2px solid #2d8cf0; |
| | | letter-spacing: 0.5px; |
| | | font-size: 12px; |
| | | } |
| | | |
| | | /* è¡¨æ ¼åå
æ ¼ */ |
| | |
| | | padding: 12px; |
| | | border-bottom: 1px solid rgba(233, 236, 239, 0.8); |
| | | color: #495057; |
| | | font-size: 14px; |
| | | font-size: 12px; |
| | | transition: all 0.25s ease; |
| | | } |
| | | |
| | |
| | | .bigdata-table td:first-child { |
| | | font-weight: 500; |
| | | color: #2d8cf0; |
| | | text-align: left; /* é¦åä¿æå·¦å¯¹é½ */ |
| | | padding-left: 24px; /* å¢å 左侧é´è· */ |
| | | text-align: center; /* é¦åä¿æå·¦å¯¹é½ */ |
| | | padding-left: 5px; /* å¢å 左侧é´è· */ |
| | | } |
| | | |
| | | /* æååå
æ ¼å³å¯¹é½ */ |
| | | .bigdata-table td:last-child { |
| | | text-align: right; |
| | | padding-right: 24px; |
| | | padding-right: 5px; |
| | | } |
| | | |
| | | @keyframes scroll { |