import { Button, Cell, Checkbox, CheckboxGroup, Col, DatetimePicker, Picker, Popup, Row } from 'vant' import { defineComponent, markRaw } from 'vue' import styles from './index.module.less' import * as echarts from 'echarts/core' import { BarChart, // 系列类型的定义后缀都为 SeriesOption BarSeriesOption, LineChart, LineSeriesOption } from 'echarts/charts' import { PieChart } from 'echarts/charts' import { TitleComponent, // 组件类型的定义后缀都为 ComponentOption TitleComponentOption, TooltipComponent, TooltipComponentOption, GridComponent, GridComponentOption, // 数据集组件 DatasetComponent, DatasetComponentOption, // 内置数据转换器组件 (filter, sort) TransformComponent, LegendComponent, ToolboxComponent, DataZoomComponent } from 'echarts/components' import { LabelLayout, UniversalTransition } from 'echarts/features' import { CanvasRenderer } from 'echarts/renderers' // 通过 ComposeOption 来组合出一个只有必须组件和图表的 Option 类型 type ECOption = echarts.ComposeOption< | BarSeriesOption | LineSeriesOption | TitleComponentOption | TooltipComponentOption | GridComponentOption | DatasetComponentOption > // 注册必须的组件 echarts.use([ TitleComponent, TooltipComponent, GridComponent, DatasetComponent, TransformComponent, BarChart, LabelLayout, UniversalTransition, CanvasRenderer, PieChart, ToolboxComponent, LegendComponent, DataZoomComponent, LineChart ]) import { lineChartOption, pieChartOption } from './echarts' import request from '@/helpers/request' import dayjs from 'dayjs' import { formatterDate, moneyFormat } from '@/helpers/utils' export const getAssetsHomeFile = (fileName: string) => { const path = `./images/${fileName}` const modules = import.meta.globEager('./images/*') return modules[path].default } const yearColumns: any = [] const year = dayjs().year() let defaultIndex = 10 for (let i = year - 10; i <= year + 10; i++) { yearColumns.push({ text: `${i}年`, value: i }) } export default defineComponent({ name: 'IncomeConsus', data() { return { moneyInfo: { totalSingleRate: 0, totalShareRate: 0, totalInAmount: 0, practiceAmount: 0, practiceRate: 0, liveAmount: 0, liveRate: 0, videoAmount: 0, videoRate: 0, musicAmount: 0, musicRate: 0, vipShareAmount: 0, vipShareRate: 0, liveShareAmount: 0, liveShareRate: 0, videoShareAmount: 0, videoShareRate: 0, mallShareAmount: 0, mallShareRate: 0, musicShareAmount: 0, musicShareRate: 0, albumShareAmount: 0, albumShareRate: 0, actiRegistShareAmount: 0, actiRegistShareRate: 0 }, params: { timeType: 'YEAR' as 'YEAR' | 'MONTH', dateTime: `${year}` }, dateTimeStr: `${year}年`, myChart: null as any, myChart2: null as any, timerStatus: false, currentDate: new Date() } }, async mounted() { this.myChart = markRaw( echarts.init(document.getElementById('incomeClass') as HTMLDivElement) ) this.myChart2 = markRaw( echarts.init(document.getElementById('structrueClass') as HTMLDivElement) ) this.getList() }, methods: { async getList() { try { const params = this.params const res = await request.post( '/api-teacher/userAccount/accountTotal', { data: params } ) const result = res.data || {} this.moneyInfo = { totalSingleRate: result.practiceRate + result.liveRate + result.videoRate + result.musicRate, totalShareRate: result.vipShareRate + result.liveShareRate + result.videoShareRate + result.musicShareRate + result.mallShareRate + result.actiRegistShareRate + result.albumShareRate || 0, totalInAmount: result.totalInAmount || 0, practiceAmount: result.practiceAmount || 0, practiceRate: result.practiceRate || 0, liveAmount: result.liveAmount || 0, liveRate: result.liveRate || 0, videoAmount: result.videoAmount || 0, videoRate: result.videoRate || 0, musicAmount: result.musicAmount || 0, musicRate: result.musicRate || 0, vipShareAmount: result.vipShareAmount || 0, vipShareRate: result.vipShareRate || 0, liveShareAmount: result.liveShareAmount || 0, liveShareRate: result.liveShareRate || 0, videoShareAmount: result.videoShareAmount || 0, videoShareRate: result.videoShareRate || 0, mallShareAmount: result.mallShareAmount || 0, mallShareRate: result.mallShareRate || 0, musicShareAmount: result.musicShareAmount || 0, musicShareRate: result.musicShareRate || 0, albumShareAmount: result.albumShareAmount || 0, albumShareRate: result.albumShareRate || 0, actiRegistShareAmount: result.actiRegistShareAmount || 0, actiRegistShareRate: result.actiRegistShareRate || 0 } // 处理折线图数据 const lineData = { xAxis: [] as any, practiceAmount: [] as any, liveAmount: [] as any, videoAmount: [] as any, musicAmount: [] as any, vipShareAmount: [] as any, liveShareAmount: [] as any, videoShareAmount: [] as any, mallShareAmount: [] as any, musicShareAmount: [] as any, albumShareAmount: [] as any, actiRegistShareAmount: [] as any } ;(result.infoList || []).forEach((item: any) => { if (params.timeType === 'YEAR') { lineData.xAxis.push(dayjs(item.timeStr).format('MM月')) } else if (params.timeType === 'MONTH') { lineData.xAxis.push(dayjs(item.timeStr).format('DD日')) } lineData.practiceAmount.push(item.practiceAmount) lineData.liveAmount.push(item.liveAmount) lineData.videoAmount.push(item.videoAmount) lineData.musicAmount.push(item.musicAmount) lineData.vipShareAmount.push(item.vipShareAmount) // 小酷Ai lineData.liveShareAmount.push(item.liveShareAmount) lineData.videoShareAmount.push(item.videoShareAmount) lineData.mallShareAmount.push(item.mallShareAmount) lineData.musicShareAmount.push(item.musicShareAmount) lineData.albumShareAmount.push(item.albumShareAmount || 0) lineData.actiRegistShareAmount.push(item.actiRegistShareAmount) }) // 初始化折线图 lineChartOption.xAxis.data = lineData.xAxis lineChartOption.series[0].data = lineData.practiceAmount lineChartOption.series[1].data = lineData.liveAmount lineChartOption.series[2].data = lineData.videoAmount lineChartOption.series[3].data = lineData.musicAmount lineChartOption.series[4].data = lineData.vipShareAmount lineChartOption.series[5].data = lineData.liveShareAmount lineChartOption.series[6].data = lineData.videoShareAmount lineChartOption.series[7].data = lineData.mallShareAmount lineChartOption.series[8].data = lineData.musicShareAmount lineChartOption.series[9].data = lineData.albumShareAmount lineChartOption.series[10].data = lineData.actiRegistShareAmount // console.log(lineChartOption) this.myChart.clear() this.myChart.setOption(lineChartOption) // 处理饼图数据 pieChartOption.series[0].data[0].value = result.practiceAmount pieChartOption.series[0].data[1].value = result.liveAmount pieChartOption.series[0].data[2].value = result.videoAmount pieChartOption.series[0].data[3].value = result.musicAmount pieChartOption.series[0].data[4].value = result.vipShareAmount pieChartOption.series[0].data[5].value = result.liveShareAmount pieChartOption.series[0].data[6].value = result.videoShareAmount pieChartOption.series[0].data[7].value = result.mallShareAmount pieChartOption.series[0].data[8].value = result.musicShareAmount pieChartOption.series[0].data[9].value = result.albumShareAmount pieChartOption.series[0].data[10].value = result.actiRegistShareAmount this.myChart2.clear() this.myChart2.setOption(pieChartOption) } catch (e) { // console.log(e) } } }, render() { return (