WebTM/views/Éú²ú¹ÜÀí/Ç·ÁÏÔËËã/JIT_MaterialLevelShorAnalysisDetailReport.html
@@ -35,44 +35,17 @@
                                        <span>更多</span>
                                    </div>
                                </div>
                                <!--<div class="layui-inline" style="display:none">
                <label class="layui-form-label" style="width: 85px;">组织</label>
                <div class="layui-input-block" style="margin-left: 120px; width: 185px;">
                    <select name="HORGID" id="HORGID" lay-verify="HORGID">-->
                                <!--动态渲染组织-->
                                <!--</select>
                </div>
            </div>-->
                                <!--<div class="layui-inline">
                <label class="layui-form-label" style="width: 85px;padding: 9px 18px;">生产车间</label>
                <div class="layui-input-block" style="margin-left: 77px;">
                    <input type="hidden" class="layui-input" lay-verify="HWorkShopID" name="HWorkShopID" id="HWorkShopID" value="0" style="background-color:#efefef4d;width: 60%;display: inline-block;" readonly>
                    <input type="text" class="layui-input" lay-verify="HWorkShopIDName" name="HWorkShopIDName" id="HWorkShopIDName" value="" style="background-color:#efefef4d;width: 60%;display: inline-block;">
                    <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnHWorkShopID" id="btnHWorkShopID" style="padding: 0 10px;float: right;margin-right: 3px;">
                        <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                    </button>
                </div>
            </div>
            <div class="layui-inline">
                <label class="layui-form-label" style="width: 85px;padding: 9px 18px;">产品编码</label>
                <div class="layui-input-block" style="margin-left: 77px;">
                    <input type="hidden" class="layui-input" lay-verify="HMATERIALID" name="HMATERIALID" id="HMATERIALID" value="0" style="background-color:#efefef4d;width: 60%;display: inline-block;" readonly>
                    <input type="text" class="layui-input" lay-verify="HMATERIALNAME" name="HMATERIALNAME" id="HMATERIALNAME" value="" style="background-color:#efefef4d;width: 60%;display: inline-block;" readonly>
                    <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnHMATERIALID" id="btnHMATERIALID" style="padding: 0 10px;float: right;margin-right: 3px;">
                        <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                    </button>
                </div>
            </div>-->
                                <!--<div class="layui-inline">
            <label class="layui-form-label" style="width: 85px;">齐套类型</label>
            <div class="layui-input-block" style="margin-left: 120px; width: 185px;">
                <select name="HType" id="HType" lay-verify="HType">
                    <option value="齐套" selected="selected">齐套</option>
                    <option value="未齐套">未齐套</option>-->
                                <!--<option value="采购订单">采购订单</option> æš‚时没有-->
                                <!--</select>
                </div>
            </div>-->
                                <div class="layui-inline">
                                    <label class="layui-form-label" style="width: 85px;padding: 9px 18px;">明细产品名称</label>
                                    <div class="layui-input-block" style="margin-left: 77px;">
                                        <input type="hidden" class="layui-input" lay-verify="HMATERIALID" name="HMATERIALID" id="HMATERIALID" value="0" style="background-color:#efefef4d;width: 60%;display: inline-block;" readonly>
                                        <input type="text" class="layui-input" lay-verify="HMATERIALNAME" name="HMATERIALNAME" id="HMATERIALNAME" value="" style="background-color:#efefef4d;width: 60%;display: inline-block;">
                                        <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnHMATERIALID" id="btnHMATERIALID" style="padding: 0 10px;float: right;margin-right: 3px;">
                                            <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                                        </button>
                                    </div>
                                </div>
                                <div class="layui-inline" style="display:none">
                                    <label class="layui-form-label" style="width: 85px;">欠料日期</label>
                                    <div class="layui-input-block" style="margin-left: 120px;">
@@ -85,30 +58,12 @@
                                        <input type="date" class="layui-input" lay-verify="HENDDATE" name="HENDDATE" id="HENDDATE" style="padding-left: 78px;">
                                    </div>
                                </div>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnSearch2" id="btnSearch2">库存查询</button>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnSearch" id="btnSearch">查询</button>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnReSearch" id="btnReSearch">重置</button>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnExport" id="btnExport">导出</button>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="bthHideColumn" id="bthHideColumn">列设置</button>
                                <!--<div class="layui-colla-content" style="padding: 0px; margin-left: 6%;">
                <div class="layui-row" style="margin-top:10px;">
                    <div class="layui-inline">
                        <label class="layui-form-label" style="width: 85px;padding: 9px 18px;">产品编码</label>
                        <div class="layui-input-block" style="margin-left: 77px;">
                            <input type="hidden" class="layui-input" lay-verify="HMATERIALID" name="HMATERIALID" id="HMATERIALID" value="0" style="background-color:#efefef4d;width: 60%;display: inline-block;" readonly>
                            <input type="text" class="layui-input" lay-verify="HMATERIALNAME" name="HMATERIALNAME" id="HMATERIALNAME" value="" style="background-color:#efefef4d;width: 60%;display: inline-block;" readonly>
                            <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnHMATERIALID" id="btnHMATERIALID" style="padding: 0 10px;float: right;margin-right: 3px;">
                                <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                            </button>
                        </div>
                    </div>
                    <div class="layui-inline">
                        <label class="layui-form-label" style="width: 85px;">生产订单号</label>
                        <div class="layui-input-block" style="margin-left: 120px;">
                            <input type="text" class="layui-input" name="HMOBILLNO" id="HMOBILLNO">
                        </div>
                    </div>
                </div>
            </div>-->
                            </div>
                        </div>
@@ -116,6 +71,7 @@
                            <ul class="layui-tab-title">
                                <li class="layui-this">下查</li>
                                <li>上查</li>
                                <li>即时库存明细</li>
                            </ul>
                            <div class="layui-tab-content" style="">
                                <div class="layui-tab-item layui-show">
@@ -124,7 +80,14 @@
                                <div class="layui-tab-item ">
                                    <table class="" id="mainTable2" lay-filter="mainTable2"></table>
                                </div>
                                <div class="layui-tab-item ">
                                    <table class="" id="mainTable3" lay-filter="mainTable3"></table>
                                    <script type="text/html" id="toolbarDemo">
                                        <div class="layui-btn-container" id="toolbarDemo_ButtonSet">
                                            <button type="button" class="layui-btn layui-btn-sm" lay-event="set_HideColumn" id="HideColumn"><i class="layui-icon layui-icon-form"></i>列设置</button>
                                        </div>
                                    </script>
                                </div>
                            </div>
                        </div>
@@ -164,8 +127,10 @@
            , treeTable = layui.treeTable;
        var sWhere = "";
        var option = [];
        var option3 = [];
        var ins;                        //用于导出excel
        var HModName = "JIT_MaterialLevelShorAnalysisDetailReport";
        var HModName2 = "Jit_MaterialLevelShorAnalysisDetailReport2"
        var HMaterID = 0;
        var HWorkShopID = 0;
        var HOrgID = 0;
@@ -181,10 +146,30 @@
        //#endregion
        //#region è§¦å‘事件:包括form.on(){}格式的所有点击事件、选择事件等
        //头工具栏事件
        table.on('toolbar(mainTable3)', function (obj) {
            switch (obj.event) {
                //列设置
                case 'set_HideColumn': get_HideColumnNoPage(HModName2, sessionStorage["HUserName"], option3, get_Display2);
                    break;
            };
        });
        //#region äº§å“ç¼–码
        form.on('submit(btnHMATERIALID)', function (data) {
            btnHMATERIALID();
        });
        //#endregion
        //#region é‡ç½®æŒ‰é’®
        form.on('submit(btnReSearch)', function (data) {
            set_ClearQuery();
        });
        //#endregion
        //#region åº“存明细查询按钮
        form.on('submit(btnSearch2)', function (data) {
            get_Display2();
        });
        //#endregion
@@ -212,7 +197,36 @@
        //#region åˆå§‹åŒ–界面
        function set_ClearBill() {
            //物料表格下拉搜索框
            tableSelect.render({
                elem: '#HMATERIALNAME',
                checkedKey: 'HItemID',
                searchKey: '物料代码,物料名称',
                sWhere: '',//table搜索sWhere条件
                table: {
                    url: GetWEBURL() + 'Gy_Material/page',
                    where: { user: sessionStorage["HMaker"], "Organization": sessionStorage["Organization"] },
                    cols: [[
                        { type: 'checkbox', fixed: 'left' },
                        { field: 'HItemID', title: 'HItemID' },
                        { field: '物料代码', title: '物料代码' },
                        { field: '物料名称', title: '物料名称' },
                    ]],
                    page: true,
                    limit: 5,
                    limits: [5]
                },
                done: function (elem, data) {
                    if (data != []) {
                        //获取数据
                        $("#HMATERIALID").val(data.data[0].HItemID);
                        $("#HMATERIALNAME").val(data.data[0].物料名称);
                        /*$("#HMATERIALNAME").blur();//单元格失去焦点*/
                        get_Display2();
                    }
                }
            })
            addSWhereByOpenType()
            //初始化表格
            set_InitGrid();
@@ -220,6 +234,8 @@
            DisPlay_HideColumn_GetPageSize(HModName, sessionStorage["HUserName"], option)
            //设置页码
            DisPlay_HideColumn_GetPageSize(HModName, sessionStorage["HUserName"], option2)
            //设置页码
            DisPlay_HideColumn_GetPageSize(HModName2, sessionStorage["HUserName"], option3)
            //快速过滤
            get_FastQuery();
        }
@@ -332,6 +348,21 @@
                    soulTable.render(this);
                }
            };
            option3 = {
                elem: '#mainTable3'
                , toolbar: '#toolbarDemo'
                , height: 'full-50'
                , page: true
                , cellMinWidth: 90
                , limit: 1000
                , limits: [50, 500, 1000, 2000]
                , totalRow: true
                , loading: false
                , cols: [columns]
                , done: function (res, curr, count) {
                    soulTable.render(this);
                }
            };
        }
        //#endregion
@@ -426,7 +457,7 @@
                                }
                            }
                        });
                        option.data = root;
                        option.data = sortByFirstValidDate(root);
                        //列设置
                        DisPlay_HideColumnForPlan(HModName, sessionStorage["HUserName"], option);
@@ -522,11 +553,129 @@
                                }
                            }
                        });
                        option2.data = root;
                        option2.data = sortByFirstValidDate(root);
                        //列设置
                        DisPlay_HideColumnForPlan(HModName, sessionStorage["HUserName"], option2);
                        ins = treeTable.render(option2);
                        layer.close(ajaxLoad);
                    } else {
                        layer.alert(data1.code + data1.Message, { icon: 5 });
                        layer.close(ajaxLoad);
                    }
                }, error: function () {
                    layer.alert("接口请求失败!", { icon: 5 });
                    layer.close(ajaxLoad);
                }
            });
        }
        // ç­›é€‰å‡½æ•°ï¼šæ£€æŸ¥å­—符串是否符合格式筛选日期
        function isValidDate(dateStr) {
            // æ­£åˆ™è¡¨è¾¾å¼éªŒè¯æ ¼å¼
            const formatRegex = /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
            if (!formatRegex.test(dateStr)) return false;
            // åˆ†å‰²å¹´æœˆæ—¥å¹¶è½¬æ¢ä¸ºæ•°å€¼
            const [year, month, day] = dateStr.split('-').map(Number);
            // åˆ›å»ºDate对象(月份从0开始)
            const date = new Date(year, month - 1, day);
            // æ£€æŸ¥æ—¥æœŸæ˜¯å¦æœ‰æ•ˆï¼ˆä¸Žè¾“入的年月日一致)
            return (
                date.getFullYear() === year &&
                date.getMonth() === month - 1 &&
                date.getDate() === day
            );
        }
        //以最早欠料为优先级排序
        function sortByFirstValidDate(arr) {
            // å‡è®¾æ‰€æœ‰å¯¹è±¡æ‹¥æœ‰ç›¸åŒçš„æ—¥æœŸé”®ï¼Œè¿™é‡Œä»¥ç¬¬ä¸€ä¸ªå¯¹è±¡çš„键为基准
            const dateKeys = Object.keys(arr[0] || {})
                .filter(key => /^\d{4}-\d{2}-\d{2}$/.test(key))
                .sort((a, b) => a.localeCompare(b)); // é¢„先排序所有日期键
            // è¾…助函数:找到对象中第一个有效值的日期
            const getFirstValidDate = (obj) => {
                for (const key of dateKeys) {
                    const value = obj[key];
                    if (typeof value === 'number' && value > 0) {
                        return key; // è¿”回第一个有效日期
                    }
                }
                return Infinity; // æ— æœ‰æ•ˆæ—¥æœŸæ—¶æŽ’最后
            };
            // æŽ’序逻辑
            return arr.slice().sort((a, b) => {
                const aDate = getFirstValidDate(a);
                const bDate = getFirstValidDate(b);
                return aDate.localeCompare(bDate);
            });
        }
        //#endregion
        //#region æŸ¥è¯¢2
        function get_Display2() {
            var ajaxLoad = layer.load();
            var HMaterID2 = $("#HMATERIALID").val();
            if (HMaterID2 == 0) {
                HMaterID2 = HMaterID;
            }
            //明细列表
            var sql = "select * from h_v_Jit_MaterialLevelShorAnalysisDetailReport_StockOccupyingAnalysis where  å­é¡¹ç‰©æ–™ID = " + HMaterID2 + " order by å±‚级,日计划日期";
            $.ajax({
                url: GetWEBURL() + '/Gy_SOPBillList/WindowPrintList',
                type: "GET",
                async: false,
                data: { "sWhere": sql },
                success: function (data1) {
                    if (data1.count == 1) {
                        var data = [];//列字段数据
                        var col = [];
                        var totalArray = [];
                        var titleData = [];
                        //给空的数组赋值
                        for (var key in data1.list) {//循序遍历数组
                            data.push({ "id": data1.list[key].ColmCols, "name": data1.list[key].ColmCols, "Type": data1.list[key].ColmType });//从每个对象中提取数据
                        }
                        //在列表左边添加勾选框
                        col.push({ type: 'checkbox', fixed: 'left', totalRowText: '合计' });
                        for (var i = 0; i < data.length; i++) {//遍历data数组重的数据
                            // if (data[i].name == 'HInterID' || data[i].name == 'HBillType' || data[i].name == 'hmainid') {
                            if ($.inArray(data[i].name, titleData) > -1) {//检查data【i】.name是否在数组中  //计算列
                                col.push({ field: data[i].id, title: data[i].name, align: 'center', hide: true }); //隐藏id列
                            }
                            else if ($.inArray(data[i].name, totalArray) > -1) { //计算列
                                col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, totalRow: true, width: 120, filter: true });
                            } else if (data[i].name == '是否匹配到订单') {
                                col.push({ field: '是否匹配到订单', title: '是否匹配到订单', sort: true, filter: true, templet: function (d) { return d.是否匹配到订单 ? '否' : '是'; } });
                            }
                            else if (data[i].name == '是否匹配到要料计划信息') {
                                col.push({ field: '是否匹配到要料计划信息', title: '是否匹配到要料计划信息', sort: true, filter: true, templet: function (d) { return d.是否匹配到要料计划信息 ? '否' : '是'; } });
                            } else if (isValidDate(data[i].name)) {
                                col.push({ field: data[i].name, title: Format(data[i].name, 'MM.dd'), width: 70, totalRow: true, filter: true })
                            }
                            else {
                                switch (data[i].Type) {
                                    //int
                                    case 'DateTime':
                                        col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, filter: true, templet: "<div>{{d." + (data[i].name == "行关闭日期" ? "行关闭人" : data[i].name) + " ==''?'':layui.util.toDateString(d." + data[i].name + ", 'yyyy-MM-dd HH:mm:ss')}}</div>", width: 200 });
                                        break;
                                    default:
                                        col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, width: 200, filter: true });
                                }
                            }
                        }
                        option3.cols = [col];
                        option3.data = data1.data;
                        //列设置
                        DisPlay_HideColumn(HModName2, sessionStorage["HUserName"], option3,[]);
                        table.render(option3);
                        layer.close(ajaxLoad);
                    } else {
                        layer.alert(data1.code + data1.Message, { icon: 5 });
@@ -568,6 +717,8 @@
            var data = HExportData;
            if (tableId == "mainTable2") {
                data = HExportData2;
            } else if (tableId == "mainTable3") {
                data = option3.data;
            }
            
            data.forEach((item) => {
@@ -615,7 +766,7 @@
           /* $("#HORGID").val(sessionStorage["OrganizationID"]);//组织*/
            //$("#HBEGINDATE").val(Format(new Date(new Date()), "yyyy-MM-dd"));//欠料日期
            //$("#HENDDATE").val(Format(new Date($("#HBEGINDATE").val()).setDate(new Date($("#HBEGINDATE").val()).getDate() + 30), "yyyy-MM-dd"));//至
            //$("#HMATERIALID").val("");//物料/产品
            $("#HMATERIALID").val("0");//物料/产品
            //$("#HMATERIALNAME").val("");
            //$("#HWorkShopID").val("");
            //$("#HWorkShopIDName").val("");
@@ -623,7 +774,30 @@
            sWhere = "";
        }
        //#endregion
        //物料列表
        function btnHMATERIALID() {
            layer.open({
                type: 2 //类型
                , skin: 'layui-layer-rim'//加上边框
                , area: ['90%', '90%']//大小
                , title: '物料列表'//标题
                , shift: 2//弹出动画
                , content: ['../../基础资料/公用基础资料/Gy_Material.html', 'yes']
                , btn: ['确定', '取消']
                , btn1: function (index, layero) {//按钮【按钮一】的回调
                    var iframeWindow = window['layui-layer-iframe' + index]  //获取弹框页面
                    var checkStatus = iframeWindow.layui.table.checkStatus('mainTable');//获取table的elem:"#test"
                    if (checkStatus.data.length === 0) {
                        return layer.msg('请选择数据');
                    }
                    //获取数据
                    $("#HMATERIALID").val(checkStatus.data[0].HItemID);
                    $("#HMATERIALNAME").val(checkStatus.data[0].物料名称);
                    layer.close(index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的
                }
                , btn2: function (index, layero) { }
            })
        }
        //#region èŽ·å–å‚æ•°
        function getUrlVars() {
            var vars = [], hash;