基于 Vue 3 的 PC 管理后台单体脚手架,内置后台布局、页面样板、权限路由、请求封装与团队工程规范。

vue3-admin-single 是数字海南 PC 管理后台单体脚手架,基于 Vue 3、TypeScript 和 Vite 构建,适用于管理后台、运营平台和内部业务系统。
项目已经完成后台应用中通用能力的集成。业务团队可以直接使用统一布局、登录认证、权限菜单、请求封装、状态管理和页面样板,不需要从空项目重复搭建基础设施。

图 1:标准工作台。脚手架已经集成侧边菜单、顶部导航、多标签页、数据指标、图表和内容区布局。
| 能力 | 项目提供的内容 | 业务价值 |
|---|---|---|
| 单体工程架构 | 主应用、共享能力和工程配置集中在一个仓库 | 目录直观,便于中小型团队开发和部署 |
| 后台应用壳 | 侧边菜单、顶部导航、面包屑、多标签页、全屏和响应式内容区 | 新页面接入后即可获得统一后台布局 |
| 页面样板 | 工作台、卡片列表、摘要列表、筛选表格、组合表格和弹窗 | 可复制成熟页面结构,减少重复设计 |
| 设计系统 | DH Design PC 组件库和 DH Design Icons 图标库 | 统一视觉、交互和业务组件用法 |
| 路由权限 | 登录守卫、动态菜单、角色过滤、异常页面和路由级权限 | 支持后台系统常见的权限控制链路 |
| 登录认证 | 本地演示登录、UAA 接入、Token 注入、退出登录 | 开发阶段可独立调试,交付时可接统一认证 |
| 数据请求 | Axios 客户端、请求拦截、响应解析、错误提示和认证失效处理 | 页面只关注业务接口,不重复处理通用逻辑 |
| 状态管理 | Pinia、用户状态、权限状态和持久化能力 | 统一管理跨页面状态 |
| 数据组件 | VXE Table、VeeValidate、Zod 和 TanStack Query | 支持复杂表格、表单校验和异步数据状态 |
| 开发模式 | 展示模式与业务模式分离 | 演示样板保留在仓库中,不进入默认生产包 |
| 工程规范 | ESLint、Prettier、Stylelint、Husky 和 Commitlint | 提交前自动检查,保持团队代码一致 |
| 构建部署 | 环境配置、代理、Gzip、Brotli 和静态部署 | 覆盖本地联调、测试和生产构建 |
| AI 协作 | AGENTS、UI 硬规则、场景索引和设计规范 | 让 AI 按项目组件和目录约定生成代码 |
脚手架内置可直接使用的后台应用壳:
业务页面只需要配置路由并放入 src/views/,即可进入统一布局。
{
path: '/system/user',
name: 'SystemUser',
component: () => import('#/views/system/user/index.vue'),
meta: {
icon: 'dh:user-group',
title: '用户管理',
},
}项目提供标准工作台和综合工作台两类样板,可用于首页、运营驾驶舱和业务门户。
标准工作台包含:
参考路由:
/demos/workbench/standard
/demos/workbench/portal工作台源码位于:
examples/pc/src/views/workbench-menu/项目提供卡片列表、摘要列表和摘要卡片三类列表样板,覆盖后台系统常见的信息展示方式。

图 2:卡片列表样板。页面已经处理筛选区、数据摘要、状态标签、长文本和分页布局。
内置列表样板:
| 页面 | 路由 | 适用场景 |
|---|---|---|
| 卡片列表 | /demos/list/card | 台账、项目、应用和资产列表 |
| 摘要列表 | /demos/list/summary | 公告、工单和记录列表 |
| 摘要卡片 | /demos/list/summary-card | 需要突出状态和关键字段的列表 |
页面样板已考虑长标题、空字段、不同状态、分页和筛选项排列,可以直接替换数据字段后用于业务开发。
后台项目常用的查询区、数据表格、行操作和分页已组合成可运行样板。

图 3:筛选表格样板。页面提供 1 项、2 项、3 项、4 项、8 项和超过 8 项筛选条件的布局参考。
表格能力包括:
参考路由:
/demos/table/basic
/demos/table/filters
/demos/table/composite参考源码:
examples/pc/src/views/element/ListPatternDemo.vue
examples/pc/src/views/element/asset-ledger-demo.ts开发模式默认提供本地演示登录,不依赖后端即可进入页面样板。账号选择后会自动带出用户名和密码,完成滑块验证即可登录。

图 4:本地演示登录页。左侧展示产品信息,右侧提供账号、密码、滑块验证和扩展登录入口。
本地演示账号:
| 账号类型 | 用户名 | 密码 |
|---|---|---|
| Super | szhn | 123456 |
| Admin | admin | 123456 |
| User | jack | 123456 |
项目同时预留 UAA 统一认证能力:
认证相关文件:
| 文件 | 作用 |
|---|---|
src/store/auth.ts | 登录、用户信息和退出逻辑 |
src/router/guard.ts | 普通登录和 UAA 路由守卫 |
src/config/uaa.ts | 各环境 UAA 地址配置 |
src/utils/uaa-sdk.ts | UAA SDK 封装 |
src/utils/redirect-login.ts | 统一登录跳转 |
项目已经打通用户、角色、菜单和页面路由的权限链路。
进入路由
↓
检查核心路由和 ignoreAccess
↓
检查 Access Token
↓
获取用户信息和角色
↓
生成可访问菜单与动态路由
↓
进入目标页面相关能力:
路由入口:
| 文件 | 作用 |
|---|---|
src/router/routes/core.ts | 登录、根布局和异常页 |
src/router/routes/modules/ | 业务路由模块 |
src/router/guard.ts | Token 和认证守卫 |
src/router/access.ts | 菜单与可访问路由生成 |
统一请求客户端位于 src/api/request.ts。项目已经处理:
VITE_GLOB_API_URL 设置请求基础地址。Authorization: Bearer <token>。业务接口只需要声明类型和路径:
import { requestClient } from '#/api/request'
export interface UserItem {
id: string
name: string
}
export function getUserListApi() {
return requestClient.get<UserItem[]>('/users')
}项目同时集成 TanStack Query,可用于接口缓存、请求去重、轮询、预加载和服务端数据状态管理。
状态管理基于 Pinia:
src/store/ 存放当前业务状态。src/shared/stores/ 存放用户、权限、标签页等共享状态。pinia-plugin-persistedstate 提供按需持久化能力。src/preferences.ts 可覆盖应用名称、首页、Logo、主题、快捷键和顶部工具栏等配置。项目默认使用浅色主题,并关闭非必要的全局搜索、语言切换和主题切换入口,业务可以按需开启。
国际化基于 Vue I18n,语言资源分别放在 src/locales/ 和 src/shared/locales/。请求客户端会把当前语言写入 Accept-Language 请求头。
业务 UI 统一使用:
@szhn/dh-design-pc业务图标和菜单图标统一使用:
@szhn/dh-design-icons
dh:<图标名><script setup lang="ts">
import { Button, Message } from '@szhn/dh-design-pc'
function handleSave() {
Message.success('保存成功')
}
</script>
<template>
<Button type="primary" @click="handleSave">
保存
</Button>
</template>项目把 UI 组件和图标作为硬规则,避免业务页面混用多套组件库。完整约束见 .ai/ui-hard-rules.md,图标清单见 .ai/dh-design-icons.md。
脚手架通过 VITE_ENABLE_DEMOS 区分展示模式和业务交付模式:
| 命令或配置 | 结果 |
|---|---|
pnpm dev | 默认注册 examples/pc/ 中的工作台、列表、表格和弹窗 |
VITE_ENABLE_DEMOS=false pnpm dev | 本地业务精简模式,默认首页为 /home |
pnpm build | 默认生成业务交付包,不注册演示页面 |
VITE_ENABLE_DEMOS=true pnpm build | 生成带完整页面样板的演示包 |
演示源码始终保留在 examples/pc/。关闭演示只是不注册路由,不需要删除样板,业务开发时仍可随时参考。
开发环境可通过 VITE_USE_MOCK=true 开启 Mock 服务。Mock 文件统一放在 mock/,后端接口未完成时也可以调试页面和交互。
# .env.development
VITE_USE_MOCK=true项目提供 mockClient,用于访问不带业务 API Base URL 的本地 Mock 接口。生产环境默认关闭 Mock。
项目内置:
| 工具 | 能力 |
|---|---|
| ESLint | Vue 和 TypeScript 代码检查 |
| Prettier | 代码格式化 |
| Stylelint | CSS、SCSS 和 Vue 样式检查 |
| vue-tsc | Vue 与 TypeScript 类型检查 |
| Husky | Git Hooks 管理 |
| lint-staged | 只检查暂存区文件 |
| Commitlint | Conventional Commits 校验 |
提交代码时,pre-commit 会检查暂存文件,commit-msg 会校验提交信息。
pnpm lint
pnpm typecheck
git commit -m "feat(user): 新增用户管理页面"生产构建提供:
debugger。VITE_BASE 支持子路径部署。构建结果输出到根目录 dist/,可以部署到 Nginx、CDN 或对象存储。
pnpm build
pnpm preview项目内置 AI 协作规则,让 AI 先理解项目约束,再生成页面和代码。
| 文件 | 作用 |
|---|---|
AGENTS.md | AI 开发入口、目录和常用命令 |
CLAUDE.md | Claude Code 入口说明 |
.ai/ui-hard-rules.md | UI、图标和路径硬规则 |
.ai/scene-catalog.md | 页面类型与样板文件索引 |
.ai/demo-profile.md | 展示模式和业务模式说明 |
.ai/project-context.md | 架构、技术栈和开发约定 |
.ai/glossary.md | 项目术语 |
.ai/dh-design-icons.md | DH Design 图标清单 |
DESIGN.md、DESIGN.cn.md | 设计语言和界面规范 |
推荐的 AI 页面开发流程:
读取 AGENTS.md 和 UI 硬规则
↓
在 scene-catalog 中查找相近场景
↓
参考 examples/pc 中的页面样板
↓
使用 DH Design PC 和 DH Design Icons 开发
↓
运行 lint 和 typecheck| 类别 | 技术 | 版本范围 |
|---|---|---|
| 前端框架 | Vue | 3.5+ |
| 构建工具 | Vite | 7.x |
| 开发语言 | TypeScript | 5.8+ |
| UI 组件库 | @szhn/dh-design-pc | 0.7+ |
| 图标库 | @szhn/dh-design-icons | 0.2+ |
| 路由 | Vue Router | 4.5+ |
| 状态管理 | Pinia | 3.x |
| 数据查询 | TanStack Query | 5.x |
| HTTP 客户端 | Axios | 1.x |
| 数据表格 | VXE Table | 4.x |
| 表单校验 | VeeValidate、Zod | 4.x |
| CSS | Tailwind CSS、Sass | 3.x、1.x |
| 工具库 | VueUse、Lodash、Day.js | 按项目锁定 |
| 国际化 | Vue I18n | 11.x |
| 环境 | 版本要求 |
|---|---|
| Node.js | >= 22.12.0 |
| pnpm | >= 9.12.0 |
| szhn-cli | 最新版 |
| 浏览器 | Chrome、Edge 等现代浏览器 |
安装或更新 CLI:
npm config set registry https://npmmirror.digitalhainan.com.cn/
npm install -g @szhn/szhn-cli@latest创建项目:
szhn-cli init <项目名称>选择以下模板:
PC Admin Web 单应用版本(Vue 3)模板对应的 npm 包:
@szhn/template-pc-vue3-admin-single也可以使用可视化模式:
szhn-cli uicd <项目名称>
pnpm install
pnpm dev默认访问地址:
http://localhost:5555/admin-web/vue3-admin-single/
├── .ai/ # AI 规则、场景索引和术语
├── .husky/ # Git Hooks
├── docs/ # 项目开发文档
├── examples/
│ └── pc/ # 工作台、列表、表格和弹窗样板
├── mock/ # 本地 Mock 接口
├── plugins/ # Vite 自定义插件
├── public/ # 公共静态资源
├── scripts/ # Node 版本检查等脚本
├── src/
│ ├── adapter/ # 表单和表格适配器
│ ├── api/ # 业务接口和请求客户端
│ ├── app-profile/ # 展示模式与业务模式
│ ├── assets/ # 图片等静态资源
│ ├── config/ # UAA 和监控配置
│ ├── core/ # 核心 UI 与偏好能力
│ ├── effects/ # 权限、请求、布局和公共能力
│ ├── internal/ # 工程内部配置
│ ├── layouts/ # 基础布局和认证布局
│ ├── locales/ # 业务语言包
│ ├── router/ # 路由与权限守卫
│ ├── shared/ # 共享类型、工具、状态和样式
│ ├── store/ # 业务 Pinia Store
│ ├── utils/ # 业务工具函数
│ ├── views/ # 登录、异常页和业务页面
│ ├── app.vue # 根组件
│ ├── bootstrap.ts # 应用初始化
│ ├── main.ts # 应用入口
│ └── preferences.ts # 应用偏好配置
├── .env.development # 开发环境变量
├── .env.production # 生产环境变量
├── AGENTS.md # AI 开发入口
├── DESIGN.md # 设计规范
├── deploy.sh # 部署构建脚本
├── start.sh # 本地启动脚本
├── vite.config.mts # Vite 配置
└── package.json # 依赖和命令业务开发主要修改:
src/api/
src/views/
src/router/routes/modules/
src/store/
src/config/除非进行框架级维护,不要直接修改 src/core/、src/effects/ 和 src/internal/。
常用环境变量:
| 变量 | 说明 | 开发环境示例 |
|---|---|---|
VITE_BASE | 应用基础路径 | /admin-web/ |
VITE_GLOB_API_URL | API 基础地址 | /admin-web/api |
VITE_USE_MOCK | 是否启用 Mock | true |
VITE_ENABLE_DEMOS | 是否注册演示页面 | true |
VITE_INJECT_APP_LOADING | 是否注入首屏 Loading | true |
VITE_APP_SZHN_HZT_CDN | 海政通 SDK | 按环境配置 |
VITE_APP_FIREBEAR_CDN | 火熊监控 SDK | 按环境配置 |
VITE_APP_NATIVE_BEAR_MONITOR_CDN | 土熊监控 SDK | 按环境配置 |
本地联调后端时,修改 vite.config.mts 中的代理目标:
server: {
host: true,
port: 5555,
proxy: {
'/admin-web/api': {
changeOrigin: true,
rewrite: (path) => path.replace(/^\/admin-web\/api/, ''),
target: 'http://localhost:8080/api',
ws: true,
},
},
}# 安装依赖
pnpm install
# 启动开发环境,默认包含页面样板
pnpm dev
# 启动业务精简模式
VITE_ENABLE_DEMOS=false pnpm dev
# 生产构建,默认不包含演示页面
pnpm build
# 构建测试环境
pnpm build:test
# 构建分析
pnpm build:analyze
# 预览构建结果
pnpm preview
# ESLint 检查并修复
pnpm lint
# Prettier 格式化
pnpm format
# Vue 和 TypeScript 类型检查
pnpm typecheck
# 一键安装并启动
./start.sh
# 一键安装并构建
./deploy.sh