|
|
@@ -0,0 +1,128 @@
|
|
|
+# 用户日志管理页面来源表名列可点击跳转功能
|
|
|
+
|
|
|
+## 任务概述
|
|
|
+实现后台用户日志管理页面中"来源表名"列的可点击功能,点击后能够跳转到对应来源记录的详情页面。
|
|
|
+
|
|
|
+## 需求分析
|
|
|
+- 用户日志表中的source_table字段记录了日志来源的数据库表名
|
|
|
+- source_id字段记录了来源记录的ID
|
|
|
+- 需要建立表名到后台管理页面路由的映射关系
|
|
|
+- 点击来源表名时在新标签页打开对应的详情页面
|
|
|
+
|
|
|
+## 实现方案
|
|
|
+
|
|
|
+### 1. 修改UserLogController
|
|
|
+在`app/Module/Game/AdminControllers/UserLogController.php`中:
|
|
|
+
|
|
|
+#### 修改source_table列的display方法
|
|
|
+```php
|
|
|
+$grid->column('source_table', '来源表名')
|
|
|
+ ->limit(20)
|
|
|
+ ->display(function ($value) {
|
|
|
+ if (!$value || !$this->source_id) {
|
|
|
+ return $value;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取对应的后台管理页面URL
|
|
|
+ $url = self::getSourceDetailUrl($value, $this->source_id);
|
|
|
+
|
|
|
+ if ($url) {
|
|
|
+ return "<a href=\"{$url}\" target=\"_blank\" class=\"text-primary\" title=\"查看来源详情\">" .
|
|
|
+ "<i class=\"fa fa-external-link\"></i> {$value}</a>";
|
|
|
+ }
|
|
|
+
|
|
|
+ return $value;
|
|
|
+ });
|
|
|
+```
|
|
|
+
|
|
|
+#### 添加getSourceDetailUrl静态方法
|
|
|
+```php
|
|
|
+/**
|
|
|
+ * 获取来源详情页面URL
|
|
|
+ *
|
|
|
+ * @param string $sourceTable 来源表名
|
|
|
+ * @param int $sourceId 来源记录ID
|
|
|
+ * @return string|null 详情页面URL,null表示无对应页面
|
|
|
+ */
|
|
|
+public static function getSourceDetailUrl(string $sourceTable, int $sourceId): ?string
|
|
|
+{
|
|
|
+ // 来源表名到后台路由的映射关系
|
|
|
+ $tableRouteMap = [
|
|
|
+ 'fund_logs' => 'fund-logs',
|
|
|
+ 'item_transaction_logs' => 'game-items-transaction-logs',
|
|
|
+ 'farm_harvest_logs' => 'farm-harvest-logs',
|
|
|
+ 'farm_upgrade_logs' => 'farm-upgrade-logs',
|
|
|
+ 'pet_battle_logs' => 'pet-battle-logs',
|
|
|
+ 'pet_skill_logs' => 'pet-skill-logs',
|
|
|
+ 'task_reward_logs' => 'task-reward-logs',
|
|
|
+ 'task_reset_logs' => 'task-reset-logs',
|
|
|
+ 'game_items_dismantle_logs' => 'game-items-dismantle-logs',
|
|
|
+ 'system_logs' => 'system-logs',
|
|
|
+ ];
|
|
|
+
|
|
|
+ // 检查是否有对应的路由
|
|
|
+ if (!isset($tableRouteMap[$sourceTable])) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ $route = $tableRouteMap[$sourceTable];
|
|
|
+
|
|
|
+ // 生成详情页面URL
|
|
|
+ return admin_url("{$route}/{$sourceId}");
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+## 功能特性
|
|
|
+
|
|
|
+### 1. 智能链接生成
|
|
|
+- 只有当source_table和source_id都存在时才生成链接
|
|
|
+- 无对应后台管理页面的表名显示为普通文本
|
|
|
+- 支持多种来源表类型的路由映射
|
|
|
+
|
|
|
+### 2. 用户体验优化
|
|
|
+- 链接在新标签页打开,不影响当前页面
|
|
|
+- 添加外部链接图标提示用户这是可点击的
|
|
|
+- 鼠标悬停显示"查看来源详情"提示
|
|
|
+
|
|
|
+### 3. 扩展性设计
|
|
|
+- 路由映射关系集中管理,便于维护
|
|
|
+- 新增来源表类型只需在映射数组中添加配置
|
|
|
+- 方法设计为静态方法,便于其他地方复用
|
|
|
+
|
|
|
+## 测试验证
|
|
|
+
|
|
|
+### 1. 功能测试
|
|
|
+- ✅ 页面正常加载,无错误
|
|
|
+- ✅ fund_logs等已配置的表名显示为可点击链接
|
|
|
+- ✅ 点击链接能正确跳转到对应的详情页面
|
|
|
+- ✅ 未配置的表名显示为普通文本
|
|
|
+
|
|
|
+### 2. 用户体验测试
|
|
|
+- ✅ 链接在新标签页打开
|
|
|
+- ✅ 外部链接图标正确显示
|
|
|
+- ✅ 鼠标悬停提示正常工作
|
|
|
+
|
|
|
+## 技术要点
|
|
|
+
|
|
|
+### 1. Dcat Admin Grid Column
|
|
|
+- 使用display方法自定义列显示内容
|
|
|
+- 在回调函数中通过$this访问当前行的模型属性
|
|
|
+- HTML内容需要正确处理转义
|
|
|
+
|
|
|
+### 2. 路由映射设计
|
|
|
+- 建立数据库表名到后台路由的映射关系
|
|
|
+- 使用admin_url()函数生成正确的后台URL
|
|
|
+- 考虑路由不存在的异常情况
|
|
|
+
|
|
|
+### 3. 前端交互
|
|
|
+- target="_blank"实现新标签页打开
|
|
|
+- Font Awesome图标增强视觉效果
|
|
|
+- CSS类名提供样式支持
|
|
|
+
|
|
|
+## 代码提交
|
|
|
+- 提交信息:实现用户日志管理页面来源表名列可点击跳转功能
|
|
|
+- 修改文件:app/Module/Game/AdminControllers/UserLogController.php
|
|
|
+- 提交哈希:cf906f95
|
|
|
+
|
|
|
+## 总结
|
|
|
+成功实现了用户日志管理页面来源表名列的可点击跳转功能,提升了后台管理的用户体验。通过建立表名到路由的映射关系,实现了灵活的跳转机制,便于运营人员快速查看日志来源的详细信息。
|