| | |
| | | <!DOCTYPE html> |
| | | <html lang="en"> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <title>库位地图编辑</title> |
| | | <script type="text/javascript" src="../../static/js/vue.min.js"></script> |
| | | <style> |
| | | .pointContainer { |
| | | display: flex; |
| | | justify-content: center; |
| | | margin-top: 1px; |
| | | } |
| | | |
| | | .pointBox { |
| | | background: #bababa; |
| | | width: 30px; |
| | | height: 30px; |
| | | margin-right: 1px; |
| | | } |
| | | |
| | | .pointBoxGreen { |
| | | background: #00ff7f !important; |
| | | } |
| | | |
| | | .pointBoxBlue { |
| | | background: #55aaff !important; |
| | | } |
| | | |
| | | .pointBoxRed { |
| | | background: #ff0000 !important; |
| | | } |
| | | |
| | | .pointBoxStart { |
| | | background: #ffaa00 !important; |
| | | } |
| | | |
| | | .pointBoxEnd { |
| | | background: #ff55ff !important; |
| | | } |
| | | |
| | | .pointBoxStation { |
| | | background: #ffff00 !important; |
| | | } |
| | | |
| | | .chargeStation { |
| | | background: #ffaa7f !important; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | <div id="app" style="display: flex;justify-content: flex-start;" @click="bgClick()"> |
| | | <div style="margin-right: 100px;"> |
| | | <div>Col:<input type="text" v-model="col" /></div> |
| | | <div>Row:<input type="text" v-model="row" /></div> |
| | | <div> |
| | | <button @click="generate">生成数据</button> |
| | | <button @click="printData">显示数据</button> |
| | | </div> |
| | | <div> |
| | | <div> |
| | | 禁止区域: |
| | | <div class="pointBox"></div> |
| | | </div> |
| | | <div> |
| | | 库位: |
| | | <div class="pointBox pointBoxBlue"></div> |
| | | </div> |
| | | <div> |
| | | 堆垛机: |
| | | <div class="pointBox pointBoxGreen"></div> |
| | | </div> |
| | | <div> |
| | | 轨迹: |
| | | <div class="pointBox pointBoxRed"></div> |
| | | </div> |
| | | <div> |
| | | 站点: |
| | | <div class="pointBox pointBoxStation"></div> |
| | | </div> |
| | | <div> |
| | | 充电桩: |
| | | <div class="pointBox chargeStation"></div> |
| | | </div> |
| | | <div> |
| | | 隐藏显示: |
| | | <div class="pointBox pointBoxStart"></div> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div>起点:<input type="text" v-model="startPosition"></div> |
| | | <div>终点:<input type="text" v-model="endPosition"></div> |
| | | <div><button @click="calcPath">计算路径</button></div> |
| | | </div> |
| | | <div> |
| | | <textarea v-model="importData"></textarea> |
| | | <button @click="importDataClick">导入数据</button> |
| | | </div> |
| | | </div> |
| | | |
| | | <div> |
| | | <div class="pointContainer" v-for="(x,index) in map" :key="index"> |
| | | <div v-for="(y,ind) in x" :key="ind"> |
| | | <div v-if="map[index][ind].value < 0" class="pointBox" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click.left="switchBox(index,ind)"></div> |
| | | <div v-else-if="map[index][ind].value == 0" class="pointBox pointBoxBlue" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div> |
| | | <div v-else-if="map[index][ind].value == 3" class="pointBox pointBoxGreen" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div> |
| | | <div v-else-if="map[index][ind].value == 4" class="pointBox pointBoxStation" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div> |
| | | <div v-else-if="map[index][ind].value == 5" class="pointBox chargeStation" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div> |
| | | <div v-else-if="map[index][ind].value == 9" class="pointBox pointBoxRed" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div> |
| | | <div v-else-if="map[index][ind].value == 10" class="pointBox pointBoxStart" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div> |
| | | <div v-else-if="map[index][ind].value == 11" class="pointBox pointBoxEnd" |
| | | @contextmenu.prevent="rightEvent(index,ind,$event)" @click="switchBox(index,ind)"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div> |
| | | {{ mapData }} |
| | | </div> |
| | | |
| | | <div v-if="rightBox" @click.stop="" :style="{left: rightBoxLeft,top: rightBoxTop}" |
| | | style="position: absolute;height: 270px;width: 200px;background-color: antiquewhite;padding: 10px;"> |
| | | <div> |
| | | value: |
| | | <div style="display: flex;justify-content: space-between;"> |
| | | <div @click="map[mapI][mapJ].value = -1" class="pointBox"></div> |
| | | <div @click="map[mapI][mapJ].value = 0" class="pointBox pointBoxBlue"></div> |
| | | <div @click="map[mapI][mapJ].value = 3" class="pointBox pointBoxGreen"></div> |
| | | <div @click="map[mapI][mapJ].value = 4" class="pointBox pointBoxStation"></div> |
| | | <div @click="map[mapI][mapJ].value = 5" class="pointBox chargeStation"></div> |
| | | <div @click="map[mapI][mapJ].value = 10" class="pointBox pointBoxStart"></div> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | data: <input type="text" v-model="map[mapI][mapJ].data"> |
| | | </div> |
| | | <div> |
| | | top: <input type="text" v-model="map[mapI][mapJ].top"> |
| | | </div> |
| | | <div> |
| | | bottom: <input type="text" v-model="map[mapI][mapJ].bottom"> |
| | | </div> |
| | | <div> |
| | | left: <input type="text" v-model="map[mapI][mapJ].left"> |
| | | </div> |
| | | <div> |
| | | right: <input type="text" v-model="map[mapI][mapJ].right"> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <script> |
| | | var app = new Vue({ |
| | | el: '#app', |
| | | data: { |
| | | map: [], |
| | | col: 25, |
| | | row: 15, |
| | | mapData: "", |
| | | importData: null, |
| | | startPosition: "0500501", |
| | | endPosition: "0802501", |
| | | mapI: 0, |
| | | mapJ: 0, |
| | | rightBox: false, |
| | | rightBoxTop: "0px", |
| | | rightBoxLeft: "0px" |
| | | }, |
| | | watch: { |
| | | map: { |
| | | deep: true, |
| | | handler(val) { |
| | | this.printData() |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | generate() { |
| | | let tmp = [] |
| | | //实际区域增加两行两列禁区 |
| | | let rowR = Number(this.row) + Number(2) |
| | | let colR = Number(this.col) + Number(2) |
| | | console.log(rowR, colR) |
| | | for (var i = 0; i < rowR; i++) { |
| | | let x = [] |
| | | for (var j = 0; j < colR; j++) { |
| | | if (i == 0 || i == rowR - 1) { |
| | | // x.push(-1) |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | if (j == 0) { |
| | | // x.push(-1) |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | if (j == colR - 1) { |
| | | let calc = (this.row - i + 1) * -1 |
| | | // x.push(calc == 0 ? -1 : calc) |
| | | x.push({ |
| | | value: calc == 0 ? -1 : calc, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | if(j == 2 || j==5 || j==8 || j==11 || j==13 || j==16 || j== 18 || j== 21 || j== 24 || j== 27 || j== 29 || j== 32 || |
| | | j== 35 || j== 38 || j== 41 || j== 44 || j== 47 || j== 50){ |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | if(i==25 || i==58){ |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | if((j == 1 || j==3) && i <= 24){ |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | if(j == 4 && i <= 10){ |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | if((j==40 || j== 42) && i <= 37){ |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | if( j >= 43 && i <= 58){ |
| | | x.push({ |
| | | value: -1, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | continue |
| | | } |
| | | |
| | | |
| | | |
| | | // x.push(0) |
| | | x.push({ |
| | | value: 0, |
| | | data: '', |
| | | top: 1000, |
| | | bottom: 1000, |
| | | left: 1000, |
| | | right: 1000, |
| | | x: i, |
| | | y: j |
| | | }) |
| | | } |
| | | tmp.push(x) |
| | | } |
| | | |
| | | this.map = tmp |
| | | this.printData() |
| | | }, |
| | | switchBox(x, y) { |
| | | let tmp = this.map |
| | | console.log(x, y, tmp[x][y]) |
| | | switch (tmp[x][y].value) { |
| | | case -1: |
| | | tmp[x][y].value = 0 |
| | | break; |
| | | case 0: |
| | | tmp[x][y].value = 3 |
| | | break; |
| | | case 3: |
| | | tmp[x][y].value = 4 |
| | | break; |
| | | case 4: |
| | | tmp[x][y].value = 5 |
| | | break; |
| | | case 5: |
| | | tmp[x][y].value = -1 |
| | | break; |
| | | default: |
| | | tmp[x][y].value = -1 |
| | | } |
| | | this.map = tmp |
| | | this.$forceUpdate() |
| | | this.printData() |
| | | this.rightBox = false |
| | | }, |
| | | printData() { |
| | | // let tmp = this.map |
| | | // let data = [] |
| | | // tmp.forEach((item,index) => { |
| | | // let data2 = [] |
| | | // item.forEach((val,idx) => { |
| | | // let valJson = { |
| | | // value: val, |
| | | // data: '', |
| | | // top: '', |
| | | // bottom: '', |
| | | // left: '', |
| | | // right: '' |
| | | // } |
| | | // data2.push(valJson) |
| | | // }) |
| | | // data.push(data2) |
| | | // }) |
| | | |
| | | // this.mapData = JSON.stringify(data) |
| | | this.mapData = JSON.stringify(this.map) |
| | | }, |
| | | importDataClick() { |
| | | let tmp = JSON.parse(this.importData); |
| | | let data = [] |
| | | tmp.forEach((item, index) => { |
| | | let data2 = [] |
| | | item.forEach((val, idx) => { |
| | | let json = { |
| | | value: val.value, |
| | | data: val.data, |
| | | top: val.top == null ? 1000: val.top, |
| | | bottom: val.bottom == null ? 1000:val.bottom, |
| | | left: val.left == null ? 1000:val.left, |
| | | right: val.right == null ? 1000:val.right |
| | | } |
| | | data2.push(json) |
| | | }) |
| | | data.push(data2) |
| | | }) |
| | | this.map = data |
| | | this.printData() |
| | | }, |
| | | calcPath() { |
| | | let that = this |
| | | let param = new URLSearchParams() |
| | | param.append('startPosition', this.startPosition) |
| | | param.append('endPosition', this.endPosition) |
| | | param.append('map', JSON.stringify(this.map)) |
| | | this.$axios({ |
| | | method: "post", |
| | | url: "http://127.0.0.1:8081/calc", |
| | | data: param |
| | | }).then((res) => { |
| | | let data = res.data |
| | | let tmp = that.map |
| | | console.log(data) |
| | | data.forEach((item, index) => { |
| | | let x = item.x |
| | | let y = item.y |
| | | tmp[x][y] = 9 |
| | | |
| | | if (index == 0) { |
| | | tmp[x][y] = 10 |
| | | } |
| | | |
| | | if (index == data.length - 1) { |
| | | tmp[x][y] = 11 |
| | | } |
| | | that.map = tmp |
| | | }) |
| | | this.$forceUpdate() |
| | | this.printData() |
| | | }).catch((error) => { |
| | | console.log(error) |
| | | }) |
| | | }, |
| | | rightEvent(x, y, e) { |
| | | this.rightBox = true |
| | | this.mapI = x |
| | | this.mapJ = y |
| | | this.rightBoxTop = e.y + "px" |
| | | this.rightBoxLeft = e.x + "px" |
| | | }, |
| | | bgClick() { |
| | | this.rightBox = false |
| | | } |
| | | } |
| | | }) |
| | | </script> |
| | | </body> |
| | | </html> |
| | | <!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=favicon.ico><title>default</title><link href=css/app.e02887d3.css rel=preload as=style><link href=js/app.273a0dab.js rel=preload as=script><link href=js/chunk-vendors.9ed0ec45.js rel=preload as=script><link href=css/app.e02887d3.css rel=stylesheet></head><body><noscript><strong>We're sorry but default doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.9ed0ec45.js></script><script src=js/app.273a0dab.js></script></body></html> |