自动化立体仓库 - WMS系统
#
zyx
2023-12-28 f3914234db3bf68dad372c4dfb9a1111a0c09e32
#
10个文件已添加
3个文件已修改
1204 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/PlaController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/Pla.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/PlaMapper.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/PlaService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/PlaServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pla/plaDetl.js 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pla/productionInfo.js 196 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pla/qualityInfo.js 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/pla/waitingPakin.js 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla/plaDetl.html 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla/productionInfo.html 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla/qualityInfo.html 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/pla/waitingPakin.html 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/PlaController.java
New file
@@ -0,0 +1,73 @@
package com.zy.asrs.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.annotations.ManagerAuth;
import com.core.common.DateUtils;
import com.core.common.R;
import com.zy.asrs.entity.Pla;
import com.zy.asrs.service.PlaService;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
public class PlaController extends BaseController {
    @Autowired
    private PlaService plaService;
    @RequestMapping(value = "/pla/list/auth")
    @ManagerAuth
    public R list(@RequestParam(defaultValue = "1")Integer curr,
                  @RequestParam(defaultValue = "10")Integer limit,
                  @RequestParam(required = false)String condition,
                  @RequestParam Map<String, Object> param){
        excludeTrash(param);
        EntityWrapper<Pla> wrapper = new EntityWrapper<>();
        convert(param, wrapper);
        allLike(Pla.class, param.keySet(), wrapper, condition);
        return R.ok(plaService.selectPage(new Page<>(curr, limit), wrapper));
    }
    @RequestMapping(value = "/pla/add/auth")
    @ManagerAuth
    public R add(@RequestBody List<Pla> plas) {
        System.out.println(plas.toString());
        plas.forEach(pla -> {
            plaService.insert(pla);
        });
        return R.ok();
    }
    @RequestMapping(value = "/pla/update/auth")
    @ManagerAuth
    public R update(@RequestBody List<Pla> plas) {
        System.out.println(plas.toString());
        plas.forEach(pla -> {
            plaService.updateById(pla);
        });
        return R.ok();
    }
    private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){
        for (Map.Entry<String, Object> entry : map.entrySet()){
            String val = String.valueOf(entry.getValue());
            if (val.contains(RANGE_TIME_LINK)){
                String[] dates = val.split(RANGE_TIME_LINK);
                wrapper.ge(entry.getKey(), DateUtils.convert(dates[0]));
                wrapper.le(entry.getKey(), DateUtils.convert(dates[1]));
            } else {
                wrapper.like(entry.getKey(), val);
            }
        }
    }
}
src/main/java/com/zy/asrs/entity/Pla.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.enums.IdType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@@ -16,7 +17,8 @@
    private Long id;
    //入库时间
    private Date io_time;
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private String pakinTime;
    //批号
    private String batch;
@@ -95,4 +97,15 @@
    //状态
    private String status;
    //步骤
    private int step;
    private Date createTime;
    private Date modifyTime;
    private String createUser;
    private String modifyUser;
}
src/main/java/com/zy/asrs/mapper/PlaMapper.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.zy.asrs.entity.Pla;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Mapper
@Repository
public interface PlaMapper extends BaseMapper<Pla> {
}
src/main/java/com/zy/asrs/service/PlaService.java
New file
@@ -0,0 +1,8 @@
package com.zy.asrs.service;
import com.baomidou.mybatisplus.service.IService;
import com.zy.asrs.entity.Pla;
public interface PlaService extends IService<Pla> {
}
src/main/java/com/zy/asrs/service/impl/PlaServiceImpl.java
New file
@@ -0,0 +1,12 @@
package com.zy.asrs.service.impl;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.zy.asrs.entity.Pla;
import com.zy.asrs.mapper.PlaMapper;
import com.zy.asrs.service.PlaService;
import org.springframework.stereotype.Service;
@Service("plaService")
public class PlaServiceImpl extends ServiceImpl<PlaMapper, Pla> implements PlaService {
}
src/main/webapp/static/js/pla/plaDetl.js
New file
@@ -0,0 +1,185 @@
var initCountVal = 0;
var initAnfmeVal = "-";
var matCodeData = [];
var currLocNo;
var matCodeLayerIdx;
var data = [];
var checkStatus = [];
function getCol() {
    var cols = [
        {field: 'id', title: 'id', align: 'center',hide:true}
        ,{type: 'checkbox'}
        ,{field: 'pakinTime', title: '入库时间', align: 'center'}
        ,{field: 'batch', align: 'center',title: '批号'}
        ,{field: 'packageNo', align: 'center',title: '包号'}
        ,{field: 'brand', align: 'center',title: '牌号'}
        ,{field: 'weight', align: 'center',title: '重量(KG)', hide:true}
        ,{field: 'workshop', align: 'center',title: '生产车间', hide:true}
        ,{field: 'line', align: 'center',title: '生产线', hide:true}
        ,{field: 'packageType', align: 'center',title: '包装类型', hide:true}
        ,{field: 'zpalletType', align: 'center',title: '托盘类型', hide:true}
        ,{field: 'fingerMelting', align: 'center',title: '熔指(g/10min)'}
        ,{field: 'fusingPoint', align: 'center',title: '熔点(℃)'}
        ,{field: 'vadf1', align: 'center',title: '挥发份1(%)', hide:true}
        ,{field: 'vadf2', align: 'center',title: '挥发份2(%)', hide:true}
        ,{field: 'yellowness', align: 'center',title: '黄度',  hide:true}
        ,{field: 'opacity', align: 'center',title: '不透明度(0-100%)', hide:true}
        ,{field: 'water', align: 'center',title: '水分(ppm)', hide:true}
        ,{field: 'massState', align: 'center',title: '质量状态', hide:true}
        ,{field: 'problem', align: 'center',title: '质量问题', hide:true}
        ,{field: 'stash', align: 'center',title: '仓库', edit:true}
        ,{field: 'locNo', align: 'center',title: '库位', edit:true}
        ,{field: 'weightAnfme', align: 'center',title: '剩余重量(KG)', edit:true}
        ,{field: 'status', align: 'center',title: '状态', edit:true}
        ,{field: 'createUser', align: 'center',title: '单号', edit:true}
        ,{field: 'createUser', align: 'center',title: '出库时间', edit:true}
        ,{field: 'createUser', align: 'center',title: '重量', edit:true}
        ,{field: 'createUser', align: 'center',title: '经办人', edit:true}
        ,{field: 'createUser', align: 'center',title: '流转形式', edit:true}
        ,{field: 'createUser', align: 'center',title: '客户名称', edit:true}
        ,{field: 'createUser', align: 'center',title: '调拨到', edit:true}
        ,{field: 'createUser', align: 'center',title: '备注', edit:true}
    ];
    return cols;
}
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['table','laydate', 'form', 'admin'], function() {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    // 数据渲染
    tableIns = table.render({
        elem: '#plaDetl',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/pla/list/auth?step=3',
        page: true,
        limit: 16,
        limits: [16, 30, 50, 100, 200, 500],
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
        cols: [getCol()],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            console.log(res)
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
            }
        },
        response: {
            statusCode: 200
        },
        done: function(res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            tableData = table.cache.locDetl;
            console.log(tableData);
            pageCurr=curr;
            limit();
            form.on('checkbox(tableCheckbox)', function (data) {
                var _index = $(data.elem).attr('table-index')||0;
                if(data.elem.checked){
                    res.data[_index][data.value] = 'Y';
                }else{
                    res.data[_index][data.value] = 'N';
                }
            });
        }
    });
    // 重置事件
    form.on('submit(reset)', function (data) {
        reset();
    });
    function reset() {
        clearFormVal($('#search-box'));
        matCodeData = [];
        tableReload();
        locTips(false);
    }
    // 重载表格
    function tableReload() {
        tableIns.reload({data: matCodeData});
    }
    $(document).on('click','#add', function () {
        var now = dateToStr(new Date())
        var newRow = {ioTime : now};
        data = table.cache.plaDetl;
        data.push(newRow);
        table.reload('plaDetl',{
            data: data
        })
    })
    $(document).on('click','#delete', function () {
        let dataNew = [];
        let data = table.cache.plaDetl;
        for(var i=0; i<data.length; i++){
            if(!data[i].LAY_CHECKED){
                dataNew.push(data[i]);
            }
        }
        table.reload('plaDetl',{
            data: dataNew
        })
    })
    $(document).on('click','#submit', function () {
        let data = table.cache.plaDetl;
        let dataSave = [];
        let dataOld = [];
        for(var i=0; i<data.length; i++){
            if(data[i].LAY_CHECKED){
                if(!data[i].batch){
                    layer.msg("有未填写字段");
                    return;
                }
                data[i].step = 3;
                dataSave.push(data[i]);
            }else {
                dataOld.push(data[i]);
            }
        }
        $.ajax({
            url: baseUrl+"/pla/update/auth",
            headers: {'token': localStorage.getItem('token')},
            data: JSON.stringify(dataSave),
            contentType:'application/json;charset=UTF-8',
            method: 'POST',
            async: false,
            success: function (res) {
                if (res.code === 200){
                    layer.msg("提交成功");
                    table.reload('plaDetl',{
                        data: dataOld
                    })
                } else if (res.code === 403){
                }else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        })
    })
})
src/main/webapp/static/js/pla/productionInfo.js
@@ -4,11 +4,12 @@
var currLocNo;
var matCodeLayerIdx;
var data = [];
var checkStatus = [];
function getCol() {
    var cols = [
        {field: 'id', title: 'id', align: 'center',hide:true}
        ,{type: 'checkbox'}
        ,{field: 'ioTime', title: '入库时间', align: 'center'}
        ,{field: 'pakinTime', title: '入库时间', align: 'center'}
        ,{field: 'batch', align: 'center',title: '批号', edit: true}
        ,{field: 'packageNo', align: 'center',title: '包号', edit: true}
        ,{field: 'brand', align: 'center',title: '牌号', edit: true}
@@ -44,118 +45,11 @@
        }
    });
    // 页面修改
    table.on('edit(chooseData)', function (obj) {
        let index = obj.tr.attr("data-index");
        let data = matCodeData[index];
        let modify = true;
        if (obj.field === 'count'){
            let vle = Number(obj.value);
            if (isNaN(vle)) {
                layer.msg("请输入数字", {icon: 2});
                modify = false;
            } else {
                if (vle <= 0) {
                    layer.msg("数量必须大于零", {icon: 2});
                    modify = false;
                }
            }
        }
        if (modify) {
            data[obj.field] = obj.value;
        }
        tableIns.reload({data: matCodeData});
    });
    // 监听头工具栏事件
    table.on('toolbar(chooseData)', function (obj) {
        switch(obj.event) {
            case 'adjust':
                if (isEmpty(currLocNo)) {
                    layer.msg("请先检索库位", {icon: 2})
                    inputTip($("#searchLocNo"));
                    return;
                }
                if (matCodeData.length === 0) {
                    layer.msg("请先添加明细", {icon: 2});
                    return;
                }
                for (var i=0;i<matCodeData.length;i++){
                    if (isNaN(matCodeData[i].count)) {
                        layer.msg("请输入数字", {icon: 2});
                        return;
                    }
                    if (matCodeData[i].count < 0){
                        layer.msg("数量不能小于零", {icon: 2});
                        return;
                    }
                }
                layer.confirm('确定调整'+currLocNo+'库位的明细吗?', {shadeClose: true}, function(){
                    $.ajax({
                        url: baseUrl+"/manLocDetl/adjust/start",
                        headers: {'token': localStorage.getItem('token')},
                        data: JSON.stringify({
                            locNo: currLocNo,
                            list: matCodeData
                        }),
                        contentType:'application/json;charset=UTF-8',
                        method: 'POST',
                        async: false,
                        success: function (res) {
                            if (res.code === 200){
                                layer.msg(currLocNo + res.msg, {icon: 1});
                                init(currLocNo)
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
                            }else {
                                layer.msg(res.msg, {icon: 2})
                            }
                        }
                    })
                });
                break;
        }
    });
    // 监听行工具事件
    table.on('tool(chooseData)', function(obj){
        var data = obj.data;
        switch (obj.event) {
            case 'remove':
                let index = obj.tr.attr("data-index");
                matCodeData.splice(index, 1);
                tableIns.reload({data: matCodeData});
                break;
        }
    });
    // 检索事件
    form.on('submit(search)', function (data) {
        let loc_no = data.field.loc_no;
        if (loc_no === "") {
            inputTip($("#searchLocNo"));
            layer.msg("请输入库位号");
            return;
        }
        init(loc_no);
    });
    // 重置事件
    form.on('submit(reset)', function (data) {
        reset();
    });
    function init(locNo) {
        http.post(baseUrl + "/manLocDetl/list", {loc_no: locNo,limit: 1000}, function (res) {
            matCodeData = [];
            matCodeData = res.data.records;
            for (var i = 0; i<matCodeData.length; i++) {
                matCodeData[i]["count"] = matCodeData[i]["anfme"];
            }
            locTips(true, locNo);
            tableReload();
        })
    }
    function reset() {
        clearFormVal($('#search-box'));
@@ -169,44 +63,68 @@
        tableIns.reload({data: matCodeData});
    }
    // 库位提示框
    function locTips(retrieve, locNo) {
        if (retrieve) {
            http.post(baseUrl+"/node/select/"+locNo+"/auth", null, function (res) {
                console.log(res);
                let data = res.data;
                if (data != null) {
                    $(".retrieve").show();
                    // $("#locMsg").html(locNo + "&nbsp;,库位状态:" + data.locSts$);
                    $("#locMsg").html(locNo + "&nbsp;");
                    $('.not-retrieve').hide();
                    currLocNo = locNo;
                } else {
                    layer.msg("请输入有效库位号", {icon: 2});
                    $('.not-retrieve').show();
                    $("#locMsg").html("");
                    $(".retrieve").hide();
                    currLocNo = null;
                    inputTip($("#searchLocNo"));
                }
            })
        } else {
            $('.not-retrieve').show();
            $("#locMsg").html("");
            $(".retrieve").hide();
            currLocNo = null;
        }
    }
    $(document).on('click','#add', function () {
        var strTime = "20"
        var now = new Date(year,month,date,hrs,min,sec);
        var newRow = {ioTime : now};
        var now = dateToStr(new Date())
        var newRow = {pakinTime : now};
        data = table.cache.productionInfoTable;
        data.push(newRow);
        table.reload('productionInfoTable',{
            data: data
        })
    })
    $(document).on('click','#delete', function () {
        let dataNew = [];
        let data = table.cache.productionInfoTable;
        for(var i=0; i<data.length; i++){
            if(!data[i].LAY_CHECKED){
                dataNew.push(data[i]);
            }
        }
        table.reload('productionInfoTable',{
            data: dataNew
        })
    })
    $(document).on('click','#submit', function () {
        let data = table.cache.productionInfoTable;
        let dataSave = [];
        let dataOld = [];
        for(var i=0; i<data.length; i++){
            if(data[i].LAY_CHECKED){
                if(!data[i].batch){
                    layer.msg("有未填写字段");
                    return;
                }
                data[i].step = 1;
                dataSave.push(data[i]);
            }else {
                dataOld.push(data[i]);
            }
        }
        $.ajax({
            url: baseUrl+"/pla/add/auth",
            headers: {'token': localStorage.getItem('token')},
            data: JSON.stringify(dataSave),
            contentType:'application/json;charset=UTF-8',
            method: 'POST',
            async: false,
            success: function (res) {
                if (res.code === 200){
                    layer.msg("提交成功");
                    table.reload('productionInfoTable',{
                        data: dataOld
                    })
                } else if (res.code === 403){
                }else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        })
    })
})
src/main/webapp/static/js/pla/qualityInfo.js
New file
@@ -0,0 +1,173 @@
var initCountVal = 0;
var initAnfmeVal = "-";
var matCodeData = [];
var currLocNo;
var matCodeLayerIdx;
var data = [];
var checkStatus = [];
function getCol() {
    var cols = [
        {field: 'id', title: 'id', align: 'center',hide:true}
        ,{type: 'checkbox'}
        ,{field: 'pakinTime', title: '入库时间', align: 'center'}
        ,{field: 'batch', align: 'center',title: '批号'}
        ,{field: 'packageNo', align: 'center',title: '包号'}
        ,{field: 'brand', align: 'center',title: '牌号'}
        ,{field: 'weight', align: 'center',title: '重量(KG)', hide:true}
        ,{field: 'workshop', align: 'center',title: '生产车间', hide:true}
        ,{field: 'line', align: 'center',title: '生产线', hide:true}
        ,{field: 'packageType', align: 'center',title: '包装类型', hide:true}
        ,{field: 'zpalletType', align: 'center',title: '托盘类型', hide:true}
        ,{field: 'fingerMelting', align: 'center',title: '熔指(g/10min)', edit: true}
        ,{field: 'fusingPoint', align: 'center',title: '熔点(℃)', edit: true}
        ,{field: 'vadf1', align: 'center',title: '挥发份1(%)', edit: true}
        ,{field: 'vadf2', align: 'center',title: '挥发份2(%)', edit: true}
        ,{field: 'yellowness', align: 'center',title: '黄度', edit: true}
        ,{field: 'opacity', align: 'center',title: '不透明度(0-100%)', edit: true}
        ,{field: 'water', align: 'center',title: '水分(ppm)', edit: true}
        ,{field: 'massState', align: 'center',title: '质量状态', edit: true}
        ,{field: 'problem', align: 'center',title: '质量问题', edit: true}
    ];
    return cols;
}
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['table','laydate', 'form', 'admin'], function() {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    // 数据渲染
    tableIns = table.render({
        elem: '#qualityInfoTable',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/pla/list/auth?step=1',
        page: true,
        limit: 16,
        limits: [16, 30, 50, 100, 200, 500],
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
        cols: [getCol()],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            console.log(res)
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
            }
        },
        response: {
            statusCode: 200
        },
        done: function(res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            tableData = table.cache.locDetl;
            console.log(tableData);
            pageCurr=curr;
            limit();
            form.on('checkbox(tableCheckbox)', function (data) {
                var _index = $(data.elem).attr('table-index')||0;
                if(data.elem.checked){
                    res.data[_index][data.value] = 'Y';
                }else{
                    res.data[_index][data.value] = 'N';
                }
            });
        }
    });
    // 重置事件
    form.on('submit(reset)', function (data) {
        reset();
    });
    function reset() {
        clearFormVal($('#search-box'));
        matCodeData = [];
        tableReload();
        locTips(false);
    }
    // 重载表格
    function tableReload() {
        tableIns.reload({data: matCodeData});
    }
    $(document).on('click','#add', function () {
        var now = dateToStr(new Date())
        var newRow = {ioTime : now};
        data = table.cache.qualityInfoTable;
        data.push(newRow);
        table.reload('qualityInfoTable',{
            data: data
        })
    })
    $(document).on('click','#delete', function () {
        let dataNew = [];
        let data = table.cache.qualityInfoTable;
        for(var i=0; i<data.length; i++){
            if(!data[i].LAY_CHECKED){
                dataNew.push(data[i]);
            }
        }
        table.reload('qualityInfoTable',{
            data: dataNew
        })
    })
    $(document).on('click','#submit', function () {
        let data = table.cache.qualityInfoTable;
        let dataSave = [];
        let dataOld = [];
        for(var i=0; i<data.length; i++){
            if(data[i].LAY_CHECKED){
                if(!data[i].batch){
                    layer.msg("有未填写字段");
                    return;
                }
                data[i].step = 2;
                dataSave.push(data[i]);
            }else {
                dataOld.push(data[i]);
            }
        }
        $.ajax({
            url: baseUrl+"/pla/update/auth",
            headers: {'token': localStorage.getItem('token')},
            data: JSON.stringify(dataSave),
            contentType:'application/json;charset=UTF-8',
            method: 'POST',
            async: false,
            success: function (res) {
                if (res.code === 200){
                    layer.msg("提交成功");
                    table.reload('qualityInfoTable',{
                        data: dataOld
                    })
                } else if (res.code === 403){
                }else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        })
    })
})
src/main/webapp/static/js/pla/waitingPakin.js
New file
@@ -0,0 +1,177 @@
var initCountVal = 0;
var initAnfmeVal = "-";
var matCodeData = [];
var currLocNo;
var matCodeLayerIdx;
var data = [];
var checkStatus = [];
function getCol() {
    var cols = [
        {field: 'id', title: 'id', align: 'center',hide:true}
        ,{type: 'checkbox'}
        ,{field: 'pakinTime', title: '入库时间', align: 'center'}
        ,{field: 'batch', align: 'center',title: '批号'}
        ,{field: 'packageNo', align: 'center',title: '包号'}
        ,{field: 'brand', align: 'center',title: '牌号'}
        ,{field: 'weight', align: 'center',title: '重量(KG)', hide:true}
        ,{field: 'workshop', align: 'center',title: '生产车间', hide:true}
        ,{field: 'line', align: 'center',title: '生产线', hide:true}
        ,{field: 'packageType', align: 'center',title: '包装类型', hide:true}
        ,{field: 'zpalletType', align: 'center',title: '托盘类型', hide:true}
        ,{field: 'fingerMelting', align: 'center',title: '熔指(g/10min)'}
        ,{field: 'fusingPoint', align: 'center',title: '熔点(℃)'}
        ,{field: 'vadf1', align: 'center',title: '挥发份1(%)', hide:true}
        ,{field: 'vadf2', align: 'center',title: '挥发份2(%)', hide:true}
        ,{field: 'yellowness', align: 'center',title: '黄度',  hide:true}
        ,{field: 'opacity', align: 'center',title: '不透明度(0-100%)', hide:true}
        ,{field: 'water', align: 'center',title: '水分(ppm)', hide:true}
        ,{field: 'massState', align: 'center',title: '质量状态', hide:true}
        ,{field: 'problem', align: 'center',title: '质量问题', hide:true}
        ,{field: 'stash', align: 'center',title: '仓库', edit:true}
        ,{field: 'locNo', align: 'center',title: '库位', edit:true}
    ];
    return cols;
}
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['table','laydate', 'form', 'admin'], function() {
    var table = layui.table;
    var $ = layui.jquery;
    var layer = layui.layer;
    var layDate = layui.laydate;
    var form = layui.form;
    var admin = layui.admin;
    // 数据渲染
    tableIns = table.render({
        elem: '#waitingPakinTable',
        headers: {token: localStorage.getItem('token')},
        url: baseUrl+'/pla/list/auth?step=2',
        page: true,
        limit: 16,
        limits: [16, 30, 50, 100, 200, 500],
        even: true,
        toolbar: '#toolbar',
        cellMinWidth: 50,
        cols: [getCol()],
        request: {
            pageName: 'curr',
            pageSize: 'limit'
        },
        parseData: function (res) {
            console.log(res)
            return {
                'code': res.code,
                'msg': res.msg,
                'count': res.data.total,
                'data': res.data.records
            }
        },
        response: {
            statusCode: 200
        },
        done: function(res, curr, count) {
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            tableData = table.cache.locDetl;
            console.log(tableData);
            pageCurr=curr;
            limit();
            form.on('checkbox(tableCheckbox)', function (data) {
                var _index = $(data.elem).attr('table-index')||0;
                if(data.elem.checked){
                    res.data[_index][data.value] = 'Y';
                }else{
                    res.data[_index][data.value] = 'N';
                }
            });
        }
    });
    // 重置事件
    form.on('submit(reset)', function (data) {
        reset();
    });
    function reset() {
        clearFormVal($('#search-box'));
        matCodeData = [];
        tableReload();
        locTips(false);
    }
    // 重载表格
    function tableReload() {
        tableIns.reload({data: matCodeData});
    }
    $(document).on('click','#add', function () {
        var now = dateToStr(new Date())
        var newRow = {ioTime : now};
        data = table.cache.waitingPakinTable;
        data.push(newRow);
        table.reload('waitingPakinTable',{
            data: data
        })
    })
    $(document).on('click','#delete', function () {
        let dataNew = [];
        let data = table.cache.waitingPakinTable;
        for(var i=0; i<data.length; i++){
            if(!data[i].LAY_CHECKED){
                dataNew.push(data[i]);
            }
        }
        table.reload('waitingPakinTable',{
            data: dataNew
        })
    })
    $(document).on('click','#submit', function () {
        let data = table.cache.waitingPakinTable;
        let dataSave = [];
        let dataOld = [];
        for(var i=0; i<data.length; i++){
            if(data[i].LAY_CHECKED){
                if(!data[i].batch){
                    layer.msg("有未填写字段");
                    return;
                }
                data[i].step = 3;
                data[i].status = "待入库";
                data[i].weightAnfme = data[i].weight;
                dataSave.push(data[i]);
            }else {
                dataOld.push(data[i]);
            }
        }
        $.ajax({
            url: baseUrl+"/pla/update/auth",
            headers: {'token': localStorage.getItem('token')},
            data: JSON.stringify(dataSave),
            contentType:'application/json;charset=UTF-8',
            method: 'POST',
            async: false,
            success: function (res) {
                if (res.code === 200){
                    layer.msg("提交成功");
                    table.reload('waitingPakinTable',{
                        data: dataOld
                    })
                } else if (res.code === 403){
                }else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        })
    })
})
src/main/webapp/views/pla/plaDetl.html
New file
@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
        html {
            height: 100%;
            padding: 10px;
            background-color: #f1f1f1;
            box-sizing: border-box;
        }
        body {
            background-color: #fff;
            border-radius: 5px;
            box-shadow: 0 0 3px rgba(0,0,0,.3);
        }
        /* search */
        .layui-card-header {
            border-bottom: none;
        }
        #search-box {
            padding: 30px 0 10px 0;
        }
        #search-box .layui-inline:first-child {
            margin-left: 30px;
        }
        #search-box .layui-inline {
            margin-right: 5px;
        }
        #data-search-btn {
            margin-left: 10px;
            display: inline-block;
        }
        #data-search-btn.layui-btn-container .layui-btn {
            margin-right: 20px;
        }
        /* add */
        .function-area {
            padding: 15px 0 20px 40px;
        }
        .function-btn {
            font-size: 16px;
            padding: 1px 1px 1px 1px;
            width: 120px;
            height: 40px;
            border-color: #2b425b;
            border-radius: 4px;
            border-width: 1px;
            background: none;
            border-style: solid;
            transition: 0.4s;
            cursor: pointer;
        }
        .function-btn:hover {
            background-color: #2b425b;
            color: #fff;
        }
        #mat-query {
            /*display: none;*/
        }
        #btn-adjust {
            /*display: none;*/
        }
        .layui-table-cell {
            text-align: center;
            line-height: 20px !important;
            vertical-align: middle;
            height: auto;
            overflow: visible;
            text-overflow: inherit;
            white-space: normal;
        }
    </style>
</head>
<body style="padding-bottom: 30px">
<hr>
<!-- 功能区 -->
<div class="function-area">
    <button id="rework" style="alignment: right" class="function-btn">重做</button>
</div>
<!-- 行 -->
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">移除</a>
</script>
<!-- 表格 -->
<table class="layui-table" id="plaDetl" lay-filter="plaDetl"></table>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/js/pla/plaDetl.js" charset="utf-8"></script>
</body>
</html>
src/main/webapp/views/pla/productionInfo.html
@@ -73,6 +73,16 @@
        #btn-adjust {
            /*display: none;*/
        }
        .layui-table-cell {
            text-align: center;
            line-height: 20px !important;
            vertical-align: middle;
            height: auto;
            overflow: visible;
            text-overflow: inherit;
            white-space: normal;
        }
    </style>
</head>
<body style="padding-bottom: 30px">
src/main/webapp/views/pla/qualityInfo.html
New file
@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
        html {
            height: 100%;
            padding: 10px;
            background-color: #f1f1f1;
            box-sizing: border-box;
        }
        body {
            background-color: #fff;
            border-radius: 5px;
            box-shadow: 0 0 3px rgba(0,0,0,.3);
        }
        /* search */
        .layui-card-header {
            border-bottom: none;
        }
        #search-box {
            padding: 30px 0 10px 0;
        }
        #search-box .layui-inline:first-child {
            margin-left: 30px;
        }
        #search-box .layui-inline {
            margin-right: 5px;
        }
        #data-search-btn {
            margin-left: 10px;
            display: inline-block;
        }
        #data-search-btn.layui-btn-container .layui-btn {
            margin-right: 20px;
        }
        /* add */
        .function-area {
            padding: 15px 0 20px 40px;
        }
        .function-btn {
            font-size: 16px;
            padding: 1px 1px 1px 1px;
            width: 120px;
            height: 40px;
            border-color: #2b425b;
            border-radius: 4px;
            border-width: 1px;
            background: none;
            border-style: solid;
            transition: 0.4s;
            cursor: pointer;
        }
        .function-btn:hover {
            background-color: #2b425b;
            color: #fff;
        }
        #mat-query {
            /*display: none;*/
        }
        #btn-adjust {
            /*display: none;*/
        }
        .layui-table-cell {
            text-align: center;
            line-height: 20px !important;
            vertical-align: middle;
            height: auto;
            overflow: visible;
            text-overflow: inherit;
            white-space: normal;
        }
    </style>
</head>
<body style="padding-bottom: 30px">
<hr>
<!-- 功能区 -->
<div class="function-area">
    <button id="submit" style="alignment: right" class="function-btn">提交</button>
</div>
<!-- 行 -->
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">移除</a>
</script>
<!-- 表格 -->
<table class="layui-table" id="qualityInfoTable" lay-filter="qualityInfoTable"></table>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/js/pla/qualityInfo.js" charset="utf-8"></script>
</body>
</html>
src/main/webapp/views/pla/waitingPakin.html
New file
@@ -0,0 +1,114 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
        html {
            height: 100%;
            padding: 10px;
            background-color: #f1f1f1;
            box-sizing: border-box;
        }
        body {
            background-color: #fff;
            border-radius: 5px;
            box-shadow: 0 0 3px rgba(0,0,0,.3);
        }
        /* search */
        .layui-card-header {
            border-bottom: none;
        }
        #search-box {
            padding: 30px 0 10px 0;
        }
        #search-box .layui-inline:first-child {
            margin-left: 30px;
        }
        #search-box .layui-inline {
            margin-right: 5px;
        }
        #data-search-btn {
            margin-left: 10px;
            display: inline-block;
        }
        #data-search-btn.layui-btn-container .layui-btn {
            margin-right: 20px;
        }
        /* add */
        .function-area {
            padding: 15px 0 20px 40px;
        }
        .function-btn {
            font-size: 16px;
            padding: 1px 1px 1px 1px;
            width: 120px;
            height: 40px;
            border-color: #2b425b;
            border-radius: 4px;
            border-width: 1px;
            background: none;
            border-style: solid;
            transition: 0.4s;
            cursor: pointer;
        }
        .function-btn:hover {
            background-color: #2b425b;
            color: #fff;
        }
        #mat-query {
            /*display: none;*/
        }
        #btn-adjust {
            /*display: none;*/
        }
        .layui-table-cell {
            text-align: center;
            line-height: 20px !important;
            vertical-align: middle;
            height: auto;
            overflow: visible;
            text-overflow: inherit;
            white-space: normal;
        }
    </style>
</head>
<body style="padding-bottom: 30px">
<hr>
<!-- 功能区 -->
<div class="function-area">
    <button id="submit" style="alignment: right" class="function-btn">通知入库</button>
</div>
<!-- 行 -->
<script type="text/html" id="operate">
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">移除</a>
</script>
<!-- 表格 -->
<table class="layui-table" id="waitingPakinTable" lay-filter="qualityInfoTable"></table>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/js/pla/waitingPakin.js" charset="utf-8"></script>
</body>
</html>