- 前端
- 企业应用
- UI组件
【免费下载链接】art-design-pro
A Vue 3 admin dashboard template using Vite + TypeScript + Element Plus | vue3 admin | vue-admin — focused on user experience and visual design.
Art Design Pro 是一个以用户体验与视觉设计为核心的后台管理系统模板,基于 Vue 3、TypeScript、Vite、Element Plus 与 Tailwind CSS 构建。本篇指南围绕仓库根目录的 README.zh-CN.md 展开,讲解项目定位、技术栈、安装运行、演示数据清理脚本,并结合仓库源码深入剖析内置的高效开发能力(useTable、ArtForm 等),帮助你在几分钟内拿到一个可直接开发的干净项目底座。
项目定位:为什么要选择 Art Design Pro
从 README.zh-CN.md 的介绍可以看出,这个项目的核心卖点集中在六个方面:
- 界面设计:现代化 UI 设计与流畅交互,以用户体验和视觉设计为核心。
- 极速上手:简洁架构 + 完整文档,后端开发者也能轻松使用。
- 丰富组件:内置数据展示、表单等多种高质量组件,满足不同业务场景。
- 丝滑交互:按钮点击、主题切换、页面过渡、图表动画,体验媲美商业产品。
- 高效开发:内置
useTable、ArtForm等实用 API,显著提升开发效率。 - 精简脚本:内置一键清理脚本,可快速清理演示数据,立即得到可开发的基础项目。
从仓库结构来看,这些能力都有对应的落地实现:src/components/core下按banners、cards、charts、forms、layouts、tables等模块组织了大量可复用组件,src/hooks下则封装了useTable、useTheme、useAuth等业务 Hook。也就是说,"组件丰富"和"高效开发"不是宣传话术,而是有实际代码支撑的。
技术栈与工程化规范
README 明确列出了两套技术体系:
开发框架
- Vue 3(依赖
vue^3.5.21,见 package.json) - TypeScript(
typescript~5.6.3,配合vue-tsc做类型检查) - Vite(
vite^7.1.5,作为开发服务器与打包工具) - Element Plus(
element-plus^2.11.2,UI 组件库) - Tailwind CSS(
tailwindcss^4.1.14,原子化样式方案)
代码规范工具链
- ESLint、Prettier、Stylelint:分别负责 JS/TS、格式化与样式检查
- Husky、Lint-staged:Git 提交前的钩子与增量检查
- cz-git:基于 Commitizen 的规范化提交工具
这些工具在 package.json 的scripts与lint-staged配置中均有体现,例如:
{ "scripts": { "lint": "eslint", "fix": "eslint --fix", "lint:prettier": "prettier --write \"**/*.{js,cjs,ts,json,tsx,css,less,scss,vue,html,md}\"", "lint:stylelint": "stylelint \"**/*.{css,scss,vue}\" --fix", "commit": "git-cz" } }lint-staged针对不同文件类型配置了差异化的检查链:.vue文件会依次执行 ESLint、Stylelint、Prettier 修复,.scss/.css走 Stylelint + Prettier,Markdown 与 YAML 则统一走 Prettier,保证提交时代码风格的一致性。
环境要求与安装运行
package.json 的engines字段声明了运行前提:
- Node.js >= 20.19.0
- pnpm >= 8.8.0
因此安装依赖建议直接使用 pnpm。README 给出的完整流程如下:
# 安装依赖 pnpm install # 如果 pnpm install 安装失败,尝试使用下面的命令安装依赖 pnpm install --ignore-scripts # 本地开发环境启动 pnpm dev # 生产环境打包 pnpm build几个命令背后的实际行为,可以在 package.json 中找到对应定义:
| 命令 | 实际脚本 | 说明 |
|---|---|---|
pnpm dev | vite --open | 启动开发服务器并自动打开浏览器 |
pnpm build | vue-tsc --noEmit && vite build | 先做 TypeScript 类型检查,再执行生产构建 |
pnpm serve | vite preview | 本地预览生产构建产物 |
pnpm clean:dev | tsx scripts/clean-dev.ts | 一键清理演示数据(详见下文) |
pnpm install --ignore-scripts的兜底方案,主要用于跳过依赖安装时的生命周期脚本(如prepare: husky),适合在某些受限网络或镜像环境下安装失败时使用。
构建与开发配置速览
如果进一步阅读 vite.config.ts,可以了解默认的工程配置,便于你在此基础上定制自己的项目:
- 环境变量:从
.env系列文件读取VITE_PORT(端口)、VITE_BASE_URL(基础路径)、VITE_API_URL、VITE_API_PROXY_URL(代理目标),开发服务器会将/api前缀请求代理到VITE_API_PROXY_URL。 - 路径别名:
@指向src,另有@views、@imgs、@styles、@stores等业务别名,与tsconfig.json保持一致。 - 按需引入:通过
unplugin-auto-import自动导入vue、vue-router、pinia、@vueuse/coreAPI,通过unplugin-vue-components+ElementPlusResolver自动按需引入 Element Plus 组件,并配合unplugin-element-plus的useSource: true走源码级定制主题。 - 生产构建:
target: 'es2015',使用 terser 压缩并默认drop_console/drop_debugger;vite-plugin-compression开启 gzip 压缩(10KB 以上资源生成.gz文件)。 - Sass 预置:在
css.preprocessorOptions.scss.additionalData中全局注入了el-light.scss与mixin.scss,所有 Vue 组件内可直接使用相关变量与混入。
精简版本:pnpm clean:dev一键清理演示数据
这是 README 中比较有特色的功能。项目内置精简脚本,可快速移除项目中的演示数据,让开发者获得一个可直接上手的基础项目:
pnpm clean:dev脚本执行流程
脚本本体位于 scripts/clean-dev.ts,整体分为 7 个步骤,并在每一步之间打印带颜色的进度提示:
- 删除演示文件:删除 README、CHANGELOG、演示页面目录(
src/views/change、src/views/safeguard、src/views/article、src/views/examples、src/views/system/nested、src/views/widgets、src/views/template、src/views/dashboard/analysis、src/views/dashboard/ecommerce)、Mock 数据(src/mock/json、src/mock/temp下的文章/评论数据)、演示图片(src/assets/images/cover、src/assets/images/safeguard、src/assets/images/3d)、地图组件art-map-chart与评论组件comment-widget。 - 清理路由模块:删除
src/router/modules下的template.ts、widgets.ts、examples.ts、article.ts、safeguard.ts、help.ts,并重写dashboard.ts、system.ts、index.ts,只保留 Dashboard、System、Result、Exception 四个核心路由模块。 - 重写路由别名:将 src/router/routesAlias.ts 重置为仅保留
Layout与Login两个公共别名。 - 清空变更日志:把 src/mock/upgrade/changeLog.ts 的
upgradeLogList重置为空数组,保留类型定义。 - 清理语言文件:从 src/locales/langs/zh.json 与 src/locales/langs/en.json 中删除演示菜单项(widgets、template、article、examples、safeguard、help 等)。
- 清理快速入口:将 src/config/fastEnter.ts 重写为只包含"工作台、官方文档、技术支持、哔哩哔哩"等少量入口的精简配置。
- 更新菜单接口:将 src/api/system-manage.ts 中的菜单请求地址从
/api/v3/system/menus替换为/api/v3/system/menus/simple,适配精简后的菜单结构。
安全机制
脚本在动手前有两层保护:
- 可视化警告:先打印"将要清理的内容"(图片资源、演示页面、路由模块、Mock 数据、多语言文件等)与"保留的功能模块"(Dashboard、System、Result、Exception、Auth、核心组件库)。
- 人工确认:通过
readline交互式询问,只有输入yes才会真正执行清理;按 Enter 或其他输入则直接取消并中止。
此外,脚本内置文件计数、进度条与最终统计(成功删除的文件数、涉及路径数、耗时),方便你在清理后确认结果。注意:该操作会永久删除文件且无法恢复,建议在 git 已提交的状态下执行,方便随时回退。
深度开发能力:从 README 提到的 useTable 与 ArtForm 说起
README 明确将"内置 useTable、ArtForm 等实用 API"列为高效开发的核心卖点,这两个 API 在仓库中都有完整实现,下面结合源码拆解。
useTable:企业级表格数据管理方案
实现位于 src/hooks/core/useTable.ts,它把表格开发中的常见需求全部封装了起来:API 请求与响应转换、加载状态机(idle/loading/success/error)、分页同步与移动端适配(小于 768px 自动启用小型分页)、防抖搜索(默认 300ms)、请求缓存(默认 5 分钟、最多 50 条)、5 种场景化刷新方法,以及可选的列配置管理(由 useTableColumns 提供)。
一个真实的调用示例是系统用户管理页 src/views/system/user/index.vue,其核心配置片段如下:
const { columns, columnChecks, data, loading, pagination, getData, replaceSearchParams, resetSearchParams, handleSizeChange, handleCurrentChange, refreshData } = useTable({ core: { apiFn: fetchGetUserList, apiParams: { current: 1, size: 20, ...searchForm.value }, columnsFactory: () => [ { type: 'selection' }, { type: 'index', width: 60, label: '序号' }, { prop: 'userInfo', label: '用户名', width: 280, formatter: (row) => /* 头像+姓名 */ }, { prop: 'status', label: '状态', formatter: (row) => h(ElTag, { type: ... }) }, { prop: 'operation', label: '操作', width: 120, fixed: 'right' } ] }, transform: { dataTransformer: (records) => records.map((item, index) => ({ ...item, avatar: localAvatar(index) })) } })几个值得关注的细节:
- 类型推导:
useTable的泛型可以从apiFn自动推导出请求参数类型、响应类型和记录类型,减少手写类型代码。 - 字段映射可配置:后端分页字段若与默认不同,可在
core.paginationKey中自定义current/size字段名;全局默认映射则集中在 src/utils/table/tableConfig.ts,其中recordFields支持list / data / records / items / result / rows多种返回格式自动识别。 - 刷新策略:
refreshCreate(新增后回到第一页)、refreshUpdate(保持当前页)、refreshRemove(删除后智能回退页码,避免空页)、refreshData(全量刷新)、refreshSoft(软刷新)覆盖了增删改查后的所有刷新场景。 - 缓存控制:
clearCache(strategy)支持CLEAR_ALL、CLEAR_CURRENT、CLEAR_PAGINATION、KEEP_ALL四种失效策略,并可通过clearExpiredCache手动清理过期缓存。
ArtForm:配置化表单方案
src/components/core/forms/art-form/index.vue 是一个声明式的表单组件。核心思路是:写法和 Element Plus 官方文档一致,把属性写在配置项里即可。
组件内置了 17 种常用表单控件(见componentMap):
const componentMap = { input: ElInput, // 输入框 inputtag: ElInputTag, // 标签输入框 number: ElInputNumber, // 数字输入框 select: ElSelect, // 选择器 switch: ElSwitch, // 开关 checkbox: ElCheckbox, // 复选框 checkboxgroup: ElCheckboxGroup, // 复选框组 radiogroup: ElRadioGroup, // 单选框组 date: ElDatePicker, // 日期选择器 daterange: ElDatePicker,// 日期范围选择器 datetime: ElDatePicker, // 日期时间选择器 datetimerange: ElDatePicker, // 日期时间范围选择器 rate: ElRate, // 评分 slider: ElSlider, // 滑块 cascader: ElCascader, // 级联选择器 timepicker: ElTimePicker, // 时间选择器 timeselect: ElTimeSelect, // 时间选择 treeselect: ElTreeSelect // 树选择器 }它基于ElRow / ElCol栅格布局渲染,支持响应式 span(通过 src/utils/form/responsive.ts 计算)、自定义插槽(<slot :name="item.key" />支持按表单项 key 定制内容)、表单校验、隐藏表单项,以及内置的"重置 / 提交"按钮区。实际使用时可配合useTable的resetSearchParams、replaceSearchParams完成"搜索表单 + 表格"的经典组合。
主题与权限:useTheme / useAuth
README 强调的"丝滑交互"之一就是主题切换,对应实现为 src/hooks/core/useTheme.ts:
- 支持亮色、暗色、自动(跟随系统)三种模式,自动模式通过 VueUse 的
usePreferredDark监听系统偏好。 - 切换时临时注入
* { transition: none !important; }禁用全局过渡,配合双重requestAnimationFrame恢复,避免主题切换时的闪烁问题。 - 会根据当前主色自动计算 9 个层级的明暗变体(
--el-color-primary-light-1~light-9),实现按钮等主色控件的联动适配。
权限控制对应 src/hooks/core/useAuth.ts,hasAuth(auth)同时支持两种模式:前端模式从用户信息的buttons数组判断,后端模式从当前路由meta.authList中匹配authMark,可在模板中直接控制按钮级显隐。
源码结构导读:拿到干净项目后从哪看起
清理后的基础项目保留的核心目录如下,可作为后续开发的导航地图:
src/ ├── api/ # 接口层(auth.ts、system-manage.ts) ├── components/ │ └── core/ # 核心组件库(banners/cards/charts/forms/layouts/tables/...) ├── config/ # 全局配置(系统信息、主题、菜单布局、颜色方案) ├── directives/ # 自定义指令(auth/roles/highlight/ripple) ├── enums/ # 枚举定义(应用、表单) ├── hooks/ # 组合式函数(useTable/useTheme/useAuth/useChart/...) ├── locales/ # 国际化语言包(zh.json / en.json) ├── mock/ # 本地 Mock 数据 ├── router/ # 路由(模块化路由、守卫、权限校验) ├── store/ # Pinia 状态管理(menu/setting/table/user/worktab) ├── types/ # 全局类型定义 ├── utils/ # 工具库(http/storage/table/form/ui/...) └── views/ # 页面视图(dashboard/system/result/exception/...)其中 src/config/index.ts 是全局配置的核心入口,集中管理系统名称、主题样式映射(亮/暗/自动)、菜单布局(Left/Top/Mixed/Dual Column)、菜单主题(Design/Dark/Light)、预设主色列表(systemMainColor7 种色值)与顶部栏功能开关;src/config/setting.ts 则统一了设置面板的所有默认值。路由侧采用模块化组织,模块定义在 src/router/modules 下,动态路由处理相关逻辑(菜单生成、权限校验、异步组件加载)集中在 src/router/core。
此外,CHANGELOG.md 与 CHANGELOG.zh-CN.md 记录了项目的历史更新内容,LICENSE 声明了 MIT 开源协议,commitlint.config.cjs、eslint.config.mjs、vite.config.ts 则分别对应提交规范、代码检查与构建配置,可按团队规范直接调整。
兼容性与环境说明
README 声明项目支持 Chrome、Safari、Firefox 等现代主流浏览器。需要注意,这个兼容性建立在 Node.js >= 20.19.0、pnpm >= 8.8.0 与 Vite 7 的构建前提之上,生产构建目标为es2015,因此老旧浏览器(如 IE)不在支持范围内。若你的部署环境版本较旧,请先升级 Node.js 与 pnpm 再执行安装命令。
从模板到项目:推荐的落地路径
结合 README 与仓库现状,从一个演示丰富的模板切换到自己的业务项目,可以按下面的顺序操作:
- 初始化:确认 Node.js(>= 20.19.0)与 pnpm(>= 8.8.0)版本,执行
pnpm install;失败时改用pnpm install --ignore-scripts。 - 清理演示数据:在 git 提交后执行
pnpm clean:dev,输入yes确认,获得只含 Dashboard、System、Result、Exception 与核心组件库的干净底座。 - 配置全局项:修改 src/config/index.ts 中的系统名称、主色、菜单布局,调整 vite.config.ts 中的代理地址与端口。
- 接入业务:以 src/views/system/user/index.vue 为样板,用
useTable+ArtForm快速搭建"搜索表单 + 数据表格 + 弹窗编辑"的标准页面;用 src/hooks/core/useAuth.ts 控制按钮级权限。 - 质量与协作:沿用 ESLint / Prettier / Stylelint / Husky / cz-git 工具链,保持代码风格统一;提交信息使用
pnpm commit走规范化的交互式提交。
通过以上步骤,你可以在保留优质 UI 与组件资产的同时,快速把模板改造成自己的业务后台。若在开发中想深入某个具体实现,直接阅读上面引用的源码文件即可,这些实现都位于仓库内的src目录下,均可作为参考与二次开发的起点。
- 前端
- 企业应用
- UI组件
【免费下载链接】art-design-pro
A Vue 3 admin dashboard template using Vite + TypeScript + Element Plus | vue3 admin | vue-admin — focused on user experience and visual design.
相关推荐
Art Design Pro 后台管理系统:5分钟快速上手指南
Art Design Pro 后台管理系统:5分钟快速上手指南 Art Design Pro 是一个基于 Vue 3、TypeScript、Vite 和 Ele
前端企业应用UI组件5分钟快速上手:Vue 3后台管理系统Art Design Pro完整配置教程
5分钟快速上手:Vue 3后台管理系统Art Design Pro完整配置教程 欢迎来到Art Design Pro的世界!🎉 这是一个基于Vue 3、Typ
前端企业应用UI组件Vuestic Admin 快速上手指南:基于 Vue 3、Vite、Pinia 与 Tailwind CSS 的开源管理后台模板
Vuestic Admin 快速上手指南:基于 Vue 3、Vite、Pinia 与 Tailwind CSS 的开源管理后台模板 本文以仓库中的日文版 REA
前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考