diff --git a/src/api/mall/trade/order/salesStatisticsdetails.ts b/src/api/mall/trade/order/salesStatisticsdetails.ts index e3e31c19..98cf1d2f 100644 --- a/src/api/mall/trade/order/salesStatisticsdetails.ts +++ b/src/api/mall/trade/order/salesStatisticsdetails.ts @@ -1,31 +1,29 @@ import request from '@/config/axios' +// request.get 返回的是 res.data,所以这里直接定义 data 的结构 export interface GetStatisticsDetailRes { - code: number; - data: { - list: { - id: number; - userId: number; - orderId: number; - spuId: number; - spuName: string; - skuId: number; - deviceId: string; - barCode: string; - cabinetChannel: string; - picUrl: string; - count: number; - price: number; - discountPrice: number; - payPrice: number; - orderPartPrice: number; - orderDividePrice: number; - afterSaleStatus: number; - no: string; - createTime: string; // 修改为正确的类型 - }[]; - total: number; - }; + list: { + id: number; + userId: number; + orderId: number; + spuId: number; + spuName: string; + skuId: number; + deviceId: string; + barCode: string; + cabinetChannel: string; + picUrl: string; + count: number; + price: number; + discountPrice: number; + payPrice: number; + orderPartPrice: number; + orderDividePrice: number; + afterSaleStatus: number; + no: string; + createTime: string; + }[]; + total: number; } // 查询参数接口 diff --git a/src/views/mall/trade/statistics/index.vue b/src/views/mall/trade/statistics/index.vue index d326a4fe..a3bedc2a 100644 --- a/src/views/mall/trade/statistics/index.vue +++ b/src/views/mall/trade/statistics/index.vue @@ -168,22 +168,59 @@ const queryParams = reactive({ const getAllData = async () => { loading.value = true try { + // 先获取第一页数据,了解总数 const firstPageData = await SalesStatisticsDetailsApi.getStatisticsDetailPage({ ...queryParams, pageNo: 1, pageSize: 1000 }) - if (firstPageData && firstPageData.list) { - const sortedData = firstPageData.list.sort((a: any, b: any) => { + 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 = firstPageData.total || 0 + total.value = totalCount updateCurrentPageData() - - console.log("销售订单", firstPageData) + } else { + console.warn('数据格式异常,未找到 list 数据', firstPageData) } } catch (error) { console.error('获取数据失败:', error) @@ -194,10 +231,18 @@ const getAllData = async () => { } const updateCurrentPageData = () => { - const startIndex = (queryParams.pageNo - 1) * queryParams.pageSize - const endIndex = startIndex + queryParams.pageSize + const pageNo = queryParams.pageNo ?? 1 + const pageSize = queryParams.pageSize ?? 10 + const startIndex = (pageNo - 1) * pageSize + const endIndex = startIndex + pageSize - if (queryParams.no || queryParams.deviceId || queryParams.barCode || queryParams.createTime) { + // 检查是否有搜索条件 + 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) @@ -220,13 +265,13 @@ const handleQuery = () => { if (queryParams.deviceId && queryParams.deviceId.trim()) { filteredData = filteredData.filter((item: any) => - item.deviceId && String(item.deviceId).toLowerCase().includes(queryParams.deviceId.toLowerCase()) + 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()) + item.barCode && String(item.barCode).toLowerCase().includes(queryParams.barCode!.toLowerCase()) ) } @@ -244,8 +289,10 @@ const handleQuery = () => { }) total.value = sortedData.length - const startIndex = (queryParams.pageNo - 1) * queryParams.pageSize - const endIndex = startIndex + queryParams.pageSize + 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) } @@ -280,7 +327,9 @@ const handleExport = async () => { const formatTime = (timestamp: number | string) => { if (!timestamp) return '-' - const date = new Date(Number(timestamp)) + // 如果是字符串格式的日期,直接使用;如果是数字时间戳,需要转换 + const date = typeof timestamp === 'string' ? new Date(timestamp) : new Date(Number(timestamp)) + if (isNaN(date.getTime())) return '-' return date.toLocaleString('zh-CN', { year: 'numeric', month: '2-digit',