From c46e3ad03a8c5fb27b0361d219babca0e537ad77 Mon Sep 17 00:00:00 2001 From: fuliqi <fuliqi@qq.com> Date: 星期二, 30 四月 2024 13:44:39 +0800 Subject: [PATCH] 考核结果三级页面 --- src/views/system/result/index.vue | 466 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 234 insertions(+), 232 deletions(-) diff --git a/src/views/system/result/index.vue b/src/views/system/result/index.vue index 2ef8485..1d139c8 100644 --- a/src/views/system/result/index.vue +++ b/src/views/system/result/index.vue @@ -1,248 +1,65 @@ <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> + </div> + <div class="data-chart-container"> <el-card class="data-card" :body-style="{ height: '100%' }"> <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> </div> </el-card> </div> - <el-row :gutter="100"> - <el-col :span="6"> - <div class="city-warp"> - <div class="city"> - <div class="title"> - 鑷祦浜� - </div> - <div class="score-warp"> - <div class="score-item"> - <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div> + + <div> + <el-row :gutter="100"> + <el-col :span="6" v-for="(city, index) in checkScoreList" :key="index"> + <div class="city-warp"> + <div class="city"> + <div class="title"> + {{ translateDeptId(parseInt(index)) }} </div> - <div class="score-item"> - <div>瑙嗛锛�</div> - <div class="score">99.5</div> + <div class="score-warp"> + <div class="score-item"> + <div style="font-size: 15px; margin-bottom: 15px">{{ formatCreateDate(city[0].createTime) }}</div> + </div> + <div v-for="(score, scoreIndex) in city" :key="scoreIndex"> + <div class="score-item"> + <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="score-item"> - <div>浜鸿劯锛�</div> - <div class="score">87</div> + <div class="bottom-publish"> + <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> </div> - <div class="score-item"> - <div>杞﹁締锛�</div> - <div class="score">94</div> - </div> - </div> - <div class="bottom-publish"> - <el-button size="medium" type="success">鍙戝竷</el-button> - <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button> </div> </div> - </div> - </el-col> - <el-col :span="6"> - <div class="city-warp"> - <div class="city"> - <div class="title"> - 瀵岄『 - </div> - <div class="score-warp"> - <div class="score-item"> - <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div> - </div> - <div class="score-item"> - <div>瑙嗛锛�</div> - <div class="score">99.5</div> - </div> - <div class="score-item"> - <div>浜鸿劯锛�</div> - <div class="score">87</div> - </div> - <div class="score-item"> - <div>杞﹁締锛�</div> - <div class="score">94</div> - </div> - - </div> - <div class="bottom-publish"> - <el-button size="medium" type="success">鍙戝竷</el-button> - <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button> - </div> - </div> - </div> - </el-col> - <el-col :span="6"> - <div class="city-warp"> - <div class="city"> - <div class="title"> - 鑽e幙 - </div> - <div class="score-warp"> - <div class="score-item"> - <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div> - </div> - <div class="score-item"> - <div>瑙嗛锛�</div> - <div class="score">99.5</div> - </div> - <div class="score-item"> - <div>浜鸿劯锛�</div> - <div class="score">87</div> - </div> - <div class="score-item"> - <div>杞﹁締锛�</div> - <div class="score">94</div> - </div> - - </div> - <div class="bottom-publish"> - <el-button size="medium" type="success">鍙戝竷</el-button> - <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button> - </div> - </div> - </div> - </el-col> - <el-col :span="6"> - <div class="city-warp"> - <div class="city"> - <div class="title"> - 娌挎哗鍖� - </div> - <div class="score-warp"> - <div class="score-item"> - <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div> - </div> - <div class="score-item"> - <div>瑙嗛锛�</div> - <div class="score">99.5</div> - </div> - <div class="score-item"> - <div>浜鸿劯锛�</div> - <div class="score">87</div> - </div> - <div class="score-item"> - <div>杞﹁締锛�</div> - <div class="score">94</div> - </div> - - </div> - <div class="bottom-publish"> - <el-button size="medium" type="success">鍙戝竷</el-button> - <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button> - </div> - </div> - </div> - </el-col> - - - </el-row> - - <el-row style="margin-top: 30px" :gutter="100"> - <el-col :span="6"> - <div class="city-warp"> - <div class="city"> - <div class="title"> - 楂樻柊鍖� - </div> - <div class="score-warp"> - <div class="score-item"> - <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div> - </div> - <div class="score-item"> - <div>瑙嗛锛�</div> - <div class="score">99.5</div> - </div> - <div class="score-item"> - <div>浜鸿劯锛�</div> - <div class="score">87</div> - </div> - <div class="score-item"> - <div>杞﹁締锛�</div> - <div class="score">94</div> - </div> - </div> - <div class="bottom-publish"> - <el-button size="medium" type="success">鍙戝竷</el-button> - <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button> - </div> - </div> - </div> - </el-col> - <el-col :span="6"> - <div class="city-warp"> - <div class="city"> - <div class="title"> - 澶у畨鍖� - </div> - <div class="score-warp"> - <div class="score-item"> - <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div> - </div> - <div class="score-item"> - <div>瑙嗛锛�</div> - <div class="score">99.5</div> - </div> - <div class="score-item"> - <div>浜鸿劯锛�</div> - <div class="score">87</div> - </div> - <div class="score-item"> - <div>杞﹁締锛�</div> - <div class="score">94</div> - </div> - </div> - <div class="bottom-publish"> - <el-button size="medium" type="success">鍙戝竷</el-button> - <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button> - </div> - </div> - </div> - </el-col> - <el-col :span="6"> - <div class="city-warp"> - <div class="city"> - <div class="title"> - 璐′簳鍖� - </div> - <div class="score-warp"> - <div class="score-item"> - <div style="font-size: 15px;margin-bottom: 15px">2024骞�4鏈�12鏃�</div> - </div> - <div class="score-item"> - <div>瑙嗛锛�</div> - <div class="score">99.5</div> - </div> - <div class="score-item"> - <div>浜鸿劯锛�</div> - <div class="score">87</div> - </div> - <div class="score-item"> - <div>杞﹁締锛�</div> - <div class="score">94</div> - </div> - - </div> - <div class="bottom-publish"> - <el-button size="medium" type="success">鍙戝竷</el-button> - <el-button size="medium" @click="jumpDetail" type="info">璇︽儏</el-button> - </div> - </div> - </div> - </el-col> - </el-row> + </el-col> + </el-row> + </div> </div> </template> <script> +import { areaSelect } from '@/api/system/dept'; +import { listScore, getScore, delScore, addScore, updateScore, publishScore } from "@/api/platform/check-score"; import * as echarts from 'echarts'; let observer = null; let chart = null; @@ -250,8 +67,13 @@ name: 'index', data() { return { - activeIndex: '1', - activeIndex2: '1', + province: { + id: [], + publish: null, + }, + checkScoreList: [], + areaList: [], + activeIndex: '0', date: '', company: '', dataList: { @@ -260,11 +82,31 @@ 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], }, + // 鏌ヨ鍙傛暟 + queryParams: { + examineTag: null, + createTime: null + }, } }, + created() { + this.queryParams.examineTag = this.activeIndex + this.getList(); + this.areaSelect(); + }, + mounted() { + chart = echarts.init(this.$refs.barChart); + this.initEchart(); + }, methods: { - jumpDetail() { - this.$router.push("/examine/detail") + jumpDetail(index) { + this.$router.push({ + path: '/examine/detail', + query: { + index: index, + examineTag: this.activeIndex + } + }) }, initEchart() { const option = { @@ -319,17 +161,165 @@ ] } 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 => { + this.areaList = res.data; + }) + }, + translateDeptId(deptId) { + const department = this.areaList.find(dept => dept.id === deptId); + return department ? department.value : '鏈煡'; + }, + + isAnyUnpublished(city) { + // 妫�鏌� city 鐨� score 鏁扮粍涓槸鍚︽湁浠讳綍涓�涓殑 publish 灞炴�т负 'UNPUBLISHED' + return city.some(score => score.publish === 'UNPUBLISHED'); + }, + formatCreateDate(dateString) { + const date = new Date(dateString); + const year = date.getFullYear(); + const month = date.getMonth() + 1; // getMonth() 杩斿洖鐨勬湀浠芥槸浠� 0 寮�濮嬬殑锛屾墍浠ヨ鍔� 1 + const day = date.getDate(); + + // 浣跨敤 padStart 鏂规硶纭繚鏈堜唤鍜屾棩鏈熷缁堟槸涓や綅鏁� + const formattedMonth = month.toString().padStart(2, '0'); + const formattedDay = day.toString().padStart(2, '0'); + + return `${year}骞�${formattedMonth}鏈�${formattedDay}鍙穈; + }, + /** 瀵艰埅鍒囨崲 */ + handleSelect(key) { + this.activeIndex = key; // 鏇存柊褰撳墠婵�娲荤殑鑿滃崟椤� + this.queryParams.examineTag = key; + this.getList(); + }, + /** 鏌ヨ鑰冩牳鎴愮哗鍒楄〃 */ + getList() { + this.loading = true; + // 鑾峰彇褰撳墠鏃ユ湡 + const today = new Date(); + + // 璁$畻鏄ㄥぉ鐨勬棩鏈� + const yesterday = new Date(today); + yesterday.setDate(today.getDate() - 1); + + // 灏嗘槰澶╃殑鏃ユ湡鏍煎紡鍖栦负瀛楃涓诧紝杩欓噷鍋囪鍚庣鏈熸湜鐨勬槸ISO 8601鏍煎紡 + this.queryParams.createTime = yesterday.toISOString().split('T')[0]; + + console.log(this.queryParams); + listScore(this.queryParams).then(response => { + this.checkScoreList = response.data; + console.log(this.checkScoreList); + this.loading = false; + this.setChartOption(this.checkScoreList); + }); + }, + 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 + '"鐨勬垚缁╋紵') + .then(() => { + return publishScore(this.province); + }) + .then(() => { + this.getList(); + this.$modal.msgSuccess(text + "鎴愬姛"); + }) + .catch(() => { + // 閿欒澶勭悊閫昏緫 + }); + }, }, - mounted() { - chart = echarts.init(this.$refs.barChart); - this.initEchart(); - } } </script> -<style lang = "scss" scoped> +<style lang="scss" scoped> .score-warp { display: flex; flex-direction: column; @@ -337,25 +327,32 @@ align-items: center; color: #797777 } + .score-item { display: flex; flex-direction: row; } + .score { width: 60px; text-align: right; + padding: 3px 0; } + #warp { - padding: 20px; + padding: 0 10px; } + .city-warp { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 210px; + margin-bottom: 25px; } + .city { width: 240px; height: 100%; @@ -365,15 +362,18 @@ 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; @@ -388,6 +388,7 @@ } } } + .title-container { position: absolute; display: flex; @@ -412,6 +413,7 @@ height: 100%; } } + .select-container { margin: 0 20px; width: 180px; -- Gitblit v1.8.0