diff --git a/app/templates/template-07/pages/TenderDetail.vue b/app/templates/template-07/pages/TenderDetail.vue
index 40a3e14..d58e65b 100644
--- a/app/templates/template-07/pages/TenderDetail.vue
+++ b/app/templates/template-07/pages/TenderDetail.vue
@@ -54,7 +54,9 @@
-
购买人数:{{ tender.saleCount || 0 }}
+
+
购买人数:{{ tender.buyerCount || 0 }}
售卖方式:{{ sellingMethodText }}
diff --git a/app/types/tender.ts b/app/types/tender.ts
index 087b837..fd90685 100644
--- a/app/types/tender.ts
+++ b/app/types/tender.ts
@@ -39,8 +39,13 @@ export interface Tender {
status?: number
/** 来源 */
dataSource?: string
- /** 已售数量 */
+ /** 已售数量(下单即加、从不回退;当前已无展示用途,历史字段) */
saleCount?: number
+ /**
+ * 购买人数:后端实时统计的**已付款订单数**(`COUNT(*) WHERE pay_status=1`)。
+ * 口径与「人数」字面有偏差(同一企业买 2 单计 2),这是明确拍定的取值。
+ */
+ buyerCount?: number
}
/** 分页返回结构 */
diff --git a/app/utils/orderStatus.ts b/app/utils/orderStatus.ts
new file mode 100644
index 0000000..079a7f2
--- /dev/null
+++ b/app/utils/orderStatus.ts
@@ -0,0 +1,69 @@
+/**
+ * 订单状态展示口径(hjc-web)。
+ *
+ * **必须与 `hjc-h5/src/utils/orderStatus.js` 保持一致**——两端是不同仓库、不同技术栈
+ * (Nuxt4 + TS / uni-app + JS),代码无法真正共享,只能靠"两处同一套定义"来对齐。
+ * 改这里的时候,另一边也要改。
+ *
+ * 优先级(从高到低):
+ * payStatus === 3 → 已退款
+ * orderStatus === 2 → 已取消
+ * payStatus === 1 || orderStatus === 1 → 已完成
+ * 其余 → 待支付
+ *
+ * 为什么需要它:hjc-web 此前**完全不读 `orderStatus`**(只看 payStatus),
+ * 于是订单一旦被置为已取消,卡片仍会显示「待支付」并带上「去支付」按钮。
+ */
+
+/** 订单状态归类键。四端(web / h5 / 小程序 / 后台)未来的展示都应落在这四个之一。 */
+export type HjcOrderStatusKey = 'pending' | 'done' | 'cancel' | 'refund'
+
+/** 判定所需的订单字段(只用到这两个,避免依赖完整的 HjcOrder 类型) */
+export interface HjcOrderLike {
+ payStatus?: number | null
+ orderStatus?: number | null
+}
+
+export function hjcOrderStatusKey(o?: HjcOrderLike | null): HjcOrderStatusKey {
+ if (!o) return 'pending'
+ if (o.payStatus === 3) return 'refund'
+ if (o.orderStatus === 2) return 'cancel'
+ if (o.payStatus === 1 || o.orderStatus === 1) return 'done'
+ return 'pending'
+}
+
+const LABELS: Record