chenhaozhe
2026-04-08 fa6e43414ec71de702589fb365d34b2d20ccdee1
新增 设备状态详情页面
1个文件已添加
2个文件已修改
521 ■■■■■ 已修改文件
WebTM/views/数采管理/DAQ_EvidenceEquipmentCockpit.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/数采管理/DAQ_EvidenceEquipmentCockpitDetail.html 517 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/设备管理/设备工艺参数订单点检表/SB_EquipICMOTechParamBillEdit.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebTM/views/Êý²É¹ÜÀí/DAQ_EvidenceEquipmentCockpit.html
@@ -485,7 +485,7 @@
            shift: 2,
            area: ['100%', '100%'],
            maxmin: true,
            content: './DAQ_EvidenceEquipmentCockpitDetail.html',
            content: './DAQ_EvidenceEquipmentCockpitDetail.html?HEquipID=' + HEquipID,
            end: function () {
            },
WebTM/views/Êý²É¹ÜÀí/DAQ_EvidenceEquipmentCockpitDetail.html
New file
@@ -0,0 +1,517 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>证据设备驾驶舱</title>
    <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/layui1.js"></script>
    <script src="../../layuiadmin/Scripts/json2.js"></script>
    <script src="../../layuiadmin/Scripts/jquery-1.4.1.js"></script>
    <script src="../../layuiadmin/PubCustom.js"></script>
    <script src="../../layuiadmin/zgqCustom/zgqCustom.js"></script>
    <script src="../../layuiadmin/HideButton.js"></script>
    <script src="../../layuiadmin/soulTable.slim.js"></script>
    <script src="../../layuiadmin/PageTitle.js"></script>
    <script src="../../layuiadmin/echarts.min.js"></script>
    <script src="../../layuiadmin/Scripts/webConfig.js"></script>
    <style type="text/css">
        #deviceRunningInfo {
            background: #ffffff;
            border-radius: 8px;
            box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
            padding: 22px 20px;
            margin: 15px 0;
            border: 1px solid #f0f0f0;
        }
        #deviceRunningInfo .layui-form-label {
            text-align: left;
            font-weight: 500;
            color: #555;
            padding-left: 0;
            width: auto;
        }
        #deviceRunningInfo .layui-form-static {
            border: 1px solid #e8e8e8;
            border-radius: 6px;
            padding: 0 12px;
            line-height: 38px;
            background-color: #fafbfc;
            color: #333;
            font-size: 14px;
            transition: all 0.2s;
        }
        #deviceRunningInfo .layui-form-static:hover {
            background-color: #f5f7fa;
            border-color: #dcdfe6;
        }
        #deviceRunningInfo .layui-form-item {
            margin-bottom: 18px;
        }
        .zy-sub-title {
            font-size: large;
            padding: 20px;
            font-weight: bold;
        }
        #EquipRunningStatusCharts {
            height: 230px;
        }
    </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-form-item">
                                    <div class="layui-inline">
                                        <label class="layui-form-label">日期范围</label>
                                        <div class="layui-inline" id="ID-laydate-range">
                                            <div class="layui-input-inline">
                                                <input type="text" autocomplete="off" id="HBeginDate"
                                                    class="layui-input" placeholder="开始日期">
                                            </div>
                                            <div class="layui-form-mid">-</div>
                                            <div class="layui-input-inline">
                                                <input type="text" autocomplete="off" id="HEndDate" class="layui-input"
                                                    placeholder="结束日期">
                                            </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>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <!-- è®¾å¤‡è¿è¡Œä¿¡æ¯ -->
                        <div class="layui-form-item" id="deviceRunningInfo">
                            <label class="zy-sub-title" style="padding: 0;">设备运行信息<label
                                    id="deviceRunningDate"></label></label>
                            <div class="layui-row" style="padding-top: 20px;">
                                <!-- å æ¯” 2/12 (约1/6),用于放标签 -->
                                <div class="layui-col-xs1 layui-col-md1">
                                    <label class="layui-form-label"
                                        style="text-align: left; padding-left: 0;">设备名称</label>
                                </div>
                                <!-- å æ¯” 4/12 (约1/3),用于放值 -->
                                <div class="layui-col-xs4 layui-col-md4">
                                    <div class="layui-form-static" id="HEquipName"></div>
                                </div>
                                <!-- å ä½ç©ºåˆ—,用于隔开左右两组数据 -->
                                <div class="layui-col-xs1 layui-col-md1">&nbsp;</div>
                                <!-- ç¬¬äºŒåˆ—标签:所属区域 -->
                                <div class="layui-col-xs1 layui-col-md1">
                                    <label class="layui-form-label"
                                        style="text-align: left; padding-left: 0;">所属区域</label>
                                </div>
                                <div class="layui-col-xs4 layui-col-md4">
                                    <div class="layui-form-static" id="HDeptName"></div>
                                </div>
                            </div>
                            <div class="layui-row">
                                <!-- å æ¯” 2/12 (约1/6),用于放标签 -->
                                <div class="layui-col-xs1 layui-col-md1">
                                    <label class="layui-form-label"
                                        style="text-align: left; padding-left: 0;">设备状态</label>
                                </div>
                                <!-- å æ¯” 4/12 (约1/3),用于放值 -->
                                <div class="layui-col-xs4 layui-col-md4">
                                    <div class="layui-form-static" id="HEquipStatus"></div>
                                </div>
                                <!-- å ä½ç©ºåˆ—,用于隔开左右两组数据 -->
                                <div class="layui-col-xs1 layui-col-md1">&nbsp;</div>
                                <!-- ç¬¬äºŒåˆ—标签:所属区域 -->
                                <div class="layui-col-xs1 layui-col-md1">
                                    <label class="layui-form-label"
                                        style="text-align: left; padding-left: 0;">日期</label>
                                </div>
                                <div class="layui-col-xs4 layui-col-md4">
                                    <div class="layui-form-static" id="HDate"></div>
                                </div>
                            </div>
                        </div>
                        <!-- è®¾å¤‡è¿è¡Œä¿¡æ¯(时序) echarts å®žçް-->
                        <div>
                            <label class="zy-sub-title">设备运行时序</label>
                            <div class="layui-row">
                                <div class="layui-col-xs12 layui-inline">
                                    <div id="EquipRunningStatusCharts"></div>
                                </div>
                            </div>
                        </div>
                        <!-- å®‰ç¯(警报)记录 maintable -->
                        <div>
                            <label class="zy-sub-title">最近10条警报记录</label>
                            <table class="" id="mainTable" lay-filter="mainTable"></table>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
    <script>
        layui.config({
            base: '../../layuiadmin/' //静态资源所在路径
        }).extend({
            index: 'lib/index', //主入口模块
        }).use(['index', 'form', 'table', 'element', 'laypage', 'laydate', 'tree', 'util'], 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
                , tree = layui.tree
                , util = layui.util;
            //查询条件
            var sWhere = "";
            var option = [];
            var chartsOption = {}
            var params = getUrlVars()
            var HEquipID = params[params[0]]
            //#endregion
            //#region è¿›å…¥é¡µé¢å³åŠ è½½
            //初始化界面
            set_ClearBill();
            //#endregion
            //#region è§¦å‘事件:包括form.on(){}格式的所有点击事件、选择事件等
            form.on("submit(btnSearch)", function (data) {
                get_Display();
            })
            //#endregion
            // #region æœ¬é¡µé¢è°ƒç”¨çš„æ‰€æœ‰æ–¹æ³•
            function set_ClearBill() {
                // åˆå§‹åŒ–日期选择器
                initDateSelector()
                // åˆå§‹åŒ–echarts
                set_InitCharts()
                //初始化表格
                set_InitGrid();
                // èŽ·å–æ•°æ®
                get_Display();
            }
            function initDateSelector() {
                // é»˜è®¤æ—¥æœŸä¸ºä»Šå¤©
                var yesterdaySameTime = new Date();
                yesterdaySameTime.setDate(yesterdaySameTime.getDate() - 1);
                $("#HBeginDate").val(util.toDateString(yesterdaySameTime, 'yyyy-MM-dd HH:mm:ss'))
                $("#HEndDate").val(util.toDateString(new Date(), 'yyyy-MM-dd HH:mm:ss'))
                // åˆå§‹åŒ–日期范围选择
                laydate.render({
                    elem: '#ID-laydate-range',
                    range: ['#HBeginDate', '#HEndDate'],
                    type: 'datetime',
                });
            }
            function set_InitCharts() {
                var EquipRunningStatusCharts = echarts.init(document.getElementById("EquipRunningStatusCharts"))
                get_LineChart(EquipRunningStatusCharts, []);//折线
            }
            function set_InitGrid() {
                option = {
                    elem: '#mainTable'
                    // , toolbar: '#toolbarDemo'
                    , height: 'full-50'
                    , page: true
                    , cellMinWidth: 90
                    , totalRow: true
                    , limit: 50
                    , limits: [50, 500, 5000, 20000]
                    , done: function (res, curr, count) {
                        // soulTable.render(this);
                    }
                    , cols: [[
                        { type: 'checkbox', fixed: 'left', totalRowText: '合计行' }
                        , { field: '警报代码', title: '警报代码' }
                        , { field: '持续时间', title: '持续时间' }
                        , { field: '原因', title: '原因' }
                        , {
                            field: '时间', title: '时间', templet: function (d) {
                                return layui.util.toDateString(d.时间, 'yyyy-MM-dd HH:mm:ss');
                            }
                        }
                    ]],
                    data: []
                };
                table.render(option)
            }
            function get_LineChart(mychart22, chartData1) {
                var baseTime = $("HBeginDate").val()
                var endTime = $("HEndDate").val()
                var yAxisData = [$("#HDeptName").val()]
                var seriesData = chartData1.map(item => [
                    item.StartTime,
                    item.EndTime,
                    item.EquipName,
                    item.Status
                ]);
                // é»˜è®¤çš„option结构
                chartsOption = {
                    // æ ‡é¢˜
                    title: {
                        text: '设备运行时序',
                        left: 'left',
                        show: false
                    },
                    // å›¾ä¾‹ï¼ˆå³ä¸Šè§’的状态标识)
                    legend: {
                        data: ['运行', '开机', '停机', '告警', '关机'],
                        right: 10,
                        top: 5,
                        show: true
                    },
                    // æç¤ºæ¡†ï¼ˆé¼ æ ‡æ‚¬æµ®æ—¶æ˜¾ç¤ºï¼‰
                    tooltip: {
                        trigger: 'axis',
                        formatter: function (params) {
                            // params æ˜¯ä¸€ä¸ªæ•°ç»„,这里只有一条数据
                            const data = params[0];
                            const start = new Date(data.value[0]);
                            const end = new Date(data.value[1]);
                            // æ ¼å¼åŒ–时间显示
                            return `${data.name}<br/>${start.toLocaleTimeString()} ~ ${end.toLocaleTimeString()}`;
                        }
                    },
                    // ç½‘格(调整图表内边距,给Y轴和X轴标签留出空间)
                    grid: {
                        left: '3%',
                        right: '4%',
                        bottom: '3%',
                        containLabel: true
                    },
                    // X轴配置:时间轴
                    xAxis: {
                        type: 'time', // å…³é”®ï¼šæ—¶é—´ç±»åž‹è½´
                        min: baseTime, // å›ºå®šæœ€å°æ—¶é—´ï¼š14:00
                        max: endTime,  // å›ºå®šæœ€å¤§æ—¶é—´ï¼šæ¬¡æ—¥12:00
                        axisLabel: {
                            // æ ¼å¼åŒ–X轴标签显示为 14:00, 16:00 æ ¼å¼
                            formatter: function (value) {
                                const date = new Date(value);
                                return `${date.getHours()}:${String(date.getMinutes()).padStart(2, '0')}`;
                            },
                            interval: 2 * 3600 * 1000 // æ¯2小时显示一个刻度(对应14, 16, 18...)
                        },
                        axisLine: { show: true },
                        splitLine: { show: true }
                    },
                    // Y轴配置:类目轴
                    yAxis: {
                        type: 'category',
                        data: yAxisData,
                        axisLine: { show: false },
                        axisTick: { show: false } // éšè—Y轴刻度线
                    },
                    // ç³»åˆ—数据
                    series: [
                        {
                            name: ['运行', '开机', '停机', '告警', '关机'],
                            type: 'bar', // ä½¿ç”¨æŸ±çŠ¶å›¾å®žçŽ°ç”˜ç‰¹å›¾æ•ˆæžœ
                            barWidth: '80%', // æŸ±å­é«˜åº¦
                            // æ•°æ®æ˜ å°„:将时间戳数据关联到Xè½´
                            encode: {
                                x: [0, 1], // value çš„第0项作为起始,第1项作为结束
                                y: 2       // value çš„第2项作为Y轴类目
                            },
                            // å…·ä½“数据
                            data: seriesData,
                            // çŠ¶æ€é¢œè‰²æ˜ å°„
                            itemStyle: {
                                color: function (params) {
                                    // æ ¹æ®æ•°æ®åç§°åŒ¹é…é¢œè‰²
                                    const name = params.data[2];
                                    const colorMap = {
                                        '运行': '#67C23A',
                                        '运行中': '#67C23A',
                                        '开机': '#409EFF',
                                        '停机': '#E6A23C',
                                        '告警': '#F56C6C',
                                        '关机': '#909399',
                                        '维修中': '#F56C6C',
                                        '维护中': '#F56C6C'
                                    };
                                    return colorMap[name] || '#ccc';
                                }
                            },
                            // æŸ±å­ä¸Šä¸æ˜¾ç¤ºæ–‡å­—标签
                            label: { show: false }
                        }
                    ]
                };
                // å¦‚果有数据,更新option的内容
                if (chartData1 && chartData1.length > 0) {
                } else {
                    // æ²¡æœ‰æ•°æ®æ—¶ï¼Œæ˜¾ç¤º"暂无数据"提示
                    chartsOption.title.text = '暂无数据';
                }
                // æ›´æ–°å›¾è¡¨
                mychart22.setOption(chartsOption);
            }
            function get_Display() {
                var HBeginDate = $("#HBeginDate").val()
                var HEndDate = $("#HEndDate").val()
                sWhere = get_sWhere()
                var sWhere2 = ""
                if (HBeginDate && HEndDate) {
                    sWhere2 += " and StartTime BETWEEN CAST('" + HBeginDate + "' AS DATETIME)" +
                        " AND DATEADD(MILLISECOND, -3, DATEADD(DAY, 1, CAST('" + HEndDate + "' AS DATETIME))) "
                }
                // èŽ·å–è®¾å¤‡æ¡£æ¡ˆ
                $.ajax({
                    url: GetWEBURL() + '/Gy_EquipFileMain/GetList',
                    type: "GET",
                    data: { "user": sessionStorage["HUserName"], sWhere: " and hmainid = " + HEquipID },
                    dataType: "json",//数据类型可以为 text xml json  script  jsonp
                    success: function (data) {
                        if (data.count == 1) {
                            $("#HEquipName").text(data.data[0]["设备名称"])
                            $("#HDeptName").text(data.data[0]["使用部门"])
                            $("#HEquipStatus").text(data.data[0]["当前状态"])
                            $("#HDate").text(util.toDateString(new Date(), 'MM月dd日'))
                        }
                        else {
                            layer.alert(data.Message, { time: 1 * 2000, icon: 5 });
                            return false;
                        }
                    },
                    error: function (err) {
                        layer.alert(err.Message, { time: 1 * 2000, icon: 5 });
                        return false;
                    }
                });
                // èŽ·å–è®¾å¤‡è¿è¡Œæ—¶åºä¿¡æ¯
                $.ajax({
                    url: GetWEBURL() + '/SB_EquipRunningStatus/ReportByID',
                    type: "GET",
                    data: { "HEquipID": HEquipID, "sWhere": sWhere2, "user": sessionStorage["HUserName"] },
                    dataType: "json",//数据类型可以为 text xml json  script  jsonp
                    success: function (data) {
                        console.log(data)
                        if (data.count == 1) {
                            var EquipRunningStatusCharts = echarts.init(document.getElementById("EquipRunningStatusCharts"))
                            get_LineChart(EquipRunningStatusCharts, data.data);//折线
                        } else {
                            layer.alert(data.Message, { time: 1 * 2000, icon: 5 });
                            return false;
                        }
                    },
                    error: function (err) {
                        layer.alert(err.Message, { time: 1 * 2000, icon: 5 });
                        return false;
                    }
                });
                // èŽ·å–æœ€è¿‘10条安灯(警报记录)
                $.ajax({
                    url: GetWEBURL() + '/Sc_MESTransFerWorkBill/Get_TransFerBillListByHEquipID',
                    type: "GET",
                    data: { "HEquipID": HEquipID, sWhere: sWhere },
                    dataType: "json",//数据类型可以为 text xml json  script  jsonp
                    success: function (data) {
                        var LoadData1 = data.data.OA_ErrMsgBackBillMain;
                        if (data.code == 1)  //工单列表数据
                        {
                            option.data = LoadData1;
                            table.render(option)
                        } else {
                            layer.alert(data.msg, { time: 1 * 2000, icon: 5 });
                            return false;
                        }
                    },
                    error: function (err) {
                        layer.alert(err.Message, { time: 1 * 2000, icon: 5 });
                        return false;
                    }
                });
            }
            function get_sWhere() {
                var sWhereStr = ""
                var HBeginDate = $("#HBeginDate").val()
                var HEndDate = $("#HEndDate").val()
                if (HBeginDate && HEndDate) {
                    sWhereStr += " and a.HDate BETWEEN CAST('" + HBeginDate + "' AS DATETIME)" +
                        " AND DATEADD(MILLISECOND, -3, DATEADD(DAY, 1, CAST('" + HEndDate + "' AS DATETIME))) "
                }
                return sWhereStr
            }
            // #endregion
            function getUrlVars() {
                var vars = [], hash;
                var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
                for (var i = 0; i < hashes.length; i++) {
                    hash = hashes[i].split('=');
                    vars.push(hash[0]);
                    vars[hash[0]] = hash[1];
                }
                return vars;
            }
            //#endregion
        })
    </script>
</body>
</html>
WebTM/views/É豸¹ÜÀí/É豸¹¤ÒÕ²ÎÊý¶©µ¥µã¼ì±í/SB_EquipICMOTechParamBillEdit.html
@@ -965,7 +965,6 @@
                let interID = isEmpty($('#HInterID').val()) == true ? 0 : $('#HInterID').val()
                let HProcID = $('#HProcID').val()
                let HSourceID = $('#HSourceID').val()
                debugger
                if (isEmpty(HProcID, true, true) == false) {
                    // å·¥åºæ˜¯å¿…填项
                    sWhere = " and HProcID = " + HProcID + " and HSourceID = " + HSourceID
@@ -1956,6 +1955,7 @@
            //#region  å®¡æ ¸ï¼ˆnum=1)/反审核(num=2)
            function set_CheckBill(num) {
                HInterID = $("#HInterID").val()
                $.ajax({
                    type: "GET",
                    url: GetWEBURL() + "/SB_EquipICMOTechParamBillController/GetSB_EquipICMOTechParamBill_Check_Json",