## 通用分頁表格實現
前端基于VUE的輕量級表格插件 `avue`
后端分頁組件使用Mybatis分頁插件 `MybatisPlus`
> 分頁實現流程,以【系統管理-管理員列表】為例
后臺vue文件位置目錄 `\src\views\modules\sys\user.vue`
1、`avue`組件的幾個通用配置
```html
<avue-crud ref="crud"
:page="page"
:data="dataList"
:option="tableOption"
@search-change="searchChange"
@selection-change="selectionChange"
@on-load="getDataList">
</avue-crud>
```
`avue`定義了很多的事件,其中一個為 `@on-load`當該組件加載的時候,將會調用該方法。同時也對很多數據進行了雙向綁定如:`:page="page"` 分頁參數、`:data="dataList"` 分頁的具體列表數據、`:option="tableOption"` 表格顯示的列
2、通用的列表、搜索
在`avue`規定,表格的構建,是通過JS對象,進行配置的,而不是通過dom,類似于傳統的layui,還有一個主要的原因是這個表格,可以同時生成搜索、分頁。
```javascript
import { tableOption } from '@/crud/sys/user'
```
我們查看下該類的代碼:
```javascript
export const tableOption = {
border: true,
selection: true,
index: false,
indexLabel: '序號',
stripe: true,
menuAlign: 'center',
menuWidth: 350,
align: 'center',
refreshBtn: true,
searchSize: 'mini',
addBtn: false,
editBtn: false,
delBtn: false,
viewBtn: false,
props: {
label: 'label',
value: 'value'
},
column: [{
label: '用戶名',
prop: 'username',
search: true
}, {
label: '郵箱',
prop: 'email'
}, {
label: '手機號',
prop: 'mobile'
}, {
label: '創建時間',
prop: 'createTime'
}, {
label: '狀態',
prop: 'status',
type: 'select',
dicData: [
{
label: '禁用',
value: 0
}, {
label: '正常',
value: 1
}
]
}]
}
```
這里的 `search: true` 也就是搜索框出現用戶名搜索
```javascript
{
label: '用戶名',
prop: 'username',
search: true
}
```
具體可以通過[avue官網-crud文檔](https://avuejs.com/doc/crud/crud-doc)獲取文檔進行查詢
3、 通用的搜索和加載
```javascript
getDataList (page, params) {
this.dataListLoading = true
this.$http({
url: this.$http.adornUrl('/sys/user/page'),
method: 'get',
params: this.$http.adornParams(
Object.assign(
{
current: page == null ? this.page.currentPage : page.currentPage,
size: page == null ? this.page.pageSize : page.pageSize
},
params
)
)
}).then(({ data }) => {
this.dataList = data.records
this.page.total = data.total
this.dataListLoading = false
})
}
```
4、服務端`SysUserController`
```java
@RestController
@RequestMapping("/sys/user")
public class SysUserController {
@Autowired
private SysUserService sysUserService;
/**
* 所有用戶列表
*/
@GetMapping("/page")
@PreAuthorize("@pms.hasPermission('sys:user:page')")
public ResponseEntity<IPage<SysUser>> page(String username,PageParam<SysUser> page){
IPage<SysUser> sysUserPage = sysUserService.page(page, new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getShopId, SecurityUtils.getSysUser().getShopId())
.like(StrUtil.isNotBlank(username), SysUser::getUsername, username));
return ResponseEntity.ok(sysUserPage);
}
}
```
- 開發環境準備
- 基本開發手冊
- 項目目錄結構
- 權限管理
- 通用分頁表格
- Swagger文檔
- undertow容器
- 對xss攻擊的防御
- 分布式鎖
- 統一的系統日志
- 統一驗證
- 統一異常處理
- 文件上傳下載
- 一對多、多對多分頁
- 認證與授權
- 從授權開始看源碼
- 自己寫個授權的方法-開源版
- 商城表設計
- 商品信息
- 商品分組
- 購物車
- 訂單
- 地區管理
- 運費模板
- 接口設計
- 必讀
- 購物車的設計
- 訂單設計-確認訂單
- 訂單設計-提交訂單
- 訂單設計-支付
- 生產環境
- nginx安裝與跨域配置
- 安裝mysql
- 安裝redis
- 傳統方式部署項目
- docker
- 使用docker部署商城
- centos jdk安裝
- docker centos 安裝
- Docker Compose 安裝與卸載
- docker 鏡像的基本操作
- docker 容器的基本操作
- 通過yum安裝maven
- 常見問題