From 03cd344a15bf63bf7968dc77a026c77c78c304f4 Mon Sep 17 00:00:00 2001 From: pyt <626651354@qq.com> Date: 星期三, 26 三月 2025 11:44:32 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/H5/chongzhou-screen --- src/components/datascreen/RightPanel.vue | 1113 +++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 1,023 insertions(+), 90 deletions(-) diff --git a/src/components/datascreen/RightPanel.vue b/src/components/datascreen/RightPanel.vue index 0192036..fb38b0b 100644 --- a/src/components/datascreen/RightPanel.vue +++ b/src/components/datascreen/RightPanel.vue @@ -2,129 +2,683 @@ <div class="right-panel"> <!-- 右侧第一块 --> <div class="panel-item top-panel-item"> - <div class="box-title">本月进度值比</div> - <div class="circle-progress"> - <!-- <v-chart class="chart" :option="circleOption" autoresize /> --> + <div class="box-title">安置房类型占比</div> + <div class="house-type-content"> + <div class="relative"> + <div class="cityGreenLand-charts" ref="cityGreenLandCharts"></div> + <div class="chartBg"></div> + <div class="chart-content"> + <div class="chart-num">{{ currentType.rate }}</div> + <div class="chart-title">{{ currentType.type }}</div> + </div> + <div class="chart-black"></div> + </div> + + <div class="right-content"> + <div class="table-header"> + <div class="header-item">数量</div> + <div class="header-item">面积</div> + <div class="header-item">占比</div> + </div> + <div class="data-list"> + <div + class="data-item" + :class="{ activeItem: item.type === currentType.type }" + v-for="(item, index) in houseTypeData" + :key="index" + @click="changeCurrentType(item)" + > + <div class="item-dot" :style="{ background: item.color }"></div> + <div class="item-name">{{ item.type }}</div> + <div class="item-value" :style="{ color: item.color }"> + {{ item.total }} + </div> + <div class="item-area" :style="{ color: item.color }"> + {{ item.area }} + </div> + <div class="item-percent" :style="{ color: item.color }"> + {{ item.rate }} + </div> + </div> + </div> + </div> </div> </div> <!-- 右侧第二块 --> <div class="panel-item middle-panel-item"> - <div class="box-title">各季度进度值统计</div> - <div class="bar-chart"> - <!-- <v-chart class="chart" :option="barOption" autoresize /> --> + <div class="box-title">本月应补偿占比</div> + <div class="compensation-content"> + <div class="circle-chart"> + <div + ref="compensationCharts" + id="compensationCharts" + style="width: 100%; height: 100%" + ></div> + <div class="compensation-list"> + <div class="compensation-center"> + <div class="total-value">{{ (total * 1).toFixed(2) }}</div> + <div class="total-name">总额(万元)</div> + </div> + <div class="compensation-item"> + <div + class="compensation-item-name" + v-for="item in twoEcharts" + :key="item.name" + > + <div class="item-name">{{ item.amountRate }}</div> + <div class="item-value">{{ item.type }}</div> + <div class="item-dot" :style="{ background: item.color }"></div> + </div> + </div> + </div> + </div> </div> </div> <!-- 右侧第三块 --> <div class="panel-item bottom-panel-item"> - <div class="box-title">安置房类型分布</div> + <div class="box-title">各季度应补偿金额</div> <div class="pie-chart"> - <!-- <v-chart class="chart" :option="typeDistOption" autoresize /> --> + <v-chart class="chart" :option="barOption" autoresize /> </div> </div> </div> </template> <script> +import * as echarts from "echarts"; +import "echarts-gl"; + export default { - name: 'RightPanel', + name: "RightPanel", + props: { + data: { + type: Object, + default: () => {}, + }, + }, data() { return { - circleOption: { - series: [{ - type: 'pie', - radius: ['75%', '80%'], - label: { - show: false - }, - data: [ - { - value: 78.8, - name: '完成率', - itemStyle: { - color: '#00ffff' - } - }, - { - value: 21.2, - name: '剩余', - itemStyle: { - color: 'rgba(0,255,255,0.2)' - } - } - ] - }] - }, - barOption: { + houseTypeData: [], + currentType: {}, + total: null, + barOption: {}, + twoEcharts: [], + typeDistOption: { tooltip: { - trigger: 'axis' + trigger: "item", + }, + series: [ + { + type: "pie", + radius: ["65%", "80%"], + label: { + show: false, + }, + data: [ + { value: 40, name: "商品房" }, + { value: 30, name: "安置房" }, + { value: 30, name: "其他" }, + ], + itemStyle: { + color: function (params) { + const colorList = ["#00ffff", "#7cb9e8", "rgba(0,255,255,0.5)"]; + return colorList[params.dataIndex]; + }, + }, + }, + ], + }, + }; + }, + mounted() { + this.$nextTick(() => { + this.init(this.data.placementTypeResponses); + this.initCompensationOption(this.data.monthCompensationResponses); + this.initBarChart(); + }); + }, + methods: { + changeCurrentType(type) { + this.currentType = type; + }, + initBarChart() { + if (!this.data.quarterPayResponses || !this.data.quarterPayResponses[0]) + return; + + const sortedData = Object.entries(this.data.quarterPayResponses[0]).sort( + (a, b) => { + const dateA = new Date(a[0].replace("-", "/")); + const dateB = new Date(b[0].replace("-", "/")); + return dateA - dateB; + } + ); + + const maxValue = Math.max(...sortedData.map((item) => item[1])); + const yAxisMax = Math.ceil(maxValue / 100) * 100; + + this.barOption = { + tooltip: { + trigger: "axis", + formatter: function (params) { + const dataParams = params[1]; + // 获取当前柱子的颜色(取渐变色的起始色) + let color; + if (dataParams.dataIndex === 0) { + color = "#FFEF00"; + } else if (dataParams.dataIndex === 1) { + color = "#00FFC3"; + } else if (dataParams.dataIndex === 2) { + color = "#00DBFF"; + } else { + color = "#057BFF"; + } + return `${dataParams.name}<br/><span style="display:inline-block;width:8px;height:8px;border-radius:50%;background-color:${color};margin-right:6px;"></span>${dataParams.value}`; + }, + backgroundColor: "#ffffff", + borderWidth: 1, + textStyle: { + color: "#333333", + fontSize: 14, + }, + padding: [8, 12], + }, + grid: { + top: "10%", + left: "3%", + right: "4%", + bottom: "3%", + containLabel: true, }, xAxis: { - type: 'category', - data: ['2023年4月', '2023年5月', '2023年7月', '2023年10月'], + type: "category", + data: sortedData.map((item) => item[0]), axisLine: { lineStyle: { - color: '#7cb9e8' - } + color: "rgba(30, 44, 88, 1)", + }, + }, + axisTick: { + show: false, }, axisLabel: { - color: '#7cb9e8' - } + color: "#ffffff", + fontSize: 12, + }, }, yAxis: { - type: 'value', - axisLine: { - lineStyle: { - color: '#7cb9e8' - } - }, + type: "value", + max: yAxisMax, + splitNumber: 4, axisLabel: { - color: '#7cb9e8' + color: "rgba(88, 115, 150, 1)", + fontSize: 12, }, splitLine: { lineStyle: { - color: 'rgba(124,185,232,0.1)' - } - } - }, - series: [{ - data: [120, 200, 150, 80], - type: 'bar', - itemStyle: { - color: '#00ffff' - } - }] - }, - typeDistOption: { - tooltip: { - trigger: 'item' - }, - series: [{ - type: 'pie', - radius: ['65%', '80%'], - label: { - show: false + color: "rgba(30, 44, 88, 1)", + }, }, - data: [ - { value: 40, name: '商品房' }, - { value: 30, name: '安置房' }, - { value: 30, name: '其他' } - ], - itemStyle: { - color: function(params) { - const colorList = ['#00ffff', '#7cb9e8', 'rgba(0,255,255,0.5)']; - return colorList[params.dataIndex]; - } - } - }] + }, + series: [ + { + type: "bar", + barWidth: "30%", + z: 1, + data: Array(sortedData.length).fill(yAxisMax), + itemStyle: { + color: "rgba(0, 255, 255, 0.1)", + }, + }, + { + type: "pictorialBar", + symbol: "roundRect", + symbolSize: [20, 6], + symbolRepeat: "fixed", + symbolMargin: 1, + symbolClip: true, + symbolPosition: "start", + symbolOffset: [0, 0], + symbolBoundingData: yAxisMax, + z: 2, + data: sortedData.map((item, index) => ({ + value: item[1], + itemStyle: { + color: + index === 0 + ? new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { offset: 0, color: "#FFEF00" }, + { offset: 0.5, color: "#C86A01" }, + { offset: 1, color: "#402303" }, + ]) + : index === 1 + ? new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { offset: 0, color: "#00FFC3" }, + { offset: 1, color: "#008570" }, + ]) + : index === 2 + ? new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { offset: 0, color: "#00DBFF" }, + { offset: 1, color: "#0093A8" }, + ]) + : new this.$echarts.graphic.LinearGradient(0, 0, 0, 1, [ + { offset: 0, color: "#05DBFF" }, + { offset: 0.5, color: "#057BFF" }, + { offset: 1, color: "#030E3F" }, + ]), + }, + })), + }, + ], + }; + }, + init(data) { + if (!data || data.length == 0) { + this.houseTypeData = []; + this.currentType = {}; + return; } - }; - } + const chartDom = this.$refs.cityGreenLandCharts; + if (!chartDom) return; + + const myChart = echarts.init(chartDom); + + let colors = ["#286DF7ee", "#04F7FDee", "#E23AA9ee", "#FFC852ee"]; + this.houseTypeData = data.map((item, index) => { + return { + ...item, + color: colors[index], + }; + }); + this.currentType = this.houseTypeData[0]; + let xData = data.map((item) => item.type); + let yData = data.map((item) => item.total); + // 传入数据生成 option + let optionsData = []; + for (let i = 0; i < xData.length; i++) { + optionsData.push({ + name: xData[i], + value: yData[i], + itemStyle: { + color: colors[i], + }, + }); + } + + const series = this.getPie3D(optionsData, 0.55); + + series.push({ + name: "pie2d", + type: "pie", + labelLine: { + show: false, + length: 60, + length2: 60, + }, + startAngle: -50, + clockwise: false, + radius: ["0", "0"], + center: ["50%", "50%"], + data: optionsData, + itemStyle: { + opacity: 0, + }, + }); + + let option = { + animation: true, + labelLine: { + show: false, + }, + xAxis3D: { + min: -1, + max: 1, + }, + yAxis3D: { + min: -1, + max: 1, + }, + zAxis3D: { + min: -1, + max: 1, + }, + grid3D: { + show: false, + boxHeight: 1, + bottom: "50%", + viewControl: { + distance: 280, + alpha: 30, + beta: 40, + zoom: 40, + rotateSensitivity: 0, + zoomSensitivity: 0, + panSensitivity: 0, + autoRotate: false, + }, + }, + series: series, + }; + + myChart.setOption(option); + + window.addEventListener("resize", () => { + myChart.resize(); + }); + }, + + getParametricEquation( + startRatio, + endRatio, + isSelected, + isHovered, + k, + height + ) { + let midRatio = (startRatio + endRatio) / 2; + let startRadian = startRatio * Math.PI * 2; + let endRadian = endRatio * Math.PI * 2; + let midRadian = midRatio * Math.PI * 2; + + if (startRatio === 0 && endRatio === 1) { + isSelected = false; + } + + k = typeof k !== "undefined" ? k : 1 / 3; + + let offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0; + let offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0; + + let hoverRate = isHovered ? 1.05 : 1; + + return { + u: { + min: -Math.PI, + max: Math.PI * 3, + step: Math.PI / 32, + }, + v: { + min: 0, + max: Math.PI * 2, + step: Math.PI / 20, + }, + x: function (u, v) { + if (u < startRadian) { + return ( + offsetX + + Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate + ); + } + if (u > endRadian) { + return ( + offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate + ); + } + return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate; + }, + y: function (u, v) { + if (u < startRadian) { + return ( + offsetY + + Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate + ); + } + if (u > endRadian) { + return ( + offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate + ); + } + return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate; + }, + z: function (u, v) { + if (u < -Math.PI * 0.5) { + return Math.sin(u); + } + if (u > Math.PI * 2.5) { + return Math.sin(u); + } + return Math.sin(v) > 0 ? 27 : -1; //柱状体高度 + }, + }; + }, + + getPie3D(pieData, internalDiameterRatio) { + let series = []; + let sumValue = 0; + let startValue = 0; + let endValue = 0; + let k = + typeof internalDiameterRatio !== "undefined" + ? (1 - internalDiameterRatio) / (1 + internalDiameterRatio) + : 1 / 3; + + for (let i = 0; i < pieData.length; i++) { + sumValue += pieData[i].value; + + let seriesItem = { + name: + typeof pieData[i].name === "undefined" + ? `series${i}` + : pieData[i].name, + type: "surface", + parametric: true, + wireframe: { + show: false, + }, + pieData: pieData[i], + pieStatus: { + selected: false, + hovered: false, + k: k, + }, + }; + + if (typeof pieData[i].itemStyle != "undefined") { + let itemStyle = {}; + typeof pieData[i].itemStyle.color != "undefined" + ? (itemStyle.color = pieData[i].itemStyle.color) + : null; + typeof pieData[i].itemStyle.opacity != "undefined" + ? (itemStyle.opacity = pieData[i].itemStyle.opacity) + : null; + seriesItem.itemStyle = itemStyle; + } + series.push(seriesItem); + } + + for (let i = 0; i < series.length; i++) { + endValue = startValue + series[i].pieData.value; + series[i].pieData.startRatio = startValue / sumValue; + series[i].pieData.endRatio = endValue / sumValue; + series[i].parametricEquation = this.getParametricEquation( + series[i].pieData.startRatio, + series[i].pieData.endRatio, + false, + false, + k, + series[i].pieData.value + ); + startValue = endValue; + } + + series.push({ + name: "mouseoutSeries", + type: "surface", + parametric: true, + wireframe: { + show: false, + }, + itemStyle: { + opacity: 0, + color: "#f0f", + }, + parametricEquation: { + u: { + min: 0, + max: Math.PI * 2, + step: Math.PI / 20, + }, + v: { + min: 0, + max: Math.PI, + step: Math.PI / 20, + }, + x: function (u, v) { + return ((Math.sin(v) * Math.sin(u) + Math.sin(u)) / Math.PI) * 2; + }, + y: function (u, v) { + return ((Math.sin(v) * Math.cos(u) + Math.cos(u)) / Math.PI) * 2; + }, + z: function (u, v) { + return Math.cos(v) > 0 ? 0 : -20; + }, + }, + }); + series.push({ + name: "mouseoutSeries", + type: "surface", + parametric: true, + wireframe: { + show: false, + }, + itemStyle: { + opacity: 0.05, + color: "#0ff", + }, + parametricEquation: { + u: { + min: 0, + max: Math.PI * 2, + step: Math.PI / 20, + }, + v: { + min: 0, + max: Math.PI, + step: Math.PI / 20, + }, + x: function (u, v) { + return ((Math.sin(v) * Math.sin(u) + Math.sin(u)) / Math.PI) * 2; + }, + y: function (u, v) { + return ((Math.sin(v) * Math.cos(u) + Math.cos(u)) / Math.PI) * 2; + }, + z: function (u, v) { + return Math.cos(v) > 0 ? -15 : -30; + }, + }, + }); + return series; + }, + // 随机颜色 + getRandomColor() { + const letters = "0123456789ABCDEF"; + let color = "#"; + for (let i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)]; + } + return color; + }, + + initCompensationOption(data) { + if (!data || !data.length) { + this.twoEcharts = []; + return; + } + let list = ["#00ffff", "#34D160", "#F8B551"]; + data = data.map((item, index) => { + return { + ...item, + color: list[index], + }; + }); + this.twoEcharts = data || []; + + const chartDom = this.$refs.compensationCharts; + if (!chartDom) return; + + const chartCompensation = echarts.init(chartDom); + + let option = { + polar: { + radius: [50, "70%"], + center: ["50%", "40%"], + }, + grid: { + left: "10%", + bottom: "40%", + width: "80%", + height: "100%", + }, + angleAxis: { + max: 7, + startAngle: 75, + show: false, + axisTick: { + show: false, + }, + axisLine: { show: false }, + minorSplitLine: { show: false }, + }, + radiusAxis: { + type: "category", + show: false, + data: [], + axisTick: { + show: false, + }, + }, + tooltip: { show: false }, + series: { + type: "bar", + barMaxWidth: "11px", + showBackground: true, + roundCap: true, + backgroundStyle: { + color: "rgba(255, 255, 255, 0.1)", + }, + data: [], + coordinateSystem: "polar", + }, + }; + + let max = 0; + let total = 0; + let arr = []; + for (let i = 0; i < data.length; i++) { + max = Math.max(max, data[i].amount); + total += data[i].amount; + arr.push({ + value: data[i].amount, + itemStyle: { color: data[i].color }, + }); + } + this.total = total; + option.angleAxis.max = total; + option.radiusAxis.data = data.map((item) => item.type); + option.series.data = arr; + + chartCompensation.setOption(option); + + window.addEventListener("resize", () => { + chartCompensation.resize(); + }); + }, + }, }; </script> <style lang="less" scoped> +.water-eval-container { + width: 100%; + height: 100%; +} + +.cityGreenLand-charts { + width: 170px; + height: 100%; +} + .right-panel { position: absolute; top: 111px; @@ -138,35 +692,414 @@ .top-panel-item { height: 268px; - background: url('@/assets/right-top-bg.png') no-repeat center center; + background: url("@/assets/right-middle-bg.png") no-repeat center center; background-size: 100% 100%; } .middle-panel-item { margin-top: 21px; height: 303px; - background: url('@/assets/right-middle-bg.png') no-repeat center center; + background: url("@/assets/right-middle-bg.png") no-repeat center center; background-size: 100% 100%; } .bottom-panel-item { margin-top: 21px; height: 335px; - background: url('@/assets/right-bottom-bg.png') no-repeat center center; + background: url("@/assets/right-bottom-bg.png") no-repeat center center; background-size: 100% 100%; } .box-title { font-size: 14px; - color: #19ECFF; + color: #19ecff; text-align: center; padding-top: 9px; line-height: 21px; } + .house-type-content { + height: calc(100% - 30px); + display: flex; + padding: 10px 13px; + .relative { + position: relative; + + .chartBg { + position: absolute; + width: 100%; + height: 58%; + top: 56px; + left: 0px; + background: url("@/assets/echartsBg.png") no-repeat center center; + background-size: 100% 100%; + } + .chart-content { + position: absolute; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + z-index: 99; + text-align: center; + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; + .chart-num { + height: 20px; + font-family: "pangmenzhengdao"; + font-size: 20px; + color: #ffffff; + text-shadow: 0px 2px 4px #40a9ff; + } + .chart-title { + font-family: PingFangSC, PingFang SC; + font-weight: 400; + font-size: 14px; + color: #ffffff; + margin-top: 23px; + margin-bottom: 60px; + } + } + .chart-black { + position: absolute; + left: 55px; + top: 86px; + height: 12%; + width: 35%; + background: rgba(0, 0, 0, 0.5); + border-radius: 28px / 10px; + padding-top: 17px; + } + } + + .pie-chart { + position: relative; + width: 45%; + height: 100%; + display: flex; + align-items: center; + + &::after { + content: ""; + position: absolute; + bottom: 15%; + left: 50%; + transform: translateX(-50%); + width: 60%; + height: 10px; + background: radial-gradient( + ellipse at center, + rgba(0, 255, 255, 0.3) 0%, + rgba(0, 0, 0, 0) 70% + ); + border-radius: 50%; + filter: blur(3px); + z-index: 0; + } + + .center-text { + position: absolute; + left: 40%; + top: 50%; + transform: translate(-50%, -50%); + text-align: center; + z-index: 2; + padding: 10px 15px; + border-radius: 4px; + background: rgba(0, 0, 0, 0.2); + backdrop-filter: blur(2px); + + .percent { + display: block; + font-size: 28px; + color: #fff; + font-weight: bold; + } + + .type { + display: block; + font-size: 14px; + color: #19ecff; + margin-top: 5px; + } + } + } + + .type-list { + flex: 1; + margin-left: 30px; + display: flex; + flex-direction: column; + justify-content: space-around; + + .type-item { + display: grid; + grid-template-columns: auto 1fr 1fr 1fr; + gap: 15px; + align-items: center; + cursor: pointer; + padding: 5px 10px; + transition: all 0.3s; + position: relative; + + &:hover { + background: rgba(25, 236, 255, 0.1); + border-radius: 4px; + } + + &::before { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: -5px; + height: 1px; + background: linear-gradient( + 90deg, + transparent, + rgba(25, 236, 255, 0.2), + transparent + ); + } + + .dot { + width: 8px; + height: 8px; + border-radius: 50%; + margin-right: 8px; + box-shadow: 0 0 5px rgba(255, 255, 255, 0.3); + } + + .name { + color: #fff; + font-size: 14px; + } + + .value { + color: #00ffff; + font-size: 14px; + text-align: center; + } + + .area { + color: #00ffff; + font-size: 14px; + text-align: center; + } + + .percent { + color: #00ffff; + font-size: 14px; + text-align: right; + } + } + } + + .right-content { + flex: 1; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + padding-top: 27px; + + .table-header { + display: flex; + align-items: center; + padding: 0 19px 0px 118px; + margin-bottom: 8px; + + .header-item { + color: #b6d9fc; + font-weight: 400; + font-size: 10px; + text-align: center; + + &:nth-child(1) { + width: 60px; + } + + &:nth-child(2) { + width: 80px; + } + + &:nth-child(3) { + width: 60px; + text-align: right; + } + } + } + + .data-list { + flex: 1; + overflow-y: auto; + // padding-right: 10px; + + &::-webkit-scrollbar { + display: none; + } + + .data-item { + display: flex; + align-items: center; + padding: 5px 7px 5px 4px; + position: relative; + margin-bottom: 21px; + cursor: pointer; + + &:not(:last-child)::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 1px; + background: linear-gradient( + 90deg, + transparent, + rgba(25, 236, 255, 0.2), + transparent + ); + } + + .item-dot { + width: 8px; + height: 8px; + flex-shrink: 0; + border-radius: 50%; + margin-right: 3px; + box-shadow: 0 0 5px rgba(255, 255, 255, 0.3); + } + + .item-name { + font-family: "pangmenzhengdao"; + width: 100px; + color: #fff; + font-weight: 500; + font-size: 12px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + .item-value { + width: 60px; + color: #00ffff; + font-size: 12px; + text-align: center; + } + + .item-area { + width: 80px; + color: #00ffff; + font-size: 12px; + text-align: center; + } + + .item-percent { + width: 60px; + color: #00ffff; + font-size: 12px; + text-align: right; + } + } + .activeItem { + box-sizing: border-box; + background: rgba(105, 192, 255, 0.12); + border-radius: 4px; + border: 1px solid rgba(105, 192, 255, 0.29); + } + } + } + } + .chart { width: 100%; - height: calc(100% - 35px); + height: 100%; + } + + .middle-panel-item { + .compensation-content { + height: calc(100% - 30px); + display: flex; + flex-direction: column; + align-items: center; + padding: 20px; + + .circle-chart { + width: 100%; + height: 260px; + position: relative; + } + + .compensation-list { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + margin-top: 20px; + padding: 0 40px 0px 40px; + .compensation-center { + display: flex; + flex: 1; + justify-content: center; + align-items: center; + flex-direction: column; + .total-value { + font-family: PangMenZhengDao; + font-size: 28px; + color: #ffffff; + margin-bottom: 11px; + } + .total-name { + font-family: SourceHanSansCN, SourceHanSansCN; + font-weight: 400; + font-size: 12px; + color: rgba(255, 255, 255, 1); + } + } + + .compensation-item { + width: 100%; + height: 45px; + display: flex; + justify-content: space-between; + align-items: center; + .compensation-item-name { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + .item-name { + font-size: 16px; + color: #ffffff; + margin-bottom: 5px; + font-family: "pangmenzhengdao"; + } + .item-value { + font-weight: 400; + font-size: 12px; + color: #ffffff; + margin-bottom: 2px; + } + .item-dot { + width: 8px; + height: 8px; + border-radius: 50%; + } + } + } + } + } } } -</style> \ No newline at end of file + +.pie-chart { + height: calc(100% - 35px); +} +</style> \ No newline at end of file -- Gitblit v1.7.1