homepagePHP/docs/SubBuilder.md

219 lines
5.6 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.

## SubBuilder
<big>**此功能需要提供action genQsSubBuilderRowToJs**</big>
```
用于异步处理点击添加新字段所需HTML
trait类 \Qscmf\Builder\TSubBuilder 已实现此方法,可在需要的控制器中引入
```
```
使用技巧:
可以给.text-right .btn-sm元素添加”afterQsSubBuilderRowToJs“事件处理新字段添加后的动作。
```
```php
$('body').on('afterQsSubBuilderRowToJs', '.text-right .btn-sm', function() {
// dosomething
});
```
#### 用法
#### 只读模式
1. 实例SubTableBuilder对象时可控制隐藏/显示 删除、添加新字段 按钮默认是false即展示
```php
$sub_builder = new \Qscmf\Builder\SubTableBuilder(true);
```
2. 表单项单个设置为只读
```php
$sub_builder = new \Qscmf\Builder\SubTableBuilder(true);
$sub_builder->addTableHeader('text', '10%');
$sub_builder->addFormItem('text', 'text', '', true);
```
3. 表单项统一设置为只读
```php
$sub_builder = new \Qscmf\Builder\SubTableBuilder(true);
$sub_builder->setColReadOnly(true);
```
#### setNewRowPos
```php
$sub_builder = new \Qscmf\Builder\SubTableBuilder();
//指定新增的行添加到表顶部
$ub_builder->setNewRowPos(\Qscmf\Builder\SubTableBuilder::NEW_ROW_AT_FIRST);
//指定新增的行添加到表底部 默认采用这种方式
$ub_builder->setNewRowPos(\Qscmf\Builder\SubTableBuilder::NEW_ROW_AT_LAST);
```
#### addTableHeader
```blade
该方法用于加入一个子表单项的标题
参数
$name 名称
$width 该项占用整行宽度的比例
```
```php
$sub_builder = new \Qscmf\Builder\SubTableBuilder();
$sub_builder = $sub_builder
->addTableHeader('标题', '30%')
->addTableHeader('摘要', '30%');
```
#### addFormItem
```blade
该方法用于加入一个子表单项的内容
参数
$name item名
$type item类型查看支持类型
$options item options
$readonly 是否开启只读模式默认关闭false
$extra_class item项额外样式
$extra_attr item项额外属性
$auth_node 列权限点需要先添加该节点若该用户无此权限则unset该列格式为模块.控制器.方法名,如:['admin.Box.allColumns']
若auth_node存在多个值支持配置不同逻辑logic值为and或者or判断是否显示该列默认为and
and用户拥有全部权限则显示该列格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'and']
or用户一个权限都没有则隐藏该列格式为
['node' => ['模块.控制器.方法名','模块.控制器.方法名'], 'logic' => 'or']
```
```php
$sub_builder = new \Qscmf\Builder\SubTableBuilder();
$sub_builder = $sub_builder
->addTableHeader('标题', '30%')
->addTableHeader('摘要', '30%')
->addFormItem('id', 'hidden')
->addFormItem('title', 'text')
->addFormItem('summary', 'textarea');
```
#### setData
```blade
设置子表单项的数据
该方法需要设置表单项属性,建议使用 setFormData 方法直接设置表单值
```
```php
$data = [
['name' => 'id', 'type' => 'hidden', 'value' => 1],
['name' => 'title', 'type' => 'text', 'value' => 'title'],
['name' => 'summary', 'type' => 'textarea', 'value' => 'summary']
];
$sub_builder = new \Qscmf\Builder\SubTableBuilder();
$sub_builder = $sub_builder
->addTableHeader('标题', '30%')
->addTableHeader('摘要', '30%')
->addFormItem('id', 'hidden')
->addFormItem('title', 'text')
->addFormItem('summary', 'textarea')
->setData($data);
```
#### setFormData
```blade
设置子表单的数据
```
```php
$data = [
['title' => 'title1', 'summary' => 'summary1'],
['title' => 'title2', 'summary' => 'summary2'],
['title' => 'title3', 'summary' => 'summary3'],
];
$sub_builder = new \Qscmf\Builder\SubTableBuilder();
$sub_builder = $sub_builder
->addTableHeader('标题', '30%')
->addTableHeader('摘要', '30%')
->addFormItem('id', 'hidden')
->addFormItem('title', 'text')
->addFormItem('summary', 'textarea')
->setData($data);
```
#### makeHtml
```blade
返回所有表单项的html可以根据需要嵌入FormBuilder
```
#### 类型说明
+ 支持类型
1. checkbox
> + 多选框,目前支持单个
2. text
> + 文本类型
3. hidden
> + 隐藏输入框
4. select
> + 下拉选择
5. select2
> + 下拉选择,支持模糊搜索
>
> + 说明:
>
> + select2新增了自定义标签功能
>
> ```php
> $subBuilder = new \Qscmf\Builder\SubTableBuilder();
> $subBuilder = $subBuilder -> addTableHeader('关键词', '30%')
> -> addFormItem('keywords_id', 'select2', [
> 'tags' => true,
> 'options' => [ 1 => '测试', 2 => '测试2']
> ]);
> ```
>
> $builder = new FormBuilder();
> $builder->addFormItem('keywords_id', 'self', '关键词','',$subBuilder->makeHtml());
>
> ```
> + 数据源分组显示
> ```php
> $options = [
> ['text' => '分类一', 'children' => [['id' => '1', 'text' => '选项1'],['id' => '2', 'text' => '选项2']]],
> ['text' => '分类二', 'children' => [['id' => '3', 'text' => '选项3'],['id' => '4', 'text' => '选项4']]],
> ['text' => '分类三', 'children' => [['id' => '5', 'text' => '选项5'],['id' => '6', 'text' => '选项6']]],
> ];
> ```
6. textarea
> + 多行文本
7. date
> + 日期组件
8. num
> + 数字输入框