<!-- 支付来源分析 -->
<template>
	<view class="revenue">
		<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>
	</view>
</template>

<script>
	import LineChart from '@/components/lineChart.vue'
	export default {
		components: {
			LineChart
		},
		props: {
			title: {
				type: String,
				default: ''
			},
			opts: {
				type: Object,
				default: () => {
					return {
						xAxis: {
							rotateLabel: true
						},
						yAxis: {
							showTitle: true,
							splitNumber: 5,
							data: [{
								title: '元',
								titleOffsetY: -5
							}]
						},
						legend: {
							show: true
						},
						dataLabel: false,
						extra: {
							column: {
								width: 20
							}
						}
					}
				}
			}
		},
		data() {
			return {
				paySourceList: [],
				chartData: {
					categories: [],
					series: []
				},
				hasData: false
			}
		},
		created() {
			this.getDict()
		},
		methods: {
			getData({
				reportType,
				queryDate
			}) {
				this.hasData = false
				this.chartData.categories = []
				this.chartData.series = []
				this.getPaySourceData({
					reportType,
					queryDate
				})
			},
			getDict() {
				uni.$u.api.getDictApi({
					type: 'pay_platform'
				}).then(res => {
					if (res.code === 200) {
						this.paySourceList = res.data
					}
				})
			},
			getPaySourceData({
				reportType,
				queryDate
			}) {
				uni.$u.api.operationalAnalysisApi.getPaySourceDataApi({
					reportType,
					queryDate
				}).then(res => {
					if (res.code === 200) {
						if (res.data.itemList && res.data.itemList.length) {
							this.chartData.series[0] = {
								name: '路段',
								data: []
							}
							let cateList = []
							res.data.itemList.forEach(item => {
								cateList.push(this.getDictLabel(item.payPlatform))
							})
							this.chartData.categories = cateList
							this.chartData.series[0].data = res.data.itemList.map(item => {
								return item.amt
							})
						}
						this.getParkingData({ reportType, queryDate })
					}
				})
			},
			getParkingData({
				reportType,
				queryDate
			}) {
				uni.$u.api.operationalAnalysisApi.getParkingPaySourceDataApi({
					reportType,
					queryDate
				}).then(res => {
					if (res.code === 200) {
						if (res.data.itemList && res.data.itemList.length) {
							if (this.chartData.series.length) {
								this.chartData.series[1] = {
									name: '停车场',
									data: []
								}
								this.chartData.series[1].data = res.data.itemList.map(item => {
									return item.amt
								})
							} else {
								this.chartData.series[0] = {
									name: '停车场',
									data: []
								}
								this.chartData.series[0].data = res.data.itemList.map(item => {
									return item.amt
								})
							}
							if (!this.chartData.categories.length) {
								let cateList = []
								res.data.itemList.forEach(item => {
									cateList.push(this.getDictLabel(item.payPlatform))
								})
								this.chartData.categories = cateList
							}
							this.hasData = true
						} else if (this.chartData.series.length === 1) {
							this.hasData = true
						} else if (!this.chartData.series.length) {
							this.hasData = false
						}
					}
				})
			},
			getDictLabel(value) {
				let name
				this.paySourceList.forEach(item => {
					if (item.dictValue == value) {
						name = item.dictLabel
					}
				})
				if (!name) name = '其他'
				return name
			}
		}
	}
</script>

<style lang="scss" scoped>
	.revenue {
		background-color: #fff;
		border-radius: 5px;

		.empty {
			padding: 15px;
		}
	}
</style>
