From e00dddf70879298f95d843cef73db739fb334351 Mon Sep 17 00:00:00 2001 From: huliyong <2783385703@qq.com> Date: Tue, 24 Jun 2025 21:51:22 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=8A=9F=E8=83=BD=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor: 优化订单详情和宠物信息展示逻辑 fix: 修复订单状态判断和按钮显示条件 docs: 添加数据库事务查询SQL文件 style: 统一时间线组件样式和布局 test: 更新测试用例以适应新功能 --- api/order/order.js | 22 +- database_transaction_queries.sql | 143 +++++ pages.json | 9 + pages/companionPetList/companionPetInfo.vue | 8 +- pages/personalCenter/a.txt | 551 ++++++++++++++++++++ pages/personalCenter/orderDetailImage.vue | 373 +++++++++---- pages_order/components/order/timelineService.vue | 579 +++++++++++++++++++++ pages_order/order/orderDetail.vue | 22 +- pages_order/order/orderList.vue | 15 +- pages_order/order/serviceRecord.vue | 215 ++++++++ .../components/uni-calendar/uni-calendar-item.vue | 7 + 11 files changed, 1839 insertions(+), 105 deletions(-) create mode 100644 database_transaction_queries.sql create mode 100644 pages/personalCenter/a.txt create mode 100644 pages_order/components/order/timelineService.vue create mode 100644 pages_order/order/serviceRecord.vue diff --git a/api/order/order.js b/api/order/order.js index 464dc69..db8926b 100644 --- a/api/order/order.js +++ b/api/order/order.js @@ -145,8 +145,28 @@ export const orderCancel = (data) => { }) } +// 查询服务记录列表 +export const appletOrderDateFrequencyList = (params) => { + return request({ + url: '/applet/appletOrderDateFrequency/list', + headers: { + isToken: true + }, + method: "GET", + params + }) +} - +// 根据id查询服务记录详情 +export const appletOrderDateFrequencyById = (id) => { + return request({ + headers: { + "isToken": true + }, + url: "/applet/appletOrderDateFrequency/" + id, + method: 'get', + }) +} // 再次支付订单 export const orderPay = (data) => { diff --git a/database_transaction_queries.sql b/database_transaction_queries.sql new file mode 100644 index 0000000..0817c97 --- /dev/null +++ b/database_transaction_queries.sql @@ -0,0 +1,143 @@ +-- MySQL 数据库事务状态检查和处理 SQL 语句 + +-- 1. 查看当前所有连接和进程 +SHOW PROCESSLIST; + +-- 2. 查看当前正在运行的事务 +SELECT + trx_id, + trx_state, + trx_started, + trx_requested_lock_id, + trx_wait_started, + trx_weight, + trx_mysql_thread_id, + trx_query +FROM INFORMATION_SCHEMA.INNODB_TRX; + +-- 3. 查看锁等待情况 +SELECT + waiting_trx_id, + waiting_thread, + waiting_query, + blocking_trx_id, + blocking_thread, + blocking_query +FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; + +-- 4. 查看当前锁定状态 +SELECT + lock_id, + lock_trx_id, + lock_mode, + lock_type, + lock_table, + lock_index, + lock_space, + lock_page, + lock_rec, + lock_data +FROM INFORMATION_SCHEMA.INNODB_LOCKS; + +-- 5. 查看详细的锁等待信息(MySQL 8.0+) +SELECT + OBJECT_SCHEMA, + OBJECT_NAME, + LOCK_TYPE, + LOCK_MODE, + LOCK_STATUS, + LOCK_DATA, + ENGINE_TRANSACTION_ID, + THREAD_ID, + EVENT_ID +FROM performance_schema.data_locks; + +-- 6. 查看锁等待关系(MySQL 8.0+) +SELECT + requesting_engine_transaction_id, + requesting_thread_id, + requesting_event_id, + blocking_engine_transaction_id, + blocking_thread_id, + blocking_event_id +FROM performance_schema.data_lock_waits; + +-- 7. 查看长时间运行的事务(超过30秒) +SELECT + trx_id, + trx_state, + trx_started, + TIMESTAMPDIFF(SECOND, trx_started, NOW()) as duration_seconds, + trx_mysql_thread_id, + trx_query +FROM INFORMATION_SCHEMA.INNODB_TRX +WHERE TIMESTAMPDIFF(SECOND, trx_started, NOW()) > 30; + +-- 8. 查看阻塞其他事务的连接 +SELECT + p1.ID as blocking_thread_id, + p1.USER as blocking_user, + p1.HOST as blocking_host, + p1.DB as blocking_db, + p1.COMMAND as blocking_command, + p1.TIME as blocking_time, + p1.STATE as blocking_state, + p1.INFO as blocking_query, + p2.ID as blocked_thread_id, + p2.USER as blocked_user, + p2.HOST as blocked_host, + p2.DB as blocked_db, + p2.COMMAND as blocked_command, + p2.TIME as blocked_time, + p2.STATE as blocked_state, + p2.INFO as blocked_query +FROM INFORMATION_SCHEMA.PROCESSLIST p1 +JOIN INFORMATION_SCHEMA.INNODB_LOCK_WAITS w ON p1.ID = w.blocking_thread +JOIN INFORMATION_SCHEMA.PROCESSLIST p2 ON p2.ID = w.waiting_thread; + +-- ===== 处理锁定事务的操作 ===== + +-- 9. 杀死指定的连接(替换 CONNECTION_ID 为实际的连接ID) +-- KILL CONNECTION_ID; + +-- 示例:杀死连接ID为123的连接 +-- KILL 123; + +-- 10. 强制杀死指定连接(即使在事务中) +-- KILL CONNECTION CONNECTION_ID; + +-- 11. 回滚指定事务(需要在对应连接中执行) +-- ROLLBACK; + +-- 12. 设置锁等待超时(秒) +SET innodb_lock_wait_timeout = 50; + +-- 13. 查看当前锁等待超时设置 +SHOW VARIABLES LIKE 'innodb_lock_wait_timeout'; + +-- ===== 预防措施 ===== + +-- 14. 查看死锁信息 +SHOW ENGINE INNODB STATUS; + +-- 15. 开启死锁检测 +SET GLOBAL innodb_deadlock_detect = ON; + +-- 16. 查看事务隔离级别 +SELECT @@tx_isolation; + +-- 17. 设置事务隔离级别(如果需要) +-- SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; + +-- ===== 使用步骤说明 ===== +/* +1. 首先运行查询1-4来了解当前事务状态 +2. 找出长时间运行或阻塞的事务ID和连接ID +3. 使用KILL命令终止问题连接 +4. 确认锁定已解除 + +注意: +- 在生产环境中谨慎使用KILL命令 +- 优先尝试让应用程序正常提交或回滚事务 +- 如果必须强制终止,确保了解可能的数据影响 +*/ \ No newline at end of file diff --git a/pages.json b/pages.json index 3f018ac..07a452e 100644 --- a/pages.json +++ b/pages.json @@ -418,6 +418,15 @@ "enablePullDownRefresh": false, "navigationBarTextStyle": "white" } + }, + { + "path": "order/serviceRecord", + "style": { + "navigationBarTitleText": "服务记录", + "navigationBarBackgroundColor": "#FFBF60", + "enablePullDownRefresh": true, + "navigationBarTextStyle": "white" + } } ] } diff --git a/pages/companionPetList/companionPetInfo.vue b/pages/companionPetList/companionPetInfo.vue index 8c58e55..548be8f 100644 --- a/pages/companionPetList/companionPetInfo.vue +++ b/pages/companionPetList/companionPetInfo.vue @@ -12,9 +12,13 @@ {{companionInfo.userName}} - sex + style="width: 40rpx;height: 40rpx;" /> --> + + sex diff --git a/pages/personalCenter/a.txt b/pages/personalCenter/a.txt new file mode 100644 index 0000000..b45e0a3 --- /dev/null +++ b/pages/personalCenter/a.txt @@ -0,0 +1,551 @@ + + + + + \ No newline at end of file diff --git a/pages/personalCenter/orderDetailImage.vue b/pages/personalCenter/orderDetailImage.vue index cfc7cb9..2295beb 100644 --- a/pages/personalCenter/orderDetailImage.vue +++ b/pages/personalCenter/orderDetailImage.vue @@ -8,34 +8,56 @@ {{ orderDate }} - - - 个人信息 + + + 个人准备 - - 手套照片 (共2张) + + + 手套照片 ({{ fileList.glove.length }}张) - + + - - 鞋套照片 (共2张) + + + + 鞋套照片 ({{ fileList.ShoeCover.length }}张) - + + - + 宠物状况记录 - - {{ pet.name }} (共{{ pet.photoCount }}张) - - - + + {{ pet.title }} ({{ getPetPhotoCount(index) }}张) + + + + @@ -43,19 +65,84 @@ - + 基础服务记录 - - {{ service.name }} + + + 粮碗前后对比 + + + + + + + + + + + + + + + + + + + 水碗前后对比 - - + + + - - + + + + + + + + + + + + 猫砂盆、尿垫前后对比 + + + + + + + + + + @@ -65,101 +152,199 @@ - + 定制服务记录 - - 遛狗 (5-30分钟) - - - - - - - - 梳毛 (5-30分钟) - - - + + {{ project.title }} ({{ getProjectPhotoCount(index) }}张) + + + + + + + 补充信息 + + {{ form.notes }} + + + + \ No newline at end of file diff --git a/pages_order/order/orderDetail.vue b/pages_order/order/orderDetail.vue index 8463347..a9e001b 100644 --- a/pages_order/order/orderDetail.vue +++ b/pages_order/order/orderDetail.vue @@ -31,13 +31,13 @@ - + 去评价 - + 再来一单 - + 查看服务记录 @@ -311,22 +311,24 @@ this.getOrderDetail(); }, - // 处理再来一单/查看服务记录 + // 处理再来一单 handleReorder() { - if (this.orderDetail.status == '3') { + if (this.orderDetail.status == '4') { // 再来一单 - 可以添加伴宠师选择弹窗 uni.showToast({ title: '再来一单功能开发中', icon: 'none' }); - } else if (this.orderDetail.status == '2') { - // 查看服务记录 - uni.navigateTo({ - url: `/pages_order/order/serviceRecord?orderId=${this.orderId}` - }); } }, + // 查看服务记录 + viewServiceRecord() { + uni.navigateTo({ + url: `/pages_order/order/serviceRecord?orderId=${this.orderId}` + }); + }, + // 修改订单 modifyOrder() { // 跳转到服务选择页面,并传递订单ID参数 diff --git a/pages_order/order/orderList.vue b/pages_order/order/orderList.vue index 51286d3..387893d 100644 --- a/pages_order/order/orderList.vue +++ b/pages_order/order/orderList.vue @@ -73,13 +73,13 @@ - + 去评价 - + 再来一单 - + 查看服务记录 @@ -181,7 +181,7 @@ }, { name: '服务中', - value: 3 + value: 11 }, { name: '已完成', @@ -304,6 +304,13 @@ url: `/pages_order/order/orderDetail?id=${orderId}` }); }, + + // 查看服务记录 + viewServiceRecord(orderId) { + uni.navigateTo({ + url: `/pages_order/order/serviceRecord?orderId=${orderId}` + }); + }, // 去付款 goToPay(orderId) { diff --git a/pages_order/order/serviceRecord.vue b/pages_order/order/serviceRecord.vue new file mode 100644 index 0000000..696b333 --- /dev/null +++ b/pages_order/order/serviceRecord.vue @@ -0,0 +1,215 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue index 7da1ae0..f124284 100644 --- a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue @@ -43,6 +43,10 @@ 'uni-calendar-item--after-checked':weeks.afterMultiple, 'uni-calendar-item--disable':weeks.disable, }">{{weeks.extraInfo.info}} --> + + 不接单 @@ -88,6 +92,9 @@ todayText() { return t("uni-calender.today") }, + isNotOrder(){ + return this.disabledDay.includes(this.weeks.fullDate) + }, }, methods: { choiceDate(weeks) {