当前位置:   article > 正文

umy-ui —— table检索字段自动滚到指定位置并高亮_umy-ui table

umy-ui table

需求:

 通过input输入框,输入要查找的数据字段,点击确定可以定位到查找的那行数据、并把改行显示高亮。

 

实现思路:

安装 umy-ui 和 babel插件:(el-table可直接忽略不安装)

  1. npm install umy-ui
  2. npm install babel-plugin-component -D

main.js中引入:

  1. import 'umy-ui/lib/theme-chalk/index.css'
  2. import { UTableColumn, UTable, UxGrid, UxTableColumn } from 'umy-ui' // 按需引入组件
  3. Vue.use(UTableColumn)
  4. Vue.use(UTable)
  5. Vue.use(UxGrid)
  6. Vue.use(UxTableColumn)

babel.config.js中添加:

  1. 'plugins': [
  2. [
  3. 'component',
  4. {
  5. 'libraryName': 'umy-ui',
  6. 'styleLibraryName': 'theme-chalk'
  7. }
  8. ]
  9. ]

vue代码实现:

 

 首先:

u-table中必须添加的属性:


1.use-virtual  使用虚拟表格

2.:row-height="30"    设置每个table行的行高(这里一定要与后面寻找行所乘的倍数一一对应)

3.:height="600"    设置u-table表格高度

4.ref="stuList"   

以上1、2、3 同时调价表示使用虚拟列。

然后:

 思路:存放table表格的数据是stuList集合,查找某一个学号的位置,实际上是查找该条数据在stuList的index索引是多少,也就是该条数据在stuList集合中是第几条数据。然后通过scrollTop向上滑动指定高度,也就是先了数据定位功能。

 其次:(看代码)

 this.$refs.stuList.$refs.singleTable.$refs.bodyWrapper.scrollTop = this.input * 30

 这句标红的代码,需要你查看自己项目中具体是什么样的:

查找思路:

通过u-table绑定的@row-click="selectRow"事件:

在selectRow方法中打出this

 页面上表格数据随便点击某一行,控制台直接打出

 找到table表格中 ref="stuList"绑定的bodyWrapper,然后找到下面的scrollTop

然后拼接出来 等于 查找元素index × 表格绑定的row-height 就可以定位到数据的位置。

最后:

给改行加上高亮样式:

u-table 属性: row-style="selectedHighlight"

较完整参考代码:

  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="18">
  4. <el-dialog
  5. title="test"
  6. visible="true"
  7. width="30%"
  8. center
  9. >
  10. <el-row>
  11. <el-col :span="12">
  12. <el-input v-model="input" style="width:250px" placeholder="请输入内容" />
  13. </el-col>
  14. <el-col :span="4">
  15. <el-button @click="selectRowwwwww">定位</el-button>
  16. </el-col>
  17. <el-col :span="4">
  18. <el-button>下一个</el-button>
  19. </el-col>
  20. <el-col :span="4">
  21. <el-button>上一个</el-button>
  22. </el-col>
  23. </el-row>
  24. <u-table
  25. ref="stuList"
  26. v-loading="loading"
  27. :data="stuList"
  28. use-virtual
  29. :row-style="selectedHighlight"
  30. :row-height="30"
  31. :height="600"
  32. @row-click="selectRow"
  33. >
  34. <u-table-column type="selection" width="45" align="center" fixed="left" />
  35. <u-table-column label="序号" width="480px" align="center" fixed="left">
  36. <template slot-scope="scope">
  37. <span>{{ scope.row.idserial }}</span>
  38. </template>
  39. </u-table-column>
  40. </u-table>
  41. </el-dialog>
  42. </el-row>
  43. </div>
  44. </template>
  45. <script>
  46. import {getStuTest} from '@/api'
  47. export default {
  48. name: 'Student',
  49. data() {
  50. return {
  51. attr: [],
  52. input: 0,
  53. stuList: []
  54. },
  55. mounted() {
  56. this.getStuTest()
  57. },
  58. methods: {
  59. // *******************************************************
  60. selectRowwwwww() {
  61. this.attr = []
  62. for (var i = 0; i < this.stuList.length; i++) {
  63. if (this.stuList[i].idserial === this.input) {
  64. this.attr.push(i)
  65. }
  66. }
  67. this.$refs.stuList.$refs.singleTable.$refs.bodyWrapper.scrollTop = this.input * 30
  68. },
  69. // *******************************************************
  70. // *******************************************************
  71. selectedHighlight({ row, rowIndex }) {
  72. if (this.attr.length > 0 && rowIndex === this.attr[0]) {
  73. console.log('************添加高亮样式***************')
  74. this.$refs.stuList.$refs.singleTable.setCurrentRow(row)
  75. return { 'background-color': '#67c23a', 'color': '#fff' }
  76. }
  77. },
  78. // *******************************************************
  79. // *******************************************************
  80. selectRow(row, col, event) {
  81. console.log('+++++>', this)
  82. },
  83. // *******************************************************
  84. getStuTest() {
  85. getStuTest().then(response => {
  86. this.stuList = response.data
  87. })
  88. }
  89. }
  90. }
  91. </script>
  92. <style>
  93. .el-table .warning-row {
  94. background: oldlace;
  95. }
  96. .el-table .success-row {
  97. background: #f0f9eb;
  98. }
  99. .el-dialog__body {
  100. padding: 0px 20px!important;
  101. }
  102. </style>

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/115405
推荐阅读
相关标签
  

闽ICP备14008679号