/// 系统角色模型。 /// /// 对应后端 /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 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 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 json) { return RoleMenu( id: json['id']?.toString() ?? '', roleId: json['roleId']?.toString() ?? '', menuId: json['menuId']?.toString() ?? '', ); } Map toJson() { return { 'id': id, 'roleId': roleId, 'menuId': menuId, }; } }