plm前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.8 KiB

2 years ago
  1. export default {
  2. bind(el) {
  3. // 获取所有子元素中的 input 和 el-select
  4. const inputs = el.querySelectorAll('input');
  5. const selects = el.querySelectorAll('.el-select');
  6. const textareas = el.querySelectorAll('textarea');
  7. // 处理所有的 input 元素
  8. inputs.forEach(inputEl => {
  9. inputEl.dataset.originalValue = inputEl.value;
  10. inputEl.addEventListener('input', function() {
  11. const isModified = inputEl.value !== inputEl.dataset.originalValue;
  12. if (isModified) {
  13. inputEl.classList.add('highlight');
  14. } else {
  15. inputEl.classList.remove('highlight');
  16. }
  17. });
  18. });
  19. // 处理所有的 textarea 元素
  20. textareas.forEach(textareaEl => {
  21. textareaEl.dataset.originalValue = textareaEl.value;
  22. // 监听 input 事件
  23. textareaEl.addEventListener('input', function() {
  24. const isModified = textareaEl.value !== textareaEl.dataset.originalValue;
  25. if (isModified) {
  26. textareaEl.classList.add('highlight');
  27. } else {
  28. textareaEl.classList.remove('highlight');
  29. }
  30. });
  31. });
  32. // 处理所有的 el-select 元素
  33. selects.forEach(selectEl => {
  34. const selectComponent = selectEl.__vue__;
  35. if (!selectComponent) {
  36. console.warn('Element does not have a Vue instance attached.');
  37. return;
  38. }
  39. selectEl.dataset.originalValue = selectComponent.value;
  40. selectComponent.$on('change', function(value) {
  41. const selectInputEl = selectEl.querySelector('.el-input__inner');
  42. if (selectInputEl) {
  43. const isModified = value !== selectEl.dataset.originalValue;
  44. if (isModified) {
  45. selectInputEl.classList.add('highlight');
  46. } else {
  47. selectInputEl.classList.remove('highlight');
  48. }
  49. }
  50. });
  51. });
  52. }
  53. };