From b359070a0edb46d1a5424e743e22f0a6d6bf23d0 Mon Sep 17 00:00:00 2001 From: 18631081161 <2088094923@qq.com> Date: Thu, 2 Apr 2026 01:09:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/src/views/ChatRecords.vue | 15 +- miniapp/pages.json | 7 + miniapp/pages/food/food-order-detail.vue | 4 + miniapp/pages/message/chat.vue | 127 +-- miniapp/pages/message/message.vue | 113 ++- miniapp/pages/mine/earnings.vue | 50 +- miniapp/pages/mine/mine.vue | 2 + miniapp/pages/mine/profile.vue | 164 ++++ miniapp/pages/order-hall/order-hall.vue | 10 +- miniapp/pages/order/complete-order.vue | 6 +- miniapp/pages/order/order-detail.vue | 27 +- miniapp/utils/api.js | 5 + miniapp/utils/im.js | 239 ++--- miniapp/utils/request.js | 11 +- server/Endpoints/AdminEndpoints.cs | 44 +- server/Endpoints/AuthEndpoints.cs | 28 + server/Endpoints/EarningEndpoints.cs | 30 +- server/Endpoints/OrderEndpoints.cs | 30 +- ...260401162116_AddOrderImGroupId.Designer.cs | 916 ++++++++++++++++++ .../20260401162116_AddOrderImGroupId.cs | 29 + .../Migrations/AppDbContextModelSnapshot.cs | 4 + server/Models/Dtos/AuthDtos.cs | 11 + server/Models/Dtos/OrderDtos.cs | 2 + server/Models/Order.cs | 4 + server/Services/TencentIMService.cs | 61 ++ server/Services/WxPayService.cs | 54 ++ 26 files changed, 1640 insertions(+), 353 deletions(-) create mode 100644 miniapp/pages/mine/profile.vue create mode 100644 server/Migrations/20260401162116_AddOrderImGroupId.Designer.cs create mode 100644 server/Migrations/20260401162116_AddOrderImGroupId.cs diff --git a/admin/src/views/ChatRecords.vue b/admin/src/views/ChatRecords.vue index dd8691a..0a54546 100644 --- a/admin/src/views/ChatRecords.vue +++ b/admin/src/views/ChatRecords.vue @@ -148,9 +148,15 @@ async function viewChat(row) { chatMessages.value = [] try { - const res = await request.get('/admin/chat-messages', { - params: { ownerUserId: row.ownerId, runnerUserId: row.runnerId } - }) + const params = {} + // 优先用群ID(群聊模式) + if (row.imGroupId) { + params.groupId = row.imGroupId + } else { + // 兼容旧数据 + params.groupId = `order_${row.id}` + } + const res = await request.get('/admin/chat-messages', { params }) chatMessages.value = parseIMMessages(res, row) } catch (e) { console.error('拉取聊天记录失败:', e) @@ -160,7 +166,8 @@ async function viewChat(row) { } function parseIMMessages(imResponse, orderInfo) { - const msgList = imResponse.MsgList || imResponse.msgList || [] + // 群消息格式:RspMsgList + const msgList = imResponse.RspMsgList || imResponse.rspMsgList || imResponse.MsgList || imResponse.msgList || [] if (!msgList.length) return [] const ownerImId = `user_${orderInfo.ownerId}` diff --git a/miniapp/pages.json b/miniapp/pages.json index c8e8cb9..0c12137 100644 --- a/miniapp/pages.json +++ b/miniapp/pages.json @@ -153,6 +153,13 @@ "navigationStyle": "custom" } }, + { + "path": "pages/mine/profile", + "style": { + "navigationBarTitleText": "编辑资料", + "navigationStyle": "custom" + } + }, { "path": "pages/runner/certification", "style": { diff --git a/miniapp/pages/food/food-order-detail.vue b/miniapp/pages/food/food-order-detail.vue index 557d9fd..b6691ea 100644 --- a/miniapp/pages/food/food-order-detail.vue +++ b/miniapp/pages/food/food-order-detail.vue @@ -379,6 +379,10 @@ export default { border: none; } +.accept-btn::after { + border: none; +} + /* 弹窗样式(复用) */ .modal-mask { position: fixed; diff --git a/miniapp/pages/message/chat.vue b/miniapp/pages/message/chat.vue index f83b383..338ce23 100644 --- a/miniapp/pages/message/chat.vue +++ b/miniapp/pages/message/chat.vue @@ -203,7 +203,6 @@ + + diff --git a/miniapp/pages/order-hall/order-hall.vue b/miniapp/pages/order-hall/order-hall.vue index 2e10eed..a0166e1 100644 --- a/miniapp/pages/order-hall/order-hall.vue +++ b/miniapp/pages/order-hall/order-hall.vue @@ -60,7 +60,7 @@ 门店数量:{{ order.shopCount || 0 }}个 跑腿费: - {{ order.commission }}元 + {{ formatMoney(order.commission) }}元 @@ -92,7 +92,7 @@ {{ getItemTitle(order) }} 跑腿费: - {{ order.commission }}元 + {{ formatMoney(order.commission) }}元 @@ -293,7 +293,11 @@ getHelpTotalAmount(order) { const commission = parseFloat(order.commission) || 0 const goodsAmount = parseFloat(order.goodsAmount) || 0 - return (commission + goodsAmount).toFixed(1) + return (commission + goodsAmount).toFixed(2) + }, + /** 格式化金额为2位小数 */ + formatMoney(val) { + return (parseFloat(val) || 0).toFixed(2) }, /** 获取卡片标题 */ getItemTitle(order) { diff --git a/miniapp/pages/order/complete-order.vue b/miniapp/pages/order/complete-order.vue index 1dd3a1b..4db5a6e 100644 --- a/miniapp/pages/order/complete-order.vue +++ b/miniapp/pages/order/complete-order.vue @@ -169,12 +169,12 @@ export default { // 通过 IM 通知单主 try { await initIM() - const targetImUserId = `user_${this.orderInfo.ownerId}` - await sendCustomMessage(targetImUserId, { + const groupId = this.orderInfo.imGroupId || `order_${this.orderId}` + await sendCustomMessage(groupId, { bizType: 'order-status', action: 'InProgress→WaitConfirm', description: '跑腿已提交完成,请在订单详情中确认' - }, this.orderId) + }) } catch (ex) {} uni.showToast({ title: '已提交完成', icon: 'success' }) diff --git a/miniapp/pages/order/order-detail.vue b/miniapp/pages/order/order-detail.vue index a0b65a0..a735768 100644 --- a/miniapp/pages/order/order-detail.vue +++ b/miniapp/pages/order/order-detail.vue @@ -235,6 +235,7 @@