🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 列表Table 基于 [`bootstrap-table`](http://bootstrap-table.wenzhixin.net.cn/zh-cn/),让列表生成,搜索如此简单。 任何一个`table`,只需在 `table标签`中加上 `data-table="1"` 即可实现`table`智能化。 #### 特性 >[danger] - 支持所有`bootstrap-table`语法,如果想深入了解可查看[教程](http://bootstrap-table.wenzhixin.net.cn/zh-cn/)。 > - 控制与列表分离,`控制按钮`放在什么地方都可以。(很实用) > - 搜索与列表分离,`搜索表单`放在什么地方都可以。(很实用) > - 一系列常用的字段格式化方式,让现实更丰富。 > - 样式通过列表数据(后台)即可控制。 ## 1、普通列表 先看一个简单的案例: html文件 ```html <table data-table="1" data-url="{:url('demo/index/ajaxdata')}" id="table1" class="table table-hover"> <thead> <tr> <th data-checkbox="true"></th> <th data-formatter="fun1">自定义列</th> <th data-field="id" data-formatter="epiiFormatter">网址</th> <th data-field="name" data-formatter="epiiFormatter">Item Name</th> <th data-field="price" data-formatter="epiiFormatter">Item Price</th> <th data-formatter="epiiFormatter.btns" data-btns="edit,detail,del,me" data-edit-url="http://www.baidu.com" data-edit-title="{name}" data-del-msg="确定要删除{name}?" data-del-url="{:url('demo/index/del')}">操作</th> </tr> </thead> </table> ``` php 代码 ```php public function ajaxdata() { return json(["rows" => [ ["id" => 1, "name" => "张三", "price" => "nicasq"], ["id" => 2, "name" => "张三", "price" => "nicasq"], ["id" => 3, "name" => "张三", "price" => "nicasq", "price_class" => "badge badge-info", "price_style" => ["background-color" => "red"] ], ["id" => 9, "name" => "张三", "price" => "nicasq"], ["id" => 4, "name" => "张三", 'name_style'=>["color"=>"red","background-color"=>"blue"], "price" => "nicasq" ], ["id" => 5, "name" => "张三", "price" => "nicasq",'name_color'=>"red"], ["id" => 7, "name" => "张三", "price" => "nicasq"], ], "total" => 100]); } ``` 效果如下: ![table1] `table`的设置包含两部分设置 - table本身的设置,如数据源设置,样式等。在`table标签`上中设置 - 每一列的设置,如字段的数据源,背景,字体大小等。在`table > thead >tr > th` 上设置。 任何一个table,只需在 table标签中加上 `data-table="1"` 即可实现table智能化。 #### 常用的`table`属性有 名称 | 意义 | 默认值 ---|---|--- `data-table`| 标记为智能table,只能`data-table=1` | `data-url`| 数据源地址 | `data-method` | 请求方式 | `POST` `data-page-size` | 每页数据量 | 30 `data-data-type` | 数据格式 | `json` `data-id-field`| 数据的id列名称,默认为`id` 更多 `table` 属性请查看 [`Bootstrap Table 中文文档`](https://blog.csdn.net/rickiyeat/article/details/56483577) #### 常用的列属性有 名称 | 意义 | 默认值 ---|---|--- `data-field`| 对应的数据源 | `data-formatter`| 数据格式 | 无/数据原样输出 更多列属性请查看 [`Bootstrap Table 中文文档`](https://blog.csdn.net/rickiyeat/article/details/56483577) 默认所有数据将原样显示在列中,当我们需要对数据展示进行特殊显示时候,只需设置 `data-formatter='fun'` 即可 我们在上面例子中加上 ```html <th data-field="name" data-formatter="fun1">自定义列</th> ``` 并实现`fun1` >[info] 格式化单元格内容,function(field_value, row, index,field_name), field_value:该cell本来的值(data-field设置的),row:该行数据,index:该行序号(从0开始),field_name 改cell设置的field值 ```javascript function fun1(field_value, row, index,field_name) { return "<font color='red'>"+row.price+"#"+field_name+"#"+field_value+"</font>"; } ``` 效果如下: ![table2] ### `EpiiAdmin`自带了一个格式化函数`epiiFormatter`,这个格式化函数可以实现更加复杂的显示,并且无需在编写`js`函数。 ```html data-formatter="epiiFormatter" ``` 假如我们设置了`data-field='{field}'` 那么在后台数据中只需加上: >[danger] '{field}_style'=>["color"=>"red","background-color"=>"blue"] //设置style样式 > "{field}_class" => "badge badge-info" //设置 字段`class`(追加) > "{field}_attr" => ["data-test"=>"1","attr1"=>"attr"] //设置 字段属性 如 `data-field='name'` 只需在数据中设置 ```php 'name_style'=>array(), 'name_class'=>"class1" 'name_attr'=>array(), ``` 如下效果,使用此方法实现。 ![table3] 刚才的方法实际上后台通过数据来影响显示。那么前台是否可以设置样式呢,当然可以。 首先 ```html data-formatter="epiiFormatter" ``` 然后通过设置 >[danger] data-tag-style="color:red;background-color:blue" > data-tag-class= "badge badge-info" //设置 字段`class`(追加) > data-tag-attr = "data-test='1' attr1='attr'" //设置字段属性 通过前台的设置是针对这一列`全部`生效的。 例如我们增加一列 ```html <th data-field="name" data-formatter="epiiFormatter" data-tag-style="background-color:#666">自定义列2</th> ``` 如下效果 ![table4] 那么上图中操作列中的三个按钮是如何实现的呢? 最基础的方法,我们可以通过自定义格式化方法实现,比如 ```html <th data-field="name" data-formatter="fun2">自定义列</th> ``` 并实现`fun2`,大致如下 ```javascript function fun2(field_value, row, index,field_name) { var btns = "<button >编辑</button>"+ "<button >详情</button>"+ "<button >删除</button>"; return btns; } ``` ### `EpiiAdmin`自带了一个格式化函数`epiiFormatter.btns`,这个格式化函数可以实现多个按钮。 通过 `data-btns='btn1,btn2n3'` 来设置按钮,其中 `btn1,btn2` 为三个`js自定义函数` ```html <th data-field="name" data-formatter="epiiFormatter.btns" data-btns='btn1,btn2'>自定义列2</th> ``` ```javascript function btn1(field_value, row, index,field_name) { return "<a class='btn btn-info btn-dialog' href='http://www.baidu.com'>详情</a>"; } function btn2(field_value, row, index,field_name) { return "<a class='btn btn-warning'>编辑</a>"; } ``` 效果为 ![table5] 是不是每一个按钮都需要自己写函数呢?当然不是。 `EpiiAdmin`为常用的`详情` `编辑` `删除` 按钮设置了号自定函数。无需自己编写js。但需要设置对应的属性,详情如下 按钮|意义 ---|--- `detail`|详情按钮,默认以dialog的方式打开 `detail_addtab`|详情按钮,以addtab的方式打开 `edit`|编辑按钮,默认以dialog的方式打开 `edit_addtab`|编辑按钮,以addtab的方式打开 `del`|删除按钮,默认弹出警告框,然后以ajax方式请求删除 分别对应的属性为: 1、`detail,detail_addtab` 需要实现的属性有(属性值支持变量解析,变量为{}符号表示) 属性|意义 ---|--- `data-detail-url`| 详情页面地址 如 `http://domain.com/info?id={id}` `data-detail-title`|详情`dialog 或 addtab` 的标题: 如 "用户{name}的详情" 2、`edit,edit_addtab` 需要实现的属性有(属性值支持变量解析,变量为{}符号表示) 属性|意义 ---|--- `data-edit-url`| 编辑页面地址 如 `http://domain.com/edit?id={id}` `data-edit-title`|编辑`dialog 或 addtab`的标题: 如 "编辑用户{name}" 3、`del` 需要实现的属性有(属性值支持变量解析,变量为{}符号表示) 属性|意义 ---|--- `data-del-url`| 删除接口api地址 如 `http://domain.com/api/del?id={id}` `data-del-msg`| 警告框内容 如 "确定要删除用户{name}吗?" `data-del-title`| 警告框标题 如 "重要提示!" 文章刚开头的案例按钮改为 ```html <th data-formatter="epiiFormatter.btns" data-btns="edit,detail,del,mybtn" data-edit-url="http://www.baidu.com" data-edit-title="编辑{name}" data-detail-url="http://www.baidu.com" data-detail-title="{name}的详情" data-del-msg="确定要删除{name}?" data-del-url="{:url('demo/index/del')}">操作</th> ``` 我们设置`data-btns="edit,detail,del,mybtn"` 其中 `edit,detail,del` 这三个系统预设,我们不需要编写js函数,但`mybtn`需要我们自己编写 ```javascript function mybtn(field_value, row, index,field_name) { return "<a class='btn btn-info btn-dialog' href='http://www.baidu.com'>测试</a>" } ``` 效果视频 <p> <video controls="controls" width="100%" src="http://epii.gitee.io/static/project/epiiadmin-js/docimg/table6.mov"></video> </p> ### `EpiiAdmin`格式化函数`epiiFormatter.url` 可以实现列的连接实现。 如 ```html <th data-formatter="epiiFormatter.url" data-url="http://www.baidu.com/?s={name}" data-value="{name}的详情">详情</th> ``` >[danger] 注意:`data-value="{name}的详情"`和`data-field='name'` 均可设置连接的字,`data-value` 更灵活 `epiiFormatter.url` 默认是在当前页面中打开,需要其他方式请参照一下设置。 属性|意义 ---|--- `epiiFormatter.url.addtab`| 在头部tab导航中打开,标题用`data-page-title`设置 `epiiFormatter.url.dialog`| 在dialog中打开,标题用`data-page-title`设置 `epiiFormatter.url._blank`| 在浏览器新页面打开 如 ```html <th data-formatter="epiiFormatter.url.dialog" data-url="http://www.baidu.com/?s={name}" data-page-title="{name}的详情" data-tag-attr="data-area='70%,80%'" data-value="详情">详情</th> ``` 效果视频 <p> <video controls="controls" width="100%" src="http://epii.gitee.io/static/project/epiiadmin-js/docimg/table7.mov"></video> </p> [table1]:http://epii.gitee.io/static/project/epiiadmin-js/docimg/table1.png [table2]:http://epii.gitee.io/static/project/epiiadmin-js/docimg/table2.png [table3]:http://epii.gitee.io/static/project/epiiadmin-js/docimg/table3.png [table4]:http://epii.gitee.io/static/project/epiiadmin-js/docimg/table4.png [table5]:http://epii.gitee.io/static/project/epiiadmin-js/docimg/table5.png [table6]:http://epii.gitee.io/static/project/epiiadmin-js/docimg/table6.png