Commit 76444de3 authored by 张宏's avatar 张宏

1

parent 9352044e
import '../utils/constants.dart';
import '../utils/http/response_model.dart';
import '../utils/http/dio_request.dart';
import '../models/bo/login_bo.dart';
import '../models/bo/user_info_bo.dart';
import 'mock/auth_mock_data.dart';
class AuthRepository {
Future<ResponseModel<LoginBO>> login(Map<String, dynamic> params) {
if (Constants.useMockData) {
return _mockLogin();
}
return DioRequest.instance.post<LoginBO>(
'/app/auth/login/password',
data: params,
......@@ -13,6 +18,9 @@ class AuthRepository {
}
Future<ResponseModel<UserInfoBO>> getUserInfo() {
if (Constants.useMockData) {
return _mockGetUserInfo();
}
return DioRequest.instance.get<UserInfoBO>(
'/app/auth/user-info',
fromJsonT: (data) => UserInfoBO.fromJson(data as Map<String, dynamic>),
......@@ -20,6 +28,52 @@ class AuthRepository {
}
Future<ResponseModel> logout() {
if (Constants.useMockData) {
return _mockLogout();
}
return DioRequest.instance.post('/app/auth/logout');
}
// ==================== Mock 实现 ====================
Future<ResponseModel<LoginBO>> _mockLogin() async {
// 模拟网络延迟,便于测试 loading 状态
await Future.delayed(const Duration(milliseconds: 500));
final loginBO = AuthMockData.mockLogin();
return ResponseModel<LoginBO>(
code: 200,
msg: '登录成功(mock)',
data: loginBO,
uuid: 'mock_uuid_${DateTime.now().millisecondsSinceEpoch}',
success: true,
timestamp: DateTime.now().millisecondsSinceEpoch,
);
}
Future<ResponseModel<UserInfoBO>> _mockGetUserInfo() async {
await Future.delayed(const Duration(milliseconds: 300));
final userInfo = AuthMockData.mockUserInfo();
return ResponseModel<UserInfoBO>(
code: 200,
msg: '获取用户信息成功(mock)',
data: userInfo,
uuid: 'mock_uuid_${DateTime.now().millisecondsSinceEpoch}',
success: true,
timestamp: DateTime.now().millisecondsSinceEpoch,
);
}
Future<ResponseModel> _mockLogout() async {
await Future.delayed(const Duration(milliseconds: 200));
return ResponseModel(
code: 200,
msg: '退出成功(mock)',
uuid: 'mock_uuid_${DateTime.now().millisecondsSinceEpoch}',
success: true,
timestamp: DateTime.now().millisecondsSinceEpoch,
);
}
}
import '../../models/bo/login_bo.dart';
import '../../models/bo/user_info_bo.dart';
/// Auth 模块本地 mock 数据。
///
/// 所有 mock 数据直接使用 models 层的构造函数创建,
/// 确保数据结构与 models 定义完全一致。
/// 后续接入真实接口时,只需修改 Repository 层的开关即可。
class AuthMockData {
AuthMockData._();
/// Mock 登录响应 - 直接构造 LoginBO 实例
static LoginBO mockLogin() {
return const LoginBO(
scope: 'server',
openid: 'mock_openid_abc123',
accessToken: 'mock_access_token_eyJhbGciOiJIUzI1NiJ9',
refreshToken: 'mock_refresh_token_xyz789',
expireIn: 86400,
refreshExpireIn: 604800,
clientId: 'mock_client_id_001',
);
}
/// Mock 用户信息响应 - 直接构造 UserInfoBO 实例
static UserInfoBO mockUserInfo() {
return const UserInfoBO(
userId: 10001,
userName: 'admin',
nickName: '管理员',
phonenumber: '13800138000',
email: 'admin@laki-icu.com',
sex: '1',
avatarUrl: 'https://example.com/avatar/default.png',
deptName: '技术部',
tenantId: 'tenant_001',
);
}
}
......@@ -3,19 +3,8 @@ class Constants {
/// 当前环境:dev / staging / prod,通过 --dart-define=APP_ENV=xxx 注入
static const String env = String.fromEnvironment('APP_ENV', defaultValue: 'dev');
/// 根据环境返回对应的 API 地址
static String get baseUrl {
switch (env) {
case 'dev':
return 'http://121.41.57.178:9090';
case 'staging':
return 'http://121.41.57.178:9090';
case 'prod':
return 'http://121.41.57.178:9090';
default:
return 'http://121.41.57.178:9090';
}
}
/// API 地址,由 env/*.json 中的 SERVICE_URL 注入
static String get baseUrl => const String.fromEnvironment('SERVICE_URL');
......@@ -46,4 +35,9 @@ class Constants {
// ==================== 其他配置 ====================
static const String defaultLang = 'zh-CN';
// ==================== Mock 数据开关 ====================
/// 接口未提供时使用本地 mock 数据。
/// 设为 false 并调整 models 的 fromJson 即可切回真实接口。
static const bool useMockData = true;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment