ops-console v1.0.2 (versionCode 8) 源码入库
This commit is contained in:
94
lib/models/theme_group.dart
Normal file
94
lib/models/theme_group.dart
Normal file
@@ -0,0 +1,94 @@
|
||||
/// 门店分组下的主题页面(对应 web 后台 /theme/page/org/{orgId}/photos)。
|
||||
class ThemePage {
|
||||
const ThemePage({
|
||||
required this.themeId,
|
||||
required this.name,
|
||||
this.themePhoto,
|
||||
this.active = false,
|
||||
this.orderNo,
|
||||
});
|
||||
|
||||
/// 主题 ID(tv_theme.id)。
|
||||
final int themeId;
|
||||
|
||||
/// 主题名称。
|
||||
final String name;
|
||||
|
||||
/// 主题预览图 URL。
|
||||
final String? themePhoto;
|
||||
|
||||
/// 是否为当前分组激活主题。
|
||||
final bool active;
|
||||
|
||||
/// 排序号。
|
||||
final int? orderNo;
|
||||
|
||||
factory ThemePage.fromJson(Map<String, dynamic> json) {
|
||||
final rawActive = json['active'];
|
||||
return ThemePage(
|
||||
themeId: (json['themeId'] ?? json['theme_id'] ?? json['id'] ?? 0) as int,
|
||||
name: (json['name'] ?? json['themeName'] ?? '')?.toString() ?? '',
|
||||
themePhoto: (json['themePhoto'] ?? json['theme_photo'])?.toString(),
|
||||
active: rawActive == true ||
|
||||
(rawActive is num && rawActive.toInt() == 1) ||
|
||||
(rawActive is String && rawActive.toLowerCase() == 'true'),
|
||||
orderNo: (json['orderNo'] ?? json['order_no']) is num
|
||||
? ((json['orderNo'] ?? json['order_no']) as num).toInt()
|
||||
: null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// 门店设备分组及其主题列表(界面配置)。
|
||||
class ThemeGroup {
|
||||
const ThemeGroup({
|
||||
required this.groupId,
|
||||
required this.groupName,
|
||||
required this.themes,
|
||||
this.themeLimit = 6,
|
||||
});
|
||||
|
||||
/// 设备分组 ID。
|
||||
final int groupId;
|
||||
|
||||
/// 设备分组名称。
|
||||
final String groupName;
|
||||
|
||||
/// 分组下主题数量上限。
|
||||
final int themeLimit;
|
||||
|
||||
/// 分组下已添加的主题列表。
|
||||
final List<ThemePage> themes;
|
||||
|
||||
factory ThemeGroup.fromJson(Map<String, dynamic> json) {
|
||||
final themesRaw = json['themes'];
|
||||
final themes = themesRaw is List
|
||||
? themesRaw
|
||||
.whereType<Map<String, dynamic>>()
|
||||
.map(ThemePage.fromJson)
|
||||
.where((t) => t.themeId > 0)
|
||||
.toList()
|
||||
: <ThemePage>[];
|
||||
themes.sort((a, b) => (a.orderNo ?? 0).compareTo(b.orderNo ?? 0));
|
||||
|
||||
final rawLimit = json['themeLimit'] ?? json['theme_limit'];
|
||||
final themeLimit = rawLimit is num && rawLimit.toInt() > 0
|
||||
? rawLimit.toInt()
|
||||
: 6;
|
||||
|
||||
return ThemeGroup(
|
||||
groupId: (json['groupId'] ?? json['group_id'] ?? 0) as int,
|
||||
groupName: (json['groupName'] ?? json['group_name'] ?? '')?.toString() ??
|
||||
'未命名分组',
|
||||
themeLimit: themeLimit,
|
||||
themes: themes,
|
||||
);
|
||||
}
|
||||
|
||||
/// 当前激活的主题名称(空表示未激活任何主题)。
|
||||
String? get activeThemeName {
|
||||
final active = themes.where((t) => t.active).toList();
|
||||
if (active.isEmpty) return null;
|
||||
return active.first.name;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user