156 lines
5.0 KiB
Dart
156 lines
5.0 KiB
Dart
import 'package:ef/ef.dart';
|
||
import 'package:flutter_city_picker/model/address.dart';
|
||
import 'package:flutterflow_ui/flutterflow_ui.dart';
|
||
import 'package:json_annotation/json_annotation.dart';
|
||
import 'package:vbvs_app/controller/mh/user_data.dart';
|
||
import 'package:vbvs_app/controller/mh/muser_info_controller.dart';
|
||
|
||
part 'address_controller.g.dart';
|
||
|
||
@JsonSerializable()
|
||
class AddressModel {
|
||
//版本id
|
||
String? province; //省份
|
||
String? city; //市
|
||
String? county; //区
|
||
String? street; //街道
|
||
String? detail; //详细信息
|
||
String? name; //名字
|
||
String? phone; //手机号
|
||
bool? ischecked = false; //是否默认
|
||
|
||
int currentType = 0;
|
||
String? all_address;
|
||
@JsonKey(ignore: true)
|
||
List<AddressNode>? addressList = [];
|
||
|
||
AddressModel();
|
||
|
||
static AddressModel fromJson(Map<String, dynamic> json) =>
|
||
_$AddressModelFromJson(json);
|
||
Map<String, dynamic> toJson() => _$AddressModelToJson(this);
|
||
}
|
||
|
||
class AddressController extends GetControllerEx<AddressModel> {
|
||
AddressController() {
|
||
attr = GetModel(AddressModel()).obs;
|
||
}
|
||
|
||
Future<String> updateAddress(
|
||
Map<String, dynamic> address, AddressModel model) async {
|
||
if (model.addressList != null && model.addressList!.isNotEmpty) {
|
||
if (model.addressList!.length > 0) {
|
||
address["province"] = model.addressList![0].name; // 第一个元素为省
|
||
}
|
||
if (model.addressList!.length > 1) {
|
||
address["city"] = model.addressList![1].name; // 第二个元素为市
|
||
}
|
||
if (model.addressList!.length > 2) {
|
||
address["county"] = model.addressList![2].name; // 第三个元素为区
|
||
}
|
||
if (model.addressList!.length > 3) {
|
||
address["street"] = model.addressList![3].name; // 第四个元素为街道
|
||
}
|
||
}
|
||
address['detail'] = model.detail;
|
||
address['name'] = model.name;
|
||
address['phone'] = model.phone;
|
||
address['isChecked'] = model.ischecked;
|
||
|
||
try {
|
||
final data = await ef.client.rpc("get_now_datetime");
|
||
final response = await ef.client.from("app_user_address").update({
|
||
'province': address["province"],
|
||
'city': address["city"],
|
||
'county': address["county"],
|
||
'street': address["street"],
|
||
'detail': address["detail"],
|
||
'name': address["name"],
|
||
'phone': address["phone"],
|
||
'ischecked': address['isChecked'] ? 1 : 0,
|
||
'update_time':
|
||
DateFormat("yyyy-MM-dd HH:mm:ss").parse("$data").toString(),
|
||
}).eq("id", address['id']);
|
||
} catch (e) {
|
||
print('Error fetching repairs: $e');
|
||
return e.toString();
|
||
}
|
||
return '';
|
||
}
|
||
|
||
addAddress(AddressModel model) async {
|
||
try {
|
||
final MUserInfoController userInfoController =
|
||
Get.find<MUserInfoController>();
|
||
UserModel user = userInfoController.model.user!;
|
||
|
||
// 设置省市区街道名称
|
||
if (model.addressList != null && model.addressList!.isNotEmpty) {
|
||
if (model.addressList!.length > 0)
|
||
model.province = model.addressList![0].name; // 第一个元素为省
|
||
if (model.addressList!.length > 1)
|
||
model.city = model.addressList![1].name; // 第二个元素为市
|
||
if (model.addressList!.length > 2)
|
||
model.county = model.addressList![2].name; // 第三个元素为区
|
||
if (model.addressList!.length > 3)
|
||
model.street = model.addressList![3].name; // 第四个元素为街道
|
||
}
|
||
|
||
// 查询数据库是否已有该用户的地址
|
||
final existingAddresses = await ef.client
|
||
.from('app_user_address')
|
||
.select()
|
||
.eq('user_id', user.uid!);
|
||
|
||
// 如果没有地址,将新增地址默认选中
|
||
if (existingAddresses.isEmpty) {
|
||
model.ischecked = true;
|
||
} else if (model.ischecked == true) {
|
||
// 如果新地址被选中,将其他地址的 `ischecked` 字段设为 `0`
|
||
await ef.client
|
||
.from('app_user_address')
|
||
.update({'ischecked': 0}).eq('user_id', user.uid!);
|
||
}
|
||
|
||
// 添加新地址
|
||
final response = await ef.client.from('app_user_address').insert({
|
||
'province': model.province,
|
||
'city': model.city,
|
||
'county': model.county,
|
||
'street': model.street,
|
||
'detail': model.detail,
|
||
'name': model.name,
|
||
'phone': model.phone,
|
||
'ischecked': model.ischecked! ? 1 : 0,
|
||
'user_id': user.uid,
|
||
});
|
||
} catch (e) {
|
||
print(e);
|
||
}
|
||
}
|
||
|
||
Future<List<AddressNode>> getData({int? level, int? pid}) async {
|
||
// 构建查询
|
||
var query = ef.from("app_area_city").select();
|
||
|
||
// 如果 pid 不为 null,添加 pid 的条件
|
||
if (pid != null) {
|
||
query = query.eq("pid", pid);
|
||
}
|
||
if (level != null) {
|
||
query = query.eq("deep", level);
|
||
}
|
||
List arr = await query;
|
||
|
||
List<AddressNode> addressNodes = arr.map((item) {
|
||
return AddressNode.fromJson({
|
||
"name": item["ext_name"], // ext_name 对应 name
|
||
"code": item["id"], // id 对应 code
|
||
"letter": item["pinyin_prefix_upper"], // pinyin_prefix_upper 对应 letter
|
||
});
|
||
}).toList();
|
||
|
||
return addressNodes;
|
||
}
|
||
}
|