| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- <?php
- use Illuminate\Database\Migrations\Migration;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Schema;
- /**
- * 模拟管理菜单及按钮权限。菜单 uri 等于后台前端的路由 name;按钮 uri 等于接口路径(或路由指定的 permission_uri)。
- * 每个写接口都有按钮行:没有按钮行的接口不做角色校验。
- */
- return new class extends Migration {
- private const PARENT = 'SimulationManagement';
- /** 菜单 uri => [标题, [按钮 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();
- }
- };
|