Env::get('database.type', 'mysql'), 'hostname' => Env::get('database.hostname', '127.0.0.1'), 'database' => Env::get('database.database', 'database'), 'username' => Env::get('database.username', 'root'), 'password' => Env::get('database.password', 'root'), 'hostport' => Env::get('database.hostport', '3306'), 'charset' => Env::get('database.charset', 'utf8mb4'), 'prefix' => Env::get('database.prefix', 'tk_'), ]; // 连接数据库 try { $dsn = "{$dbConfig['type']}:host={$dbConfig['hostname']};port={$dbConfig['hostport']};dbname={$dbConfig['database']};charset={$dbConfig['charset']}"; $pdo = new PDO($dsn, $dbConfig['username'], $dbConfig['password']); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "数据库连接成功!\n"; } catch (PDOException $e) { die("数据库连接失败: " . $e->getMessage() . "\n"); } // 创建菜单表SQL $createTableSql = " CREATE TABLE IF NOT EXISTS `{$dbConfig['prefix']}menus` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID', `title` varchar(50) NOT NULL COMMENT '菜单名称', `path` varchar(100) NOT NULL COMMENT '路由路径', `icon` varchar(50) DEFAULT NULL COMMENT '图标名称', `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '父菜单ID,0表示顶级菜单', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1启用,0禁用', `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序,数值越小越靠前', `create_time` int(11) DEFAULT NULL COMMENT '创建时间', `update_time` int(11) DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `idx_parent_id` (`parent_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统菜单表'; "; // 执行创建表SQL try { $pdo->exec($createTableSql); echo "菜单表创建成功!\n"; } catch (PDOException $e) { echo "菜单表创建失败: " . $e->getMessage() . "\n"; } // 检查表中是否已有数据 $checkSql = "SELECT COUNT(*) FROM `{$dbConfig['prefix']}menus`"; try { $count = $pdo->query($checkSql)->fetchColumn(); if ($count > 0) { echo "菜单表中已有 {$count} 条数据,跳过数据初始化\n"; exit(0); } } catch (PDOException $e) { echo "检查数据失败: " . $e->getMessage() . "\n"; exit(1); } // 插入顶级菜单数据 $topMenus = [ ['仪表盘', '/dashboard', 'LayoutDashboard', 0, 1, 10], ['项目管理', '/dashboard/projects', 'FolderKanban', 0, 1, 20], ['客户池', '/dashboard/customers', 'Users', 0, 1, 30], ['管理员权限', '/dashboard/admins', 'Settings', 0, 1, 40], ['系统设置', '/settings', 'Cog', 0, 1, 50], ]; $insertTopMenuSql = "INSERT INTO `{$dbConfig['prefix']}menus` (`title`, `path`, `icon`, `parent_id`, `status`, `sort`, `create_time`, `update_time`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; $timestamp = time(); $insertStmt = $pdo->prepare($insertTopMenuSql); $pdo->beginTransaction(); try { foreach ($topMenus as $index => $menu) { $insertStmt->execute([ $menu[0], // title $menu[1], // path $menu[2], // icon $menu[3], // parent_id $menu[4], // status $menu[5], // sort $timestamp, $timestamp ]); } $pdo->commit(); echo "顶级菜单数据插入成功!\n"; } catch (PDOException $e) { $pdo->rollBack(); echo "顶级菜单数据插入失败: " . $e->getMessage() . "\n"; exit(1); } // 查询刚插入的顶级菜单ID $menuIds = []; $queryTopMenuSql = "SELECT id, title FROM `{$dbConfig['prefix']}menus` WHERE parent_id = 0"; try { $topMenusResult = $pdo->query($queryTopMenuSql)->fetchAll(PDO::FETCH_ASSOC); foreach ($topMenusResult as $menu) { $menuIds[$menu['title']] = $menu['id']; } } catch (PDOException $e) { echo "查询顶级菜单失败: " . $e->getMessage() . "\n"; exit(1); } // 插入子菜单数据 $subMenus = [ ['项目列表', '/dashboard/projects', 'List', $menuIds['项目管理'], 1, 21], ['新建项目', '/dashboard/projects/new', 'PlusCircle', $menuIds['项目管理'], 1, 22], ['客户管理', '/dashboard/customers', 'Users', $menuIds['客户池'], 1, 31], ['客户分析', '/dashboard/customers/analytics', 'BarChart', $menuIds['客户池'], 1, 32], ['管理员列表', '/dashboard/admins', 'UserCog', $menuIds['管理员权限'], 1, 41], ['角色管理', '/dashboard/admins/roles', 'ShieldCheck', $menuIds['管理员权限'], 1, 42], ['权限设置', '/dashboard/admins/permissions', 'Lock', $menuIds['管理员权限'], 1, 43], ['基本设置', '/settings/general', 'Settings', $menuIds['系统设置'], 1, 51], ['安全设置', '/settings/security', 'Shield', $menuIds['系统设置'], 1, 52], ]; $insertSubMenuSql = "INSERT INTO `{$dbConfig['prefix']}menus` (`title`, `path`, `icon`, `parent_id`, `status`, `sort`, `create_time`, `update_time`) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; $pdo->beginTransaction(); try { $insertStmt = $pdo->prepare($insertSubMenuSql); foreach ($subMenus as $menu) { $insertStmt->execute([ $menu[0], // title $menu[1], // path $menu[2], // icon $menu[3], // parent_id $menu[4], // status $menu[5], // sort $timestamp, $timestamp ]); } $pdo->commit(); echo "子菜单数据插入成功!\n"; } catch (PDOException $e) { $pdo->rollBack(); echo "子菜单数据插入失败: " . $e->getMessage() . "\n"; exit(1); } echo "菜单初始化完成!\n";