- routes.ts registers all workspaces under /console (+ detail routes, engine, audit, login) - api.ts: cookie session first (credentials include, CSRF header), Bearer only with stored key, 401 -> /login - sse.ts: shared EventSource with ?after=seq catch-up, backoff reconnect, per-type subscribe - shared components: data-table, filter-bar, detail-sheet, timeline, json-view, confirm-dialog, form-field, kv-list, stat-tile, error/loading states; ui tabs and textarea Co-Authored-By: Claude Opus 5.5 <[email protected]>
20 lines
589 B
TypeScript
20 lines
589 B
TypeScript
import { Link } from "react-router";
|
|
import { EmptyState } from "~/components/console/empty-state.tsx";
|
|
import { buttonVariants } from "~/components/ui/button.tsx";
|
|
|
|
export default function NotFound() {
|
|
return (
|
|
<div className="grid min-h-screen place-items-center bg-background px-4">
|
|
<EmptyState
|
|
title="页面不存在"
|
|
description="检查地址是否正确,或回到首页。"
|
|
action={
|
|
<Link to="/console" className={buttonVariants({ variant: "outline" })}>
|
|
回到首页
|
|
</Link>
|
|
}
|
|
/>
|
|
</div>
|
|
);
|
|
}
|