本文是《uniCloud项目中树形分类页面的快速开发》的第二部分。介绍如何通过schema自动生成管理端代码。并就系统提供的RBAC角色权限管理功能进行了实操。
一、创建数据结构文件(schema),生成管理端页面代码。
1、梳理业务需求:
- 只有“平台管理员”角色可以对分类表进行增删改查,所有人都可以查询分类表。
- 分类表设三个层级的分类。
- 每个分类除名称为必填外,还可以选择上传分类图片。
- 分类顺序可以控制。子分类的顺序和父分类联动。
- 分类的ID和创建时间由系统自动生成。
- 通过父类ID来关联父类和子类,顶级分类的父类ID为空。
- 列表页面通过树形结构来显示。
2、根据业务需求创建schema文件
在HuilderX
编辑器中,找到uni-taxonomy
项目,在项目内uniCloud->dataase
目录上右击创建名为taxonomy.schema.json
的schema文件。
3、编写schema代码。
在taxonomy.schema.json
中写入下面的代码,保存。
{
"bsonType": "object",
"required": ["name"],
"permission": {
"read": true,
"create": "'padmin' in auth.permission",
"update": "'padmin' in auth.permission",
"delete": "'padmin' in auth.permission"
},
"properties": {
"_id": {
"description": "ID,系统自动生成"
},
"name": {
"bsonType": "string",
"description": "分类名称",
"label": "分类名称",
"trim": "both"
},
"imagefile": {
"bsonType": "file",
"fileMediaType": "image",
"title": "图片文件",
"description": "图片文件信息,包括文件名、url等(可选)"
},
"level": {
"bsonType": "int",
"title": "分类层级",
"description": "0一级 1-二级 2-三级 ",
"maximum": 2
},
"sort": {
"bsonType": "int",
"description": "类别显示顺序",
"label": "排序"
},
"parent_id": {
"bsonType": "string",
"title": "父节点ID",
"description": "父节点ID(顶层节点的父节点ID为空)",
"parentKey":"parent_id"
},
"create_date": {
"bsonType": "timestamp",
"description": "创建时间(系统自动调取当前时间)",
"forceDefaultValue": {
"$env": "now"
}
}
}
}
复制代码
有关schema的强大功能和编写规则请参看官方文档。
4、上传schema文件。
在taxonomy.schema.json
文件名上右击,确认上传完成。
二、生成并测试管理端页面。
1、自动生成管理端页面代码
- 在
taxonomy.schema.json
文件名上右击,选择schema2code。
- 选择目标项目为
uni-taxonomy-admin
。
- 左上角标签栏选择
uniCloud admin 页面
,勾选项目模式
,点击确认
按钮。
- 选择生成页面放置位置,默认即可。自动注册页面的路径。
- 将生成的页面文件与项目合并。
- 在文件目录列表中可以看到刚刚生成的三个页面文件。
2、新增分类管理链接菜单。
- 在
HuilderX
中打开uni-taxonomy-admin
项目的页面配置文件(pages.json)。在配置文件中找到taxonomy.schema.json通过schema2code生成的页面路径。
-
拷贝
pages/taxonomy/list
页面路径备用。 -
登录管理端。在
系统管理
选中菜单管理
,点击左上角新增一级菜单
按钮,新增一条分类管理
菜单。菜单路径就是前面拷贝的路径。
- 保存后,管理端页面左侧多出了一个
分类管理
菜单,点击菜单链接,可以看到分类列表页面。
此时页面是空的,因为我们还没有输入任何数据。
3、测试分类管理的增删改查功能。
- 点击右上角
新增
按钮,出现新增分类的页面,这个页面是根据schema自动生成的。图片上传组件也是根据schema约定自动生成的。
- 提交后,返回到列表页面,可以看到刚刚新增的一条分类数据。
- 解决分类列表中图片不能显示问题。
有可能自动生成的代码问题,分类列表页面不能正常显示图片。在项目uni-taxonomy-admin
下的unicloud
目录上右击打开云控制台。
在云控制台中打开uni-taxonomy
空间,找到云数据库taxonomy
,可以看到我们刚刚新增的一条数据。展开字段imagefile
,可以看到我们成功上传的图片信息。说明自动生成的分类添加页面是有效的,图片上传也是完美衔接的。
在云空间中,打开云存储,可以看到,系统已经将上传的图片自动存储在这里了,而且自动生成了图片信息存储在数据库中了。
点击详情,可以仅有看到图片文件的详细信息。
我这里自动生成的分类列表页面不能正常显示图片。于是对/pages/taxonomy/list.vue文件进行了改动,保存好就可以正常显示图片了。
<uni-td align="center">
<!-- 这是添加的代码 -->
<image v-if="item.imagefile.url " :src="item.imagefile.url " mode="aspectFit"
style="width:30px;height:30px;"></image>
<!-- 这是自动生成的代码 -->
<!-- <uni-file-picker v-if="item.imagefile && item.imagefile.fileType == 'image'"
:value="item.imagefile" :file-mediatype="item.imagefile && item.imagefile.fileType"
return-type="object" :imageStyles="imageStyles" readonly></uni-file-picker>
<uni-link v-else :href="item.imagefile && item.imagefile.url"
:text="item.imagefile && item.imagefile.url"></uni-link> -->
</uni-td>
复制代码
- 在列表页面,每一条数据后面都自动生成了
修改
和删除
按钮,点击测试有效。
4、完善权限管理。
我们是用超级管理员身份登录管理端的,所以没有遇到权限管理问题。现在我们激活test用户,勾选可登录应用uni-taxonomy-admin
。
退出admin的登录,用test账户登录管理端。这时候我们看不到任何动态管理菜单,说明test的管理权限不够。
退出test的登录,用admin账户登录管理端。
第一步,创建一个分类管理的权限,根据schema文件约定,权限名为padmin
。
第二步,创建一个角色,命名为平台管理员
。并给这个角色赋予分类管理的权限。
第三步,修改test用户信息,赋予平台管理员
的角色。
第四步,修改分类管理菜单权限,勾选padmin
权限可见。
退出admin的登录,用test账户登录管理端。这时候就可以看到分类管理的页面了。
点击新增按钮,功能正常。因为我们事先在schema中已经按照规则编写了增删改查的权限。
三、存在问题。
虽然我们完成了分类管理的增删改查功能,但对照实际需求,还存在下列问题。
- 新增二级和三级分类时,分类的父ID需要手动输入,很麻烦。
- 二级分类和三级分类的排序也需要手动输入,要确保和一级分类排序统一,也很麻烦。
- 分类层级也是手动输入,容易出错。
- 存在下级分类时,不能拒绝删除父级分类。
- 列表显示各级分类项是平行的,不能显示树状结构,看起来不直观。
这些问题,都需要通过二次开发来解决。接下来的部分,将继续和大家分享二次开发的过程。敬请期待。