Quellcode durchsuchen

feat(user): 添加用户取消登录功能

- 在用户列表页面添加取消登录操作按钮
- 实现用户取消登录的后端逻辑
- 优化用户登录状态管理
notfff vor 7 Monaten
Ursprung
Commit
602215c0ce

+ 76 - 0
AiWork/202506/072103-修复配方新增失败问题.md

@@ -0,0 +1,76 @@
+# 修复配方新增失败问题
+
+## 任务时间
+- 开始时间:2025年06月07日 21:03:09 CST
+- 完成时间:2025年06月07日 21:07:00 CST
+
+## 问题描述
+配方新增功能失败,访问 http://kku_laravel.local.gd/admin/game-items-recipes/create 时出现数据库字段缺失错误。
+
+## 错误日志
+```
+[2025-06-07T21:02:46.043654+08:00] laravel.ERROR: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'success_rate' in 'field list' (Connection: mysql, SQL: insert into `kku_item_recipes` (`name`, `code`, `description`, `consume_group_id`, `reward_group_id`, `condition_group_id`, `success_rate`, `cooldown_seconds`, `sort_order`, `is_active`, `updated_at`, `created_at`) values (合成钢铁, gangtie, ?, 28, 38, ?, 1, 0, 0, 1, 2025-06-07 21:02:46, 2025-06-07 21:02:46))
+```
+
+## 问题分析
+数据库表 `kku_item_recipes` 中缺少 `success_rate` 和 `cooldown_seconds` 字段,但控制器和模型代码中使用了这些字段,导致数据库结构与代码不一致。
+
+## 解决方案
+
+### 1. 数据库结构修复
+为 `kku_item_recipes` 表添加缺失的字段:
+```sql
+ALTER TABLE kku_item_recipes 
+ADD COLUMN success_rate decimal(5,4) DEFAULT 1.0000 COMMENT '成功率(0-1之间的小数)' AFTER condition_group_id,
+ADD COLUMN cooldown_seconds int DEFAULT 0 COMMENT '冷却时间(秒)' AFTER success_rate;
+```
+
+### 2. 模型更新
+更新 `app/Module/GameItems/Models/ItemRecipe.php`:
+- 在字段注释中添加 `success_rate` 和 `cooldown_seconds` 字段
+- 在 `$fillable` 数组中添加这两个字段
+- 在 `$casts` 数组中添加字段类型转换
+
+### 3. SQL文件更新
+更新 `app/Module/GameItems/Databases/GenerateSql/item_recipes.sql` 文件,添加缺失的字段定义。
+
+## 测试验证
+使用MCP浏览器测试配方新增功能:
+1. 访问创建页面:http://kku_laravel.local.gd/admin/game-items-recipes/create
+2. 填写表单数据:
+   - 配方名称:测试钢铁合成
+   - 配方编码:test_steel_craft
+   - 配方描述:测试钢铁合成配方
+   - 消耗组:合成消耗: 铜矿石冶炼
+   - 奖励组:合成奖励: 钢材制作
+   - 成功率:1(100%)
+   - 冷却时间:0秒
+3. 提交表单成功,显示"保存成功 !"消息
+
+## 数据验证
+```sql
+SELECT * FROM kku_item_recipes WHERE code = 'test_steel_craft';
+```
+结果显示数据成功插入,包括新添加的字段都正确保存。
+
+## 修改文件
+- `app/Module/GameItems/Models/ItemRecipe.php`
+- `app/Module/GameItems/Databases/GenerateSql/item_recipes.sql`
+
+## Git提交
+```bash
+git add .
+git commit -m "修复配方新增失败问题:添加缺失的success_rate和cooldown_seconds字段
+
+- 为kku_item_recipes表添加success_rate和cooldown_seconds字段
+- 更新ItemRecipe模型的fillable和casts属性
+- 更新自动生成的SQL文件
+- 通过MCP测试验证修复成功"
+git push
+```
+
+## 任务结果
+✅ 配方新增功能修复成功
+✅ 数据库结构与代码保持一致
+✅ 通过MCP测试验证功能正常
+✅ 代码已提交并推送到远程仓库

+ 7 - 4
AiWork/WORK.md

@@ -25,6 +25,12 @@ shop_items 的 $max_buy 确认被替代后移除,使用mcp执行sql
 
 ## 已完成任务(保留最新的10条,多余的删除)
 
+**2025-06-07 21:03** - 修复配方新增失败问题:添加缺失的success_rate和cooldown_seconds字段
+- 问题:配方新增功能失败,数据库表kku_item_recipes中缺少success_rate和cooldown_seconds字段
+- 修复:为数据库表添加缺失字段,更新ItemRecipe模型的fillable和casts属性,更新自动生成的SQL文件
+- 验证:通过MCP浏览器测试配方新增功能,成功创建测试配方,数据正确保存到数据库
+- 文件:./AiWork/202506/072103-修复配方新增失败问题.md
+
 **2025-06-07 19:06** - 为合成配方和分解规则管理页面增加行复制功能:实现快速复制配置创建新记录
 - 需求:合成配方/分解配方管理页面,增加行复制功能
 - 实现:创建DuplicateItemRecipeAction和DuplicateItemDismantleRuleAction,实现复制逻辑,包含确认对话框、自动跳转编辑页面、唯一编码生成
@@ -82,10 +88,7 @@ shop_items 的 $max_buy 确认被替代后移除,使用mcp执行sql
 - 修复:移除错误的事务检查调用,为每个操作添加独立事务管理,修复自动播种和收获方法
 - 结果:命令正常运行,自动播种功能成功种植8块土地,所有宠物技能正常工作
 
-**2025-06-06 20:05** - 修复宠物技能名称使用PET_SKILL_NAME枚举:正确统一技能名称,移除错误的技能映射
-- 问题:ProcessActiveSkillsJob中使用了错误的技能名称('自动收菜'、'自动播种'),与数据库实际存储不符
-- 修复:查询数据库确认实际技能名称,修正枚举定义,统一使用正确的技能名称
-- 结果:PET_SKILL_NAME枚举只包含5个实际存在的技能,代码与数据库完全一致
+
 
 ## 任务管理说明
 

+ 47 - 0
app/Module/AppGame/AdminControllers/Actions/ResetLogin.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace App\Module\AppGame\AdminControllers\Actions;
+
+use App\Module\AppGame\SessionApp;
+use UCore\DcatAdmin\RowAction;
+use UCore\DcatAdmin\RowAction2;
+use Illuminate\Http\Request;
+use UCore\DcatAdmin\RowActionHandler;
+
+/**
+ * 取消登陆
+ * 重置登陆
+ */
+class ResetLogin extends RowActionHandler
+{
+
+    protected $title ='取消登陆';
+
+    /**
+     * 处理请求
+     *
+     * @param Request $request
+     *
+     * @return \Dcat\Admin\Actions\Response
+     */
+    public function handle(Request $request)
+    {
+        // 获取当前行ID
+        $user_id = $this->getKey();
+        SessionApp::deleteUAll($user_id);
+        return $this->response()->success("删除用户登陆成功: [{$user_id}]")->refresh();
+    }
+
+    public function confirm()
+    {
+        return [
+            // 确认弹窗 title
+            "您确定要取消这个用户的登陆么?",
+            // 确认弹窗 content
+            $this->row->username,
+        ];
+    }
+
+
+
+}

+ 12 - 0
app/Module/AppGame/SessionApp.php

@@ -129,6 +129,18 @@ class SessionApp extends TokenSession
         \Illuminate\Support\Facades\Cache::set('ukeys' . $uid, [ $last ], static::$ttl);
     }
 
+    /**
+     * 删除用户的所有
+     * @param $uid
+     * @return null
+     * @throws LogicException
+     */
+    static public function deleteUAll($uid = null)
+    {
+        return self::removeUKeys($uid);
+    }
+
+
     /**
      * 保存用户 keys
      *

+ 2 - 1
app/Module/User/AdminControllers/UserController.php

@@ -2,6 +2,7 @@
 
 namespace App\Module\User\AdminControllers;
 
+use App\Module\AppGame\AdminControllers\Actions\ResetLogin;
 use App\Module\User\AdminControllers\Actions\ChangePasswordAction;
 use App\Module\User\AdminControllers\Actions\UserRelatedPagesAction;
 use App\Module\User\AdminControllers\Helper\FilterHelper;
@@ -86,7 +87,7 @@ class UserController extends AdminController
 
                 // 添加修改密码操作
                 $actions->append(new ChangePasswordAction());
-
+                $actions->append(ResetLogin::make());
                 // 添加相关页面链接操作
                 $actions->append(new UserRelatedPagesAction());
             });