自动化立体仓库 - WMS系统
#
zjj
2025-03-21 ca07b97ea192888b6ec219fd5409517349789b70
src/main/webapp/static/js/order/order.js
@@ -1,3 +1,4 @@
var insTbCount = 0;
layui.config({
    base: baseUrl + "/static/layui/lay/modules/"
}).use(['layer', 'form', 'table', 'util', 'admin', 'xmSelect', 'laydate'], function () {
@@ -9,6 +10,28 @@
    var admin = layui.admin;
    var xmSelect = layui.xmSelect;
    var layDate = layui.laydate;
    var laytpl = layui.laytpl;
    // 渲染搜索模板
    $.ajax({
        url: baseUrl+"/docType/list/auth",
        headers: {'token': localStorage.getItem('token')},
        data: {
            limit: 9999
        },
        method: 'POST',
        success: function (res) {
            if (res.code === 200){
                let template = Handlebars.compile($('#docTypeTpl').html());
                $('#docType-query').html(template(res.data));
                layui.form.render('select');
            } else if (res.code === 403){
                top.location.href = baseUrl+"/";
            } else {
                layer.msg(res.msg, {icon: 2})
            }
        }
    })
    // 渲染表格
    var insTb = table.render({
@@ -19,13 +42,15 @@
        cellMinWidth: 100,
        cols: [[
            {type: 'numbers'},
            {field: 'orderNo', title: '单据编号', sort: true},
            {field: 'docType$', align: 'center', title: '类型',  minWidth: 160, width: 160},
            {align: 'center', title: '明细', toolbar: '#tbLook', minWidth: 160, width: 160},
            {field: 'createTime$', title: '创建时间', minWidth: 200, width: 200},
            {field: 'orderNo', title: '单据编号', templet: '#orderNoTpl',minWidth: 200},
            {field: 'docType$', align: 'center', title: '类型'},
            {align: 'center', title: '明细', toolbar: '#tbLook'},
            {field: 'createTime$', title: '创建时间'},
            {field: 'settle$', align: 'center', title: '状态', templet: '#settleTpl',  minWidth: 160, width: 160},
            {field: 'shipName', align: 'center',title: '制单人'},
            {field: 'itemName', align: 'center',title: '仓库'},
            {field: 'memo', align: 'center',title: '备注', hide: true},
            {align: 'center', title: '操作', toolbar: '#operate', minWidth: 130, width: 130}
            {align: 'center', title: '操作', toolbar: '#operate'}
        ]],
        request: {
            pageName: 'curr',
@@ -43,9 +68,11 @@
            statusCode: 200
        },
        done: function (res, curr, count) {
            limit();
            if (res.code === 403) {
                top.location.href = baseUrl+"/";
            }
            insTbCount = count;
        }
    });
@@ -65,8 +92,12 @@
        var layEvent = obj.event;
        if (layEvent === 'edit') {
            showEditModel(data);
        } else if (layEvent === 'wrkTrace') {
            showWrkTrace(data.id);
        } else if (layEvent === 'del') {
            doDel(data.billNo);
            doDel(data.id);
        } else if (layEvent === 'complete') {
            doModify(data.id, data.orderNo, 4);
        } else if (layEvent === 'look') {
            var $a = $(obj.tr).find('a[lay-event="look"]');
            var offset = $a.offset();
@@ -75,7 +106,7 @@
            layer.open({
                type: 1,
                title: false,
                area: '800px',
                area: '1000px',
                offset: [top + 'px', (left - 530 + $a.outerWidth()) + 'px'],
                shade: .01,
                shadeClose: true,
@@ -85,25 +116,34 @@
                    table.render({
                        elem: '#lookSSXMTable',
                        headers: {token: localStorage.getItem('token')},
                        url: baseUrl+'/waitMatin/list/auth',
                        url: baseUrl+'/orderDetl/list/auth',
                        where: {
                            bill_no: data.billNo
                            order_id: data.id
                        },
                        page: true,
                        cellMinWidth: 100,
                        cols: [[
                            {type: 'numbers'},
                            {field: 'matNo', title: '物料编码'},
                            {field: 'matName', title: '物料名称', width: 160},
                            {field: 'qty', title: '数量'},
                            {
                                field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
                                    return util.toDateString(d.createTime);
                                },  width: 180
                            },
                            {field: 'inQty', title: '已入库量'},
                            {field: 'color', title: '颜色'},
                            {field: 'specs', title: '规格'}
                            {field: 'matnr', title: '商品编码', width: 160},
                            {field: 'maktx', title: '商品名称', width: 160},
                            {field: 'specs', title: '规格', width: 160},
                            {field: 'batch', title: '批号'},
                            {field: 'supp', align: 'center',title: '供应商', hide: false}
                            ,{field: 'temp2', align: 'center',title: '客户名称', hide: false}
                            ,{field: 'temp1', align: 'center',title: '来源单号', hide: false},
                            {field: 'anfme', title: '数量'},
                            {field: 'workQty', title: '作业数量'},
                            {field: 'qty', title: '完成数量', style: 'font-weight: bold'},
                            {align: 'center', title: '打印', toolbar: '#printOperate', width: 80}
                            // {field: 'unit', title: '单位'},
                            // {
                            //     field: 'createTime$', title: '创建时间', sort: true, templet: function (d) {
                            //         return util.toDateString(d.createTime);
                            //     },  width: 180
                            // },
                            // {field: 'inQty', title: '已入库量'},
                            // {field: 'color', title: '颜色'},
                        ]],
                        request: {
                            pageName: 'curr',
@@ -130,10 +170,44 @@
        }
    });
    // 监听行工具事件
    table.on('tool(lookSSXMTable)', function(obj) {
        $.ajax({
            url: baseUrl+"/orderDetl/getPrintDetl/" + obj.data.id,
            headers: {'token': localStorage.getItem('token'),'Content-Type' :'application/json'},
            method: 'GET',
            async: false,
            success: function (res) {
                if (res.code === 200){
                    layer.closeAll();
                    let data = res.data
                        var templateDom = $("#templatePreview1");
                        var className = templateDom.attr("class");
                        var param = "编码:"+data.matnr+";名称:"+data.maktx+";批次:"+data.batch+";规格:"+data.specs
                            +";单位:"+data.unit+";数量:"+data.anfme+";销售单号:"+data.suppCode+";客户名称:"+data.sku;
                        var encodeUrl = encodeURIComponent(param);
                        data["barcodeUrl"]=baseUrl+"/mac/code/auth?type=2&param="+encodeUrl;
                        console.log(data["barcodeUrl"]);
                    let list = Array.isArray(res.data) ? res.data : [res.data];
                    res.data = list;
                    var tpl = templateDom.html();
                    var template = Handlebars.compile(tpl);
                    var html = template(res);
                    var box = $("#box");
                    box.html(html);box.show();
                    box.print({mediaPrint:true});
                    box.hide();
                } else if (res.code === 403){
                    top.location.href = baseUrl+"/";
                }else {
                    layer.msg(res.msg)
                }
            }
        })
    });
    // 显示表单弹窗
    function showEditModel(expTpe) {
        var mlist=null
        var inQtys=[]
        admin.open({
            type: 1,
            title: (expTpe ? '修改' : '添加') + '单据',
@@ -145,59 +219,43 @@
                // 回显数据
                form.val('editForm', expTpe);
                if (expTpe) {
                    $('#billNo').attr("disabled", "disabled");
                    $('#orderNo').attr("disabled", "disabled");
                }
                // 表单提交事件
                form.on('submit(waitMatinEditSubmit)', function (data) {
                form.on('submit(orderEditSubmit)', function (data) {
                    // 组装数据
                    if (xxDataList.length <= 0) {
                        layer.tips('请添加单据明细', '#matAddBtnComment', {tips: [1, '#ff4c4c']});
                        return false;
                    }
                    var param = [];
                    var nList = admin.util.deepClone(xxDataList);
                    for (var xi = 0; xi < nList.length; xi++) {
                        // console.log('已入库:'+nList[xi].inQty)
                        // console.log('旧数量:'+inQtys[xi])
                        // console.log('数量:'+nList[xi].qty)
                        if (nList[xi].inQty > 0 && inQtys[xi]!=nList[xi].qty) {
                            layer.msg("已入库无法修改", {icon: 2})
                            return false;
                        } else  if (nList[xi].qty > 0) {
                            param.push({
                                billNo: data.field.billNo,
                                billType: data.field.billType,
                                matNo: nList[xi].matNo,
                                matName: nList[xi].matName,
                                color: nList[xi].color,
                                size: nList[xi].size,
                                specs: nList[xi].specs,
                                memo: nList[xi].memo,
                                unit: nList[xi].unit,
                                qty: nList[xi].qty,
                                inQty: nList[xi].inQty,
                            })
                        }else if (nList[xi].qty == 0){
                    let nList = admin.util.deepClone(xxDataList);
                    for (let xi = 0; xi < nList.length; xi++) {
                        if (nList[xi].anfme <= 0){
                            layer.msg('明细修改数量不合法', {icon: 2});
                            return false;
                        }
                    }
                    if (param.length === 0) {
                        layer.msg('单据明细数量不合法', {icon: 2});
                        return false;
                        if (nList[xi].anfme < nList[xi].workQty){
                            layer.msg('数量不能小于已作业数量', {icon: 2});
                            return false;
                        }
                    }
                    layer.load(2);
                    $.ajax({
                        url: baseUrl+"/waitMatin/" + (isExpAdd?"add":"modify") + "/auth",
                        url: baseUrl+"/order/form/" + (isExpAdd?"add":"modify") + "/auth",
                        headers: {'token': localStorage.getItem('token')},
                        data: JSON.stringify(param),
                        data: JSON.stringify({
                            orderId: Number(data.field.id),
                            docType: Number(data.field.docType),
                            orderNo: data.field.orderNo,
                            orderDetlList: nList
                        }),
                        contentType:'application/json;charset=UTF-8',
                        method: 'POST',
                        success: function (res) {
                            layer.closeAll('loading');
                            if (res.code === 200){
                                layer.close(dIndex);
                                insTb.reload({page: {curr: 1}});
                                $(".layui-laypage-btn")[0].click();
                                layer.msg(res.msg, {icon: 1});
                            } else if (res.code === 403){
                                top.location.href = baseUrl+"/";
@@ -218,31 +276,25 @@
                    height: '350px;',
                    cellMinWidth: 100,
                    cols: [[
                        {type: 'numbers'},
                        {field: 'matNo', title: '物料编码'},
                        {field: 'matName', title: '物料名称', width: 160},
                        {field: 'specs', title: '规格', width: 160},
                        {field: 'color', title: '颜色', width: 160},
                        {field: 'size', title: '尺寸', width: 160},
                        {field: 'qty', title: '修改数量', style: 'color: blue;font-weight: bold', edit: true, minWidth: 100, width: 100},
                        {field: 'inQty', title: '已入库量',  minWidth: 100, width: 100},
                        {field: 'unit', title: '单位', width: 160},
                        {field: 'memo', title: '备注' , edit: true, width: 160},
                        {type: 'numbers', title: '#'},
                        {field: 'matnr', title: '商品编码', width: 160},
                        {field: 'maktx', title: '商品名称', width: 200},
                        {field: 'batch', title: '批号', edit: true},
                        {field: 'specs', title: '规格'},
                        {field: 'anfme', title: '数量(修改)', style: 'color: blue;font-weight: bold', edit: true, minWidth: 110, width: 110},
                        {field: 'workQty', title: '作业数量',  minWidth: 100, width: 100},
                        // {field: 'unit', title: '单位', width: 80},
                        {field: 'memo', title: '备注' , edit: true},
                        {align: 'center', title: '操作', toolbar: '#formSSXMTableBar', minWidth: 80, width: 80, fixed: 'right'}
                    ]],
                    done: function (res) {
                        mlist= res.data
                        for (let i = 0; i < mlist.length; i++) {
                            var waitIn=mlist[i]
                            inQtys.push(waitIn.qty)
                        }
                        $(layero).find('.layui-table-view').css('margin', '0');
                    },
                    size: ''
                };
                if (!isExpAdd) {
                    $.ajax({
                        url: baseUrl+"/waitMatin/detl/list/auth?billNo=" + expTpe.billNo,
                        url: baseUrl+"/order/detl/all/auth?orderId=" + expTpe.id,
                        headers: {'token': localStorage.getItem('token')},
                        method: 'GET',
                        async: false,
@@ -266,13 +318,17 @@
                    if (layEvent === 'edit') {
                        showEditModel2(data);
                    } else if (layEvent === 'del') {
                        if(data.workQty > 0){
                            layer.msg("已存在作业数量,不能删除", {icon: 2});
                            return;
                        }
                        layer.confirm('确定要删除吗?', {
                            shade: .1,
                            skin: 'layui-layer-admin'
                        }, function (i) {
                            layer.close(i);
                            for (var j = 0; j < xxDataList.length; j++) {
                                if (xxDataList[j].matNo === data.matNo) {
                                if (xxDataList[j].matnr === data.matnr && xxDataList[j].batch === data.batch) {
                                    xxDataList.splice(j, 1);
                                    break;
                                }
@@ -281,36 +337,34 @@
                        });
                    }
                });
                // 数量修改
                // 明细数据修改
                table.on('edit(formSSXMTable)', function (obj) {
                    if (obj.field=='memo'){
                    let vle = obj.value;
                        for (var i=0;i<xxDataList.length;i++) {
                            if (xxDataList[i]["matNo"] === obj.data.matNo) {
                                xxDataList[i]["memo"] = vle;
                                break;
                            }
                        }
                    }else if (obj.field=='qty'){
                    let index = obj.tr.attr("data-index");
                    let data = xxDataList[index];
                    if (obj.field === 'anfme'){
                        let vle = Number(obj.value);
                        if (isNaN(vle)) {
                            layer.msg("请输入数字");
                            layer.msg("请输入数字", {icon: 2});
                            return false;
                        } else {
                            if (vle > 0) {
                                for (var i=0;i<xxDataList.length;i++) {
                                    if (xxDataList[i]["matNo"] === obj.data.matNo) {
                                        xxDataList[i]["qty"] = vle;
                                        break;
                                    }
                                }
                            } else {
                                layer.msg("数量必须大于零");
                            if (vle <= 0) {
                                layer.msg("数量必须大于零", {icon: 2});
                                // data[obj.field] = 0;
                                // insTbSSXM.reload({data: xxDataList});
                                return false;
                            }
                            if(obj.value < data.workQty){
                                layer.msg("输入数量不能小于作业中数量", {icon: 2});
                                // data[obj.field] = 0;
                                // insTbSSXM.reload({data: xxDataList});
                                return false;
                            }
                        }
                    }
                    data[obj.field] = obj.value;
                    insTbSSXM.reload({data: xxDataList});
                });
                //
                $('#matAddBtnComment').click(function () {
                    showEditModel2();
                });
@@ -320,51 +374,34 @@
                    admin.open({
                        type: 1,
                        offset: '150px',
                        area: '480px',
                        area: '680px',
                        title: (exp ? '修改' : '添加') + '明细',
                        content: $('#matEditDialog').html(),
                        success: function (layero, dIndex) {
                            $(layero).children('.layui-layer-content').css('overflow', 'visible');
                            // 回显数据
                            form.val('matEditForm', exp);
                            // 表单提交事件
                            form.on('submit(matEditSubmit)', function (data) {
                                var existMats = [];
                                xxDataList.forEach(function(elem) {
                                    existMats.push(elem.matNo);
                                });
                                var selectList = matXmSelect.getValue();
                                for (var i = 0; i<selectList.length; i++) {
                                    var item = selectList[i];
                                    if (existMats.indexOf(item.value) === -1) {
                                        // 查询物料详情
                                        $.ajax({
                                            url: baseUrl+"/matCode/"+item.value+"/auth",
                                            headers: {'token': localStorage.getItem('token')},
                                            method: 'GET',
                                            async: false,
                                            success: function (res) {
                                                if (res.code === 200){
                                                    var mat = res.data;
                                                    xxDataList.push({
                                                        matNo: mat.matNo,
                                                        matName: mat.matName,
                                                        color:mat.color,
                                                        size:mat.size,
                                                        specs:mat.specs,
                                                        memo: mat.memo,
                                                        unit: mat.unit,
                                                        qty: 0.0
                                                    });
                                                    insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
                                                } else if (res.code === 403){
                                                    top.location.href = baseUrl+"/";
                                                }else {
                                                    layer.msg(res.msg, {icon: 2})
                                                }
                                let selectList = matXmSelect.getValue();
                                for (let i = 0; i<selectList.length; i++) {
                                    let item = selectList[i];
                                    // 查询物料详情
                                    $.ajax({
                                        url: baseUrl+"/mat/covert/"+item.value+"/auth",
                                        headers: {'token': localStorage.getItem('token')},
                                        method: 'GET',
                                        async: false,
                                        success: function (res) {
                                            if (res.code === 200){
                                                xxDataList.push(res.data);
                                                insTbSSXM.reload({data: xxDataList, page: {curr: 1}});
                                            } else if (res.code === 403){
                                                top.location.href = baseUrl+"/";
                                            }else {
                                                layer.msg(res.msg, {icon: 2})
                                            }
                                        })
                                    }
                                        }
                                    })
                                }
                                layer.close(dIndex);
                                return false;
@@ -410,26 +447,28 @@
    }
    // 删除单据
    function doDel(billNo) {
    function doDel(orderId) {
        layer.confirm('确定要删除吗?', {
            shade: .1,
            skin: 'layui-layer-admin'
        }, function (i) {
            layer.close(i);
            layer.load(2);
            $.ajax({
                url: baseUrl+"/waitMatin/delete/auth",
                url: baseUrl+"/order/delete/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {
                    billNo: billNo
                    orderId: orderId
                },
                // contentType:'application/json;charset=UTF-8',
                method: 'POST',
                success: function (res) {
                    layer.closeAll('loading');
                    if (res.code === 200){
                        insTb.reload({page: {curr: 1}});
                        if (insTbCount === 0) {
                            insTb.reload({page: {curr: 1}});
                        } else {
                            $(".layui-laypage-btn")[0].click();
                        }
                        layer.msg(res.msg, {icon: 1});
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
@@ -441,6 +480,107 @@
        });
    }
    // 修改订单状态
    function doModify(orderId, orderNo, settle) {
        layer.confirm('确定要手动完结吗?', {
            shade: .1,
            skin: 'layui-layer-admin'
        }, function (i) {
            layer.close(i);
            layer.load(2);
            console.log(orderId);
            console.log(settle);
            $.ajax({
                url: baseUrl+"/order/update/auth",
                headers: {'token': localStorage.getItem('token')},
                data: {
                    id: orderId,
                    orderNo: orderNo,
                    settle: settle
                },
                method: 'POST',
                success: function (res) {
                    layer.closeAll('loading');
                    if (res.code === 200){
                        if (insTbCount === 0) {
                            insTb.reload({page: {curr: 1}});
                        } else {
                            $(".layui-laypage-btn")[0].click();
                        }
                        layer.msg(res.msg, {icon: 1});
                    } else if (res.code === 403){
                        top.location.href = baseUrl+"/";
                    }else {
                        layer.msg(res.msg, {icon: 2});
                    }
                }
            })
        });
    }
    // 任务追溯
    function showWrkTrace(orderId) {
        let loadIndex = layer.msg('请求中...', {icon: 16, shade: 0.01, time: false});
        $.ajax({
            url: baseUrl+"/order/wrk/trace/auth",
            headers: {'token': localStorage.getItem('token')},
            data: {
                orderId: orderId
            },
            method: 'POST',
            success: function (res) {
                layer.close(loadIndex);
                if (res.code === 200){
                    laytpl(wrkTraceDialog.innerHTML).render(res.data, function (html) {
                        admin.open({
                            type: 1,
                            title: '任务追溯',
                            area: ['800px', '450px'],
                            shadeClose: true,
                            content: html,
                            success: function (layero, dIndex) {
                                $(layero).children('.layui-layer-content').css('overflow', 'visible');
                                /** 统计图表 */
                                var traceCharts = echarts.init(document.getElementById('wrkTraceCharts'));
                                var traceOptions = {
                                    title: {
                                        text: '总量/作业/完成', x: 'center', y: '38%',
                                        textStyle: {fontSize: 18, color: '#262626', fontWeight: 'normal'},
                                        subtextStyle: {fontSize: 36, color: '#10B4E8'},
                                        itemGap: 20
                                    },
                                    color: ['#10B4E8', '#E0E0E0', '#FF0000'],
                                    tooltip: {trigger: 'item'},
                                    series: [{name: '数量', type: 'pie', radius: ['75%', '80%'], label: {normal: {show: false}}}]
                                };
                                traceCharts.setOption(traceOptions);
                                // 赋值
                                traceCharts.setOption({
                                    title: {
                                        subtext: res.data.totalQty+"/"+res.data.wrkQty+"/"+res.data.endQty
                                    },
                                    series: [
                                        {
                                            data: [
                                                {name: '已作业', value: res.data.wrkQty},
                                                {name: '未作业', value: res.data.totalQty-res.data.wrkQty-res.data.lackQty},
                                                {name: '库存不足', value: res.data.lackQty},
                                            ]
                                        }
                                    ]
                                });
                            }
                        });
                    });
                } else if (res.code === 403){
                    top.location.href = baseUrl+"/";
                }else {
                    layer.msg(res.msg, {icon: 2});
                }
            }
        })
    }
    layDate.render({
        elem: '.layui-laydate-range'
        ,type: 'datetime'