Commit 0e2fc0ab7980fea183dfc78414978aa5a3508b17

Authored by wdn127929
1 parent d887e3bc

首图+预订信息 接口提交

@@ -361,4 +361,10 @@ class HttpUrl { @@ -361,4 +361,10 @@ class HttpUrl {
361 static const String set_clear_Message = 361 static const String set_clear_Message =
362 "?service=App.PushMsg.SetClearMessage"; // App设置消息处理状态、清理过期消息 362 "?service=App.PushMsg.SetClearMessage"; // App设置消息处理状态、清理过期消息
363 363
  364 + static const String set_seller_template_conf =
  365 + "?service=App.Seller.SetSellerTemplateConf"; // 商家设置预订安排模板页面
  366 +
  367 + static const String get_seller_template_conf =
  368 + "?service=App.Seller.GetSellerTemplateConf"; // 获取商家设置预订安排模板页面
  369 +
364 } 370 }
  1 +import 'dart:convert';
  2 +
1 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
2 import 'package:flutter_screenutil/flutter_screenutil.dart'; 4 import 'package:flutter_screenutil/flutter_screenutil.dart';
3 import 'package:one_key/utils/utils.dart'; 5 import 'package:one_key/utils/utils.dart';
@@ -8,6 +10,7 @@ import 'package:one_key/widgets/v_empty_view.dart'; @@ -8,6 +10,7 @@ import 'package:one_key/widgets/v_empty_view.dart';
8 import 'package:provider/provider.dart'; 10 import 'package:provider/provider.dart';
9 11
10 import '../../../../models/get_seller_info_model.dart'; 12 import '../../../../models/get_seller_info_model.dart';
  13 +import '../../../../provider/base_info_provider.dart';
11 import '../../../../provider/marketing_center_provider.dart'; 14 import '../../../../provider/marketing_center_provider.dart';
12 import '../../../../provider/store_base_info_provider.dart'; 15 import '../../../../provider/store_base_info_provider.dart';
13 import '../../../../provider/user_model.dart'; 16 import '../../../../provider/user_model.dart';
@@ -43,10 +46,15 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -43,10 +46,15 @@ class _BookInfoPageState extends State<BookInfoPage> {
43 MarketingCenterProvider marketingCenterProvider; 46 MarketingCenterProvider marketingCenterProvider;
44 String tableInfo; //包间信息 47 String tableInfo; //包间信息
45 48
46 - StoreBaseIndoProvider _baseIndoProvider; 49 + StoreBaseIndoProvider _storeBaseIndoProvider;
47 bool addManager = false; 50 bool addManager = false;
48 bool addParking = false; 51 bool addParking = false;
49 52
  53 + double dateValue;
  54 + BaseIndoProvider _baseIndoProvider;
  55 + String lat;
  56 + String long;
  57 +
50 @override 58 @override
51 void initState() { 59 void initState() {
52 super.initState(); 60 super.initState();
@@ -56,9 +64,43 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -56,9 +64,43 @@ class _BookInfoPageState extends State<BookInfoPage> {
56 64
57 await marketingCenterProvider.getTableList(context); 65 await marketingCenterProvider.getTableList(context);
58 await _getStoreBaseinfo(); 66 await _getStoreBaseinfo();
  67 + await _getCustomerActivityBaseinfo();
59 }); 68 });
60 } 69 }
61 70
  71 + _getCustomerActivityBaseinfo() async {
  72 + Map<String, String> params = {
  73 + 'sellerid': Provider.of<UserModel>(context, listen: false).user.sellerid,
  74 + "uid": Provider.of<UserModel>(context, listen: false).user.openid,
  75 + };
  76 +
  77 + bool success =
  78 + await _baseIndoProvider.getCustomerActivityBaseinfo(context, params);
  79 + if (success) {
  80 + // _nameController.text = _baseIndoProvider.baseInfoSunModel.name;
  81 + // nameStr = _baseIndoProvider.baseInfoSunModel.name;
  82 + // _uploadImageProvider.touxiang.qiniuUrl =
  83 + // _baseIndoProvider.baseInfoSunModel.photo;
  84 + // _uploadImageProvider.erweima.qiniuUrl =
  85 + // _baseIndoProvider.baseInfoSunModel.qrcode;
  86 + // _phoneController.text = _baseIndoProvider.baseInfoSunModel.phone;
  87 + // phoneStr = _baseIndoProvider.baseInfoSunModel.phone ?? '';
  88 + // _wechatController.text = _baseIndoProvider.baseInfoSunModel.wechat;
  89 + // if (_baseIndoProvider.baseInfoSunModel.wechat != null &&
  90 + // _baseIndoProvider.baseInfoSunModel.wechat != '' &&
  91 + // phoneStr != '' &&
  92 + // _baseIndoProvider.baseInfoSunModel.wechat == phoneStr) {
  93 + // isSelect = true;
  94 + // } else {
  95 + // isSelect = false;
  96 + // }
  97 + // _positionController.text = _baseIndoProvider.baseInfoSunModel.position;
  98 + // _uploadImageProvider.imgSizeErweima = 64;
  99 + // // setState(() {});
  100 + // _uploadImageProvider.notifyListeners();
  101 + }
  102 + }
  103 +
62 Widget _item(String title, {bool select, GestureTapCallback onTap}) { 104 Widget _item(String title, {bool select, GestureTapCallback onTap}) {
63 return InkWell( 105 return InkWell(
64 onTap: onTap, 106 onTap: onTap,
@@ -101,6 +143,8 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -101,6 +143,8 @@ class _BookInfoPageState extends State<BookInfoPage> {
101 143
102 DateTime dateTime = DateTime.now(); 144 DateTime dateTime = DateTime.now();
103 145
  146 + dateValue = (dateTime.millisecondsSinceEpoch) / 1000;
  147 +
104 date = Utils.returnYMDandLunarCalendar(DateTime.now(), context); 148 date = Utils.returnYMDandLunarCalendar(DateTime.now(), context);
105 149
106 String morning = 150 String morning =
@@ -160,6 +204,9 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -160,6 +204,9 @@ class _BookInfoPageState extends State<BookInfoPage> {
160 //日期增加一天 204 //日期增加一天
161 date = Utils.returnYMDandLunarCalendar( 205 date = Utils.returnYMDandLunarCalendar(
162 dateTime.add(Duration(days: 1)), context); 206 dateTime.add(Duration(days: 1)), context);
  207 +
  208 + dateValue =
  209 + (dateTime.add(Duration(days: 1)).millisecondsSinceEpoch) / 1000;
163 } else { 210 } else {
164 //过了晚市 211 //过了晚市
165 dsolt = '早餐'; 212 dsolt = '早餐';
@@ -173,8 +220,10 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -173,8 +220,10 @@ class _BookInfoPageState extends State<BookInfoPage> {
173 ///获取店铺信息 220 ///获取店铺信息
174 _getStoreBaseinfo() async { 221 _getStoreBaseinfo() async {
175 GetSellerInfoSunModel itemModel = 222 GetSellerInfoSunModel itemModel =
176 - await _baseIndoProvider.getSellerById(context); 223 + await _storeBaseIndoProvider.getSellerById(context);
177 if (itemModel != null) { 224 if (itemModel != null) {
  225 + lat = itemModel.data.lat;
  226 + long = itemModel.data.long;
178 address = itemModel.data.mapAddress + itemModel.data.realAddress; 227 address = itemModel.data.mapAddress + itemModel.data.realAddress;
179 setState(() {}); 228 setState(() {});
180 // _introductionController.text = itemModel.data.sellerdesc; 229 // _introductionController.text = itemModel.data.sellerdesc;
@@ -224,9 +273,10 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -224,9 +273,10 @@ class _BookInfoPageState extends State<BookInfoPage> {
224 273
225 @override 274 @override
226 Widget build(BuildContext context) { 275 Widget build(BuildContext context) {
  276 + _baseIndoProvider = Provider.of<BaseIndoProvider>(context, listen: true);
227 marketingCenterProvider = 277 marketingCenterProvider =
228 Provider.of<MarketingCenterProvider>(context, listen: true); 278 Provider.of<MarketingCenterProvider>(context, listen: true);
229 - _baseIndoProvider = 279 + _storeBaseIndoProvider =
230 Provider.of<StoreBaseIndoProvider>(context, listen: false); 280 Provider.of<StoreBaseIndoProvider>(context, listen: false);
231 return Scaffold( 281 return Scaffold(
232 backgroundColor: MyColours.color_ffffff, 282 backgroundColor: MyColours.color_ffffff,
@@ -377,7 +427,14 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -377,7 +427,14 @@ class _BookInfoPageState extends State<BookInfoPage> {
377 ClipRRect( 427 ClipRRect(
378 borderRadius: BorderRadius.circular(r(35)), 428 borderRadius: BorderRadius.circular(r(35)),
379 child: Image.network( 429 child: Image.network(
380 - 'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg', 430 + _baseIndoProvider.baseInfoSunModel.photo ==
  431 + null ||
  432 + _baseIndoProvider
  433 + .baseInfoSunModel.photo ==
  434 + ''
  435 + ? 'http://nosqn.colorcun.com/yd_person.png'
  436 + : _baseIndoProvider
  437 + .baseInfoSunModel.photo,
381 fit: BoxFit.cover, 438 fit: BoxFit.cover,
382 width: w(70), 439 width: w(70),
383 height: w(70), 440 height: w(70),
@@ -388,7 +445,7 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -388,7 +445,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
388 crossAxisAlignment: CrossAxisAlignment.start, 445 crossAxisAlignment: CrossAxisAlignment.start,
389 children: [ 446 children: [
390 Text( 447 Text(
391 - '专属服务:${username}', 448 + '专属服务:${_baseIndoProvider.baseInfoSunModel.name}',
392 style: TextStyle( 449 style: TextStyle(
393 color: MyColours.color_999999, 450 color: MyColours.color_999999,
394 fontWeight: FontWeight.bold, 451 fontWeight: FontWeight.bold,
@@ -396,7 +453,7 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -396,7 +453,7 @@ class _BookInfoPageState extends State<BookInfoPage> {
396 ), 453 ),
397 VEmptyView(16), 454 VEmptyView(16),
398 Text( 455 Text(
399 - '专属服务:${userphone}', 456 + '服务电话:${_baseIndoProvider.baseInfoSunModel.phone}',
400 style: TextStyle( 457 style: TextStyle(
401 color: MyColours.color_999999, 458 color: MyColours.color_999999,
402 fontWeight: FontWeight.bold, 459 fontWeight: FontWeight.bold,
@@ -499,7 +556,60 @@ class _BookInfoPageState extends State<BookInfoPage> { @@ -499,7 +556,60 @@ class _BookInfoPageState extends State<BookInfoPage> {
499 fontSize: 34, 556 fontSize: 34,
500 height: w(40), 557 height: w(40),
501 isBold: true, 558 isBold: true,
502 - onPressed: () {}, 559 + onPressed: () async {
  560 + FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
  561 +
  562 + if (addParking && parkingIncoC.text.trim().length == 0) {
  563 + Utils.showToast('请输入停车信息!');
  564 + return false;
  565 + }
  566 +
  567 + //接口
  568 + Map reserveData = {
  569 + 'swich_manager': addManager ? '1' : '0',
  570 + 'swich_park': addParking ? '1' : '0',
  571 + 'park_info': parkingIncoC.text,
  572 + 'seller_name': sellername,
  573 + 'date': dateValue,
  574 + 'dsolt': dsolt,
  575 + 'room': marketingCenterProvider.tableOuterList.length > 0 &&
  576 + marketingCenterProvider
  577 + .tableOuterList[0].list.length >
  578 + 0
  579 + ? '${marketingCenterProvider.tableOuterList[0].name}${marketingCenterProvider.tableOuterList[0].list[0].name}}'
  580 + : '',
  581 + 'pnum':
  582 + '${marketingCenterProvider.tableOuterList[0].list[0].tableNum}',
  583 + 'address': '${address}',
  584 + 'seller_phone': '${sellerphone}',
  585 + 'manager_image':
  586 + _baseIndoProvider.baseInfoSunModel.photo == null ||
  587 + _baseIndoProvider.baseInfoSunModel.photo == ''
  588 + ? 'http://nosqn.colorcun.com/yd_person.png'
  589 + : _baseIndoProvider.baseInfoSunModel.photo,
  590 + 'manager_name': '${_baseIndoProvider.baseInfoSunModel.name}',
  591 + 'manager_phone':
  592 + '${_baseIndoProvider.baseInfoSunModel.phone}',
  593 + 'manager_wechat':
  594 + '${_baseIndoProvider.baseInfoSunModel.wechat}',
  595 + 'long': long,
  596 + 'lat': lat
  597 + };
  598 +
  599 + Map<String, String> params = {
  600 + 'sid': Provider.of<UserModel>(context, listen: false)
  601 + .user
  602 + .sellerid,
  603 + 'reserve': json.encode(reserveData)
  604 + };
  605 +
  606 + bool success = await marketingCenterProvider
  607 + .setSellerTemplateConf(context, params, showLoading: true);
  608 + if (success) {
  609 + Utils.showToast('保存成功');
  610 + Navigator.pop(context);
  611 + }
  612 + },
503 ), 613 ),
504 ) 614 )
505 ], 615 ],
  1 +import 'dart:convert';
  2 +import 'dart:io';
  3 +
1 import 'package:flutter/material.dart'; 4 import 'package:flutter/material.dart';
2 import 'package:flutter_screenutil/flutter_screenutil.dart'; 5 import 'package:flutter_screenutil/flutter_screenutil.dart';
  6 +import 'package:image_picker/image_picker.dart';
  7 +import 'package:one_key/provider/marketing_center_provider.dart';
3 import 'package:one_key/utils/dialog_util.dart'; 8 import 'package:one_key/utils/dialog_util.dart';
4 import 'package:one_key/utils/utils.dart'; 9 import 'package:one_key/utils/utils.dart';
5 import 'package:one_key/widgets/system_app_bar.dart'; 10 import 'package:one_key/widgets/system_app_bar.dart';
6 import 'package:one_key/widgets/v_empty_view.dart'; 11 import 'package:one_key/widgets/v_empty_view.dart';
  12 +import 'package:permission_handler/permission_handler.dart';
  13 +import 'package:provider/provider.dart';
7 14
8 import '../../../../app.dart'; 15 import '../../../../app.dart';
9 import '../../../../models/theme_color_model.dart'; 16 import '../../../../models/theme_color_model.dart';
  17 +import '../../../../models/upload_img_model.dart';
  18 +import '../../../../provider/upload_img_provider.dart';
  19 +import '../../../../provider/user_model.dart';
10 import '../../../../res/colors.dart'; 20 import '../../../../res/colors.dart';
11 import '../../../../utils/screen_util.dart'; 21 import '../../../../utils/screen_util.dart';
  22 +import '../../../../utils/upload_image_util.dart';
12 import '../../../../widgets/round_button.dart'; 23 import '../../../../widgets/round_button.dart';
  24 +import '../../../online_check/photo_view_wiget.dart';
13 25
14 /** 26 /**
15 * 首图形象展示 27 * 首图形象展示
@@ -32,6 +44,12 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -32,6 +44,12 @@ class _FirstImagePageState extends State<FirstImagePage> {
32 TextEditingController sloganC = TextEditingController(); 44 TextEditingController sloganC = TextEditingController();
33 FocusNode sloganNode = FocusNode(); 45 FocusNode sloganNode = FocusNode();
34 46
  47 + final picker = ImagePicker();
  48 +
  49 + UploadImageProvider _uploadImageProvider;
  50 +
  51 + MarketingCenterProvider _marketingCenterProvider;
  52 +
35 @override 53 @override
36 void initState() { 54 void initState() {
37 super.initState(); 55 super.initState();
@@ -179,9 +197,71 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -179,9 +197,71 @@ class _FirstImagePageState extends State<FirstImagePage> {
179 ))); 197 )));
180 } 198 }
181 199
  200 + //查看大图
  201 + _showPhotoView(BuildContext context, int index, List imgs,
  202 + {isShow = false, List dashName}) async {
  203 + // if (imgs.length == 1 &&
  204 + // imgs[0] ==
  205 + // 'http://nosqn.colorcun.com/custom/lite-online/image/def-banner.png') {
  206 + // imgs[0] = 'http://nosqn.colorcun.com/app/seller-hj-empty.png';
  207 + // }
  208 + Utils.setBarStatus(false, color: Colors.black);
  209 + dynamic result = await showGeneralDialog(
  210 + context: context,
  211 + barrierDismissible: false,
  212 + // barrierColor: Colors.red,
  213 + barrierLabel:
  214 + MaterialLocalizations.of(context).modalBarrierDismissLabel,
  215 + transitionDuration: const Duration(milliseconds: 150),
  216 + pageBuilder: (BuildContext context, Animation animation,
  217 + Animation secondaryAnimation) {
  218 + Widget child = Stack(
  219 + children: <Widget>[
  220 + PhotoPreview(
  221 + initialIndex: index,
  222 + photoList: imgs,
  223 + isShow: isShow,
  224 + dashName: dashName)
  225 + ],
  226 + );
  227 + return child;
  228 + });
  229 + Utils.setBarStatus(true, color: Colors.white);
  230 + }
  231 +
  232 + ///#相机拍照,单图选择
  233 + Future _getFromPictureOrCamera(UploadImgModel imgModel, imageSource) async {
  234 + final pickedFile = await picker.getImage(source: imageSource);
  235 + setState(() {
  236 + if (pickedFile != null) {
  237 + imgModel.file = File(pickedFile.path);
  238 + imgModel.process = 0.01;
  239 + } else {
  240 + print('No image selected.');
  241 + }
  242 + });
  243 + if (pickedFile != null) {
  244 + // if (title == '头像') {
  245 + // _uploadImageProvider.imgSizeTouxiang = 76;
  246 + // _uploadImageProvider.touxiang.qiniuUrl = null;
  247 + // } else {
  248 + // _uploadImageProvider.imgSizeErweima = 76;
  249 + _uploadImageProvider.firstImage.qiniuUrl = null;
  250 + // }
  251 + UploadImageUtil().startUploadOnly(
  252 + context, File(pickedFile.path), 4, true, _uploadImageProvider);
  253 + }
  254 + }
  255 +
182 @override 256 @override
183 Widget build(BuildContext context) { 257 Widget build(BuildContext context) {
184 ThemeColorModel themeColerModel = themeColorData[themeColorIndex]; 258 ThemeColorModel themeColerModel = themeColorData[themeColorIndex];
  259 + _uploadImageProvider =
  260 + Provider.of<UploadImageProvider>(context, listen: true);
  261 +
  262 + _marketingCenterProvider =
  263 + Provider.of<MarketingCenterProvider>(context, listen: true);
  264 +
185 return Scaffold( 265 return Scaffold(
186 backgroundColor: MyColours.color_ffffff, 266 backgroundColor: MyColours.color_ffffff,
187 appBar: SystemAppBar( 267 appBar: SystemAppBar(
@@ -203,8 +283,6 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -203,8 +283,6 @@ class _FirstImagePageState extends State<FirstImagePage> {
203 setState(() { 283 setState(() {
204 themeColorIndex = object; 284 themeColorIndex = object;
205 }); 285 });
206 - App.sp.setInt("themeColor",  
207 - themeColorData[themeColorIndex].color.value);  
208 }); 286 });
209 }), 287 }),
210 VEmptyView(24), 288 VEmptyView(24),
@@ -239,8 +317,9 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -239,8 +317,9 @@ class _FirstImagePageState extends State<FirstImagePage> {
239 height: w(39), 317 height: w(39),
240 child: TextField( 318 child: TextField(
241 maxLines: 1, 319 maxLines: 1,
242 - controller: sloganC,  
243 - focusNode: sloganNode, 320 + controller: titleC,
  321 + focusNode: titleNode,
  322 +
244 cursorColor: MyColours.color_F8F9FD, 323 cursorColor: MyColours.color_F8F9FD,
245 324
246 // autofocuzs: true, 325 // autofocuzs: true,
@@ -292,11 +371,11 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -292,11 +371,11 @@ class _FirstImagePageState extends State<FirstImagePage> {
292 height: w(39), 371 height: w(39),
293 child: TextField( 372 child: TextField(
294 maxLines: 1, 373 maxLines: 1,
295 - controller: titleC,  
296 - focusNode: titleNode, 374 +
297 // autofocus: true, 375 // autofocus: true,
298 cursorColor: MyColours.color_F8F9FD, 376 cursorColor: MyColours.color_F8F9FD,
299 - 377 + controller: sloganC,
  378 + focusNode: sloganNode,
300 style: TextStyle( 379 style: TextStyle(
301 fontSize: font(20), 380 fontSize: font(20),
302 foreground: Paint() 381 foreground: Paint()
@@ -340,37 +419,139 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -340,37 +419,139 @@ class _FirstImagePageState extends State<FirstImagePage> {
340 ], 419 ],
341 ), 420 ),
342 ), 421 ),
343 - InkWell(  
344 - onTap: () {},  
345 - child: true  
346 - ? InkWell(  
347 - onTap: () {  
348 - print('object'); 422 + _uploadImageProvider.firstImage.file != null ||
  423 + (_uploadImageProvider.firstImage.qiniuUrl != null &&
  424 + _uploadImageProvider.firstImage.qiniuUrl != '')
  425 + ? InkWell(
  426 + onTap: () {
  427 + double process;
  428 + String qiniuUrl;
  429 + List<String> tempList = [];
  430 + // if (title == '头像') {
  431 + process = _uploadImageProvider.firstImage.process;
  432 + qiniuUrl = _uploadImageProvider.firstImage.qiniuUrl;
  433 + // } else {
  434 + // process = _uploadImageProvider.erweima.process;
  435 + // qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
  436 + // }
  437 +
  438 + if (qiniuUrl != null && qiniuUrl != '') {
  439 + // tempList.add(qiniuUrl);
  440 +
  441 + // ///没有上传完成的不可以点击
  442 + // _showPhotoView(context, 0, tempList);
  443 +
  444 + _uploadImageProvider.firstImage.qiniuUrl = null;
  445 + _uploadImageProvider.firstImage.process = 0;
  446 + setState(() {});
  447 + Utils.getPickPermission(context, () {
  448 + _getFromPictureOrCamera(
  449 + _uploadImageProvider.firstImage,
  450 + ImageSource.gallery);
  451 + },
  452 + Platform.isAndroid
  453 + ? Permission.storage
  454 + : Permission.photos);
  455 + }
  456 + },
  457 + child:
  458 + Stack(alignment: Alignment.bottomCenter, children: [
  459 + Stack(clipBehavior: Clip.none, children: [
  460 + _uploadImageProvider.firstImage.qiniuUrl != null &&
  461 + _uploadImageProvider.firstImage.qiniuUrl !=
  462 + ''
  463 + ? Image.network(
  464 + _uploadImageProvider.firstImage.qiniuUrl,
  465 + fit: BoxFit.cover,
  466 + width: double.infinity,
  467 + // width: ScreenUtil()
  468 + // .setWidth(imgSize * 2),
  469 + height: ScreenUtil().setWidth(
  470 + _uploadImageProvider.imgSizefirstImage *
  471 + 2),
  472 + )
  473 + : Image.file(
  474 + _uploadImageProvider.firstImage.file,
  475 + fit: BoxFit.cover,
  476 + width: double.infinity,
  477 + // width: ScreenUtil()
  478 + // .setWidth(imgSize * 2),
  479 + height: ScreenUtil().setWidth(
  480 + _uploadImageProvider.imgSizefirstImage *
  481 + 2),
  482 + ),
  483 + Positioned(
  484 + left: 0,
  485 + top: 0,
  486 + child: (_uploadImageProvider.firstImage.file !=
  487 + null) &&
  488 + _uploadImageProvider
  489 + .firstImage.process !=
  490 + 1 &&
  491 + _uploadImageProvider
  492 + .firstImage.process !=
  493 + 0.01
  494 + ? Container(
  495 + width: ScreenUtil().screenWidth,
  496 + height: w(_uploadImageProvider
  497 + .imgSizefirstImage),
  498 + color: MyColours.color_4D000000,
  499 + child: Center(
  500 + child: Text('上传中',
  501 + style: TextStyle(
  502 + color:
  503 + MyColours.color_F8F9FD)),
  504 + ),
  505 + )
  506 + : Container()),
  507 + ]),
  508 + _uploadImageProvider.firstImage.process == 1
  509 + ? Container(
  510 + width: w(150),
  511 + height: w(30),
  512 + color: MyColours.color_4D000000,
  513 + alignment: Alignment.center,
  514 + child: Text(
  515 + '点击图片可以更换',
  516 + style: TextStyle(
  517 + color: MyColours.color_F8F9FD,
  518 + fontSize: font(14),
  519 + fontWeight: FontWeight.bold),
  520 + ))
  521 + : SizedBox(),
  522 + ]))
  523 + : InkWell(
  524 + onTap: () {
  525 + // double process;
  526 + // String qiniuUrl;
  527 + // List<String> tempList = [];
  528 + // if (title == '头像') {
  529 + // process = _uploadImageProvider.touxiang.process;
  530 + // qiniuUrl = _uploadImageProvider.touxiang.qiniuUrl;
  531 + // } else {
  532 + // process = _uploadImageProvider.erweima.process;
  533 + // qiniuUrl = _uploadImageProvider.erweima.qiniuUrl;
  534 + // }
  535 +
  536 + // if (qiniuUrl != null && qiniuUrl != '') {
  537 + // tempList.add(qiniuUrl);
  538 +
  539 + // ///没有上传完成的不可以点击
  540 + // _showPhotoView(context, 0, tempList);
  541 + // } else {
  542 + Utils.getPickPermission(context, () {
  543 + _getFromPictureOrCamera(
  544 + _uploadImageProvider.firstImage,
  545 + ImageSource.gallery);
349 }, 546 },
350 - child: Stack(  
351 - alignment: Alignment.bottomCenter,  
352 - children: [  
353 - Image.network(  
354 - 'https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg',  
355 - fit: BoxFit.cover,  
356 - ),  
357 - Container(  
358 - width: w(150),  
359 - height: w(30),  
360 - color: MyColours.color_4D000000,  
361 - alignment: Alignment.center,  
362 - child: Text(  
363 - '点击图片可以更换',  
364 - style: TextStyle(  
365 - color: MyColours.color_F8F9FD,  
366 - fontSize: font(14),  
367 - fontWeight: FontWeight.bold),  
368 - )),  
369 - ]))  
370 - : Container( 547 + Platform.isAndroid
  548 + ? Permission.storage
  549 + : Permission.photos);
  550 + },
  551 + child: Container(
371 color: MyColours.color_d9d9d9, 552 color: MyColours.color_d9d9d9,
372 width: double.infinity, 553 width: double.infinity,
373 - height: w(210), 554 + height: w(_uploadImageProvider.imgSizefirstImage),
374 child: Column( 555 child: Column(
375 mainAxisAlignment: MainAxisAlignment.center, 556 mainAxisAlignment: MainAxisAlignment.center,
376 children: [ 557 children: [
@@ -394,8 +575,7 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -394,8 +575,7 @@ class _FirstImagePageState extends State<FirstImagePage> {
394 )) 575 ))
395 ], 576 ],
396 ), 577 ),
397 - ),  
398 - ) 578 + )),
399 ], 579 ],
400 ), 580 ),
401 )), 581 )),
@@ -412,7 +592,49 @@ class _FirstImagePageState extends State<FirstImagePage> { @@ -412,7 +592,49 @@ class _FirstImagePageState extends State<FirstImagePage> {
412 fontSize: 34, 592 fontSize: 34,
413 height: w(40), 593 height: w(40),
414 isBold: true, 594 isBold: true,
415 - onPressed: () {}, 595 + onPressed: () async {
  596 + FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
  597 + if (titleC.text.trim().length == 0) {
  598 + Utils.showToast('请输入标题!');
  599 + return false;
  600 + }
  601 + if (titleC.text.trim().length == 0) {
  602 + Utils.showToast('请输入店铺slogan!');
  603 + return false;
  604 + }
  605 + if (_uploadImageProvider.firstImage.qiniuUrl == null) {
  606 + Utils.showToast('请上传图片!');
  607 + return false;
  608 + }
  609 +
  610 + if (_uploadImageProvider.firstImage.process < 1) {
  611 + Utils.showToast('正在上传图片,请稍等');
  612 + return false;
  613 + }
  614 +
  615 + App.sp.setInt(
  616 + "themeColor", themeColorData[themeColorIndex].color.value);
  617 + //接口
  618 + Map homeData = {
  619 + 'theme_color': themeColorData[themeColorIndex].color.value,
  620 + 'title': titleC.text,
  621 + 'slogan': sloganC.text,
  622 + 'image': _uploadImageProvider.firstImage.qiniuUrl
  623 + };
  624 + Map<String, String> params = {
  625 + 'sid': Provider.of<UserModel>(context, listen: false)
  626 + .user
  627 + .sellerid,
  628 + 'home': json.encode(homeData)
  629 + };
  630 +
  631 + bool success = await _marketingCenterProvider
  632 + .setSellerTemplateConf(context, params, showLoading: true);
  633 + if (success) {
  634 + Utils.showToast('保存成功');
  635 + Navigator.pop(context);
  636 + }
  637 + },
416 ), 638 ),
417 ) 639 )
418 ], 640 ],
@@ -2,7 +2,12 @@ import 'package:flutter/material.dart'; @@ -2,7 +2,12 @@ import 'package:flutter/material.dart';
2 import 'package:one_key/provider/user_model.dart'; 2 import 'package:one_key/provider/user_model.dart';
3 import 'package:provider/provider.dart'; 3 import 'package:provider/provider.dart';
4 4
  5 +import '../constant/constant.dart';
5 import '../models/tableOuter.dart'; 6 import '../models/tableOuter.dart';
  7 +import '../net/base_resp.dart';
  8 +import '../net/dio_util.dart';
  9 +import '../net/http_url.dart';
  10 +import '../utils/utils.dart';
6 import 'choose_table_model.dart'; 11 import 'choose_table_model.dart';
7 12
8 class MarketingCenterProvider extends ChangeNotifier { 13 class MarketingCenterProvider extends ChangeNotifier {
@@ -16,4 +21,52 @@ class MarketingCenterProvider extends ChangeNotifier { @@ -16,4 +21,52 @@ class MarketingCenterProvider extends ChangeNotifier {
16 needLoading: needLoading); 21 needLoading: needLoading);
17 notifyListeners(); 22 notifyListeners();
18 } 23 }
  24 +
  25 + // 商家设置预订安排模板页面
  26 + Future<bool> setSellerTemplateConf(
  27 + BuildContext context, Map<String, String> params,
  28 + {bool showLoading = true}) async {
  29 + BaseResp<dynamic> baseResp = await DioUtil()
  30 + .request<dynamic>(context, Method.get, HttpUrl.set_seller_template_conf,
  31 + data: params, showLoading: showLoading)
  32 + .catchError((error) {
  33 + print(error.toString());
  34 + Utils.showToast('商家设置预订安排模板页面失败,请重试');
  35 + return false;
  36 + });
  37 + if (baseResp.code == Constant.status_success) {
  38 + if (baseResp.data == 0 || baseResp.data == 1) {
  39 + return true;
  40 + } else {
  41 + Utils.showToast('商家设置预订安排模板页面失败,请重试');
  42 + }
  43 + } else {
  44 + Utils.showToast(baseResp.msg);
  45 + }
  46 + return false;
  47 + }
  48 +
  49 + // 获取商家设置预订安排模板页面
  50 + Future<bool> getSellerTemplateConf(
  51 + BuildContext context, Map<String, String> params,
  52 + {bool showLoading = true}) async {
  53 + BaseResp<dynamic> baseResp = await DioUtil()
  54 + .request<dynamic>(context, Method.get, HttpUrl.get_seller_template_conf,
  55 + data: params, showLoading: showLoading)
  56 + .catchError((error) {
  57 + print(error.toString());
  58 + Utils.showToast('获取商家设置预订安排模板页面失败,请重试');
  59 + return false;
  60 + });
  61 + if (baseResp.code == Constant.status_success) {
  62 + if (baseResp.data == 0 || baseResp.data == 1) {
  63 + return true;
  64 + } else {
  65 + Utils.showToast('获取商家设置预订安排模板页面失败,请重试');
  66 + }
  67 + } else {
  68 + Utils.showToast(baseResp.msg);
  69 + }
  70 + return false;
  71 + }
19 } 72 }
@@ -19,6 +19,8 @@ class UploadImageProvider extends ChangeNotifier { @@ -19,6 +19,8 @@ class UploadImageProvider extends ChangeNotifier {
19 UploadImgModel erweima = UploadImgModel(); //二维码 19 UploadImgModel erweima = UploadImgModel(); //二维码
20 UploadImgModel mentou = UploadImgModel(); //店铺信息----门头照片 20 UploadImgModel mentou = UploadImgModel(); //店铺信息----门头照片
21 UploadImgModel dish = UploadImgModel(); //菜品 21 UploadImgModel dish = UploadImgModel(); //菜品
  22 + UploadImgModel firstImage = UploadImgModel(); //预订安排首图
  23 + double imgSizefirstImage = 282;
22 double imgSizeTouxiang = 76; 24 double imgSizeTouxiang = 76;
23 double imgSizeErweima = 22; 25 double imgSizeErweima = 22;
24 double imgSizeMenTou = 64; 26 double imgSizeMenTou = 64;
@@ -234,6 +234,9 @@ class UploadImageUtil { @@ -234,6 +234,9 @@ class UploadImageUtil {
234 } else if (index == 3) { 234 } else if (index == 3) {
235 //3 菜品 235 //3 菜品
236 uploadImageProvider.dish.process = percent; 236 uploadImageProvider.dish.process = percent;
  237 + } else if (index == 4) {
  238 + //4 预订安排首图
  239 + uploadImageProvider.firstImage.process = percent;
237 } else { 240 } else {
238 //1 二维码 241 //1 二维码
239 uploadImageProvider.erweima.process = percent; 242 uploadImageProvider.erweima.process = percent;
@@ -293,6 +296,11 @@ class UploadImageUtil { @@ -293,6 +296,11 @@ class UploadImageUtil {
293 uploadImageProvider.dish.qiniuUrl = imgUrl; 296 uploadImageProvider.dish.qiniuUrl = imgUrl;
294 uploadImageProvider.dish.file = null; 297 uploadImageProvider.dish.file = null;
295 uploadImageProvider.notifyListeners(); 298 uploadImageProvider.notifyListeners();
  299 + }else if (index == 4) {
  300 + uploadImageProvider.firstImage.process = 1;
  301 + uploadImageProvider.firstImage.qiniuUrl = imgUrl;
  302 + uploadImageProvider.firstImage.file = null;
  303 + uploadImageProvider.notifyListeners();
296 } 304 }
297 }) 305 })
298 ..catchError((dynamic error) { 306 ..catchError((dynamic error) {