Merge remote-tracking branch 'origin/main'

main
hs 2025-09-08 18:04:48 +08:00
commit e86a91fc19
20 changed files with 143 additions and 44 deletions

View File

@ -343,6 +343,7 @@ class _SafeDrawerPageState extends State<SafeDrawerPage> {
// ), // ),
// ), // ),
// ), // ),
const SizedBox(height: 10),
ItemListWidget.itemContainer(horizontal: 15,ListItemFactory.createRowSpaceBetweenItem( ItemListWidget.itemContainer(horizontal: 15,ListItemFactory.createRowSpaceBetweenItem(
leftText: '整改部门', leftText: '整改部门',
rightText:hiddenForm['RECTIFICATIONDEPT_NAME'] ?? '', rightText:hiddenForm['RECTIFICATIONDEPT_NAME'] ?? '',

View File

@ -61,12 +61,15 @@ class _SafecheckDetailState extends State<SafecheckDetail> {
{'name': 'UNITS_ID', 'message': '请选择被检查单位'}, {'name': 'UNITS_ID', 'message': '请选择被检查单位'},
{'name': 'PERSONNELMANAGEMENT_ID', 'message': '请选择被检查单位现场负责人'}, {'name': 'PERSONNELMANAGEMENT_ID', 'message': '请选择被检查单位现场负责人'},
{'name': 'INSPECTION_PLACE', 'message': '请输入检查场所'}, {'name': 'INSPECTION_PLACE', 'message': '请输入检查场所'},
{'name': 'INSPECTION_TYPE', 'message': '请选择检查类型不能为空'}, {'name': 'INSPECTION_TYPE', 'message': '请选择检查类型'},
{'name': 'INSPECTION_TIME_START', 'message': '请选择检查开始时间'}, {'name': 'INSPECTION_TIME_START', 'message': '请选择检查开始时间'},
{'name': 'INSPECTION_TIME_END', 'message': '请选择作业结束时间'}, {'name': 'INSPECTION_TIME_END', 'message': '请选择作业结束时间'},
{'name': 'INSPECTION_USERS', 'message': '请输入检查人员'},
]; ];
Map<String, dynamic> form = { Map<String, dynamic> form = {
'INSPECTION_USERS': '', 'INSPECTION_USERS': '',
'KEYPROJECTCHECK_ID': '', // ID 'KEYPROJECTCHECK_ID': '', // ID
@ -448,6 +451,18 @@ class _SafecheckDetailState extends State<SafecheckDetail> {
} }
} }
// {'name': 'INSPECTION_USERS', 'message': '请输入检查人员'},
final name2 = 'INSPECTION_USERS';
final message2 ='请输入检查人员';
final v = form[name2];
if (v == null || v.toString().isEmpty || v.toString() == '请选择') {
LoadingDialogHelper.hide();
ToastUtil.showNormal(context, message2);
return;
}
// inspectorList INSPECTION_USER_ID // inspectorList INSPECTION_USER_ID
final List<Map<String, String>> inspectors = form['inspectorList'] ?? []; final List<Map<String, String>> inspectors = form['inspectorList'] ?? [];
final seenIds = <String>{}; final seenIds = <String>{};

View File

@ -431,6 +431,7 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
borderRadius: BorderRadius.circular(5), borderRadius: BorderRadius.circular(5),
), ),
child: ListItemFactory.createRowSpaceBetweenItem( child: ListItemFactory.createRowSpaceBetweenItem(
isRequired:true,
leftText: "整改部门", leftText: "整改部门",
rightText: departments[index].department.isNotEmpty?departments[index].department:"请选择", rightText: departments[index].department.isNotEmpty?departments[index].department:"请选择",
isRight: true, isRight: true,
@ -472,6 +473,7 @@ class _CheckingInformationOnePageState extends State<CheckingInformationOnePage>
borderRadius: BorderRadius.circular(5), borderRadius: BorderRadius.circular(5),
), ),
child: ListItemFactory.createRowSpaceBetweenItem( child: ListItemFactory.createRowSpaceBetweenItem(
isRequired:true,
leftText: "整改负责人", leftText: "整改负责人",
rightText: departments[index].responsible.isNotEmpty?departments[index].responsible:"请选择", rightText: departments[index].responsible.isNotEmpty?departments[index].responsible:"请选择",
isRight: true, isRight: true,

View File

@ -439,6 +439,7 @@ class DannerRepairState extends State<DannerRepair> {
borderRadius: BorderRadius.circular(5), borderRadius: BorderRadius.circular(5),
), ),
child: ListItemFactory.createRowSpaceBetweenItem( child: ListItemFactory.createRowSpaceBetweenItem(
isRequired:true,
leftText: "验收部门", leftText: "验收部门",
rightText: departments[index].department.isNotEmpty?departments[index].department:"请选择", rightText: departments[index].department.isNotEmpty?departments[index].department:"请选择",
isRight: true, isRight: true,
@ -480,6 +481,7 @@ class DannerRepairState extends State<DannerRepair> {
borderRadius: BorderRadius.circular(5), borderRadius: BorderRadius.circular(5),
), ),
child: ListItemFactory.createRowSpaceBetweenItem( child: ListItemFactory.createRowSpaceBetweenItem(
isRequired:true,
leftText: "验收部门负责人", leftText: "验收部门负责人",
rightText: departments[index].responsible.isNotEmpty?departments[index].responsible:"请选择", rightText: departments[index].responsible.isNotEmpty?departments[index].responsible:"请选择",
isRight: true, isRight: true,

View File

@ -112,7 +112,17 @@ class _PendingRectificationDetailPageState extends State<PendingRectificationDet
files5 = data['pImgs'] ?? []; files5 = data['pImgs'] ?? [];
files6 = data['yImgs'] ?? []; files6 = data['yImgs'] ?? [];
checkList = data['checkList'] ?? []; checkList = data['checkList'] ?? [];
}); });
//
final result = await ApiService.getListTreePersonList(buMenId);
setState(() {
_personCache=List<Map<String, dynamic>>.from(
result['userList'] as List,
);
});
} }
} catch (e) { } catch (e) {
@ -155,6 +165,15 @@ class _PendingRectificationDetailPageState extends State<PendingRectificationDet
files6 = data['yImgs'] ?? []; files6 = data['yImgs'] ?? [];
checkList = data['checkList'] ?? []; checkList = data['checkList'] ?? [];
}); });
//
final result = await ApiService.getListTreePersonList(buMenId);
setState(() {
_personCache=List<Map<String, dynamic>>.from(
result['userList'] as List,
);
});
} }
} catch (e) { } catch (e) {
@ -402,9 +421,12 @@ class _PendingRectificationDetailPageState extends State<PendingRectificationDet
}); });
// //
final result = await ApiService.getListTreePersonList(id); final result = await ApiService.getListTreePersonList(id);
_personCache=List<Map<String, dynamic>>.from( setState(() {
result['userList'] as List, _personCache=List<Map<String, dynamic>>.from(
); result['userList'] as List,
);
});
}), }),
@ -429,7 +451,7 @@ class _PendingRectificationDetailPageState extends State<PendingRectificationDet
), ),
GestureDetector( GestureDetector(
onTap: () { onTap: () {
if ( renYuanId.isEmpty) { if ( buMenId.isEmpty) {
ToastUtil.showNormal(context, '请先选择部门'); ToastUtil.showNormal(context, '请先选择部门');
return; return;
} }

View File

@ -48,7 +48,7 @@ class _ImmediatelyInspectionState extends State<ImmediatelyInspection> {
ItemListWidget.singleLineTitleText( ItemListWidget.singleLineTitleText(
label: '巡检人:', label: '巡检人:',
isEditable: true, isEditable: true,
isRequired: false, isRequired: true,
controller: _xunController, controller: _xunController,
hintText: '请输入巡检人', hintText: '请输入巡检人',
text: '', text: '',
@ -61,7 +61,7 @@ class _ImmediatelyInspectionState extends State<ImmediatelyInspection> {
label: '巡检日期', label: '巡检日期',
text: dataTime.isEmpty ? '请选择' : dataTime ?? '', text: dataTime.isEmpty ? '请选择' : dataTime ?? '',
isEditable: true, isEditable: true,
isRequired: false, isRequired: true,
horizontalnum: 0, horizontalnum: 0,
), ),
onTap: () async { onTap: () async {
@ -100,7 +100,7 @@ class _ImmediatelyInspectionState extends State<ImmediatelyInspection> {
child: ItemListWidget.multiLineTitleTextField( child: ItemListWidget.multiLineTitleTextField(
label: '巡检内容:', label: '巡检内容:',
isEditable: true, isEditable: true,
isRequired: false, isRequired: true,
controller: _neiRongController, controller: _neiRongController,
hintText: "(必填)", hintText: "(必填)",
text: '', text: '',
@ -123,6 +123,7 @@ class _ImmediatelyInspectionState extends State<ImmediatelyInspection> {
// SizedBox(height: 15,), // SizedBox(height: 15,),
if (_isFault) if (_isFault)
RepairedPhotoSection( RepairedPhotoSection(
isRequired: true,
horizontalPadding: 15, horizontalPadding: 15,
title: "故障照片", title: "故障照片",
maxCount: 4, maxCount: 4,
@ -140,6 +141,7 @@ class _ImmediatelyInspectionState extends State<ImmediatelyInspection> {
SizedBox(height: _isFault ? 15 : 0), SizedBox(height: _isFault ? 15 : 0),
if (_isFault) if (_isFault)
RepairedPhotoSection( RepairedPhotoSection(
isRequired: true,
horizontalPadding: 15, horizontalPadding: 15,
title: "故障处理后照片", title: "故障处理后照片",
maxCount: 4, maxCount: 4,
@ -156,6 +158,7 @@ class _ImmediatelyInspectionState extends State<ImmediatelyInspection> {
SizedBox(height: _isFault ? 15 : 0), SizedBox(height: _isFault ? 15 : 0),
RepairedPhotoSection( RepairedPhotoSection(
isRequired: true,
horizontalPadding: 15, horizontalPadding: 15,
title: "巡检照片", title: "巡检照片",
maxCount: 4, maxCount: 4,

View File

@ -419,7 +419,7 @@ class _SafecheckSignListPageState extends State<SafecheckSignListPage> {
flex: 2, flex: 2,
child: SearchBarWidget( child: SearchBarWidget(
showResetButton: false, showResetButton: false,
hintText: "输入关键字", hintText: "输入被检查单位部门关键字",
// isClickableOnly: true, // isClickableOnly: true,
onSearch: (text) { onSearch: (text) {
_search(); _search();

View File

@ -418,7 +418,7 @@ class _CheckPersonListPageState extends State<CheckPersonListPage> {
flex: 2, flex: 2,
child: SearchBarWidget( child: SearchBarWidget(
showResetButton: false, showResetButton: false,
hintText: "输入关键字", hintText: "输入被检查单位部门关键字",
// isClickableOnly: true, // isClickableOnly: true,
onSearch: (text) { onSearch: (text) {
_search(); _search();

View File

@ -450,7 +450,7 @@ class _SafecheckDangerListPageState extends State<SafecheckDangerListPage> {
flex: 2, flex: 2,
child: SearchBarWidget( child: SearchBarWidget(
showResetButton: false, showResetButton: false,
hintText: "输入关键字", hintText: "输入被检查单位部门关键字",
// isClickableOnly: true, // isClickableOnly: true,
onSearch: (text) { onSearch: (text) {
_search(); _search();

View File

@ -426,7 +426,7 @@ class _DefendRecordListPageState extends State<DefendRecordListPage> {
flex: 2, flex: 2,
child: SearchBarWidget( child: SearchBarWidget(
showResetButton: false, showResetButton: false,
hintText: "输入关键字", hintText: "输入被检查单位部门关键字",
// isClickableOnly: true, // isClickableOnly: true,
onSearch: (text) { onSearch: (text) {
_search(); _search();

View File

@ -75,7 +75,7 @@ class _SafecheckStartDetailState extends State<SafecheckStartDetail> {
{'name': 'INSPECTED_DEPARTMENT_ID', 'message': '请选择被检查单位'}, {'name': 'INSPECTED_DEPARTMENT_ID', 'message': '请选择被检查单位'},
{'name': 'INSPECTED_SITEUSER_ID', 'message': '请选择被检查单位现场负责人'}, {'name': 'INSPECTED_SITEUSER_ID', 'message': '请选择被检查单位现场负责人'},
{'name': 'INSPECTION_PLACE', 'message': '请输入检查场所'}, {'name': 'INSPECTION_PLACE', 'message': '请输入检查场所'},
{'name': 'INSPECTION_TYPE', 'message': '请选择检查类型不能为空'}, {'name': 'INSPECTION_TYPE', 'message': '请选择检查类型'},
{'name': 'INSPECTION_TIME_START', 'message': '请选择检查开始时间'}, {'name': 'INSPECTION_TIME_START', 'message': '请选择检查开始时间'},
{'name': 'INSPECTION_TIME_END', 'message': '请选择作业结束时间'}, {'name': 'INSPECTION_TIME_END', 'message': '请选择作业结束时间'},
]; ];
@ -335,6 +335,7 @@ class _SafecheckStartDetailState extends State<SafecheckStartDetail> {
} }
// rules // rules
bool isRulesTrue=true;
for (final r in rules) { for (final r in rules) {
final name = r['name'] ?? ''; final name = r['name'] ?? '';
final message = r['message'] ?? '请完善表单'; final message = r['message'] ?? '请完善表单';
@ -342,9 +343,15 @@ class _SafecheckStartDetailState extends State<SafecheckStartDetail> {
if (v == null || v.toString().isEmpty || v.toString() == '请选择') { if (v == null || v.toString().isEmpty || v.toString() == '请选择') {
LoadingDialogHelper.hide(); LoadingDialogHelper.hide();
ToastUtil.showNormal(context, message); ToastUtil.showNormal(context, message);
isRulesTrue=false;
break; break;
} }
} }
if(!isRulesTrue){
return;
}
// situationList SITUATION // situationList SITUATION
final situations = (form['situationList'] as List<dynamic>?) ?? []; final situations = (form['situationList'] as List<dynamic>?) ?? [];
for (var i = 0; i < situations.length; i++) { for (var i = 0; i < situations.length; i++) {

View File

@ -112,9 +112,12 @@ class _SafecheckStartListPageState extends State<SafecheckStartListPage> {
} }
/// ///
void _handleApply() { Future<void> _handleApply() async {
// //
pushPage(SafecheckStartDetail(INSPECTION_ID: '', type: 'add',), context); await pushPage(SafecheckStartDetail(INSPECTION_ID: '', type: 'add',), context);
_search();
} }
/// ///
@ -506,7 +509,7 @@ class _SafecheckStartListPageState extends State<SafecheckStartListPage> {
flex: 2, flex: 2,
child: SearchBarWidget( child: SearchBarWidget(
showResetButton: false, showResetButton: false,
hintText: "输入关键字", hintText: "输入被检查单位部门关键字",
// isClickableOnly: true, // isClickableOnly: true,
onSearch: (text) { onSearch: (text) {
_search(); _search();

View File

@ -264,10 +264,10 @@ class _RiskControlPageState extends State<RiskControlPage> {
if (_isLoading) return; if (_isLoading) return;
_isLoading = true; _isLoading = true;
LoadingDialogHelper.show();
final result = await ApiService.getRiskRecordList( currentPage, final result = await ApiService.getRiskRecordList( currentPage,
riskId, dept, level, keyWord); riskId, dept, level, keyWord);
LoadingDialogHelper.hide();
if (result['result'] == 'success') { if (result['result'] == 'success') {
_totalPage =result["page"]['totalPage'] ?? 1; _totalPage =result["page"]['totalPage'] ?? 1;
@ -291,6 +291,7 @@ class _RiskControlPageState extends State<RiskControlPage> {
} }
} catch (e) { } catch (e) {
LoadingDialogHelper.hide();
// Toast // Toast
print('加载数据失败:$e'); print('加载数据失败:$e');
} finally { } finally {

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:qhd_prevention/pages/my_appbar.dart'; import 'package:qhd_prevention/pages/my_appbar.dart';
import 'package:qhd_prevention/tools/tools.dart';
import '../../http/ApiService.dart'; import '../../http/ApiService.dart';
@ -24,8 +25,9 @@ class _UserinfoPageState extends State<UserinfoPage> {
Future<void> _getUserInfo() async { Future<void> _getUserInfo() async {
try { try {
LoadingDialogHelper.show();
final result = await ApiService.getUserInfo(); final result = await ApiService.getUserInfo();
LoadingDialogHelper.hide();
if (result['result'] == 'success') { if (result['result'] == 'success') {
setState(() { setState(() {
user= result['pd']; user= result['pd'];
@ -35,6 +37,7 @@ class _UserinfoPageState extends State<UserinfoPage> {
_showMessage('加载数据失败'); _showMessage('加载数据失败');
} }
} catch (e) { } catch (e) {
LoadingDialogHelper.hide();
// Toast // Toast
print('加载数据失败:$e'); print('加载数据失败:$e');
} }

View File

@ -348,7 +348,9 @@ class _DangerProjectPageState extends State<DangerProjectPage> {
Future<void> _getAlreadyUpImages(Map item) async { Future<void> _getAlreadyUpImages(Map item) async {
try { try {
LoadingDialogHelper.show();
final result = await ApiService.getAlreadyUpImages(item["RECORDITEM_ID"]); final result = await ApiService.getAlreadyUpImages(item["RECORDITEM_ID"]);
LoadingDialogHelper.hide();
if (result['result'] == 'success') { if (result['result'] == 'success') {
final List<dynamic> newList = result['imgs'] ?? []; final List<dynamic> newList = result['imgs'] ?? [];
List<PhotoItem> imgList = []; List<PhotoItem> imgList = [];
@ -369,6 +371,7 @@ class _DangerProjectPageState extends State<DangerProjectPage> {
ToastUtil.showNormal(context, "加载数据失败"); ToastUtil.showNormal(context, "加载数据失败");
} }
} catch (e) { } catch (e) {
LoadingDialogHelper.hide();
print('加载数据失败:$e'); print('加载数据失败:$e');
} }
} }

View File

@ -45,7 +45,9 @@ class _LawsRegulationsPage extends State<LawsRegulationsPage> {
try { try {
_accordionList.clear(); _accordionList.clear();
_fileList.clear(); _fileList.clear();
LoadingDialogHelper.show();
final result = await ApiService.getLowList(keyWord); final result = await ApiService.getLowList(keyWord);
LoadingDialogHelper.hide();
if (result['result'] == 'success') { if (result['result'] == 'success') {
final List<dynamic> newList = result['varList'] ?? []; final List<dynamic> newList = result['varList'] ?? [];
setState(() { setState(() {
@ -60,6 +62,7 @@ class _LawsRegulationsPage extends State<LawsRegulationsPage> {
_showMessage('加载数据失败'); _showMessage('加载数据失败');
} }
} catch (e) { } catch (e) {
LoadingDialogHelper.hide();
// Toast // Toast
print('加载数据失败:$e'); print('加载数据失败:$e');
} }

View File

@ -156,8 +156,8 @@ class _MineDutyManagementPageState extends State<MineDutyManagementPage> {
// ), // ),
// ), // ),
// //
Expanded( // Expanded(
child: // child:
_list.isEmpty _list.isEmpty
? NoDataWidget.show() ? NoDataWidget.show()
: ListView.builder( : ListView.builder(
@ -170,7 +170,7 @@ class _MineDutyManagementPageState extends State<MineDutyManagementPage> {
), ),
// ), // ),
// ], // ],
), // ),
), ),
); );
} }
@ -353,7 +353,9 @@ class _MineDutyManagementPageState extends State<MineDutyManagementPage> {
Future<void> _getListData() async { Future<void> _getListData() async {
try { try {
LoadingDialogHelper.show();
final result = await ApiService.getDutyManagement(showCount, currentPage); final result = await ApiService.getDutyManagement(showCount, currentPage);
LoadingDialogHelper.hide();
if (result['result'] == 'success') { if (result['result'] == 'success') {
final List<dynamic> newList = result['varList'] ?? []; final List<dynamic> newList = result['varList'] ?? [];
setState(() { setState(() {
@ -361,6 +363,7 @@ class _MineDutyManagementPageState extends State<MineDutyManagementPage> {
}); });
} }
} catch (e) { } catch (e) {
LoadingDialogHelper.hide();
print('加载出错: $e'); print('加载出错: $e');
} }
} }

View File

@ -59,7 +59,7 @@ class _MineSetPageState extends State<MineSetPage> {
GestureDetector( GestureDetector(
child: _setItemWidget("修改密码"), child: _setItemWidget("修改密码"),
onTap: () { onTap: () {
pushPage(const MineSetPwdPage(), context); pushPage(const MineSetPwdPage("0"), context);
}, },
), ),
const Divider(height: 1, color: Colors.black12), const Divider(height: 1, color: Colors.black12),

View File

@ -13,8 +13,9 @@ import '../../http/ApiService.dart';
import '../login_page.dart'; import '../login_page.dart';
class MineSetPwdPage extends StatefulWidget { class MineSetPwdPage extends StatefulWidget {
const MineSetPwdPage({super.key}); const MineSetPwdPage(this.type, {super.key});
final String type;
@override @override
State<MineSetPwdPage> createState() => _MineSetPwdPageState(); State<MineSetPwdPage> createState() => _MineSetPwdPageState();
} }
@ -38,19 +39,19 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
final confirmPwd = _confirmPwdController.text.trim(); final confirmPwd = _confirmPwdController.text.trim();
if (oldPwd.isEmpty) { if (oldPwd.isEmpty) {
ToastUtil.showNormal(context, '填写旧密码'); ToastUtil.showNormal(context, '输入当前密码');
// _showMessage('请填写密码'); // _showMessage('请填写当前密码');
return; return;
} }
if (newPwd.isEmpty) { if (newPwd.isEmpty) {
ToastUtil.showNormal(context, '填写新密码'); ToastUtil.showNormal(context, '输入新密码');
// _showMessage('请填写新密码'); // _showMessage('请填写新密码');
return; return;
} }
if (confirmPwd.isEmpty) { if (confirmPwd.isEmpty) {
ToastUtil.showNormal(context, '填写确认新密码'); ToastUtil.showNormal(context, '输入确认密码');
// _showMessage('请填写确认新密码'); // _showMessage('请填写确认新密码');
return; return;
} }
@ -62,32 +63,50 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
// } // }
if (newPwd != confirmPwd) { if (newPwd != confirmPwd) {
ToastUtil.showNormal(context, '新密码与确认密码不一致'); ToastUtil.showNormal(context, '两次输入的密码不一致');
// _showMessage('新密码与确认密码不一致'); // _showMessage('新密码与确认密码不一致');
return; return;
} }
final RegExp regex = RegExp(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,18}$');
if (regex.hasMatch(newPwd)) {
ToastUtil.showNormal(context, '密码长度为6-18位必须包含大小字母小写字母数字和特殊符号。');
// _showMessage('密码长度为6-18位必须包含大小字母小写字母数字和特殊符号。');
return;
}
// //
if (newPwd.length < 8 || newPwd.length > 18) { if (newPwd.length < 8 ) {
ToastUtil.showNormal(context, '密码长度需在8-18位之间'); ToastUtil.showNormal(context, '密码需要大于8位');
// _showMessage('密码长度需在8-18位之间'); // _showMessage('密码长度需在8-18位之间');
return; return;
} }
if ( newPwd.length > 18) {
ToastUtil.showNormal(context, '密码需要小于18位');
// _showMessage('密码长度需在8-18位之间');
return;
}
// final RegExp regex = RegExp(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,18}$');
if (!isPasswordValid(newPwd)) {
ToastUtil.showNormal(context, '必须包含大小字母,小写字母数字和特殊符号。');
// _showMessage('密码长度为6-18位必须包含大小字母小写字母数字和特殊符号。');
return;
}
_changePass(oldPwd,newPwd); _changePass(oldPwd,newPwd);
} }
bool isPasswordValid(String password) {
//
final hasUpperCase = RegExp(r'[A-Z]');
final hasLowerCase = RegExp(r'[a-z]');
final hasNumber = RegExp(r'[0-9]');
final hasSpecialChar = RegExp(r'[!@#$%^&*(),.?":{}|<>]'); //
//
return hasUpperCase.hasMatch(password) &&
hasLowerCase.hasMatch(password) &&
hasNumber.hasMatch(password) &&
hasSpecialChar.hasMatch(password);
}
void _showMessage(String msg) { void _showMessage(String msg) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(msg))); ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(msg)));
} }
@ -125,14 +144,14 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
), ),
const SizedBox(height: 30), const SizedBox(height: 30),
_buildPwdField('密码', _oldPwdController), _buildPwdField('当前密码', _oldPwdController),
const SizedBox(height: 20), const SizedBox(height: 20),
_buildPwdField('新密码', _newPwdController), _buildPwdField('新密码', _newPwdController),
const SizedBox(height: 20), const SizedBox(height: 20),
_buildPwdField('确认新密码', _confirmPwdController), _buildPwdField('确认新密码', _confirmPwdController),
const SizedBox(height: 15), const SizedBox(height: 15),
const Text( const Text(
'需8-18位字母大小写、数字、字符混合', '为了您的账户安全,请确保密码长度为 8-18 位,必须包含大小写字母+数字+特殊字符,例如:Aa@123456',
style: TextStyle(color: Colors.grey, fontSize: 13), style: TextStyle(color: Colors.grey, fontSize: 13),
), ),
const SizedBox(height: 30,), const SizedBox(height: 30,),
@ -161,7 +180,7 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
// final hidCount = raw['hidCount'] as Map<String, dynamic>; // final hidCount = raw['hidCount'] as Map<String, dynamic>;
// print(hidCount); // print(hidCount);
if (raw['result'] == 'success') { if (raw['result'] == 'success') {
ToastUtil.showNormal(context, '密码修改成功'); ToastUtil.showNormal(context, '密码修改成功!');
// _showMessage('密码修改成功'); // // _showMessage('密码修改成功'); //
Navigator.pop(context,true); Navigator.pop(context,true);
@ -174,15 +193,18 @@ class _MineSetPwdPageState extends State<MineSetPwdPage> {
(Route<dynamic> route) => false, // (Route<dynamic> route) => false, //
); );
}else if (raw['result'] == 'usererror'){
ToastUtil.showNormal(context, '当前密码密码有误');
// _showMessage('密码修改失败');
}else{ }else{
ToastUtil.showNormal(context, '密码修改失败'); ToastUtil.showNormal(context, '登录错误!请联系管理员');
// _showMessage('密码修改失败'); // _showMessage('密码修改失败');
} }
} catch (e) { } catch (e) {
// Toast // Toast
print('加载首页数据失败:$e'); print('加载首页数据失败:$e');
ToastUtil.showNormal(context, '密码修改失败'); ToastUtil.showNormal(context, '登录错误!请联系管理员');
// _showMessage('密码修改失败'); // _showMessage('密码修改失败');
} }
} }

View File

@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'package:encrypt/encrypt.dart' as encrypt; import 'package:encrypt/encrypt.dart' as encrypt;
import 'package:pointycastle/asymmetric/api.dart' show RSAPublicKey; import 'package:pointycastle/asymmetric/api.dart' show RSAPublicKey;
import 'package:qhd_prevention/pages/mine/mine_set_pwd_page.dart';
import 'package:qhd_prevention/tools/tools.dart'; import 'package:qhd_prevention/tools/tools.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
@ -36,6 +37,14 @@ class AuthService {
return false; return false;
} }
// if(data['result']['WEAK_PASSWORD']=='1'){
// pushPage(const MineSetPwdPage("1"), context);
// return false;
// }else if(data['result']['LONG_TERM_PASSWORD_NOT_CHANGED']=='1'){
// pushPage(const MineSetPwdPage("2"), context);
// return false;
// }
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
await prefs.setString(_keyUser, json.encode(data)); await prefs.setString(_keyUser, json.encode(data));
await prefs.setStringList(_keyRemember, [username, password]); await prefs.setStringList(_keyRemember, [username, password]);