<!-- 全厂电量统计 -->
<template>
    <div class="app-container">
        <el-header>
            <div class="left-panel">
                <el-date-picker
                    v-model="search_date"
                    type="month"
                    value-format="YYYY-MM"
                    format="YYYY-MM"
                    placeholder="月"
                    style="margin-right: 6px;"
                    @change="dateChange"
                />
                <el-button
                    type="primary"
                    icon="el-icon-search"
                    @click="getTableData"
                ></el-button>
                <el-button
                    type="primary"
                    @click="exportExcel()"
                    :loading = "exportLoading"
                    >导出xlsx
                </el-button>
                <el-button
                    type="primary"
                    @click="handlePrint"
                    >打印
                </el-button>
            </div>
        </el-header>
        <el-card style="margin-top:5px">
            <div class="printWrap">
                <div ref="print" id="myReport" class="printContainer">
                    <table border="1"  width="3300" cellspacing="0" :key="timeStamp" id="myTable" class="myTable">
                        <thead class="myTableHead">
                            <tr>
                                <th :colspan="headerLength">全厂电量日统计</th>
                            </tr>
                            <tr>
                                <th>车间</th>
                                <th>工段</th>
                                <th>设备</th>
                                <th v-for="item in days" :key="item">{{ item }}日</th>
                            </tr>
                        </thead>
                        <tr v-for="(item,index) in tableDatas" :key="index">
                            <td class="numCell" v-if="index==0" rowspan="9">{{item[0]}}</td>
                            <td class="numCell" v-else-if="index==9" rowspan="18">{{item[0]}}</td>
                            <td class="numCell" v-else-if="index==27" rowspan="12">{{item[0]}}</td>
                            <td class="numCell" v-else-if="index==39" rowspan="10" colspan="2">{{item[0]}}</td>
                            <td class="numCell" v-else-if="index==49" colspan="3">{{item[0]}}</td>
                            <td class="numCell" v-if="index==8||index==26||index==37||index==38" colspan="2">{{item[1]}}</td>
                            <td class="numCell" v-else-if="index==0" rowspan="2">{{item[1]}}</td>
                            <td class="numCell" v-else-if="index==2" rowspan="6">{{item[1]}}</td>
                            <td class="numCell" v-else-if="index==9" rowspan="14">{{item[1]}}</td>
                            <td class="numCell" v-else-if="index==23" rowspan="3">{{item[1]}}</td>
                            <td class="numCell" v-else-if="index==27" rowspan="10">{{item[1]}}</td>
                            <td class="numCell" v-else>{{item[1]}}</td>
                            <td class="numCell">{{item[2]}}</td>
                            <template v-for="day in days" :key="day">
                                <td class="numCell" v-if="item[day+2]!==null&&item[day+2]!==undefined">{{item[day+2]}}</td>
                            </template>
                        </tr>
                    </table>
                </div>
            </div>
        </el-card>
    </div>
  </template>
<script>
    export default {
        data() {
            return { 
                year:'',
                month:'',
                days:'',
                search_date:'',
                headerLength:33,
                tableDatas:[
                    ['原料车间','电石渣','烘干破主电机'],//0
                    ['原料车间','电石渣合计'],
                    ['原料车间','原料磨','反击式破碎机'],//2
                    ['原料车间','立磨主电机'],
                    ['原料车间','循环风机'],
                    ['原料车间','废气风机'],//5
                    ['原料车间','尾排风机'],
                    ['原料车间','原料磨合计'],
                    ['原料车间','原料车间合计'],//8

                    ['烧成车间','回转窑','高温风机'],//9
                    ['烧成车间','窑主电机'],//10
                    ['烧成车间','篦冷机一室风机电机'],
                    ['烧成车间','篦冷机三室风机电机'],
                    ['烧成车间','篦冷机二室风机电机'],
                    ['烧成车间','篦冷机一室充气梁风机（左）'],
                    ['烧成车间','篦冷机一室充气梁风机（右）'],//15
                    ['烧成车间','窑头排风机主电机'],
                    ['烧成车间','头煤粉罗茨电机（东、备用）'],
                    ['烧成车间','尾煤粉罗茨电机（西）'],
                    ['烧成车间','空压机3301'],
                    ['烧成车间','空压机3308'],//20
                    ['烧成车间','空压机3318'],//21
                    ['烧成车间','回转窑合计'],
                    ['烧成车间','煤磨','煤磨主电机'],
                    ['烧成车间','煤磨排风机主电机'],
                    ['烧成车间','煤磨合计'],//25
                    ['烧成车间','烧成车间合计'],//26

                    ['水泥车间','水泥磨','循环风机1906'],//27
                    ['水泥车间','系统风机'],
                    ['水泥车间','水平涡流选粉机1915'],
                    ['水泥车间','水泥磨主电机'],//30
                    ['水泥车间','辊压机动辊电机'],
                    ['水泥车间','辊压机定辊电机'],
                    ['水泥车间','新增磨尾风机'],
                    ['水泥车间','水泥1#空压机'],
                    ['水泥车间','水泥2#空压机'],//35
                    ['水泥车间','水泥磨合计计'],
                    ['水泥车间','水泥包装合计'],//37
                    ['水泥车间','水泥车间合计'],//38

                    ['生活区','食堂'],//39
                    ['生活区','单元楼'],//40
                    ['生活区','单身宿舍'],
                    ['生活区','办公楼'],
                    ['生活区','余热锅炉'],
                    ['生活区','污水站'],
                    ['生活区','南门办公区'],//45
                    ['生活区','东门办公区'],
                    ['生活区','地磅'],
                    ['生活区','生活区合计'],
                    ['全厂电量']
                ],
                tableName:'全厂电量日统计',
                sourceData:{}
            };
        },
        mounted() {
            let that = this;
            var nowDate = new Date();
            that.year = nowDate.getFullYear();
            that.month = nowDate.getMonth()+1;
            that.days = new Date(that.year,that.month,0).getDate();
            let month0 = that.month>9?that.month :'0'+that.month ;
            that.search_date = that.year+'-'+month0;
            that.headerLength = that.days+3;
            let tableDatas = that.tableDatas;
            this.$nextTick(()=>{
                for (let i = 0; i < tableDatas.length; i++) {
                    for (let j = 0; j < that.days; j++) {
                        let k = 0;
                        if(i==0||i==2||i==9||i==23||i==27){
                            k = 3+j;
                        }else{
                            k = 2+j;
                        }
                        that.tableDatas[i].push(0);
                        this.$forceUpdate();
                    }    
                }
            })
            // that.$set(that.$data,'tableDatas',tableDatas);
            this.getData();
        },
        methods: {
            dateChange(e){
                let that = this;
                let arr = e.split('-')
                that.year = Number(arr[0]);
                that.month = Number(arr[1]);
            },
            getData(){
                let that = this;
                function dataPush(name,value){
                    let index=0;
                    if(name=='烘干破主电机'){
                        index=0;
                        that.tableDatas[0][3] = value;
                    }else if(name=='电石渣合计'){
                        index=1;
                        that.tableDatas[1][2] = value;
                    }else if(name=='反击式破碎机'){
                        index=2;
                    }else if(name=='立磨主电机'){
                        index=3;
                    }else if(name=='循环风机'){
                        index=4;
                    }else if(name=='废气风机'){
                        index=5;
                    }else if(name=='尾排风机'){
                        index=6;
                    }else if(name=='原料磨合计'){
                        index=7;
                    }else if(name=='高温风机'){
                        index=9;
                    }else if(name=='窑主电机'){
                        index=10;
                    }else if(name=='篦冷机一室风机电机'){
                        index=11;
                    }else if(name=='篦冷机三室风机电机'){
                        index=12;
                    }else if(name=='篦冷机二室风机电机'){
                        index=13;
                    }else if(name=='篦冷机一室充气梁风机（左）'){
                        index=14;
                    }else if(name=='篦冷机一室充气梁风机（右）'){
                        index=15;
                    }else if(name=='窑头排风机主电机'){
                        index=16;
                    }else if(name=='头煤粉罗茨电机（东、备用）'){
                        index=17;
                    }else if(name=='尾煤粉罗茨电机（西）'){
                        index=18;
                    }else if(name=='空压机3301'){
                        index=19;
                    }else if(name=='空压机3308'){
                        index=20;
                    }else if(name=='空压机3318'){
                        index=21;
                    }else if(name=='回转窑合计'){
                        index=22;
                    }else if(name=='煤磨主电机'){
                        index=23;
                    }else if(name=='煤磨排风机主电机'){
                        index=24;
                    }else if(name=='煤磨合计'){
                        index=25;
                    }else if(name=='循环风机1906'){
                        index=27;
                    }else if(name=='系统风机'){
                        index=28;
                    }else if(name=='水平涡流选粉机1915'){
                        index=29;
                    }else if(name=='水泥磨主电机'){
                        index=30;
                    }else if(name=='辊压机动辊电机'){
                        index=31;
                    }else if(name=='辊压机定辊电机'){
                        index=32;
                    }else if(name=='新增磨尾风机'){
                        index=33;
                    }else if(name=='水泥1#空压机'){
                        index=34;
                    }else if(name=='水泥2#空压机'){
                        index=35;
                    }else if(name=='水泥磨合计计'){
                        index=36;
                    }else if(name=='水泥包装合计'){
                        index=37;
                    }else if(name=='食堂'){
                        index=39;
                    }else if(name=='单元楼'){
                        index=40;
                    }else if(name=='单身宿舍'){
                        index=41;
                    }else if(name=='办公楼'){
                        index=42;
                    }else if(name=='余热锅炉'){
                        index=43;
                    }else if(name=='污水站'){
                        index=44;
                    }else if(name=='南门办公区'){
                        index=45;
                    }else if(name=='东门办公区'){
                        index=46;
                    }else if(name=='生活区合计'){
                        index=47;
                    }else if(name=='地磅'){
                        index=48;
                    }
                    return index;
                }
                function sumNum(a,b,c,d){
                    let sum = 0;
                    if(a&&Number(a)){sum=sum+Number(a);}
                    if(b&&Number(b)){sum=sum+Number(b);}
                    if(c&&Number(c)){sum=sum+Number(c);}
                    if(d&&Number(d)){sum=sum+Number(d);}
                    return sum;
                }
                let obj = {};
                obj.type='day_s';
                obj.year_s = that.year;
                obj.month_s = that.month;
                obj.page = 0;
                obj.mpoint__ep_monitored__power_kw__gte=100;
                this.$API.enm.mpoint.stat.req(obj).then((res) => {
                    let wrapArr = [],innerArr=[];
                    res.forEach(item=>{
                        let day = item.day_s;
                        if(wrapArr[day]){
                            wrapArr[day].push(day)
                        }else{
                            wrapArr[day]=[];
                            wrapArr[day].push(day);
                        }
                    })
                    wrapArr.forEach((inner,inde)=>{
                        inner.forEach(item=>{
                            let i = dataPush(item.mpoint_name);
                            let k = 0;
                            if(i==0||i==2||i==9||i==23||i==27){
                                k = 3+inde;
                            }else{
                                k = 2+inde;
                            }
                            that.tableDatas[i][k] = item.val;
                        })
                    })
                    for(let k = 0;k<that.days;k++){
                        let m = k+2;
                        let n = k+1;
                        that.tableDatas[8][m] = sumNum(that.tableDatas[1][m],that.tableDatas[7][m]);
                        that.tableDatas[26][m] = sumNum(that.tableDatas[22][m],that.tableDatas[25][m]);
                        that.tableDatas[38][m] = sumNum(that.tableDatas[36][m],that.tableDatas[37][m]);
                        that.tableDatas[49][n] = sumNum(that.tableDatas[8][m],that.tableDatas[26][m]+ that.tableDatas[38][m]+ that.tableDatas[48][m]);
                    }
               })
            },
            getTableData(){
                for(let i=0;i<this.tableDatas.length;i++){
                    let k = 0;
                    if(i==0||i==2||i==9||i==23||i==27){
                        k = 3;
                    }else if(i==49){
                        k = 1;
                    }else{
                        k = 2;
                    }
                    for (let j = k; j < this.tableDatas[i].length; j++) {
                        this.tableDatas[i][j]=0;
                    }
                }
                this.getData();
            },
            exportExcel() {
                this.exportLoading = true;
                this.$XLSX('#myTable', this.tableName)
                this.exportLoading = false;
            },
            handlePrint() {
                this.$PRINT('#myReport');
            },
        }
    };
</script>
<style scoped>
    .printWrap{
        width: 100%;
        overflow-x: scroll;
    }
</style>