Ver Fonte

feat(system): 添加系统配置和日志管理功能

- 新增系统配置管理控制器(ConfigAdminController)和系统日志管理控制器(SystemLogController)- 实现了配置项的列表、详情、表单功能,以及日志的列表和详情功能- 添加了相关的筛选器、表单字段和列表列的辅助类和特性
- 集成了配置缓存刷新功能
Your Name há 8 meses atrás
pai
commit
ac1a1a7a99

+ 194 - 0
app/Module/System/AdminControllers/ConfigAdminController.php

@@ -0,0 +1,194 @@
+<?php
+
+namespace App\Module\System\AdminControllers;
+
+use App\Module\System\AdminControllers\Helper\FilterHelper;
+use App\Module\System\AdminControllers\Helper\FormHelper;
+use App\Module\System\AdminControllers\Helper\GridHelper;
+use App\Module\System\AdminControllers\Helper\ShowHelper;
+use App\Module\System\Enums\CONFIG_TYPE;
+use App\Module\System\Models\AppConfig;
+use App\Module\System\Services\ConfigService;
+use Dcat\Admin\Form;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Show;
+use Spatie\RouteAttributes\Attributes\Resource;
+use UCore\DcatAdmin\AdminController;
+
+/**
+ * 系统配置管理控制器
+ */
+#[Resource('system-configs-admin', names: 'dcat.admin.system-configs-admin')]
+class ConfigAdminController extends AdminController
+{
+    /**
+     * 页面标题
+     *
+     * @var string
+     */
+    protected $title = '系统配置管理';
+    
+    /**
+     * 配置服务
+     *
+     * @var ConfigService
+     */
+    protected $service;
+
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->service = new ConfigService();
+    }
+
+    /**
+     * 列表页面
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        return Grid::make(new AppConfig(), function (Grid $grid) {
+            $helper = new GridHelper($grid, $this);
+            
+            $helper->columnId();
+            $helper->columnKeyname();
+            $helper->columnTitle();
+            $helper->columnConfigType();
+            $helper->columnValue();
+            $helper->columnGroup();
+            $helper->columnGroup2();
+            $helper->columnIsClient();
+            $helper->columnCreatedAt();
+            $helper->columnUpdatedAt();
+            
+            // 添加刷新缓存按钮
+            $grid->tools(function (Grid\Tools $tools) {
+                $tools->append(new \Dcat\Admin\Grid\Tools\BatchAction('刷新缓存', function () {
+                    $this->service->refreshCache();
+                    return $this->response()->success('缓存刷新成功')->refresh();
+                }));
+            });
+            
+            // 筛选器
+            $grid->filter(function (Grid\Filter $filter) {
+                $helper = new FilterHelper($filter, $this);
+                $helper->equalId();
+                $helper->likeKeyname();
+                $helper->likeTitle();
+                $helper->equalConfigType();
+                $helper->likeValue();
+                $helper->equalGroup();
+                $helper->equalGroup2();
+                $helper->equalIsClient();
+                $helper->betweenCreatedAt();
+            });
+        });
+    }
+
+    /**
+     * 详情页面
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        return Show::make($id, new AppConfig(), function (Show $show) {
+            $helper = new ShowHelper($show, $this);
+            
+            $helper->fieldId();
+            $helper->fieldKeyname();
+            $helper->fieldTitle();
+            $helper->fieldConfigType();
+            $helper->fieldValue();
+            $helper->fieldGroup();
+            $helper->fieldGroup2();
+            $helper->fieldDesc();
+            $helper->fieldOptions();
+            $helper->fieldIsClient();
+            $helper->fieldCreatedAt();
+            $helper->fieldUpdatedAt();
+            $helper->fieldDeletedAt();
+        });
+    }
+
+    /**
+     * 表单页面
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        return Form::make(new AppConfig(), function (Form $form) {
+            $helper = new FormHelper($form, $this);
+            
+            $form->display('id', 'ID');
+            $helper->textKeyname();
+            $helper->textTitle();
+            $helper->selectConfigType();
+            $helper->textareaValue();
+            $helper->textGroup();
+            $helper->textGroup2();
+            $helper->textareaDesc();
+            $helper->textareaOptions();
+            $helper->switchIsClient();
+            
+            $form->display('created_at', '创建时间');
+            $form->display('updated_at', '更新时间');
+            
+            // 保存前回调
+            $form->saving(function (Form $form) {
+                // 处理选项
+                if ($form->options) {
+                    try {
+                        $options = json_decode($form->options, true);
+                        if (json_last_error() !== JSON_ERROR_NONE) {
+                            return $form->response()->error('选项不是有效的JSON格式');
+                        }
+                        $form->options = $options;
+                    } catch (\Exception $e) {
+                        return $form->response()->error('选项处理失败: ' . $e->getMessage());
+                    }
+                }
+                
+                // 根据类型处理值
+                if ($form->type && $form->value) {
+                    try {
+                        switch ($form->type) {
+                            case CONFIG_TYPE::TYPE_INT->value:
+                                $form->value = (int)$form->value;
+                                break;
+                            case CONFIG_TYPE::TYPE_FLOAT->value:
+                                $form->value = (float)$form->value;
+                                break;
+                            case CONFIG_TYPE::TYPE_BOOL->value:
+                            case CONFIG_TYPE::TYPE_IS->value:
+                                $form->value = (bool)$form->value;
+                                break;
+                            case CONFIG_TYPE::TYPE_JSON->value:
+                            case CONFIG_TYPE::TYPE_EMBEDS->value:
+                                $value = json_decode($form->value, true);
+                                if (json_last_error() !== JSON_ERROR_NONE) {
+                                    return $form->response()->error('值不是有效的JSON格式');
+                                }
+                                $form->value = $value;
+                                break;
+                        }
+                    } catch (\Exception $e) {
+                        return $form->response()->error('值处理失败: ' . $e->getMessage());
+                    }
+                }
+            });
+            
+            // 保存后回调
+            $form->saved(function (Form $form) {
+                // 刷新缓存
+                $this->service->refreshCache();
+                return $form->response()->success('保存成功,缓存已刷新');
+            });
+        });
+    }
+}

+ 15 - 0
app/Module/System/AdminControllers/Helper/FilterHelper.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use UCore\DcatAdmin\FilterHelper as BaseFilterHelper;
+
+/**
+ * 筛选器辅助类
+ *
+ * 提供系统模块后台控制器的筛选器构建功能
+ */
+class FilterHelper extends BaseFilterHelper
+{
+    use FilterHelperTrait;
+}

+ 202 - 0
app/Module/System/AdminControllers/Helper/FilterHelperTrait.php

@@ -0,0 +1,202 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use App\Module\System\Enums\CONFIG_TYPE;
+use App\Module\System\Enums\VIEW_TYPE;
+use Dcat\Admin\Grid\Filter;
+use Dcat\Admin\Grid\Filter\Presenter\Presenter;
+
+/**
+ * 筛选器辅助特性
+ *
+ * 提供系统模块后台控制器的筛选器构建功能的具体实现
+ */
+trait FilterHelperTrait
+{
+    /**
+     * 添加ID筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function equalId(string $field = 'id', string $label = 'ID'): Filter\AbstractFilter
+    {
+        return $this->filter->equal($field, $label);
+    }
+
+    /**
+     * 添加配置键名筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function likeKeyname(string $field = 'keyname', string $label = '键名'): Filter\AbstractFilter
+    {
+        return $this->filter->like($field, $label);
+    }
+
+    /**
+     * 添加配置标题筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function likeTitle(string $field = 'title', string $label = '标题'): Filter\AbstractFilter
+    {
+        return $this->filter->like($field, $label);
+    }
+
+    /**
+     * 添加配置类型筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Presenter
+     */
+    public function equalConfigType(string $field = 'type', string $label = '类型'): Presenter
+    {
+        return $this->filter->equal($field, $label)->select([
+            CONFIG_TYPE::TYPE_INT->value => '整数',
+            CONFIG_TYPE::TYPE_IMG->value => '图片',
+            CONFIG_TYPE::TYPE_BOOL->value => '布尔值',
+            CONFIG_TYPE::TYPE_STRING->value => '字符串',
+            CONFIG_TYPE::TYPE_FLOAT->value => '浮点数',
+            CONFIG_TYPE::TYPE_FILE->value => '文件',
+            CONFIG_TYPE::TYPE_PERCENTAGE->value => '百分比',
+            CONFIG_TYPE::TYPE_TIME->value => '时间',
+            CONFIG_TYPE::TYPE_IS->value => '是否',
+            CONFIG_TYPE::TYPE_JSON->value => 'JSON数组',
+            CONFIG_TYPE::TYPE_EMBEDS->value => 'JSON键值对',
+        ]);
+    }
+
+    /**
+     * 添加配置值筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function likeValue(string $field = 'value', string $label = '值'): Filter\AbstractFilter
+    {
+        return $this->filter->like($field, $label);
+    }
+
+    /**
+     * 添加配置分组筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function equalGroup(string $field = 'group', string $label = '分组'): Filter\AbstractFilter
+    {
+        return $this->filter->equal($field, $label);
+    }
+
+    /**
+     * 添加配置子分组筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function equalGroup2(string $field = 'group2', string $label = '子分组'): Filter\AbstractFilter
+    {
+        return $this->filter->equal($field, $label);
+    }
+
+    /**
+     * 添加配置描述筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function likeDesc(string $field = 'desc', string $label = '描述'): Filter\AbstractFilter
+    {
+        return $this->filter->like($field, $label);
+    }
+
+    /**
+     * 添加是否客户端可用筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Presenter
+     */
+    public function equalIsClient(string $field = 'is_client', string $label = '客户端可用'): Presenter
+    {
+        return $this->filter->equal($field, $label)->select([
+            0 => '否',
+            1 => '是',
+        ]);
+    }
+
+    /**
+     * 添加视图类型筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Presenter
+     */
+    public function equalViewType(string $field = 'type1', string $label = '视图类型'): Presenter
+    {
+        return $this->filter->equal($field, $label)->select([
+            VIEW_TYPE::PRIVATE->value => '私有',
+            VIEW_TYPE::PUBLIC->value => '公共',
+        ]);
+    }
+
+    /**
+     * 添加路由名称筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function likeRouterName(string $field = 'router_name', string $label = '路由名称'): Filter\AbstractFilter
+    {
+        return $this->filter->like($field, $label);
+    }
+
+    /**
+     * 添加管理员ID筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function equalAdminId(string $field = 'admin_id', string $label = '管理员ID'): Filter\AbstractFilter
+    {
+        return $this->filter->equal($field, $label);
+    }
+
+    /**
+     * 添加创建时间筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function betweenCreatedAt(string $field = 'created_at', string $label = '创建时间'): Filter\AbstractFilter
+    {
+        return $this->filter->between($field, $label)->datetime();
+    }
+
+    /**
+     * 添加更新时间筛选
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Filter\AbstractFilter
+     */
+    public function betweenUpdatedAt(string $field = 'updated_at', string $label = '更新时间'): Filter\AbstractFilter
+    {
+        return $this->filter->between($field, $label)->datetime();
+    }
+}

+ 15 - 0
app/Module/System/AdminControllers/Helper/FormHelper.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use UCore\DcatAdmin\FormHelper as BaseFormHelper;
+
+/**
+ * 表单辅助类
+ *
+ * 提供系统模块后台控制器的表单构建功能
+ */
+class FormHelper extends BaseFormHelper
+{
+    use FormHelperTrait;
+}

+ 200 - 0
app/Module/System/AdminControllers/Helper/FormHelperTrait.php

@@ -0,0 +1,200 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use App\Module\System\Enums\CONFIG_TYPE;
+use App\Module\System\Enums\VIEW_TYPE;
+use Dcat\Admin\Form;
+use Dcat\Admin\Form\Field;
+
+/**
+ * 表单辅助特性
+ *
+ * 提供系统模块后台控制器的表单构建功能的具体实现
+ */
+trait FormHelperTrait
+{
+    /**
+     * 添加配置键名输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Text
+     */
+    public function textKeyname(string $field = 'keyname', string $label = '键名'): Field\Text
+    {
+        return $this->form->text($field, $label)
+            ->required()
+            ->rules('required|max:100|unique:app_configs,keyname,{{id}}')
+            ->help('配置键名,唯一标识,不可重复');
+    }
+
+    /**
+     * 添加配置标题输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Text
+     */
+    public function textTitle(string $field = 'title', string $label = '标题'): Field\Text
+    {
+        return $this->form->text($field, $label)
+            ->required()
+            ->rules('required|max:100')
+            ->help('配置标题,用于显示');
+    }
+
+    /**
+     * 添加配置类型选择
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Select
+     */
+    public function selectConfigType(string $field = 'type', string $label = '类型'): Field\Select
+    {
+        return $this->form->select($field, $label)
+            ->options([
+                CONFIG_TYPE::TYPE_INT->value => '整数',
+                CONFIG_TYPE::TYPE_IMG->value => '图片',
+                CONFIG_TYPE::TYPE_BOOL->value => '布尔值',
+                CONFIG_TYPE::TYPE_STRING->value => '字符串',
+                CONFIG_TYPE::TYPE_FLOAT->value => '浮点数',
+                CONFIG_TYPE::TYPE_FILE->value => '文件',
+                CONFIG_TYPE::TYPE_PERCENTAGE->value => '百分比',
+                CONFIG_TYPE::TYPE_TIME->value => '时间',
+                CONFIG_TYPE::TYPE_IS->value => '是否',
+                CONFIG_TYPE::TYPE_JSON->value => 'JSON数组',
+                CONFIG_TYPE::TYPE_EMBEDS->value => 'JSON键值对',
+            ])
+            ->required()
+            ->help('配置值的数据类型');
+    }
+
+    /**
+     * 添加配置值输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Textarea
+     */
+    public function textareaValue(string $field = 'value', string $label = '值'): Field\Textarea
+    {
+        return $this->form->textarea($field, $label)
+            ->rows(3)
+            ->help('配置的值,根据类型不同有不同的格式要求');
+    }
+
+    /**
+     * 添加配置分组输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Text
+     */
+    public function textGroup(string $field = 'group', string $label = '分组'): Field\Text
+    {
+        return $this->form->text($field, $label)
+            ->help('配置分组,用于分类管理');
+    }
+
+    /**
+     * 添加配置子分组输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Text
+     */
+    public function textGroup2(string $field = 'group2', string $label = '子分组'): Field\Text
+    {
+        return $this->form->text($field, $label)
+            ->help('配置子分组,用于更细粒度的分类管理');
+    }
+
+    /**
+     * 添加配置描述输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Textarea
+     */
+    public function textareaDesc(string $field = 'desc', string $label = '描述'): Field\Textarea
+    {
+        return $this->form->textarea($field, $label)
+            ->rows(3)
+            ->help('配置的详细描述');
+    }
+
+    /**
+     * 添加配置选项输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Textarea
+     */
+    public function textareaOptions(string $field = 'options', string $label = '选项'): Field\Textarea
+    {
+        return $this->form->textarea($field, $label)
+            ->rows(3)
+            ->help('JSON格式的选项配置,如:{"option1":"选项1","option2":"选项2"}');
+    }
+
+    /**
+     * 添加是否客户端可用选择
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Switch
+     */
+    public function switchIsClient(string $field = 'is_client', string $label = '客户端可用'): Field\Switch
+    {
+        return $this->form->switch($field, $label)
+            ->default(false)
+            ->help('是否允许客户端访问此配置');
+    }
+
+    /**
+     * 添加视图类型选择
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Select
+     */
+    public function selectViewType(string $field = 'type1', string $label = '视图类型'): Field\Select
+    {
+        return $this->form->select($field, $label)
+            ->options([
+                VIEW_TYPE::PRIVATE->value => '私有',
+                VIEW_TYPE::PUBLIC->value => '公共',
+            ])
+            ->default(VIEW_TYPE::PRIVATE->value)
+            ->help('视图的访问权限类型');
+    }
+
+    /**
+     * 添加路由名称输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Text
+     */
+    public function textRouterName(string $field = 'router_name', string $label = '路由名称'): Field\Text
+    {
+        return $this->form->text($field, $label)
+            ->help('视图对应的路由名称');
+    }
+
+    /**
+     * 添加参数输入
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Field\Textarea
+     */
+    public function textareaParams(string $field = 'p1', string $label = '参数'): Field\Textarea
+    {
+        return $this->form->textarea($field, $label)
+            ->rows(3)
+            ->help('JSON格式的参数配置');
+    }
+}

+ 15 - 0
app/Module/System/AdminControllers/Helper/GridHelper.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use UCore\DcatAdmin\GridHelper as BaseGridHelper;
+
+/**
+ * 列表页辅助类
+ *
+ * 提供系统模块后台控制器的列表页构建功能
+ */
+class GridHelper extends BaseGridHelper
+{
+    use GridHelperTrait;
+}

+ 210 - 0
app/Module/System/AdminControllers/Helper/GridHelperTrait.php

@@ -0,0 +1,210 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use App\Module\System\Enums\CONFIG_TYPE;
+use App\Module\System\Enums\VIEW_TYPE;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Grid\Column;
+
+/**
+ * 列表页辅助特性
+ *
+ * 提供系统模块后台控制器的列表页构建功能的具体实现
+ */
+trait GridHelperTrait
+{
+    /**
+     * 添加ID列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnId(string $field = 'id', string $label = 'ID'): Column
+    {
+        return $this->grid->column($field, $label)->sortable();
+    }
+
+    /**
+     * 添加配置键名列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnKeyname(string $field = 'keyname', string $label = '键名'): Column
+    {
+        return $this->grid->column($field, $label);
+    }
+
+    /**
+     * 添加配置标题列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnTitle(string $field = 'title', string $label = '标题'): Column
+    {
+        return $this->grid->column($field, $label);
+    }
+
+    /**
+     * 添加配置类型列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnConfigType(string $field = 'type', string $label = '类型'): Column
+    {
+        return $this->grid->column($field, $label)->display(function ($value) {
+            $types = [
+                CONFIG_TYPE::TYPE_INT->value => '整数',
+                CONFIG_TYPE::TYPE_IMG->value => '图片',
+                CONFIG_TYPE::TYPE_BOOL->value => '布尔值',
+                CONFIG_TYPE::TYPE_STRING->value => '字符串',
+                CONFIG_TYPE::TYPE_FLOAT->value => '浮点数',
+                CONFIG_TYPE::TYPE_FILE->value => '文件',
+                CONFIG_TYPE::TYPE_PERCENTAGE->value => '百分比',
+                CONFIG_TYPE::TYPE_TIME->value => '时间',
+                CONFIG_TYPE::TYPE_IS->value => '是否',
+                CONFIG_TYPE::TYPE_JSON->value => 'JSON数组',
+                CONFIG_TYPE::TYPE_EMBEDS->value => 'JSON键值对',
+            ];
+            return $types[$value] ?? '未知类型';
+        });
+    }
+
+    /**
+     * 添加配置值列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @param int $limit 限制长度
+     * @return Column
+     */
+    public function columnValue(string $field = 'value', string $label = '值', int $limit = 30): Column
+    {
+        return $this->grid->column($field, $label)->limit($limit);
+    }
+
+    /**
+     * 添加配置分组列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnGroup(string $field = 'group', string $label = '分组'): Column
+    {
+        return $this->grid->column($field, $label);
+    }
+
+    /**
+     * 添加配置子分组列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnGroup2(string $field = 'group2', string $label = '子分组'): Column
+    {
+        return $this->grid->column($field, $label);
+    }
+
+    /**
+     * 添加配置描述列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @param int $limit 限制长度
+     * @return Column
+     */
+    public function columnDesc(string $field = 'desc', string $label = '描述', int $limit = 30): Column
+    {
+        return $this->grid->column($field, $label)->limit($limit);
+    }
+
+    /**
+     * 添加是否客户端可用列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnIsClient(string $field = 'is_client', string $label = '客户端可用'): Column
+    {
+        return $this->grid->column($field, $label)->bool();
+    }
+
+    /**
+     * 添加视图类型列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnViewType(string $field = 'type1', string $label = '视图类型'): Column
+    {
+        return $this->grid->column($field, $label)->display(function ($value) {
+            if ($value instanceof VIEW_TYPE) {
+                return match($value) {
+                    VIEW_TYPE::PRIVATE => '私有',
+                    VIEW_TYPE::PUBLIC => '公共',
+                    default => $value->value
+                };
+            }
+            return $value;
+        });
+    }
+
+    /**
+     * 添加路由名称列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnRouterName(string $field = 'router_name', string $label = '路由名称'): Column
+    {
+        return $this->grid->column($field, $label);
+    }
+
+    /**
+     * 添加管理员ID列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnAdminId(string $field = 'admin_id', string $label = '管理员ID'): Column
+    {
+        return $this->grid->column($field, $label);
+    }
+
+    /**
+     * 添加创建时间列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnCreatedAt(string $field = 'created_at', string $label = '创建时间'): Column
+    {
+        return $this->grid->column($field, $label)->sortable();
+    }
+
+    /**
+     * 添加更新时间列
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Column
+     */
+    public function columnUpdatedAt(string $field = 'updated_at', string $label = '更新时间'): Column
+    {
+        return $this->grid->column($field, $label)->sortable();
+    }
+}

+ 15 - 0
app/Module/System/AdminControllers/Helper/ShowHelper.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use UCore\DcatAdmin\ShowHelper as BaseShowHelper;
+
+/**
+ * 详情页辅助类
+ *
+ * 提供系统模块后台控制器的详情页构建功能
+ */
+class ShowHelper extends BaseShowHelper
+{
+    use ShowHelperTrait;
+}

+ 233 - 0
app/Module/System/AdminControllers/Helper/ShowHelperTrait.php

@@ -0,0 +1,233 @@
+<?php
+
+namespace App\Module\System\AdminControllers\Helper;
+
+use App\Module\System\Enums\CONFIG_TYPE;
+use App\Module\System\Enums\VIEW_TYPE;
+use Dcat\Admin\Show;
+
+/**
+ * 详情页辅助特性
+ *
+ * 提供系统模块后台控制器的详情页构建功能的具体实现
+ */
+trait ShowHelperTrait
+{
+    /**
+     * 显示配置键名
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldKeyname(string $field = 'keyname', string $label = '键名'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示配置标题
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldTitle(string $field = 'title', string $label = '标题'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示配置类型
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldConfigType(string $field = 'type', string $label = '类型'): Show\Field
+    {
+        return $this->show->field($field, $label)->as(function ($value) {
+            $types = [
+                CONFIG_TYPE::TYPE_INT->value => '整数',
+                CONFIG_TYPE::TYPE_IMG->value => '图片',
+                CONFIG_TYPE::TYPE_BOOL->value => '布尔值',
+                CONFIG_TYPE::TYPE_STRING->value => '字符串',
+                CONFIG_TYPE::TYPE_FLOAT->value => '浮点数',
+                CONFIG_TYPE::TYPE_FILE->value => '文件',
+                CONFIG_TYPE::TYPE_PERCENTAGE->value => '百分比',
+                CONFIG_TYPE::TYPE_TIME->value => '时间',
+                CONFIG_TYPE::TYPE_IS->value => '是否',
+                CONFIG_TYPE::TYPE_JSON->value => 'JSON数组',
+                CONFIG_TYPE::TYPE_EMBEDS->value => 'JSON键值对',
+            ];
+            return $types[$value] ?? '未知类型';
+        });
+    }
+
+    /**
+     * 显示配置值
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldValue(string $field = 'value', string $label = '值'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示配置分组
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldGroup(string $field = 'group', string $label = '分组'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示配置子分组
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldGroup2(string $field = 'group2', string $label = '子分组'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示配置描述
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldDesc(string $field = 'desc', string $label = '描述'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示配置选项
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldOptions(string $field = 'options', string $label = '选项'): Show\Field
+    {
+        return $this->show->field($field, $label)->json();
+    }
+
+    /**
+     * 显示是否客户端可用
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldIsClient(string $field = 'is_client', string $label = '客户端可用'): Show\Field
+    {
+        return $this->show->field($field, $label)->as(function ($value) {
+            return $value ? '是' : '否';
+        });
+    }
+
+    /**
+     * 显示视图类型
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldViewType(string $field = 'type1', string $label = '视图类型'): Show\Field
+    {
+        return $this->show->field($field, $label)->as(function ($value) {
+            if ($value instanceof VIEW_TYPE) {
+                return match($value) {
+                    VIEW_TYPE::PRIVATE => '私有',
+                    VIEW_TYPE::PUBLIC => '公共',
+                    default => $value->value
+                };
+            }
+            return $value;
+        });
+    }
+
+    /**
+     * 显示路由名称
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldRouterName(string $field = 'router_name', string $label = '路由名称'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示参数
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldParams(string $field = 'p1', string $label = '参数'): Show\Field
+    {
+        return $this->show->field($field, $label)->json();
+    }
+
+    /**
+     * 显示管理员ID
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldAdminId(string $field = 'admin_id', string $label = '管理员ID'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示创建时间
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldCreatedAt(string $field = 'created_at', string $label = '创建时间'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示更新时间
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldUpdatedAt(string $field = 'updated_at', string $label = '更新时间'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+
+    /**
+     * 显示删除时间
+     *
+     * @param string $field 字段名
+     * @param string $label 标签名
+     * @return Show\Field
+     */
+    public function fieldDeletedAt(string $field = 'deleted_at', string $label = '删除时间'): Show\Field
+    {
+        return $this->show->field($field, $label);
+    }
+}

+ 135 - 0
app/Module/System/AdminControllers/SystemLogController.php

@@ -0,0 +1,135 @@
+<?php
+
+namespace App\Module\System\AdminControllers;
+
+use App\Module\System\AdminControllers\Helper\FilterHelper;
+use App\Module\System\AdminControllers\Helper\GridHelper;
+use App\Module\System\AdminControllers\Helper\ShowHelper;
+use App\Module\System\Models\SystemLog;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Show;
+use Spatie\RouteAttributes\Attributes\Resource;
+use UCore\DcatAdmin\AdminController;
+
+/**
+ * 系统日志管理控制器
+ */
+#[Resource('system-logs', names: 'dcat.admin.system-logs')]
+class SystemLogController extends AdminController
+{
+    /**
+     * 页面标题
+     *
+     * @var string
+     */
+    protected $title = '系统日志管理';
+
+    /**
+     * 列表页面
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        return Grid::make(new SystemLog(), function (Grid $grid) {
+            $helper = new GridHelper($grid, $this);
+            
+            $helper->columnId();
+            $grid->column('type', '日志类型');
+            $grid->column('level', '日志级别')->using([
+                'debug' => '调试',
+                'info' => '信息',
+                'notice' => '通知',
+                'warning' => '警告',
+                'error' => '错误',
+                'critical' => '严重',
+                'alert' => '警报',
+                'emergency' => '紧急',
+            ])->label([
+                'debug' => 'default',
+                'info' => 'info',
+                'notice' => 'primary',
+                'warning' => 'warning',
+                'error' => 'danger',
+                'critical' => 'danger',
+                'alert' => 'danger',
+                'emergency' => 'danger',
+            ]);
+            $grid->column('message', '日志消息')->limit(50);
+            $grid->column('context', '上下文')->display(function ($value) {
+                return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value;
+            })->limit(30);
+            $grid->column('user_id', '用户ID');
+            $grid->column('ip', 'IP地址');
+            $grid->column('user_agent', '用户代理')->limit(30);
+            $helper->columnCreatedAt();
+            
+            // 禁用创建按钮
+            $grid->disableCreateButton();
+            
+            // 禁用编辑和删除按钮
+            $grid->actions(function (Grid\Displayers\Actions $actions) {
+                $actions->disableEdit();
+                $actions->disableDelete();
+            });
+            
+            // 筛选器
+            $grid->filter(function (Grid\Filter $filter) {
+                $helper = new FilterHelper($filter, $this);
+                $helper->equalId();
+                $filter->equal('type', '日志类型');
+                $filter->equal('level', '日志级别')->select([
+                    'debug' => '调试',
+                    'info' => '信息',
+                    'notice' => '通知',
+                    'warning' => '警告',
+                    'error' => '错误',
+                    'critical' => '严重',
+                    'alert' => '警报',
+                    'emergency' => '紧急',
+                ]);
+                $filter->like('message', '日志消息');
+                $filter->equal('user_id', '用户ID');
+                $filter->like('ip', 'IP地址');
+                $helper->betweenCreatedAt();
+            });
+        });
+    }
+
+    /**
+     * 详情页面
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        return Show::make($id, new SystemLog(), function (Show $show) {
+            $helper = new ShowHelper($show, $this);
+            
+            $helper->fieldId();
+            $show->field('type', '日志类型');
+            $show->field('level', '日志级别')->as(function ($value) {
+                $levels = [
+                    'debug' => '调试',
+                    'info' => '信息',
+                    'notice' => '通知',
+                    'warning' => '警告',
+                    'error' => '错误',
+                    'critical' => '严重',
+                    'alert' => '警报',
+                    'emergency' => '紧急',
+                ];
+                return $levels[$value] ?? $value;
+            });
+            $show->field('message', '日志消息');
+            $show->field('context', '上下文')->json();
+            $show->field('user_id', '用户ID');
+            $show->field('ip', 'IP地址');
+            $show->field('user_agent', '用户代理');
+            $helper->fieldCreatedAt();
+            $helper->fieldUpdatedAt();
+            $helper->fieldDeletedAt();
+        });
+    }
+}

+ 160 - 0
app/Module/System/AdminControllers/ViewConfigController.php

@@ -0,0 +1,160 @@
+<?php
+
+namespace App\Module\System\AdminControllers;
+
+use App\Module\System\AdminControllers\Helper\FilterHelper;
+use App\Module\System\AdminControllers\Helper\FormHelper;
+use App\Module\System\AdminControllers\Helper\GridHelper;
+use App\Module\System\AdminControllers\Helper\ShowHelper;
+use App\Module\System\Enums\VIEW_TYPE;
+use App\Module\System\Models\ViewConfig;
+use App\Module\System\Services\ViewConfigService;
+use Dcat\Admin\Form;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Show;
+use Spatie\RouteAttributes\Attributes\Resource;
+use UCore\DcatAdmin\AdminController;
+
+/**
+ * 视图配置管理控制器
+ */
+#[Resource('system-view-configs', names: 'dcat.admin.system-view-configs')]
+class ViewConfigController extends AdminController
+{
+    /**
+     * 页面标题
+     *
+     * @var string
+     */
+    protected $title = '视图配置管理';
+    
+    /**
+     * 视图配置服务
+     *
+     * @var ViewConfigService
+     */
+    protected $service;
+
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->service = new ViewConfigService();
+    }
+
+    /**
+     * 列表页面
+     *
+     * @return Grid
+     */
+    protected function grid()
+    {
+        return Grid::make(new ViewConfig(), function (Grid $grid) {
+            $helper = new GridHelper($grid, $this);
+            
+            $helper->columnId();
+            $helper->columnTitle();
+            $helper->columnViewType();
+            $helper->columnRouterName();
+            $grid->column('p1', '参数')->display(function ($value) {
+                return is_array($value) ? json_encode($value, JSON_UNESCAPED_UNICODE) : $value;
+            })->limit(30);
+            $helper->columnAdminId();
+            $helper->columnCreatedAt();
+            $helper->columnUpdatedAt();
+            
+            // 添加刷新缓存按钮
+            $grid->tools(function (Grid\Tools $tools) {
+                $tools->append(new \Dcat\Admin\Grid\Tools\BatchAction('刷新缓存', function () {
+                    $this->service->refreshCache();
+                    return $this->response()->success('缓存刷新成功')->refresh();
+                }));
+            });
+            
+            // 筛选器
+            $grid->filter(function (Grid\Filter $filter) {
+                $helper = new FilterHelper($filter, $this);
+                $helper->equalId();
+                $helper->likeTitle();
+                $helper->equalViewType();
+                $helper->likeRouterName();
+                $helper->equalAdminId();
+                $helper->betweenCreatedAt();
+            });
+        });
+    }
+
+    /**
+     * 详情页面
+     *
+     * @param mixed $id
+     * @return Show
+     */
+    protected function detail($id)
+    {
+        return Show::make($id, new ViewConfig(), function (Show $show) {
+            $helper = new ShowHelper($show, $this);
+            
+            $helper->fieldId();
+            $helper->fieldTitle();
+            $helper->fieldViewType();
+            $helper->fieldRouterName();
+            $helper->fieldParams();
+            $helper->fieldAdminId();
+            $helper->fieldCreatedAt();
+            $helper->fieldUpdatedAt();
+            $helper->fieldDeletedAt();
+        });
+    }
+
+    /**
+     * 表单页面
+     *
+     * @return Form
+     */
+    protected function form()
+    {
+        return Form::make(new ViewConfig(), function (Form $form) {
+            $helper = new FormHelper($form, $this);
+            
+            $form->display('id', 'ID');
+            $helper->textTitle();
+            $helper->selectViewType();
+            $helper->textRouterName();
+            $helper->textareaParams();
+            
+            $form->display('admin_id', '管理员ID');
+            $form->display('created_at', '创建时间');
+            $form->display('updated_at', '更新时间');
+            
+            // 保存前回调
+            $form->saving(function (Form $form) {
+                // 处理参数
+                if ($form->p1) {
+                    try {
+                        $params = json_decode($form->p1, true);
+                        if (json_last_error() !== JSON_ERROR_NONE) {
+                            return $form->response()->error('参数不是有效的JSON格式');
+                        }
+                        $form->p1 = $params;
+                    } catch (\Exception $e) {
+                        return $form->response()->error('参数处理失败: ' . $e->getMessage());
+                    }
+                }
+                
+                // 设置管理员ID
+                if ($form->isCreating()) {
+                    $form->admin_id = auth('admin')->id() ?: 0;
+                }
+            });
+            
+            // 保存后回调
+            $form->saved(function (Form $form) {
+                // 刷新缓存
+                $this->service->refreshCache();
+                return $form->response()->success('保存成功,缓存已刷新');
+            });
+        });
+    }
+}

+ 35 - 0
app/Module/System/Docs/README.md

@@ -0,0 +1,35 @@
+# 系统模块文档索引
+
+## 概述
+
+系统模块提供了系统配置、视图配置、系统日志等功能,是系统中基础服务的核心模块。本目录包含了系统模块的详细设计文档。
+
+## 文档目录
+
+### 1. 基础设计文档
+
+- [设计概述](设计概述.md) - 模块的整体设计思路和架构
+- [数据库设计](数据库设计.md) - 详细的数据库表结构和关系设计
+- [DEV](DEV.md) - 模块的开发计划和进度
+
+### 2. 功能领域文档
+
+- [配置系统](配置系统.md) - 系统配置的管理和使用
+- [视图配置系统](视图配置系统.md) - 视图配置的管理和使用
+- [日志系统](日志系统.md) - 系统日志的记录和查询
+
+### 3. 开发与实现文档
+
+- [开发指南](开发指南.md) - 模块开发的快速入门指南
+- [事件系统](事件系统.md) - 模块的事件系统设计与实现
+- [服务接口](服务接口.md) - 模块对外提供的服务接口
+
+### 4. 模块集成文档
+
+- [与其他模块集成](与其他模块集成.md) - 系统模块与其他模块的集成方案
+
+## 文档更新记录
+
+| 日期 | 版本 | 更新内容 | 更新人 |
+| ---- | ---- | -------- | ------ |
+| 2023-06-01 | v1.0 | 初始版本 | 系统管理员 |

+ 173 - 0
app/Module/System/Docs/与其他模块集成.md

@@ -0,0 +1,173 @@
+# 系统模块与其他模块集成
+
+## 1. 概述
+
+系统模块作为系统中的基础服务模块,提供了系统配置、视图配置、系统日志等功能,需要与系统中的其他模块进行集成,以支持各种业务场景下的系统管理需求。本文档描述了系统模块与其他模块的集成方案。
+
+## 2. 集成方式
+
+### 2.1 服务调用
+
+其他模块可以通过调用系统模块提供的服务类来使用系统模块的功能:
+
+```php
+// 使用配置服务
+$configService = new \App\Module\System\Services\ConfigService();
+$value = $configService->getConfig('site_name');
+
+// 使用视图配置服务
+$viewConfigService = new \App\Module\System\Services\ViewConfigService();
+$viewConfig = $viewConfigService->getViewConfig('home_page');
+
+// 使用日志服务
+$logService = new \App\Module\System\Services\LogService();
+$logService->log('user_login', 'info', '用户登录', ['user_id' => $userId]);
+```
+
+### 2.2 事件监听
+
+其他模块可以监听系统模块触发的事件,以响应系统操作:
+
+```php
+// 在其他模块的服务提供者中
+protected $listen = [
+    \App\Module\System\Events\ConfigChangedEvent::class => [
+        \App\Module\OtherModule\Listeners\HandleConfigChangedListener::class,
+    ],
+    \App\Module\System\Events\SystemLogCreatedEvent::class => [
+        \App\Module\OtherModule\Listeners\HandleSystemLogCreatedListener::class,
+    ],
+];
+```
+
+### 2.3 依赖注入
+
+其他模块可以通过依赖注入的方式使用系统模块的服务:
+
+```php
+// 在其他模块的控制器或服务中
+public function __construct(\App\Module\System\Services\ConfigService $configService)
+{
+    $this->configService = $configService;
+}
+```
+
+## 3. 与具体模块的集成
+
+### 3.1 与用户模块集成
+
+用户模块可以使用系统模块来获取用户相关的配置和记录用户操作日志:
+
+```php
+// 获取用户相关配置
+$configService = new \App\Module\System\Services\ConfigService();
+$registerEnabled = $configService->getConfig('user_register_enabled');
+$defaultAvatar = $configService->getConfig('user_default_avatar');
+
+// 记录用户操作日志
+$logService = new \App\Module\System\Services\LogService();
+$logService->log('user_register', 'info', '用户注册', [
+    'user_id' => $user->id,
+    'username' => $user->username,
+]);
+```
+
+### 3.2 与商品模块集成
+
+商品模块可以使用系统模块来获取商品相关的配置和记录商品操作日志:
+
+```php
+// 获取商品相关配置
+$configService = new \App\Module\System\Services\ConfigService();
+$productImageSize = $configService->getConfig('product_image_size');
+$productDescMaxLength = $configService->getConfig('product_desc_max_length');
+
+// 记录商品操作日志
+$logService = new \App\Module\System\Services\LogService();
+$logService->log('product_create', 'info', '创建商品', [
+    'product_id' => $product->id,
+    'product_name' => $product->name,
+    'admin_id' => $adminId,
+]);
+```
+
+### 3.3 与订单模块集成
+
+订单模块可以使用系统模块来获取订单相关的配置和记录订单操作日志:
+
+```php
+// 获取订单相关配置
+$configService = new \App\Module\System\Services\ConfigService();
+$orderExpireTime = $configService->getConfig('order_expire_time');
+$orderAutoConfirmDays = $configService->getConfig('order_auto_confirm_days');
+
+// 记录订单操作日志
+$logService = new \App\Module\System\Services\LogService();
+$logService->log('order_create', 'info', '创建订单', [
+    'order_id' => $order->id,
+    'order_no' => $order->order_no,
+    'user_id' => $order->user_id,
+    'amount' => $order->amount,
+]);
+```
+
+## 4. 集成注意事项
+
+### 4.1 配置缓存
+
+在与其他模块集成时,需要注意配置的缓存处理,确保配置的及时性和一致性:
+
+```php
+// 在更新配置后,需要刷新缓存
+$configService = new \App\Module\System\Services\ConfigService();
+$configService->updateConfig('site_name', '新网站名称');
+$configService->refreshCache();
+
+// 在获取配置时,优先从缓存中获取
+$siteName = $configService->getConfig('site_name');
+```
+
+### 4.2 日志级别
+
+在与其他模块集成时,需要注意日志的级别,确保日志的重要性和可读性:
+
+```php
+// 对于普通操作,使用info级别
+$logService = new \App\Module\System\Services\LogService();
+$logService->log('user_login', 'info', '用户登录', ['user_id' => $userId]);
+
+// 对于警告操作,使用warning级别
+$logService->log('user_login_failed', 'warning', '用户登录失败', [
+    'user_id' => $userId,
+    'reason' => '密码错误',
+    'attempt_count' => $attemptCount,
+]);
+
+// 对于错误操作,使用error级别
+$logService->log('order_payment_failed', 'error', '订单支付失败', [
+    'order_id' => $orderId,
+    'order_no' => $orderNo,
+    'user_id' => $userId,
+    'amount' => $amount,
+    'error' => $error,
+]);
+```
+
+### 4.3 视图配置
+
+在与其他模块集成时,需要注意视图配置的权限,确保视图配置的安全性和可用性:
+
+```php
+// 获取公共视图配置
+$viewConfigService = new \App\Module\System\Services\ViewConfigService();
+$homePageConfig = $viewConfigService->getViewConfig('home_page');
+
+// 获取私有视图配置,需要检查权限
+$userDashboardConfig = $viewConfigService->getViewConfig('user_dashboard');
+if ($userDashboardConfig && $userDashboardConfig->type1 === 'private') {
+    // 检查用户权限
+    if (!$this->checkUserPermission($userId, 'view_user_dashboard')) {
+        return $this->error('无权访问');
+    }
+}
+```

+ 303 - 0
app/Module/System/Docs/事件系统.md

@@ -0,0 +1,303 @@
+# 系统模块事件系统
+
+## 1. 概述
+
+系统模块的事件系统用于在系统配置、视图配置和系统日志的关键节点触发事件,允许其他模块或系统组件响应这些事件并执行相应的操作。这种设计实现了模块间的松耦合,提高了系统的可扩展性和可维护性。
+
+## 2. 事件定义
+
+### 2.1 ConfigChangedEvent
+
+当系统配置变更时触发。
+
+**事件类:** `App\Module\System\Events\ConfigChangedEvent`
+
+**事件数据:**
+```php
+/**
+ * 配置键名
+ * @var string
+ */
+public string $keyname;
+
+/**
+ * 旧值
+ * @var mixed
+ */
+public $oldValue;
+
+/**
+ * 新值
+ * @var mixed
+ */
+public $newValue;
+
+/**
+ * 配置对象
+ * @var AppConfig
+ */
+public AppConfig $config;
+
+/**
+ * 管理员ID
+ * @var int
+ */
+public int $adminId;
+```
+
+**触发时机:**
+- 通过ConfigService::updateConfig方法更新配置
+- 通过后台管理界面更新配置
+
+### 2.2 ViewConfigChangedEvent
+
+当视图配置变更时触发。
+
+**事件类:** `App\Module\System\Events\ViewConfigChangedEvent`
+
+**事件数据:**
+```php
+/**
+ * 视图配置ID
+ * @var int
+ */
+public int $id;
+
+/**
+ * 视图配置标题
+ * @var string
+ */
+public string $title;
+
+/**
+ * 旧参数
+ * @var mixed
+ */
+public $oldParams;
+
+/**
+ * 新参数
+ * @var mixed
+ */
+public $newParams;
+
+/**
+ * 视图配置对象
+ * @var ViewConfig
+ */
+public ViewConfig $viewConfig;
+
+/**
+ * 管理员ID
+ * @var int
+ */
+public int $adminId;
+```
+
+**触发时机:**
+- 通过ViewConfigService::updateViewConfig方法更新视图配置
+- 通过后台管理界面更新视图配置
+
+### 2.3 SystemLogCreatedEvent
+
+当系统日志创建时触发。
+
+**事件类:** `App\Module\System\Events\SystemLogCreatedEvent`
+
+**事件数据:**
+```php
+/**
+ * 日志ID
+ * @var int
+ */
+public int $id;
+
+/**
+ * 日志类型
+ * @var string
+ */
+public string $type;
+
+/**
+ * 日志级别
+ * @var string
+ */
+public string $level;
+
+/**
+ * 日志消息
+ * @var string
+ */
+public string $message;
+
+/**
+ * 日志上下文
+ * @var array
+ */
+public array $context;
+
+/**
+ * 用户ID
+ * @var int|null
+ */
+public ?int $userId;
+
+/**
+ * 系统日志对象
+ * @var SystemLog
+ */
+public SystemLog $log;
+```
+
+**触发时机:**
+- 通过LogService::log方法记录日志
+- 系统自动记录日志
+
+## 3. 事件监听器
+
+### 3.1 SystemEventListener
+
+监听系统相关事件,执行相应的操作。
+
+**监听器类:** `App\Module\System\Listeners\SystemEventListener`
+
+**职责:**
+- 处理配置变更事件,记录日志
+- 处理视图配置变更事件,记录日志
+- 处理系统日志创建事件,对高级别日志进行特殊处理
+
+## 4. 事件注册
+
+系统模块通过服务提供者注册事件和监听器:
+
+```php
+/**
+ * 系统模块服务提供者
+ */
+class SystemServiceProvider extends ServiceProvider
+{
+    /**
+     * 事件到监听器的映射
+     *
+     * @var array
+     */
+    protected $listen = [
+        ConfigChangedEvent::class => [
+            SystemEventListener::class . '@handleConfigChanged',
+        ],
+        ViewConfigChangedEvent::class => [
+            SystemEventListener::class . '@handleViewConfigChanged',
+        ],
+        SystemLogCreatedEvent::class => [
+            SystemEventListener::class . '@handleSystemLogCreated',
+        ],
+    ];
+
+    /**
+     * 需要注册的订阅者
+     *
+     * @var array
+     */
+    protected $subscribe = [
+        SystemEventListener::class,
+    ];
+
+    // ...
+}
+```
+
+## 5. 使用示例
+
+### 5.1 触发事件
+
+```php
+// 更新配置后触发事件
+$oldValue = $config->value;
+$config->value = $newValue;
+$config->save();
+event(new ConfigChangedEvent($config, $oldValue, auth('admin')->id()));
+
+// 更新视图配置后触发事件
+$oldParams = $viewConfig->p1;
+$viewConfig->p1 = $newParams;
+$viewConfig->save();
+event(new ViewConfigChangedEvent($viewConfig, $oldParams, auth('admin')->id()));
+
+// 创建系统日志后触发事件
+$log = SystemLog::create([
+    'type' => $type,
+    'level' => $level,
+    'message' => $message,
+    'context' => $context,
+    'user_id' => $userId,
+    'ip' => request()->ip(),
+    'user_agent' => request()->userAgent(),
+]);
+event(new SystemLogCreatedEvent($log));
+```
+
+### 5.2 监听事件
+
+```php
+// 在其他模块中监听系统事件
+protected $listen = [
+    ConfigChangedEvent::class => [
+        NotifyConfigChangeListener::class,
+    ],
+    SystemLogCreatedEvent::class => [
+        AlertHighLevelLogListener::class,
+    ],
+];
+```
+
+## 6. 与其他模块的集成
+
+系统模块的事件系统可以与其他模块集成,实现跨模块功能:
+
+### 6.1 与通知模块集成
+
+通知模块可以监听系统事件,向相关用户发送通知:
+
+```php
+// 在通知模块的服务提供者中
+protected $listen = [
+    ConfigChangedEvent::class => [
+        SendConfigChangeNotificationListener::class,
+    ],
+    SystemLogCreatedEvent::class => [
+        SendHighLevelLogNotificationListener::class,
+    ],
+];
+```
+
+### 6.2 与统计模块集成
+
+统计模块可以监听系统事件,更新相关统计数据:
+
+```php
+// 在统计模块的服务提供者中
+protected $listen = [
+    ConfigChangedEvent::class => [
+        UpdateConfigChangeStatisticsListener::class,
+    ],
+    SystemLogCreatedEvent::class => [
+        UpdateLogStatisticsListener::class,
+    ],
+];
+```
+
+### 6.3 与监控模块集成
+
+监控模块可以监听系统事件,进行系统监控:
+
+```php
+// 在监控模块的服务提供者中
+protected $listen = [
+    ConfigChangedEvent::class => [
+        MonitorConfigChangeListener::class,
+    ],
+    SystemLogCreatedEvent::class => [
+        MonitorHighLevelLogListener::class,
+    ],
+];
+```

+ 68 - 0
app/Module/System/Events/ConfigChangedEvent.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace App\Module\System\Events;
+
+use App\Module\System\Models\AppConfig;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+
+/**
+ * 配置变更事件
+ */
+class ConfigChangedEvent
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    /**
+     * 配置键名
+     *
+     * @var string
+     */
+    public string $keyname;
+
+    /**
+     * 旧值
+     *
+     * @var mixed
+     */
+    public $oldValue;
+
+    /**
+     * 新值
+     *
+     * @var mixed
+     */
+    public $newValue;
+
+    /**
+     * 配置对象
+     *
+     * @var AppConfig
+     */
+    public AppConfig $config;
+
+    /**
+     * 管理员ID
+     *
+     * @var int
+     */
+    public int $adminId;
+
+    /**
+     * 创建一个新的事件实例
+     *
+     * @param AppConfig $config
+     * @param mixed $oldValue
+     * @param int $adminId
+     * @return void
+     */
+    public function __construct(AppConfig $config, $oldValue, int $adminId = 0)
+    {
+        $this->keyname = $config->keyname;
+        $this->oldValue = $oldValue;
+        $this->newValue = $config->value;
+        $this->config = $config;
+        $this->adminId = $adminId;
+    }
+}

+ 82 - 0
app/Module/System/Events/SystemLogCreatedEvent.php

@@ -0,0 +1,82 @@
+<?php
+
+namespace App\Module\System\Events;
+
+use App\Module\System\Models\SystemLog;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+
+/**
+ * 系统日志创建事件
+ */
+class SystemLogCreatedEvent
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    /**
+     * 日志ID
+     *
+     * @var int
+     */
+    public int $id;
+
+    /**
+     * 日志类型
+     *
+     * @var string
+     */
+    public string $type;
+
+    /**
+     * 日志级别
+     *
+     * @var string
+     */
+    public string $level;
+
+    /**
+     * 日志消息
+     *
+     * @var string
+     */
+    public string $message;
+
+    /**
+     * 日志上下文
+     *
+     * @var array
+     */
+    public array $context;
+
+    /**
+     * 用户ID
+     *
+     * @var int|null
+     */
+    public ?int $userId;
+
+    /**
+     * 系统日志对象
+     *
+     * @var SystemLog
+     */
+    public SystemLog $log;
+
+    /**
+     * 创建一个新的事件实例
+     *
+     * @param SystemLog $log
+     * @return void
+     */
+    public function __construct(SystemLog $log)
+    {
+        $this->id = $log->id;
+        $this->type = $log->type;
+        $this->level = $log->level;
+        $this->message = $log->message;
+        $this->context = $log->context ?? [];
+        $this->userId = $log->user_id;
+        $this->log = $log;
+    }
+}

+ 76 - 0
app/Module/System/Events/ViewConfigChangedEvent.php

@@ -0,0 +1,76 @@
+<?php
+
+namespace App\Module\System\Events;
+
+use App\Module\System\Models\ViewConfig;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+
+/**
+ * 视图配置变更事件
+ */
+class ViewConfigChangedEvent
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    /**
+     * 视图配置ID
+     *
+     * @var int
+     */
+    public int $id;
+
+    /**
+     * 视图配置标题
+     *
+     * @var string
+     */
+    public string $title;
+
+    /**
+     * 旧参数
+     *
+     * @var mixed
+     */
+    public $oldParams;
+
+    /**
+     * 新参数
+     *
+     * @var mixed
+     */
+    public $newParams;
+
+    /**
+     * 视图配置对象
+     *
+     * @var ViewConfig
+     */
+    public ViewConfig $viewConfig;
+
+    /**
+     * 管理员ID
+     *
+     * @var int
+     */
+    public int $adminId;
+
+    /**
+     * 创建一个新的事件实例
+     *
+     * @param ViewConfig $viewConfig
+     * @param mixed $oldParams
+     * @param int $adminId
+     * @return void
+     */
+    public function __construct(ViewConfig $viewConfig, $oldParams, int $adminId = 0)
+    {
+        $this->id = $viewConfig->id;
+        $this->title = $viewConfig->title;
+        $this->oldParams = $oldParams;
+        $this->newParams = $viewConfig->p1;
+        $this->viewConfig = $viewConfig;
+        $this->adminId = $adminId;
+    }
+}

+ 122 - 0
app/Module/System/Listeners/SystemEventListener.php

@@ -0,0 +1,122 @@
+<?php
+
+namespace App\Module\System\Listeners;
+
+use App\Module\System\Events\ConfigChangedEvent;
+use App\Module\System\Events\SystemLogCreatedEvent;
+use App\Module\System\Events\ViewConfigChangedEvent;
+use Illuminate\Support\Facades\Log;
+
+/**
+ * 系统事件监听器
+ */
+class SystemEventListener
+{
+    /**
+     * 处理配置变更事件
+     *
+     * @param ConfigChangedEvent $event
+     * @return void
+     */
+    public function handleConfigChanged(ConfigChangedEvent $event): void
+    {
+        try {
+            // 记录日志
+            Log::info('配置变更', [
+                'keyname' => $event->keyname,
+                'old_value' => $event->oldValue,
+                'new_value' => $event->newValue,
+                'admin_id' => $event->adminId,
+            ]);
+            
+            // 这里可以添加其他处理逻辑,如发送通知等
+        } catch (\Exception $e) {
+            Log::error('处理配置变更事件失败', [
+                'error' => $e->getMessage(),
+                'keyname' => $event->keyname,
+            ]);
+        }
+    }
+    
+    /**
+     * 处理视图配置变更事件
+     *
+     * @param ViewConfigChangedEvent $event
+     * @return void
+     */
+    public function handleViewConfigChanged(ViewConfigChangedEvent $event): void
+    {
+        try {
+            // 记录日志
+            Log::info('视图配置变更', [
+                'id' => $event->id,
+                'title' => $event->title,
+                'old_params' => $event->oldParams,
+                'new_params' => $event->newParams,
+                'admin_id' => $event->adminId,
+            ]);
+            
+            // 这里可以添加其他处理逻辑,如发送通知等
+        } catch (\Exception $e) {
+            Log::error('处理视图配置变更事件失败', [
+                'error' => $e->getMessage(),
+                'id' => $event->id,
+            ]);
+        }
+    }
+    
+    /**
+     * 处理系统日志创建事件
+     *
+     * @param SystemLogCreatedEvent $event
+     * @return void
+     */
+    public function handleSystemLogCreated(SystemLogCreatedEvent $event): void
+    {
+        try {
+            // 对于高级别的日志,可以进行特殊处理
+            if (in_array($event->level, ['error', 'critical', 'alert', 'emergency'])) {
+                // 记录到特殊日志
+                Log::channel('emergency')->error('高级别系统日志', [
+                    'id' => $event->id,
+                    'type' => $event->type,
+                    'level' => $event->level,
+                    'message' => $event->message,
+                    'context' => $event->context,
+                    'user_id' => $event->userId,
+                ]);
+                
+                // 这里可以添加其他处理逻辑,如发送通知等
+            }
+        } catch (\Exception $e) {
+            Log::error('处理系统日志创建事件失败', [
+                'error' => $e->getMessage(),
+                'id' => $event->id,
+            ]);
+        }
+    }
+    
+    /**
+     * 注册监听器
+     *
+     * @param \Illuminate\Events\Dispatcher $events
+     * @return void
+     */
+    public function subscribe($events): void
+    {
+        $events->listen(
+            ConfigChangedEvent::class,
+            [SystemEventListener::class, 'handleConfigChanged']
+        );
+        
+        $events->listen(
+            ViewConfigChangedEvent::class,
+            [SystemEventListener::class, 'handleViewConfigChanged']
+        );
+        
+        $events->listen(
+            SystemLogCreatedEvent::class,
+            [SystemEventListener::class, 'handleSystemLogCreated']
+        );
+    }
+}

+ 93 - 0
app/Module/System/Providers/SystemServiceProvider.php

@@ -0,0 +1,93 @@
+<?php
+
+namespace App\Module\System\Providers;
+
+use App\Module\System\Events\ConfigChangedEvent;
+use App\Module\System\Events\SystemLogCreatedEvent;
+use App\Module\System\Events\ViewConfigChangedEvent;
+use App\Module\System\Listeners\SystemEventListener;
+use Illuminate\Support\ServiceProvider;
+
+/**
+ * 系统模块服务提供者
+ */
+class SystemServiceProvider extends ServiceProvider
+{
+    /**
+     * 事件到监听器的映射
+     *
+     * @var array
+     */
+    protected $listen = [
+        ConfigChangedEvent::class => [
+            SystemEventListener::class . '@handleConfigChanged',
+        ],
+        ViewConfigChangedEvent::class => [
+            SystemEventListener::class . '@handleViewConfigChanged',
+        ],
+        SystemLogCreatedEvent::class => [
+            SystemEventListener::class . '@handleSystemLogCreated',
+        ],
+    ];
+
+    /**
+     * 需要注册的订阅者
+     *
+     * @var array
+     */
+    protected $subscribe = [
+        SystemEventListener::class,
+    ];
+
+    /**
+     * 注册服务
+     *
+     * @return void
+     */
+    public function register(): void
+    {
+        // 注册服务...
+        $this->app->singleton('system.config.service', function ($app) {
+            return new \App\Module\System\Services\ConfigService();
+        });
+        
+        $this->app->singleton('system.view.config.service', function ($app) {
+            return new \App\Module\System\Services\ViewConfigService();
+        });
+        
+        $this->app->singleton('system.log.service', function ($app) {
+            return new \App\Module\System\Services\LogService();
+        });
+    }
+
+    /**
+     * 启动服务
+     *
+     * @return void
+     */
+    public function boot(): void
+    {
+        // 注册事件监听器
+        $this->registerEvents();
+    }
+
+    /**
+     * 注册事件和监听器
+     *
+     * @return void
+     */
+    protected function registerEvents(): void
+    {
+        $events = $this->app['events'];
+
+        foreach ($this->listen as $event => $listeners) {
+            foreach ($listeners as $listener) {
+                $events->listen($event, $listener);
+            }
+        }
+
+        foreach ($this->subscribe as $subscriber) {
+            $events->subscribe($subscriber);
+        }
+    }
+}

+ 1727 - 0
app/tree.md

@@ -0,0 +1,1727 @@
+Admin
+    Controllers
+        AuthController.php
+        HomeController.php
+    bootstrap.php
+    routes.php
+Console
+    Commands
+        DisabledBaseMigrateCommand.php
+        DisabledMigrateCommand.php
+        GenerateProtoRouteCommand.php
+    Kernel.php
+Http
+    Controllers
+        Controller.php
+        DemoController.php
+    Kernel.php
+Module
+    Activity
+        AdminControllers
+            ActivityConditionController.php
+            ActivityController.php
+            ActivityParticipationController.php
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            LazyRenderable
+                ActivityLazyRenderable.php
+            UserActivityDataController.php
+        Command
+        Commands
+            CleanExpiredActivitiesCommand.php
+            GenerateActivityReportCommand.php
+            UpdateActivityStatusCommand.php
+        Controller
+        DEV.md
+        Databases
+            GenerateSql
+        Docs
+            DEV.md
+            事件系统.md
+            数据库设计.md
+            服务接口.md
+            架构设计.md
+            系统概述.md
+        Docs_RooGemini2.5
+            DATABASE.md
+            README.md
+        Dto
+        Dtos
+            ActivityConditionDto.php
+            ActivityConfigDto.php
+            ActivityParticipationDto.php
+            ActivityRewardDto.php
+            UserActivityDataDto.php
+        Enum
+        Enums
+            ACTIVITY_STATUS.php
+            ACTIVITY_TYPE.php
+            CONDITION_TYPE.php
+            PARTICIPATION_STATUS.php
+            REWARD_STATUS.php
+        Events
+            ActivityCompletedEvent.php
+            ActivityCreatedEvent.php
+            ActivityProgressUpdatedEvent.php
+            ActivityRewardClaimedEvent.php
+            ActivityStatusChangedEvent.php
+            UserParticipatedEvent.php
+        Listeners
+            ActivityCompletedListener.php
+            ActivityProgressListener.php
+            ActivityStatusChangeListener.php
+            RewardDistributionListener.php
+            UserParticipationListener.php
+        Logics
+            ActivityLogic.php
+            ConditionLogic.php
+            ParticipationLogic.php
+            ProgressLogic.php
+            RewardLogic.php
+        Model
+        Models
+            ActivityCondition.php
+            ActivityConfig.php
+            ActivityParticipation.php
+            UserActivityData.php
+        Providers
+            ActivityServiceProvider.php
+        README.md
+        Repository
+        Repositorys
+            ActivityConditionRepository.php
+            ActivityConfigRepository.php
+            ActivityParticipationRepository.php
+            UserActivityDataRepository.php
+        Service
+        Services
+            ActivityManagementService.php
+            ActivityService.php
+            RewardService.php
+        Validation
+        Validator
+    AppGame
+        Docs
+            EventSystem.md
+        Events
+            LoginSuccessEvent.php
+            ProtobufResponseEvent.php
+        H.php
+        Handler
+            BaseHandler.php
+            Friend
+                ApplyAgreeHandler.php
+                ApplyHandler.php
+                ApplyL2Handler.php
+                ApplyListHandler.php
+                ApplyMyHandler.php
+                ApplyRefuseHandler.php
+                DeleteHandler.php
+            God
+                OpenHandler.php
+            Item
+                CraftHandler.php
+                DismantleHandler.php
+            Land
+                FertilizerHandler.php
+                HarvestHandler.php
+                RemoveCropHandler.php
+                WateringHandler.php
+                WeedicideHandler.php
+            Pet
+                DataHandler.php
+                EatHandler.php
+                LifeSkillUseHandler.php
+                RankHandler.php
+                TrainHandler.php
+                TrainSaveHandler.php
+            Public
+                CheckCodeHandler.php
+                DeviceInfoHandler.php
+                LoginHandler.php
+                PlayerDataHandler.php
+                RegisterHandler.php
+                SendSmsHandler.php
+                TokenHandler.php
+            Shop
+                BuyHandler.php
+                QueryHandler.php
+            User
+                ClearLogHandler.php
+                DataHandler.php
+                EditPasswordHandler.php
+                LogoutHandler.php
+                QueryDataHandler.php
+                ResetPasswordHandler.php
+        HttpControllers
+            ProtobufController.php
+        Listeners
+            AppGameProtobufResponseListener.php
+        Middleware
+            LoginCheck.php
+        ORDER.md
+        Providers
+            AppGameServiceProvider.php
+        README.md
+        Service
+            AddressService.php
+            Blockchain.php
+            FundService.php
+            HelloService.php
+            MinerService.php
+            TransactionService.php
+            UserService.php
+            WalletService.php
+        SessionApp.php
+        Test
+            Blockchain
+                BlockchainMinerTest.php
+                LoginOkTest.php
+                LoginTest.php
+        Tools
+            Protobuf.php
+        UserService.php
+        Validations
+            PetEatValidation.php
+            ValidationBase.php
+            ValidationUser.php
+    Article
+        AdminControllers
+            ArticleCateController.php
+            ArticleController.php
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+        Databases
+            GenerateSql
+                README.md
+                article_cates.sql
+                articles.sql
+        Docs
+            DEV.md
+            README.md
+            事件系统.md
+            数据库设计.md
+            设计概述.md
+        Enums
+            STATUS.php
+        Events
+            ArticleCreatedEvent.php
+            ArticleUpdatedEvent.php
+            ArticleViewedEvent.php
+        Listeners
+            ArticleEventListener.php
+        Logics
+            ArticleCategoryLogic.php
+            ArticleLogic.php
+        Models
+            Article.php
+            ArticleCate.php
+        Providers
+            ArticleServiceProvider.php
+        README.md
+        Repositories
+            ArticleRepositories.php
+        Services
+            ArticleCategoryService.php
+            ArticleService.php
+    China
+        Providers
+            ChinaServiceProvider.php
+        README.md
+        Validator
+            AlipayIdValidator.php
+            CNIdCardValidator.php
+            IdCardValidator.php
+            IsChineseOnlyValidator.php
+    DelayQueue
+        Console
+            DelayQueueRun.php
+            README.md
+        Entity
+            Queue.php
+            README.md
+        Job
+            Job.php
+            README.md
+        README.md
+        Redis.php
+    Dev
+        Admin
+            Actions
+                SessionLoginAction.php
+                SessionLoginForm.php
+            Form
+                S3ConfigForm.php
+        AdminControllers
+            DevController.php
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            JobController.php
+            JobJobrunController.php
+            LogsController.php
+            NoticeController.php
+            ReadmeController.php
+            RequestLogController.php
+            RequireLogData.php
+            S3Controller.php
+            SessionController.php
+            TraceController.php
+        Commands
+            DevCommand.php
+        Controllers
+            DevController.php
+        Docs
+            DEV.md
+            README.md
+            数据库设计.md
+            设计概述.md
+        Enums
+            DEV_LOG_TYPE.php
+            DEV_STATUS.php
+            DevStatus.php
+        Events
+            DevLogCreatedEvent.php
+        Listeners
+            DevLogEventListener.php
+        Logics
+            DevLogic.php
+        Models
+            Dev.php
+            DevConfig.php
+            DevLog.php
+        Providers
+            DevServiceProvider.php
+        Queues
+            DevQueue.php
+        README.md
+        Repositorys
+            DevRepository.php
+            LogsCron.php
+            S3Repository.php
+            Session.php
+        Services
+            DevService.php
+            LogViewerService.php
+        Validations
+            DevValidation.php
+        Validators
+            DevValidator.php
+    Farm
+        AdminControllers
+            FarmCropController.php
+            FarmGodBuffController.php
+            FarmHarvestLogController.php
+            FarmHouseConfigController.php
+            FarmLandController.php
+            FarmLandTypeController.php
+            FarmLandUpgradeConfigController.php
+            FarmSeedController.php
+            FarmSeedOutputController.php
+            FarmTeamProfitController.php
+            FarmUpgradeLogController.php
+            FarmUserController.php
+            FarmUserReferralController.php
+            FarmUserTalentController.php
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+        Commands
+            CheckHouseDowngradeCommand.php
+            CleanExpiredLogsCommand.php
+            GenerateDisastersCommand.php
+            RebuildFarmCacheCommand.php
+            UpdateCropGrowthCommand.php
+        Docs
+            DEV.md
+            README.md
+            与团队模块集成.md
+            事件系统.md
+            团队系统.md
+            土地系统.md
+            土地配置表设计.md
+            房屋系统.md
+            数据库设计.md
+            枚举定义.md
+            模块接口.md
+            神灵加持系统.md
+            种子与作物系统.md
+            设计概述.md
+        Dtos
+            CropInfoDto.php
+            DisasterInfoDto.php
+            FarmInfoDto.php
+            HarvestResultDto.php
+            LandInfoDto.php
+            TeamInfoDto.php
+        Enums
+            BUFF_TYPE.php
+            DISASTER_TYPE.php
+            GROWTH_STAGE.php
+            LAND_STATUS.php
+            LAND_TYPE.php
+            SEED_TYPE.php
+            TALENT_LEVEL.php
+            UPGRADE_TYPE.php
+        Events
+            BuffActivatedEvent.php
+            CropGrowthStageChangedEvent.php
+            CropHarvestedEvent.php
+            CropPlantedEvent.php
+            DisasterClearedEvent.php
+            DisasterGeneratedEvent.php
+            FarmCreatedEvent.php
+            HouseUpgradedEvent.php
+            LandUpgradedEvent.php
+            TalentLevelChangedEvent.php
+            TeamProfitCreatedEvent.php
+        Listeners
+            CalculateHarvestOutputListener.php
+            CheckHouseDowngradeListener.php
+            DistributeTeamProfitListener.php
+            GenerateDisasterListener.php
+            UpdateCropStatusListener.php
+            UpdateTalentLevelListener.php
+        Logics
+            BuffLogic.php
+            CropLogic.php
+            DisasterLogic.php
+            FarmLogic.php
+            HouseLogic.php
+            LandLogic.php
+            SeedLogic.php
+            TeamLogic.php
+        Models
+            FarmCrop.php
+            FarmGodBuff.php
+            FarmHarvestLog.php
+            FarmHouseConfig.php
+            FarmLand.php
+            FarmLandType.php
+            FarmLandUpgradeConfig.php
+            FarmSeed.php
+            FarmSeedOutput.php
+            FarmTeamProfit.php
+            FarmUpgradeLog.php
+            FarmUser.php
+            FarmUserReferral.php
+            FarmUserTalent.php
+        Providers
+            FarmServiceProvider.php
+        README.md
+        Repositories
+            FarmCropRepository.php
+            FarmGodBuffRepository.php
+            FarmHarvestLogRepository.php
+            FarmHouseConfigRepository.php
+            FarmLandRepository.php
+            FarmLandTypeRepository.php
+            FarmLandUpgradeConfigRepository.php
+            FarmSeedOutputRepository.php
+            FarmSeedRepository.php
+            FarmTeamProfitRepository.php
+            FarmUpgradeLogRepository.php
+            FarmUserReferralRepository.php
+            FarmUserRepository.php
+            FarmUserTalentRepository.php
+        Services
+            BuffService.php
+            CropService.php
+            FarmService.php
+            HouseService.php
+            LandService.php
+            SeedService.php
+            TeamService.php
+    File
+        AdminControllers
+            FileController.php
+            Helper
+                FileHelper.php
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            ImageController.php
+            README.md
+            StorageController.php
+            TemporaryController.php
+        Casts
+            README.md
+        Config
+            README.md
+            StorageConfig.php
+        Databases
+            GenerateSql
+                README.md
+                file_files.sql
+                file_imgs.sql
+                file_storage_config_histories.sql
+                file_storage_configs.sql
+                file_template.sql
+        Docs
+            README.md
+            与其他模块集成.md
+            事件系统.md
+            扩展建议.md
+            数据库设计.md
+            服务使用说明.md
+            配置管理.md
+        Enums
+            FILE_STATUS.php
+            FILE_VISIBILITY.php
+            README.md
+            STORAGE_STATUS.php
+        Events
+            FileDeletedEvent.php
+            FileUploaded.php
+            FileUploadedEvent.php
+            ImageDeletedEvent.php
+            ImageUploadedEvent.php
+            README.md
+        Exceptions
+            README.md
+        Listeners
+            FileEventListener.php
+            LogFileUpload.php
+            README.md
+        Logics
+            DirLogic.php
+            FileBaseLogic.php
+            FileLogic.php
+            README.md
+        Models
+            FileFile.php
+            FileImg.php
+            FileStorageConfig.php
+            FileStorageConfigHistory.php
+            FileTemplate.php
+            README.md
+        Providers
+            FileServiceProvider.php
+        README.md
+        Repositories
+            README.md
+            StorageConfigHistoryRepository.php
+            StorageConfigRepository.php
+        Repositorys
+            FileRepository.php
+        Services
+            FileService.php
+            ImgService.php
+            README.md
+            StorageConfigService.php
+            TemporaryService.php
+            UploadService.php
+        Validation
+            README.md
+        Validator
+            README.md
+            UserFileImgValidator.php
+    Fund
+        Admin
+            Actions
+                Circulation.php
+                CirculationForm.php
+                FundAdminAction.php
+                FundAdminForm.php
+        AdminControllers
+            FundAdminController.php
+            FundCirculationController.php
+            FundController.php
+            FundLogController.php
+            FundOrderController.php
+            FundTransferController.php
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+        Commands
+            CheckUserLogsCommand.php
+        Databases
+            GenerateSql
+                README.md
+                fund.sql
+                fund_admin.sql
+                fund_circulation.sql
+                fund_config.sql
+                fund_currency.sql
+                fund_logs.sql
+                fund_order.sql
+                fund_transfer.sql
+        Docs
+            README.md
+            与其他模块集成.md
+            事件系统.md
+        Dto
+            FundDto.php
+            TransferDto.php
+        Enums
+            EXTERNAL_STATUS.php
+            FUND_CATE.php
+            FUND_CURRENCY_TYPE.php
+            FUND_STATUS.php
+            FUND_TYPE.php
+            LOG_TYPE.php
+            OPERATE_TYPE.php
+        Events
+            FundBalanceChanged.php
+            FundChangedEvent.php
+            FundEventDispatcher.php
+            FundStatusChangedEvent.php
+            FundTransferEvent.php
+            FundTransferred.php
+        Exceptions
+            DbException.php
+        Listeners
+            FundEventListener.php
+        Models
+            FundAdminModel.php
+            FundCirculationModel.php
+            FundConfigModel.php
+            FundCurrencyModel.php
+            FundLogModel.php
+            FundModel.php
+            FundOrderModel.php
+            FundTransferModel.php
+        Providers
+            FundServiceProvider.php
+        README.md
+        Repositorys
+            FundAdminRepository.php
+            FundCirculationRepository.php
+            FundLogRepository.php
+            FundOrderRepository.php
+            FundRepository.php
+            FundTransferRepository.php
+        Service
+            Circulation.php
+            Log.php
+            README.md
+            Transfer.php
+            User.php
+        Services
+            AccountService.php
+            CurrencyService.php
+            DtoService.php
+            FundService.php
+            LogService.php
+            README.md
+            TaskService.php
+        Tests
+            Unit
+                TcTest.php
+                TradeTest.php
+                TtrTest.php
+        Validations
+            Circulation.php
+            Transfer.php
+        Validators
+            CheckUserFundValidator.php
+            DataFundCheck1000Validator.php
+            FundIdCheckValidator.php
+            FundR1000CheckValidator.php
+            UserFund1CheckValidator.php
+            UserFundCheck1000Validator.php
+            UserFundCheckValidator.php
+    Game
+        AdminControllers
+            GameRewardGroupController.php
+            GameRewardItemController.php
+            GameRewardLogController.php
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            LazyRenderable
+                RewardGroupLazyRenderable.php
+            TestController.php
+        Commands
+            CleanExpiredRewardLogsCommand.php
+            ImportRewardGroupsCommand.php
+            TestItemTempCommand.php
+        Config
+            test.php
+        DCache
+            ChestJsonConfig.php
+            ItemJsonConfig.php
+            PetJsonConfig.php
+        Docs
+            奖励组系统.md
+            宠物暂存系统.md
+            物品暂存系统.md
+            配置表索引.md
+        Dtos
+            ItemChangeTempDto.php
+            PetCreatedTempDto.php
+            PetDataSimpleTempDto.php
+            PetStatusTempDto.php
+            RewardGroupDto.php
+            RewardItemDto.php
+            RewardResultDto.php
+        Enums
+            COST_TYPE.php
+            JSON_CONFIG_NAME.php
+            REWARD_SOURCE_TYPE.php
+            REWARD_TYPE.php
+            TEST_TYPE.php
+        Events
+            RewardGrantedEvent.php
+            TestEvent.php
+        Exceptions
+            TestException.php
+        Jobs
+            TestJob.php
+        Listeners
+            ItemQuantityChangedListener.php
+            LogRewardGrantedListener.php
+            NotifyRewardGrantedListener.php
+            PetCreatedListener.php
+            PetStatusChangedListener.php
+            PetUpdateListener.php
+            README.md
+        Logics
+            ItemTemp.php
+            PetTemp.php
+            README.md
+            RewardLogic.php
+        Models
+            GameRewardGroup.php
+            GameRewardItem.php
+            GameRewardLog.php
+        Providers
+            GameServiceProvider.php
+        Queues
+            README.md
+        README.md
+        Repositorys
+            GameRewardGroupRepository.php
+            GameRewardItemRepository.php
+            GameRewardLogRepository.php
+            README.md
+        Services
+            ItemTempService.php
+            JsonConfigService.php
+            PetTempService.php
+            RewardService.php
+        Tests
+            TestEventTest.php
+            TestHookTest.php
+            TestSoftDeleteTest.php
+            TestTest.php
+        Validations
+            TestValidation.php
+        Validators
+            TestValidator.php
+    GameItems
+        AdminControllers
+            Actions
+                BatchActivate.php
+                BatchDeactivate.php
+                ChestManageAction.php
+                CopyToAnotherChest.php
+                DuplicateChestContentAction.php
+                DuplicateRowAction.php
+            CategoryController.php
+            ChestContentController.php
+            ChestOpenLogController.php
+            CraftLogController.php
+            DismantleLogController.php
+            DismantleRuleController.php
+            GroupController.php
+            GroupItemController.php
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                ShowHelper.php
+            InstanceController.php
+            ItemChestOpenCostController.php
+            ItemController.php
+            LazyRenderable
+                ChestLazyRenderable.php
+                ItemGroupLazyRenderable.php
+                ItemLazyRenderable.php
+                RecipeLazyRenderable.php
+            OutputLimitController.php
+            PityTimeController.php
+            RecipeController.php
+            Tools
+                RefreshCheckTool.php
+                SyncItemsJsonTool.php
+            TransactionLogController.php
+            UserItemController.php
+            UserOutputCounterController.php
+            UserRecipeController.php
+        AdminForms
+            AddItemForm.php
+        Casts
+            ChestOpenResultsCast.php
+            DisplayAttributesCast.php
+            JsonCast.php
+            NumericAttributesCast.php
+            TransactionDetailsCast.php
+        Commands
+            GenerateChestJsonCommand.php
+            GenerateItemsJsonCommand.php
+            TestJsonGenerationCommand.php
+        Config
+            test.php
+        DEV.md
+        Databases
+            GenerateSql
+                README.md
+                item_categories.sql
+                item_chest_contents.sql
+                item_chest_open_logs.sql
+                item_craft_logs.sql
+                item_dismantle_logs.sql
+                item_dismantle_results.sql
+                item_dismantle_rules.sql
+                item_group_items.sql
+                item_groups.sql
+                item_instances.sql
+                item_items.sql
+                item_output_limits.sql
+                item_pity_times.sql
+                item_recipe_materials.sql
+                item_recipes.sql
+                item_transaction_logs.sql
+                item_user_output_counters.sql
+                item_user_recipes.sql
+                item_users.sql
+        Docs
+            GUILD.md
+            README.cline-gemini25.md
+            README.md
+            WORK.md
+            宝箱开启消耗配置系统.md
+            掉落组.md
+            物品配置表.md
+        Dtos
+            ItemChestOpenCostDto.php
+        Enums
+            CHEST_COST_TYPE.php
+            ITEM_BIND_TYPE.php
+            ITEM_TYPE.php
+            TRANSACTION_TYPE.php
+        Events
+            ChestOpened.php
+            ItemAcquired.php
+            ItemConsumed.php
+            ItemQuantityChanged.php
+        Examples
+            ItemQuantityExample.php
+        Exceptions
+            TestException.php
+        Jobs
+            TestJob.php
+        Listeners
+            TestEventListener.php
+            TestListener.php
+        Logics
+            ChestContent.php
+            ChestOpenCostLogic.php
+            Group.php
+            Item.php
+            ItemInstance.php
+            ItemQuantity.php
+            PityTime.php
+            Recipe.php
+            UserOutputCounter.php
+            UserRecipe.php
+        Models
+            Item.php
+            ItemCategory.php
+            ItemChestContent.php
+            ItemChestOpenCost.php
+            ItemChestOpenLog.php
+            ItemCraftLog.php
+            ItemDismantleLog.php
+            ItemDismantleResult.php
+            ItemDismantleRule.php
+            ItemGroup.php
+            ItemGroupItem.php
+            ItemInstance.php
+            ItemOutputLimit.php
+            ItemPityTime.php
+            ItemRecipe.php
+            ItemRecipeMaterial.php
+            ItemTransactionLog.php
+            ItemUser.php
+            ItemUserOutputCounter.php
+            ItemUserRecipe.php
+            README.md
+        Providers
+            GameItemsServiceProvider.php
+        Queues
+            TestQueue.php
+        README.md
+        Repositorys
+            ItemCategoryRepository.php
+            ItemChestContentRepository.php
+            ItemChestOpenCostRepository.php
+            ItemChestOpenLogRepository.php
+            ItemCraftLogRepository.php
+            ItemDismantleLogRepository.php
+            ItemDismantleResultRepository.php
+            ItemDismantleRuleRepository.php
+            ItemGroupItemRepository.php
+            ItemGroupRepository.php
+            ItemInstanceRepository.php
+            ItemOutputLimitRepository.php
+            ItemPityTimeRepository.php
+            ItemRecipeMaterialRepository.php
+            ItemRecipeRepository.php
+            ItemRepository.php
+            ItemTransactionLogRepository.php
+            ItemUserOutputCounterRepository.php
+            ItemUserRecipeRepository.php
+            ItemUserRepository.php
+            README.md
+        Services
+            ChestService.php
+            ItemService.php
+        Tests
+            TestEventTest.php
+            TestHookTest.php
+            TestSoftDeleteTest.php
+            TestTest.php
+        Validation
+            ItemQuantityValidation.php
+        Validations
+            TestValidation.php
+        Validators
+            IsExpiredValidator.php
+            ItemQuantityValidator.php
+    LCache
+        Cache.php
+        CacheItem.php
+        DQueueJob.php
+        DQueueJobInterface.php
+        ItemInterface.php
+        QueueCache.php
+        QueueJob.php
+        QueueJobInterface.php
+        README.md
+        SCache.php
+    Mail
+        Hooks
+            MailNotificationHook.php
+        README.md
+    Notification
+        Commands
+            README.md
+        Contracts
+            NotificationHookInterface.php
+        Enums
+            NOTIFICATION_CHANNEL.php
+            NOTIFICATION_STATUS.php
+            README.md
+        Providers
+            NotificationServiceProvider.php
+        Queues
+            README.md
+            SendNotificationQueue.php
+        README.md
+        Services
+            HookManager.php
+            NotificationService.php
+            README.md
+        Validations
+            README.md
+        Validators
+            README.md
+        database
+            README.md
+    OAuth
+        Admin
+            Tools
+                TokenStats.php
+            bootstrap.php
+        AdminControllers
+            OAuthClientController.php
+        Controllers
+            AuthorizeController.php
+            LoginController.php
+            TokenController.php
+            UserController.php
+        Databases
+            GenerateSql
+                README.md
+                oauth_access_tokens.sql
+                oauth_clients.sql
+        Middleware
+            StartSession.php
+        Models
+            OAuthAccessToken.php
+            OAuthClient.php
+        OAuthServiceProvider.php
+        Repositories
+            AccessTokenRepository.php
+            ClientRepository.php
+            OAuthRepository.php
+        Services
+            AuthService.php
+            OAuth.php
+            OAuthService.php
+        resources
+            assets
+                css
+                    oauth.css
+            views
+                admin
+                    token_stats.blade.php
+                authorize.blade.php
+                login.blade.php
+        routes.php
+    Pet
+        AdminControllers
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            LazyRenderable
+                PetLazyRenderable.php
+                PetSkillLazyRenderable.php
+                PetUserLazyRenderable.php
+            PetBattleLogController.php
+            PetBattleSeasonController.php
+            PetBattleTeamController.php
+            PetBattleTeamMemberController.php
+            PetConfigController.php
+            PetLevelConfigController.php
+            PetRemouldLogController.php
+            PetSkillController.php
+            PetSkillLogController.php
+            PetUserController.php
+        Casts
+            DisplayAttributesCast.php
+            GradeProbability.php
+            NumericAttributesCast.php
+        Commands
+            GeneratePetJsonCommand.php
+        Databases
+            GenerateSql
+                README.md
+                pet_battle_logs.sql
+                pet_battle_seasons.sql
+                pet_battle_team_members.sql
+                pet_battle_teams.sql
+                pet_configs.sql
+                pet_level_configs.sql
+                pet_remould_logs.sql
+                pet_skill_logs.sql
+                pet_skills.sql
+                pet_users.sql
+        Docs
+            Proto设计.md
+            事件系统.md
+            宠物配置表.md
+        Dtos
+            DataPetSimpleDto.php
+            PetDataDto.php
+            PetLifeSkillDto.php
+        Enums
+            PetStatus.php
+        Events
+            PetBattleEvent.php
+            PetCreatedEvent.php
+            PetLevelUpEvent.php
+            PetRemouldEvent.php
+            PetSkillUsedEvent.php
+            PetStatusChangedEvent.php
+            PetUpdateEvent.php
+            README.md
+        Factories
+            PetDtoFactory.php
+            README.md
+        Listeners
+            LoginSuccessListener.php
+        Logic
+            PetBattleLogic.php
+            PetLogic.php
+        Models
+            PetBattleLog.php
+            PetBattleSeason.php
+            PetBattleTeam.php
+            PetBattleTeamMember.php
+            PetConfig.php
+            PetLevelConfig.php
+            PetRemouldLog.php
+            PetSkill.php
+            PetSkillLog.php
+            PetUser.php
+        Providers
+            PetServiceProvider.php
+        README.md
+        Repositorys
+            PetBattleLogRepository.php
+            PetBattleSeasonRepository.php
+            PetBattleTeamMemberRepository.php
+            PetBattleTeamRepository.php
+            PetConfigRepository.php
+            PetLevelConfigRepository.php
+            PetRemouldLogRepository.php
+            PetSkillLogRepository.php
+            PetSkillRepository.php
+            PetUserRepository.php
+        Services
+            PetService.php
+        Validators
+            PetCreateValidator.php
+            PetExistsValidator.php
+            PetFoodValidator.php
+            PetLevelUpValidator.php
+            PetRemouldValidator.php
+            PetSkillUseValidator.php
+            PetStatusChangeValidator.php
+            PetStatusValidator.php
+        ask.md
+    Protobuf
+        Validators
+            EnumValidator.php
+    Push
+        Hooks
+            PushNotificationHook.php
+        README.md
+    README.md
+    Sms
+        AdminControllers
+            MyGatewayController.php
+            SmscodeLogController.php
+        Databases
+            GenerateSql
+                README.md
+                sms_code.sql
+                sms_config.sql
+                sms_dbgateway.sql
+        Enums
+            CODE_TYPE.php
+            Code.php
+        Gateway
+            MyGateway.php
+        Messages
+            BaseMessage.php
+            LoginMessage.php
+            RegisterMessage.php
+            ResetPasswordMessage.php
+        Models
+            SmsCode.php
+            SmsConfig.php
+            SmsDbGateway.php
+        Providers
+            SmsServiceProvider.php
+        README.md
+        Repositories
+            SmsCodeRepository.php
+            SmsConfigRepository.php
+            SmsDbGatewayRepository.php
+        Services
+            SmsService.php
+        Strategy
+            MyPriority.php
+        Tests
+            Unit
+                SmsServiceTest.php
+        Validation
+            CheckPhone.php
+        Validators
+            PhoneCodeValidator.php
+            PhoneValidator.php
+        config
+            easysms.php
+    System
+        Admin
+            Actions
+                ConfigEditAction.php
+                ConfigEditForm.php
+                ConfigEmbedsEditAction.php
+                ConfigEmbedsEditForm.php
+                ConfigFloatEditAction.php
+                ConfigFloatEditForm.php
+                ConfigImgEditAction.php
+                ConfigImgEditForm.php
+                ConfigIntEditAction.php
+                ConfigIntEditForm.php
+                ConfigJsonEditAction.php
+                ConfigJsonEditForm.php
+                ConfigStringEditAction.php
+                ConfigStringEditForm.php
+                ConfigSwitchEditAction.php
+                ConfigSwitchEditForm.php
+                ConfigTimeEditAction.php
+                ConfigTimeEditForm.php
+                ToConfig.php
+                ToConfigAdmin.php
+        AdminControllers
+            ActionLogController.php
+            AdminGridViewController.php
+            ConfigAController.php
+            ConfigController.php
+            NoticeTempleteController.php
+            ToolController.php
+        AdminForms
+            CacheClear.php
+            CacheClearTag.php
+            Setting.php
+        AdminLazyRenderable
+            AdminInfo.php
+            UserInfo.php
+            UserSession.php
+            UserTable.php
+        AdminMetrics
+            Alarm.php
+        Cache
+            RequestLogPath.php
+            RequestLogRouter.php
+            RequestLogRouterSearch.php
+        Controllers
+            DemoController.php
+        Databases
+            1.sql
+            GenerateSql
+                README.md
+                admin_actionlogs.sql
+                admin_grid_views.sql
+                admin_users.sql
+                continuous_times.sql
+                sys_configs.sql
+        Enums
+            CONFIG_TYPE.php
+            README.md
+            VIEW_TYPE.php
+        Models
+            AdminActionlog.php
+            AdminGridView.php
+            AdminUser.php
+            Administrator.php
+            ContinuousTimes.php
+            SysConfig.php
+        Repositories
+            Administrator.php
+            AppConfig.php
+            Logs.php
+            RequireLog.php
+            Route.php
+            Trace.php
+        Repositorys
+            AdminActionLog.php
+            Administrator.php
+            AppConfig.php
+            Logs.php
+            RequireLog.php
+            Route.php
+            Trace.php
+        Services
+            Admin.php
+            ConfigService.php
+            Consts.php
+            ContinuousTimes.php
+            Fund.php
+            Job.php
+            Key.php
+            OrderNo.php
+            RequestLogger.php
+            User.php
+    Task
+        AdminControllers
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            TaskAchievementConditionController.php
+            TaskCategoryController.php
+            TaskCompletionLogController.php
+            TaskConditionController.php
+            TaskController.php
+            TaskCostController.php
+            TaskCostLogController.php
+            TaskResetLogController.php
+            TaskRewardController.php
+            TaskRewardLogController.php
+            TaskUserProgressController.php
+            TaskUserTaskController.php
+        Commands
+            CheckTaskProgressCommand.php
+            CleanExpiredTasksCommand.php
+            GenerateTaskConfigCommand.php
+            TaskResetCheckCommand.php
+        DEV.md
+        Databases
+            GenerateSql
+                README.md
+                task_achievement_conditions.sql
+                task_categories.sql
+                task_completion_logs.sql
+                task_conditions.sql
+                task_cost_logs.sql
+                task_costs.sql
+                task_reset_logs.sql
+                task_reward_logs.sql
+                task_rewards.sql
+                task_tasks.sql
+                task_user_progress.sql
+                task_user_tasks.sql
+        Docs
+            README.md
+            create.sql
+            与其他模块集成.md
+            事件系统.md
+            任务被动重置机制规划_updated.md
+            任务重置系统_new.md
+            数据库设计.md
+            设计概述_new.md
+            配置表设计.md
+        Docs_Roo_dpv3
+            Proto设计规范.md
+            事件系统设计.md
+            任务模块设计方案.md
+            任务配置指南.md
+            任务配置表.json
+            数据库设计.md
+            数据库设计比对报告.md
+        Dtos
+            TaskConditionDto.php
+            TaskDto.php
+            TaskProgressDto.php
+            TaskRewardDto.php
+        Enums
+            RESET_TYPE.php
+            REWARD_TYPE.php
+            TARGET_TYPE.php
+            TASK_STATUS.php
+            TASK_TYPE.php
+        Events
+            TaskCompletedEvent.php
+            TaskRewardClaimedEvent.php
+        Listeners
+            BaseTaskEventListener.php
+            TaskCompletedListener.php
+            TaskRewardClaimedListener.php
+        Models
+            Task.php
+            TaskAchievementCondition.php
+            TaskCategory.php
+            TaskCompletionLog.php
+            TaskCondition.php
+            TaskConditionType.php
+            TaskCost.php
+            TaskCostLog.php
+            TaskResetLog.php
+            TaskReward.php
+            TaskRewardLog.php
+            TaskUserProgress.php
+            TaskUserTask.php
+        Providers
+            TaskServiceProvider.php
+        README.md
+        Repositorys
+            TaskAchievementConditionRepository.php
+            TaskCategoryRepository.php
+            TaskCompletionLogRepository.php
+            TaskConditionRepository.php
+            TaskCostLogRepository.php
+            TaskCostRepository.php
+            TaskRepository.php
+            TaskResetLogRepository.php
+            TaskRewardLogRepository.php
+            TaskRewardRepository.php
+            TaskUserProgressRepository.php
+            TaskUserTaskRepository.php
+        Services
+            TaskConditionService.php
+            TaskConfigService.php
+            TaskProgressService.php
+            TaskRewardService.php
+            TaskService.php
+    Team
+        AdminControllers
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            TeamInviteRewardController.php
+            TeamProfitController.php
+            TeamProfitRuleController.php
+            TeamReferralChangeController.php
+            TeamReferralCodeController.php
+            TeamReferralCodeUsageController.php
+            TeamTalentConfigController.php
+            TeamUserReferralController.php
+            TeamUserRelationCacheController.php
+            TeamUserTalentController.php
+        Commands
+            CleanExpiredReferralCodesCommand.php
+            RebuildRelationCacheCommand.php
+            UpdateTalentLevelsCommand.php
+        Databases
+            GenerateSql
+                README.md
+                team_invite_rewards.sql
+                team_profit_rules.sql
+                team_profits.sql
+                team_referral_changes.sql
+                team_referral_code_usages.sql
+                team_referral_codes.sql
+                team_talent_configs.sql
+                team_user_referrals.sql
+                team_user_relation_cache.sql
+                team_user_talents.sql
+        Docs
+            README.md
+            create.sql
+            与Farm模块集成.md
+            推荐关系系统.md
+            数据库设计.md
+            枚举定义.md
+            模块接口.md
+            直间推收益机制.md
+            缓存策略.md
+            设计概述.md
+        Enums
+            PROFIT_RECORD_STATUS.php
+            PROFIT_SOURCE_TYPE.php
+            REFERRAL_CODE_STATUS.php
+            REFERRAL_LEVEL.php
+            TALENT_LEVEL.php
+            TEAM_TASK_STATUS.php
+            TEAM_TASK_TYPE.php
+        Events
+            ReferralCreatedEvent.php
+            ReferralUpdatedEvent.php
+            TalentLevelChangedEvent.php
+            TeamProfitCreatedEvent.php
+        Listeners
+            DistributeTeamProfitListener.php
+            UpdateTalentLevelListener.php
+            UpdateTeamCountsListener.php
+        Logics
+            ReferralCodeLogic.php
+            ReferralLogic.php
+            RelationCacheLogic.php
+            TalentLogic.php
+            TeamProfitLogic.php
+        Models
+            TeamInviteReward.php
+            TeamProfit.php
+            TeamProfitRule.php
+            TeamReferralChange.php
+            TeamReferralCode.php
+            TeamReferralCodeUsage.php
+            TeamTalentConfig.php
+            TeamUserReferral.php
+            TeamUserRelationCache.php
+            TeamUserTalent.php
+        Providers
+            TeamServiceProvider.php
+        README.md
+        Repositorys
+            BaseRepository.php
+            TeamInviteRewardRepository.php
+            TeamProfitRepository.php
+            TeamProfitRuleRepository.php
+            TeamReferralChangeRepository.php
+            TeamReferralCodeRepository.php
+            TeamReferralCodeUsageRepository.php
+            TeamTalentConfigRepository.php
+            TeamUserReferralRepository.php
+            TeamUserRelationCacheRepository.php
+            TeamUserTalentRepository.php
+        Services
+            ReferralCodeService.php
+            ReferralService.php
+            TalentService.php
+            TeamProfitService.php
+    Test
+        AdminControllers
+            TestController.php
+        Commands
+            TestCommands.php
+        Config
+            test.php
+        DEV.md
+        Databases
+            GenerateSql
+                README.md
+                test.sql
+            createsql
+                kku_test.sql
+        Enums
+            TEST_TYPE.php
+        Events
+            TestEvent.php
+        Exceptions
+            TestException.php
+        Jobs
+            TestJob.php
+        Listeners
+            TestEventListener.php
+            TestListener.php
+        Models
+            Test.php
+        Providers
+            TestServiceProvider.php
+        Queues
+            TestQueue.php
+        README.md
+        Repositorys
+            FundAdminRepository.php
+        Services
+            TestService.php
+        Tests
+            TestEventTest.php
+            TestHookTest.php
+            TestSoftDeleteTest.php
+            TestTest.php
+        Validations
+            TestValidation.php
+        Validators
+            TestValidator.php
+    Ulogic
+        Databases
+            GenerateSql
+                README.md
+                app_message_recipients.sql
+                app_message_templates.sql
+                app_messages.sql
+                user_daytimes.sql
+                user_punishs.sql
+                user_times.sql
+        DayTimes.php
+        Enum
+            APP_MESSAGE_STATUS.php
+            APP_MESSAGE_TYPE.php
+            APP_SENDER_TYPE.php
+            INTERNAL_TYPE.php
+            PUNISH_GROUP.php
+            PUNISH_TYPE.php
+            RULE.php
+            USER_ADDRESS_TYPE.php
+            WALLET_ADDRESS_STATUS.php
+            WALLET_ADDRESS_TYPE.php
+        HourTimes.php
+        Models
+            AppMessage.php
+            AppMessageRecipient.php
+            AppMessageTemplate.php
+            README.md
+            UserDaytime.php
+            UserPunish.php
+            UserTime.php
+        Punish.php
+        Queues
+            SendAppMessageQueue.php
+        README.md
+        Repository
+            Internal.php
+            README.md
+            UserPunish.php
+        Services
+            AppMessageService.php
+            UserAddressService.php
+            UserRelationService.php
+            WalletAddressService.php
+        Times.php
+        Unit
+            User.php
+        Unit.php
+        Validation
+            README.md
+            UserAddress.php
+        Validator
+            Model2UnitValidator.php
+            README.md
+            ULimitDayTimeValidator.php
+            ULimitTimeValidator.php
+            URLimitValidator.php
+        logic
+            PunishGroup.php
+            PunishLevel.php
+    User
+        AdminControllers
+            Helper
+                FilterHelper.php
+                FilterHelperTrait.php
+                FormHelper.php
+                FormHelperTrait.php
+                GridHelper.php
+                GridHelperTrait.php
+                ShowHelper.php
+                ShowHelperTrait.php
+            UserActionController.php
+            UserController.php
+            UserInfoController.php
+            UserPhoneController.php
+            UserSecretPasswordController.php
+        Controllers
+            IndexController.php
+        Databases
+            GenerateSql
+                README.md
+                user_actions.sql
+                user_infos.sql
+                user_phones.sql
+                user_secret_passwords.sql
+                users.sql
+        Docs
+            README.md
+            与其他模块集成.md
+            事件系统.md
+            后台控制器.md
+        Enums
+            ACTION_STATUS.php
+            ACTION_TYPE.php
+            PHONE_STATUS.php
+            PHONE_TYPE.php
+            README.md
+            SECRET_PASSWORD_STATUS.php
+            STATUS.php
+            STATUS2.php
+        Events
+            UserCreatedEvent.php
+            UserInfoUpdatedEvent.php
+            UserStatusChangedEvent.php
+            UserUpdatedEvent.php
+        Listeners
+            UserEventListener.php
+        Logic
+            User.php
+        Models
+            Events
+                UserId.php
+                UserIdInterface.php
+                UserInfoSaved.php
+                UserInfoUpdate.php
+                UserPhoneSaved.php
+                UserPhoneUpdate.php
+                UserSaved.php
+                UserSecretPasswordSaved.php
+            User.php
+            UserAction.php
+            UserInfo.php
+            UserPhone.php
+            UserSecretPassword.php
+        Providers
+            UserServiceProvider.php
+        README.md
+        Repository
+            UserAction.php
+            UserInfo.php
+            readme.md
+        Repositorys
+            UserAction.php
+            UserInfo.php
+        Services
+            ActionService.php
+            Google2Fa.php
+            Online.php
+            Phone.php
+            SecurityPassword.php
+            UserOInfo.php
+            UserService.php
+        Unit
+            User.php
+            UserOInfo.php
+            UserPublic.php
+        Validation
+            Login4Phone.php
+            LoginBase.php
+            LoginValidation.php
+            PhoneResetSPassword.php
+            Register.php
+            SPasswordCheck.php
+        Validator
+            AuthPasswordAppValidator.php
+            AuthPasswordValidator.php
+            AutoRegPhoneValidator.php
+            CanLoginValidator.php
+            Google2FAAppValidator.php
+            Google2FAValidator.php
+            IsAuthPasswordValidator.php
+            LoginJizhi.php
+            NicknameValidator.php
+            NotMeValidator.php
+            PhoneAndCheckValidator.php
+            PhoneContinuousTimes.php
+            PhoneNValidator.php
+            PhoneUValidator.php
+            PhoneUserValidator.php
+            PhoneValidator.php
+            SPasswordValidator.php
+            UidValidator.php
+            UnionidValidator.php
+            UserEmailValidator.php
+            UserIdExsitValidator.php
+            UserIdInfo2Validator.php
+            UserIdInfoValidator.php
+            UserIdValidator.php
+            UsernameNtValidator.php
+            UsernameValidator.php
+    list.md
+    readme.ignore.md
+Providers
+    AppServiceProvider.php
+    EventServiceProvider.php
+    RouteServiceProvider.php
+Repositories
+    ArticleRepository.php
+Services
+    Blockchain
+        MinerService.php

+ 2 - 0
noai.md

@@ -74,3 +74,5 @@ app/Module下 Repository 类,应该位于各模块的 Repositorys 目录,找出
 
 
 在 UCore/Commands 下写一个命令,生成app目录的文件列表,到 app/tree.md 
+
+后台Helper 是用来处理`可复用`逻辑的,检查已有的后台Helper,移除没有`复用`价值的逻辑,编写有`复用`价值的Helper