[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形式。