对比新文件 |
| | |
| | | <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> |