修复订单统计
This commit is contained in:
1 parent
cd7f291892
commit
5f0f677268
1 file changed
+11
-126
@@ -131,7 +131,7 @@
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="handlePageChange"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</el-card>
|
||||
</div>
|
||||
@@ -150,7 +150,6 @@ const exportLoading = ref(false)
|
||||
const list = ref<any[]>([])
|
||||
const total = ref(0)
|
||||
const queryFormRef = ref()
|
||||
const allData = ref<any[]>([])
|
||||
|
||||
const queryParams = reactive<StatisticsDetailPageReqVO>({
|
||||
pageNo: 1,
|
||||
@@ -165,63 +164,13 @@ const queryParams = reactive<StatisticsDetailPageReqVO>({
|
||||
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<any>[] = []
|
||||
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()
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
Reference in new issue
Block a user