From 287ffd592f8d1bdfdc3008cf60596120491e37fe Mon Sep 17 00:00:00 2001
From: zjf <1799650030@qq.com>
Date: Fri, 23 Oct 2026 12:30:43 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=E9=85=92=E5=BA=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/views/supermarket/smHotelOrder/index.vue | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/views/supermarket/smHotelOrder/index.vue b/src/views/supermarket/smHotelOrder/index.vue
index 7b4a5271..908e60a0 100644
--- a/src/views/supermarket/smHotelOrder/index.vue
+++ b/src/views/supermarket/smHotelOrder/index.vue
@@ -118,6 +118,11 @@
{{ dataSourceText(scope.row.hotelDataSource) }}
+
+
+ {{ scope.row.deptName || (scope.row.deptId != null ? scope.row.deptId : "-") }}
+
+
{{ scope.row.checkInDate || "-" }} ~ {{ scope.row.checkOutDate || "-" }}
@@ -254,6 +259,9 @@
{{ detailHotel.hotelName || "-" }}
+
+ {{ detailHotel.deptName || (detailHotel.deptId != null ? detailHotel.deptId : "-") }}
+
{{ detailHotel.hotelCode || "-" }}
{{ detailHotel.groupCode || "-" }}
From d39d5a61b782637d9691623b43b4c562dd5f742e Mon Sep 17 00:00:00 2001
From: zjf <1799650030@qq.com>
Date: Fri, 23 Oct 2026 17:07:49 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E9=85=92=E5=BA=97=EF=BC=8C=E6=B6=88?=
=?UTF-8?q?=E6=81=AF=E9=80=9A=E7=9F=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/thirdparty/app-message.ts | 3 +++
.../components/app-push-setting.vue | 10 ++++---
src/views/supermarket/smHotel/detail.vue | 22 +++++++++++++++-
src/views/supermarket/smHotel/form.vue | 22 +++++++++++++++-
src/views/supermarket/smHotelOrder/index.vue | 26 +++++++++++++++++++
5 files changed, 78 insertions(+), 5 deletions(-)
diff --git a/src/api/thirdparty/app-message.ts b/src/api/thirdparty/app-message.ts
index e903cd6b..d59f9224 100644
--- a/src/api/thirdparty/app-message.ts
+++ b/src/api/thirdparty/app-message.ts
@@ -3,6 +3,9 @@ import request from "/@/utils/request"
/** 手动推送的稳定事件编码,独立于钱包和用餐策略矩阵。 */
export const MANUAL_PUSH_EVENT_CODE = "MANUAL_PUSH"
+/** 酒店有房通知事件编码,旁路入箱,不进入商户策略矩阵。 */
+export const HOTEL_ROOM_AVAILABLE_EVENT_CODE = "HOTEL_ROOM_AVAILABLE"
+
/** 单次手动推送允许选择的最大用户数,与服务端校验保持一致。 */
export const MANUAL_PUSH_MAX_RECIPIENTS = 500
diff --git a/src/views/mch/mch-manage/components/app-push-setting.vue b/src/views/mch/mch-manage/components/app-push-setting.vue
index bc9a57ec..769e1eed 100644
--- a/src/views/mch/mch-manage/components/app-push-setting.vue
+++ b/src/views/mch/mch-manage/components/app-push-setting.vue
@@ -227,7 +227,7 @@ import type {
AppRelationTypeOption,
PushProviderStatus,
} from "/@/api/thirdparty/app-message"
-import { MANUAL_PUSH_EVENT_CODE } from "/@/api/thirdparty/app-message"
+import { HOTEL_ROOM_AVAILABLE_EVENT_CODE, MANUAL_PUSH_EVENT_CODE } from "/@/api/thirdparty/app-message"
import { useUserInfo } from "/@/stores/userInfo"
import { useMessage, useMessageBox } from "/@/hooks/message.js"
@@ -336,8 +336,12 @@ const deliveryState = reactive({
})
/** 供应商尝试详情弹窗状态。 */
const attemptDialog = reactive({ visible: false, loading: false, deliveryId: "", records: [] })
-/** 投递事件筛选包含手动推送,但不改变钱包、用餐的策略矩阵。 */
-const deliveryEventOptions = computed(() => [...businessState.policies, { eventCode: MANUAL_PUSH_EVENT_CODE, eventLabel: "手动推送" }])
+/** 投递事件筛选含手动推送/有房通知,但不改变钱包、用餐的策略矩阵。 */
+const deliveryEventOptions = computed(() => [
+ ...businessState.policies,
+ { eventCode: MANUAL_PUSH_EVENT_CODE, eventLabel: "手动推送" },
+ { eventCode: HOTEL_ROOM_AVAILABLE_EVENT_CODE, eventLabel: "有房通知" },
+])
/** 业务配置请求序号,商户切换或刷新后不允许旧响应覆盖当前策略。 */
let businessRequestSeq = 0
/** 投递分页请求序号,切换筛选或手动提交后使旧响应失效。 */
diff --git a/src/views/supermarket/smHotel/detail.vue b/src/views/supermarket/smHotel/detail.vue
index 969b936b..0d97f237 100644
--- a/src/views/supermarket/smHotel/detail.vue
+++ b/src/views/supermarket/smHotel/detail.vue
@@ -127,6 +127,9 @@
+
+
+
编辑
@@ -347,7 +350,7 @@
-
+
@@ -364,6 +367,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
取消
@@ -660,6 +677,9 @@ const openRoomDialog = (row?: any) => {
bedType: row?.bedType || "",
capacity: row?.capacity ?? 2,
roomNumber: row?.roomNumber ?? 0,
+ floorInfo: row?.floorInfo || "",
+ areaSqm: row?.areaSqm ?? null,
+ windowType: row?.windowType || "",
})
roomDialogVisible.value = true
nextTick(() => roomFormRef.value?.clearValidate())
diff --git a/src/views/supermarket/smHotel/form.vue b/src/views/supermarket/smHotel/form.vue
index e2b894ce..15bcb5e8 100644
--- a/src/views/supermarket/smHotel/form.vue
+++ b/src/views/supermarket/smHotel/form.vue
@@ -246,6 +246,9 @@
+
+
+
编辑
@@ -357,7 +360,7 @@
-
+
@@ -374,6 +377,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
取消
@@ -940,6 +957,9 @@ const openRoomDialog = (row?: any) => {
bedType: row?.bedType || "",
capacity: row?.capacity ?? 2,
roomNumber: row?.roomNumber ?? 0,
+ floorInfo: row?.floorInfo || "",
+ areaSqm: row?.areaSqm ?? null,
+ windowType: row?.windowType || "",
})
roomDialogVisible.value = true
nextTick(() => roomFormRef.value?.clearValidate())
diff --git a/src/views/supermarket/smHotelOrder/index.vue b/src/views/supermarket/smHotelOrder/index.vue
index 908e60a0..25afdd11 100644
--- a/src/views/supermarket/smHotelOrder/index.vue
+++ b/src/views/supermarket/smHotelOrder/index.vue
@@ -128,6 +128,16 @@
{{ scope.row.checkInDate || "-" }} ~ {{ scope.row.checkOutDate || "-" }}
+
+
+ {{ formatRoomCount(scope.row.count) }}
+
+
+
+
+ {{ formatNightCount(scope.row.checkInDate, scope.row.checkOutDate) }}
+
+
{{ formatAmount(scope.row.sellAmount) }}
@@ -608,6 +618,22 @@ const dataSourceText = (ds?: string) => {
return v
}
+/** 订单总间数(count) */
+const formatRoomCount = (count?: number | string | null) => {
+ const n = Number(count)
+ if (!Number.isFinite(n) || n < 1) return 1
+ return Math.floor(n)
+}
+
+/** 总晚数 = 离店日 − 入住日(半开区间) */
+const formatNightCount = (checkIn?: string | null, checkOut?: string | null) => {
+ if (!checkIn || !checkOut) return "-"
+ const inMs = Date.parse(String(checkIn).replace(/-/g, "/"))
+ const outMs = Date.parse(String(checkOut).replace(/-/g, "/"))
+ if (!Number.isFinite(inMs) || !Number.isFinite(outMs) || outMs <= inMs) return "-"
+ return Math.round((outMs - inMs) / 86400000)
+}
+
const upstreamActionText = (action?: string) => {
const map: Record = {
CREATE: "上游下单",