diff --git a/src/views/mall/trade/statistics/index.vue b/src/views/mall/trade/statistics/index.vue index a3bedc2a..1dbfff92 100644 --- a/src/views/mall/trade/statistics/index.vue +++ b/src/views/mall/trade/statistics/index.vue @@ -131,7 +131,7 @@ :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" - @pagination="handlePageChange" + @pagination="getList" /> @@ -150,7 +150,6 @@ const exportLoading = ref(false) const list = ref([]) const total = ref(0) const queryFormRef = ref() -const allData = ref([]) const queryParams = reactive({ pageNo: 1, @@ -165,63 +164,13 @@ const queryParams = reactive({ afterSaleStatus: undefined }) -const getAllData = async () => { +/** 查询列表(服务端分页,每次只请求当前页) */ +const getList = async () => { loading.value = true try { - // 先获取第一页数据,了解总数 - const firstPageData = await SalesStatisticsDetailsApi.getStatisticsDetailPage({ - ...queryParams, - pageNo: 1, - pageSize: 1000 - }) - - console.log('API 返回的完整数据:', firstPageData) - - const responseData = firstPageData as any - if (responseData && responseData.list) { - let allItems = [...responseData.list] - const totalCount = responseData.total || 0 - const pageSize = 10 - - // 如果总数超过第一页的数量,需要继续获取剩余数据 - if (totalCount > pageSize) { - const totalPages = Math.ceil(totalCount / pageSize) - console.log(`总数据 ${totalCount} 条,需要获取 ${totalPages} 页`) - - // 并发获取剩余页面的数据 - const promises: Promise[] = [] - for (let page = 2; page <= totalPages; page++) { - promises.push( - SalesStatisticsDetailsApi.getStatisticsDetailPage({ - ...queryParams, - pageNo: page, - pageSize: pageSize - }) - ) - } - - const remainingPages = await Promise.all(promises) - remainingPages.forEach((pageData: any) => { - if (pageData && pageData.list) { - allItems = allItems.concat(pageData.list) - } - }) - } - - // 打印 createTime 参数 - console.log('createTime 数据:', allItems.map((item: any) => item.createTime)) - console.log(`实际获取数据条数: ${allItems.length},总数据: ${totalCount}`) - - const sortedData = allItems.sort((a: any, b: any) => { - return new Date(b.createTime).getTime() - new Date(a.createTime).getTime() - }) - - allData.value = sortedData - total.value = totalCount - updateCurrentPageData() - } else { - console.warn('数据格式异常,未找到 list 数据', firstPageData) - } + const data = await SalesStatisticsDetailsApi.getStatisticsDetailPage(queryParams) + list.value = data?.list || [] + total.value = data?.total || 0 } catch (error) { console.error('获取数据失败:', error) ElMessage.error('获取数据失败') @@ -230,78 +179,15 @@ const getAllData = async () => { } } -const updateCurrentPageData = () => { - const pageNo = queryParams.pageNo ?? 1 - const pageSize = queryParams.pageSize ?? 10 - const startIndex = (pageNo - 1) * pageSize - const endIndex = startIndex + pageSize - - // 检查是否有搜索条件 - const hasSearchCondition = (queryParams.no && queryParams.no.trim()) || - (queryParams.deviceId && queryParams.deviceId.trim()) || - (queryParams.barCode && queryParams.barCode.trim()) || - (queryParams.createTime && Array.isArray(queryParams.createTime) && queryParams.createTime.length === 2) - - if (hasSearchCondition) { - handleQuery() - } else { - list.value = allData.value.slice(startIndex, endIndex) - } -} - -const handlePageChange = () => { - updateCurrentPageData() -} - const handleQuery = () => { queryParams.pageNo = 1 - let filteredData = [...allData.value] - - if (queryParams.no && queryParams.no.trim()) { - filteredData = filteredData.filter((item: any) => - String(item.no || '').toLowerCase().includes(String(queryParams.no).toLowerCase()) - ) - } - - if (queryParams.deviceId && queryParams.deviceId.trim()) { - filteredData = filteredData.filter((item: any) => - item.deviceId && String(item.deviceId).toLowerCase().includes(queryParams.deviceId!.toLowerCase()) - ) - } - - if (queryParams.barCode && queryParams.barCode.trim()) { - filteredData = filteredData.filter((item: any) => - item.barCode && String(item.barCode).toLowerCase().includes(queryParams.barCode!.toLowerCase()) - ) - } - - if (queryParams.createTime && Array.isArray(queryParams.createTime) && queryParams.createTime.length === 2) { - const startTime = new Date(queryParams.createTime[0]).getTime() - const endTime = new Date(queryParams.createTime[1]).getTime() - filteredData = filteredData.filter((item: any) => { - const itemTime = new Date(item.createTime).getTime() - return itemTime >= startTime && itemTime <= endTime - }) - } - - const sortedData = filteredData.sort((a: any, b: any) => { - return new Date(b.createTime).getTime() - new Date(a.createTime).getTime() - }) - - total.value = sortedData.length - const pageNo = queryParams.pageNo ?? 1 - const pageSize = queryParams.pageSize ?? 10 - const startIndex = (pageNo - 1) * pageSize - const endIndex = startIndex + pageSize - list.value = sortedData.slice(startIndex, endIndex) + getList() } const resetQuery = () => { - if (queryFormRef.value) { - queryFormRef.value.resetFields() - } - total.value = allData.value.length - updateCurrentPageData() + queryFormRef.value?.resetFields() + queryParams.pageNo = 1 + getList() } const handleExport = async () => { @@ -327,7 +213,6 @@ const handleExport = async () => { const formatTime = (timestamp: number | string) => { if (!timestamp) return '-' - // 如果是字符串格式的日期,直接使用;如果是数字时间戳,需要转换 const date = typeof timestamp === 'string' ? new Date(timestamp) : new Date(Number(timestamp)) if (isNaN(date.getTime())) return '-' return date.toLocaleString('zh-CN', { @@ -341,7 +226,7 @@ const formatTime = (timestamp: number | string) => { } onMounted(() => { - getAllData() + getList() })