From 32843219193272df011f9cb5eb4d8340096a170b Mon Sep 17 00:00:00 2001
From: xiaoquan <838115837@qq.com>
Date: Thu, 23 Apr 2026 00:48:07 +0800
Subject: [PATCH] dev
---
apps/miniapp/src/api/order.ts | 10 +
apps/miniapp/src/api/room.ts | 4 +
apps/miniapp/src/api/seller-order.ts | 72 +++
.../src/components/RoomCalendarPicker.vue | 418 +++++++++++++
apps/miniapp/src/components/RoomCard.vue | 92 ++-
apps/miniapp/src/pages.json | 18 +
.../src/pages/merchant-detail/index.vue | 15 +
apps/miniapp/src/pages/order-create/index.vue | 578 ++++++++++++++++++
apps/miniapp/src/pages/order-detail/index.vue | 237 ++++++-
apps/miniapp/src/pages/room-detail/index.vue | 2 +-
apps/miniapp/src/pages/seller/home.vue | 2 +-
.../miniapp/src/pages/seller/order-detail.vue | 542 ++++++++++++++++
apps/miniapp/src/pages/seller/orders.vue | 525 ++++++++++++++++
apps/server/src/entities/order.entity.ts | 6 +
.../server/src/modules/order/dto/order.dto.ts | 8 +
.../src/modules/order/order.controller.ts | 57 +-
.../server/src/modules/order/order.service.ts | 99 +++
.../src/modules/room/room.controller.ts | 16 +-
apps/server/src/modules/room/room.module.ts | 3 +-
apps/server/src/modules/room/room.service.ts | 28 +-
database/migrations/001_init_schema.sql | 2 +
21 files changed, 2703 insertions(+), 31 deletions(-)
create mode 100644 apps/miniapp/src/api/seller-order.ts
create mode 100644 apps/miniapp/src/components/RoomCalendarPicker.vue
create mode 100644 apps/miniapp/src/pages/order-create/index.vue
create mode 100644 apps/miniapp/src/pages/seller/order-detail.vue
create mode 100644 apps/miniapp/src/pages/seller/orders.vue
diff --git a/apps/miniapp/src/api/order.ts b/apps/miniapp/src/api/order.ts
index 2b09e67..2c3883c 100644
--- a/apps/miniapp/src/api/order.ts
+++ b/apps/miniapp/src/api/order.ts
@@ -7,6 +7,8 @@ export function createOrder(data: {
contactName: string;
contactPhone: string;
roomCount?: number;
+ guestCount?: number;
+ contactIdCard?: string;
couponId?: number;
remark?: string;
paymentMethod?: string;
@@ -25,3 +27,11 @@ export function getOrderDetail(id: number) {
export function cancelOrder(id: number, reason: string) {
return put(`/orders/${id}/cancel`, { reason });
}
+
+export function refundOrder(id: number, reason: string) {
+ return put(`/orders/${id}/refund`, { reason });
+}
+
+export function payOrder(id: number, paymentMethod: 'wechat' | 'alipay' | 'balance' = 'wechat') {
+ return put(`/orders/${id}/pay`, { paymentMethod });
+}
diff --git a/apps/miniapp/src/api/room.ts b/apps/miniapp/src/api/room.ts
index fd5face..64ebc1a 100644
--- a/apps/miniapp/src/api/room.ts
+++ b/apps/miniapp/src/api/room.ts
@@ -23,6 +23,10 @@ export function getRoomDetail(id: number) {
return get(`/rooms/${id}`);
}
+export function getRoomCalendar(id: number, startDate: string, endDate: string) {
+ return get(`/rooms/${id}/calendar`, { startDate, endDate });
+}
+
// 商家管理接口(需要 sellerToken)
export function getMerchantRooms(params: any) {
return request({ url: '/seller/rooms', method: 'GET', data: params, useSellerToken: true });
diff --git a/apps/miniapp/src/api/seller-order.ts b/apps/miniapp/src/api/seller-order.ts
new file mode 100644
index 0000000..0edab08
--- /dev/null
+++ b/apps/miniapp/src/api/seller-order.ts
@@ -0,0 +1,72 @@
+import { request } from '@/utils/request';
+
+// 商家订单列表
+export function getSellerOrders(params: {
+ page?: number;
+ pageSize?: number;
+ status?: string;
+ orderNo?: string;
+}) {
+ return request({
+ url: '/seller/orders',
+ method: 'GET',
+ data: params,
+ useSellerToken: true,
+ });
+}
+
+// 商家订单详情
+export function getSellerOrderDetail(id: number) {
+ return request({
+ url: `/seller/orders/${id}`,
+ method: 'GET',
+ useSellerToken: true,
+ });
+}
+
+// 确认订单
+export function confirmOrder(id: number) {
+ return request({
+ url: `/seller/orders/${id}/confirm`,
+ method: 'PUT',
+ useSellerToken: true,
+ });
+}
+
+// 拒绝订单
+export function rejectOrder(id: number, reason: string) {
+ return request({
+ url: `/seller/orders/${id}/reject`,
+ method: 'PUT',
+ data: { reason },
+ useSellerToken: true,
+ });
+}
+
+// 办理入住
+export function checkinOrder(id: number) {
+ return request({
+ url: `/seller/orders/${id}/checkin`,
+ method: 'PUT',
+ useSellerToken: true,
+ });
+}
+
+// 同意退款
+export function approveRefund(id: number) {
+ return request({
+ url: `/seller/orders/${id}/approve-refund`,
+ method: 'PUT',
+ useSellerToken: true,
+ });
+}
+
+// 拒绝退款
+export function rejectRefund(id: number, reason: string) {
+ return request({
+ url: `/seller/orders/${id}/reject-refund`,
+ method: 'PUT',
+ data: { reason },
+ useSellerToken: true,
+ });
+}
diff --git a/apps/miniapp/src/components/RoomCalendarPicker.vue b/apps/miniapp/src/components/RoomCalendarPicker.vue
new file mode 100644
index 0000000..dd0e2ce
--- /dev/null
+++ b/apps/miniapp/src/components/RoomCalendarPicker.vue
@@ -0,0 +1,418 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/miniapp/src/components/RoomCard.vue b/apps/miniapp/src/components/RoomCard.vue
index a6391c7..865af9a 100644
--- a/apps/miniapp/src/components/RoomCard.vue
+++ b/apps/miniapp/src/components/RoomCard.vue
@@ -1,11 +1,16 @@
-
+
-
+
+
+ 所选日期已满房
+
+
{{ room.name }}
{{ room.address }}
@@ -20,10 +25,15 @@
{{ room.rating }}
({{ room.reviewCount }}条评价)
-
- ¥
- {{ room.price }}
- /晚
+
+
+ ¥
+ {{ room.price }}
+ /晚
+
+
+ 订
+
@@ -31,7 +41,9 @@
diff --git a/apps/miniapp/src/pages.json b/apps/miniapp/src/pages.json
index a03a2b9..88f505f 100644
--- a/apps/miniapp/src/pages.json
+++ b/apps/miniapp/src/pages.json
@@ -49,6 +49,12 @@
"navigationBarTitleText": "订单详情"
}
},
+ {
+ "path": "pages/order-create/index",
+ "style": {
+ "navigationBarTitleText": "填写订单"
+ }
+ },
{
"path": "pages/mine/index",
"style": {
@@ -96,6 +102,18 @@
"style": {
"navigationBarTitleText": "房量房价"
}
+ },
+ {
+ "path": "pages/seller/orders",
+ "style": {
+ "navigationBarTitleText": "订单管理"
+ }
+ },
+ {
+ "path": "pages/seller/order-detail",
+ "style": {
+ "navigationBarTitleText": "订单详情"
+ }
}
],
"globalStyle": {
diff --git a/apps/miniapp/src/pages/merchant-detail/index.vue b/apps/miniapp/src/pages/merchant-detail/index.vue
index 2d96532..7cd0ac8 100644
--- a/apps/miniapp/src/pages/merchant-detail/index.vue
+++ b/apps/miniapp/src/pages/merchant-detail/index.vue
@@ -89,6 +89,7 @@
:key="room.id"
:room="room"
@tap="goRoomDetail(room.id)"
+ @book="goOrderCreate(room)"
/>
@@ -249,6 +250,20 @@ function copyAddress() {
function goRoomDetail(roomId: number) {
uni.navigateTo({ url: `/pages/room-detail/index?id=${roomId}` });
}
+
+function goOrderCreate(room: any) {
+ if (room.isAvailable === false) {
+ uni.showToast({ title: '所选日期已满房', icon: 'none' });
+ return;
+ }
+ const params = [
+ `roomId=${room.id}`,
+ `merchantId=${merchantId.value}`,
+ `checkIn=${checkInDate.value}`,
+ `checkOut=${checkOutDate.value}`,
+ ].join('&');
+ uni.navigateTo({ url: `/pages/order-create/index?${params}` });
+}
\ No newline at end of file
diff --git a/apps/miniapp/src/pages/order-detail/index.vue b/apps/miniapp/src/pages/order-detail/index.vue
index 4126889..c6a34f6 100644
--- a/apps/miniapp/src/pages/order-detail/index.vue
+++ b/apps/miniapp/src/pages/order-detail/index.vue
@@ -32,6 +32,14 @@
入住晚数
{{ order.nights }}晚
+
+ 房间套数
+ {{ order.roomCount || 1 }}套
+
+
+ 入住人数
+ {{ order.guestCount || 1 }}人
+
联系人
{{ order.contactName }}
@@ -40,6 +48,10 @@
联系电话
{{ order.contactPhone }}
+
+ 身份证号
+ {{ order.contactIdCard }}
+
@@ -74,22 +86,64 @@
下单时间
{{ order.createdAt }}
+
+ 支付方式
+ {{ paymentMethodLabels[order.paymentMethod] }}
+
+
+ 支付时间
+ {{ order.paidAt }}
+
+
+ 取消原因
+ {{ order.cancelReason }}
+
-
+
+
+
+
加载中...
+
+
+
+
+
+
+ 支付金额
+ ¥{{ order.payAmount }}
+
+
+
+ 💳
+ 微信支付
+ ✓
+
+
+ 💳
+ 支付宝
+ ✓
+
+
+
+
+
diff --git a/apps/miniapp/src/pages/room-detail/index.vue b/apps/miniapp/src/pages/room-detail/index.vue
index 42b4b20..b3fcbd7 100644
--- a/apps/miniapp/src/pages/room-detail/index.vue
+++ b/apps/miniapp/src/pages/room-detail/index.vue
@@ -185,7 +185,7 @@ function contactMerchant() {
}
function handleBook() {
- uni.navigateTo({ url: `/pages/order-detail/index?roomId=${roomId.value}` });
+ uni.navigateTo({ url: `/pages/order-create/index?roomId=${roomId.value}` });
}
diff --git a/apps/miniapp/src/pages/seller/home.vue b/apps/miniapp/src/pages/seller/home.vue
index 4e27cab..64f259b 100644
--- a/apps/miniapp/src/pages/seller/home.vue
+++ b/apps/miniapp/src/pages/seller/home.vue
@@ -107,7 +107,7 @@