row.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <div class="fm-virtual-table__row"
  3. @mouseover="handleMouseover"
  4. @mouseout="handleMouseout"
  5. :ref="'tableRow'"
  6. :style="{
  7. 'min-width': `calc(${rowWidthCalc})`,
  8. 'min-height': rowHeight + 'px'
  9. }"
  10. :class="`row_${rowIndex} row_${tableKey}`"
  11. >
  12. <slot name="default" :rowHeight="rowHeight"></slot>
  13. </div>
  14. </template>
  15. <script>
  16. import { addClass, removeClass } from '../../util'
  17. export default{
  18. props: ['rowWidthCalc', 'rowIndex', 'tableKey'],
  19. data () {
  20. return {
  21. resizeObserver: null,
  22. eles: [],
  23. rowHeight: 0
  24. }
  25. },
  26. mounted () {
  27. this.eles = document.querySelectorAll(`.fm-virtual-table__row.row_${this.rowIndex}>div`)
  28. this.resizeObserver = new ResizeObserver((mutationList) => {
  29. this.rowHeight = this.clacRowHeight()
  30. })
  31. this.eles.forEach(ele => {
  32. this.resizeObserver.observe(ele)
  33. })
  34. },
  35. unmounted () {
  36. this.eles.forEach(ele => {
  37. this.resizeObserver.unobserve(ele)
  38. })
  39. },
  40. methods: {
  41. handleMouseover () {
  42. addClass(document.querySelectorAll('.fm-virtual-table__row.main.row_'+this.tableKey)[this.rowIndex], 'is-hover')
  43. addClass(document.querySelectorAll('.fm-virtual-table__row.left.row_'+this.tableKey)[this.rowIndex], 'is-hover')
  44. addClass(document.querySelectorAll('.fm-virtual-table__row.right.row_'+this.tableKey)[this.rowIndex], 'is-hover')
  45. },
  46. handleMouseout () {
  47. removeClass(document.querySelectorAll('.fm-virtual-table__row.main.row_'+this.tableKey)[this.rowIndex], 'is-hover')
  48. removeClass(document.querySelectorAll('.fm-virtual-table__row.left.row_'+this.tableKey)[this.rowIndex], 'is-hover')
  49. removeClass(document.querySelectorAll('.fm-virtual-table__row.right.row_'+this.tableKey)[this.rowIndex], 'is-hover')
  50. },
  51. clacRowHeight () {
  52. let curHeight = 0
  53. this.eles.forEach(ele => {
  54. if (curHeight < ele.offsetHeight + 0.5) {
  55. curHeight = ele.offsetHeight + 0.5
  56. }
  57. })
  58. return curHeight
  59. }
  60. }
  61. }
  62. </script>