Commit 4403468a5d8b314b192d5527ee315e8ecc7cefd4

Authored by wdn127929
1 parent a13b8e25

新建3.1

... ... @@ -19,6 +19,7 @@ class User {
String noon; //午市时间段
String night; //晚市时间段
String userphone; //角色电话
String token; //token
User(
this.openid,
... ... @@ -35,7 +36,8 @@ class User {
this.morning,
this.noon,
this.night,
this.userphone);
this.userphone,
this.token);
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
... ... @@ -43,6 +45,6 @@ class User {
@override
String toString() {
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}';
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}';
}
}
... ...
... ... @@ -22,7 +22,8 @@ User _$UserFromJson(Map<String, dynamic> json) {
json['morning'] as String,
json['noon'] as String,
json['night'] as String,
json['userphone'] as String);
json['userphone'] as String,
json['token'] as String);
}
Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
... ... @@ -40,5 +41,6 @@ Map<String, dynamic> _$UserToJson(User instance) => <String, dynamic>{
'morning': instance.morning,
'noon': instance.noon,
'night': instance.night,
'userphone': instance.userphone
'userphone': instance.userphone,
'token': instance.token
};
... ...
... ... @@ -164,5 +164,9 @@ class HttpUrl {
"?service=App.Seller.EditAuthUser"; // 编辑店员
static const String bind_phone_seller_user =
"?service=App.Seller.BindPhoneSellerUser"; // 账号表-员工绑定手机号
static const String get_password =
"?service=App.Seller.GetPassword"; // 商户端查看密码
static const String update_password =
"?service=App.Seller.UpdatePassword"; // 员工密码修改
}
... ...
... ... @@ -6,6 +6,7 @@ import 'package:one_key/models/personnel_manage_model.dart';
import 'package:one_key/provider/personnel_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/utils.dart';
... ... @@ -192,7 +193,10 @@ class _PersonnelDetailPageState extends State<PersonnelDetailPage> {
} else if (element == '绑定微信') {
DialogUtil.openAlertDialogImage(
context, '请员工使用微信扫一扫添加店员', dcAdduserCode, 660);
} else if (element == '查看密码') {}
} else if (element == '查看密码') {
NavigatorUtil.goPersonnelPasswordPage(context,
account: widget.model.account, idstr: widget.model.id);
}
},
),
);
... ...
... ... @@ -117,49 +117,67 @@ class _PersonnelManagePageState extends State<PersonnelManagePage> {
return Column(
children: [
Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(40)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
title == '管理员'
? '${title}'
: '${title} (${data.length}人)',
style: TextStyle(
fontSize: ScreenUtil().setWidth(28),
color: MyColours.color_333333),
),
title == '管理员'
? SizedBox()
: Provider.of<UserModel>(context,
listen: false)
.user
.role_name ==
'管理员' ||
(Provider.of<UserModel>(context,
InkWell(
onTap: () {
if ((Provider.of<UserModel>(context, listen: false)
.user
.role_name ==
'管理员' ||
(Provider.of<UserModel>(context,
listen: false)
.user
.role_name ==
'店长' &&
title != '店长')) &&
title != '管理员') {
_addSellerClerk(roleId);
}
},
child: Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(40)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
title == '管理员'
? '${title}'
: '${title} (${data.length}人)',
style: TextStyle(
fontSize: ScreenUtil().setWidth(28),
color: MyColours.color_333333),
),
title == '管理员'
? SizedBox()
: Provider.of<UserModel>(context,
listen: false)
.user
.role_name ==
'店长' &&
title != '店长')
? InkWell(
onTap: () {
_addSellerClerk(roleId);
},
child: Text(
'添加',
style: TextStyle(
fontSize:
ScreenUtil().setWidth(30),
color: MyColours.color_199095),
),
)
: SizedBox()
],
)),
'管理员' ||
(Provider.of<UserModel>(context,
listen: false)
.user
.role_name ==
'店长' &&
title != '店长')
? InkWell(
onTap: () {
_addSellerClerk(roleId);
},
child: Text(
'添加',
style: TextStyle(
fontSize: ScreenUtil()
.setWidth(30),
color:
MyColours.color_199095),
),
)
: SizedBox()
],
))),
MyDivider(
double.infinity,
ScreenUtil().setWidth(2),
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/provider/personnel_provider.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
class PersonnelPasswordEditPage extends StatefulWidget {
final String idstr;
PersonnelPasswordEditPage({Key key, this.idstr}) : super(key: key);
@override
_PersonnelPasswordEditPageState createState() =>
_PersonnelPasswordEditPageState();
}
class _PersonnelPasswordEditPageState extends State<PersonnelPasswordEditPage> {
bool show = false;
TextEditingController _pwdController = TextEditingController();
TextEditingController _pwdControllerConfirm = TextEditingController();
FocusNode _pwdFocusNode = FocusNode();
FocusNode _pwdFocusNodeConfirm = FocusNode();
bool warning = false;
PersonnelProvider personnelProvider;
@override
void initState() {
super.initState();
}
// 修改密码
_updatePassword({bool showLoading = true}) async {
Map<String, String> params = {
"kid": widget.idstr,
'password': _pwdControllerConfirm.text,
'keys': 'xiaotao666'
};
bool sucess = await personnelProvider.updatePassword(context, params,
showLoading: showLoading);
if (sucess) {
EventBus().emit('personnel_show_page');
Navigator.pop(context);
}
}
@override
Widget build(BuildContext context) {
personnelProvider = Provider.of<PersonnelProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
'修改密码',
onTap: () {
Navigator.pop(context);
},
),
body: Padding(
padding: EdgeInsets.symmetric(vertical: ScreenUtil().setWidth(20)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
height: ScreenUtil().setHeight(84),
// width: ScreenUtil().setWidth(611),
alignment: Alignment.center,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
"修改密码",
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(30)),
),
HEmptyView(20),
Expanded(
child: Container(
height: ScreenUtil().setHeight(84),
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20),
right: ScreenUtil().setWidth(20),
top: ScreenUtil().setWidth(8)),
child: TextField(
controller: _pwdController,
focusNode: _pwdFocusNode,
// autofocus: _sellerCodeController.text.isNotEmpty &&
// _accountController.text.isNotEmpty &&
// _pwdController.text.isEmpty,
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(28)),
decoration: InputDecoration(
hintText: "请输入密码",
hintStyle: TextStyle(
color: MyColours.color_c1c1c1,
fontSize: ScreenUtil().setSp(28)),
border: OutlineInputBorder(
borderSide: BorderSide.none),
contentPadding: EdgeInsets.zero,
),
onChanged: (value) {
if (!Utils.passwordRegExp(value)) {
setState(() {
warning = true;
});
} else {
setState(() {
warning = false;
});
}
},
obscureText: true,
keyboardType: TextInputType.text,
)),
),
],
)),
MyDivider(
double.infinity,
ScreenUtil().setWidth(2),
color: MyColours.color_E0E0E0,
),
Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
height: ScreenUtil().setHeight(84),
// width: ScreenUtil().setWidth(611),
alignment: Alignment.center,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text(
"确认密码",
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(30)),
),
HEmptyView(20),
Expanded(
child: Container(
height: ScreenUtil().setHeight(84),
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20),
right: ScreenUtil().setWidth(20),
top: ScreenUtil().setWidth(8)),
child: TextField(
controller: _pwdControllerConfirm,
focusNode: _pwdFocusNodeConfirm,
// autofocus: _sellerCodeController.text.isNotEmpty &&
// _accountController.text.isNotEmpty &&
// _pwdController.text.isEmpty,
style: TextStyle(
color: MyColours.color_353535,
fontSize: ScreenUtil().setSp(28)),
decoration: InputDecoration(
hintText: "请确认密码",
hintStyle: TextStyle(
color: MyColours.color_c1c1c1,
fontSize: ScreenUtil().setSp(28)),
border: OutlineInputBorder(
borderSide: BorderSide.none),
contentPadding: EdgeInsets.zero,
),
onChanged: (value) {},
obscureText: true,
keyboardType: TextInputType.text,
)),
),
],
)),
MyDivider(
double.infinity,
ScreenUtil().setWidth(2),
color: MyColours.color_E0E0E0,
),
VEmptyView(40),
Text(
'密码只能由数字和字母组成,最少6位,最多18位',
style: TextStyle(
fontSize: ScreenUtil().setSp(28),
color: warning
? MyColours.color_E14553
: MyColours.color_333333),
),
VEmptyView(60),
Padding(
padding: EdgeInsets.fromLTRB(ScreenUtil().setWidth(40), 0,
ScreenUtil().setWidth(40), ScreenUtil().setWidth(40)),
child: RoundButton(
onPressed: () {
if (warning) {
Utils.showToast('密码只能由数字和字母组成,最少6位,最多18位');
return;
}
if (_pwdController.text != _pwdControllerConfirm.text) {
Utils.showToast('两次密码输入不一致!');
return;
}
if (_pwdController.text.trim().length == 0) {
Utils.showToast('请输入密码');
return;
}
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
_updatePassword();
},
text: '确认修改',
fontSize: 34,
isBold: false,
height: ScreenUtil().setWidth(80),
width: double.infinity,
radius: ScreenUtil().setWidth(10),
))
],
),
));
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/provider/personnel_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/event_bus.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
class PersonnelPasswordPage extends StatefulWidget {
final String idstr;
final String account;
PersonnelPasswordPage({Key key, this.idstr, this.account}) : super(key: key);
@override
_PersonnelPasswordPageState createState() => _PersonnelPasswordPageState();
}
class _PersonnelPasswordPageState extends State<PersonnelPasswordPage> {
bool show = false;
PersonnelProvider personnelProvider;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
_getPassword(showLoading: false);
});
EventBus().on('personnel_show_page', (arg) {
_getPassword(showLoading: false);
});
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
EventBus().off('personnel_show_page');
}
// 商户端查看密码
_getPassword({bool showLoading = true}) async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
'account': widget.account,
'key': 'xiaotao666'
};
await personnelProvider.getPassword(context, params,
showLoading: showLoading);
}
_stringHide(String str) {
String temp = '';
int lenght = str.length - 2;
for (int i = 0; i < lenght; i++) {
temp += '*';
}
return str.substring(0, 1) + temp + str.substring(str.length - 1);
}
@override
Widget build(BuildContext context) {
UserModel model = Provider.of<UserModel>(context, listen: false);
personnelProvider = Provider.of<PersonnelProvider>(context, listen: true);
return Scaffold(
appBar: SystemAppBar(
'查看密码',
onTap: () {
Navigator.pop(context);
},
),
body: Padding(
padding: EdgeInsets.all(ScreenUtil().setWidth(40)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
InkWell(
onTap: () {
setState(() {
show = !show;
});
},
child: Padding(
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(40),
bottom: ScreenUtil().setWidth(20)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
show
? personnelProvider.password
: personnelProvider.password == ''
? ''
: _stringHide(personnelProvider.password),
maxLines: 5,
style: TextStyle(
fontSize: ScreenUtil().setSp(38),
color: MyColours.color_333333)),
HEmptyView(20),
Image.asset(
Utils.getImgPath(show ? 'no_see' : 'can_see'),
width: ScreenUtil().setWidth(50),
)
],
)),
),
InkWell(
onTap: () {
NavigatorUtil.goPersonnelPasswordEditPage(context,
idstr: widget.idstr);
},
child: Padding(
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(20),
bottom: ScreenUtil().setWidth(40)),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'忘记密码?',
style: TextStyle(
fontSize: ScreenUtil().setSp(30),
color: MyColours.color_666666),
),
Text('去重置',
style: TextStyle(
fontSize: ScreenUtil().setSp(30),
color: MyColours.color_199095))
],
)))
],
),
));
}
}
... ...
... ... @@ -15,6 +15,7 @@ import 'package:provider/provider.dart';
*/
class PersonnelProvider extends ChangeNotifier {
PersonnelManageModelData dataMap;
String password = '';
/// 获取店员列表
getAuthUserLists(BuildContext context, Map<String, String> params,
... ... @@ -117,7 +118,8 @@ class PersonnelProvider extends ChangeNotifier {
}
return false;
}
///根据商家ID获取商家信息
///根据商家ID获取商家信息
Future<GetSellerInfoSunModel> getSellerById(BuildContext context) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
Map<String, String> params = {
... ... @@ -164,4 +166,40 @@ class PersonnelProvider extends ChangeNotifier {
}
return false;
}
/// 设置商家接单人
getPassword(BuildContext context, Map<String, String> params,
{showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_password,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
});
if (baseResp != null && baseResp.code == Constant.status_success) {
password = baseResp.data;
notifyListeners();
} else {
Utils.showToast(baseResp.msg ?? "");
}
}
/// 员工密码修改
Future<bool> updatePassword(BuildContext context, Map<String, String> params,
{showLoading = false}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.update_password,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
});
if (baseResp != null && baseResp.code == Constant.status_success) {
if (baseResp.data == 1) {
return true;
}
} else {
Utils.showToast(baseResp.msg ?? "");
}
return false;
}
}
... ...
... ... @@ -70,7 +70,8 @@ class UserModel with ChangeNotifier {
"morning": "",
"noon": "",
"night": "",
'userphone':user['phone']
'userphone': user['phone'],
'token': baseResp.data[0]["token"]['token']
};
await saveUserInfo(User.fromJson(userMap));
return getSellerInfo(
... ... @@ -102,7 +103,7 @@ class UserModel with ChangeNotifier {
user['morning'] = daily['morning'];
user['noon'] = daily['noon'];
user['night'] = daily['night'];
await saveUserInfo(User.fromJson(user));
App.sp.setBool("isLogin", true);
App.sp.setString("is_call_tel", seller['is_call_tel'].toString());
... ...
... ... @@ -432,12 +432,28 @@ class NavigatorUtil {
/// 员工管理页面
static Future<dynamic> goPersonnelDetailPage(BuildContext context,
{replace = false,
bool isNew = true,
PersonnelManageSunModel model,
String position}) {
{replace = false, PersonnelManageSunModel model, String position}) {
return _navigateTo(context,
"${Routes.personnel_detail_page}?model=${FluroConvertUtils.object2string(model)}&position=${Uri.encodeComponent(position)}",
replace: replace);
}
/// 密码展示页
static Future<dynamic> goPersonnelPasswordPage(BuildContext context,
{replace = false, String idstr, String account}) {
return _navigateTo(context,
"${Routes.personnel_password_page}?account=$account&idstr=${idstr}",
replace: replace);
}
/// 密码修改页
static Future<dynamic> goPersonnelPasswordEditPage(
BuildContext context, {
replace = false,
String idstr,
}) {
return _navigateTo(
context, "${Routes.personnel_password_edit_page}?idstr=${idstr}",
replace: replace);
}
}
... ...
... ... @@ -36,8 +36,10 @@ import 'package:one_key/pages/detail/handle_online_page.dart';
import 'package:one_key/pages/detail/notebook_detail_page.dart';
import 'package:one_key/pages/login/web_page.dart';
import 'package:one_key/pages/message/message_order_menu.dart';
import 'package:one_key/pages/my/%20%20personnel_type/personnel_detail_page.dart';
import 'package:one_key/pages/my/%20%20personnel_type/personnel_manage_page.dart';
import 'package:one_key/pages/my/personnel_type/personnel_detail_page.dart';
import 'package:one_key/pages/my/personnel_type/personnel_manage_page.dart';
import 'package:one_key/pages/my/personnel_type/personnel_password_edit_page.dart';
import 'package:one_key/pages/my/personnel_type/personnel_password_show_page.dart';
import 'package:one_key/pages/my/base_info.dart';
import 'package:one_key/pages/my/book_time_set.dart';
import 'package:one_key/pages/my/contant_page.dart';
... ... @@ -682,3 +684,26 @@ var personnelDetailPageHandle = new Handler(
create: (_) => PersonnelProvider(),
child: PersonnelDetailPage(model: data, position: position));
});
///密码展示页面
var personnelPasswordPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
String account = params["account"].first;
String idstr = params["idstr"].first;
return ChangeNotifierProvider<PersonnelProvider>(
create: (_) => PersonnelProvider(),
child: PersonnelPasswordPage(
account: account,
idstr: idstr,
));
});
///密码修改页面
var personnelPasswordEditPageHandle = new Handler(
handlerFunc: (BuildContext context, Map<dynamic, List<Object>> params) {
String idstr = params["idstr"].first;
return ChangeNotifierProvider<PersonnelProvider>(
create: (_) => PersonnelProvider(),
child: PersonnelPasswordEditPage(idstr: idstr));
});
... ...
... ... @@ -60,7 +60,9 @@ class Routes {
static String menu_add_dishes_page = "/menu_add_dishes_page"; //添加菜品页面
static String personnel_manage_page = "/personnel_manage_page"; //店员管理页面
static String personnel_detail_page = "/personnel_detail_page"; //店员详情页面
static String personnel_password_page = "/personnel_password_page"; //密码展示页
static String personnel_password_edit_page =
"/personnel_password_edit_page"; //密码修改页
static void configureRoutes(FluroRouter router) {
router.notFoundHandler = new Handler(
... ... @@ -127,9 +129,10 @@ class Routes {
router.define(menu_category_page, handler: menuCategoryPageHandle);
router.define(menu_add_dishes_page, handler: menuAddDishesPageHandle);
router.define(personnel_manage_page, handler: personnelManagePageHandle);
router.define(personnel_detail_page, handler: personnelDetailPageHandle);
router.define(personnel_detail_page, handler: personnelDetailPageHandle);
router.define(personnel_password_page,
handler: personnelPasswordPageHandle);
router.define(personnel_password_edit_page,
handler: personnelPasswordEditPageHandle);
}
}
... ...
... ... @@ -78,6 +78,12 @@ class Utils {
return exp.hasMatch(phone);
}
///密码格式验证
static bool passwordRegExp(String password) {
RegExp exp = RegExp(r'^[a-z0-9]{6,18}$');
return exp.hasMatch(password);
}
///生成随机验证码
static randomBit(int len) {
String scopeF = '123456789'; //首位
... ...