1
duhe
2023-12-25 08c005b51ba04092beef0399b06d512100fc3d5a
1
4个文件已修改
1个文件已添加
707 ■■■■■ 已修改文件
WebTM/WebTM.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/IpadIndex.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/index.html 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/生产管理/生产报表/ProductionAnalysisReport.html 694 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/设备管理/Sb_Add_EqpConkBookBillList.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/WebTM.csproj
@@ -308,6 +308,7 @@
    <Content Include="views\生产管理\日计划报表\MaterialShorAnalysisReport.html" />
    <Content Include="views\生产管理\生产工位\Gy_SourceWorkStationSet.html" />
    <Content Include="views\生产管理\生产工位\Gy_SourceWorkStationSetList.html" />
    <Content Include="views\生产管理\生产报表\ProductionAnalysisReport.html" />
    <Content Include="views\生产管理\生产报表\Sc_InventoryAgeReport.html" />
    <Content Include="views\生产管理\生产报表\Sc_ProdOrderPickingStatusReport.html" />
    <Content Include="views\生产管理\生产计划平台\Sc_ShopCalendar.html" />
WebTM/views/IpadIndex.html
@@ -180,7 +180,7 @@
                                html1 += '<h1><span>工单号:</span><span id="wk' + (i + 1) + '">' + LoadData1[i].HICMOBillNo + '</span></h1>';
                                html1 += '<h1 style="display:none;"><span>产品ID:</span><span id="materid' + (i + 1) + '">' + LoadData1[i].HMaterID + '</span></h1>';
                                html1 += '<h1><span>产品名称:</span><span id="ptn' + (i + 1) + '">' + LoadData1[i].HMaterName + '</span></h1>';
                                html1 += '<h1><span>产品名称:</span><span id="ptn' + (i + 1) + '">[' + LoadData1[i].HMaterNumber + ']-[' + LoadData1[i].HMaterName+']</span></h1>';
                                html1 += '<h1><span>产品型号:</span><span id="pts' + (i + 1) + '">' + LoadData1[i].HModel + '</span></h1>';
                                html1 += '<h1><span>计划数量:</span><span>' + LoadData1[i].HDatePlanQty + '</span><span style="margin-left:20px;">汇报总数:</span><span>' + LoadData1[i].HDateFinishQty + '</span></h1>';
                                switch (LoadData1[i].HICMOStatus) {
WebTM/views/index.html
@@ -476,6 +476,12 @@
                                        <dd><a lay-href="生产管理/订单状态分布/Sc_OrderStateDistribution.html">设备状态分布</a></dd>
                                    </dl>
                                </dd>
                                <dd>
                                    <a>生产报表</a>
                                    <dl class="layui-nav-child">
                                        <dd><a lay-href="生产管理/生产报表/ProductionAnalysisReport.html">生产分析报表</a></dd>
                                    </dl>
                                </dd>
                            </dl>
                        </li>-->
                        <!-- è½¦é—´ç®¡ç† -->
WebTM/views/Éú²ú¹ÜÀí/Éú²ú±¨±í/ProductionAnalysisReport.html
New file
@@ -0,0 +1,694 @@
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>生产分析报表</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../../layuiadmin/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../../layuiadmin/style/admin.css" media="all">
    <script src="../../../layuiadmin/layui/layui.js"></script>
    <script src="../../../layuiadmin/Scripts/json2.js"></script>
    <script src="../../../layuiadmin/Scripts/jquery-1.4.1.js"></script>
    <script src="../../../layuiadmin/Scripts/webConfig.js"></script>
    <script src="../../../layuiadmin/PubCustom.js"></script>
    <script src="../../../layuiadmin/zgqCustom/zgqCustom.js"></script>
    <script src='../../../layuiadmin/lib/extend/echarts.min.js'></script>
    <style type="text/css">
        input.layui-input.layui-unselect {
            padding-right: 0;
        }
    </style>
</head>
<body>
    <div class="layui-fluid">
        <div class="layui-col-md12">
            <div class="layui-card" style="padding: 1px;">
                <div class="layui-card-body" style="padding: 1px;">
                    <form class="layui-form" action="" lay-filter="component-form-group">
                        <div class="layui-collapse">
                            <div class="layui-colla-item">
                                <div class="layui-colla-title layui-inline">
                                    <div class="layui-inline">
                                        <span>更多</span>
                                    </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: 85px;">
                                        <select name="HYear" id="HYear" lay-verify="HYear">
                                            <!--动态渲染年份-->
                                        </select>
                                    </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: 85px;">
                                        <select name="HType" id="HType" lay-verify="HType">
                                            <option style="color:blue;" value="车间">车间</option>
                                            <option style="color:blue;" value="物料">物料</option>
                                        </select>
                                    </div>
                                </div>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnSearch" id="btnSearch">
                                    <i class="layui-icon layui-icon-search layuiadmin-button-btn"></i>
                                </button>
                                <button class="layui-btn layuiadmin-btn-order" type="button" lay-submit="" lay-filter="btnReSearch" id="btnReSearch" style="padding:0 5px">重置</button>
                                <div class="layui-colla-content" style="padding: 0px; margin-left: 6%;">
                                    <div class="layui-row" style="margin-top:10px;">
                                        <!--其他条件-->
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div>
                            <div style="width:99.5%;height:calc(50vh);margin-top:10px;">
                                <div id="histogram" style="width: 60%; height: calc(50vh); float: left">
                                </div>
                                <div id="PieChart" style="width: 39%; height: calc(50vh); float: left; margin-left: 5px;">
                                </div>
                            </div>
                            <div style="width:99%;height:calc(42vh);">
                                <table class="" id="mainTable" lay-filter="mainTable"></table>
                            </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-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>
                        </script>
                    </form>
                </div>
            </div>
        </div>
    </div>
    <script>
        layui.config({
            base: '../../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index', //主入口模块
        }).use(['index', 'form', 'table', 'element', 'laypage', 'laydate'], function () {
            //#region å…¬å…±å˜é‡
            var $ = layui.$
                , admin = layui.admin
                , layer = layui.layer
                , table = layui.table
                , form = layui.form
                , element = layui.element
                , laypage = layui.laypage
                , laydate = layui.laydate
                , util = layui.util
            //查询条件
            var sWhere = "";
            var option = [];
            var HModName = "ProductionAnalysisReport";
            //#endregion
            //#region è¿›å…¥é¡µé¢æ—¢åŠ è½½
            //初始化界面
            set_ClearBill();
            //#endregion
            //#region ã€å›¾å½¢ã€‘
            function set_Graphics() {
                //#region ã€æŸ±çŠ¶å›¾ã€‘
                var app = {};
                var chartDom = document.getElementById('histogram');
                var myChart = echarts.init(chartDom);
                var option_ZZT;
                //#region [柱状图布局样式]
                const posList = [
                    'left',
                    'right',
                    'top',
                    'bottom',
                    'inside',
                    'insideTop',
                    'insideLeft',
                    'insideRight',
                    'insideBottom',
                    'insideTopLeft',
                    'insideTopRight',
                    'insideBottomLeft',
                    'insideBottomRight'
                ];
                app.configParameters = {
                    rotate: {
                        min: -90,
                        max: 90
                    },
                    align: {
                        options: {
                            left: 'left',
                            center: 'center',
                            right: 'right'
                        }
                    },
                    verticalAlign: {
                        options: {
                            top: 'top',
                            middle: 'middle',
                            bottom: 'bottom'
                        }
                    },
                    position: {
                        options: posList.reduce(function (map, pos) {
                            map[pos] = pos;
                            return map;
                        }, {})
                    },
                    distance: {
                        min: 0,
                        max: 100
                    }
                };
                app.config = {
                    rotate: 90,
                    align: 'left',
                    verticalAlign: 'middle',
                    position: 'insideBottom',
                    distance: 15,
                    onChange: function () {
                        const labelOption = {
                            rotate: app.config.rotate,
                            align: app.config.align,
                            verticalAlign: app.config.verticalAlign,
                            position: app.config.position,
                            distance: app.config.distance
                        };
                        myChart.setOption({
                            series: [
                                {
                                    label: labelOption
                                },
                                {
                                    label: labelOption
                                },
                                {
                                    label: labelOption
                                },
                                {
                                    label: labelOption
                                }
                            ]
                        });
                    }
                };
                const labelOption = {
                    show: true,
                    position: 'top'
                };
                //#endregion
                //柱状图绑定数据
                var HXTitle = [];//X轴标题名称
                var HJanuary = []; //一月份数据
                var HFebruary = []; //二月份数据
                var HMarch = []; //三月份数据
                var HApril = []; //四月份数据
                var HMay = []; //五月份数据
                var HJune = []; //六月份数据
                var HJuly = []; //七月份数据
                var HAugust = []; //八月份数据
                var HSeptember = []; //九月份数据
                var HOctober = []; //十月份数据
                var HNovember = []; //十一月份数据
                var HDecember = []; //十二月份数据
                for (let i = 0; i < option.data.length; i++) {
                    switch ($("#HType").val()) {
                        case '物料':
                            HXTitle.push(option.data[i].物料);
                            break;
                        case '车间':
                            HXTitle.push(option.data[i].车间);
                            break;
                    }
                    HJanuary.push(option.data[i]['1月']);
                    HFebruary.push(option.data[i]['2月']);
                    HMarch.push(option.data[i]['3月']);
                    HApril.push(option.data[i]['4月']);
                    HMay.push(option.data[i]['5月']);
                    HJune.push(option.data[i]['6月']);
                    HJuly.push(option.data[i]['7月']);
                    HAugust.push(option.data[i]['8月']);
                    HSeptember.push(option.data[i]['9月']);
                    HOctober.push(option.data[i]['10月']);
                    HNovember.push(option.data[i]['11月']);
                    HDecember.push(option.data[i]['12月']);
                }
                option_ZZT = {
                    tooltip: {
                        trigger: 'axis',
                        axisPointer: {
                            type: 'shadow'
                        }
                    },
                    legend: {
                        data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
                    },
                    toolbox: {
                        show: true,
                        orient: 'vertical',
                        left: 'right',
                        top: 'center',
                        feature: {
                            mark: { show: true },
                            dataView: { show: true, readOnly: false },
                            magicType: { show: true, type: ['line', 'bar', 'stack'] },
                            restore: { show: true },
                            saveAsImage: { show: true }
                        }
                    },
                    xAxis: [
                        {
                            type: 'category',
                            axisTick: { show: true },
                            data: HXTitle
                        }
                    ],
                    yAxis: [
                        {
                            type: 'value'
                        }
                    ],
                    series: [
                        {
                            name: '1月',
                            type: 'bar',
                            barGap: 0,
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HJanuary
                        },
                        {
                            name: '2月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HFebruary
                        },
                        {
                            name: '3月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HMarch
                        },
                        {
                            name: '4月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HApril
                        },
                        {
                            name: '5月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HMay
                        },
                        {
                            name: '6月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HJune
                        },
                        {
                            name: '7月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HJuly
                        },
                        {
                            name: '8月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HAugust
                        },
                        {
                            name: '9月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HSeptember
                        },
                        {
                            name: '10月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HOctober
                        },
                        {
                            name: '11月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HNovember
                        },
                        {
                            name: '12月',
                            type: 'bar',
                            label: labelOption,
                            emphasis: {
                                focus: 'series'
                            },
                            data: HDecember
                        }
                    ]
                };
                option_ZZT && myChart.setOption(option_ZZT);
                //#endregion
                //#region ã€é¥¼å›¾ã€‘
                var chartDom = document.getElementById('PieChart');
                var myChart = echarts.init(chartDom);
                var option_BT;
                var option_BT_XData = [];
                for (let i = 0; i < option.data.length; i++) {
                    switch ($("#HType").val()) {
                        case '车间':
                            option_BT_XData.push({ value: option.data[i][(Number(new Date().getMonth()) + Number(1)) + "月"], name: option.data[i].车间 });
                            break;
                        case '物料':
                            option_BT_XData.push({ value: option.data[i][(Number(new Date().getMonth()) + Number(1)) + "月"], name: option.data[i].物料 });
                            break;
                    }
                }
                option_BT = {
                    title: {
                        text: $("#HYear").val() + 'å¹´' + (Number(new Date().getMonth()) + Number(1)) + '月' + $("#HType").val() + '分布图',
                        left: 'center'
                    },
                    tooltip: {
                        trigger: 'item'
                    },
                    legend: {
                        top: 'bottom'
                    },
                    series: [
                        {
                            name: '生产数量',
                            type: 'pie',
                            radius: '50%',
                            data: option_BT_XData,
                            emphasis: {
                                itemStyle: {
                                    shadowBlur: 10,
                                    shadowOffsetX: 0,
                                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                                }
                            }
                        }
                    ]
                };
                option_BT && myChart.setOption(option_BT);
            //#endregion
            }
            //#region ç‚¹å‡»äº‹ä»¶åŒ…括on form事件等
            //头工具栏事件
            table.on('toolbar(mainTable)', function (obj) {
                switch (obj.event) {
                    //退出
                    case 'btn-exit': Pub_Close(2);
                        break;
                    //隐藏列设置
                    case 'HideColumn':
                        get_HideColumn();
                        break;
                };
            });
            //重置按钮
            form.on('submit(btnReSearch)', function (data) {
                set_ClearQuery();
            });
            //查询按钮
            form.on('submit(btnSearch)', function (data) {
                get_FastQuery();
            });
            //#endregion
            //#region æ­¤é¡µé¢æ‰€æœ‰çš„æ–¹æ³•
            //初始化界面
            function set_ClearBill() {
                Year();
                //初始化表格
                set_InitGrid();
                //加载数据到网格
                get_FastQuery();
                //DisPlay_HideColumn();
                set_Graphics();
            }
            //初始化表格
            function set_InitGrid() {
                //option = {
                //    elem: '#mainTable'
                //    , toolbar: '#toolbarDemo'
                //    , cellMinWidth: 120
                //    , limit: Number.MAX_VALUE // æ•°æ®è¡¨æ ¼é»˜è®¤å…¨éƒ¨æ˜¾ç¤º
                //    , height: 'full-70'
                //};
                option = {
                    elem: '#mainTable'
                    , toolbar: '#toolbarDemo'
                    , height: 350
                    , page: true
                    , totalRow: true
                    , cellMinWidth: 90
                    , limit: 50
                    , limits: [50, 500, 5000, 20000]
                }
            }
            //å¹´
            function Year() {
                var yyyy = new Date().getFullYear();
                var YearOption = "";
                for (var i = 0; i <= 10; i++) {
                    YearOption += '<option  style="color:blue;" value="' + (yyyy - 5 + i) + '">' + (yyyy - 5 + i) + '</option>';
                }
                $("#HYear").append(YearOption);
                $("#HYear").val(yyyy)
                form.render('select');
            }
            //加载网格
            function get_Display(DateYear) {
                DateYear = $("#HYear").val();
                var HType = $("#HType").val();
                var wait = layer.load();//遮罩
                $.ajax({
                    url: GetWEBURL() + '/LEMS/ProductionAnalysisReportList',
                    type: "GET",
                    async: false,
                    data: { "DateYear": DateYear, "HType": HType, "user": sessionStorage["HUserName"] },
                    success: function (data1) {
                        var col = [];
                        if (data1.count == 1) {
                            var data = [];
                            //给空的数组赋值
                            for (var key in data1.list) {
                                data.push({ "name": data1.list[key].ColmCols, "Type": data1.list[key].ColmType });
                            }
                            col.push({ type: 'checkbox', fixed: 'left', totalRowText: '汇总' });
                            //判断是否是纯英文
                            var patrn = new RegExp("[\u4E00-\u9FA5]+");
                            for (var i = 0; i < data.length; i++) {
                                if (!patrn.test(data[i].name)) {
                                    col.push({ field: data[i].name, title: data[i].name, hide: true }); //隐藏列
                                }
                                else {
                                    switch (data[i].Type) {
                                        case 'DateTime':
                                            col.push({ field: data[i].name, title: data[i].name, align: 'center', sort: true, templet: "<div>{{d." + data[i].name + " ==null ?'':layui.util.toDateString(d." + data[i].name + ", 'yyyy-MM-dd')}}</div>", width: 120 });
                                            break;
                                        default:
                                            col.push({ field: data[i].name, title: data[i].name, align: 'center', sort: true, totalRow: true , width: 120 });
                                    }
                                }
                            }
                            option.cols = [col];
                            option.data = data1.data;
                            table.render(option);
                            layer.close(wait);
                        } else {
                            layer.close(wait);
                            layer.alert(data1.Message, { icon: 5 });
                        }
                    }, error: function () {
                        layer.close(wait);
                        layer.alert("接口请求失败!", { icon: 5 });
                    }
                });
            }
            //快速过滤
            function get_FastQuery() {
                get_Display(sWhere);
                //调用接口后清空sWhere缓存
                sWhere = "";
                set_Graphics();
            }
            //重置过滤条件
            function set_ClearQuery() {
                $("#HBeginDate").val(Format(new Date(new Date() - 1000 * 60 * 60 * 24 * 30), "yyyy-MM-dd"));
                $("#HEndDate").val(Format(new Date(), "yyyy-MM-dd"));
                sWhere = " ";
                get_FastQuery();
            }
            //隐藏列设置
            function get_HideColumn() {
                var colName = "";
                for (var i = 1; i < option.cols[0].length - 1; i++) {
                    colName += option.cols[0][i]["title"] + ",";
                }
                colName = encodeURI(colName.substring(0, colName.length - 1));//对 URI è¿›è¡Œç¼–码
                layer.open({
                    type: 2
                    , skin: "layui-layer-rim" //加上边框
                    , title: "隐藏列设置"  //标题
                    , closeBtn: 1  //窗体右上角关闭 çš„ æ ·å¼
                    , shift: 2 //弹出动画
                    , area: ["50%", "90%"] //窗体大小
                    , maxmin: true //设置最大最小按钮是否显示
                    , content: ['../../基础资料/隐藏列设置/Gy_GridView_Hide.html?HModName=' + HModName + '&colName=' + colName, "yes"]
                    , btn: ["确定", "取消"]
                    , btn1: function (index, laero) {
                        //刷新表格数据
                        DisPlay_HideColumn();
                        //更新表格缓存的数据
                        layer.close(index);//关闭弹窗
                    }
                })
            }
            //显示列数据
            function DisPlay_HideColumn() {
                $.ajax({
                    url: GetWEBURL() + '/Xt_grdAlignment_WMES/grdAlignmentWMESList',
                    type: "GET",
                    data: { "HModName": HModName, "user": sessionStorage["HUserName"] },
                    success: function (data1) {
                        if (data1.data.length != 0) {
                            var dataCol = [];//数据库查询出的列数据
                            var titleData = [];//不需要显示的字段 å¯æ‰©å±•
                            dataCol = data1.data[0].HGridString.split(',');
                            for (var i = 0; i < option.cols[0].length - 2; i++) {
                                var dataCols = dataCol[i].split('|');
                                //隐藏列
                                if (dataCols[1] == 1) {
                                    option.cols[0][i + 1]["hide"] = true;
                                }
                                //设置内容字体大小
                                if (data1.data[0].HFontSize != 0) {
                                    option.cols[0][i + 1]["style"] = "font-size:" + data1.data[0].HFontSize + "px;";
                                } else {
                                    option.cols[0][i + 1]["style"] = "font-size:100%";
                                }
                                //设置列宽
                                if (dataCols[3] > 0) {
                                    option.cols[0][i + 1]["width"] = dataCols[3];
                                }
                                //显示列
                                if (dataCols[1] == 0 && $.inArray(option.cols[0][i + 1]["title"], titleData) == -1) {
                                    option.cols[0][i + 1]["hide"] = false;
                                }
                                //字体所在位置(å·¦ å±…中 å³)
                                switch (dataCols[2]) {
                                    case "L":
                                        option.cols[0][i + 1]["align"] = "left";
                                        break;
                                    case "M":
                                        option.cols[0][i + 1]["align"] = "center";
                                        break;
                                    case "R":
                                        option.cols[0][i + 1]["align"] = "right";
                                        break;
                                }
                            }
                            //取消冻结列
                            for (var i = 1; i < option.cols[0].length - 1; i++) {
                                if (option.cols[0][i]["fixed"] != null) {
                                    option.cols[0][i]["fixed"] = null;
                                }
                                else {
                                    break;
                                }
                            }
                            //冻结列
                            if (data1.data[0].HFixCols != 0) {
                                for (var i = 0; i < data1.data[0].HFixCols; i++) {
                                    if ($.inArray(option.cols[0][i + 1]["title"], titleData) != -1) {
                                        data1.data[0].HFixCols += 1;
                                    }
                                    option.cols[0][i + 1]["fixed"] = "left";
                                }
                            }
                            table.render(option);
                        } else {
                            table.render(option);
                        }
                    }, error: function () {
                        layer.alert("接口请求失败!", { icon: 5 });
                    }
                })
            }
            //#endregion
        });
    </script>
</body>
</html>
WebTM/views/É豸¹ÜÀí/Sb_Add_EqpConkBookBillList.html
@@ -392,8 +392,8 @@
                                    //同步更新表格和缓存对应的值
                                    obj.update({
                                        HManagerID: checkStatus.data[0].HItemID,
                                        HManagerCode: checkStatus.data[0].HNumber,
                                        HManagerName: checkStatus.data[0].HName,
                                        HManagerCode: checkStatus.data[0].职员代码,
                                        HManagerName: checkStatus.data[0].职员名称,
                                    });
                                    layer.close(layer.index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的