From 496ac22528890e5acd48dae9c9f68855a52cb234 Mon Sep 17 00:00:00 2001 From: liyi Date: Fri, 12 Sep 2025 18:04:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 1 + assets/icon/icon_lockGroup_item.png | Bin 0 -> 4192 bytes assets/icon/lockType_doorLock.png | Bin 0 -> 20311 bytes assets/icon/lockType_gatewayLock.png | Bin 0 -> 47668 bytes lib/common/constant/app_images.dart | 4 +- .../constant/app_support_device_type.dart | 45 +++ lib/common/constant/device_type.dart | 35 -- lib/common/widgets/custom_cell_widget.dart | 24 +- lib/routes/app_pages.dart | 7 + lib/routes/app_routes.dart | 5 +- .../deviceManage/device_manage_binding.dart | 9 + .../device_manage_controller.dart | 12 + .../deviceManage/device_manage_view.dart | 340 +++++++++++++++++ .../team/teamManage/team_manage_view.dart | 357 +++++------------- .../team/teamNotice/team_notice_view.dart | 28 +- 15 files changed, 534 insertions(+), 333 deletions(-) create mode 100644 assets/icon/icon_lockGroup_item.png create mode 100644 assets/icon/lockType_doorLock.png create mode 100644 assets/icon/lockType_gatewayLock.png create mode 100644 lib/common/constant/app_support_device_type.dart delete mode 100644 lib/common/constant/device_type.dart create mode 100644 lib/views/device/deviceManage/device_manage_binding.dart create mode 100644 lib/views/device/deviceManage/device_manage_controller.dart create mode 100644 lib/views/device/deviceManage/device_manage_view.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7665c8b..bdb3dde 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ diff --git a/assets/icon/icon_lockGroup_item.png b/assets/icon/icon_lockGroup_item.png new file mode 100644 index 0000000000000000000000000000000000000000..68fa570c11e764b25af170d5a93e49b3f2e3f609 GIT binary patch literal 4192 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 literal 0 HcmV?d00001 diff --git a/assets/icon/lockType_doorLock.png b/assets/icon/lockType_doorLock.png new file mode 100644 index 0000000000000000000000000000000000000000..46a271002a2248e90a665976a63a1b586a91fbfa GIT binary patch literal 20311 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 literal 0 HcmV?d00001 diff --git a/assets/icon/lockType_gatewayLock.png b/assets/icon/lockType_gatewayLock.png new file mode 100644 index 0000000000000000000000000000000000000000..f14724c9565fb42cb523e32124e7660f675b1d50 GIT binary patch literal 47668 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ξs`zBUe7zd<3t6 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 literal 0 HcmV?d00001 diff --git a/lib/common/constant/app_images.dart b/lib/common/constant/app_images.dart index 6bca120..ce9f9d2 100644 --- a/lib/common/constant/app_images.dart +++ b/lib/common/constant/app_images.dart @@ -54,7 +54,8 @@ class AppImages{ static const String iconTableMenu = 'assets/icon/icon_table_menu.png'; static const String iconVip = 'assets/icon/icon_vip.png'; static const String defaultAvatar = 'assets/images/default_avatar.png'; - + static const String iconLockGroupItem = 'assets/icon/icon_lockGroup_item.png'; + static const String iconLockTypeDoorLock = 'assets/icon/lockType_doorLock.png'; // 底部导航栏图标 static const String iconHome = 'assets/icon/bar/home.png'; static const String iconHomeSelected = 'assets/icon/bar/home_selected.png'; @@ -62,4 +63,5 @@ class AppImages{ static const String iconNotificationSelected = 'assets/icon/bar/notification_selected.png'; static const String iconMine = 'assets/icon/bar/mine.png'; static const String iconMineSelected = 'assets/icon/bar/mine_selected.png'; + } \ No newline at end of file diff --git a/lib/common/constant/app_support_device_type.dart b/lib/common/constant/app_support_device_type.dart new file mode 100644 index 0000000..7f127e1 --- /dev/null +++ b/lib/common/constant/app_support_device_type.dart @@ -0,0 +1,45 @@ +import 'package:starwork_flutter/common/constant/app_images.dart'; + +class AppSupportDeviceType { + static const all = AppSupportDeviceType('0', '所有设备'); + static const lock = AppSupportDeviceType('1', '锁', iconImagePath: AppImages.iconLockTypeDoorLock); + static const gateway = AppSupportDeviceType('2', '网关'); + static const attendanceMachine = AppSupportDeviceType('3', '考勤机'); + + // 获取所有类型 + static List get allTypes => [ + all, + lock, + gateway, + attendanceMachine, + ]; + + final String value; + final String label; + final String? iconImagePath; + + const AppSupportDeviceType(this.value, this.label, {this.iconImagePath}); + + // 支持通过字符串值查找枚举实例 + static AppSupportDeviceType? fromValue(String? value) { + return { + '0': all, + '1': lock, + '2': gateway, + '3': attendanceMachine, + }[value]; + } + + // 支持 toString() 直接输出 value + @override + String toString() => value; + + // 可选:支持 == 比较 + @override + bool operator ==(Object other) => + identical(this, other) || + other is AppSupportDeviceType && runtimeType == other.runtimeType && value == other.value; + + @override + int get hashCode => value.hashCode; +} diff --git a/lib/common/constant/device_type.dart b/lib/common/constant/device_type.dart deleted file mode 100644 index 2f0146b..0000000 --- a/lib/common/constant/device_type.dart +++ /dev/null @@ -1,35 +0,0 @@ -class DeviceType { - static const all = DeviceType('0', '所有'); - static const lock = DeviceType('1', '锁'); - static const gateway = DeviceType('2', '网关'); - static const attendanceMachine = DeviceType('3', '考勤机'); - final String value; - final String label; - - const DeviceType(this.value, this.label); - - // 支持通过字符串值查找枚举实例 - static DeviceType? fromValue(String? value) { - return { - '0': all, - '1': lock, - '2': gateway, - '3': attendanceMachine, - }[value]; - } - - // 支持 toString() 直接输出 value - @override - String toString() => value; - - // 可选:支持 == 比较 - @override - bool operator ==(Object other) => - identical(this, other) || - other is DeviceType && - runtimeType == other.runtimeType && - value == other.value; - - @override - int get hashCode => value.hashCode; -} diff --git a/lib/common/widgets/custom_cell_widget.dart b/lib/common/widgets/custom_cell_widget.dart index dbe41d4..9a1111e 100644 --- a/lib/common/widgets/custom_cell_widget.dart +++ b/lib/common/widgets/custom_cell_widget.dart @@ -6,11 +6,13 @@ class CustomCellWidget extends StatelessWidget { const CustomCellWidget({ super.key, required this.leftText, + this.leftIcon, this.rightWidget, this.onTap, }); final String leftText; + final Icon? leftIcon; final Widget? rightWidget; final GestureTapCallback? onTap; @@ -29,13 +31,21 @@ class CustomCellWidget extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Text( - leftText, - style: TextStyle( - fontSize: 14.sp, - color: Colors.black87, - fontWeight: FontWeight.w400, - ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + if (leftIcon != null) leftIcon!, + if (leftIcon != null) SizedBox(width: 4.w), + Text( + leftText, + style: TextStyle( + fontSize: 14.sp, + color: Colors.black87, + fontWeight: FontWeight.w400, + ), + ), + ], ), rightWidget ?? Text( diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart index b6f6532..09af634 100644 --- a/lib/routes/app_pages.dart +++ b/lib/routes/app_pages.dart @@ -2,6 +2,8 @@ import 'package:get/get.dart'; import 'package:starwork_flutter/routes/app_routes.dart'; import 'package:starwork_flutter/views/device/confirmPairDevice/confirm_pair_device_binding.dart'; import 'package:starwork_flutter/views/device/confirmPairDevice/confirm_pair_device_view.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_binding.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_view.dart'; import 'package:starwork_flutter/views/device/searchDevice/search_device_binding.dart'; import 'package:starwork_flutter/views/device/searchDevice/search_device_view.dart'; import 'package:starwork_flutter/views/home/home_binding.dart'; @@ -123,5 +125,10 @@ class AppPages { page: () => TeamInfoView(), binding: TeamInfoBinding(), ), + GetPage( + name: AppRoutes.deviceManage, + page: () => DeviceManageView(), + binding: DeviceManageBinding(), + ), ]; } diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index ebe84e7..eea4167 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -8,8 +8,6 @@ class AppRoutes{ static const String inputVerificationCode = '/inputVerificationCode'; static const String forgotPassword = '/forgotPassword'; static const String setNewPassword = '/setNewPassword'; - static const String searchDevice = '/searchDevice'; - static const String confirmPairDevice = '/confirmPairDevice'; static const String teamNotice = '/team/teamNotice'; static const String teamNoticeDetails = '/team/teamNoticeDetails'; static const String teamUseCaseSetting = '/team/useCaseSetting'; @@ -17,4 +15,7 @@ class AppRoutes{ static const String teamJoinTeam = '/team/joinTeam'; static const String teamManage = '/team/teamManage'; static const String teamInfo = '/team/teamInfo'; + static const String deviceManage = '/device/deviceManage'; + static const String searchDevice = '/device/searchDevice'; + static const String confirmPairDevice = '/device/confirmPairDevice'; } \ No newline at end of file diff --git a/lib/views/device/deviceManage/device_manage_binding.dart b/lib/views/device/deviceManage/device_manage_binding.dart new file mode 100644 index 0000000..8eda40a --- /dev/null +++ b/lib/views/device/deviceManage/device_manage_binding.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_controller.dart'; + +class DeviceManageBinding extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => DeviceManageController()); + } +} \ No newline at end of file diff --git a/lib/views/device/deviceManage/device_manage_controller.dart b/lib/views/device/deviceManage/device_manage_controller.dart new file mode 100644 index 0000000..e1fe639 --- /dev/null +++ b/lib/views/device/deviceManage/device_manage_controller.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:get/get_rx/get_rx.dart'; +import 'package:starwork_flutter/common/constant/app_support_device_type.dart'; + +class DeviceManageController extends GetxController with GetSingleTickerProviderStateMixin { + // 选中状态 0:全部状态 1:在线 2:离线 + final RxInt selectedStatusIndex = 0.obs; + + // 选中设备类型 + final selectedDeviceType = AppSupportDeviceType.all.obs; +} diff --git a/lib/views/device/deviceManage/device_manage_view.dart b/lib/views/device/deviceManage/device_manage_view.dart new file mode 100644 index 0000000..ad14594 --- /dev/null +++ b/lib/views/device/deviceManage/device_manage_view.dart @@ -0,0 +1,340 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:get/get.dart'; +import 'package:starwork_flutter/common/constant/app_colors.dart'; +import 'package:starwork_flutter/common/constant/app_support_device_type.dart'; +import 'package:starwork_flutter/common/widgets/custome_app_bar_wdiget.dart'; +import 'package:starwork_flutter/extension/function_extension.dart'; +import 'package:starwork_flutter/views/device/deviceManage/device_manage_controller.dart'; + +class DeviceManageView extends GetView { + const DeviceManageView({super.key}); + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: () { + FocusScope.of(context).requestFocus(FocusNode()); + }, + child: Scaffold( + backgroundColor: AppColors.scaffoldBackgroundColor, + appBar: CustomAppBarWidget( + title: '设备管理'.tr, + ), + body: SafeArea( + child: Padding( + padding: EdgeInsets.symmetric( + vertical: 10.h, + ), + child: Column( + children: [ + Container( + padding: EdgeInsets.symmetric( + horizontal: 10.w, + vertical: 10.h, + ), + decoration: BoxDecoration( + color: Colors.white, + ), + child: Column( + children: [ + _buildSearchBar(), + SizedBox( + height: 10.h, + ), + _buildLabelRow(), + ], + ), + ), + // 主区域:左侧菜单 + 右侧设备列表(占满剩余空间) + Expanded( + // ✅ 关键:让主内容区域占满剩余高度 + child: _buildMainArea(), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + TextButton( + onPressed: () {}, + child: Text( + '添加设备', + style: TextStyle( + color: Colors.blue, + fontWeight: FontWeight.w500, + fontSize: 16.sp, + ), + ), + ), + TextButton( + onPressed: () {}, + child: Text( + '删除设备', + style: TextStyle( + color: Colors.blue, + fontWeight: FontWeight.w500, + fontSize: 16.sp, + ), + ), + ), + TextButton( + onPressed: () {}, + child: Text( + '更多管理', + style: TextStyle( + color: Colors.blue, + fontWeight: FontWeight.w500, + fontSize: 16.sp, + ), + ), + ) + ], + ), + ], + ), + ), + ), + ), + ); + } + + _buildSearchBar() { + return TextField( + decoration: InputDecoration( + hintText: '请输入设备名称或编号'.tr, + hintStyle: TextStyle( + fontSize: 14.sp, + color: const Color(0xFF999999), + ), + prefixIcon: const Icon( + Icons.search, + color: Color(0xFF999999), + ), + filled: true, + // 启用背景填充 + fillColor: const Color(0xFFf0f0f0), + // 灰色背景(可调整色值) + border: InputBorder.none, + // 设置内边距 + contentPadding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + color: Colors.blue, + width: 1.5, + ), + borderRadius: BorderRadius.circular(8.0.r), + ), + enabledBorder: OutlineInputBorder( + borderSide: const BorderSide(color: Colors.transparent), + borderRadius: BorderRadius.circular(8.0.r), + ), + ), + ); + } + + _buildLabelRow() { + return Obx( + () => Row( + children: [ + GestureDetector( + onTap: () { + controller.selectedStatusIndex.value = 0; + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 4.h), + decoration: BoxDecoration( + color: controller.selectedStatusIndex == 0 ? Colors.black : Colors.grey[300], + borderRadius: BorderRadius.circular(4.r), + ), + child: Text( + '全部状态'.tr, + style: TextStyle( + fontSize: 12.sp, + color: controller.selectedStatusIndex == 0 ? Colors.white : Colors.grey[500], + fontWeight: FontWeight.w500, + ), + ), + ), + ), + SizedBox( + width: 10.w, + ), + GestureDetector( + onTap: () { + controller.selectedStatusIndex.value = 1; + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 4.h), + decoration: BoxDecoration( + color: controller.selectedStatusIndex == 1 ? Colors.black : Colors.grey[300], + borderRadius: BorderRadius.circular(4.r), + ), + child: Text( + '在线(${1})'.tr, + style: TextStyle( + fontSize: 12.sp, + color: controller.selectedStatusIndex == 1 ? Colors.white : Colors.grey[500], + fontWeight: FontWeight.w500, + ), + ), + ), + ), + SizedBox( + width: 10.w, + ), + GestureDetector( + onTap: () { + controller.selectedStatusIndex.value = 2; + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 4.h), + decoration: BoxDecoration( + color: controller.selectedStatusIndex == 2 ? Colors.black : Colors.grey[300], + borderRadius: BorderRadius.circular(4.r), + ), + child: Text( + '离线(${1})'.tr, + style: TextStyle( + fontSize: 12.sp, + color: controller.selectedStatusIndex == 2 ? Colors.white : Colors.grey[500], + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ], + ), + ); + } + + _buildMainArea() { + return Row( + children: [ + Expanded( + flex: 1, + child: _buildLeftOptionsList(), // 左侧列表 + ), + Expanded( + flex: 4, + child: _buildRightDeviceList(), // 右侧设备 + ), + ], + ); + } + + _buildLeftOptionsList() { + return Container( + decoration: const BoxDecoration( + color: Colors.white, + ), + child: ListView.builder( + itemCount: AppSupportDeviceType.allTypes.length, + itemBuilder: (context, index) { + var deviceType = AppSupportDeviceType.allTypes[index]; + return Obx( + () => GestureDetector( + onTap: () { + controller.selectedDeviceType.value = deviceType; + }, + child: Container( + padding: EdgeInsets.symmetric(vertical: 10.h), + decoration: BoxDecoration( + color: controller.selectedDeviceType.value == deviceType + ? AppColors.scaffoldBackgroundColor + : Colors.white, + ), + alignment: Alignment.center, + child: Text( + '${deviceType.label}(${0})', + style: TextStyle( + fontSize: 10.sp, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ); + }, + ), + ); + } + + _buildRightDeviceList() { + return Container( + padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), + child: GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, // 每行两列 + crossAxisSpacing: 6.w, // 列间距 + mainAxisSpacing: 6.h, // 行间距 + childAspectRatio: 1.6, // 宽高比,可根据需要调整 + ), + itemCount: 100, + itemBuilder: (context, index) { + return Container( + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.all(Radius.circular(8.r)), + ), + padding: EdgeInsets.symmetric( + horizontal: 10.w, + ), + alignment: Alignment.centerLeft, + child: Obx( + () => Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (controller.selectedDeviceType.value.iconImagePath != null) + Image( + image: AssetImage(controller.selectedDeviceType.value.iconImagePath!), + width: 26.w, + height: 26.w, + fit: BoxFit.contain, + gaplessPlayback: true, + // 防止闪烁 + filterQuality: FilterQuality.medium, + // 优化过滤质量 + errorBuilder: (context, error, stackTrace) { + return Icon( + Icons.image_not_supported, + size: 26.sp, + color: Colors.grey, + ); + }, + ), + SizedBox( + height: 6.h, + ), + Text( + 'TMH_5sdds5465a4sd5665$index', + style: TextStyle( + fontSize: 10.sp, + fontWeight: FontWeight.w400, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + SizedBox( + height: 4.h, + ), + Text( + '在线', + style: TextStyle( + color: Colors.green, + fontSize: 10.sp, + fontWeight: FontWeight.w500, + ), + ) + ], + ), + ), + ); + }, + ), + ); + } +} diff --git a/lib/views/team/teamManage/team_manage_view.dart b/lib/views/team/teamManage/team_manage_view.dart index 0eaf763..da19f71 100644 --- a/lib/views/team/teamManage/team_manage_view.dart +++ b/lib/views/team/teamManage/team_manage_view.dart @@ -1,11 +1,14 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/widgets.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:starwork_flutter/api/model/team/response/team_info_response.dart'; import 'package:starwork_flutter/base/app_logger.dart'; import 'package:starwork_flutter/common/constant/app_colors.dart'; +import 'package:starwork_flutter/common/widgets/custom_cell_list_widget.dart'; +import 'package:starwork_flutter/common/widgets/custom_cell_widget.dart'; import 'package:starwork_flutter/common/widgets/custome_app_bar_wdiget.dart'; import 'package:starwork_flutter/extension/function_extension.dart'; import 'package:starwork_flutter/routes/app_routes.dart'; @@ -50,7 +53,6 @@ class TeamManageView extends GetView { SizedBox( height: 10.h, ), - SizedBox( width: double.infinity, child: Row( @@ -59,7 +61,7 @@ class TeamManageView extends GetView { child: ElevatedButton( onPressed: () {}.debounce(), style: ElevatedButton.styleFrom( - backgroundColor: Colors.grey[100], + backgroundColor: Colors.white, padding: EdgeInsets.symmetric(vertical: 12.h), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.r)), ), @@ -205,122 +207,49 @@ class TeamManageView extends GetView { SizedBox( height: 10.h, ), - Container( - width: double.infinity, - padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.r), - color: Colors.white, - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.perm_contact_calendar_rounded, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '人员配置', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + CustomCellListWidget( + children: [ + CustomCellWidget( + onTap: () {}, + leftText: '人员配置'.tr, + leftIcon: Icon( + Icons.perm_contact_calendar_rounded, + color: Colors.blue.withOpacity(0.8), ), - - SizedBox(height: 10.h), - // 分割线 - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.person, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '权限分配', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + ), + CustomCellWidget( + onTap: () {}, + leftText: '权限分配'.tr, + leftIcon: Icon( + Icons.person, + color: Colors.blue.withOpacity(0.8), ), - SizedBox(height: 10.h), - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.switch_account_rounded, - color: Colors.blue, - ), - SizedBox( - width: 8.w, - ), - Text( - '新用户审核', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], - ) - ], - ), - ) + ), + CustomCellWidget( + onTap: () {}, + leftText: '新用户审核'.tr, + leftIcon: Icon( + Icons.switch_account_rounded, + color: Colors.blue.withOpacity(0.8), + ), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], + ), + ), + ], + ), ], ); } @@ -340,160 +269,64 @@ class TeamManageView extends GetView { SizedBox( height: 10.h, ), - Container( - width: double.infinity, - padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 10.h), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.r), - color: Colors.white, - ), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.assessment_rounded, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '设备管理', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + CustomCellListWidget( + children: [ + CustomCellWidget( + onTap: () { + Get.toNamed(AppRoutes.deviceManage); + }, + leftText: '设备管理'.tr, + leftIcon: Icon( + Icons.storage_rounded, + color: Colors.blue.withOpacity(0.8), ), - - SizedBox(height: 10.h), - // 分割线 - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.assessment_rounded, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '运维服务', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + ), + CustomCellWidget( + onTap: () {}, + leftText: '运维服务'.tr, + leftIcon: Icon( + Icons.assessment_rounded, + color: Colors.blue.withOpacity(0.8), ), - - SizedBox(height: 10.h), - // 分割线 - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.assignment, - color: Colors.blue.withOpacity(0.8), - ), - SizedBox( - width: 8.w, - ), - Text( - '操作日志', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], + ), + CustomCellWidget( + onTap: () {}, + leftText: '操作日志'.tr, + leftIcon: Icon( + Icons.assignment, + color: Colors.blue.withOpacity(0.8), ), - SizedBox(height: 10.h), - Divider( - height: 1.h, - color: Colors.grey.withOpacity(0.2), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], ), - SizedBox(height: 10.h), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Row( - children: [ - Icon( - Icons.qr_code_2_outlined, - color: Colors.blue, - ), - SizedBox( - width: 8.w, - ), - Text( - '团队二维码', - style: TextStyle( - fontSize: 14.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - Icon( - Icons.arrow_forward_ios_rounded, - color: Colors.grey, - size: 14.sp, - ) - ], - ) - ], - ), - ) + ), + CustomCellWidget( + onTap: () {}, + leftText: '团队二维码'.tr, + leftIcon: Icon( + Icons.qr_code_2_outlined, + color: Colors.blue.withOpacity(0.8), + ), + rightWidget: Icon( + Icons.arrow_forward_ios_rounded, + size: 16.sp, + color: Colors.grey[300], + ), + ), + ], + ), ], ); } diff --git a/lib/views/team/teamNotice/team_notice_view.dart b/lib/views/team/teamNotice/team_notice_view.dart index b5f1c69..a89c554 100644 --- a/lib/views/team/teamNotice/team_notice_view.dart +++ b/lib/views/team/teamNotice/team_notice_view.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:starwork_flutter/common/constant/app_colors.dart'; +import 'package:starwork_flutter/common/widgets/custome_app_bar_wdiget.dart'; import 'package:starwork_flutter/views/team/teamNotice/team_notice_controller.dart'; class TeamNoticeView extends GetView { @@ -11,32 +12,7 @@ class TeamNoticeView extends GetView { @override Widget build(BuildContext context) { return Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - elevation: 0, - surfaceTintColor: Colors.transparent, - shadowColor: Colors.transparent, - scrolledUnderElevation: 0, - leading: IconButton( - icon: const Icon(Icons.arrow_back_ios_new_rounded), // 替换为任意图标,如关闭、菜单等 - onPressed: () { - // 自定义逻辑,例如:关闭页面、退出流程等 - Navigator.of(context).pop(); - }, - ), - title: Row( - children: [ - Text( - '公告'.tr, - style: TextStyle( - fontSize: 18.sp, - fontWeight: FontWeight.w500, - color: Colors.black87, - ), - ), - ], - ), - ), + appBar: CustomAppBarWidget(title: '公告'.tr), body: Column( children: [ TabBar(