- 配置 edge-to-edge 沉浸式状态栏与刘海屏适配 - 新增百度地图权限、AK 配置及定位权限说明 - 接入 MethodChannel 实现返回键退后台热启动优化 - 配置自定义签名并更新构建逻辑 - 完善 token 刷新与鉴权失效统一处理 - 新增地图页与截图页路由 - 修复返回键拦截导致的 PopScope 失效问题
96 lines
2.6 KiB
Dart
96 lines
2.6 KiB
Dart
import 'package:ttstd_family_care/core/network/dio_client.dart';
|
|
import 'package:ttstd_family_care/features/auth/domain/auth_models.dart';
|
|
|
|
/// 客户端(家属端)认证接口访问层。
|
|
///
|
|
/// 对接后端 C 端(open 模块)认证接口。`AppConstants.kBaseUrl` 仅包含 `/api/`
|
|
/// 前缀,各端点在此显式追加 `v1/open/`(即 `/api/v1/open/**`)。open 模块账号
|
|
/// 落地 `app_user`,与后台管理端(`sys_user`)物理分表。
|
|
///
|
|
/// [DioClient.get] / [DioClient.post] 已统一解析为后台返回体中的 `data` 字段;
|
|
/// 业务失败时抛出 [ApiException],由上层(Repository)按需处理。
|
|
class AuthApi {
|
|
const AuthApi();
|
|
|
|
/// 账号密码登录。
|
|
Future<LoginResult> loginByPassword({
|
|
required String username,
|
|
required String password,
|
|
}) async {
|
|
final data = await DioClient.post(
|
|
'v1/open/login',
|
|
data: {
|
|
'username': username,
|
|
'password': password,
|
|
},
|
|
);
|
|
return LoginResult.fromJson(data as Map<String, dynamic>);
|
|
}
|
|
|
|
/// 短信验证码登录。
|
|
Future<LoginResult> loginBySms({
|
|
required String phone,
|
|
required String code,
|
|
}) async {
|
|
final data = await DioClient.post(
|
|
'v1/open/auth/login/mobile',
|
|
data: {
|
|
'mobile': phone,
|
|
'code': code,
|
|
},
|
|
);
|
|
return LoginResult.fromJson(data as Map<String, dynamic>);
|
|
}
|
|
|
|
/// 短信注册。
|
|
Future<LoginResult> register({
|
|
required String phone,
|
|
required String code,
|
|
required String password,
|
|
}) async {
|
|
final data = await DioClient.post(
|
|
'v1/open/register/mobile',
|
|
data: {
|
|
'mobile': phone,
|
|
'code': code,
|
|
'password': password,
|
|
},
|
|
);
|
|
return LoginResult.fromJson(data as Map<String, dynamic>);
|
|
}
|
|
|
|
/// 发送短信验证码。
|
|
///
|
|
/// 后端按场景拆分验证码发送接口(query 参数 mobile)。
|
|
Future<void> sendSmsCode({
|
|
required String phone,
|
|
required SmsScene scene,
|
|
}) async {
|
|
final path = switch (scene) {
|
|
SmsScene.login => 'v1/open/auth/login/sms/code',
|
|
SmsScene.register => 'v1/open/auth/register/sms/code',
|
|
SmsScene.resetPassword => 'v1/open/reset-password/sms/code',
|
|
};
|
|
await DioClient.post(
|
|
path,
|
|
queryParameters: {'mobile': phone},
|
|
);
|
|
}
|
|
|
|
/// 重置密码(忘记密码流程:校验验证码后设置新密码)。
|
|
Future<void> resetPassword({
|
|
required String phone,
|
|
required String code,
|
|
required String password,
|
|
}) async {
|
|
await DioClient.post(
|
|
'v1/open/auth/reset-password',
|
|
data: {
|
|
'mobile': phone,
|
|
'code': code,
|
|
'password': password,
|
|
},
|
|
);
|
|
}
|
|
}
|