Files

265 lines
6.4 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
@name: index
@author: kahu4
@date: 2024-01-17 16:30
@description分销订单
@update: 2024-01-17 16:30
-->
<script setup>
import Header from '@/components/Header/index.vue'
import { useScroll } from "@/hooks/useScroll";
import { onLoad, onPageScroll } from "@dcloudio/uni-app";
import { ref } from "vue";
import DistributorInfoItem from "./component/DistributorInfoItem.vue";
import UniDatetimePicker from "@/components/Uni/uni-datetime-picker/uni-datetime-picker.vue";
import { usePaging } from "@/hooks/usePaging";
import { getDistributionDetail, pageDistributionOrder } from "@/api/distribution";
import moment from "moment";
import { emptyOrderIcon } from "@/utils/images";
import Empty from "@/components/Empty/index.vue";
// ======================= hooks =====================
const {scrollTop} = useScroll()
onPageScroll(() => {
})
// ======================== level tab ====================
const leverTabs = ref([
{label: '全部', filed: '', value: 0, time: []},
{
label: '今日',
filed: '',
value: 1,
time: [moment().format("YYYY-MM-DD 00:00:00"), moment().format("YYYY-MM-DD 23:59:59")]
},
{
label: '昨日',
filed: '',
value: 2,
time: [moment().subtract(1, "days").format("YYYY-MM-DD 00:00:00"), moment().subtract(1, "days").format("YYYY-MM-DD 23:59:59")]
},
{
label: '本月', filed: '', value: 3, time: [
moment()
.startOf("month")
.format("YYYY-MM-DD 00:00:00"),
moment()
.endOf("month")
.format("YYYY-MM-DD 23:59:59")
]
},
{label: '自定义', filed: '', value: 4, time: []}
])
const leverCurrent = ref(0)
function leverSelect(value) {
if (value === 4) {
showSelectTime()
leverCurrent.value = value
} else {
leverTabs.value[4].time = []
leverCurrent.value = value
otherParams.value.createTime = leverTabs.value[leverCurrent.value].time
if(!otherParams.value.createTime || otherParams.value.createTime.length<=0){
delete otherParams.value.createTime
}
refreshPage()
doGetDistributionDetail()
}
}
// ==================== date ==============================
const dateRangeRef = ref()
function showSelectTime() {
dateRangeRef.value.show()
}
function timeChange(e) {
leverTabs.value[4].time = e
// 请求接口
otherParams.value.createTime = e
refreshPage()
doGetDistributionDetail()
}
// ===================== data ==============================
const {otherParams, list, loading, refreshPage} = usePaging({
request: pageDistributionOrder,
load:false
});
const distributionDetail = ref({
"refuseAmount": 0,
"amount": 0,
"orderCount": 0
})
/**
* 获取分销佣金详情
* @return {Promise<void>}
*/
async function doGetDistributionDetail() {
const data = {}
if(otherParams.value.createTime&&otherParams.value.createTime.length>0){
data.createTime = otherParams.value.createTime
}
distributionDetail.value = await getDistributionDetail(data);
}
onLoad(() => {
otherParams.value.createTime = leverTabs.value[leverCurrent.value].time
if(!otherParams.value.createTime || otherParams.value.createTime.length<=0){
delete otherParams.value.createTime
}
refreshPage()
doGetDistributionDetail()
})
</script>
<template>
<view class="distribution-order">
<Header
:scroll-top="scrollTop"
header-area-bg="#fff"
system-bar-area-bg="#fff">
分销订单
</Header>
<!-- tabs -->
<view class="tab-content">
<view
class="tab-item"
:class="{current:leverCurrent===lever.value}"
v-for="lever in leverTabs"
:key="lever.value"
@click="leverSelect(lever.value)"
>
{{ lever.label }}
</view>
</view>
<!-- main -->
<view class="distribution-order__inner">
<!-- 统计 -->
<view class="statistics-card">
<view class="header">
{{ distributionDetail.orderCount }}笔订单
</view>
<view class="row flex flex-jc__sb flex-ai__center">
<view class="item">
<view class="count">{{ distributionDetail.refuseAmount }}</view>
<view class="title gray-color">待结算佣金()</view>
</view>
<view class="item">
<view class="count">{{ distributionDetail.amount }}</view>
<view class="title gray-color">已结算佣金()</view>
</view>
</view>
</view>
<view class="user-list">
<template v-if="list.length>0">
<DistributorInfoItem
v-for="item in list"
:data="item" />
</template>
<Empty :icon-src="emptyOrderIcon" />
</view>
</view>
<!-- 时间选择器 -->
<uni-datetime-picker
style="width: 0;height: 0;overflow: hidden"
ref="dateRangeRef"
type="datetimerange"
:value="leverTabs[4].time"
@change="timeChange"
>
</uni-datetime-picker>
</view>
</template>
<style
scoped
lang="scss">
.distribution-order {
width: 100%;
.tab-content {
width: 100%;
background: #fff;
@include usePadding(34, 34);
@include useFlex(space-between, center, row, nowrap, 30rpx);
.tab-item {
@include usePadding(0, 16);
text-align: center;
border-radius: 15rpx;
flex: 1 0 auto;
background: #f6f8f8;
color: #333333;
transition: all .3s;
&.current {
background: $primary-color;
color: $white-color;
}
}
}
&__inner {
@include usePadding(34, 34)
}
.statistics-card {
width: 100%;
@include usePadding(8, 8);
border-radius: 15rpx;
background: #333333;
color: #fff;
.header {
width: 100%;
@include usePadding(24, 16);
border-radius: 15rpx;
background: linear-gradient(to right, rgba(246, 246, 246, 0.4) 0%, rgba(246, 246, 246, 0.2) 15%, transparent 50%);
}
.row {
@include usePadding(0, 32);
.item {
flex: 1 0 auto;
font-size: 24rpx;
@include useFlex(center, center, column);
border-right: 1rpx solid #fff;
&:last-child {
border-right: none;
}
.count {
font-size: 32rpx;
font-weight: bold;
}
}
}
}
.user-list {
@include usePadding(0, 34)
}
.gray-color {
color: #999999;
}
}
</style>
<style>
// #ifdef MP-WEIXIN
.uni-date{
position: absolute;
top: -500px!important;
}
// #endif
</style>