homepagePHP/docs/ListBuilder.md

312 lines
9.3 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ListBuilder
#### setCheckBox
设置每行开始的checkbox元素
```php
//第一个参数是否显示checkbox默认为true
//第二个参数可传入自定义checkbox元素属性的回调默认为null
->setCheckBox(true, function($attr, $data){
if($data['type'] === 'manual'){
$attr['disabled'] = 'disabled';
}
return $attr;
})
//如果希望当data某个字段等于某个值时checkbox不可选择可通过下面的辅助方法生成回调函数
->setCheckBox(true, ListBuilder::genCheckBoxDisableCb('manual', 0))
```
#### addRightButton
```blade
加入一个数据列表右侧按钮
在使用预置的几种按钮时,比如我想改变编辑按钮的名称
那么只需要$builder->addRightButton('edit', array('title' => '换个马甲'))
如果想改变地址甚至新增一个属性用上面类似的定义方法
因为添加右侧按钮的时候你并没有办法知道数据ID于是我们采用__data_id__作为约定的标记
__data_id__会在display方法里自动替换成数据的真实ID
参数
$type 按钮类型取值参考registerBaseRightButtonType
$attribute 按钮属性,一个定义标题/链接/CSS类名等的属性描述数组
$tips 按钮提示
$auth_node 按钮权限点
$options 按钮options
若auth_node存在多个值支持配置不同逻辑logic值为and或者or判断是否显示该按钮默认为and
and用户拥有全部权限则显示该按钮格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'and']
or用户一个权限都没有则隐藏该按钮格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'or']
```
```blade
使用技巧
1. 使用占位符动态替换数据
```
```php
//按钮点击跳转链接链接需要带该记录的name只需用__name__作为占位符生成list后会自动替换成该记录的真实name值
//如变量存在下划线project_id那么占位符就是 __project_id__以此类推
->addRightButton('self', array('title' => '跳转', 'class' => 'label label-primary', 'href' => U('index', ['name' => '__name__'])));
```
#### setPageTemplate
```blade
该方法用于设置页码模板
参数
$page_template 页码模板自定义html代码
```
#### addTableColumn
```blade
该方法用于加一个表格列标题字段
参数
$name 列名
$title 列标题
$type 列类型默认为null目前支持类型status、icon、date、time、picture、pictures、type、fun、a、self、num、checkbox、select、select2、textarea
$value 列属性,默认为'',一个定义标题/链接/CSS类名等的属性描述数组
$editable 列是否可编辑默认为false也可以是回调函数见下面例子
$tip 列标题提示文字,默认为''
$th_extra_attr 列标题额外属性,默认为''
$td_extra_attr 列值额外属性,默认为''
$auth_node 列权限点需要先添加该节点若该用户无此权限则unset该列格式为模块.控制器.方法名,如:['admin.Box.allColumns']
若auth_node存在多个值支持配置不同逻辑logic值为and或者or判断是否显示该列默认为and
and用户拥有全部权限则显示该列格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'and']
or用户一个权限都没有则隐藏该列格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'or']
```
```php
//editable回调函数用法
->addTableColumn('amount', '支出金额', 'number', '', function($data){
return $data['manual'] == 1;
})
```
##### type类型使用说明
1. date
> + 通过value设置转换的日期格式默认为'Y-m-d'
2. time
> + 通过value设置转换的日期格式默认为'Y-m-d H:i:s'
3. pictures
> + 列表多图展示缩略图默认使用原图可通过value设置缩略图代理'oss'、'imageproxy'
#### addTopButton
```blade
加入一个列表顶部工具栏按钮
在使用预置的几种按钮时,比如我想改变新增按钮的名称
那么只需要$builder->addTopButton('addnew', array('title' => '换个马甲'))
如果想改变地址甚至新增一个属性用上面类似的定义方法
参数
$type 按钮类型取值参考registerBaseTopButtonType
$attribute 按钮属性,一个定义标题/链接/CSS类名等的属性描述数组
$tips 按钮提示
$auth_node 按钮权限点
$options 按钮options
若auth_node存在多个值支持配置不同逻辑logic值为and或者or判断是否显示该按钮默认为and
and用户拥有全部权限则显示该按钮格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'and']
or用户一个权限都没有则隐藏该按钮格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'or']
```
#### addSearchItem
```blade
加入一个筛选项提交的url默认为当前页
参数
$name 筛选项字段
$type 筛选项类型目前支持类型可查看ListSearchType
$title 筛选项提示标题
$options 筛选项其它配置特殊类型有效如select、select_text
$auth_node 筛选项权限点
若auth_node存在多个值支持配置不同逻辑logic值为and或者or判断是否显示该筛选项默认为and
and用户拥有全部权限则显示该按钮格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'and']
or用户一个权限都没有则隐藏该按钮格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'or']
用例:
->addSearchItem('keyword', 'text', 'id/昵称/email/手机号');
用法:
可以通过设置search元素data-jump属性1为跳转0为不跳转确定点击该元素后是否跳转。
使用技巧:
可以给search元素添加”beforeSearch“事件处理搜索前的动作。
场景:
用户没有填写搜索关键字,点击搜索需要提醒用户搜索关键字不能为空且不跳转。
```
```javascript
$('body').on('beforeSearch', '.builder #search', function() {
var keyword = $("input[name='keyword']").val();
if (!keyword){
$(this).data('jump', 0);
alert('关键字不能为空');
}
});
```
#### searchItem的parse方法
查询参数解释的封装方法,简化解析流程
提供了该方法的控件类型有:
+ DateRange
```php
//$key 搜索栏name
//$map_key 数据库字段值
//$get_data $_GET数组
//返回值 [$map_key => ['BETWEEN', [$start_time, $end_time]]]
$map = array_merge($map, DateRange::parse('date_range_data', 'create_date', $get_data));
```
+ Hidden
```php
//$key 搜索栏name
//$map_key 数据库字段值
//$get_data $_GET数组
//返回值 [$map_key => '参数']
$map = array_merge($map, Hidden::parse('employee_id', 'employee_id', $get_data));
```
+ Select
用法同Hidden
+ SelectCity
用法同Hidden
+ SelectText
```php
//$keys_rule 结构
// [
// $key => [
// 'map_key' => $map_key,
// 'rule' => 'fuzzy' 模糊查找 | 'exact' 精准查找 || function(){}
// ]
// ]
// 返回值
// fuzzy类型 [$map_key => ['like', "%$get_data[$key]%""]]
// exact类型 [$map_key => $get_data[$key]]
// 回调函数 由回调函数决定
$map = array_merge($map, SelectText::parse([
'employee_name' => [
'map_key' => 'employee_id',
'rule' => function($map_key, $word){
$employee_sql = D('Employee')->where(['name' => ['like', '%'.$word.'%']])->field('id')->buildSql();
return [$map_key => ['exp', 'in '.$employee_sql]];
}
],
'reason' => [
'map_key' => 'reason',
'rule' => 'fuzzy'
]
], $get_data));
```
+ Text
```php
//$key 搜索栏name
//$map_key 数据库字段值
//$get_data $_GET数组
//$rule 'fuzzy' 模糊查找 | 'exact' 精准查找
// 返回值
// fuzzy类型 [$map_key => ['like', "%$get_data[$key]%""]]
// exact类型 [$map_key => $get_data[$key]]
$map = array_merge($map, Hidden::parse('text', 'text', $get_data, 'exact'));
```
##### type类型使用说明
+ select
[Select使用说明](https://github.com/quansitech/qs_cmf/tree/master/docs/ListSearchType/Select/Select.md)
#### setSearchUrl
```blade
设置筛选提交的url
```
#### setLockRow
```blade
锁定行
用法
->setLockRow(1)
参数
$row 锁定行数
```
#### setLockCol
```blade
锁定列(左)
用法
->setLockCol(1)
参数
$row 锁定列数
```
#### setLockColRight
```blade
锁定列(右)
用法
->setLockCol(1)
参数
$row 锁定列数
```
#### QsPage
开启关闭下拉风格, 默认采用数字分页风格
QsPage分数字分页风格和下拉分页风格两种风格对分页有不同的需求。
1. 数字分页风格限制了不能访问超出最大页数的页面,否则仅返回最大页(需求场景:用户删除最大页的所有数据后,程序会刷新停留在当前页,此时用户会看到是空数据页,会产生已经没有数据的误解。)。
2. 下拉风格页没有访问超出最大页数的限制,否则下拉程序会不断加载最大页的内容,导致无限加载相同的数据。
开启下拉风格
```
QsPage::setPullStyle(true)
```