完成五人团队正式内用最小收口(07-18-small-team-internal-readiness)

这个提交包含在:
2026-07-18 15:46:14 +08:00
父节点 58c8decef9
当前提交 5d0a5f9a38
共修改 134 个文件,包含 10790 行新增和 1413 行删除
+33 -12
查看文件
@@ -1,6 +1,8 @@
import { Suspense, type ReactNode } from "react";
import { Navigate, Route, Routes } from "react-router-dom";
import { createBrowserRouter, createRoutesFromElements, Navigate, Outlet, Route } from "react-router-dom";
import { AuthProvider } from "../auth/AuthContext";
import { RoutePageFallback } from "../components/common/RoutePageFallback";
import { UnsavedChangesProvider } from "../components/common/UnsavedChangesGuard";
import { AppShellLayout } from "../layouts/AppShellLayout";
import { AuthLayout } from "../layouts/AuthLayout";
import { BudgetsPage } from "../pages/BudgetsPage";
@@ -77,9 +79,18 @@ function withRouteFallback(node: ReactNode) {
return <Suspense fallback={<RoutePageFallback />}>{node}</Suspense>;
}
export function AppRouter() {
function RouterRoot() {
return (
<Routes>
<UnsavedChangesProvider>
<AuthProvider>
<Outlet />
</AuthProvider>
</UnsavedChangesProvider>
);
}
const routeElements = (
<Route element={<RouterRoot />}>
<Route
path="/login"
element={
@@ -262,7 +273,7 @@ export function AppRouter() {
<Route
path="payment-batches"
element={
<RequirePermission anyOf={["payment.batch.manage", "risk.review.manage"]}>
<RequirePermission anyOf={["payment.batch.manage", "risk.review.manage", "payment.batch.review"]}>
{withRouteFallback(<PaymentBatchesPage />)}
</RequirePermission>
}
@@ -271,7 +282,7 @@ export function AppRouter() {
<Route
path="ap-operations"
element={
<RequirePermission anyOf={["payment.batch.manage", "risk.review.manage"]}>
<RequirePermission anyOf={["payment.batch.manage", "risk.review.manage", "payment.batch.review"]}>
{withRouteFallback(<ApOperationsPage />)}
</RequirePermission>
}
@@ -326,6 +337,15 @@ export function AppRouter() {
<Route path="mobile" element={withRouteFallback(<MobilePortalPage />)} />
<Route
path="mobile/attendance"
element={
<RequirePermission anyOf={["attendance.view_own", "attendance.view_all", "*"]}>
{withRouteFallback(<AttendancePage />)}
</RequirePermission>
}
/>
<Route path="mobile/me" element={withRouteFallback(<MobileMePage />)} />
<Route path="mobile/profile" element={withRouteFallback(<MobileProfilePage />)} />
@@ -482,7 +502,7 @@ export function AppRouter() {
<Route
path="payroll"
element={
<RequirePermission anyOf={["system.settings"]}>
<RequirePermission anyOf={["payroll.manage"]}>
{withRouteFallback(<PayrollPage />)}
</RequirePermission>
}
@@ -509,7 +529,7 @@ export function AppRouter() {
<Route
path="people"
element={
<RequirePermission anyOf={["system.users", "report.dashboard.view"]}>
<RequirePermission anyOf={["system.users"]}>
{withRouteFallback(<PeoplePage />)}
</RequirePermission>
}
@@ -518,7 +538,7 @@ export function AppRouter() {
<Route
path="people/stats"
element={
<RequirePermission anyOf={["system.users", "report.dashboard.view"]}>
<RequirePermission anyOf={["system.users"]}>
{withRouteFallback(<PeopleStatsPage />)}
</RequirePermission>
}
@@ -529,7 +549,7 @@ export function AppRouter() {
<Route
path="system/users"
element={
<RequirePermission anyOf={["system.users"]}>
<RequirePermission anyOf={["system.accounts.manage", "system.roles.manage"]}>
{withRouteFallback(<UserManagementPage />)}
</RequirePermission>
}
@@ -639,6 +659,7 @@ export function AppRouter() {
<Route path="/403" element={<ForbiddenPage />} />
<Route path="*" element={<NotFoundPage />} />
</Routes>
);
}
</Route>
);
export const appRouter = createBrowserRouter(createRoutesFromElements(routeElements));