|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /*滑动卡片start*/ | 
|---|
|  |  |  | .hoverCard { | 
|---|
|  |  |  | width: 160px; | 
|---|
|  |  |  | width: 150px; | 
|---|
|  |  |  | height: 224px; | 
|---|
|  |  |  | border-radius: 20px; | 
|---|
|  |  |  | background: #f5f5f5; | 
|---|
|  |  |  | 
|---|
|  |  |  | </head> | 
|---|
|  |  |  | <body> | 
|---|
|  |  |  | <div id="app" style="display: flex;justify-content: space-around;margin-top: 50px;flex-wrap: wrap;" @click="bgClick()"> | 
|---|
|  |  |  | <div style="flex: 12;" :style="{scale:showScale/100.0,marginTop:(showScale-100)*5 + 'px'}"> | 
|---|
|  |  |  | <div style="flex: 12;display: flex;" :style="{scale:showScale/100.0,marginTop:(showScale-100)*5 + 'px'}"> | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <div class="pointContainer" v-for="(x,index) in map" :key="index"> | 
|---|
|  |  |  | <div v-if="index != 0 && (index != map.length-1)" v-for="(y,idx) in x" :key="idx"> | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!--库位--> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].value  == 0" @contextmenu.prevent="rightEvent(index,idx,$event)"> | 
|---|
|  |  |  | <div v-if="map[index][idx].locSts == 'O'" class="pointBox pointBoxBlue">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'F'" @click.left.stop="selectLoc(index,idx)" :class="{'pointBoxSelected':map[index][idx].locOutSelected,'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxRed">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'D'" class="pointBox pointBoxEmpty">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'P'" class="pointBox pointBoxOut">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-if="map[index][idx].locSts == 'O'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxBlue">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'F'" @click.left="selectLoc(index,idx)" :class="{'pointBoxSelected':map[index][idx].locOutSelected,'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxRed">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'D'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxEmpty">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'P'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxOut">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'R'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxOutYy">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else-if="map[index][idx].locSts == 'S'" class="pointBox pointBoxInYy">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else class="pointBox pointBoxDefault">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | <div v-else class="pointBox pointBoxDefault" :class="{'pointBoxSearch':map[index][idx].searchStatus}">{{ map[index][idx].locSts }}</div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <!--堆垛机--> | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 1" :style="{background: currentLev==1?'red':''}">1F</button></div> | 
|---|
|  |  |  | <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 2" :style="{background: currentLev==2?'red':''}">2F</button></div> | 
|---|
|  |  |  | <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 3" :style="{background: currentLev==3?'red':''}">3F</button></div> | 
|---|
|  |  |  | <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 4" :style="{background: currentLev==4?'red':''}">4F</button></div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div style="padding: 20px;flex: 5;margin-top: -70px;"> | 
|---|
|  |  |  | <div style="padding: 40px 20px 10px 10px;flex: 5;margin-top: -70px;"> | 
|---|
|  |  |  | <el-slider v-model="showScale" :marks="showScaleMarks"></el-slider> | 
|---|
|  |  |  | <div style="display: flex;justify-content: space-between;flex-wrap: wrap;"> | 
|---|
|  |  |  | <div class="hoverCard" style="width: 100%;"> | 
|---|
|  |  |  | 
|---|
|  |  |  | <!--                        <div>--> | 
|---|
|  |  |  | <!--                            <button @click="locToLoc2" class="layui-btn layui-btn-sm">侧边移库</button>--> | 
|---|
|  |  |  | <!--                        </div>--> | 
|---|
|  |  |  | <div v-if="!locOutStatus"> | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <button @click="init" class="layui-btn layui-btn-sm">刷新</button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div style="margin-left: 10px;"> | 
|---|
|  |  |  | <button @click="resetSearch" class="layui-btn layui-btn-sm">重置</button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div v-if="!locOutStatus" style="margin-left: 10px;"> | 
|---|
|  |  |  | <button @click="locOutStatus = true" class="layui-btn layui-btn-sm">出库选择</button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div v-else style="margin-left: 10px;border: 1px red solid;display: flex;"> | 
|---|
|  |  |  | 
|---|
|  |  |  | <button class="card-button">库位状态</button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <div class="hoverCard"> | 
|---|
|  |  |  | <div class="card-details"> | 
|---|
|  |  |  | <p class="text-title" style="text-align: center;">楼层 {{currentLev}}F</p> | 
|---|
|  |  |  | <div class="text-body" style="display: flex;"> | 
|---|
|  |  |  | <div class="floorSelect"> | 
|---|
|  |  |  | <label for="01">1F</label> | 
|---|
|  |  |  | <input id="01" type="radio" name="r" v-model="currentLev" value="1" checked=""> | 
|---|
|  |  |  | <label for="02">2F</label> | 
|---|
|  |  |  | <input id="02" type="radio" v-model="currentLev" name="r" value="2"> | 
|---|
|  |  |  | <label for="03">3F</label> | 
|---|
|  |  |  | <input id="03" type="radio" v-model="currentLev" name="r" value="3"> | 
|---|
|  |  |  | <label for="04">4F</label> | 
|---|
|  |  |  | <input id="04" type="radio" v-model="currentLev" name="r" value="4"> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <button class="card-button">楼层 {{currentLev}}F</button> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <!--            <div class="hoverCard">--> | 
|---|
|  |  |  | <!--                <div class="card-details">--> | 
|---|
|  |  |  | <!--                    <p class="text-title" style="text-align: center;">楼层 {{currentLev}}F</p>--> | 
|---|
|  |  |  | <!--                    <div class="text-body" style="display: flex;">--> | 
|---|
|  |  |  | <!--                        <div class="floorSelect">--> | 
|---|
|  |  |  | <!--                            <label for="01">1F</label>--> | 
|---|
|  |  |  | <!--                            <input id="01" type="radio" name="r" v-model="currentLev" value="1" checked="">--> | 
|---|
|  |  |  | <!--                            <label for="02">2F</label>--> | 
|---|
|  |  |  | <!--                            <input id="02" type="radio" v-model="currentLev" name="r" value="2">--> | 
|---|
|  |  |  | <!--                            <label for="03">3F</label>--> | 
|---|
|  |  |  | <!--                            <input id="03" type="radio" v-model="currentLev" name="r" value="3">--> | 
|---|
|  |  |  | <!--                            <label for="04">4F</label>--> | 
|---|
|  |  |  | <!--                            <input id="04" type="radio" v-model="currentLev" name="r" value="4">--> | 
|---|
|  |  |  | <!--                        </div>--> | 
|---|
|  |  |  | <!--                    </div>--> | 
|---|
|  |  |  | <!--                </div>--> | 
|---|
|  |  |  | <!--                <button class="card-button">楼层 {{currentLev}}F</button>--> | 
|---|
|  |  |  | <!--            </div>--> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | 
|---|
|  |  |  | 库位号: {{ map[mapI][mapJ].locNo }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div style="margin-top: 10px;"> | 
|---|
|  |  |  | 库位状态: {{ map[mapI][mapJ].locSts$ }} | 
|---|
|  |  |  | 库位状态: {{ getLocSts(map[mapI][mapJ].locSts) }} | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <div style="margin-top: 10px;display: flex;justify-content: space-between;flex-wrap: wrap;"> | 
|---|
|  |  |  | <div style="margin-top: 5px;"> | 
|---|
|  |  |  | 
|---|
|  |  |  | searchLocNo: "", | 
|---|
|  |  |  | outSite: null, | 
|---|
|  |  |  | outSites: null, | 
|---|
|  |  |  | showScale: 75, //控制地图显示大小比例 | 
|---|
|  |  |  | showScale: 77, //控制地图显示大小比例 | 
|---|
|  |  |  | showScaleMarks: {//比例滑动条显示标记 | 
|---|
|  |  |  | 0: "0%", | 
|---|
|  |  |  | 50: { | 
|---|
|  |  |  | 
|---|
|  |  |  | label: "50%" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | 100: "100%", | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | locStsList: [],//库位状态列表 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | created(){ | 
|---|
|  |  |  | this.init() | 
|---|
|  |  |  | 
|---|
|  |  |  | deep: true, | 
|---|
|  |  |  | handler(val) { | 
|---|
|  |  |  | this.init() | 
|---|
|  |  |  | if (this.searchMatnr != "" | 
|---|
|  |  |  | || this.searchOrderNo != "" | 
|---|
|  |  |  | || this.searchSpecs != "" | 
|---|
|  |  |  | || this.searchMaktx != "" | 
|---|
|  |  |  | || this.searchLocNo != "") { | 
|---|
|  |  |  | this.searchLoc() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.locOutStatus = false | 
|---|
|  |  |  | this.locOutLocNo = [] | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.getLocStsList();//获取库位状态列表 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | resetSearch(){ | 
|---|
|  |  |  | this.searchMatnr = "" | 
|---|
|  |  |  | this.searchOrderNo = "" | 
|---|
|  |  |  | this.searchSpecs = "" | 
|---|
|  |  |  | this.searchMaktx = "" | 
|---|
|  |  |  | this.searchLocNo = "" | 
|---|
|  |  |  | this.searchLoc() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | printData() { | 
|---|
|  |  |  | this.mapData = JSON.stringify(this.map) | 
|---|
|  |  |  | 
|---|
|  |  |  | success: function(layero, index){ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getLocStsList() { | 
|---|
|  |  |  | //获取库位状态列表 | 
|---|
|  |  |  | let that = this | 
|---|
|  |  |  | $.ajax({ | 
|---|
|  |  |  | url: baseUrl + "/basLocSts/list/auth", | 
|---|
|  |  |  | headers: {'token': localStorage.getItem('token')}, | 
|---|
|  |  |  | method: "get", | 
|---|
|  |  |  | success: (res) => { | 
|---|
|  |  |  | that.locStsList = res.data.records | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | getLocSts(locSts) { | 
|---|
|  |  |  | //获取库位状态 | 
|---|
|  |  |  | let locStsList = this.locStsList | 
|---|
|  |  |  | let locDesc = "" | 
|---|
|  |  |  | locStsList.forEach((item,index) => { | 
|---|
|  |  |  | if (item.locSts == locSts) { | 
|---|
|  |  |  | locDesc = item.locDesc | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | return locDesc | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | locMove(locNo) { | 
|---|
|  |  |  | //库位移转 | 
|---|
|  |  |  | 
|---|
|  |  |  | async: false, | 
|---|
|  |  |  | success: function (res) { | 
|---|
|  |  |  | if (res.code === 200) { | 
|---|
|  |  |  | locDetls = res.data | 
|---|
|  |  |  | // locDetls = res.data | 
|---|
|  |  |  | let data = res.data | 
|---|
|  |  |  | //合并同类型 | 
|---|
|  |  |  | let tmpLocDetls = [] | 
|---|
|  |  |  | data.forEach((item,index) => { | 
|---|
|  |  |  | let keyIdx = -1; | 
|---|
|  |  |  | tmpLocDetls.forEach((val,idx) => { | 
|---|
|  |  |  | if (val.matnr == item.matnr) { | 
|---|
|  |  |  | keyIdx = idx | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (keyIdx == -1) { | 
|---|
|  |  |  | tmpLocDetls.push(item); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | tmpLocDetls[keyIdx].anfme += item.anfme | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | locDetls = tmpLocDetls | 
|---|
|  |  |  | } else if (res.code === 403) { | 
|---|
|  |  |  | top.location.href = baseUrl + "/"; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | let alertText = "即将出库" + locDetls.length + "个物料<br/>" | 
|---|
|  |  |  | locDetls.forEach((item,index) => { | 
|---|
|  |  |  | item.count = item.anfme | 
|---|
|  |  |  | alertText += "物料号:" + item.matnr + "," + item.anfme + "个<br/>" | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | $.ajax({ | 
|---|
|  |  |  | url: baseUrl + "/plate/out/start", | 
|---|
|  |  |  | headers: {'token': localStorage.getItem('token')}, | 
|---|
|  |  |  | data: JSON.stringify({ | 
|---|
|  |  |  | outSite: this.outSite, | 
|---|
|  |  |  | locDetls: locDetls | 
|---|
|  |  |  | }), | 
|---|
|  |  |  | contentType:'application/json;charset=UTF-8', | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | success: function (res) { | 
|---|
|  |  |  | if (res.code === 200){ | 
|---|
|  |  |  | $layui.layer.msg(res.msg); | 
|---|
|  |  |  | that.init() | 
|---|
|  |  |  | } else if (res.code === 403){ | 
|---|
|  |  |  | top.location.href = baseUrl+"/"; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | $layui.layer.msg(res.msg) | 
|---|
|  |  |  | layer.confirm(alertText, {title: '出库作业', shadeClose: true, area: ['auto']}, function(){ | 
|---|
|  |  |  | $.ajax({ | 
|---|
|  |  |  | url: baseUrl + "/plate/out/start", | 
|---|
|  |  |  | headers: {'token': localStorage.getItem('token')}, | 
|---|
|  |  |  | data: JSON.stringify({ | 
|---|
|  |  |  | outSite: that.outSite, | 
|---|
|  |  |  | locDetls: locDetls | 
|---|
|  |  |  | }), | 
|---|
|  |  |  | contentType:'application/json;charset=UTF-8', | 
|---|
|  |  |  | method: 'POST', | 
|---|
|  |  |  | success: function (res) { | 
|---|
|  |  |  | if (res.code === 200){ | 
|---|
|  |  |  | $layui.layer.msg(res.msg); | 
|---|
|  |  |  | that.init() | 
|---|
|  |  |  | } else if (res.code === 403){ | 
|---|
|  |  |  | top.location.href = baseUrl+"/"; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | $layui.layer.msg(res.msg) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | layer.closeAll(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | searchDataIndex(data,dist) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | data.forEach((item,index) => { | 
|---|
|  |  |  | let locNo = item.locNo | 
|---|
|  |  |  | let y = parseInt(locNo.substr(2,3)) | 
|---|
|  |  |  | let x = parseInt(locNo.substr(0,2)) | 
|---|
|  |  |  | if (x >= 4 && x <= 11) { | 
|---|
|  |  |  | x++; | 
|---|
|  |  |  | }else if (x >= 12 && x <= 18) { | 
|---|
|  |  |  | x += 2; | 
|---|
|  |  |  | } else if (x >= 19 && x <= 21) { | 
|---|
|  |  |  | x += 3; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | tmp[x][y].searchStatus = true//搜索标记 | 
|---|
|  |  |  | data.forEach((item,i) => { | 
|---|
|  |  |  | let locNo = item.locNo | 
|---|
|  |  |  | tmp.forEach((item,index) => { | 
|---|
|  |  |  | item.forEach((val,idx) => { | 
|---|
|  |  |  | if (tmp[index][idx].locNo == locNo) { | 
|---|
|  |  |  | tmp[index][idx].searchStatus = true//搜索标记 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | that.map = tmp | 
|---|
|  |  |  | $layui.layer.msg("搜索成功"); | 
|---|