diff --git a/src/pages/canteen-delivery/detail.vue b/src/pages/canteen-delivery/detail.vue
index 8962229..0a6ff7d 100644
--- a/src/pages/canteen-delivery/detail.vue
+++ b/src/pages/canteen-delivery/detail.vue
@@ -12,8 +12,14 @@
mode="aspectFill" />
{{ state.row.merchantName || "—" }}
-
- {{ state.row.createTime }}
+
+ 下单时间:{{ formatOrderTimeLabel(state.row.createTime) }}
+
+
+ 订单类型:{{ expectDeliveryTypeLabel(state.row.expectDeliveryType) }}
+
+
+ {{ deliveryExpectDetailLine(state.row) }}
@@ -124,6 +130,11 @@ import { onLoad } from "@dcloudio/uni-app"
import { hooks } from "@@/index"
import { canteenDeliveryApi } from "@@/api"
import { filePath } from "@@/utils/file"
+import {
+ deliveryExpectDetailLine,
+ expectDeliveryTypeLabel,
+ formatOrderTimeLabel,
+} from "@@/utils/canteen-delivery-display"
import { getFileUploadActionUrl, getUploadAuthHeader, parseSysFileUploadResponse } from "@@/utils/upload"
const UPLOAD_OK = 2
diff --git a/src/pages/canteen-delivery/list.vue b/src/pages/canteen-delivery/list.vue
index 0fb3b29..e5ad71f 100644
--- a/src/pages/canteen-delivery/list.vue
+++ b/src/pages/canteen-delivery/list.vue
@@ -1,5 +1,5 @@
-
+
@@ -14,8 +14,10 @@
- 加载中…
-
+
+ 加载中…
+
+
暂无配送单
@@ -32,7 +34,15 @@
mode="aspectFill" />
{{ item.merchantName || "—" }}
- {{ item.createTime }}
+
+ 下单时间:{{ formatOrderTimeLabel(item.createTime) }}
+
+
+ 订单类型:{{ expectDeliveryTypeLabel(item.expectDeliveryType) }}
+
+
+ {{ deliveryExpectDetailLine(item) }}
+
@@ -83,6 +93,11 @@
+
+ 加载更多…
+ 没有更多了
+ 上拉加载更多
+
@@ -96,6 +111,11 @@ import { hooks, router } from "@@/index"
import { canteenDeliveryApi } from "@@/api"
import type { CanteenDeliveryTab } from "@@/api/canteen-delivery"
import { filePath } from "@@/utils/file"
+import {
+ deliveryExpectDetailLine,
+ expectDeliveryTypeLabel,
+ formatOrderTimeLabel,
+} from "@@/utils/canteen-delivery-display"
const tabs: { key: CanteenDeliveryTab; label: string }[] = [
{ key: "pending", label: "待配送" },
@@ -108,15 +128,58 @@ const state = reactive({
tab: "pending" as CanteenDeliveryTab,
list: [] as any[],
loading: false,
+ loadingMore: false,
+ /** 每页条数(与服务端约定,可被响应里的 size 覆盖) */
+ size: 5,
+ current: 0,
+ pages: 0,
+ total: 0,
+ hasMore: true,
})
const isApiOk = (res: any) => res?.code === 0 || res?.ok === true
-const extractList = (res: any): any[] => {
+/** 分页 data:records、total、current、size、pages;兼容旧版 data 为数组 */
+const extractPage = (res: any): { records: any[]; total: number; current: number; size: number; pages: number } => {
const d = res?.data
- if (Array.isArray(d)) return d
- if (Array.isArray(d?.records)) return d.records
- return []
+ if (Array.isArray(d)) {
+ return { records: d, total: d.length, current: 1, size: d.length, pages: 1 }
+ }
+ if (!d || typeof d !== "object") {
+ return { records: [], total: 0, current: 1, size: state.size, pages: 0 }
+ }
+ const records = Array.isArray(d.records) ? d.records : []
+ return {
+ records,
+ total: Number(d.total ?? 0),
+ current: Number(d.current ?? 1),
+ size: Number(d.size ?? state.size),
+ pages: Number(d.pages ?? 0),
+ }
+}
+
+const applyPage = (page: ReturnType, append: boolean) => {
+ if (append) {
+ state.list = [...state.list, ...page.records]
+ } else {
+ state.list = page.records
+ }
+ state.total = page.total
+ if (page.size > 0) state.size = page.size
+ state.current = page.current
+ state.pages = page.pages
+
+ if (append && page.records.length === 0) {
+ state.hasMore = false
+ return
+ }
+ if (state.pages > 0) {
+ state.hasMore = state.current < state.pages
+ } else if (state.total > 0) {
+ state.hasMore = state.list.length < state.total
+ } else {
+ state.hasMore = page.records.length >= state.size && page.records.length > 0
+ }
}
const statusText = (s: number) => {
@@ -142,28 +205,75 @@ const statusStyle = (s: number) => {
return { color: c, backgroundColor: `${c}18` }
}
-const loadList = async () => {
+const loadFirstPage = async () => {
+ if (state.loading) return
state.loading = true
try {
- const res: any = await canteenDeliveryApi.list({ tab: state.tab })
+ const res: any = await canteenDeliveryApi.list({
+ tab: state.tab,
+ current: 1,
+ size: state.size,
+ })
if (!isApiOk(res)) {
state.list = []
+ state.hasMore = false
uni.showToast({ title: res?.msg || "加载失败", icon: "none" })
return
}
- state.list = extractList(res)
+ applyPage(extractPage(res), false)
} catch (e: any) {
state.list = []
+ state.hasMore = false
uni.showToast({ title: e?.message || "加载失败", icon: "none" })
} finally {
state.loading = false
}
}
+const loadNextPage = async () => {
+ if (state.loading || state.loadingMore || !state.hasMore) return
+ const next = state.current + 1
+ if (state.pages > 0 && next > state.pages) {
+ state.hasMore = false
+ return
+ }
+ state.loadingMore = true
+ try {
+ const res: any = await canteenDeliveryApi.list({
+ tab: state.tab,
+ current: next,
+ size: state.size,
+ })
+ if (!isApiOk(res)) {
+ uni.showToast({ title: res?.msg || "加载失败", icon: "none" })
+ return
+ }
+ const p = extractPage(res)
+ if (p.records.length === 0) {
+ state.hasMore = false
+ return
+ }
+ applyPage(p, true)
+ } catch (e: any) {
+ uni.showToast({ title: e?.message || "加载失败", icon: "none" })
+ } finally {
+ state.loadingMore = false
+ }
+}
+
+const onReachBottom = () => {
+ loadNextPage()
+}
+
const switchTab = async (key: CanteenDeliveryTab) => {
if (state.tab === key) return
state.tab = key
- await loadList()
+ state.list = []
+ state.hasMore = true
+ state.current = 0
+ state.pages = 0
+ state.total = 0
+ await loadFirstPage()
}
const goDetail = (item: any) => {
@@ -185,12 +295,15 @@ const calcTotalPrice = (item: any): number => {
}
onShow(async () => {
- await loadList()
+ await loadFirstPage()
})
onPullDownRefresh(async () => {
- await loadList()
- uni.stopPullDownRefresh()
+ try {
+ await loadFirstPage()
+ } finally {
+ uni.stopPullDownRefresh()
+ }
})
diff --git a/src/pages/order/confirm.vue b/src/pages/order/confirm.vue
index fc35c46..1640a39 100644
--- a/src/pages/order/confirm.vue
+++ b/src/pages/order/confirm.vue
@@ -49,6 +49,69 @@
+
+
+ 送达时间
+
+
+ 立即送出
+
+
+ 预约时段
+
+
+
+
+ 选择日期
+
+
+
+ {{ d.label }}
+
+
+
+
+ 选择时段
+ 可预约时段加载中…
+
+
+ {{ scheduledSlotsEmptyText }}
+
+
+
+ {{ s.label }}
+
+
+
+
+
+
+
+
订单详情
@@ -92,13 +155,70 @@