From ffa4fdb58442c4e4304d14ec8ac6fb7f34fb4c69 Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期一, 17 二月 2025 09:07:39 +0800 Subject: [PATCH] 修改统计日期传参 --- src/components/view/b4-daily-business-statistics.vue | 582 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 446 insertions(+), 136 deletions(-) diff --git a/src/components/view/b4-daily-business-statistics.vue b/src/components/view/b4-daily-business-statistics.vue index ae4f72c..192cd36 100644 --- a/src/components/view/b4-daily-business-statistics.vue +++ b/src/components/view/b4-daily-business-statistics.vue @@ -1,212 +1,522 @@ <template> -<div class="daily-main"> - <div class="daily-content" style="height:100%"> - <p style="font-size: 16px;padding:19.5px 0px">姣忔棩涓氬姟缁熻</p> - <el-row :gutter="20"> - <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" style="margin-bottom: 30px;"> - <div class="daily-card daily-head"> - <div class="daily-head-left"> - <h4>浠婃棩浠诲姟鎺ユ敹</h4> - <span >2453</span> + <div class="daily-main" v-loading="loading"> + <div class="daily-content" style="height:100%"> + <div class="time" style="margin-bottom: 10px;"> + <el-radio-group v-model="type" size="small"> + <el-radio-button label="鍛�"></el-radio-button> + <el-radio-button label="鏈�"></el-radio-button> + <el-radio-button label="骞�"></el-radio-button> + </el-radio-group> + <el-date-picker + v-model="time.week" + type="week" + format="yyyy 绗� WW 鍛�" + placeholder="閫夋嫨鍛�" + size="small" + v-if="type == '鍛�'" + @change="m => changeTime(type, m)" + > + </el-date-picker> + <el-date-picker + v-model="time.month" + type="month" + placeholder="閫夋嫨鏈�" + size="small" + v-if="type == '鏈�'" + @change="m => changeTime(type, m)" + > + </el-date-picker> + <el-date-picker + v-model="time.year" + type="year" + placeholder="閫夋嫨骞�" + size="small" + v-if="type == '骞�'" + @change="m => changeTime(type, m)" + > + </el-date-picker> + </div> + <el-row :gutter="20"> + <el-col + :xs="12" + :sm="8" + :md="6" + :lg="4" + :xl="4" + style="margin-bottom: 16px;" + > + <div class="daily-card"> + <div class="daily-head"> + <div class="daily-head-left"> + <h4>鏈瑊{ type }}浠诲姟鎺ユ敹</h4> + <span>{{ pageData.RECEIVE }}</span> + </div> + <img src="../../../static/img/daliy-0.svg" alt="" srcset="" /> + </div> <div class="daily-head-left-info"> - <img src="../../../static/img/daliy-up.svg" alt=""> - <span :class="{active:false}" class="num"> 8.5% </span> - <span style="font-size: 12px;">杈冩槰澶�</span> + <img + :src=" + `../../../static/img/daliy-${ + pageData.RECEIVE_RATIO < 0 ? 'down' : 'up' + }.svg` + " + alt="" + /> + <span + :class="{ active: pageData.RECEIVE_RATIO < 0 }" + class="num" + v-html="` ${handleData(pageData.RECEIVE_RATIO)}% `" + ></span> + <span style="font-size: 12px;">杈冧笂{{ type }}</span> </div> </div> - <img src="../../../static/img/daliy-0.svg" alt="" srcset=""> - </div> - </el-col> - <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" style="margin-bottom: 30px;"> - <div class="daily-card daily-head"> - <div class="daily-head-left"> - <h4>浠婃棩浠诲姟瀹屾垚</h4> - <span >1687</span> + </el-col> + <el-col + :xs="12" + :sm="8" + :md="6" + :lg="4" + :xl="4" + style="margin-bottom: 16px;" + > + <div class="daily-card"> + <div class="daily-head"> + <div class="daily-head-left"> + <h4>鏈瑊{ type }}浠诲姟瀹屾垚</h4> + <span>{{ pageData.FINISHE }}</span> + </div> + <img src="../../../static/img/daliy-1.svg" alt="" srcset="" /> + </div> <div class="daily-head-left-info"> - <img src="../../../static/img/daliy-up.svg" alt=""> - <span :class="{active:false}" class="num"> 8.5% </span> - <span style="font-size: 12px;">杈冩槰澶�</span> + <img + :src=" + `../../../static/img/daliy-${ + pageData.FINISHE_RATIO < 0 ? 'down' : 'up' + }.svg` + " + alt="" + /> + <span + :class="{ active: pageData.FINISHE_RATIO < 0 }" + class="num" + v-html="` ${handleData(pageData.FINISHE_RATIO)}% `" + ></span> + <span style="font-size: 12px;">杈冧笂{{ type }}</span> </div> </div> - <img src="../../../static/img/daliy-1.svg" alt="" srcset=""> - </div> - </el-col> - <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" style="margin-bottom: 30px;"> - <div class="daily-card daily-head"> - <div class="daily-head-left"> - <h4>浠婃棩浠诲姟鍓╀綑</h4> - <span >766</span> + </el-col> + <el-col + :xs="12" + :sm="8" + :md="6" + :lg="4" + :xl="4" + style="margin-bottom: 16px;" + > + <div class="daily-card"> + <div class="daily-head"> + <div class="daily-head-left"> + <h4>鏈瑊{ type }}浠诲姟鍓╀綑</h4> + <span>{{ pageData.SURPLUS }}</span> + </div> + <img src="../../../static/img/daliy-2.svg" alt="" srcset="" /> + </div> <div class="daily-head-left-info"> - <img src="../../../static/img/daliy-up.svg" alt=""> - <span :class="{active:false}" class="num"> 8.5% </span> - <span style="font-size: 12px;">杈冩槰澶�</span> + <img + :src=" + `../../../static/img/daliy-${ + pageData.SURPLUS_RATIO < 0 ? 'down' : 'up' + }.svg` + " + alt="" + /> + <span + :class="{ active: pageData.SURPLUS_RATIO < 0 }" + class="num" + v-html="` ${handleData(pageData.SURPLUS_RATIO)}% `" + ></span> + <span style="font-size: 12px;">杈冧笂{{ type }}</span> </div> </div> - <img src="../../../static/img/daliy-2.svg" alt="" srcset=""> - </div> - </el-col> - <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" style="margin-bottom: 30px;"> - <div class="daily-card daily-head"> - <div class="daily-head-left"> - <h4>浠婃棩妫�娴嬭垂鐢�</h4> - <span >锟�7359</span> + </el-col> + <el-col + :xs="12" + :sm="8" + :md="6" + :lg="4" + :xl="4" + style="margin-bottom: 16px;" + > + <div class="daily-card"> + <div class="daily-head"> + <div class="daily-head-left"> + <h4>鏈瑊{ type }}妫�娴嬭垂鐢�</h4> + <span>锟{ handlePrice(pageData.PRICE) }}</span> + </div> + <img src="../../../static/img/daliy-3.svg" alt="" srcset="" /> + </div> <div class="daily-head-left-info"> - <img src="../../../static/img/daliy-up.svg" alt=""> - <span :class="{active:false}" class="num"> 8.5% </span> - <span style="font-size: 12px;">杈冩槰澶�</span> + <img + :src=" + `../../../static/img/daliy-${ + pageData.PRICE_RATIO < 0 ? 'down' : 'up' + }.svg` + " + alt="" + /> + <span + :class="{ active: pageData.PRICE_RATIO < 0 }" + class="num" + v-html="` ${handleData(pageData.PRICE_RATIO)}% `" + ></span> + <span style="font-size: 12px;">杈冧笂{{ type }}</span> </div> </div> - <img src="../../../static/img/daliy-3.svg" alt="" srcset=""> - </div> - </el-col> - <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" style="margin-bottom: 30px;"> - <div class="daily-card daily-head"> - <div class="daily-head-left"> - <h4>浠婃棩妫�娴嬪伐鏃�</h4> - <span >306</span> + </el-col> + <el-col + :xs="12" + :sm="8" + :md="6" + :lg="4" + :xl="4" + style="margin-bottom: 16px;" + > + <div class="daily-card"> + <div class="daily-head"> + <div class="daily-head-left"> + <h4>鏈瑊{ type }}妫�娴嬪伐鏃�</h4> + <span>{{ pageData.COST }}</span> + </div> + <img src="../../../static/img/daliy-4.svg" alt="" srcset="" /> + </div> <div class="daily-head-left-info"> - <img src="../../../static/img/daliy-down.svg" alt=""> - <span :class="{active:true}" class="num"> 8.5% </span> - <span style="font-size: 12px;">杈冩槰澶�</span> + <img + :src=" + `../../../static/img/daliy-${ + pageData.COST_RATIO < 0 ? 'down' : 'up' + }.svg` + " + alt="" + /> + <span + :class="{ active: pageData.COST_RATIO < 0 }" + class="num" + v-html="` ${handleData(pageData.COST_RATIO)}% `" + ></span> + <span style="font-size: 12px;">杈冧笂{{ type }}</span> </div> </div> - <img src="../../../static/img/daliy-4.svg" alt="" srcset=""> - </div> - </el-col> - <el-col :xs="12" :sm="8" :md="6" :lg="4" :xl="4" style="margin-bottom: 30px;"> - <div class="daily-card daily-head"> - <div class="daily-head-left"> - <h4>浠婃棩妫�娴嬩汉鍛�</h4> - <span >109</span> + </el-col> + <el-col + :xs="12" + :sm="8" + :md="6" + :lg="4" + :xl="4" + style="margin-bottom: 16px;" + > + <div class="daily-card"> + <div class="daily-head"> + <div class="daily-head-left"> + <h4>鏈瑊{ type }}妫�娴嬩汉鍛�</h4> + <span>{{ pageData.PERSON }}</span> + </div> + <img src="../../../static/img/daliy-5.svg" alt="" srcset="" /> + </div> <div class="daily-head-left-info"> - <img src="../../../static/img/daliy-up.svg" alt=""> - <span :class="{active:false}" class="num"> 8.5% </span> - <span style="font-size: 12px;">杈冩槰澶�</span> + <img + :src=" + `../../../static/img/daliy-${ + pageData.PERSON_RATIO < 0 ? 'down' : 'up' + }.svg` + " + alt="" + /> + <span + :class="{ active: pageData.PERSON_RATIO < 0 }" + class="num" + v-html="` ${handleData(pageData.PERSON_RATIO)}% `" + ></span> + <span style="font-size: 12px;">杈冧笂{{ type }}</span> </div> </div> - <img src="../../../static/img/daliy-5.svg" alt="" srcset=""> - </div> - </el-col> - </el-row> - <el-row :gutter="20"> - <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" style="margin-bottom: 30px;"> - <div class="daily-card chart-box"> - <h4>杩�10鏃ヤ换鍔℃帴鏀堕噺</h4> - <echart-module :id="'daily-left'" :config="chartConfig0" :datas="chartData0"></echart-module> - </div> - </el-col> - <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" style="margin-bottom: 30px;"> - <div class="daily-card chart-box"> - <h4>杩�10鏃ュ疄闄呭畬鎴愪换鍔′笌鎺ユ敹浠诲姟瀵规瘮</h4> - <echart-module :id="'daily-right'" :config="chartConfig1" :datas="chartData1"></echart-module> - </div> - </el-col> - </el-row> + </el-col> + </el-row> + <el-row :gutter="20" style="height: calc(100% - 200px);"> + <el-col + :xs="24" + :sm="24" + :md="12" + :lg="12" + :xl="12" + style="margin-bottom: 16px;height: 100%;" + > + <div class="daily-card chart-box" style="height: 100%;"> + <h4>鏈瑊{ type }}浠诲姟鎺ユ敹閲�</h4> + <echart-module + :id="'daily-left'" + :config="chartConfig0" + :datas="chartData0" + style="height: calc(100% - 32px);" + ></echart-module> + </div> + </el-col> + <el-col + :xs="24" + :sm="24" + :md="12" + :lg="12" + :xl="12" + style="margin-bottom: 16px;height: 100%;" + > + <div class="daily-card chart-box" style="height: 100%;"> + <h4>鏈瑊{ type }}瀹為檯瀹屾垚浠诲姟涓庢帴鏀朵换鍔″姣�</h4> + <echart-module + :id="'daily-right'" + :config="chartConfig1" + :datas="chartData1" + style="height: calc(100% - 32px);" + ></echart-module> + </div> + </el-col> + </el-row> + </div> </div> -</div> </template> <script> - -import EchartModule from '../tool/echart.vue' +import EchartModule from "../tool/echart.vue"; +import { getYearAndMonthAndDays } from "../../util/date"; export default { - components: {EchartModule}, - data(){ - return{ - chartConfig0:{ - height: '435px', - isLoading:true, - type:'line' + components: { EchartModule }, + data() { + return { + chartConfig0: { + height: "", + isLoading: false, + type: "line" }, - chartData0:{ - xData:['4-11','4-12','4-13','4-14','4-15','4-16','4-17','4-18','4-19','4-20'], - yData:[ + chartData0: { + xData: [], + yData: [ { - title:'浠诲姟鎺ユ敹閲�', - data:[10,20,10,40,50,20,70,40,90,50] + title: "浠诲姟鎺ユ敹閲�", + data: [] } ] }, - chartConfig1:{ - height: '435px', - isLoading:true, - type:'bar' + chartConfig1: { + height: "", + isLoading: false, + type: "bar" }, - chartData1:{ - xData:['4-11','4-12','4-13','4-14','4-15','4-16','4-17','4-18','4-19','4-20'], - yData:[ + chartData1: { + xData: [], + yData: [ { - title:'浠婃棩鎺ユ敹', - data:[10,20,10,40,50,20,70,40,90,50] + title: "鎺ユ敹", + data: [] }, { - title:'浠婃棩瀹屾垚', - data:[15,10,6,33,66,44,56,77,44,55] - }, + title: "瀹屾垚", + data: [] + } ] + }, + pageData: {}, + loading: false, + timers: null, + type: "鍛�", + time: { + week: "", + month: "", + year: "" + }, + startTime: "", + endTime: "" + }; + }, + watch: { + type(val) { + switch (val) { + case "鍛�": + this.time.week = new Date(); + this.changeTime(val, this.time.week); + break; + case "鏈�": + this.time.month = new Date(); + this.changeTime(val, this.time.month); + break; + case "骞�": + this.time.year = new Date(); + this.changeTime(val, this.time.year); + break; } } + }, + mounted() { + this.changeTime(this.type); + // this.timers&&clearInterval(this.timers); + // setInterval(this.changeTime(this.type),1000*60*5) + }, + methods: { + init() { + this.chartConfig0.isLoading = false; + this.chartConfig1.isLoading = false; + this.loading = true; + this.$axios + .get( + this.$api.report.businessStatisticsByDay + + "?startTime=" + + this.startTime + + "&endTime=" + + this.endTime + + "&type=" + + this.type + ) + .then(res => { + if (res.code == 201) return; + this.pageData = this.HaveJson(res.data); + let xData = res.data.DAYS.map(m => { + let arr = m.split("-"); + if (this.type == "骞�") { + return `${arr[1]}鏈坄; + } else { + return `${arr[1]}-${arr[2]}`; + } + }); + this.chartData0.xData = xData; + this.chartData1.xData = xData; + this.chartData0.yData[0].data = this.pageData.RECETENDAYS; + this.chartData1.yData[0].data = this.pageData.RECETENDAYS; + this.chartData1.yData[1].data = this.pageData.FINISHTENDAYS; + this.loading = false; + this.chartConfig0.isLoading = true; + this.chartConfig1.isLoading = true; + }); + }, + handleData(val) { + if (val) { + let num = Math.abs(val) * 100; + return num.toFixed(0); + } else { + return "0"; + } + }, + changeTime(type, m) { + if (m) { + switch (type) { + case "鍛�": + this.startTime = getYearAndMonthAndDays( + new Date(this.time.week.getTime() - 24 * 60 * 60 * 1000) + ); + this.endTime = getYearAndMonthAndDays( + new Date(this.time.week.getTime() + 24 * 60 * 60 * 1000 * 5) + ); + break; + case "鏈�": + const year = new Date(this.time.month).getFullYear(); + const month = new Date(this.time.month).getMonth() + 1; + const day = new Date(year, month, 0).getDate(); // + // 璁剧疆璧峰鏃ユ湡鍜岀粨鏉熸棩鏈� + this.startTime = `${year}-${month > 9 ? "0" + month : month}-01`; + this.endTime = `${year}-${month > 9 ? "0" + month : month}-${day}`; // 鏈堟湯 + break; + case "骞�": + const year0 = new Date(this.time.year).getFullYear(); + this.startTime = `${year0}-01-01`; // 骞村垵 + this.endTime = `${year0}-12-31`; // 骞存湯 + break; + } + } else { + this.startTime = getYearAndMonthAndDays( + new Date(new Date().getTime() - 24 * 60 * 60 * 1000) + ); + this.endTime = getYearAndMonthAndDays( + new Date(new Date().getTime() + 24 * 60 * 60 * 1000 * 5) + ); + this.time.week = new Date(); + } + this.init(); + }, + handlePrice(val) { + if (val > 999999) { + return (val / 1000000).toFixed(2) + "鐧句竾"; + } else if (val > 9999) { + return (val / 10000).toFixed(2) + "涓�"; + } else { + return val; + } + } + }, + deactivated() { + this.timers && clearInterval(this.timers); } -} +}; </script> <style scoped> -.daily-main{ +.daily-main { height: 100%; overflow-y: auto; overflow-x: hidden; } -.daily-card{ - width: 100%; - background: #FFFFFF; - border-radius: 14px; - box-shadow: 6px 6px 54px 0px rgba(0,0,0,0.05); +.daily-content { + padding: 20px 0; + box-sizing: border-box; } - -.daily-head{ +.daily-card { + width: 100%; + background: #ffffff; + border-radius: 14px; + box-shadow: 6px 6px 54px 0px rgba(0, 0, 0, 0.05); padding: 16px; box-sizing: border-box; +} + +.daily-head { display: flex; justify-content: space-between; align-items: flex-start; } -.daily-head-left h4{ +.daily-head-left h4 { color: #202224; font-size: 16px; font-weight: 400; - margin-bottom: 20px; + margin-bottom: 16px; opacity: 0.8; } -.daily-head-left>span{ - font-family: Nunito Sans-Bold;color: #202224; +.daily-head-left > span { + font-family: Nunito Sans-Bold; + color: #202224; font-weight: bold; - font-size: 28px; + font-size: 24px; display: inline-block; - margin-bottom: 30px; + margin-bottom: 12px; } -.daily-head-left .daily-head-left-info{ +.daily-head-left-info { display: flex; align-items: center; font-size: 16px; color: #202224; } -.daily-head-left .daily-head-left-info .num{ - color: #00B69B; +.num { + color: #00b69b; } -.daily-head-left .daily-head-left-info .num.active{ - color: #F93C65; +.num.active { + color: #f93c65; } -.chart-box{ - padding: 30px 24px; +.chart-box { + padding: 16px 24px; box-sizing: border-box; } -.chart-box h4{ +.chart-box h4 { color: #202224; font-family: PingFang SC-Regular; font-weight: 400; @@ -214,7 +524,7 @@ margin-bottom: 16px; } -.chart{ +.chart { width: 100%; height: 450px; } -- Gitblit v1.9.3