自动化立体仓库 - WMS系统
#
LSH
2023-12-15 b9eee33b8d3f3adf57fd40a9ff225c6717d20158
src/main/webapp/views/home/map.html
@@ -16,7 +16,7 @@
    <style>
        .pointContainer {
            display: flex;
            justify-content: center;
            justify-content: flex-start;
            margin-top: 1px;
        }
@@ -33,10 +33,10 @@
        /*    color: #fff;*/
        /*}*/
        .pointBox {
        .pointBox2 {
            background: #fffef9;
            width: 40px;
            height: 40px;
            width: 35px;
            height: 35px;
            margin-right: 1px;
            display: flex;
            justify-content: center;
@@ -45,7 +45,23 @@
            user-select: none;
            color: #fff;
            /*transform: perspective(130px) rotateX(30deg) translateZ(-20px);*/
            box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);
            /*box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);*/
            /*border-radius: 50% 20% / 10% 40%;*/
        }
        .pointBox {
            background: #fffef9;
            width: 300px;
            height: 35px;
            margin-right: 1px;
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 14px;
            user-select: none;
            color: #fff;
            /*transform: perspective(130px) rotateX(30deg) translateZ(-20px);*/
            /*box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.5);*/
            /*border-radius: 50% 20% / 10% 40%;*/
        }
@@ -102,7 +118,7 @@
        }
        .pointBoxDefault {
            background: #f9f4dc;
            background: #ffffff;
        }
        .pointBoxSelected {
@@ -217,7 +233,7 @@
        /*滑动卡片start*/
        .hoverCard {
            width: 160px;
            width: 152px;
            height: 224px;
            border-radius: 20px;
            background: #f5f5f5;
@@ -424,13 +440,13 @@
    </style>
</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>
<div id="app" style="display: flex;justify-content: space-around;margin-top: 50px;flex-wrap:nowrap; " @click="bgClick()">
    <div style="flex: 3;overflow: auto; " :style="{scale:showScale/100.0,marginTop:(showScale-100)*5 + 'px'}">
        <div style="width: 100%;overflow: auto;">
            <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-if="idx != 0 && (idx != map[index].length-1)">
                        <div v-if="map[index][idx].value < 0" class="pointBox"></div>
                        <div v-if="map[index][idx].value < 0" style="visibility: hidden;" class="pointBox"></div>
                        <!--库位-->
                        <div v-else-if="map[index][idx].value  == 0" @contextmenu.prevent="rightEvent(index,idx,$event)">
@@ -440,6 +456,7 @@
                            <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="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxInYy">{{ map[index][idx].locSts }}</div>
                            <div v-else-if="map[index][idx].locSts == 'X'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxEnd">{{ map[index][idx].locSts }}</div>
                            <div v-else class="pointBox pointBoxDefault" :class="{'pointBoxSearch':map[index][idx].searchStatus}">{{ map[index][idx].locSts }}</div>
                        </div>
@@ -465,14 +482,14 @@
                    </div>
                </div>
                <div style="width: 40px;display: flex;justify-content: center;align-items: center;">
                <div style="width: 40px; display: flex;justify-content: flex-end;align-items: center;">
                    {{ getRealRowByX(index) }}
                </div>
            </div>
        </div>
    </div>
    <div style="padding: 20px;flex: 5;margin-top: -70px;">
    <div style="padding: 20px;flex: 1;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%;">
@@ -481,7 +498,7 @@
                        <div style="width: 100%;margin-bottom: 20px;">
                            <div style="display: flex;justify-content: space-between;">
                                <div><input v-model="searchMatnr" placeholder="物料号" type="text" class="search-input"></div>
                                <div><input v-model="searchOrderNo" placeholder="订单号" type="text" class="search-input"></div>
                                <div style="margin-left: 20px"><input v-model="searchOrderNo" placeholder="订单号" type="text" class="search-input"></div>
                            </div>
                            <div style="display: flex;justify-content: space-between;margin-top: 10px;">
                                <div><input style="width: 110px;" v-model="searchMaktx" placeholder="物料名称" type="text" class="search-input"></div>
@@ -520,44 +537,11 @@
                <button class="card-button">功能区</button>
            </div>
            <div class="hoverCard">
                <div class="card-details">
                    <div class="text-body" style="display: flex;justify-content: space-around;flex-wrap: wrap;">
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">空库位</div><div class="pointBox pointBoxBlue">O</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">在库</div><div class="pointBox pointBoxRed">F</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">空板</div><div class="pointBox pointBoxEmpty">D</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">出库中</div><div class="pointBox pointBoxOut">P</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">出库预约</div><div class="pointBox pointBoxOutYy">R</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">入库预约</div><div class="pointBox pointBoxInYy">S</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">搜索结果</div><div class="pointBox pointBoxSearch"></div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">选择结果</div><div class="pointBox pointBoxSelected"></div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;text-align: center">其他</div><div class="pointBox pointBoxDefault"></div>
                        </div>
                    </div>
                </div>
                <button class="card-button">库位状态</button>
            </div>
            <div class="hoverCard">
                <div class="card-details">
                    <p class="text-title" style="text-align: center;">楼层 {{currentLev}}F</p>
                    <p class="text-title" style="text-align: center;">库位层 {{currentLev}}</p>
                    <div class="text-body" style="display: flex;">
                        <div class="floorSelect">
                            <label for="01">1F</label>
@@ -566,40 +550,70 @@
                            <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">
                            <label for="05">5F</label>
                            <input id="05" type="radio" v-model="currentLev" name="r" value="5">
                            <label for="06">6F</label>
                            <input id="06" type="radio" v-model="currentLev" name="r" value="6">
                            <label for="07">7F</label>
                            <input id="07" type="radio" v-model="currentLev" name="r" value="7">
                        </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;">库区 {{areaName}}</p>-->
<!--                    <div class="text-body" style="display: flex;">-->
<!--                        <div class="floorSelect">-->
<!--                            <label for="area01">A区</label>-->
<!--                            <input id="area01" type="radio" name="r" v-model="area" value="1" checked="">-->
<!--                            <label for="area03">B区</label>-->
<!--                            <input id="area03" type="radio" v-model="area" name="r" value="3">-->
<!--                            <label for="area04">C区</label>-->
<!--                            <input id="area04" type="radio" v-model="area" name="r" value="4">-->
<!--                            <label for="area05">D区</label>-->
<!--                            <input id="area05" type="radio" v-model="area" name="r" value="5">-->
<!--                        </div>-->
<!--                    </div>-->
<!--                </div>-->
<!--                <button class="card-button">库区 {{areaName}}</button>-->
<!--            </div>-->
            <div class="hoverCard">
                <div class="card-details">
                    <p class="text-title" style="text-align: center;">库区 {{area}}</p>
                    <div class="text-body" style="display: flex;">
                        <div class="floorSelect">
                            <label for="area01">立库</label>
                            <input id="area01" type="radio" name="r" v-model="area" value="1" checked="">
                            <label for="area02">平库A区</label>
                            <input id="area02" type="radio" v-model="area" name="r" value="2">
                            <label for="area03">平库B区</label>
                            <input id="area03" type="radio" v-model="area" name="r" value="3">
                            <label for="area04">平库C区</label>
                            <input id="area04" type="radio" v-model="area" name="r" value="4">
                            <label for="area05">平库D区</label>
                            <input id="area05" type="radio" v-model="area" name="r" value="5">
                    <div class="text-body" style="display: flex;justify-content: space-around;flex-wrap: wrap;">
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">空库位</div><div class="pointBox2 pointBoxBlue">O</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">在库</div><div class="pointBox2 pointBoxRed">F</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">空板</div><div class="pointBox2 pointBoxEmpty">D</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">出库中</div><div class="pointBox2 pointBoxOut">P</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">出库预约</div><div class="pointBox2 pointBoxOutYy">R</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">入库预约</div><div class="pointBox2 pointBoxInYy">S</div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">搜索结果</div><div class="pointBox2 pointBoxSearch"></div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;">选择结果</div><div class="pointBox2 pointBoxSelected"></div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;text-align: center">其他</div><div class="pointBox2 pointBoxDefault"></div>
                        </div>
                        <div style="flex: 1;margin-top: 10px;">
                            <div style="font-size: 10px;text-align: center">冻结</div><div class="pointBox2 pointBoxEnd"></div>
                        </div>
                    </div>
                </div>
                <button class="card-button">库区 {{area}}</button>
                <button class="card-button">库位状态</button>
            </div>
        </div>
@@ -629,11 +643,11 @@
                    <div style="margin-top: 5px;">
                        <button class="layui-btn layui-btn-sm" @click="openLocDetail(map[mapI][mapJ].locNo)">库位详情</button>
                    </div>
                    <div style="margin-top: 5px;">
                        <button v-if="map[mapI][mapJ].locSts == 'F'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">库位移转</button>
                        <button v-else-if="map[mapI][mapJ].locSts == 'D'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">库位移转</button>
                        <button v-else class="layui-btn layui-btn-sm layui-btn-disabled" disabled>库位移转</button>
                    </div>
<!--                    <div style="margin-top: 5px;">-->
<!--                        <button v-if="map[mapI][mapJ].locSts == 'F'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">库位移转</button>-->
<!--                        <button v-else-if="map[mapI][mapJ].locSts == 'D'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">库位移转</button>-->
<!--                        <button v-else class="layui-btn layui-btn-sm layui-btn-disabled" disabled>库位移转</button>-->
<!--                    </div>-->
                </div>
            </div>
        </div>
@@ -688,6 +702,7 @@
            pointContainerWidth: 0,
            currentLev: 1,
            area:1,
            areaName:"立库",
            crnList: null,
            crnBox: false,
            crnBoxTop: "0px",
@@ -701,7 +716,7 @@
            searchLocNo: "",
            outSite: null,
            outSites: null,
            showScale: 75, //控制地图显示大小比例
            showScale: 85, //控制地图显示大小比例
            showScaleMarks: {//比例滑动条显示标记
                0: "0%",
                50: {
@@ -713,6 +728,7 @@
                100: "100%",
            },
            locStsList: [],//库位状态列表
            y: 1
        },
        created(){
            this.init()
@@ -747,6 +763,23 @@
            area: {
                deep: true,
                handler(val) {
                    if (val == 1){
                        this.areaName = "A区"
                    }else if (val == 3){
                        this.areaName = "B区"
                    }
                    else if (val == 4){
                        this.areaName = "C区"
                    }
                    else if (val == 5){
                        this.areaName = "D区"
                    }
                    else if (val == 6){
                        this.areaName = "E区"
                    }
                    this.init()
                    if (this.searchMatnr != ""
                        || this.searchOrderNo != ""
@@ -799,7 +832,7 @@
                        val.searchStatus = false//搜索标记
                        data2.push(val)
                    })
                    this.pointContainerWidth = item.length * (40+1)
                    this.pointContainerWidth = item.length * (35+1)
                    data.push(data2)
                })
                this.map = data
@@ -809,11 +842,26 @@
                //获取真实库位行号,通过坐标x
                let data = this.map
                let rowData = data[x]
                for (var i = 1; i < rowData.length; i++) {
                    console.log(rowData[i],rowData[i].locNo,rowData[i].locNo != undefined)
                    if (rowData[i].locNo != undefined) {
                        let locNo = rowData[i].locNo;
                        return "#" + parseInt(locNo.substr(0, 2));
                    if (this.area == 1){
                        if (rowData[i].locNo != undefined) {
                            let locNo = rowData[i].locNo;
                            return "#" + parseInt(locNo.substr(2, 2));
                        }
                    }else if (this.area == 6){
                        if (rowData[i].locNo != undefined) {
                            let locNo = rowData[i].locNo;
                            return "#" + parseInt(locNo.substr(7, 2));
                        }
                    }
                    else {
                        if (rowData[i].locNo != undefined) {
                            let locNo = rowData[i].locNo;
                            return "#" + parseInt(locNo.substr(7, 2));
                        }
                    }
                }