ops-console v1.0.2 (versionCode 8) 源码入库

This commit is contained in:
txh
2026-09-03 18:01:05 +08:00
commit 685fff27c8
170 changed files with 53049 additions and 0 deletions

View File

@@ -0,0 +1,132 @@
/// 滚动字幕配置参数:速度档位与级别。
///
/// 与 Web 后台 `/views/modules/theme/scrolling-text.data.ts` 保持一致,
/// 移动端仅展示档位文案,落库仍是原始数值,便于与 Web 端互相识别。
///
/// 速度(scrollSpeed,单位 ms/像素,数值越小滚动越快):
/// - 慢 = 200
/// - 较慢 = 100
/// - 中 = 50
/// - 较快 = 30
/// - 快 = 10
///
/// 级别(level):
/// - 危险 = 50
/// - 紧急 = 40
/// - 普通 = 20
class MarqueeConfig {
const MarqueeConfig({
this.speed = MarqueeSpeed.medium,
this.grade = MarqueeGrade.normal,
});
final MarqueeSpeed speed;
final MarqueeGrade grade;
/// 将任意历史 speed 值吸附到最近档位(兼容 Web 端精确值)。
static MarqueeSpeed speedFromValue(int? value) {
if (value == null) return MarqueeSpeed.medium;
final target = MarqueeSpeed.values.fold<MarqueeSpeed>(
MarqueeSpeed.values.first,
(closest, current) {
final diffClosest = (closest.value - value).abs();
final diffCurrent = (current.value - value).abs();
return diffCurrent < diffClosest ? current : closest;
},
);
return target;
}
/// 将任意历史 level 值吸附到最近级别。
static MarqueeGrade gradeFromValue(int? value) {
if (value == null) return MarqueeGrade.normal;
final target = MarqueeGrade.values.fold<MarqueeGrade>(
MarqueeGrade.values.first,
(closest, current) {
final diffClosest = (closest.value - value).abs();
final diffCurrent = (current.value - value).abs();
return diffCurrent < diffClosest ? current : closest;
},
);
return target;
}
MarqueeConfig setSpeed(MarqueeSpeed speed) =>
MarqueeConfig(speed: speed, grade: grade);
MarqueeConfig setGrade(MarqueeGrade grade) =>
MarqueeConfig(speed: speed, grade: grade);
MarqueeConfig copyWith({
MarqueeSpeed? speed,
MarqueeGrade? grade,
}) =>
MarqueeConfig(
speed: speed ?? this.speed,
grade: grade ?? this.grade,
);
}
/// 滚动速度档位。
enum MarqueeSpeed {
slow(200, '慢'),
slower(100, '较慢'),
medium(50, '中'),
faster(30, '较快'),
fast(10, '快');
const MarqueeSpeed(this.value, this.labelZh);
/// 后端落库值。
final int value;
/// 中文展示文案。
final String labelZh;
/// 英文展示文案。
String get labelEn {
switch (this) {
case MarqueeSpeed.slow:
return 'Slow';
case MarqueeSpeed.slower:
return 'Slower';
case MarqueeSpeed.medium:
return 'Medium';
case MarqueeSpeed.faster:
return 'Faster';
case MarqueeSpeed.fast:
return 'Fast';
}
}
String label(bool useEnglish) => useEnglish ? labelEn : labelZh;
}
/// 滚动字幕级别。
enum MarqueeGrade {
danger(50, '危险'),
urgent(40, '紧急'),
normal(20, '普通');
const MarqueeGrade(this.value, this.labelZh);
/// 后端落库值。
final int value;
/// 中文展示文案。
final String labelZh;
/// 英文展示文案。
String get labelEn {
switch (this) {
case MarqueeGrade.danger:
return 'Danger';
case MarqueeGrade.urgent:
return 'Urgent';
case MarqueeGrade.normal:
return 'Normal';
}
}
String label(bool useEnglish) => useEnglish ? labelEn : labelZh;
}