| | |
| | | <template> |
| | | <div id="warp"> |
| | | <div> |
| | | <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect" style="margin-bottom: 10px"> |
| | | <el-menu-item index="1">省厅考核</el-menu-item> |
| | | <el-menu-item index="2">市局考核</el-menu-item> |
| | | <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal" @select="handleSelect" |
| | | style="margin-bottom: 10px"> |
| | | <el-menu-item index="0">省厅考核</el-menu-item> |
| | | <el-menu-item index="1">市局考核</el-menu-item> |
| | | </el-menu> |
| | | </div> |
| | | |
| | |
| | | <div class="card-content"> |
| | | <div class="title-container"> |
| | | <h1>考核成绩</h1> |
| | | <div class="select-container"> |
| | | <el-date-picker v-model="date" type="date" placeholder="选择日期"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | <div class="echart-container"> |
| | | <div id="barChart" ref="barChart"></div> |
| | |
| | | <div class="city-warp"> |
| | | <div class="city"> |
| | | <div class="title"> |
| | | {{ translateDeptId(parseInt(index)) }} |
| | | {{ translateDeptId(parseInt(index)) }} |
| | | </div> |
| | | <div class="score-warp"> |
| | | <div class="score-item"> |
| | | <div class="score-item"> |
| | | <div style="font-size: 15px; margin-bottom: 15px">{{ formatCreateDate(city[0].createTime) }}</div> |
| | | </div> |
| | | </div> |
| | | <div v-for="(score, scoreIndex) in city" :key="scoreIndex"> |
| | | <div class="score-item"> |
| | | <div v-if="score.examineCategory == 0">车辆:</div> |
| | | <div v-else-if="score.examineCategory == 1">人脸:</div> |
| | | <div v-else-if="score.examineCategory == 2">视频:</div> |
| | | <div v-if="score.examineCategory == 2">车辆:</div> |
| | | <div v-else-if="score.examineCategory == 3">人脸:</div> |
| | | <div v-else-if="score.examineCategory == 1">视频:</div> |
| | | <div class="score">{{ score.score }}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="bottom-publish"> |
| | | <el-button |
| | | size="medium" |
| | | :type="isAnyUnpublished(city) ? 'success' : 'danger'" |
| | | @click="publish(city)" |
| | | > |
| | | <el-button size="medium" :type="isAnyUnpublished(city) ? 'success' : 'danger'" @click="publish(city)"> |
| | | {{ isAnyUnpublished(city) ? '发布' : '取消' }} |
| | | </el-button> |
| | | <el-button size="medium" @click="jumpDetail(index)" type="info">详情</el-button> |
| | |
| | | |
| | | <script> |
| | | import { areaSelect } from '@/api/system/dept'; |
| | | import { listScore, getScore, delScore, addScore, updateScore,publishScore} from "@/api/platform/check-score"; |
| | | import { listScore, getScore, delScore, addScore, updateScore, publishScore } from "@/api/platform/check-score"; |
| | | import * as echarts from 'echarts'; |
| | | let observer = null; |
| | | let chart = null; |
| | |
| | | name: 'index', |
| | | data() { |
| | | return { |
| | | province:{ |
| | | province: { |
| | | id: [], |
| | | publish: null, |
| | | }, |
| | | checkScoreList:[], |
| | | areaList:[], |
| | | activeIndex: '1', |
| | | activeIndex2: '2', |
| | | checkScoreList: [], |
| | | areaList: [], |
| | | activeIndex: '0', |
| | | date: '', |
| | | company: '', |
| | | dataList: { |
| | |
| | | } |
| | | }, |
| | | created() { |
| | | this.queryParams.examineTag = this.activeIndex |
| | | this.getList(); |
| | | this.areaSelect(); |
| | | }, |
| | |
| | | this.$router.push({ |
| | | path: '/examine/detail', |
| | | query: { |
| | | index: index |
| | | index: index, |
| | | examineTag: this.activeIndex |
| | | } |
| | | }) |
| | | }, |
| | |
| | | } |
| | | chart.setOption(option, true); |
| | | }, |
| | | |
| | | // 设置chart |
| | | setChartOption(data) { |
| | | if (!data) return; |
| | | const mapData = Object.keys(data).map(key => { |
| | | return { |
| | | name: this.translateDeptId(parseInt(key)), |
| | | data: data[key] |
| | | } |
| | | }); |
| | | const nameArray = mapData.map(item => item.name); |
| | | const data1 = this.filterData(mapData, 1); |
| | | const data2 = this.filterData(mapData, 2); |
| | | const data3 = this.filterData(mapData, 3); |
| | | const option = { |
| | | grid: { |
| | | left: 0, |
| | | right: 0, |
| | | bottom: 0, |
| | | top: '20%', |
| | | containLabel: true |
| | | }, |
| | | legend: { |
| | | right: 'right', |
| | | top: 'top', |
| | | icon: 'rect', |
| | | orient: "vertical", |
| | | }, |
| | | tooltip: {}, |
| | | xAxis: { |
| | | type: 'category', |
| | | axisLabel: { |
| | | }, |
| | | data: nameArray |
| | | }, |
| | | yAxis: { |
| | | min: 90, |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | name: '视频考核', |
| | | data: data1, |
| | | itemStyle: { |
| | | color: 'rgba(255, 165, 0, 1)' |
| | | } |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | name: '人脸考核', |
| | | data: data2, |
| | | itemStyle: { |
| | | color: 'rgba(85, 192, 191, 1)' |
| | | } |
| | | }, |
| | | { |
| | | type: 'bar', |
| | | name: '车辆考核', |
| | | data: data3, |
| | | itemStyle: { |
| | | color: 'rgba(62, 144, 247, 1)' |
| | | } |
| | | }, |
| | | ] |
| | | } |
| | | chart.setOption(option, true); |
| | | }, |
| | | filterData(data, tag) { |
| | | if (!data) return; |
| | | if(!Array.isArray(data)) return; |
| | | const tempArray = []; |
| | | data.forEach((item) => { |
| | | if(item.data.length) { |
| | | item.data.forEach((examine) => { |
| | | if(examine.examineCategory === tag) { |
| | | tempArray.push(examine.score); |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | return tempArray; |
| | | }, |
| | | // 区域下拉数据 |
| | | areaSelect() { |
| | | areaSelect().then(res => { |
| | |
| | | return `${year}年${formattedMonth}月${formattedDay}号`; |
| | | }, |
| | | /** 导航切换 */ |
| | | handleSelect(key){ |
| | | handleSelect(key) { |
| | | this.activeIndex = key; // 更新当前激活的菜单项 |
| | | this.queryParams.examineTag = key; |
| | | this.getList(); |
| | | }, |
| | | /** 查询考核成绩列表 */ |
| | | getList() { |
| | | this.loading = true; |
| | | if (this.activeIndex === '1') { |
| | | this.queryParams.examineTag = '0'; // 省厅考核 |
| | | } else if (this.activeIndex === '2') { |
| | | this.queryParams.examineTag = '1'; // 区域考核 |
| | | } |
| | | // 获取当前日期 |
| | | const today = new Date(); |
| | | |
| | |
| | | this.checkScoreList = response.data; |
| | | console.log(this.checkScoreList); |
| | | this.loading = false; |
| | | this.setChartOption(this.checkScoreList); |
| | | }); |
| | | }, |
| | | publish(city){ |
| | | let text = this.isAnyUnpublished(city) ? "发布":"取消发布"; |
| | | publish(city) { |
| | | let text = this.isAnyUnpublished(city) ? "发布" : "取消发布"; |
| | | const cityName = this.translateDeptId(parseInt(city[0].deptId)); |
| | | this.province.publish = text === "发布" ? "PUBLISHED" : "UNPUBLISHED"; |
| | | this.province.id = city.map(city => city.id); |
| | | this.$modal.confirm('是否确认' + text + '考核名为"' + cityName + '"的数据项?') |
| | | this.$modal.confirm('是否确认' + text + '考核名为"' + cityName + '"的成绩?') |
| | | .then(() => { |
| | | return publishScore(this.province); |
| | | }) |
| | |
| | | } |
| | | </script> |
| | | |
| | | <style lang = "scss" scoped> |
| | | <style lang="scss" scoped> |
| | | .score-warp { |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | align-items: center; |
| | | color: #797777 |
| | | } |
| | | |
| | | .score-item { |
| | | display: flex; |
| | | flex-direction: row; |
| | | |
| | | } |
| | | |
| | | .score { |
| | | width: 60px; |
| | | text-align: right; |
| | | padding: 3px 0; |
| | | } |
| | | |
| | | #warp { |
| | | padding: 0 10px; |
| | | } |
| | | |
| | | .city-warp { |
| | | display: flex; |
| | | flex-direction: column; |
| | |
| | | height: 210px; |
| | | margin-bottom: 25px; |
| | | } |
| | | |
| | | .city { |
| | | width: 240px; |
| | | height: 100%; |
| | |
| | | text-align: center; |
| | | padding: 10px 0px; |
| | | } |
| | | |
| | | .bottom-publish { |
| | | width: 100%; |
| | | position: absolute; |
| | | bottom: 10px; |
| | | } |
| | | |
| | | .title { |
| | | font-size: larger; |
| | | margin-bottom: 5px; |
| | | } |
| | | |
| | | .data-chart-container { |
| | | height: 400px; |
| | | margin-bottom: 20px; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .title-container { |
| | | position: absolute; |
| | | display: flex; |
| | |
| | | height: 100%; |
| | | } |
| | | } |
| | | |
| | | .select-container { |
| | | margin: 0 20px; |
| | | width: 180px; |