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">&nbsp; 8.5%&nbsp; </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="`&nbsp; ${handleData(pageData.RECEIVE_RATIO)}%&nbsp; `"
+              ></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">&nbsp; 8.5%&nbsp; </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="`&nbsp; ${handleData(pageData.FINISHE_RATIO)}%&nbsp; `"
+              ></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">&nbsp; 8.5%&nbsp; </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="`&nbsp; ${handleData(pageData.SURPLUS_RATIO)}%&nbsp; `"
+              ></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">&nbsp; 8.5%&nbsp; </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="`&nbsp; ${handleData(pageData.PRICE_RATIO)}%&nbsp; `"
+              ></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">&nbsp; 8.5%&nbsp; </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="`&nbsp; ${handleData(pageData.COST_RATIO)}%&nbsp; `"
+              ></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">&nbsp; 8.5%&nbsp; </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="`&nbsp; ${handleData(pageData.PERSON_RATIO)}%&nbsp; `"
+              ></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