user_model.dart 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. enum UserRole { employee, approver, finance, admin }
  2. class UserModel {
  3. final String id;
  4. final String userName;
  5. final String realName;
  6. final UserRole role;
  7. final String deptId;
  8. final String deptName;
  9. final String position;
  10. final String phone;
  11. final String email;
  12. final String avatarUrl;
  13. const UserModel({
  14. required this.id,
  15. this.userName = '',
  16. this.realName = '',
  17. this.role = UserRole.employee,
  18. this.deptId = '',
  19. this.deptName = '',
  20. this.position = '',
  21. this.phone = '',
  22. this.email = '',
  23. this.avatarUrl = '',
  24. });
  25. bool get isApprover => role == UserRole.approver || role == UserRole.admin;
  26. bool get isFinance => role == UserRole.finance || role == UserRole.admin;
  27. bool get isAdmin => role == UserRole.admin;
  28. factory UserModel.fromJson(Map<String, dynamic> json) {
  29. return UserModel(
  30. id: json['id'] as String? ?? '',
  31. userName: json['userName'] as String? ?? '',
  32. realName: json['realName'] as String? ?? '',
  33. role: _parseRole(json['role'] as String?),
  34. deptId: json['deptId'] as String? ?? '',
  35. deptName: json['deptName'] as String? ?? '',
  36. position: json['position'] as String? ?? '',
  37. phone: json['phone'] as String? ?? '',
  38. email: json['email'] as String? ?? '',
  39. avatarUrl: json['avatarUrl'] as String? ?? '',
  40. );
  41. }
  42. static UserRole _parseRole(String? role) {
  43. switch (role) {
  44. case 'approver': return UserRole.approver;
  45. case 'finance': return UserRole.finance;
  46. case 'admin': return UserRole.admin;
  47. default: return UserRole.employee;
  48. }
  49. }
  50. static const mock = UserModel(
  51. id: 'U001',
  52. userName: 'zhangsan',
  53. realName: '张三',
  54. role: UserRole.employee,
  55. deptId: 'D001',
  56. deptName: '销售部',
  57. position: '销售经理',
  58. );
  59. }