initialize(); use app\service\PermissionCatalog; use think\facade\Db; function guestManagementTableExists(string $table): bool { $db = Db::getConfig('database') ?: env('DB_NAME', 'ai_chat'); $rows = Db::query( 'SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? LIMIT 1', [$db, $table] ); return !empty($rows); } try { if (guestManagementTableExists('users')) { Db::execute("UPDATE users SET last_login_at = created_at WHERE LEFT(username, 6) = 'guest_' AND last_login_at IS NULL"); } if (guestManagementTableExists('sys_permissions')) { $parent = Db::name('sys_permissions')->where('code', 'dir:org')->find(); if ($parent) { $menu = Db::name('sys_permissions')->where('code', 'menu:guests')->find(); if (!$menu) { $menuId = Db::name('sys_permissions')->insertGetId([ 'type' => 'menu', 'code' => 'menu:guests', 'name' => '访客管理', 'parent_id' => (int) $parent['id'], 'path' => '/guests', 'icon' => 'visitors', 'sort_order' => 15, 'is_system' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); $menu = ['id' => $menuId]; echo "Added menu:guests\n"; } foreach ([ ['btn:guest:status', '启用/禁用访客'], ['btn:guest:delete', '删除访客'], ] as [$code, $name]) { if (!Db::name('sys_permissions')->where('code', $code)->find()) { Db::name('sys_permissions')->insert([ 'type' => 'btn', 'code' => $code, 'name' => $name, 'parent_id' => (int) $menu['id'], 'sort_order' => 0, 'is_system' => 1, 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), ]); echo "Added {$code}\n"; } } } if (guestManagementTableExists('roles')) { Db::name('roles')->where('slug', 'super_admin')->update([ 'permissions' => json_encode(PermissionCatalog::fullPermissions(), JSON_UNESCAPED_UNICODE), ]); } } echo "Guest management migration completed.\n"; } catch (\Throwable $e) { echo 'Error: ' . $e->getMessage() . "\n"; exit(1); }