<template>
    <div class="sensor-page">
        <header>
            <div :class="activeId===item.id?'active item':'item'" v-for="item in items" :key="item.id" @click="changeHead(item)">{{ item.name }}</div>  
        </header>
        <div class="tab">
            <el-select v-model="conditions.goafOrebelt" placeholder="矿带"  @change="changeArea(1)" style="width:120px" clearable>
                <el-option v-for="(item,index) in goafOrebelts" :key="index" :value="item" :label="item" />
            </el-select>
            <el-select v-model="conditions.goafOrebody" placeholder="矿体"  @change="changeArea(2)" style="width:120px;margin:0 12px;">
                <el-option v-for="(item,index) in goafOrebodys" :key="index" :value="item.goafOrebody" :label="item.goafOrebody" />
            </el-select>
            <el-select v-model="conditions.goafOreheight" placeholder="中段"  @change="changeArea(3)" style="width:120px">
                <el-option v-for="(item,index) in goafOreheights" :key="index" :value="item.goafOreheight" :label="item.goafOreheight" />
            </el-select>
            <el-select v-model="conditions.goafId" placeholder="采空区编号"  @change="changeArea(4)" style="width:210px;margin:0 12px;">
                <el-option v-for="item in goafNames" :key="item.goafId" :value="item.goafId" :label="item.goafName" />
            </el-select>            
        </div>
        <div class="container">
            <div class="lf">
                <div class="search-container">
                    <div class="search-item">
                        <el-input v-model="conditions.goafDevName"  class="input" placeholder="请输入设备编号" />
                    </div>
                    <div class="search-item">
                        <span>预警等级：</span>
                        <el-select v-model="conditions.hdangerLevel" placeholder="全部" style="width:120px;margin-right:14px;" clearable>
                            <el-option
                            v-for="item in hdangerLevels"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value" 
                            />
                        </el-select>                    
                    </div>
                    <!-- <div class="search-item">
                        <span>状态：</span>
                        <el-select v-model="conditions.status" class="select" placeholder="全部">
                            <el-option
                            v-for="item in options"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                            />
                        </el-select>                    
                    </div> -->
                    <div class="search-item">
                            <!-- <span>预警开始时间：</span> -->
                            <el-date-picker
                                v-model="conditions.expectedStartDate"
                                type="datetime"
                                placeholder="预警开始时间"
                                format="YYYY-MM-DD HH:mm:ss"
                                value-format="YYYY-MM-DD HH:mm:ss"
                                style="width:200px;margin-right: 14px;"
                            />  
                        </div>     
                        <div class="search-item">
                            <!-- <span>预警结束时间：</span> -->
                            <el-date-picker
                                v-model="conditions.expectedEndDate"
                                type="datetime"
                                placeholder="预警结束时间"
                                style="width:200px;margin-right: 14px;"
                                format="YYYY-MM-DD HH:mm:ss"
                                value-format="YYYY-MM-DD HH:mm:ss"
                            />  
                        </div>   
                    <!-- <div class="search-item">
                        <span>数值范围：</span>
                        <el-input-number v-model="conditions.start" :max="conditions.end" class="input" placeholder="开始" :controls="false" style="width:100px;" />  
                        <span>-</span>  
                        <el-input-number v-model="conditions.end" :min="conditions.start" placeholder="结束" :controls="false" style="width:100px;margin:0 10px;" />                     
                    </div> -->
                    <div class="bt search" @click="searchSubmit">查询</div>
                    <div class="bt" @click="resetSubmit">重置</div>    
                </div>
                <div class="lf-container">
                    <div class="card-container">
                        <div class="card" v-for="(item,index) in dataList" :key="index">
                            <div class="title">{{item.goafDevTypename}}</div>
                            <div class="info">
                                <p>设备编号：{{item.goafDevName}}</p>
                                <p>安装区域：{{ NumConvertLM(item.goafOrebelt) }}/{{ item.goafOrebody }}/{{ item.goafOreheight }}/{{ item.goafName }}</p>
                                <p>安装位置：{{ item.goafDevLocation }}</p>
                                <p>阈值：{{item.goafAlarmThreshold}}</p>
                                <p>上报数据值：{{item.goafSensorValue}}</p>
                            </div>
                            <footer :class="'status-'+item.hdangerLevel">{{hdangerLevel(item.hdangerLevel)}}</footer>
                        </div>
                    </div> 
                    <div class="el-pagination-wrap">
                        <el-pagination small layout="prev, pager, next" 
                        :total="total"
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange" />
                     </div>                                   
                </div>
            </div>
            <div class="rt">
                <div class="head">
                    <div class="name">传感器数据统计</div>
                    <div class="number">{{statistics.total}}</div>
                </div>
                <div class="head-info">
                    <div class="item total">
                        <div class="name">总数</div>
                        <div class="number">{{statistics.total}}</div>                    
                    </div>
                    <div class="item normal">                        
                        <div class="name">正常</div>
                        <div class="number">{{statistics.normal}}</div>                    
                    </div>
                    <div class="item error">
                        <div class="name">异常</div>
                        <div class="number">{{statistics.error}}</div>                    
                    </div>
                </div>
                <div class="chart-wrap">
                    <div class="title">报警统计</div>
                    <alert-chart ref="alert-chart" />
                </div>
                <div class="chart-wrap">
                    <div class="title">预警处理情况</div>
                    <warn-chart ref="warn-chart" />
                </div>                
            </div>
        </div>
    </div>
</template>
<script>
import AlertChart from './components/AlertChart.vue'
import WarnChart from './components/WarnChart.vue'
import { getSensorByPage,sensordatatatis } from '@/api/goaf/sensor'
import {  getGoafBaseInfo } from '@/api/goaf/info'
import { NumConvertLM ,getTime} from '@/utils'
 export default {
    name:"sensor",
    components:{
        AlertChart,
        WarnChart
    },
    data(){
        return{
            activeId:'1',
            activetab:'1',
            conditions: {
                page: 1,
                limit: 8,
                goafId: '',
                goafOrebelt: '',
                goafOrebody: '',
                goafOreheight: '',
                goafName:"",
                goafDevName:"",
                hdangerLevel:"",
                goafDevTypename:"",
                expectedStartDate:getTime(),
                expectedEndDate:getTime(1),
                // start:0,
                // end:0
            }, 
            goafList: [],
            goafOrebelts: [],
            goafOrebodys: [],
            goafOreheights: [],
            goafNames: [],
            items:[
                {name:"首页",id:"1",path:"/particulars/sensor"},
                {name:"压力传感器",id:"2",path:"/particulars/check"},
                {name:"位移传感器",id:"3",path:"/particulars/goaf-info"},
                {name:"有害气体传感器",id:"4",path:"/particulars/goaf-info"},
                {name:"视频监控",id:"5",path:"/particulars/goaf-info"},
            ],
            options:[
                {label:1,value:2},
                {label:2,value:3},
                {label:3,value:4}
            ] ,
            hdangerLevels:[
                {label:"异常",value:0},
                {label:"威胁",value:1},
                {label:"危险",value:2},
                {label:"危急",value:3}
            ],   
            dataList:[],
            total:0 ,
            statistics:{
                total:0,
                normal:0,
                error:0
            }                 
        }
    },
    created(){
        this.init()
    },
    methods:{
        NumConvertLM,
        hdangerLevel(val){
            let status=["异常","威胁","危险","危急"]
            return status[val]||'正常'
        },
        init(){
            this.$nextTick(()=>{
                this.$refs['alert-chart'].init();
                this.$refs['warn-chart'].init();
            })
            this.getData()
            getGoafBaseInfo().then((res) => {
                const goafOrebelts = res.data.map(item => item.goafOrebelt)
                this.goafOrebelts = [...new Set(goafOrebelts)]
                this.goafList = res.data
            })   
            this.sensordatatatis()         
        },
        sensordatatatis(){
            sensordatatatis().then((res)=>{
                let error=res.data.pressureAlarmNum+res.data.displacementAlarmNum+res.data.harmfulGasAlarmNum
                let normal=res.data.sensorDataTotalNum-error
                this.statistics={
                    total:res.data.sensorDataTotalNum,
                    normal,
                    error
                }
            })
        },
        getData(){
            for(let key in this.conditions){
                if(this.conditions[key]===undefined||this.conditions[key]==="undefined"||this.conditions[key]===""){
                    delete this.conditions[key]
                }
            }
            getSensorByPage(this.conditions).then((resp) => {
                this.listLoading = false
                const {data, total } = resp
                let tab=this.items.filter(item=>this.activeId===item.id)[0]
                this.dataList = this.activeId==='1'?data:data.filter(item=>item.goafDevTypename===tab.name)
                this.total = total
            })
        },
        changeHead(item){
            this.activeId=item.id
            if(item.id==='5'){
                this.$router.push('/particulars/particulars-video')
            }else{
                this.init()
            }
        },
        searchSubmit(){
            this.conditions.page=1
            this.getData()
        },
        resetSubmit(){
            this.conditions={
                page: 1,
                limit: 8,
                goafId: '',
                goafOrebelt: '',
                goafOrebody: '',
                goafOreheight: '',
                goafName:"",
                goafDevName:"",
                hdangerLevel:"",
                goafDevTypename:"",
                expectedStartDate:getTime(),
                expectedEndDate:getTime(1),
                // start:0,
                // end:0           
            }
            this.goafOrebodys=[]
            this.goafOreheights=[]
            this.goafNames=[]  
            this.getData()
        },
        handleSizeChange(limit){
            this.conditions.limit=limit
            this.getData()
        },
        handleCurrentChange(pageNumber){
            this.conditions.page=pageNumber
        },
        changeArea(type) {
            const goafs = this.deeepClone(this.goafList)
            let goafOrebodys = this.deeepClone(this.goafOrebodys)
            let goafOreheights = this.deeepClone(this.goafOreheights)
            let goafNames = this.deeepClone(this.goafNames)
            if (type === 1) {
                goafOrebodys = goafs.filter(item => item.goafOrebelt === this.conditions.goafOrebelt)
                goafOrebodys = this.unique(goafOrebodys, 'goafOrebody')
                this.goafOrebodys = goafOrebodys
                this.goafOreheights = []
                this.goafNames = []
                this.conditions.goafOrebody = ''
                this.conditions.goafOreheight = ''
                this.conditions.goafName = ''
                this.conditions.goafId = ''
            } else if (type === 2) {
                goafOreheights = goafs.filter(item => (item.goafOrebody === this.conditions.goafOrebody) && (item.goafOrebelt === this.conditions.goafOrebelt))
                goafOreheights = this.unique(goafOrebodys, 'goafOreheight')
                this.goafOreheights = goafOreheights
                this.goafNames = []
                this.conditions.goafOreheight = ''
                this.conditions.goafName = ''
                this.conditions.goafId = ''
            } else if (type === 3) {
                goafNames = goafs.filter(item => (item.goafOreheight === this.conditions.goafOreheight) && (item.goafOrebody === this.conditions.goafOrebody) && (item.goafOrebelt === this.conditions.goafOrebelt))
                this.goafNames = goafNames
                this.conditions.goafName = ''
                this.conditions.goafId = ''
            } else {
                for (let i = 0; i < goafNames.length; i++) {
                if (this.conditions.goafId === goafNames[i].goafId) {
                    this.conditions.goafName = goafNames[i].goafName
                }
                }
            }
            this.$forceUpdate()
        },  
        unique(arr = [], name = 'name') {
            const res = new Map()
            return arr.filter((item) => !res.has(item[name]) && res.set(item[name], 1))
        },             
        deeepClone(params) {
            return JSON.parse(JSON.stringify(params))
        }  
    }
 }
</script>
<style lang="scss" scoped>
.sensor-page{
    .search-item{
        display: flex;
            justify-content: center;
            align-items: center;
            margin-bottom: 14px;
            span{
                font-family: 'Ping Hei';
                font-size: 14px;
                line-height: 1;
                color: rgba(255, 255, 255, 0.7);
            }
        }
        .input,.select,.el-date-editor{
            width: 180px;
            margin-right:16px;
            color: #fff;
        }
        ::v-deep{
            .el-input__wrapper{
                background-color:  rgba(8, 128, 255, 0.2);
                border: 0;
                box-shadow: none;               
            }
            .el-input__inner{
                color: #fff;
            }
    }    
    header{
        display: flex;
        justify-content: center;
        align-items: center;
        padding-top: 0.5vh;
        .item{
            width: 188px;
            height: 36px;
            line-height: 36px;
            text-align: center;
            background-image: url(@/assets/sensor/head.png);
            background-size: 100% 100%;
            background-repeat: no-repeat;
            margin-right: 12px;
            max-width: 20%;
            color: #7FCFF4;
            cursor: pointer;
            &.active{
                background-image: url(@/assets/sensor/head_active.png); 
                color: #2AFFFF;
            }
        }
    }
    .tab{
        padding-top: 1.5vh;
        .item{
            display: inline-block;
            padding: 5px 10px;
            color: #fff;
            font-size: 16px;
            background: #003B7A;
            border: 1px solid #004EA2;
            letter-spacing: 0.6px;
            margin-right: 24px;
            border-radius: 4px 15px 8px 4px;
            cursor: pointer;
            &.active{
                background: #0083CF;
                border: 1px solid #0097DD;
            }
        }
    }
    .container{
        display: flex;
        .lf{
            width: 60%;
            padding-left: 100px;
            .search-container{
                padding:4.4vh 0 5vh 0;
                box-sizing: border-box;
                display: flex;
                flex-wrap: wrap; 
                .bt{
                    width: 100px;
                    height: 36px;
                    line-height: 36px;
                    text-align: center;
                    color: #fff;
                    font-size: 14px;
                    background: rgba(8, 128, 255, 0.2);
                    border-radius: 4px;  
                    margin-top: 14px;    
                    cursor: pointer;   
                    margin-top: 0;           
                    &.search{
                        background: linear-gradient(rgba(94, 226, 255, 1),rgba(79, 175, 255, 1));
                        margin:0 10px 0 0;
                    }
                }       
            }
            .lf-container{
                .card-container{
                    display: flex;
                    justify-content: flex-start;
                    flex-wrap: wrap;
                    padding-left: 50px;
                    .card{
                        width: 22%;
                        height: 25vh;
                        background: rgba(35, 229, 254, 0.06);
                        border: 1px solid #115C7C;
                        margin:0 4% 10px 0;
                        box-sizing: border-box;
                        overflow: hidden;
                        padding: 14px;
                        color: #fff;
                        position: relative;
                        &:nth-child(4n){
                            margin-right: 0;
                        }
                        .title{
                            font-size: 18px;
                            font-weight: bold;
                            padding-bottom: 12px;
                            text-align: center;
                        }
                        .info{
                            font-size: 14px;
                            p{
                                line-height: 22px;
                                word-break: break-all;
                            }
                        }
                        footer{
                            width: 100%;
                            height: 36px;
                            line-height: 36px;
                            position: absolute;
                            bottom: 0;
                            left: 0;
                            text-align: center;
                            background: #0C6ECF;
                            &.status-1{
                                background: #DCBA3D;
                            }
                            &.status-2{
                                background: #EC6B1D;
                            }
                            &.status-3{
                                background: #F33737;
                            }
                        }
                    }
                } 
                .el-pagination-wrap{
                    float: right;
                    margin-top: 5vh;
                    ::v-deep{
                        .el-pager li,button{
                            background-color: #00539F;
                            margin-left: 10px;
                            color: rgba(255, 255, 255, 0.75);
                            &.is-active{
                                background-color: rgba(0, 131, 207, 1);
                            }
                        }
                    }
                }
            }         
        }
        .rt{
            flex: 1;
            padding-left: 5%;
            box-sizing: border-box;
            .head{
                height: 32px;
                background-image: url(@/views/home/images/home/title.png);
                background-size: 100% 100%;
                background-repeat: no-repeat;   
                color: #2affff;
                font-size: 20px;
                display: flex;
                justify-content: space-between;
                align-items: center;
                text-indent: 24px;
                padding: 0 14px;
                font-family: "YouSheBiaoTiHei";
                letter-spacing: 1px;
                margin-top: 4.8vh;
            }
            .head-info{
                display: flex;
                justify-content: center;
                align-items: center;
                padding-top: 20px;
                .item{
                    width: 33.33%;
                    display: flex;
                    justify-content: center;
                    align-items: center;  
                    flex-direction: column;
                    color: #fff;
                    font-size: 12px;
                    &.total{
                        display: block;
                        font-weight: bold;
                        text-align: left;
                        .name{
                            font-size: 14px;
                            line-height: 20px;
                        }
                        .number{
                            font-size: 20px;
                            line-height: 38px;
                            font-weight: 700;
                            background: rgba(108, 128, 151, 0.1)
                        }
                    }  
                    &.normal{
                        border-left:1px solid rgba(255, 255, 255, 0.12);
                        border-right:1px solid rgba(255, 255, 255, 0.12);
                        margin: 0 2%;
                        height: 100%;
                        .number{
                            font-size: 20px;
                            line-height: 28px;
                            color: #3CD495;
                            font-weight: 500;
                        }                        
                    }  
                    &.error{
                        .number{
                            font-size: 20px;
                            line-height: 28px;
                            color: #D4603C;
                            font-weight: 500;
                        }                        
                    }                 
                }
            }
            .chart-wrap{
                padding-top: 0.8vh;
                .title{
                    color: #fff;
                    font-size: 18px;
                    line-height: 20px;
                    padding: 10px;
                    position: relative;
                    font-family: "YouSheBiaoTiHei";
                    letter-spacing: 1px;
                    margin-bottom: 2vh;
                    &::after{
                        display: block;
                        content: "";
                        width: 100%;
                        height: 3px;
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        background-image: url('./images/line.png');
                        background-repeat: no-repeat;
                        background-size: 100% 100%;
                    }
                }
            }
        }
    }
}

</style>