| | |
| | | <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="0">省厅月度</el-menu-item> |
| | | <el-menu-item index="1">市局月度</el-menu-item> |
| | | <el-menu-item index="2">省厅季度</el-menu-item> |
| | | <el-menu-item index="3">市局季度</el-menu-item> |
| | | </el-menu> |
| | | <div style="display: flex;position: relative"> |
| | | <div style="width: 100%"> |
| | | <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-item index="2">区县月度</el-menu-item> |
| | | <el-menu-item index="3">区县季度</el-menu-item> |
| | | <el-menu-item index="4">公安部月度</el-menu-item> |
| | | <el-menu-item index="5">公安部季度</el-menu-item> |
| | | </el-menu> |
| | | </div> |
| | | <!-- 导出按钮 --> |
| | | <div style="position: absolute;top:10px; right: 5px;z-index: 2" v-hasPermi="['check:result:export']"> |
| | | <el-popover |
| | | placement="left" |
| | | width="300px" |
| | | trigger="click"> |
| | | <span style="font-weight: bold;font-size: 16px">导出</span> |
| | | |
| | | <el-form ref="exportForm" :model="exportForm" :rules="exportRules" label-width="100px"> |
| | | <el-form-item label="考核时间" prop="quarter" required> |
| | | <el-date-picker |
| | | :clearable="false" |
| | | v-model="exportForm.quarter" |
| | | type="monthrange" |
| | | format="yyyy-MM" |
| | | value-format="yyyy-MM" |
| | | unlink-panels |
| | | range-separator="至" |
| | | start-placeholder="开始月份" |
| | | end-placeholder="结束月份" |
| | | :picker-options="pickerOptions"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | <el-form-item label="区县" prop="deptIds"> |
| | | <el-select v-model="exportForm.deptIds" multiple clearable> |
| | | <el-option v-for="dept in areaList" |
| | | :value="dept.id" |
| | | :key="dept.value" |
| | | :label="dept.value"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="考核标签" prop="examineTags"> |
| | | <el-checkbox-group v-model="exportForm.examineTags"> |
| | | <el-checkbox |
| | | v-for="item in tagOptions" |
| | | :key="item.value" |
| | | :label="item.value" |
| | | >{{ item.label }} |
| | | </el-checkbox> |
| | | </el-checkbox-group> |
| | | </el-form-item> |
| | | <el-form-item label="计算平均值" prop="average"> |
| | | <el-switch |
| | | v-model="exportForm.average" |
| | | > |
| | | </el-switch> |
| | | </el-form-item> |
| | | <el-button type="primary" size="small" style="width: 400px" @click="handleExport">导出</el-button> |
| | | </el-form> |
| | | <el-button slot="reference" type="primary" size="mini" plain>导出</el-button> |
| | | </el-popover> |
| | | </div> |
| | | |
| | | </div> |
| | | |
| | | <div class="data-chart-container"> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="bottom-publish"> |
| | | <el-button v-hasPermi="['check:score:publish']" size="medium" :type="isAnyUnpublished(city) ? 'success' : 'danger'" @click="publish(city)"> |
| | | <el-button v-hasPermi="['check:score:publish']" size="medium" |
| | | :type="isAnyUnpublished(city) ? 'success' : 'danger'" @click="publish(city)"> |
| | | {{ isAnyUnpublished(city) ? '发布' : '取消' }} |
| | | </el-button> |
| | | <el-button size="medium" @click="jumpDetail(index)" type="primary">详情</el-button> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { areaSelect } from '@/api/system/dept'; |
| | | import { listScore, getScore, delScore, addScore, updateScore, publishScore } from "@/api/platform/check-score"; |
| | | import {areaSelect} from '@/api/system/dept'; |
| | | import {listScore, publishScore} from "@/api/platform/check-score"; |
| | | import * as echarts from 'echarts'; |
| | | |
| | | let observer = null; |
| | | let chart = null; |
| | | export default { |
| | | name: 'index', |
| | | data() { |
| | | return { |
| | | tagOptions: [ |
| | | {value: 0, label: '省厅'}, |
| | | {value: 1, label: '区县'}, |
| | | {value: 2, label: '公安部'} |
| | | ], |
| | | pickerOptions: { |
| | | shortcuts: [{ |
| | | text: '第一季度', |
| | | onClick(picker) { |
| | | picker.$emit('pick', [new Date(new Date().getFullYear() + "-01"), new Date(new Date().getFullYear() + "-03")]); |
| | | } |
| | | }, |
| | | { |
| | | text: '第二季度', |
| | | onClick(picker) { |
| | | picker.$emit('pick', [new Date(new Date().getFullYear() + "-04"), new Date(new Date().getFullYear() + "-06")]); |
| | | } |
| | | }, |
| | | { |
| | | text: '第三季度', |
| | | onClick(picker) { |
| | | picker.$emit('pick', [new Date(new Date().getFullYear() + "-07"), new Date(new Date().getFullYear() + "-09")]) |
| | | } |
| | | }, |
| | | { |
| | | text: '第四季度', |
| | | onClick(picker) { |
| | | picker.$emit('pick', [new Date(new Date().getFullYear() + "-10"), new Date(new Date().getFullYear() + "-12")]) |
| | | } |
| | | }] |
| | | }, |
| | | province: { |
| | | id: [], |
| | | publish: null, |
| | | }, |
| | | // 导出表单验证 |
| | | exportRules: { |
| | | quarter: [ |
| | | { type: 'array', required: true, message: '请选择时间', trigger: 'change' } |
| | | ], |
| | | }, |
| | | checkScoreList: [], |
| | | areaList: [], |
| | | activeIndex: '0', |
| | | date: '', |
| | | company: '', |
| | | dataList: { |
| | | name: ['富顺县', '荣县', '高新区', '自流井区', '贡井区', '大安区', '沿滩区'], |
| | | data1: [95, 96, 97, 95, 94.5, 93.6, 94.5], |
| | | data2: [93.7, 93.5, 94.3, 96.5, 95.3, 94.2, 93.3], |
| | | data3: [98.3, 94.3, 93.3, 95.5, 96.8, 96.1, 95.8], |
| | | // 导出 |
| | | exportForm: { |
| | | quarter: [], |
| | | deptIds: [], |
| | | examineTags: [], |
| | | examineCategories: [], |
| | | average: null, |
| | | }, |
| | | // 查询参数 |
| | | queryParams: { |
| | |
| | | } |
| | | }, |
| | | created() { |
| | | this.queryParams.examineTag = this.activeIndex |
| | | this.getList(); |
| | | this.areaSelect(); |
| | | }, |
| | | mounted() { |
| | | this.queryParams.examineTag = this.activeIndex |
| | | chart = echarts.init(this.$refs.barChart); |
| | | this.initEchart(); |
| | | this.areaSelect() |
| | | // this.setChartOption(this.checkScoreList); |
| | | }, |
| | | methods: { |
| | | jumpDetail(index) { |
| | |
| | | tooltip: {}, |
| | | xAxis: { |
| | | type: 'category', |
| | | axisLabel: { |
| | | }, |
| | | axisLabel: {}, |
| | | data: this.dataList.name |
| | | }, |
| | | yAxis: { |
| | |
| | | tooltip: {}, |
| | | xAxis: { |
| | | type: 'category', |
| | | axisLabel: { |
| | | }, |
| | | axisLabel: {}, |
| | | data: nameArray |
| | | |
| | | }, |
| | | yAxis: { |
| | | min: 60 |
| | | min: 0 |
| | | }, |
| | | series: [ |
| | | { |
| | |
| | | } |
| | | chart.setOption(option, true); |
| | | }, |
| | | filterData(data, tag) { |
| | | if (!data) return; |
| | | if(!Array.isArray(data)) return; |
| | | filterData(mapData, tag) { |
| | | if (!mapData) return; |
| | | if (!Array.isArray(mapData)) return; |
| | | const tempArray = []; |
| | | data.forEach((item) => { |
| | | if(item.data.length) { |
| | | mapData.forEach((item) => { |
| | | if (item.data.length) { |
| | | let flag = false; |
| | | item.data.forEach((examine) => { |
| | | if(examine.examineCategory === tag) { |
| | | if (examine.examineCategory === tag) { |
| | | flag = true |
| | | tempArray.push(examine.score); |
| | | } |
| | | }) |
| | | if (!flag) { |
| | | tempArray.push(0); |
| | | } |
| | | } |
| | | }) |
| | | return tempArray; |
| | |
| | | areaSelect() { |
| | | areaSelect().then(res => { |
| | | this.areaList = res.data; |
| | | this.getList(); |
| | | }) |
| | | }, |
| | | translateDeptId(deptId) { |
| | | const department = this.areaList.find(dept => dept.id === deptId); |
| | | console.log(deptId,this.areaList) |
| | | return department ? department.value : '未知'; |
| | | }, |
| | | |
| | |
| | | // 获取当前日期 |
| | | const today = new Date(); |
| | | |
| | | // 计算昨天的日期 |
| | | const yesterday = new Date(today); |
| | | yesterday.setDate(today.getDate() - 1); |
| | | // 将日期减去一天 |
| | | const yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000); |
| | | |
| | | // 将昨天的日期格式化为字符串,这里假设后端期望的是ISO 8601格式 |
| | | this.queryParams.createTime = yesterday.toISOString().split('T')[0]; |
| | | // 获取年、月、日 |
| | | const year = yesterday.getFullYear(); |
| | | let month = (yesterday.getMonth() + 1).toString().padStart(2, '0'); // 月份是从0开始的,所以加1 |
| | | let day = yesterday.getDate().toString().padStart(2, '0'); |
| | | |
| | | // 拼接成 yyyy-MM-dd 格式 |
| | | this.queryParams.createTime = `${year}-${month}-${day}` |
| | | |
| | | console.log(this.queryParams); |
| | | listScore(this.queryParams).then(response => { |
| | | this.checkScoreList = response.data; |
| | | console.log(this.checkScoreList); |
| | | this.loading = false; |
| | | |
| | | this.setChartOption(this.checkScoreList); |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | publish(city) { |
| | |
| | | // 错误处理逻辑 |
| | | }); |
| | | }, |
| | | // clickItem(value) { |
| | | // value === this.exportForm.examineTag ? this.exportForm.examineTag = null : this.exportForm.examineTag = value |
| | | // }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.$refs['exportForm'].validate((valid) => { |
| | | if (valid) { |
| | | this.download( |
| | | "/check/score/export", |
| | | { |
| | | ...this.exportForm, |
| | | }, |
| | | `考核指标_${new Date().getTime()}.xlsx` |
| | | ); |
| | | } |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | </script> |