378.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. window.zknumber = prompt("将当页折扣统一设置为:", "");
  2. if (window.zknumber !== null) {
  3. runJob ()
  4. }
  5. function forceReactUpdate(element, value) {
  6. console.log('🎯 强制React更新,新值:', value);
  7. // 方法1:尝试直接修改React内部状态
  8. const reactKeys = Object.keys(element).filter(key =>
  9. key.startsWith('__react') ||
  10. key.includes('Props') ||
  11. key.includes('Handler')
  12. );
  13. console.log('找到的React属性:', reactKeys);
  14. // 如果有React内部属性,尝试直接修改
  15. if (reactKeys.length > 0) {
  16. for (const key of reactKeys) {
  17. try {
  18. const obj = element[key];
  19. if (obj && typeof obj === 'object') {
  20. // 尝试找到onChange或onBlur
  21. if (obj.onChange) {
  22. console.log('找到 onChange,尝试调用');
  23. const event = {
  24. target: element,
  25. currentTarget: element,
  26. type: 'change'
  27. };
  28. element.value = String(value);
  29. obj.onChange(event);
  30. }
  31. if (obj.onBlur) {
  32. console.log('找到 onBlur,尝试调用');
  33. const event = {
  34. target: element,
  35. currentTarget: element,
  36. type: 'blur'
  37. };
  38. obj.onBlur(event);
  39. }
  40. }
  41. } catch (e) {
  42. console.warn('访问React属性失败:', key, e.message);
  43. }
  44. }
  45. }
  46. // 方法2:同时触发所有可能的事件
  47. console.log('🔨 触发所有相关事件');
  48. // 设置值
  49. element.value = String(value);
  50. // 创建事件数组,按正确顺序触发
  51. const eventSequence = [
  52. { type: 'focus', isFocus: true },
  53. { type: 'focusin', isFocus: true },
  54. { type: 'mousedown' },
  55. { type: 'mouseup' },
  56. ];
  57. eventSequence.forEach((eventConfig, index) => {
  58. setTimeout(() => {
  59. let event;
  60. if (eventConfig.isFocus) {
  61. event = new FocusEvent(eventConfig.type, {
  62. bubbles: true,
  63. cancelable: true,
  64. view: window
  65. });
  66. } else if (eventConfig.isKey) {
  67. event = new KeyboardEvent(eventConfig.type, {
  68. bubbles: true,
  69. cancelable: true,
  70. key: eventConfig.key || ' ',
  71. code: eventConfig.key === ' ' ? 'Space' : 'Key' + eventConfig.key?.toUpperCase(),
  72. view: window
  73. });
  74. } else if (eventConfig.isInput) {
  75. event = new InputEvent(eventConfig.type, {
  76. bubbles: true,
  77. cancelable: true,
  78. data: eventConfig.data,
  79. inputType: eventConfig.inputType,
  80. view: window
  81. });
  82. } else {
  83. event = new Event(eventConfig.type, {
  84. bubbles: true,
  85. cancelable: true,
  86. view: window
  87. });
  88. }
  89. // 设置目标
  90. Object.defineProperty(event, 'target', { value: element });
  91. Object.defineProperty(event, 'currentTarget', { value: element });
  92. element.dispatchEvent(event);
  93. }, index * 20); // 每个事件间隔20ms
  94. });
  95. // 最后触发blur
  96. setTimeout(() => {
  97. element.blur();
  98. console.log('✅ 所有事件已触发');
  99. }, eventSequence.length * 20 + 50);
  100. }
  101. function runJob () {
  102. document.querySelectorAll('[aria-label="percentageInput"]').forEach(element => {
  103. forceReactUpdate(element, window.zknumber)
  104. });
  105. setTimeout(() => {
  106. if (!document.querySelector('.andes-pagination__button--next').classList.contains('andes-pagination__button--disabled')) {
  107. document.querySelector('[title="Next"]').click()
  108. setTimeout(() => {
  109. runJob ()
  110. }, 2000);
  111. } else {
  112. alert('执行完毕!')
  113. }
  114. }, 1000);
  115. }