完成五人团队正式内用最小收口(07-18-small-team-internal-readiness)
这个提交包含在:
+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));
|
||||
|
||||
在新工单中引用
屏蔽一个用户