ops-console v1.0.2 (versionCode 8) 源码入库
This commit is contained in:
132
lib/models/marquee_config.dart
Normal file
132
lib/models/marquee_config.dart
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user