docker Desktop 本地验证: - 镜像构建成功(edu/admin-portal:test) - 容器运行正常(端口 4003) - /api/health、/api/ready、/login、/admin/dashboard 全部 200 修复项: - next.config.js 添加 output: standalone - package.json 添加 autoprefixer 依赖 - login/layout.tsx 提供 AuthProvider/ToastProvider 部署配置: - docker-compose.deploy.yml 添加 admin-portal 服务 - deploy.env.example 添加 ADMIN_PORTAL_PORT 下游工作清单(nextstep.md): - api-gateway: 缺 /api/admin/graphql 路由 - teacher-bff: 缺 16 Query + 11 Mutation - iam: 缺 BatchGetUsers 等 RPC
29 lines
847 B
TypeScript
29 lines
847 B
TypeScript
"use client";
|
|
|
|
import { type ReactNode } from "react";
|
|
import { GraphQLProvider } from "@/providers/graphql-provider";
|
|
import { AuthProvider } from "@/providers/auth-provider";
|
|
import { ToastProvider } from "@/providers/toast-provider";
|
|
import { MswInitializer } from "@/components/msw-initializer";
|
|
import { useState } from "react";
|
|
|
|
/**
|
|
* Login layout - 提供 login 页面所需的 providers
|
|
*
|
|
* login 页面不在 /admin 下,需要独立的 provider 链
|
|
*/
|
|
export default function LoginLayout({ children }: { children: ReactNode }) {
|
|
const [mswReady, setMswReady] = useState(false);
|
|
|
|
return (
|
|
<GraphQLProvider>
|
|
<MswInitializer onReady={() => setMswReady(true)} />
|
|
{mswReady && (
|
|
<AuthProvider>
|
|
<ToastProvider>{children}</ToastProvider>
|
|
</AuthProvider>
|
|
)}
|
|
</GraphQLProvider>
|
|
);
|
|
}
|