写这个的初衷是因为node还没用很成熟的标准化全栈解决方案,现行的Nuxt.js, 这种专注于服务端渲染的框架,后端能力偏弱。其余的vue-admin模板,全是仅前端的模板,缺少类似于 java 的若依, php 的 fastadmin 的nodejs成熟方案。
于是就有了这个项目, 能够快速crud,节省很大一部分时间, 也能够让项目文件更清晰。节省下来的时间用来休息和摸鱼多好(不是让你接着内卷的)。 如果真的帮到了你的话,觉得这个项目还不错的话, 可以给我一个star, 也可以给我一个star, 也可以给我一个star, 重要的事情说三遍。
技术栈:后端Midway,前端vue3``element-plus,语言Ts,数据库:pgsql,缓存redis。
关于后端框架选择,koa.js等框架太自由,需要自己组装。而非常能打的nestjs,不支持esm,vite打包前端时必须为esm,ssr调用访问会出现各种问题。
目录结构
后端目录结构
复制代码
├──.husky git hooks钩子文件夹
├──.vscode vscode推荐配置文件夹
├── dist 后端打包文件夹
├──logs 日志文件夹
├──public 静态资源文件
│ ├── admin 后台静态资源
│ ├── index 前台静态资源
├── src 后端主目录
│ ├── app 后端模块根目录
│ │ ├──admin 后台接口模块
│ │ │ ├── controller 模块控制器文件夹
│ │ │ ├── dto 模块出入参dto类文件夹
│ │ │ ├── middleware 模块中间件夹
│ │ │ └── service 模块service文件夹
│ │ ├──index 前台接口模块
│ │ │ ├── controller 模块控制器文件夹
│ │ │ ├── dto 模块出入参dto类文件夹
│ │ │ ├── middleware 模块中间件夹
│ │ │ └── service 模块service文件夹
│ │ └──home.controller.ts 页面渲染控制器
│ ├── config 配置文件夹
│ ├── controller 公共控制器文件夹
│ ├── decorators 装饰器文件夹
│ ├── dict 字典文件夹
│ ├── dto 出入参dto基类文件夹
│ ├── entities 数据库实体类文件夹
│ ├── fileManage 文件夹管理助手类
│ ├── filter 异常类文件夹
│ ├── helper 助手函数文件夹
│ ├── locales 后端多语言文件包
│ ├── response 反参基类
| ├── ruleType 后端自定义校验规则
| ├── service 全局公共service
| ├── types 类型扩展
| ├── configuration.ts 启动文件
│ └── logger.ts logger初始化文件
├── uploadFile 本地上传目录
├── view 前端文件夹
├── .env env环境变量,VIEW_ADMIN_开头的可被 前端admin项目获取到,VIEW_INDEX_开头的可被前端 index项目获取到
├── .env.prod 启动后env环境变量
├── .eslintrc.json eslint配置文件
├── .gitignore git 忽略文件
├── .npmrc pnpm配置文件
├── .prettierignore prettier忽略文件
├── .prettierrc.cjs prettier配置文件
├── bootstrap.js 部署后bootstrap启动文件
├── meadmin.sql 初始化sql文件
├── pnpm-workspace.yaml pnpm workspace 配置
└── tsconfig.json typescript配置文件
前端目录结构
├── view 前端文件夹根目录
│ ├── admin 管理后台根目录
│ │ ├── dist 打包文件夹
│ │ ├── plugins vite插件
│ │ ├── public 公共静态资源目录
│ │ ├── src 主目录
│ │ │ ├── api 接口文件
│ │ │ ├── assets 资源文件
│ │ │ │ └── images 项目存放图片的文件夹
│ │ │ ├── components 公共组件(里面的组件会自动引入)
│ │ │ ├── config 配置文件夹
│ │ │ │ ├── index.ts 配置入口文件
│ │ │ │ ├── locale.ts 国际化配置
│ │ │ │ ├── login.ts 登录配置
│ │ │ │ └── theme.ts 主题配置
│ │ │ ├── dict 字典
│ │ │ ├── directives 指令(里面的指令会自动引入)
│ │ │ ├── event 事件
│ │ | ├── hooks 公共hooks
│ │ │ ├── icons 图标
│ │ │ │ ├── svg svg图标文件夹(放入此文件夹的svg会被自动注册图标组件)
│ │ │ │ └── index.ts 图标自动注册入口文件
│ │ │ ├── layout 布局文件
│ │ │ ├── locales 国际化
│ │ │ │ └── lang 全局语言包
│ │ │ ├── router 路由配置
│ │ │ │ └── guard 路由全局守卫
│ │ │ ├── store pinia文件夹
│ │ | ├── styles 样式文件
│ │ │ ├── utils 工具类
│ │ │ ├── views 页面
│ │ │ ├── entry-client.ts 客户端渲染入口文件
│ │ │ ├── entry-server.ts 服务端渲染入口文件(管理后台,暂不支持服务端渲染)
│ │ │ └── main.ts 入口文件
│ │ ├── template自动生成模板
│ │ ├── types 类型文件
│ │ └── vite.config.ts vite配置文件
│ ├── index 前台根目录
│ │ ├── dist 打包文件夹
│ │ ├── mock mock文件夹
│ │ ├── plugins vite插件
│ │ ├── public 公共静态资源目录
│ │ ├── src 主目录
│ │ │ ├── api 接口文件
│ │ │ ├── assets 资源文件
│ │ │ │ └── images 项目存放图片的文件夹
│ │ │ ├── components 公共组件(里面的组件会自动引入)
│ │ │ ├── config 配置文件夹
│ │ │ │ ├── index.ts 配置入口文件
│ │ │ │ └── login.ts 登录配置
│ │ │ ├── dict 字典
│ │ │ ├── directives 指令(里面的指令会自动引入)
│ │ │ ├── event 事件
│ │ | ├── hooks 公共hooks
│ │ │ ├── icons 图标
│ │ │ │ ├── svg svg图标文件夹(放入此文件夹的svg会被自动注册图标组件)
│ │ │ │ └── index.ts 图标自动注册入口文件
│ │ │ ├── layout 布局文件
│ │ │ ├── router 路由配置
│ │ │ │ ├── guard 路由全局守卫
│ │ │ │ └── routes 动态路由文件夹
│ │ │ ├── store pinia文件夹
│ │ | ├── styles 样式文件
│ │ │ ├── utils 工具类
│ │ │ ├── views 页面
│ │ │ ├── entry-client.ts 客户端渲染入口文件
│ │ │ ├── entry-server.ts 服务端渲染入口文件
│ │ │ └── main.ts 入口文件
│ │ ├── template自动生成模板
│ │ ├── types 类型文件
└── └── └── vite.config.ts vite配置文件
核心功能:一键 CRUD,告别重复劳动
你只需要在 src/entities/ 下写好数据库实体(Entity),执行一条命令:
pnpm meadmin crud exampleDemo --menu
它会自动生成 12 个文件,覆盖前后端全链路:
后端生成:
dto/example/demoCreate.dto.ts—— 新增参数校验dto/example/demoUpdate.dto.ts—— 更新参数校验dto/example/demoQuery.dto.ts—— 查询参数校验(分页、模糊搜索)service/example/demo.service.ts—— CRUD 业务逻辑controller/example/demo.controller.ts—— 增删改查接口,自带 Swagger 文档
前端生成(Vue 3):
api/example/demo.ts—— 接口调用封装views/example/demo/index.vue—— 列表页(带搜索、分页、操作按钮)views/example/demo/components/info.vue—— 详情页views/example/demo/components/addOrUp.vue—— 新增/编辑弹窗views/example/demo/dict.ts—— 前端字典views/example/demo/lang/en.json—— 多语言文件
而且,--menu 参数还会自动在后台菜单表里插入一条菜单记录,刷新页面,左侧菜单直接出现!
你只需要写一个 Entity,剩下的——接口、校验、列表页、表单页、菜单——全自动生成。写实体,跑命令,点菜单,开改业务逻辑,就这么简单。
功能特性
- 最新技术栈:基于 Vue3、Vite5、TypeScript、Pinia、Element-Plus、Vue-request 等最新技术栈开发,后端基于 Midway + PostgreSQL + Redis
- 一键 CRUD:命令行一键生成控制器、模型、视图和接口文件,同时可一键生成后台菜单权限
- 按需引入:组件自动按需引入,type 自动生成,打包体积更小
- 服务端渲染(SSR) :集成
@medamin/midway-vite-view,Vite + Vue 服务端渲染开箱即用,SEO 友好 - 参数校验:集成
@midwayjs/validate,基于 Joi,支持手机号等自定义规则 - 多语言:集成
@midwayjs/i18n,支持国际化 - 缓存:集成 Redis + Cache-Manager,开箱即用
- 日志:统一输出到 logs 目录,调试生产一致
- 开源免费:无任何加密,无需授权即可商业使用
- 灵活插件:支持插件机制,功能可快速扩展
快速开始
环境准备
- Node.js ≥ 22.14.0
- PostgreSQL
- Redis
- pnpm
一键安装
bash
lua
体验AI代码助手
代码解读
复制代码
pnpm create meadminjs
按提示配置数据库等信息,项目自动创建完成。
本地启动
bash
体验AI代码助手
代码解读
复制代码
pnpm dev
- 后台访问:
http://127.0.0.1:7001/admin - 前台访问:
http://127.0.0.1:7001/
默认账户
- 后台:
admin/meAdmin#202507!P - 前台:
test/123456789
编写实体,一键生成 CRUD
- 在
src/entities/下定义实体文件(如exampleDemo.entity.ts) - 同步数据库结构:
pnpm meadmin sync exampleDemo - 一键生成crud:
pnpm meadmin crud exampleDemo --menu
完成!刷新后台,菜单已出现,完整的增删改查页面可直接使用。
最后
Me-Admin 不仅仅是一个后台管理模板,它是一套完整的全栈开发方案。它把重复劳动交给命令行,把复杂配置交给封装,把真正的价值创造留给你。
如果你正在寻找一个能快速搭建企业级应用的框架,或者厌倦了手写 CRUD 的重复劳动,不妨试试 Me-Admin。
推荐的开源项目已发布到 GitHub ,欢迎 Star:
github.com/meadmin-cn/…
项目文档:
www.meadmin.cn/aon/doc/
官方网站:
www.meadmin.cn