<template>
    <div>
        <breadcrumb :data="'成绩管理/成绩统计'"></breadcrumb>
        <div class="box">
            <div class="page left">
                <div class="tabs">
                    <a class="item active">基本信息</a>
                </div>
                <div class="page-content">
                    <div class="info">
                        <div class="item">
                            <p class="key">考试名称：</p>
                            <p class="val">{{assessmentName}}</p>
                        </div>
                        <div class="item">
                            <p class="key">开始时间：</p>
                            <p class="val">{{info.startTime}}</p>
                        </div>
                        <div class="item">
                            <p class="key">总分：</p>
                            <p class="val">{{info.totalScore}}分</p>
                        </div>
                        <div class="item">
                            <p class="key">最高分：</p>
                            <p class="val">{{info.highestScore}}</p>
                        </div>
                        <div class="item">
                            <p class="key">应考人数：</p>
                            <p class="val">{{info.shouldPeople}}人</p>
                        </div>
                        <div class="item">
                            <p class="key">最低分：</p>
                            <p class="val">{{info.lowestScore}}</p>
                        </div>
                        <div class="item">
                            <p class="key">实考人数：</p>
                            <p class="val">{{info.actualPeople}}人</p>
                        </div>
                        <div class="item">
                            <p class="key">平均分：</p>
                            <p class="val">{{info.averageScore}}分</p>
                        </div>
                    </div>
                </div>
            </div>

            <div class="page right">
                <div class="tabs">
                    <a class="item active">成绩分布图</a>
                </div>
                <div class="page-content">
                    <div class="info">
                        <div class="chart" id="chart"></div>
                    </div>
                </div>
            </div>
        </div>

        <div class="page">
            <div class="tabs">
                <a class="item active">考试成绩</a>
            </div>
            <div class="page-content">
                <div class="tool">
                    <ul class="filter"></ul>
                    <div>
                        <el-button type="primary" size="small" round @click="exportData">导出</el-button>
                    </div>
                </div>

                <el-table :data="listData" ref="table" row-key="id" class="table" stripe header-align="center">
                    <el-table-column type="index" width="100" label="序号" align="center">
                        <template
                            slot-scope="scope"
                        >{{scope.$index + (page - 1) * pageSize + 1}}</template>
                    </el-table-column>
                    <el-table-column prop="paperName" label="试卷名称" align="center"></el-table-column>
                    <el-table-column prop="userName" label="学生姓名" align="center"></el-table-column>
                    <el-table-column prop="workNumber" label="学号" align="center"></el-table-column>
                    <el-table-column prop="score" label="得分" align="center"></el-table-column>
                    <el-table-column prop="rank" label="名次" align="center"></el-table-column>
                </el-table>
                <div class="pagination">
                    <el-pagination background @current-change="handleCurrentChange" :current-page="page" :page-size="pageSize" layout="total,prev, pager, next" :total="total"></el-pagination>
                </div>
            </div>
        </div>
    </div>
    
</template>
<script>
import { mapState,mapGetters } from 'vuex'
import echarts from 'echarts'
import breadcrumb from '@/components/breadcrumb'
import util from '@/libs/util'
export default {
    data() {
        return {
            info: {
                id: '',
                actualPeople: '', 
                averageScore: '', 
                highestScore: '', 
                lowestScore: '', 
                paperName: '', 
                shouldPeople: '', 
                startTime: '', 
                totalScore: '', 
            },
            statData: [],
            listData: [],
            page: 1,
            pageSize: 10,
            total: 0,
        };
    },
    components: {
        breadcrumb
    },
    computed: {
        ...mapState('user', [
            'userId'
        ]),
        ...mapState('achievement', [
            'id','assessmentId','assessmentName','classId','stuId'
        ])
    },
    mounted() {
        this.getData()
        this.getList()
    },
    methods: {
        getData() {
            this.$post(`${this.api.achievementStatistics}?userId=${this.stuId}&assessmentId=${this.assessmentId}&paperId=${this.id}&classId=${this.classId}`)
            .then(res => {
                this.info = res.data.list
                let statData = []
                for(let i in this.info){
                    if(i.includes('get')) statData.push(this.info[i])
                }
                this.statData = statData
                this.getChart()
            }).catch(err => {})
        },
        getChart(){
            let myChart = echarts.init(document.getElementById('chart'))
            myChart.setOption({
                title: { text: '成绩分布图' },
                tooltip: {},
                xAxis: {
                    name: '分数',
                    type: 'category',
                    boundaryGap: false,
                    data: ['0-10', '11-20', '21-30', '31-40', '41-50', '51-60', '61-70', '71-80','81-90','91-100']
                },
                yAxis: {
                    name: '人数',
                    type: 'value'
                },
                series: [{
                    data: this.statData,
                    type: 'line',
                    areaStyle: {}
                }]
            })
        },
        getList() {
            this.$get(`${this.api.getRanking}?pageNum=${this.page}&pageSize=${this.pageSize}&assessmentId=${this.assessmentId}`)
            .then(res => {
                let list = res.data.list.list
                let len = list.length - 1
                for(let i = 0; i < len; i++){
                    for(let j = 0; j < len; j++){
                        if(list[j].rank && list[j].rank > list[j + 1].rank){
                            let temp = list[j]
                            list[j] = list[j + 1]
                            list[j + 1] = temp
                        }
                    }
                }
                let hasRank = list.filter(n => n.rank)
                let notRank = list.filter(n => !n.rank)
                list = [...hasRank,...notRank]
                this.listData = list
                this.total = res.data.list.totalCount
            })
            .catch(err => {})
        },
        handleCurrentChange(val) {
            this.page = val
            this.getList()
        },
        exportData(){
            location.href = `${this.api.getRankingExport}?assessmentId=${this.assessmentId}`
        }
    },
};
</script>

<style lang="scss" scoped>
    .box{
        display: flex;
        margin-bottom: 24px;
        .left{
            width: 320px;
        }
        .right{
            width: calc(80% - 344px);
            margin-left: 24px;
        }
        .info{
            .item{
                display: flex;
                align-items: center;
                margin: 20px 0;
                font-size: 14px;
            }
            .key,.val{
                color: rgba(0, 0, 0, 0.65);
                font-size: 14px;
            }
            .key{
                width: 130px;
                text-align: right;
            }
        }
        .chart{
            height: 400px;
        }
    }
</style>