设备报修
This commit is contained in:
@@ -41,8 +41,8 @@ class ApplyRepairPage extends GetView<ApplyRepairController> {
|
||||
Widget build(BuildContext context) {
|
||||
var tmpcontroller =
|
||||
FormFieldController<String>(controller.model.select_device);
|
||||
List<String> deviceTypeNames = ['床', '床垫'];
|
||||
List<String> deviceTypeIds = ['床', '床垫'];
|
||||
// List<String> deviceTypeNames = ['床', '床垫'];
|
||||
// List<String> deviceTypeIds = ['床', '床垫'];
|
||||
return LayoutBuilder(builder: (context, cc) {
|
||||
bodysize = cc;
|
||||
return GestureDetector(
|
||||
@@ -232,18 +232,33 @@ class ApplyRepairPage extends GetView<ApplyRepairController> {
|
||||
.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<String> deviceNames = deviceOptions
|
||||
.map((device) => device['name']!) // 用于显示的名称列表
|
||||
.toList();
|
||||
// List<String> deviceNames = deviceOptions
|
||||
// .map((device) => device['name']!) // 用于显示的名称列表
|
||||
// .toList();
|
||||
List<String>
|
||||
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<String> deviceIds = deviceOptions
|
||||
.map((device) => device['id']!) // 用于匹配的 ID 列表
|
||||
return name.isNotEmpty
|
||||
? '$name-MAC$mac'
|
||||
: '$type-MAC$mac';
|
||||
}).toList();
|
||||
|
||||
List<String> deviceMacs = deviceOptions
|
||||
.map((device) => device['mac']!) // 用于匹配的 ID 列表
|
||||
.toList();
|
||||
|
||||
return FlutterFlowDropDown<
|
||||
@@ -253,18 +268,36 @@ class ApplyRepairPage extends GetView<ApplyRepairController> {
|
||||
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<ApplyRepairController> {
|
||||
),
|
||||
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<ApplyRepairController> {
|
||||
),
|
||||
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<ApplyRepairController> {
|
||||
),
|
||||
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<ApplyRepairController> {
|
||||
"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<ApplyRepairController> {
|
||||
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<ApplyRepairController> {
|
||||
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 ||
|
||||
|
||||
@@ -495,6 +495,7 @@ class EditAddressPage extends GetView<AddressController>
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
].divide(const SizedBox(
|
||||
width: 15)),
|
||||
),
|
||||
|
||||
@@ -39,7 +39,7 @@ class _ExperienceStorePageState extends State<ExperienceStorePage> {
|
||||
super.initState();
|
||||
Timer(Duration(milliseconds: 100), () async {
|
||||
controller.resetParm();
|
||||
await weatherModelController.determinePosition();
|
||||
// await weatherModelController.determinePosition();
|
||||
controller.page = 0;
|
||||
controller.getData();
|
||||
scrollController.addListener(() {
|
||||
|
||||
@@ -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<NewMinePage> {
|
||||
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<NewMinePage> {
|
||||
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<NewMinePage> {
|
||||
// 直接使用 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"),
|
||||
|
||||
@@ -63,8 +63,8 @@ class RepairHistoryWidget extends GetView<RepairInfoController> {
|
||||
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),
|
||||
|
||||
@@ -17,29 +17,29 @@ class DeviceRepairPage extends GetView<RepairListController> {
|
||||
// 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<ApplyRepairModel> mockData
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
return LayoutBuilder(builder: (context, cc) {
|
||||
bodysize = cc;
|
||||
return GestureDetector(
|
||||
@@ -202,9 +202,7 @@ class DeviceRepairPage extends GetView<RepairListController> {
|
||||
),
|
||||
),
|
||||
)),
|
||||
|
||||
SizedBox(height: 235.rpx),
|
||||
|
||||
// 报修历史标题
|
||||
Container(
|
||||
width: double.infinity,
|
||||
@@ -214,7 +212,6 @@ class DeviceRepairPage extends GetView<RepairListController> {
|
||||
fontSize: 30.rpx,
|
||||
height: 1)),
|
||||
),
|
||||
|
||||
SizedBox(height: 32.rpx),
|
||||
// Obx(() {
|
||||
// return Visibility(
|
||||
@@ -267,4 +264,6 @@ class DeviceRepairPage extends GetView<RepairListController> {
|
||||
));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user