#
luxiaotao1123
2022-03-02 aaf2e5aed7df2d082935cf91a538a037557c368e
src/main/webapp/views/home/console.html
@@ -1,522 +1,66 @@
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>工作台</title>
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all">
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title></title>
    <link rel="stylesheet" href="../../static/css/home.css">
    <style>
        /** 应用快捷块样式 */
        .console-app-group {
            padding: 16px;
            border-radius: 4px;
            text-align: center;
            background-color: #fff;
            cursor: pointer;
            display: block;
        html {
            height: 100%;
        }
        .console-app-group .console-app-icon {
            width: 32px;
            height: 32px;
            line-height: 32px;
            margin-bottom: 6px;
            display: inline-block;
            -webkit-box-sizing: border-box;
            -moz-box-sizing: border-box;
            box-sizing: border-box;
            font-size: 32px;
            color: #69c0ff;
        body {
            height: 100%;
        }
        .console-app-group:hover {
            box-shadow: 0 0 15px rgba(0, 0, 0, .08);
        #root {
            height: 100%;
        }
        /** //应用快捷块样式 */
        /** 小组成员 */
        .console-user-group {
            position: relative;
            padding: 10px 0 10px 40px;
        .home-page {
            height: 100%;
        }
        .console-user-group .console-user-group-head {
            width: 32px;
            height: 32px;
            position: absolute;
            top: 50%;
            left: 12px;
            margin-top: -10px;
            border-radius: 50%;
            font-size: 18px;
            font-weight: bolder;
        }
        .console-user-group .layui-badge {
            position: absolute;
            top: 50%;
            right: 8px;
            margin-top: -10px;
        }
        .console-user-group .console-user-group-name {
            line-height: 1.2;
        }
        .console-user-group .console-user-group-desc {
            color: #8c8c8c;
            line-height: 1;
            font-size: 12px;
            margin-top: 5px;
        }
        /** 卡片轮播图样式 */
        .admin-carousel .layui-carousel-ind {
            position: absolute;
            top: -41px;
            text-align: right;
        }
        .admin-carousel .layui-carousel-ind ul {
            background: 0 0;
        }
        .admin-carousel .layui-carousel-ind li {
            background-color: #e2e2e2;
        }
        .admin-carousel .layui-carousel-ind li.layui-this {
            background-color: #999;
        }
        /** 广告位轮播图 */
        .admin-news .layui-carousel-ind {
            height: 45px;
        }
        .admin-news a {
            display: block;
            line-height: 70px;
            text-align: center;
        }
        /** 最新动态时间线 */
        .layui-timeline-dynamic .layui-timeline-item {
            padding-bottom: 0;
        }
        .layui-timeline-dynamic .layui-timeline-item:before {
            top: 16px;
        }
        .layui-timeline-dynamic .layui-timeline-axis {
            width: 9px;
            height: 9px;
            left: 1px;
            top: 7px;
            background-color: #cbd0db;
        }
        .layui-timeline-dynamic .layui-timeline-axis.active {
            background-color: #0c64eb;
            box-shadow: 0 0 0 2px rgba(12, 100, 235, .3);
        }
        .dynamic-card-body {
            box-sizing: border-box;
            overflow: hidden;
        }
        .dynamic-card-body:hover {
            overflow-y: auto;
            padding-right: 9px;
        }
        /** 优先级徽章 */
        .layui-badge-priority {
            padding: 2px;
            border-radius: 20%;
            width: 30px;
            height: 30px;
            line-height: 18px;
            border-width: 2px;
            font-weight: 600;
        .home-page .top-section {
            height: 100%;
        }
    </style>
</head>
<body>
<!-- 正文开始 -->
<div class="layui-fluid ew-console-wrapper">
    <!-- 卡片 -->
    <div class="layui-row layui-col-space15">
        <div class="layui-col-xs12 layui-col-sm6 layui-col-md3">
            <div class="layui-card">
                <div class="layui-card-header">
                    报文量<span class="layui-badge layui-badge-green pull-right">日</span>
<div id="root">
    <div data-reactroot="" class="home-page">
        <section class="top-section">
            <div class="vertical-middle">
                <div class="product-name">
                    <h2>
                        中扬立库 - 巡检运维
                    </h2>
                </div>
                <div class="layui-card-body">
                    <p class="lay-big-font" id="logQtyDay">0</p>
                    <p>总报文量<span class="pull-right"><span id="logQty">0</span></span></p>
                </div>
            </div>
        </div>
        <div class="layui-col-xs12 layui-col-sm6 layui-col-md3">
            <div class="layui-card">
                <div class="layui-card-header">
                    终端数量<span class="layui-badge layui-badge-blue pull-right">总</span>
                </div>
                <div class="layui-card-body">
                    <p class="lay-big-font"><span style="line-height: 1;" id="sensorQty">0</span></p>
                    <p>在线设备<span class="pull-right"><span id="sensorOnlineQty"></span> </span></p>
                </div>
            </div>
        </div>
        <div class="layui-col-xs12 layui-col-sm6 layui-col-md3">
            <div class="layui-card">
                <div class="layui-card-header">
                    指令下发量<span class="layui-badge layui-badge-red pull-right">月</span>
                </div>
                <div class="layui-card-body">
                    <p class="lay-big-font"><span id="commandQtyMonth">0</span></p>
                    <p>总下发量<span class="pull-right"><span id="commandQty">0</span></span></p>
                </div>
            </div>
        </div>
        <div class="layui-col-xs12 layui-col-sm6 layui-col-md3">
            <div class="layui-card">
                <div class="layui-card-header">
                    系统用户
                    <span class="icon-text pull-right" lay-tips="系统运行中......" lay-direction="4" lay-offset="5px,5px">
                        <i class="layui-icon layui-icon-loading-1 layui-anim layui-anim-rotate layui-anim-loop"></i>
                    </span>
                </div>
                <div class="layui-card-body">
                    <p class="lay-big-font"><span id="usersQty">0</span> <span style="font-size: 24px;line-height: 1;">位</span></p>
                    <p>操作次数<span class="pull-right"><span id="optQty">0</span> 次</span></p>
                </div>
            </div>
        </div>
    </div>
    <!-- 快捷方式 -->
    <div class="layui-row layui-col-space15">
        <div class="layui-col-sm6" style="padding-bottom: 0;">
            <div class="layui-row layui-col-space15">
                <div class="layui-col-xs6 layui-col-sm3">
                    <a class="console-app-group" ew-href="sensor/sensor.html?resourceId=30529" lay-text="斑马线终端">
                        <i class="console-app-icon layui-icon layui-icon-align-center" style="color: #ff9c6e;"></i>
                        <div class="console-app-name">斑马线</div>
                <p class="product-desc">
                    浙江中扬立库技术有限公司隶属于浙江中扬储存设备有限公司,是中国立体仓库系统大型厂家之一。是一家致力于物流仓储系统整体解决方案的集团化高新技术企业。公司年产值超5亿人民币,是中国两大电商物流核心供应商。自2008年成立至今已承接大小立体仓库系统上万座。公司依托着高素质年轻化的运营团队一直保持着年均增速30%的高速发展,谱写着行业发展传奇。
                </p>
                <div class="button-area">
                    <!--                    <a class="button button-primary" target="_self" href="https://kkfileview.keking.cn/zh-cn/docs/home.html">-->
                    <!--                        立即开始-->
                    <!--                    </a>-->
                    <a class="button button-normal" ew-href="issue/issue.html?resourceId=40581" lay-text="巡检记录">
                        巡检记录
                    </a>
                </div>
                <div class="layui-col-xs6 layui-col-sm3">
                    <div class="console-app-group" ew-href="sensor2/sensor2.html?resourceId=30553" lay-text="井盖终端">
                        <i class="console-app-icon layui-icon layui-icon-circle" style="color: #95de64;"></i>
                        <div class="console-app-name">井盖</div>
                    </div>
                </div>
                <div class="layui-col-xs6 layui-col-sm3">
                    <div class="console-app-group" ew-href="sensor3/sensor3.html?resourceId=30556" lay-text="护栏终端">
                        <i class="console-app-icon layui-icon layui-icon-table" style="color: #5cdbd3;font-size: 30px;"></i>
                        <div class="console-app-name">护栏</div>
                    </div>
                </div>
                <div class="layui-col-xs6 layui-col-sm3">
                    <div class="console-app-group" ew-href="sensor4/sensor4.html?resourceId=30559" lay-text="消防终端">
                        <i class="console-app-icon layui-icon layui-icon-fire" style="color: #b37feb;font-size: 30px;"></i>
                        <div class="console-app-name">消防</div>
                    </div>
                </div>
            </div>
        </div>
        <div class="layui-col-sm6" style="padding-bottom: 0;">
            <div class="layui-row layui-col-space15">
                <div class="layui-col-xs6 layui-col-sm3">
                    <div class="console-app-group" ew-href="sensor5/sensor5.html?resourceId=30562" lay-text="气体检测终端">
                        <i class="console-app-icon layui-icon layui-icon-transfer" style="color: #ffd666;font-size: 34px;"></i>
                        <div class="console-app-name">气体</div>
                    </div>
                </div>
<!--                <div class="layui-col-xs6 layui-col-sm3">-->
<!--                    <div class="console-app-group" lay-href="allo/allo.html?resourceId=20402" lay-text="货位信息">-->
<!--                        <i class="console-app-icon layui-icon layui-icon-templeate-1" style="color: #5cdbd3;font-size: 36px;"></i>-->
<!--                        <div class="console-app-name">货位</div>-->
<!--                    </div>-->
<!--                </div>-->
                <div class="layui-col-xs6 layui-col-sm3">
                    <div class="console-app-group" ew-href="alarmVal/alarmVal.html?resourceId=30644" lay-text="报警阈值">
                        <i class="console-app-icon layui-icon layui-icon-notice"
                           style="color: #ff85c0;font-size: 28px;"></i>
                        <div class="console-app-name">报警</div>
                    </div>
                </div>
                <div class="layui-col-xs6 layui-col-sm3">
                    <div class="console-app-group" ew-href="user/user.html?resourceId=4" lay-text="系统用户">
                        <i class="console-app-icon layui-icon layui-icon-group" style="font-size: 26px;padding-top: 3px;margin-right: 6px;"></i>
                        <div class="console-app-name">用户</div>
                    </div>
                </div>
                <div class="layui-col-xs6 layui-col-sm3">
                    <div class="console-app-group" ew-href="detail.html?resourceId=8" lay-text="基本资料">
                        <i class="console-app-icon layui-icon layui-icon-slider" style="color: #ffc069;"></i>
                        <div class="console-app-name">设置</div>
                    </div>
                </div>
            <div class="animation animation1">
            </div>
        </div>
    </div>
    <!-- 主体 -->
    <div class="layui-row layui-col-space15">
        <!-- 图表 -->
<!--        <div class="layui-col-md8 layui-col-sm6">-->
<!--            <div class="layui-card">-->
<!--                <div class="layui-card-body">-->
<!--                    <div id="charts" style="width: 100%;height: 600px;"></div>-->
<!--                </div>-->
<!--            </div>-->
<!--        </div>-->
        <!-- 地图 -->
        <div class="layui-col-md8 layui-col-sm6">
            <div class="layui-card">
<!--                <div class="layui-card-header">设备地图</div>-->
                <div class="layui-card-body" style="position: relative">
                    <!-- 导航 -->
                    <div class="dropdown-menu dropdown-hover" style="position: absolute;top: 22px;left: 30px;z-index: 999">
                        <button id="map-selector-btn" class="layui-btn icon-btn layui-btn-primary">
                            &nbsp;地图监控 <i class="layui-icon layui-icon-drop"></i></button>
                        <ul class="dropdown-menu-nav">
                            <div class="dropdown-anchor"></div>
                            <li ew-href="sensor/loca.html?resourceId=30601"><a><i class="layui-icon layui-icon-align-center"></i>斑马线地图</a></li>
                            <li ew-href="sensor/loca.html?resourceId=30603"><a><i class="layui-icon layui-icon-circle"></i>井盖地图</a></li>
                            <li ew-href="sensor/loca.html?resourceId=30605"><a><i class="layui-icon layui-icon-table"></i>护栏地图</a></li>
                            <li ew-href="sensor/loca.html?resourceId=30607"><a><i class="layui-icon layui-icon-fire"></i>消防地图</a></li>
                            <li ew-href="sensor/loca.html?resourceId=30609"><a><i class="layui-icon layui-icon-transfer"></i>气体地图</a></li>
                        </ul>
                    </div>
                    <!-- 重置地图 -->
                    <button id="map-reset" class="layui-btn layui-btn-primary" style="position: absolute;top: 22px;right: 30px;z-index: 999;">
                        <i class="layui-icon layui-icon-refresh-1" style="font-weight: bolder"></i>
                    </button>
                    <!-- 地图 -->
                    <div id="map" style="width: 100%;height: 600px;"></div>
                </div>
            <div class="animation animation2">
            </div>
        </div>
        <!-- 介绍 -->
        <div class="layui-col-md4 layui-col-sm6">
            <div class="layui-card">
                <div class="layui-card-header">版本信息</div>
                <div class="layui-card-body">
                    <table class="layui-table layui-text">
                        <colgroup>
                            <col width="90">
                            <col>
                        </colgroup>
                        <tbody>
                        <tr>
                            <td>系统简称</td>
                            <td>中扬立库运维</td>
                        </tr>
                        <tr>
                            <td>版本号</td>
                            <td>Version 1.0.0</td>
                        </tr>
                        <tr>
                            <td>优点特色</td>
                            <td>易上手 / 操作效率高 / 数据及时 / 简约</td>
                        </tr>
<!--                        <tr>-->
<!--                            <td>制作方</td>-->
<!--                            <td><a href="http://www.zoneyung.com" target="_blank">浙江中扬立库技术有限公司</a></td>-->
<!--                        </tr>-->
                        </tbody>
                    </table>
                </div>
            <div class="animation animation3">
            </div>
            <div class="layui-card">
                <div class="layui-card-header">友情链接</div>
                <div class="layui-card-body">
                    <div class="layui-carousel admin-carousel admin-news" id="workplaceNewsCarousel">
                        <div carousel-item>
                            <div>
                                <a id="toDataV" target="_blank"
                                   style="cursor: pointer; color:#fff;background-color: #009fde;background-image: linear-gradient(to right,#009fde,#00beff);">
                                    高德地图 - 坐标拾取系统</a>
                            </div>
                        </div>
                    </div>
                </div>
            <div class="animation animation4">
            </div>
            <div class="layui-card">
                <div class="layui-card-header">
                    设备报警
                    <button ew-href="alarm/alarm.html?resourceId=30612" lay-text="报警记录" class="layui-btn layui-btn-primary layui-btn-xs" style="float: right; margin: 11px 5px 0 0">
                    报警记录</button>
                </div>
                <div class="layui-card-body" id="warnList">
                </div>
            <div class="animation animation5">
            </div>
        </div>
        </section>
    </div>
</div>
<!-- js部分 -->
<script src="https://webapi.amap.com/maps?v=2.0&key=24c671d7d8365d7eaff888498538452f&plugin=AMap.Scale,AMap.ToolBar"></script>
<script src="https://webapi.amap.com/loca?v=2.0.0&key=24c671d7d8365d7eaff888498538452f"></script>
</body>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/js/echarts/echarts.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/echarts/echarts-gl.min.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script>
<script type="text/javascript" src="../../static/js/common.js"></script>
<script>
    // 图表
    // var chartDom = document.getElementById('charts');
    // var myChart = echarts.init(chartDom);
    // var option;
    // function getCharts() {
    //     $.ajax({
    //         url: baseUrl + "/views/home/charts.json",
    //         headers: {'token': localStorage.getItem('token')},
    //         method: 'GET',
    //         success: function (data) {
    //             var symbolSize = 3;
    //             option = {
    //                 title: {
    //                     left: 'center',
    //                     text: 'Large Area Chart'
    //                 },
    //                 grid3D: {},
    //                 xAxis3D: {
    //                     type: 'category'
    //                 },
    //                 yAxis3D: {},
    //                 zAxis3D: {},
    //                 dataset: {
    //                     dimensions: [
    //                         'Income',
    //                         'Life Expectancy',
    //                         'Population',
    //                         'Country',
    //                         { name: 'Year', type: 'ordinal' }
    //                     ],
    //                     source: data
    //                 },
    //                 series: [
    //                     {
    //                         type: 'scatter3D',
    //                         symbolSize: symbolSize,
    //                         encode: {
    //                             x: 'Country',
    //                             y: 'Life Expectancy',
    //                             z: 'Income',
    //                             tooltip: [0, 1, 2, 3, 4]
    //                         }
    //                     }
    //                 ]
    //             };
    //             myChart.setOption(option);
    //         }
    //     });
    // }
    // getCharts();
    // option && myChart.setOption(option);
    // 地图 -----------------------------------------------------------------
    var map = new AMap.Map('map', {
        zoom: 4.85,
        pitch: 40,
        viewMode: '3D',
        center: [105.202202,32.699006],
        // mapStyle: 'amap://styles/8108947b4fec714c52ef08aa183a2237',
        // mapStyle: 'amap://styles/4fd4357cc9f7c46f0c227c9763f67a2d',
        mapStyle: 'amap://styles/7f20373ddc5b2456e7095fce1dab4aba',
        // mapStyle: 'amap://styles/dd57f58da78602dc3871efc29b2ba43d',
    });
    var loca = new Loca.Container({
        map,
    });
    var geo;
    var iconLayer = new Loca.IconLayer({
        zIndex: 10,
        opacity: 1,
    });
    function getMapData() {
        $.ajax({
            url: baseUrl + "/sensor/map/auth",
            headers: {'token': localStorage.getItem('token')},
            method: 'GET',
            success: function (res) {
                if (res.code === 200) {
                    geo = new Loca.GeoJSONSource({
                        data: res.data,
                    });
                    iconLayer.setSource(geo);
                    iconLayer.setStyle({
                        unit: 'px',
                        icon: (index, feature) => {
                            let data = feature.properties.rawData;
                            return trafficIcons[data.type % Object.keys(trafficIcons).length];
                        },
                        iconSize: [20,20],
                        rotation: 0,
                    })
                    loca.add(iconLayer);
                } else if (res.code === 403) {
                    top.location.href = baseUrl + "/";
                } else {
                    layer.msg(res.msg, {icon: 2})
                }
            }
        })
    }
    getMapData();
    // 拾取
    map.on('click', (e) => {
        const feat = iconLayer.queryFeature(e.pixel.toArray());
        if (feat) {
            map.setZoomAndCenter(19, new AMap.LngLat(feat.properties.rawData.lng, feat.properties.rawData.lat));
            iconLayer.setStyle({
                unit: 'px',
                icon: (index, feature) => {
                    let data = feature.properties.rawData;
                    return trafficIcons[data.type % Object.keys(trafficIcons).length];
                },
                iconSize: (i, feature) => {
                    if (feature === feat) {
                        return [40, 40];
                    }
                    return [20, 20];
                },
            });
            top.sensorByMap = feat.properties.rawData.sensorId;
            layer.open({
                type: 2
                ,id: 'LAY_adminPopupR'
                ,area: '700px'
                // ,url: 'sensor_detl.html'
                ,anim: -1
                ,title: false
                ,closeBtn: false
                ,offset: 'r'
                ,shade: 0.1
                ,shadeClose: true
                ,window: 'top'
                ,skin: 'layui-anim layui-anim-rl layui-layer-adminRight0'
                ,content: '../sensor_detl.html'
            });
        }
    });
    // --------------------------------------
    // https://www.highcharts.com.cn/demo/highcharts/3d-area-multiple
    // https://echarts.apache.org/examples/zh/editor.html?c=scatter3D-dataset&gl=1&version=5.2.1
    layui.config({
        base: baseUrl + "/static/layui/lay/modules/"
    }).extend({
@@ -528,111 +72,6 @@
        var carousel = layui.carousel;
        var device = layui.device();
        var admin = layui.admin;
        // 数据中心
        $('#toDataV').click(function () {
            window.open("https://lbs.amap.com/tools/picker");
        })
        getHeaderData();
        getBodyData();
        setInterval(function () {
            getHeaderData();
            getBodyData();
        }, 3000)
        // 渲染轮播
        carousel.render({
            elem: '#workplaceNewsCarousel',
            width: '100%',
            height: '70px',
            arrow: 'none',
            autoplay: true,
            trigger: device.ios || device.android ? 'click' : 'hover',
            anim: 'fade'
        });
        // 头部
        function getHeaderData() {
            $.ajax({
                url: baseUrl + "/console/header/auth",
                headers: {'token': localStorage.getItem('token')},
                method: 'GET',
                success: function (res) {
                    if (res.code === 200) {
                        var result = res.data;
                        $('#logQtyDay').text(result.logQtyDay);
                        $('#logQty').text(result.logQty);
                        $('#sensorQty').text(result.sensorQty);
                        $('#sensorOnlineQty').text(result.sensorOnlineQty);
                        $('#commandQty').text(result.commandQty);
                        $('#commandQtyMonth').text(result.commandQtyMonth);
                        $('#usersQty').text(result.usersQty);
                        $('#deptQty').text(result.deptQty);
                        $('#optQty').text(result.optQty);
                    } else if (res.code === 403) {
                        top.location.href = baseUrl + "/";
                    } else {
                        layer.msg(res.msg, {icon: 2})
                    }
                }
            })
        }
        // 主体
        function getBodyData() {
            $.ajax({
                url: baseUrl + "/console/body/auth",
                headers: {'token': localStorage.getItem('token')},
                method: 'GET',
                success: function (res) {
                    if (res.code === 200) {
                        // 安全库存
                        var tpl = $('#safeQuaTpl').html();
                        var template = Handlebars.compile(tpl);
                        var html = template(res.data);
                        $('#warnList').html(html);
                    } else if (res.code === 403) {
                        top.location.href = baseUrl + "/";
                    } else {
                        layer.msg(res.msg, {icon: 2})
                    }
                }
            })
        }
    });
    // 地图重置
    document.getElementById("map-reset").addEventListener("click", function () {
        map.setZoomAndCenter(4.85, new AMap.LngLat(105.202202, 32.699006));
        map.setRotation(0);
        map.setPitch(40);
        iconLayer.setStyle({
            unit: 'px',
            icon: (index, feature) => {
                let data = feature.properties.rawData;
                return trafficIcons[data.type % Object.keys(trafficIcons).length];
            },
            iconSize: [20,20],
            rotation: 0,
        })
    })
</script>
<script type="text/template" id="safeQuaTpl">
    {{#each warnList}}
        <div class="console-user-group">
            <div class="console-user-group-head">{{no}}</div>
            <div class="console-user-group-name">{{sensorType}}</div>
            <div class="console-user-group-desc">{{UUID}}</div>
            <span class="layui-badge layui-badge-red" style="letter-spacing: 1px">报警:{{msg}}</span>
        </div>
    {{/each}}
</script>
</body>
</html>