f
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { useRoute } from '@/composables/uni-router'
|
||||
import useApiFetch from '@/composables/useApiFetch'
|
||||
|
||||
definePage({ layout: 'default', auth: true })
|
||||
|
||||
const route = useRoute()
|
||||
@@ -22,6 +23,7 @@ async function fetchRewardDetails() {
|
||||
loading.value = true
|
||||
const { data, error } = await useApiFetch(
|
||||
`/agent/subordinate/contribution/detail?subordinate_id=${route.params.id}&page=${page.value}&page_size=${pageSize}`,
|
||||
{ silent: true },
|
||||
)
|
||||
.get()
|
||||
.json()
|
||||
@@ -201,58 +203,58 @@ function formatNumber(num) {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="reward-detail">
|
||||
<view class="reward-detail">
|
||||
<!-- 用户信息卡片 -->
|
||||
<div class="p-4">
|
||||
<div class="mb-4 rounded-xl bg-white p-5 shadow-sm">
|
||||
<div class="mb-4 flex items-center justify-between">
|
||||
<div class="flex items-center space-x-3">
|
||||
<div class="text-xl text-gray-800 font-semibold">
|
||||
<view class="p-4">
|
||||
<view class="mb-4 rounded-xl bg-white p-5 shadow-sm">
|
||||
<view class="mb-4 flex items-center justify-between">
|
||||
<view class="flex items-center space-x-3">
|
||||
<view class="text-xl text-gray-800 font-semibold">
|
||||
{{ userInfo.mobile }}
|
||||
</div>
|
||||
<span class="rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-600 font-medium">
|
||||
</view>
|
||||
<text class="rounded-full bg-blue-100 px-3 py-1 text-sm text-blue-600 font-medium">
|
||||
{{ userInfo.level }}代理
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-4 text-sm text-gray-500">
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mb-4 text-sm text-gray-500">
|
||||
成为下级代理时间:{{ formatTime(userInfo.createTime) }}
|
||||
</div>
|
||||
<div class="grid grid-cols-3 gap-4">
|
||||
<div class="text-center">
|
||||
<div class="mb-1 text-sm text-gray-500">
|
||||
</view>
|
||||
<view class="grid grid-cols-3 gap-4">
|
||||
<view class="text-center">
|
||||
<view class="mb-1 text-sm text-gray-500">
|
||||
总推广单量
|
||||
</div>
|
||||
<div class="text-xl text-blue-600 font-semibold">
|
||||
</view>
|
||||
<view class="text-xl text-blue-600 font-semibold">
|
||||
{{ summary.totalOrders }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="mb-1 text-sm text-gray-500">
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-center">
|
||||
<view class="mb-1 text-sm text-gray-500">
|
||||
总收益
|
||||
</div>
|
||||
<div class="text-xl text-green-600 font-semibold">
|
||||
</view>
|
||||
<view class="text-xl text-green-600 font-semibold">
|
||||
¥{{ formatNumber(summary.totalReward) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="mb-1 text-sm text-gray-500">
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-center">
|
||||
<view class="mb-1 text-sm text-gray-500">
|
||||
总贡献
|
||||
</div>
|
||||
<div class="text-xl text-purple-600 font-semibold">
|
||||
</view>
|
||||
<view class="text-xl text-purple-600 font-semibold">
|
||||
¥{{ formatNumber(summary.totalContribution) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 贡献统计卡片 -->
|
||||
<div class="mb-4 rounded-xl bg-white p-4 shadow-sm">
|
||||
<div class="mb-3 text-base text-gray-800 font-medium">
|
||||
<view class="mb-4 rounded-xl bg-white p-4 shadow-sm">
|
||||
<view class="mb-3 text-base text-gray-800 font-medium">
|
||||
贡献统计
|
||||
</div>
|
||||
<div class="grid grid-cols-2 gap-3">
|
||||
<div
|
||||
</view>
|
||||
<view class="grid grid-cols-2 gap-3">
|
||||
<view
|
||||
v-for="item in statistics"
|
||||
:key="item.type"
|
||||
class="flex items-center rounded-lg p-2"
|
||||
@@ -263,62 +265,62 @@ function formatNumber(num) {
|
||||
class="mr-2 text-lg"
|
||||
:class="getRewardTypeClass(item.type).split(' ')[1]"
|
||||
/>
|
||||
<div class="flex-1">
|
||||
<div class="text-sm font-medium" :class="getRewardTypeClass(item.type).split(' ')[1]">
|
||||
<view class="flex-1">
|
||||
<view class="text-sm font-medium" :class="getRewardTypeClass(item.type).split(' ')[1]">
|
||||
{{ item.description }}
|
||||
</div>
|
||||
<div class="mt-1 flex items-center justify-between">
|
||||
<div class="text-xs text-gray-500">
|
||||
</view>
|
||||
<view class="mt-1 flex items-center justify-between">
|
||||
<view class="text-xs text-gray-500">
|
||||
{{ item.count }} 次
|
||||
</div>
|
||||
<div class="text-sm font-medium" :class="getRewardTypeClass(item.type).split(' ')[1]">
|
||||
</view>
|
||||
<view class="text-sm font-medium" :class="getRewardTypeClass(item.type).split(' ')[1]">
|
||||
¥{{ formatNumber(item.amount) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-4 rounded-xl bg-white p-4 shadow-sm">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="mb-4 rounded-xl bg-white p-4 shadow-sm">
|
||||
<!-- 贡献记录列表 -->
|
||||
<div class="text-base text-gray-800 font-medium">
|
||||
<view class="text-base text-gray-800 font-medium">
|
||||
贡献记录
|
||||
</div>
|
||||
<div class="detail-scroll p-4">
|
||||
<div v-if="rewardDetails.length === 0" class="py-8 text-center text-gray-500">
|
||||
</view>
|
||||
<view class="detail-scroll p-4">
|
||||
<view v-if="rewardDetails.length === 0" class="py-8 text-center text-gray-500">
|
||||
暂无贡献记录
|
||||
</div>
|
||||
<div v-for="item in rewardDetails" v-else :key="item.id" class="reward-item">
|
||||
<div class="mb-3 border-b border-gray-200 pb-3">
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex items-center space-x-3">
|
||||
</view>
|
||||
<view v-for="item in rewardDetails" v-else :key="item.id" class="reward-item">
|
||||
<view class="mb-3 border-b border-gray-200 pb-3">
|
||||
<view class="flex items-center justify-between">
|
||||
<view class="flex items-center space-x-3">
|
||||
<wd-icon
|
||||
:name="getRewardTypeIcon(item.type)"
|
||||
class="text-lg"
|
||||
:class="getRewardTypeClass(item.type).split(' ')[1]"
|
||||
/>
|
||||
<div>
|
||||
<div class="text-gray-800 font-medium">
|
||||
<view>
|
||||
<view class="text-gray-800 font-medium">
|
||||
{{ getRewardTypeDescription(item.type) }}
|
||||
</div>
|
||||
<div class="text-xs text-gray-500">
|
||||
</view>
|
||||
<view class="text-xs text-gray-500">
|
||||
{{ formatTime(item.create_time) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-right">
|
||||
<div class="text-base font-semibold" :class="getRewardTypeClass(item.type).split(' ')[1]">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-right">
|
||||
<view class="text-base font-semibold" :class="getRewardTypeClass(item.type).split(' ')[1]">
|
||||
¥{{ formatNumber(item.amount) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="loading" class="py-3 text-center text-sm text-gray-400">
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="loading" class="py-3 text-center text-sm text-gray-400">
|
||||
加载中...
|
||||
</div>
|
||||
</div>
|
||||
<div class="px-4 pb-4">
|
||||
</view>
|
||||
</view>
|
||||
<view class="px-4 pb-4">
|
||||
<wd-pagination
|
||||
v-model="page"
|
||||
:total="total"
|
||||
@@ -327,10 +329,10 @@ function formatNumber(num) {
|
||||
show-message
|
||||
@change="onPageChange"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
Reference in New Issue
Block a user