如前言所述,后台框架是复制的别的项目搭建的,所以根据业务需求删除了不需要的内容,然后新建需要的菜单。但在复制和手动新建控制器后,点击菜单无法访问或者是无权限访问。这个问题的原因就不多描述了,只记录一下正确的步骤吧。
一、登陆后台
由于是复制过来的项目,所以后台管理员密码可能被改过,搭建完项目后需要登陆到后台,查看了代码和数据库相关字段后,发现密码是通过密码盐进行加密的,不好直接修改。可以把管理员的那条数据的密码和密码盐修改成下面的:
- 密码:c13f62012fd6a8fdf06b3452a94430e5
- 密码盐:rpR6Bv
修改完的登录密码是123456
登陆完了后在页面可以进行添加成员和修改密码
二、添加新的菜单(用户管理)
(一)后台添加菜单
- 打开菜单规则,添加以下几个:
- 用户管理 member
- 用户列表 member/member
- 打卡列表 member/sign
- 申请列表 member/apply
菜单选择 “是”
角色权限分配
勾选刚刚添加的菜单提前在这里说,如果仅是这样添加的话,等控制器和相关js都全部弄好也会点不进去,会提示 无权限访问。原因在缺少index页。所以需要在非父级菜单下分别添加 index、edit、add、del、multi,也就是增删改查,后面如果需要在页面中添加其他的按钮的,也需要在这里新增相关方法,如查看详情,设置工资等,这个后面文章会单独讲解。
添加完了后记得同样需要去角色组里勾选刚刚的几个
注意:这里的增删改查等方法需要选择非菜单,因为这个不是在左侧菜单栏展示的,切记。
4.代码实现
这里没什么要说的,就是mcv,需要注意的是刚刚菜单里添加的路径,这里的控制器对应方法需要一致,不然会提示找不到控制器或相关方法。
比如刚刚我添加的用户管理,控制器的路径就是 app\admin\controller\member\Member.php
里面的方法 Index edit del,可以参考父类中,根据自己的需求进行改动。app\admin\library\traits\Backend.php
视图页面view中需要注意的是对应的方法路径,需要改成自己对应方法的路径。其中编辑或者自己新增的按钮如查看详情页等页面需要注意在顶部的form中将id换成对应的,这个在后面的自定义按钮文章中会单独讲。
模型model中的话,相关方法会在连表查询的时候会用到。还有可以:
- 自动写入时间戳字段和定义时间戳字段名和追加属性
// 自动写入时间戳字段
protected $autoWriteTimestamp = 'int';
// 定义时间戳字段名
protected $createTime = 'add_time';
protected $updateTime = 'updated_time';
// 追加属性
protected $append = [
];
这里的创建和更新时间在数据表中都不需要存在的,直接可以在js中输出到页面。格式是时间戳,在js中需要通过formatter: Table.api.formatter.datetime
来转换,下面会讲到
最重要的js,我的代码位置是在public\assets\js\backend\member\member.js
列表中的title可以在代码中自定义,我没有定义,直接写的中文,需要自定义的可以去网上找相关方法,很简单。
关于其中的Table相关方法的,下面贴出官网给的
Table.api
Table.api.init(defaults, columnDefaults, locales) //此方法用于初始化表格默认配置、表格列配置、写入语言包等操作
Table.api.bindevent(table) //此方法用于为表格中的元素绑定相关事件
Table.api.multi(action, ids, table, element) //此方法常用于批量操作请求,内部使用
Table.api.events.operate //操作栏单元格方法
Table.api.events.image //图片栏单元格方法
Table.api.formatter //格式化方法,后面单独介绍
Table.api.buttonlink(column, buttons, value, row, index, type) //按钮链接生成,内部使用
Table.api.replaceurl(url, row, table) //替换URL中的数据
Table.api.selectedids(table) //获取选中的条目ID集合
Table.api.toggleattr(table) //切换复选框状态
Table.api.getrowdata(table, index) //根据行索引获取行数据
Table.api.getrowbyindex(table, index) //根据行索引获取行数据
Table.api.getrowbyid(table, id) //根据主键ID获取行数据
Table.api.formatter
Table.api.formatter.icon //渲染成图标按钮
Table.api.formatter.image //渲染成单张图片
Table.api.formatter.images //渲染成多张图片
Table.api.formatter.content //内容自动截取
Table.api.formatter.status //渲染成状态
Table.api.formatter.normal //渲染成label
Table.api.formatter.toggle //渲染成开关
Table.api.formatter.url //渲染成文本框链接
Table.api.formatter.search //渲染成搜索链接
Table.api.formatter.addtabs //渲染成打开新选项卡链接
Table.api.formatter.dialog //渲染成弹窗链接
Table.api.formatter.flag //渲染成标志
Table.api.formatter.label //渲染成标志
Table.api.formatter.datetime //渲染成日期时间
Table.api.formatter.operate //渲染成操作栏按钮
Table.api.formatter.buttons //渲染成按钮组
三、数据库表设计
具体表咋设计就不说了。这里遇到个东西需要说一下,就是咱在获取用户信息的时候会遇到用户名是表情或者特殊符号的,如果表设计成utf-8的话会报错,存不进去。这里需要修改成utf8mb4
完成以上步骤再去刷新一下网页就可以访问对应的菜单了。对于页面中搜索栏中的自定义啊之类的可以另外百度看看别人怎么实现的,我没有用到就不说了,之前简单的看了一下,项目紧就没有弄,后面抽空可以总结一下。