refactor(eq): 重构EQ页面及相关代码以优化PEQ管理与同步

- 禁用Vite配置中的manus debug collector插件,减少无用请求
- 对DeviceContext添加syncPeqCatalog方法用于同步PEQ状态
- 重构luxsinApi.ts中PEQ请求相关代码,统一POST请求封装,增强错误处理
- 将EQPage相关常量、工具和组件抽取至独立模块,简化主文件结构
- 使用缓存机制记忆预设滤波器列表,减少不必要的重复计算
- 优化PEQ状态同步逻辑,支持按模式(A/B)分别保存与应用滤波器
- 实现选择耳机型号时自动保存并更新对应滤波器缓存和显示
- 修改A/B切换逻辑,使用防抖同步和固定的peqApply调用
- 为音量滑块添加thumb-only滑动样式及拖拽区域限制,提升交互体验
- Home页面ListRow组件支持显示自定义缩略图
- 增加eq/constants.ts定义滤波器类型、参数范围和样式,统一管理配置
- 解决多处EQ页面组件交互和状态切换的潜在同步问题,提高代码维护性和可读性
This commit is contained in:
yangy
2026-05-28 16:26:38 +08:00
parent 8cde820467
commit 3f9b2f0e7b
10 changed files with 700 additions and 306 deletions
@@ -0,0 +1,46 @@
export function CyanSlider({
value,
min,
max,
step = 1,
onChange,
disabled = false,
}: {
value: number;
min: number;
max: number;
step?: number;
onChange: (v: number) => void;
disabled?: boolean;
}) {
const fillPct = Math.max(
0,
Math.min(100, ((value - min) / (max - min)) * 100),
);
return (
<div
className={`relative flex items-center w-full mt-2 ${disabled ? "opacity-60" : ""}`}
>
<div
className="absolute left-0 h-[4px] rounded-full pointer-events-none"
style={{
width: `${fillPct}%`,
background: disabled ? "rgba(148,163,184,0.7)" : "#00FFF6",
boxShadow: disabled
? "none"
: "0 0 6px rgba(0,255,246,0.45)",
}}
/>
<input
type="range"
min={min}
max={max}
step={step}
value={value}
className="cyan-slider relative z-10"
disabled={disabled}
onChange={(e) => onChange(Number(e.target.value))}
/>
</div>
);
}
@@ -0,0 +1,20 @@
export function IOSToggle({
checked,
onChange,
}: {
checked: boolean;
onChange: (v: boolean) => void;
}) {
return (
<label className="ios-toggle" onClick={(e) => e.stopPropagation()}>
<input
type="checkbox"
checked={checked}
onChange={(e) => onChange(e.target.checked)}
/>
<span className="ios-toggle-track">
<span className="ios-toggle-thumb" />
</span>
</label>
);
}