ShipmentHeader.js 16.5 KB
layui.config({
    base: "/js/"
}).use(['form', 'element', 'vue', 'layer', 'laydate', 'jquery', 'table', 'hhweb', 'utils', 'Universal', 'JsBarcode', 'jqprint'], function () {
    var form = layui.form,
        layer = layui.layer,
        element = layui.element,
        laydate = layui.laydate,
        $ = layui.jquery,
        table = layui.table,
        Universal = layui.Universal;

    var JsBarcode = layui.JsBarcode;
    var jqprint = layui.jqprint;
    var AreaName = 'shipment';
    var TableName = 'ShipmentHeader';

    var barcodeStyle = {
        format: "CODE128",//选择要使用的条形码类型
        width: 1,//设置条之间的宽度
        height: 45,//高度
        displayValue: true,//是否在条形码下方显示文字
        // text:"456",//覆盖显示的文本
        // fontOptions:"bold italic",//使文字加粗体或变斜体
        font: "monospace",//设置文本的字体fantasy
        textAlign: "center",//设置文本的水平对齐方式
        textPosition: "bottom",//设置文本的垂直位置
        textMargin: 1,//设置条形码和文本之间的间距
        fontSize: 12,//设置文本的大小
        background: "#ffffff",//设置条形码的背景
        lineColor: "#000000",//设置条和文本的颜色。
        margin: 1//设置条形码周围的空白边距
    };

    var vm = new Vue({
        el: '#modifyForm'
    });

    var vmq = new Vue({
        el: '#panelSearch',
        data: {
        }
    });

    //var mainList = {
    //    NoData: function () {
    //        return "<div id='background' style='width:100%;height:100%;background-image:url(../../images/NoData.png);background-repeat:no-repeat;background-size:cover;'>.</div>"
    //    },
    //    mainList: function () {
    //        table.reload('mainList', {
    //            url: "/" + AreaName + "/" + TableName + "/Load"
    //            , method: "post"
    //            , text: { none: this.NoData() }
    //        });
    //    }
    //};

    var mainList = {
        NoData: function () {
            return "<div id='background' style='width:100%;height:100%;background-image:url(../../imagesData.png);background-repeat:no-repeat;background-size:cover;'>.</div>"
        },

        mainList: function () {
            table.reload('mainList', {
                url: "/" + AreaName + "/" + TableName + "/Load"
                , method: "post"
                , text: { none: this.NoData() }
                , done: function (res, curr, count) {
                    if (curr > 1 && res.data.length == 0) {
                        table.reload('mainList', {
                            page: { curr: 1 }// 修改页码
                            , text: { none: mainList.NoData() }
                        });
                    }
                }
            });
        }
    };

    //编辑
    var EditInfo = function (tabledata) {
        data = tabledata;
        vm.$set('$data', data);
        //表单修改时填充需修改的数据
        var list = {};
        $('.ClearSelector_' + TableName).each(function () {
            var selDom = ($(this));
            if ($(selDom)[0].name.search("q") == -1) {
                list[$(selDom)[0].name] = data[$(selDom)[0].name] + "";
            }
        });
        //表单修改时填充需修改的数据
        form.val('modifyForm', list);
    };

    var selfbtn = {
        //自定义按钮

        btnPrint: function () {
            var checkStatus = table.checkStatus('mainList');
            var count = checkStatus.data.length;
            var myDate = new Date();
            if (count == 1) {
                var data = checkStatus.data[0];
                $("#PTime").text(myDate.toLocaleString());
                $("#PCodeBar").text(JsBarcode("#PCodeBar", data.Code, barcodeStyle));
                $("#PCode").text(data.Code);
                $("#PSourceCode").text(data.SourceCode);
                $("#PSupplierCode").text(data.SupplierCode);
                $("#PTotalQty").text(data.TotalQty);
                $("#PTotalLines").text(data.TotalLines);

                $.ajax({
                    url: "/shipment/ShipmentHeader/PrintShipmentDetailInfo",
                    type: "POST",
                    data: { sno: checkStatus.data[0].Code },
                    dataType: "json",
                    success: function (result) {
                        if (result) {
                            table.render({
                                elem: '#PrintDetailData'
                                , cols: [[
                                    { field: 'MaterialCode', title: '物料编码', width: 140, align: 'left' },
                                    { field: 'Name', title: '物料名称', width: 170, align: 'left', style: 'font-size:11px' },
                                    { field: 'Batch', title: '批次', width: 100, align: 'left' },
                                    { field: 'Lot', title: '批号', width: 80, align: 'center' },
                                    { field: 'Qty', title: '数量', width: 80, align: 'center' },
                                    { field: 'PBarCode', title: '物料条码', width: 153, unresize: true, align: 'left', templet: '<div><img id="MaterialCodeBarcode{{ d.LAY_TABLE_INDEX }}"></div>' }
                                ]]
                                , width: 730
                                , page: false
                                , limit: result.data.length
                                , data: result.data
                            });

                            $.each(result.data, function (i, value) {
                                JsBarcode("#MaterialCodeBarcode" + (value.LAY_TABLE_INDEX), value.MaterialCode, barcodeStyle);
                            });

                            //弹窗打印
                            layer.open({
                                type: 1,
                                //  skin: 'layui-layer-molv',
                                btnAlign: 'c',
                                moveType: 1, //拖拽模式,0或者1
                                title: "出库单据打印", //不显示标题
                                area: ['750px', '700px'], //宽高
                                content: $('#printForm'), //捕获的元素
                                scrollbar: true,
                                btn: ['打印', '关闭'],
                                yes: function (index, layero) {
                                    $('#printForm').jqprint();
                                    //  layer.close(index);
                                },
                                cancel: function (index) {
                                    layer.close(index);
                                }
                            });
                        } else {
                            layer.alert("打印数据加载失败", { icon: 5, shadeClose: true, title: "错误信息" });
                        }
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        layer.alert(errorThrown, { icon: 2, title: '提示' });
                    }
                });
            }
            else
                layer.alert("请选择一条数据", { icon: 5, shadeClose: true, title: "错误信息" });
        },
        btnShipmentCheck: function () {
            var checkStatus = table.checkStatus('mainList');
            var count = checkStatus.data.length;
            var myDate = new Date();
            if (count == 1) {
                var data = checkStatus.data[0];

                var index = layer.open({
                    type: 2,
                    title: "复核确认",
                    area: ['100%', '70%'],
                    content: "/shipment/ShipmentCheck/?shipmentCode=" + data.Code,
                    maxmin: true,
                });
                layer.full(index);
            }
            else
                layer.alert("请选择一条数据进行复核", { icon: 5, shadeClose: true, title: "错误信息" });
        }
        , btnDivide: function () {
            var checkStatus = table.checkStatus('mainList');
            var count = checkStatus.data.length;//选中的行数
            var data = checkStatus.data; //获取选中行的数据
            if (count == 1) {
                if (data[0].LastStatus >= 250) {
                    layer.alert("此单据已经分配完成,不可以再次分配!", { icon: 5, shadeClose: true, title: "错误信息" });
                } else {
                    var index = layer.open({
                        type: 2
                        , title: ['拣货分配', 'font-size:15px;color:dodgerblue;font-weight:bold']
                        , area: ['1000px', '600px']
                        , content: '/shipment/ShipmentContainerHeader/Index?ShipmentCode=' + data[0].Code
                        , maxmin: true
                    });
                    layer.full(index);
                }
            }
            else {
                layer.alert("手动分配一次只能分配一个单据,请选中一条需要分配的单据!", { icon: 5, shadeClose: true, title: "错误信息" });
            }
        }
        , btnAutoDivide: function () {
            var checkStatus = table.checkStatus('mainList');
            var count = checkStatus.data.length;//选中的行数
            if (count > 0) {
                var data = checkStatus.data; //获取选中行的数据
                layer.confirm('确定系统自动分配此单据?', {
                    btn: ['确定', '取消']
                }, function () {
                        //自动分配数据写入任务表
                        $.ajax({
                            url: "/shipment/ShipmentHeader/AutoDivideContainer",
                            type: "post",
                            data: { shipmenthdlist: data},
                            dataType: "json",
                           // async: false,
                            success: function (result) {
                                if (result.code == 200) {
                                    mainList.mainList(vm);
                                    layer.msg(result.msg, { icon: 1, shade: 0.4, time: 2000 });
                                } else {
                                    layer.alert('分配失败:' + result.msg, { icon: 5, shadeClose: true, title: "错误信息" });
                                }
                            },
                            error: function (error) {
                                layer.alert(error.responseText, { icon: 2, title: '提示' });
                            }
                        })

                    }, function () {
                        layer.close();
                });
            }
            else {
                layer.alert("请最少选中一条需要分配的单据!", { icon: 5, shadeClose: true, title: "错误信息" });
            }
        }, DomConfig_ShipmentDetail: function (AddOrEditOrDelete, ds) {
            if (AddOrEditOrDelete in { Add: null, Edit: null, Delete: null }) {
                if (ds.LastStatus >= 250) {
                    layer.alert("此主单据已经分配完成,不可以新增、修改、删除明细!", { icon: 5, shadeClose: true, title: "错误信息" });
                    return false;
                } else {
                    return true;
                }
            }
        }

    };

    var selector = {
        'WarehouseType': {
            SelType: "FromDict",
            SelFrom: "warehouseType",
            SelModel: "WarehouseType",
            SelLabel: "DictLabel",
            SelValue: "DictValue",
            Dom: [$("[name='WarehouseType']"), $("[name='qWarehouseType']")]
        },
        'Type': {
            SelType: "FromDict",
            SelFrom: "shipmentType",
            SelModel: "Type",
            SelLabel: "DictLabel",
            SelValue: "DictValue",
            Dom: [$("[name='Type']"), $("[name='qType']")]
        },
        'FirstStatus': {
            SelType: "FromDict",
            SelFrom: "shipmentHeaderStatus",
            SelModel: "FirstStatus",
            SelLabel: "DictLabel",
            SelValue: "DictValue",
            Dom: [$("[name='FirstStatus']"), $("[name='qFirstStatus']")]
        },
        'LastStatus': {
            SelType: "FromDict",
            SelFrom: "shipmentHeaderStatus",
            SelModel: "LastStatus",
            SelLabel: "DictLabel",
            SelValue: "DictValue",
            Dom: [$("[name='LastStatus']"), $("[name='qLastStatus']")]
        },
        'UploadStatus': {
            SelType: "FromDict",
            SelFrom: "uploadStatus",
            SelModel: "UploadStatus",
            SelLabel: "DictLabel",
            SelValue: "DictValue",
            Dom: [$("[name='UploadStatus']"), $("[name='qUploadStatus']")]
        },
        'InventoryStatus': {
            SelType: "FromDict",
            SelFrom: "inventoryStatus",
            SelModel: "InventoryStatus",
            SelLabel: "DictLabel",
            SelValue: "DictValue",
            Dom: [$("[name='InventoryStatus']"), $("[name='qInventoryStatus']")]
        },
        'Status': {
            SelType: "FromDict",
            SelFrom: "shipmentHeaderStatus",
            SelModel: "Status",
            SelLabel: "DictLabel",
            SelValue: "DictValue"
        },
        'ShipTo': {
            SelType: "FromUrl",
            SelFrom: "/general/Customer/Load",
            SelModel: "ShipTo",
            SelLabel: "Name",
            SelValue: "Code",
            Dom: [$("[name='ShipTo']"), $("[name='qShipTo']")]
        },
        'Priority': {
            SelType: "FromDict",
            SelFrom: "priority",
            SelModel: "Priority",
            SelLabel: "DictLabel",
            SelValue: "DictValue",
            Dom: [$("[name='Priority']"), $("[name='qPriority']")]
        }
    };


    //子表逻辑
    var All = new Array();
    var AreaNameDtlShipmentDetail = 'shipment';
    var TableNameDtlShipmentDetail = 'ShipmentDetail';
    //{子表字段:主表字段}
    var NameDtlShipmentDetail = { ShipmentCode: 'Code', ShipmentId: 'Id' , LastStatus: 'LastStatus' };
    var vmDtlShipmentDetail = new Vue({
        el: '#modifyFormDtl_' + TableNameDtlShipmentDetail
    });
    var vmqDtlShipmentDetail = new Vue({
        data: { ShipmentCode: '' }//, LastStatus: 'LastStatus' }
    });
    //编辑
    var EditInfoDtlShipmentDetail = function (tabledata) {
        data = tabledata;
        vmDtlShipmentDetail.$set('$data', tabledata);
        var list = {};
        $('.ClearSelector_' + TableNameDtlShipmentDetail).each(function () {
            var selDom = ($(this));
            if ($(selDom)[0].name.search("q") == -1) {
                list[$(selDom)[0].name] = data[$(selDom)[0].name] + "";
            }
        });
        //表单修改时填充需修改的数据
        form.val('modifyFormDtl_' + TableNameDtlShipmentDetail, list);
    };
    All.push({ AreaNameDtl: AreaNameDtlShipmentDetail, TableNameDtl: TableNameDtlShipmentDetail, vmqDtl: vmqDtlShipmentDetail, vmDtl: vmDtlShipmentDetail, EditInfoDtl: EditInfoDtlShipmentDetail, NameDtl: NameDtlShipmentDetail });


    //子表逻辑
    var AreaNameDtlCustomer = 'general';
    var TableNameDtlCustomer = 'Customer';
    //{子表字段:主表字段}
    var NameDtlCustomer = { Code: 'ShipTo' };
    var vmDtlCustomer = new Vue({
        el: '#modifyFormDtl_' + TableNameDtlCustomer
    });
    var vmqDtlSupplier = new Vue({
        data: { SourceCode: '', ReceiptCode: '' }
    });
    //编辑
    var EditInfoDtlSupplier = function (tabledata) {
        data = tabledata;
        vmDtlCustomer.$set('$data', tabledata);
        var list = {};
        $('.ClearSelector_' + TableNameDtlCustomer).each(function () {
            var selDom = ($(this));
            if ($(selDom)[0].name.search("q") == -1) {
                list[$(selDom)[0].name] = data[$(selDom)[0].name] + "";
            }
        });
        //表单修改时填充需修改的数据
        form.val('modifyFormDtl_' + TableNameDtlCustomer, list);
    };

    var vml = new Array({
        vm: vm,
        vmq: vmq,
        vmDtlShipmentDetail: vmDtlShipmentDetail,
        vmDtlCustomer: vmDtlCustomer
    });

    Universal.BindSelector($, form, vml, selector);
    Universal.mmain(AreaName, TableName, table, layer, element, laydate, $, vm, vmq, EditInfo, selfbtn, mainList, form);
    All.push({ AreaNameDtl: AreaNameDtlCustomer, TableNameDtl: TableNameDtlCustomer, vmqDtl: vmqDtlSupplier, vmDtl: vmDtlCustomer, EditInfoDtl: EditInfoDtlSupplier, NameDtl: NameDtlCustomer });
    Universal.mainDtl(table, layer, element, $, selfbtn, All, form);
});