1,群发电子钥匙、授权管理员选择锁页面根据是否为VIP来显示不同权限内容及点击处理逻辑
2,群发电子钥匙--选择锁页面重构代码结构 3,修改部分URL为V2版本
This commit is contained in:
parent
8d34a727f8
commit
27c3d36e49
@ -776,7 +776,7 @@
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "The entire content of. By clicking \"Agree\", you agree and accept all terms. If you choose not to agree, you will not be able to use our products and services and will exit the application.",
|
||||
"不同意": "Disagree",
|
||||
"同意": "agree",
|
||||
"已开通": "Have opened",
|
||||
"已开通": "Current status: Enabled",
|
||||
"该功能是高级功能,请开通后再使用": "This function is an advanced function. Please enable it before using it",
|
||||
"常用程序": "Common Programs",
|
||||
"该锁已被重置": "The lock has been reset",
|
||||
@ -788,5 +788,6 @@
|
||||
"文件校验失败 0x02": "File verification failed 0x02",
|
||||
"文件校验失败 0x03": "File verification failed 0x03",
|
||||
"固件升级完成": "Firmware upgrade completed",
|
||||
"记录":"Record"
|
||||
"记录":"Record",
|
||||
"开通高级功能后才可以对锁进行管理":"You can manage locks only after the advanced function is enabled"
|
||||
}
|
||||
|
||||
@ -803,7 +803,7 @@
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
|
||||
"不同意":"不同意",
|
||||
"同意":"同意",
|
||||
"已开通":"已开通",
|
||||
"当前状态:已开通":"当前状态:已开通",
|
||||
"该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用",
|
||||
"常用程序":"常用程序",
|
||||
"该锁已被重置":"该锁已被重置",
|
||||
@ -815,5 +815,6 @@
|
||||
"文件校验失败 0x02":"文件校验失败 0x02",
|
||||
"文件校验失败 0x03":"文件校验失败 0x03",
|
||||
"固件升级完成":"固件升级完成",
|
||||
"记录":"记录"
|
||||
"记录":"记录",
|
||||
"开通高级功能后才可以对锁进行管理":"开通高级功能后才可以对锁进行管理"
|
||||
}
|
||||
|
||||
@ -806,7 +806,7 @@
|
||||
"的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。": "的全部内容。点击“同意”即表示您同意并接受全部条款。若选择不同意,将无法使用我们的产品和服务,并会退出应用。",
|
||||
"不同意":"不同意",
|
||||
"同意":"同意",
|
||||
"已开通":"已开通",
|
||||
"当前状态:已开通":"当前状态:已开通",
|
||||
"该功能是高级功能,请开通后再使用":"该功能是高级功能,请开通后再使用",
|
||||
"常用程序":"常用程序",
|
||||
"该锁已被重置":"该锁已被重置",
|
||||
@ -818,5 +818,6 @@
|
||||
"解析元数据失败,请选择正确的文件":"解析元数据失败,请选择正确的文件",
|
||||
"文件校验失败 0x02":"文件校验失败 0x02",
|
||||
"文件校验失败 0x03":"文件校验失败 0x03",
|
||||
"固件升级完成":"固件升级完成"
|
||||
"固件升级完成":"固件升级完成",
|
||||
"开通高级功能后才可以对锁进行管理":"开通高级功能后才可以对锁进行管理"
|
||||
}
|
||||
|
||||
@ -134,6 +134,12 @@ class AppColors {
|
||||
Color.fromRGBO(223, 237, 254, 1); //蓝色背景板 139 148 176
|
||||
static const msgNoticeTextColor = Color.fromRGBO(139, 148, 176, 1); //消息提醒字体颜色
|
||||
static const alphaBgViewColor = Color.fromRGBO(0, 0, 0, 0.2); //透明度背景
|
||||
static const vipFeatureBgColor =
|
||||
Color.fromRGBO(251, 248, 229, 1); //需开通高级功能背景色
|
||||
static const vipFeatureBtnBgColor =
|
||||
Color.fromRGBO(197, 167, 109, 1); //需开通高级功能按钮背景色
|
||||
static const vipFeatureBtnTextColor =
|
||||
Color.fromRGBO(110, 98, 81, 1); //需开通高级功能字体颜色
|
||||
|
||||
static Color openPassageModeColor = const Color(0xFFEB2A3B); // 首页开启常开模式颜色(红色)
|
||||
static Color listTimeYellowColor = const Color(0xFFF3BA37); // 首页时间过期颜色(黄色)
|
||||
|
||||
@ -9,12 +9,14 @@ class massSendLockGroupCell extends StatelessWidget {
|
||||
final int currentIndex;
|
||||
List lockListByGroup;
|
||||
final _CallBack selectLockAction;
|
||||
bool isVip;
|
||||
|
||||
massSendLockGroupCell(int index,
|
||||
{Key? key,
|
||||
required this.currentIndex,
|
||||
required this.lockListByGroup,
|
||||
required this.selectLockAction})
|
||||
required this.selectLockAction,
|
||||
required this.isVip})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
@ -70,6 +72,7 @@ class massSendLockGroupCell extends StatelessWidget {
|
||||
: "images/icon_round_unSelect.png",
|
||||
width: 30.w,
|
||||
height: 30.w,
|
||||
color: !isVip ? Colors.grey : AppColors.mainColor,
|
||||
),
|
||||
SizedBox(
|
||||
width: 30.w,
|
||||
@ -78,6 +81,9 @@ class massSendLockGroupCell extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
if (isVip == false) {
|
||||
return;
|
||||
}
|
||||
selectLockAction(itemIndex, itemData.lockId.toString());
|
||||
},
|
||||
);
|
||||
|
||||
@ -57,11 +57,16 @@ class GroupListItem {
|
||||
List<LockListItem>? lockList;
|
||||
bool _isChecked = false;
|
||||
bool get isChecked => _isChecked ?? false;
|
||||
bool isVip = false;
|
||||
|
||||
set isChecked(bool value) => _isChecked = value;
|
||||
|
||||
GroupListItem(
|
||||
{this.lockNum, this.keyGroupId, this.groupType, this.keyGroupName, this.lockList});
|
||||
{this.lockNum,
|
||||
this.keyGroupId,
|
||||
this.groupType,
|
||||
this.keyGroupName,
|
||||
this.lockList});
|
||||
|
||||
GroupListItem.fromJson(Map<String, dynamic> json) {
|
||||
lockNum = json['lockNum'];
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
|
||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart';
|
||||
import 'package:star_lock/network/api_repository.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import 'package:star_lock/tools/storage.dart';
|
||||
|
||||
class MassSendLockGroupListLogic extends BaseGetXController {
|
||||
final MassSendLockGroupListState state = MassSendLockGroupListState();
|
||||
|
||||
//分组列表请求
|
||||
Future<void> mockNetworkDataRequest() async {
|
||||
MassSendLockGroupListEntity entity =
|
||||
await ApiRepository.to.lockGroupList('2');
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
if (entity.data != null) {
|
||||
state.lockGroupList.value = entity.data!.groupList!;
|
||||
state.lockGroupList.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> onReady() async {
|
||||
super.onReady();
|
||||
|
||||
var isVip = await Storage.getBool(saveIsVip);
|
||||
state.isVip.value = isVip ?? false;
|
||||
AppLog.log('isVip: ${state.isVip.value}');
|
||||
}
|
||||
}
|
||||
@ -1,12 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/appRouters.dart';
|
||||
import 'package:star_lock/app_settings/app_colors.dart';
|
||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupCell.dart';
|
||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart';
|
||||
import 'package:star_lock/network/api_repository.dart';
|
||||
import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart';
|
||||
import 'package:star_lock/tools/ExpandedListView.dart';
|
||||
import 'package:star_lock/tools/baseGetXController.dart';
|
||||
import 'package:star_lock/tools/submitBtn.dart';
|
||||
import 'package:star_lock/translations/trans_lib.dart';
|
||||
|
||||
@ -20,16 +20,13 @@ class MassSendLockGroupListPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
|
||||
List lockGroupList = [];
|
||||
// List selectGroupIdList = [];
|
||||
List selectLockIdList = [];
|
||||
// int clickIndex = -1;
|
||||
final logic = Get.put(MassSendLockGroupListLogic());
|
||||
final state = Get.find<MassSendLockGroupListLogic>().state;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
initState() {
|
||||
super.initState();
|
||||
|
||||
mockNetworkDataRequest();
|
||||
logic.mockNetworkDataRequest();
|
||||
}
|
||||
|
||||
@override
|
||||
@ -54,6 +51,41 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Obx(() => Visibility(
|
||||
visible: state.isVip.value ? false : true,
|
||||
child: Container(
|
||||
color: AppColors.vipFeatureBgColor,
|
||||
padding: EdgeInsets.only(left: 20.w, right: 20.w),
|
||||
height: 80.h,
|
||||
child: Row(
|
||||
children: [
|
||||
Text('开通高级功能后才可以对锁进行管理'.tr,
|
||||
style: TextStyle(
|
||||
color: AppColors.vipFeatureBtnTextColor,
|
||||
fontSize: 22.sp)),
|
||||
Expanded(
|
||||
child: SizedBox(
|
||||
width: 10.w,
|
||||
)),
|
||||
SizedBox(
|
||||
width: 150.w,
|
||||
height: 46.h,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: AppColors.vipFeatureBtnBgColor,
|
||||
),
|
||||
onPressed: () {
|
||||
Get.toNamed(Routers.advancedFeaturesWebPage);
|
||||
},
|
||||
child: Text(
|
||||
'去开通',
|
||||
style: TextStyle(
|
||||
color: Colors.white, fontSize: 22.sp),
|
||||
)),
|
||||
)
|
||||
],
|
||||
),
|
||||
))),
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
@ -67,15 +99,21 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Expanded(child: _buildListView(context, lockGroupList)),
|
||||
SubmitBtn(
|
||||
btnName: '确定'.tr,
|
||||
onClick: () {
|
||||
Map<String, dynamic> resultMap = {};
|
||||
resultMap['selectLockIdList'] = selectLockIdList;
|
||||
Navigator.pop(context, resultMap);
|
||||
},
|
||||
),
|
||||
Expanded(
|
||||
child: Obx(
|
||||
() => _buildListView(context, state.lockGroupList.value))),
|
||||
Obx(() => Visibility(
|
||||
visible: state.isVip.value ? true : false,
|
||||
child: SubmitBtn(
|
||||
btnName: '确定'.tr,
|
||||
onClick: () {
|
||||
Map<String, dynamic> resultMap = {};
|
||||
resultMap['selectLockIdList'] =
|
||||
state.selectLockIdList.value;
|
||||
Navigator.pop(context, resultMap);
|
||||
},
|
||||
),
|
||||
)),
|
||||
SizedBox(
|
||||
height: 40.h,
|
||||
)
|
||||
@ -83,20 +121,6 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
|
||||
));
|
||||
}
|
||||
|
||||
//分组列表请求
|
||||
Future<List<GroupListItem>> mockNetworkDataRequest() async {
|
||||
MassSendLockGroupListEntity entity = await ApiRepository.to.lockGroupList('2');
|
||||
List<GroupListItem> dataList = [];
|
||||
if (entity.errorCode!.codeIsSuccessful) {
|
||||
if (entity.data != null) {
|
||||
dataList = entity.data!.groupList!;
|
||||
}
|
||||
}
|
||||
lockGroupList = dataList;
|
||||
setState(() {});
|
||||
return dataList;
|
||||
}
|
||||
|
||||
Widget _buildListView(BuildContext context, List itemList) {
|
||||
return ListView.separated(
|
||||
itemCount: itemList.length,
|
||||
@ -116,39 +140,39 @@ class _MassSendLockGroupListPageState extends State<MassSendLockGroupListPage> {
|
||||
//设备多层级列表
|
||||
Widget _buildLockExpandedList(context, index, GroupListItem itemData) {
|
||||
List lockItemList = itemData.lockList ?? [];
|
||||
itemData.isVip = state.isVip.value;
|
||||
return ExpandedListTile(
|
||||
onTap: () {
|
||||
// selectGroupIdList.add(index);
|
||||
// clickIndex = index;
|
||||
//是否选中组
|
||||
if (itemData.isChecked) {
|
||||
var selectList = itemData.lockList;
|
||||
for(LockListItem lockListItem in selectList!){
|
||||
for (LockListItem lockListItem in selectList!) {
|
||||
lockListItem.isChecked = true;
|
||||
selectLockIdList.add(lockListItem.lockId);
|
||||
state.selectLockIdList.value.add(lockListItem.lockId);
|
||||
}
|
||||
// lockItemList[selectIndex] =
|
||||
}else{
|
||||
} else {
|
||||
var selectList = itemData.lockList;
|
||||
for(LockListItem lockListItem in selectList!){
|
||||
for (LockListItem lockListItem in selectList!) {
|
||||
lockListItem.isChecked = false;
|
||||
selectLockIdList.remove(lockListItem.lockId);
|
||||
state.selectLockIdList.value.remove(lockListItem.lockId);
|
||||
}
|
||||
}
|
||||
setState(() {});
|
||||
},
|
||||
typeImgList: const [],
|
||||
groupItem: itemData,
|
||||
child: massSendLockGroupCell(index, currentIndex: index, lockListByGroup: lockItemList, selectLockAction: (selectIndex, selectLockId) {
|
||||
child: massSendLockGroupCell(index,
|
||||
currentIndex: index,
|
||||
lockListByGroup: lockItemList,
|
||||
isVip: state.isVip.value,
|
||||
selectLockAction: (selectIndex, selectLockId) {
|
||||
LockListItem lockItem = lockItemList[selectIndex];
|
||||
setState(() {
|
||||
lockItem.isChecked = !lockItem.isChecked;
|
||||
if (lockItem.isChecked) {
|
||||
selectLockIdList.add(lockItem.lockId);
|
||||
}
|
||||
});
|
||||
lockItem.isChecked = !lockItem.isChecked;
|
||||
if (lockItem.isChecked) {
|
||||
state.selectLockIdList.value.add(lockItem.lockId);
|
||||
}
|
||||
setState(() {});
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class MassSendLockGroupListState {
|
||||
var lockGroupList = [].obs;
|
||||
var selectLockIdList = [].obs;
|
||||
var isVip = false.obs;
|
||||
}
|
||||
@ -69,8 +69,7 @@ class RecordItem {
|
||||
int? cloudauthCount;
|
||||
int? vipLockCount;
|
||||
int? vipYear;
|
||||
int? isApply;
|
||||
String? money;
|
||||
String? amount;
|
||||
String? createdAt;
|
||||
String? updatedAt;
|
||||
|
||||
@ -85,8 +84,7 @@ class RecordItem {
|
||||
this.cloudauthCount,
|
||||
this.vipLockCount,
|
||||
this.vipYear,
|
||||
this.isApply,
|
||||
this.money,
|
||||
this.amount,
|
||||
this.createdAt,
|
||||
this.updatedAt});
|
||||
|
||||
@ -101,8 +99,7 @@ class RecordItem {
|
||||
cloudauthCount = json['cloudauth_count'];
|
||||
vipLockCount = json['vip_lock_count'];
|
||||
vipYear = json['vip_year'];
|
||||
isApply = json['is_apply'];
|
||||
money = json['money'];
|
||||
amount = json['amount'];
|
||||
createdAt = json['created_at'];
|
||||
updatedAt = json['updated_at'];
|
||||
}
|
||||
@ -119,8 +116,7 @@ class RecordItem {
|
||||
data['cloudauth_count'] = cloudauthCount;
|
||||
data['vip_lock_count'] = vipLockCount;
|
||||
data['vip_year'] = vipYear;
|
||||
data['is_apply'] = isApply;
|
||||
data['money'] = money;
|
||||
data['amount'] = amount;
|
||||
data['created_at'] = createdAt;
|
||||
data['updated_at'] = updatedAt;
|
||||
return data;
|
||||
|
||||
@ -71,7 +71,7 @@ class _AdvancedFunctionRecordPageState
|
||||
fontWeight: FontWeight.bold),
|
||||
),
|
||||
Expanded(child: Container()),
|
||||
Text('¥${itemData.money}',
|
||||
Text('¥${itemData.amount}',
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp,
|
||||
color: AppColors.blackColor,
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:star_lock/app_settings/app_settings.dart';
|
||||
import 'package:star_lock/mine/valueAddedServices/valueAddedServicesHighFunction/valueAddedServicesHighFunction_logic.dart';
|
||||
|
||||
import '../../../appRouters.dart';
|
||||
@ -51,7 +50,7 @@ class _ValueAddedServicesHighFunctionPageState
|
||||
],
|
||||
),
|
||||
),
|
||||
_bottomBtn(),
|
||||
// _bottomBtn(),
|
||||
],
|
||||
));
|
||||
}
|
||||
@ -86,7 +85,7 @@ class _ValueAddedServicesHighFunctionPageState
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
"已开通".tr,
|
||||
"当前状态:已开通".tr,
|
||||
style: TextStyle(
|
||||
fontSize: 24.sp, fontWeight: FontWeight.w600),
|
||||
),
|
||||
@ -151,7 +150,24 @@ class _ValueAddedServicesHighFunctionPageState
|
||||
SizedBox(
|
||||
height: 10.h,
|
||||
),
|
||||
Container(
|
||||
GestureDetector(
|
||||
onTap: () {},
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(left: 20.w, right: 20.w),
|
||||
decoration: BoxDecoration(
|
||||
color: const Color(0xFFF5F5F5),
|
||||
borderRadius: BorderRadius.circular(15.w),
|
||||
),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(
|
||||
left: 20.w, top: 10.h, right: 20.w, bottom: 10.h),
|
||||
child: Text(
|
||||
'查看详情 >',
|
||||
style: TextStyle(fontSize: 20.sp),
|
||||
)),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
height: 1.sw,
|
||||
child: GridView.count(
|
||||
padding: EdgeInsets.all(10.h),
|
||||
|
||||
@ -8,7 +8,7 @@ abstract class Api {
|
||||
final String resetPasswordURL = '/user/resetPassword'; //重置密码
|
||||
final String getCountryRegionURL = '/system/listCountry'; //获取国家或地区
|
||||
final String electronicKeyListURL = '/key/listUser'; //电子钥匙列表
|
||||
final String sendElectronicKeyURL = '/key/send'; //发送电子钥匙
|
||||
final String sendElectronicKeyURL = '/v2/key/send'; //发送电子钥匙
|
||||
final String resetElectronicKeyURL = '/key/reset'; //重置电子钥匙
|
||||
final String keyOperationRecordURL = '/lockRecords/list'; //操作记录
|
||||
|
||||
@ -55,7 +55,7 @@ abstract class Api {
|
||||
final String setlockGroupURL = '/keyGroup/setGroup'; //设置锁分组
|
||||
final String lockGroupListURL = '/authorizedAdmin/listGroup'; //锁分组列表
|
||||
final String lockDeletGroupURL = '/keyGroup/delete'; //删除锁分组
|
||||
final String lockGroupAddLockURL = '/keyGroup/addLockGroup'; //锁分组里面添加锁
|
||||
final String lockGroupAddLockURL = '/v2/keyGroup/addLockGroup'; //锁分组里面添加锁
|
||||
final String lockGroupDeletLockURL = '/keyGroup/deleteLockGroup'; //锁分组里面删除锁
|
||||
|
||||
final String listLockByGroupURL =
|
||||
@ -65,7 +65,7 @@ abstract class Api {
|
||||
// final String lockListByGroupURL = '/room/listByGroup'; //分组下的锁
|
||||
final String getWifiServiceIpURL = '/wifiLock/getWifiServiceIp'; // 获取Wifi锁服务器
|
||||
final String updateLockSettingUrl =
|
||||
'/lockSetting/updateLockSetting'; // 锁设置里面所有的设置
|
||||
'/v2/lockSetting/updateLockSetting'; // 锁设置里面所有的设置
|
||||
|
||||
final String roomQueryDateUrl = '/room/queryDate'; // 获取网关时间
|
||||
final String lockDiagnoseUrl = '/room/uploadLockInfo'; // 锁诊断
|
||||
|
||||
@ -68,6 +68,7 @@ class _ExpandedListTileState extends State<ExpandedListTile> {
|
||||
: "images/icon_round_unSelect.png",
|
||||
width: 30.w,
|
||||
height: 30.w,
|
||||
color: widget.groupItem.isVip ? AppColors.mainColor : Colors.grey,
|
||||
),
|
||||
SizedBox(
|
||||
width: 20.w,
|
||||
@ -76,6 +77,9 @@ class _ExpandedListTileState extends State<ExpandedListTile> {
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
if (widget.groupItem.isVip == false) {
|
||||
return;
|
||||
}
|
||||
//点击左侧是否勾选按钮
|
||||
setState(() {
|
||||
_isCheck = !_isCheck;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user