管理后台企业版开发使用指南
简介
在企业版管理后台中,开发者可以通过config.ts和router.ts文件快速完成后台的搭建,还可以通过自定义表单操作,实现多样化需求。
获取模板
请联系bd@mokyun.com获取体验。
配置环境
yarn install
框架目录结构
test-admin
├─ build
│ └─ publish.js // 脚本文件
├─ public
│ └─ config.d.ts
├─ src // 业务代码
│ ├─ .prettierrc.json
│ ├─ api
│ ├─ App.vue
│ ├─ assets
│ ├─ static
│ ├─ store
│ ├─ styles
│ ├─ utils
│ ├─ components
│ ├─ config.example // 配置对应的`mobox`服务地址和图片上传接口的示例文件
│ ├─ router.example // 配置页面和路由的示例文件
│ ├─ icons
│ ├─ init.ts
│ ├─ interfaces
│ ├─ main.ts
│ ├─ permission.ts
│ ├─ registerServiceWorker.ts
│ ├─ shims-vue.d.ts
│ └─ views // 页面模板
├─ tsconfig.json
├─ tslint.json
├─ vue.config.js
├─ yarn.lock
├─ .browserslistrc
├─ .editorconfig
├─ .env
├─ .gitignore
├─ .prettierrc
├─ cypress.json
├─ LICENSE
├─ package.json
├─ postcss.config.js
├─ README-zh.md
├─ README.md
└─ babel.config.js
创建管理后台
配置 config.ts 文件
config.ts 参考 src/config.example 示例文件,该文件配置的是管理后台页面中获取或编辑数据时访问的mobox后端云接口地址,以及上传图片时用到的配置参数(注:文件统一上传到七牛云空间)。
| 变量名 | 类型 | 说明 |
|---|---|---|
| WEBSITE_TITLE | string | 网站标题 |
| API_URL | string | mobox后端云接口地址 |
| getQiniuToken | function | 获取七牛云上传文件的 uptoken 参数 ,由 mobox 后端云提供,具体代码参考 src/config.example 文件 |
创建 router.ts 文件
router.ts 创建 :参考 src/router.example 示例文件,该文件配置的是管理后台页面的路由及页面列表展示的字段。
页面配置 :页面对应使用
mobox后端云建立的项目中的数据表,用于运营人员对数据的查看和编辑。通过 router.ts 文件中的的 config 变量编辑页面表单。示例如下:
export const config: { [K: string]: any } = {
student: {
table: 'Student',
columns: [
{
key: 'name',
title: '姓名',
},
{
key: 'avatarUrl',
title: '头像',
type: 'picture',
add: true,
show: true,
},
{
key: 'sex',
title: '性别',
type: 'status',
mapper: {
[Gender.Male]: ['男', 'success'],
[Gender.Female]: ['女', 'warning'],
},
},
{ key: 'age', title: '年龄' },
{ key: 'interests', title: '兴趣', search: false },
{
key: 'professionId',
title: '专业',
type: 'searchSelect',
mapTo: { table: 'Profession', key: 'id', value: 'title', in: true },
where: { status: true },
selectOptions: [],
edit: true,
},
{
key: 'professionId',
_key: 'describe',
title: '专业描述',
type: 'searchSelect',
mapTo: { table: 'Profession', key: 'id', value: 'describe', in: true },
where: { status: true },
selectOptions: [],
edit: true,
},
{ key: 'createdAt', title: '创建时间', type: 'dateTime', edit: false },
],
permission: { edit: true, add: true, delete: true, search: true },
tips: '提示:谨慎删除数据!',
hook: {
select: [
'$$',
'tableGet',
(instance: any, obj: any) => {
obj.params.order = { createdAt: 'DESC' }
obj.params.where.sex = Gender.Male
return obj
},
],
},
},
}
示例中构建的是 Student 数据表的管理页面,需配置如下属性:
| 属性名 | 类型 | 可选值 | 默认值 | 说明 |
|---|---|---|---|---|
| table | string | -- | -- | 表名,对应项目中建立的表文件的类名 |
| permission | object | permission:{add:true...} | -- | 定义对整张表的操作权限 |
| lineOperate | string | -- | -- | 自定义数据行操作 |
| topOperate | array | -- | -- | 自定义表单顶部操作 |
| hook | object | -- | -- | 钩子方法,用于覆盖系统查询、更新、删除等方法 |
| columns | array | -- | -- | 定义表字段 |
页面路由配置:
通过 router.ts 的 routes 变量编辑页面路由,示例如下:
const routes = [
{
path: '/config',
meta: { title: '基础配置', icon: 'el-icon-money' },
component: Layout,
children: [
{
path: 'classroom',
meta: { title: '教室列表', ...config.classroom },
component: { extends: TemplateTable },
},
{
path: 'profession',
meta: { title: '专业列表', ...config.profession },
component: { extends: TemplateTable },
},
],
},
{
path: '/student',
meta: { title: '学生管理', icon: 'el-icon-money' },
component: Layout,
children: [
{
path: 'student',
meta: { title: '学生列表', ...config.student },
component: { extends: TemplateTable },
},
],
},
]
示例中构建的是 Student 数据表的页面路由,需要配置如下属性:
| 属性名 | 说明 |
|---|---|
| path | 页面路径 |
| meta | 配置 title 一级目录名和 icon 目录图标,图标可参考 ElemenUI 中文网 |
| component | 默认为 Layout,目录样式 |
| children | 子目录,可配置多个子目录 |
| children-path | 配置 title 目录名和注入配置的表单 |
| children-meta | 配置 title 目录名和注入配置的表单,若该目录只有一个子目录则目录名为该子目录的 title |
| children-component | 配置页面模板,extend 通常为 CommonTable,使用 src/views/TemplateTable定义的通用页面模板,若此页面有特殊需求,可在 src/views 下自定义页面模板并在此处配置启用 |
预览项目
yarn serve
运行完成后最下方会出现本地访问地址,在浏览器中打开地址(推荐使用 Google 浏览器)访问管理后台。
页面效果
图 1-1
发布项目
yarn pub
附录
permission 定义了对整张表的有哪些操作权限,具体通过下列属性定义:
| 属性名 | 类型 | 可选值 | 默认值 | 说明 |
|---|---|---|---|---|
| add | boolean | true/false | true | 该表是否有新增数据行按钮 |
| edit | boolean | true/false | true | 该表数据行是否有编辑按钮 |
| search | boolean | true/false | true | 该表是否有搜索按钮 |
| expand | boolean | true/false | false | 该表是否有搜索按钮 |
| export | boolean | true/false | false | 导出操作 |
export 为 true 则此表有导出数据的功能:
permission: {
edit: true,
add: true,
delete: true,
search: true,
export: true, // 是否允许导出
// 导出接口
exportFunction: async (where: any) => {
return Api.Admin.getMonth(where);
}
}
在管理后台页面选择导出表的条件,会调用 exportFunction 方法里配置的mobox后端云接口查询要导出的数据。例如此处调用的是 Admin 类下的 getMonth 接口,where 是导出条件。
topOperate 自定义页面列表上方的操作按钮,示例如下:
topOperate: [
{
title: '订阅配置',
type: 'warning',
fn: () => {
console.log('运行状态')
},
},
]
title 为按钮名称,type 为按钮样式,具体需求可在 fn 中编写此按钮的业务代码。
lineOperate 定义对行数据操作内容,示例如下:
lineOperate: {
link: [
{
title: '订阅配置',
type: 'warning',
table: 'userNode',
PK: 'userId',
FK: 'id'
}
],
operate: [
{
title: '运行状态', // 数据行自定义操作
type: 'primary',
fn: () => {
console.log('运行状态');
}
}
]
}
- link:关联表操作,title 为按钮名称,type 为按钮样式,table 为关联表在 router.ts 文件 config 中配置的表名,FK 为字段名,PK 为该字段在关联表中对应的字段名。点击该按钮会将该字段在本表中的值作为条件查询在关联表中关联的数据,然后展示查询出来的关联表数据。
- operate:自定义操作按钮,具体需求可在 fn 中编写此按钮的业务代码。
hook 用于自定义表的增删改查,并且可以通过自定义函数改变传入 mobox 后端云接口的参数:
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| select | array | -- | 查询 |
| save | array | -- | 保存 |
| add | array | -- | 增加 |
| delete | array | -- | 删除 |
| update | array | -- | 更新 |
示例代码:
hook: {
select: [
'$$',
'tableGet',
(instance: any, obj: any) => {
obj.params.order = { createdAt: 'DESC' };
obj.params.where.role = UserRoles.Normal;
return obj;
}
],
save: [
'Admin',
'getOrderRecord',
async (instance: any, obj: any) => {
obj.recordId = Number(obj.params.where.id);
return obj;
},
],
add: [
'$$',
'tableAdd',
(instance: any, obj: any) => {
const option = {
name: 'Users',
data: {
id: obj.data.userId,
role: UserRoles.Hotel,
},
};
save(option);
return obj;
},
],
delete: [
'$$',
'tableDelete',
(instance: any, obj: any) => {
const option = {
name: 'Users',
data: {
id: obj.data.userId,
role: UserRoles.Normal,
},
};
save(option);
return obj;
},
],
},
hook 的属性值都是数组,参数有三个,第一个是调用的接口的类名,若使用系统方法则为“$$”,若使用mobox后端云的接口则为接口的类名,第二个参数是接口名,第三个参数为函数,instance 当前实例,参数 obj 是当前操作的数据行,此函数用于更改前端传入接口的参数或其他业务需求操作。
columns 定义表字段:
| 属性名 | 类型 | 可选值 | 默认值 | 是否必须 | 说明 |
|---|---|---|---|---|---|
| key | string | -- | -- | 是 | 表字段 |
| _key | string | -- | -- | 否 | 别名,非必填属性,与 export 导出操作有 关,如配置 Student 表单的代码实例中, professionId 这个字段被使用了两次,展示 其关联表的不同字段,但是如果这两个字段 都要导出就必须有别名,否则都是一个 key 导 出时只会导出其中一个关联表字段 |
| title | string | -- | -- | 是 | 该字段在页面展示时的列名 |
| add | boolean | true/false | true | 否 | 进行新增操作时是否包含此字段 |
| edit | boolean | true/false | true | 否 | 进行编辑操作时是否包含此字段 |
| required | boolean | true/false | true | 否 | 进行新增、或编辑操作时此字段是否必填 |
| search | boolean | true/false | true | 否 | 进行搜索操作时是否包含此搜索字段 |
| expand | boolean | true/false | false | 否 | 若表有换行属性,换行展示的字段是否 包含此字段 |
| export | boolean | true/false | false | 否 | 导出操作,是否导出该字段 |
| show | boolean | true/false | true | 否 | 页面是否展示此字段 |
| type | string | -- | text | 否 | 数据展示类型,普通的数据类型 number、 string,展示时没有特别要求只需展示原始 数据则不用特别声明,type 属性可以省略 |
type 定义表字段的页面渲染类型:
| 属性名 | 数据表字段类型 | 页面展示效果 | 说明 |
|---|---|---|---|
| text | string | 文本 | 无 |
| textarea | string | 文本 | 文字较多时 |
| richtext | string | 文本 | 富文本编辑 |
| switch | boolean | 开关按钮 | 表示是否 |
| date | string/number | 时间 | 无 |
| time | string/number | 时间 | 无 |
| dateTime | string/number | 时间 | 无 |
| picture | string | 图片 | 无 |
| pictureGroup | array | 图片组 | 无 |
| tags | array | 标签组 | 无 |
| status | number | 文字 | type 为此属性时,要搭配 mapper 属性使用, 具体参照上面 student 的性别字段的定义, 该属性的意义时将数据映射成文字 |
| searchSelect | string/number | 文字 | 该字段对应其他表中的某个字段, 搭配mapTo和 selectOptions: [] 属性使用 ;mapTo 中 table 为 该外键对应的表;mapTo 中可以添加 where 属性 在搜索关联表时进行条件限制;key 是此字段对 应外键表中的字段名;value 是页面上展示外键表 的哪个字段;具体请参照示例中 student 的 profession 字段 |
| multipSelect | array | 标签组 | 数组,数组参数为其他表中的某个字段的值 同 searchSelect |