¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <dv-full-screen-container class="full-screen-container"> |
| | | <header class="page-header"> |
| | | æµè¯è½¦é´ |
| | | <div class="header-right"> |
| | | <a-button type="primary" icon="save" size="large" @click="saveDevicePositionByApi">ä¿åä½ç½®</a-button> |
| | | </div> |
| | | </header> |
| | | <dv-border-box-8 class="content-container"> |
| | | <div v-for="item in deviceList" :key="item.equipmentId" class="single-device" |
| | | :style="{top:item.top+'px',left:item.left+'px'}" @mousedown="handleMouseDown" :id="item.equipmentId"> |
| | | <img :src="item.equipmentImageUrl" draggable="false"> |
| | | <div draggable="false" class="device-info"> |
| | | <div v-if="item.status==0" class="status-square" style="background-color: gray"></div> |
| | | <div v-if="item.status==1" class="status-square" style="background-color: red"></div> |
| | | <div v-if="item.status==2" class="status-square" style="background-color: green"></div> |
| | | <div v-if="item.status==3" class="status-square" style="background-color: yellow"></div> |
| | | <div class="device-id">{{item.equipmentId}}</div> |
| | | </div> |
| | | </div> |
| | | </dv-border-box-8> |
| | | </dv-full-screen-container> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | mouseX: 0, // é¼ æ å¨å
ç´ å
çXåæ |
| | | mouseY: 0, // é¼ æ å¨å
ç´ å
çYåæ , |
| | | dragging: false, //æ¯å¦å¨ææ½ä¸ |
| | | left: 0, // å
ç´ å·¦ä¸è§è·ç¦»ç¶å®¹å¨å·¦ä¾§çè·ç¦» |
| | | top: 0, // å
ç´ å·¦ä¸è§è·ç¦»ç¶å®¹å¨é¡¶é¨çè·ç¦», |
| | | elementId: '',// è¢«ææ½å
ç´ çid屿§å¼ |
| | | deviceList: [ |
| | | { |
| | | equipmentId: '123213213123232', |
| | | equipmentStatus: 0, |
| | | equipmentImageUrl: require('../assets/8.png'), |
| | | top: 200, |
| | | left: 100, |
| | | status: 1 |
| | | }, |
| | | { |
| | | equipmentId: '512346789561232', |
| | | equipmentStatus: 0, |
| | | equipmentImageUrl: require('../assets/8.png'), |
| | | top: 500, |
| | | left: 753, |
| | | status: 0 |
| | | }, |
| | | { |
| | | equipmentId: '64746965647653', |
| | | equipmentStatus: 0, |
| | | equipmentImageUrl: require('../assets/8.png'), |
| | | top: 300, |
| | | left: 860, |
| | | status: 2 |
| | | }, |
| | | { |
| | | equipmentId: '33548976965462', |
| | | equipmentStatus: 0, |
| | | equipmentImageUrl: require('../assets/8.png'), |
| | | top: 100, |
| | | left: 380, |
| | | status: 3 |
| | | }, |
| | | { |
| | | equipmentId: '85484913549253', |
| | | equipmentStatus: 0, |
| | | equipmentImageUrl: require('../assets/8.png'), |
| | | top: 200, |
| | | left: 1500, |
| | | status: 2 |
| | | } |
| | | ] |
| | | } |
| | | }, |
| | | methods: { |
| | | /** |
| | | * ææ½å¯¹è±¡é¼ æ æé®æä¸äºä»¶ |
| | | * @param event |
| | | */ |
| | | handleMouseDown(event) { |
| | | this.dragging = true |
| | | this.mouseX = event.clientX |
| | | this.mouseY = event.clientY |
| | | this.elementId = event.currentTarget.id |
| | | this.top = event.currentTarget.offsetTop |
| | | this.left = event.currentTarget.offsetLeft |
| | | document.addEventListener('mousemove', this.handleMouseMove) |
| | | document.addEventListener('mouseup', this.handleMouseUp) |
| | | }, |
| | | /** |
| | | * ææ¡£å¯¹è±¡é¼ æ ç§»å¨äºä»¶ |
| | | * @param event |
| | | */ |
| | | handleMouseMove(event) { |
| | | if (this.dragging) { |
| | | const deltaX = event.clientX - this.mouseX |
| | | const deltaY = event.clientY - this.mouseY |
| | | this.left += deltaX |
| | | this.top += deltaY |
| | | this.deviceList.forEach(item => { |
| | | if (item.equipmentId === this.elementId) { |
| | | item.top = this.top |
| | | item.left = this.left |
| | | } |
| | | }) |
| | | this.mouseX = event.clientX |
| | | this.mouseY = event.clientY |
| | | } |
| | | }, |
| | | /** |
| | | * ææ¡£å¯¹è±¡é¼ æ æé®å¼¹èµ·äºä»¶ |
| | | * @param event |
| | | */ |
| | | handleMouseUp(event) { |
| | | this.dragging = false |
| | | document.removeEventListener('mousemove', this.handleMouseMove) |
| | | document.removeEventListener('mouseup', this.handleMouseUp) |
| | | }, |
| | | /** |
| | | * è°ç¨æ¥å£ä¿åææ½åçä½ç½® |
| | | */ |
| | | saveDevicePositionByApi(){ |
| | | |
| | | } |
| | | }, |
| | | mounted() { |
| | | // ç¦æ¢ç¨æ·éä¸å
容 |
| | | document.onselectstart = () => false |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped lang="less"> |
| | | .full-screen-container { |
| | | background-image: url('../assets/Bj.jpg'); |
| | | color: #fff; |
| | | width: 100vw; |
| | | height: 100vh; |
| | | position: relative; |
| | | .page-header { |
| | | font-size: 50px; |
| | | text-align: center; |
| | | position: relative; |
| | | .header-right{ |
| | | position: absolute; |
| | | right: 200px; |
| | | top: 0; |
| | | } |
| | | } |
| | | .content-container { |
| | | .single-device { |
| | | position: absolute; |
| | | border: 1px solid transparent; |
| | | padding: 5px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | &:active { |
| | | border: 1px solid #00b3ff; |
| | | } |
| | | .device-info { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | .status-square { |
| | | width: 14px; |
| | | height: 14px; |
| | | border: 1px solid #fff; |
| | | border-radius: 2px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |