#
whycq
2022-07-18 1bc2f4fcfb6238544b589c2b26e7c2d68d93b3f3
#
1个文件已添加
1069 ■■■■■ 已修改文件
Monitor-APP/pages/index/index_test.vue 1069 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Monitor-APP/pages/index/index_test.vue
New file
@@ -0,0 +1,1069 @@
<template>
    <view class="container">
        <view class="floor-screen" :class="floorMove" >
            <view class="head">
                <text @click="port()">自动仓库WCS监控平台</text>
                <view class="time-tools">{{year}}-{{month}}-{{day}}&nbsp{{hours}}:{{minutes}}:{{seconds}}&nbsp{{week}}</view>
                <view class="button-left" @click="url()"></view>
                <view class="button-right" @click="ledId()"></view>
            </view>
            <view class="main">
                <view class="main-sides" style="width: 100%;">
                    <view class="box" style="height: 90%;">
                        <view class="box-border box-border1"></view>
                        <view class="box-border box-border2"></view>
                        <view class="box-border box-border3"></view>
                        <view class="box-border box-border4"></view>
                        <!-- 全板出库 -->
                        <view style="width: 10%;height: 100%;display:inline-block;float: left;text-align: center;padding-top: 180px;">
                            <text>{{title}}</text>
                        </view>
                        <!-- 滚动区域 -->
                        <view style="width: 80%;height: 100%;display: inline-block;">
                            <!--显示order订单编号 -->
                            <text v-show="orderShow" style="display: block;font-size: 140rpx;" >{{orderNo}}</text>
                            <swiper :class="swiper" circular="true" vertical="true" display-multiple-items="6" :autoplay="autoplay" :interval="interval" :duration="duration">
                                <swiper-item v-for="(item,index) in matList" :key="index">
                                    <view style="font-size: 160rpx;">{{item}}</view>
                                </swiper-item>
                            </swiper>
                        </view>
                        <!-- 站台号 -->
                        <view style="width: 10%;height: 100%;display: inline-block;float: right;padding-top: 180px;">
                            <text>{{staNo}}</text>
                        </view>
                    </view>
                </view>
            </view>
        </view>
        <view class="top-screen" :class="topMove">
            <view class="head">
                <text @click="port()">自动仓库WCS监控平台</text>
                <view class="time-tools">{{year}}-{{month}}-{{day}}&nbsp{{hours}}:{{minutes}}:{{seconds}}&nbsp{{week}}</view>
                <view class="button-left" @click="url()"></view>
                <view class="button-right" @click="ledId()"></view>
            </view>
            <view class="main">
                <view class="main-sides">
                    <view class="box box-lg">
                        <view class="box-border box-border1"></view>
                        <view class="box-border box-border2"></view>
                        <view class="box-border box-border3"></view>
                        <view class="box-border box-border4"></view>
                        <view class="box-item introduce">
                            <h3>自动化立体仓库</h3>
                            <p class="english">Automatic Storageand Retrieval System</p>
                            <p class="introduce-content">  利用立体仓库设备可实现仓库高层合理化、存取自动化、操作简便化;自动化立体仓库是当前技术水平较高的形式。
                            自动化立体仓库的主体由货架、巷道式堆垛起重机、入(出)库工作台和自动运进(出)及操作控制系统组成。
                            货架是钢结构或钢筋混凝土结构的建筑物或结构体,货架内是标准尺寸的货位空间,巷道堆垛起重机穿行于货架之间的巷道中,完成存、取货的工作。管理上采用计算机及条形码技术。</p>
                        </view>
                        <view class="box-item charge-info">
                            <h3>仓库数据</h3>
                            <p class="english">warehouse data</p>
                            <view class="charge-info-item">
                                <image src="../../static/a1.png" mode="aspectFit"></image>
                                <view>
                                    <text class="count">{{xDistance}}</text>
                                    <text class="unit">m</text>
                                </view>
                                <view>累计走行距离(米)</view>
                            </view>
                            <view class="charge-info-item">
                                <image src="../../static/b1.png" mode="aspectFit"></image>
                                <view>
                                    <text class="count">{{yDistance}}</text>
                                    <text class="unit">m</text>
                                </view>
                                <view>累计升降距离(米)</view>
                            </view>
                            <view class="charge-info-item">
                                <image src="../../static/c1.png" mode="aspectFit"></image>
                                <view>
                                    <text class="count">{{xDuration}}</text>
                                    <text class="unit">m</text>
                                </view>
                                <view>累计走行时长(秒)</view>
                            </view>
                            <view class="charge-info-item">
                                <image src="../../static/d1.png" mode="aspectFit"></image>
                                <view>
                                    <text class="count">{{yDuration}}</text>
                                    <text class="unit">m</text>
                                </view>
                                <view>累计升降时长(秒)</view>
                            </view>
                        </view>
                        <view class="box-item use-info">
                            <view class="use-left">
                                <h3>库位使用率</h3>
                                <p class="english">EQUIPMENT USAGE THIS MONTH</p>
                            </view>
                            <view class="use-right">
                                <h3>20%</h3>
                                <p class="english">同比上月 + 5%</p>
                            </view>
                            <view class="use-main">
                                <view class="left">
                                    <view class="progressBar">
                                        <view class="progress" :style="'width:'+ usedPr + '%'"></view>
                                    </view>
                                    <!-- <progress percent="20"activeColor="#FF5722" backgroundColor="#233751" stroke-width="30"></progress> -->
                                </view>
                                <view class="right">
                                    {{used}}
                                </view>
                            </view>
                        </view>
                    </view>
                </view>
                <view class="main-sides">
                    <view class="box box-tp">
                        <view class="box-border box-border1"></view>
                        <view class="box-border box-border2"></view>
                        <view class="box-border box-border3"></view>
                        <view class="box-border box-border4"></view>
                        <view class="box-item right-item">
                            <view class="sub-left">
                                <h3>入出库统计</h3>
                                <p class="english">ORDER STATISTICS</p>
                            </view>
                            <view class="sub-right">
                                <h3>31</h3>
                                <p class="english">今日订单数</p>
                            </view>
                            <view class="sub-main">
                                <view class="charts-box">
                                  <qiun-data-charts type="line" :chartData="chartsDataLine1" :echartsH5="true" :echartsApp="true"/>
                                </view>
                            </view>
                        </view>
                    </view>
                    <view class="box box-md">
                        <view class="box-border box-border1"></view>
                        <view class="box-border box-border2"></view>
                        <view class="box-border box-border3"></view>
                        <view class="box-border box-border4"></view>
                        <view class="box-item right-item">
                            <view class="sub-left">
                                <h3>库存类型</h3>
                                <p class="english">INCOME DATE</p>
                            </view>
                            <view class="sub-right">
                                <h3>今天</h3>
                                <p class="english">Today</p>
                            </view>
                            <view class="sub-main">
                                <view class="charts-box ring">
                                    <qiun-data-charts type="ring" :opts="{legend:{position:'bottom'}}" :eopts="ringOpts" :chartData="chartsDataPie2" :echartsH5="true" :echartsApp="true"/>
                                </view>
                                <view class="sub-main-right">
                                    <view class="sub-info">
                                        <image src="../../static/g1.png" mode="aspectFit"></image>
                                        <text>在库</text>
                                        <text>{{stockCount}}</text>
                                    </view>
                                    <view class="sub-info">
                                        <image src="../../static/f1.png" mode="aspectFit"></image>
                                        <text>空库</text>
                                        <text>{{emptyCount}}</text>
                                    </view>
                                    <view class="sub-info">
                                        <image src="../../static/e1.png" mode="aspectFit"></image>
                                        <text>禁用</text>
                                        <text>{{noneCount}}</text>
                                    </view>
                                </view>
                            </view>
                        </view>
                    </view>
                    <view class="box box-bt">
                        <view class="box-border box-border1"></view>
                        <view class="box-border box-border2"></view>
                        <view class="box-border box-border3"></view>
                        <view class="box-border box-border4"></view>
                        <!-- <text>浙江中扬立库技术有限公司</text>
                        <text>当前版本号</text> -->
                        <view>浙江中扬立库技术有限公司</view>
                        <image src="../../static/barcode.png" mode="aspectFit"></image>
                    </view>
                </view>
            </view>
        </view>
        <view>
            <!-- 输入url -->
            <uni-popup ref="url" type="dialog">
                <uni-popup-dialog ref="inputClose" mode="input" title="配置url" :value="baseUrl"
                    placeholder="示例:192.168.1.1" @confirm="baseUrlConfirm"></uni-popup-dialog>
            </uni-popup>
        </view>
        <view>
            <!-- 输入ledId -->
            <uni-popup ref="ledId" type="dialog">
                <uni-popup-dialog ref="inputClose" mode="input" title="配置ledId" :value="baseLedId"
                    placeholder="示例:188" @confirm="ledIdConfirm"></uni-popup-dialog>
            </uni-popup>
        </view>
        <view>
            <!-- 输入port -->
            <uni-popup ref="port" type="dialog">
                <uni-popup-dialog ref="inputClose" mode="input" title="配置端口号" :value="basePort"
                    placeholder="示例:9090" @confirm="portConfirm"></uni-popup-dialog>
            </uni-popup>
        </view>
    </view>
</template>
<script>
    import ycqdata from '@/pages/index/data.json';
    import demodata from '@/mockdata/demodata.json';
    export default {
        data() {
            return {
                show: true,
                modeClass: 'fade',
                styles: {},
                baseUrl:'10.10.0.200',
                baseLedId:'',
                basePort:'',
                value: '',
                xDistance: 0,
                yDistance:0,
                xDuration:0,
                yDuration:0,
                used:317,
                usedPr: 90,
                stockCount:0,
                emptyCount:0,
                noneCount:0,
                chartsData: {
                    "Line": {
                        "categories": [],
                        "series": []
                    },
                    "Pie": {
                        "series": [{
                            "data": []
                        }]
                    },
                },
                chartsDataLine1: {},
                chartsDataPie2: {},
                ringOpts:{},
                year:2022,
                month:4,
                day:14,
                hours:13,
                minutes:38,
                seconds:13,
                week:'星期四',
                ani:'',
                // move: 'upMove 1.5s 1;',
                move:true,
                topMove:'topUp',
                floorMove:'',
                version:'',
                // newspaper:'拣料出库(4426)\n源库位:1200101\n目标站:186\n1101842-10000-22047518517\n\n',
                newspaper:'',
                errorPaper:'',
                title:'',
                staNo:'',
                errorShow:'',
                pakinShow:'',
                pakinGun:'',
                orderShow:false,
                orderNo:null,
                swiper:'swiper-here',
                autoplay:true, // 自动循环
                interval:1000, // 调用时长
                duration:6000, // 移动速度
                matList:[], // 订单列表
            }
        },
        mounted() {
            let that = this
            const BaseUrl = uni.getStorageSync('BaseUrl');
            const BaseLedId = uni.getStorageSync('BaseLedId');
            const BasePort = uni.getStorageSync('BasePort');
            if (BaseUrl && BaseLedId) {
                that.baseUrl = BaseUrl
                that.baseLedId = BaseLedId
                that.basePort = BasePort
            } else {
                that.baseUrl = ''
                that.baseLedId = ''
            }
        },
        onReady() {
            setTimeout(() => {
                // this.initlineChart();
                // this.initPieChart();
            }, 0);
            setTimeout(() => {
                // this.getServerData();
                // this.getOther();
                // this.getPakin();
            }, 1000);
            setInterval(() => {
                this.getDate();
                // this.getPakin();
                // this.getError();
                this.getYYY();
                this.getEEE();
                this.animation();
            },1000)
        },
        methods: {
            getEEE() {
                var result = ycqdata.dataEEE
                let that = this
                let res = result.data
                if (res.data && res.data !== "") {
                    that.matList = []
                    that.orderNo = null
                    that.matList.push(res.data)
                    that.swiper = 'swiper-here-error'
                    that.title = ''
                    that.staNo = ''
                    that.pakinShow = false
                    that.errorShow = true
                    that.move = false // 显示
                } else {
                    that.errorPaper = ''
                    that.errorShow = false
                    if (that.pakinShow) {
                        return;
                    } else {
                        that.move = true // 隐藏
                    }
                }
            },
            getYYY() {
                var result = ycqdata.dataYYY
                let that = this
                that.matList = [] // 清空条码列表
                var newsData = ''
                var str = ''
                let res = result.data
                if(res.data && res.data !== null) {
                    if (res.data[0].matDtos.length > 0) {
                        that.pakinShow = true
                        that.pakinGun = true
                        if (res.data[0].ioType === 101) {
                            that.title = '全板出库'
                        } else if(res.data[0].ioType === 103) {
                            that.title = '检料出库'
                        }
                        if (res.data[0].orderNo) {
                            that.orderNo = "订单号:" + res.data[0].orderNo
                            that.swiper = 'swiper-here-oN'
                            that.orderShow = true
                        } else {
                            that.orderNo = null;
                            that.swiper = 'swiper-here'
                            that.orderShow = false
                        }
                        that.staNo = '目标站' + res.data[0].staNo
                        for (var i = 0; i < res.data[0].matDtos.length; i++) {
                            var matnr = res.data[0].matDtos[i].matnr + ' - ' + res.data[0].matDtos[i].batch
                            that.matList.push(matnr)
                        }
                        if (that.errorShow) {
                            // that.pakinShow = false
                            return;
                        } else {
                            that.newspaper = newsData
                            that.move = false
                        }
                        if (res.data[0].matDtos.length <= 8) {
                            that.errorShow = true
                            that.pakinShow = true
                            that.pakinGun  = false
                        }
                    } else {
                        that.move = true
                        }
                } else {
                    that.move = true
                }
            },
            getError() {
                let that = this
                uni.request({
                    url: "http://" + that.baseUrl + ":" + that.basePort + "/jkwcs/monitor/led/error",
                    data: {
                        ledId:that.baseLedId
                    },
                    method:'GET',
                    success(result) {
                        let res = result.data
                        if (res.data && res.data !== "") {
                            that.title = ''
                            that.staNo = ''
                            that.pakinShow = false
                            that.errorShow = true
                            that.errorPaper = res.data
                            that.move = false // 显示
                        } else {
                            that.errorPaper = ''
                            that.errorShow = false
                            if (that.pakinShow) {
                                return;
                            } else {
                                that.move = true // 隐藏
                            }
                        }
                    }
                });
            },
            getPakin () {
                let that = this
                uni.request({
                    url: "http://" + that.baseUrl + ":" + that.basePort + "/jkwcs/monitor/led",
                    data: {
                        ledId:that.baseLedId
                    },
                    method:'GET',
                    success(result) {
                        var newsData = ''
                        var str = ''
                        let res = result.data
                        if(res.data && res.data !== null) {
                            if (res.data[0].matDtos.length > 0) {
                                that.pakinShow = true
                                that.pakinGun = true
                                if (res.data[0].ioType === 101) {
                                    that.title = '全板出库'
                                } else if(res.data[0].ioType === 103) {
                                    that.title = '检料出库'
                                }
                                if (res.data[0].orderNo) {
                                    that.orderShow = true
                                } else {
                                    that.orderShow = false
                                }
                                that.staNo = '目标站' + res.data[0].staNo
                                for (var i = 0; i < res.data[0].matDtos.length; i++) {
                                    str = res.data[0].matDtos[i].matnr + ' - ' + res.data[0].matDtos[i].batch + '\n'
                                    newsData = newsData + str
                                }
                                if (that.errorShow) {
                                    return;
                                } else {
                                    that.newspaper = newsData
                                    that.move = false
                                }
                                if (res.data[0].matDtos.length <= 8) {
                                    that.errorShow = true
                                    that.pakinShow = true
                                    that.pakinGun  = false
                                }
                            } else {
                                that.move = true
                            }
                        } else {
                            that.move = true
                        }
                    }
                })
            },
            animation() {
                if (this.move) {
                    // 上层向上 / 下层向上
                    this.topMove = 'topUp'
                    this.floorMove = 'floorUp'
                } else {
                    // 上层向下 / 下层向下
                    this.topMove = 'topDown'
                    this.floorMove = 'floorDown'
                }
            },
            getDateFormat(value) {
                var date = new Date();// 获取当前时间
                date.setDate(date.getDate() + value);// 设置天数 -1 天
                var m = date.getMonth() + 1
                var d = date.getDate()
                var newDate = m + '-' + d
                return newDate
            },
/*************** 折线图 *****************************************************************************************************/
            initlineChart() {
                let that = this
                uni.request({
                    url: "http://10.10.0.222:9090/jswcs/monitor/line/charts",
                    method:'GET',
                    success(result) {
                        var res = result.data
                        if (res.code === 200) {
                            that.chartsData.Line.categories = [that.getDateFormat(-11),that.getDateFormat(-10),that.getDateFormat(-9),that.getDateFormat(-8),that.getDateFormat(-7),that.getDateFormat(-6),that.getDateFormat(-5),that.getDateFormat(-4),that.getDateFormat(-3),that.getDateFormat(-2),that.getDateFormat(-1),that.getDateFormat(0),]
                            that.chartsData.Line.series = res.data.rows
                        }
                    }
                })
            },
/*************** 饼图 *****************************************************************************************************/
            initPieChart() {
                let that = this
                uni.request({
                    url: "http://10.10.0.222:9090/jswcs/monitor/loc/rep",
                    method:'GET',
                    success(result) {
                        var res = result.data
                        if (res.code === 200) {
                            that.chartsData.Pie.series[0].data = res.data.pie
                            that.stockCount = res.data.stockCount
                            that.emptyCount = res.data.emptyCount
                            that.noneCount = res.data.noneCount
                            that.used = res.data.used
                            that.usedPr = res.data.usedPr
                        }
                    }
                })
            },
            getOther() {
                let that = this
                uni.request({
                    // http://10.10.0.222:9090/jkwcs/monitor/led?ledId=186
                    url: "http://" + that.baseUrl + ":9090/jswcs/monitor/other",
                    data: {
                        crnId: 1,
                        ledId: this.baseLedId,
                    },
                    success(result) {
                        var res = result.data
                        if (res.code === 200) {
                            that.xDistance = res.data.xDistance
                            that.yDistance = res.data.yDistance
                            that.xDuration = res.data.xDuration
                            that.yDuration = res.data.yDuration
                            console.log(res)
                        } else if (res.code === 403) {
                        } else {
                        }
                    }
                })
            },
            port() {
                this.$refs.port.open()
            },
            url() {
                this.$refs.url.open()
            },
            ledId() {
                this.$refs.ledId.open()
            },
            baseUrlConfirm(val) {
                this.baseUrl = val
                uni.setStorageSync('BaseUrl', this.baseUrl);
            },
            ledIdConfirm(val) {
                this.baseLedId = val
                uni.setStorageSync('BaseLedId', this.baseLedId);
            },
            portConfirm(val) {
                this.basePort = val
                uni.setStorageSync('BasePort',this.basePort);
            },
            getServerData() {
                this.chartsDataLine1=JSON.parse(JSON.stringify(this.chartsData.Line))
                this.chartsDataPie2=JSON.parse(JSON.stringify(this.chartsData.Pie))
            },
            complete(e) {
                console.log("渲染完成事件",e);
            },
            getDate() {
                var dt = new Date();
                this.year = dt.getFullYear();
                this.month = (dt.getMonth()+1) < 10 ? '0'+ (dt.getMonth()+1) : (dt.getMonth()+1);
                this.day = dt.getDate() < 10 ? '0'+dt.getDate() : dt.getDate();
                this.hours = dt.getHours() < 10 ? '0' + dt.getHours() : dt.getHours();
                this.minutes = dt.getMinutes() < 10 ? '0' + dt.getMinutes() : dt.getMinutes();
                this.seconds = dt.getSeconds() < 10 ? '0' + dt.getSeconds() : dt.getSeconds();
                this.weeks = dt.getDay();
                switch (this.weeks) {
                    case 0: this.week = "星期日"; break;
                    case 1: this.week = "星期一"; break;
                    case 2: this.week = "星期二"; break;
                    case 3: this.week = "星期三"; break;
                    case 4: this.week = "星期四"; break;
                    case 5: this.week = "星期五"; break;
                    default : this.week = "星期六";
                }
            },
        }
    }
</script>
<style>
    /* 当前页面无 orderNo */
    .swiper-here {
        display: inline-block;
        margin: 0 auto;
        width: 100%;
        height: 100%;
    }
    /* 当前页面有 orderNo */
    .swiper-here-oN{
        display: inline-block;
        /* background-color: #063A7B; */
        margin: 0 auto;
        width: 100%;
        height: 90%;
    }
    /* 当前页面有 error提示 */
    .swiper-here-error {
        display: inline-block;
        /* background-color: #063A7B; */
        /* margin: 0 auto; */
        margin-top: 20%;
        width: 100%;
        height: 100%;
    }
    .animate {
        display: inline-block;
                /* white-space: nowrap; */
                animation: 25s wordsLoop linear infinite normal;
            }
            @keyframes wordsLoop {
                0% {
                    transform: translateY(100px);
                    -webkit-transform: translateY(100px);
                }
                100% {
                    transform: translateY(-100%);
                    -webkit-transform: translateY(-100%);
                }
            }
            @-webkit-keyframes wordsLoop {
                0% {
                    transform: translateY(100px);
                    -webkit-transform: translateY(100px);
                }
                100% {
                    transform: translateY(-100%);
                    -webkit-transform: translateY(-100%);
                }
            }
    /* animation:upMove 1.5s 1; */
    /* downMove */
    /* 上层向上 */
    .topUp {
        animation: topUp 1.5s 1;
        animation-fill-mode: both;
    }
    @keyframes topUp {
        from {
            opacity: 0.5;
            /* background-color:blue; */
            top:-1080px
            }
        to {
            opacity: 1;
            /* background-color:red; */
            top: 0;
        }
    }
    /* 上层向下 */
    .topDown {
        animation: topDown 1.5s 1;
        animation-fill-mode: both;
    }
    @keyframes topDown
        {
        from {
            opacity: 1;
            /* background-color:red; */
            top: 0;
        }
        to {
            opacity: 0.5;
            /* background-color:blue; */
            top:-1080px
        }
    }
    /* 下层向上 */
    .floorUp {
        animation: floorUp 1.5s 1;
        animation-fill-mode: both;
    }
    @keyframes floorUp {
        from {
            opacity: 0.5;
            /* background-color:blue; */
            top: 0px;
            }
        to {
            opacity: 1;
            /* background-color:red; */
            top: 1080px;
        }
    }
    /* 下层向下 */
    .floorDown {
        animation: floorDown 1.5s 1;
        animation-fill-mode: both;
    }
    @keyframes floorDown {
        from {
            opacity: 0.5;
            /* background-color:blue; */
            top: 1080px;
            }
        to {
            opacity: 1;
            /* background-color:red; */
            top: -0px;
        }
    }
    .top-screen {
        position: fixed;
        width: 1920px;
        height: 1080px;
        /* top: -1000px; */
        background-image: url(../../static/background.png);
        /* background:red; */
        /* animation:upMove 1.5s 1; */
        z-index: 999;
    }
    .floor-screen {
        width: 1920px;
        height: 1080px;
        position: relative;
        color: #FFFFFF;
        text-align: center;
        font-size: 200rpx;
        letter-spacing: 5rpx;
        background-image: url(../../static/background.png);
    }
    .container {
        width: 1920px;
        height: 1080px;
        position: relative;
        /* background: #000428;
        background: -webkit-linear-gradient(to right, #004e92, #000428);
        background: linear-gradient(to right, #004e92, #000428); */
    }
    .head {
        /* background-color: #55aaff; */
        width: 100%;
        height: 10%;
        text-align: center;
        line-height: 110px;
        color: #FFFFFF;
        font-size: 40px;
        font-weight: 700;
        letter-spacing: 5px;
    }
    .head text {
        transform: scale(1,0.9);
    }
    .time-tools {
        height: 5%;
        /* background-color: #007AFF; */
        position: absolute;
        top: 0;
        float: right;
        right: 50px;
        font-size: 16px;
        font-weight: 400;
        line-height: 70px;
        letter-spacing: 1px;
    }
    .button-left {
        position: absolute;
        background-image: url(../../static/right.png);
        background-size: 100% 100%;
        top: 1.8%;
        left: 21.3%;
        width: 13.5%;
        height: 8.5%;
        transform: scaleX(-1);
    }
    .button-right {
        position: absolute;
        background-image: url(../../static/right.png);
        background-size: 100% 100%;
        top: 1.8%;
        left: 65%;
        width: 13.5%;
        height: 8.5%;
    }
    .main {
        /* background-color: #3F536E; */
        position: relative;
        width: 100%;
        height: 90%;
    }
    .main-sides {
        /* background-color: #004E92; */
        position: relative;
        display: inline-block;
        float: left;
        width: 50%;
        height: 100%;
        /* margin: 2% auto 0 3.2%;
        border: 1px solid rgba(20, 80, 136, 1); */
    }
    .box {
        position: relative;
        /* background-color: #ffffff; */
        margin: 3% 2% 0 2%;
        width: 96%;
        height: 30%;
        border: 1px solid rgba(20, 80, 136, 1);
        overflow: hidden;
    }
    .box-lg {
        height: 94%;
    }
    .box-border {
        position: absolute;
        /* background-color: #4CD964; */
        width: 10px;
        height: 10px;
    }
    .box-border1 {
        top: 0;
        left: 0;
        border-left: 2px solid #31c4c4;
        border-top: 2px solid #31c4c4;
    }
    .box-border2 {
        top: 0;
        right: 0;
        border-right: 2px solid #31c4c4;
        border-top: 2px solid #31c4c4;
    }
    .box-border3 {
        bottom: 0;
        left: 0;
        border-bottom: 2px solid #31c4c4;
        border-left: 2px solid #31c4c4;
    }
    .box-border4 {
        bottom: 0;
        right: 0;
        border-right: 2px solid #31c4c4;
        border-bottom: 2px solid #31c4c4;
    }
    .content {
      display: flex;
      flex-direction: column;
      flex: 1;
    }
    .charts-box {
      width: 80%;
      height: 230px;
      margin-left: 10%;
      /* background-color: #fff; */
    }
    .ring {
        display: inline-block;
        float: left;
        width: 60%;
        height: 300px;
        margin-left: -10%;
    }
    .box-item {
        /* background-color: #2C405A; */
        width: 92%;
        height: 20%;
        margin-left: 4%;
        padding-top: 1em;
        color: #FFFFFF;
    }
    .introduce {
        height: 30%;
    }
    .introduce h2 {
        letter-spacing: 5px;
    }
    .english {
        font-size: 14px;
    }
    .introduce-content {
        font-size: 20px;
        padding-top: 2em;
        text-indent: 2em;
        line-height: 2em;
    }
    .charge-info {
        /* background-color: #2C405A; */
        height: 45%;
    }
    .charge-info-item {
        /* background-color: #EE6666; */
        display: inline-block;
        width: 50%;
        height: 40%;
    }
    .charge-info-item image {
        display: inline-block;
        float: left;
        /* background-color: #4CD964; */
        height: 100%;
        width: 20%;
    }
    .charge-info-item view {
        display: inline-block;
        position: relative;
        margin-left: 10%;
        width: 70%;
        height: 49%;
        /* background-color: #1890FF; */
    }
    .charge-info-item .count, .charge-info-item .unit{
        position: absolute;
        display: inline-block;
        font-size: 32px;
        bottom: 0;
        padding-left: 5%;
    }
    .charge-info-item .unit {
        font-size: 16px;
        float: right;
        right: 20%;
    }
    .footer {
        position: absolute;
        border: 1px solid rgba(20, 80, 136, 1);
        height: 15%;
    }
    .use-info {
        /* background-color: #007AFF; */
    }
    .use-left {
        display: inline-block;
        /* background-color: #2C405A; */
        width: 40%;
    }
    .use-right {
        display: inline-block;
        /* background-color: #2C405A; */
        float: right;
        width: 20%;
    }
    .use-main {
        width: 100%;
        height: 75%;
        /* background-color: #4CD964; */
    }
    .use-main .left {
        /* background-color: #ffaa7f; */
        display: inline-block;
        float: left;
        height: 100%;
        width: 70%;
        line-height: 20px;
    }
    .left .progressBar {
        /* margin-left: ; */
        margin-top: 9%;
        width: 100%;
        height: 20%;
        background-color: #233751;
        border-radius: 20px;
    }
    .left .progress {
        /* width: 90%; */
        height: 100%;
        background-color: #FF5722;
        border-radius: 20px;
    }
    .left progress {
        margin-left: 10%;
        margin-top: 10%;
        display: block;
    }
    .use-main .right {
        /* background-color: #ffaaff; */
        display: inline-block;
        float: right;
        height: 100%;
        width: 20%;
        font-size: 40px;
        color: #FF5722;
        line-height: 130px;
    }
    .box-tp {
        height: 30%;
    }
    .box-tp .sub-main {
        /* background-color: #FFFFFF; */
    }
    .box-md {
        height: 43%;
    }
    .box-md .sub-main {
    }
    .sub-main-right {
        display: inline-block;
        height: 100%;
        width: 50%;
    }
    .sub-info {
        width: 100%;
        height: 33%;
    }
    .sub-info image {
        display: inline-block;
        float: left;
        height: 100%;
        width: 15%;
    }
    .sub-info text {
        display: inline-block;
        width: 40%;
        height: 100%;
        text-align: center;
        line-height: 120px;
        font-size: 20px;
    }
    .box-bt {
        background-color: #063A7B;
        border: none;
        height: 15%;
        color: #FFFFFF;
    }
    .box-bt image {
        position: absolute;
        float: right;
        right: 0;
        top: 0;
        width: 20%;
        height: 100%;
    }
    .box-bt {
        font-size: 36px;
        line-height: 140px;
        text-indent: 5em;
    }
    .right-item {
        height: 94%;
    }
    .sub-left {
        display: inline-block;
        float: left;
        width: 40%;
    }
    .sub-right {
        display: inline-block;
        float: right;
        width: 20%;
    }
    .sub-main {
        position: absolute;
        /* background-color: #31C4C4; */
        width: 92%;
        height: 80%;
        bottom: 0;
    }
</style>