更新绑定时候选择房间和设置房间名称

This commit is contained in:
wyf
2025-07-19 17:43:22 +08:00
parent 1fe904af00
commit 32bad1834d
5 changed files with 307 additions and 147 deletions

View File

@@ -241,6 +241,7 @@ class MHTBlueToothController extends GetControllerEx<MHTBlueToothModel> {
if (currentFullDevice != null) { if (currentFullDevice != null) {
currentFullDevice!.macAID = res.data['macA']; currentFullDevice!.macAID = res.data['macA'];
currentFullDevice!.macBID = res.data['macB']; currentFullDevice!.macBID = res.data['macB'];
currentFullDevice!.deviceID = res.data['id'];
} }
} }
return res; return res;

View File

@@ -195,7 +195,12 @@ class _MHTPeopleInfoPageState extends State<MHTPeopleInfoPage> {
TopSlideNotification.show(context, text: "保存成功"); TopSlideNotification.show(context, text: "保存成功");
MHTHomeController mhtHomeController = Get.find(); MHTHomeController mhtHomeController = Get.find();
mhtHomeController.getPersonList(); mhtHomeController.getPersonList();
Get.offNamed("/bindDeviceSuccess"); // Get.offNamed("/bindDeviceSuccess");
Map data = {};
final device = bluetoothController.currentFullDevice;
data['_id'] = device!.deviceID;
data['isNextStep'] = true;
Get.toNamed("/editBedPage", arguments: data);
}, },
colors: const [ colors: const [
Color(0xFFFCFCFC), Color(0xFFFCFCFC),

View File

@@ -10,7 +10,8 @@ class BlueToothDataModel {
int type; int type;
String? macAID; String? macAID;
String? macBID; String? macBID;
DateTime lastSeen; // 添加的最后可见时间字段 DateTime lastSeen; // 最后可见时间
String? deviceID; // 设备ID
BlueToothDataModel({ BlueToothDataModel({
this.name = '', this.name = '',
@@ -20,12 +21,18 @@ class BlueToothDataModel {
required this.type, required this.type,
this.macA = '', this.macA = '',
this.macB = '', this.macB = '',
required this.lastSeen, // 添加到构造函数参数 required this.lastSeen,
this.deviceID, // ✅ 加入构造函数参数
}); });
factory BlueToothDataModel.fromScanResult(ScanResult result, int type, factory BlueToothDataModel.fromScanResult(
{bool bind = false, String name = '', String mac = ''}) { ScanResult result,
// 如果外部没有传入 name则取 localName int type, {
bool bind = false,
String name = '',
String mac = '',
String? deviceID, // ✅ 工厂方法接收 deviceID
}) {
String finalName = String finalName =
name.isNotEmpty ? name : (result.advertisementData.localName ?? ''); name.isNotEmpty ? name : (result.advertisementData.localName ?? '');
@@ -35,9 +42,10 @@ class BlueToothDataModel {
mac: mac, mac: mac,
scanResult: result, scanResult: result,
type: type, type: type,
macA: '', // 保持原有默认值 macA: '',
macB: '', // 保持原有默认值 macB: '',
lastSeen: DateTime.now(), // 设置为当前时间 lastSeen: DateTime.now(),
deviceID: deviceID, // ✅ 赋值
); );
} }
} }

View File

@@ -9,11 +9,17 @@ import 'package:vbvs_app/component/tool/CustomCard.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/controller/mh_controller/device_list_controller.dart'; import 'package:vbvs_app/controller/mh_controller/device_list_controller.dart';
import 'package:vbvs_app/pages/mh_page/bluetooth.dart'; import 'package:vbvs_app/pages/mh_page/bluetooth.dart';
import 'package:vbvs_app/pages/mh_page/device/controller/mht_bluetooth_controller.dart';
import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart'; import 'package:vbvs_app/pages/mh_page/test/WebviewTestModel.dart';
class EditBedPage extends StatefulWidget { class EditBedPage extends StatefulWidget {
final Map data; final Map data;
EditBedPage({Key? key, required this.data});
EditBedPage({
Key? key,
required this.data,
}) : super(key: key);
@override @override
_EditBedPageState createState() => _EditBedPageState(); _EditBedPageState createState() => _EditBedPageState();
} }
@@ -79,6 +85,70 @@ class _EditBedPageState extends State<EditBedPage> {
left: 0.rpx, left: 0.rpx,
child: returnIconButtomNew, child: returnIconButtomNew,
), ),
if (widget.data != null &&
(widget.data['isNextStep'] != null &&
widget.data['isNextStep'] == true))
Positioned(
right: 30.rpx,
child: CustomCard(
borderRadius: 16.rpx,
gradientDirection: GradientDirection.vertical,
onTap: () async {
String serviceAddress =
ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.device_show;
String queryUrl =
"$serviceAddress$serviceName$serviceApi";
await requestWithLog(
logTitle: "更新设备信息",
method: MyHttpMethod.put,
queryUrl: queryUrl,
data: {
"id": editedData["_id"],
"name": editedData["name"],
},
onSuccess: (res) {
TopSlideNotification.show(context,
text: "修改名称成功".tr);
deviceListController.getDeviceList();
Map data = {};
final MHTBlueToothController
bluetoothController = Get.find();
final device =
bluetoothController.currentFullDevice;
data['_id'] = device!.deviceID;
data['isNextStep'] = true;
Get.toNamed("/roomPickerPage",
arguments: data);
},
);
},
colors: const [
Color(0xFFFCFCFC),
Color(0xFFF8FAF9),
Color(0XFFECF6F3),
Color(0XFFD9F0E9),
Color(0xFFCEECE3)
],
child: Container(
width: 120.rpx,
height: 60.rpx,
alignment: Alignment.center,
child: Text(
"下一步",
style: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0XFF011D33),
letterSpacing: 0,
fontSize: 30.rpx,
),
),
),
),
)
], ],
), ),
), ),
@@ -186,6 +256,8 @@ class _EditBedPageState extends State<EditBedPage> {
], ],
), ),
), ),
if (widget.data['isNextStep'] == null ||
widget.data['isNextStep'] == false)
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
left: 30.rpx, right: 30.rpx, bottom: 85.rpx), left: 30.rpx, right: 30.rpx, bottom: 85.rpx),
@@ -197,7 +269,8 @@ class _EditBedPageState extends State<EditBedPage> {
ServiceConstant.service_address; ServiceConstant.service_address;
String serviceName = String serviceName =
ServiceConstant.server_service; ServiceConstant.server_service;
String serviceApi = ServiceConstant.device_show; String serviceApi =
ServiceConstant.device_show;
String queryUrl = String queryUrl =
"$serviceAddress$serviceName$serviceApi"; "$serviceAddress$serviceName$serviceApi";
await requestWithLog( await requestWithLog(

View File

@@ -85,6 +85,75 @@ class _RoomPickerPageState extends State<RoomPickerPage> {
left: 0.rpx, left: 0.rpx,
child: returnIconButtomNew, child: returnIconButtomNew,
), ),
if (widget.data != null &&
(widget.data['isNextStep'] != null &&
widget.data['isNextStep'] == true))
Positioned(
right: 30.rpx,
child: CustomCard(
borderRadius: 16.rpx,
gradientDirection: GradientDirection.vertical,
onTap: () async {
// Get.toNamed("/applyRepairPage");
try {
String serviceAddress =
ServiceConstant.service_address;
String serviceName =
ServiceConstant.server_service;
String serviceApi =
ServiceConstant.device_show;
String queryUrl =
"$serviceAddress$serviceName$serviceApi";
await requestWithLog(
logTitle: "更新设备信息",
method: MyHttpMethod.put,
queryUrl: queryUrl,
data: {
"id": editedData["_id"],
"roomId": rooms[selectedIndex]['_id'],
},
onSuccess: (res) {
editedData['roomName'] =
rooms[selectedIndex]['name'];
TopSlideNotification.show(context,
text: "更新成功".tr,
textColor: Color(0XFF00C1AA));
deviceListController.getDeviceList();
Get.offNamed("/bindDeviceSuccess");
},
onFailure: (res) {
TopSlideNotification.show(context,
text: "更新失败".tr,
textColor: Color(0xFFFF7159));
},
);
} catch (e) {
print(e);
}
},
colors: const [
Color(0xFFFCFCFC),
Color(0xFFF8FAF9),
Color(0XFFECF6F3),
Color(0XFFD9F0E9),
Color(0xFFCEECE3)
],
child: Container(
width: 120.rpx,
height: 60.rpx,
alignment: Alignment.center,
child: Text(
"下一步",
style: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0XFF011D33),
letterSpacing: 0,
fontSize: 30.rpx,
),
),
),
),
)
], ],
), ),
), ),
@@ -157,6 +226,8 @@ class _RoomPickerPageState extends State<RoomPickerPage> {
), ),
const Spacer(), const Spacer(),
// 完成按钮 // 完成按钮
if (widget.data['isNextStep'] == null ||
widget.data['isNextStep'] == false)
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
left: 30.rpx, left: 30.rpx,
@@ -197,8 +268,10 @@ class _RoomPickerPageState extends State<RoomPickerPage> {
deviceListController.getDeviceList(); deviceListController.getDeviceList();
try { try {
WebviewTestController WebviewTestController
webviewTestController = Get.find(); webviewTestController =
webviewTestController.web.jsbridge?.dart Get.find();
webviewTestController
.web.jsbridge?.dart
.alterDevice(); .alterDevice();
} catch (e) { } catch (e) {
ef.log("[h5]通知列表更新错误:$e"); ef.log("[h5]通知列表更新错误:$e");