From 3995f4bd129fee27b1085534e2231d68b7a970d8 Mon Sep 17 00:00:00 2001 From: mayf <m13160102112@163.com> Date: 星期五, 25 十月 2024 17:28:52 +0800 Subject: [PATCH] 首页统计 --- tailwind.config.js | 2 pages/goods/list/index.vue | 2 pages/order/after-sale/index.vue | 2 pages/home.vue | 346 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ pages/order/list/index.vue | 2 5 files changed, 351 insertions(+), 3 deletions(-) diff --git a/pages/goods/list/index.vue b/pages/goods/list/index.vue index db1a79b..e0b3187 100644 --- a/pages/goods/list/index.vue +++ b/pages/goods/list/index.vue @@ -106,7 +106,7 @@ hasAll: true, childType: 'el-radio-button', }, - default: '', + default: this.$route.query.status || '', span: 24, searchImmediately: true, }, diff --git a/pages/home.vue b/pages/home.vue new file mode 100644 index 0000000..de37955 --- /dev/null +++ b/pages/home.vue @@ -0,0 +1,346 @@ +<template> + <div class="home-page"> + <div class="top-container"> + <div class="top-container__item"> + <div class="top-container__label">今日销售额</div> + <div class="top-container__value">{{ statistic.saleAmount || 0 }}</div> + </div> + <div class="top-container__item"> + <div class="top-container__label">今日销售扎数</div> + <div class="top-container__value"> + {{ statistic.saleFlowerCount || 0 }} + </div> + </div> + <div + class="top-container__item cursor-pointer" + @click="toRoute('/goods/list')" + > + <div class="top-container__label">商品管理</div> + <div class="top-container__value">{{ statistic.flowerCount || 0 }}</div> + </div> + <div + class="top-container__item cursor-pointer" + @click="toRoute('/shop/list')" + > + <div class="top-container__label">用户管理</div> + <div class="top-container__value"> + {{ statistic.customerCount || 0 }} + </div> + </div> + <div + class="top-container__item cursor-pointer" + @click="toRoute('/order/list')" + > + <div class="top-container__label">订单管理</div> + <div class="top-container__value"> + {{ statistic.orderCount || 0 }} + </div> + </div> + </div> + <el-row :gutter="22" class="mt-22"> + <el-col :span="6"> + <div + class="statistic-container cursor-pointer" + @click="toRoute('/order/list?statusBackend=SEND')" + > + <div class="statistic-title">待发货</div> + <div class="statistic-num">{{ statistic.orderSendCount || 0 }}</div> + </div> + </el-col> + <el-col :span="6"> + <div + class="statistic-container cursor-pointer" + @click="toRoute('/goods/list?status=UP')" + > + <div class="statistic-title">在售商品</div> + <div class="statistic-num">{{ statistic.flowerUpCount || 0 }}</div> + </div> + </el-col> + <el-col :span="6"> + <div + class="statistic-container cursor-pointer" + @click="toRoute('/goods/list?status=PENDING')" + > + <div class="statistic-title">待审核商品</div> + <div class="statistic-num"> + {{ statistic.flowerPendingCount || 0 }} + </div> + </div> + </el-col> + <el-col :span="6"> + <div + class="statistic-container cursor-pointer" + @click="toRoute('/order/after-sale?status=PENDING')" + > + <div class="statistic-title">待售后处理</div> + <div class="statistic-num">{{ statistic.orderSalesCount || 0 }}</div> + </div> + </el-col> + <el-col :span="6"> + <div class="statistic-container"> + <div class="statistic-title">总销售金额</div> + <div class="statistic-num">{{ statistic.totalSaleAmount || 0 }}</div> + </div> + </el-col> + <el-col :span="6"> + <div class="statistic-container"> + <div class="statistic-title">总销售扎数</div> + <div class="statistic-num"> + {{ statistic.totalSaleFlowerCount || 0 }} + </div> + </div> + </el-col> + <el-col :span="6"> + <div class="statistic-container"> + <div class="statistic-title">供应商待提现</div> + <div class="statistic-num"> + {{ statistic.supplierPendingAmount || 0 }} + </div> + </div> + </el-col> + <el-col :span="6"> + <div class="statistic-container"> + <div class="statistic-title">供应商已提现</div> + <div class="statistic-num"> + {{ statistic.supplierCompleteAmount || 0 }} + </div> + </div> + </el-col> + </el-row> + <el-row :gutter="22"> + <el-col :span="8"> + <div class="rate-container"> + <div class="flex items-center justify-between mb-16"> + <div class="text-20 text-mainTitle font-bold"> + 订单量:<span class="text-primary">{{ + orderStatistic.count || 0 + }}</span> + </div> + <el-tag type="primary">今日</el-tag> + </div> + <div class="text-14 text-subTitle leading-22"> + 新增订单量:{{ orderStatistic.countToday || 0 }} + </div> + <div class="text-14 text-subTitle leading-22"> + 日环比:<span :class="getRateClass(orderStatistic.countRate)" + >{{ orderStatistic.countRate || 0 }}%</span + > + </div> + </div> + </el-col> + <el-col :span="8"> + <div class="rate-container"> + <div class="flex items-center justify-between mb-16"> + <div class="text-20 text-mainTitle font-bold"> + 供应商数量:<span class="text-primary">{{ + supplierStatistic.count || 0 + }}</span> + </div> + <el-tag type="primary">今日</el-tag> + </div> + <div class="text-14 text-subTitle leading-22"> + 新增供应商:{{ supplierStatistic.countToday || 0 }} + </div> + <div class="text-14 text-subTitle leading-22"> + 日环比:<span :class="getRateClass(supplierStatistic.countRate)" + >{{ supplierStatistic.countRate || 0 }}%</span + > + </div> + </div> + </el-col> + <el-col :span="8"> + <div class="rate-container"> + <div class="flex items-center justify-between mb-16"> + <div class="text-20 text-mainTitle font-bold"> + 全部用户量:<span class="text-primary">{{ + userStatistic.count || 0 + }}</span> + </div> + <el-tag type="primary">今日</el-tag> + </div> + <div class="text-14 text-subTitle leading-22"> + 新增用户量:{{ userStatistic.countToday || 0 }} + </div> + <div class="text-14 text-subTitle leading-22"> + 日环比:<span :class="getRateClass(userStatistic.countRate)" + >{{ userStatistic.countRate || 0 }}%</span + > + </div> + </div> + </el-col> + <el-col :span="8"> + <div class="rate-container"> + <div class="flex items-center justify-between mb-16"> + <div class="text-20 text-mainTitle font-bold"> + 用户访问量:<span class="text-primary">{{ + visitStatistic.count || 0 + }}</span> + </div> + <el-tag type="primary">今日</el-tag> + </div> + <div class="text-14 text-subTitle leading-22"> + 昨日访问量:{{ visitStatistic.countToday || 0 }} + </div> + <div class="text-14 text-subTitle leading-22"> + 日环比:<span :class="getRateClass(visitStatistic.countRate)" + >{{ visitStatistic.countRate || 0 }}%</span + > + </div> + </div> + </el-col> + <el-col :span="8"> + <div class="rate-container"> + <div class="flex items-center justify-between mb-16"> + <div class="text-20 text-mainTitle font-bold"> + 售后订单数量:<span class="text-primary">{{ + saleStatistic.count || 0 + }}</span> + </div> + <el-tag type="primary">今日</el-tag> + </div> + <div class="text-14 text-subTitle leading-22"> + 新增售后量:{{ saleStatistic.countToday || 0 }} + </div> + <div class="text-14 text-subTitle leading-22"> + 日环比:<span :class="getRateClass(saleStatistic.countRate)" + >{{ saleStatistic.countRate || 0 }}%</span + > + </div> + </div> + </el-col> + </el-row> + </div> +</template> + +<script> +export default { + data() { + return { + currentDate: this.$elBusUtil.toDate(), + statistic: {}, + orderStatistic: {}, + supplierStatistic: {}, + userStatistic: {}, + visitStatistic: {}, + saleStatistic: {}, + } + }, + head() { + return { + title: '首页', + } + }, + mounted() { + this.init() + }, + methods: { + async init() { + const [ + res1, + res2, + res3, + orderRes, + supplierRes, + userRes, + visitRes, + saleRes, + ] = await Promise.all([ + this.$elBusHttp.request('flower/api/statistics/sale/date', { + params: { date: this.currentDate }, + }), + this.$elBusHttp.request('flower/api/statistics/flower/count'), + this.$elBusHttp.request('flower/api/statistics/order/amount'), + this.$elBusHttp.request('flower/api/statistics/order/rate', { + params: { date: this.currentDate }, + }), + this.$elBusHttp.request('flower/api/statistics/supplier/rate', { + params: { date: this.currentDate }, + }), + this.$elBusHttp.request('flower/api/statistics/customer/rate', { + params: { date: this.currentDate }, + }), + this.$elBusHttp.request('flower/api/statistics/customer/visit/rate', { + params: { date: this.currentDate }, + }), + this.$elBusHttp.request('flower/api/statistics/sales/rate', { + params: { date: this.currentDate }, + }), + ]) + this.statistic = { ...res1?.data, ...res2?.data, ...res3?.data } + this.orderStatistic = orderRes?.data || {} + this.supplierStatistic = supplierRes?.data || {} + this.userStatistic = userRes?.data || {} + this.visitStatistic = visitRes?.data || {} + this.saleStatistic = saleRes?.data || {} + }, + getRateClass(rate) { + if (rate > 0) { + return 'text-success' + } else if (rate === 0) { + return '' + } else { + return 'text-danger' + } + }, + toRoute(url) { + this.$router.push(url) + }, + }, +} +</script> + +<style lang="scss" scoped> +@import '@/assets/statistic/index.scss'; +.home-page { + .top-container { + width: 100%; + display: flex; + background-color: #fff; + border-radius: 4px; + box-shadow: 0px 2px 12px 0px rgba(75, 76, 77, 0.1); + padding: 30px; + &__item { + background-color: #f4faff; + border-radius: 2px; + text-align: center; + flex: 1; + height: 110px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + &:not(:last-child) { + margin-right: 22px; + } + } + &__label { + font-size: 20px; + color: $main-title-color; + font-weight: bold; + margin-bottom: 6px; + } + &__value { + font-size: 16px; + color: $primary-color; + } + } + .statistic-container { + background-color: #fff; + box-shadow: 0px 2px 12px 0px rgba(75, 76, 77, 0.1); + border-radius: 4px; + height: 110px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + margin-bottom: 22px; + } + .rate-container { + width: 100%; + background-color: #fff; + box-shadow: 0px 2px 12px 0px rgba(75, 76, 77, 0.1); + padding: 20px; + margin-bottom: 22px; + } +} +</style> diff --git a/pages/order/after-sale/index.vue b/pages/order/after-sale/index.vue index 5947a23..b1b99cf 100644 --- a/pages/order/after-sale/index.vue +++ b/pages/order/after-sale/index.vue @@ -71,7 +71,7 @@ }, // code: 'ORDER_SALES_STATUS', }, - default: '', + default: this.$route.query.status || '', span: 24, searchImmediately: true, on: { diff --git a/pages/order/list/index.vue b/pages/order/list/index.vue index 706be30..8533b52 100644 --- a/pages/order/list/index.vue +++ b/pages/order/list/index.vue @@ -124,7 +124,7 @@ }, // code: 'ORDER_STATUS_BACKEND', }, - default: '', + default: this.$route.query.statusBackend || '', span: 24, searchImmediately: true, on: { diff --git a/tailwind.config.js b/tailwind.config.js index db07e32..754de95 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -32,6 +32,8 @@ mainTitle: '#333', subTitle: '#666', tip: '#999', + danger: 'rgb(245, 108, 108)', + success: '#67c23a', }, }, // 内边距 -- Gitblit v1.9.3