diff --git a/fanctrlplus.page b/fanctrlplus.page index 76d65f9..a61f41f 100644 --- a/fanctrlplus.page +++ b/fanctrlplus.page @@ -59,6 +59,8 @@ cpu_enable="0" cpu_sensor="" cpu_min_temp="" cpu_max_temp="" +array_override_enable="0" +array_override_pwm="255" INI ); } @@ -454,6 +456,7 @@ $(function() { { selector: 'input[id^="pwm_percent_input_"]', unit: '%', min: 0, max: 100 }, { selector: 'input[id^="max_percent_input_"]', unit: '%', min: 0, max: 100 }, { selector: `#idle_percent_input_${index}`, unit: '%', min: 0, max: 100 }, + { selector: `#array_override_percent_input_${index}`, unit: '%', min: 0, max: 100 }, { selector: 'input[id^="low_temp_input_"]', unit: '°C', min: 1, max: 100 }, { selector: 'input[id^="high_temp_input_"]', unit: '°C', min: 1, max: 100 }, { selector: 'input[id^="cpu_low_temp_input_"]', unit: '°C', min: 1, max: 95 }, @@ -466,6 +469,11 @@ $(function() { window.handleCpuEnableChange(this, index); }); + $html.find('select[id^="array-override-enable-"]').each(function () { + const index = this.id.replace('array-override-enable-', ''); + window.handleArrayOverrideChange(this, index); + }); + bindFanSpeedEvents(); bindIdleEvents(); }, 100); @@ -605,6 +613,7 @@ $(function() { { selector: 'input[id^="pwm_percent_input_"]', unit: '%', min: 0, max: 100 }, { selector: 'input[id^="max_percent_input_"]', unit: '%', min: 0, max: 100 }, { selector: 'input[id^="idle_percent_input_"]', unit: '%', min: 0, max: 100 }, + { selector: 'input[id^="array_override_percent_input_"]', unit: '%', min: 0, max: 100 }, { selector: 'input[id^="low_temp_input_"]', unit: '°C', min: 1, max: 100 }, { selector: 'input[id^="high_temp_input_"]', unit: '°C', min: 1, max: 100 }, { selector: 'input[id^="cpu_low_temp_input_"]', unit: '°C', min: 1, max: 95 }, @@ -871,7 +880,9 @@ $(function() { cpu_enable: $block.find('select[name^="cpu_enable["]').val(), cpu_sensor: $block.find('select[name^="cpu_sensor["]').val(), cpu_min_temp: stripUnit($block.find('input[name^="cpu_min_temp["]').val()), - cpu_max_temp: stripUnit($block.find('input[name^="cpu_max_temp["]').val()) + cpu_max_temp: stripUnit($block.find('input[name^="cpu_max_temp["]').val()), + array_override_enable: $block.find('select[name^="array_override_enable["]').val(), + array_override_percent: stripUnit($block.find('input[name^="array_override_percent["]').val()) }; $block.data('original', original); } @@ -896,7 +907,9 @@ $(function() { cpu_enable: $block.find('select[name^="cpu_enable["]').val(), cpu_sensor: $block.find('select[name^="cpu_sensor["]').val(), cpu_min_temp: stripUnit($block.find('input[name^="cpu_min_temp["]').val()), - cpu_max_temp: stripUnit($block.find('input[name^="cpu_max_temp["]').val()) + cpu_max_temp: stripUnit($block.find('input[name^="cpu_max_temp["]').val()), + array_override_enable: $block.find('select[name^="array_override_enable["]').val(), + array_override_percent: stripUnit($block.find('input[name^="array_override_percent["]').val()) }; if (JSON.stringify(original) !== JSON.stringify(current)) { @@ -1414,6 +1427,18 @@ $(function() { } }; + window.handleArrayOverrideChange = function(selectEl, index) { + const enabled = selectEl.value === "1"; + const input = document.querySelector(`#array_override_percent_input_${index}`); + if (input) { + input.disabled = !enabled; + input.classList.toggle('disabled', !enabled); + } + document.querySelectorAll(`.array-override-control-${index} .array-override-label`).forEach(label => { + label.classList.toggle('disabled', !enabled); + }); + }; + // 初始化所有 block 的状态,并绑定 onchange window.addEventListener('load', function () { requestAnimationFrame(() => { @@ -1425,6 +1450,15 @@ $(function() { window.handleCpuEnableChange(this, index); }); }); + + document.querySelectorAll('select[id^="array-override-enable-"]').forEach(select => { + const index = select.id.replace('array-override-enable-', ''); + window.handleArrayOverrideChange(select, index); + + select.addEventListener('change', function () { + window.handleArrayOverrideChange(this, index); + }); + }); }); }); setTimeout(() => { diff --git a/include/FanBlockRender.php b/include/FanBlockRender.php index 5a6eaf0..bf780e3 100644 --- a/include/FanBlockRender.php +++ b/include/FanBlockRender.php @@ -24,6 +24,10 @@ function render_fan_block($cfg, $i, $pwms, $disks, $pwm_labels, $cpu_sensors) { $idle_abs = isset($cfg['idle']) && is_numeric($cfg['idle']) ? (int)$cfg['idle'] : 0; $idle_pct = round($idle_abs * 100 / 255) . '%'; + $array_override_enable = ($cfg['array_override_enable'] ?? '0') == '1'; + $array_override_pwm_raw = isset($cfg['array_override_pwm']) && is_numeric($cfg['array_override_pwm']) ? $cfg['array_override_pwm'] : 255; + $array_override_pct = round($array_override_pwm_raw * 100 / 255) . '%'; + ob_start(); ?>