Commit f15fe5d80c75fe00bd7af66eaef045d6f73920aa

Authored by wdn127929
1 parent fc4ce847

桌子图片上传,获取

@@ -11,14 +11,14 @@ if (flutterRoot == null) { @@ -11,14 +11,14 @@ if (flutterRoot == null) {
11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 } 12 }
13 13
14 -def flutterVersionCode = "282" 14 +def flutterVersionCode = "283"
15 if (flutterVersionCode == null) { 15 if (flutterVersionCode == null) {
16 - flutterVersionCode = '282' 16 + flutterVersionCode = '283'
17 } 17 }
18 18
19 -def flutterVersionName = "2.8.2" 19 +def flutterVersionName = "2.8.3"
20 if (flutterVersionName == null) { 20 if (flutterVersionName == null) {
21 - flutterVersionName = '2.8.2' 21 + flutterVersionName = '2.8.3'
22 } 22 }
23 23
24 apply plugin: 'com.android.application' 24 apply plugin: 'com.android.application'
@@ -24,6 +24,7 @@ class Table { @@ -24,6 +24,7 @@ class Table {
24 String reserver; //订餐人 24 String reserver; //订餐人
25 String notebookId; //桌位对应的预订id 25 String notebookId; //桌位对应的预订id
26 bool selected; //是否选中 26 bool selected; //是否选中
  27 + int isPhoto; //桌位是否有照片
27 28
28 //获取桌位类型 29 //获取桌位类型
29 String get tidStr { 30 String get tidStr {
@@ -99,6 +100,6 @@ class Table { @@ -99,6 +100,6 @@ class Table {
99 100
100 @override 101 @override
101 String toString() { 102 String toString() {
102 - return 'Table{id: $id, rid: $rid, tid: $tid, name: $name, table_pnum: $table_pnum, most_pnum: $most_pnum, order_o: $order_o, status: $status, tablestatus: $tablestatus, enable: $enable, spell: $spell, rname: $rname, max: $max, low: $low}'; 103 + return 'Table{id: $id,isPhoto:$isPhoto rid: $rid, tid: $tid, name: $name, table_pnum: $table_pnum, most_pnum: $most_pnum, order_o: $order_o, status: $status, tablestatus: $tablestatus, enable: $enable, spell: $spell, rname: $rname, max: $max, low: $low}';
103 } 104 }
104 } 105 }
@@ -13,6 +13,7 @@ Table _$TableFromJson(Map<String, dynamic> json) { @@ -13,6 +13,7 @@ Table _$TableFromJson(Map<String, dynamic> json) {
13 ..tid = json['tid'] as String 13 ..tid = json['tid'] as String
14 ..name = json['name'] as String 14 ..name = json['name'] as String
15 ..table_pnum = json['table_pnum'] as String 15 ..table_pnum = json['table_pnum'] as String
  16 + ..isPhoto = json['is_photo'] as int
16 ..most_pnum = json['most_pnum'] as String 17 ..most_pnum = json['most_pnum'] as String
17 ..order_o = json['order_o'] as String 18 ..order_o = json['order_o'] as String
18 ..status = json['status'] as String 19 ..status = json['status'] as String
@@ -33,6 +34,7 @@ Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{ @@ -33,6 +34,7 @@ Map<String, dynamic> _$TableToJson(Table instance) => <String, dynamic>{
33 'rid': instance.rid, 34 'rid': instance.rid,
34 'tid': instance.tid, 35 'tid': instance.tid,
35 'name': instance.name, 36 'name': instance.name,
  37 + 'isPhoto': instance.isPhoto,
36 'table_pnum': instance.table_pnum, 38 'table_pnum': instance.table_pnum,
37 'most_pnum': instance.most_pnum, 39 'most_pnum': instance.most_pnum,
38 'order_o': instance.order_o, 40 'order_o': instance.order_o,
  1 +import 'package:json_annotation/json_annotation.dart';
  2 +
  3 +part 'table_photo_model.g.dart';
  4 +
  5 +@JsonSerializable()
  6 +class TablePhotoModel extends Object {
  7 + @JsonKey(name: 'ret')
  8 + int ret;
  9 +
  10 + @JsonKey(name: 'data')
  11 + List<TablePhotoSunModel> data;
  12 +
  13 + @JsonKey(name: 'msg')
  14 + String msg;
  15 +
  16 + TablePhotoModel(
  17 + this.ret,
  18 + this.data,
  19 + this.msg,
  20 + );
  21 +
  22 + factory TablePhotoModel.fromJson(Map<String, dynamic> srcJson) =>
  23 + _$TablePhotoModelFromJson(srcJson);
  24 +
  25 + Map<String, dynamic> toJson() => _$TablePhotoModelToJson(this);
  26 +}
  27 +
  28 +@JsonSerializable()
  29 +class TablePhotoSunModel extends Object {
  30 + @JsonKey(name: 'id')
  31 + String id;
  32 +
  33 + @JsonKey(name: 'sellerid')
  34 + dynamic sellerid;
  35 +
  36 + @JsonKey(name: 'tableid')
  37 + dynamic tableid;
  38 +
  39 + @JsonKey(name: 'url')
  40 + String url;
  41 +
  42 + @JsonKey(name: 'cdate')
  43 + dynamic cdate;
  44 +
  45 + bool isUpload;
  46 +
  47 + TablePhotoSunModel(
  48 + this.id,
  49 + this.sellerid,
  50 + this.tableid,
  51 + this.url,
  52 + this.cdate,
  53 + );
  54 +
  55 + factory TablePhotoSunModel.fromJson(Map<String, dynamic> srcJson) =>
  56 + _$TablePhotoSunModelFromJson(srcJson);
  57 +
  58 + Map<String, dynamic> toJson() => _$TablePhotoSunModelToJson(this);
  59 +}
  1 +// GENERATED CODE - DO NOT MODIFY BY HAND
  2 +
  3 +part of 'table_photo_model.dart';
  4 +
  5 +// **************************************************************************
  6 +// JsonSerializableGenerator
  7 +// **************************************************************************
  8 +
  9 +TablePhotoModel _$TablePhotoModelFromJson(Map<String, dynamic> json) {
  10 + return TablePhotoModel(
  11 + json['ret'] as int,
  12 + (json['data'] as List)
  13 + ?.map((e) => e == null
  14 + ? null
  15 + : TablePhotoSunModel.fromJson(e as Map<String, dynamic>))
  16 + ?.toList(),
  17 + json['msg'] as String,
  18 + );
  19 +}
  20 +
  21 +Map<String, dynamic> _$TablePhotoModelToJson(TablePhotoModel instance) =>
  22 + <String, dynamic>{
  23 + 'ret': instance.ret,
  24 + 'data': instance.data,
  25 + 'msg': instance.msg,
  26 + };
  27 +
  28 +TablePhotoSunModel _$TablePhotoSunModelFromJson(Map<String, dynamic> json) {
  29 + return TablePhotoSunModel(
  30 + json['id'] as String,
  31 + json['sellerid'] as dynamic,
  32 + json['tableid'] as dynamic,
  33 + json['url'] as String,
  34 + json['cdate'] as dynamic,
  35 + );
  36 +}
  37 +
  38 +Map<String, dynamic> _$TablePhotoSunModelToJson(TablePhotoSunModel instance) =>
  39 + <String, dynamic>{
  40 + 'id': instance.id,
  41 + 'sellerid': instance.sellerid,
  42 + 'tableid': instance.tableid,
  43 + 'url': instance.url,
  44 + 'cdate': instance.cdate,
  45 + };
@@ -9,6 +9,8 @@ class UploadImgModel { @@ -9,6 +9,8 @@ class UploadImgModel {
9 FileType fileType; 9 FileType fileType;
10 File thumbnailPath; // 视频封面 10 File thumbnailPath; // 视频封面
11 String duration; //视频时长 11 String duration; //视频时长
  12 + bool isUpload; //桌面图片管理 ----- 图片是否上传到后台服务器
  13 + String photoID; //桌面图片管理 ID
12 } 14 }
13 15
14 enum FileType { 16 enum FileType {
@@ -110,5 +110,9 @@ class HttpUrl { @@ -110,5 +110,9 @@ class HttpUrl {
110 "?service=App.Activity.AddForward"; // 客户经理转发记录 110 "?service=App.Activity.AddForward"; // 客户经理转发记录
111 static const String up_reserve_info = 111 static const String up_reserve_info =
112 "?service=App.Reserve.UpReserveInfo"; // 编辑订单附加信息 112 "?service=App.Reserve.UpReserveInfo"; // 编辑订单附加信息
  113 + static const String set_table_photo =
  114 + "?service=App.Tables.SetTablePhoto"; // App设置桌位关联图片
  115 + static const String get_table_photo =
  116 + "?service=App.Tables.GetTablePhoto"; // App获取桌位关联图片
113 117
114 } 118 }
@@ -38,6 +38,7 @@ class ImgPickerWidget extends StatefulWidget { @@ -38,6 +38,7 @@ class ImgPickerWidget extends StatefulWidget {
38 final int maxImageNumber; 38 final int maxImageNumber;
39 final UploadImageProvider model; 39 final UploadImageProvider model;
40 final UploadType uploadType; 40 final UploadType uploadType;
  41 + final VoidCallback callbackDelete;
41 ImgPickerWidget( 42 ImgPickerWidget(
42 {Key key, 43 {Key key,
43 this.scrollController, 44 this.scrollController,
@@ -45,7 +46,8 @@ class ImgPickerWidget extends StatefulWidget { @@ -45,7 +46,8 @@ class ImgPickerWidget extends StatefulWidget {
45 this.onChange, 46 this.onChange,
46 this.maxImageNumber = 5, 47 this.maxImageNumber = 5,
47 this.model, 48 this.model,
48 - this.uploadType}) 49 + this.uploadType,
  50 + this.callbackDelete})
49 : super(key: key); 51 : super(key: key);
50 52
51 @override 53 @override
@@ -118,6 +120,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { @@ -118,6 +120,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
118 temp = widget.model.imageList; 120 temp = widget.model.imageList;
119 } else if (widget.uploadType == UploadType.StoreFrontUploadType) { 121 } else if (widget.uploadType == UploadType.StoreFrontUploadType) {
120 temp = widget.model.imageListFront; 122 temp = widget.model.imageListFront;
  123 + } else if (widget.uploadType == UploadType.EnvironmentUploadType) {
  124 + temp = widget.model.imageListDenvironment;
  125 + } else if (widget.uploadType == UploadType.TableManagerType) {
  126 + temp = widget.model.tableImageList;
121 } 127 }
122 128
123 /// context is required, other params is optional. 129 /// context is required, other params is optional.
@@ -402,6 +408,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { @@ -402,6 +408,10 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
402 temp = widget.model.imageList; 408 temp = widget.model.imageList;
403 } else if (widget.uploadType == UploadType.StoreFrontUploadType) { 409 } else if (widget.uploadType == UploadType.StoreFrontUploadType) {
404 temp = widget.model.imageListFront; 410 temp = widget.model.imageListFront;
  411 + } else if (widget.uploadType == UploadType.EnvironmentUploadType) {
  412 + temp = widget.model.imageListDenvironment;
  413 + } else if (widget.uploadType == UploadType.TableManagerType) {
  414 + temp = widget.model.tableImageList;
405 } 415 }
406 return _getGridImg( 416 return _getGridImg(
407 temp.length < widget.maxImageNumber ? temp.length + 1 : temp.length, 417 temp.length < widget.maxImageNumber ? temp.length + 1 : temp.length,
@@ -423,9 +433,9 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { @@ -423,9 +433,9 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
423 //横轴元素个数 433 //横轴元素个数
424 crossAxisCount: 3, 434 crossAxisCount: 3,
425 //纵轴间距 435 //纵轴间距
426 - mainAxisSpacing: ScreenUtil().setWidth(30), 436 + mainAxisSpacing: ScreenUtil().setWidth(40),
427 //横轴间距 437 //横轴间距
428 - crossAxisSpacing: ScreenUtil().setWidth(30), 438 + crossAxisSpacing: ScreenUtil().setWidth(36),
429 //子组件宽高长度比例 439 //子组件宽高长度比例
430 childAspectRatio: 1.0), 440 childAspectRatio: 1.0),
431 itemBuilder: (BuildContext context, int index) { 441 itemBuilder: (BuildContext context, int index) {
@@ -490,15 +500,21 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { @@ -490,15 +500,21 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
490 Stack( 500 Stack(
491 // alignment: Alignment.topRight, 501 // alignment: Alignment.topRight,
492 children: [ 502 children: [
493 - Container(  
494 - color: Colors.red,  
495 - child: Image.file(  
496 - temp[index].file,  
497 - fit: BoxFit.cover,  
498 - width: ScreenUtil().setWidth(100 * 2),  
499 - height: ScreenUtil().setWidth(100 * 2),  
500 - ),  
501 - ), 503 + temp[index].file != null
  504 + ? Container(
  505 + child: Image.file(
  506 + temp[index].file,
  507 + fit: BoxFit.cover,
  508 + width: ScreenUtil().setWidth(100 * 2),
  509 + height: ScreenUtil().setWidth(100 * 2),
  510 + ),
  511 + )
  512 + : Image.network(
  513 + temp[index].qiniuUrl,
  514 + fit: BoxFit.cover,
  515 + width: ScreenUtil().setWidth(100 * 2),
  516 + height: ScreenUtil().setWidth(100 * 2),
  517 + ),
502 Offstage( 518 Offstage(
503 offstage: temp[index].process < 1, 519 offstage: temp[index].process < 1,
504 child: Align( 520 child: Align(
@@ -510,16 +526,55 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> { @@ -510,16 +526,55 @@ class _ImgPickerWidgetState extends DisposableState<ImgPickerWidget> {
510 height: ScreenUtil().setWidth(40), 526 height: ScreenUtil().setWidth(40),
511 ), 527 ),
512 onTap: () { 528 onTap: () {
513 - //点击删除按钮  
514 - setState(() {  
515 - temp.removeWhere(  
516 - (element) => element == temp[index]);  
517 - widget.model.imageQiniuUrlList  
518 - .removeWhere((element) =>  
519 - element ==  
520 - widget.model  
521 - .imageQiniuUrlList[index]);  
522 - }); 529 + if (widget.uploadType ==
  530 + UploadType.TableManagerType) {
  531 + if (temp[index].isUpload) {
  532 + //已经传到服务器,弹提醒窗口,是否删除
  533 + //修改之前有内容,则弹框
  534 + DialogUtil.cupertinoAlertDialog(context,
  535 + title: "确认删除",
  536 + content: "是否确定删除该照片,删除操作不可逆转,请谨慎操作",
  537 + lCallback: () {
  538 + print("取消");
  539 + }, rCallback: () {
  540 + print("确定");
  541 + widget.callbackDelete();
  542 + setState(() {
  543 + temp.removeWhere((element) =>
  544 + element == temp[index]);
  545 + widget.model.imageQiniuUrlList
  546 + .removeWhere((element) =>
  547 + element ==
  548 + widget.model
  549 + .imageQiniuUrlList[
  550 + index]);
  551 + });
  552 + });
  553 + } else {
  554 + //直接删除
  555 + setState(() {
  556 + temp.removeWhere((element) =>
  557 + element == temp[index]);
  558 + widget.model.imageQiniuUrlList
  559 + .removeWhere((element) =>
  560 + element ==
  561 + widget.model
  562 + .imageQiniuUrlList[
  563 + index]);
  564 + });
  565 + }
  566 + } else {
  567 + //点击删除按钮
  568 + setState(() {
  569 + temp.removeWhere((element) =>
  570 + element == temp[index]);
  571 + widget.model.imageQiniuUrlList
  572 + .removeWhere((element) =>
  573 + element ==
  574 + widget.model
  575 + .imageQiniuUrlList[index]);
  576 + });
  577 + }
523 }, 578 },
524 )), 579 )),
525 ), 580 ),
@@ -253,6 +253,7 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -253,6 +253,7 @@ class TableManagerPageState extends State<TableManagerPage> {
253 table), 253 table),
254 ""); 254 "");
255 break; 255 break;
  256 +
256 case 3: //停用,启用桌位 257 case 3: //停用,启用桌位
257 Map<String, String> params = { 258 Map<String, String> params = {
258 "id": (table as t.Table).id, 259 "id": (table as t.Table).id,
@@ -297,6 +298,11 @@ class TableManagerPageState extends State<TableManagerPage> { @@ -297,6 +298,11 @@ class TableManagerPageState extends State<TableManagerPage> {
297 } 298 }
298 }); 299 });
299 break; 300 break;
  301 + case 4: //照片管理
  302 + NavigatorUtil.goTablePhotoManagerPage(context,
  303 + tid: (table as t.Table).id,
  304 + tname: (table as t.Table).name);
  305 + break;
300 } 306 }
301 } 307 }
302 }); 308 });
  1 +import 'dart:convert';
  2 +
  3 +import 'package:flutter/material.dart';
  4 +import 'package:flutter_screenutil/screenutil.dart';
  5 +import 'package:one_key/models/table_photo_model.dart';
  6 +import 'package:one_key/models/upload_img_model.dart';
  7 +import 'package:one_key/pages/online_check/img_picker_widget.dart';
  8 +import 'package:one_key/provider/table_photo_anager_provider.dart';
  9 +import 'package:one_key/provider/upload_img_provider.dart';
  10 +import 'package:one_key/provider/user_model.dart';
  11 +import 'package:one_key/res/colors.dart';
  12 +import 'package:one_key/route/navigator_util.dart';
  13 +import 'package:one_key/utils/upload_image_util.dart';
  14 +import 'package:one_key/utils/utils.dart';
  15 +import 'package:one_key/widgets/round_button.dart';
  16 +import 'package:one_key/widgets/system_app_bar.dart';
  17 +import 'package:one_key/widgets/v_empty_view.dart';
  18 +import 'package:provider/provider.dart';
  19 +
  20 +class TablePhotoManagerPage extends StatefulWidget {
  21 + final String tid;
  22 + final String tname;
  23 + TablePhotoManagerPage({Key key, this.tid, this.tname}) : super(key: key);
  24 +
  25 + @override
  26 + _TablePhotoManagerPageState createState() => _TablePhotoManagerPageState();
  27 +}
  28 +
  29 +class _TablePhotoManagerPageState extends State<TablePhotoManagerPage> {
  30 + ScrollController _controller = ScrollController();
  31 + UploadImageProvider _uploadImageProvider;
  32 + TablePhotoManagerModel _tablePhotoManagerModel;
  33 +
  34 + @override
  35 + void initState() {
  36 + super.initState();
  37 + WidgetsBinding.instance.addPostFrameCallback((_) {
  38 + _getTablePhoto(context);
  39 + _getQiniuInfo();
  40 + });
  41 + }
  42 +
  43 + ///获取七牛云token
  44 + ///
  45 + _getQiniuInfo() async {
  46 + await _uploadImageProvider.getQiniuInfo(context, {});
  47 + }
  48 +
  49 + ///设置桌子图片
  50 + ///
  51 + _setTablePhoto(BuildContext context, List tablePhoto) async {
  52 + Map<String, String> params = {
  53 + "sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
  54 + "tableid": widget.tid,
  55 + "photoList": jsonEncode(tablePhoto)
  56 + };
  57 + print(_uploadImageProvider.tableImageList);
  58 + List<TablePhotoSunModel> tablePhotoList =
  59 + await _tablePhotoManagerModel.setTablePhoto(context, params);
  60 + if (tablePhotoList.length > 0) {
  61 + //已经进来,上传过图片
  62 + for (int i = 0; i < tablePhotoList.length; i++) {
  63 + for (int j = 0; j < _uploadImageProvider.tableImageList.length; j++) {
  64 + if (_uploadImageProvider.tableImageList[j].qiniuUrl ==
  65 + tablePhotoList[i].url) {
  66 + _uploadImageProvider.tableImageList[j].isUpload = true;
  67 + _uploadImageProvider.tableImageList[j].photoID =
  68 + tablePhotoList[i].id;
  69 + }
  70 + }
  71 + }
  72 + }
  73 +
  74 + print(_uploadImageProvider.tableImageList);
  75 + _uploadImageProvider.notifyListeners();
  76 + }
  77 +
  78 + ///获取桌位图片
  79 + _getTablePhoto(BuildContext context) async {
  80 + Map<String, String> params = {
  81 + "sellerid": Provider.of<UserModel>(context, listen: false).user.sellerid,
  82 + "tableid": widget.tid,
  83 + };
  84 + List<TablePhotoSunModel> tablePhotoList =
  85 + await _tablePhotoManagerModel.getTablePhoto(context, params);
  86 + if (tablePhotoList.length > 0) {
  87 + print(_uploadImageProvider.tableImageList);
  88 + for (int i = 0; i < tablePhotoList.length; i++) {
  89 + UploadImgModel model = UploadImgModel();
  90 + model.qiniuUrl = tablePhotoList[i].url;
  91 + model.isUpload = true;
  92 + model.photoID = tablePhotoList[i].id;
  93 + model.process = 1;
  94 + _uploadImageProvider.tableImageList.add(model);
  95 + }
  96 + _uploadImageProvider.notifyListeners();
  97 + }
  98 + }
  99 +
  100 + @override
  101 + void dispose() {
  102 + super.dispose();
  103 + _uploadImageProvider.tableImageList = [];
  104 + }
  105 +
  106 + @override
  107 + Widget build(BuildContext context) {
  108 + print(widget.tid);
  109 + _uploadImageProvider =
  110 + Provider.of<UploadImageProvider>(context, listen: true);
  111 + _tablePhotoManagerModel =
  112 + Provider.of<TablePhotoManagerModel>(context, listen: true);
  113 + return Scaffold(
  114 + backgroundColor: Colors.white,
  115 + appBar: SystemAppBar(
  116 + '照片管理',
  117 + onTap: () {
  118 + Navigator.pop(context);
  119 + },
  120 + ),
  121 + body: InkWell(
  122 + onTap: () {
  123 + FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
  124 + },
  125 + child: Container(
  126 + padding: EdgeInsets.symmetric(
  127 + horizontal: ScreenUtil().setWidth(40),
  128 + ),
  129 + child: Column(children: [
  130 + Container(
  131 + decoration: BoxDecoration(
  132 + border: Border(
  133 + bottom: BorderSide(
  134 + width: ScreenUtil().setWidth(2),
  135 + color: MyColours.color_f5f5f5))),
  136 + height: ScreenUtil().setWidth(100),
  137 + child: Row(
  138 + mainAxisAlignment: MainAxisAlignment.spaceBetween,
  139 + children: [
  140 + Text('当前桌位:${widget.tname}',
  141 + style: TextStyle(
  142 + color: MyColours.color_333333,
  143 + fontSize: ScreenUtil().setSp(32),
  144 + fontWeight: FontWeight.bold)),
  145 + Text('切换桌位',
  146 + style: TextStyle(
  147 + color: MyColours.color_199095,
  148 + fontSize: ScreenUtil().setSp(32))),
  149 + ],
  150 + )),
  151 + Expanded(
  152 + child: SingleChildScrollView(
  153 + controller: _controller,
  154 + child: Column(
  155 + crossAxisAlignment: CrossAxisAlignment.start,
  156 + children: [
  157 + VEmptyView(60),
  158 + Consumer<UploadImageProvider>(
  159 + builder: (context, model, _) {
  160 + return ImgPickerWidget(
  161 + scrollController: _controller,
  162 + model: model,
  163 + maxImageNumber: 5,
  164 + uploadType: UploadType.TableManagerType,
  165 + callbackDelete: () {
  166 + //调用删除桌子图片接口
  167 + },
  168 + );
  169 + }),
  170 + ]))),
  171 + RoundButton(
  172 + text: '确定上传',
  173 + gradientStart: MyColours.color_199095,
  174 + gradientEnd: MyColours.color_199095,
  175 + // borderColor: MyColours.color_999999,
  176 + radius: ScreenUtil().setWidth(10),
  177 + fontSize: 34,
  178 + height: ScreenUtil().setWidth(80),
  179 + isBold: false,
  180 + onPressed: () {
  181 + for (UploadImgModel item
  182 + in _uploadImageProvider.tableImageList) {
  183 + if (item.process < 1) {
  184 + Utils.showToast('正在上传图片,请稍等');
  185 + return;
  186 + }
  187 + }
  188 + //接口,和桌子绑定
  189 + List imageQiniuUrlList = [];
  190 + for (int i = 0;
  191 + i < _uploadImageProvider.tableImageList.length;
  192 + i++) {
  193 + if (!_uploadImageProvider.tableImageList[i].isUpload) {
  194 + imageQiniuUrlList.add({
  195 + "url":
  196 + _uploadImageProvider.tableImageList[i].qiniuUrl
  197 + });
  198 + }
  199 + }
  200 + _setTablePhoto(context, imageQiniuUrlList);
  201 + },
  202 + )
  203 + ]))));
  204 + }
  205 +}
  206 +
  207 +//
  1 +import 'package:flutter/material.dart';
  2 +import 'package:one_key/constant/constant.dart';
  3 +import 'package:one_key/constant/error.dart';
  4 +import 'package:one_key/models/table_photo_model.dart';
  5 +import 'package:one_key/net/base_resp.dart';
  6 +import 'package:one_key/net/dio_util.dart';
  7 +import 'package:one_key/net/http_url.dart';
  8 +import 'package:one_key/utils/utils.dart';
  9 +
  10 +class TablePhotoManagerModel with ChangeNotifier {
  11 + ///App设置桌位关联图片
  12 + Future<dynamic> setTablePhoto(
  13 + BuildContext context, Map<String, String> params,
  14 + {isShowLoading = true}) async {
  15 + BaseResp<dynamic> baseResp = await DioUtil()
  16 + .request<dynamic>(context, Method.get, HttpUrl.set_table_photo,
  17 + data: params, showLoading: isShowLoading)
  18 + .catchError((error) {
  19 + print(error.toString());
  20 + if (error is MyError) {}
  21 + return [];
  22 + });
  23 + if (baseResp.code == Constant.status_success) {
  24 + if (baseResp.data != null) {
  25 + // coupons = baseResp.data['aid'].split('');
  26 + Utils.showToast("设置桌位图片成功!");
  27 + return TablePhotoModel.fromJson(baseResp.responseData).data;
  28 + } else {
  29 + // Utils.showToast(baseResp.msg ?? "修改失败");
  30 + return [];
  31 + }
  32 + } else {
  33 + if (baseResp != null) {
  34 + // Utils.showToast(baseResp.msg ?? "");
  35 + }
  36 + return [];
  37 + }
  38 + }
  39 +
  40 + ///App获取桌位关联图片
  41 + Future<dynamic> getTablePhoto(
  42 + BuildContext context, Map<String, String> params,
  43 + {isShowLoading = true}) async {
  44 + BaseResp<dynamic> baseResp = await DioUtil()
  45 + .request<dynamic>(context, Method.get, HttpUrl.get_table_photo,
  46 + data: params, showLoading: isShowLoading)
  47 + .catchError((error) {
  48 + print(error.toString());
  49 + if (error is MyError) {}
  50 + });
  51 + if (baseResp.code == Constant.status_success) {
  52 + if (baseResp.data == null) {
  53 + } else {
  54 + return TablePhotoModel.fromJson(baseResp.responseData).data;
  55 + }
  56 + } else {
  57 + if (baseResp != null) {
  58 + Utils.showToast(baseResp.msg ?? "");
  59 + }
  60 + return [];
  61 + }
  62 + }
  63 +}
@@ -13,7 +13,7 @@ import 'package:one_key/utils/utils.dart'; @@ -13,7 +13,7 @@ import 'package:one_key/utils/utils.dart';
13 13
14 class UploadImageProvider extends ChangeNotifier { 14 class UploadImageProvider extends ChangeNotifier {
15 List<UploadImgModel> imageList = []; //图片信息列表 15 List<UploadImgModel> imageList = []; //图片信息列表
16 - List<String> imageQiniuUrlList = []; //七牛云地址列表 16 + List<dynamic> imageQiniuUrlList = []; //七牛云地址列表
17 QiniuInfoSunModel qiniuInfoSunModel; 17 QiniuInfoSunModel qiniuInfoSunModel;
18 UploadImgModel touxiang = UploadImgModel(); //头像 18 UploadImgModel touxiang = UploadImgModel(); //头像
19 UploadImgModel erweima = UploadImgModel(); //二维码 19 UploadImgModel erweima = UploadImgModel(); //二维码
@@ -21,6 +21,7 @@ class UploadImageProvider extends ChangeNotifier { @@ -21,6 +21,7 @@ class UploadImageProvider extends ChangeNotifier {
21 double imgSizeErweima = 22; 21 double imgSizeErweima = 22;
22 List<UploadImgModel> imageListDenvironment = []; //环境信息列表 22 List<UploadImgModel> imageListDenvironment = []; //环境信息列表
23 List<UploadImgModel> imageListFront = []; //门头信息列表 23 List<UploadImgModel> imageListFront = []; //门头信息列表
  24 + List<UploadImgModel> tableImageList = []; //桌子管理图片信息列表
24 UploadImageProvider() { 25 UploadImageProvider() {
25 touxiang.process = 0.01; 26 touxiang.process = 0.01;
26 erweima.process = 0.01; 27 erweima.process = 0.01;
@@ -41,7 +41,7 @@ class NavigatorUtil { @@ -41,7 +41,7 @@ class NavigatorUtil {
41 } 41 }
42 42
43 /// 订单详情 43 /// 订单详情
44 - static void goNotebookDetailPage(BuildContext context, String rid,String uid, 44 + static void goNotebookDetailPage(BuildContext context, String rid, String uid,
45 {String mid = "", bool fromNotify = false, replace = false}) { 45 {String mid = "", bool fromNotify = false, replace = false}) {
46 _navigateTo(context, 46 _navigateTo(context,
47 "${Routes.reserve_detail}?rid=$rid&mid=$mid&uid=$uid&fromNotify=$fromNotify", 47 "${Routes.reserve_detail}?rid=$rid&mid=$mid&uid=$uid&fromNotify=$fromNotify",
@@ -307,4 +307,12 @@ class NavigatorUtil { @@ -307,4 +307,12 @@ class NavigatorUtil {
307 {replace = false, IntegralSunModel sunModel}) { 307 {replace = false, IntegralSunModel sunModel}) {
308 return _navigateTo(context, "${Routes.my_contant_page}", replace: replace); 308 return _navigateTo(context, "${Routes.my_contant_page}", replace: replace);
309 } 309 }
  310 +
  311 + /// 桌位照片管理
  312 + static Future<dynamic> goTablePhotoManagerPage(BuildContext context,
  313 + {replace = false, String tid, String tname}) {
  314 + return _navigateTo(context,
  315 + "${Routes.table_photo_manager}?tid=${tid}&tname=${Uri.encodeComponent(tname)}",
  316 + replace: replace);
  317 + }
310 } 318 }
@@ -43,6 +43,7 @@ import 'package:one_key/pages/online_check/online_check_detail_page.dart'; @@ -43,6 +43,7 @@ import 'package:one_key/pages/online_check/online_check_detail_page.dart';
43 import 'package:one_key/pages/online_check/online_check_edit_page.dart'; 43 import 'package:one_key/pages/online_check/online_check_edit_page.dart';
44 import 'package:one_key/pages/sms/sms_page.dart'; 44 import 'package:one_key/pages/sms/sms_page.dart';
45 import 'package:one_key/pages/table/select_table_page.dart'; 45 import 'package:one_key/pages/table/select_table_page.dart';
  46 +import 'package:one_key/pages/table/table_photo_manager_page.dart';
46 import 'package:one_key/pages/webview/webview_page.dart'; 47 import 'package:one_key/pages/webview/webview_page.dart';
47 import 'package:one_key/provider/base_info_provider.dart'; 48 import 'package:one_key/provider/base_info_provider.dart';
48 import 'package:one_key/provider/book_set_time_model.dart'; 49 import 'package:one_key/provider/book_set_time_model.dart';
@@ -55,6 +56,7 @@ import 'package:one_key/provider/notebook_detail_model.dart'; @@ -55,6 +56,7 @@ import 'package:one_key/provider/notebook_detail_model.dart';
55 import 'package:one_key/provider/order_food_provider.dart'; 56 import 'package:one_key/provider/order_food_provider.dart';
56 import 'package:one_key/provider/other_login_provider.dart'; 57 import 'package:one_key/provider/other_login_provider.dart';
57 import 'package:one_key/provider/remark_manager_model.dart'; 58 import 'package:one_key/provider/remark_manager_model.dart';
  59 +import 'package:one_key/provider/table_photo_anager_provider.dart';
58 import 'package:one_key/provider/upload_img_provider.dart'; 60 import 'package:one_key/provider/upload_img_provider.dart';
59 import 'package:one_key/utils/fluro_convert_utils.dart'; 61 import 'package:one_key/utils/fluro_convert_utils.dart';
60 import 'package:provider/provider.dart'; 62 import 'package:provider/provider.dart';
@@ -451,3 +453,17 @@ var myContantPageHandler = new Handler( @@ -451,3 +453,17 @@ var myContantPageHandler = new Handler(
451 return ChangeNotifierProvider<ContantShowModel>( 453 return ChangeNotifierProvider<ContantShowModel>(
452 create: (_) => ContantShowModel(), child: ContactListPage()); 454 create: (_) => ContantShowModel(), child: ContactListPage());
453 }); 455 });
  456 +
  457 +///桌位照片管理
  458 +var tablePhotoManagerHandler = new Handler(
  459 + handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
  460 + // CouponSunModel couponSunModel = CouponSunModel.fromJson(json.decode(
  461 + // FluroConvertUtils.fluroCnParamsDecode(params["couponSunModel"].first)));
  462 + String tid = params["tid"].first;
  463 + String tname = params["tname"].first;
  464 + return ChangeNotifierProvider<TablePhotoManagerModel>(
  465 + create: (_) => TablePhotoManagerModel(),
  466 + child: TablePhotoManagerPage(tid: tid, tname: tname));
  467 + // return ChangeNotifierProvider<UploadImageProvider>(
  468 + // create: (_) => UploadImageProvider(), child: EnterStoreFrontPhotoPage());
  469 +});
@@ -43,7 +43,7 @@ class Routes { @@ -43,7 +43,7 @@ class Routes {
43 static String complete_create_store = "/complete_create_store"; //创建店铺完成 43 static String complete_create_store = "/complete_create_store"; //创建店铺完成
44 static String my_integral_page = "/my_integral_page"; //我的积分 44 static String my_integral_page = "/my_integral_page"; //我的积分
45 static String my_contant_page = "/my_contant_page"; //我的联系人 45 static String my_contant_page = "/my_contant_page"; //我的联系人
46 - 46 + static String table_photo_manager = "/table_photo_manager"; //桌位照片管理
47 47
48 static void configureRoutes(FluroRouter router) { 48 static void configureRoutes(FluroRouter router) {
49 router.notFoundHandler = new Handler( 49 router.notFoundHandler = new Handler(
@@ -92,11 +92,8 @@ class Routes { @@ -92,11 +92,8 @@ class Routes {
92 handler: enterStoreEnvironmentPageHandler); 92 handler: enterStoreEnvironmentPageHandler);
93 router.define(complete_create_store, 93 router.define(complete_create_store,
94 handler: completeCreateStorePageHandler); 94 handler: completeCreateStorePageHandler);
95 - router.define(my_integral_page,  
96 - handler: myIntegralPageHandler);  
97 - router.define(my_contant_page,  
98 - handler: myContantPageHandler);  
99 -  
100 - 95 + router.define(my_integral_page, handler: myIntegralPageHandler);
  96 + router.define(my_contant_page, handler: myContantPageHandler);
  97 + router.define(table_photo_manager, handler: tablePhotoManagerHandler);
101 } 98 }
102 } 99 }
@@ -1437,6 +1437,11 @@ class DialogUtil { @@ -1437,6 +1437,11 @@ class DialogUtil {
1437 ], 1437 ],
1438 ), 1438 ),
1439 ), 1439 ),
  1440 + Container(
  1441 + width: double.infinity,
  1442 + height: ScreenUtil().setWidth(2),
  1443 + color: MyColours.color_e5e5e5,
  1444 + ),
1440 GestureDetector( 1445 GestureDetector(
1441 behavior: HitTestBehavior.opaque, 1446 behavior: HitTestBehavior.opaque,
1442 onTap: () { 1447 onTap: () {
@@ -1456,6 +1461,28 @@ class DialogUtil { @@ -1456,6 +1461,28 @@ class DialogUtil {
1456 )), 1461 )),
1457 Container( 1462 Container(
1458 width: double.infinity, 1463 width: double.infinity,
  1464 + height: ScreenUtil().setWidth(2),
  1465 + color: MyColours.color_e5e5e5,
  1466 + ),
  1467 + GestureDetector(
  1468 + behavior: HitTestBehavior.opaque,
  1469 + onTap: () {
  1470 + Navigator.of(context).pop(4);
  1471 + },
  1472 + child: Container(
  1473 + width: double.infinity,
  1474 + alignment: Alignment.center,
  1475 + padding: EdgeInsets.symmetric(
  1476 + vertical: ScreenUtil().setWidth(40)),
  1477 + child: Text(
  1478 + "照片管理",
  1479 + style: TextStyle(
  1480 + fontSize: ScreenUtil().setSp(34),
  1481 + color: MyColours.color_353535),
  1482 + ),
  1483 + )),
  1484 + Container(
  1485 + width: double.infinity,
1459 height: ScreenUtil().setWidth(10), 1486 height: ScreenUtil().setWidth(10),
1460 color: MyColours.color_e5e5e5, 1487 color: MyColours.color_e5e5e5,
1461 ), 1488 ),
@@ -14,6 +14,7 @@ enum UploadType { @@ -14,6 +14,7 @@ enum UploadType {
14 StoreFrontUploadType, //门头 14 StoreFrontUploadType, //门头
15 HeadUploadType, //头像 15 HeadUploadType, //头像
16 QrcodeUploadType, //二维码 16 QrcodeUploadType, //二维码
  17 + TableManagerType, //桌面照片管理
17 18
18 } 19 }
19 20
@@ -59,6 +60,9 @@ class UploadImageUtil { @@ -59,6 +60,9 @@ class UploadImageUtil {
59 } else if (uploadType == UploadType.ConsumptionUploadType) { 60 } else if (uploadType == UploadType.ConsumptionUploadType) {
60 //消费清单 61 //消费清单
61 uploadImageProvider.imageList[index].process = percent; 62 uploadImageProvider.imageList[index].process = percent;
  63 + } else if (uploadType == UploadType.TableManagerType) {
  64 + //桌面照片管理
  65 + uploadImageProvider.tableImageList[index].process = percent;
62 } 66 }
63 67
64 uploadImageProvider.notifyListeners(); 68 uploadImageProvider.notifyListeners();
@@ -104,6 +108,11 @@ class UploadImageUtil { @@ -104,6 +108,11 @@ class UploadImageUtil {
104 //消费清单 108 //消费清单
105 uploadImageProvider.imageList[index].process = 1; 109 uploadImageProvider.imageList[index].process = 1;
106 uploadImageProvider.imageList[index].qiniuUrl = imgUrl; 110 uploadImageProvider.imageList[index].qiniuUrl = imgUrl;
  111 + } else if (uploadType == UploadType.TableManagerType) {
  112 + //桌面照片管理
  113 + uploadImageProvider.tableImageList[index].process = 1;
  114 + uploadImageProvider.tableImageList[index].qiniuUrl = imgUrl;
  115 + uploadImageProvider.tableImageList[index].isUpload = false;
107 } 116 }
108 117
109 // 取消当前任务 118 // 取消当前任务
@@ -71,14 +71,15 @@ class TableItemState extends State<TableItem> { @@ -71,14 +71,15 @@ class TableItemState extends State<TableItem> {
71 } 71 }
72 } 72 }
73 } 73 }
74 - } else if (widget.fromPage == 'new' && widget.canSelected && signStr.isEmpty) { 74 + } else if (widget.fromPage == 'new' &&
  75 + widget.canSelected &&
  76 + signStr.isEmpty) {
75 //从安排桌位进来 77 //从安排桌位进来
76 setState(() { 78 setState(() {
77 table.selected = !(table.selected ?? false); 79 table.selected = !(table.selected ?? false);
78 }); 80 });
79 widget.onSelected(table); 81 widget.onSelected(table);
80 - }  
81 - else if (widget.fromPage == 'table_manage'){ 82 + } else if (widget.fromPage == 'table_manage') {
82 table.selected = !(table.selected ?? false); 83 table.selected = !(table.selected ?? false);
83 widget.onSelected(table); 84 widget.onSelected(table);
84 } 85 }
@@ -245,6 +246,16 @@ class TableItemState extends State<TableItem> { @@ -245,6 +246,16 @@ class TableItemState extends State<TableItem> {
245 width: ScreenUtil().setWidth(40), 246 width: ScreenUtil().setWidth(40),
246 height: ScreenUtil().setWidth(40), 247 height: ScreenUtil().setWidth(40),
247 ) 248 )
  249 + : Container()),
  250 + Positioned(
  251 + left: ScreenUtil().setWidth(8),
  252 + bottom: ScreenUtil().setWidth(16),
  253 + child: table.isPhoto == 1
  254 + ? Image.asset(
  255 + "assets/photo.png",
  256 + width: ScreenUtil().setWidth(40),
  257 + height: ScreenUtil().setWidth(40),
  258 + )
248 : Container()) 259 : Container())
249 ], 260 ],
250 ), 261 ),