Showing
15 changed files
with
549 additions
and
59 deletions
assets/can_see.png
0 → 100644
1.9 KB
assets/no_see.png
0 → 100644
2.34 KB
| @@ -19,6 +19,7 @@ class User { | @@ -19,6 +19,7 @@ class User { | ||
| 19 | String noon; //午市时间段 | 19 | String noon; //午市时间段 |
| 20 | String night; //晚市时间段 | 20 | String night; //晚市时间段 |
| 21 | String userphone; //角色电话 | 21 | String userphone; //角色电话 |
| 22 | + String token; //token | ||
| 22 | 23 | ||
| 23 | User( | 24 | User( |
| 24 | this.openid, | 25 | this.openid, |
| @@ -35,7 +36,8 @@ class User { | @@ -35,7 +36,8 @@ class User { | ||
| 35 | this.morning, | 36 | this.morning, |
| 36 | this.noon, | 37 | this.noon, |
| 37 | this.night, | 38 | this.night, |
| 38 | - this.userphone); | 39 | + this.userphone, |
| 40 | + this.token); | ||
| 39 | 41 | ||
| 40 | factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); | 42 | factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json); |
| 41 | 43 | ||
| @@ -43,6 +45,6 @@ class User { | @@ -43,6 +45,6 @@ class User { | ||
| 43 | 45 | ||
| 44 | @override | 46 | @override |
| 45 | String toString() { | 47 | String toString() { |
| 46 | - return 'User{openid: $openid, account: $account, role_name: $role_name, sellerid: $sellerid, sellercode: $sellercode, sellername: $sellername, sellerphone: $sellerphone, sellerAddr: $sellerAddr, scatter: $scatter, room: $room, cassette: $cassette, morning: $morning, noon: $noon, night: $night ,userphone:$userphone}'; | 48 | + return 'User{openid: $openid, account: $account, role_name: $role_name, sellerid: $sellerid, sellercode: $sellercode, sellername: $sellername, sellerphone: $sellerphone, sellerAddr: $sellerAddr, scatter: $scatter, room: $room, cassette: $cassette, morning: $morning, noon: $noon, night: $night ,userphone:$userphone},token:$token}'; |
| 47 | } | 49 | } |
| 48 | } | 50 | } |
| @@ -22,7 +22,8 @@ User _$UserFromJson(Map<String, dynamic> json) { | @@ -22,7 +22,8 @@ User _$UserFromJson(Map<String, dynamic> json) { | ||
| 22 | json['morning'] as String, | 22 | json['morning'] as String, |
| 23 | json['noon'] as String, | 23 | json['noon'] as String, |
| 24 | json['night'] as String, | 24 | json['night'] as String, |
| 25 | - json['userphone'] as String); | 25 | + json['userphone'] as String, |
| 26 | + json['token'] as String); | ||
| 26 | } | 27 | } |
| 27 | 28 | ||
| 28 | Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{ | 29 | Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{ |
| @@ -40,5 +41,6 @@ Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{ | @@ -40,5 +41,6 @@ Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{ | ||
| 40 | 'morning': instance.morning, | 41 | 'morning': instance.morning, |
| 41 | 'noon': instance.noon, | 42 | 'noon': instance.noon, |
| 42 | 'night': instance.night, | 43 | 'night': instance.night, |
| 43 | - 'userphone': instance.userphone | 44 | + 'userphone': instance.userphone, |
| 45 | + 'token': instance.token | ||
| 44 | }; | 46 | }; |
| @@ -164,5 +164,9 @@ class HttpUrl { | @@ -164,5 +164,9 @@ class HttpUrl { | ||
| 164 | "?service=App.Seller.EditAuthUser"; // 编辑店员 | 164 | "?service=App.Seller.EditAuthUser"; // 编辑店员 |
| 165 | static const String bind_phone_seller_user = | 165 | static const String bind_phone_seller_user = |
| 166 | "?service=App.Seller.BindPhoneSellerUser"; // 账号表-员工绑定手机号 | 166 | "?service=App.Seller.BindPhoneSellerUser"; // 账号表-员工绑定手机号 |
| 167 | + static const String get_password = | ||
| 168 | + "?service=App.Seller.GetPassword"; // 商户端查看密码 | ||
| 169 | + static const String update_password = | ||
| 170 | + "?service=App.Seller.UpdatePassword"; // 员工密码修改 | ||
| 167 | 171 | ||
| 168 | } | 172 | } |
| @@ -6,6 +6,7 @@ import 'package:one_key/models/personnel_manage_model.dart'; | @@ -6,6 +6,7 @@ import 'package:one_key/models/personnel_manage_model.dart'; | ||
| 6 | import 'package:one_key/provider/personnel_provider.dart'; | 6 | import 'package:one_key/provider/personnel_provider.dart'; |
| 7 | import 'package:one_key/provider/user_model.dart'; | 7 | import 'package:one_key/provider/user_model.dart'; |
| 8 | import 'package:one_key/res/colors.dart'; | 8 | import 'package:one_key/res/colors.dart'; |
| 9 | +import 'package:one_key/route/navigator_util.dart'; | ||
| 9 | import 'package:one_key/utils/dialog_util.dart'; | 10 | import 'package:one_key/utils/dialog_util.dart'; |
| 10 | import 'package:one_key/utils/event_bus.dart'; | 11 | import 'package:one_key/utils/event_bus.dart'; |
| 11 | import 'package:one_key/utils/utils.dart'; | 12 | import 'package:one_key/utils/utils.dart'; |
| @@ -192,7 +193,10 @@ class _PersonnelDetailPageState extends State<PersonnelDetailPage> { | @@ -192,7 +193,10 @@ class _PersonnelDetailPageState extends State<PersonnelDetailPage> { | ||
| 192 | } else if (element == '绑定微信') { | 193 | } else if (element == '绑定微信') { |
| 193 | DialogUtil.openAlertDialogImage( | 194 | DialogUtil.openAlertDialogImage( |
| 194 | context, '请员工使用微信扫一扫添加店员', dcAdduserCode, 660); | 195 | context, '请员工使用微信扫一扫添加店员', dcAdduserCode, 660); |
| 195 | - } else if (element == '查看密码') {} | 196 | + } else if (element == '查看密码') { |
| 197 | + NavigatorUtil.goPersonnelPasswordPage(context, | ||
| 198 | + account: widget.model.account, idstr: widget.model.id); | ||
| 199 | + } | ||
| 196 | }, | 200 | }, |
| 197 | ), | 201 | ), |
| 198 | ); | 202 | ); |
| @@ -117,49 +117,67 @@ class _PersonnelManagePageState extends State<PersonnelManagePage> { | @@ -117,49 +117,67 @@ class _PersonnelManagePageState extends State<PersonnelManagePage> { | ||
| 117 | 117 | ||
| 118 | return Column( | 118 | return Column( |
| 119 | children: [ | 119 | children: [ |
| 120 | - Padding( | ||
| 121 | - padding: EdgeInsets.symmetric( | ||
| 122 | - horizontal: ScreenUtil().setWidth(40), | ||
| 123 | - vertical: ScreenUtil().setWidth(40)), | ||
| 124 | - child: Row( | ||
| 125 | - mainAxisAlignment: MainAxisAlignment.spaceBetween, | ||
| 126 | - children: [ | ||
| 127 | - Text( | ||
| 128 | - title == '管理员' | ||
| 129 | - ? '${title}' | ||
| 130 | - : '${title} (${data.length}人)', | ||
| 131 | - style: TextStyle( | ||
| 132 | - fontSize: ScreenUtil().setWidth(28), | ||
| 133 | - color: MyColours.color_333333), | ||
| 134 | - ), | ||
| 135 | - title == '管理员' | ||
| 136 | - ? SizedBox() | ||
| 137 | - : Provider.of<UserModel>(context, | ||
| 138 | - listen: false) | ||
| 139 | - .user | ||
| 140 | - .role_name == | ||
| 141 | - '管理员' || | ||
| 142 | - (Provider.of<UserModel>(context, | 120 | + InkWell( |
| 121 | + onTap: () { | ||
| 122 | + if ((Provider.of<UserModel>(context, listen: false) | ||
| 123 | + .user | ||
| 124 | + .role_name == | ||
| 125 | + '管理员' || | ||
| 126 | + (Provider.of<UserModel>(context, | ||
| 127 | + listen: false) | ||
| 128 | + .user | ||
| 129 | + .role_name == | ||
| 130 | + '店长' && | ||
| 131 | + title != '店长')) && | ||
| 132 | + title != '管理员') { | ||
| 133 | + _addSellerClerk(roleId); | ||
| 134 | + } | ||
| 135 | + }, | ||
| 136 | + child: Padding( | ||
| 137 | + padding: EdgeInsets.symmetric( | ||
| 138 | + horizontal: ScreenUtil().setWidth(40), | ||
| 139 | + vertical: ScreenUtil().setWidth(40)), | ||
| 140 | + child: Row( | ||
| 141 | + mainAxisAlignment: | ||
| 142 | + MainAxisAlignment.spaceBetween, | ||
| 143 | + children: [ | ||
| 144 | + Text( | ||
| 145 | + title == '管理员' | ||
| 146 | + ? '${title}' | ||
| 147 | + : '${title} (${data.length}人)', | ||
| 148 | + style: TextStyle( | ||
| 149 | + fontSize: ScreenUtil().setWidth(28), | ||
| 150 | + color: MyColours.color_333333), | ||
| 151 | + ), | ||
| 152 | + title == '管理员' | ||
| 153 | + ? SizedBox() | ||
| 154 | + : Provider.of<UserModel>(context, | ||
| 143 | listen: false) | 155 | listen: false) |
| 144 | .user | 156 | .user |
| 145 | .role_name == | 157 | .role_name == |
| 146 | - '店长' && | ||
| 147 | - title != '店长') | ||
| 148 | - ? InkWell( | ||
| 149 | - onTap: () { | ||
| 150 | - _addSellerClerk(roleId); | ||
| 151 | - }, | ||
| 152 | - child: Text( | ||
| 153 | - '添加', | ||
| 154 | - style: TextStyle( | ||
| 155 | - fontSize: | ||
| 156 | - ScreenUtil().setWidth(30), | ||
| 157 | - color: MyColours.color_199095), | ||
| 158 | - ), | ||
| 159 | - ) | ||
| 160 | - : SizedBox() | ||
| 161 | - ], | ||
| 162 | - )), | 158 | + '管理员' || |
| 159 | + (Provider.of<UserModel>(context, | ||
| 160 | + listen: false) | ||
| 161 | + .user | ||
| 162 | + .role_name == | ||
| 163 | + '店长' && | ||
| 164 | + title != '店长') | ||
| 165 | + ? InkWell( | ||
| 166 | + onTap: () { | ||
| 167 | + _addSellerClerk(roleId); | ||
| 168 | + }, | ||
| 169 | + child: Text( | ||
| 170 | + '添加', | ||
| 171 | + style: TextStyle( | ||
| 172 | + fontSize: ScreenUtil() | ||
| 173 | + .setWidth(30), | ||
| 174 | + color: | ||
| 175 | + MyColours.color_199095), | ||
| 176 | + ), | ||
| 177 | + ) | ||
| 178 | + : SizedBox() | ||
| 179 | + ], | ||
| 180 | + ))), | ||
| 163 | MyDivider( | 181 | MyDivider( |
| 164 | double.infinity, | 182 | double.infinity, |
| 165 | ScreenUtil().setWidth(2), | 183 | ScreenUtil().setWidth(2), |
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
| 3 | +import 'package:one_key/provider/personnel_provider.dart'; | ||
| 4 | +import 'package:one_key/res/colors.dart'; | ||
| 5 | +import 'package:one_key/utils/event_bus.dart'; | ||
| 6 | +import 'package:one_key/utils/utils.dart'; | ||
| 7 | +import 'package:one_key/widgets/MyDivider.dart'; | ||
| 8 | +import 'package:one_key/widgets/h_empty_view.dart'; | ||
| 9 | +import 'package:one_key/widgets/round_button.dart'; | ||
| 10 | +import 'package:one_key/widgets/system_app_bar.dart'; | ||
| 11 | +import 'package:one_key/widgets/v_empty_view.dart'; | ||
| 12 | +import 'package:provider/provider.dart'; | ||
| 13 | + | ||
| 14 | +class PersonnelPasswordEditPage extends StatefulWidget { | ||
| 15 | + final String idstr; | ||
| 16 | + PersonnelPasswordEditPage({Key key, this.idstr}) : super(key: key); | ||
| 17 | + | ||
| 18 | + @override | ||
| 19 | + _PersonnelPasswordEditPageState createState() => | ||
| 20 | + _PersonnelPasswordEditPageState(); | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +class _PersonnelPasswordEditPageState extends State<PersonnelPasswordEditPage> { | ||
| 24 | + bool show = false; | ||
| 25 | + TextEditingController _pwdController = TextEditingController(); | ||
| 26 | + TextEditingController _pwdControllerConfirm = TextEditingController(); | ||
| 27 | + FocusNode _pwdFocusNode = FocusNode(); | ||
| 28 | + FocusNode _pwdFocusNodeConfirm = FocusNode(); | ||
| 29 | + bool warning = false; | ||
| 30 | + PersonnelProvider personnelProvider; | ||
| 31 | + @override | ||
| 32 | + void initState() { | ||
| 33 | + super.initState(); | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + // 修改密码 | ||
| 37 | + _updatePassword({bool showLoading = true}) async { | ||
| 38 | + Map<String, String> params = { | ||
| 39 | + "kid": widget.idstr, | ||
| 40 | + 'password': _pwdControllerConfirm.text, | ||
| 41 | + 'keys': 'xiaotao666' | ||
| 42 | + }; | ||
| 43 | + | ||
| 44 | + bool sucess = await personnelProvider.updatePassword(context, params, | ||
| 45 | + showLoading: showLoading); | ||
| 46 | + if (sucess) { | ||
| 47 | + EventBus().emit('personnel_show_page'); | ||
| 48 | + Navigator.pop(context); | ||
| 49 | + } | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + @override | ||
| 53 | + Widget build(BuildContext context) { | ||
| 54 | + personnelProvider = Provider.of<PersonnelProvider>(context, listen: true); | ||
| 55 | + return Scaffold( | ||
| 56 | + backgroundColor: MyColours.color_ffffff, | ||
| 57 | + appBar: SystemAppBar( | ||
| 58 | + '修改密码', | ||
| 59 | + onTap: () { | ||
| 60 | + Navigator.pop(context); | ||
| 61 | + }, | ||
| 62 | + ), | ||
| 63 | + body: Padding( | ||
| 64 | + padding: EdgeInsets.symmetric(vertical: ScreenUtil().setWidth(20)), | ||
| 65 | + child: Column( | ||
| 66 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
| 67 | + children: [ | ||
| 68 | + Container( | ||
| 69 | + padding: EdgeInsets.symmetric( | ||
| 70 | + horizontal: ScreenUtil().setWidth(40), | ||
| 71 | + ), | ||
| 72 | + height: ScreenUtil().setHeight(84), | ||
| 73 | + // width: ScreenUtil().setWidth(611), | ||
| 74 | + alignment: Alignment.center, | ||
| 75 | + child: Row( | ||
| 76 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
| 77 | + children: <Widget>[ | ||
| 78 | + Text( | ||
| 79 | + "修改密码", | ||
| 80 | + style: TextStyle( | ||
| 81 | + color: MyColours.color_353535, | ||
| 82 | + fontSize: ScreenUtil().setSp(30)), | ||
| 83 | + ), | ||
| 84 | + HEmptyView(20), | ||
| 85 | + Expanded( | ||
| 86 | + child: Container( | ||
| 87 | + height: ScreenUtil().setHeight(84), | ||
| 88 | + padding: EdgeInsets.only( | ||
| 89 | + left: ScreenUtil().setWidth(20), | ||
| 90 | + right: ScreenUtil().setWidth(20), | ||
| 91 | + top: ScreenUtil().setWidth(8)), | ||
| 92 | + child: TextField( | ||
| 93 | + controller: _pwdController, | ||
| 94 | + focusNode: _pwdFocusNode, | ||
| 95 | + // autofocus: _sellerCodeController.text.isNotEmpty && | ||
| 96 | + // _accountController.text.isNotEmpty && | ||
| 97 | + // _pwdController.text.isEmpty, | ||
| 98 | + style: TextStyle( | ||
| 99 | + color: MyColours.color_353535, | ||
| 100 | + fontSize: ScreenUtil().setSp(28)), | ||
| 101 | + decoration: InputDecoration( | ||
| 102 | + hintText: "请输入密码", | ||
| 103 | + hintStyle: TextStyle( | ||
| 104 | + color: MyColours.color_c1c1c1, | ||
| 105 | + fontSize: ScreenUtil().setSp(28)), | ||
| 106 | + border: OutlineInputBorder( | ||
| 107 | + borderSide: BorderSide.none), | ||
| 108 | + contentPadding: EdgeInsets.zero, | ||
| 109 | + ), | ||
| 110 | + onChanged: (value) { | ||
| 111 | + if (!Utils.passwordRegExp(value)) { | ||
| 112 | + setState(() { | ||
| 113 | + warning = true; | ||
| 114 | + }); | ||
| 115 | + } else { | ||
| 116 | + setState(() { | ||
| 117 | + warning = false; | ||
| 118 | + }); | ||
| 119 | + } | ||
| 120 | + }, | ||
| 121 | + obscureText: true, | ||
| 122 | + keyboardType: TextInputType.text, | ||
| 123 | + )), | ||
| 124 | + ), | ||
| 125 | + ], | ||
| 126 | + )), | ||
| 127 | + MyDivider( | ||
| 128 | + double.infinity, | ||
| 129 | + ScreenUtil().setWidth(2), | ||
| 130 | + color: MyColours.color_E0E0E0, | ||
| 131 | + ), | ||
| 132 | + Container( | ||
| 133 | + padding: EdgeInsets.symmetric( | ||
| 134 | + horizontal: ScreenUtil().setWidth(40), | ||
| 135 | + ), | ||
| 136 | + height: ScreenUtil().setHeight(84), | ||
| 137 | + // width: ScreenUtil().setWidth(611), | ||
| 138 | + alignment: Alignment.center, | ||
| 139 | + child: Row( | ||
| 140 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
| 141 | + children: <Widget>[ | ||
| 142 | + Text( | ||
| 143 | + "确认密码", | ||
| 144 | + style: TextStyle( | ||
| 145 | + color: MyColours.color_353535, | ||
| 146 | + fontSize: ScreenUtil().setSp(30)), | ||
| 147 | + ), | ||
| 148 | + HEmptyView(20), | ||
| 149 | + Expanded( | ||
| 150 | + child: Container( | ||
| 151 | + height: ScreenUtil().setHeight(84), | ||
| 152 | + padding: EdgeInsets.only( | ||
| 153 | + left: ScreenUtil().setWidth(20), | ||
| 154 | + right: ScreenUtil().setWidth(20), | ||
| 155 | + top: ScreenUtil().setWidth(8)), | ||
| 156 | + child: TextField( | ||
| 157 | + controller: _pwdControllerConfirm, | ||
| 158 | + focusNode: _pwdFocusNodeConfirm, | ||
| 159 | + // autofocus: _sellerCodeController.text.isNotEmpty && | ||
| 160 | + // _accountController.text.isNotEmpty && | ||
| 161 | + // _pwdController.text.isEmpty, | ||
| 162 | + style: TextStyle( | ||
| 163 | + color: MyColours.color_353535, | ||
| 164 | + fontSize: ScreenUtil().setSp(28)), | ||
| 165 | + decoration: InputDecoration( | ||
| 166 | + hintText: "请确认密码", | ||
| 167 | + hintStyle: TextStyle( | ||
| 168 | + color: MyColours.color_c1c1c1, | ||
| 169 | + fontSize: ScreenUtil().setSp(28)), | ||
| 170 | + border: OutlineInputBorder( | ||
| 171 | + borderSide: BorderSide.none), | ||
| 172 | + contentPadding: EdgeInsets.zero, | ||
| 173 | + ), | ||
| 174 | + onChanged: (value) {}, | ||
| 175 | + obscureText: true, | ||
| 176 | + keyboardType: TextInputType.text, | ||
| 177 | + )), | ||
| 178 | + ), | ||
| 179 | + ], | ||
| 180 | + )), | ||
| 181 | + MyDivider( | ||
| 182 | + double.infinity, | ||
| 183 | + ScreenUtil().setWidth(2), | ||
| 184 | + color: MyColours.color_E0E0E0, | ||
| 185 | + ), | ||
| 186 | + VEmptyView(40), | ||
| 187 | + Text( | ||
| 188 | + '密码只能由数字和字母组成,最少6位,最多18位', | ||
| 189 | + style: TextStyle( | ||
| 190 | + fontSize: ScreenUtil().setSp(28), | ||
| 191 | + color: warning | ||
| 192 | + ? MyColours.color_E14553 | ||
| 193 | + : MyColours.color_333333), | ||
| 194 | + ), | ||
| 195 | + VEmptyView(60), | ||
| 196 | + Padding( | ||
| 197 | + padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0, | ||
| 198 | + ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)), | ||
| 199 | + child: RoundButton( | ||
| 200 | + onPressed: () { | ||
| 201 | + if (warning) { | ||
| 202 | + Utils.showToast('密码只能由数字和字母组成,最少6位,最多18位'); | ||
| 203 | + return; | ||
| 204 | + } | ||
| 205 | + | ||
| 206 | + if (_pwdController.text != _pwdControllerConfirm.text) { | ||
| 207 | + Utils.showToast('两次密码输入不一致!'); | ||
| 208 | + return; | ||
| 209 | + } | ||
| 210 | + if (_pwdController.text.trim().length == 0) { | ||
| 211 | + Utils.showToast('请输入密码'); | ||
| 212 | + return; | ||
| 213 | + } | ||
| 214 | + FocusScope.of(context) | ||
| 215 | + .requestFocus(FocusNode()); //点击空白处隐藏键盘 | ||
| 216 | + _updatePassword(); | ||
| 217 | + }, | ||
| 218 | + text: '确认修改', | ||
| 219 | + fontSize: 34, | ||
| 220 | + isBold: false, | ||
| 221 | + height: ScreenUtil().setWidth(80), | ||
| 222 | + width: double.infinity, | ||
| 223 | + radius: ScreenUtil().setWidth(10), | ||
| 224 | + )) | ||
| 225 | + ], | ||
| 226 | + ), | ||
| 227 | + )); | ||
| 228 | + } | ||
| 229 | +} |
| 1 | +import 'package:flutter/material.dart'; | ||
| 2 | +import 'package:flutter_screenutil/flutter_screenutil.dart'; | ||
| 3 | +import 'package:one_key/provider/personnel_provider.dart'; | ||
| 4 | +import 'package:one_key/provider/user_model.dart'; | ||
| 5 | +import 'package:one_key/res/colors.dart'; | ||
| 6 | +import 'package:one_key/route/navigator_util.dart'; | ||
| 7 | +import 'package:one_key/utils/event_bus.dart'; | ||
| 8 | +import 'package:one_key/utils/utils.dart'; | ||
| 9 | +import 'package:one_key/widgets/h_empty_view.dart'; | ||
| 10 | +import 'package:one_key/widgets/system_app_bar.dart'; | ||
| 11 | +import 'package:one_key/widgets/v_empty_view.dart'; | ||
| 12 | +import 'package:provider/provider.dart'; | ||
| 13 | + | ||
| 14 | +class PersonnelPasswordPage extends StatefulWidget { | ||
| 15 | + final String idstr; | ||
| 16 | + final String account; | ||
| 17 | + PersonnelPasswordPage({Key key, this.idstr, this.account}) : super(key: key); | ||
| 18 | + | ||
| 19 | + @override | ||
| 20 | + _PersonnelPasswordPageState createState() => _PersonnelPasswordPageState(); | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +class _PersonnelPasswordPageState extends State<PersonnelPasswordPage> { | ||
| 24 | + bool show = false; | ||
| 25 | + PersonnelProvider personnelProvider; | ||
| 26 | + | ||
| 27 | + @override | ||
| 28 | + void initState() { | ||
| 29 | + super.initState(); | ||
| 30 | + WidgetsBinding.instance.addPostFrameCallback((timeStamp) { | ||
| 31 | + _getPassword(showLoading: false); | ||
| 32 | + }); | ||
| 33 | + | ||
| 34 | + EventBus().on('personnel_show_page', (arg) { | ||
| 35 | + _getPassword(showLoading: false); | ||
| 36 | + }); | ||
| 37 | + } | ||
| 38 | + | ||
| 39 | + @override | ||
| 40 | + void dispose() { | ||
| 41 | + // TODO: implement dispose | ||
| 42 | + super.dispose(); | ||
| 43 | + EventBus().off('personnel_show_page'); | ||
| 44 | + } | ||
| 45 | + | ||
| 46 | + // 商户端查看密码 | ||
| 47 | + _getPassword({bool showLoading = true}) async { | ||
| 48 | + Map<String, String> params = { | ||
| 49 | + "sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid, | ||
| 50 | + 'account': widget.account, | ||
| 51 | + 'key': 'xiaotao666' | ||
| 52 | + }; | ||
| 53 | + | ||
| 54 | + await personnelProvider.getPassword(context, params, | ||
| 55 | + showLoading: showLoading); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + _stringHide(String str) { | ||
| 59 | + String temp = ''; | ||
| 60 | + int lenght = str.length - 2; | ||
| 61 | + for (int i = 0; i < lenght; i++) { | ||
| 62 | + temp += '*'; | ||
| 63 | + } | ||
| 64 | + return str.substring(0, 1) + temp + str.substring(str.length - 1); | ||
| 65 | + } | ||
| 66 | + | ||
| 67 | + @override | ||
| 68 | + Widget build(BuildContext context) { | ||
| 69 | + UserModel model = Provider.of<UserModel>(context, listen: false); | ||
| 70 | + personnelProvider = Provider.of<PersonnelProvider>(context, listen: true); | ||
| 71 | + return Scaffold( | ||
| 72 | + appBar: SystemAppBar( | ||
| 73 | + '查看密码', | ||
| 74 | + onTap: () { | ||
| 75 | + Navigator.pop(context); | ||
| 76 | + }, | ||
| 77 | + ), | ||
| 78 | + body: Padding( | ||
| 79 | + padding: EdgeInsets.all(ScreenUtil().setWidth(40)), | ||
| 80 | + child: Column( | ||
| 81 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
| 82 | + children: [ | ||
| 83 | + InkWell( | ||
| 84 | + onTap: () { | ||
| 85 | + setState(() { | ||
| 86 | + show = !show; | ||
| 87 | + }); | ||
| 88 | + }, | ||
| 89 | + child: Padding( | ||
| 90 | + padding: EdgeInsets.only( | ||
| 91 | + top: ScreenUtil().setWidth(40), | ||
| 92 | + bottom: ScreenUtil().setWidth(20)), | ||
| 93 | + child: Row( | ||
| 94 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 95 | + children: [ | ||
| 96 | + Text( | ||
| 97 | + show | ||
| 98 | + ? personnelProvider.password | ||
| 99 | + : personnelProvider.password == '' | ||
| 100 | + ? '' | ||
| 101 | + : _stringHide(personnelProvider.password), | ||
| 102 | + maxLines: 5, | ||
| 103 | + style: TextStyle( | ||
| 104 | + fontSize: ScreenUtil().setSp(38), | ||
| 105 | + color: MyColours.color_333333)), | ||
| 106 | + HEmptyView(20), | ||
| 107 | + Image.asset( | ||
| 108 | + Utils.getImgPath(show ? 'no_see' : 'can_see'), | ||
| 109 | + width: ScreenUtil().setWidth(50), | ||
| 110 | + ) | ||
| 111 | + ], | ||
| 112 | + )), | ||
| 113 | + ), | ||
| 114 | + InkWell( | ||
| 115 | + onTap: () { | ||
| 116 | + NavigatorUtil.goPersonnelPasswordEditPage(context, | ||
| 117 | + idstr: widget.idstr); | ||
| 118 | + }, | ||
| 119 | + child: Padding( | ||
| 120 | + padding: EdgeInsets.only( | ||
| 121 | + top: ScreenUtil().setWidth(20), | ||
| 122 | + bottom: ScreenUtil().setWidth(40)), | ||
| 123 | + child: Row( | ||
| 124 | + mainAxisAlignment: MainAxisAlignment.center, | ||
| 125 | + children: [ | ||
| 126 | + Text( | ||
| 127 | + '忘记密码?', | ||
| 128 | + style: TextStyle( | ||
| 129 | + fontSize: ScreenUtil().setSp(30), | ||
| 130 | + color: MyColours.color_666666), | ||
| 131 | + ), | ||
| 132 | + Text('去重置', | ||
| 133 | + style: TextStyle( | ||
| 134 | + fontSize: ScreenUtil().setSp(30), | ||
| 135 | + color: MyColours.color_199095)) | ||
| 136 | + ], | ||
| 137 | + ))) | ||
| 138 | + ], | ||
| 139 | + ), | ||
| 140 | + )); | ||
| 141 | + } | ||
| 142 | +} |
| @@ -15,6 +15,7 @@ import 'package:provider/provider.dart'; | @@ -15,6 +15,7 @@ import 'package:provider/provider.dart'; | ||
| 15 | */ | 15 | */ |
| 16 | class PersonnelProvider extends ChangeNotifier { | 16 | class PersonnelProvider extends ChangeNotifier { |
| 17 | PersonnelManageModelData dataMap; | 17 | PersonnelManageModelData dataMap; |
| 18 | + String password = ''; | ||
| 18 | 19 | ||
| 19 | /// 获取店员列表 | 20 | /// 获取店员列表 |
| 20 | getAuthUserLists(BuildContext context, Map<String, String> params, | 21 | getAuthUserLists(BuildContext context, Map<String, String> params, |
| @@ -117,7 +118,8 @@ class PersonnelProvider extends ChangeNotifier { | @@ -117,7 +118,8 @@ class PersonnelProvider extends ChangeNotifier { | ||
| 117 | } | 118 | } |
| 118 | return false; | 119 | return false; |
| 119 | } | 120 | } |
| 120 | - ///根据商家ID获取商家信息 | 121 | + |
| 122 | + ///根据商家ID获取商家信息 | ||
| 121 | Future<GetSellerInfoSunModel> getSellerById(BuildContext context) async { | 123 | Future<GetSellerInfoSunModel> getSellerById(BuildContext context) async { |
| 122 | UserModel userModel = Provider.of<UserModel>(context, listen: false); | 124 | UserModel userModel = Provider.of<UserModel>(context, listen: false); |
| 123 | Map<String, String> params = { | 125 | Map<String, String> params = { |
| @@ -164,4 +166,40 @@ class PersonnelProvider extends ChangeNotifier { | @@ -164,4 +166,40 @@ class PersonnelProvider extends ChangeNotifier { | ||
| 164 | } | 166 | } |
| 165 | return false; | 167 | return false; |
| 166 | } | 168 | } |
| 169 | + | ||
| 170 | + /// 设置商家接单人 | ||
| 171 | + getPassword(BuildContext context, Map<String, String> params, | ||
| 172 | + {showLoading = false}) async { | ||
| 173 | + BaseResp<dynamic> baseResp = await DioUtil() | ||
| 174 | + .request<dynamic>(context, Method.get, HttpUrl.get_password, | ||
| 175 | + data: params, showLoading: showLoading) | ||
| 176 | + .catchError((error) { | ||
| 177 | + print(error.toString()); | ||
| 178 | + }); | ||
| 179 | + if (baseResp != null && baseResp.code == Constant.status_success) { | ||
| 180 | + password = baseResp.data; | ||
| 181 | + notifyListeners(); | ||
| 182 | + } else { | ||
| 183 | + Utils.showToast(baseResp.msg ?? ""); | ||
| 184 | + } | ||
| 185 | + } | ||
| 186 | + | ||
| 187 | + /// 员工密码修改 | ||
| 188 | + Future<bool> updatePassword(BuildContext context, Map<String, String> params, | ||
| 189 | + {showLoading = false}) async { | ||
| 190 | + BaseResp<dynamic> baseResp = await DioUtil() | ||
| 191 | + .request<dynamic>(context, Method.get, HttpUrl.update_password, | ||
| 192 | + data: params, showLoading: showLoading) | ||
| 193 | + .catchError((error) { | ||
| 194 | + print(error.toString()); | ||
| 195 | + }); | ||
| 196 | + if (baseResp != null && baseResp.code == Constant.status_success) { | ||
| 197 | + if (baseResp.data == 1) { | ||
| 198 | + return true; | ||
| 199 | + } | ||
| 200 | + } else { | ||
| 201 | + Utils.showToast(baseResp.msg ?? ""); | ||
| 202 | + } | ||
| 203 | + return false; | ||
| 204 | + } | ||
| 167 | } | 205 | } |
| @@ -70,7 +70,8 @@ class UserModel with ChangeNotifier { | @@ -70,7 +70,8 @@ class UserModel with ChangeNotifier { | ||
| 70 | "morning": "", | 70 | "morning": "", |
| 71 | "noon": "", | 71 | "noon": "", |
| 72 | "night": "", | 72 | "night": "", |
| 73 | - 'userphone':user['phone'] | 73 | + 'userphone': user['phone'], |
| 74 | + 'token': baseResp.data[0]["token"]['token'] | ||
| 74 | }; | 75 | }; |
| 75 | await saveUserInfo(User.fromJson(userMap)); | 76 | await saveUserInfo(User.fromJson(userMap)); |
| 76 | return getSellerInfo( | 77 | return getSellerInfo( |
| @@ -102,7 +103,7 @@ class UserModel with ChangeNotifier { | @@ -102,7 +103,7 @@ class UserModel with ChangeNotifier { | ||
| 102 | user['morning'] = daily['morning']; | 103 | user['morning'] = daily['morning']; |
| 103 | user['noon'] = daily['noon']; | 104 | user['noon'] = daily['noon']; |
| 104 | user['night'] = daily['night']; | 105 | user['night'] = daily['night']; |
| 105 | - | 106 | + |
| 106 | await saveUserInfo(User.fromJson(user)); | 107 | await saveUserInfo(User.fromJson(user)); |
| 107 | App.sp.setBool("isLogin", true); | 108 | App.sp.setBool("isLogin", true); |
| 108 | App.sp.setString("is_call_tel", seller['is_call_tel'].toString()); | 109 | App.sp.setString("is_call_tel", seller['is_call_tel'].toString()); |
| @@ -432,12 +432,28 @@ class NavigatorUtil { | @@ -432,12 +432,28 @@ class NavigatorUtil { | ||
| 432 | 432 | ||
| 433 | /// 员工管理页面 | 433 | /// 员工管理页面 |
| 434 | static Future<dynamic> goPersonnelDetailPage(BuildContext context, | 434 | static Future<dynamic> goPersonnelDetailPage(BuildContext context, |
| 435 | - {replace = false, | ||
| 436 | - bool isNew = true, | ||
| 437 | - PersonnelManageSunModel model, | ||
| 438 | - String position}) { | 435 | + {replace = false, PersonnelManageSunModel model, String position}) { |
| 439 | return _navigateTo(context, | 436 | return _navigateTo(context, |
| 440 | "${Routes.personnel_detail_page}?model=${FluroConvertUtils.object2string(model)}&position=${Uri.encodeComponent(position)}", | 437 | "${Routes.personnel_detail_page}?model=${FluroConvertUtils.object2string(model)}&position=${Uri.encodeComponent(position)}", |
| 441 | replace: replace); | 438 | replace: replace); |
| 442 | } | 439 | } |
| 440 | + | ||
| 441 | + /// 密码展示页 | ||
| 442 | + static Future<dynamic> goPersonnelPasswordPage(BuildContext context, | ||
| 443 | + {replace = false, String idstr, String account}) { | ||
| 444 | + return _navigateTo(context, | ||
| 445 | + "${Routes.personnel_password_page}?account=$account&idstr=${idstr}", | ||
| 446 | + replace: replace); | ||
| 447 | + } | ||
| 448 | + | ||
| 449 | + /// 密码修改页 | ||
| 450 | + static Future<dynamic> goPersonnelPasswordEditPage( | ||
| 451 | + BuildContext context, { | ||
| 452 | + replace = false, | ||
| 453 | + String idstr, | ||
| 454 | + }) { | ||
| 455 | + return _navigateTo( | ||
| 456 | + context, "${Routes.personnel_password_edit_page}?idstr=${idstr}", | ||
| 457 | + replace: replace); | ||
| 458 | + } | ||
| 443 | } | 459 | } |
| @@ -36,8 +36,10 @@ import 'package:one_key/pages/detail/handle_online_page.dart'; | @@ -36,8 +36,10 @@ import 'package:one_key/pages/detail/handle_online_page.dart'; | ||
| 36 | import 'package:one_key/pages/detail/notebook_detail_page.dart'; | 36 | import 'package:one_key/pages/detail/notebook_detail_page.dart'; |
| 37 | import 'package:one_key/pages/login/web_page.dart'; | 37 | import 'package:one_key/pages/login/web_page.dart'; |
| 38 | import 'package:one_key/pages/message/message_order_menu.dart'; | 38 | import 'package:one_key/pages/message/message_order_menu.dart'; |
| 39 | -import 'package:one_key/pages/my/%20%20personnel_type/personnel_detail_page.dart'; | ||
| 40 | -import 'package:one_key/pages/my/%20%20personnel_type/personnel_manage_page.dart'; | 39 | +import 'package:one_key/pages/my/personnel_type/personnel_detail_page.dart'; |
| 40 | +import 'package:one_key/pages/my/personnel_type/personnel_manage_page.dart'; | ||
| 41 | +import 'package:one_key/pages/my/personnel_type/personnel_password_edit_page.dart'; | ||
| 42 | +import 'package:one_key/pages/my/personnel_type/personnel_password_show_page.dart'; | ||
| 41 | import 'package:one_key/pages/my/base_info.dart'; | 43 | import 'package:one_key/pages/my/base_info.dart'; |
| 42 | import 'package:one_key/pages/my/book_time_set.dart'; | 44 | import 'package:one_key/pages/my/book_time_set.dart'; |
| 43 | import 'package:one_key/pages/my/contant_page.dart'; | 45 | import 'package:one_key/pages/my/contant_page.dart'; |
| @@ -682,3 +684,26 @@ var personnelDetailPageHandle = new Handler( | @@ -682,3 +684,26 @@ var personnelDetailPageHandle = new Handler( | ||
| 682 | create: (_) => PersonnelProvider(), | 684 | create: (_) => PersonnelProvider(), |
| 683 | child: PersonnelDetailPage(model: data, position: position)); | 685 | child: PersonnelDetailPage(model: data, position: position)); |
| 684 | }); | 686 | }); |
| 687 | + | ||
| 688 | +///密码展示页面 | ||
| 689 | +var personnelPasswordPageHandle = new Handler( | ||
| 690 | + handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) { | ||
| 691 | + String account = params["account"].first; | ||
| 692 | + String idstr = params["idstr"].first; | ||
| 693 | + | ||
| 694 | + return ChangeNotifierProvider<PersonnelProvider>( | ||
| 695 | + create: (_) => PersonnelProvider(), | ||
| 696 | + child: PersonnelPasswordPage( | ||
| 697 | + account: account, | ||
| 698 | + idstr: idstr, | ||
| 699 | + )); | ||
| 700 | +}); | ||
| 701 | + | ||
| 702 | +///密码修改页面 | ||
| 703 | +var personnelPasswordEditPageHandle = new Handler( | ||
| 704 | + handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) { | ||
| 705 | + String idstr = params["idstr"].first; | ||
| 706 | + return ChangeNotifierProvider<PersonnelProvider>( | ||
| 707 | + create: (_) => PersonnelProvider(), | ||
| 708 | + child: PersonnelPasswordEditPage(idstr: idstr)); | ||
| 709 | +}); |
| @@ -60,7 +60,9 @@ class Routes { | @@ -60,7 +60,9 @@ class Routes { | ||
| 60 | static String menu_add_dishes_page = "/menu_add_dishes_page"; //添加菜品页面 | 60 | static String menu_add_dishes_page = "/menu_add_dishes_page"; //添加菜品页面 |
| 61 | static String personnel_manage_page = "/personnel_manage_page"; //店员管理页面 | 61 | static String personnel_manage_page = "/personnel_manage_page"; //店员管理页面 |
| 62 | static String personnel_detail_page = "/personnel_detail_page"; //店员详情页面 | 62 | static String personnel_detail_page = "/personnel_detail_page"; //店员详情页面 |
| 63 | - | 63 | + static String personnel_password_page = "/personnel_password_page"; //密码展示页 |
| 64 | + static String personnel_password_edit_page = | ||
| 65 | + "/personnel_password_edit_page"; //密码修改页 | ||
| 64 | 66 | ||
| 65 | static void configureRoutes(FluroRouter router) { | 67 | static void configureRoutes(FluroRouter router) { |
| 66 | router.notFoundHandler = new Handler( | 68 | router.notFoundHandler = new Handler( |
| @@ -127,9 +129,10 @@ class Routes { | @@ -127,9 +129,10 @@ class Routes { | ||
| 127 | router.define(menu_category_page, handler: menuCategoryPageHandle); | 129 | router.define(menu_category_page, handler: menuCategoryPageHandle); |
| 128 | router.define(menu_add_dishes_page, handler: menuAddDishesPageHandle); | 130 | router.define(menu_add_dishes_page, handler: menuAddDishesPageHandle); |
| 129 | router.define(personnel_manage_page, handler: personnelManagePageHandle); | 131 | router.define(personnel_manage_page, handler: personnelManagePageHandle); |
| 130 | - router.define(personnel_detail_page, handler: personnelDetailPageHandle); | ||
| 131 | - | ||
| 132 | - | ||
| 133 | - | 132 | + router.define(personnel_detail_page, handler: personnelDetailPageHandle); |
| 133 | + router.define(personnel_password_page, | ||
| 134 | + handler: personnelPasswordPageHandle); | ||
| 135 | + router.define(personnel_password_edit_page, | ||
| 136 | + handler: personnelPasswordEditPageHandle); | ||
| 134 | } | 137 | } |
| 135 | } | 138 | } |
| @@ -78,6 +78,12 @@ class Utils { | @@ -78,6 +78,12 @@ class Utils { | ||
| 78 | return exp.hasMatch(phone); | 78 | return exp.hasMatch(phone); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | + ///密码格式验证 | ||
| 82 | + static bool passwordRegExp(String password) { | ||
| 83 | + RegExp exp = RegExp(r'^[a-z0-9]{6,18}$'); | ||
| 84 | + return exp.hasMatch(password); | ||
| 85 | + } | ||
| 86 | + | ||
| 81 | ///生成随机验证码 | 87 | ///生成随机验证码 |
| 82 | static randomBit(int len) { | 88 | static randomBit(int len) { |
| 83 | String scopeF = '123456789'; //首位 | 89 | String scopeF = '123456789'; //首位 |
-
Please register or login to post a comment