rowClickStyle.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import { onMounted, onBeforeUnmount } from 'vue'
  2. export function useRowClickStyle(tableRef: any, rowClass: string = 'vxe-table-row-clicked-style') {
  3. const handleMouseDown = (event: any) => {
  4. const trElement = event.target.closest('tr')
  5. if (trElement && trElement.hasAttribute('rowid')) {
  6. const rowId = trElement.getAttribute('rowid')
  7. const allRows = document.querySelectorAll(`tr[rowid="${rowId}"]`)
  8. allRows.forEach((row) => {
  9. row.classList.add(rowClass)
  10. })
  11. const handleMouseUp = () => {
  12. allRows.forEach((row) => {
  13. row.classList.remove(rowClass)
  14. })
  15. // 移除 mouseup 事件监听器
  16. document.removeEventListener('mouseup', handleMouseUp)
  17. }
  18. // 监听 mouseup 事件,抬起鼠标时移除类名
  19. document.addEventListener('mouseup', handleMouseUp)
  20. }
  21. }
  22. onMounted(() => {
  23. const gridElement = tableRef.value?.$el
  24. if (gridElement) {
  25. // 为表格添加 mousedown 事件监听器
  26. gridElement.addEventListener('mousedown', handleMouseDown)
  27. }
  28. })
  29. onBeforeUnmount(() => {
  30. const gridElement = tableRef.value?.$el
  31. if (gridElement) {
  32. gridElement.removeEventListener('mousedown', handleMouseDown)
  33. }
  34. })
  35. }