You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

readme.md 9.7 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. ## 介绍
  2. 基于uni-app开发的一个普通的表格组件,功能有固定首列和表头、排序、操作按钮、
  3. table 表格 固定表头、固定首列、多列 上拉加载更多、 排序、自适应列宽、多选checkbox、编辑、删除、按钮、合计 多页功能
  4. 已用于生产环境
  5. > 遇到问题或有建议可以加入QQ群(<font color=#f00>455948571</font>)反馈
  6. > 如果觉得组件不错,<font color=#f00>给五星鼓励鼓励</font>咯!
  7. ## 参考依赖
  8. 本组件居于github开源项目[zb-table](https://github.com/zouzhibin/zb-table#readme)进行二开,功能会有些差异和增强,如果有需要原版请参考源开源项目。感谢作者
  9. ## 注意本插件依赖于scss的编译,如果没有使用scss请手动改源码去掉scss的语法方可使用。如果有疑问请加入加入QQ群(<font color=#f00>455948571</font>)
  10. ## 使用
  11. >[从uniapp插件市场导入](https://ext.dcloud.net.cn/plugin?name=next-table)
  12. ### 预览
  13. ***
  14. | 功能预览 |
  15. | :----------------------------------------------------------: |
  16. | ![](https://lixueshiaa.github.io/webtest/www/static/next-table.gif) |
  17. ## 示例(vue3+ts; 同样支持vue2,这里不再写vue2的demo)
  18. ``` html
  19. <next-table
  20. :show-header="true"
  21. :columns="column"
  22. :stripe="true"
  23. :fit="false"
  24. show-summary
  25. sum-text="合计"
  26. @rowClick="rowClick"
  27. :summary-method="getSummaries"
  28. @toggleRowSelection="toggleRowSelection"
  29. @toggleAllSelection="toggleAllSelection"
  30. :border="true"
  31. @edit="buttonEdit"
  32. @dele="dele"
  33. :data="data"></next-table>
  34. ```
  35. ```js
  36. <script setup lang="ts">
  37. import {ref, unref} from "vue"
  38. const pageIndex = ref(1)
  39. const pageTotal = ref(5)
  40. const datalist = ref([])
  41. const checkNameList = ref([])
  42. function getdatalist(pageIndex) {
  43. const pageSize = 10
  44. const arr = []
  45. for(let i = pageSize*(pageIndex-1) + 1; i < pageSize*pageIndex; i++) {
  46. arr.push({
  47. date: '2023-06-23',
  48. name: `刘先生${i}`,
  49. province: '上海',
  50. sex: i%2 ? '0' : '1',
  51. checked: unref(checkNameList)[unref(pageIndex)] ? unref(checkNameList)[unref(pageIndex)].indexOf(`刘先生${i}`) !== -1 : false,
  52. age: 20,
  53. img: 'https://gss0.baidu.com/-Po3dSag_xI4khGko9WTAnF6hhy/zhidao/wh%3D450%2C600/sign=e58ae9feb1003af34defd464001aea6a/8601a18b87d6277f4d763bcf2f381f30e824fce5.jpg',
  54. city: '广州市',
  55. address: '天河区东圃镇2002号',
  56. zip: 200333
  57. })
  58. }
  59. datalist.value = arr
  60. }
  61. function pageChange(index) {
  62. pageIndex.value = index
  63. getdatalist(unref(pageIndex))
  64. }
  65. function dele(item) {
  66. const index = unref(datalist).findIndex(it => it.name == item.name)
  67. if (index != -1) {
  68. unref(datalist).splice(index, 1)
  69. }
  70. }
  71. function toggleAllSelection(_, list) {
  72. unref(checkNameList)[unref(pageIndex)] = list.map(item => item.name)
  73. }
  74. function toggleRowSelection(bool, list) {
  75. unref(checkNameList)[unref(pageIndex)] = list.map(item => item.name)
  76. }
  77. function buttonEdit(item) {
  78. console.log(111111, item)
  79. }
  80. const column = ref([
  81. { type:'selection', fixed:true,width:60 },
  82. { name: 'name', label: '姓名',fixed:false,width:80,emptyString:'--' },
  83. { name: 'age', label: '年纪',sorter:false,align:'right', },
  84. { name: 'sex', label: '性别',filters:{'0':'男','1':'女'}},
  85. { name: 'img', label: '图片',type:"img" },
  86. { name: 'address', label: '地址' },
  87. { name: 'date', label: '日期',sorter:true },
  88. { name: 'province', label: '省份' },
  89. { name: 'city', label: '城市' },
  90. { name: 'zip', label: '邮编' },
  91. { name: 'operation', type:'operation',label: '操作',renders:[
  92. {
  93. name:'编辑',
  94. func:'edit' // func 代表子元素点击的事件 父元素接收的事件 父元素 @edit
  95. },
  96. {
  97. name:'删除',
  98. type:'warn',
  99. func:"dele"
  100. },
  101. ]},
  102. ])
  103. getdatalist(unref(pageIndex))
  104. </script>
  105. ```
  106. ## table 属性
  107. | 参数 | 说明 | 类型 | 可选值 | 默认值 |是否必须|
  108. | ------ | ------ | ------ | ------ | ------ |------ |
  109. | data | 显示的数据 | array |-- | -- |必须 |
  110. | column | 显示的列数据 | array |-- | -- |必须 |
  111. | stripe | 是否为斑马纹 table| boolean | - |false | 否 |
  112. | fit | 列的宽度是否自撑开 | boolean |true,false | false |否 |
  113. | show-header | 是否显示表头 | boolean |true,false | true |否 |
  114. | cell-style | 单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有单元格设置一样的 Style。 | Function({row, column, rowIndex, columnIndex})/Object |-- | -- |否 |
  115. | cell-header-style | 头部单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有单元格设置一样的 Style。 | Function({ column, columnIndex})/Object |-- | -- |否 |
  116. | formatter | colomn =》formatter 必须设置为true,才有作用,进行格式化数据,进行数据的转换 | Function({row, column, rowIndex, columnIndex})/Object |-- | -- |否 |
  117. | border | 是否带有纵向边框 | boolean |true,false | true |否 |
  118. | highlight | 是否要高亮当前行 | boolean |true,false | false |否 |
  119. | show-summary | 是否在表尾显示合计行 | boolean |true,false | false |否 |
  120. | sum-text | 合计行第一列的文本 | String |- | 合计 |否 |
  121. | summary-method | 自定义的合计计算方法 | Function({ columns, data }) |- | - |否 |
  122. | permissionBtn | 是否动态控制按钮的显示隐藏 | Function({ row, renders,index }) |- | - |否 |
  123. | isShowLoadMore | 是否开启上拉加载 | boolean |true,false | false |否 |
  124. | pullUpLoading | 开启上拉加载后的返回函数,接收参数done是函数,done(type),type为空代表还有数据,继续开启上拉加载,type='ok',代表结束上拉加载 | Function(done) |-- | -- |否 |
  125. | showPaging | 是否开启分页器 | boolean |true,false | false |否 |
  126. | pageIndex | 开启分页器后,当前页码 | Number |-- | 1 |否 |
  127. | pageTotal | 开启分页器后,总页数 | Number |-- | 0 |否 |
  128. | primaryColor | 主题颜色(注意:只支持16进制的颜色值如 #000000) | String |-- | 0 |#f0ad4e |
  129. ```
  130. 关闭上拉加载的方式1:pullUpLoading((done)=>{
  131. done(type)
  132. })
  133. done 接收参数为 type ,type为空代表还有数据,可以继续加载,无数据的时候传入 'ok'代表结束
  134. ```
  135. ## table 事件
  136. | 参数 | 说明 | 类型 | 可选值 | 默认值 |是否必须|
  137. | ------ | ------ | ------ |--------------------------| ------ |------ |
  138. | 事件名自定义 | 取决于type类型为operation的 renders参数里面 func 的参数名 | Function | (row,index)=>{} | -- |否 |
  139. | sort-change | 取决于type类型为operation的 renders参数里面 func 的参数名 | Function | (column,model,index)=>{} | -- |否 |
  140. | currentChange | 当表格的当前行发生变化的时候会触发该事件,如果要高亮当前行,请打开表格的 highlight属性,this.$refs.table.resetHighlight()清除选中 | Function | (row,index)=>{} | -- |否 |
  141. | toggleRowSelection | 用于多选表格,切换某一行的选中状态,第一个参数代表选中状态,参数二代表选中的对象 | Function | (selected ,array)=>{} | -- |否 |
  142. | toggleAllSelection | 用于多选表格,切换所有行的选中状态 ,第一个参数代表选中状态,参数二代表选中的对象| Function | (selected ,array)=>{} | -- |否 |
  143. | rowClick | 单击某行 ,第一个参数代表选中对象,参数二代表选中的index| Function | (row ,index)=>{} | -- |否 |
  144. | cellClick | 单击单元格 ,当某个单元格被点击时会触发该事件| Function | (row ,index,column)=>{} | -- |否 |
  145. | pullUpLoading | 开启上拉加载后的返回函数,无参数| Function | -- |-- |否 |
  146. | pageChange | 开起分页paging时候,分页切换后的事件 返回切换后的页码 | Function | -- |-- |否 |
  147. ```
  148. 关闭上拉加载的方式2:this.$refs.zbTable.pullUpCompleteLoading('ok')
  149. 接收参数为 type ,type为空代表还有数据,可以继续加载,无数据的时候传入 'ok'代表结束
  150. ```
  151. ## data 属性
  152. | 参数 | 说明 | 类型 | 可选值 | 默认值 |
  153. | ------ | ------ | ------ | ------ | ------ |
  154. | checked | 是否被勾选 | boolean |true,false | 无 |
  155. ## column 属性
  156. | 参数 | 说明 | 类型 | 可选值 | 默认值 |
  157. | ------ | ------ | ------ | ------ | ------ |
  158. | name | 属性值 | string |-- | 无 |
  159. | label | 显示的标题 | string |-- | 无 |
  160. | width | 列的宽度 | number |-- | 100 |
  161. | fixed | 列是否固定在左侧,true 表示固定在左侧 | boolean |true,false | true |
  162. | sorter | 排序,当设置为custom的时候代表自定义排序,不会再触发默认排序,会触发table事件@sort-change,可以通过接口来进行排序 | boolean |true,false,'custom' | false |
  163. | emptyString | 当值为空的时候默认显示的值 | string | | -- |
  164. | filters | 对象过滤的选项,对象格式,对象中的元素需要有 key 和 value 属性。 | Object | {key:value} | -- |
  165. | align | 对齐方式 | String | left/center/right | left |
  166. | type | 为 operation 的时候代表为操作按钮,img的时候代表图片地址,index代表序列号 | string | operation,img,index | -- |
  167. | renders | type 为operation的时候 必传 | Array | {name:'名字',func:"父元素接收事件名",type:"按钮的类型",size:"大小"} | -- |
  168. ```
  169. type 为 operation 的时候代表为操作按钮
  170. renders 代表传入的按钮 Array =>[
  171. {
  172. name:'编辑',
  173. class:"", // 添加class
  174. type:'primary',代表按钮的类型 type 为custom的时候自定义按钮 其他类型取决于uniapp buttom组件按钮
  175. size:'mini',代表按钮的大小
  176. func:'edit' // func 代表操作按钮点击的事件名字 父元素接收的事件 父元素 @edit
  177. 例如:// <next-table @edit=""/>
  178. }
  179. ]
  180. ```