如果觉得有用,请在爱发电上赞助我: https://afdian.net/@johnny ,让我可以分出更多精力来完善它。
一个基于 Vue.js 和 Boostrap 4 的后台 UI.
REST-ADMIN 试图让你在构建后台管理界面的时候更轻松点,所有你需要做的仅仅是提供一个后台服务的 RESTFul API 而已。
用户名:密码
admin:admin
- | - |
---|---|
登录 | 用户列表 |
博客列表 | 博客编辑表单 |
全栈之巅微信群 加微信拉群: johnny77577 |
免费视频教程-《全栈之巅》微信小程序 |
- 基于最新的 Bootstrap 和 VueJs,这意味着你可以方便地切换各种基于 bootstrap 框架的 CSS 皮肤
- 纯前端的 VueJs 项目,可以无缝对接任何类型的后端 RESTful API
- 强大的 Data Table,自带排序、分页、搜索、显示图片等等功能
- 强大的 Data Form Builder,可以显示/编辑各种类型的值:文本、图片、布尔值等等
- 支持基于资源的各项 CRUD 操作
- 基于英语的 i18n 支持
- 高度可配置的站点信息。如:网站名称、LOGO、后台菜单以及底部信息。
- 可用于实际项目。已经应用于公司的两个项目中
git clone [email protected]:wxs77577/rest-admin.git
cd rest-admin
code . # 用VSCODE打开项目
npm i # 或者 cnpm i
# 和本地测试API一起启动
npm run test-api # 启动测试API
npm run serve # 启动REST-ADMIN客户端
测试 API 的后台登录用户名及密码为
admin
和admin
API_URI=http://localhost:5555/admin/api/ npm run build
然后只需要把/dist/admin/
文件夹复制到对应的地方就好了
测试 API 基于
express
用于表格和表单中 默认主键字段为
_id
,你可以在/src/config.json
中随意更改它。
范例:
{
"_id": { "label": "ID" },
"title": { "label": "标题" },
"type": { "label": "类型", "type": "select", "options": [
{ "text": "Vue", "value": "vue" },
{ "text": "React", "value": "react" },
{ "text": "Angular", "value": "angular" },
]},
"body": { "type": "html", "group": "详情" },
"steps": { "type": "array", "group": "阶段", "fields": {
"name": { "label": "名称" },
"date": { "label": "日期" }
}},
"_actions": { // 定义表格视图中的一些额外选项
"buttons": { // 要隐藏“操作”栏中的某个按钮请把它设置为false
"delete": false,
"edit": false
},
"toolbar": { // 定义表格视图顶部的按钮
"extra": [ // 添加额外按钮
//所有`<b-button>`支持的属性
{ "to": "/form?uri=vouchers/generate", "label": "Generate Vouchers" }
]
}
}
}
label
显示的名称cols
占用栅格列宽度, 总数为 12。(参考 Bootstrap)input_cols
输入控件的宽度group
在创建、更新表单中的 TAB 分组名称type
字段类型。不同字段类型拥有不同的附加属性select
来自 b-selectbootstrap-vue
的原生 HTML<select>
标签options
e.g.[{ "text": "显示名", "value": "1" }]
select2
vue-select, 类似 jQuery 的select2
options
e.g.[{ "text": "显示名", "value": "1" }]
tree
vue-treeselectoptions
使用text
和value
代替label
和id
如:[{ "text": "Label", "value": "1", "children": [ { "text": "Item1", "value": "2" } ] }]
date
vue2-datepicker 支持 日期范围switch
类似 iOS 的开关控件html
来自vue-html5-editor的可视化 HTML 编辑器array
数组值fields
子字段定义is_table
是否要显示为表格
radiolist
options
如:[{ "text": "Label", "value": "1" }]
checkboxlist
options
如:[{ "text": "Label", "value": "1" }]
checkbox
file
文件上传控件limit
定义 size 字节数, e.g.{ size: 1000000 }
image
带有预览的图片上传控件limit
定义 width height 和 size 字节数, 如:{ "width": 320, "height": 180, size: 1000000 }
audio
类似image
limit
定义 size 字节数, e.g.{ size: 1000000 }
video
类似image
limit
定义 size 字节数, e.g.{ size: 1000000 }
textarea
number
text
required
- 以及https://bootstrap-vue.js.org/docs/components/form-input支持的任何其他属性,请注意:每种字段类型可能拥有不同的属性。
Tips: check
/api/index.js
:p
测试 API: http://localhost:8088/admin/api
GET /site
(url: http://localhost:8088/admin/api/site)
获取站点配置
- 返回值
{ "name": "网站名称", "logo": "http://.../logo.png", "locale": "zh-CN", //or zh-CN "locale_switcher": false, //hide locale switcher "menu" : [ { "name": "首页", "url": "/", "icon": "fa fa-home", // for home page }, { "name": "内容管理", "title": true, // display as a delimiter }, { "name": "文章", "url": "/rest/posts", "icon": "fa fa-list", // url format of resource list: /rest/:resourceName }, { "name": "设置", "url": "/form?uri=site/settings", "icon": "fa fa-cogs", // a custom form. }, { "name": "注销", "url": "/login", "icon": "fa fa-lock", // for logout }, ], }
管理员登录
- POST 数据
{ "username": "admin", "password": "admin" }
- 返回值
或者错误验证
{ "user": { "username": "admin", ... }, "token": "1o2u3h4oi2u3h4jkashdflsda" }
必须响应
422
的 HTTP 状态码{ "name":"HttpException", "message":[ { "field":"password", "message":"密码不正确" } ] }
获取某个资源列表
:resource
表示一个资源名称. 如: /users
, /posts
...
- 返回值 IMPORTANT
{ "total": 80, "perPage": 10, "page": 1, "data": [ {...}, {...}, {...}, ] }
返回资源的表格视图配置
:resource
表示一个资源名称。 如: /users/grid
, /posts/grid
...
- 返回 IMPORTANT
{ "searchModel": {}, "searchFields": { 渲染搜索字段 ...参考 字段定义... }, "fields": { 渲染表格字段 ...参考 字段定义... } }
获取资源的编辑表单配置
:resource
表示资源名称。 如: /users/form
, /posts/form
...
- Returns IMPORTANT
{ "model": {}, "fields": { 渲染表单字段 ...参考 字段定义... } }
创建资源
- POST 数据
{ "_id": "12341234", "title": "The New Title", ... }
- 返回值
{ "_id": "12341234", "title": "The New Title", ... }
更新一个资源
- POST DATA (Request Payload)
{ "_id": "12341234", "title": "The New Title", ... }
- 返回值
{ "_id": "12341234", "title": "The New Title", ... }
删除一个资源
- 返回值
{ "success": true }
删除一个资源中的全部记录
- 返回值
{ "success": true }
要显示一个自定义表单,你需要事先在
/site
接口中添加一个menu
,或者在/:resource/grid
的额外字段中加一个按钮。
自定义表单需要两个 API:
- 获取表单字段定义
- GET
/site/settings
- 返回值
{ "title": "表单名称", "fields": { ...参考 字段定义... } }
- 处理表单提交
- POST
/site/settings
- 返回值
{ "success": true, "message": "干得漂亮!", //[可选] 会在提交之后显示在前端 "redirect": "/" //[可选] 自动跳转到某个前端路由,默认是返回上一页 }
参考 vu-i18n
REST-ADMIN 默认支持 en-US
和 zh-CN
, 你可以修改/src/i18n/*.json
中的翻译文件。
- 基于 Vue.js 和 Bootstrap v4 的 bootstrap-vue
- 来自 Core UI 的漂亮的 UI
- 来自 vue-i18n 的 i18n 组件