This commit is contained in:
Mrx
2026-02-09 15:13:40 +08:00
commit e84094946a
123 changed files with 23042 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
<script setup>
definePage({
layout: 'PageLayout',
style: {
navigationBarTitleText: '推广查询记录',
navigationStyle: 'default',
},
})
import { ref, onMounted } from 'vue'
import { storeToRefs } from 'pinia'
import { useAgentStore } from '@/stores/agentStore'
import { getPromotionQueryList } from '@/api/agent'
const agentStore = useAgentStore()
const { isAgent } = storeToRefs(agentStore)
const list = ref([])
const total = ref(0)
const page = ref(1)
const pageSize = ref(20)
const loading = ref(false)
const hasMore = ref(true)
async function loadList(isRefresh = false) {
if (!isAgent.value) return
if (loading.value) return
const nextPage = isRefresh ? 1 : page.value
if (!isRefresh && !hasMore.value) return
loading.value = true
try {
const { data, error } = await getPromotionQueryList({ page: nextPage, page_size: pageSize.value })
if (data.value?.code === 200 && !error.value) {
const res = data.value.data
total.value = res?.total ?? 0
const items = res?.list || []
if (nextPage === 1) {
list.value = items
page.value = 1
} else {
list.value = list.value.concat(items)
}
page.value = nextPage
hasMore.value = list.value.length < total.value
}
} finally {
loading.value = false
}
}
function loadMore() {
if (!hasMore.value || loading.value) return
page.value += 1
loadList(false)
}
function queryStateText(state) {
const map = { pending: '待查询', processing: '查询中', success: '已完成', failed: '失败' }
return map[state] || state || '—'
}
onMounted(() => {
if (isAgent.value) loadList(true)
})
</script>
<template>
<view class="p-4 min-h-screen bg-gray-50">
<view v-if="!isAgent" class="rounded-xl bg-white shadow p-6 text-center">
<view class="text-gray-500 text-sm">请先注册成为代理</view>
</view>
<template v-else>
<view class="rounded-xl bg-white shadow overflow-hidden">
<view class="p-4 border-b border-gray-100">
<view class="text-base font-semibold text-gray-800">推广查询记录</view>
<view class="text-xs text-gray-500 mt-1">通过您推广链接产生的订单与报告</view>
</view>
<view v-if="loading && list.length === 0" class="p-6">
<wd-skeleton :row="4" />
</view>
<view v-else-if="list.length === 0" class="p-8 text-center text-gray-500 text-sm">
暂无推广查询记录
</view>
<view v-else class="divide-y divide-gray-100">
<view
v-for="item in list"
:key="item.id"
class="p-4"
>
<view class="flex items-start justify-between gap-2">
<view class="flex-1 min-w-0">
<view class="font-medium text-gray-800">{{ item.product_name || '推广订单' }}</view>
<view class="text-xs text-gray-500 mt-1">{{ item.create_time }}</view>
<view v-if="item.params && Object.keys(item.params).length" class="text-xs text-gray-500 mt-1 truncate">
{{ JSON.stringify(item.params) }}
</view>
</view>
<view class="text-right shrink-0">
<view class="text-base font-semibold text-primary">¥ {{ (item.price || 0).toFixed(2) }}</view>
<view class="text-xs text-gray-500 mt-0.5">{{ queryStateText(item.query_state) }}</view>
</view>
</view>
</view>
</view>
<view v-if="hasMore && list.length > 0" class="p-4 text-center">
<view
class="text-sm text-primary"
@click="loadMore"
>
{{ loading ? '加载中...' : '加载更多' }}
</view>
</view>
</view>
</template>
</view>
</template>