@wiajs/ui
Version:
wia app ui packages
180 lines (148 loc) • 5.87 kB
Markdown
# DataTable
## 需求描述
创建组件实例,传入表头和数据,自动生成数据展示页面,同时支持排序、分页等功能。
## 使用
### 参数说明
通过表头数据传入选项参数。
- checkbox: true/false,是否带 checkbox 勾选框。
- id: Number,数据列中第几列为列 id,一般用于选择后按 id 操作行数据。
数组格式,第几列为 id 字段,从 0 开始,作为唯一标记,作为模板标识。
- hide: Array,隐藏数据列,数组格式,不显示的列,从 0 开始。
超出 head 中显示的列,可不列入,自动不显示。
- link: Array,显示列中,第几列为可点击跳转的链接
数组格式,从 1 开始,点击触发 onlink 事件,参数中带被点击的数据。
- sort: 字符串,空,不填,表示不排序,名称表示缺省按哪列名称排序。
- page: 不填,或填 0,不分页,填数字,比如 10,表示分页,每页 10 行数据。默认不分页。
- pageLink: 分页条页码数,比如 10,表示分页页码 10 页。
### 测试数据
```js
const _head = [
{checkbox: true, id: 0, hide: [0], link: [1], page: 3, pageLink: 10, sort: '贷款时间'},
{name: '贷款编号', type: 'string', sort: false},
{name: '贷款金额', type: 'number', sort: true},
{name: '订单数量', type: 'number', sort: false},
{name: '贷款时间', type: 'datetime', sort: true},
{name: '还款时间', type: 'datetime', sort: true},
{name: '贷款状态', type: 'string', sort: false},
{name: '核对状态', type: 'string', sort: false},
];
// 测试数据
const _data = [
[1, '1234566', 3115.0, 4, '2021/6/12 16:30:25', '2021/7/12 13:28:25', '已提款', '已核对'],
[2, '1234567', 2005.0, 4, '2021/6/5 16:30:25', '2021/7/5 13:28:25', '已提款', '已核对'],
[3, '1234568', 4115.0, 3, '2021/6/1 16:30:25', '2021/7/1 13:28:25', '已提款', '已核对'],
[4, '1234569', 2115.0, 4, '2021/6/2 16:30:25', '2021/7/2 13:28:25', '已提款', '已核对'],
[5, '1234570', 8453.0, 6, '2021/5/12 16:30:25', '2021/6/12 13:28:25', '已提款', '已核对'],
[6, '1234572', 2000.0, 2, '2021/5/5 16:30:25', '2021/9/5 13:28:25', '已提款', '已核对'],
[7, '1234573', 4001.0, 3, '2021/4/1 16:30:25', '2021/5/1 13:28:25', '已提款', '已核对'],
[8, '1234571', 1988.0, 4, '2021/7/2 16:30:25', '2021/8/2 13:28:25', '已提款', '已核对'],
];
```
### js
```js
// 引入组件
import DataTable from '../../component/dataTable';
export default class Demo extends Page {
// 在已就绪的视图上加载数据表绑定事件
ready(pg, param, bk) {
this::init();
}
}
function init() {
// 创建组件实例
const tb = new DataTable(this, {
el: _.name('tbContent'), // 容器
name: 'tbLoan'
head: _head,
data: _data,
});
}
```
### html
```html
<div class="card card-outline">
<div class="data-table data-table-init">
<div class="card-header">
<div class="data-table-header">
<div name="tbInfo" class="data-table-title">搜索结果</div>
</div>
<!-- Selected table header -->
<div class="data-table-header-selected">
<!-- Selected table title -->
<div class="data-table-title-selected">
<span class="data-table-selected-count"></span> items selected
</div>
<!-- Selected table actions -->
<div class="data-table-actions">
<button name="btnRepay" class="button button-fill button-small">还款</button>
<button class="button button-fill bg-color-green button-small">核对确认</button>
</div>
</div>
</div>
<!-- 数据表容器 -->
<div name="tbcontent" class="card-content"></div>
</div>
</div>
```
### css
```less
#wiapage-id {
// 引入 dataTable 样式
@import '../../component/dataTable/index.less';
```
如果组件针对 pc、安卓、苹果手机不同的样式,则需引入系统设置变量,根据设置生产响应 css
```less
// 引入系统设置变量
@import '../config/f7.vars.less';
#wiapage-id {
// 引入 swipe 样式
@import '../../component/dataTable/index.less';
}
```
## 组件工作原理
### 组件做了什么
1. 根据 head 数据,自动生成数据表头
```html
<tr>
<th class="checkbox-cell">
<label class="checkbox"><input type="checkbox" /><i class="icon-checkbox"></i></label>
</th>
<th class="label-cell">贷款编号</th>
<th class="numeric-cell sortable-cell">贷款金额</th>
<th class="numeric-cell">订单数量</th>
<th class="label-cell sortable-cell">贷款时间</th>
<th class="label-cell sortable-cell">还款时间</th>
<th class="label-cell">贷款状态</th>
<th class="label-cell">核对状态</th>
</tr>
</thead>
```
#### 根据 head 数据,生成的表体模板
```html
<tbody name="tbBody">
<tr name="tbLoan-tp" style="display: none;">
<td class="checkbox-cell">
<label class="checkbox"><input type="checkbox" /><i class="icon-checkbox"></i></label>
</td>
<td class="label-cell"><a href="javascript:;">${r[1]}</a></td>
<td class="numeric-cell">${r[2]}</td>
<td class="numeric-cell">${r[3]}</td>
<td class="label-cell">${r[4]}</td>
<td class="label-cell">${r[5]}</td>
<td class="label-cell">${r[6]}</td>
<td class="label-cell">${r[7]}</td>
</tr>
</tbody>
```
数组是特殊的对象,带有 0、1、2 等数字属性,可按对象处理,`r[1]` 就是数字属性 1 的值。
### 生成数据表
```js
// 数据与模板结合,生成数据视图
tb::setView(data);
```
### 状态/事件监听
无
```javascript
// 链式调用更优雅
tb.on('xxx', files => {});
```