104c318bc23c2795c387e6fb9c124a0bb4d1f1a5cf90f220a7e38631d56c96e54778c5592da275a0d0049261706e09d855d8a349a76b0732ed72c1ae5ba64e 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var transferPanel = require('../transfer-panel2.js');
  5. var usePropsAlias = require('./use-props-alias.js');
  6. var shared = require('@vue/shared');
  7. const useCheck = (props, panelState, emit) => {
  8. const propsAlias = usePropsAlias.usePropsAlias(props);
  9. const filteredData = vue.computed(() => {
  10. return props.data.filter((item) => {
  11. if (shared.isFunction(props.filterMethod)) {
  12. return props.filterMethod(panelState.query, item);
  13. } else {
  14. const label = String(item[propsAlias.value.label] || item[propsAlias.value.key]);
  15. return label.toLowerCase().includes(panelState.query.toLowerCase());
  16. }
  17. });
  18. });
  19. const checkableData = vue.computed(() => filteredData.value.filter((item) => !item[propsAlias.value.disabled]));
  20. const checkedSummary = vue.computed(() => {
  21. const checkedLength = panelState.checked.length;
  22. const dataLength = props.data.length;
  23. const { noChecked, hasChecked } = props.format;
  24. if (noChecked && hasChecked) {
  25. return checkedLength > 0 ? hasChecked.replace(/\${checked}/g, checkedLength.toString()).replace(/\${total}/g, dataLength.toString()) : noChecked.replace(/\${total}/g, dataLength.toString());
  26. } else {
  27. return `${checkedLength}/${dataLength}`;
  28. }
  29. });
  30. const isIndeterminate = vue.computed(() => {
  31. const checkedLength = panelState.checked.length;
  32. return checkedLength > 0 && checkedLength < checkableData.value.length;
  33. });
  34. const updateAllChecked = () => {
  35. const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]);
  36. panelState.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every((item) => panelState.checked.includes(item));
  37. };
  38. const handleAllCheckedChange = (value) => {
  39. panelState.checked = value ? checkableData.value.map((item) => item[propsAlias.value.key]) : [];
  40. };
  41. vue.watch(() => panelState.checked, (val, oldVal) => {
  42. updateAllChecked();
  43. if (panelState.checkChangeByUser) {
  44. const movedKeys = val.concat(oldVal).filter((v) => !val.includes(v) || !oldVal.includes(v));
  45. emit(transferPanel.CHECKED_CHANGE_EVENT, val, movedKeys);
  46. } else {
  47. emit(transferPanel.CHECKED_CHANGE_EVENT, val);
  48. panelState.checkChangeByUser = true;
  49. }
  50. });
  51. vue.watch(checkableData, () => {
  52. updateAllChecked();
  53. });
  54. vue.watch(() => props.data, () => {
  55. const checked = [];
  56. const filteredDataKeys = filteredData.value.map((item) => item[propsAlias.value.key]);
  57. panelState.checked.forEach((item) => {
  58. if (filteredDataKeys.includes(item)) {
  59. checked.push(item);
  60. }
  61. });
  62. panelState.checkChangeByUser = false;
  63. panelState.checked = checked;
  64. });
  65. vue.watch(() => props.defaultChecked, (val, oldVal) => {
  66. if (oldVal && val.length === oldVal.length && val.every((item) => oldVal.includes(item)))
  67. return;
  68. const checked = [];
  69. const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]);
  70. val.forEach((item) => {
  71. if (checkableDataKeys.includes(item)) {
  72. checked.push(item);
  73. }
  74. });
  75. panelState.checkChangeByUser = false;
  76. panelState.checked = checked;
  77. }, {
  78. immediate: true
  79. });
  80. return {
  81. filteredData,
  82. checkableData,
  83. checkedSummary,
  84. isIndeterminate,
  85. updateAllChecked,
  86. handleAllCheckedChange
  87. };
  88. };
  89. exports.useCheck = useCheck;
  90. //# sourceMappingURL=use-check.js.map