feat: 增加手动添加、邀请设置页面
This commit is contained in:
parent
b176893a39
commit
7f84b06d85
BIN
assets/images/mock_er_code.png
Normal file
BIN
assets/images/mock_er_code.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
12
lib/app.dart
12
lib/app.dart
@ -37,6 +37,18 @@ class _AppState extends State<App> {
|
||||
selectionHandleColor: Colors.blue.shade300,
|
||||
),
|
||||
dialogBackgroundColor: Colors.white,
|
||||
checkboxTheme: CheckboxThemeData(
|
||||
side: const BorderSide(
|
||||
color: Colors.grey,
|
||||
width: 1, // 设置边框粗细
|
||||
),
|
||||
visualDensity: VisualDensity.compact,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
),
|
||||
checkColor: MaterialStateProperty.all(Colors.white),
|
||||
fillColor: MaterialStateProperty.all(Colors.blue),
|
||||
),
|
||||
appBarTheme: AppBarTheme(
|
||||
backgroundColor: Colors.white,
|
||||
elevation: 0,
|
||||
|
||||
@ -4,6 +4,7 @@ class AppImages{
|
||||
static const String iconOneKeyDoorKey = 'assets/icon/icon_one_key_door_key.png';
|
||||
static const String bgOneKeyDoor = 'assets/images/bg_one_key_door.png';
|
||||
static const String mockImage = 'assets/images/mockImage.jpg';
|
||||
static const String mockErCode = 'assets/images/mock_er_code.png';
|
||||
|
||||
// 视频类图标
|
||||
static const String iconVideoCenter = 'assets/icon/video_center.png';
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
@ -6,6 +7,7 @@ class CustomCellWidget extends StatelessWidget {
|
||||
const CustomCellWidget({
|
||||
super.key,
|
||||
required this.leftText,
|
||||
this.leftSubText,
|
||||
this.leftIcon,
|
||||
this.rightWidget,
|
||||
this.onTap,
|
||||
@ -13,6 +15,7 @@ class CustomCellWidget extends StatelessWidget {
|
||||
});
|
||||
|
||||
final String leftText;
|
||||
final String? leftSubText;
|
||||
final Icon? leftIcon;
|
||||
final Widget? rightWidget;
|
||||
final GestureTapCallback? onTap;
|
||||
@ -36,21 +39,48 @@ class CustomCellWidget extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
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,
|
||||
Expanded(
|
||||
flex: 1,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
if (leftIcon != null) leftIcon!,
|
||||
if (leftIcon != null) SizedBox(width: 4.w),
|
||||
Expanded(
|
||||
child: Text(
|
||||
leftText,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black87,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
if (leftSubText != null)
|
||||
SizedBox(
|
||||
height: 4.h,
|
||||
),
|
||||
if (leftSubText != null)
|
||||
Text(
|
||||
leftSubText!,
|
||||
style: TextStyle(
|
||||
fontSize: 11.sp,
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
rightWidget ??
|
||||
Text(
|
||||
|
||||
@ -7,6 +7,8 @@ class CustomAppBarWidget extends StatelessWidget implements PreferredSizeWidget
|
||||
final Widget? leading;
|
||||
final bool centerTitle;
|
||||
final Color? backgroundColor;
|
||||
final Color? titleColor;
|
||||
final Color? backIconColor;
|
||||
final double? elevation;
|
||||
final bool? showBackButton;
|
||||
|
||||
@ -17,6 +19,8 @@ class CustomAppBarWidget extends StatelessWidget implements PreferredSizeWidget
|
||||
this.leading,
|
||||
this.centerTitle = true,
|
||||
this.backgroundColor = Colors.white,
|
||||
this.titleColor = Colors.black,
|
||||
this.backIconColor = Colors.black,
|
||||
this.elevation,
|
||||
this.showBackButton = true,
|
||||
});
|
||||
@ -31,6 +35,7 @@ class CustomAppBarWidget extends StatelessWidget implements PreferredSizeWidget
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: titleColor,
|
||||
),
|
||||
),
|
||||
actions: actions,
|
||||
@ -39,7 +44,10 @@ class CustomAppBarWidget extends StatelessWidget implements PreferredSizeWidget
|
||||
leading: leading ??
|
||||
(showBackButton && this.showBackButton == true
|
||||
? IconButton(
|
||||
icon: const Icon(Icons.arrow_back_ios_new_rounded),
|
||||
icon: Icon(
|
||||
Icons.arrow_back_ios_new_rounded,
|
||||
color: backIconColor,
|
||||
),
|
||||
onPressed: () => Navigator.of(context).pop(),
|
||||
)
|
||||
: null),
|
||||
|
||||
@ -21,7 +21,7 @@ class F {
|
||||
// Release环境的API地址
|
||||
switch (appFlavor) {
|
||||
case Flavor.sky:
|
||||
return 'https://192.168.1.136:8112/api'; // 生产环境API
|
||||
return 'https://192.168.1.139:8112/api'; // 生产环境API
|
||||
case Flavor.xhj:
|
||||
return 'https://api.xhjcn.ltd/api'; // 生产环境API
|
||||
}
|
||||
@ -29,7 +29,7 @@ class F {
|
||||
// Debug/Profile环境的API地址(开发环境)
|
||||
switch (appFlavor) {
|
||||
case Flavor.sky:
|
||||
return 'http://192.168.1.136:8112/api';
|
||||
return 'http://192.168.1.139:8112/api';
|
||||
case Flavor.xhj:
|
||||
return 'https://loacl.work.star-lock.cn/api';
|
||||
}
|
||||
@ -67,7 +67,7 @@ class F {
|
||||
// Debug/Profile环境的StarCloud地址(开发环境)
|
||||
switch (appFlavor) {
|
||||
case Flavor.sky:
|
||||
return 'http://192.168.1.136:8111/sdk';
|
||||
return 'http://192.168.1.139:8111/sdk';
|
||||
case Flavor.xhj:
|
||||
return 'http://local.cloud.star-lock.cn';
|
||||
}
|
||||
|
||||
@ -34,6 +34,12 @@ import 'package:starwork_flutter/views/login/login_binding.dart';
|
||||
import 'package:starwork_flutter/views/login/login_view.dart';
|
||||
import 'package:starwork_flutter/views/main/main_binding.dart';
|
||||
import 'package:starwork_flutter/views/main/main_view.dart';
|
||||
import 'package:starwork_flutter/views/team/addPerson/add_person_binding.dart';
|
||||
import 'package:starwork_flutter/views/team/addPerson/add_person_view.dart';
|
||||
import 'package:starwork_flutter/views/team/inviteTeamMember/invitationSettings/invitation_settings_binding.dart';
|
||||
import 'package:starwork_flutter/views/team/inviteTeamMember/invitationSettings/invitation_settings_view.dart';
|
||||
import 'package:starwork_flutter/views/team/inviteTeamMember/invite_team_member_binding.dart';
|
||||
import 'package:starwork_flutter/views/team/inviteTeamMember/invite_team_member_view.dart';
|
||||
import 'package:starwork_flutter/views/team/joinTeam/join_team_binding.dart';
|
||||
import 'package:starwork_flutter/views/team/joinTeam/join_team_view.dart';
|
||||
import 'package:starwork_flutter/views/team/teamManage/teamInfo/team_info_binding.dart';
|
||||
@ -186,5 +192,20 @@ class AppPages {
|
||||
page: () => AccessControlManageView(),
|
||||
binding: AccessControlManageBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: AppRoutes.teamInviteTeamMember,
|
||||
page: () => InviteTeamMemberView(),
|
||||
binding: InviteTeamMemberBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: AppRoutes.teamInvitationSettings,
|
||||
page: () => InvitationSettingsView(),
|
||||
binding: InvitationSettingsBinding(),
|
||||
),
|
||||
GetPage(
|
||||
name: AppRoutes.teamAddPerson,
|
||||
page: () => AddPersonView(),
|
||||
binding: AddPersonBinding(),
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
@ -15,6 +15,9 @@ class AppRoutes{
|
||||
static const String teamJoinTeam = '/team/joinTeam';
|
||||
static const String teamManage = '/team/teamManage';
|
||||
static const String teamInfo = '/team/teamInfo';
|
||||
static const String teamInviteTeamMember = '/team/inviteTeamMember';
|
||||
static const String teamInvitationSettings = '/team/invitationSettings';
|
||||
static const String teamAddPerson = '/team/addPerson';
|
||||
static const String deviceManage = '/device/deviceManage';
|
||||
static const String searchDevice = '/device/searchDevice';
|
||||
static const String confirmPairDevice = '/device/confirmPairDevice';
|
||||
|
||||
@ -115,18 +115,13 @@ class DeviceSettingView extends GetView<DeviceSettingController> {
|
||||
leftText: '远程开锁'.tr,
|
||||
onTap: () {},
|
||||
visible: controller.lockFeatureMap['remoteUnlock'] == 1 && controller.lockFeatureMap['wifi'] == 1,
|
||||
rightWidget: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
CupertinoSwitch(
|
||||
value: controller.lockSettingMap['remoteUnlock'] == 1,
|
||||
onChanged: (bool value) {
|
||||
controller.enableRemoteUnlock(value);
|
||||
},
|
||||
activeColor: Colors.blue, // 可选:打开时的颜色(iOS 默认为系统蓝色,可自定义)
|
||||
trackColor: Colors.grey, // 可选:关闭时的背景轨道颜色
|
||||
),
|
||||
],
|
||||
rightWidget: CupertinoSwitch(
|
||||
value: controller.lockSettingMap['remoteUnlock'] == 1,
|
||||
onChanged: (bool value) {
|
||||
controller.enableRemoteUnlock(value);
|
||||
},
|
||||
activeColor: Colors.blue, // 可选:打开时的颜色(iOS 默认为系统蓝色,可自定义)
|
||||
trackColor: Colors.grey, // 可选:关闭时的背景轨道颜色
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
|
||||
@ -280,7 +280,7 @@ class HomeView extends GetView<HomeController> {
|
||||
'onTap': () => _handleMenuTap(0),
|
||||
},
|
||||
{
|
||||
'title': '加入团队',
|
||||
'title': '邀请人员',
|
||||
'icon': Icons.group_add,
|
||||
'onTap': () => _handleMenuTap(1),
|
||||
},
|
||||
@ -370,7 +370,7 @@ class HomeView extends GetView<HomeController> {
|
||||
Get.toNamed(AppRoutes.searchDevice);
|
||||
break;
|
||||
case 1:
|
||||
Get.toNamed(AppRoutes.teamJoinTeam);
|
||||
Get.toNamed(AppRoutes.teamInviteTeamMember);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,11 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:starwork_flutter/common/constant/app_images.dart';
|
||||
import 'package:starwork_flutter/common/constant/cache_keys.dart';
|
||||
import 'package:starwork_flutter/common/utils/shared_preferences_utils.dart';
|
||||
|
||||
import 'mine_controller.dart';
|
||||
|
||||
@ -40,15 +43,20 @@ class MineView extends GetView<MineController> {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
'我的',
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Colors.black87,
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
SharedPreferencesUtils.delString(CacheKeys.token);
|
||||
},
|
||||
child: Text(
|
||||
'我的',
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Colors.black87,
|
||||
),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 1,
|
||||
),
|
||||
overflow: TextOverflow.ellipsis,
|
||||
maxLines: 1,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
@ -170,10 +178,7 @@ class MineView extends GetView<MineController> {
|
||||
SizedBox(width: 4.w),
|
||||
Text(
|
||||
'我的团队',
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w500),
|
||||
style: TextStyle(fontSize: 12.sp, color: Colors.black, fontWeight: FontWeight.w500),
|
||||
),
|
||||
],
|
||||
),
|
||||
@ -182,7 +187,6 @@ class MineView extends GetView<MineController> {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// 菜单项区域
|
||||
Widget _buildMenuItems() {
|
||||
return Container(
|
||||
@ -267,7 +271,7 @@ class MineView extends GetView<MineController> {
|
||||
return InkWell(
|
||||
onTap: onTap,
|
||||
child: Container(
|
||||
padding: EdgeInsets.symmetric( vertical: 10.h),
|
||||
padding: EdgeInsets.symmetric(vertical: 10.h),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
|
||||
10
lib/views/team/addPerson/add_person_binding.dart
Normal file
10
lib/views/team/addPerson/add_person_binding.dart
Normal file
@ -0,0 +1,10 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'add_person_controller.dart';
|
||||
|
||||
class AddPersonBinding extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
Get.lazyPut(() => AddPersonController());
|
||||
}
|
||||
}
|
||||
8
lib/views/team/addPerson/add_person_controller.dart
Normal file
8
lib/views/team/addPerson/add_person_controller.dart
Normal file
@ -0,0 +1,8 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get/get_rx/get_rx.dart';
|
||||
import 'package:get/get_rx/src/rx_types/rx_types.dart';
|
||||
import 'package:starwork_flutter/base/base_controller.dart';
|
||||
|
||||
class AddPersonController extends BaseController {
|
||||
RxString selectedGender = 'male'.obs;
|
||||
}
|
||||
465
lib/views/team/addPerson/add_person_view.dart
Normal file
465
lib/views/team/addPerson/add_person_view.dart
Normal file
@ -0,0 +1,465 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
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/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 'add_person_controller.dart';
|
||||
|
||||
class AddPersonView extends GetView<AddPersonController> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.scaffoldBackgroundColor,
|
||||
appBar: CustomAppBarWidget(
|
||||
title: '添加人员'.tr,
|
||||
backgroundColor: AppColors.scaffoldBackgroundColor,
|
||||
),
|
||||
body: SafeArea(
|
||||
child: SingleChildScrollView(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: 10.w,
|
||||
right: 10.w,
|
||||
bottom: 10.h,
|
||||
),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'基本信息'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 6.h,
|
||||
),
|
||||
CustomCellListWidget(
|
||||
children: [
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '组织'.tr,
|
||||
leftIcon: Icon(
|
||||
Icons.circle,
|
||||
size: 4.w,
|
||||
color: Colors.red,
|
||||
),
|
||||
rightWidget: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'请选择',
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 4.w,
|
||||
),
|
||||
Icon(
|
||||
Icons.arrow_forward_ios_rounded,
|
||||
size: 16.sp,
|
||||
color: Colors.grey[300],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '姓名'.tr,
|
||||
leftIcon: Icon(
|
||||
Icons.circle,
|
||||
size: 4.w,
|
||||
color: Colors.red,
|
||||
),
|
||||
rightWidget: Expanded(
|
||||
flex: 3,
|
||||
child: TextField(
|
||||
keyboardType: TextInputType.text,
|
||||
textInputAction: TextInputAction.next,
|
||||
textAlign: TextAlign.end,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
isCollapsed: true,
|
||||
hintText: '请输入姓名'.tr,
|
||||
hintStyle: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
// 设置无边框
|
||||
border: InputBorder.none,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
// 获取焦点时的边框
|
||||
focusedBorder: InputBorder.none,
|
||||
enabledBorder: InputBorder.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '开通账号'.tr,
|
||||
leftSubText: '可登录并使用应用或管理功能',
|
||||
leftIcon: Icon(
|
||||
Icons.circle,
|
||||
size: 4.w,
|
||||
color: Colors.red,
|
||||
),
|
||||
rightWidget: CupertinoSwitch(
|
||||
value: false,
|
||||
onChanged: (bool value) {},
|
||||
activeColor: Colors.blue, // 可选:打开时的颜色(iOS 默认为系统蓝色,可自定义)
|
||||
trackColor: Colors.grey, // 可选:关闭时的背景轨道颜色
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '分配权限'.tr,
|
||||
leftIcon: Icon(
|
||||
Icons.circle,
|
||||
size: 4.w,
|
||||
color: Colors.red,
|
||||
),
|
||||
rightWidget: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'企业员工',
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 4.w,
|
||||
),
|
||||
Icon(
|
||||
Icons.arrow_forward_ios_rounded,
|
||||
size: 16.sp,
|
||||
color: Colors.grey[300],
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Text(
|
||||
'扩展信息'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
CustomCellListWidget(
|
||||
children: [
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '工号'.tr,
|
||||
rightWidget: Expanded(
|
||||
flex: 3,
|
||||
child: TextField(
|
||||
keyboardType: TextInputType.text,
|
||||
textInputAction: TextInputAction.next,
|
||||
textAlign: TextAlign.end,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
isCollapsed: true,
|
||||
hintText: '选填'.tr,
|
||||
hintStyle: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
// 设置无边框
|
||||
border: InputBorder.none,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
// 获取焦点时的边框
|
||||
focusedBorder: InputBorder.none,
|
||||
enabledBorder: InputBorder.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '性别'.tr,
|
||||
rightWidget: Obx(
|
||||
() => Row(
|
||||
children: [
|
||||
Radio<String>(
|
||||
value: 'male',
|
||||
activeColor: Colors.blue,
|
||||
groupValue: controller.selectedGender.value,
|
||||
visualDensity: VisualDensity.compact,
|
||||
onChanged: (value) {
|
||||
controller.selectedGender.value = value!;
|
||||
},
|
||||
),
|
||||
Text('男'),
|
||||
Radio<String>(
|
||||
value: 'female',
|
||||
activeColor: Colors.blue,
|
||||
groupValue: controller.selectedGender.value,
|
||||
visualDensity: VisualDensity.compact,
|
||||
onChanged: (value) {
|
||||
controller.selectedGender.value = value!;
|
||||
},
|
||||
),
|
||||
Text('女'),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '有效期'.tr,
|
||||
rightWidget: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'请选择',
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 4.w,
|
||||
),
|
||||
Icon(
|
||||
Icons.arrow_forward_ios_rounded,
|
||||
size: 16.sp,
|
||||
color: Colors.grey[300],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '职务'.tr,
|
||||
rightWidget: Expanded(
|
||||
flex: 3,
|
||||
child: TextField(
|
||||
keyboardType: TextInputType.text,
|
||||
textInputAction: TextInputAction.next,
|
||||
textAlign: TextAlign.end,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
isCollapsed: true,
|
||||
hintText: '选填'.tr,
|
||||
hintStyle: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
// 设置无边框
|
||||
border: InputBorder.none,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
// 获取焦点时的边框
|
||||
focusedBorder: InputBorder.none,
|
||||
enabledBorder: InputBorder.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '备注'.tr,
|
||||
rightWidget: Expanded(
|
||||
flex: 3,
|
||||
child: TextField(
|
||||
keyboardType: TextInputType.text,
|
||||
textInputAction: TextInputAction.next,
|
||||
textAlign: TextAlign.end,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
isCollapsed: true,
|
||||
hintText: '选填'.tr,
|
||||
hintStyle: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
// 设置无边框
|
||||
border: InputBorder.none,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
// 获取焦点时的边框
|
||||
focusedBorder: InputBorder.none,
|
||||
enabledBorder: InputBorder.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '身份证号码'.tr,
|
||||
rightWidget: Expanded(
|
||||
flex: 3,
|
||||
child: TextField(
|
||||
keyboardType: TextInputType.text,
|
||||
textInputAction: TextInputAction.next,
|
||||
textAlign: TextAlign.end,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
isCollapsed: true,
|
||||
hintText: '选填'.tr,
|
||||
hintStyle: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black54,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
// 设置无边框
|
||||
border: InputBorder.none,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
// 获取焦点时的边框
|
||||
focusedBorder: InputBorder.none,
|
||||
enabledBorder: InputBorder.none,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: Text(
|
||||
textAlign: TextAlign.center,
|
||||
'温馨提示:人脸/指纹/卡片信息需先保存后录入',
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
CustomCellListWidget(
|
||||
children: [
|
||||
CustomCellWidget(
|
||||
onTap: () {
|
||||
controller.showFunctionNotOpen();
|
||||
},
|
||||
leftText: '其他添加方式'.tr,
|
||||
rightWidget: Icon(
|
||||
Icons.arrow_forward_ios_rounded,
|
||||
size: 16.sp,
|
||||
color: Colors.grey,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
Checkbox(
|
||||
value: true,
|
||||
// 转换为 bool
|
||||
onChanged: (bool? value) {},
|
||||
),
|
||||
Text(
|
||||
'向用户发送短信邀请通知',
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {}.debounce(),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.grey[100],
|
||||
padding: EdgeInsets.symmetric(vertical: 12.h),
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'保存'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Colors.blue,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 10.w,
|
||||
),
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {}.debounce(),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.blue,
|
||||
padding: EdgeInsets.symmetric(vertical: 12.h),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.r)),
|
||||
),
|
||||
child: Text(
|
||||
'保存并继续添加'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'invitation_settings_controller.dart';
|
||||
|
||||
class InvitationSettingsBinding extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
Get.lazyPut(() => InvitationSettingsController());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:starwork_flutter/base/base_controller.dart';
|
||||
|
||||
class InvitationSettingsController extends BaseController {
|
||||
// TODO: 在这里添加业务逻辑
|
||||
}
|
||||
@ -0,0 +1,97 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
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/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 'invitation_settings_controller.dart';
|
||||
|
||||
class InvitationSettingsView extends GetView<InvitationSettingsController> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: AppColors.scaffoldBackgroundColor,
|
||||
appBar: CustomAppBarWidget(
|
||||
title: '邀请设置'.tr,
|
||||
backgroundColor: AppColors.scaffoldBackgroundColor,
|
||||
),
|
||||
body: SafeArea(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 10.w,
|
||||
vertical: 10.h,
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
CustomCellListWidget(
|
||||
children: [
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '人员配置'.tr,
|
||||
leftSubText: '关闭审核后,新申请的用户无需审核即可加入成功',
|
||||
rightWidget: CupertinoSwitch(
|
||||
value: false,
|
||||
onChanged: (bool value) {},
|
||||
activeColor: Colors.blue, // 可选:打开时的颜色(iOS 默认为系统蓝色,可自定义)
|
||||
trackColor: Colors.grey, // 可选:关闭时的背景轨道颜色
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '申请加入时可录入人脸'.tr,
|
||||
rightWidget: CupertinoSwitch(
|
||||
value: false,
|
||||
onChanged: (bool value) {},
|
||||
activeColor: Colors.blue, // 可选:打开时的颜色(iOS 默认为系统蓝色,可自定义)
|
||||
trackColor: Colors.grey, // 可选:关闭时的背景轨道颜色
|
||||
),
|
||||
),
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '邀请信息30天后自动失效'.tr,
|
||||
rightWidget: CupertinoSwitch(
|
||||
value: false,
|
||||
onChanged: (bool value) {},
|
||||
activeColor: Colors.blue, // 可选:打开时的颜色(iOS 默认为系统蓝色,可自定义)
|
||||
trackColor: Colors.grey, // 可选:关闭时的背景轨道颜色
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 10.h),
|
||||
CustomCellListWidget(
|
||||
children: [
|
||||
CustomCellWidget(
|
||||
onTap: () {},
|
||||
leftText: '给用户设置的默认角色'.tr,
|
||||
leftSubText: '对手动添加与邀请加入的成员均会生效',
|
||||
rightWidget: Row(
|
||||
children: [
|
||||
Text(
|
||||
'企业员工'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 4.w),
|
||||
Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 16.sp,
|
||||
color: Colors.grey,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import 'invite_team_member_controller.dart';
|
||||
|
||||
class InviteTeamMemberBinding extends Bindings {
|
||||
@override
|
||||
void dependencies() {
|
||||
Get.lazyPut(() => InviteTeamMemberController());
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:starwork_flutter/base/base_controller.dart';
|
||||
|
||||
class InviteTeamMemberController extends BaseController {
|
||||
// TODO: 在这里添加业务逻辑
|
||||
}
|
||||
250
lib/views/team/inviteTeamMember/invite_team_member_view.dart
Normal file
250
lib/views/team/inviteTeamMember/invite_team_member_view.dart
Normal file
@ -0,0 +1,250 @@
|
||||
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_images.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';
|
||||
import 'invite_team_member_controller.dart';
|
||||
|
||||
class InviteTeamMemberView extends GetView<InviteTeamMemberController> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: CustomAppBarWidget(
|
||||
title: '邀请人员'.tr,
|
||||
titleColor: Colors.white,
|
||||
backIconColor: Colors.white,
|
||||
backgroundColor: Colors.blue[500],
|
||||
),
|
||||
backgroundColor: Colors.blue[500],
|
||||
body: SafeArea(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 10.w,
|
||||
vertical: 10.h,
|
||||
),
|
||||
child: SizedBox(
|
||||
width: double.infinity,
|
||||
child: Column(
|
||||
children: [
|
||||
Stack(
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 320.h,
|
||||
margin: EdgeInsets.only(
|
||||
top: 40.h,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white.withOpacity(0.3),
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 10.w,
|
||||
vertical: 10.h,
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: double.infinity,
|
||||
height: 330.h,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.blue[50],
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
),
|
||||
margin: EdgeInsets.only(
|
||||
top: 20.h,
|
||||
left: 10.w,
|
||||
right: 10.w,
|
||||
),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 10.w,
|
||||
vertical: 10.h,
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Text(
|
||||
'19210651的互联',
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10.h),
|
||||
ClipRRect(
|
||||
borderRadius: BorderRadius.circular(8.r),
|
||||
child: Image(
|
||||
width: 220.w,
|
||||
image: const AssetImage(AppImages.mockErCode),
|
||||
fit: BoxFit.cover, // 保持图片比例并填满容器
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10.h),
|
||||
Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'团队码',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w300,
|
||||
color: Colors.grey,
|
||||
fontSize: 16.sp,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 5.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'19210651',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Colors.black,
|
||||
fontSize: 16.sp,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 4.w,
|
||||
),
|
||||
Icon(
|
||||
Icons.library_books_rounded,
|
||||
size: 16.sp,
|
||||
color: Colors.grey,
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
'失效时间:永久有效',
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 10.w,
|
||||
),
|
||||
Icon(
|
||||
Icons.refresh,
|
||||
size: 16.sp,
|
||||
color: Colors.white,
|
||||
),
|
||||
Text(
|
||||
'重置',
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Get.toNamed(AppRoutes.teamInvitationSettings);
|
||||
},
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Text(
|
||||
'邀请设置',
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
Icon(
|
||||
Icons.arrow_forward_ios_rounded,
|
||||
size: 16.sp,
|
||||
color: Colors.white,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
controller.showFunctionNotOpen();
|
||||
}.debounce(),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.white,
|
||||
padding: EdgeInsets.symmetric(vertical: 12.h),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.r)),
|
||||
),
|
||||
child: Text(
|
||||
'微信邀请'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Colors.blue,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 10.w,
|
||||
),
|
||||
Expanded(
|
||||
child: ElevatedButton(
|
||||
onPressed: () {
|
||||
Get.toNamed(AppRoutes.teamAddPerson);
|
||||
}.debounce(),
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: Colors.white,
|
||||
padding: EdgeInsets.symmetric(vertical: 12.h),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.r)),
|
||||
),
|
||||
child: Text(
|
||||
'手动添加'.tr,
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Colors.blue,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 20.h,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user