<!-- 营收分析 --> <template> <view class="revenue"> <template v-if="type === 'line'"> <view class="revenue-line"> <LineChart v-if="hasData" :chartData="chartData" :title="title" :opts="opts" /> <view class="empty" v-else> <u-empty></u-empty> </view> </view> </template> <template v-else> <view class="revenue-line"> <ColumnChart v-if="hasData" :chartData="chartData" :title="title" :opts="opts" /> <view class="empty" v-else> <u-empty></u-empty> </view> </view> </template> <u-loading-page :loading="loading" loading-text="loading..."></u-loading-page> </view> </template> <script> import LineChart from '@/components/lineChart.vue'; import ColumnChart from '@/components/columnChart.vue'; export default { components: { LineChart, ColumnChart }, props: { type: { type: String, default: 'line' }, title: { type: String, default: '' }, params: { type: Object, default: () => {} } }, data() { return { loading: false, chartData: { categories: [], series: [] }, hasData: false, opts: { enableScroll: true, tooltip: { trigger: 'axis' }, xAxis: { rotateLabel: true, scrollShow: true, itemCount: 8 }, yAxis: { showTitle: true, splitNumber: 5, data: [ { title: '收益(元)', titleOffsetY: -3 } ] }, legend: { show: true }, dataLabel: false, padding: [20, 10, 10, 10], extra: { column: { width: 20 } } } }; }, methods: { /** * 获取数据 */ getData({ reportType, queryDate }) { this.hasData = false; this.chartData.categories = []; this.chartData.series = []; this.loading = true; this.getParkingData({ reportType, queryDate }); }, /** * 停车场数据 */ getParkingData({ reportType, queryDate }) { uni.$u.api.operationalAnalysisApi .getParkingRevenueDataApi({ reportType, queryDate }) .then((res) => { if (res.code === 200) { if (res.data.itemList && res.data.itemList.length) { this.chartData.series[0] = { name: '停车场', data: [] }; this.chartData.series[0].data = res.data.itemList.map((item) => { return item.amt; }); if (!this.chartData.categories.length) { this.chartData.categories = res.data.itemList.map((item) => { return item.statisTime; }); } this.hasData = true; } else { this.hasData = false; } this.loading = false } }); } } }; </script> <style lang="scss" scoped> .revenue { background-color: #fff; border-radius: 5px; .empty { padding: 15px; } } </style>