报修 房间选择

This commit is contained in:
czz
2025-07-21 16:50:57 +08:00
parent 32ce75d65f
commit 210617c6ff
17 changed files with 507 additions and 912 deletions

View File

@@ -212,5 +212,6 @@
"本月平均分": "本月平均分", "本月平均分": "本月平均分",
"每日得分": "每日得分", "每日得分": "每日得分",
"每日得分介绍": "每日得分介绍", "每日得分介绍": "每日得分介绍",
"与上月对比": "与上月对比" "与上月对比": "与上月对比",
"设备状态":"设备状态"
} }

View File

@@ -55,7 +55,7 @@ class _SleepDataModuleWidgetState extends State<SleepDataModuleWidget> {
var report = sleepReportController.sleepReport; var report = sleepReportController.sleepReport;
List<Map<String, dynamic>> levelGroups = []; List<Map<String, dynamic>> levelGroups = [];
if (widget.sleepReportData != null) { if (widget.sleepReportData != null) {
report = widget.sleepReportData; report.value = widget.sleepReportData;
} }
if (report != null) { if (report != null) {
var colorMap = var colorMap =

View File

@@ -23,9 +23,7 @@ class ImgPreviewWidget extends GetView {
constraints: BoxConstraints( constraints: BoxConstraints(
minHeight: 140, minHeight: 140,
), ),
decoration: BoxDecoration( decoration: BoxDecoration(),
color: Colors.white,
),
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
@@ -35,7 +33,7 @@ class ImgPreviewWidget extends GetView {
width: MediaQuery.sizeOf(context).width, width: MediaQuery.sizeOf(context).width,
height: MediaQuery.sizeOf(context).height * 0.116, height: MediaQuery.sizeOf(context).height * 0.116,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Color(0xFFF3F5F6), color: Colors.transparent,
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
child: ClipRRect( child: ClipRRect(

View File

@@ -27,8 +27,7 @@ class SleepReportModel {
class SleepReportController extends GetControllerEx<SleepReportModel> { class SleepReportController extends GetControllerEx<SleepReportModel> {
Rx<DateTime?> selectedDate = Rx<DateTime?>(null); Rx<DateTime?> selectedDate = Rx<DateTime?>(null);
RxMap<String, dynamic> sleepReport = <String, dynamic>{}.obs; RxMap<String, dynamic> sleepReport = <String, dynamic>{}.obs;
RxBool isLoading = false.obs;
var isLoading = false.obs;
// 每种类型对应一份数据 // 每种类型对应一份数据

View File

@@ -920,7 +920,7 @@ Future<void> showTipDialog(
BuildContext context, BuildContext context,
Widget widget, { Widget widget, {
Color? backgroundColor, Color? backgroundColor,
Co List<Color>? colors,
}) { }) {
ThemeController themeController = Get.find(); ThemeController themeController = Get.find();
// BlueteethBindController blueteethBindController = Get.find(); // BlueteethBindController blueteethBindController = Get.find();
@@ -961,7 +961,8 @@ Future<void> showTipDialog(
onTap: () { onTap: () {
Get.back(); // 关闭对话框 Get.back(); // 关闭对话框
}, },
colors: [ colors: colors ??
[
themeController.currentColor.sc1, themeController.currentColor.sc1,
themeController.currentColor.sc2, themeController.currentColor.sc2,
], ],
@@ -999,9 +1000,6 @@ Future<void> showTipDialog(
); );
} }
Future<void> showUnBindTipDialog( Future<void> showUnBindTipDialog(
BuildContext context, BuildContext context,
Widget widget, { Widget widget, {

View File

@@ -111,6 +111,7 @@ class LanguagePage extends GetView<MHLanguageController> {
Widget _buildItem(BuildContext context, int index, MHLanguageModel model) { Widget _buildItem(BuildContext context, int index, MHLanguageModel model) {
return GestureDetector( return GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () { onTap: () {
controller.selectLanguage.value = model; controller.selectLanguage.value = model;
}, },

View File

@@ -129,7 +129,7 @@ class VitalWidget extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final String id = data['mac'] ?? '--'; final String id = data['mac'] ?? '--';
final int? timestamp = data['create_time']; final int? timestamp = data['status']['updateTime'];
final String time = (timestamp != null) final String time = (timestamp != null)
? DateFormat('yyyy-MM-dd HH:mm') ? DateFormat('yyyy-MM-dd HH:mm')
.format(DateTime.fromMillisecondsSinceEpoch(timestamp)) .format(DateTime.fromMillisecondsSinceEpoch(timestamp))
@@ -215,7 +215,7 @@ class VitalWidget extends StatelessWidget {
width: MediaQuery.sizeOf(context).width * 0.14, width: MediaQuery.sizeOf(context).width * 0.14,
constraints: BoxConstraints(minWidth: 106.rpx), constraints: BoxConstraints(minWidth: 106.rpx),
child: Text( child: Text(
"设备状态", "设备状态".tr,
style: TextStyle( style: TextStyle(
color: stringToColor("#929699"), color: stringToColor("#929699"),
fontSize: 26.rpx, fontSize: 26.rpx,
@@ -245,7 +245,7 @@ class VitalWidget extends StatelessWidget {
text: TextSpan( text: TextSpan(
text: "信号强度".tr, // 文本前缀部分 text: "信号强度".tr, // 文本前缀部分
style: TextStyle( style: TextStyle(
color: themeController.currentColor.sc3, color: Colors.black,
fontSize: fontSize:
AppConstants().title_text_fontSize, AppConstants().title_text_fontSize,
), ),
@@ -264,6 +264,12 @@ class VitalWidget extends StatelessWidget {
), ),
), ),
), ),
backgroundColor: Color(0xFFFFFFFF),
colors: [
Color(0XFF1592AA),
Color(0xFF0C83A7),
Color(0xFF006FA3)
],
); );
}, },
@@ -290,7 +296,7 @@ class VitalWidget extends StatelessWidget {
text: TextSpan( text: TextSpan(
text: "是否在床".tr, // 文本前缀部分 text: "是否在床".tr, // 文本前缀部分
style: TextStyle( style: TextStyle(
color: themeController.currentColor.sc3, color: Colors.black,
fontSize: fontSize:
AppConstants().title_text_fontSize, AppConstants().title_text_fontSize,
), ),
@@ -309,6 +315,12 @@ class VitalWidget extends StatelessWidget {
), ),
), ),
), ),
backgroundColor: Color(0xFFFFFFFF),
colors: [
Color(0XFF1592AA),
Color(0xFF0C83A7),
Color(0xFF006FA3)
],
); );
}, },
child: SizedBox( child: SizedBox(
@@ -338,7 +350,7 @@ class VitalWidget extends StatelessWidget {
text: TextSpan( text: TextSpan(
text: "设备故障".tr, // 文本前缀部分 text: "设备故障".tr, // 文本前缀部分
style: TextStyle( style: TextStyle(
color: themeController.currentColor.sc9, color: Colors.black,
fontSize: fontSize:
AppConstants().title_text_fontSize, AppConstants().title_text_fontSize,
), ),
@@ -357,6 +369,12 @@ class VitalWidget extends StatelessWidget {
), ),
), ),
), ),
backgroundColor: Color(0xFFFFFFFF),
colors: [
Color(0XFF1592AA),
Color(0xFF0C83A7),
Color(0xFF006FA3)
],
); );
}, },
child: SizedBox( child: SizedBox(
@@ -404,7 +422,7 @@ class VitalWidget extends StatelessWidget {
text: TextSpan( text: TextSpan(
text: "网络状态".tr, // 文本前缀部分 text: "网络状态".tr, // 文本前缀部分
style: TextStyle( style: TextStyle(
color: themeController.currentColor.sc3, color: Colors.black,
fontSize: fontSize:
AppConstants().title_text_fontSize, AppConstants().title_text_fontSize,
), ),
@@ -424,6 +442,12 @@ class VitalWidget extends StatelessWidget {
), ),
), ),
), ),
backgroundColor: Color(0xFFFFFFFF),
colors: [
Color(0XFF1592AA),
Color(0xFF0C83A7),
Color(0xFF006FA3)
],
); );
}, },
child: SizedBox( child: SizedBox(

View File

@@ -702,388 +702,7 @@ class ApplyRepairPage extends GetView<ApplyRepairController> {
), ),
), ),
// 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( Flexible(
child: Container( child: Container(
width: MediaQuery.sizeOf( width: MediaQuery.sizeOf(

View File

@@ -277,9 +277,9 @@ class _MinePageState extends State<NewMinePage> {
_buildListTile('assets/img/icon/mydevice.svg', _buildListTile('assets/img/icon/mydevice.svg',
"我的智能设备", "我绑定或关联的智能床,智能床垫等智能设备", "我的智能设备", "我绑定或关联的智能床,智能床垫等智能设备",
showTopLine: true, path: "/deviceListPage"), showTopLine: true, path: "/deviceListPage"),
_buildListTile('assets/img/icon/order.svg', // _buildListTile('assets/img/icon/order.svg',
'我的订单', '快捷查看我在网上的订单记录', // '我的订单', '快捷查看我在网上的订单记录',
path: ""), // path: ""),
_buildListTile('assets/img/icon/store.svg', _buildListTile('assets/img/icon/store.svg',
'门店体验', '如果想免费体验智能设备,可在此进行提前预约', '门店体验', '如果想免费体验智能设备,可在此进行提前预约',
path: "/experienceStorePage"), path: "/experienceStorePage"),

View File

@@ -23,52 +23,7 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// controller.model.applyRepairModel = ApplyRepairModel() List list = data['flow'];
// ..id = 1001
// ..apply_name = '张三'
// ..tel = '13812345678'
// ..desc = '床垫传感器失灵,无法监测心率和呼吸'
// ..create_time = DateTime.parse('2025-05-01 10:00:00')
// ..device_type = 1
// ..device_category = 'BY-H'
// ..device_id = 'BD202505011001'
// ..device_name = '智能床垫 BY-H 型号'
// ..issue_img = [
// 'https://example.com/img1.jpg',
// 'https://example.com/img2.jpg'
// ]
// ..imagesLImit = 3
// ..img_bucket = 'mianhuatang_repair'
// ..status = '待处理'
// ..select_device = '床垫/BY-H/智能床垫'
// ..device_list = ['床垫/BY-H/智能床垫', '床垫/BY-A/智能床垫', '床垫/BY-C/智能床垫']
// ..score = null
// ..score_time = null
// ..messageType = 1
// ..repairId = 1001;
controller.model.repairProcessList = [
RepairProcessModel()
..status = '申请提交'
..create_time = DateTime.parse('2025-05-01 10:05:00')
..desc = '用户提交了维修申请'
..record_id = 1001
..deal_user = null,
RepairProcessModel()
..status = '客服受理'
..create_time = DateTime.parse('2025-05-01 10:20:00')
..desc = '客服已联系用户确认问题'
..record_id = 1001
..deal_user = 2001,
RepairProcessModel()
..status = '维修完成'
..create_time = DateTime.parse('2025-05-02 15:30:00')
..desc = '维修人员完成修复,等待用户确认'
..record_id = 1001
..deal_user = 3001,
];
final List events = controller.model.repairProcessList;
return LayoutBuilder(builder: (context, cc) { return LayoutBuilder(builder: (context, cc) {
bodysize = cc; bodysize = cc;
return WillPopScope( return WillPopScope(
@@ -156,7 +111,7 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
child: Text( child: Text(
// 'SWES01号智能一键入眠床', // 'SWES01号智能一键入眠床',
data['device'][0]['name'] ?? data['device'][0]['name'] ??
'未命名', '-',
style: TextStyle( style: TextStyle(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
fontSize: 30.rpx, fontSize: 30.rpx,
@@ -171,9 +126,9 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
-1, 0), -1, 0),
child: Text( child: Text(
'系列:' + '系列:' +
(data['device'][0][ (data['device'][0]
'device_category'] ?? ['category'] ??
'未命名'), '-'),
style: TextStyle( style: TextStyle(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
color: color:
@@ -188,13 +143,10 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
const AlignmentDirectional( const AlignmentDirectional(
-1, 0), -1, 0),
child: Text( child: Text(
'型:' + '' +
getDeviceTypeName( (data['device'][0]
controller ['series'] ??
.model '-'),
.applyRepairModel
?.device_type,
),
style: TextStyle( style: TextStyle(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
color: color:
@@ -210,11 +162,8 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
-1, 0), -1, 0),
child: Text( child: Text(
'序列号:' + '序列号:' +
(controller (data['device'][0]['mac'] ??
.model '-'),
.applyRepairModel!
.device_id ??
'未命名'),
style: TextStyle( style: TextStyle(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
color: color:
@@ -229,13 +178,7 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
const AlignmentDirectional( const AlignmentDirectional(
-1, 0), -1, 0),
child: Text( child: Text(
'报修单号:' + '报修单号:' + (data['_id'] ?? '-'),
(controller
.model
.applyRepairModel!
.id
.toString() ??
'未命名'),
style: TextStyle( style: TextStyle(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
color: color:
@@ -251,9 +194,10 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
-1, 0), -1, 0),
child: Text( child: Text(
'提交时间:' + '提交时间:' +
(MyUtils.formatDateTimeDay( (MyUtils
data['device'][0] .timestampToDateString(
['create_time']!)), data[
'create_time']!)),
style: TextStyle( style: TextStyle(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
color: color:
@@ -301,14 +245,14 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
child: Container( child: Container(
width: 100, width: 100,
height: 100, height: 100,
child: Obx(() => ListView( child: ListView(
shrinkWrap: true, shrinkWrap: true,
scrollDirection: scrollDirection:
Axis.horizontal, Axis.horizontal,
children: getImage( children: getImage(
controller data['device']
.model [0]
.applyRepairModel!) ['img']!)
.divide( .divide(
const SizedBox( const SizedBox(
width: 12, width: 12,
@@ -316,7 +260,7 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
.addToStart( .addToStart(
const SizedBox( const SizedBox(
width: 0, width: 0,
))))), )))),
)), )),
] ]
.divide(const SizedBox(height: 5)) .divide(const SizedBox(height: 5))
@@ -350,9 +294,9 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
shrinkWrap: true, // 让ListView根据内容自适应高度 shrinkWrap: true, // 让ListView根据内容自适应高度
physics: physics:
const NeverScrollableScrollPhysics(), // 禁用内部滚动,交由外部滚动视图处理 const NeverScrollableScrollPhysics(), // 禁用内部滚动,交由外部滚动视图处理
itemCount: events.length, itemCount: list.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
bool isLast = index == events.length - 1; bool isLast = index == list.length - 1;
return TimelineTile( return TimelineTile(
isFirst: index == 0, isFirst: index == 0,
isLast: isLast, isLast: isLast,
@@ -360,7 +304,7 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
alignment: TimelineAlign.start, // 线条左对齐 alignment: TimelineAlign.start, // 线条左对齐
lineXY: 0.5, // 线条和圆圈相对位置 lineXY: 0.5, // 线条和圆圈相对位置
indicatorStyle: IndicatorStyle( indicatorStyle: IndicatorStyle(
width: 15, // 圆圈的宽度 width: 15.rpx, // 圆圈的宽度
padding: const EdgeInsets.all( padding: const EdgeInsets.all(
1), // 避免线条进入圆圈内部 1), // 避免线条进入圆圈内部
indicatorXY: 0.2, // 圆圈居中 indicatorXY: 0.2, // 圆圈居中
@@ -389,302 +333,300 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
endChild: Padding( endChild: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: RepairStatusWidget( child: RepairStatusWidget(
index: index, data: data['flow'][index]),
repairInfoController: controller,
),
), ),
); );
}, },
), ),
), ),
Obx(() { // Obx(() {
if (RepairStatus.completed == // if (RepairStatus.completed ==
controller // controller
.model.applyRepairModel!.status && // .model.applyRepairModel!.status &&
controller.model.applyRepairModel!.score == // controller.model.applyRepairModel!.score ==
null) { // null) {
return Align( // return Align(
alignment: const AlignmentDirectional(1, 0), // alignment: const AlignmentDirectional(1, 0),
child: Padding( // child: Padding(
padding: EdgeInsetsDirectional.fromSTEB( // padding: EdgeInsetsDirectional.fromSTEB(
34.rpx, 66.rpx, 0, 48.rpx), // 34.rpx, 66.rpx, 0, 48.rpx),
child: Container( // child: Container(
width: 61, // width: 61,
height: // height:
MediaQuery.sizeOf(context).height * // MediaQuery.sizeOf(context).height *
0.03, // 0.03,
constraints: const BoxConstraints( // constraints: const BoxConstraints(
minHeight: 24, // minHeight: 24,
), // ),
decoration: const BoxDecoration(), // decoration: const BoxDecoration(),
child: FFButtonWidget( // child: FFButtonWidget(
onPressed: () { // onPressed: () {
Get.toNamed("/scorePage"); // Get.toNamed("/scorePage");
}, // },
text: '待评价', // text: '待评价',
options: FFButtonOptions( // options: FFButtonOptions(
height: 40, // height: 40,
padding: const EdgeInsetsDirectional // padding: const EdgeInsetsDirectional
.fromSTEB(0, 0, 0, 0), // .fromSTEB(0, 0, 0, 0),
iconPadding: // iconPadding:
const EdgeInsetsDirectional // const EdgeInsetsDirectional
.fromSTEB(0, 0, 0, 0), // .fromSTEB(0, 0, 0, 0),
// color: FlutterFlowTheme.of(context) // // color: FlutterFlowTheme.of(context)
// .secondaryBackground, // // .secondaryBackground,
color: Colors.white, // color: Colors.white,
textStyle: TextStyle( // textStyle: TextStyle(
fontFamily: 'Readex Pro', // fontFamily: 'Readex Pro',
// color: Color(0xFF333333), // // color: Color(0xFF333333),
// color: stringToColor("#D3B684"), // // color: stringToColor("#D3B684"),
color: stringToColor("#117EFD"), // color: stringToColor("#117EFD"),
fontSize: 11, // fontSize: 11,
letterSpacing: 0, // letterSpacing: 0,
), // ),
elevation: 0, // elevation: 0,
borderSide: BorderSide( // borderSide: BorderSide(
// color: Color(0xFFC8CBD2), // // color: Color(0xFFC8CBD2),
// color: stringToColor("#D3B684"), // // color: stringToColor("#D3B684"),
color: stringToColor("#117EFD"), // color: stringToColor("#117EFD"),
width: 1, // width: 1,
), // ),
borderRadius: // borderRadius:
BorderRadius.circular(50), // BorderRadius.circular(50),
), // ),
), // ),
), // ),
), // ),
); // );
} // }
return Container(); // return Container();
}), // }),
Obx(() { // Obx(() {
if (RepairStatus.completed == // if (RepairStatus.completed ==
controller // controller
.model.applyRepairModel!.status && // .model.applyRepairModel!.status &&
controller.model.applyRepairModel!.score != // controller.model.applyRepairModel!.score !=
null) { // null) {
return Padding( // return Padding(
padding: EdgeInsetsDirectional.fromSTEB( // padding: EdgeInsetsDirectional.fromSTEB(
0, 0, 0, 10.rpx), // 0, 0, 0, 10.rpx),
child: Container( // child: Container(
width: MediaQuery.sizeOf(context).width, // width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration( // decoration: BoxDecoration(
color: Colors.white, //true // color: Colors.white, //true
borderRadius: // borderRadius:
BorderRadius.circular(16.rpx), // BorderRadius.circular(16.rpx),
), // ),
child: Padding( // child: Padding(
padding: const EdgeInsetsDirectional // padding: const EdgeInsetsDirectional
.fromSTEB(0, 0, 0, 0), // .fromSTEB(0, 0, 0, 0),
child: Container( // child: Container(
decoration: const BoxDecoration(), // decoration: const BoxDecoration(),
child: Column( // child: Column(
mainAxisSize: MainAxisSize.max, // mainAxisSize: MainAxisSize.max,
children: [ // children: [
Padding( // Padding(
padding: // padding:
const EdgeInsetsDirectional // const EdgeInsetsDirectional
.fromSTEB( // .fromSTEB(
17, 0, 30, 10), // 17, 0, 30, 10),
child: Container( // child: Container(
width: // width:
MediaQuery.sizeOf(context) // MediaQuery.sizeOf(context)
.width, // .width,
height: 30, // height: 30,
decoration: // decoration:
const BoxDecoration(), // const BoxDecoration(),
child: Align( // child: Align(
alignment: // alignment:
const AlignmentDirectional( // const AlignmentDirectional(
-1, 0), // -1, 0),
child: Text( // child: Text(
'评价状态', // '评价状态',
style: TextStyle( // style: TextStyle(
fontFamily: // fontFamily:
'Readex Pro', // 'Readex Pro',
color: const Color( // color: const Color(
0xFF333333), // 0xFF333333),
fontSize: 15, // fontSize: 15,
letterSpacing: 0.0, // letterSpacing: 0.0,
), // ),
), // ),
), // ),
), // ),
), // ),
Align( // Align(
alignment: // alignment:
const AlignmentDirectional( // const AlignmentDirectional(
-1, 0), // -1, 0),
child: Padding( // child: Padding(
padding: EdgeInsetsDirectional // padding: EdgeInsetsDirectional
.fromSTEB( // .fromSTEB(
34.rpx, 0, 0, 0), // 34.rpx, 0, 0, 0),
child: Container( // child: Container(
width: MediaQuery.sizeOf( // width: MediaQuery.sizeOf(
context) // context)
.width, // .width,
constraints: // constraints:
const BoxConstraints( // const BoxConstraints(
minHeight: 24, // minHeight: 24,
), // ),
decoration: // decoration:
const BoxDecoration(), // const BoxDecoration(),
child: // Generated code for this Column Widget... // child: // Generated code for this Column Widget...
Column( // Column(
mainAxisSize: // mainAxisSize:
MainAxisSize.max, // MainAxisSize.max,
children: [ // children: [
Align( // Align(
alignment: // alignment:
const AlignmentDirectional( // const AlignmentDirectional(
-1, 0), // -1, 0),
child: Padding( // child: Padding(
padding: // padding:
EdgeInsetsDirectional // EdgeInsetsDirectional
.fromSTEB( // .fromSTEB(
0, // 0,
0, // 0,
0, // 0,
20.rpx), // 20.rpx),
child: Text( // child: Text(
// '2023-08-22 12:12:44', // // '2023-08-22 12:12:44',
MyUtils.formatDateTime( // MyUtils.formatDateTime(
controller // controller
.model // .model
.applyRepairModel! // .applyRepairModel!
.score_time!), // .score_time!),
style: TextStyle( // style: TextStyle(
fontFamily: // fontFamily:
'Readex Pro', // 'Readex Pro',
fontSize: // fontSize:
AppFontsize // AppFontsize
.normal_text_size, // .normal_text_size,
letterSpacing: // letterSpacing:
0.0, // 0.0,
), // ),
), // ),
), // ),
), // ),
Row( // Row(
mainAxisSize: // mainAxisSize:
MainAxisSize.max, // MainAxisSize.max,
children: [ // children: [
Align( // Align(
alignment: // alignment:
const AlignmentDirectional( // const AlignmentDirectional(
-1, 0), // -1, 0),
child: Padding( // child: Padding(
padding: // padding:
const EdgeInsetsDirectional // const EdgeInsetsDirectional
.fromSTEB( // .fromSTEB(
0, // 0,
0, // 0,
5, // 5,
0), // 0),
child: Text( // child: Text(
'已评价', // '已评价',
style: // style:
TextStyle( // TextStyle(
fontFamily: // fontFamily:
'Readex Pro', // 'Readex Pro',
fontSize: // fontSize:
AppFontsize // AppFontsize
.normal_text_size, // .normal_text_size,
letterSpacing: // letterSpacing:
0.0, // 0.0,
), // ),
), // ),
), // ),
), // ),
Icon( // Icon(
Icons.star, // Icons.star,
color: controller // color: controller
.model // .model
.applyRepairModel! // .applyRepairModel!
.score! >= // .score! >=
1 // 1
? stringToColor( // ? stringToColor(
"#F8AE00") // "#F8AE00")
: stringToColor( // : stringToColor(
"#D0D0D0"), // "#D0D0D0"),
size: 14, // size: 14,
), // ),
Icon( // Icon(
Icons.star, // Icons.star,
color: controller // color: controller
.model // .model
.applyRepairModel! // .applyRepairModel!
.score! >= // .score! >=
2 // 2
? stringToColor( // ? stringToColor(
"#F8AE00") // "#F8AE00")
: stringToColor( // : stringToColor(
"#D0D0D0"), // "#D0D0D0"),
size: 14, // size: 14,
), // ),
Icon( // Icon(
Icons.star, // Icons.star,
color: controller // color: controller
.model // .model
.applyRepairModel! // .applyRepairModel!
.score! >= // .score! >=
3 // 3
? stringToColor( // ? stringToColor(
"#F8AE00") // "#F8AE00")
: stringToColor( // : stringToColor(
"#D0D0D0"), // "#D0D0D0"),
size: 14, // size: 14,
), // ),
Icon( // Icon(
Icons.star, // Icons.star,
color: controller // color: controller
.model // .model
.applyRepairModel! // .applyRepairModel!
.score! >= // .score! >=
4 // 4
? stringToColor( // ? stringToColor(
"#F8AE00") // "#F8AE00")
: stringToColor( // : stringToColor(
"#D0D0D0"), // "#D0D0D0"),
size: 14, // size: 14,
), // ),
Icon( // Icon(
Icons.star, // Icons.star,
color: controller // color: controller
.model // .model
.applyRepairModel! // .applyRepairModel!
.score! >= // .score! >=
5 // 5
? stringToColor( // ? stringToColor(
"#F8AE00") // "#F8AE00")
: stringToColor( // : stringToColor(
"#D0D0D0"), // "#D0D0D0"),
size: 14, // size: 14,
), // ),
], // ],
), // ),
], // ],
), // ),
), // ),
), // ),
), // ),
] // ]
.divide( // .divide(
const SizedBox(height: 0)) // const SizedBox(height: 0))
.addToStart(const SizedBox( // .addToStart(const SizedBox(
height: 5, // height: 5,
)) // ))
.addToEnd(const SizedBox( // .addToEnd(const SizedBox(
height: 15, // height: 15,
)), // )),
), // ),
), // ),
), // ),
), // ),
); // );
} // }
return Container(); // return Container();
}), // }),
], ],
), ),
), ),
@@ -705,10 +647,10 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
}); });
} }
List<Widget> getImage(ApplyRepairModel applyRepairModel) { List<Widget> getImage(List<dynamic> imgurl) {
List<Widget> images = []; List<Widget> images = [];
ApplyRepairController controller = Get.find(); ApplyRepairController controller = Get.find();
applyRepairModel.issue_img!.forEach((element) async { imgurl!.forEach((element) async {
images.add( images.add(
Container( Container(
// height: 10, // height: 10,
@@ -716,27 +658,13 @@ class RepairHistoryListPage extends GetView<RepairInfoController> {
child: ImgPreviewWidget( child: ImgPreviewWidget(
imgUrl: element, imgUrl: element,
index: applyRepairModel.issue_img!.indexOf(element), index: imgurl!.indexOf(element),
applyRepairController: controller, applyRepairController: controller,
isDel: false, isDel: false,
), ),
), ),
); );
}); });
return images; return images;
} }
String getDeviceTypeName(int? type) {
switch (type) {
case 1:
return '体征检测设备';
case 2:
return '智能床';
case 3:
return '智能床垫';
default:
return '未知设备';
}
}
} }

View File

@@ -30,13 +30,13 @@ class RepairHistoryWidget extends GetView<RepairInfoController> {
highlightColor: Color(0XFF055466), highlightColor: Color(0XFF055466),
padding: EdgeInsets.only(top: 0), padding: EdgeInsets.only(top: 0),
onTap: () { onTap: () {
TopSlideNotification.show( // TopSlideNotification.show(
context, // context,
text: "功能开发中...", // text: "功能开发中...",
); // );
// Get.toNamed("/repairHistoryListPage", Get.toNamed("/repairHistoryListPage",
// arguments: repairListController.model.repairList[index]); arguments: repairListController.model.repairList[index]);
}, },
child: Container( child: Container(
// height: 119.rpx, // height: 119.rpx,
@@ -63,8 +63,8 @@ class RepairHistoryWidget extends GetView<RepairInfoController> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
repairListController.model.repairList[index]['device'][0]['name'] repairListController.model.repairList[index]['device']
?? [0]['name'] ??
'', '',
style: TextStyle( style: TextStyle(
color: Colors.white, fontSize: 30.rpx, height: 1), color: Colors.white, fontSize: 30.rpx, height: 1),

View File

@@ -1,116 +1,103 @@
import 'package:ef/ef.dart'; import 'package:ef/ef.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:vbvs_app/common/color/appColors.dart';
import 'package:vbvs_app/common/color/repair_status.dart';
import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/controller/mh_controller/repair_info_controller.dart';
import '../../common/color/appFontsize.dart';
class RepairStatusWidget extends GetView { class RepairStatusWidget extends GetView {
int index; Map data;
RepairInfoController repairInfoController; RepairStatusWidget({required this.data}) {}
RepairStatusWidget(
{required this.index, required this.repairInfoController}) {}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Padding( return Container(
padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 0),
child: Container(
width: MediaQuery.sizeOf(context).width, width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
// color: Colors.white,
),
child: Container(
width: MediaQuery.sizeOf(context).width,
decoration: BoxDecoration(
// color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Align( Text(
alignment: AlignmentDirectional(-1, 0),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 10),
child: Text(
// '2023-08-22 12:12:44', // '2023-08-22 12:12:44',
MyUtils.formatDateTime(repairInfoController MyUtils.timestampToDateString(data["create_time"]),
.model.repairProcessList[index].create_time!) ??
'未知时间',
style: TextStyle( style: TextStyle(
fontFamily: 'Readex Pro', fontFamily: 'Readex Pro',
fontSize: 26.rpx, fontSize: 21.rpx,
letterSpacing: 0, letterSpacing: 0,
color: index ==
repairInfoController
.model.repairProcessList.length -
1
? Colors.white
: Colors.white,
),
),
),
),
Align(
alignment: AlignmentDirectional(-1, 0),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(0, 0, 0, 10),
child: Text(
// '审核中',
repairInfoController
.model.repairProcessList[index].status ??
'未知状态',
style: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
color: repairInfoController
.model.repairProcessList[index].status ==
RepairStatus.pending
? AppColors().check_Color
: repairInfoController.model.repairProcessList[index]
.status ==
RepairStatus.approved ||
repairInfoController.model
.repairProcessList[index].status ==
'维修中'
? AppColors().repair_Color
: repairInfoController.model
.repairProcessList[index].status ==
RepairStatus.completed
? AppColors().finish_Color
: AppColors().unOp_Color, // 根据状态设置文字颜色
),
),
),
),
Align(
alignment: AlignmentDirectional(-1, 0),
child: Text(
// repairProcessModel.content ?? '未备注',
(repairInfoController
.model.repairProcessList[index].desc?.isEmpty ??
true)
? '未备注'
: repairInfoController
.model.repairProcessList[index].desc!,
style: TextStyle(
fontFamily: 'Readex Pro',
color: Colors.white, color: Colors.white,
fontSize: 20.rpx, // index ==
// repairInfoController
// .model.repairProcessList.length -
// 1
// ? Colors.white
// : Colors.white,
),
),
Text(
// '审核中',
mapStatusText(data['status']),
style: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0, letterSpacing: 0,
color: Colors.white,
// repairInfoController
// .model.repairProcessList[index].status ==
// RepairStatus.pending
// ? AppColors().check_Color
// : repairInfoController.model.repairProcessList[index]
// .status ==
// RepairStatus.approved ||
// repairInfoController.model
// .repairProcessList[index].status ==
// '维修中'
// ? AppColors().repair_Color
// : repairInfoController.model
// .repairProcessList[index].status ==
// RepairStatus.completed
// ? AppColors().finish_Color
// : AppColors().unOp_Color, // 根据状态设置文字颜色
), ),
), ),
),
// Align(
// alignment: AlignmentDirectional(-1, 0),
// child: Text(
// // repairProcessModel.content ?? '未备注',
// (repairInfoController
// .model.repairProcessList[index].desc?.isEmpty ??
// true)
// ? '未备注'
// : repairInfoController
// .model.repairProcessList[index].desc!,
// style: TextStyle(
// fontFamily: 'Readex Pro',
// color: Colors.white,
// fontSize: 20.rpx,
// letterSpacing: 0,
// ),
// ),
// ),
], ],
), ),
),
),
); );
} }
/// 状态码映射为文字描述
static String mapStatusText(int status) {
switch (status) {
case 1:
return '审核中';
case 2:
return '亩核通过';
case 3:
return '维修中';
case 4:
return '维修完成';
case 5:
return '已完成';
case 6:
return '已评价';
default:
return '未知状态';
}
}
} }

View File

@@ -19,12 +19,16 @@ class RoomPickerPage extends StatefulWidget {
class _RoomPickerPageState extends State<RoomPickerPage> { class _RoomPickerPageState extends State<RoomPickerPage> {
late Map<String, dynamic> editedData; late Map<String, dynamic> editedData;
RxList rooms = [].obs; RxList rooms = [].obs;
late FixedExtentScrollController scrollController;
DeviceListController deviceListController = Get.find(); DeviceListController deviceListController = Get.find();
int selectedIndex = 0;
Key key = Key(DateTime.now().toString());
@override @override
void initState() { void initState() {
super.initState(); super.initState();
editedData = Map.from(widget.data); // 创建副本 editedData = Map.from(widget.data);
getRoomList(); getRoomList();
scrollController = FixedExtentScrollController(initialItem: 0);
} }
getRoomList() async { getRoomList() async {
@@ -32,18 +36,34 @@ class _RoomPickerPageState extends State<RoomPickerPage> {
String serviceName = ServiceConstant.server_service; String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.room_list; String serviceApi = ServiceConstant.room_list;
String queryUrl = "$serviceAddress$serviceName$serviceApi"; String queryUrl = "$serviceAddress$serviceName$serviceApi";
requestWithLog(
await requestWithLog(
logTitle: '查询房间列表', logTitle: '查询房间列表',
method: MyHttpMethod.get, method: MyHttpMethod.get,
queryUrl: queryUrl, queryUrl: queryUrl,
onSuccess: (res) { onSuccess: (res) {
rooms.assignAll(res.data); rooms.assignAll(res.data);
setState(() => selectedIndex = 0); // 如果传入 roomName匹配对应索引
String? roomName = widget.data['roomName'];
if (roomName != null && roomName.isNotEmpty) {
int index = rooms.indexWhere((e) => e['name'] == roomName);
if (index != -1) {
selectedIndex = index;
} else {
selectedIndex = 0; // 找不到时默认选第一个
}
} else {
selectedIndex = 0;
}
scrollController =
FixedExtentScrollController(initialItem: selectedIndex);
setState(() {
key = Key(DateTime.now().toString());
}); // 更新 UI
}, },
); );
} }
int selectedIndex = 0;
BoxConstraints? bodysize; BoxConstraints? bodysize;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@@ -172,6 +192,8 @@ class _RoomPickerPageState extends State<RoomPickerPage> {
// 滚轮列表 // 滚轮列表
Obx( Obx(
() => ListWheelScrollView.useDelegate( () => ListWheelScrollView.useDelegate(
key: key,
controller: scrollController,
itemExtent: 120.rpx, itemExtent: 120.rpx,
perspective: 0.003, perspective: 0.003,
physics: const FixedExtentScrollPhysics(), physics: const FixedExtentScrollPhysics(),

View File

@@ -88,7 +88,7 @@ Widget MonthDataWidget(
showLabel: sleepReport['scoreList']['type'], showLabel: sleepReport['scoreList']['type'],
), ),
SleepCard( SleepCard(
sleepReport: sleepReport['cwl'], sleepReport: sleepReport,
highlightItem: data['itemName'], highlightItem: data['itemName'],
), ),
IndicatorCompareCard( IndicatorCompareCard(

View File

@@ -56,10 +56,16 @@ class SleepChartContainer extends StatelessWidget {
tipText, tipText,
style: TextStyle( style: TextStyle(
fontSize: 26.rpx, fontSize: 26.rpx,
color: themeController.currentColor.sc3, color: Colors.black,
), ),
), ),
), ),
backgroundColor: Color(0xFFFFFFFF),
colors: [
Color(0XFF1592AA),
Color(0xFF0C83A7),
Color(0xFF006FA3)
],
); );
}, },
child: Container( child: Container(

View File

@@ -55,10 +55,16 @@ class _TrendDataTablePageState extends State<TrendDataTablePage> {
widget.tipText, widget.tipText,
style: TextStyle( style: TextStyle(
fontSize: 26.rpx, fontSize: 26.rpx,
color: themeController.currentColor.sc3, color: Colors.black,
), ),
), ),
), ),
backgroundColor: Color(0xFFFFFFFF),
colors: [
Color(0XFF1592AA),
Color(0xFF0C83A7),
Color(0xFF006FA3)
],
); );
}, },
child: Container( child: Container(

View File

@@ -67,9 +67,15 @@ class IndicatorCompareCard extends StatelessWidget {
tooltip!.tr, tooltip!.tr,
style: TextStyle( style: TextStyle(
fontSize: 26.rpx, fontSize: 26.rpx,
color: themeController.currentColor.sc3, color: Colors.black,
), ),
), ),
backgroundColor: Color(0xFFFFFFFF),
colors: [
Color(0XFF1592AA),
Color(0xFF0C83A7),
Color(0xFF006FA3)
],
); );
}, },
child: Container( child: Container(