Commit 0a8bad06a0e4ad09d7c3742bb81b092f588839a2

Authored by weixin_45529955
1 parent 776990f1

为团购客户发放消费金 二维码

import 'package:flutter/cupertino.dart';
class ConsumeQrcodeModel {
int? ret;
List<ConsumeQrcodeSunModel>? data;
String? msg;
ConsumeQrcodeModel({this.ret, this.data, this.msg});
ConsumeQrcodeModel.fromJson(Map<dynamic, dynamic> json) {
ret = json['ret'];
if (json['data'] != null) {
data = <ConsumeQrcodeSunModel>[];
json['data'].forEach((v) {
data!.add(new ConsumeQrcodeSunModel.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 ConsumeQrcodeSunModel {
String? id;
String? sellerid;
String? qrcode;
String? amount;
String? cdate;
TextEditingController amountC = TextEditingController();
ConsumeQrcodeSunModel(
{this.id, this.sellerid, this.qrcode, this.amount, this.cdate});
ConsumeQrcodeSunModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
sellerid = json['sellerid'];
qrcode = json['qrcode'];
amount = json['amount'];
cdate = json['cdate'];
amountC.text = amount ?? '';
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['sellerid'] = this.sellerid;
data['qrcode'] = this.qrcode;
data['amount'] = this.amount;
data['cdate'] = this.cdate;
return data;
}
}
... ...
... ... @@ -646,4 +646,13 @@ class HttpUrl {
static const get_consume_config =
"?service=App.Activity.GetConsumeConfig"; // 获取商家消费金规则
static const create_consume_qrcode =
"?service=App.Activity.CreateConsumeQrcode"; // 创建消费金二维码
static const get_consume_qrcode =
"?service=App.Activity.GetConsumeQrcode"; // 获取商家消费金二维码
static const del_consume_qrcode =
"?service=App.Activity.DelConsumeQrcode"; // 获取商家消费金二维码
}
... ...
... ... @@ -60,7 +60,7 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver {
late CreateStoreModel createStoreModel;
Fluwx fluwx = Fluwx();
Function(WeChatResponse)? responseListener;
Function(WeChatResponse)? responseListener;
@override
void initState() {
... ... @@ -88,10 +88,9 @@ class LoginState extends State<LoginPage> with WidgetsBindingObserver {
@override
void dispose() {
super.dispose();
if(responseListener != null){
fluwx.removeSubscriber(responseListener!);
if (responseListener != null) {
fluwx.removeSubscriber(responseListener!);
}
WidgetsBinding.instance.removeObserver(this);
}
... ...
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/models/consume_qrcode_model.dart';
import 'package:one_key/provider/finance_provider.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/route/navigator_util.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/screen_util.dart';
import 'package:one_key/utils/utils.dart';
import 'package:one_key/widgets/h_empty_view.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:provider/provider.dart';
/**
* 发放消费金
... ... @@ -21,18 +27,46 @@ class GrantPage extends StatefulWidget {
class _GrantPageState extends State<GrantPage> {
ScrollController controller = ScrollController();
List ladderSelectFree = [];
List<ConsumeQrcodeSunModel> ladderSelectFree = [];
FinanceProvider? financeProvider;
@override
void initState() {
super.initState();
ladderSelectFree.add('1');
ConsumeQrcodeSunModel model = ConsumeQrcodeSunModel();
ladderSelectFree.add(model);
WidgetsBinding.instance.addPostFrameCallback((_) {
// _getConsumeConfig();
_geConsumeQrcode();
});
}
_geConsumeQrcode() async {
Map<String, String> pramas = {
'sellerid':
Provider.of<UserModel>(context, listen: false).user!.sellerid!,
};
await financeProvider!.geConsumeQrcode(context, pramas);
if (financeProvider!.consumeQrcodeData != null) {
//有数据
ladderSelectFree = [];
ladderSelectFree.addAll(financeProvider!.consumeQrcodeData!);
setState(() {});
}
}
_createConsumeQrcode(String amounts) async {
Map<String, String> pramas = {
'sellerid':
Provider.of<UserModel>(context, listen: false).user!.sellerid!,
'amount': amounts
};
bool success = await financeProvider!.createConsumeQrcode(context, pramas);
if (success) {
Navigator.pop(context);
}
}
///发放阶梯
Widget _ladderWidget() {
return ListView.builder(
... ... @@ -40,7 +74,7 @@ class _GrantPageState extends State<GrantPage> {
shrinkWrap: true,
itemCount: ladderSelectFree.length,
itemBuilder: (context, index) {
dynamic data = ladderSelectFree[index];
ConsumeQrcodeSunModel data = ladderSelectFree[index];
return Container(
padding: EdgeInsets.only(
left: w(16),
... ... @@ -67,8 +101,28 @@ class _GrantPageState extends State<GrantPage> {
InkWell(
onTap: () {
//删除媒体
ladderSelectFree.remove(data);
setState(() {});
// 确认是否删除
//弹框确认是否删除
DialogUtil.cupertinoAlertDialog(context,
title: "",
content: "确定要将该发放金删除吗?",
rTitle: "确定", rCallback: () async {
Map<String, String?> pramas = {
'id': data.id,
};
bool success = await financeProvider!
.delConsumeQrcode(context, pramas);
if (success) {
//删除成功,刷新页面
setState(() {
ladderSelectFree.removeAt(index);
});
}
});
},
child: Padding(
padding: EdgeInsets.only(top: w(8), bottom: w(8)),
... ... @@ -82,8 +136,7 @@ class _GrantPageState extends State<GrantPage> {
],
),
),
_ladderPriceWidget(TextEditingController(), FocusNode(),
width: 50),
_ladderPriceWidget(data, FocusNode(), width: 50),
],
),
);
... ... @@ -91,8 +144,7 @@ class _GrantPageState extends State<GrantPage> {
}
//阶梯返还金额widget
Widget _ladderPriceWidget(
TextEditingController controllerGive, FocusNode focusNodeGive,
Widget _ladderPriceWidget(ConsumeQrcodeSunModel data, FocusNode focusNodeGive,
{num width = 40}) {
return Container(
height: w(40),
... ... @@ -117,7 +169,7 @@ class _GrantPageState extends State<GrantPage> {
decoration: BoxDecoration(
border: Border.all(color: MyColours.color_999999, width: w(1))),
child: TextField(
controller: controllerGive,
controller: data.amountC,
textAlign: TextAlign.center,
textAlignVertical: TextAlignVertical.center,
maxLines: 1,
... ... @@ -161,21 +213,24 @@ class _GrantPageState extends State<GrantPage> {
),
HEmptyView(10),
Spacer(),
RoundButton(
text: '查看二维码',
width: w(86),
height: w(24),
fontSize: 28,
gradientStart: MyColours.color_438E93,
gradientEnd: MyColours.color_438E93,
textColor: MyColours.color_ffffff,
isBold: false,
radius: 5,
onPressed: () {
//跳转到二维码展示页面
NavigatorUtil.goGrantWechatPage(context);
},
),
if (data.qrcode != null)
RoundButton(
text: '查看二维码',
width: w(86),
height: w(24),
fontSize: 28,
gradientStart: MyColours.color_438E93,
gradientEnd: MyColours.color_438E93,
textColor: MyColours.color_ffffff,
isBold: false,
radius: 5,
onPressed: () {
//跳转到二维码展示页面
// String qrcode = data.qrcode ?? '';
// String account = data.amount ?? '';
NavigatorUtil.goGrantWechatPage(context, data);
},
),
HEmptyView(32),
],
),
... ... @@ -184,28 +239,85 @@ class _GrantPageState extends State<GrantPage> {
@override
Widget build(BuildContext context) {
financeProvider = Provider.of<FinanceProvider>(context, listen: true);
return Scaffold(
backgroundColor: MyColours.color_ffffff,
appBar: SystemAppBar('发放消费金'),
body: Column(
children: [
_ladderWidget(),
InkWell(
onTap: () {
// LadderData data = LadderData();
ladderSelectFree.add('1');
setState(() {});
Expanded(
child: SingleChildScrollView(
child: Column(
children: [
_ladderWidget(),
InkWell(
onTap: () {
ConsumeQrcodeSunModel model = ConsumeQrcodeSunModel();
ladderSelectFree.add(model);
setState(() {});
},
child: Container(
height: w(30),
margin: EdgeInsets.only(left: w(60), right: w(16)),
alignment: Alignment.centerLeft,
child: Text(
'+增加阶梯',
style: TextStyle(
color: MyColours.color_438E93, fontSize: font(12)),
),
)),
],
),
)),
Container(
padding: EdgeInsets.only(
top: w(13), left: w(45), right: w(45), bottom: w(26)),
child: RoundButton(
text: '保存',
height: w(43),
radius: r(5),
gradientStart: MyColours.color_438E93,
gradientEnd: MyColours.color_438E93,
borderColor: MyColours.color_438E93,
textColor: MyColours.color_ffffff,
isBold: true,
fontSize: 32,
onPressed: () {
// 调用接口
// 组装amount数据
if (ladderSelectFree.length == 0) {
//请点击增加阶梯按钮设置发放消费金金额
Utils.showToast('请点击【增加阶梯】按钮设置发放消费金金额');
return;
}
//判断阶梯里面的数据 实际支付金额是否输入
bool canPrice = ladderSelectFree
.any((e) => e.amountC.text.trim().length == 0);
if (canPrice) {
int index = ladderSelectFree
.indexWhere((e) => e.amountC.text.trim().length == 0);
Utils.showToast('请输入发放(${index + 1})的发放消费金金额!');
return;
}
FocusScope.of(context).requestFocus(FocusNode()); //点击空白处隐藏键盘
String amounts = '';
ladderSelectFree.forEach((e) {
amounts += (e.amountC.text + ',');
});
if (amounts.endsWith(',')) {
amounts = amounts.substring(0, amounts.length - 1);
}
_createConsumeQrcode(amounts);
},
child: Container(
height: w(30),
margin: EdgeInsets.only(left: w(60), right: w(16)),
alignment: Alignment.centerLeft,
child: Text(
'+增加阶梯',
style: TextStyle(
color: MyColours.color_438E93, fontSize: font(12)),
),
)),
),
)
],
),
);
... ...
... ... @@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:one_key/models/consume_qrcode_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/widgets/round_button.dart';
import 'package:one_key/widgets/system_app_bar.dart';
... ... @@ -29,7 +30,8 @@ import 'dart:ui' as ui;
*/
class GrantWechatPage extends StatefulWidget {
const GrantWechatPage({super.key});
final ConsumeQrcodeSunModel data;
const GrantWechatPage({super.key, required this.data});
@override
State<GrantWechatPage> createState() => _GrantWechatPageState();
... ... @@ -45,13 +47,13 @@ class _GrantWechatPageState extends State<GrantWechatPage> {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
_createPayQrcode();
// _createPayQrcode();
});
}
_createPayQrcode() {
financeProvider!.createPayQrcode(context);
}
// _createPayQrcode() {
// financeProvider!.createPayQrcode(context);
// }
/// 截图
Future<Uint8List?> _capturePng(
... ... @@ -110,57 +112,35 @@ class _GrantWechatPageState extends State<GrantWechatPage> {
fontWeight: FontWeight.bold),
),
VEmptyView(20),
Consumer<FinanceProvider>(
builder: (context, model, _) {
if (model.pageState != PageState.Success) {
return Container(
height: w(210),
child: Center(
child: SizedBox(
width:
ScreenUtil().setWidth(40),
height:
ScreenUtil().setWidth(40),
child:
CupertinoActivityIndicator(
color: MyColours.color_ffffff,
))),
);
} else {
return Container(
padding: EdgeInsets.symmetric(
horizontal: w(21),
vertical: w(16)),
color: MyColours.color_ffffff,
child: Column(
children: [
CachedNetworkImage(
imageUrl: financeProvider!
.paymentCodeUrl),
// VEmptyView(28),
Text(
'${Provider.of<UserModel>(context).user!.sellername}',
maxLines: 3,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color:
MyColours.color_000000,
fontSize: font(14)),
),
VEmptyView(28),
Text(
'消费金:¥50.00',
maxLines: 3,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color:
MyColours.color_000000,
fontSize: font(14)),
),
],
));
}
})
Container(
padding: EdgeInsets.symmetric(
horizontal: w(21), vertical: w(16)),
color: MyColours.color_ffffff,
child: Column(
children: [
CachedNetworkImage(
imageUrl:
widget.data.qrcode ?? ''),
// VEmptyView(28),
Text(
'${Provider.of<UserModel>(context).user!.sellername}',
maxLines: 3,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_000000,
fontSize: font(14)),
),
VEmptyView(28),
Text(
'消费金:¥${widget.data.amount}',
maxLines: 3,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: MyColours.color_000000,
fontSize: font(14)),
),
],
))
],
),
),
... ...
... ... @@ -3,6 +3,7 @@ import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:one_key/models/consume_qrcode_model.dart';
import 'package:one_key/models/deposit_record_detail_model.dart';
import 'package:one_key/models/deposit_record_model.dart';
import 'package:one_key/models/ladder_coupons_model.dart';
... ... @@ -48,6 +49,8 @@ class FinanceProvider extends ChangeNotifier {
ReturnMoneySunModel? returnMoneySunModel;
List<ConsumeQrcodeSunModel>? consumeQrcodeData;
///客户经理获取所创建活动列表
Future createPayQrcode(BuildContext context, {isShowLoading = true}) async {
try {
... ... @@ -230,6 +233,41 @@ class FinanceProvider extends ChangeNotifier {
}
}
// 创建消费金二维码
Future<bool> createConsumeQrcode(
BuildContext context, Map<String, String?> params,
{bool showLoading = true, bool needToast = true}) async {
try {
BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
context, Method.post, HttpUrl.create_consume_qrcode,
data: params, showLoading: showLoading);
if (baseResp.code == Constant.status_success) {
if (baseResp.data is String) {
if (needToast) {
Utils.showToast('创建成功');
}
return true;
} else {
if (needToast) {
Utils.showToast('创建失败,请重试');
}
}
} else {
if (needToast) {
Utils.showToast(baseResp.msg ?? '创建失败,请重试');
}
}
return false;
} catch (error) {
print(error.toString());
if (needToast) {
Utils.showToast('设置失败,请重试');
}
return false;
}
}
// 设置商家消费金规则
Future<bool> setConsumeConfig(
BuildContext context, Map<String, String?> params,
... ... @@ -267,6 +305,43 @@ class FinanceProvider extends ChangeNotifier {
}
}
// 删除商家消费金二维码
Future<bool> delConsumeQrcode(
BuildContext context, Map<String, String?> params,
{bool showLoading = true, bool needToast = true}) async {
try {
BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
context, Method.post, HttpUrl.del_consume_qrcode,
data: params, showLoading: showLoading);
if (baseResp.code == Constant.status_success) {
if (baseResp.data == 0 ||
baseResp.data == 1 ||
(baseResp.data is Map)) {
if (needToast) {
Utils.showToast('删除成功');
}
return true;
} else {
if (needToast) {
Utils.showToast('删除失败,请重试');
}
}
} else {
if (needToast) {
Utils.showToast(baseResp.msg ?? '删除失败,请重试');
}
}
return false;
} catch (error) {
print(error.toString());
if (needToast) {
Utils.showToast('删除失败,请重试');
}
return false;
}
}
///获取商家券赠送规则配置 还没做--------待使用----------
Future getActivityConfig(BuildContext context, Map<String, String?> params,
{isShowLoading = true}) async {
... ... @@ -617,6 +692,31 @@ class FinanceProvider extends ChangeNotifier {
}
}
/// 获取商家消费金二维码
Future geConsumeQrcode(BuildContext context, Map<String, String?> params,
{isShowLoading = true}) async {
try {
BaseResp<dynamic> baseResp = await DioUtil().request<dynamic>(
context, Method.post, HttpUrl.get_consume_qrcode,
data: params, showLoading: false);
if (baseResp.code == Constant.status_success) {
consumeQrcodeData =
ConsumeQrcodeModel.fromJson(baseResp.responseData!).data;
} else {
if (baseResp != null) {
Utils.showToast(baseResp.msg ?? "");
}
}
notifyListeners();
} catch (error) {
print(error.toString());
if (error is MyError) {}
notifyListeners();
}
}
/// 通过支付订单号或退款订单号获取会员充值订单
Future getOrderRechargeOrderInfo(
BuildContext context, Map<String, String?> params,
... ...
... ... @@ -4,6 +4,7 @@ import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/check_seller_acc_model.dart';
import 'package:one_key/models/consume_qrcode_model.dart';
import 'package:one_key/models/cookbook_model.dart';
import 'package:one_key/models/coupon_model.dart';
import 'package:one_key/models/customer_by_seller_model.dart';
... ... @@ -2452,10 +2453,12 @@ class NavigatorUtil {
///发放消费金
static Future<dynamic> goGrantWechatPage(
BuildContext context, {
BuildContext context,
ConsumeQrcodeSunModel data, {
replace = false,
}) {
return _navigateTo(context, "${Routes.grant_wechat_page}",
return _navigateTo(context,
"${Routes.grant_wechat_page}?data=${FluroConvertUtils.object2string(data)}",
replace: replace);
}
... ...
... ... @@ -4,6 +4,7 @@ import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/check_seller_acc_model.dart';
import 'package:one_key/models/consume_qrcode_model.dart';
import 'package:one_key/models/cookbook_model.dart';
import 'package:one_key/models/coupon_model.dart';
import 'package:one_key/models/customer_by_seller_model.dart';
... ... @@ -4327,8 +4328,10 @@ var grantPageHandle = new Handler(
///扫码领消费金
var grantWechatPageHandle = new Handler(
handlerFunc: (BuildContext? context, Map<String, List<Object>> params) {
ConsumeQrcodeSunModel data = ConsumeQrcodeSunModel.fromJson(json.decode(
FluroConvertUtils.fluroCnParamsDecode(params["data"]!.first as String)));
return ChangeNotifierProvider<FinanceProvider>(
create: (_) => FinanceProvider(), child: GrantWechatPage());
create: (_) => FinanceProvider(), child: GrantWechatPage(data: data));
});
// /选择优惠券
... ...