use-table-selected.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { ref, computed } from 'vue'
  2. export const useTableSelected = (props, { itemList }) => {
  3. const optionProps = computed(() => {
  4. return Object.assign({ value: 'value', label: 'label' }, props.optionProps)
  5. })
  6. const selectedRows = ref([])
  7. // 表格组件ref
  8. const tableRef = ref()
  9. // 设置当前列表选中 [注:存在分页]
  10. const setCurrentSelect = () => {
  11. if (itemList.value.length === 0 || !props.multiple) return
  12. const valueKey = optionProps.value.value
  13. selectedRows.value.forEach(row => {
  14. // 需要用itemList内的值
  15. const selectedRow = itemList.value.find(v => v[valueKey] === row[valueKey])
  16. if (selectedRow) {
  17. tableRef.value.cipTableRef.toggleRowSelection(selectedRow, true)
  18. }
  19. })
  20. }
  21. // 通过标签去除选中
  22. const removeSelectRow = (index) => {
  23. // 如果取消选中行在当前表格内则取消其选中
  24. const valueKey = optionProps.value.value
  25. // 从选中列表删除
  26. const [row] = selectedRows.value.splice(index, 1)
  27. const selectedRow = itemList.value.find(v => v[valueKey] === row[valueKey])
  28. if (selectedRow) {
  29. // 如果在当前视图则取消选中
  30. tableRef.value.cipTableRef.toggleRowSelection(selectedRow, false)
  31. }
  32. }
  33. const handleSelect = (pageSelected, changeRow) => {
  34. const valueKey = optionProps.value.value
  35. const index = selectedRows.value.findIndex(row => row[valueKey] === changeRow[valueKey])
  36. if (index > -1) {
  37. selectedRows.value.splice(index, 1)
  38. } else {
  39. selectedRows.value.push(changeRow)
  40. }
  41. }
  42. const handleSelectAll = (changeRows) => {
  43. const valueKey = optionProps.value.value
  44. if (changeRows.length > 0) {
  45. // 当前页全选
  46. changeRows.forEach(changeRow => {
  47. const index = selectedRows.value.findIndex(row => row[valueKey] === changeRow[valueKey])
  48. if (index > -1) {
  49. // 将原先在的删除,然后添加到最后一位
  50. selectedRows.value.splice(index, 1)
  51. }
  52. selectedRows.value.push(changeRow)
  53. })
  54. } else {
  55. // 当前页已选中的全部删除
  56. itemList.value.forEach(changeRow => {
  57. const index = selectedRows.value.findIndex(row => row[valueKey] === changeRow[valueKey])
  58. if (index > -1) {
  59. selectedRows.value.splice(index, 1)
  60. }
  61. })
  62. }
  63. }
  64. // 自带设置
  65. return {
  66. tableRef,
  67. selectedRows,
  68. optionProps,
  69. setCurrentSelect,
  70. removeSelectRow,
  71. handleSelect,
  72. handleSelectAll
  73. }
  74. }