Commit 896d3592ea7fb4ecb4ba61f4808c4667cf7d1e98

Authored by wdn127929
1 parent d0615a49

桌位选择,上锁

... ... @@ -78,25 +78,25 @@ class NotebookDetail {
String id;
String uid;
String abolition;
String tableinfo;
// String tableinfo;
String pnum;
String actual_pum;
String rname;
String sex;
String phone;
String cusdem;
String cusman; //客户经理
// String cusman; //客户经理
String ddate;
String is_set_ddate;
String ddate_solt;
String status = "0"; //订单状态 0:待确认,1:已订座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
String action;
// String action;
String type; //0 内部订单 1 在线预订
String note_name;
// String note_name;
String nick_name;
String role_name;
String seller_user_phone;
String channel;
// String channel;
String cdate;
List<t.Table> demands; //需求桌位
List<t.Table> tables; //预订桌位
... ... @@ -111,7 +111,7 @@ class NotebookDetail {
dynamic is_user_comments; //是否评价过
String up_date; //订单修改时间
// String up_date; //订单修改时间
String deposit_cancel; //订金走向
String log_photo; //下单照片
... ... @@ -315,7 +315,7 @@ class NotebookDetail {
@override
String toString() {
return 'NotebookDetail{id: $id, uid: $uid ,con_amount:$con_amount,abolition: $abolition, tableinfo: $tableinfo,actual_pum:$actual_pum, pnum: $pnum, rname: $rname, sex: $sex, phone: $phone, cusdem: $cusdem, cusman: $cusman, ddate: $ddate, is_set_ddate: $is_set_ddate, ddate_solt: $ddate_solt, status: $status, action: $action, type: $type, note_name: $note_name, seller_user_phone:$seller_user_phone, nick_name: $nick_name,channel: $channel, cdate: $cdate, demands: $demands, tables: $tables, cancel: $cancel, gid: $gid,guest_uid:$guest_uid,reserve_type:$reserve_type,place_order_name:$place_order_name,is_user_comments:$is_user_comments,deposit_cancel:$deposit_cancel,up_date:$up_date,log_photo:$log_photo,photo_note:$photo_note,serve_name:$serve_name,serve_uid:$serve_uid}';
return 'NotebookDetail{id: $id, uid: $uid ,con_amount:$con_amount,abolition: $abolition,actual_pum:$actual_pum, pnum: $pnum, rname: $rname, sex: $sex, phone: $phone, cusdem: $cusdem, ddate: $ddate, is_set_ddate: $is_set_ddate, ddate_solt: $ddate_solt, status: $status, type: $type, seller_user_phone:$seller_user_phone, nick_name: $nick_name, cdate: $cdate, demands: $demands, tables: $tables, cancel: $cancel, gid: $gid,guest_uid:$guest_uid,reserve_type:$reserve_type,place_order_name:$place_order_name,is_user_comments:$is_user_comments,deposit_cancel:$deposit_cancel,log_photo:$log_photo,photo_note:$photo_note,serve_name:$serve_name,serve_uid:$serve_uid}';
}
}
... ...
... ... @@ -44,7 +44,7 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
return NotebookDetail()
..id = json['id'] as String
..uid = json['uid'] as String
..tableinfo = json['tableinfo'] as String
// ..tableinfo = json['tableinfo'] as String
..abolition = json['abolition'] as String
..pnum = json['pnum'] as String
..actual_pum = json['actual_pum'] as String
... ... @@ -53,18 +53,18 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
..sex = json['sex'] as String
..phone = json['phone'] as String
..cusdem = json['cusdem'] as String
..cusman = json['cusman'] as String
// ..cusman = json['cusman'] as String
..ddate = json['ddate'] as String
..is_set_ddate = json['is_set_ddate'] as String
..ddate_solt = json['ddate_solt'] as String
..status = json['status'] as String
..action = json['action'] as String
// ..action = json['action'] as String
..type = json['type'] as String
..note_name = json['note_name'] as String
// ..note_name = json['note_name'] as String
..nick_name = json['nick_name'] as String
..role_name = json['role_name'] as String
..seller_user_phone = json['seller_user_phone'] as String
..channel = json['channel'] as String
// ..channel = json['channel'] as String
..cdate = json['cdate'] as String
..demands = (json['demands'] as List)
?.map((e) =>
... ... @@ -88,7 +88,7 @@ NotebookDetail _$NotebookDetailFromJson(Map<String, dynamic> json) {
..reserve_type = json['reserve_type'] as String
..place_order_name = json['place_order_name'] as String
..is_user_comments = json['is_user_comments'] as dynamic
..up_date = json['up_date'] as String
// ..up_date = json['up_date'] as String
..deposit_cancel = json['deposit_cancel'] as String
..log_photo = json['log_photo'] as String
..photo_note = images
... ... @@ -100,7 +100,7 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
<String, dynamic>{
'uid': instance.uid,
'id': instance.id,
'tableinfo': instance.tableinfo,
// 'tableinfo': instance.tableinfo,
'abolition': instance.abolition,
'pnum': instance.pnum,
'con_amount': instance.con_amount,
... ... @@ -109,18 +109,18 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
'sex': instance.sex,
'phone': instance.phone,
'cusdem': instance.cusdem,
'cusman': instance.cusman,
// 'cusman': instance.cusman,
'ddate': instance.ddate,
'is_set_ddate': instance.is_set_ddate,
'ddate_solt': instance.ddate_solt,
'status': instance.status,
'action': instance.action,
// 'action': instance.action,
'type': instance.type,
'note_name': instance.note_name,
// 'note_name': instance.note_name,
'nick_name': instance.nick_name,
'role_name': instance.role_name,
'seller_user_phone': instance.seller_user_phone,
'channel': instance.channel,
// 'channel': instance.channel,
'cdate': instance.cdate,
'demands': instance.demands,
'tables': instance.tables,
... ... @@ -132,7 +132,7 @@ Map<String, dynamic> _$NotebookDetailToJson(NotebookDetail instance) =>
'reserve_type': instance.reserve_type,
'place_order_name': instance.place_order_name,
'is_user_comments': instance.is_user_comments,
'up_date': instance.up_date,
// 'up_date': instance.up_date,
'deposit_cancel': instance.deposit_cancel,
'log_photo': instance.log_photo,
'photo_note': instance.photo_note,
... ...
... ... @@ -48,7 +48,7 @@ class HandleOnlinePageState extends State<HandleOnlinePage> {
NotebookDetail detailEntity;
String cusmanText = "";
// String cusmanText = "";
List<Manager> managers = []; //客户经理
... ... @@ -79,7 +79,7 @@ class HandleOnlinePageState extends State<HandleOnlinePage> {
});
setState(() {
//未处理
cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
// cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
formatPhone = detailEntity.phone;
if (App.sp.getString("is_call_tel") != null &&
App.sp.getString("is_call_tel") == "1") {
... ... @@ -116,17 +116,17 @@ class HandleOnlinePageState extends State<HandleOnlinePage> {
}
//设置当前客户经理
_setCurrManager() {
manager = managers.firstWhere((manager) => manager.userName == cusmanText,
orElse: () => Manager());
if (manager.id == null || manager.id.toString().isEmpty) return;
Map<String, String> params = {
"rid": detailEntity.id,
"cusman_id": manager.id.toString(),
"cusman": manager.userName
};
detailModel.setReserveCusmnan(context, params);
}
// _setCurrManager() {
// manager = managers.firstWhere((manager) => manager.userName == cusmanText,
// orElse: () => Manager());
// if (manager.id == null || manager.id.toString().isEmpty) return;
// Map<String, String> params = {
// "rid": detailEntity.id,
// "cusman_id": manager.id.toString(),
// "cusman": manager.userName
// };
// detailModel.setReserveCusmnan(context, params);
// }
_goReserve() async {
Navigator.of(context).pop();
... ...
... ... @@ -88,7 +88,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
NotebookDetail detailEntity;
String cusmanText = "";
// String cusmanText = "";
// List<Manager> managers = []; //客户经理
... ... @@ -563,7 +563,7 @@ class NotebookDetailPageState extends State<NotebookDetailPage> {
detailModel.numController.text = detailEntity.con_amount;
}
cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
// cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
formatPhone = detailEntity.phone;
if (App.sp.getString("is_call_tel") != null &&
App.sp.getString("is_call_tel") == "1") {
... ...
... ... @@ -147,7 +147,14 @@ class TableItemOrReserveState extends State<TableItemOrReserve> {
// selectTids,
// table.tids.split(
// ','))); //真正上锁*******被合并桌子上锁:合并的桌子被预订&&islock == '1' || 合并桌子上锁:被合并的桌子被预订&&ismerge == '1'
bool islock = table.reserveLock == '1';
// bool islock = table.reserveLock == '1';
bool islock = table.reserveLock == '1' ||
(table.isLock == '1' && selectTids.contains(table.lockTid)) ||
(table.isMerge == '1' &&
haveSame(
selectTids,
table.tids.split(
','))); //真正上锁*******被合并桌子上锁:合并的桌子被预订&&islock == '1' || 合并桌子上锁:被合并的桌子被预订&&ismerge == '1'
return GestureDetector(
onTap: () {
if (widget.canSelected && widget.fromPage == 'change') {
... ...
... ... @@ -79,7 +79,7 @@ class HandleOnlinePageSimState extends State<HandleOnlinePageSim> {
});
setState(() {
//未处理
cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
// cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
formatPhone = detailEntity.phone;
if (App.sp.getString("is_call_tel") != null &&
App.sp.getString("is_call_tel") == "1") {
... ...
... ... @@ -540,7 +540,7 @@ class NotebookDetailPageSimState extends State<NotebookDetailPageSim> {
detailModel.numController.text = detailEntity.con_amount;
}
cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
// cusmanText = detailEntity.cusman.isEmpty ? "请选择" : detailEntity.cusman;
formatPhone = detailEntity.phone;
if (App.sp.getString("is_call_tel") != null &&
App.sp.getString("is_call_tel") == "1") {
... ...
import 'dart:convert';
import 'dart:async';
import 'dart:convert' as Convert;
import 'dart:io';
import 'dart:math';
import 'dart:typed_data';
import 'dart:ui';
import 'package:call_log/call_log.dart';
import 'package:common_utils/common_utils.dart';
... ... @@ -197,9 +199,9 @@ class Utils {
String stringSignTemp =
str + "&key=3F59D13EB7681868B96A50902296BCE6"; //注:key为商户平台设置的密钥key
var key = utf8.encode('3F59D13EB7681868B96A50902296BCE6');
var key = Convert.utf8.encode('3F59D13EB7681868B96A50902296BCE6');
var hmacSha256 = Hmac(sha256, key); // HMAC-SHA256
var bytes = utf8.encode(stringSignTemp);
var bytes = Convert.utf8.encode(stringSignTemp);
var digest = hmacSha256.convert(bytes);
print("HMAC digest as bytes: ${digest.bytes}");
... ... @@ -1066,7 +1068,7 @@ class Utils {
// for (var value in JsonDecoder().convert(str)) {
// list.add(value);
// }
list = jsonDecode(str);
list = Convert.jsonDecode(str);
return list;
}
... ... @@ -1394,7 +1396,7 @@ class Utils {
// "pack-cookbook/pages/success?rid=$rid&identity=2&hasOnlyShow=1";
print(data);
String _path =
"pack-cookbook/pages/success_new?cookbooklist=${json.encode(data)}&hasSuccess=1&oid=$oid&rid=$rid&identity=1&hasOnlyShow=1&sellerName=${Provider.of<UserModel>(context, listen: false).user.sellername}&sid=${Provider.of<UserModel>(context, listen: false).user.sellerid}&type=2&priceSum=${priceSum}&memberPriceSum=${memberPriceSum}&planPriceSum=${planPriceSum}&remark=${remark}&name=${name}&address=${address}&service=${service}";
"pack-cookbook/pages/success_new?cookbooklist=${Convert.json.encode(data)}&hasSuccess=1&oid=$oid&rid=$rid&identity=1&hasOnlyShow=1&sellerName=${Provider.of<UserModel>(context, listen: false).user.sellername}&sid=${Provider.of<UserModel>(context, listen: false).user.sellerid}&type=2&priceSum=${priceSum}&memberPriceSum=${memberPriceSum}&planPriceSum=${planPriceSum}&remark=${remark}&name=${name}&address=${address}&service=${service}";
String _description = "OneKey";
// Uint8List source = await testComporessList(context, _thumbnail);
print(_path);
... ... @@ -2078,6 +2080,85 @@ class Utils {
bool isSuccess = await shareToWeChat(model);
return isSuccess;
}
static Future<ui.Image> loadImage(var path, bool isUrl) async {
ImageStream stream;
if (isUrl) {
stream = NetworkImage(path).resolve(ImageConfiguration.empty);
} else {
stream = AssetImage(path, bundle: rootBundle)
.resolve(ImageConfiguration.empty);
}
Completer<ui.Image> completer = Completer<ui.Image>();
void listener(ImageInfo frame, bool synchronousCall) {
final ui.Image image = frame.image;
completer.complete(image);
stream.removeListener(ImageStreamListener(listener));
}
stream.addListener(ImageStreamListener(listener));
return completer.future;
}
// static Future<ui.Image> getImage(String asset) async {
// ByteData data = await rootBundle.load(asset);
// Codec codec = await ui.instantiateImageCodec(data.buffer.asUint8List());
// FrameInfo fi = await codec.getNextFrame();
// return fi.image;
// }
static Future< Uint8List> canvas(_thumbnail)async{
var pictureRecorder = new ui.PictureRecorder(); // 图片记录仪
var canvas = new Canvas(pictureRecorder); //canvas接受一个图片记录仪
var images = await loadImage(_thumbnail,true); // 使用方法获取Unit8List格式的图片
print(images);
Paint _linePaint = new Paint()
..color = Colors.blue
..style = PaintingStyle.fill
..isAntiAlias = true
..strokeCap = StrokeCap.round
..strokeWidth = 500;
// 绘制图片
canvas.drawImage(images, Offset(0, 0), _linePaint); // 直接画图
// 绘制圆圈
// canvas.drawCircle(
// new Offset(
// 60,
// images.height.toDouble() + 60,
// ),
// 40.0,
// _linePaint);
// 绘制文字
ui.ParagraphBuilder pb = ui.ParagraphBuilder(ui.ParagraphStyle(
textAlign: TextAlign.left,
fontWeight: FontWeight.w400,
fontStyle: FontStyle.normal,
// :MyColours.color_000000,
fontSize: 25.0));
pb.pushStyle(ui.TextStyle(color: Colors.black));
pb.addText('有一种感动就做只有你懂');
pb.addText('一个可以钻钱的app');
// 设置文本的宽度约束
ParagraphConstraints pc = ui.ParagraphConstraints(width: 500);
ui.Paragraph paragraph = pb.build()..layout(pc);
canvas.drawParagraph(
paragraph, Offset(0, images.height.toDouble() + 20));
//下面的代码是生成图片的关键代码,以上绘制文字和圆圈的代码可以忽略不计
var picture = await pictureRecorder.endRecording().toImage(500, 400);//设置生成图片的宽和高
var pngImageBytes = await picture.toByteData(format: ui.ImageByteFormat.png);
// var imgBytes = Uint8List.view(pngImageBytes.buffer); //这一行和下面这一行都是生成Uint8List格式的图片(原理还不知道)
Uint8List pngBytes = pngImageBytes.buffer.asUint8List();
print(pngBytes);//pngBytes可以放在Image.memory()中预览
// setState(() {
// imageMemory = pngBytes;
// });
return pngBytes;
}
//分享邀请函
static goShareInvicationToWeChat(BuildContext context, String rid, String uid,
... ... @@ -2089,9 +2170,12 @@ class Utils {
// "https://qn.colorcun.com/reserve/images/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_201911151148572.jpg";
String sellerImage =
Provider.of<UserModel>(context, listen: false).user.sellerimage;
String _thumbnail = sellerImage == null || sellerImage == ''
// String _thumbnail = sellerImage == null || sellerImage == ''
// ? 'http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png'
// : sellerImage;
Uint8List _thumbnail =await canvas(sellerImage == null || sellerImage == ''
? 'http://nosqn.colorcun.com/reserve/images/3x/%E6%9A%82%E6%97%A0.png'
: sellerImage;
: sellerImage);
String _title =
"您预订的${Provider.of<UserModel>(context, listen: false).user.sellername},已经安排,点击查看详情";
... ... @@ -2125,46 +2209,46 @@ class Utils {
// miniProgramType: WXMiniProgramType.RELEASE, //正式版
// miniProgramType: //开发版
// thumbnail: WeChatImage.binary(source)
thumbnail: WeChatImage.network(_thumbnail)
// thumbnail: WeChatImage.binary(image)
// thumbnail: WeChatImage.network(_thumbnail)
thumbnail: WeChatImage.binary(_thumbnail)
);
isSuccess = await shareToWeChat(model);
} else {
Loading.showLoading(context);
// Loading.showLoading(context);
// // String _path =
// // "pages/customer/index.html?id=$rid&hasInvitation=1&hasSellerShare=1&uid=$uid";
// String _path =
// "pages/customer/index.html?id=$rid&hasInvitation=1&hasSellerShare=1&uid=$uid";
String _path =
"pages/customer/detail_owner_invitation_new.html?id=$rid&hasInvitation=1&hasSellerShare=1&uid=$uid";
if(depositId != null){
_path =
"pages/customer/detail_owner_invitation_new.html?id=$rid&hasInvitation=1&hasSellerShare=1&uid=$uid&paymentId=$depositId";
}
FlutterWxwork flutterWxwork = FlutterWxwork();
bool isAppInstalled = await flutterWxwork.isAppInstalled();
print(isAppInstalled);
if (isAppInstalled) {
bool registerResult = await flutterWxwork.registerApp(
'wwauthbdca186ec4257973000003', 'wwbdca186ec4257973', '1000003');
print(registerResult);
// isSuccess = await flutterWxwork.shareText(text: "dddddddd");
dynamic isSuccess = await flutterWxwork.shareMiniProgram(
userName: 'gh_487873d353b3@app',
path: _path,
hdImageData: _thumbnail,
title: _title,
description: _description,
);
Loading.hideLoading(context);
// var isSuccess = await flutterWxwork.shareImage();
print(isSuccess);
} else {
Loading.hideLoading(context);
Utils.showToast('未安装企业微信');
}
// "pages/customer/detail_owner_invitation_new.html?id=$rid&hasInvitation=1&hasSellerShare=1&uid=$uid";
// if(depositId != null){
// _path =
// "pages/customer/detail_owner_invitation_new.html?id=$rid&hasInvitation=1&hasSellerShare=1&uid=$uid&paymentId=$depositId";
// }
// FlutterWxwork flutterWxwork = FlutterWxwork();
// bool isAppInstalled = await flutterWxwork.isAppInstalled();
// print(isAppInstalled);
// if (isAppInstalled) {
// bool registerResult = await flutterWxwork.registerApp(
// 'wwauthbdca186ec4257973000003', 'wwbdca186ec4257973', '1000003');
// print(registerResult);
// // isSuccess = await flutterWxwork.shareText(text: "dddddddd");
// dynamic isSuccess = await flutterWxwork.shareMiniProgram(
// userName: 'gh_487873d353b3@app',
// path: _path,
// hdImageData: _thumbnail,
// title: _title,
// description: _description,
// );
// Loading.hideLoading(context);
// // var isSuccess = await flutterWxwork.shareImage();
// print(isSuccess);
// } else {
// Loading.hideLoading(context);
// Utils.showToast('未安装企业微信');
// }
}
return isSuccess;
... ...