createSystemPermissions(); $this->createSystemDictionaries(); $this->createSystemConfigs(); $this->command->info('System module data seeded successfully!'); // 恢复外键约束 if (DB::getDriverName() === 'sqlite') { DB::statement('PRAGMA foreign_keys = ON;'); } else { DB::statement('SET FOREIGN_KEY_CHECKS=1;'); } } /** * 创建系统管理权限节点 */ private function createSystemPermissions(): void { $permissions = [ // 系统顶级菜单 [ 'title' => '系统', 'name' => 'system', 'type' => 'menu', 'parent_id' => 0, 'path' => '/system', 'component' => null, 'meta' => json_encode([ 'icon' => 'Setting', 'hidden' => false, 'hiddenBreadcrumb' => false, ]), 'sort' => 3, 'status' => 1, ], // 系统配置 [ 'title' => '系统配置', 'name' => 'system.setting', 'type' => 'menu', 'parent_id' => 0, // 稍后更新为系统菜单的ID 'path' => '/system/setting', 'component' => 'system/setting/index', 'meta' => json_encode([ 'icon' => 'SettingFilled', 'hidden' => false, 'hiddenBreadcrumb' => false, ]), 'sort' => 1, 'status' => 1, ], [ 'title' => '查看配置', 'name' => 'system.setting.view', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统配置菜单的ID 'path' => 'admin.setting.index', 'component' => null, 'meta' => null, 'sort' => 1, 'status' => 1, ], [ 'title' => '创建配置', 'name' => 'system.setting.create', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统配置菜单的ID 'path' => 'admin.setting.store', 'component' => null, 'meta' => null, 'sort' => 2, 'status' => 1, ], [ 'title' => '编辑配置', 'name' => 'system.setting.update', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统配置菜单的ID 'path' => 'admin.setting.update', 'component' => null, 'meta' => null, 'sort' => 3, 'status' => 1, ], [ 'title' => '删除配置', 'name' => 'system.setting.delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统配置菜单的ID 'path' => 'admin.setting.destroy', 'component' => null, 'meta' => null, 'sort' => 4, 'status' => 1, ], [ 'title' => '批量删除配置', 'name' => 'system.setting.batch-delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统配置菜单的ID 'path' => 'admin.setting.batch-delete', 'component' => null, 'meta' => null, 'sort' => 5, 'status' => 1, ], // 系统日志 [ 'title' => '系统日志', 'name' => 'system.log', 'type' => 'menu', 'parent_id' => 0, // 稍后更新为系统菜单的ID 'path' => '/system/log', 'component' => 'system/log/index', 'meta' => json_encode([ 'icon' => 'DocumentCopy', 'hidden' => false, 'hiddenBreadcrumb' => false, ]), 'sort' => 2, 'status' => 1, ], [ 'title' => '查看日志', 'name' => 'system.log.view', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统日志菜单的ID 'path' => 'admin.log.index', 'component' => null, 'meta' => null, 'sort' => 1, 'status' => 1, ], [ 'title' => '删除日志', 'name' => 'system.log.delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统日志菜单的ID 'path' => 'admin.log.destroy', 'component' => null, 'meta' => null, 'sort' => 2, 'status' => 1, ], [ 'title' => '批量删除日志', 'name' => 'system.log.batch-delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统日志菜单的ID 'path' => 'admin.log.batch-delete', 'component' => null, 'meta' => null, 'sort' => 3, 'status' => 1, ], [ 'title' => '导出日志', 'name' => 'system.log.export', 'type' => 'button', 'parent_id' => 0, // 稍后更新为系统日志菜单的ID 'path' => 'admin.log.export', 'component' => null, 'meta' => null, 'sort' => 4, 'status' => 1, ], // 数据字典 [ 'title' => '数据字典', 'name' => 'system.dictionary', 'type' => 'menu', 'parent_id' => 0, // 稍后更新为系统菜单的ID 'path' => '/system/dictionary', 'component' => 'system/dictionary/index', 'meta' => json_encode([ 'icon' => 'Notebook', 'hidden' => false, 'hiddenBreadcrumb' => false, ]), 'sort' => 3, 'status' => 1, ], [ 'title' => '查看字典', 'name' => 'system.dictionary.view', 'type' => 'button', 'parent_id' => 0, // 稍后更新为数据字典菜单的ID 'path' => 'admin.dictionary.index', 'component' => null, 'meta' => null, 'sort' => 1, 'status' => 1, ], [ 'title' => '创建字典', 'name' => 'system.dictionary.create', 'type' => 'button', 'parent_id' => 0, // 稍后更新为数据字典菜单的ID 'path' => 'admin.dictionary.store', 'component' => null, 'meta' => null, 'sort' => 2, 'status' => 1, ], [ 'title' => '编辑字典', 'name' => 'system.dictionary.update', 'type' => 'button', 'parent_id' => 0, // 稍后更新为数据字典菜单的ID 'path' => 'admin.dictionary.update', 'component' => null, 'meta' => null, 'sort' => 3, 'status' => 1, ], [ 'title' => '删除字典', 'name' => 'system.dictionary.delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为数据字典菜单的ID 'path' => 'admin.dictionary.destroy', 'component' => null, 'meta' => null, 'sort' => 4, 'status' => 1, ], [ 'title' => '批量删除字典', 'name' => 'system.dictionary.batch-delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为数据字典菜单的ID 'path' => 'admin.dictionary.batch-delete', 'component' => null, 'meta' => null, 'sort' => 5, 'status' => 1, ], // 定时任务 [ 'title' => '定时任务', 'name' => 'system.task', 'type' => 'menu', 'parent_id' => 0, // 稍后更新为系统菜单的ID 'path' => '/system/task', 'component' => 'system/task/index', 'meta' => json_encode([ 'icon' => 'Timer', 'hidden' => false, 'hiddenBreadcrumb' => false, ]), 'sort' => 4, 'status' => 1, ], [ 'title' => '查看任务', 'name' => 'system.task.view', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.index', 'component' => null, 'meta' => null, 'sort' => 1, 'status' => 1, ], [ 'title' => '创建任务', 'name' => 'system.task.create', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.store', 'component' => null, 'meta' => null, 'sort' => 2, 'status' => 1, ], [ 'title' => '编辑任务', 'name' => 'system.task.update', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.update', 'component' => null, 'meta' => null, 'sort' => 3, 'status' => 1, ], [ 'title' => '删除任务', 'name' => 'system.task.delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.destroy', 'component' => null, 'meta' => null, 'sort' => 4, 'status' => 1, ], [ 'title' => '批量删除任务', 'name' => 'system.task.batch-delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.batch-delete', 'component' => null, 'meta' => null, 'sort' => 5, 'status' => 1, ], [ 'title' => '执行任务', 'name' => 'system.task.execute', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.execute', 'component' => null, 'meta' => null, 'sort' => 6, 'status' => 1, ], [ 'title' => '启用任务', 'name' => 'system.task.enable', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.enable', 'component' => null, 'meta' => null, 'sort' => 7, 'status' => 1, ], [ 'title' => '禁用任务', 'name' => 'system.task.disable', 'type' => 'button', 'parent_id' => 0, // 稍后更新为定时任务菜单的ID 'path' => 'admin.task.disable', 'component' => null, 'meta' => null, 'sort' => 8, 'status' => 1, ], // 城市管理 [ 'title' => '城市管理', 'name' => 'system.city', 'type' => 'menu', 'parent_id' => 0, // 稍后更新为系统菜单的ID 'path' => '/system/city', 'component' => 'system/city/index', 'meta' => json_encode([ 'icon' => 'EnvironmentOutlined', 'hidden' => false, 'hiddenBreadcrumb' => false, ]), 'sort' => 5, 'status' => 1, ], [ 'title' => '查看城市', 'name' => 'system.city.view', 'type' => 'button', 'parent_id' => 0, // 稍后更新为城市管理菜单的ID 'path' => 'admin.city.index', 'component' => null, 'meta' => null, 'sort' => 1, 'status' => 1, ], [ 'title' => '创建城市', 'name' => 'system.city.create', 'type' => 'button', 'parent_id' => 0, // 稍后更新为城市管理菜单的ID 'path' => 'admin.city.store', 'component' => null, 'meta' => null, 'sort' => 2, 'status' => 1, ], [ 'title' => '编辑城市', 'name' => 'system.city.update', 'type' => 'button', 'parent_id' => 0, // 稍后更新为城市管理菜单的ID 'path' => 'admin.city.update', 'component' => null, 'meta' => null, 'sort' => 3, 'status' => 1, ], [ 'title' => '删除城市', 'name' => 'system.city.delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为城市管理菜单的ID 'path' => 'admin.city.destroy', 'component' => null, 'meta' => null, 'sort' => 4, 'status' => 1, ], [ 'title' => '批量删除城市', 'name' => 'system.city.batch-delete', 'type' => 'button', 'parent_id' => 0, // 稍后更新为城市管理菜单的ID 'path' => 'admin.city.batch-delete', 'component' => null, 'meta' => null, 'sort' => 5, 'status' => 1, ], ]; foreach ($permissions as $permission) { Permission::create($permission); } // 更新parent_id $this->updateParentIds(); } /** * 更新parent_id,建立层级关系 */ private function updateParentIds(): void { $permissions = Permission::all(); // 获取系统顶级菜单ID $systemMenu = $permissions->where('name', 'system')->first(); // 获取系统子菜单ID $settingMenu = $permissions->where('name', 'system.setting')->first(); $logMenu = $permissions->where('name', 'system.log')->first(); $dictionaryMenu = $permissions->where('name', 'system.dictionary')->first(); $taskMenu = $permissions->where('name', 'system.task')->first(); $cityMenu = $permissions->where('name', 'system.city')->first(); // 更新系统子菜单的parent_id if ($systemMenu) { if ($settingMenu) { $settingMenu->update(['parent_id' => $systemMenu->id]); } if ($logMenu) { $logMenu->update(['parent_id' => $systemMenu->id]); } if ($dictionaryMenu) { $dictionaryMenu->update(['parent_id' => $systemMenu->id]); } if ($taskMenu) { $taskMenu->update(['parent_id' => $systemMenu->id]); } if ($cityMenu) { $cityMenu->update(['parent_id' => $systemMenu->id]); } } // 更新按钮权限的parent_id - 系统配置 $settingViewBtn = $permissions->where('name', 'system.setting.view')->first(); $settingCreateBtn = $permissions->where('name', 'system.setting.create')->first(); $settingUpdateBtn = $permissions->where('name', 'system.setting.update')->first(); $settingDeleteBtn = $permissions->where('name', 'system.setting.delete')->first(); $settingBatchDeleteBtn = $permissions->where('name', 'system.setting.batch-delete')->first(); if ($settingMenu) { if ($settingViewBtn) { $settingViewBtn->update(['parent_id' => $settingMenu->id]); } if ($settingCreateBtn) { $settingCreateBtn->update(['parent_id' => $settingMenu->id]); } if ($settingUpdateBtn) { $settingUpdateBtn->update(['parent_id' => $settingMenu->id]); } if ($settingDeleteBtn) { $settingDeleteBtn->update(['parent_id' => $settingMenu->id]); } if ($settingBatchDeleteBtn) { $settingBatchDeleteBtn->update(['parent_id' => $settingMenu->id]); } } // 更新按钮权限的parent_id - 系统日志 $logViewBtn = $permissions->where('name', 'system.log.view')->first(); $logDeleteBtn = $permissions->where('name', 'system.log.delete')->first(); $logBatchDeleteBtn = $permissions->where('name', 'system.log.batch-delete')->first(); $logExportBtn = $permissions->where('name', 'system.log.export')->first(); if ($logMenu) { if ($logViewBtn) { $logViewBtn->update(['parent_id' => $logMenu->id]); } if ($logDeleteBtn) { $logDeleteBtn->update(['parent_id' => $logMenu->id]); } if ($logBatchDeleteBtn) { $logBatchDeleteBtn->update(['parent_id' => $logMenu->id]); } if ($logExportBtn) { $logExportBtn->update(['parent_id' => $logMenu->id]); } } // 更新按钮权限的parent_id - 数据字典 $dictViewBtn = $permissions->where('name', 'system.dictionary.view')->first(); $dictCreateBtn = $permissions->where('name', 'system.dictionary.create')->first(); $dictUpdateBtn = $permissions->where('name', 'system.dictionary.update')->first(); $dictDeleteBtn = $permissions->where('name', 'system.dictionary.delete')->first(); $dictBatchDeleteBtn = $permissions->where('name', 'system.dictionary.batch-delete')->first(); if ($dictionaryMenu) { if ($dictViewBtn) { $dictViewBtn->update(['parent_id' => $dictionaryMenu->id]); } if ($dictCreateBtn) { $dictCreateBtn->update(['parent_id' => $dictionaryMenu->id]); } if ($dictUpdateBtn) { $dictUpdateBtn->update(['parent_id' => $dictionaryMenu->id]); } if ($dictDeleteBtn) { $dictDeleteBtn->update(['parent_id' => $dictionaryMenu->id]); } if ($dictBatchDeleteBtn) { $dictBatchDeleteBtn->update(['parent_id' => $dictionaryMenu->id]); } } // 更新按钮权限的parent_id - 定时任务 $taskViewBtn = $permissions->where('name', 'system.task.view')->first(); $taskCreateBtn = $permissions->where('name', 'system.task.create')->first(); $taskUpdateBtn = $permissions->where('name', 'system.task.update')->first(); $taskDeleteBtn = $permissions->where('name', 'system.task.delete')->first(); $taskBatchDeleteBtn = $permissions->where('name', 'system.task.batch-delete')->first(); $taskExecuteBtn = $permissions->where('name', 'system.task.execute')->first(); $taskEnableBtn = $permissions->where('name', 'system.task.enable')->first(); $taskDisableBtn = $permissions->where('name', 'system.task.disable')->first(); if ($taskMenu) { if ($taskViewBtn) { $taskViewBtn->update(['parent_id' => $taskMenu->id]); } if ($taskCreateBtn) { $taskCreateBtn->update(['parent_id' => $taskMenu->id]); } if ($taskUpdateBtn) { $taskUpdateBtn->update(['parent_id' => $taskMenu->id]); } if ($taskDeleteBtn) { $taskDeleteBtn->update(['parent_id' => $taskMenu->id]); } if ($taskBatchDeleteBtn) { $taskBatchDeleteBtn->update(['parent_id' => $taskMenu->id]); } if ($taskExecuteBtn) { $taskExecuteBtn->update(['parent_id' => $taskMenu->id]); } if ($taskEnableBtn) { $taskEnableBtn->update(['parent_id' => $taskMenu->id]); } if ($taskDisableBtn) { $taskDisableBtn->update(['parent_id' => $taskMenu->id]); } } // 更新按钮权限的parent_id - 城市管理 $cityViewBtn = $permissions->where('name', 'system.city.view')->first(); $cityCreateBtn = $permissions->where('name', 'system.city.create')->first(); $cityUpdateBtn = $permissions->where('name', 'system.city.update')->first(); $cityDeleteBtn = $permissions->where('name', 'system.city.delete')->first(); $cityBatchDeleteBtn = $permissions->where('name', 'system.city.batch-delete')->first(); if ($cityMenu) { if ($cityViewBtn) { $cityViewBtn->update(['parent_id' => $cityMenu->id]); } if ($cityCreateBtn) { $cityCreateBtn->update(['parent_id' => $cityMenu->id]); } if ($cityUpdateBtn) { $cityUpdateBtn->update(['parent_id' => $cityMenu->id]); } if ($cityDeleteBtn) { $cityDeleteBtn->update(['parent_id' => $cityMenu->id]); } if ($cityBatchDeleteBtn) { $cityBatchDeleteBtn->update(['parent_id' => $cityMenu->id]); } } } /** * 创建系统字典 */ private function createSystemDictionaries(): void { // 创建字典类型 $dictionary = [ [ 'name' => '用户状态', 'code' => 'user_status', 'description' => '用户账号状态', 'value_type' => 'number', 'sort' => 1, 'status' => 1, ], [ 'name' => '性别', 'code' => 'gender', 'description' => '用户性别', 'value_type' => 'number', 'sort' => 2, 'status' => 1, ], [ 'name' => '角色状态', 'code' => 'role_status', 'description' => '角色启用状态', 'value_type' => 'number', 'sort' => 3, 'status' => 1, ], [ 'name' => '字典状态', 'code' => 'dictionary_status', 'description' => '数据字典状态', 'value_type' => 'number', 'sort' => 4, 'status' => 1, ], [ 'name' => '任务状态', 'code' => 'task_status', 'description' => '定时任务状态', 'value_type' => 'number', 'sort' => 5, 'status' => 1, ], [ 'name' => '日志类型', 'code' => 'log_type', 'description' => '系统日志类型', 'value_type' => 'string', 'sort' => 6, 'status' => 1, ], [ 'name' => '是否', 'code' => 'yes_no', 'description' => '是否选项', 'value_type' => 'boolean', 'sort' => 7, 'status' => 1, ], [ 'name' => '配置分组', 'code' => 'config_group', 'description' => '系统配置分组类型', 'value_type' => 'string', 'sort' => 8, 'status' => 1, ], ]; foreach ($dictionary as $dictionary) { $dict = Dictionary::create($dictionary); $this->createDictionaryItems($dict); } } /** * 创建字典项 */ private function createDictionaryItems(Dictionary $dictionary): void { $items = []; switch ($dictionary->code) { case 'user_status': $items = [ ['label' => '正常', 'value' => 1, 'sort' => 1, 'status' => 1], ['label' => '禁用', 'value' => 0, 'sort' => 2, 'status' => 1], ]; break; case 'gender': $items = [ ['label' => '男', 'value' => 1, 'sort' => 1, 'status' => 1], ['label' => '女', 'value' => 2, 'sort' => 2, 'status' => 1], ['label' => '保密', 'value' => 0, 'sort' => 3, 'status' => 1], ]; break; case 'role_status': $items = [ ['label' => '启用', 'value' => 1, 'sort' => 1, 'status' => 1], ['label' => '禁用', 'value' => 0, 'sort' => 2, 'status' => 1], ]; break; case 'dictionary_status': $items = [ ['label' => '启用', 'value' => 1, 'sort' => 1, 'status' => 1], ['label' => '禁用', 'value' => 0, 'sort' => 2, 'status' => 1], ]; break; case 'task_status': $items = [ ['label' => '待执行', 'value' => 0, 'sort' => 1, 'status' => 1], ['label' => '执行中', 'value' => 1, 'sort' => 2, 'status' => 1], ['label' => '已完成', 'value' => 2, 'sort' => 3, 'status' => 1], ['label' => '失败', 'value' => 3, 'sort' => 4, 'status' => 1], ]; break; case 'log_type': $items = [ ['label' => '登录日志', 'value' => 'login', 'sort' => 1, 'status' => 1], ['label' => '操作日志', 'value' => 'operation', 'sort' => 2, 'status' => 1], ['label' => '异常日志', 'value' => 'error', 'sort' => 3, 'status' => 1], ['label' => '系统日志', 'value' => 'system', 'sort' => 4, 'status' => 1], ]; break; case 'yes_no': $items = [ ['label' => '是', 'value' => 1, 'sort' => 1, 'status' => 1], ['label' => '否', 'value' => 0, 'sort' => 2, 'status' => 1], ]; break; case 'config_group': $items = [ ['label' => '网站设置', 'value' => 'site', 'sort' => 1, 'status' => 1], ['label' => '上传设置', 'value' => 'upload', 'sort' => 2, 'status' => 1], ['label' => '系统设置', 'value' => 'system', 'sort' => 3, 'status' => 1], ]; break; } foreach ($items as $item) { $dictionary->items()->create($item); } } /** * 创建系统配置 */ private function createSystemConfigs(): void { $configs = [ [ 'group' => 'site', 'key' => 'site_name', 'name' => '网站名称', 'value' => 'Laravel Swoole 管理系统', 'type' => 'string', 'description' => '系统显示的网站名称', 'sort' => 1, 'is_system' => true, 'status' => 1, ], [ 'group' => 'site', 'key' => 'site_logo', 'name' => '网站Logo', 'value' => '', 'type' => 'file', 'description' => '系统Logo图片地址', 'sort' => 2, 'is_system' => true, 'status' => 1, ], [ 'group' => 'site', 'key' => 'site_copyright', 'name' => '版权信息', 'value' => '© 2024 Laravel Swoole Admin', 'type' => 'string', 'description' => '网站底部版权信息', 'sort' => 3, 'is_system' => true, 'status' => 1, ], [ 'group' => 'site', 'key' => 'site_icp', 'name' => '备案号', 'value' => '', 'type' => 'string', 'description' => '网站备案号', 'sort' => 4, 'is_system' => true, 'status' => 1, ], [ 'group' => 'upload', 'key' => 'upload_max_size', 'name' => '上传最大限制', 'value' => '10', 'type' => 'number', 'description' => '文件上传最大限制(MB)', 'sort' => 1, 'is_system' => true, 'status' => 1, ], [ 'group' => 'upload', 'key' => 'upload_allowed_types', 'name' => '允许上传类型', 'value' => 'jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx', 'type' => 'string', 'description' => '允许上传的文件扩展名', 'sort' => 2, 'is_system' => true, 'status' => 1, ], [ 'group' => 'system', 'key' => 'user_default_avatar', 'name' => '默认头像', 'value' => '', 'type' => 'file', 'description' => '用户默认头像地址', 'sort' => 1, 'is_system' => true, 'status' => 1, ], [ 'group' => 'system', 'key' => 'system_timezone', 'name' => '系统时区', 'value' => 'Asia/Shanghai', 'type' => 'string', 'description' => '系统默认时区', 'sort' => 2, 'is_system' => true, 'status' => 1, ], [ 'group' => 'system', 'key' => 'system_language', 'name' => '系统语言', 'value' => 'zh-CN', 'type' => 'string', 'description' => '系统默认语言', 'sort' => 3, 'is_system' => true, 'status' => 1, ], [ 'group' => 'system', 'key' => 'enable_register', 'name' => '开启注册', 'value' => '1', 'type' => 'boolean', 'description' => '是否开启用户注册功能', 'sort' => 4, 'is_system' => true, 'status' => 1, ], ]; foreach ($configs as $config) { Config::create($config); } } }