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 @@ 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 @@ - + 订单管理 > diff --git a/apps/miniapp/src/pages/seller/order-detail.vue b/apps/miniapp/src/pages/seller/order-detail.vue new file mode 100644 index 0000000..0953af0 --- /dev/null +++ b/apps/miniapp/src/pages/seller/order-detail.vue @@ -0,0 +1,542 @@ +