This commit is contained in:
2026-04-30 16:06:57 +08:00
parent a4afe70d46
commit 94bcbc8d8f
10 changed files with 249 additions and 443 deletions

View File

@@ -45,16 +45,8 @@ function getAgentLevelLabel(value) {
}
// 获取收益列表
function mergeUniqueById(oldList, newList) {
const map = new Map()
const resolveKey = (item, index) => String(item?.id ?? item?.order_id ?? `${item?.create_time || ''}_${item?.type || ''}_${index}`)
oldList.forEach((item, index) => {
map.set(resolveKey(item, index), item)
})
newList.forEach((item, index) => {
map.set(resolveKey(item, oldList.length + index), item)
})
return Array.from(map.values())
function appendList(oldList, newList) {
return oldList.concat(newList)
}
async function fetchRewardDetails(reset = false) {
@@ -177,7 +169,7 @@ async function fetchRewardDetails(reset = false) {
total.value = data.value.data.total || 0
// 处理列表数据
const list = data.value.data.list || []
rewardDetails.value = reset ? list : mergeUniqueById(rewardDetails.value, list)
rewardDetails.value = reset ? list : appendList(rewardDetails.value, list)
const isLastPage = list.length < pageSize || rewardDetails.value.length >= total.value
hasMore.value = !isLastPage
loadMoreState.value = isLastPage ? 'finished' : 'loading'
@@ -334,12 +326,8 @@ function formatNumber(num) {
贡献统计
</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"
:class="getRewardTypeClass(item.type).split(' ')[0]"
>
<view v-for="item in statistics" :key="item.type" class="flex items-center rounded-lg p-2"
:class="getRewardTypeClass(item.type).split(' ')[0]">
<image :src="getRewardTypeIcon(item.type)" class="mr-2 h-5 w-5 flex-shrink-0" />
<view class="flex-1">
<view class="text-sm font-medium" :class="getRewardTypeClass(item.type).split(' ')[1]">
@@ -359,20 +347,18 @@ function formatNumber(num) {
</view>
<view class="mb-4 rounded-xl bg-white p-4 shadow-sm">
<!-- 贡献记录列表 -->
<view class="text-base text-gray-800 font-medium">
<view class="text-base text-gray-800 font-medium mb-3">
贡献记录
</view>
<view class="detail-scroll p-4">
<view v-if="rewardDetails.length === 0" class="py-8 text-center text-gray-500">
暂无贡献记录
</view>
<view v-for="item in rewardDetails" v-else :key="item.id" class="reward-item">
<view class="detail-scroll">
<EmptyState v-if="!loading && rewardDetails.length === 0" text="暂无贡献记录" />
<view v-for="(item, index) in rewardDetails" v-else :key="index" 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">
<image :src="getRewardTypeIcon(item.type)" class="h-5 w-5 flex-shrink-0" />
<image :src="getRewardTypeIcon(item.type)" class="h-4 w-4 flex-shrink-0" />
<view>
<view class="text-gray-800 font-medium">
<view class="text-gray-800 font-sm">
{{ getRewardTypeDescription(item.type) }}
</view>
<view class="text-xs text-gray-500">
@@ -392,7 +378,7 @@ function formatNumber(num) {
加载中...
</view>
</view>
<wd-loadmore :state="loadMoreState" @reload="fetchRewardDetails" />
<wd-loadmore v-if="rewardDetails.length > 0" :state="loadMoreState" @reload="fetchRewardDetails" />
</view>
</view>
</view>