优化工作台和订单列表交互
This commit is contained in:
@@ -7,7 +7,8 @@ import StatusTag from '@/components/StatusTag.vue'
|
||||
import type { CommodityOrder, CommodityOrderSearch } from '@/types/order'
|
||||
import { commodityTypeText } from '@/utils/constants'
|
||||
|
||||
const loading = ref(false)
|
||||
const listLoading = ref(false)
|
||||
const requesting = ref(false)
|
||||
const refreshing = ref(false)
|
||||
const finished = ref(false)
|
||||
const records = ref<CommodityOrder[]>([])
|
||||
@@ -19,25 +20,31 @@ const query = reactive<CommodityOrderSearch>({
|
||||
pageSize: 10
|
||||
})
|
||||
|
||||
const buildSearchQuery = (): CommodityOrderSearch => ({
|
||||
...query,
|
||||
contactPhone: keyword.value.trim(),
|
||||
orderStatus: String(status.value || '')
|
||||
})
|
||||
|
||||
const loadOrders = async (reset = false) => {
|
||||
if (loading.value) return
|
||||
loading.value = true
|
||||
if (requesting.value) {
|
||||
refreshing.value = false
|
||||
return
|
||||
}
|
||||
requesting.value = true
|
||||
listLoading.value = true
|
||||
if (reset) {
|
||||
query.pageNum = 1
|
||||
finished.value = false
|
||||
}
|
||||
try {
|
||||
const searchText = keyword.value.trim()
|
||||
const page = await fetchOrderList({
|
||||
...query,
|
||||
orderStatus: status.value || undefined,
|
||||
contactPhone: searchText || undefined
|
||||
})
|
||||
const page = await fetchOrderList(buildSearchQuery())
|
||||
records.value = reset ? page.records : [...records.value, ...page.records]
|
||||
finished.value = records.value.length >= page.total || page.records.length === 0
|
||||
query.pageNum += 1
|
||||
} finally {
|
||||
loading.value = false
|
||||
requesting.value = false
|
||||
listLoading.value = false
|
||||
refreshing.value = false
|
||||
}
|
||||
}
|
||||
@@ -80,7 +87,7 @@ onMounted(() => loadOrders(true))
|
||||
</van-tabs>
|
||||
|
||||
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
|
||||
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多订单" @load="loadOrders">
|
||||
<van-list v-model:loading="listLoading" :finished="finished" finished-text="没有更多订单" @load="loadOrders">
|
||||
<div v-if="records.length" class="order-list">
|
||||
<RouterLink v-for="order in records" :key="order.id" class="order-card" :to="`/orders/${order.id}`">
|
||||
<div class="order-card__main">
|
||||
@@ -105,7 +112,7 @@ onMounted(() => loadOrders(true))
|
||||
</div>
|
||||
</RouterLink>
|
||||
</div>
|
||||
<div v-else-if="!loading" class="empty-state">
|
||||
<div v-else-if="!listLoading" class="empty-state">
|
||||
<ClipboardList :size="30" />
|
||||
<div>暂无订单</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user