[标题, [按钮 uri => 标题]] */ private const MENUS = [ 'SimulationOverview' => ['模拟概览', ['admin/simulation/overview' => '查看']], 'SimulationMembers' => ['模拟会员', ['admin/simulation/members' => '查看', 'admin/simulation/members/create' => '创建会员', 'admin/simulation/members/banned' => '封禁/解封', 'admin/simulation/members/login' => '模拟登录', 'admin/simulation/members/logout' => '模拟退出']], 'SimulationFunds' => ['模拟资金', ['admin/simulation/funds' => '查看', 'admin/simulation/funds/recharge' => '模拟充值', 'admin/simulation/funds/withdraw' => '模拟提现', 'admin/simulation/funds/withdraw/audit' => '提现审核', 'admin/simulation/funds/adjust' => '人工调账', 'admin/simulation/funds/freeze' => '冻结', 'admin/simulation/funds/unfreeze' => '解冻']], 'SimulationBets' => ['模拟注单', ['admin/simulation/bets' => '查看', 'admin/simulation/bets/lottery' => '彩票下注', 'admin/simulation/bets/sport' => '体育下注', 'admin/simulation/bets/third' => '第三方游戏下注', 'admin/simulation/bets/sport/settle' => '体育结算', 'admin/simulation/bets/sport/cancel' => '体育撤单']], 'SimulationTasks' => ['自动任务', ['admin/simulation/tasks' => '查看', 'admin/simulation/tasks/templates' => '保存模板', 'admin/simulation/tasks/templates/delete' => '删除模板', 'admin/simulation/tasks/runs' => '启动任务', 'admin/simulation/tasks/quick-start' => '一键启动', 'admin/simulation/tasks/runs/status' => '暂停/继续/停止']], 'SimulationReports' => ['模拟报表', ['admin/simulation/reports' => '查看', 'admin/simulation/reports/refresh' => '立即刷新']], 'SimulationLogs' => ['操作日志', ['admin/simulation/logs' => '查看']], 'SimulationSettings' => ['模拟设置', ['admin/simulation/settings' => '查看', 'admin/simulation/settings/save' => '保存设置', 'admin/simulation/reset' => '重置模拟数据']], ]; public function up(): void { if (!Schema::hasTable('menus')) return; $parentId = $this->upsert(self::PARENT, ['parent_id' => 0, 'title' => '模拟管理', 'type' => 1, 'sort' => 99, 'permission_name' => 'simulation']); $sort = 0; foreach (self::MENUS as $uri => [$title, $buttons]) { $menuId = $this->upsert($uri, ['parent_id' => $parentId, 'title' => $title, 'type' => 1, 'sort' => $sort++, 'permission_name' => 'simulation.' . $uri]); $order = 0; foreach ($buttons as $buttonUri => $buttonTitle) { $this->upsert($buttonUri, ['parent_id' => $menuId, 'title' => $title . '-' . $buttonTitle, 'type' => 2, 'sort' => $order++, 'permission_name' => str_replace('/', '.', $buttonUri)]); } } } private function upsert(string $uri, array $values): int { $now = date('Y-m-d H:i:s'); $existing = DB::table('menus')->where('uri', $uri)->first(['id']); if ($existing) { DB::table('menus')->where('id', $existing->id)->update($values + ['status' => 1, 'updated_at' => $now]); return (int) $existing->id; } return (int) DB::table('menus')->insertGetId($values + ['uri' => $uri, 'icon' => null, 'status' => 1, 'created_at' => $now, 'updated_at' => $now]); } public function down(): void { if (!Schema::hasTable('menus')) return; $uris = [self::PARENT]; foreach (self::MENUS as $uri => [, $buttons]) $uris = array_merge($uris, [$uri], array_keys($buttons)); $ids = DB::table('menus')->whereIn('uri', $uris)->pluck('id'); if (Schema::hasTable('role_menu')) DB::table('role_menu')->whereIn('menu_id', $ids)->delete(); DB::table('menus')->whereIn('id', $ids)->delete(); } };