From abfc074c35e8bd66ec0641173bfd703051ca701a Mon Sep 17 00:00:00 2001 From: 13404089107 <puwei@sinata.cn> Date: 星期一, 07 四月 2025 17:00:51 +0800 Subject: [PATCH] fix --- src/components/datascreen/LeftPanel.vue | 217 +++++++++++++++++++++++++++++++---------------------- 1 files changed, 127 insertions(+), 90 deletions(-) diff --git a/src/components/datascreen/LeftPanel.vue b/src/components/datascreen/LeftPanel.vue index 95a1ca1..fcca0b1 100644 --- a/src/components/datascreen/LeftPanel.vue +++ b/src/components/datascreen/LeftPanel.vue @@ -6,11 +6,11 @@ <div class="box-content"> <div class="box-content-item"> <div class="box-content-item-title">总参与户数(户)</div> - <div class="box-content-item-value">87695</div> + <div class="box-content-item-value">{{ data.selfBuyResponse.householdNum || 0 }}</div> </div> <div class="box-content-item" style="margin-left: 35px;"> <div class="box-content-item-title">总参与人数(人)</div> - <div class="box-content-item-value">876995</div> + <div class="box-content-item-value">{{ data.selfBuyResponse.personNum || 0 }}</div> </div> </div> </div> @@ -22,15 +22,16 @@ <div v-for="(item, index) in rankingList" :key="index" class="ranking-item"> <div class="ranking-item-content"> <span class="rank" :class="'rank-' + (index + 1)">{{ index + 1 }}</span> - <span class="name">{{ item.name }}</span> + <span class="name">{{ item.street }}</span> <div class="value"> <div class="value-text"> 环比 - <span class="value-text-value" :class="{ 'positive': item.growth > 0, 'negative': item.growth < 0 }"> - {{ item.growth > 0 ? '+' : '' }}{{ item.growth }}% + <span class="value-text-value" + :class="{ 'positive': item.latestBatchHouseholdCount < item.secondLatestBatchHouseholdCount, 'negative': item.latestBatchHouseholdCount > item.secondLatestBatchHouseholdCount }"> + {{ item.growth > 0 ? '+' : '' }}{{ item.householdNumRate }} </span> </div> - {{ item.value }} + {{ item.householdNum }}人 </div> </div> <div class="progress-bar"> @@ -55,26 +56,17 @@ <script> export default { name: 'LeftPanel', - components: { + props: { + data: { + type: Object, + default: () => ({}) + }, }, data() { return { - totalHouseholds: 87695, - totalPeople: 876995, - rankingList: [ - { name: '崇州街道', percentage: 0, value: '999户', growth: 43.2 }, - { name: '羊马乡', percentage: 0, value: '999户', growth: -12.5 }, - { name: '万家镇', percentage: 0, value: '999户', growth: 8.3 }, - { name: '崇阳街道', percentage: 0, value: '999户', growth: -5.2 }, - { name: '白头镇', percentage: 0, value: '999户', growth: 15.7 }, - { name: '金鸡乡', percentage: 0, value: '999户', growth: -3.8 }, - { name: '西江镇', percentage: 0, value: '999户', growth: 22.1 }, - { name: '观胜镇', percentage: 0, value: '999户', growth: -7.4 } - ], - finalPercentages: [ - 50, 85, 80, 75, 70, 65, 60, 55 - ], - + totalHouseholds: 0, + totalPeople: 0, + rankingList: [], lineOption: { tooltip: { trigger: 'axis', @@ -98,14 +90,14 @@ grid: { top: '20%', left: '3%', - right: '4%', + right: '6%', bottom: '3%', containLabel: true }, xAxis: { type: 'category', boundaryGap: false, - data: ['1月', '2月', '3月', '4月', '5月', '6月'], + data: [], axisLine: { show: true, lineStyle: { @@ -116,15 +108,16 @@ show: false }, axisLabel: { - color: '#495F88', - fontSize: 12 + color: '#fff', + fontSize: 12, + // rotate: 30, // 标签倾斜角度 } }, yAxis: { type: 'value', name: '单位:次', nameTextStyle: { - color: '#495F88', + color: '#fff', fontSize: 12, }, splitLine: { @@ -140,7 +133,7 @@ show: false }, axisLabel: { - color: '#495F88', + color: '#fff', fontSize: 12 } }, @@ -149,7 +142,7 @@ name: '安置面积异常', type: 'line', smooth: true, - symbol: 'none', + symbol: 'circle', itemStyle: { color: '#FEDB65' }, @@ -173,35 +166,35 @@ lineStyle: { width: 4, color: { - type: 'linear', - x: 0, - y: 0, - x2: 1, - y2: 0, - colorStops: [{ - offset: 0, - color: '#AE5112' // 0% 处的颜色 - }, { - offset: 0.3, - color: '#FEDB65' // 50% 处的颜色 - }, { - offset: 0.7, - color: '#FEDB65' // 50% 处的颜色 - }, { - offset: 1, - color: '#AE5112' // 100% 处的颜色 - }] + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: '#AE5112' // 0% 处的颜色 + }, { + offset: 0.3, + color: '#FEDB65' // 50% 处的颜色 + }, { + offset: 0.7, + color: '#FEDB65' // 50% 处的颜色 + }, { + offset: 1, + color: '#AE5112' // 100% 处的颜色 + }] } }, - data: [150, 180, 230, 280, 260, 100] + data: [] }, { name: '补偿金额异常', type: 'line', smooth: true, - symbol: 'none', + symbol: 'circle', itemStyle: { - color: '#00F2EF' + color: '#00F2EF' }, areaStyle: { opacity: 0.8, @@ -223,44 +216,63 @@ lineStyle: { width: 4, color: { - type: 'linear', - x: 0, - y: 0, - x2: 1, - y2: 0, - colorStops: [{ - offset: 0, - color: '#0E5FFF' // 0% 处的颜色 - }, { - offset: 0.3, - color: '#00F2EF' // 50% 处的颜色 - }, { - offset: 0.7, - color: '#00F2EF' // 50% 处的颜色 - }, { - offset: 1, - color: '#0E5FFF' // 100% 处的颜色 - }] + type: 'linear', + x: 0, + y: 0, + x2: 1, + y2: 0, + colorStops: [{ + offset: 0, + color: '#0E5FFF' // 0% 处的颜色 + }, { + offset: 0.3, + color: '#00F2EF' // 50% 处的颜色 + }, { + offset: 0.7, + color: '#00F2EF' // 50% 处的颜色 + }, { + offset: 1, + color: '#0E5FFF' // 100% 处的颜色 + }] } }, - data: [200, 250, 380, 450, 380, 300] + data: [] } ] } }; }, - mounted() { - // 使用 setTimeout 确保 DOM 已经渲染 - setTimeout(() => { - this.animateProgressBars(); - }, 100); + watch: { + data: { + handler(newVal, oldVal) { + if (newVal) { + this.rankingList = newVal.streetResponses + this.$nextTick(() => { + this.animateProgressBars(); + this.updateChartData(this.data.importErrorResponses); + }); + } + }, + deep: true, + immediate: true + } }, methods: { animateProgressBars() { - this.rankingList = this.rankingList.map((item, index) => ({ - ...item, - percentage: this.finalPercentages[index] - })); + let count = 0 + this.rankingList.map(item => { + count += item.householdNum; + }); + + this.rankingList = this.rankingList.map((item, index) => { + item.percentage = (item.householdNum / count) * 100; + return item + }); + }, + updateChartData(apiData) { + this.lineOption.xAxis.data = apiData.map(item => item.month); + this.lineOption.series[0].data = apiData.map(item => item.areaErrorCount); + this.lineOption.series[1].data = apiData.map(item => item.moneyErrorCount); } } }; @@ -278,11 +290,13 @@ height: 196px; background: url('@/assets/left-top-bg.png') no-repeat center center; background-size: 100% 100%; + .box-content { display: flex; justify-content: center; margin-top: 30px; height: 100%; + .box-content-item-title { width: 178px; height: 38px; @@ -292,6 +306,7 @@ background: url('@/assets/left/top-number-header.png') no-repeat center center; background-size: 100% 100%; } + .box-content-item-value { width: 178px; height: 64px; @@ -330,7 +345,19 @@ } .ranking-list { + height: 400px; margin-top: 30px; + overflow: auto; + /* 隐藏滚动条 */ + scrollbar-width: none; + /* Firefox */ + -ms-overflow-style: none; + + /* IE 和 Edge */ + &::-webkit-scrollbar { + display: none; + /* Chrome, Safari 和 Opera */ + } } .ranking-item { @@ -349,28 +376,28 @@ height: 22px; line-height: 22px; padding-left: 2px; - + &.rank-1 { color: #E9B701; background: url('@/assets/left/one.png') no-repeat center center; background-size: 100% 100%; } - + &.rank-2 { color: #0ED1A3; background: url('@/assets/left/two.png') no-repeat center center; background-size: 100% 100%; } - + &.rank-3 { color: #0EBFDA; background: url('@/assets/left/three.png') no-repeat center center; background-size: 100% 100%; } - + &:not(.rank-1):not(.rank-2):not(.rank-3) { color: #0089FF; - background: linear-gradient( 270deg, rgba(0,137,255,0) 0%, rgba(0,137,255,0.4) 100%); + background: linear-gradient(270deg, rgba(0, 137, 255, 0) 0%, rgba(0, 137, 255, 0.4) 100%); } } @@ -386,15 +413,21 @@ font-size: 15px; display: flex; align-items: center; + justify-content: space-between; + text-align: end; + width: 175px; + .value-text { color: #C0CFDC; font-size: 12px; - width: 130px; + .value-text-value { margin-left: 12px; + &.positive { color: #FEDB65; } + &.negative { color: #66FFFF; } @@ -415,7 +448,7 @@ width: 0; transition: width 1.5s cubic-bezier(0.4, 0, 0.2, 1); position: relative; - + .progress-icon { position: absolute; right: -8px; @@ -427,30 +460,34 @@ background-repeat: no-repeat; background-position: center; } - + &.rank-1 { background: linear-gradient(90deg, #2A1802 0%, #C86A01 49%, #E5D704 100%); + .progress-icon { background-image: url('@/assets/left/progress-one.png'); } } - + &.rank-2 { background: linear-gradient(270deg, #0ED1A3 0%, #03493E 100%); + .progress-icon { background-image: url('@/assets/left/progress-two.png'); } } - + &.rank-3 { background: linear-gradient(90deg, #104461 0%, #0EB2DA 100%); + .progress-icon { background-image: url('@/assets/left/progress-three.png'); } } - + &:not(.rank-1):not(.rank-2):not(.rank-3) { background: linear-gradient(90deg, #03142C 0%, #057BFF 49%, #05DBFF 100%); + .progress-icon { background-image: url('@/assets/left/progress-four.png'); } -- Gitblit v1.7.1