From 0eee6264b01ce554a6082468a6a11d0b0da8e622 Mon Sep 17 00:00:00 2001 From: 龚焕茏 <2842157468@qq.com> Date: 星期四, 11 七月 2024 09:43:30 +0800 Subject: [PATCH] feat:菜单调整、添加部门bug修复 --- src/views/answer/sheetStatistics.vue | 223 +++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 157 insertions(+), 66 deletions(-) diff --git a/src/views/answer/sheetStatistics.vue b/src/views/answer/sheetStatistics.vue index b83fdfb..80973e4 100644 --- a/src/views/answer/sheetStatistics.vue +++ b/src/views/answer/sheetStatistics.vue @@ -2,20 +2,108 @@ <div style="padding: 10px" ref="pageContent"> <el-form :model="queryParam" ref="queryForm" :inline="true" style="display: flex"> <el-form-item label="璇曞嵎锛�"> - <el-select v-model="queryParam.examPaperId" filterable placeholder="璇曞嵎"> + <el-select v-model="queryParam.examPaperId" filterable placeholder="璇曞嵎" @change="getType"> <el-option v-for="item in examPaperList" :key="item.id" :value="item.id" :label="item.name" /> </el-select> </el-form-item> - <el-form-item label="閮ㄩ棬锛�" v-if="true"> - <el-select v-model="queryParam.departmentId" filterable placeholder="閮ㄩ棬" clearable> + <el-form-item label="閮ㄩ棬锛�" v-if="admin"> + <!-- <el-select v-model="queryParam.departmentId" collapse-tags multiple filterable placeholder="閮ㄩ棬" clearable> <el-option v-for="item in levelEnum" :key="item.key" :value="item.key" :label="item.value" /> - </el-select> + </el-select> --> + <el-cascader + clearable + filterable + v-model="queryParam.departmentId" + :options="levelEnum" + :props="{ multiple: true, emitPath: false, value: 'id', label: 'name', checkStrictly: true }" + ></el-cascader> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">鏌ヨ</el-button> </el-form-item> - </el-form> + + <el-row :gutter="20"> + <el-col :xl="24" class="echarts-row"> + <el-row :gutter="20"> + <el-col :span="6"> + <el-card> + <div class="data-item"> + <div class="data-icon" :style="{ 'background-color': iconList[0].color }"> + <i class="el-icon-tickets"></i> + </div> + <div class="data-info"> + <div class="data-label"> + 鎬昏�冭瘯娆℃暟 + </div> + <div class="data-num"> + {{ totalInfo.examTotal }} + </div> + </div> + </div> + </el-card> + + </el-col> + + <el-col :span="6"> + <el-card> + <div class="data-item"> + <div class="data-icon" :style="{ 'background-color': iconList[1].color }"> + <i class="el-icon-s-claim"></i> + </div> + <div class="data-info"> + <div class="data-label"> + 鍙傝�冧汉鏁� + </div> + <div class="data-num"> + {{ totalInfo.factPeopleTotal }} + </div> + </div> + </div> + </el-card> + + </el-col> + + <el-col :span="6"> + <el-card> + <div class="data-item"> + <div class="data-icon" :style="{ 'background-color': iconList[2].color }"> + <i class="el-icon-edit"></i> + </div> + <div class="data-info"> + <div class="data-label"> + 骞冲潎鍒� + </div> + <div class="data-num"> + {{ totalInfo.averageScore }} + </div> + </div> + </div> + </el-card> + + </el-col> + + <el-col :span="6"> + <el-card> + <div class="data-item"> + <div class="data-icon" :style="{ 'background-color': iconList[3].color }"> + <i class="el-icon-s-data"></i> + </div> + <div class="data-info"> + <div class="data-label"> + 鍙傝�冧汉鏁扮櫨鍒嗘瘮 + </div> + <div class="data-num"> + {{ totalInfo.referencePercentage }}% + </div> + </div> + </div> + </el-card> + </el-col> + </el-row> + </el-col> + </el-row> + <el-row :gutter="20"> <el-col :xl="12" class="echarts-row"> <el-card> @@ -29,16 +117,6 @@ <el-card> <div class="card-chart-container"> <div id="scoreChart" ref="scoreChart" class="chart-style" v-loading="chartLoading2" /> - </div> - </el-card> - </el-col> - </el-row> - - <el-row :gutter="20"> - <el-col :xl="24"> - <el-card> - <div class="card-chart-container"> - <div id="peopleChart" ref="peopleChart" class="chart-style" v-loading="chartLoading3" /> </div> </el-card> </el-col> @@ -70,6 +148,13 @@ 'totalAttended': '鍙備笌鑰冭瘯', 'totalAbsent': '鏈弬涓庤�冭瘯' }; + +const dataKeyMap = { + 'factPeopleTotal': '鍙傝�冧汉鏁�', + 'averageScore': '骞冲潎鍒�', + 'referencePercentage': '鍙傝�冧汉鏁扮櫨鍒嗘瘮', +}; + let ageChart = null; let scroeChart = null; let peopleChart = null; @@ -77,46 +162,64 @@ export default { data() { return { + totalInfo: { + examTotal: 0, + factPeopleTotal: 0, + averageScore: 0, + referencePercentage: 0 + }, + iconList: [ + { icon: 'el-icon-tickets', color: '#7868d9' }, + { icon: 'el-icon-s-claim', color: '#3eba45' }, + { icon: 'el-icon-edit', color: '#3da7f8' }, + { icon: 'el-icon-warning', color: '#ffbe40' }, + { icon: 'el-icon-error', color: '#fe640d' }, + ], examPaperList: [], chartLoading1: false, chartLoading2: false, - chartLoading3: false, queryParam: { examPaperId: '', - departmentId: '' - } + departmentId: [], + examPaperType: 1 + }, + admin: true }; }, mounted() { + if (sessionStorage.getItem('deptAdmin') == 1) { + this.admin = false; + } ageChart = echarts.init(this.$refs.ageChart); scroeChart = echarts.init(this.$refs.scoreChart); - peopleChart = echarts.init(this.$refs.peopleChart); dashboardApi.examPaperList().then(res => { this.examPaperList = res.response; this.queryParam.examPaperId = this.examPaperList[0].id + this.queryParam.examPaperType = this.examPaperList[0].paperType this.getChartData(); this.observe(); }); }, methods: { + getType(val) { + const selectedItem = this.examPaperList.find(item => item.id === val); + this.queryParam.examPaperType = selectedItem.paperType; + this.getChartData(); + }, getChartData() { this.chartLoading1 = true; this.chartLoading2 = true; - this.chartLoading3 = true; dashboardApi.getData(this.queryParam).then(re => { - const { age, score, examPeopleNum } = re.response; - + const { age, score, total } = re.response; + this.totalInfo = total; const ageOption = this.barOption('骞撮緞娈电粺璁�', age, ageLabel); const scoreOption = this.barOption('鍒嗘暟娈电粺璁�', score, scoreLabel); - const peopleOption = this.pieOption('鑰冭瘯浜烘暟', examPeopleNum, pieLabel); ageChart.setOption(ageOption, true); scroeChart.setOption(scoreOption, true); - peopleChart.setOption(peopleOption, true); this.chartLoading1 = false; this.chartLoading2 = false; - this.chartLoading3 = false; }); }, barOption(title, data, labelList) { @@ -160,43 +263,6 @@ }; }, - pieOption(title, data, labelList) { - const pieData = data.map(item => { - return { - name: labelList[Object.keys(item)[0]], - value: Object.values(item)[0] - }; - }); - return { - title: { - text: title, - x: 'left' - }, - color: ['#E74C3C', '#3498DB', '#F1C40F', '#95A5A6', '#8E44AD', '#F39C12', '#D35400'], - tooltip: { - trigger: 'item' - }, - legend: { - orient: 'horizontal', - }, - series: [ - { - type: 'pie', - radius: '50%', - data: pieData, - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' - } - } - } - ] - - }; - - }, submitForm() { this.getChartData(); }, @@ -217,9 +283,6 @@ } if (scroeChart) { scroeChart.resize(); - } - if (peopleChart) { - peopleChart.resize(); } } }, @@ -245,9 +308,37 @@ height: 400px; } - .chart-style { width: 100%; height: 100%; } + +.data-item { + width: 100%; + display: flex; + align-items: center; + border-radius: 10px; + overflow: hidden; + + .data-icon { + font-size: 70px; + padding: 20px 30px; + color: #fff; + border-radius: 10px; + overflow: hidden; + margin-right: 20px; + } + + .data-info { + .data-label { + font-size: 18px; + margin-bottom: 10px; + color: #707070; + } + + .data-num { + font-size: 28px; + } + } +} </style> -- Gitblit v1.8.0