ViteReact后台

aero-web — Vite 后台模板

作者 zerolincku

基于 React、TypeScript 与 Vite 的云基础设施管理后台模板,内置登录鉴权、主题切换、国际化、命令面板与分页表格。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

1 个预览视图
作者提供的预览
作者提供的预览

来自项目 README 的原始预览。

目前有 1 张原始预览,可打开完整图片查看设计细节。

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-09-30查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

登录鉴权与路由守卫,未登录跳转 /login,401 自动清理会话并重定向

02

light / dark / system 主题模式,附带 5 种强调色可选

03

en 与 zh-CN 国际化,开发期提供翻译键差异检查与缺失键警告

04

⌘K / Ctrl+K 命令面板,支持快速搜索跳转

05

封装本地与服务端两种分页模式的表格,统一加载、空数据与错误行

06

基于 axios 的统一 API 层,含类型化错误与分页响应模型

模板详细介绍

aero-web 是一个面向云基础设施管理场景的后台前端模板,使用 React、TypeScript、Vite 与 Tailwind CSS 构建。项目定位为可直接运行的前端基础框架,提供仪表盘、主机、区域与可用区、用户、组织、设置等演示页面,并预留了接入真实后端服务的扩展点。

功能层面,模板包含登录鉴权与路由守卫(未登录跳转 /login)、401 自动清理会话并重定向、基于 axios 的统一 API 层与类型化错误、分页数据模型,以及 en / zh-CN 双语国际化,开发期会提示缺失的翻译键。界面侧提供 light / dark / system 三种主题模式与 5 种强调色,并支持 ⌘K / Ctrl+K 命令面板快速搜索。数据表格封装了本地与服务端两种分页模式,统一处理加载、空数据与错误状态,并带有过期响应保护与重试。

工程配置上,模板使用 ESLint、严格模式 TypeScript 与 Vitest 测试,通过环境变量控制 API 基地址、路由模式(hash 或 browser)、部署子路径以及是否使用前端模拟登录。README 中给出了后端成功响应、错误响应与分页响应的约定格式。

需要注意的限制:/infrastructure/vms、/infrastructure/storage-pools、/management/groups、/system/security 目前为占位路由,实际显示 NotFound;默认启用前端模拟登录,接入真实服务需自行替换。

ViteReact后台

适合你的项目吗?

适用场景

  • 搭建云主机、区域与可用区等基础设施管理后台的前端骨架
  • 需要登录鉴权、主题切换与多语言的后台项目起步
  • 为已有后端服务快速接入带分页表格与命令面板的管理界面

适合人群

  • 需要 React + TypeScript + Vite 技术栈的后台前端项目
  • 希望以现成页面结构为基础二次开发的团队
  • 需要国际化与主题切换能力的内部管理系统

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    环境要求 Node.js >= 20.19.0 与 pnpm >= 8,安装后执行 pnpm run dev,默认地址 http://localhost:5173

  2. 2

    复制 .env.example 为 .env,按需配置 VITE_API_BASE_URL、VITE_ROUTER_MODE、VITE_APP_BASENAME 与 VITE_USE_MOCK_AUTH

  3. 3

    默认 VITE_USE_MOCK_AUTH 为 true 使用前端模拟登录,接入真实后端时需替换并遵循 README 中的响应与分页约定

  4. 4

    使用 useDataTable 时保持 loadPage 引用稳定(模块作用域或 useCallback),过滤或排序变化时更新 queryKey 以回到第一页

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 部分路由为占位页面,实际访问会显示 NotFound,并非完整可用功能。
  • 默认启用前端模拟登录,接入真实后端服务时需自行替换该模拟鉴权逻辑。
  • 模板仅提供前端基础框架,需自行对接真实后端服务,不包含后端实现。
  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

Placeholder routes (currently NotFound):

README 原文

`VITE_USE_MOCK_AUTH`: whether to use frontend mock login (default `true`)

README 原文

Clear extension points for integrating real backend services

README 原文
https://github.com/zerolincku/aero-web/blob/main/LICENSEhttps://github.com/zerolincku/aero-web/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-09-30。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 85 / 100
技术栈
Vite · React
网站类型
后台
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-09-23
截图检查日期
2026-09-30

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Vite。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

已完成服务器许可规则与 AI 来源核对;未经过人工编辑审核。

查看当时使用的来源资料

SHA-256: c825f923acd04a4110091163c076e6d71887be5e532972add2df69383b29ae1e

2026-09-30T08:58:54.561Z

来源文件 / 仓库
# Aero Cloud Admin Template

English | [简体中文](./README-zh.md)

A modern admin template built with **React 19 + TypeScript + Vite + Tailwind CSS**, including auth routing, theme system, i18n, command palette, paginated lists, and a typed API layer.

## Project Scope

- Ready-to-use frontend foundation for cloud/admin dashboards
- Built-in demo pages: Dashboard / Hosts / Regions & AZs / Users / Orgs / Settings
- Clear extension points for integrating real backend services

## Screenshots

### 1. Dashboard Home

![Dashboard](./doc/dashboard.png)

### 2. Hosts List

![Hosts](./doc/host.png)

### 3. Hosts Detail/List Extended View

![Hosts Info](./doc/host-info.png)

### 4. Host Detail Page

![Host Detail](./doc/host-info-2.png)

### 5. Regions & AZs

![Regions & AZs](./doc/az.png)

### 6. Command Palette (Quick Search)

![Quick Search](./doc/quick-search.png)

### 7. Theme & Appearance

![Theme](./doc/theme.png)

## Core Features

- Auth guard: unauthenticated users are redirected to `/login`
- Session handling: auto cleanup + redirect on `401`
- API layer: shared axios instance, typed errors, pagination models
- i18n: `en` / `zh-CN` with dev-time key diff and missing-key warning
- Theme system: `light / dark / system` + 5 accent colors
- Command palette: `⌘K` / `Ctrl+K`
- Async data lifecycle: stale-response protection, retry, and refresh state
- Reusable local/server table pagination with consistent loading, empty, and error rows
- Engineering baseline: ESLint + strict TypeScript + Vitest

## Tech Stack

- React 19.2
- TypeScript 6.0
- Vite 8.2
- Tailwind CSS 4.3
- React Router DOM 7
- Zustand 5
- Axios
- react-i18next / i18next
- Vitest + Testing Library

## Quick Start

### 1. Requirements

- Node.js >= 20.19.0
- pnpm >= 8

### 2. Install & Run

```bash
pnpm install
pnpm run dev
```

Default URL: `http://localhost:5173`

### 3. Common Commands

```bash
pnpm run dev         # start dev server
pnpm run build       # build production assets (tsc + vite build)
pnpm run preview     # preview production build
pnpm run lint        # run ESLint
pnpm run test        # run Vitest
pnpm run test:watch  # run Vitest in watch mode
pnpm exec tsc -b     # TypeScript project build check
```

## Environment Variables

Copy template:

```bash
cp .env.example .env
```

Variables:

- `VITE_API_BASE_URL`: API base path, default `/api`
- `VITE_ROUTER_MODE`: router mode, `hash` or `browser` (default `hash`)
- `VITE_APP_BASENAME`: deployment sub-path (for example `/admin`)
- `VITE_USE_MOCK_AUTH`: whether to use frontend mock login (default `true`)

## Backend Response Contract

### Success Response

- Response body directly returns business data

### Error Response

```json
{ "code": 1001, "msg": "error message" }
```

### Pagination Response

```json
{
  "total": 100,
  "page_num": 1,
  "page_size": 10,
  "data": []
}
```

Frontend support included:

- `PageResponse<T>`
- `apiClient.getPage<T>()`
- `toPaginatedResult()` mapper
- `useDataTable()` local and server pagination modes

Keep `loadPage` stable (declare it at module scope or wrap it in `useCallback`).
Change `queryKey` whenever filters or sorting change so the table reloads page one.

```tsx
const loadItemsPage = useCallback(
  async (page: number, pageSize: number) => toPaginatedResult(
    await apiClient.getPage<Item[]>('/items', {
      page_num: page,
      page_size: pageSize,
      status: filters.status,
    }),
  ),
  [filters.status],
);

const table = useDataTable<Item>({
  loadPage: loadItemsPage,
  queryKey: filters.status,
});
```

## Route Overview

- `/login`
- `/`
- `/infrastructure/hosts`
- `/infrastructure/hosts/:hostId`
- `/infrastructure/regions-azs`
- `/management/users`
- `/management/orgs`
- `/system/settings`

Placeholder routes (currently NotFound):

- `/infrastructure/vms`
- `/infrastructure/storage-pools`
- `/management/groups`
- `/system/security`

## Key Directory Structure

```text
src/
├── api/
│   ├── axios.ts
│   ├── client.ts
│   ├── error.ts
│   ├── types.ts
│   └── modules/
│       └── auth.ts
├── auth/
│   └── session.ts
├── components/
│   ├── AppErrorBoundary.tsx
│   ├── Layout.tsx
│   ├── Sidebar.tsx
│   ├── ThemeController.tsx
│   └── ui/
│       └── data-table-state.tsx
├── config/
│   ├── app.ts
│   └── router.ts
├── hooks/
│   ├── use-data-table.ts
│   ├── use-fetch-data.ts
│   └── use-mobile.ts
├── i18n/
│   ├── index.ts
│   ├── dev-check.ts
│   └── locales/
├── lib/
│   ├── routes.tsx
│   ├── pagination.ts
│   └── utils.ts
├── pages/
├── store/
│   └── useStore.ts
├── theme/
│   └── palette.ts
└── test/
```

## React Compiler Notes

React Compiler is enabled in `vite.config.ts` through
`reactCompilerPreset()` and `@rolldown/plugin-babel`. No additional compiler
package is required for the default setup.

## License

MIT License. See [LICENSE](./LICENSE).
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。