Commit 17b358df2027fca0fe154ae1c6651fbaa1e091dd

Authored by wdn127929
2 parents 06c09d4f e1157063

存酒接口部分

Too many changes to show.

To preserve performance only 27 of 27+ files are displayed.

... ... @@ -13,19 +13,21 @@ if (flutterRoot == null) {
def flutterVersionCode = "460"
if (flutterVersionCode == null) {
flutterVersionCode = '460'
}
def flutterVersionName = "4.6.0"
if (flutterVersionName == null) {
flutterVersionName = '4.6.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
... ...
import 'package:common_utils/common_utils.dart';
import 'package:one_key/models/wine_manage_model.dart';
import 'dart:convert' as convert;
class OutWineRecordModel {
int ret;
List<OutWineRecordSunModel> data;
String msg;
OutWineRecordModel({this.ret, this.data, this.msg});
OutWineRecordModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
if (json['data'] != null) {
data = new List<OutWineRecordSunModel>();
json['data'].forEach((v) {
data.add(new OutWineRecordSunModel.fromJson(v));
});
}
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['msg'] = this.msg;
return data;
}
}
class OutWineRecordSunModel {
String id;
List<WineCheckModel> wineCheck;
String cdate;
String rname;
String sex;
String phone;
String nickName;
String isMember;
String get sexStr {
if (sex == null || sex == '') return "";
switch (sex.toString()) {
case "1": //先生
case "男":
case "先生":
return "先生";
case "2": //女士
case "女":
case "女士":
return "女士";
case "3": //公司
case "公司":
return "公司";
}
}
String get cdateStr {
DateTime dateTime =
DateTime.fromMillisecondsSinceEpoch(int.parse(cdate.toString()) * 1000);
return DateUtil.formatDate(dateTime, format: DateFormats.full);
}
OutWineRecordSunModel(
{this.id,
this.wineCheck,
this.cdate,
this.rname,
this.sex,
this.phone,
this.nickName});
OutWineRecordSunModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
wineCheck = [];
if (json['wine_check'] != null && json['wine_check'] != '[]') {
if (json['wine_check'] is List) {
json['wine_check'].forEach((v) {
wineCheck.add(new WineCheckModel.fromJson(v));
});
} else {
convert.jsonDecode(json['wine_check']).forEach((v) {
wineCheck.add(new WineCheckModel.fromJson(v));
});
}
}
cdate = json['cdate'];
rname = json['rname'];
sex = json['sex'];
phone = json['phone'];
nickName = json['nick_name'];
isMember = json['is_member'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['wine_check'] = this.wineCheck;
data['cdate'] = this.cdate;
data['rname'] = this.rname;
data['sex'] = this.sex;
data['phone'] = this.phone;
data['nick_name'] = this.nickName;
data['is_member'] = this.isMember;
return data;
}
}
... ...
... ... @@ -112,6 +112,10 @@ class PersonnelManageSunModel extends Object {
@JsonKey(name: 'headimgurl')
String headimgurl;
@JsonKey(name: 'is_store_wine')
String isStoreWine;
bool select = false;
PersonnelManageSunModel(
... ... @@ -126,6 +130,7 @@ class PersonnelManageSunModel extends Object {
this.account,
this.isOnCall,
this.headimgurl,
this.isStoreWine
);
factory PersonnelManageSunModel.fromJson(Map<String, dynamic> srcJson) =>
... ...
... ... @@ -86,6 +86,7 @@ PersonnelManageSunModel _$PersonnelManageSunModelFromJson(
json['account'] as String,
json['is_on_call'] as String,
json['headimgurl'] as String,
json['is_store_wine'] as String,
);
}
... ... @@ -95,7 +96,7 @@ Map<String, dynamic> _$PersonnelManageSunModelToJson(
'id': instance.id,
'openid': instance.openid,
'user_name': instance.userName,
'nick_name':instance.nickName,
'nick_name': instance.nickName,
'is_first': instance.isFirst,
'role_id': instance.roleId,
'phone': instance.phone,
... ... @@ -103,6 +104,7 @@ Map<String, dynamic> _$PersonnelManageSunModelToJson(
'account': instance.account,
'is_on_call': instance.isOnCall,
'headimgurl': instance.headimgurl,
'is_store_wine': instance.isStoreWine
};
Shopowner _$ShopownerFromJson(Map<String, dynamic> json) {
... ...
import 'package:flutter/material.dart';
import 'package:one_key/models/upload_img_model.dart';
import 'dart:convert' as convert;
class WineManageFaModel {
int ret;
List<WineManageModel> data;
String msg;
WineManageFaModel({this.ret, this.data, this.msg});
WineManageFaModel.fromJson(Map<String, dynamic> json) {
ret = json['ret'];
if (json['data'] != null) {
data = [];
json['data'].forEach((v) {
data.add(new WineManageModel.fromJson(v));
});
}
msg = json['msg'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ret'] = this.ret;
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
data['msg'] = this.msg;
return data;
}
}
class WineManageModel {
String id;
String sid;
String uid;
String rname;
String sex;
String phone;
String isMember;
List<WineManageSunModel> wineData;
String cdate;
String nickName;
List<WineManageSunMoveModel> wineDataMove;
String get sexStr {
if (sex == null || sex == '') return "";
switch (sex.toString()) {
case "1": //先生
case "男":
case "先生":
return "先生";
case "2": //女士
case "女":
case "女士":
return "女士";
case "3": //公司
case "公司":
return "公司";
}
}
WineManageModel(
{this.id,
this.sid,
this.uid,
this.rname,
this.sex,
this.phone,
this.isMember,
this.wineData,
this.cdate,
this.nickName});
WineManageModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
sid = json['sid'];
uid = json['uid'];
rname = json['rname'];
sex = json['sex'];
phone = json['phone'];
isMember = json['is_member'];
wineData = [];
wineDataMove = [];
if (json['wine'] != null) {
wineData = [];
if (json['wine'] is List) {
json['wine'].forEach((v) {
wineData.add(new WineManageSunModel.fromJson(v));
wineDataMove.add(new WineManageSunMoveModel.fromJson(v));
});
} else {
convert.jsonDecode(json['wine']).forEach((v) {
wineData.add(new WineManageSunModel.fromJson(v));
wineDataMove.add(new WineManageSunMoveModel.fromJson(v));
});
}
}
cdate = json['cdate'];
nickName = json['nick_name'];
}
WineManageModel.fromJson2(Map<String, dynamic> json) {
id = json['id'];
sid = json['sid'];
uid = json['uid'];
rname = json['rname'];
sex = json['sex'];
phone = json['phone'];
isMember = json['is_member'];
wineData = [];
wineDataMove = [];
if (json['wine'] != null) {
wineData = [];
if (json['wine'] is List) {
json['wine'].forEach((v) {
// wineData.add(new WineManageSunModel.fromJson(v));
wineDataMove.add(v);
});
} else {
convert.jsonDecode(json['wine']).forEach((v) {
// wineData.add(new WineManageSunModel.fromJson(v));
wineDataMove.add(new WineManageSunMoveModel.fromJson(v));
});
}
}
cdate = json['cdate'];
nickName = json['nick_name'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['sid'] = this.sid;
data['uid'] = this.uid;
data['rname'] = this.rname;
data['sex'] = this.sex;
data['phone'] = this.phone;
data['is_member'] = this.isMember;
// data['wine'] = this.wineData;
data['cdate'] = this.cdate;
data['nick_name'] = this.nickName;
data['wine'] = this.wineDataMove;
return data;
}
}
class WineManageSunModel {
String wineName;
String wineAmount;
String unit;
String wineNumber;
List<UploadImgModel> img = [];
TextEditingController wineNameC = TextEditingController(); //酒品名称
TextEditingController wineNumC = TextEditingController(); //存酒数量
TextEditingController wineUnitC = TextEditingController(); //计量单位
TextEditingController wineSerialC = TextEditingController(); //存酒编号
// List<String> imageData = [
// 'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',
// 'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg'
// ];
WineManageSunModel({
this.wineName,
this.wineAmount,
this.unit,
this.wineNumber,
this.img,
});
WineManageSunModel.fromJson(Map<String, dynamic> json) {
wineName = json['wine_name'];
wineAmount = json['wine_amount'];
unit = json['unit'];
wineNumber = json['wine_number'] ?? "";
img = <UploadImgModel>[];
if (json['img'] != null) {
img = <UploadImgModel>[];
if (json['img'] is List) {
json['img'].forEach((v) {
UploadImgModel uploadImgModel = UploadImgModel();
uploadImgModel.qiniuUrl = v;
uploadImgModel.process = 1;
img.add(uploadImgModel);
});
} else {
convert.jsonDecode(json['img']).forEach((v) {
UploadImgModel uploadImgModel = UploadImgModel();
uploadImgModel.qiniuUrl = v;
uploadImgModel.process = 1;
img.add(uploadImgModel);
});
}
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['wine_name'] = this.wineName;
data['wine_amount'] = this.wineAmount;
data['unit'] = this.unit;
data['wine_number'] = this.wineNumber;
data['img'] = this.img;
return data;
}
}
class WineManageSunMoveModel {
String wineName;
String wineAmount;
String unit;
String wineNumber;
List<String> img;
String checkAmount;
// TextEditingController wineNameC = TextEditingController(); //酒品名称
TextEditingController wineNumC = TextEditingController(); //存酒数量
// TextEditingController wineUnitC = TextEditingController(); //计量单位
// TextEditingController wineSerialC = TextEditingController(); //存酒编号
// List<String> imageData = [
// 'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',
// 'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg'
// ];
WineManageSunMoveModel({
this.wineName,
this.wineAmount,
this.unit,
this.wineNumber,
this.checkAmount,
this.img,
});
WineManageSunMoveModel.fromJson(Map<String, dynamic> json) {
wineName = json['wine_name'];
wineAmount = json['wine_amount'];
// wineNumC.text = wineAmount ?? '';
unit = json['unit'];
wineNumber = json['wine_number'] ?? "";
checkAmount = json['check_amount'] ?? '';
// wineNumC.text = wineNumber;
if (json['img'] != null) {
img = <String>[];
if (json['img'] is List) {
json['img'].forEach((v) {
img.add(v);
});
} else {
convert.jsonDecode(json['img']).forEach((v) {
img.add(v);
});
}
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['wine_name'] = this.wineName;
data['wine_amount'] = this.wineAmount;
data['unit'] = this.unit;
data['wine_number'] = this.wineNumber;
data['check_amount'] = this.checkAmount;
data['img'] = this.img;
return data;
}
}
class WineCheckModel {
String wineName;
String unit;
String wineNumber;
List<String> img;
String checkAmount;
WineCheckModel({
this.wineName,
this.unit,
this.wineNumber,
this.checkAmount,
this.img,
});
WineCheckModel.fromJson(Map<String, dynamic> json) {
wineName = json['wine_name'];
unit = json['unit'];
wineNumber = json['wine_number'] ?? "";
checkAmount = json['check_amount'] ?? "";
// wineNumC.text = wineNumber;
if (json['img'] != null) {
img = <String>[];
if (json['img'] is List) {
json['img'].forEach((v) {
img.add(v);
});
} else {
convert.jsonDecode(json['img']).forEach((v) {
img.add(v);
});
}
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['wine_name'] = this.wineName;
data['unit'] = this.unit;
data['wine_number'] = this.wineNumber;
data['check_amount'] = this.checkAmount;
data['img'] = this.img;
return data;
}
}
... ...
... ... @@ -367,4 +367,29 @@ class HttpUrl {
static const String get_seller_template_conf =
"?service=App.Seller.GetSellerTemplateConf"; // 获取商家设置预订安排模板页面
static const String set_store_wine_by_seller_user =
"?service=App.Reserve.SetStoreWineBySellerUser"; // 设置商家存酒管理员
static const String set_store_wine_by_seller =
"?service=App.Reserve.SetStoreWineBySeller"; // 商家新建存酒
static const String get_store_wine_by_seller =
"?service=App.Reserve.GetStoreWineBySeller"; // 获取存酒列表
static const String get_store_wine_by_id =
"?service=App.Reserve.GetStoreWineById"; // 获取存酒详情
static const String set_store_wine_by_seller_check =
"?service=App.Reserve.SetStoreWineBySellerCheck"; // 取酒出库提交
static const String get_store_wine_check_by_wid =
"?service=App.Reserve.GetStoreWineCheckByWid"; // 根据存酒ID获取取酒记录
static const String get_store_wine_check_list =
"?service=App.Reserve.GetStoreWineCheckList"; // 获取取酒记录
// static const String send_vc_code =
// "?service=App.SendSMS.SendVcCode"; // 向指定手机号码发送验证码
}
... ...
... ... @@ -767,6 +767,10 @@ class _FirstImagePageState extends State<FirstImagePage> {
Map homeData = {
'theme_color':
themeColorData[themeColorIndex].color.value.toString(),
'red': themeColorData[themeColorIndex].color.red,
'green': themeColorData[themeColorIndex].color.green,
'blue': themeColorData[themeColorIndex].color.blue,
'alpha': themeColorData[themeColorIndex].color.opacity,
'title': titleC.text,
'slogan': sloganC.text,
'image': _uploadImageProvider.firstImage.qiniuUrl
... ...
... ... @@ -665,7 +665,12 @@ class MyPageState extends State<MyPage> with WidgetsBindingObserver {
child: _item(
Utils.getImgPath('cdgl'), '套餐排菜')),
InkWell(
onTap: () {}, child: _item('', '空空空空')),
onTap: () {
NavigatorUtil.goStoreWineManageHomePage(
context);
},
child: _item(
Utils.getImgPath('khcj'), '客户存酒')),
InkWell(
onTap: () {}, child: _item('', '空空空空')),
InkWell(
... ...
... ... @@ -10,6 +10,7 @@ import 'package:one_key/models/get_seller_info_model.dart';
import 'package:one_key/models/personnel_manage_model.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/provider/personnel_provider.dart';
import 'package:one_key/provider/store_wine_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';
... ... @@ -45,6 +46,9 @@ class _PersonnelDetailPageState extends State<PersonnelDetailPage> {
String manageShow = '全店未分配客户资源';
PersonnelManageSunModel data;
String uid = '';
String isStoreWine = '0';
@override
void initState() {
super.initState();
... ... @@ -157,6 +161,8 @@ class _PersonnelDetailPageState extends State<PersonnelDetailPage> {
// _getStoreBaseinfo();
_getWechatQrcode();
}
uid = data.id;
isStoreWine = data.isStoreWine ?? '0';
}
}
... ... @@ -300,6 +306,7 @@ class _PersonnelDetailPageState extends State<PersonnelDetailPage> {
@override
Widget build(BuildContext context) {
userModel = Provider.of<UserModel>(context, listen: false);
personnelProvider = Provider.of<PersonnelProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
... ... @@ -481,6 +488,39 @@ class _PersonnelDetailPageState extends State<PersonnelDetailPage> {
color: MyColours.color_438E93,
fontSize: ScreenUtil().setSp(28)),
)),
VEmptyView(40),
(userModel.user.role_name == '管理员' ||
userModel.user.role_name == '店长')
? InkWell(
onTap: () async {
Map<String, String> pramams = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'uid': uid,
'is_store_wine': isStoreWine == '1' ? '0' : '1'
};
StoreWineProvider storeWineProvider =
Provider.of<StoreWineProvider>(context,
listen: false);
bool success = await storeWineProvider
.setStoreWineBySellerUser(context, pramams,
showLoading: true);
if (success) {
setState(() {
isStoreWine = isStoreWine == '1' ? '0' : '1';
});
}
},
child: Text(
isStoreWine == '1' ? '解除指派存酒管理员' : '指派为存酒管理员',
style: TextStyle(
decoration: TextDecoration.underline,
color: MyColours.color_438E93,
fontSize: ScreenUtil().setSp(28)),
))
: SizedBox(),
// Container(
// margin: EdgeInsets.all(ScreenUtil().setWidth(40)),
// child: Column(
... ...
import 'package:cached_network_image/cached_network_image.dart';
import 'package:common_utils/common_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/upload_img_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/upload_image_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/v_empty_view.dart';
import '../../online_check/img_picker_widget.dart';
import '../../online_check/photo_view_wiget.dart';
//出库申请item
class ApplyOutStoreItemPage extends StatefulWidget {
final WineManageSunMoveModel wineManageSunModel;
final ScrollController controller;
final int index;
final String cdate;
ApplyOutStoreItemPage(
{Key key,
this.wineManageSunModel,
this.controller,
this.index,
this.cdate})
: super(key: key);
@override
_ApplyOutStoreItemPageState createState() => _ApplyOutStoreItemPageState();
}
class _ApplyOutStoreItemPageState extends State<ApplyOutStoreItemPage> {
String cdateStr = '';
// List<String> images = [];
@override
void initState() {
super.initState();
DateTime dateTime = DateTime.fromMillisecondsSinceEpoch(
int.parse(widget.cdate.toString()) * 1000);
cdateStr = DateUtil.formatDate(dateTime, format: DateFormats.full);
// if (widget.wineManageSunModel.img != null) {
// widget.wineManageSunModel.img.forEach((element) {
// images.add(element.qiniuUrl);
// });
// }
// widget.wineManageSunModel.wineNumC.text =
// widget.wineManageSunModel.wineAmount;
}
Widget _textFieldWidget(
String title, String hintText, TextEditingController controller) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: TextField(
maxLines: 1,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_515151),
controller: controller,
// focusNode: _phoneNode,
textAlign: TextAlign.right,
textAlignVertical: TextAlignVertical.center,
// textAlignVertical:
// TextAlignVertical.center,
decoration: InputDecoration(
hintText: hintText,
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(32),
),
contentPadding: EdgeInsets.zero,
// contentPadding:
// EdgeInsets.symmetric(
// vertical: w(12)),
border:
OutlineInputBorder(borderSide: BorderSide.none),
),
onChanged: (value) {
// print(value);
if (value != null && value.trim().length > 0) {
bool isNumber =
Utils.isInteger(value); //判断输入的内容是否是数字
if (!isNumber) {
Utils.showToast('请输入数字');
controller.text = '';
return;
}
if (int.parse(value) >
int.parse(
widget.wineManageSunModel.wineAmount)) {
Utils.showToast('出库数量大于库存数量,请重新输入!');
controller.text = '';
return;
}
widget.wineManageSunModel.checkAmount = value;
controller.text = value;
}
// if (value.trim().isEmpty || value.trim().length > 11) {
// //内容为空,或 超过11位
// setState(() {
// _baseIndoProvider.userHistorys.clear();
// });
// return;
// }
// Map<String, String> params = {
// "keywords": value.trim(),
// "sid": Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// };
// _baseIndoProvider.getUserHistorys(context, params);
},
onEditingComplete: () {
FocusScope.of(context).requestFocus(FocusNode());
},
onTap: () {
// setState(() {
// showPhoneHistory = true;
// });
// Future.delayed(Duration(milliseconds: 300), () {
// _controller.jumpTo(_controller.position.maxScrollExtent);
// });
},
keyboardType: TextInputType.number,
))),
// InkWell(
// onTap: () {
// // _openAddressBook();
// },
// child: Container(
// width: ScreenUtil().setWidth(74) * 2,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('一键录入',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
// )),
// ),
// ),
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
Widget _textWidget(String title, String subTitle) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: Text(
subTitle,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_999999),
)),
)
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
//查看大图
_showPhotoView(BuildContext context, int index, List<String> imgs,
{isShow = false, List dashName}) async {
// if (imgs.length == 1 &&
// imgs[0] ==
// 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') {
// imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png';
// }
Utils.setBarStatus(false, color: Colors.black);
dynamic result = await showGeneralDialog(
context: context,
barrierDismissible: false,
// barrierColor: Colors.red,
barrierLabel:
MaterialLocalizations.of(context).modalBarrierDismissLabel,
transitionDuration: const Duration(milliseconds: 150),
pageBuilder: (BuildContext context, Animation animation,
Animation secondaryAnimation) {
Widget child = Stack(
children: <Widget>[
PhotoPreview(
initialIndex: index,
photoList: imgs,
isShow: isShow,
dashName: dashName)
],
);
return child;
});
Utils.setBarStatus(true, color: Colors.white);
}
/// 九宫格
Widget _getGridImg(context, List<String> temp) {
return GridView.builder(
controller: widget.controller,
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
shrinkWrap: true,
itemCount: temp.length,
//SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
crossAxisCount: 3,
//纵轴间距
mainAxisSpacing: ScreenUtil().setWidth(40),
//横轴间距
crossAxisSpacing: ScreenUtil().setWidth(36),
//子组件宽高长度比例
childAspectRatio: 1.0),
itemBuilder: (BuildContext context, int index) {
//Widget Function(BuildContext context, int index)
return temp.length < 1
? Text('')
: InkWell(
onTap: () {
///没有上传完成的不可以点击
_showPhotoView(context, index, temp);
},
child: CachedNetworkImage(
imageUrl: temp[index],
fit: BoxFit.cover,
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
));
});
}
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
padding: EdgeInsets.only(left: w(16)),
margin:
EdgeInsets.only(top: w(16), bottom: w(10), left: w(20), right: w(20)),
child: Column(
children: [
_textWidget(
'酒品名称',
widget.wineManageSunModel.wineName,
),
VEmptyView(16),
_textFieldWidget(
'出库数量', '请输入出库数量', widget.wineManageSunModel.wineNumC),
VEmptyView(16),
_textWidget('计量单位', widget.wineManageSunModel.unit),
VEmptyView(16),
_textWidget('存酒编号', widget.wineManageSunModel.wineNumber),
VEmptyView(16),
_textWidget('存酒日期', cdateStr),
VEmptyView(16),
widget.wineManageSunModel.img == null
? SizedBox()
: _getGridImg(context, widget.wineManageSunModel.img),
widget.wineManageSunModel.img == null ? SizedBox() : VEmptyView(16),
],
),
);
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../res/colors.dart';
import '../../../route/navigator_util.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/system_app_bar.dart';
import '../../../widgets/v_empty_view.dart';
import 'apply_out_store_item_page.dart';
/**
* 申请出库页面
*/
class ApplyOutStorePage extends StatefulWidget {
final WineManageModel wineManageDetail;
ApplyOutStorePage({Key key, this.wineManageDetail}) : super(key: key);
@override
_ApplyOutStorePageState createState() => _ApplyOutStorePageState();
}
class _ApplyOutStorePageState extends State<ApplyOutStorePage> {
StoreWineProvider storeWineProvider;
ScrollController _controller = ScrollController();
@override
void initState() {
// TODO: implement initState
super.initState();
}
Widget _textItemWidget(
String title,
String subTitle,
) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Text(subTitle,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_999999)),
// ),
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
return KeyboardDismissOnTap(
child: Scaffold(
appBar: SystemAppBar(
'存酒出库',
onTap: () {
Navigator.pop(context);
},
),
body: Container(
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
Container(
color: Colors.white,
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(16 * 2)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
VEmptyView(32),
_textItemWidget(
'联系电话',
Utils.starPhone(
widget.wineManageDetail.phone)),
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
'客人姓名',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: Text(
widget.wineManageDetail.rname +
widget
.wineManageDetail.sexStr,
style: TextStyle(
fontSize:
ScreenUtil().setSp(32),
color:
MyColours.color_999999)),
)),
HEmptyView(40),
Container(
width: w(100),
alignment: Alignment.centerRight,
child: Text(
// '会员状态未知',
widget.wineManageDetail.isMember ==
'1'
? '会员'
: '会员状态未知',
style: TextStyle(
color: widget.wineManageDetail
.isMember !=
'1'
? MyColours.color_999999
: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32),
),
),
),
],
)),
],
)),
ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount:
widget.wineManageDetail.wineDataMove.length,
itemBuilder: (context, index) {
WineManageSunMoveModel wineManageModel =
widget.wineManageDetail.wineDataMove[index];
return ApplyOutStoreItemPage(
wineManageSunModel: wineManageModel,
controller: _controller,
index: index,
cdate: widget.wineManageDetail.cdate);
}),
],
),
)),
Container(
alignment: Alignment.centerLeft,
margin: EdgeInsets.only(
left: w(20), right: w(20), top: w(10), bottom: w(16)),
child: Text(
'注:为保障酒品安排,只有存酒管理员才可以进行存酒操作!',
style: TextStyle(
color: MyColours.color_999999, fontSize: font(10)),
)),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
bottom: ScreenUtil().setWidth(35 * 2),
left: ScreenUtil().setWidth(45 * 2),
right: ScreenUtil().setWidth(45 * 2),
),
child: RoundButton(
text: '提交出库申请',
width: double.infinity,
height: ScreenUtil().setWidth(80),
radius: ScreenUtil().setWidth(10),
isBold: true,
fontSize: 32,
onPressed: () async {
// Utils.showToast('您不是店铺的存酒管理员,无权进行相关操作。');
// UserModel userModel =
// Provider.of<UserModel>(context, listen: false);
// if (userModel.user.role_name == '管理员' ||
// userModel.user.role_name == '店长') {
bool can = false;
outerloop:
for (int i = 0;
i < widget.wineManageDetail.wineDataMove.length;
i++) {
WineManageSunMoveModel element =
widget.wineManageDetail.wineDataMove[i];
// if (element.wineNameC.text.trim().length == 0) {
// Utils.showToast('请输入酒品名称!');
// // return false;
// can = false;
// break outerloop;
// }
if (element.wineNumC.text != null &&
element.wineNumC.text.trim().length > 0) {
//有一个输入数量即可提交出库申请
can = true;
break outerloop;
}
// if (element.wineUnitC.text.trim().length == 0) {
// Utils.showToast('请输入计量单位!');
// can = false;
// break outerloop;
// }
// if (element.wineSerialC.text.trim().length == 0) {
// Utils.showToast('请输入存酒编号!');
// can = false;
// break outerloop;
// }
// innerloop:
// for (UploadImgModel item in element.img) {
// if (item.process < 1) {
// Utils.showToast('正在上传图片,请稍等');
// // return false;
// can = false;
// break outerloop;
// }
// }
}
if (can) {
WineManageModel modelTemp =
WineManageModel.fromJson2(
widget.wineManageDetail.toJson());
modelTemp.wineData = [];
NavigatorUtil.goSmsCodeInputPage(
context, modelTemp);
} else {
Utils.showToast('请输入出库数量!');
}
// } else {
// bool needRefresh =
// await NavigatorUtil.goCouponEditPage(context);
// print(needRefresh);
// if (needRefresh != null && needRefresh) {
// bus.emit('refresh_coupon_list_f');
// //刷新页面数据
// // _controller.callRefresh();
// // _couponNetworkData(tabController.index);
// }
// }
},
))
],
),
)));
}
}
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/pages/my/store_wine_manage/create_wine_item_page.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/v_empty_view.dart';
import 'package:provider/provider.dart';
import '../../../app.dart';
import '../../../models/upload_img_model.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../provider/user_model.dart';
import '../../../res/colors.dart';
import '../../../utils/dialog_util.dart';
import '../../../utils/event_bus.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/system_app_bar.dart';
/**
* 新建存酒
*/
class CreateStoreWinePage extends StatefulWidget {
CreateStoreWinePage({Key key}) : super(key: key);
@override
_CreateStoreWinePageState createState() => _CreateStoreWinePageState();
}
class _CreateStoreWinePageState extends State<CreateStoreWinePage> {
StoreWineProvider storeWineProvider;
int sexSelectIndex = 0;
String sexStr = '先生';
List sexList = [];
ScrollController _controller = ScrollController();
TextEditingController phoneC = TextEditingController(); //电话
TextEditingController nameC = TextEditingController(); //客人姓名
List<WineManageSunModel> dataWine = [];
String wineSerial = '';
int wineSerialSub = 1;
@override
void initState() {
// TODO: implement initState
super.initState();
wineSerialSub = App.sp.getInt("wineSerialSub") ?? 1;
sexList = ['先生', '女士', '公司'];
_initWineSerial();
WineManageSunModel wineManageModel = WineManageSunModel();
wineManageModel.wineSerialC.text =
wineSerial + Utils.addZeroNumberWithDouble(wineSerialSub);
wineManageModel.img = [];
dataWine.add(wineManageModel);
}
///初始化存酒编号
_initWineSerial() {
DateTime dateTime = DateTime.now();
String year = dateTime.year.toString();
wineSerial = year.substring(year.length - 2, year.length) +
Utils.addZeroNumber(dateTime.month) +
Utils.addZeroNumber(dateTime.day);
}
Widget _textFieldWidget(
String title, String hintText, TextEditingController controller) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: TextField(
maxLines: 1,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_515151),
controller: controller,
// focusNode: _phoneNode,
textAlign: TextAlign.right,
textAlignVertical: TextAlignVertical.center,
// textAlignVertical:
// TextAlignVertical.center,
decoration: InputDecoration(
hintText: hintText,
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(32),
),
contentPadding: EdgeInsets.zero,
// contentPadding:
// EdgeInsets.symmetric(
// vertical: w(12)),
border:
OutlineInputBorder(borderSide: BorderSide.none),
),
onChanged: (value) {
print(value);
// if (value.trim().isEmpty || value.trim().length > 11) {
// //内容为空,或 超过11位
// setState(() {
// _baseIndoProvider.userHistorys.clear();
// });
// return;
// }
// Map<String, String> params = {
// "keywords": value.trim(),
// "sid": Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// };
// _baseIndoProvider.getUserHistorys(context, params);
},
onEditingComplete: () {
// _phoneNode.unfocus();
FocusScope.of(context).requestFocus(FocusNode());
},
onTap: () {
// setState(() {
// showPhoneHistory = true;
// });
// Future.delayed(Duration(milliseconds: 300), () {
// _controller.jumpTo(_controller.position.maxScrollExtent);
// });
},
keyboardType: TextInputType.number,
))),
// InkWell(
// onTap: () {
// // _openAddressBook();
// },
// child: Container(
// width: ScreenUtil().setWidth(74) * 2,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('一键录入',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
// )),
// ),
// ),
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
return Scaffold(
appBar: SystemAppBar(
'新建存酒',
onTap: () {
Navigator.pop(context);
},
),
body: Container(
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
Container(
color: Colors.white,
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(16 * 2)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
VEmptyView(32),
_textFieldWidget('联系电话', "点击输入客人电话", phoneC),
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'客人姓名',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(16)),
),
Expanded(
child: Container(
height:
ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: TextField(
maxLines: 1,
//输入文本的样式
style: TextStyle(
fontSize:
ScreenUtil().setSp(32),
color:
MyColours.color_515151),
controller: nameC,
// focusNode: _phoneNode,
textAlign: TextAlign.right,
textAlignVertical:
TextAlignVertical.center,
// textAlignVertical:
// TextAlignVertical.center,
decoration: InputDecoration(
hintText: "点击输入",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize:
ScreenUtil().setSp(32),
),
contentPadding: EdgeInsets.zero,
// contentPadding:
// EdgeInsets.symmetric(
// vertical: w(12)),
border: OutlineInputBorder(
borderSide:
BorderSide.none),
),
onChanged: (value) {
print(value);
// if (value.trim().isEmpty || value.trim().length > 11) {
// //内容为空,或 超过11位
// setState(() {
// _baseIndoProvider.userHistorys.clear();
// });
// return;
// }
// Map<String, String> params = {
// "keywords": value.trim(),
// "sid": Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// };
// _baseIndoProvider.getUserHistorys(context, params);
},
onEditingComplete: () {
// _phoneNode.unfocus();
FocusScope.of(context)
.requestFocus(FocusNode());
},
onTap: () {
// setState(() {
// showPhoneHistory = true;
// });
// Future.delayed(Duration(milliseconds: 300), () {
// _controller.jumpTo(_controller.position.maxScrollExtent);
// });
},
keyboardType: TextInputType.text,
))),
HEmptyView(10),
InkWell(
onTap: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //隐藏键盘
DialogUtil.showSelectCusmanDialog(
context, sexList, (value) async {
if (value != null) {
sexSelectIndex = value.first;
sexStr = sexList[sexSelectIndex];
setState(() {});
}
}, selecteds: [sexSelectIndex]).then(
(value) {});
},
child: Row(children: [
Text(
sexStr,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32),
),
),
Image.asset(
Utils.getImgPath('quan_down_f'),
width: ScreenUtil().setWidth(28),
height: ScreenUtil().setWidth(28)),
]),
),
HEmptyView(40),
Container(
width: w(100),
alignment: Alignment.centerRight,
child: Text(
'会员状态未知',
// '会员',
style: TextStyle(
color: true
? MyColours.color_999999
: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32),
),
),
),
],
)),
],
)),
ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount: dataWine.length,
itemBuilder: (context, index) {
WineManageSunModel wineManageModel = dataWine[index];
return CreateWineItemPage(
wineManageSunModel: wineManageModel,
controller: _controller,
index: index,
onDel: () {
dataWine.removeAt(index);
setState(() {});
},
);
}),
InkWell(
onTap: () {
WineManageSunModel model = WineManageSunModel();
wineSerialSub++;
model.wineSerialC.text = wineSerial +
Utils.addZeroNumberWithDouble(wineSerialSub);
model.img = [];
dataWine.add(model);
setState(() {});
},
child: Container(
color: Colors.white,
width: double.infinity,
height: w(48),
alignment: Alignment.center,
margin: EdgeInsets.symmetric(horizontal: w(20)),
child: Text(
'再加一项',
style: TextStyle(
color: MyColours.color_438E93,
fontSize: font(16)),
),
))
],
),
)),
Container(
height: ScreenUtil().setWidth(91 * 2),
width: double.infinity,
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
bottom: ScreenUtil().setWidth(35 * 2),
left: ScreenUtil().setWidth(45 * 2),
right: ScreenUtil().setWidth(45 * 2),
),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
boxShadow: [
BoxShadow(
spreadRadius: ScreenUtil().setWidth(2),
color: Color.fromRGBO(0, 0, 0, 0.1),
offset: Offset(0, ScreenUtil().setWidth(-2)),
blurRadius: ScreenUtil().setWidth(8))
],
borderRadius: BorderRadius.all(
Radius.circular(ScreenUtil().setWidth(16)),
),
),
child: RoundButton(
text: '保存',
height: ScreenUtil().setWidth(80),
radius: ScreenUtil().setWidth(10),
isBold: true,
fontSize: 32,
onPressed: () async {
// outerloop:
// for (int i = 1; i <= 3; i++) {
// innerloop:
// for (int j = 1; j <= 3; j++) {
// if (i == 2 && j == 2) {
// break outerloop;
// }
// print('$i $j');
// }
// }
//判读非空
if (phoneC.text.trim().length == 0) {
Utils.showToast('请输入联系电话!');
return false;
}
if (nameC.text.trim().length == 0) {
Utils.showToast('请输入客人姓名!');
return false;
}
if (dataWine.length == 0) {
Utils.showToast('请输入酒品信息!');
return false;
}
bool can = true;
outerloop:
for (int i = 0; i < dataWine.length; i++) {
WineManageSunModel element = dataWine[i];
if (element.wineNameC.text.trim().length == 0) {
Utils.showToast('请输入酒品名称!');
// return false;
can = false;
break outerloop;
}
if (element.wineNumC.text.trim().length == 0) {
Utils.showToast('请输入酒品数量!');
can = false;
break outerloop;
}
if (element.wineUnitC.text.trim().length == 0) {
Utils.showToast('请输入计量单位!');
can = false;
break outerloop;
}
if (element.wineSerialC.text.trim().length == 0) {
Utils.showToast('请输入存酒编号!');
can = false;
break outerloop;
}
innerloop:
for (UploadImgModel item in element.img) {
if (item.process < 1) {
Utils.showToast('正在上传图片,请稍等');
// return false;
can = false;
break outerloop;
}
}
}
if (can) {
List<Map<String, String>> data = [];
dataWine.forEach((element) {
List<String> images = [];
element.img.forEach((value) {
images.add(value.qiniuUrl);
});
Map<String, String> map = {
'wine_name': element.wineNameC.text,
'wine_amount': element.wineNumC.text,
'unit': element.wineUnitC.text,
'wine_number': element.wineSerialC.text,
'img':
images.length == 0 ? null : json.encode(images),
};
data.add(map);
});
Map<String, String> pramas = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'uid': Provider.of<UserModel>(context, listen: false)
.user
.openid,
'rname': nameC.text,
'sex': '${sexSelectIndex + 1}', //性别 1 男 2 女 3 公司
'is_member': '1', //会员状态
'phone': phoneC.text,
'wine': json.encode(data)
};
// if (widget.id != null) {
//修改存酒信息
// pramas['id'] = widget.id;
// }
bool success = await storeWineProvider
.setStoreWineBySeller(context, pramas,
showLoading: true);
if (success) {
App.sp.setInt("wineSerialSub", wineSerialSub + 1);
//存酒成功,返回列表,并刷新
bus.emit('refresh_wine_home_all_list');
Navigator.pop(context);
}
}
// UserModel userModel =
// Provider.of<UserModel>(context, listen: false);
// if (userModel.user.role_name == '管理员' ||
// userModel.user.role_name == '店长') {
// NavigatorUtil.goCouponCreateSelectTypePage(context);
// } else {
// bool needRefresh =
// await NavigatorUtil.goCouponEditPage(context);
// print(needRefresh);
// if (needRefresh != null && needRefresh) {
// bus.emit('refresh_coupon_list_f');
// //刷新页面数据
// // _controller.callRefresh();
// // _couponNetworkData(tabController.index);
// }
// }
},
),
)
],
),
));
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/upload_img_model.dart';
import 'package:provider/provider.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/upload_img_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/upload_image_util.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/v_empty_view.dart';
import '../../online_check/img_picker_widget.dart';
class CreateWineItemPage extends StatefulWidget {
final WineManageSunModel wineManageSunModel;
final ScrollController controller;
final int index;
final GestureTapCallback onDel;
CreateWineItemPage(
{Key key,
this.wineManageSunModel,
this.controller,
this.index,
this.onDel})
: super(key: key);
@override
_CreateWineItemPageState createState() => _CreateWineItemPageState();
}
class _CreateWineItemPageState extends State<CreateWineItemPage> {
Widget _textFieldWidget(
String title, String hintText, TextEditingController controller,
{TextInputType keyboardType = TextInputType.text}) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: TextField(
maxLines: 1,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_515151),
controller: controller,
// focusNode: _phoneNode,
textAlign: TextAlign.right,
textAlignVertical: TextAlignVertical.center,
// textAlignVertical:
// TextAlignVertical.center,
decoration: InputDecoration(
hintText: hintText,
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(32),
),
contentPadding: EdgeInsets.zero,
// contentPadding:
// EdgeInsets.symmetric(
// vertical: w(12)),
border:
OutlineInputBorder(borderSide: BorderSide.none),
),
onChanged: (value) {
print(value);
// if (value.trim().isEmpty || value.trim().length > 11) {
// //内容为空,或 超过11位
// setState(() {
// _baseIndoProvider.userHistorys.clear();
// });
// return;
// }
// Map<String, String> params = {
// "keywords": value.trim(),
// "sid": Provider.of<UserModel>(context, listen: false)
// .user
// .sellerid,
// };
// _baseIndoProvider.getUserHistorys(context, params);
},
onEditingComplete: () {
// _phoneNode.unfocus();
FocusScope.of(context).requestFocus(FocusNode());
},
onTap: () {
// setState(() {
// showPhoneHistory = true;
// });
// Future.delayed(Duration(milliseconds: 300), () {
// _controller.jumpTo(_controller.position.maxScrollExtent);
// });
},
keyboardType: keyboardType,
))),
// InkWell(
// onTap: () {
// // _openAddressBook();
// },
// child: Container(
// width: ScreenUtil().setWidth(74) * 2,
// height: ScreenUtil().setWidth(48),
// alignment: Alignment.centerRight,
// child: Text('一键录入',
// style: TextStyle(
// color: MyColours.color_515151,
// fontSize: ScreenUtil().setSp(28),
// )),
// ),
// ),
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
padding: EdgeInsets.only(left: w(16)),
margin:
EdgeInsets.only(top: w(16), bottom: w(10), left: w(20), right: w(20)),
child: Column(
children: [
_textFieldWidget(
'酒品名称',
"点击输入酒名",
widget.wineManageSunModel.wineNameC,
),
VEmptyView(16),
_textFieldWidget('存酒数量', '点击输入数量', widget.wineManageSunModel.wineNumC,
keyboardType: TextInputType.number),
VEmptyView(16),
_textFieldWidget(
'计量单位', '点击输入计量单位', widget.wineManageSunModel.wineUnitC),
VEmptyView(16),
_textFieldWidget(
'存酒编号', '点击输入存酒编号', widget.wineManageSunModel.wineSerialC),
VEmptyView(16),
Consumer<UploadImageProvider>(builder: (context, model, _) {
return ImgPickerWidget(
scrollController: widget.controller,
model: model,
maxImageNumber: 3,
maxRemind: '三',
imageList: widget.wineManageSunModel.img,
uploadType: UploadType.WineManageType,
deleteCallback: (int index) {
widget.wineManageSunModel.img.removeWhere((element) =>
element == widget.wineManageSunModel.img[index]);
setState(() {});
},
callback: () {
// for (UploadImgModel item
// in _uploadImageProvider
// .tableImageList) {
// if (item.process < 1) {
// Utils.showToast('正在上传图片,请稍等');
// return;
// }
// }
// //接口,和桌子绑定
// List imageQiniuUrlList = [];
// for (int i = 0;
// i <
// _uploadImageProvider
// .tableImageList.length;
// i++) {
// if (!_uploadImageProvider
// .tableImageList[i].isUpload) {
// imageQiniuUrlList.add({
// "url": _uploadImageProvider
// .tableImageList[i].qiniuUrl
// });
// }
// }
// _setTablePhoto(
// context, imageQiniuUrlList);
},
);
}),
VEmptyView(16),
widget.index != 0
? MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
)
: SizedBox(),
widget.index != 0
? InkWell(
onTap: widget.onDel,
child: Container(
width: double.infinity,
height: w(48),
alignment: Alignment.center,
child: Text(
'删除该项',
style: TextStyle(
color: MyColours.color_438E93, fontSize: font(16)),
),
))
: SizedBox()
],
),
);
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/out_wine_record_model.dart';
import 'package:one_key/pages/my/store_wine_manage/wine_detail_item_page.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
import '../../../constant/state.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/page_exception.dart';
import '../../../widgets/v_empty_view.dart';
import 'out_store_record_item_page.dart';
/***
* 出库记录列表详情
*/
class OutStoreRecordDetailPage extends StatefulWidget {
final OutWineRecordSunModel outWineRecordSunModel;
OutStoreRecordDetailPage({Key key, this.outWineRecordSunModel})
: super(key: key);
@override
_OutStoreRecordDetailPageState createState() =>
_OutStoreRecordDetailPageState();
}
class _OutStoreRecordDetailPageState extends State<OutStoreRecordDetailPage> {
StoreWineProvider storeWineProvider;
ScrollController _controller = ScrollController();
// List dataWine = [];
@override
void initState() {
// TODO: implement initState
super.initState();
// WineManageModel wineManageModel = WineManageModel();
// dataWine.add(wineManageModel);
// dataWine.add(wineManageModel);
WidgetsBinding.instance.addPostFrameCallback((_) {
// _getStoreWineCheckByWid();
});
}
///根据存酒ID获取取酒记录
// _getStoreWineCheckByWid() async {
// Map<String, String> pramas = {'wid': widget.wid};
// await storeWineProvider.getStoreWineCheckByWid(context, pramas,
// showLoading: true);
// }
Widget _textItemWidget(String title, String subTitle,
{bool needBottom = true}) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Text(subTitle,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_999999)),
// ),
],
)),
needBottom
? MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
)
: SizedBox(),
]);
}
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
return Scaffold(
appBar: SystemAppBar(
'存酒出库详情',
onTap: () {
Navigator.pop(context);
},
),
body: Container(
child: Consumer<StoreWineProvider>(builder: (context, model, _) {
if (model.pageStateDetailRecord != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateDetailRecord,
callback: () {
// _getStoreWineCheckByWid();
// offset = 0;
// getMessage(showLoading: true);
// if (pageState == PageState.Empty) {
// NavigatorUtil.goCouponHistoryPage(context);
// } else {
// _couponNetworkData(widget.index);
// }
},
emptyMsg: "暂时没有出库记录哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Container(
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
Container(
color: Colors.white,
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(16 * 2)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
VEmptyView(32),
_textItemWidget(
'联系电话',
Utils.starPhone(
widget.outWineRecordSunModel.phone)),
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
'客人姓名',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: Text(
'${widget.outWineRecordSunModel.rname}${widget.outWineRecordSunModel.sexStr}',
style: TextStyle(
fontSize:
ScreenUtil().setSp(32),
color:
MyColours.color_999999)),
)),
HEmptyView(40),
Container(
width: w(100),
alignment: Alignment.centerRight,
child: Text(
// '会员状态未知',
widget.outWineRecordSunModel
.isMember ==
'1'
? '会员'
: '会员状态未知',
style: TextStyle(
color: widget
.outWineRecordSunModel
.isMember !=
'1'
? MyColours.color_999999
: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32),
),
),
),
],
)),
VEmptyView(12),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
VEmptyView(16),
_textItemWidget('出库记录人',
widget.outWineRecordSunModel.nickName,
needBottom: false),
],
)),
ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount:
widget.outWineRecordSunModel.wineCheck.length,
itemBuilder: (context, index) {
WineCheckModel wineCheckModel =
widget.outWineRecordSunModel.wineCheck[index];
return OutStoreRecordItemPage(
wineCheckModel: wineCheckModel,
controller: _controller,
index: index,
cdate: widget.outWineRecordSunModel.cdateStr,
);
})
],
),
)),
// Container(
// alignment: Alignment.centerLeft,
// margin: EdgeInsets.only(
// left: w(20), right: w(20), top: w(10), bottom: w(16)),
// child: Text(
// '注:为保障酒品安排,只有存酒管理员才可以进行存酒操作!',
// style: TextStyle(
// color: MyColours.color_999999, fontSize: font(10)),
// )),
// Container(
// color: MyColours.color_ffffff,
// padding: EdgeInsets.only(
// top: ScreenUtil().setWidth(16 * 2),
// bottom: ScreenUtil().setWidth(35 * 2),
// left: ScreenUtil().setWidth(45 * 2),
// right: ScreenUtil().setWidth(45 * 2),
// ),
// child: Row(
// children: [
// RoundButton(
// text: '出库记录',
// width: w(100),
// height: ScreenUtil().setWidth(80),
// radius: ScreenUtil().setWidth(10),
// isBold: true,
// borderColor: MyColours.color_438E93,
// gradientStart: MyColours.color_ffffff,
// gradientEnd: MyColours.color_ffffff,
// textColor: MyColours.color_438E93,
// fontSize: 32,
// onPressed: () async {
// // UserModel userModel =
// // Provider.of<UserModel>(context, listen: false);
// // if (userModel.user.role_name == '管理员' ||
// // userModel.user.role_name == '店长') {
// // NavigatorUtil.goCouponCreateSelectTypePage(context);
// // } else {
// // bool needRefresh =
// // await NavigatorUtil.goCouponEditPage(context);
// // print(needRefresh);
// // if (needRefresh != null && needRefresh) {
// // bus.emit('refresh_coupon_list_f');
// // //刷新页面数据
// // // _controller.callRefresh();
// // // _couponNetworkData(tabController.index);
// // }
// // }
// },
// ),
// HEmptyView(30),
// Expanded(
// child: RoundButton(
// text: '存酒出库',
// // width: w(218),
// height: ScreenUtil().setWidth(80),
// radius: ScreenUtil().setWidth(10),
// isBold: true,
// gradientStart: true
// ? MyColours.color_BFC4D4
// : MyColours.color_438E93,
// gradientEnd: true
// ? MyColours.color_BFC4D4
// : MyColours.color_438E93,
// fontSize: 32,
// onPressed: () async {
// Utils.showToast('您不是店铺的存酒管理员,无权进行相关操作。');
// // UserModel userModel =
// // Provider.of<UserModel>(context, listen: false);
// // if (userModel.user.role_name == '管理员' ||
// // userModel.user.role_name == '店长') {
// // NavigatorUtil.goCouponCreateSelectTypePage(context);
// // } else {
// // bool needRefresh =
// // await NavigatorUtil.goCouponEditPage(context);
// // print(needRefresh);
// // if (needRefresh != null && needRefresh) {
// // bus.emit('refresh_coupon_list_f');
// // //刷新页面数据
// // // _controller.callRefresh();
// // // _couponNetworkData(tabController.index);
// // }
// // }
// },
// )),
// ],
// ))
],
),
);
}
})));
}
}
... ...
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import '../../../models/out_wine_record_model.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/upload_img_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/upload_image_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/v_empty_view.dart';
import '../../online_check/img_picker_widget.dart';
import '../../online_check/photo_view_wiget.dart';
//出库记录酒品item
class OutStoreRecordItemPage extends StatefulWidget {
final String cdate;
final WineCheckModel wineCheckModel;
final ScrollController controller;
final int index;
OutStoreRecordItemPage(
{Key key, this.wineCheckModel, this.controller, this.index, this.cdate})
: super(key: key);
@override
_OutStoreRecordItemPageState createState() => _OutStoreRecordItemPageState();
}
class _OutStoreRecordItemPageState extends State<OutStoreRecordItemPage> {
Widget _textWidget(String title, String subTitle) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: Text(
subTitle,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_999999),
)),
)
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
//查看大图
_showPhotoView(BuildContext context, int index, List<String> imgs,
{isShow = false, List dashName}) async {
// if (imgs.length == 1 &&
// imgs[0] ==
// 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') {
// imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png';
// }
Utils.setBarStatus(false, color: Colors.black);
dynamic result = await showGeneralDialog(
context: context,
barrierDismissible: false,
// barrierColor: Colors.red,
barrierLabel:
MaterialLocalizations.of(context).modalBarrierDismissLabel,
transitionDuration: const Duration(milliseconds: 150),
pageBuilder: (BuildContext context, Animation animation,
Animation secondaryAnimation) {
Widget child = Stack(
children: <Widget>[
PhotoPreview(
initialIndex: index,
photoList: imgs,
isShow: isShow,
dashName: dashName)
],
);
return child;
});
Utils.setBarStatus(true, color: Colors.white);
}
/// 九宫格
Widget _getGridImg(context, List<String> temp) {
return GridView.builder(
controller: widget.controller,
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
shrinkWrap: true,
itemCount: temp.length,
//SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
crossAxisCount: 3,
//纵轴间距
mainAxisSpacing: ScreenUtil().setWidth(40),
//横轴间距
crossAxisSpacing: ScreenUtil().setWidth(36),
//子组件宽高长度比例
childAspectRatio: 1.0),
itemBuilder: (BuildContext context, int index) {
//Widget Function(BuildContext context, int index)
return temp.length < 1
? Text('')
: InkWell(
onTap: () {
///没有上传完成的不可以点击
_showPhotoView(context, index, temp);
},
child: CachedNetworkImage(
imageUrl: temp[index],
fit: BoxFit.cover,
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
));
});
}
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
padding: EdgeInsets.only(left: w(16)),
margin:
EdgeInsets.only(top: w(16), bottom: w(10), left: w(20), right: w(20)),
child: Column(
children: [
_textWidget(
'酒品名称',
widget.wineCheckModel.wineName,
),
VEmptyView(16),
_textWidget('出库数量', widget.wineCheckModel.checkAmount),
VEmptyView(16),
_textWidget('计量单位', widget.wineCheckModel.unit),
VEmptyView(16),
_textWidget('存酒编号', widget.wineCheckModel.wineNumber),
VEmptyView(16),
_textWidget('出库日期', widget.cdate),
VEmptyView(16),
widget.wineCheckModel.img != null &&
widget.wineCheckModel.img.length > 0
? _getGridImg(context, widget.wineCheckModel.img)
: SizedBox(),
widget.wineCheckModel.img != null &&
widget.wineCheckModel.img.length > 0
? VEmptyView(16)
: SizedBox(),
],
),
);
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/out_wine_record_model.dart';
import 'package:one_key/pages/my/store_wine_manage/wine_detail_item_page.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
import '../../../constant/state.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/page_exception.dart';
import '../../../widgets/v_empty_view.dart';
import 'out_store_record_item_page.dart';
/***
* 出库记录
*/
class OutStoreRecordPage extends StatefulWidget {
final String wid;
OutStoreRecordPage({Key key, this.wid}) : super(key: key);
@override
_OutStoreRecordPageState createState() => _OutStoreRecordPageState();
}
class _OutStoreRecordPageState extends State<OutStoreRecordPage> {
StoreWineProvider storeWineProvider;
ScrollController _controller = ScrollController();
// List dataWine = [];
@override
void initState() {
// TODO: implement initState
super.initState();
// WineManageModel wineManageModel = WineManageModel();
// dataWine.add(wineManageModel);
// dataWine.add(wineManageModel);
WidgetsBinding.instance.addPostFrameCallback((_) {
_getStoreWineCheckByWid();
});
}
///根据存酒ID获取取酒记录
_getStoreWineCheckByWid() async {
Map<String, String> pramas = {'wid': widget.wid};
await storeWineProvider.getStoreWineCheckByWid(context, pramas,
showLoading: true);
}
Widget _textItemWidget(String title, String subTitle,
{bool needBottom = true}) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Text(subTitle,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_999999)),
// ),
],
)),
needBottom
? MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
)
: SizedBox(),
]);
}
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
return Scaffold(
appBar: SystemAppBar(
'存酒出库详情',
onTap: () {
Navigator.pop(context);
},
),
body: Container(
child: Consumer<StoreWineProvider>(builder: (context, model, _) {
if (model.pageStateRecord != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateRecord,
callback: () {
_getStoreWineCheckByWid();
// offset = 0;
// getMessage(showLoading: true);
// if (pageState == PageState.Empty) {
// NavigatorUtil.goCouponHistoryPage(context);
// } else {
// _couponNetworkData(widget.index);
// }
},
emptyMsg: "暂时没有出库记录哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Container(
child: Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
Container(
color: Colors.white,
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(16 * 2)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
VEmptyView(32),
_textItemWidget(
'联系电话',
Utils.starPhone(storeWineProvider
.outWineRecordData[0].phone)),
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
'客人姓名',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: Text(
'${storeWineProvider.outWineRecordData[0].rname}${storeWineProvider.outWineRecordData[0].sexStr}',
style: TextStyle(
fontSize:
ScreenUtil().setSp(32),
color:
MyColours.color_999999)),
)),
HEmptyView(40),
Container(
width: w(100),
alignment: Alignment.centerRight,
child: Text(
// '会员状态未知',
storeWineProvider
.outWineRecordData[0]
.isMember ==
'1'
? '会员'
: '会员状态未知',
style: TextStyle(
color: storeWineProvider
.outWineRecordData[0]
.isMember !=
'1'
? MyColours.color_999999
: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32),
),
),
),
],
)),
VEmptyView(12),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
VEmptyView(16),
_textItemWidget(
'出库记录人',
storeWineProvider
.outWineRecordData[0].nickName,
needBottom: false),
],
)),
ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount:
storeWineProvider.outWineRecordData.length,
itemBuilder: (context, index) {
OutWineRecordSunModel outWineRecordSunModel =
storeWineProvider.outWineRecordData[index];
return ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount:
outWineRecordSunModel.wineCheck.length,
itemBuilder: (context, index1) {
WineCheckModel wineCheckModel =
outWineRecordSunModel.wineCheck[index1];
return OutStoreRecordItemPage(
wineCheckModel: wineCheckModel,
controller: _controller,
index: index1,
cdate: outWineRecordSunModel.cdateStr,
);
});
// OutWineRecordSunModel outWineRecordSunModel =
// storeWineProvider.outWineRecordData[index];
// return OutStoreRecordItemPage(
// outWineRecordSunModel: outWineRecordSunModel,
// controller: _controller,
// index: index,
// );
}),
],
),
)),
// Container(
// alignment: Alignment.centerLeft,
// margin: EdgeInsets.only(
// left: w(20), right: w(20), top: w(10), bottom: w(16)),
// child: Text(
// '注:为保障酒品安排,只有存酒管理员才可以进行存酒操作!',
// style: TextStyle(
// color: MyColours.color_999999, fontSize: font(10)),
// )),
// Container(
// color: MyColours.color_ffffff,
// padding: EdgeInsets.only(
// top: ScreenUtil().setWidth(16 * 2),
// bottom: ScreenUtil().setWidth(35 * 2),
// left: ScreenUtil().setWidth(45 * 2),
// right: ScreenUtil().setWidth(45 * 2),
// ),
// child: Row(
// children: [
// RoundButton(
// text: '出库记录',
// width: w(100),
// height: ScreenUtil().setWidth(80),
// radius: ScreenUtil().setWidth(10),
// isBold: true,
// borderColor: MyColours.color_438E93,
// gradientStart: MyColours.color_ffffff,
// gradientEnd: MyColours.color_ffffff,
// textColor: MyColours.color_438E93,
// fontSize: 32,
// onPressed: () async {
// // UserModel userModel =
// // Provider.of<UserModel>(context, listen: false);
// // if (userModel.user.role_name == '管理员' ||
// // userModel.user.role_name == '店长') {
// // NavigatorUtil.goCouponCreateSelectTypePage(context);
// // } else {
// // bool needRefresh =
// // await NavigatorUtil.goCouponEditPage(context);
// // print(needRefresh);
// // if (needRefresh != null && needRefresh) {
// // bus.emit('refresh_coupon_list_f');
// // //刷新页面数据
// // // _controller.callRefresh();
// // // _couponNetworkData(tabController.index);
// // }
// // }
// },
// ),
// HEmptyView(30),
// Expanded(
// child: RoundButton(
// text: '存酒出库',
// // width: w(218),
// height: ScreenUtil().setWidth(80),
// radius: ScreenUtil().setWidth(10),
// isBold: true,
// gradientStart: true
// ? MyColours.color_BFC4D4
// : MyColours.color_438E93,
// gradientEnd: true
// ? MyColours.color_BFC4D4
// : MyColours.color_438E93,
// fontSize: 32,
// onPressed: () async {
// Utils.showToast('您不是店铺的存酒管理员,无权进行相关操作。');
// // UserModel userModel =
// // Provider.of<UserModel>(context, listen: false);
// // if (userModel.user.role_name == '管理员' ||
// // userModel.user.role_name == '店长') {
// // NavigatorUtil.goCouponCreateSelectTypePage(context);
// // } else {
// // bool needRefresh =
// // await NavigatorUtil.goCouponEditPage(context);
// // print(needRefresh);
// // if (needRefresh != null && needRefresh) {
// // bus.emit('refresh_coupon_list_f');
// // //刷新页面数据
// // // _controller.callRefresh();
// // // _couponNetworkData(tabController.index);
// // }
// // }
// },
// )),
// ],
// ))
],
),
);
}
})));
}
}
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/widgets/MyDivider.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:pin_code_fields/pin_code_fields.dart';
import 'package:provider/provider.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../provider/user_model.dart';
import '../../../utils/event_bus.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/round_button.dart';
/**
* 短信验证码输入,酒品出库申请
*/
class SmsCodeInputPage extends StatefulWidget {
final WineManageModel wineManageDetail;
SmsCodeInputPage({Key key, this.wineManageDetail}) : super(key: key);
@override
_SmsCodeInputPageState createState() => _SmsCodeInputPageState();
}
class _SmsCodeInputPageState extends State<SmsCodeInputPage> {
StoreWineProvider storeWineProvider;
String code = '';
bool codeEnabled = false; //验证码是否可用
@override
void initState() {
// TODO: implement initState
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_getPhoneCode();
});
}
///获取手机验证码
_getPhoneCode() async {
if (widget.wineManageDetail.phone == null ||
widget.wineManageDetail.phone.trim().length == 0) {
Utils.showToast('手机号码为空,无法发送验证码!');
return;
}
storeWineProvider.code = Utils.randomBit(6);
Map<String, String> params = {
"phone": widget.wineManageDetail.phone.replaceAll(' ', ''),
"code": storeWineProvider.code,
};
// startCountdown(model);
bool success = await storeWineProvider.getPhoneCode(context, params);
if (!success) {
// _timer.cancel();
} else {
Utils.showToast('短信验证码已发送,请注意查收');
}
}
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar(
'存酒出库确认',
onTap: () {
Navigator.pop(context);
},
),
body: Column(
children: [
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
Container(
height: w(48),
padding: EdgeInsets.symmetric(horizontal: w(16)),
alignment: Alignment.centerLeft,
child: Text(
'请输入客户手机收到的短信验证码:',
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
),
Padding(
padding: EdgeInsets.only(left: w(16)),
child: MyDivider(
double.infinity,
w(0.5),
color: MyColours.color_E7E7E7,
)),
Padding(
padding:
EdgeInsets.symmetric(vertical: w(23), horizontal: w(32)),
child: PinCodeTextField(
autoFocus: true,
appContext: context,
pastedTextStyle: TextStyle(
color: MyColours.color_438E93,
fontWeight: FontWeight.bold,
),
length: 6,
obscureText: false,
dialogConfig: DialogConfig(
dialogTitle: '确认',
dialogContent: '是否粘贴',
negativeText: '取消',
affirmativeText: '粘贴',
),
obscuringCharacter: '*',
// obscuringWidget: const FlutterLogo(
// size: 24,
// ),
blinkWhenObscuring: true,
animationType: AnimationType.fade,
validator: (v) {
if (v.length < 6) {
return null;
return "请输入6位";
} else {
return null;
}
},
pinTheme: PinTheme(
shape: PinCodeFieldShape.box,
borderRadius: BorderRadius.circular(r(5)),
fieldHeight: w(50),
fieldWidth: w(35),
activeFillColor: Colors.white,
activeColor: Colors.white,
selectedFillColor: Colors.white,
inactiveFillColor: Colors.white,
disabledColor: Colors.white,
borderWidth: w(1),
inactiveColor: MyColours.color_999999,
selectedColor: MyColours.color_438E93),
cursorColor: MyColours.color_515151,
animationDuration: const Duration(milliseconds: 300),
enableActiveFill: true,
// errorAnimationController: errorController,
// controller: textEditingController,
keyboardType: TextInputType.number,
boxShadows: [
BoxShadow(
offset: Offset(0, 1),
color: Colors.black12,
blurRadius: r(5),
)
],
onCompleted: (v) {
debugPrint("Completed");
},
// onTap: () {
// print("Pressed");
// },
onChanged: (value) {
code = value;
debugPrint(value);
setState(() {
// currentText = value;
});
},
))
],
))),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
bottom: ScreenUtil().setWidth(35 * 2),
left: ScreenUtil().setWidth(45 * 2),
right: ScreenUtil().setWidth(45 * 2),
),
child: RoundButton(
text: '确认出库',
width: double.infinity,
height: ScreenUtil().setWidth(80),
radius: ScreenUtil().setWidth(10),
isBold: true,
fontSize: 32,
onPressed: () async {
if (code == null || code.trim().length == 0) {
Utils.showToast('请输入验证码');
return;
}
// if (storeWineProvider.code != null && !codeEnabled) {
// Utils.showToast('验证码已失效,请重新获取');
// return;
// }
if (storeWineProvider.code == null) {
Utils.showToast('请获取验证码');
return;
}
if (storeWineProvider.code != code) {
Utils.showToast('您输入的验证码不正确,请重新输入');
return;
}
//出库申请提交接口
List<WineCheckModel> outWineData = [];
for (int i = 0;
i < widget.wineManageDetail.wineDataMove.length;
i++) {
WineManageSunMoveModel element =
widget.wineManageDetail.wineDataMove[i];
// if (element.wineNameC.text.trim().length == 0) {
// Utils.showToast('请输入酒品名称!');
// // return false;
// can = false;
// break outerloop;
// }
if (element.checkAmount != null &&
element.checkAmount != '' &&
int.parse(element.checkAmount) > 0) {
//有输入数量
WineCheckModel sunMoveModel = WineCheckModel();
sunMoveModel.wineName = element.wineName;
sunMoveModel.checkAmount = element.checkAmount;
sunMoveModel.wineNumber = element.wineNumber;
sunMoveModel.unit = element.unit;
sunMoveModel.img = element.img;
outWineData.add(sunMoveModel);
}
}
Map<String, String> pramas = {
'sid': Provider.of<UserModel>(context, listen: false)
.user
.sellerid,
'uid': Provider.of<UserModel>(context, listen: false)
.user
.openid,
'wid': widget.wineManageDetail.id,
'wine_check': jsonEncode(outWineData)
};
bool success = await storeWineProvider
.setStoreWineBySellerCheck(context, pramas,
showLoading: true);
if (success) {
//
Navigator.pop(context);
Navigator.pop(context);
Navigator.pop(context);
//刷新首页数据
bus.emit('refresh_wine_home_list',{
'index':1
});
DialogUtil.cupertinoAlertDialogOnly(context,
content:
'客户${widget.wineManageDetail.rname + widget.wineManageDetail.sexStr}的酒品已经出库。\n您可以在存酒管理-出库记录中查看详细信息。',
rTitle: '我知道了');
}
},
))
],
),
);
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_easyrefresh/easy_refresh.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/out_wine_record_model.dart';
import 'package:one_key/models/wine_manage_model.dart';
import 'package:one_key/pages/my/store_wine_manage/wine_in_store_item.dart';
import 'package:one_key/pages/my/store_wine_manage/wine_out_store_item.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
import '../../../constant/state.dart';
import '../../../models/personnel_manage_model.dart';
import '../../../provider/personnel_provider.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../provider/user_model.dart';
import '../../../res/colors.dart';
import '../../../route/navigator_util.dart';
import '../../../utils/event_bus.dart';
import '../../../utils/utils.dart';
import '../../../widgets/custom_tab_indicator.dart';
import '../../../widgets/page_exception.dart';
import '../../../widgets/round_button.dart';
/**
*
* 存酒首页
*/
class StoreWineManageHomePage extends StatefulWidget {
StoreWineManageHomePage({Key key}) : super(key: key);
@override
_StoreWineManageHomePageState createState() =>
_StoreWineManageHomePageState();
}
class _StoreWineManageHomePageState extends State<StoreWineManageHomePage>
with TickerProviderStateMixin {
StoreWineProvider storeWineProvider;
TextEditingController searchC = TextEditingController(); //搜索框控制器
List _tabBarTitle;
TabController tabController;
int index = 0;
ScrollController listInStoreC = ScrollController();
bool isStoreWine = false;
EasyRefreshController _controller;
@override
void initState() {
_tabBarTitle = ['全部在店', '取酒记录'];
_controller = EasyRefreshController();
super.initState();
tabController = TabController(length: 2, vsync: this);
tabController.index = 0;
tabController.addListener(() async {
if (tabController.index == tabController.animation.value) {
if (index == tabController.index) {
return;
}
print(tabController.index);
index = tabController.index;
if (index == 0) {
await storeWineProvider.getStoreWineBySeller(context,
showLoading: false);
} else if (index == 1) {
await storeWineProvider.getStoreWineCheckList(context,
showLoading: false);
}
// _getContantData(first: true);
}
});
WidgetsBinding.instance.addPostFrameCallback((_) async {
index = tabController.index;
// _getContantData(first: first);
await _getAuthUserLists(showLoading: true);
await storeWineProvider.getStoreWineBySeller(context, showLoading: true);
await storeWineProvider.getStoreWineCheckList(context, showLoading: true);
});
bus.on("refresh_wine_home_all_list", (arg) async {
await storeWineProvider.getStoreWineBySeller(context, showLoading: true);
});
bus.on("refresh_wine_home_list", (arg) async {
print(arg['index']);
tabController.index = arg['index'];
index = arg['index'];
await storeWineProvider.getStoreWineBySeller(context, showLoading: true);
await storeWineProvider.getStoreWineCheckList(context, showLoading: true);
});
}
@override
void dispose() {
super.dispose();
bus.off('refresh_wine_home_all_list');
bus.off('refresh_wine_home_list');
}
//获取员工信息列表
_getAuthUserLists({bool showLoading = true}) async {
Map<String, String> params = {
"sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
};
PersonnelProvider personnelProvider =
Provider.of<PersonnelProvider>(context, listen: false);
PersonnelManageSunModel data;
await personnelProvider.getAuthUserLists(context, params,
showLoading: showLoading);
UserModel userModel = Provider.of<UserModel>(context, listen: false);
if (personnelProvider.dataMap != null) {
if (userModel.user.role_name == '管理员') {
personnelProvider.dataMap.admin.listdata.forEach((element) {
if (element.id == userModel.user.openid) {
//找到自己
data = element;
}
});
} else if (userModel.user.role_name == '店长') {
personnelProvider.dataMap.shopowner.listdata.forEach((element) {
if (element.id == userModel.user.openid) {
//找到自己
data = element;
}
});
} else if (userModel.user.role_name == '客户经理') {
personnelProvider.dataMap.manager.listdata.forEach((element) {
if (element.id == userModel.user.openid) {
//找到自己
data = element;
}
});
} else if (userModel.user.role_name == '收银员') {
personnelProvider.dataMap.cashier.listdata.forEach((element) {
if (element.id == userModel.user.openid) {
//找到自己
data = element;
}
});
} else if (userModel.user.role_name == '服务员') {
personnelProvider.dataMap.waiter.listdata.forEach((element) {
if (element.id == userModel.user.openid) {
//找到自己
data = element;
}
});
}
isStoreWine = data.isStoreWine == '1' ? true : false;
setState(() {});
}
}
/// 搜索框
Widget _searchWidget() {
return Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
),
height: ScreenUtil().setWidth(45 * 2),
// alignment: Alignment.center,
child: Container(
alignment: Alignment.center,
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(20 * 2),
),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
borderRadius:
BorderRadius.circular(ScreenUtil().setWidth(24 * 2)),
border: Border.all(color: Color.fromRGBO(228, 228, 228, 1)),
boxShadow: [
BoxShadow(
color: Color.fromRGBO(220, 220, 220, 1), //投影颜色
offset: Offset(2, 3), //x,y轴
blurRadius: ScreenUtil().setWidth(6) //投影距离
)
]),
child: Row(children: [
Expanded(
child: TextField(
maxLines: 1,
controller: searchC,
// focusNode: _focusNode,
// autofocus: true,
style: TextStyle(
color: MyColours.color_333333,
fontSize: ScreenUtil().setSp(26)),
// textAlignVertical: TextAlignVertical.center,
decoration: InputDecoration(
hintText: "输入手机号或姓名",
hintStyle: TextStyle(
color: MyColours.color_999999,
fontSize: ScreenUtil().setSp(26),
),
// isCollapsed:
// true, //重点,相当于高度包裹的意思,必须设置为true,不然有默认奇妙的最小高度
border: OutlineInputBorder(borderSide: BorderSide.none),
contentPadding: EdgeInsets.zero,
// 左边图标设置
icon: Image.asset(
Utils.getImgPath('search'),
width: ScreenUtil().setWidth(30),
),
//右边图标设置
// suffixIcon:
),
keyboardType: TextInputType.text,
textInputAction: TextInputAction.done,
onChanged: (value) {
// _getContantData(showLoading: false);
},
onEditingComplete: () {
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
// _getContantData(showLoading: false);
},
),
),
Offstage(
offstage: searchC.text == '',
child: GestureDetector(
child: Container(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(20),
),
// color: Colors.orange,
alignment: Alignment.centerRight,
child: Image.asset(
Utils.getImgPath('clear'),
width: ScreenUtil().setWidth(30),
height: ScreenUtil().setWidth(30),
),
),
onTap: () {
WidgetsBinding.instance.addPostFrameCallback(((_) {
searchC.clear();
FocusScope.of(context)
.requestFocus(FocusNode()); //点击空白处隐藏键盘
// _getContantData(showLoading: false);
}));
},
)),
// Offstage(
// offstage: false,
// child: GestureDetector(
// child: Container(
// padding: EdgeInsets.only(
// right: ScreenUtil().setWidth(30),
// bottom: ScreenUtil().setWidth(20),
// top: ScreenUtil().setWidth(20),
// ),
// child: Text(
// '搜索',
// style: TextStyle(
// color: MyColours.color_199095,
// fontSize: ScreenUtil().setSp(28)),
// ),
// ),
// onTap: () {
// customerProvider.searchData(
// customerProvider.controller.text);
// },
// ))
])));
}
Widget _menuWidget() {
return Container(
margin: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(40),
vertical: ScreenUtil().setWidth(20)),
decoration: BoxDecoration(color: MyColours.color_ffffff, boxShadow: [
BoxShadow(
// color: Colors.red,
color: Color.fromRGBO(220, 220, 220, 1), //投影颜色
offset: Offset(2, 2), //x,y轴
blurRadius: ScreenUtil().setWidth(6) //投影距离
)
]),
child: Row(
children: [
Expanded(
child: Container(
padding: EdgeInsets.only(bottom: ScreenUtil().setWidth(10)),
margin:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(30)),
child: TabBar(
controller: tabController,
// isScrollable: true,
indicator: CustomTabIndicator(
radius: 0,
),
indicatorColor: MyColours.color_199095,
indicatorSize: TabBarIndicatorSize.tab,
// indicatorPadding: EdgeInsets.symmetric(
// horizontal: ScreenUtil().setWidth(12)),
labelColor: MyColours.color_199095,
labelStyle: TextStyle(
fontSize: ScreenUtil().setSp(32),
fontWeight: FontWeight.bold),
labelPadding: EdgeInsets.zero,
unselectedLabelStyle: TextStyle(
fontWeight: FontWeight.normal,
fontSize: ScreenUtil().setSp(28),
),
unselectedLabelColor: MyColours.color_999999,
tabs: _tabBarTitle.map((value) {
return Tab(
child: Text(value),
);
}).toList()),
)),
],
));
}
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
return Scaffold(
appBar: SystemAppBar(
'存酒管理',
onTap: () {
EventBus().emit('changeStatusColor');
Navigator.pop(context);
},
),
body: WillPopScope(
onWillPop: () async {
EventBus().emit('changeStatusColor');
return true;
},
child: SafeArea(
child: Column(children: [
_searchWidget(), _menuWidget(),
Expanded(
child: TabBarView(controller: tabController,
// physics: NeverScrollableScrollPhysics(),
children: [
Container(child:
Consumer<StoreWineProvider>(builder: (context, model, _) {
if (model.pageStateAll != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateAll,
callback: () {
// offset = 0;
// getMessage(showLoading: true);
// if (pageState == PageState.Empty) {
// NavigatorUtil.goCouponHistoryPage(context);
// } else {
// _couponNetworkData(widget.index);
// }
},
emptyMsg: "暂时没有存酒信息哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return EasyRefresh.custom(
controller: _controller,
slivers: [
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
WineManageModel wineManageModel =
storeWineProvider.wineManageList[index];
return WineInStoreItem(
controller: listInStoreC,
wineManageModel: wineManageModel,
isStoreWine: isStoreWine);
},
childCount:
storeWineProvider.wineManageList.length),
)
],
onRefresh: () async {
await storeWineProvider.getStoreWineBySeller(context,
showLoading: false);
// offset = 0;
// getMessage(typeid, showLoading: false);
},
onLoad: () async {
_controller.finishLoad();
_controller.finishLoadCallBack();
// offset++;
// getMessage(typeid, showLoading: false);
},
);
// return ListView.builder(
// itemCount: storeWineProvider.wineManageList.length,
// controller: listInStoreC,
// itemBuilder: (context, index) {
// WineManageModel wineManageModel =
// storeWineProvider.wineManageList[index];
// return WineInStoreItem(
// controller: listInStoreC,
// wineManageModel: wineManageModel,
// isStoreWine: isStoreWine);
// });
}
})),
Container(child:
Consumer<StoreWineProvider>(builder: (context, model, _) {
if (model.pageStateRecordHome != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateRecordHome,
callback: () async {
await storeWineProvider.getStoreWineCheckList(context,
showLoading: true);
// offset = 0;
// getMessage(showLoading: true);
// if (pageState == PageState.Empty) {
// NavigatorUtil.goCouponHistoryPage(context);
// } else {
// _couponNetworkData(widget.index);
// }
},
emptyMsg: "暂时没有取酒记录哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return EasyRefresh.custom(
controller: _controller,
slivers: [
SliverList(
delegate: SliverChildBuilderDelegate(
(BuildContext context, int index) {
OutWineRecordSunModel outWineRecordSunModel =
model.outWineRecordHomeData[index];
return WineOutStoreItem(
controller: listInStoreC,
outWineRecordSunModel: outWineRecordSunModel,
);
},
childCount: storeWineProvider
.outWineRecordHomeData.length),
)
],
onRefresh: () async {
await storeWineProvider.getStoreWineCheckList(context,
showLoading: false);
// offset = 0;
// getMessage(typeid, showLoading: false);
},
onLoad: () async {
_controller.finishLoad();
_controller.finishLoadCallBack();
// offset++;
// getMessage(typeid, showLoading: false);
},
);
// return ListView.builder(
// itemCount: model.outWineRecordHomeData.length,
// controller: listInStoreC,
// itemBuilder: (context, index) {
// OutWineRecordSunModel outWineRecordSunModel =
// model.outWineRecordHomeData[index];
// return WineOutStoreItem(
// controller: listInStoreC,
// outWineRecordSunModel: outWineRecordSunModel,
// );
// });
}
}))
])),
Container(
height: ScreenUtil().setWidth(91 * 2),
width: double.infinity,
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(12 * 2),
bottom: ScreenUtil().setWidth(25 * 2),
left: ScreenUtil().setWidth(45 * 2),
right: ScreenUtil().setWidth(45 * 2),
),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
boxShadow: [
BoxShadow(
spreadRadius: ScreenUtil().setWidth(2),
color: Color.fromRGBO(0, 0, 0, 0.1),
offset: Offset(0, ScreenUtil().setWidth(-2)),
blurRadius: ScreenUtil().setWidth(8))
],
borderRadius: BorderRadius.all(
Radius.circular(ScreenUtil().setWidth(16)),
),
),
child: RoundButton(
text: '新建存酒',
height: ScreenUtil().setWidth(80),
radius: ScreenUtil().setWidth(10),
isBold: true,
fontSize: 32,
textColor: MyColours.color_F8F9FD,
gradientStart: !isStoreWine
? MyColours.color_BFC4D4
: MyColours.color_438E93,
gradientEnd: !isStoreWine
? MyColours.color_BFC4D4
: MyColours.color_438E93,
onPressed: () async {
if (!isStoreWine) {
Utils.showToast('您不是店铺的存酒管理员,无权进行相关操作。');
return false;
}
// UserModel userModel =
// Provider.of<UserModel>(context, listen: false);
// if (userModel.user.role_name == '管理员' ||
// userModel.user.role_name == '店长') {
NavigatorUtil.goCreateStoreWinePage(context);
// } else {
// bool needRefresh =
// await NavigatorUtil.goCouponEditPage(context);
// print(needRefresh);
// if (needRefresh != null && needRefresh) {
// bus.emit('refresh_coupon_list_f');
// //刷新页面数据
// // _controller.callRefresh();
// // _couponNetworkData(tabController.index);
// }
// }
},
),
)
// _searchWidget(),
// Positioned(
// top: 0,
// left: ScreenUtil().setWidth(40),
// right: ScreenUtil().setWidth(40),
// child: _filterWidget())
// ],
])),
),
);
}
}
... ...
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/upload_img_provider.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../utils/upload_image_util.dart';
import '../../../utils/utils.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/v_empty_view.dart';
import '../../online_check/img_picker_widget.dart';
import '../../online_check/photo_view_wiget.dart';
//只查看
class WineDetailItemPage extends StatefulWidget {
final WineManageSunModel wineManageSunModel;
final ScrollController controller;
final int index;
WineDetailItemPage(
{Key key, this.wineManageSunModel, this.controller, this.index})
: super(key: key);
@override
_WineDetailItemPageState createState() => _WineDetailItemPageState();
}
class _WineDetailItemPageState extends State<WineDetailItemPage> {
Widget _textWidget(String title, String subTitle) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: Text(
subTitle,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_999999),
)),
)
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
//查看大图
_showPhotoView(BuildContext context, int index, List<String> imgs,
{isShow = false, List dashName}) async {
// if (imgs.length == 1 &&
// imgs[0] ==
// 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') {
// imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png';
// }
Utils.setBarStatus(false, color: Colors.black);
dynamic result = await showGeneralDialog(
context: context,
barrierDismissible: false,
// barrierColor: Colors.red,
barrierLabel:
MaterialLocalizations.of(context).modalBarrierDismissLabel,
transitionDuration: const Duration(milliseconds: 150),
pageBuilder: (BuildContext context, Animation animation,
Animation secondaryAnimation) {
Widget child = Stack(
children: <Widget>[
PhotoPreview(
initialIndex: index,
photoList: imgs,
isShow: isShow,
dashName: dashName)
],
);
return child;
});
Utils.setBarStatus(true, color: Colors.white);
}
/// 九宫格
Widget _getGridImg(context, List<String> temp) {
return GridView.builder(
controller: widget.controller,
// padding: EdgeInsets.only(top: ScreenUtil().getAdapterSize(10)),
shrinkWrap: true,
itemCount: temp.length,
//SliverGridDelegateWithFixedCrossAxisCount 构建一个横轴固定数量Widget
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
//横轴元素个数
crossAxisCount: 3,
//纵轴间距
mainAxisSpacing: ScreenUtil().setWidth(40),
//横轴间距
crossAxisSpacing: ScreenUtil().setWidth(36),
//子组件宽高长度比例
childAspectRatio: 1.0),
itemBuilder: (BuildContext context, int index) {
//Widget Function(BuildContext context, int index)
return temp.length < 1
? Text('')
: InkWell(
onTap: () {
///没有上传完成的不可以点击
_showPhotoView(context, index, temp);
},
child: CachedNetworkImage(
imageUrl: temp[index],
fit: BoxFit.cover,
width: ScreenUtil().setWidth(100 * 2),
height: ScreenUtil().setWidth(100 * 2),
));
});
}
@override
Widget build(BuildContext context) {
List<String> images = [];
if (widget.wineManageSunModel.img != null) {
widget.wineManageSunModel.img.forEach((element) {
images.add(element.qiniuUrl);
});
}
return Container(
color: Colors.white,
padding: EdgeInsets.only(left: w(16)),
margin:
EdgeInsets.only(top: w(16), bottom: w(10), left: w(20), right: w(20)),
child: Column(
children: [
_textWidget(
'酒品名称',
widget.wineManageSunModel.wineName,
),
VEmptyView(16),
_textWidget('存酒数量', widget.wineManageSunModel.wineAmount),
VEmptyView(16),
_textWidget('计量单位', widget.wineManageSunModel.unit),
VEmptyView(16),
_textWidget('存酒编号', widget.wineManageSunModel.wineNumber),
VEmptyView(16),
images.length > 0 ? _getGridImg(context, images) : SizedBox(),
images.length > 0 ? VEmptyView(16) : SizedBox(),
],
),
);
}
}
... ...
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/pages/my/store_wine_manage/wine_detail_item_page.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
import '../../../constant/state.dart';
import '../../../models/wine_manage_model.dart';
import '../../../provider/store_wine_provider.dart';
import '../../../res/colors.dart';
import '../../../route/navigator_util.dart';
import '../../../utils/screen_util.dart';
import '../../../widgets/MyDivider.dart';
import '../../../widgets/h_empty_view.dart';
import '../../../widgets/page_exception.dart';
import '../../../widgets/round_button.dart';
import '../../../widgets/v_empty_view.dart';
/**
*
* 存酒详情页,只查看
*/
class WineDetailPage extends StatefulWidget {
final String idstr;
final bool isStoreWine;
WineDetailPage({Key key, this.idstr, this.isStoreWine}) : super(key: key);
@override
_WineDetailPageState createState() => _WineDetailPageState();
}
class _WineDetailPageState extends State<WineDetailPage> {
StoreWineProvider storeWineProvider;
ScrollController _controller = ScrollController();
// List dataWine = [];
@override
void initState() {
// TODO: implement initState
super.initState();
// WineManageModel wineManageModel = WineManageModel();
// dataWine.add(wineManageModel);
// dataWine.add(wineManageModel);
WidgetsBinding.instance.addPostFrameCallback((_) async {
_getStoreWineById();
});
}
_getStoreWineById() async {
Map<String, String> params = {"id": widget.idstr};
bool success = await storeWineProvider.getStoreWineById(context, params);
}
Widget _textItemWidget(
String title,
String subTitle,
) {
return Column(children: [
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(
color: MyColours.color_515151, fontSize: font(16)),
),
Text(subTitle,
//输入文本的样式
style: TextStyle(
fontSize: ScreenUtil().setSp(32),
color: MyColours.color_999999)),
// ),
],
)),
MyDivider(
double.infinity,
h(0.5),
color: MyColours.color_E7E7E7,
),
]);
}
@override
Widget build(BuildContext context) {
storeWineProvider = Provider.of<StoreWineProvider>(context, listen: true);
return Scaffold(
appBar: SystemAppBar(
'存酒详情',
onTap: () {
Navigator.pop(context);
},
),
body: Container(
child: Consumer<StoreWineProvider>(builder: (context, model, _) {
if (model.pageStateDetail != PageState.Success) {
return ExceptionPage(
pageState: model.pageStateDetail,
callback: () {
// offset = 0;
// getMessage(showLoading: true);
// if (pageState == PageState.Empty) {
// NavigatorUtil.goCouponHistoryPage(context);
// } else {
// _couponNetworkData(widget.index);
// }
},
emptyMsg: "暂时没有存酒信息哦",
emptyImg: "empty_search",
showMsg: "加载中,请稍后...",
);
} else {
return Column(
children: [
Expanded(
child: SingleChildScrollView(
controller: _controller,
child: Column(
children: [
Container(
color: Colors.white,
padding: EdgeInsets.only(
left: ScreenUtil().setWidth(16 * 2)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
VEmptyView(32),
_textItemWidget(
'联系电话',
Utils.starPhone(
model.wineManageDetail.phone)),
Container(
height: ScreenUtil().setWidth(48 * 2),
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
right: ScreenUtil().setWidth(16 * 2)),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
'客人姓名',
style: TextStyle(
color: MyColours.color_515151,
fontSize: font(16)),
),
Expanded(
child: Container(
height: ScreenUtil().setWidth(16 * 2),
alignment: Alignment.centerRight,
child: Text(
'${model.wineManageDetail.rname}${model.wineManageDetail.sexStr}',
style: TextStyle(
fontSize:
ScreenUtil().setSp(32),
color: MyColours.color_999999)),
)),
HEmptyView(40),
Container(
width: w(100),
alignment: Alignment.centerRight,
child: Text(
// ,
model.wineManageDetail.isMember == '1'
? '会员'
: '会员状态未知',
style: TextStyle(
color: model.wineManageDetail
.isMember !=
'1'
? MyColours.color_999999
: MyColours.color_515151,
fontSize: ScreenUtil().setSp(32),
),
),
),
],
)),
],
)),
ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount: model.wineManageDetail.wineData.length,
itemBuilder: (context, index) {
WineManageSunModel wineManageSunModel =
model.wineManageDetail.wineData[index];
return WineDetailItemPage(
wineManageSunModel: wineManageSunModel,
controller: _controller,
index: index,
);
}),
],
),
)),
Container(
alignment: Alignment.centerLeft,
margin: EdgeInsets.only(
left: w(20), right: w(20), top: w(10), bottom: w(16)),
child: Text(
'注:为保障酒品安排,只有存酒管理员才可以进行存酒操作!',
style: TextStyle(
color: MyColours.color_999999, fontSize: font(10)),
)),
Container(
color: MyColours.color_ffffff,
padding: EdgeInsets.only(
top: ScreenUtil().setWidth(16 * 2),
bottom: ScreenUtil().setWidth(35 * 2),
left: ScreenUtil().setWidth(45 * 2),
right: ScreenUtil().setWidth(45 * 2),
),
child: Row(
children: [
RoundButton(
text: '出库记录',
width: w(100),
height: ScreenUtil().setWidth(80),
radius: ScreenUtil().setWidth(10),
isBold: true,
borderColor: MyColours.color_438E93,
gradientStart: MyColours.color_ffffff,
gradientEnd: MyColours.color_ffffff,
textColor: MyColours.color_438E93,
fontSize: 32,
onPressed: () async {
// UserModel userModel =
// Provider.of<UserModel>(context, listen: false);
// if (userModel.user.role_name == '管理员' ||
// userModel.user.role_name == '店长') {
NavigatorUtil.goOutStoreRecordPage(
context, widget.idstr);
// } else {
// bool needRefresh =
// await NavigatorUtil.goCouponEditPage(context);
// print(needRefresh);
// if (needRefresh != null && needRefresh) {
// bus.emit('refresh_coupon_list_f');
// //刷新页面数据
// // _controller.callRefresh();
// // _couponNetworkData(tabController.index);
// }
// }
},
),
HEmptyView(30),
Expanded(
child: RoundButton(
text: '存酒出库',
// width: w(218),
height: ScreenUtil().setWidth(80),
radius: ScreenUtil().setWidth(10),
isBold: true,
gradientStart: !widget.isStoreWine
? MyColours.color_BFC4D4
: MyColours.color_438E93,
gradientEnd: !widget.isStoreWine
? MyColours.color_BFC4D4
: MyColours.color_438E93,
fontSize: 32,
onPressed: () async {
if (!widget.isStoreWine) {
Utils.showToast('您不是店铺的存酒管理员,无权进行相关操作。');
return false;
}
// UserModel userModel =
// Provider.of<UserModel>(context, listen: false);
// if (userModel.user.role_name == '管理员' ||
// userModel.user.role_name == '店长') {
WineManageModel modelTemp =
WineManageModel.fromJson2(storeWineProvider
.wineManageDetail
.toJson());
modelTemp.wineData = [];
// modelTemp.cdate =
// storeWineProvider.wineManageDetail.cdate;
// modelTemp.id =
// storeWineProvider.wineManageDetail.id;
// modelTemp.isMember =
// storeWineProvider.wineManageDetail.isMember;
// modelTemp.nickName =
// storeWineProvider.wineManageDetail.nickName;
// modelTemp.phone =
// storeWineProvider.wineManageDetail.phone;
// modelTemp.rname =
// storeWineProvider.wineManageDetail.rname;
// modelTemp.sex =
// storeWineProvider.wineManageDetail.sex;
// modelTemp.sexStr =
// storeWineProvider.wineManageDetail.sexStr;
NavigatorUtil.goApplyOutStorePage(
context,
modelTemp,
);
// } else {
// bool needRefresh =
// await NavigatorUtil.goCouponEditPage(context);
// print(needRefresh);
// if (needRefresh != null && needRefresh) {
// bus.emit('refresh_coupon_list_f');
// //刷新页面数据
// // _controller.callRefresh();
// // _couponNetworkData(tabController.index);
// }
// }
},
)),
],
))
],
);
}
})));
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import '../../../models/wine_manage_model.dart';
import '../../../res/colors.dart';
import '../../../utils/screen_util.dart';
import '../../../widgets/v_empty_view.dart';
class WineInStoreItem extends StatefulWidget {
// final VoidCallback onPressed;
final ScrollController controller;
final WineManageModel wineManageModel;
final bool isStoreWine;
WineInStoreItem(
{Key key, this.controller, this.wineManageModel, this.isStoreWine})
: super(key: key);
@override
_WineInStoreItemState createState() => _WineInStoreItemState();
}
class _WineInStoreItemState extends State<WineInStoreItem> {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
NavigatorUtil.goWineDetailPage(
context, widget.wineManageModel.id, widget.isStoreWine);
},
child: Container(
// width: ScreenUtil().setWidth(610),
margin: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(0),
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(32)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
boxShadow: [
BoxShadow(
spreadRadius: ScreenUtil().setWidth(2),
color: Color.fromRGBO(0, 0, 0, 0.25),
offset: Offset(0, ScreenUtil().setWidth(8)),
blurRadius: ScreenUtil().setWidth(8))
],
borderRadius: BorderRadius.all(
Radius.circular(ScreenUtil().setWidth(16)),
),
),
child: Column(
// mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: ScreenUtil().setWidth(70),
padding:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(30)),
decoration: BoxDecoration(
color: MyColours.color_438E93,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(ScreenUtil().setWidth(16)),
topRight: Radius.circular(ScreenUtil().setWidth(16)))),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
widget.wineManageModel.rname +
widget.wineManageModel.sexStr,
style: TextStyle(
color: MyColours.color_F8F9FD,
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(36)),
),
Text(Utils.starPhone(widget.wineManageModel.phone),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_F8F9FD,
fontSize: ScreenUtil().setSp(20))),
],
),
),
Container(
padding: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(20 * 2),
ScreenUtil().setWidth(9 * 2),
ScreenUtil().setWidth(20 * 2),
ScreenUtil().setWidth(4 * 2)),
child: ListView.builder(
itemCount: widget.wineManageModel.wineData.length,
shrinkWrap: true,
controller: widget.controller,
itemBuilder: (context, index) {
WineManageSunModel wineManageSunModel =
widget.wineManageModel.wineData[index];
return Container(
height: ScreenUtil().setWidth(14 * 2),
margin: EdgeInsets.only(bottom: w(5)),
child: Row(
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
constraints: BoxConstraints(
maxWidth: ScreenUtil().setWidth(150 * 2)),
// width:,
child: Text(
wineManageSunModel.wineName,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(20),
),
),
),
Spacer(),
Container(
// width: ScreenUtil().setWidth(60 * 2),
child: Text(
'${wineManageSunModel.wineAmount}${wineManageSunModel.unit}',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(20),
)),
),
HEmptyView(40),
Container(
child: Text(
'存酒号${wineManageSunModel.wineNumber}',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(20),
)),
),
],
));
}))
],
),
));
}
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/wine_manage_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import '../../../models/out_wine_record_model.dart';
import '../../../res/colors.dart';
import '../../../route/navigator_util.dart';
import '../../../utils/screen_util.dart';
import '../../../widgets/v_empty_view.dart';
class WineOutStoreItem extends StatefulWidget {
// final VoidCallback onPressed;
final OutWineRecordSunModel outWineRecordSunModel;
final ScrollController controller;
// final CouponSunModel couponSonModel;
WineOutStoreItem({Key key, this.controller, this.outWineRecordSunModel})
: super(key: key);
@override
_WineOutStoreItemState createState() => _WineOutStoreItemState();
}
class _WineOutStoreItemState extends State<WineOutStoreItem> {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
// WineManageModel modelTemp =
// WineManageModel.fromJson2(widget.outWineRecordSunModel.toJson());
// modelTemp.wineData = [];
NavigatorUtil.goOutStoreRecordDetailPage(context, widget.outWineRecordSunModel);
// NavigatorUtil.goOutStoreRecordPage(
// context, widget.outWineRecordSunModel.id);
},
child: Container(
// width: ScreenUtil().setWidth(610),
margin: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(0),
ScreenUtil().setWidth(40),
ScreenUtil().setWidth(32)),
decoration: BoxDecoration(
color: MyColours.color_ffffff,
boxShadow: [
BoxShadow(
spreadRadius: ScreenUtil().setWidth(2),
color: Color.fromRGBO(0, 0, 0, 0.25),
offset: Offset(0, ScreenUtil().setWidth(8)),
blurRadius: ScreenUtil().setWidth(8))
],
borderRadius: BorderRadius.all(
Radius.circular(ScreenUtil().setWidth(16)),
),
),
child: Column(
// mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
height: ScreenUtil().setWidth(70),
padding:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(30)),
decoration: BoxDecoration(
color: MyColours.color_999999,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(ScreenUtil().setWidth(16)),
topRight: Radius.circular(ScreenUtil().setWidth(16)))),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
widget.outWineRecordSunModel.rname +
widget.outWineRecordSunModel.sexStr,
style: TextStyle(
color: MyColours.color_F8F9FD,
fontWeight: FontWeight.bold,
fontSize: ScreenUtil().setSp(36)),
),
Text(Utils.starPhone(widget.outWineRecordSunModel.phone),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_F8F9FD,
fontSize: ScreenUtil().setSp(20))),
Text('接待:${widget.outWineRecordSunModel.nickName}',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_F8F9FD,
fontSize: ScreenUtil().setSp(20))),
],
),
),
Container(
padding: EdgeInsets.fromLTRB(
ScreenUtil().setWidth(20 * 2),
ScreenUtil().setWidth(9 * 2),
ScreenUtil().setWidth(20 * 2),
ScreenUtil().setWidth(4 * 2)),
child: ListView.builder(
itemCount: widget.outWineRecordSunModel.wineCheck.length,
shrinkWrap: true,
controller: widget.controller,
itemBuilder: (context, index) {
WineCheckModel wineCheckModel =
widget.outWineRecordSunModel.wineCheck[index];
return Container(
height: ScreenUtil().setWidth(14 * 2),
margin: EdgeInsets.only(bottom: w(5)),
child: Row(
// crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
constraints: BoxConstraints(
maxWidth: ScreenUtil().setWidth(150 * 2)),
// width:,
child: Text(
wineCheckModel.wineName,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(20),
),
),
),
Spacer(),
Container(
// width: ScreenUtil().setWidth(60 * 2),
child: Text(
'${widget.outWineRecordSunModel.cdateStr} 取出',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(20),
)),
),
HEmptyView(40),
Container(
child: Text(
'${wineCheckModel.checkAmount}${wineCheckModel.unit}',
style: TextStyle(
color: MyColours.color_515151,
fontSize: ScreenUtil().setSp(20),
)),
),
],
));
}))
],
),
));
}
}
... ...
... ... @@ -43,6 +43,8 @@ class ImgPickerWidget extends StatefulWidget {
final UploadImageProvider model;
final UploadType uploadType;
final DeleteCallback deleteCallback;
final String maxRemind;
final List<UploadImgModel> imageList;
ImgPickerWidget(
{Key key,
this.scrollController,
... ... @@ -51,7 +53,9 @@ class ImgPickerWidget extends StatefulWidget {
this.maxImageNumber = 5,
this.model,
this.uploadType,
this.deleteCallback})
this.deleteCallback,
this.maxRemind,
this.imageList})
: super(key: key);
@override
... ... @@ -108,6 +112,8 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
widget.model.imageListDenvironment.add(imgModel);
} else if (widget.uploadType == UploadType.TableManagerType) {
widget.model.tableImageList.add(imgModel);
} else if (widget.uploadType == UploadType.WineManageType) {
widget.imageList.add(imgModel);
}
} else {
print('No image selected.');
... ... @@ -124,10 +130,13 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
temp = widget.model.imageListDenvironment;
} else if (widget.uploadType == UploadType.TableManagerType) {
temp = widget.model.tableImageList;
} else if (widget.uploadType == UploadType.WineManageType) {
temp = widget.imageList;
}
UploadImageUtil().startUpload(context, File(pickedFile.path),
temp.length - 1, true, widget.model, widget.uploadType,
callback: widget.callback, countAll: 1);
callback: widget.callback, countAll: 1, imageList: widget.imageList);
}
}
... ... @@ -142,15 +151,15 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
temp = widget.model.imageListDenvironment;
} else if (widget.uploadType == UploadType.TableManagerType) {
temp = widget.model.tableImageList;
} else if (widget.uploadType == UploadType.WineManageType) {
temp = widget.imageList;
}
List<AssetEntity> imgList = await AssetPicker.pickAssets(context,
pickerConfig:AssetPickerConfig(
List<AssetEntity> imgList = await AssetPicker.pickAssets(context,
pickerConfig: AssetPickerConfig(
maxAssets: widget.maxImageNumber - temp.length,
// selectedAssets: assets,
requestType: type,
themeColor: MyColours.color_199095
)
);
// selectedAssets: assets,
requestType: type,
themeColor: MyColours.color_199095));
/// context is required, other params is optional.
// List<AssetEntity> imgList = await PhotoPicker.pickAsset(
... ... @@ -213,7 +222,9 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
});
UploadImageUtil().startUpload(context, File(file.absolute.path),
temp.length - 1, false, widget.model, widget.uploadType,
countAll: imgList.length, callback: widget.callback);
countAll: imgList.length,
callback: widget.callback,
imageList: widget.imageList);
// startUpload(File(file.absolute.path),
// _uploadImageProvider.imageList.length - 1, false);
}
... ... @@ -446,6 +457,8 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
temp = widget.model.imageListDenvironment;
} else if (widget.uploadType == UploadType.TableManagerType) {
temp = widget.model.tableImageList;
} else if (widget.uploadType == UploadType.WineManageType) {
temp = widget.imageList;
}
return _getGridImg(
temp.length < widget.maxImageNumber ? temp.length + 1 : temp.length,
... ... @@ -507,7 +520,16 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
style: TextStyle(
fontSize: ScreenUtil().setSp(24),
color: MyColours.color_999999),
)
),
widget.maxRemind != null ? VEmptyView(10) : SizedBox(),
widget.maxRemind != null
? Text(
'最多${widget.maxRemind}张照片',
style: TextStyle(
fontSize: ScreenUtil().setSp(18),
color: MyColours.color_999999),
)
: SizedBox()
],
)),
);
... ...
... ... @@ -47,7 +47,7 @@ class MarketingCenterProvider extends ChangeNotifier {
Utils.showToast('商家设置预订安排模板页面失败,请重试');
}
} else {
Utils.showToast(baseResp.msg);
Utils.showToast(baseResp.msg ?? '商家设置预订安排模板页面失败,请重试');
}
return false;
}
... ...
import 'package:flutter/material.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:provider/provider.dart';
import '../constant/constant.dart';
import '../models/out_wine_record_model.dart';
import '../models/phone_code_model.dart';
import '../models/wine_manage_model.dart';
import '../net/base_resp.dart';
import '../net/dio_util.dart';
import '../net/http_url.dart';
import '../utils/utils.dart';
/**
* 餐厅详情
*/
class StoreWineProvider with ChangeNotifier {
PageState pageStateAll = PageState.Loading; //全部在店
PageState pageStateRecord = PageState.Loading; //取酒记录单个存酒
PageState pageStateDetail = PageState.Loading; //存酒详情
PageState pageStateDetailRecord = PageState.Success; //出库记录列表详情
PageState pageStateRecordHome = PageState.Loading; //取酒记录首页
List<WineManageModel> wineManageList; //存酒列表数据
WineManageModel wineManageDetail; //存酒详情数据
List<OutWineRecordSunModel> outWineRecordData; //某个存酒详情的出库记录
List<OutWineRecordSunModel> outWineRecordHomeData; //存酒详情的出库记录
String code; //验证码
PhoneCodeSunModel phoneCodeSunModel;
/// 给手机发送短信验证码
Future<bool> getPhoneCode(BuildContext context, Map<String, String> params,
{isShowLoading = true}) async {
BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
.request<Map<String, dynamic>>(
context, Method.get, HttpUrl.send_vc_code,
data: params, showLoading: false)
.catchError((error) {});
if (baseResp.code == Constant.status_success) {
if (baseResp.data.isEmpty) {
return false;
} else {
//解析解析
phoneCodeSunModel = PhoneCodeModel.fromJson(baseResp.responseData).data;
return true;
}
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
return false;
}
}
// 设置商家存酒管理员
Future<bool> setStoreWineBySellerUser(
BuildContext context, Map<String, String> params,
{bool showLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(
context, Method.get, HttpUrl.set_store_wine_by_seller_user,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
Utils.showToast('设置商家存酒管理员失败,请重试');
return false;
});
if (baseResp.code == Constant.status_success) {
if (baseResp.data == 0 || baseResp.data == 1) {
return true;
} else {
Utils.showToast('设置商家存酒管理员失败,请重试');
}
} else {
Utils.showToast(baseResp.msg ?? '设置商家存酒管理员失败');
}
return false;
}
// 商家新建存酒
Future<bool> setStoreWineBySeller(
BuildContext context, Map<String, String> params,
{bool showLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.set_store_wine_by_seller,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
Utils.showToast('新建存酒失败,请重试');
return false;
});
if (baseResp.code == Constant.status_success) {
if (baseResp.data is Map && baseResp.data['id'] is String) {
return true;
} else {
Utils.showToast('新建存酒失败,请重试');
}
} else {
Utils.showToast(baseResp.msg ?? '新建存酒失败,请重试');
}
return false;
}
// 获取存酒列表
Future<bool> getStoreWineBySeller(BuildContext context,
{bool showLoading = true}) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
Map<String, String> params = {"sid": userModel.user.sellerid};
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_store_wine_by_seller,
data: params, showLoading: showLoading)
.catchError((error) {
pageStateAll = PageState.ConnectivityError;
print(error.toString());
Utils.showToast('获取存酒列表失败,请重试');
notifyListeners();
return false;
});
if (baseResp.code == Constant.status_success) {
if (baseResp.data == false) {
pageStateAll = PageState.Empty;
} else {
wineManageList = WineManageFaModel.fromJson(baseResp.responseData).data;
pageStateAll = PageState.Success;
}
notifyListeners();
return true;
} else {
Utils.showToast(baseResp.msg);
pageStateAll = PageState.ConnectivityError;
}
notifyListeners();
return false;
}
// 取酒出库提交
Future<bool> setStoreWineBySellerCheck(
BuildContext context, Map<String, String> params,
{bool showLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(
context, Method.get, HttpUrl.set_store_wine_by_seller_check,
data: params, showLoading: showLoading)
.catchError((error) {
print(error.toString());
Utils.showToast('存酒出库失败,请重试');
return false;
});
if (baseResp.code == Constant.status_success) {
if (baseResp.data is Map && baseResp.data['id'] is String) {
return true;
} else {
Utils.showToast('存酒出库失败,请重试');
}
} else {
Utils.showToast(baseResp.msg ?? '存酒出库失败,请重试');
}
return false;
}
// 获取存酒详情
Future<bool> getStoreWineById(
BuildContext context, Map<String, String> params,
{bool showLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(context, Method.get, HttpUrl.get_store_wine_by_id,
data: params, showLoading: showLoading)
.catchError((error) {
pageStateDetail = PageState.ConnectivityError;
print(error.toString());
Utils.showToast('获取存酒详情失败');
notifyListeners();
return false;
});
if (baseResp.code == Constant.status_success) {
if (baseResp.data is Map) {
wineManageDetail = WineManageModel.fromJson(baseResp.data);
pageStateDetail = PageState.Success;
} else {
pageStateDetail = PageState.Empty;
}
notifyListeners();
return true;
} else {
Utils.showToast(baseResp.msg ?? '获取存酒详情失败');
pageStateDetail = PageState.ConnectivityError;
}
notifyListeners();
return false;
}
// 根据存酒ID获取取酒记录
Future<bool> getStoreWineCheckByWid(
BuildContext context, Map<String, String> params,
{bool showLoading = true}) async {
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(
context, Method.get, HttpUrl.get_store_wine_check_by_wid,
data: params, showLoading: showLoading)
.catchError((error) {
pageStateRecord = PageState.ConnectivityError;
print(error.toString());
Utils.showToast('获取取酒记录失败');
notifyListeners();
return false;
});
if (baseResp.code == Constant.status_success) {
outWineRecordData =
OutWineRecordModel.fromJson(baseResp.responseData).data;
if (outWineRecordData.length == 0) {
pageStateRecord = PageState.Empty;
} else {
pageStateRecord = PageState.Success;
}
notifyListeners();
return true;
} else {
Utils.showToast(baseResp.msg ?? '获取取酒记录失败');
pageStateRecord = PageState.ConnectivityError;
}
notifyListeners();
return false;
}
// 获取取酒记录
Future<bool> getStoreWineCheckList(BuildContext context,
{bool showLoading = true}) async {
UserModel userModel = Provider.of<UserModel>(context, listen: false);
Map<String, String> params = {"sid": userModel.user.sellerid};
BaseResp<dynamic> baseResp = await DioUtil()
.request<dynamic>(
context, Method.get, HttpUrl.get_store_wine_check_list,
data: params, showLoading: showLoading)
.catchError((error) {
pageStateRecordHome = PageState.ConnectivityError;
print(error.toString());
Utils.showToast('获取取酒记录失败');
notifyListeners();
return false;
});
if (baseResp.code == Constant.status_success) {
outWineRecordHomeData =
OutWineRecordModel.fromJson(baseResp.responseData).data;
if (outWineRecordHomeData.length == 0) {
pageStateRecordHome = PageState.Empty;
} else {
pageStateRecordHome = PageState.Success;
}
notifyListeners();
return true;
} else {
Utils.showToast(baseResp.msg ?? '获取取酒记录失败');
pageStateRecordHome = PageState.ConnectivityError;
}
notifyListeners();
return false;
}
}
... ...
... ... @@ -33,11 +33,14 @@ class UploadImageProvider extends ChangeNotifier {
List<UploadImgModel> feastRemarkDjImageList = []; //宴会备注图片信息列表----定金
List<UploadImgModel> feastRemarkContractImageList = []; //宴会备注图片信息列表----合同
List<UploadImgModel> feastRemarkInvoiceImageList = []; //宴会备注图片信息列表----发票
UploadImgModel storeImage1 = UploadImgModel(); //预订安排介绍
UploadImgModel storeImage2 = UploadImgModel(); //预订安排介绍
UploadImgModel storeImage3 = UploadImgModel(); //预订安排介绍
UploadImgModel storeImage4 = UploadImgModel(); //预订安排介绍
// List<UploadImgModel> wineImageList = []; //新建存酒
int countUpload = 0;
UploadImageProvider() {
touxiang.process = 0.01;
... ...