提交 e62703f8 authored 作者: maodou's avatar maodou

Merge remote-tracking branch 'origin/test' into test

...@@ -460,5 +460,38 @@ abstract class MineAPI { ...@@ -460,5 +460,38 @@ abstract class MineAPI {
return false; return false;
} }
/// 26、获取支付信息
static Future <PayOrderModel> getPayInfo({
required String ordersNum,
}) async {
final result = await HttpService.to.post(
'/v1/orders/Orders/payAgain',
params: {
'ordersNum':ordersNum,
},
showLoading: true
);
if (result.data is! Map) return PayOrderModel();
return PayOrderModel.fromJson(result.data);
}
/// 27、紫荆币支付
static Future<bool> coinPay({
required String ordersNum,
}) async {
final result = await HttpService.to.post(
'/v1/book/Information/editNotes',
params: {
'ordersNum':ordersNum,
},
showLoading: true
);
if (result.data is Map && result.data['is_success'] == 1) {
return true;
}
return false;
}
} }
...@@ -526,7 +526,8 @@ class DiscussModel { ...@@ -526,7 +526,8 @@ class DiscussModel {
id = json['id']; id = json['id'];
chapterId = json['chapter_id']; chapterId = json['chapter_id'];
chapterName = json['chapter_name']; chapterName = json['chapter_name'];
content = json['content']; // content = json['content'];
content = json['content'] != null ? NoteContentModel.fromJson(json['content']) : null;
quoteContent = json['quote_content']; quoteContent = json['quote_content'];
title = json['title']; title = json['title'];
replyId = json['reply_id']; replyId = json['reply_id'];
...@@ -550,7 +551,7 @@ class DiscussModel { ...@@ -550,7 +551,7 @@ class DiscussModel {
num? id; num? id;
num? chapterId; num? chapterId;
String? chapterName; String? chapterName;
String? content; NoteContentModel? content;
String? quoteContent; String? quoteContent;
String? title; String? title;
num? replyId; num? replyId;
...@@ -569,7 +570,7 @@ class DiscussModel { ...@@ -569,7 +570,7 @@ class DiscussModel {
num? id, num? id,
num? chapterId, num? chapterId,
String? chapterName, String? chapterName,
String? content, NoteContentModel? content,
String? quoteContent, String? quoteContent,
String? title, String? title,
num? replyId, num? replyId,
...@@ -609,7 +610,10 @@ class DiscussModel { ...@@ -609,7 +610,10 @@ class DiscussModel {
map['id'] = id; map['id'] = id;
map['chapter_id'] = chapterId; map['chapter_id'] = chapterId;
map['chapter_name'] = chapterName; map['chapter_name'] = chapterName;
map['content'] = content; // map['content'] = content;
if (content != null) {
map['note_content'] = content?.toJson();
}
map['quote_content'] = quoteContent; map['quote_content'] = quoteContent;
map['title'] = title; map['title'] = title;
map['reply_id'] = replyId; map['reply_id'] = replyId;
......
...@@ -170,6 +170,7 @@ class PayOrderModel { ...@@ -170,6 +170,7 @@ class PayOrderModel {
this.ordersnum, this.ordersnum,
this.encryptionOrder, this.encryptionOrder,
this.code, this.code,
this.isMoneys,
String? msg, String? msg,
}); });
...@@ -185,6 +186,7 @@ class PayOrderModel { ...@@ -185,6 +186,7 @@ class PayOrderModel {
encryptionOrder = json['encryption_order']; encryptionOrder = json['encryption_order'];
code = json['code']; code = json['code'];
msg = json['msg']; msg = json['msg'];
isMoneys = json['is_moneys'];
} }
String? appid; String? appid;
String? partnerid; String? partnerid;
...@@ -197,6 +199,7 @@ class PayOrderModel { ...@@ -197,6 +199,7 @@ class PayOrderModel {
String? encryptionOrder; String? encryptionOrder;
num? code; num? code;
String? msg; String? msg;
num? isMoneys;
PayOrderModel copyWith({ String? appid, PayOrderModel copyWith({ String? appid,
String? partnerid, String? partnerid,
String? prepayid, String? prepayid,
...@@ -208,6 +211,7 @@ class PayOrderModel { ...@@ -208,6 +211,7 @@ class PayOrderModel {
String? encryptionOrder, String? encryptionOrder,
num? code, num? code,
String? msg, String? msg,
num? isMoneys,
}) => PayOrderModel( appid: appid ?? this.appid, }) => PayOrderModel( appid: appid ?? this.appid,
partnerid: partnerid ?? this.partnerid, partnerid: partnerid ?? this.partnerid,
prepayid: prepayid ?? this.prepayid, prepayid: prepayid ?? this.prepayid,
...@@ -219,6 +223,7 @@ class PayOrderModel { ...@@ -219,6 +223,7 @@ class PayOrderModel {
encryptionOrder: encryptionOrder ?? this.encryptionOrder, encryptionOrder: encryptionOrder ?? this.encryptionOrder,
code: code ?? this.code, code: code ?? this.code,
msg: msg?? this.msg, msg: msg?? this.msg,
isMoneys: isMoneys?? this.isMoneys
); );
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final map = <String, dynamic>{}; final map = <String, dynamic>{};
...@@ -233,6 +238,7 @@ class PayOrderModel { ...@@ -233,6 +238,7 @@ class PayOrderModel {
map['encryption_order'] = encryptionOrder; map['encryption_order'] = encryptionOrder;
map['code'] = code; map['code'] = code;
map['msg'] = msg; map['msg'] = msg;
map['is_moneys'] = isMoneys;
return map; return map;
} }
......
...@@ -17,7 +17,7 @@ class _AdDetailPageState extends State<AdDetailPage> { ...@@ -17,7 +17,7 @@ class _AdDetailPageState extends State<AdDetailPage> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
title: const Text('用户协议'),
), ),
body: InAppWebView( body: InAppWebView(
initialUrlRequest: URLRequest( initialUrlRequest: URLRequest(
......
...@@ -54,7 +54,7 @@ class BookPayController extends GetxController { ...@@ -54,7 +54,7 @@ class BookPayController extends GetxController {
/// 使用优惠券 /// 使用优惠券
void setUseCoupon(CouponModel model){ void setUseCoupon(CouponModel model){
useCouponModel = model; useCouponModel = model;
print('使用优惠券。。。。。。。。。。。。。。。。'); print('使用优惠券。。。。。。。。。。。。。。。。${model.couponRecId}');
computeFinalPrice(); computeFinalPrice();
} }
...@@ -194,13 +194,21 @@ class BookPayController extends GetxController { ...@@ -194,13 +194,21 @@ class BookPayController extends GetxController {
// 微信 // 微信
if(payModel.type == 1){ if(payModel.type == 1){
String orderNumber = payOrderModel.ordersnum.toString(); String orderNumber = payOrderModel.ordersnum.toString();
if(payOrderModel.isMoneys == 0){
requestOrderStatus();
}else {
requestWechat(); requestWechat();
} }
}
// 支付宝 // 支付宝
else if(payModel.type == 2){ else if(payModel.type == 2){
String orderNumber = payOrderModel.ordersnum.toString(); String orderNumber = payOrderModel.ordersnum.toString();
if(payOrderModel.isMoneys == 0){
requestOrderStatus();
}else {
requestAliPay(); requestAliPay();
} }
}
// 书豆 // 书豆
else if (payModel.type == 3){ else if (payModel.type == 3){
if(payOrderModel.code == -1){ if(payOrderModel.code == -1){
......
...@@ -47,7 +47,7 @@ class BuildBanner extends StatelessWidget { ...@@ -47,7 +47,7 @@ class BuildBanner extends StatelessWidget {
}, },
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.circular(8.w), borderRadius: BorderRadius.circular(8.w),
child: CustomImage.network(url: item.pic??'') child: CustomImage.network(url: item.pic??'',fit: BoxFit.contain,)
), ),
), ),
// child: CustomImage.asset( // child: CustomImage.asset(
......
...@@ -63,7 +63,7 @@ class MineController extends GetxController { ...@@ -63,7 +63,7 @@ class MineController extends GetxController {
link: Routes.point, link: Routes.point,
icon: 'assets/images/point.png'), icon: 'assets/images/point.png'),
ReadModel( ReadModel(
name: '紫币', name: '紫币',
value: userInfo.beanNums.toString(), value: userInfo.beanNums.toString(),
link: Routes.coin, link: Routes.coin,
icon: 'assets/images/coin.png'), icon: 'assets/images/coin.png'),
......
...@@ -40,14 +40,15 @@ class BuildAccount extends StatelessWidget { ...@@ -40,14 +40,15 @@ class BuildAccount extends StatelessWidget {
return Expanded( return Expanded(
child: GestureDetector( child: GestureDetector(
onTap: (){ onTap: (){
if (model.link != null){
if (model.link != Routes.love){
context.pushNamed(model.link!);
}
else{
if (onTap !=null) onTap!(model); if (onTap !=null) onTap!(model);
} // if (model.link != null){
} // if (model.link != Routes.love){
// context.pushNamed(model.link!);
// }
// else{
// if (onTap !=null) onTap!(model);
// }
// }
}, },
child: Container( child: Container(
color: Colors.white, color: Colors.white,
......
...@@ -90,6 +90,7 @@ class _CouponPageState extends State<CouponPage> with AutomaticKeepAliveClientMi ...@@ -90,6 +90,7 @@ class _CouponPageState extends State<CouponPage> with AutomaticKeepAliveClientMi
itemBuilder: (BuildContext context, int index){ itemBuilder: (BuildContext context, int index){
CouponModel model = controller.coupons[index]; CouponModel model = controller.coupons[index];
return BuildItem(model:model,useTap: (){ return BuildItem(model:model,useTap: (){
Console.log('选择优惠券--------------------------------${model.couponRecId}');
widget.payController.setUseCoupon(model); widget.payController.setUseCoupon(model);
context.pop(); context.pop();
},); },);
......
...@@ -39,6 +39,7 @@ class DiscussController extends GetxController { ...@@ -39,6 +39,7 @@ class DiscussController extends GetxController {
bookId: bookDetailModel.bookId.toString(), bookId: bookDetailModel.bookId.toString(),
chapterId: chapterId chapterId: chapterId
); );
Console.log('--------------------------------');
// 如果是刷新 清理数据 // 如果是刷新 清理数据
if (isRefresh) discuss.clear(); if (isRefresh) discuss.clear();
discuss.addAll(result); discuss.addAll(result);
...@@ -54,6 +55,7 @@ class DiscussController extends GetxController { ...@@ -54,6 +55,7 @@ class DiscussController extends GetxController {
refreshController.finishRefresh(IndicatorResult.success); refreshController.finishRefresh(IndicatorResult.success);
refreshController.resetFooter(); refreshController.resetFooter();
} catch (error) { } catch (error) {
Console.log('--error-----------------------------$error-');
refreshController.finishRefresh(IndicatorResult.fail); refreshController.finishRefresh(IndicatorResult.fail);
} }
} }
......
...@@ -73,8 +73,11 @@ class BuildDiscuss extends StatelessWidget { ...@@ -73,8 +73,11 @@ class BuildDiscuss extends StatelessWidget {
Widget _buildItem(DiscussModel model,{int type =0}){ Widget _buildItem(DiscussModel model,{int type =0}){
return Row( return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
ClipRRect( Container(
margin: EdgeInsets.only(top: 10.w),
child: ClipRRect(
borderRadius: BorderRadius.circular(17.5.w), borderRadius: BorderRadius.circular(17.5.w),
child: Container( child: Container(
width: 35.w, width: 35.w,
...@@ -83,6 +86,7 @@ class BuildDiscuss extends StatelessWidget { ...@@ -83,6 +86,7 @@ class BuildDiscuss extends StatelessWidget {
child: CustomImage.network(url: model.personPic??''), child: CustomImage.network(url: model.personPic??''),
), ),
), ),
),
Expanded( Expanded(
child: Container( child: Container(
margin: EdgeInsets.only(left: 10.w,top: 10.w), margin: EdgeInsets.only(left: 10.w,top: 10.w),
...@@ -96,18 +100,25 @@ class BuildDiscuss extends StatelessWidget { ...@@ -96,18 +100,25 @@ class BuildDiscuss extends StatelessWidget {
children: [ children: [
Text(model.personName??'',style: TextStyle(fontSize: 12.w,height: 1.5,color: Colours.c9),), Text(model.personName??'',style: TextStyle(fontSize: 12.w,height: 1.5,color: Colours.c9),),
Gaps.hGaps10, Gaps.hGaps10,
type ==0?const SizedBox(): Text('发起人',style: TextStyle(fontSize: 11.w,height: 1.5,color: AppTheme.primary),) type ==1?const SizedBox(): Text('发起人',style: TextStyle(fontSize: 11.w,height: 1.5,color: AppTheme.primary),)
], ],
), ),
Text(model.createTime??'',style: TextStyle(fontSize: 12.w,height: 1.5,color: Colours.c9),) Text(model.createTime??'',style: TextStyle(fontSize: 12.w,height: 1.5,color: Colours.c9),)
], ],
), ),
type ==0? Text(model.content??'',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3),) type ==0? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(model.content?.text?.content??'',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3),),
Gaps.vGaps10,
_buildImageGridView()
],
)
:RichText(text: TextSpan( :RichText(text: TextSpan(
children: [ children: [
TextSpan(text: '回复 ',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3)), TextSpan(text: '回复 ',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3)),
TextSpan(text: model.replacePersonName??'',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c9)), TextSpan(text: model.replacePersonName??'',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c9)),
TextSpan(text: ':${model.content??''}',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3)), TextSpan(text: ':${model.content?.text?.content??''}',style: TextStyle(fontSize: 13.w,height: 1.5,color: Colours.c3)),
] ]
)), )),
Row( Row(
...@@ -151,11 +162,72 @@ class BuildDiscuss extends StatelessWidget { ...@@ -151,11 +162,72 @@ class BuildDiscuss extends StatelessWidget {
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true, shrinkWrap: true,
itemBuilder: (BuildContext context,int index){ itemBuilder: (BuildContext context,int index){
return _buildItem(data[index]); return _buildItem(data[index],type: 1);
}, },
itemCount: data.length, itemCount: data.length,
); );
} }
// 图片
Widget _buildImageGridView(){
return GridView.builder(
// padding: const EdgeInsets.only(left: 13,top: 10),
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 6,
crossAxisSpacing: 2.w,
mainAxisSpacing: 2.w,
childAspectRatio: 1
),
itemBuilder: (BuildContext context, int index) {
MediaModel? mediaModel = model.content?.image?[index];
return CustomImage.network(url: model?.content?.image?[index].content??'',fit: BoxFit.cover,);
// return Container(
// color: Colors.red,
// );
},
itemCount: model.content?.image?.length,
// itemCount: 2,
);
}
// Widget _buildAudioListView(){
// return ListView.builder(
// physics: const NeverScrollableScrollPhysics(),
// shrinkWrap: true,
// itemBuilder: (BuildContext context, int index) {
// MediaModel mediaModel = model.noteContent!.audio![index];
// return Container(
// height: 20.w,
// margin: EdgeInsets.only(right: 130.w),
// child: Container(
// margin: EdgeInsets.only(top: 5.w),
// padding: EdgeInsets.only(right:20.w,left: 10.w),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10.w),
// color: Colours.cF9,
// ),
// child: Row(
// // mainAxisSize: MainAxisSize.min,
// mainAxisAlignment:MainAxisAlignment.spaceBetween,
// children: [
// GestureDetector(
// onTap: (){
// if (onTapAudio !=null) onTapAudio!(mediaModel);
// },
// child: Image.asset('assets/images/audio.png')
// ),
// Text('0:00/${mediaModel.duration}',style: TextStyle(fontSize: 10.w,height: 1.4,color: Colours.c9),)
// ],
// ),
// ),
// );
// },
// itemCount: model.noteContent?.audio?.length,
// );
// }
} }
...@@ -9,6 +9,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; ...@@ -9,6 +9,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import '../../routes/index.dart';
import '../../theme.dart'; import '../../theme.dart';
import '../../utils/index.dart'; import '../../utils/index.dart';
import '../../widgets/index.dart'; import '../../widgets/index.dart';
......
...@@ -31,9 +31,14 @@ class _UserLovePageState extends State<UserLovePage> { ...@@ -31,9 +31,14 @@ class _UserLovePageState extends State<UserLovePage> {
child: ListView.builder( child: ListView.builder(
itemBuilder: (BuildContext context, int index){ itemBuilder: (BuildContext context, int index){
CourseModel model = controller.loves[index]; CourseModel model = controller.loves[index];
return BuildItem(model: model,onTap: (){ return GestureDetector(
onTap: (){
context.pushNamed(Routes.bookDetail,queryParameters: {'book_id':model.bookId.toString()});
},
child: BuildItem(model: model,onTap: (){
controller.unLoved(bookId: model.bookId.toString()); controller.unLoved(bookId: model.bookId.toString());
},); },),
);
}, },
itemCount: controller.loves.length, itemCount: controller.loves.length,
), ),
......
...@@ -105,7 +105,7 @@ class BuildNote extends StatelessWidget { ...@@ -105,7 +105,7 @@ class BuildNote extends StatelessWidget {
childAspectRatio: 1 childAspectRatio: 1
), ),
itemBuilder: (BuildContext context, int index) { itemBuilder: (BuildContext context, int index) {
return CustomImage.network(url: model.noteContent!.image![index].content??'',fit: BoxFit.cover,); return CustomImage.network(url: model.noteContent?.image?[index].content??'',fit: BoxFit.cover,);
}, },
itemCount: model.noteContent?.image?.length, itemCount: model.noteContent?.image?.length,
); );
......
...@@ -76,7 +76,12 @@ class _UserOrderState extends State<UserOrderPage> with SingleTickerProviderStat ...@@ -76,7 +76,12 @@ class _UserOrderState extends State<UserOrderPage> with SingleTickerProviderStat
body: _buildBody(controller), body: _buildBody(controller),
), ),
);*/ );*/
Scaffold( WillPopScope(
onWillPop: () async {
context.pop(true);
return false;
},
child: Scaffold(
appBar: CustomAppBar( appBar: CustomAppBar(
automaticallyImplyLeading: false, automaticallyImplyLeading: false,
titleSpacing: 0, titleSpacing: 0,
...@@ -108,7 +113,9 @@ class _UserOrderState extends State<UserOrderPage> with SingleTickerProviderStat ...@@ -108,7 +113,9 @@ class _UserOrderState extends State<UserOrderPage> with SingleTickerProviderStat
], ],
), ),
body: _buildBody(), body: _buildBody(),
),
); );
} }
Widget _buildBody( ) { Widget _buildBody( ) {
......
...@@ -10,6 +10,13 @@ class UserOrderAwaitingController extends GetxController { ...@@ -10,6 +10,13 @@ class UserOrderAwaitingController extends GetxController {
// 应付款、订单编号等 // 应付款、订单编号等
List<OrderCompletedModel> orderAwaitings = []; List<OrderCompletedModel> orderAwaitings = [];
// 支付宝
Tobias tobias = Tobias();
// 微信
Fluwx fluwx = Fluwx();
late PayOrderModel payOrderModel;
@override @override
void onReady() { void onReady() {
...@@ -49,4 +56,84 @@ class UserOrderAwaitingController extends GetxController { ...@@ -49,4 +56,84 @@ class UserOrderAwaitingController extends GetxController {
update(); update();
} }
Future<void> payOrder() async {
if (model.payType == 3){
final result = await MineAPI.coinPay(ordersNum: orderNum);
if (result){
Toast.show('订单支付完成');
getOrderInfo();
}
}
else{
payOrderModel = await MineAPI.getPayInfo(ordersNum: orderNum);
// 支付宝
if (model.payType == 2){
final result = await tobias.isAliPayInstalled;
if(!result){
Toast.show('请先安装支付宝');
}
else{
requestAliPay();
}
}
// 微信
if (model.payType ==1){
final result = await fluwx.isWeChatInstalled;
if(!result){
Toast.show('请先安装微信');
}
else{
requestWechat();
}
}
}
}
// 支付宝支付
void requestAliPay(){
print('================================================================${payOrderModel.encryptionOrder!}');
tobias.pay(payOrderModel.encryptionOrder!).then((payResult){
if (payResult['resultStatus'] == '9000') {
requestOrderStatus();
} else {
Toast.show(payResult['memo'].toString());
}
});
}
// 微信支付
void requestWechat(){
Payment payment = Payment(
appId: payOrderModel.appid??'',
partnerId: payOrderModel.partnerid??'',
prepayId: payOrderModel.prepayid??'',
packageValue: payOrderModel.package??'',
nonceStr: payOrderModel.noncestr??'',
timestamp: payOrderModel.timestamp!.toInt(),
sign: payOrderModel.sign??''
);
fluwx.pay(which: payment);
fluwx.addSubscriber((response) {
if (response.errCode == 0) {
requestOrderStatus();
}
else{
Toast.show('${response.errStr}');
}
});
}
void requestOrderStatus() async {
final result = await ShopAPI.orderStatus(orderNumber: payOrderModel.ordersnum??'',receipt: '');
if (result.paySuccess == 1){
Toast.show('订单支付完成');
getOrderInfo();
}
}
} }
...@@ -7,11 +7,13 @@ import 'package:flutter/material.dart'; ...@@ -7,11 +7,13 @@ import 'package:flutter/material.dart';
import 'package:flutter_book/theme.dart'; import 'package:flutter_book/theme.dart';
import 'package:flutter_book/utils/index.dart'; import 'package:flutter_book/utils/index.dart';
import 'package:flutter_book/widgets/index.dart'; import 'package:flutter_book/widgets/index.dart';
import 'package:fluwx/fluwx.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_state_manager/src/simple/get_controllers.dart'; import 'package:get/get_state_manager/src/simple/get_controllers.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get_state_manager/src/simple/get_state.dart'; import 'package:get/get_state_manager/src/simple/get_state.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:tobias/tobias.dart';
import '../../apis/index.dart'; import '../../apis/index.dart';
import '../../models/index.dart'; import '../../models/index.dart';
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论