chenhaozhe
2025-05-30 f025d969dcf4e664ef8f7f33ee2060e113c3adff
WebTM/views/ÖÊÁ¿¹ÜÀí/ÖÊÁ¿±¨±í/QC_InspectionFormReport.html
@@ -50,7 +50,7 @@
                                <div class="layui-inline">
                                    <label class="layui-form-label">部门</label>
                                    <div class="layui-input-block">
                                        <select name="HDeptName" id="HDeptName" lay-verify="required" lay-search class="layui-input">
                                        <select name="HDeptName" id="HDeptName" lay-verify="required" lay-filter="HDeptName" lay-search class="layui-input">
                                            <!--动态渲染车间-->
                                        </select>
                                    </div>
@@ -96,7 +96,7 @@
                                        <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="HUpLoad" id="HUpLoad">
                                                <input type="text" class="layui-input" name="HUpLimit" id="HUpLimit" style="background-color:#efefef4d;" readonly>
                                            </div>
                                        </div>
                                    </div>
@@ -111,66 +111,121 @@
                                                </button>
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <label class="layui-form-label" style="width: 85px;">测量单位</label>
                                        <div class="layui-inline" id="xh">
                                            <label class="layui-form-label" style="width: 85px;">穴号</label>
                                            <div class="layui-input-block" style="margin-left: 120px;">
                                                <input type="text" class="layui-input" id="HUnitName">
                                                <input type="text" class="layui-input" id="HMouldNum" name="HMouldNum">
                                            </div>
                                        </div>
                                        <div class="layui-inline" id="sczz" style="display:none">
                                            <label class="layui-form-label" style="width: 85px;">生产资源</label>
                                            <div class="layui-input-block" style="margin-left: 120px;">
                                                <input type="hidden" class="layui-input" lay-verify="HSourceID" name="HSourceID" id="HSourceID" value="0">
                                                <input type="text" class="layui-input" name="HSourceName" id="HSourceName" style="background-color:#efefef4d;width: 60%;display: inline-block;" readonly>
                                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnHSourceID" id="btnHSourceID" style="padding: 0 10px; 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" id="HStandard">
                                                <input type="text" class="layui-input" name="HTargetVal" id="HTargetVal">
                                            </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" id="HDownLoad">
                                                <input type="text" class="layui-input" name="HDownLimit" id="HDownLimit" style="background-color:#efefef4d;" readonly>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="layui-row" style="margin: 10px 0 10px;display:none;">
                                    <div class="layui-row" style="margin-top:5px;">
                                        <div class="layui-inline">
                                            <label class="layui-form-label">过滤</label>
                                            <div class="layui-input-block">
                                                <select name="ColName" id="ColName" lay-filter="ColName" style="width:190px;">
                                                </select>
                                            <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="HControlUpperLimit_X" id="HControlUpperLimit_X">
                                            </div>
                                        </div>
                                        <div class="layui-inline" style="margin-left: 48px;">
                                            <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="HControlLowerLimit_X" id="HControlLowerLimit_X">
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <select name="Comparator" id="Comparator" lay-filter="Comparator" style="width:190px;">
                                                <option value="0" selected="selected"></option>
                                                <option value="=">=</option>
                                                <option value=">=">>=</option>
                                                <option value=">">></option>
                                                <option value="<="><=</option>
                                                <option value="<"><</option>
                                                <option value="<>"><></option>
                                                <option value="7">包含</option>
                                                <option value="8">左包含</option>
                                                <option value="9">右包含</option>
                                                <option value="10">不包含</option>
                                            </select>
                                            <label class="layui-form-label" style="width: 85px;">X中心线</label>
                                            <div class="layui-input-block" style="margin-left: 120px;">
                                                <input type="text" class="layui-input" name="HCenterline_X" id="HCenterline_X">
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <input type="text" class="layui-input" value="" name="ColContent" id="ColContent">
                                            <label class="layui-form-label" style="width: 85px;">PPK</label>
                                            <div class="layui-input-block" style="margin-left: 120px;">
                                                <input type="text" class="layui-input" name="HPPK" id="HPPK" style="background-color:#efefef4d;" readonly>
                                            </div>
                                        </div>
                                    </div>
                                    <div class="layui-row" style="margin-top:5px;">
                                        <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="HControlUpperLimit_S" id="HControlUpperLimit_S">
                                            </div>
                                        </div>
                                        <div class="layui-inline" style="margin-left: 48px;">
                                            <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="HControlLowerLimit_S" id="HControlLowerLimit_S">
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <label class="layui-form-label" style="width: 85px;">S中心线</label>
                                            <div class="layui-input-block" style="margin-left: 120px;">
                                                <input type="text" class="layui-input" name="HCenterline_S" id="HCenterline_S">
                                            </div>
                                        </div>
                                        <div class="layui-inline">
                                            <label class="layui-form-label" style="width: 85px;">C P K</label>
                                            <div class="layui-input-block" style="margin-left: 120px;">
                                                <input type="text" class="layui-input" id="HCPK" name="HCPK" style="background-color:#efefef4d;" readonly>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div>
                        <div class="layui-tab layui-tab-card">
                            <table class="" id="mainTable" lay-filter="mainTable"></table>
                            <div id="histogram_Avg" style="width:99.5%;height:calc(35vh);margin-top:5px;">
                            <ul class="layui-tab-title">
                                <li class="layui-this">x̄管制图</li>
                                <li>R管制图</li>
                                <li>检测值</li>
                            </ul>
                            <div class="layui-tab-content">
                                <div class="layui-tab-item layui-show">
                                    <!--x̄管制图-->
                                    <div id="histogram_Avg" style="width: 99.5%; height: calc(100vh);">
                            </div>
                            <div id="histogram_Diff" style="width:99.5%;height:calc(35vh);margin-top:5px;">
                                    </div>
                                </div>
                                <div class="layui-tab-item layui-show">
                                    <!--R管制图-->
                                    <div id="histogram_Diff" style="width: 99.5%; height: calc(100vh);">
                                    </div>
                                </div>
                                <div class="layui-tab-item layui-show">
                                    <!--检测值-->
                                    <div id="histogram_SJZ" style="width: 99.5%; height: calc(100vh);">
                                    </div>
                                </div>
                            </div>
                        </div>
                        <script type="text/html" id="toolbarDemo">
                            <div class="layui-btn-container">
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="btn_Export" id="btn_Export"><i class="layui-icon layui-icon-export"></i>导出</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="btn-exit"><i class="layui-icon layui-icon-return"></i>退出</button>
                                <button type="button" class="layui-btn layui-btn-sm" lay-event="HideColumn"><i class="layui-icon layui-icon-form"></i>隐藏列设置</button>
                            </div>
@@ -186,7 +241,7 @@
            base: '../../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index', //主入口模块
        }).use(['index', 'form', 'table', 'element', 'laypage', 'laydate','soulTable'], function () {
        }).use(['index', 'form', 'table', 'element', 'laypage', 'laydate', 'soulTable'], function () {
            //#region å…¬å…±å˜é‡
            var $ = layui.$
@@ -202,7 +257,12 @@
            //查询条件
            var sWhere = "";
            var option = [];
            var ins;                //用于导出excel
            var HModName = "QC_InspectionFormReport";
            var optionAVG = [];
            var optionS = [];
            var optionSJZ = [];
            var HQCCheckNum = [];
            //#endregion
            //#region è¿›å…¥é¡µé¢æ—¢åŠ è½½
@@ -212,7 +272,7 @@
            //#endregion
            //#region ç‚¹å‡»äº‹ä»¶åŒ…括on form事件等
            //头工具栏事件
@@ -225,6 +285,9 @@
                    case 'HideColumn':
                        get_HideColumn();
                        break;
                    //导出按钮
                    case 'btn_Export': btn_Export();
                        break;
                };
            });
@@ -232,13 +295,20 @@
            form.on('submit(btnHMaterID)', function (data) {
                btnHMaterID();
            });
        //#endregion
            //#endregion
            //#region ç”Ÿäº§èµ„源
            form.on('submit(btnHSourceID)', function (data) {
                btnHSourceID();
            });
            //#endregion
            //#region æ£€éªŒé¡¹ç›®
            form.on('submit(btnHQCCheckItemID)', function (data) {
                btnCheckProjectList(2);
                btnHQCCheckItemID();
            });
        //#endregion
            //#endregion
            //重置按钮
            form.on('submit(btnReSearch)', function (data) {
@@ -286,7 +356,13 @@
                    }
                });
            });
            //#region æ£€ç´¢æ¨¡å¼ä¸‹æ‹‰åˆ—表监听
            form.on('select(HDeptName)', function (data) {
                changeInput_Dept();
            });
            //#endregion
            //#endregion
            //#region æ­¤é¡µé¢æ‰€æœ‰çš„æ–¹æ³•
@@ -302,15 +378,16 @@
                set_InitGrid();
                //get_FastQuery();
                DisPlay_HideColumn();
                //set_Line();
                set_Line();
            }
            //初始化表格
            function set_InitGrid() {
                var columns = [];
                columns.push({ type: 'numbers', title: '序号' });
                //columns.push({ type: 'numbers', title: '序号' });
                columns.push({ field: "Id", title: "序号", width: 70 });
                //获取两个月期之间的相差
                var time1 = Date.parse(new Date($("#HBeginDate").val()));//开始时间
                var time2 = Date.parse(new Date($("#HEndDate").val()));//结束时间
@@ -326,7 +403,7 @@
                var k = 0;//收集循环次数
                for (var j = 0; j <= (Days - k); j++) {
                    columns.push({ field: Format(yyyy + '/' + MM + '/' + (HBEGINDATE + j), 'yyyy-MM-dd'), title: Format(yyyy + '/' + MM + '/' + (HBEGINDATE + j), 'MM.dd'), width: 70, totalRow: true })
                    columns.push({ field: Format(yyyy + '/' + MM + '/' + (HBEGINDATE + j), 'yyyy-MM-dd'), title: Format(yyyy + '/' + MM + '/' + (HBEGINDATE + j), 'MM.dd'), width: 120 })
                    //跨年的话 ä¼šä»Žä¸€æœˆä¸€å·å¼€å§‹
                    if (MM == 12 && (HBEGINDATE + j) == 31) {
                        yyyy += 1;
@@ -350,7 +427,6 @@
                    , height: 'full-50'
                    , cellMinWidth: 90
                    , limit: 500
                    , totalRow: true
                    , loading: false
                    , cols: [columns]
                    , done: function (res, curr, count) {
@@ -370,9 +446,34 @@
                    data: { "sWhere": sWhere, "user": sessionStorage["HUserName"] },
                    success: function (data1) {
                        if (data1.count == 1) {
                            option.data = data1.data;
                            table.render(option);
                            layer.close(wait);
                            var limit = parseInt($("#limit").val());//样本数
                            if (limit > data1.data.length - 3) {
                                layer.msg("取样数量超过实际数量!", { icon: 5 });
                            } else {
                                var data = [];//列字段数据
                                var col = [];
                                var totalArray = [];
                                //给空的数组赋值
                                for (var key in data1.list) {//循序遍历数组
                                    data.push({ "id": data1.list[key].ColmCols, "name": data1.list[key].ColmCols, "Type": data1.list[key].ColmType });//从每个对象中提取数据
                                }
                                for (var i = 0; i < data.length; i++) {//遍历data数组重的数据
                                    col.push({ field: data[i].id, title: data[i].name, align: 'center', sort: true, width: 120 });
                                }
                                option.cols = [col];
                                option.data = data1.data;
                                optionSJZ[0] = data1.data[0];
                                optionAVG[0] = data1.data[limit + 1];
                                optionS[0] = data1.data[limit + 2];
                                table.render(option);
                                ins = table.render(option);
                                set_PPK();
                                set_CPK();
                                set_Line();
                            }
                        } else {
                            layer.close(wait);
                            layer.alert(data1.Message, { icon: 5 });
@@ -384,6 +485,300 @@
                });
            }
            //#region æ ¹æ®æ£€ç´¢æ¨¡å¼è°ƒæ•´ æœç´¢æ¡†
            function changeInput_Dept() {
                var HSearchModel = $("#HDeptName").val();
                if (HSearchModel == "389502" || HSearchModel == "15035820") {
                    //隐藏生产资源
                    $("#sczz").hide();
                    $("#xh").show();
                }
                else {
                    //隐藏穴号
                    $("#xh").hide();
                    $("#sczz").show();
                }
            }
            //#endregion
            //PPK计算 x
            function set_PPK() {
                var x_AVG = 0;
                var x_SUM = 0;
                var x_PPK = 0;
                var x_CPK = 0;
                var numCount = 0
                //系数 ä¸å˜çš„
                var c4 = [0.7979, 0.8862, 0.9213, 0.9400, 0.9515, 0.9594, 0.9650, 0.9693, 0.9727, 0.9754, 0.9776, 0.9794, 0.9810, 0.9823, 0.9835, 0.9845, 0.9854, 0.9862, 0.9869, 0.9876, 0.9882, 0.9887, 0.9892, 0.9896];
                //平均值的平均值
                for (var j = 1; j < option.cols[0].length; j++) {
                    if (optionAVG.length != 0 || optionS.length != 0) {
                        x_AVG = calc(x_AVG, parseFloat(optionAVG[0][option.cols[0][j].field]), "+");
                    }
                }
                x_AVG = calc(x_AVG, (option.cols[0].length - 1), "/");
                x_AVG = $("#HCenterline_X").val() == "" ? x_AVG : parseFloat($("#HCenterline_X").val());
                $("#HCenterline_X").val(x_AVG.toFixed(5));
                //(每天的数据-平均值的平均值) ä¹˜å¹³æ–¹ åœ¨ç›¸åŠ 
                for (var i = 1; i < option.cols[0].length; i++) {
                    for (var j = 0; j < option.data.length - 3; j++) {
                        numCount += 1;
                        x_SUM = calc(x_SUM, parseFloat(((parseFloat(option.data[j][option.cols[0][i].field]) - x_AVG) ** 2).toFixed(6)), "+")
                    }
                }
                //(sum除以(所有数量减-1)) å¼€å¹³æ–¹ ä¸åŒ…含后三行
                x_PPK = Math.sqrt(calc(x_SUM, (numCount - 1), "/"));
                 //(sum除以(所有数量)) å¼€å¹³æ–¹  ä¸åŒ…含后三行
                x_CPK = Math.sqrt(calc(x_SUM, numCount, "/"));
                var limit = $("#limit").val();
                if (parseInt(limit) >= 9) {
                    $("#HCenterline_S").val(x_PPK.toFixed(4));
                }
                //均值 æŽ§åˆ¶ä¸Šé™ æŽ§åˆ¶ä¸‹é™
                if (limit == 1) {
                    //x控制上限 å¹³å‡å€¼çš„平均值+三倍的PPK  X控制下限  å¹³å‡å€¼çš„平均值-三倍的PPK
                    $("#HControlUpperLimit_X").val(calc(x_AVG, calc(x_PPK, 3, "*"), "+").toFixed(5))
                    $("#HControlLowerLimit_X").val(calc(x_AVG, calc(x_PPK, 3, "*"), "-").toFixed(5))
                    //计算样本量为1 çš„ ppk
                    //检验项目:平均值-下限 é™¤ä»¥ä¸‰å€çš„PPK
                    var min = calc(calc(x_AVG, calc(parseFloat($("#HDownLimit").val()), parseFloat($("#HTargetVal").val()), "+"), "-"), calc(3, x_PPK, "*"), "/");
                    //检验项目:上限-平均值 é™¤ä»¥ä¸‰å€çš„PPK
                    var max = calc(calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HTargetVal").val()), "+"), x_AVG, "-"), calc(3, x_PPK, "*"), "/");
                    var DataHCPK = min > max ? max : min;
                    $("#HPPK").val(DataHCPK);
                    //计算样本量为1 çš„ cpk
                    var cpkSum = 0;
                    var CPK_U = 0;
                    var CPK_N = 0;
                    for (var i = 1; i < option.cols[0].length; i++) {
                        for (var j = 0; j < option.data.length - 3; j++) {
                            if (i == 1) {
                                //获取第一行的第一个值
                                CPK_U = option.data[j][option.cols[0][i].field];
                            } else {
                                CPK_N = option.data[j][option.cols[0][i].field];
                                //如果第一行的第一个值大于第二个值,第一个减去第二  å¦åˆ™å°±æ˜¯  ç¬¬äºŒä¸ªå‡åŽ»ç¬¬ä¸€ä¸ª
                                var data_un = CPK_U > CPK_N ? calc(CPK_U, CPK_N, "-") : calc(CPK_N, CPK_U, "-");
                                //把值相加
                                cpkSum = calc(cpkSum, data_un, "+");
                                CPK_U = CPK_N;
                            }
                        }
                    }
                    //cpkSum é™¤ä»¥ ç¬¬ä¸€è¡Œæ€»æ•°å‡åŽ»2
                    cpkSum = calc(cpkSum, option.cols[0].length - 2, "/");
                    //cpkSum é™¤ä»¥ç³»æ•°
                    var HAVG_CPK = calc(cpkSum, 1.128, "/");
                    //检验项目:平均值-下限 é™¤ä»¥ä¸‰å€çš„HAVG_CPK
                    min = calc(calc(x_AVG, calc(parseFloat($("#HDownLimit").val()), parseFloat($("#HTargetVal").val()), "+"), "-"), calc(3, HAVG_CPK, "*"), "/");
                    //检验项目:上限-平均值 é™¤ä»¥ä¸‰å€çš„HAVG_CPK
                    max = calc(calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HTargetVal").val()), "+"), x_AVG, "-"), calc(3, HAVG_CPK, "*"), "/");
                    DataHCPK = min > max ? max : min;
                    $("#HCPK").val(DataHCPK);
                } else {
                    //上限
                    if ($("#HUpLimit").val() != "" && $("#HDownLimit").val() == "") {//上限不等于空,下限等于空
                        //检验项目:(上限值-平均值)除以(三倍的PPK é™¤ä»¥C4的系数:c4对应的样本数)
                        var HUpLimit = calc(calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HTargetVal").val()), "+"), x_AVG, "-"), calc(calc(3, x_PPK, "*"), c4[option.data.length - 4], "/"), "/");
                        $("#HPPK").val(HUpLimit.toFixed(4));
                    }
                    //下限
                    else if ($("#HDownLimit").val() != "" && $("#HUpLimit").val() == "") {//下限不等于空,上限等于空
                         //检验项目:(平均值-下限值)除以(三倍的PPK é™¤ä»¥C4的系数:c4对应的样本数)
                        var HDownLimit = calc(calc(x_AVG, calc(parseFloat($("#HDownLimit").val()), parseFloat($("#HTargetVal").val()), "+"), "-"), calc(calc(3, x_PPK, "*"), c4[option.data.length - 4], "/"), "/");
                        $("#HPPK").val(HDownLimit.toFixed(4));
                    } else {
                        //检验项目:(上限值-平均值)除以(三倍的PPK é™¤ä»¥C4的系数:c4对应的样本数)
                        var HUpLimit = calc(calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HTargetVal").val()), "+"), x_AVG, "-"), calc(calc(3, x_PPK, "*"), c4[option.data.length - 4], "/"), "/");
                         //检验项目:(平均值-下限值)除以(三倍的PPK é™¤ä»¥C4的系数:c4对应的样本数)
                        var HDownLimit = (x_AVG - calc(parseFloat($("#HDownLimit").val()), parseFloat($("#HTargetVal").val()), "+")) / ((3 * x_PPK) / c4[option.data.length - 4]);
                        $("#HPPK").val(HUpLimit > HDownLimit ? HDownLimit.toFixed(4) : HUpLimit.toFixed(4));
                    }
                }
            }
            //CPK计算 s
            function set_CPK() {
                var x_AVG = 0;
                var s_AVG = 0;
                var s_CPK = 0;
                var d2 = [1.128, 1.693, 2.059, 2.326, 2.534, 2.704, 2.847, 3.078, 3.173, 3.258, 3.336, 3.407, 3.472, 3.532, 3.588, 3.640, 3.689, 3.735, 3.778, 3.819, 3.858, 3.895, 3.931];
                var A2 = [0,1.880, 1.023, 0.729, 0.577, 0.483, 0.419, 0.373, 0.337, 0.308];
                var D3 = [0,0.000, 0.000, 0.000, 0.000, 0.000, 0.076, 0.136, 0.184, 0.223];
                var D4 = [0,3.267, 2.574, 2.282, 2.114, 2.004, 1.924, 1.864, 1.816, 1.777];
                //求极差值的平均值
                for (var j = 1; j < option.cols[0].length; j++) {
                    if (optionAVG.length != 0 || optionS.length != 0) {
                        s_AVG = calc(s_AVG, parseFloat(optionS[0][option.cols[0][j].field]), "+");
                    }
                }
                s_AVG = calc(s_AVG, (option.cols[0].length - 1), "/")
                s_AVG = $("#HCenterline_S").val() == "" || "0" ? s_AVG : parseFloat($("#HCenterline_S").val());
                $("#HCenterline_S").val(s_AVG);//S中心线
                var limit = $("#limit").val();
                if (parseInt(limit) < 9) {
                    $("#HCenterline_S").val(s_AVG.toFixed(4));
                }
                //求平均值的平均值
                for (var j = 1; j < option.cols[0].length; j++) {
                    if (optionAVG.length != 0 || optionS.length != 0) {
                        x_AVG = calc(x_AVG, parseFloat(optionAVG[0][option.cols[0][j].field]), "+");
                    }
                }
                x_AVG = calc(x_AVG, (option.cols[0].length - 1), "/");
                x_AVG = $("#HCenterline_X").val() == "" ? x_AVG : parseFloat($("#HCenterline_X").val());
                $("#HCenterline_X").val(x_AVG.toFixed(5));//X中心线
                s_CPK = calc(s_AVG, d2[option.data.length - 4], "/");
                //均值 æŽ§åˆ¶ä¸Šé™ æŽ§åˆ¶ä¸‹é™
                if (limit > 1) {
                    //平均值+(A2的系数乘以 æžå·®å€¼çš„平均值)
                    $("#HControlUpperLimit_X").val(calc(x_AVG, calc(A2[$("#limit").val() - 1], s_AVG, "*"), "+").toFixed(5))
                    //平均值-(A2的系数乘以 æžå·®å€¼çš„平均值)
                    $("#HControlLowerLimit_X").val(calc(x_AVG, calc(A2[$("#limit").val() - 1], s_AVG, "*"), "-").toFixed(5))
                }
                //差值 æŽ§åˆ¶ä¸Šé™ æŽ§åˆ¶ä¸‹é™
                //D4的系数 ä¹˜ä»¥ æžå·®å€¼çš„平均值
                $("#HControlUpperLimit_S").val(calc(D4[$("#limit").val() - 1], s_AVG, "*").toFixed(5));
                 //D3的系数 ä¹˜ä»¥ æžå·®å€¼çš„平均值
                $("#HControlLowerLimit_S").val(calc(D3[$("#limit").val() - 1], s_AVG, "*").toFixed(5));
                var limit = $("#limit").val();
                if (limit > 1) {
                    //上限
                    if ($("#HUpLimit").val() != "" && $("#HDownLimit").val() == "") {//下限不等于空,上限等于空
                        //(上限值-平均值)除以 ä¸‰å€çš„s_CPK
                        var HUpLimit = calc(calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HTargetVal").val()), "+"), x_AVG, "-"), (3 * s_CPK), "/");
                        $("#HCPK").val(HUpLimit.toFixed(4));
                    }
                    //下限
                    else if ($("#HDownLimit").val() != "" && $("#HUpLimit").val() == "") {//上限不等于空,下限等于空
                         //(平均值-下限值)除以 ä¸‰å€çš„s_CPK
                        var HDownLimit = calc(calc(x_AVG, calc(parseFloat($("#HDownLimit").val()), parseFloat($("#HTargetVal").val()), "+"), "-"), (3 * s_CPK), "/");
                        $("#HCPK").val(HDownLimit.toFixed(4));
                    } else {
                        //(上限值-平均值)除以 ä¸‰å€çš„s_CPK
                        var HUpLimit = calc(calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HTargetVal").val()), "+"), x_AVG, "-"), (3 * s_CPK), "/");
                        //(平均值-下限值)除以 ä¸‰å€çš„s_CPK
                        var HDownLimit = calc(calc(x_AVG, calc(parseFloat($("#HDownLimit").val()), parseFloat($("#HTargetVal").val()), "+"), "-"), (3 * s_CPK), "/");
                        if (s_CPK == 0) {
                            $("#HCPK").val(0);
                        } else {
                            $("#HCPK").val(HUpLimit > HDownLimit ? HDownLimit.toFixed(4) : HUpLimit.toFixed(4));
                        }
                    }
                }
            }
            function calc(num1, num2, calcStr) {
                var str1, // è½¬æ¢ä¸ºå­—符串的数字
                    str2,
                    ws1 = 0,// ws1,ws2 ç”¨æ¥å­˜å‚¨ä¼ å…¥çš„num的小数点后的数字的位数
                    ws2 = 0,// èµ‹é»˜è®¤å€¼ï¼Œè§£å†³å½“整数和小数运算时倍数计算错误导致的结果误差
                    bigger,// bigger和smaller用于加,减,除法找出小的那个数字,给后面补0,解决位数不对从而造成的计算错误的问题;乘法需要将结果除两个数字的倍数之和
                    smaller,// ä¾‹å¦‚:加减除法中1.001 + 2.03 ï¼Œå¦‚果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误;乘法中1.12*1.1会放大为112*11,所以结果需要除以1000才会是正确的结果,112*11/1000=1.232
                    zeroCount, // éœ€è¦è¡¥å……0的个数
                    isExistDot1, // ä¼ å…¥çš„æ•°å­—是否存在小数点
                    isExistDot2,
                    sum,
                    beishu = 1;
                // å°†æ•°å­—转换为字符串
                str1 = num1.toString();
                str2 = num2.toString();
                // æ˜¯å¦å­˜åœ¨å°æ•°ç‚¹ï¼ˆåˆ¤æ–­éœ€è¦è®¡ç®—的数字是不是包含小数)
                isExistDot1 = str1.indexOf('.') != -1 ? true : false;
                isExistDot2 = str2.indexOf('.') != -1 ? true : false;
                // å–小数点后面的位数
                if (isExistDot1) {
                    ws1 = str1.split('.')[1].length;
                }
                if (isExistDot2) {
                    ws2 = str2.split('.')[1].length;
                }
                // å¦‚ws1 å’Œ ws2 æ— é»˜è®¤å€¼ï¼Œå¦‚æžœnum1 æˆ– num2 ä¸æ˜¯å°æ•°çš„话则 ws1 æˆ– ws2 çš„值将为 undefined
                // bigger å’Œ smaller çš„值会和预期不符
                bigger = ws1 > ws2 ? ws1 : ws2;
                smaller = ws1 < ws2 ? ws1 : ws2;
                switch (calcStr) {
                    // åŠ å‡æ³•æ‰¾å‡ºå°çš„é‚£ä¸ªæ•°å­—ï¼Œç»™åŽé¢è¡¥0,解决位数不对从而造成的计算错误的问题
                    // ä¾‹å¦‚:1.001 + 2.03 ï¼Œå¦‚果不给2.03进行补0,最后会变成1001+203,数字错位导致结果错误
                    case "+":
                    case "-":
                    case "/":
                        zeroCount = bigger - smaller;
                        for (var i = 0; i < zeroCount; i++) {
                            if (ws1 == smaller) {
                                str1 += "0";
                            }
                            else {
                                str2 += "0";
                            }
                        }
                        break;
                    case "*":
                        // ä¹˜æ³•需要将结果除两个数字的倍数之和
                        bigger = bigger + smaller;
                        break;
                    default:
                        return "暂不支持的计算类型,现已支持的有加法、减法、乘法、除法";
                        break;
                }
                // åŽ»é™¤æ•°å­—ä¸­çš„å°æ•°ç‚¹
                str1 = str1.replace('.', '');
                str2 = str2.replace('.', '');
                // è®¡ç®—倍数,例如:1.001小数点后有三位,则需要乘 1000 å˜æˆ 1001,变成整数后精度丢失问题则不会存在
                for (var i = 0; i < bigger; i++) {
                    beishu *= 10; // ç­‰ä»·äºŽbeishu = beishu * 10;
                }
                num1 = parseInt(str1);
                num2 = parseInt(str2);
                // è¿›è¡Œæœ€ç»ˆè®¡ç®—并除相应倍数
                switch (calcStr) {
                    case "+":
                        sum = (num1 + num2) / beishu;
                        break;
                    case "-":
                        sum = (num1 - num2) / beishu;
                        break;
                    case "*":
                        sum = (num1 * num2) / beishu;
                        break;
                    case "/":
                        sum = num1 / num2;
                        /* é™¤æ•°ä¸Žè¢«é™¤æ•°åŒæ—¶æ”¾å¤§ä¸€å®šå€æ•°ï¼Œä¸å½±å“ç»“果,
                        æ‰€ä»¥å¯¹æ•°å­—进行放大对应倍数并进行补0操作后不用另对倍数做处理 */
                        break;
                    default:
                        return "暂不支持的计算类型,现已支持的有加法、减法、乘法、除法";
                }
                return sum;
            }
            //#region å¯¼å‡ºExecel
            function btn_Export() {
                table.exportFile(ins.config.id, option.data, "xls");
            }
            //#endregion
            //折线图
            function set_Line() {
                //#region【折线图】
@@ -394,21 +789,50 @@
                let H_X = [];//x轴标题
                let HAvg = [];//平均值
                let HDifference = [];//差值
                let HSJZ = [];//实际值
                for (let i = 1; i <= 25; i++) {
                    H_X.push(i);
                }
                var judge = spc_judge();
                for (let j = 1; j <= 25; j++) {
                    var avg = 0;
                    for (let i = 0; i < option.data.length; i++) {
                        avg += Number(option.data[i][j]);
                for (var j = 1; j < option.cols[0].length; j++) {
                    if (optionAVG.length != 0 || optionS.length != 0) {
                        if ($.inArray(optionAVG[0][option.cols[0][j].field], judge) != -1) {
                            var data = { value: optionAVG[0][option.cols[0][j].field], itemStyle: { color: 'red' } };
                            HAvg.push(data);
                        } else {
                            HAvg.push(optionAVG[0][option.cols[0][j].field]);
                        }
                        HDifference.push(optionS[0][option.cols[0][j].field]);
                        HSJZ.push(optionSJZ[0][option.cols[0][j].field]);
                    } else {
                        HAvg.push(0);
                        HDifference.push(0);
                        HSJZ.push(0);
                    }
                    avg = avg / option.data.length;
                    HAvg.push(avg.toFixed(2));
                }
                for (let i = 1; i < option.cols[0].length; i++) {
                    H_X.push(option.cols[0][i].field);
                }
                var max = Math.max.apply(null, HSJZ);
                var min = Math.min.apply(null, HSJZ);
                var sum = 0;
                $.each(HSJZ, function (index, value) {
                    sum += value;
                });
                var average = sum / HSJZ.length;
                var HAreaValue = calc(calc(parseFloat($("#HControlUpperLimit_X").val()), parseFloat($("#HCenterline_X").val()), "-"), 3, "/").toFixed(5);
                var HAreaValue_A = HAreaValue * 2;
                var HAreaValue_B = HAreaValue * 1;
                option_ZXT_Avg = {
                    title: {
                        text: 'x̄管制图',
                        left: 'center'
                    },
                    grid: {
                        x: '3%', //相当于距离左边效果:padding-left
                        //y: '5%',  //相当于距离上边效果:padding-top
@@ -420,34 +844,59 @@
                        data: H_X
                    },
                    yAxis: {
                        type: 'value'
                        type: 'value',
                        min: parseFloat($("#HDownLimit").val()) != 0 ? calc(parseFloat($("#HTargetVal").val()), calc(parseFloat($("#HDownLimit").val()), 1.1, "*"), "+") : 0, // è®¾ç½®æœ€å°å€¼
                        max: calc(parseFloat($("#HTargetVal").val()), calc(parseFloat($("#HUpLimit").val()), 1.1, "*"), "+"), // è®¾ç½®æœ€å¤§å€¼
                        interval: calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HDownLimit").val()), "-"), 10, "/"), // è®¾ç½®é—´è·
                    },
                    series: [
                        {
                            data: HAvg,
                            type: 'line',
                            areaStyle: {//填充的颜色
                                color: {//线性渐变前四个参数分别是 x0, y0, x2, y2, èŒƒå›´ä»Ž 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord ä¸º `true`,则该四个值是绝对的像素位置
                                    type: 'linear',
                                    x: 0,
                                    y: 1,
                                    x2: 0,
                                    y2: 0,
                                    colorStops: [{
                                        offset: 0, color: 'rgba(232,247,247)' // 0% å¤„的颜色
                                    }, {
                                        offset: 1, color: 'rgba(183,252,252)' // 100% å¤„的颜色
                                    }],
                                    globalCoord: false// ç¼ºçœä¸º false
                            itemStyle: {
                                normal: {
                                    label: {
                                        show: true
                                    }
                                }
                            },
                            markLine: {
                                symbol: 'none',//去掉箭头
                                data: [
                                    { type: 'max', name: 'Max', lineStyle: { color: 'red' } },
                                    { type: 'average', name: 'Avg', lineStyle: { color: 'blue' } },
                                    { type: 'min', name: 'Min', lineStyle: { color: 'green' } },
                                ]
                                    {
                                        name: 'USL', yAxis: parseFloat($("#HTargetVal").val()) + parseFloat($("#HUpLimit").val()), lineStyle: { color: '#FF1D00' }, label: { color: '#FF1D00', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    },
                                    {
                                        name: 'LSL', yAxis: parseFloat($("#HTargetVal").val()) + parseFloat($("#HDownLimit").val()), lineStyle: { color: '#FF1D00' }, label: { color: '#FF1D00', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    },
                                    {
                                        name: 'UCL', yAxis: parseFloat($("#HControlUpperLimit_X").val()), lineStyle: { color: '#ff9145' }, label: { color: '#ff9145', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    },
                                    {
                                        name: 'LCL', yAxis: parseFloat($("#HControlLowerLimit_X").val()), lineStyle: { color: '#ff9145' }, label: { color: '#ff9145', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                    ,
                                    {
                                        name: 'CL', yAxis: parseFloat($("#HCenterline_X").val()), lineStyle: { color: '#000000' }, label: { color: '#000000', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                    ,
                                    {
                                        name: 'B', yAxis: parseFloat($("#HCenterline_X").val()) + HAreaValue_A, lineStyle: { color: '#6dadf0' }, label: { color: '#6dadf0', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                    ,
                                    {
                                        name: '-B', yAxis: parseFloat($("#HCenterline_X").val()) - HAreaValue_A, lineStyle: { color: '#6dadf0' }, label: { color: '#6dadf0', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                    ,
                                    {
                                        name: 'C', yAxis: parseFloat($("#HCenterline_X").val()) + HAreaValue_B, lineStyle: { color: '#2cb615' }, label: { color: '#2cb615', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                    ,
                                    {
                                        name: '-C', yAxis: parseFloat($("#HCenterline_X").val()) - HAreaValue_B, lineStyle: { color: '#2cb615' }, label: { color: '#2cb615', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                ],
                                precision: 3
                            },
                        }
                    ]
@@ -459,21 +908,11 @@
                var myChart = echarts.init(chartDom);
                var option_ZXT_Diff;
                let HDifference = [];//差值
                var HArr = []; //装检验值
                for (let j = 1; j <= 25; j++) {
                    HArr = [];
                    for (let i = 0; i < option.data.length; i++) {
                        HArr.push(option.data[i][j]);
                    }
                    var HMaxValue = Math.max(...HArr);//获取数组中的最大值
                    var HMinValue = Math.min(...HArr);//获取数组中的最小值
                    HDifference.push(Number(HMaxValue) - Number(HMinValue));
                }
                option_ZXT_Diff = {
                    title: {
                        text: 'R管制图',
                        left: 'center'
                    },
                    grid: {
                        x: '3%', //相当于距离左边效果:padding-left
                        //y: '5%',  //相当于距离上边效果:padding-top
@@ -485,41 +924,385 @@
                        data: H_X
                    },
                    yAxis: {
                        type: 'value'
                        type: 'value',
                        min: 0, // è®¾ç½®æœ€å°å€¼
                        max: parseFloat($("#HControlUpperLimit_S").val()) != 0 ? calc(parseFloat($("#HControlUpperLimit_S").val()), 1.1, "*") : 0, // è®¾ç½®æœ€å¤§å€¼
                        interval: calc(parseFloat($("#HControlUpperLimit_S").val()).toFixed(5), 10, "/"), // è®¾ç½®é—´è·
                    },
                    series: [
                        {
                            data: HDifference,
                            type: 'line',
                            areaStyle: {//填充的颜色
                                color: {//线性渐变前四个参数分别是 x0, y0, x2, y2, èŒƒå›´ä»Ž 0 - 1,相当于在图形包围盒中的百分比,如果 globalCoord ä¸º `true`,则该四个值是绝对的像素位置
                                    type: 'linear',
                                    x: 0,
                                    y: 1,
                                    x2: 0,
                                    y2: 0,
                                    colorStops: [{
                                        offset: 0, color: 'rgba(255,240,170,0)' // 0% å¤„的颜色
                                    }, {
                                        offset: 1, color: 'rgba(255,240,170,1)' // 100% å¤„的颜色
                                    }],
                                    globalCoord: false// ç¼ºçœä¸º false
                                }
                            },
                            itemStyle: { normal: { label: { show: true } } },
                            markLine: {
                                symbol: 'none',//去掉箭头
                                data: [
                                    { type: 'max', name: 'Max', lineStyle: { color: 'red' } },
                                    { type: 'average', name: 'Avg', lineStyle: { color: 'blue' } },
                                    { type: 'min', name: 'Min', lineStyle: { color: 'green' } },
                                ]
                                    {
                                        name: 'UCL', yAxis: parseFloat($("#HControlUpperLimit_S").val()), lineStyle: { color: '#2cb615' }, label: { color: '#2cb615', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    },
                                    {
                                        name: 'LCL', yAxis: parseFloat($("#HControlLowerLimit_S").val()), lineStyle: { color: '#2cb615' }, label: { color: '#2cb615', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                    ,
                                    {
                                        name: 'CL', yAxis: parseFloat($("#HCenterline_S").val()), lineStyle: { color: '#6dadf0' }, label: { color: '#6dadf0', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                ],
                                precision: 3
                            },
                        }
                    ]
                };
                option_ZXT_Diff && myChart.setOption(option_ZXT_Diff);
            //#endregion
                //实际值
                var chartDom = document.getElementById('histogram_SJZ');
                var myChart = echarts.init(chartDom);
                var option_ZXT_SJZ;
                option_ZXT_SJZ = {
                    title: {
                        text: '检测值',
                        left: 'center'
                    },
                    grid: {
                        x: '3%', //相当于距离左边效果:padding-left
                        //y: '5%',  //相当于距离上边效果:padding-top
                        bottom: '5%',
                        containLabel: true
                    },
                    xAxis: {
                        type: 'category',
                        data: H_X
                    },
                    yAxis: {
                        type: 'value',
                        min: parseFloat($("#HDownLimit").val()) != 0 ? calc(parseFloat($("#HTargetVal").val()), calc(parseFloat($("#HDownLimit").val()), 1.1, "*"), "+") : 0, // è®¾ç½®æœ€å°å€¼
                        max: calc(parseFloat($("#HTargetVal").val()), calc(parseFloat($("#HUpLimit").val()), 1.1, "*"), "+"), // è®¾ç½®æœ€å¤§å€¼
                        interval: calc(calc(parseFloat($("#HUpLimit").val()), parseFloat($("#HDownLimit").val()), "-"), 10, "/"), // è®¾ç½®é—´è·
                    },
                    series: [
                        {
                            data: HSJZ,
                            type: 'line',
                            itemStyle: {
                                normal:
                                {
                                    label: {
                                        show: true
                                    }
                                }
                            },
                            markLine: {
                                symbol: 'none',//去掉箭头
                                data: [
                                    { name: 'USL', yAxis: parseFloat($("#HTargetVal").val()) + parseFloat($("#HUpLimit").val()), lineStyle: { color: '#FF1D00' }, label: { color: '#FF1D00', fontSize: 10 }, label: { formatter: '{b}: {c}' } },
                                    {
                                        name: 'LSL', yAxis: parseFloat($("#HTargetVal").val()) + parseFloat($("#HDownLimit").val()), lineStyle: { color: '#FF1D00' }, label: { color: '#FF1D00', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    },
                                    {
                                        name: 'UCL', yAxis: max, lineStyle: { color: '#2cb615' }, label: { color: '#2cb615', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    },
                                    {
                                        name: 'LCL', yAxis: min, lineStyle: { color: '#2cb615' }, label: { color: '#2cb615', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                    ,
                                    {
                                        name: 'CL', yAxis: average.toFixed(5), lineStyle: { color: '#6dadf0' }, label: { color: '#6dadf0', fontSize: 10 }, label: { formatter: '{b}: {c}' }
                                    }
                                ],
                                precision: 3
                            },
                        }
                    ]
                };
                option_ZXT_SJZ && myChart.setOption(option_ZXT_SJZ);
                //#endregion
            }
            //计算spc八大判定
            function spc_judge() {
                //均值        ï¼ˆä¸Šé™-中心限)除以 3  åˆ†æˆ3分
                var HAreaValue = calc(calc(parseFloat($("#HControlUpperLimit_X").val()), parseFloat($("#HCenterline_X").val()), "-"), 3, "/").toFixed(5);
                //上限部分
                var HAreaValue_A = parseFloat($("#HControlUpperLimit_X").val());//上限
                var HAreaValue_B = calc(calc(HAreaValue, 2, "*"), parseFloat($("#HCenterline_X").val()), "+").toFixed(5);
                var HAreaValue_C = calc(calc(HAreaValue, 1, "*"), parseFloat($("#HCenterline_X").val()), "+").toFixed(5);
                //下限部分
                var HAreaValue_FA = parseFloat($("#HControlLowerLimit_X").val());//下限
                var HAreaValue_FB = calc(parseFloat($("#HCenterline_X").val()),calc(HAreaValue, 2, "*"), "-").toFixed(5);
                var HAreaValue_FC = calc(parseFloat($("#HCenterline_X").val()),calc(HAreaValue, 1, "*"), "-").toFixed(5);
                let HAvg = [];//平均值  æ ¹æ®X- è¿™ä¸€è¡Œè®¡ç®—çš„
                for (var j = 1; j < option.cols[0].length; j++) {
                    if (optionAVG.length != 0) {
                        HAvg.push(optionAVG[0][option.cols[0][j].field]);
                    }
                }
                //连续十五个点在中心线两侧的C区内
                var judge_return = [];
                if (HAvg.length >= 15) {
                    //因为是15个点  æ‰€ä»¥14的下标就是第15条数据  ç„¶åŽæ˜¯0-15,1-16
                    for (var i = 14; i < HAvg.length; i++) {
                        if (HAvg[i] >= HAreaValue_FC && HAvg[i] <= HAreaValue_C) {
                            //根据上面的i值算出从那个下标开始
                            for (var j = i - 14; j <= i; j++) {
                                //如果大于负c,小于正c é‚£å°±æœ‰é—®é¢˜
                                if (HAvg[j] >= HAreaValue_FC && HAvg[j] <= HAreaValue_C) {
                                    //当最后一条,如果大于负c,小于正c å°±è¿›åŽ»è¿½åŠ 15条数据
                                    if (i == j) {
                                        for (var j1 = i; j1 >= i - 14; j1--) {
                                            if ($.inArray(HAvg[j1], judge_return) == -1) {
                                                judge_return.push(HAvg[j1]);
                                            }
                                        }
                                    }
                                } else {
                                    break;  //终止当前15条,执行下一个15条
                                }
                            }
                        }
                    }
                }
                //连续14个点中相邻点交替上下
                if (HAvg.length >= 14) {
                    for (var i = 13; i < HAvg.length; i++) {
                        var judge = [];
                        for (var j = i - 13; j < i; j++) {
                            //用第一个跟第二的做对比,第二个跟第三个做对比,以此循环
                            if (HAvg[j] > HAvg[j + 1]) {
                                judge.push(1);
                            } else if (HAvg[j] < HAvg[j + 1]) {
                                judge.push(-1);
                            }
                        }
                        for (var k = 0; k < judge.length; k++) {
                            if (judge[k] + judge[k + 1] == 0) {  //如果前后相加等于0那就是满足,不满足就直接跳出
                                if ((k + 1) == judge.length) {
                                    for (var j1 = i; j1 >= i - 13; j1--) {
                                        if ($.inArray(HAvg[j1], judge_return) == -1) {
                                            judge_return.push(HAvg[j1]);
                                        }
                                    }
                                }
                            } else {
                                break;//终止当前循环
                            }
                        }
                    }
                }
                //连续9个点落在中心线的同一侧
                if (HAvg.length >= 9) {
                    for (var i = 8; i < HAvg.length; i++) {
                        var judge = [];
                        //用循环的值跟中心线对比
                        for (var j = i - 8; j <= i; j++) {
                            if (HAvg[j] > parseFloat($("#HCenterline_X").val())) {
                                judge.push(1);
                            } else if (HAvg[j] < parseFloat($("#HCenterline_X").val())) {
                                judge.push(-1);
                            }
                        }
                       //对循环的插入的值,相加
                        var sum = 0;
                        for (var k = 0; k < judge.length; k++) {
                            sum += judge[k];
                        }
                        //判断循环插入的值是否等于正九或者负九
                        if (sum == 9 || sum == -9) {
                            for (var j1 = i; j1 >= i - 8; j1--) {
                                if ($.inArray(HAvg[j1], judge_return) == -1) {
                                    judge_return.push(HAvg[j1]);
                                }
                            }
                        }
                    }
                }
                //连续8点落在中心线两侧且无一在C区以内(即在C区以外)
                if (HAvg.length >= 8) {
                    for (var i = 7; i < HAvg.length; i++) {
                        //循环的值是否大于正C æˆ–者 å°äºŽè´ŸC
                        if (HAvg[i] < HAreaValue_FC || HAvg[i] > HAreaValue_C) {
                            //满足 è¿›è¡Œåˆ¤æ–­å‰é¢å€¼æ˜¯å¦æ»¡è¶³
                            for (var j = i - 7; j <= i; j++) {
                                if (HAvg[j] < HAreaValue_FC || HAvg[j] > HAreaValue_C) {
                                    //如果最后都满足  æ’å…¥
                                    if (j == i) {
                                        for (var j1 = i; j1 >= i - 7; j1--) {
                                            if ($.inArray(HAvg[j1], judge_return) == -1) {
                                                judge_return.push(HAvg[j1]);
                                            }
                                        }
                                    }
                                } else {
                                    break;  //有一个不满足直接终止当前循环
                                }
                            }
                        }
                    }
                }
                //连续6点递增或递减
                if (HAvg.length >= 6) {
                    for (var i = 5; i < HAvg.length; i++) {
                        var judge = [];
                        //用第一个跟第二的做对比,第二个跟第三个做对比,以此循环
                        for (var j = i - 5; j < i; j++) {
                            if (HAvg[j] > HAvg[j + 1]) {
                                judge.push(1);
                            } else if (HAvg[j] < HAvg[j + 1]) {
                                judge.push(-1);
                            }
                        }
                        //对追加的值 è¿›è¡Œç´¯åŠ 
                        var sum = 0;
                        for (var k = 0; k < judge.length; k++) {
                            sum += judge[k];
                        }
                        //如果是正五或者负五 é‚£å°±å…¨éƒ¨è¿½åŠ 
                        if (sum == 5 || sum == -5) {
                            for (var j1 = i; j1 >= i - 5; j1--) {
                                if ($.inArray(HAvg[j1], judge_return) == -1) {
                                    judge_return.push(HAvg[j1]);
                                }
                            }
                        }
                    }
                }
                //连续5点中有4点落在中心线同一侧的C区外
                if (HAvg.length >= 5) {
                    for (var i = 4; i < HAvg.length; i++) {
                        var judge = [];
                        //当前值如果大于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å¤§äºŽ æ­£C
                        if (HAvg[i] > parseFloat($("#HCenterline_X").val()) && HAvg[i] > HAreaValue_C) {
                            for (var j = i - 4; j <= i; j++) {
                                var record = [];
                                //上面满足 åˆ¤æ–­ å½“前值如果大于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å¤§äºŽ æ­£C
                                if (HAvg[j] > parseFloat($("#HCenterline_X").val()) && HAvg[j] > HAreaValue_C) {
                                    record.push(HAvg[j]);
                                    if (record.length >= 4) {
                                        //如果满足4条以上数据有问题 é‚£å°±å¾ªçŽ¯æŠŠæ•°æ®æ’å…¥æ•°ç»„
                                        for (var j1 = i; j1 >= i - 4; j1--) {
                                            //根据
                                            //if ($.inArray(HAvg[j1], judge_return) == -1) {
                                            //    judge_return.push(HAvg[j1]);
                                            //}
                                            if ($.inArray(record[j1], judge_return) == -1) {
                                                judge_return.push(record[j1]);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        //当前值如果小于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å°äºŽ è´ŸC
                        else if (HAvg[i] < parseFloat($("#HCenterline_X").val()) && HAvg[i] < HAreaValue_FC) {
                            for (var j = i - 4; j <= i; j++) {
                                var record = [];
                                //上面满足 åˆ¤æ–­ å½“前值如果小于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å°äºŽ è´ŸC
                                if (HAvg[j] < parseFloat($("#HCenterline_X").val()) && HAvg[j] < HAreaValue_FC) {
                                    record.push(HAvg[j]);
                                    if (record.length >= 4) {
                                         //如果满足4条以上数据有问题 é‚£å°±å¾ªçŽ¯æŠŠæ•°æ®æ’å…¥æ•°ç»„
                                        for (var j1 = i; j1 >= i - 4; j1--) {
                                            //if ($.inArray(HAvg[j1], judge_return) == -1) {
                                            //    judge_return.push(HAvg[j1]);
                                            //}
                                            if ($.inArray(record[j1], judge_return) == -1) {
                                                judge_return.push(record[j1]);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                //连续3点中有2点落在中心线同一侧的B区外
                if (HAvg.length >= 3) {
                    for (var i = 2; i < HAvg.length; i++) {
                        var judge = [];
                        //当前值如果大于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å¤§äºŽ æ­£B
                        if (HAvg[i] > parseFloat($("#HCenterline_X").val()) && HAvg[i] > HAreaValue_B) {
                            for (var j = i - 2; j <= i; j++) {
                                var record = [];
                                //上面满足 åˆ¤æ–­ å½“前值如果大于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å¤§äºŽ æ­£B
                                if (HAvg[j] > parseFloat($("#HCenterline_X").val()) && HAvg[j] > HAreaValue_B) {
                                    record.push(HAvg[j]);
                                    if (record.length >= 2) {
                                         //如果满足2条以上数据有问题 é‚£å°±å¾ªçŽ¯æŠŠæ•°æ®æ’å…¥æ•°ç»„
                                        for (var j1 = i; j1 >= i - 2; j1--) {
                                            //if ($.inArray(HAvg[j1], judge_return) == -1) {
                                            //    judge_return.push(HAvg[j1]);
                                            //}
                                            if ($.inArray(record[j1], judge_return) == -1) {
                                                judge_return.push(record[j1]);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        //当前值如果小于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å°äºŽ è´ŸB
                        else if (HAvg[i] < parseFloat($("#HCenterline_X").val()) && HAvg[i] < HAreaValue_FB) {
                            for (var j = i - 2; j <= i; j++) {
                                var record = [];
                                 //上面满足 åˆ¤æ–­ å½“前值如果小于 ä¸­å¿ƒçº¿ å¹¶ä¸”  å°äºŽ è´ŸB
                                if (HAvg[j] < parseFloat($("#HCenterline_X").val()) && HAvg[j] < HAreaValue_FB) {
                                    record.push(HAvg[j]);
                                    if (record.length >= 2) {
                                        //如果满足2条以上数据有问题 é‚£å°±å¾ªçŽ¯æŠŠæ•°æ®æ’å…¥æ•°ç»„
                                        for (var j1 = i; j1 >= i - 2; j1--) {
                                            //if ($.inArray(HAvg[j1], judge_return) == -1) {
                                            //    judge_return.push(HAvg[j1]);
                                            //}
                                            if ($.inArray(record[j1], judge_return) == -1) {
                                                judge_return.push(record[j1]);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                //1个点落在A区以外
                if (HAvg.length >= 0) {
                    for (var i = 0; i < HAvg.length; i++) {
                        var judge = [];
                        //判断当前值是否大于 æ­£A
                        if (HAvg[i] > HAreaValue_A) {
                            if ($.inArray(HAvg[i], judge_return) == -1) {
                                judge_return.push(HAvg[i]);
                            }
                        }
                        //判断当前值是否大于 è´ŸA
                        else if (HAvg[i] < HAreaValue_FA) {
                            if ($.inArray(HAvg[i], judge_return) == -1) {
                                judge_return.push(HAvg[i]);
                            }
                        }
                    }
                }
                return judge_return;
            }
@@ -565,6 +1348,8 @@
                var limit = $("#limit").val();//样本数
                var HMaterID = $("#HMaterID").val();//物料
                var HQCCheckItemID = $("#HQCCheckItemID").val();//检验项目
                var HMouldNum = $("#HMouldNum").val();//穴号
                var HSourceID = $("#HSourceID").val();//生产资源
                if (limit == 0) {
                    return layer.msg("样本数量不能为0!");
@@ -585,8 +1370,11 @@
                    , limit: limit
                    , HMaterID: HMaterID
                    , HQCCheckItemID: HQCCheckItemID
                    , HMouldNum: HMouldNum
                    , HSourceID: HSourceID
                }
                //初始化表格
                set_InitGrid();
                get_Display(JSON.stringify(sWhere));
                //调用接口后清空sWhere缓存
                sWhere = "";
@@ -619,6 +1407,32 @@
                })
            }
            //生产资源
            function btnHSourceID() {
                layer.open({
                    type: 2 //类型
                    , skin: 'layui-layer-rim'//加上边框
                    , area: ['90%', '90%']//大小
                    , title: '生产资源列表'//标题
                    , shift: 2//弹出动画
                    , content: ['../../基础资料/生产基础资料/Gy_Source.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('请选择数据');
                        }
                        //获取数据
                        $("#HSourceID").val(checkStatus.data[0].HItemID);
                        $("#HSourceName").val(checkStatus.data[0].生产资源名称);
                        layer.close(index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的
                    }
                    , btn2: function (index, layero) { }
                })
            }
            //检验项目列表
            function btnHQCCheckItemID() {
                layer.open({
@@ -627,7 +1441,7 @@
                    , area: ['90%', '90%']//大小
                    , title: '检验项目列表'//标题
                    , shift: 2//弹出动画
                    , content: ['../../基础资料/公用基础资料/Gy_CheckItem.html', 'yes']
                    , content: ['../../基础资料/公用基础资料/Gy_CheckItem.html?Type=SPC&ID=' + HQCCheckNum.toString(), 'yes']
                    , btn: ['确定', '取消']
                    , btn1: function (index, layero) {//按钮【按钮一】的回调
                        var iframeWindow = window['layui-layer-iframe' + index]  //获取弹框页面
@@ -638,12 +1452,60 @@
                        //获取数据
                        $("#HQCCheckItemID").val(checkStatus.data[0].HItemID);
                        $("#HQCCheckItemNumber").val(checkStatus.data[0].代码);
                        btnCheckProjectList(1);
                        layer.close(index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的
                    }
                    , btn2: function (index, layero) { }
                })
            }
            //检验方案
            function btnCheckProjectList(Type) {
                HQCCheckNum = [];
                //Type 1 æ ¹æ®é€‰ä¸­çš„æ£€éªŒé¡¹ç›®åŽ»æŸ¥è¯¢æ•°æ®
                //Type 2 æ ¹æ®é€‰ä¸­çš„物料去查询数据
                var sWheres = "";
                if (Type == 1) {
                    sWheres = " and æ£€éªŒé¡¹ç›®ä»£ç ='" + $("#HQCCheckItemNumber").val() + "' and ç‰©æ–™ä»£ç ='" + $("#HMaterNumber").val() + "'";
                }
                if (Type == 2) {
                    sWheres = " and ç‰©æ–™ä»£ç ='" + $("#HMaterNumber").val() + "'";
                }
                var wait = layer.load();//遮罩
                $.ajax({
                    url: GetWEBURL() + '/QC_Management/MES_QC_CheckProjectListProjectDetaiList',
                    type: "GET",
                    async: false,
                    data: { "sWhere": sWheres, "user": sessionStorage["HUserName"] },
                    success: function (data1) {
                        if (data1.count == 1) {
                            layer.close(wait);
                            if (Type == 1) {
                                $("#HUpLimit").val(data1.data[0].上限值);
                                $("#HDownLimit").val(data1.data[0].下限值);
                                $("#HTargetVal").val(data1.data[0].目标值);
                            }
                            if (Type == 2) {
                                for (var i = 0; i < data1.data.length; i++) {
                                    HQCCheckNum.push(data1.data[i]["检验项目ID"]);
                                }
                            }
                            //$("#HControlUpperLimit").val(data1.data[0].控制上限);
                            //$("#HControlLowerLimit").val(data1.data[0].控制下限);
                        } else {
                            layer.close(wait);
                            layer.alert(data1.Message, { icon: 5 });
                        }
                    }, error: function () {
                        layer.close(wait);
                        layer.alert("接口请求失败!", { icon: 5 });
                    }
                });
            }
            //重置过滤条件
            function set_ClearQuery() {