🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] > admin模块有三个trait,分别为`AdminAuthTrait`,`AdminTreeTrait`,`AdminPhpOffice`,分别对应后台权限相关验证、树结构生成,Excel导出(目前)相关功能。 ## AdminAuthTrait ### `checkLogin`(检查登录)方法 当前url如果不在`$loginExcept`变量内,则需要登录,`$loginExcept`变量的格式为 `应用名/控制器名/方法名`,示例代码如下: ```php protected array $loginExcept = [ // 登录地址无需判断登录 'admin/auth/login', ]; ``` ### `checkAuth`(检查权限)方法 当前url如果不在`$authExcept`变量内,则需要登录,`$authExcept`变量的格式为 `应用名/控制器名/方法名`,示例代码如下: ``` protected array $authExcept = [ // 退出方法不需要权限 'admin/auth/logout', ]; ``` ### `checkOneDeviceLogin`(检查单设备登录)方法 如果想实现每个账号只能一个设备登录,只需要在后台`设置中心`-`后台设置`-`安全设置`中开启`单设备登录`即可,该设置调用此方法来实现单设备登录相关功能。 ### `checkToken`(检查csrf token)方法 当开启CSRFToken检测的时候,会调用此方法来验证token。对应的前端刷新token的代码在/public/static/admin/js/admin.js中,对应的函数名为`refreshCsrfToken`,可自行查看该函数实现。 ### `createLog`(创建日志)方法 创建用户操作日志调用该方法。 ## AdminTreeTrait > 该trait为5年前从网络上复制改造而成,未做优化处理,可自行查看内部实现,基本都有注释。 ### `getLeftMenu`(获取左侧菜单)方法 页面左侧菜单为该方法获取,目前未做优化处理。 ### `getBreadCrumb`(获取当前面包屑)方法 页面右上角面包屑为该方法获取,目前未做优化处理。 ### `getTreeList`(获取树形数据列表)方法 例如多级分类,我们可以直接在控制器中写如下方法,即可实现树形数据展示。 ~~~php /** * 列表 */ public function index(Category $model) { $this->assign([ 'data' => $this->getTreeList($model), ]); return $this->fetch(); } ~~~ 在视图中写如下代码即可: ```html <div class="card-body table-responsive p-0"> <table class="table table-hover table-bordered dataTable text-nowrap"> <thead> <tr> <th> <input id="dataCheckAll" type="checkbox" onclick="checkAll(this)" class="checkbox" placeholder="全选/取消"> </th> <th>ID</th> <th>名称</th> <th>操作</th> </tr> </thead> <tbody> {$data|raw} </tbody> </table> </div> ``` ### `getSelectList`(获取树形选择数据列表)方法 例如添加文章的时候选择分类,但是分类是多级的,这个时候我们可以直接在控制器中方法中写如下方法,即可实现树形select。 ~~~php /** * 添加 */ public function add(Category $category) { // 上面代码省略 $this->assign([ // 生成树形选择option 'category_list' => $this->getTreeList($category), ]); return $this->fetch(); } ~~~ 前端表单相关代码: ```html <div class="form-group row"> <label for="category_id" class="col-sm-2 control-label">用户等级</label> <div class="col-sm-10 col-md-4 formInputDiv"> <select name="category_id" id="category_id" class="form-control select2bs4 fieldSelect" data-placeholder="请选择分类"> <option value=""></option> {$categort_list|raw} </select> </div> </div> <script> $('#categroy_id').select2({ theme: 'bootstrap4' }); </script> ``` ### `authorizeHtml`(获取角色授权页html)方法 角色授权页调用的方法,目前已知缺陷,当授权项和层级过多时,页面会比较长,不方便操作,计划后期改成折叠的tree形式。