From d5a5e3282dd75287b884936aa05ee9a4953f22ad Mon Sep 17 00:00:00 2001 From: czz <862977248@qq.com> Date: Mon, 14 Jul 2025 18:04:42 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=8A=A5=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/img/icon/mydevice.svg | 1 + .../apply_repair_controller.dart | 115 +-- .../apply_repair_controller.g.dart | 2 + .../experience_store_list_page.dart | 7 +- .../mh_controller/repair_list_controller.dart | 6 +- lib/pages/mh_page/apply_repair_page.dart | 817 ++++++++++++++++-- lib/pages/mh_page/edit_address_page.dart | 1 + lib/pages/mh_page/experience_store_page.dart | 2 +- lib/pages/mh_page/new_mine_page.dart | 328 +++---- lib/pages/mh_page/repair_history_widget.dart | 4 +- lib/pages/mh_page/repair_list.dart | 39 +- .../component/MonthDataWidget.dart | 2 +- .../sleep_report/new_sleep_report_page.dart | 2 +- 13 files changed, 952 insertions(+), 374 deletions(-) create mode 100644 assets/img/icon/mydevice.svg diff --git a/assets/img/icon/mydevice.svg b/assets/img/icon/mydevice.svg new file mode 100644 index 0000000..520ac77 --- /dev/null +++ b/assets/img/icon/mydevice.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/lib/controller/mh_controller/apply_repair_controller.dart b/lib/controller/mh_controller/apply_repair_controller.dart index 45ae88d..b103c7e 100644 --- a/lib/controller/mh_controller/apply_repair_controller.dart +++ b/lib/controller/mh_controller/apply_repair_controller.dart @@ -31,7 +31,7 @@ class ApplyRepairModel { int? device_type; //类型 床,床垫 不能为空 String? device_category; //型号 不能为空 String? device_id; //序列号 设备id 不能为空 - + String? device_series; String? device_name; //名称 可为空 List? issue_img = []; //图片 @@ -123,118 +123,6 @@ class ApplyRepairController extends GetControllerEx { } } - // //提交 - // Future submitRepair(BuildContext context) async { - // //tmp - // // return ''; - // String message = ''; - // final MyDialogController myDialogController = - // Get.find(); - // if (model.device_type == null || model.device_type!.isEmpty) { - // message = '请选择设备类型!'; - // showToast(message); - // return message; - // } - // if (model.device_category == null || model.device_category!.isEmpty) { - // message = '请输入设备型号!'; - // showToast(message); - // return message; - // } - // if (model.device_id == null || model.device_id!.isEmpty) { - // message = '请输入设备序列号id!'; - // showToast(message); - // return message; - // } - // if (model.apply_name == null || model.apply_name!.isEmpty) { - // message = '请输入姓名!'; - // showToast(message); - // return message; - // } - // RegExp nameRegExp = RegExp(r'^[\u4e00-\u9fa5]{2,4}$'); - - // if (!nameRegExp.hasMatch(model.apply_name!)) { - // message = '姓名必须为2到4个汉字!'; - // showToast(message); - // return message; - // } - // if (model.tel == null || model.tel!.isEmpty) { - // message = '请输入手机号!'; - // showToast(message); - // return message; - // } - // if (!MyUtils.isValidPhoneNumber(model.tel!)) { - // message = '无效的手机号!'; - // showToast(message); - // return message; - // } - - // if (model.desc == null || model.desc!.isEmpty) { - // message = '请输入问题描述!'; - // showToast(message); - // return message; - // } - // if (model.issue_img == null || model.issue_img!.isEmpty) { - // message = '请至少上传一张问题图片!'; - // showToast(message); - // return message; - // } - // model.status = RepairStatus.pending; - // // await repairRepository.saveRepair(model); - // String type = "repair_submit_${model.device_id}"; - // String serviceAddress = ServiceConstant.service_address; - // String serviceName = ServiceConstant.server_service; - // String serviceApi = ServiceConstant.submit_repair; - // String queryUrl = "$serviceAddress$serviceName$serviceApi?type=$type"; - - // // 组织请求数据 - // final UserInfoController userInfoController = - // Get.find(); - // UserModel user = userInfoController.model.user!; - - // Map data = { - // 'apply_name': model.apply_name, - // 'desc': model.desc, - // 'device_type': model.device_type, - // 'issue_img': model.issue_img, - // 'tel': model.tel, - // 'uid': user.uid, - // 'device_category': model.device_category, - // 'device_id': model.device_id, - // 'device_name': model.device_name, - // 'status': model.status, - // }; - - // // 发起插入请求(这里相当于之前的 saveRepair) - // requestWithLog( - // logTitle: "提交报修", - // method: MyHttpMethod.post, - // queryUrl: queryUrl, - // data: data, - // onSuccess: (res) { - // if (res.data is List && res.data.isNotEmpty) { - // final inserted = res.data[0]; - // model.id = inserted['id']; - // model.create_time = DateTime.tryParse(inserted['create_time']); - // // TextSelectionOverlay - // // // saveRepairHistor - // // saveRepairHistory( - // // RepairProcessModel() - // // ..status = model.status - // // ..record_id = inserted['id'], - // // ); - // showToast("提交成功!"); - // } else { - // showToast("提交失败:未返回数据!"); - // } - // }, - // onFailure: (res) { - // showToast("提交失败!"); - // }, - // ); - - // return message; - // } - Future getDeviceList() async { // UserModel loginUser = userInfoController.model.user!; DeviceListController deviceListController = Get.find(); @@ -243,5 +131,4 @@ class ApplyRepairController extends GetControllerEx { ApplyRepairController applyRepairController = Get.find(); applyRepairController.model.device_list = aa; } - } diff --git a/lib/controller/mh_controller/apply_repair_controller.g.dart b/lib/controller/mh_controller/apply_repair_controller.g.dart index 46a2712..3744554 100644 --- a/lib/controller/mh_controller/apply_repair_controller.g.dart +++ b/lib/controller/mh_controller/apply_repair_controller.g.dart @@ -18,6 +18,7 @@ ApplyRepairModel _$ApplyRepairModelFromJson(Map json) => ..device_type = (json['device_type'] as num?)?.toInt() ..device_category = json['device_category'] as String? ..device_id = json['device_id'] as String? + ..device_series = json['device_series'] as String? ..device_name = json['device_name'] as String? ..issue_img = (json['issue_img'] as List?) ?.map((e) => e as String) @@ -44,6 +45,7 @@ Map _$ApplyRepairModelToJson(ApplyRepairModel instance) => 'device_type': instance.device_type, 'device_category': instance.device_category, 'device_id': instance.device_id, + 'device_series': instance.device_series, 'device_name': instance.device_name, 'issue_img': instance.issue_img, 'imagesLImit': instance.imagesLImit, diff --git a/lib/controller/mh_controller/experience_store_list_page.dart b/lib/controller/mh_controller/experience_store_list_page.dart index 7f8e55a..0cafd2d 100644 --- a/lib/controller/mh_controller/experience_store_list_page.dart +++ b/lib/controller/mh_controller/experience_store_list_page.dart @@ -54,9 +54,10 @@ class ExperienceStoreListController if (lock) { return; } - if (page == 0) { - position = await weatherModelController.determinePosition(); - } + // if (page == 0) { + // position = await weatherModelController.determinePosition(); + // } + lock = true; int page_ = page; ApiService.reservation diff --git a/lib/controller/mh_controller/repair_list_controller.dart b/lib/controller/mh_controller/repair_list_controller.dart index 1d5f589..71db571 100644 --- a/lib/controller/mh_controller/repair_list_controller.dart +++ b/lib/controller/mh_controller/repair_list_controller.dart @@ -28,10 +28,10 @@ class RepairListController extends GetControllerEx { } //初始化列表数据 - @override - Future onInit() async { - super.onInit(); + + Future initData() async { await getRepairList(); + updateAll(); } getRepairList() async { diff --git a/lib/pages/mh_page/apply_repair_page.dart b/lib/pages/mh_page/apply_repair_page.dart index 049c208..bbf9808 100644 --- a/lib/pages/mh_page/apply_repair_page.dart +++ b/lib/pages/mh_page/apply_repair_page.dart @@ -41,8 +41,8 @@ class ApplyRepairPage extends GetView { Widget build(BuildContext context) { var tmpcontroller = FormFieldController(controller.model.select_device); - List deviceTypeNames = ['床', '床垫']; - List deviceTypeIds = ['床', '床垫']; + // List deviceTypeNames = ['床', '床垫']; + // List deviceTypeIds = ['床', '床垫']; return LayoutBuilder(builder: (context, cc) { bodysize = cc; return GestureDetector( @@ -232,18 +232,33 @@ class ApplyRepairPage extends GetView { .model .device_list! .map((device) => { - 'id': device['_id'].toString(), // 提取设备 ID + 'mac': device['mac'].toString(), // 提取设备 Mac 'name': device['name'].toString(), // 提取设备名称 + 'type': device['device_type'].toString() }) .toList(); // 提取 optionsLabel 和 optionsValue - List deviceNames = deviceOptions - .map((device) => device['name']!) // 用于显示的名称列表 - .toList(); + // List deviceNames = deviceOptions + // .map((device) => device['name']!) // 用于显示的名称列表 + // .toList(); + List + deviceNames = + controller.model.device_list!.map((device) { + final mac = + device['mac']?.toString() ?? ''; + final name = + device['name']?.toString() ?? ''; + final type = + getDeviceTypeName(int.tryParse('${device['device_type']}')); - List deviceIds = deviceOptions - .map((device) => device['id']!) // 用于匹配的 ID 列表 + return name.isNotEmpty + ? '$name-MAC$mac' + : '$type-MAC$mac'; + }).toList(); + + List deviceMacs = deviceOptions + .map((device) => device['mac']!) // 用于匹配的 ID 列表 .toList(); return FlutterFlowDropDown< @@ -253,18 +268,36 @@ class ApplyRepairPage extends GetView { fillColor: Colors.white, // 控件区域背景色 options: - deviceIds, // 下拉菜单选项为设备的 ID + deviceMacs, // 下拉菜单选项为设备的 ID optionLabels: deviceNames, // 下拉菜单显示的内容为设备名称 onChanged: (val) { - var selectedDevice = controller.model.device_list!.firstWhere((device) => device['_id'].toString() == val); - controller.model.select_device = val; + // var selectedDevice = controller.model.device_list!.firstWhere((device) => device['mac'].toString() == val); + // controller.model.select_device = val; + // controller.model.device_type = selectedDevice['device_type']; + // // controller.model.device_category = selectedDevice['deviceSeries']['name'] ?? '未知型号'; // 获取设备型号 + // controller.model.device_category = '未知型号'; + // controller.model.device_id = selectedDevice['mac'] ?? '未知设备mac'; // 获取设备ID + // controller.model.device_name = selectedDevice['name'] ?? '未知设备'; // 获取设备名称 + // controller.updateAll(); + + var selectedDevice = controller.model.device_list!.firstWhere((device) => device['mac'].toString() == val); + + final mac = selectedDevice['mac']?.toString() ?? '未知MAC'; + final name = selectedDevice['name']?.toString(); + final type = int.tryParse('${selectedDevice['device_type']}'); + final typeName = getDeviceTypeName(type); + + controller.model.select_device = mac; controller.model.device_type = selectedDevice['device_type']; - // controller.model.device_category = selectedDevice['deviceSeries']['name'] ?? '未知型号'; // 获取设备型号 - controller.model.device_category = '未知型号'; - controller.model.device_id = selectedDevice['_id'] ?? '未知设备ID'; // 获取设备ID - controller.model.device_name = selectedDevice['name'] ?? '未知设备'; // 获取设备名称 + controller.model.device_category = '未知型号'; // 后续可替换成设备系列 + + // 如果 name 不为空则用 name,否则用 typeName-mac + controller.model.device_name = (name != null && name.isNotEmpty) ? name : '$typeName-MAC$mac'; + + controller.model.device_id = mac; + controller.updateAll(); }, width: @@ -375,30 +408,499 @@ class ApplyRepairPage extends GetView { ), Expanded( child: Container( - width: 100, - height: 100, - decoration: - BoxDecoration( - color: Colors - .white, - borderRadius: - BorderRadius - .circular(8), + decoration: + BoxDecoration( + color: Colors + .white, + borderRadius: + BorderRadius + .circular( + 8), + ), + width: double + .infinity, + child: Padding( + padding: EdgeInsetsDirectional + .fromSTEB( + 35.rpx, + 0, + 35.rpx, + 0), + child: Row( + mainAxisSize: + MainAxisSize + .max, + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Expanded( + child: + Container( + child: + Align( + alignment: + AlignmentDirectional(-1, 0), + child: + TextFormField( + onChanged: (value) { + controller.model.device_series = value; + }, + autofocus: false, + obscureText: false, + decoration: InputDecoration( + contentPadding: EdgeInsets.all(0), + isDense: true, + labelStyle: TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + ), + hintStyle: TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc4, + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + errorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedErrorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + filled: false, + fillColor: Colors.white, + ), + style: TextStyle( + fontFamily: 'Readex Pro', + letterSpacing: 0, + color: Colors.black, + fontSize: 26.rpx, + ), + // cursorColor: + // Colors.black, + // validator: _model + // .textControllerValidator + // .asValidator(context), + ), + ), + ), + ), + ], ), - child: Padding( - padding: EdgeInsets.only(left: 26.rpx), - child: Align( - alignment: Alignment.centerLeft, - child: Obx(() => Text( - getDeviceTypeName(controller.model.device_type), - style: TextStyle(fontSize: 26.rpx, color: Colors.black), - ))))), + ), + ), ), ].divide(SizedBox( width: 26.rpx)), ), ), ), + + // Flexible( + // child: Container( + // width: + // MediaQuery.sizeOf( + // context) + // .width, + // height: 10, + // constraints: + // BoxConstraints( + // minHeight: 60.rpx, + // ), + // child: Row( + // mainAxisSize: + // MainAxisSize.max, + // children: [ + // Container( + // width: 105.rpx, + // height: MediaQuery + // .sizeOf( + // context) + // .height * + // 0.038, + // constraints: + // const BoxConstraints( + // minWidth: 60, + // ), + // child: Align( + // alignment: + // const AlignmentDirectional( + // -1, 0), + // child: Text( + // '产品型号', + // style: TextStyle( + // fontFamily: + // 'Readex Pro', + // fontSize: 26 + // .rpx, + // letterSpacing: + // 0, + // color: Colors + // .white), + // ), + // ), + // ), + // // Expanded( + // // child: Container( + // // width: 100, + // // height: 100, + // // decoration: + // // BoxDecoration( + // // color: Colors + // // .white, + // // borderRadius: + // // BorderRadius + // // .circular(8), + // // ), + // // child: Padding( + // // padding: EdgeInsets.only(left: 26.rpx), + // // child: Align( + // // alignment: Alignment.centerLeft, + // // child: Obx(() => Text( + // // controller.model.device_category ?? '', + // // style: TextStyle(fontSize: 26.rpx, color: Colors.black), + // // ))))), + // // ), + // Expanded( + // child: Container( + // child: Align( + // alignment: + // AlignmentDirectional( + // -1, + // 0), + // child: + // TextFormField( + // onChanged: + // (value) { + // controller + // .model + // .device_category = value; + // }, + // autofocus: + // false, + // obscureText: + // false, + // decoration: + // InputDecoration( + // contentPadding: + // EdgeInsets.all( + // 0), + // isDense: + // true, + // labelStyle: + // TextStyle( + // fontFamily: + // 'Inter', + // fontSize: + // 26.rpx, + // letterSpacing: + // 0.0, + // ), + // hintStyle: + // TextStyle( + // fontFamily: + // 'Inter', + // fontSize: + // 26.rpx, + // letterSpacing: + // 0.0, + // color: themeController + // .currentColor + // .sc4, + // ), + // enabledBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Color(0x00000000), + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // focusedBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Color(0x00000000), + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // errorBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Colors.red, + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // focusedErrorBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Colors.red, + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // filled: + // false, + // fillColor: + // Colors + // .white, + // ), + // style: + // TextStyle( + // fontFamily: + // 'Readex Pro', + // letterSpacing: + // 0, + // color: Colors + // .black, + // fontSize: + // 26.rpx, + // ), + // // cursorColor: + // // Colors.black, + // // validator: _model + // // .textControllerValidator + // // .asValidator(context), + // ), + // ), + // ), + // ), + // ].divide(SizedBox( + // width: 26.rpx)), + // ), + // ), + // ), + // Flexible( + // child: Container( + // width: + // MediaQuery.sizeOf( + // context) + // .width, + // height: 10, + // constraints: + // BoxConstraints( + // minHeight: 60.rpx, + // ), + // child: Row( + // mainAxisSize: + // MainAxisSize.max, + // children: [ + // Container( + // width: 105.rpx, + // height: MediaQuery + // .sizeOf( + // context) + // .height * + // 0.038, + // constraints: + // const BoxConstraints( + // minWidth: 60, + // ), + // child: Align( + // alignment: + // const AlignmentDirectional( + // -1, 0), + // child: Text( + // '序列号', + // style: TextStyle( + // fontFamily: + // 'Readex Pro', + // fontSize: 26 + // .rpx, + // letterSpacing: + // 0, + // color: Colors + // .white), + // ), + // ), + // ), + // // Expanded( + // // child: Container( + // // width: 100, + // // height: 100, + // // decoration: + // // BoxDecoration( + // // color: Colors + // // .white, + // // borderRadius: + // // BorderRadius + // // .circular(8), + // // ), + // // child: Padding( + // // padding: EdgeInsets.only(left: 26.rpx), + // // child: Align( + // // alignment: Alignment.centerLeft, + // // child: Obx(() => Text( + // // controller.model.device_id ?? '', + // // style: TextStyle(fontSize: 26.rpx, color: Colors.black), + // // ))))), + // // ), + // Expanded( + // child: Container( + // child: Align( + // alignment: + // AlignmentDirectional( + // -1, + // 0), + // child: + // TextFormField( + // onChanged: + // (value) { + // controller + // .model + // .device_id = value; + // }, + // autofocus: + // false, + // obscureText: + // false, + // decoration: + // InputDecoration( + // contentPadding: + // EdgeInsets.all( + // 0), + // isDense: + // true, + // labelStyle: + // TextStyle( + // fontFamily: + // 'Inter', + // fontSize: + // 26.rpx, + // letterSpacing: + // 0.0, + // ), + // hintStyle: + // TextStyle( + // fontFamily: + // 'Inter', + // fontSize: + // 26.rpx, + // letterSpacing: + // 0.0, + // color: themeController + // .currentColor + // .sc4, + // ), + // enabledBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Color(0x00000000), + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // focusedBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Color(0x00000000), + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // errorBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Colors.red, + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // focusedErrorBorder: + // OutlineInputBorder( + // borderSide: + // BorderSide( + // color: + // Colors.red, + // width: + // 1.rpx, + // ), + // borderRadius: + // BorderRadius.circular(8.rpx), + // ), + // filled: + // false, + // fillColor: + // Colors + // .white, + // ), + // style: + // TextStyle( + // fontFamily: + // 'Readex Pro', + // letterSpacing: + // 0, + // color: Colors + // .black, + // fontSize: + // 26.rpx, + // ), + // // cursorColor: + // // Colors.black, + // // validator: _model + // // .textControllerValidator + // // .asValidator(context), + // ), + // ), + // ), + // ), + // ].divide(SizedBox( + // width: 26.rpx)), + // ), + // ), + // ), Flexible( child: Container( width: @@ -445,24 +947,110 @@ class ApplyRepairPage extends GetView { ), Expanded( child: Container( - width: 100, - height: 100, - decoration: - BoxDecoration( - color: Colors - .white, - borderRadius: - BorderRadius - .circular(8), + decoration: + BoxDecoration( + color: Colors + .white, + borderRadius: + BorderRadius + .circular( + 8), + ), + width: double + .infinity, + child: Padding( + padding: EdgeInsetsDirectional + .fromSTEB( + 35.rpx, + 0, + 35.rpx, + 0), + child: Row( + mainAxisSize: + MainAxisSize + .max, + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Expanded( + child: + Container( + child: + Align( + alignment: + AlignmentDirectional(-1, 0), + child: + TextFormField( + onChanged: (value) { + controller.model.device_category = value; + }, + autofocus: false, + obscureText: false, + decoration: InputDecoration( + contentPadding: EdgeInsets.all(0), + isDense: true, + labelStyle: TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + ), + hintStyle: TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc4, + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + errorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedErrorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + filled: false, + fillColor: Colors.white, + ), + style: TextStyle( + fontFamily: 'Readex Pro', + letterSpacing: 0, + color: Colors.black, + fontSize: 26.rpx, + ), + // cursorColor: + // Colors.black, + // validator: _model + // .textControllerValidator + // .asValidator(context), + ), + ), + ), + ), + ], ), - child: Padding( - padding: EdgeInsets.only(left: 26.rpx), - child: Align( - alignment: Alignment.centerLeft, - child: Obx(() => Text( - controller.model.device_category ?? '', - style: TextStyle(fontSize: 26.rpx, color: Colors.black), - ))))), + ), + ), ), ].divide(SizedBox( width: 26.rpx)), @@ -515,24 +1103,110 @@ class ApplyRepairPage extends GetView { ), Expanded( child: Container( - width: 100, - height: 100, - decoration: - BoxDecoration( - color: Colors - .white, - borderRadius: - BorderRadius - .circular(8), + decoration: + BoxDecoration( + color: Colors + .white, + borderRadius: + BorderRadius + .circular( + 8), + ), + width: double + .infinity, + child: Padding( + padding: EdgeInsetsDirectional + .fromSTEB( + 35.rpx, + 0, + 35.rpx, + 0), + child: Row( + mainAxisSize: + MainAxisSize + .max, + mainAxisAlignment: + MainAxisAlignment + .spaceBetween, + children: [ + Expanded( + child: + Container( + child: + Align( + alignment: + AlignmentDirectional(-1, 0), + child: + TextFormField( + onChanged: (value) { + controller.model.device_id = value; + }, + autofocus: false, + obscureText: false, + decoration: InputDecoration( + contentPadding: EdgeInsets.all(0), + isDense: true, + labelStyle: TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + ), + hintStyle: TextStyle( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc4, + ), + enabledBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Color(0x00000000), + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + errorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + focusedErrorBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.red, + width: 1.rpx, + ), + borderRadius: BorderRadius.circular(8.rpx), + ), + filled: false, + fillColor: Colors.white, + ), + style: TextStyle( + fontFamily: 'Readex Pro', + letterSpacing: 0, + color: Colors.black, + fontSize: 26.rpx, + ), + // cursorColor: + // Colors.black, + // validator: _model + // .textControllerValidator + // .asValidator(context), + ), + ), + ), + ), + ], ), - child: Padding( - padding: EdgeInsets.only(left: 26.rpx), - child: Align( - alignment: Alignment.centerLeft, - child: Obx(() => Text( - controller.model.device_id ?? '', - style: TextStyle(fontSize: 26.rpx, color: Colors.black), - ))))), + ), + ), ), ].divide(SizedBox( width: 26.rpx)), @@ -1491,6 +2165,10 @@ class ApplyRepairPage extends GetView { "mac": controller.model.device_id, "desc": controller.model.desc, "img": controller.model.issue_img, + "category": + controller.model.device_category, + "series": controller.model.device_series, + "name": controller.model.device_name } ], }; @@ -1502,9 +2180,8 @@ class ApplyRepairPage extends GetView { onSuccess: (res) { TopSlideNotification.show(context, text: res.msg!); - + repairListController.getRepairList(); Get.toNamed("/applyRepairSuccess"); - // repairListController.getRepairList(); }, onFailure: (res) { TopSlideNotification.show(context, @@ -1590,8 +2267,8 @@ class ApplyRepairPage extends GetView { String message = ""; if (controller.model.device_type == null || - controller.model.device_type == 0) { - message = '请选择设备类型!'; + controller.model.device_series!.isEmpty) { + message = '请输入设备系列!'; return message; } if (controller.model.device_category == null || diff --git a/lib/pages/mh_page/edit_address_page.dart b/lib/pages/mh_page/edit_address_page.dart index 8c17b48..c333924 100644 --- a/lib/pages/mh_page/edit_address_page.dart +++ b/lib/pages/mh_page/edit_address_page.dart @@ -495,6 +495,7 @@ class EditAddressPage extends GetView ), ), ), + ].divide(const SizedBox( width: 15)), ), diff --git a/lib/pages/mh_page/experience_store_page.dart b/lib/pages/mh_page/experience_store_page.dart index d9068be..760e8b9 100644 --- a/lib/pages/mh_page/experience_store_page.dart +++ b/lib/pages/mh_page/experience_store_page.dart @@ -39,7 +39,7 @@ class _ExperienceStorePageState extends State { super.initState(); Timer(Duration(milliseconds: 100), () async { controller.resetParm(); - await weatherModelController.determinePosition(); + // await weatherModelController.determinePosition(); controller.page = 0; controller.getData(); scrollController.addListener(() { diff --git a/lib/pages/mh_page/new_mine_page.dart b/lib/pages/mh_page/new_mine_page.dart index df17443..d2db9f8 100644 --- a/lib/pages/mh_page/new_mine_page.dart +++ b/lib/pages/mh_page/new_mine_page.dart @@ -1,3 +1,5 @@ +import 'dart:ffi'; + import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -24,43 +26,43 @@ class _MinePageState extends State { GlobalController globalController = Get.find(); UserInfoController userInfoController = Get.find(); ThemeController themeController = Get.find(); - final GlobalKey _textKey = GlobalKey(); + // final GlobalKey _textKey = GlobalKey(); - double _textHalfWidth = 0; - @override - void initState() { - super.initState(); + // double _textHalfWidth = 0; + // @override + // void initState() { + // super.initState(); - final login = userInfoController.model.login; - String text; + // final login = userInfoController.model.login; + // String text; - if (login == 0) { - text = '未命名'.tr; - } else { - final nickname = userInfoController.model.user?.nick_name; - text = (nickname != null && nickname.isNotEmpty) ? nickname : '未命名'.tr; - } + // if (login == 0) { + // text = '未命名'.tr; + // } else { + // final nickname = userInfoController.model.user?.nick_name; + // text = (nickname != null && nickname.isNotEmpty) ? nickname : '未命名'.tr; + // } - _calculateTextHalfWidth(text); - } + // _calculateTextHalfWidth(text); + // } - void _calculateTextHalfWidth(String text) { - final textSpan = TextSpan( - text: text, - style: TextStyle( - fontSize: 30.rpx, - height: 1, - ), - ); - final textPainter = TextPainter( - text: textSpan, - textDirection: ui.TextDirection.ltr, - ); - textPainter.layout(); // 计算文本宽度 - setState(() { - _textHalfWidth = textPainter.width / 2; - }); - } + // void _calculateTextHalfWidth(String text) { + // final textSpan = TextSpan( + // text: text, + // style: TextStyle( + // fontSize: 30.rpx, + // height: 1, + // ), + // ); + // final textPainter = TextPainter( + // text: textSpan, + // textDirection: ui.TextDirection.ltr, + // ); + // textPainter.layout(); // 计算文本宽度 + // setState(() { + // _textHalfWidth = textPainter.width / 2; + // }); + // } @override Widget build(BuildContext context) { @@ -128,139 +130,144 @@ class _MinePageState extends State { mainAxisSize: MainAxisSize.max, children: [ Padding( - padding: EdgeInsetsDirectional.only(top: 30.rpx), - child: Container( - width: 120.rpx, - height: 120.rpx, - clipBehavior: Clip.antiAlias, - decoration: const BoxDecoration( - shape: BoxShape.circle, - ), - child: login == 1 - ? (userInfoController.model.user!.avatar == null || - userInfoController - .model.user!.avatar!.isEmpty - ? Image.asset( - "assets/images/mine_avatar.png", - fit: BoxFit.cover, - ) - : Image.network( - userInfoController.model.user!.avatar!, - fit: BoxFit.cover, - )) - : Image.asset( - "assets/images/mine_avatar.png", - fit: BoxFit.cover, - ), - ), - ), - Padding( - padding: EdgeInsetsDirectional.only(top: 19.rpx), - child: Container( - width: double.infinity, - decoration: const BoxDecoration(), - child: Stack( - alignment: Alignment.center, // 使子组件在Stack中居中 + padding: EdgeInsets.only( + top: 30.rpx, left: 60.rpx, bottom: 70.rpx), + child: Row( children: [ - Obx(() { - return getUserInfo(userInfoController); - }), - Positioned( - left: MediaQuery.of(context).size.width / 2 + - _textHalfWidth + - 30.rpx, - top: -10.rpx, - child: ClickableContainer( - backgroundColor: Colors.transparent, - highlightColor: const Color(0xFF055466), - padding: EdgeInsets.zero, - onTap: () async { - if (userInfoController.model.login == - null || - userInfoController.model.login == 0) { - TopSlideNotification.show( - context, - text: "必须登录提示".tr, - textColor: - themeController.currentColor.sc9, - ); - Get.toNamed("/loginPage"); - return; - } - await Get.toNamed("/editUserInfoPage"); - await userInfoController.getUserInfo(); - userInfoController.updateAll(); - final login = - userInfoController.model.login; - String text; - - if (login == 0) { - text = '未命名'.tr; - } else { - final nickname = userInfoController - .model.user?.nick_name; - text = (nickname != null && - nickname.isNotEmpty) - ? nickname - : '未命名'.tr; - } - _calculateTextHalfWidth(text); - }, - child: Container( - width: 42.rpx, - height: 42.rpx, - alignment: Alignment.center, - child: SvgPicture.asset( - 'assets/images/edit.svg', - color: Colors.white, - width: 18.rpx, - height: 18.rpx, + Container( + width: 120.rpx, + height: 120.rpx, + clipBehavior: Clip.antiAlias, + decoration: const BoxDecoration( + shape: BoxShape.circle, + ), + child: login == 1 + ? (userInfoController.model.user!.avatar == + null || + userInfoController + .model.user!.avatar!.isEmpty + ? Image.asset( + "assets/images/default_avatar.png", + fit: BoxFit.cover, + ) + : Image.network( + userInfoController + .model.user!.avatar!, + fit: BoxFit.cover, + )) + : Image.asset( + "assets/images/default_avatar.png", + fit: BoxFit.cover, ), - )), ), - ], - ), - ), - ), + Flexible( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text( + login == 1 + ? (userInfoController + .model.user!.nick_name ?? + '未命名'.tr) + : "未命名".tr, + style: TextStyle( + fontFamily: 'Inter', + color: themeController.currentColor.sc3, + fontSize: + AppConstants().title_text_fontSize, + letterSpacing: 0.0, + ), + ), + ClickableContainer( + backgroundColor: Colors.transparent, + highlightColor: const Color(0xFF055466), + padding: EdgeInsets.zero, + onTap: () async { + if (userInfoController.model.login == + null || + userInfoController.model.login == + 0) { + TopSlideNotification.show( + context, + text: "必须登录提示".tr, + textColor: themeController + .currentColor.sc9, + ); + Get.toNamed("/loginPage"); + return; + } + await Get.toNamed( + "/editUserInfoPage"); + await userInfoController + .getUserInfo(); + userInfoController.updateAll(); + final login = + userInfoController.model.login; + String text; - Container( - margin: EdgeInsets.only( - left: 30.rpx, right: 30.rpx, top: 94.rpx), - child: Text( - '对已绑定的智能设备进行个性化配置,以获得更好的体验', - style: TextStyle( - fontSize: 26.rpx, - color: const Color(0XFF929699), - height: 1), + if (login == 0) { + text = '未命名'.tr; + } else { + final nickname = userInfoController + .model.user?.nick_name; + text = (nickname != null && + nickname.isNotEmpty) + ? nickname + : '未命名'.tr; + } + }, + child: Container( + width: 42.rpx, + height: 42.rpx, + alignment: Alignment.center, + child: SvgPicture.asset( + 'assets/images/edit.svg', + color: Colors.white, + width: 18.rpx, + height: 18.rpx, + ), + )), + ].divide(SizedBox( + width: 20.rpx, + )), + ), + Text( + login == 1 + ? (() { + final user = + userInfoController.model.user!; + if (user.email != null && + user.email!.isNotEmpty) { + return user.email!; + } else if (user.phone != null && + user.phone!.isNotEmpty) { + return MyUtils.hidePhoneNumber( + user.phone!); + } else { + return "微信用户".tr; + } + })() + : "未知数据".tr, + style: TextStyle( + fontFamily: 'Inter', + color: themeController.currentColor.sc4, + fontSize: + AppConstants().normal_text_fontSize, + letterSpacing: 0.0, + ), + ), + ], + )) + ].divide(SizedBox( + width: 30.rpx, + )), )), - Padding( - padding: EdgeInsets.only(top: 46.rpx, bottom: 109.rpx), - child: ElevatedButton( - onPressed: () { - Get.toNamed("/deviceListPage"); - }, - style: ElevatedButton.styleFrom( - tapTargetSize: MaterialTapTargetSize.shrinkWrap, - backgroundColor: const Color(0XFF85F5FF), - side: const BorderSide(color: Color(0XFF74DAE5)), - // foregroundColor: Colors.cyanAccent, - minimumSize: Size(260.rpx, 60.rpx), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(6), - ), - ), - child: Text( - '我的智能设备'.tr, - style: TextStyle( - fontSize: 26.rpx, color: const Color(0xFF003058)), - ), - ), - ), - // 使用 Expanded 让滚动区域占据可用空间 - // SizedBox(height: 109.rpx), + Expanded( child: Container( - margin: const EdgeInsets.symmetric(horizontal: 16), + margin: EdgeInsets.symmetric(horizontal: 30.rpx), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12), color: Colors.transparent, @@ -269,9 +276,12 @@ class _MinePageState extends State { // 直接使用 SingleChildScrollView child: Column( children: [ + _buildListTile('assets/img/icon/mydevice.svg', + "我的智能设备", "我绑定或关联的智能床,智能床垫等智能设备", + showTopLine: true, path: "/deviceListPage"), _buildListTile('assets/img/icon/order.svg', '我的订单', '快捷查看我在网上的订单记录', - showTopLine: true, path: ""), + path: ""), _buildListTile('assets/img/icon/store.svg', '门店体验', '如果想免费体验智能设备,可在此进行提前预约', path: "/experienceStorePage"), diff --git a/lib/pages/mh_page/repair_history_widget.dart b/lib/pages/mh_page/repair_history_widget.dart index b6f054f..49ac4a5 100644 --- a/lib/pages/mh_page/repair_history_widget.dart +++ b/lib/pages/mh_page/repair_history_widget.dart @@ -63,8 +63,8 @@ class RepairHistoryWidget extends GetView { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - repairListController.model.repairList[index]['device'][0] - ['mac'] ?? + repairListController.model.repairList[index]['device'][0]['name'] + ?? '', style: TextStyle( color: Colors.white, fontSize: 30.rpx, height: 1), diff --git a/lib/pages/mh_page/repair_list.dart b/lib/pages/mh_page/repair_list.dart index 81eb002..5481b45 100644 --- a/lib/pages/mh_page/repair_list.dart +++ b/lib/pages/mh_page/repair_list.dart @@ -17,29 +17,29 @@ class DeviceRepairPage extends GetView { // final ScrollController scrollController = ScrollController(); final RepairListController controller = Get.find(); - // DeviceRepairPage() { - // controller.model.limit = AppConstants.limit; - // controller.model.offset = 0; - // controller.model.isLoading = false; - // controller.model.hasMore = true; - // controller.model.repairList.clear(); - // controller.initData(); - // Get.put(RepairListController()); + DeviceRepairPage() { + // controller.model.offset = 0; + // controller.model.isLoading = false; + // controller.model.hasMore = true; + controller.model.repairList.clear(); + controller.initData(); + Get.put(RepairListController()); - // scrollController.addListener(() { - // if (scrollController.position.pixels == - // scrollController.position.maxScrollExtent && - // controller.model.hasMore) { - // controller.initData(); - // controller.updateAll(); - // } - // }); - // } + scrollController.addListener(() { + if (scrollController.position.pixels == + scrollController.position.maxScrollExtent && + controller.model.hasMore) { + controller.initData(); + controller.updateAll(); + } + }); + } // final List mockData @override Widget build(BuildContext context) { + return LayoutBuilder(builder: (context, cc) { bodysize = cc; return GestureDetector( @@ -202,9 +202,7 @@ class DeviceRepairPage extends GetView { ), ), )), - SizedBox(height: 235.rpx), - // 报修历史标题 Container( width: double.infinity, @@ -214,7 +212,6 @@ class DeviceRepairPage extends GetView { fontSize: 30.rpx, height: 1)), ), - SizedBox(height: 32.rpx), // Obx(() { // return Visibility( @@ -267,4 +264,6 @@ class DeviceRepairPage extends GetView { )); }); } + + } diff --git a/lib/pages/sleep_report/component/MonthDataWidget.dart b/lib/pages/sleep_report/component/MonthDataWidget.dart index 75a62c4..334c1ee 100644 --- a/lib/pages/sleep_report/component/MonthDataWidget.dart +++ b/lib/pages/sleep_report/component/MonthDataWidget.dart @@ -88,7 +88,7 @@ Widget MonthDataWidget( showLabel: sleepReport['scoreList']['type'], ), SleepCard( - sleepReport: sleepReport, + sleepReport: sleepReport['cwl'], highlightItem: data['itemName'], ), IndicatorCompareCard( diff --git a/lib/pages/sleep_report/new_sleep_report_page.dart b/lib/pages/sleep_report/new_sleep_report_page.dart index b9ef331..c580b8d 100644 --- a/lib/pages/sleep_report/new_sleep_report_page.dart +++ b/lib/pages/sleep_report/new_sleep_report_page.dart @@ -1065,7 +1065,7 @@ class _NewSleepReportPageState extends State { child: Container( width: 30.rpx, height: 30.rpx, - child: SvgPicture.asset('assets/img/icon/arrow_right.svg', + child: SvgPicture.asset('assets/img/icon/arrow_right1.svg', color: isRightLimit.value ? Color(0xFF929699) : Color(0xFFFFFFFF)),