| | |
| | | <div class="panel-item bottom-panel-item"> |
| | | <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> |
| | |
| | | import "echarts-gl"; |
| | | |
| | | export default { |
| | | name: "RightPanel", |
| | | name: 'RightPanel', |
| | | props: { |
| | | data: { |
| | | type: Object, |
| | | default: () => { } |
| | | } |
| | | }, |
| | | data() { |
| | | const houseTypeData = [ |
| | | { |
| | |
| | | houseTypeData, |
| | | currentType: houseTypeData[0], |
| | | total: null, |
| | | barOption: {}, |
| | | twoEcharts: [ |
| | | { |
| | | name: "首付款", |
| | |
| | | this.$nextTick(() => { |
| | | this.init(); |
| | | this.initCompensationOption(this.twoEcharts); |
| | | 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: sortedData.map(item => item[0]), |
| | | axisLine: { |
| | | lineStyle: { |
| | | color: 'rgba(30, 44, 88, 1)' |
| | | } |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | axisLabel: { |
| | | color: '#ffffff', |
| | | fontSize: 12 |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | max: yAxisMax, |
| | | splitNumber: 4, |
| | | axisLabel: { |
| | | color: 'rgba(88, 115, 150, 1)', |
| | | fontSize: 12 |
| | | }, |
| | | splitLine: { |
| | | lineStyle: { |
| | | color: 'rgba(30, 44, 88, 1)' |
| | | } |
| | | } |
| | | }, |
| | | 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() { |
| | | const chartDom = this.$refs.cityGreenLandCharts; |
| | |
| | | } |
| | | |
| | | .item-name { |
| | | font-family: 'pangmenzhengdao'; |
| | | width: 100px; |
| | | color: #fff; |
| | | font-weight: 500; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .pie-chart { |
| | | height: calc(100% - 35px); |
| | | } |
| | | </style> |