table-cache-select.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { ref } from 'vue'
  2. /**
  3. *
  4. * 分页列表选择
  5. * @param itemList {ToRef<*[]>} table列表
  6. * @param primaryKey {String} 行主键
  7. * @param fn {Function} 更新值后的回调函数
  8. * @return {{onSelectAll: onSelectAll, getSelectedList: (function(): Array<UnwrapRefSimple<*>>), cacheSelectedList: ToRef<*[]>, toggleSelectButton: toggleSelectButton, onSelect: onSelect}}
  9. */
  10. export const useTableCacheSelect = (itemList, primaryKey, fn) => {
  11. const cacheSelectedList = ref([])
  12. const toggleSelectButton = (item, handleType = 'standard') => { // type: ['standard','add','remove']
  13. const index = cacheSelectedList.value.findIndex(value => value[primaryKey] === item[primaryKey])
  14. if (index > -1) {
  15. if (handleType !== 'add') {
  16. cacheSelectedList.value.splice(index, 1)
  17. }
  18. } else {
  19. if (handleType !== 'remove') {
  20. cacheSelectedList.value.push(item)
  21. }
  22. }
  23. // eslint-disable-next-line no-unused-expressions
  24. fn?.(cacheSelectedList.value)
  25. }
  26. const selectPageItem = (val) => {
  27. val.forEach(button => {
  28. toggleSelectButton(button, 'add')
  29. })
  30. }
  31. const clearPageItem = () => {
  32. const list = itemList.value
  33. list.forEach(button => {
  34. toggleSelectButton(button, 'remove')
  35. })
  36. }
  37. const onSelect = (val, row) => { // table select 响应时间
  38. toggleSelectButton(row)
  39. }
  40. const onSelectAll = (val) => { // table select-all 响应时间
  41. if (val.length > 0) {
  42. selectPageItem(val)
  43. } else {
  44. clearPageItem()
  45. }
  46. }
  47. const getSelectedList = () => {
  48. return cacheSelectedList.value
  49. }
  50. return {
  51. cacheSelectedList,
  52. toggleSelectButton,
  53. onSelect,
  54. onSelectAll,
  55. getSelectedList
  56. }
  57. }