feat(client): 完成 P3 业务页联动闭环(D6/D8/D10/D11)

- 待办:列表/详情 + approve/reject/return/transfer(D6)
- 报销:列表/详情 + create/submit/withdraw/pay(D8)
- 票据:列表/上传/OCR轮询/绑定/预览(D10)
- 统一:Api types + 错误映射 + react-query缓存失效(D11)
这个提交包含在:
2026-02-08 23:08:41 +08:00
父节点 65e7b37ebd
当前提交 7a6f5573a6
共修改 16 个文件,包含 1762 行新增和 31 行删除
+20
查看文件
@@ -8,7 +8,9 @@ import { InvoicePoolPage } from "../pages/InvoicePoolPage";
import { LoginPage } from "../pages/LoginPage";
import { NotFoundPage } from "../pages/NotFoundPage";
import { ProfilePage } from "../pages/ProfilePage";
import { ReimbursementDetailPage } from "../pages/ReimbursementDetailPage";
import { ReimbursementsPage } from "../pages/ReimbursementsPage";
import { WorkflowTaskDetailPage } from "../pages/WorkflowTaskDetailPage";
import { WorkflowTasksPage } from "../pages/WorkflowTasksPage";
import { GuestOnly, RequireAuth, RequirePermission } from "./guards";
@@ -46,6 +48,15 @@ export function AppRouter() {
}
/>
<Route
path="reimbursements/:reimbursementId"
element={
<RequirePermission anyOf={["expense.view_own", "expense.view_all"]}>
<ReimbursementDetailPage />
</RequirePermission>
}
/>
<Route
path="workflow/tasks"
element={
@@ -55,6 +66,15 @@ export function AppRouter() {
}
/>
<Route
path="workflow/tasks/:taskId"
element={
<RequirePermission anyOf={["expense.approve"]}>
<WorkflowTaskDetailPage />
</RequirePermission>
}
/>
<Route
path="invoice-pool"
element={