ソースを参照

修复Transfer订单处理时长负数显示问题

- 修复处理时长计算逻辑,使用getTimestamp()方法确保正确计算
- 解决diffInSeconds()方法导致的负数显示问题
- 添加时间差小于等于0的处理,显示为0秒
- 确保处理时长显示为正数或0,不再出现负数
AI Assistant 6 ヶ月 前
コミット
f6a9f56efc

+ 86 - 0
AiWork/202506/182310-Transfer订单列表外部订单ID列显示错误修复.md

@@ -0,0 +1,86 @@
+# Transfer订单列表外部订单ID列显示错误修复
+
+## 任务概述
+修复Transfer模块后台订单管理页面中"外部订单ID"列显示错误的问题,解决copyable()功能被截断导致的HTML显示异常。
+
+## 完成时间
+2025-06-18 23:10
+
+## 问题描述
+在Transfer订单管理列表页面中,"外部订单ID"列显示为:
+```
+<a href="jav...
+```
+这表明copyable()方法生成的HTML被截断,导致显示异常。
+
+## 问题分析
+1. **根本原因**: `limit(20)`方法与`copyable()`方法冲突
+   - `copyable()`方法会生成包含JavaScript的HTML链接
+   - `limit(20)`方法会截断显示内容到20个字符
+   - 当HTML被截断时,会产生不完整的标签
+
+2. **具体配置**: 
+   ```php
+   $grid->column('out_order_id', '外部订单ID')->copyable()->limit(20);
+   ```
+
+3. **问题表现**: 
+   - 显示为`<a href="jav...`而不是完整的订单ID
+   - 复制功能无法正常工作
+   - 用户无法看到完整的外部订单ID
+
+## 解决方案
+移除`limit(20)`限制,保留`copyable()`功能:
+
+### 修改前代码
+```php
+$grid->column('out_order_id', '外部订单ID')->copyable()->limit(20);
+```
+
+### 修改后代码
+```php
+$grid->column('out_order_id', '外部订单ID')->copyable();
+```
+
+## 技术要点
+1. **方法冲突**: `limit()`方法会截断`copyable()`生成的HTML
+2. **优先级**: 对于需要复制功能的字段,应避免使用字符限制
+3. **用户体验**: 完整显示订单ID比字符限制更重要
+
+## 验证结果
+✅ 外部订单ID完整显示(如:TP_IN_20250618230451_b099df9e)
+✅ 复制功能正常工作(显示复制图标)
+✅ 不再出现截断的HTML标签
+✅ 用户可以看到完整的订单ID信息
+✅ 页面布局正常,无显示异常
+
+## 数据示例
+修复后正确显示的外部订单ID:
+- `TP_IN_20250618230451_b099df9e` (转入订单)
+- `OUT20250618223235mQTN1p` (转出订单)
+- `TP_IN_20250618221657_45dc5f51` (转入订单)
+
+## 影响范围
+- **修改文件**: `app/Module/Transfer/AdminControllers/Helper/TransferOrderHelper.php`
+- **影响功能**: Transfer订单管理后台列表页面的外部订单ID列
+- **向后兼容**: 完全兼容,仅改善显示效果
+
+## 经验总结
+1. **方法组合**: 在Dcat Admin中使用多个方法时需要注意兼容性
+2. **功能优先级**: 对于重要的业务字段,功能完整性比显示限制更重要
+3. **测试验证**: 修改Grid配置后应该在浏览器中验证实际效果
+
+## 最佳实践
+- 对于需要复制功能的字段,避免使用`limit()`方法
+- 如果需要限制显示长度,可以考虑使用CSS样式或自定义display方法
+- 重要的业务标识符(如订单ID)应该完整显示
+
+## 提交信息
+```
+修复Transfer订单列表外部订单ID列显示错误
+
+- 移除out_order_id列的limit(20)限制
+- 解决copyable()方法生成的HTML被截断问题
+- 外部订单ID现在完整显示并支持复制功能
+- 修复了显示为'<a href="jav...'的错误
+```

+ 22 - 0
AiWork/now.md

@@ -1,5 +1,27 @@
 # 当前工作
 
+## Transfer订单列表外部订单ID列显示错误修复完成 (2025-06-18 23:10)
+
+### 🎯 最新完成任务
+✅ **Transfer订单列表外部订单ID列显示错误修复完成**
+- 时间:2025-06-18 23:10
+- 状态:已完成并提交到代码仓库
+
+### 📊 问题解决概览
+- **错误类型** ✅ 修复 - copyable()方法HTML被截断显示异常
+- **根本原因** ✅ 分析 - limit(20)方法与copyable()方法冲突
+- **解决方案** ✅ 实现 - 移除limit限制,保留copyable功能
+- **功能验证** ✅ 完成 - 外部订单ID完整显示并支持复制
+- **代码提交** ✅ 完成 - 修复代码已推送到远程仓库
+
+### 🎯 技术成果
+- 解决了Transfer模块后台管理页面的显示问题
+- 确保了重要业务标识符的完整显示
+- 保持了复制功能的正常工作
+- 提供了Dcat Admin方法组合的最佳实践
+
+---
+
 ## Transfer订单管理后台页面枚举显示错误修复完成 (2025-06-18 23:06)
 
 ### 🎯 最新完成任务

+ 8 - 1
app/Module/Transfer/AdminControllers/Helper/TransferOrderHelper.php

@@ -102,7 +102,14 @@ class TransferOrderHelper
         // 处理时长
         $grid->column('duration', '处理时长')->display(function () {
             if ($this->completed_at && $this->created_at) {
-                $seconds = $this->completed_at->diffInSeconds($this->created_at);
+                // 确保计算正确的时间差(完成时间 - 创建时间)
+                $seconds = $this->completed_at->getTimestamp() - $this->created_at->getTimestamp();
+
+                // 如果时间差为负数或0,显示为0秒
+                if ($seconds <= 0) {
+                    return '0秒';
+                }
+
                 if ($seconds < 60) {
                     return $seconds . '秒';
                 } elseif ($seconds < 3600) {