Files
CloudHome-Ops/lib/models/sys_role.dart

85 lines
1.9 KiB
Dart
Raw Normal View History

/// 系统角色模型。
///
/// 对应后端 /sys/role/* 接口的角色实体。
class SysRole {
const SysRole({
required this.roleId,
required this.roleName,
required this.remark,
required this.createTime,
});
/// 角色 ID。
final String roleId;
/// 角色名称。
final String roleName;
/// 备注。
final String remark;
/// 创建时间。
final DateTime? createTime;
factory SysRole.fromJson(Map<String, dynamic> json) {
return SysRole(
roleId: (json['roleId'] ?? json['id'])?.toString() ?? '',
roleName: json['roleName']?.toString() ?? '',
remark: json['remark']?.toString() ?? '',
createTime: _parseDateTime(json['createTime']),
);
}
/// 兼容 `yyyy-MM-dd HH:mm:ss` 与 ISO 8601 两种时间格式。
static DateTime? _parseDateTime(dynamic value) {
if (value == null) return null;
final text = value.toString().trim();
if (text.isEmpty) return null;
return DateTime.tryParse(text) ??
DateTime.tryParse(text.replaceFirst(' ', 'T'));
}
Map<String, dynamic> toJson() {
return {
'roleId': roleId,
'roleName': roleName,
'remark': remark,
'createTime': createTime?.toIso8601String(),
};
}
}
/// 角色-菜单关联模型(用于角色权限分配)。
class RoleMenu {
const RoleMenu({
required this.id,
required this.roleId,
required this.menuId,
});
/// 主键 ID。
final String id;
/// 角色 ID。
final String roleId;
/// 菜单 ID。
final String menuId;
factory RoleMenu.fromJson(Map<String, dynamic> json) {
return RoleMenu(
id: json['id']?.toString() ?? '',
roleId: json['roleId']?.toString() ?? '',
menuId: json['menuId']?.toString() ?? '',
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'roleId': roleId,
'menuId': menuId,
};
}
}