|
@@ -0,0 +1,313 @@
|
|
|
|
+<!--
|
|
|
|
+ * @Description: 业绩分析
|
|
|
|
+ * @Author: 空白格
|
|
|
|
+ * @Date: 2022-06-20 09:20:23
|
|
|
|
+ * @LastEditors: 空白格
|
|
|
|
+ * @LastEditTime: 2022-06-20 11:30:19
|
|
|
|
+ * @FilePath: \parking_operation\pages\collectorManagement\performanceAnalysis\performanceAnalysis.vue
|
|
|
|
+ * @Copyright: Copyright (c) 2016~2022 by 空白格, All Rights Reserved.
|
|
|
|
+-->
|
|
|
|
+<template>
|
|
|
|
+ <view class="performance-analysis">
|
|
|
|
+ <view class="performance-analysis-search">
|
|
|
|
+ <view class="performance-analysis-search-left">
|
|
|
|
+ <view class="tab">
|
|
|
|
+ <view
|
|
|
|
+ class="tab-item"
|
|
|
|
+ v-for="(item, index) in tabList"
|
|
|
|
+ :key="index"
|
|
|
|
+ :class="{ active: tabCur === item.value }"
|
|
|
|
+ @click="tabClick(item)"
|
|
|
|
+ >
|
|
|
|
+ {{
|
|
|
|
+ item.label
|
|
|
|
+ }}
|
|
|
|
+ </view>
|
|
|
|
+ </view>
|
|
|
|
+ </view>
|
|
|
|
+ <view class="performance-analysis-search-right">
|
|
|
|
+ <u--input placeholder="" border="surround" v-model="currentDate" disabled inputAlign="center"/>
|
|
|
|
+ </view>
|
|
|
|
+ </view>
|
|
|
|
+ <view class="performance-analysis-content">
|
|
|
|
+ <template v-if="chartData.series[0].data.length > 0">
|
|
|
|
+ <LineChart :chartData="chartData" :opts="opts" />
|
|
|
|
+ </template>
|
|
|
|
+ <template v-else>
|
|
|
|
+ <view class="empty">
|
|
|
|
+ <u-empty></u-empty>
|
|
|
|
+ </view>
|
|
|
|
+ </template>
|
|
|
|
+ </view>
|
|
|
|
+ <!-- 年 -->
|
|
|
|
+ <u-picker
|
|
|
|
+ :show="yearPicker"
|
|
|
|
+ :columns="yearList"
|
|
|
|
+ :defaultIndex="defaultYear"
|
|
|
|
+ @confirm="yearConfirm"
|
|
|
|
+ @cancel="yearPicker = false"
|
|
|
|
+ ></u-picker>
|
|
|
|
+ <!-- 月 -->
|
|
|
|
+ <u-picker
|
|
|
|
+ :show="monthPicker"
|
|
|
|
+ :columns="monthList"
|
|
|
|
+ :defaultIndex="defaultMonth"
|
|
|
|
+ @confirm="monthConfirm"
|
|
|
|
+ @cancel="monthPicker = false"
|
|
|
|
+ ></u-picker>
|
|
|
|
+ <!-- 日 -->
|
|
|
|
+ <u-picker
|
|
|
|
+ :show="dayPicker"
|
|
|
|
+ :columns="dayList"
|
|
|
|
+ :defaultIndex="defaultDay"
|
|
|
|
+ @confirm="dayConfirm"
|
|
|
|
+ @cancel="dayPicker = false"
|
|
|
|
+ ></u-picker>
|
|
|
|
+ </view>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import LineChart from '@/components/lineChart.vue';
|
|
|
|
+export default {
|
|
|
|
+ components: {
|
|
|
|
+ LineChart
|
|
|
|
+ },
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ tabList: [
|
|
|
|
+ {
|
|
|
|
+ label: '年',
|
|
|
|
+ value: 2
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ label: '月',
|
|
|
|
+ value: 1
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ label: '日',
|
|
|
|
+ value: 0
|
|
|
|
+ }
|
|
|
|
+ ],
|
|
|
|
+ tabCur: 2,
|
|
|
|
+ params: {
|
|
|
|
+ queryDate: '',
|
|
|
|
+ reportType: 2
|
|
|
|
+ },
|
|
|
|
+ currentDate: '',
|
|
|
|
+ // 年
|
|
|
|
+ yearPicker: false,
|
|
|
|
+ yearList: this.getYearList(),
|
|
|
|
+ defaultYear: [4],
|
|
|
|
+ currentYear: '',
|
|
|
|
+ yearObj: {},
|
|
|
|
+ // 月
|
|
|
|
+ monthPicker: false,
|
|
|
|
+ monthList: this.getMonthList(),
|
|
|
|
+ defaultMonth: [],
|
|
|
|
+ currentMonth: '01',
|
|
|
|
+ monthObj: {},
|
|
|
|
+ // 日
|
|
|
|
+ dayPicker: false,
|
|
|
|
+ dayList: this.getDayList(),
|
|
|
|
+ defaultDay: [],
|
|
|
|
+ currentDay: '01',
|
|
|
|
+ dayObj: {},
|
|
|
|
+ chartData: {
|
|
|
|
+ categories: [],
|
|
|
|
+ series: [
|
|
|
|
+ {
|
|
|
|
+ name: '',
|
|
|
|
+ data: []
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ opts: {
|
|
|
|
+ enableScroll: true,
|
|
|
|
+ xAxis: {
|
|
|
|
+ rotateLabel: true,
|
|
|
|
+ scrollShow: true,
|
|
|
|
+ itemCount: 8
|
|
|
|
+ },
|
|
|
|
+ yAxis: {
|
|
|
|
+ showTitle: true,
|
|
|
|
+ splitNumber: 5,
|
|
|
|
+ data: [
|
|
|
|
+ {
|
|
|
|
+ title: '元',
|
|
|
|
+ titleOffsetY: -3
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
|
|
+ legend: {
|
|
|
|
+ show: false
|
|
|
|
+ },
|
|
|
|
+ dataLabel: false,
|
|
|
|
+ padding: [20, 10, 10, 10],
|
|
|
|
+ extra: {
|
|
|
|
+ column: {
|
|
|
|
+ width: 20
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ onShow() {
|
|
|
|
+ this.defaultSetVal();
|
|
|
|
+ },
|
|
|
|
+ watch: {
|
|
|
|
+ 'params.queryDate'(val) {
|
|
|
|
+ if (val) {
|
|
|
|
+ let timestamp = new Date(val).valueOf();
|
|
|
|
+ switch (this.params.reportType) {
|
|
|
|
+ case 0:
|
|
|
|
+ this.currentDate = this.$u.timeFormat(timestamp, 'yyyy年mm月dd日');
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ this.currentDate = this.$u.timeFormat(timestamp, 'yyyy年mm月');
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ this.currentDate = this.$u.timeFormat(timestamp, 'yyyy年');
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ defaultSetVal() {
|
|
|
|
+ this.currentYear = this.yearList[0][4].value;
|
|
|
|
+ this.yearObj = this.yearList[0][4];
|
|
|
|
+ this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
|
|
|
|
+ this.getData();
|
|
|
|
+ },
|
|
|
|
+ getYearList() {
|
|
|
|
+ const date = new Date();
|
|
|
|
+ const year = date.getFullYear();
|
|
|
|
+ const list = [[]];
|
|
|
|
+ for (let i = year - 4; i < year + 1; i++) {
|
|
|
|
+ const obj = {
|
|
|
|
+ text: String(i),
|
|
|
|
+ value: String(i)
|
|
|
|
+ };
|
|
|
|
+ list[0].push(obj);
|
|
|
|
+ }
|
|
|
|
+ return list;
|
|
|
|
+ },
|
|
|
|
+ getMonthList() {
|
|
|
|
+ const list = [[]];
|
|
|
|
+ for (let i = 1; i < 13; i++) {
|
|
|
|
+ const obj = {
|
|
|
|
+ text: String(i),
|
|
|
|
+ value: String(i)
|
|
|
|
+ };
|
|
|
|
+ if (i < 10) {
|
|
|
|
+ obj.text = '0' + i;
|
|
|
|
+ obj.value = '0' + i;
|
|
|
|
+ }
|
|
|
|
+ list[0].push(obj);
|
|
|
|
+ }
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ this.defaultMonth = [0];
|
|
|
|
+ }, 1000);
|
|
|
|
+ return list;
|
|
|
|
+ },
|
|
|
|
+ getDayList() {
|
|
|
|
+ const date = new Date();
|
|
|
|
+ const year = date.getFullYear();
|
|
|
|
+ let month = date.getMonth();
|
|
|
|
+ if (this.monthObj) {
|
|
|
|
+ month = parseInt(this.monthObj.value);
|
|
|
|
+ }
|
|
|
|
+ const day = date.getDate();
|
|
|
|
+ const dayLen = new Date(year, month, 0).getDate();
|
|
|
|
+ const list = [[]];
|
|
|
|
+ for (let i = 1; i < dayLen + 1; i++) {
|
|
|
|
+ const obj = {
|
|
|
|
+ text: String(i),
|
|
|
|
+ value: String(i)
|
|
|
|
+ };
|
|
|
|
+ if (i < 10) {
|
|
|
|
+ obj.text = '0' + i;
|
|
|
|
+ obj.value = '0' + i;
|
|
|
|
+ }
|
|
|
|
+ list[0].push(obj);
|
|
|
|
+ }
|
|
|
|
+ setTimeout(() => {
|
|
|
|
+ this.defaultDay = [0];
|
|
|
|
+ }, 1000);
|
|
|
|
+ return list;
|
|
|
|
+ },
|
|
|
|
+ /**
|
|
|
|
+ * 点击tab
|
|
|
|
+ * @param {Object} item
|
|
|
|
+ */
|
|
|
|
+ tabClick(item) {
|
|
|
|
+ this.tabCur = item.value;
|
|
|
|
+ switch (item.value) {
|
|
|
|
+ case 0:
|
|
|
|
+ this.dayPicker = true;
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ this.monthPicker = true;
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ this.yearPicker = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ this.params.reportType = this.tabCur;
|
|
|
|
+ },
|
|
|
|
+ yearConfirm(e) {
|
|
|
|
+ this.defaultYear = [e.indexs[0]];
|
|
|
|
+ this.currentYear = e.value[0].value;
|
|
|
|
+ this.yearObj = e.value[0];
|
|
|
|
+ this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
|
|
|
|
+ this.yearPicker = false;
|
|
|
|
+ this.getData();
|
|
|
|
+ },
|
|
|
|
+ monthConfirm(e) {
|
|
|
|
+ this.defaultMonth = [e.indexs[0]];
|
|
|
|
+ this.currentMonth = e.value[0].value;
|
|
|
|
+ this.monthObj = e.value[0];
|
|
|
|
+ this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
|
|
|
|
+ this.monthPicker = false;
|
|
|
|
+ this.dayList = this.getDayList();
|
|
|
|
+ this.getData();
|
|
|
|
+ },
|
|
|
|
+ dayConfirm(e) {
|
|
|
|
+ this.defaultDay = [e.indexs[0]];
|
|
|
|
+ this.currentDay = e.value[0].value;
|
|
|
|
+ this.dayObj = e.value[0];
|
|
|
|
+ this.params.queryDate = `${this.currentYear}-${this.currentMonth}-${this.currentDay}`;
|
|
|
|
+ this.dayPicker = false;
|
|
|
|
+ this.getData();
|
|
|
|
+ },
|
|
|
|
+ getData() {
|
|
|
|
+ uni.$u.api.operationalAnalysisApi
|
|
|
|
+ .getTollCollectorPerformanceApi({ ...this.params })
|
|
|
|
+ .then((res) => {
|
|
|
|
+ if (res.code === 200) {
|
|
|
|
+ if (res.rows && res.rows.length) {
|
|
|
|
+ this.chartData.categories = res.rows.map((item) => {
|
|
|
|
+ return item.payeeName;
|
|
|
|
+ });
|
|
|
|
+ this.chartData.series[0].data = res.rows.map((item) => {
|
|
|
|
+ return item.amt;
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ this.chartData.categories = [];
|
|
|
|
+ this.chartData.series[0].data = [];
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+<style lang="scss">
|
|
|
|
+ page {
|
|
|
|
+ background-color: #1767f2;
|
|
|
|
+ min-height: calc(100vh - 44px);
|
|
|
|
+ }
|
|
|
|
+</style>
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+@import './performanceAnalysis.scss';
|
|
|
|
+</style>
|