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)),