From da8761b8f8cad5fe6825ef28c3b877816eeea59e Mon Sep 17 00:00:00 2001 From: gaosp <gaosp> Date: 星期六, 13 一月 2024 22:24:14 +0800 Subject: [PATCH] update --- src/container/Map/Map.vue | 368 ++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 284 insertions(+), 84 deletions(-) diff --git a/src/container/Map/Map.vue b/src/container/Map/Map.vue index 77297aa..2e0d004 100644 --- a/src/container/Map/Map.vue +++ b/src/container/Map/Map.vue @@ -1,41 +1,87 @@ <!-- * @Date: 2024-01-05 23:47:53 * @LastEditors: Sneed - * @LastEditTime: 2024-01-06 16:12:18 + * @LastEditTime: 2024-01-12 22:28:57 * @FilePath: /belleson-frontend/Users/mache/Documents/demo/mdc/src/container/Map/Map.vue --> <template> <div class="map"> - <div class="table-tool" v-if="status !== 2"> - <el-button @click="save">淇濆瓨</el-button> - <el-button @click="out">閫�鍑�</el-button> - <el-input v-show="status !== 2" v-model="plantName" placeholder="鍘傚悕"/> - <el-input v-show="status ===0 && !map" v-model="rows" /> - <el-input v-show="status ===0 && !map" v-model="cols" /> - <el-button v-show="status ===0 && !map" @click="createMap">鐢熸垚鍦板浘</el-button> - </div> - <div class="table" > - <div class="table-action" :style="position" v-show="showAction && status !== 2"> - <div @click="merge">鍚堝苟</div> - <div @click="split">鎷嗗垎</div> - <div @click="sign(1)">杩囬亾</div> - <div @click="sign(2)">鏈哄簥</div> - <div @click="sign(0)">鍙栨秷</div> - <!-- <div>澧炲姞琛�</div> --> - <!-- <div>鍒犻櫎琛�</div> --> - <!-- <div>澧炲姞鍒�</div> --> - <!-- <div>鍒犻櫎鍒�</div> --> + <div class="map-container" v-if="!addStatus"> + <div class="table-tool" v-if="status !== 2"> + <el-button style="width: 150px;" type="primary" size="mini" @click="save">淇濆瓨</el-button> + <el-button style="width: 150px;" size="mini" @click="out">閫�鍑�</el-button> + <el-input v-show="status !==2" v-model="rows" /> + <el-input v-show="status !==2" v-model="cols" /> + <el-button size="mini" v-show="status !==2" @click="createMap">鐢熸垚鍦板浘</el-button> + <div class="plant-name" v-if="status===2">{{plantName}}</div> + <el-input class="plant-name" v-if="status!==2" v-model="plantName" placeholder="璇疯緭鍏ュ巶鍚�"/> </div> - <table :style="{ width: 50 / 19 * rows + 'rem', height: 50 / 19 * cols + 'rem' }"> - <tr v-for="(item, index) in mapNew" :key="index"> - <td v-if="v.rowspan !==0 && v.colspan!==0" :class="{'active': (range.x !=='' && v.rowIndex >=range.x && v.rowIndex<=range.x1 && v.colIndex>=range.y && v.colIndex<=range.y1),aisle: v.type ===1}" @mousedown="e => onMousedown(e, v)" @mousemove="e => onMouseMove(e, v)" v-for="v in item" - :rowspan="v.rowspan" :colspan="v.colspan" :key="v.rowIndex + '-' + v.colIndex"> - <img @click="addDevice($event,v)" @mousedown="e => e.stopPropagation()" v-if="v.type ===2 && status!==2" src="./img/+.png" alt=""> - </td> - </tr> - </table> + <div class="table" > + <div class="table-action" :style="position" v-show="showAction && status !== 2"> + <div @click="merge">鍚堝苟</div> + <div @click="split">鎷嗗垎</div> + <div @click="sign(1)">杩囬亾</div> + <div @click="sign(2)">鏈哄簥</div> + <div @click="sign(0)">鍙栨秷</div> + <!-- <div>澧炲姞琛�</div> --> + <!-- <div>鍒犻櫎琛�</div> --> + <!-- <div>澧炲姞鍒�</div> --> + <!-- <div>鍒犻櫎鍒�</div> --> + </div> + <div :style="{width: (cols * height + 'px'),height: rows * height + 'px'}"> + <table > + <tr v-for="(item, index) in map" :key="index"> + <td v-if="v.rowspan !==0 && v.colspan!==0" + :width="v.colspan* height + 'px'" + :height="v.rowspan* height + 'px'" + :class="{'active': (range.x !=='' && v.rowIndex >=range.x && v.rowIndex<=range.x1 && v.colIndex>=range.y && v.colIndex<=range.y1),aisle: v.type ===1}" @mousedown="e => onMousedown(e, v)" @mousemove="e => onMouseMove(e, v)" v-for="v in item" + :rowspan="v.rowspan" :colspan="v.colspan" :key="v.rowIndex + '-' + v.colIndex"> + <img @click="addDevice($event,v)" @mousedown="e => e.stopPropagation()" v-if="v.type ===2 && status!==2 && !v.id" src="./img/+.png" alt=""> + <div v-show="v.id" class="machine"> + <p>YKX123123213</p> + <div> + <div class="img"> + <img src="./img/machine.png" alt=""> + </div> + <ul> + <li> + <img src="./img/sd.png" alt=""> + <div> + <p>0.00%</p> + <p>鑳藉姏鍒╃敤鐜�</p> + </div> + </li> + <li> + <img src="./img/sd.png" alt=""> + <div> + <p>0.00%</p> + <p>鑳藉姏鍒╃敤鐜�</p> + </div> + </li> + <li> + <img src="./img/sd.png" alt=""> + <div> + <p>0.00%</p> + <p>鑳藉姏鍒╃敤鐜�</p> + </div> + </li> + </ul> + </div> + </div> + + </td> + <!-- <td></td> --> + </tr> + <!-- <tr> + <td></td> + </tr> --> + </table> + </div> + </div> </div> + <addMachine :id="id" @setmachineId="setmachineId" v-else @close="close"/> </div> + </template> <script> const getParent = (v, layout) => { @@ -45,7 +91,14 @@ return v } } +import mixins from '@/mixins/index' +import AddMachine from './addMachine.vue' +import {mapGetters} from 'vuex' export default { + mixins: [mixins], + components: { + AddMachine + }, props: { status: { type: Number, @@ -58,31 +111,24 @@ type: String, }, id: { - type: Number + type: [Number,String] } - }, - computed: { - mapNew () { - if (this.currentMap.length > 0) return this.currentMap - if (!this.map) return [] - let arr = this.map.filter(item => item.rowspan !== 0 || item.colspan !== 0) - return arr - }, - tableW () { - this.mapNew - }, }, data() { return { + height: 0, plantName: '', - rows: 10, - cols: 10, + rows: 20, + cols: 50, map: null, // 鍦板浘鏁版嵁 + addStatus: false, position: {}, + selection:[], showAction: false, tdMounseDown: false, - selection: [], - range: {x: '',x1: '',y: '',y1: ''} + range: {x: '',x1: '',y: '',y1: ''}, + currentAdd: {}, + colgroups:[] } }, watch: { @@ -125,6 +171,18 @@ this.plantName = this.name }, immediate: true + }, + currentMap: { + handler () { + if (!this.currentMap || this.currentMap.length === 0) return + if (this.currentMap.length > 0) this.map = this.currentMap + this.rows = this.currentMap.length; + this.cols = this.currentMap[0].length; + }, + immediate: true + }, + map () { + this.height = (document.querySelector('.table').getBoundingClientRect().height - 30) / 20 } }, mounted() { @@ -133,16 +191,27 @@ if(this.status ===2) return this.tdMounseDown = false }) - this.map = this.currentMap - if (this.id) { - this.getmachineList() + try { + this.height = (document.querySelector('.table').getBoundingClientRect().height - 30) / 20 + } catch (error) { + } + }, beforeUpdate() { - this.$el.querySelector('table').removeEventListener('contextmenu', this.contextmenu) + try { + this.$el.querySelector('table').removeEventListener('contextmenu', this.contextmenu) + } catch (error) { + + } + }, updated() { - this.$el.querySelector('table').addEventListener('contextmenu', this.contextmenu) + try { + this.$el.querySelector('table').addEventListener('contextmenu', this.contextmenu) + } catch (error) { + + } }, methods: { createMap() { @@ -163,17 +232,26 @@ this.map = data }, contextmenu(e) { + console.log(e) if(this.status ===2) return // if (this.range.x !=='') return e.preventDefault() e.stopPropagation() let { pageX: left, pageY: top } = e this.showAction = true - let { top: t } = document.querySelector('.map').getBoundingClientRect() - this.position = { - left: left + 'px', - top: top - t + 10 + 'px' + let { top: t } = document.querySelector('.table').getBoundingClientRect() + if (window.innerWidth - left < 100) { + this.position = { + right: 0, + top: top - t + 10 + 'px' + } + } else { + this.position = { + left: left + 'px', + top: top -t + 10 + 'px' + } } + }, onMousedown(e, v) { if(this.status ===2) return @@ -229,9 +307,10 @@ } } } - setData(layoutNew) - setRange({x,y,x1:x,y1: y}) - setShowMenu(false) + this.showAction = false + // setData(layoutNew) + // setRange({x,y,x1:x,y1: y}) + // setShowMenu(false) }, sign (type) { const { x, x1, y, y1 } = this.range @@ -248,30 +327,25 @@ addDevice (e,v) { if(this.status ===2) return e.stopPropagation() - alert('娣诲姞璁惧') - }, - getmachineList () { - this.$http.post('/machine/list', { - status: '', - plantId: this.id - }).then(res => { - console.log(res) - }) + this.addStatus = true + this.currentAdd = v }, save () { if (this.status === 0) { - this.$http.post('/plant/save',{ + this.$http.postJson('/plant/save',{ name: this.plantName, gridSetting: JSON.stringify(this.map) }).then(res => { + this.$emit('out') console.log(res) }) } else if(this.status === 1) { - this.$http.post('/plant/modify',{ + this.$http.postJson('/plant/modify',{ name: this.plantName, gridSetting: JSON.stringify(this.map), id: this.id }).then(res => { + this.$emit('out') console.log(res) }) } @@ -279,6 +353,19 @@ }, out () { this.$emit('out') + }, + close () { + this.addStatus = false + }, + setmachineId (id) { + console.log(id) + if (!id) return + let i = this.currentAdd.rowIndex + let j = this.currentAdd.colIndex + let arr = [...(this.map[i])]; + arr[j].id = id + this.$set(this.map,i,arr) + this.close() } }, } @@ -287,12 +374,20 @@ .map { width: 100%; height: 100%; - overflow: auto; position: relative; + .map-container { + width: 100%; + height: 100%; + padding: 20px; + overflow: hidden; + position: relative; + display: flex; + flex-direction: column; + } } .table-tool { - margin-top: 10px; + padding-bottom: 50px; display: flex; justify-content: flex-start; @@ -300,43 +395,129 @@ width: 80px; margin-inline: 10px; } + .plant-name { + width: 120px; + margin-left: auto; + margin-right: 30px; + text-align: center; + line-height: 28px; + background: rgba(23,38,67,0.6); + border-radius: 14px; + overflow: hidden; + color: #F7F8FA; + font-size: 12px; + border: 1px solid; + border-image: linear-gradient(180deg, rgba(154, 254, 254, 1), rgba(75, 120, 205, 1)) 1 1; + } } .table { - padding: 10px; - margin-top: 10px; - display: flex; - justify-content: flex-start; - overflow: auto; - - + // margin-top: 10px; + // display: flex; + // justify-content: flex-start; + width: 100%; + height: 100%; + position: relative; + overflow-x: scroll; .table-action { position: absolute; z-index: 999; color: #fff; - + width: 100px; div { margin-top: 4px; cursor: pointer; } + div:hover { + color: #68D9FF; + } } table { - border: 1px solid #1662DB; + width: 100%; border-collapse: collapse; - table-layout: fixed; - word-wrap: break-word; - + // table-layout: fixed; + // word-wrap: break-word; + overflow: hidden; + // box-sizing: border-box; td { - width: 50px; - height: 50px; + // width: 50px; + // height: 50px; + box-sizing: border-box; border: 1px solid #1662DB; vertical-align: middle; text-align: center; - img { + & > img { width: 20px; height: 20px; cursor: pointer; + } + .machine { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + & > p { + margin-top: 20px; + color: #E9FFFF; + text-shadow: 0px 1px 11px #549BD4; + background: linear-gradient(180deg, #9AFEFE 0%, #4B78CD 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + text-align: center; + } + & > div { + flex: 1 1 auto; + margin-top: 20px; + display: flex; + align-items: center; + margin-bottom: 20px; + + overflow: hidden; + .img { + width: 50%; + height: 100%; + margin-left: 20px; + border: 1px solid #444C55; + border-radius: 10px; + position: relative; + img { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80%; + } + } + ul { + flex: 1 1 auto; + height: 100%; + margin-left: 20px; + list-style: none; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; + li { + width: 100%; + display: flex; + font-size: 12px; + align-items: center; + & > div { + margin-left: 20px;; + } + p { + color: #E9FFFF; + text-shadow: 0px 1px 11px #549BD4; + } + img { + width: 40px; + height: 40px; + } + } + } + } + } } td.active { @@ -346,7 +527,26 @@ // width: 20px; // height: 20px; background: #1662DB; + div { + // width: 20px; + // height: 20px; + } } + td.device { + // width: 400px; + // height: 400px; + overflow: hidden; + div { + // width: 400px; + } + } + } +} +.grid { + width: 100%; + height: 100%; + div { + border: 1px solid red; } } </style> -- Gitblit v1.9.3