From acfb262812928371e1ecba41ddf6a4456687940e Mon Sep 17 00:00:00 2001 From: wyf <494641114@qq.com> Date: Fri, 23 May 2025 18:17:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/img/errorImg.jpeg | Bin 4632 -> 0 bytes assets/img/errorImg.png | Bin 0 -> 2461 bytes assets/langs/zh_CN.json | 7 +- lib/common/color/ServiceConstant.dart | 2 +- .../device_share_list_controller.g.dart | 4 +- lib/controller/repair/repair_controller.dart | 8 +- .../repair/repair_controller.g.dart | 10 +- .../weather/weather_controller.g.dart | 6 +- .../component/DeviceDataComponentWidget.dart | 4 +- lib/pages/device/device_detail.dart | 803 ++++++++++-------- .../device_bind/componnet/bind_dialog.dart | 142 ++++ lib/pages/person/person_page.dart | 79 +- lib/pages/person/update_person_page.dart | 52 +- lib/pages/repair/apply_repair_page.dart | 7 +- .../component/RepairHistoryInfoWidget.dart | 12 +- .../repair/component/RepairModelWidget.dart | 17 +- lib/pages/repair/repair_list_page.dart | 5 - 17 files changed, 673 insertions(+), 485 deletions(-) delete mode 100644 assets/img/errorImg.jpeg create mode 100644 assets/img/errorImg.png diff --git a/assets/img/errorImg.jpeg b/assets/img/errorImg.jpeg deleted file mode 100644 index f99ae217b933de0d896f0371bd2d1cf45cd8de1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4632 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 diff --git a/assets/img/errorImg.png b/assets/img/errorImg.png new file mode 100644 index 0000000000000000000000000000000000000000..f3483c723ab47bc186aee6349bedf5f66aa2db8f GIT binary patch literal 2461 zcmeHJ|2xxbAD`rq5Jl2c;S(ZhM=Cklk=nFjIGc)z@=zVeh1e)5927PWJ}6)ECD~HG zc9IyU$>YdKk4)S0b(w`}Hfv*M*3P=lAMjk~_w&B4*L}afrHsYin!cH)xt9 z!ZWff1}N^M_!-e@q4o4nv3CAEor2Y$|3y7;2j*m5M@CdW#(aP4 zFNv{BQY#{%&Ir}a`Z3z(tF~ITjI&kANp_5g0CJLBPsG@_Q|SQPxx_nZoC;Ljfxlow zOA-j@$RnxrQ=D5hg}Fi^VLwTl=6$@wp7Er;-N`~NWquy=v)WgnRhmFZITjx+#aQjd zKuT|Ll+{P#K|l%I=Q zS%KJQ=2Y>no%;0XxFlLR6(RF3|iJRllq9g1Lm+=d#8+nyp?Qz&O zp+jhLBW+lD=SfCh&g80fmNZA`{C07|;%K_5qxK|IxAy4(u33^~n`Od2bXiM~BOI+Q zJDiCYyP#7Z-h(p^!Nr@2bkI9=H+{wyq{pQC}>?pZ*6x^JPOG8H1 zzI-|zv~R1@w%$7Hd4fQ9?$iQY7#llPvfY9)CUw~TzdGYhU%>+>c;&Q9{Gw0_a%ub0 z1~}vH+2m7^8A!n_YaM~JFXbA&#(}ryjr!!I=h5eFD=Br`T`s8VIqY==16}hay|5l} zvdSHn0uoHHwD;9GD`|CBi)jRm*K)J*)Jr5USs_5MmSX~-TN5u02oMaXoxM>UM*!69 zS0~L9>N?{FNS|C8C6VvrU?b%dHd|eu4~19-4?+vGH&(Xcis-NYO%qc%N_1M+v-+?w~E~!c&(-(N{{{jR0BQrzHu9vPqgx?Xy zDUytoA1M;|&Ec&ZLBiD?AFgmj_wjO1L09wU^R}cPn$G+fx_p)&eS64M>tK=kF~xSS zXz?9Ir+4f*&bo++=3Je4`#=srAKq65PD=H)4UU{OO>`Vk7eSvn>^#3>dgIKDI{8my z_ICyJ(C`Q+Jv|@Ey9Ra-);(j&LtP#gt>@J*^;Er4U(Fu0fbwB;yUXlzXuuOfRZsudrw9d8UH8pA!qlHOKSi?8`Xr}xyeswMx;3lEYFcjIFZ zxRaMD$pd*-@xZWC)NP{wE=he|D|g5o(zKQOMlctqYhvcQKO|5QSux2$u2@TEkgMb^ z)qwL`>U*q$;E@oq?}AFOFVpvXL;FL+p^t^XjR~e+&wSL*Y;H+I3@Gq>7X~jERPCH! zj1PR)>B<8go49{`PV^qZ6cb%G=VW&UW;4`l>q!k z< json) => DeviceShareListModel() ..key = json['key'] as String? - ..all = (json['all'] as num?)?.toInt(); + ..all = (json['all'] as num?)?.toInt() + ..accountKey = json['accountKey'] as String?; Map _$DeviceShareListModelToJson( DeviceShareListModel instance) => { 'key': instance.key, 'all': instance.all, + 'accountKey': instance.accountKey, }; diff --git a/lib/controller/repair/repair_controller.dart b/lib/controller/repair/repair_controller.dart index ffd3bed..3a3659b 100644 --- a/lib/controller/repair/repair_controller.dart +++ b/lib/controller/repair/repair_controller.dart @@ -16,8 +16,11 @@ part 'repair_controller.g.dart'; // 由json_serializable自动生成的部分 class RepairModel { String? id; //设备id String? param; //设备参数 - String? issue; //问题描述 + // String? issue; //问题描述 String? fileUrl; //文件地址 + String? mac; //状态 + String? desc;//问题描述 + List? img;//上传图片 RepairModel(); factory RepairModel.fromJson(Map json) { try { @@ -140,7 +143,7 @@ class RepairController extends GetControllerEx { // apiResponse.msg = "上传限制(视频最大50MB)".tr; // return apiResponse; // } - + // // 构建上传地址 // String queryUrl = // "${ServiceConstant.service_address}${ServiceConstant.server_service}${ServiceConstant.upload_file}"; @@ -175,5 +178,4 @@ class RepairController extends GetControllerEx { // return ApiResponse(code: -1, msg: "服务器.失败".tr); // } // } - } diff --git a/lib/controller/repair/repair_controller.g.dart b/lib/controller/repair/repair_controller.g.dart index 0c7f59d..918a388 100644 --- a/lib/controller/repair/repair_controller.g.dart +++ b/lib/controller/repair/repair_controller.g.dart @@ -9,13 +9,17 @@ part of 'repair_controller.dart'; RepairModel _$RepairModelFromJson(Map json) => RepairModel() ..id = json['id'] as String? ..param = json['param'] as String? - ..issue = json['issue'] as String? - ..fileUrl = json['fileUrl'] as String?; + ..fileUrl = json['fileUrl'] as String? + ..mac = json['mac'] as String? + ..desc = json['desc'] as String? + ..img = json['img'] as List?; Map _$RepairModelToJson(RepairModel instance) => { 'id': instance.id, 'param': instance.param, - 'issue': instance.issue, 'fileUrl': instance.fileUrl, + 'mac': instance.mac, + 'desc': instance.desc, + 'img': instance.img, }; diff --git a/lib/controller/weather/weather_controller.g.dart b/lib/controller/weather/weather_controller.g.dart index 7920345..f30dbc7 100644 --- a/lib/controller/weather/weather_controller.g.dart +++ b/lib/controller/weather/weather_controller.g.dart @@ -15,7 +15,9 @@ WeatherModel _$WeatherModelFromJson(Map json) => WeatherModel() ..max_temperature = (json['max_temperature'] as num?)?.toInt() ..wind_direction = json['wind_direction'] as String? ..wind_speed = (json['wind_speed'] as num?)?.toInt() - ..cityName = json['cityName'] as String?; + ..cityName = json['cityName'] as String? + ..weatherIcon = json['weatherIcon'] as String? + ..weatherIconurl = json['weatherIconurl'] as String?; Map _$WeatherModelToJson(WeatherModel instance) => { @@ -28,4 +30,6 @@ Map _$WeatherModelToJson(WeatherModel instance) => 'wind_direction': instance.wind_direction, 'wind_speed': instance.wind_speed, 'cityName': instance.cityName, + 'weatherIcon': instance.weatherIcon, + 'weatherIconurl': instance.weatherIconurl, }; diff --git a/lib/pages/device/component/DeviceDataComponentWidget.dart b/lib/pages/device/component/DeviceDataComponentWidget.dart index f077303..83661c4 100644 --- a/lib/pages/device/component/DeviceDataComponentWidget.dart +++ b/lib/pages/device/component/DeviceDataComponentWidget.dart @@ -404,7 +404,8 @@ class _DeviceDataComponentWidgetState extends State { void _showRenameDialog() { personController.currentPersonId.value = widget.device['_id']; personController.name.value = ""; - showConfirmDialog( + String text = "确定".tr; + showSingleConfirmDialog( context, Padding( padding: EdgeInsetsDirectional.fromSTEB(0.rpx, 41.rpx, 0.rpx, 0), @@ -476,6 +477,7 @@ class _DeviceDataComponentWidgetState extends State { onCancel: () { print('用户点击了取消'); }, + confirmText: text, ); } diff --git a/lib/pages/device/device_detail.dart b/lib/pages/device/device_detail.dart index 94f8ffc..c681766 100644 --- a/lib/pages/device/device_detail.dart +++ b/lib/pages/device/device_detail.dart @@ -96,193 +96,23 @@ class _DeviceDetailPageState extends State { ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB( - 50.rpx, 0.rpx, 0.rpx, 0.rpx), - child: Row( + 0.rpx, 92.rpx, 0.rpx, 0.rpx), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ - Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Container( - width: MediaQuery.sizeOf(context).width * 0.267, - height: MediaQuery.sizeOf(context).width * 0.267, - constraints: BoxConstraints( - minWidth: 200.rpx, - minHeight: 200.rpx, - ), - decoration: BoxDecoration(), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.设备名称'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.MAC'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.型号'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.版本'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.网络状态'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.故障状态'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.更新状态'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '设备详情.更新时间'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc4, - ), - ), - ), - ), - ] - .divide(SizedBox(height: 34.rpx)) - .addToStart(SizedBox(height: 92.rpx)) - .addToEnd(SizedBox(height: 97.rpx)), - ), - Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: MediaQuery.sizeOf(context).width * 0.267, - height: MediaQuery.sizeOf(context).width * 0.267, - constraints: BoxConstraints( - minWidth: 200.rpx, - minHeight: 200.rpx, - ), - decoration: BoxDecoration( - color: Colors.transparent, - ), - child: (widget.device['code'] - ?.toString() - .isNotEmpty ?? + Container( + width: MediaQuery.sizeOf(context).width * 0.267, + height: MediaQuery.sizeOf(context).width * 0.267, + constraints: BoxConstraints( + minWidth: 200.rpx, + minHeight: 200.rpx, + ), + decoration: BoxDecoration( + color: Colors.transparent, + ), + child: + (widget.device['code']?.toString().isNotEmpty ?? false) ? QrImageView( data: widget.device['code'].toString(), @@ -290,182 +120,439 @@ class _DeviceDetailPageState extends State { size: 200.0.rpx, ) : Image.asset( - "assets/img/errorImg.jpeg", + "assets/img/errorImg.png", fit: BoxFit.cover, ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - (widget.device['code'] ?? '') - .toString() - .isNotEmpty - ? widget.device['code'].toString() - : '未知数据'.tr, - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '${widget.device['person']?['name'] ?? '未命名'.tr}', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '${widget.device['mac'] ?? '-'.tr}', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '-', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '-', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '${widget.device['status']['status'] == 1 ? '在线'.tr : '离线'.tr}', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '${widget.device['status']['failure'] == 1 ? '有故障'.tr : '无故障'.tr}', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '${widget.device['status']['upgrade'] == 1 ? '有更新'.tr : '无更新'.tr}', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - Container( - height: 50.rpx, - decoration: BoxDecoration(), - child: Align( - alignment: AlignmentDirectional(-1.rpx, 0.rpx), - child: Text( - '${widget.device['status']?['updateTime'] == null ? '-'.tr : MyUtils.timestampToDateString(widget.device['status']?['updateTime'])}', - style: FlutterFlowTheme.of(context) - .bodyMedium - .override( - fontFamily: 'Inter', - fontSize: 26.rpx, - letterSpacing: 0.rpx, - color: themeController.currentColor.sc3, - ), - ), - ), - ), - ] - .divide(SizedBox(height: 34.rpx)) - .addToStart(SizedBox(height: 92.rpx)) - .addToEnd(SizedBox(height: 97.rpx)), ), - ].divide(SizedBox(width: 34.rpx)), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Text( + (widget.device['code'] ?? '').toString().isNotEmpty + ? widget.device['code'].toString() + : '未知数据'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController.currentColor.sc3, + ), + ), + ), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + // Container( + // width: + // MediaQuery.sizeOf(context).width * 0.267, + // height: + // MediaQuery.sizeOf(context).width * 0.267, + // constraints: BoxConstraints( + // minWidth: 200.rpx, + // minHeight: 200.rpx, + // ), + // decoration: BoxDecoration(), + // ), + // Container( + // height: 50.rpx, + // decoration: BoxDecoration(), + // ), + + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.设备名称'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.MAC'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.型号'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.版本'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.网络状态'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.故障状态'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.更新状态'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '设备详情.更新时间'.tr, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc4, + ), + ), + ), + ), + ] + .divide(SizedBox(height: 34.rpx)) + .addToStart(SizedBox(height: 92.rpx)) + .addToEnd(SizedBox(height: 97.rpx)), + ), + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Container( + // width: + // MediaQuery.sizeOf(context).width * 0.267, + // height: + // MediaQuery.sizeOf(context).width * 0.267, + // constraints: BoxConstraints( + // minWidth: 200.rpx, + // minHeight: 200.rpx, + // ), + // decoration: BoxDecoration( + // color: Colors.transparent, + // ), + // child: (widget.device['code'] + // ?.toString() + // .isNotEmpty ?? + // false) + // ? QrImageView( + // data: + // widget.device['code'].toString(), + // version: QrVersions.auto, + // size: 200.0.rpx, + // ) + // : Image.asset( + // "assets/img/errorImg.jpeg", + // fit: BoxFit.cover, + // ), + // ), + // Container( + // height: 50.rpx, + // decoration: BoxDecoration(), + // child: Align( + // alignment: + // AlignmentDirectional(-1.rpx, 0.rpx), + // child: Text( + // (widget.device['code'] ?? '') + // .toString() + // .isNotEmpty + // ? widget.device['code'].toString() + // : '未知数据'.tr, + // style: FlutterFlowTheme.of(context) + // .bodyMedium + // .override( + // fontFamily: 'Inter', + // fontSize: 26.rpx, + // letterSpacing: 0.rpx, + // color: themeController + // .currentColor.sc3, + // ), + // ), + // ), + // ), + + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '${widget.device['person']?['name'] ?? '未命名'.tr}', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '${widget.device['mac'] ?? '-'.tr}', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '-', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '-', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '${widget.device['status']['status'] == 1 ? '在线'.tr : '离线'.tr}', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '${widget.device['status']['failure'] == 1 ? '有故障'.tr : '无故障'.tr}', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '${widget.device['status']['upgrade'] == 1 ? '有更新'.tr : '无更新'.tr}', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + Container( + height: 50.rpx, + decoration: BoxDecoration(), + child: Align( + alignment: + AlignmentDirectional(-1.rpx, 0.rpx), + child: Text( + '${widget.device['status']?['updateTime'] == null ? '-'.tr : MyUtils.timestampToDateString(widget.device['status']?['updateTime'])}', + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + fontFamily: 'Inter', + fontSize: 26.rpx, + letterSpacing: 0.rpx, + color: themeController + .currentColor.sc3, + ), + ), + ), + ), + ] + .divide(SizedBox(height: 34.rpx)) + .addToStart(SizedBox(height: 92.rpx)) + .addToEnd(SizedBox(height: 97.rpx)), + ), + ].divide(SizedBox(width: 34.rpx)), + ), + ], ), ), ), diff --git a/lib/pages/device_bind/componnet/bind_dialog.dart b/lib/pages/device_bind/componnet/bind_dialog.dart index 798d0f0..19bfe71 100644 --- a/lib/pages/device_bind/componnet/bind_dialog.dart +++ b/lib/pages/device_bind/componnet/bind_dialog.dart @@ -579,6 +579,148 @@ void showConfirmDialog( ); } + +void showSingleConfirmDialog( + BuildContext context, + Widget widget, + String title, { + required VoidCallback onConfirm, + required VoidCallback onCancel, + String confirmText = "确定", +}) { + ThemeController themeController = Get.find(); + BlueteethBindController blueteethBindController = Get.find(); + + showDialog( + context: context, + barrierDismissible: true, + barrierColor: Colors.black.withOpacity(0.5), // 背景模糊色 + builder: (BuildContext context) { + return FrostedDialog( + blurSigma: 3.0, + child: Container( + decoration: BoxDecoration( + color: themeController.currentColor.sc17, + borderRadius: BorderRadius.circular(20.0), + ), + padding: EdgeInsetsDirectional.fromSTEB(31.rpx, 0, 31.rpx, 0), + child: Container( + width: double.infinity, + constraints: BoxConstraints( + maxHeight: MediaQuery.sizeOf(context).height * 0.656, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + // 标题 + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ClickableContainer( + backgroundColor: Colors.transparent, // 容器背景色 + highlightColor: + themeController.currentColor.sc21, // 点击时的背景色 + padding: EdgeInsets.zero, // 这里去掉外部的 padding,避免影响点击范围 + onTap: () { + Get.back(); + onCancel(); + }, + child: Padding( + // padding: + // EdgeInsetsDirectional.fromSTEB(0, 33.rpx, 0, 0.rpx), + padding: EdgeInsetsDirectional.fromSTEB( + 33.rpx, 33.rpx, 33.rpx, 33.rpx), + child: SvgPicture.asset( + 'assets/img/icon/close.svg', + width: 25.rpx, + height: 25.rpx, // 如果 SVG 中没有固定颜色,使用 color 设置 + color: themeController.currentColor.sc3, + ), + ), + ), + ], + ), + Align( + alignment: AlignmentDirectional(0, 0), + child: Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 33.rpx, 60.rpx, 33.rpx, 33.rpx), + child: Text( + title, + style: FlutterFlowTheme.of(context).bodyMedium.override( + fontFamily: 'Inter', + fontSize: 30.rpx, + letterSpacing: 0.0, + color: themeController.currentColor.sc3, + ), + ), + ), + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 33.rpx, 0.rpx, 33.rpx, 0.rpx), + child: widget, + ), + Padding( + padding: EdgeInsetsDirectional.fromSTEB( + 33.rpx, 58.rpx, 33.rpx, 60.rpx), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + + CustomCard( + borderRadius: AppConstants().button_container_radius, + onTap: () { + Get.back(); + onConfirm(); + // await Future.delayed(Duration(milliseconds: 300)); + }, + colors: [ + themeController.currentColor.sc1, + themeController.currentColor.sc2, + ], + child: Container( + width: MediaQuery.sizeOf(context).width * 0.43, + height: MediaQuery.sizeOf(context).height * 0.055, + constraints: BoxConstraints( + minWidth: 160.rpx, + minHeight: 90.rpx, + ), + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + confirmText, + style: FlutterFlowTheme.of(context) + .bodyMedium + .override( + color: themeController.currentColor.sc3, + fontFamily: 'Inter', + fontSize: + AppConstants().normal_text_fontSize, + letterSpacing: 0.0, + ), + ), + ].divide(SizedBox(width: 17.rpx)), + ), + ), + ), + + ].divide(SizedBox( + width: 70.rpx, + )), + ), + ), + ], + ), + ), + ), + ); + }, + ); +} + void showWifiDialog( BuildContext context, Widget widget, diff --git a/lib/pages/person/person_page.dart b/lib/pages/person/person_page.dart index c8bb7fd..c7c7d3a 100644 --- a/lib/pages/person/person_page.dart +++ b/lib/pages/person/person_page.dart @@ -108,7 +108,7 @@ class _EPageState extends State { TopSlideNotification.show(context, text: apiRespons.msg!); Get.offAllNamed("/bindDeviceSuccess"); - // Get.toNamed("/wifiPage"); + // Get.toNamed("/wifiPage"); } else { TopSlideNotification.show(context, text: apiRespons.msg!, @@ -200,7 +200,8 @@ class _EPageState extends State { fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, - color: themeController.currentColor.sc4, + color: themeController + .currentColor.sc4, ), enabledBorder: OutlineInputBorder( borderSide: BorderSide( @@ -286,26 +287,11 @@ class _EPageState extends State { Container( width: 90.rpx, height: 90.rpx, - decoration: BoxDecoration(), - child: Container( - clipBehavior: - Clip.antiAlias, - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: ColorFiltered( - colorFilter: isMaleGreyed - ? ColorFilter.mode( - Colors.grey - .withOpacity( - 0.6), - BlendMode - .saturation) - : ColorFilter.mode( - Colors - .transparent, - BlendMode - .saturation), + child: ClipOval( + child: Opacity( + opacity: isMaleGreyed + ? 0.4 + : 1.0, // 控制透明度 child: Image.asset( "assets/img/man.png", fit: BoxFit.cover, @@ -355,28 +341,13 @@ class _EPageState extends State { Container( width: 90.rpx, height: 90.rpx, - decoration: BoxDecoration(), - child: Container( - clipBehavior: - Clip.antiAlias, - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: ColorFiltered( - colorFilter: isFemaleGreyed - ? ColorFilter.mode( - Colors.grey - .withOpacity( - 0.6), - BlendMode - .saturation) - : ColorFilter.mode( - Colors - .transparent, - BlendMode - .saturation), + child: ClipOval( + child: Opacity( + opacity: isFemaleGreyed + ? 0.4 + : 1.0, // 控制透明度 child: Image.asset( - "assets/img/woman.png", + "assets/img/man.png", fit: BoxFit.cover, ), ), @@ -431,18 +402,16 @@ class _EPageState extends State { .requestFocus(FocusNode()); Future.delayed(Duration(milliseconds: 250), () { - showDateSelectionDialog( - context, - checkDate: personController.dateTime ?? - DateTime.now(), - checkChange: (DateTime d) { - personController.birthday.value = - MyUtils.formatBindTime(d); - personController.dateTime = d; - personController.updateAll(); - }, - title: "生日".tr - ); + showDateSelectionDialog(context, + checkDate: + personController.dateTime ?? + DateTime.now(), + checkChange: (DateTime d) { + personController.birthday.value = + MyUtils.formatBindTime(d); + personController.dateTime = d; + personController.updateAll(); + }, title: "生日".tr); }); }, child: Center( diff --git a/lib/pages/person/update_person_page.dart b/lib/pages/person/update_person_page.dart index 8e31e20..4015bd1 100644 --- a/lib/pages/person/update_person_page.dart +++ b/lib/pages/person/update_person_page.dart @@ -288,26 +288,11 @@ class _UpdatePageState extends State { Container( width: 90.rpx, height: 90.rpx, - decoration: BoxDecoration(), - child: Container( - clipBehavior: - Clip.antiAlias, - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: ColorFiltered( - colorFilter: isMaleGreyed - ? ColorFilter.mode( - Colors.grey - .withOpacity( - 0.6), - BlendMode - .saturation) - : ColorFilter.mode( - Colors - .transparent, - BlendMode - .saturation), + child: ClipOval( + child: Opacity( + opacity: isMaleGreyed + ? 0.4 + : 1.0, // 控制透明度 child: Image.asset( "assets/img/man.png", fit: BoxFit.cover, @@ -357,28 +342,13 @@ class _UpdatePageState extends State { Container( width: 90.rpx, height: 90.rpx, - decoration: BoxDecoration(), - child: Container( - clipBehavior: - Clip.antiAlias, - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: ColorFiltered( - colorFilter: isFemaleGreyed - ? ColorFilter.mode( - Colors.grey - .withOpacity( - 0.6), - BlendMode - .saturation) - : ColorFilter.mode( - Colors - .transparent, - BlendMode - .saturation), + child: ClipOval( + child: Opacity( + opacity: isFemaleGreyed + ? 0.4 + : 1.0, // 控制透明度 child: Image.asset( - "assets/img/woman.png", + "assets/img/man.png", fit: BoxFit.cover, ), ), diff --git a/lib/pages/repair/apply_repair_page.dart b/lib/pages/repair/apply_repair_page.dart index ffaddcd..2a8ac14 100644 --- a/lib/pages/repair/apply_repair_page.dart +++ b/lib/pages/repair/apply_repair_page.dart @@ -328,8 +328,12 @@ class _ApplyRepairPageState extends State { String queryUrl = "$serviceAddress$serviceName$serviceApi"; var data = { - "repairList": repairController.repairList, + "device": repairController.repairList, "type": repairController.device_type.value, + "contacts": { + "name": repairController.name.value, + "phone": repairController.phone.value + }, }; ApiResponse apiResponse = await requestWithLog( logTitle: "提交报修信息", @@ -478,7 +482,6 @@ class _ApplyRepairPageState extends State { cursorColor: themeController.currentColor.sc3, onChanged: onChanged, ), - ), ), ].divide(SizedBox(width: 24.rpx)), diff --git a/lib/pages/repair/component/RepairHistoryInfoWidget.dart b/lib/pages/repair/component/RepairHistoryInfoWidget.dart index 7a9e94c..7df5732 100644 --- a/lib/pages/repair/component/RepairHistoryInfoWidget.dart +++ b/lib/pages/repair/component/RepairHistoryInfoWidget.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; +import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/routers/routers.dart'; @@ -28,14 +29,17 @@ class _RepairHistoryInfoWidgetState extends State { @override Widget build(BuildContext context) { - return CustomCard( + return ClickableContainer( borderRadius: AppConstants().normal_container_radius, onTap: () { //跳转详情 }, - colors: [ - themeController.currentColor.sc5, - ], + // colors: [ + // themeController.currentColor.sc5, + // ], + backgroundColor: Colors.transparent, + highlightColor: themeController.currentColor.sc21, + padding: EdgeInsetsDirectional.fromSTEB(0.rpx, 0.rpx, 0.rpx, 0.rpx), child: Container( width: double.infinity, decoration: BoxDecoration( diff --git a/lib/pages/repair/component/RepairModelWidget.dart b/lib/pages/repair/component/RepairModelWidget.dart index c9c3690..ba9e562 100644 --- a/lib/pages/repair/component/RepairModelWidget.dart +++ b/lib/pages/repair/component/RepairModelWidget.dart @@ -326,13 +326,16 @@ class _RepairModelWidgetState extends State { .refresh(); // 通知 Obx 更新(如果用了 GetX) print(widget.model); } else { - TopSlideNotification.show( - context, - text: apiResponse.msg!, - textColor: apiResponse.code == HttpStatusCodes.ok - ? themeController.currentColor.sc2 - : themeController.currentColor.sc9, - ); + if (widget.model['path'] == null || + widget.model['path'].isEmpty) { + TopSlideNotification.show( + context, + text: apiResponse.msg!, + textColor: apiResponse.code == HttpStatusCodes.ok + ? themeController.currentColor.sc2 + : themeController.currentColor.sc9, + ); + } } }, child: SizedBox( diff --git a/lib/pages/repair/repair_list_page.dart b/lib/pages/repair/repair_list_page.dart index f6b73fd..2c7503b 100644 --- a/lib/pages/repair/repair_list_page.dart +++ b/lib/pages/repair/repair_list_page.dart @@ -1,13 +1,8 @@ import 'package:ef/ef.dart'; import 'package:flutter/material.dart'; import 'package:flutterflow_ui/flutterflow_ui.dart'; -import 'package:vbvs_app/common/color/appConstants.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; -import 'package:vbvs_app/controller/device/body_device_controller.dart'; -import 'package:vbvs_app/controller/device/device_type_controller.dart'; -import 'package:vbvs_app/controller/repair/repair_controller.dart'; -import 'package:vbvs_app/controller/theme_controller/ThemeController.dart'; import 'package:vbvs_app/pages/repair/component/RepairHistoryInfoWidget.dart'; class RepairListPage extends StatefulWidget {