|
|
|
@ -120,7 +120,8 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
token: minToken, |
|
|
|
|
tenant: tenant, |
|
|
|
|
storeId: storeId, |
|
|
|
|
showLoading: false); |
|
|
|
|
showLoading: false |
|
|
|
|
); |
|
|
|
|
queryMemberInfo(); |
|
|
|
|
if (promotions != null && promotions != "" && tableId <= 0) { |
|
|
|
|
queryOrderInfo( |
|
|
|
@ -189,68 +190,68 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
try { |
|
|
|
|
EasyLoading.show(status: S.current.zhengzaijiazai); |
|
|
|
|
|
|
|
|
|
BaseData<SettleOrderInfo> baseData = await minService.getOrderInfo({ |
|
|
|
|
"addressId": addressId, |
|
|
|
|
"isTake": isTake, |
|
|
|
|
"memberCouponId": memberCouponId, |
|
|
|
|
"orderId": orderId, |
|
|
|
|
"promotionId": promotionId, |
|
|
|
|
"productSkuId": productSkuId, |
|
|
|
|
"actProductId": actProductId, |
|
|
|
|
"actProductSkuId": actProductSkuId, |
|
|
|
|
"useVipPrice": useVipPriceSelect, |
|
|
|
|
"buyNum": buyNum, |
|
|
|
|
"payChannel": payChannel, |
|
|
|
|
"tableId": tableId |
|
|
|
|
}).catchError((error) {}); |
|
|
|
|
this.promotion = null; |
|
|
|
|
promotions = ""; |
|
|
|
|
this.couponListBean = null; |
|
|
|
|
coupons = ""; |
|
|
|
|
if (baseData != null && baseData.isSuccess) { |
|
|
|
|
settleOrderInfo = baseData.data; |
|
|
|
|
if ((settleOrderInfo?.promotionId ?? "") != "") { |
|
|
|
|
settleOrderInfo.promotionInfoList.forEach((element) { |
|
|
|
|
if (element.id == settleOrderInfo.promotionId) { |
|
|
|
|
this.promotion = element; |
|
|
|
|
promotions = promotion?.name ?? ""; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
if ((settleOrderInfo?.memberCouponId ?? "") != "") { |
|
|
|
|
settleOrderInfo.couponList.forEach((element) { |
|
|
|
|
if (element.id == settleOrderInfo.memberCouponId) { |
|
|
|
|
this.couponListBean = element; |
|
|
|
|
coupons = couponListBean?.promotionName ?? ""; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
if (settleOrderInfo.orderProductList == null || |
|
|
|
|
settleOrderInfo.orderProductList.length == 0) { |
|
|
|
|
placeOrder = true; |
|
|
|
|
queryOrderDetails( |
|
|
|
|
pageType != null ? widget.arguments["orderId"] : parentId); |
|
|
|
|
} |
|
|
|
|
if (!isRaiseChannel && settleOrderInfo.isRaise) { |
|
|
|
|
isRaiseChannel = true; |
|
|
|
|
queryOrderInfo( |
|
|
|
|
address?.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
couponListBean?.id, |
|
|
|
|
0, |
|
|
|
|
promotion?.id ?? productId, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
settleOrderInfo.isRaise ? 7 : payChannel, |
|
|
|
|
tableId); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
SmartDialog.showToast(baseData?.msg ?? "", alignment: Alignment.center); |
|
|
|
|
BaseData<SettleOrderInfo> baseData = await minService.getOrderInfo({ |
|
|
|
|
"addressId": addressId, |
|
|
|
|
"isTake": isTake, |
|
|
|
|
"memberCouponId": memberCouponId, |
|
|
|
|
"orderId": orderId, |
|
|
|
|
"promotionId": promotionId, |
|
|
|
|
"productSkuId": productSkuId, |
|
|
|
|
"actProductId": actProductId, |
|
|
|
|
"actProductSkuId": actProductSkuId, |
|
|
|
|
"useVipPrice":useVipPriceSelect, |
|
|
|
|
"buyNum": buyNum, |
|
|
|
|
"payChannel":payChannel, |
|
|
|
|
"tableId": tableId |
|
|
|
|
}).catchError((error) {}); |
|
|
|
|
this.promotion = null; |
|
|
|
|
promotions = ""; |
|
|
|
|
this.couponListBean = null; |
|
|
|
|
coupons = ""; |
|
|
|
|
if (baseData != null && baseData.isSuccess) { |
|
|
|
|
settleOrderInfo = baseData.data; |
|
|
|
|
if ((settleOrderInfo?.promotionId ?? "") != "") { |
|
|
|
|
settleOrderInfo.promotionInfoList.forEach((element) { |
|
|
|
|
if (element.id == settleOrderInfo.promotionId) { |
|
|
|
|
this.promotion = element; |
|
|
|
|
promotions = promotion?.name ?? ""; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
if ((settleOrderInfo?.memberCouponId ?? "") != "") { |
|
|
|
|
settleOrderInfo.couponList.forEach((element) { |
|
|
|
|
if (element.id == settleOrderInfo.memberCouponId) { |
|
|
|
|
this.couponListBean = element; |
|
|
|
|
coupons = couponListBean?.promotionName ?? ""; |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
if (settleOrderInfo.orderProductList == null || |
|
|
|
|
settleOrderInfo.orderProductList.length == 0) { |
|
|
|
|
placeOrder = true; |
|
|
|
|
queryOrderDetails( |
|
|
|
|
pageType != null ? widget.arguments["orderId"] : parentId); |
|
|
|
|
} |
|
|
|
|
if(!isRaiseChannel && settleOrderInfo.isRaise){ |
|
|
|
|
isRaiseChannel = true; |
|
|
|
|
queryOrderInfo( |
|
|
|
|
address?.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
couponListBean?.id, |
|
|
|
|
0, |
|
|
|
|
promotion?.id ?? productId, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
settleOrderInfo.isRaise ? 7 :payChannel, |
|
|
|
|
tableId); |
|
|
|
|
} |
|
|
|
|
} finally { |
|
|
|
|
} else { |
|
|
|
|
SmartDialog.showToast(baseData?.msg ?? "", alignment: Alignment.center); |
|
|
|
|
} |
|
|
|
|
}finally{ |
|
|
|
|
setState(() {}); |
|
|
|
|
EasyLoading.dismiss(); |
|
|
|
|
} |
|
|
|
@ -263,7 +264,7 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
}); |
|
|
|
|
if (baseData != null && baseData.isSuccess) { |
|
|
|
|
SharedPreferences.getInstance().then( |
|
|
|
|
(value) => { |
|
|
|
|
(value) => { |
|
|
|
|
value.setString('minMember', jsonEncode(baseData.data)), |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
@ -312,76 +313,76 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
queryAddress(int selectedBtn) async { |
|
|
|
|
setState(() { |
|
|
|
|
this.selectedBtn = selectedBtn; |
|
|
|
|
}); |
|
|
|
|
if (address != null) { |
|
|
|
|
queryOrderInfo( |
|
|
|
|
address.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
null, |
|
|
|
|
0, |
|
|
|
|
productId ?? null, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
payChannel, |
|
|
|
|
tableId); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
BaseData<List<Address>> baseDate = |
|
|
|
|
await minService.queryAddress().catchError((error) {}); |
|
|
|
|
|
|
|
|
|
BMFCoordinate bmfCoordinate = BMFCoordinate( |
|
|
|
|
double.tryParse(storeInfo.latitude), |
|
|
|
|
double.tryParse(storeInfo.longitude), |
|
|
|
|
); |
|
|
|
|
if (baseDate != null && baseDate.isSuccess) { |
|
|
|
|
setState(() { |
|
|
|
|
address = baseDate.data[0]; |
|
|
|
|
this.selectedBtn = selectedBtn; |
|
|
|
|
}); |
|
|
|
|
for (int i = 1; i < baseDate.data.length; i++) { |
|
|
|
|
Address address1 = baseDate.data[i]; |
|
|
|
|
if (address != null) { |
|
|
|
|
queryOrderInfo( |
|
|
|
|
address.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
null, |
|
|
|
|
0, |
|
|
|
|
productId ?? null, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
payChannel, |
|
|
|
|
tableId); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
BaseData<List<Address>> baseDate = |
|
|
|
|
await minService.queryAddress().catchError((error) {}); |
|
|
|
|
|
|
|
|
|
BMFCoordinate coordinate = await BMFCalculateUtils.coordConvert( |
|
|
|
|
coordinate: BMFCoordinate( |
|
|
|
|
double.tryParse(address.longitude), |
|
|
|
|
double.tryParse(address.latitude), |
|
|
|
|
), |
|
|
|
|
fromType: BMF_COORD_TYPE.COMMON, |
|
|
|
|
toType: BMF_COORD_TYPE.BD09LL); |
|
|
|
|
BMFCoordinate coordinate1 = await BMFCalculateUtils.coordConvert( |
|
|
|
|
coordinate: BMFCoordinate( |
|
|
|
|
double.tryParse(address1.longitude), |
|
|
|
|
double.tryParse(address1.latitude), |
|
|
|
|
), |
|
|
|
|
fromType: BMF_COORD_TYPE.COMMON, |
|
|
|
|
toType: BMF_COORD_TYPE.BD09LL); |
|
|
|
|
BMFCoordinate bmfCoordinate = BMFCoordinate( |
|
|
|
|
double.tryParse(storeInfo.latitude), |
|
|
|
|
double.tryParse(storeInfo.longitude), |
|
|
|
|
); |
|
|
|
|
if (baseDate != null && baseDate.isSuccess) { |
|
|
|
|
setState(() { |
|
|
|
|
address = baseDate.data[0]; |
|
|
|
|
}); |
|
|
|
|
for (int i = 1; i < baseDate.data.length; i++) { |
|
|
|
|
Address address1 = baseDate.data[i]; |
|
|
|
|
|
|
|
|
|
BMFCoordinate coordinate = await BMFCalculateUtils.coordConvert( |
|
|
|
|
coordinate: BMFCoordinate( |
|
|
|
|
double.tryParse(address.longitude), |
|
|
|
|
double.tryParse(address.latitude), |
|
|
|
|
), |
|
|
|
|
fromType: BMF_COORD_TYPE.COMMON, |
|
|
|
|
toType: BMF_COORD_TYPE.BD09LL); |
|
|
|
|
BMFCoordinate coordinate1 = await BMFCalculateUtils.coordConvert( |
|
|
|
|
coordinate: BMFCoordinate( |
|
|
|
|
double.tryParse(address1.longitude), |
|
|
|
|
double.tryParse(address1.latitude), |
|
|
|
|
), |
|
|
|
|
fromType: BMF_COORD_TYPE.COMMON, |
|
|
|
|
toType: BMF_COORD_TYPE.BD09LL); |
|
|
|
|
|
|
|
|
|
double mi = await BMFCalculateUtils.getLocationDistance( |
|
|
|
|
bmfCoordinate, coordinate); |
|
|
|
|
double mi1 = await BMFCalculateUtils.getLocationDistance( |
|
|
|
|
bmfCoordinate, coordinate1); |
|
|
|
|
if (mi1 < mi) { |
|
|
|
|
address = address1; |
|
|
|
|
double mi = await BMFCalculateUtils.getLocationDistance( |
|
|
|
|
bmfCoordinate, coordinate); |
|
|
|
|
double mi1 = await BMFCalculateUtils.getLocationDistance( |
|
|
|
|
bmfCoordinate, coordinate1); |
|
|
|
|
if (mi1 < mi) { |
|
|
|
|
address = address1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
await queryOrderInfo( |
|
|
|
|
address.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
null, |
|
|
|
|
0, |
|
|
|
|
productId ?? null, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
payChannel, |
|
|
|
|
tableId); |
|
|
|
|
} |
|
|
|
|
await queryOrderInfo( |
|
|
|
|
address.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
null, |
|
|
|
|
0, |
|
|
|
|
productId ?? null, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
payChannel, |
|
|
|
|
tableId); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
///选择收货地址 |
|
|
|
@ -498,9 +499,7 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
placeOrderFirst.orderTypeId = 0; |
|
|
|
|
placeOrderFirst.parentCode = parentCode; // 火锅加菜 |
|
|
|
|
placeOrderFirst.parentId = parentId; // 火锅加菜 |
|
|
|
|
placeOrderFirst.payChannel = ((placeOrderFirst.cartSum == "0.00") |
|
|
|
|
? payChannel = 0 |
|
|
|
|
: (settleOrderInfo.isRaise ? 7 : payChannel)); |
|
|
|
|
placeOrderFirst.payChannel = ((placeOrderFirst.cartSum == "0.00") ? payChannel = 0 : (settleOrderInfo.isRaise ? 7:payChannel)); |
|
|
|
|
placeOrderFirst.promotionInfoDTO = PromotionInfoDTOBean(); |
|
|
|
|
placeOrderFirst.promotionInfoDTO.promotionId = |
|
|
|
|
(promotion != null && tableId <= 0) ? promotion.id : ""; |
|
|
|
@ -753,8 +752,8 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
child: Container( |
|
|
|
|
child: Column( |
|
|
|
|
children: [ |
|
|
|
|
DistributionMode((addressId, isTake, |
|
|
|
|
memberCouponId, orderId, promotionId) { |
|
|
|
|
DistributionMode((addressId, isTake, memberCouponId, |
|
|
|
|
orderId, promotionId) { |
|
|
|
|
setState(() { |
|
|
|
|
this.selectedBtn = 0; |
|
|
|
|
}); |
|
|
|
@ -785,58 +784,50 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
// ), |
|
|
|
|
|
|
|
|
|
///订单商品 |
|
|
|
|
if (settleOrderInfo != null || |
|
|
|
|
minOrderInfo != null) |
|
|
|
|
SettlementOrderCommodity( |
|
|
|
|
selectedBtn, |
|
|
|
|
settleOrderInfo, |
|
|
|
|
minOrderInfo, |
|
|
|
|
tableId, |
|
|
|
|
pageType, |
|
|
|
|
(coupons != "" || promotions != "") |
|
|
|
|
? false |
|
|
|
|
: useVipPriceSelect, |
|
|
|
|
this.showVipTips), |
|
|
|
|
if(settleOrderInfo != null || minOrderInfo != null) |
|
|
|
|
SettlementOrderCommodity( |
|
|
|
|
selectedBtn, |
|
|
|
|
settleOrderInfo, |
|
|
|
|
minOrderInfo, |
|
|
|
|
tableId, |
|
|
|
|
pageType, |
|
|
|
|
(coupons != "" || promotions!="") ? false :useVipPriceSelect, |
|
|
|
|
this.showVipTips |
|
|
|
|
), |
|
|
|
|
|
|
|
|
|
///优惠券/备注/会员优惠金额 |
|
|
|
|
if (settleOrderInfo != null || |
|
|
|
|
minOrderInfo != null) |
|
|
|
|
ActivityCouponRemarks( |
|
|
|
|
couponCart, |
|
|
|
|
activityCart, |
|
|
|
|
settleOrderInfo, |
|
|
|
|
minOrderInfo, |
|
|
|
|
coupons, |
|
|
|
|
promotions, |
|
|
|
|
couponCount(), |
|
|
|
|
placeOrder, |
|
|
|
|
remakers, |
|
|
|
|
() { |
|
|
|
|
Navigator.of(context).pushNamed( |
|
|
|
|
'/router/edit_remarks_page', |
|
|
|
|
arguments: {}, |
|
|
|
|
).then((value) => { |
|
|
|
|
setState(() { |
|
|
|
|
if (value != null) |
|
|
|
|
remakers = value; |
|
|
|
|
}) |
|
|
|
|
}); |
|
|
|
|
}, |
|
|
|
|
tableId, |
|
|
|
|
vipPriceSelect, |
|
|
|
|
if(settleOrderInfo != null || minOrderInfo != null) |
|
|
|
|
ActivityCouponRemarks( |
|
|
|
|
couponCart, |
|
|
|
|
activityCart, |
|
|
|
|
settleOrderInfo, |
|
|
|
|
minOrderInfo, |
|
|
|
|
coupons, |
|
|
|
|
promotions, |
|
|
|
|
couponCount(), |
|
|
|
|
placeOrder, |
|
|
|
|
remakers, |
|
|
|
|
() { |
|
|
|
|
setState(() { |
|
|
|
|
this.showVipTips = true; |
|
|
|
|
}); |
|
|
|
|
}), |
|
|
|
|
|
|
|
|
|
if (settleOrderInfo != null && |
|
|
|
|
placeOrder && |
|
|
|
|
joinA != JoinActivity.BargainBug) |
|
|
|
|
Navigator.of(context).pushNamed( |
|
|
|
|
'/router/edit_remarks_page', |
|
|
|
|
arguments: {}, |
|
|
|
|
).then((value) => { |
|
|
|
|
setState(() { |
|
|
|
|
if (value != null) remakers = value; |
|
|
|
|
}) |
|
|
|
|
});}, |
|
|
|
|
tableId, |
|
|
|
|
vipPriceSelect, |
|
|
|
|
(){ |
|
|
|
|
setState(() { |
|
|
|
|
this.showVipTips = true; |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
), |
|
|
|
|
|
|
|
|
|
///支付方式 |
|
|
|
|
PayMethod(payChannelCheck, coupons, promotions, |
|
|
|
|
useVipPriceSelect, settleOrderInfo), |
|
|
|
|
if (settleOrderInfo != null && placeOrder && joinA != JoinActivity.BargainBug) |
|
|
|
|
///支付方式 |
|
|
|
|
PayMethod(payChannelCheck,coupons,promotions,useVipPriceSelect,settleOrderInfo), |
|
|
|
|
], |
|
|
|
|
), |
|
|
|
|
), |
|
|
|
@ -906,10 +897,10 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
orderButton = true; |
|
|
|
|
pageType != null |
|
|
|
|
? bargainOrderId != null |
|
|
|
|
? activityPay() |
|
|
|
|
: joinA == JoinActivity.GoJoin |
|
|
|
|
? queryJoinAct() |
|
|
|
|
: queryLaunchAct() |
|
|
|
|
? activityPay() |
|
|
|
|
: joinA == JoinActivity.GoJoin |
|
|
|
|
? queryJoinAct() |
|
|
|
|
: queryLaunchAct() |
|
|
|
|
: queryPlaceOrderFirst(); |
|
|
|
|
}, |
|
|
|
|
), |
|
|
|
@ -930,23 +921,23 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
|
|
|
|
|
payChannelCheck(int payChannel) { |
|
|
|
|
this.payChannel = payChannel; |
|
|
|
|
if (tableId > 0) { |
|
|
|
|
queryOrderDetails(parentId); |
|
|
|
|
} else { |
|
|
|
|
queryOrderInfo( |
|
|
|
|
address?.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
couponListBean?.id, |
|
|
|
|
0, |
|
|
|
|
promotion?.id ?? productId, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
payChannel, |
|
|
|
|
tableId); |
|
|
|
|
} |
|
|
|
|
if (tableId > 0) { |
|
|
|
|
queryOrderDetails(parentId); |
|
|
|
|
} else { |
|
|
|
|
queryOrderInfo( |
|
|
|
|
address?.id, |
|
|
|
|
selectedBtn, |
|
|
|
|
couponListBean?.id, |
|
|
|
|
0, |
|
|
|
|
promotion?.id ?? productId, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
payChannel, |
|
|
|
|
tableId);} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
vipPriceSelect(bool useVipPriceSelect) { |
|
|
|
@ -966,8 +957,7 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
useVipPriceSelect, |
|
|
|
|
count1, |
|
|
|
|
payChannel, |
|
|
|
|
tableId); |
|
|
|
|
} |
|
|
|
|
tableId);} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
mobileChange(String mobile) { |
|
|
|
@ -1007,8 +997,10 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
// promotions = ""; |
|
|
|
|
// this.promotion = null; |
|
|
|
|
if (tableId > 0) { |
|
|
|
|
if (couponBean == null) queryCancelMemberCoupon(parentId); |
|
|
|
|
if (couponBean.id != null) queryUseMemberCoupon(couponBean.id); |
|
|
|
|
if(couponBean == null) |
|
|
|
|
queryCancelMemberCoupon(parentId); |
|
|
|
|
if (couponBean.id != null) |
|
|
|
|
queryUseMemberCoupon(couponBean.id); |
|
|
|
|
} else { |
|
|
|
|
queryOrderInfo( |
|
|
|
|
address?.id, |
|
|
|
@ -1048,7 +1040,7 @@ class _Settlement extends State<Settlement> {
|
|
|
|
|
selectedBtn, |
|
|
|
|
null, |
|
|
|
|
0, |
|
|
|
|
(pro.id ?? "") ?? productId, |
|
|
|
|
(pro.id??"")??productId, |
|
|
|
|
productSkuId ?? "", |
|
|
|
|
actProductId ?? "", |
|
|
|
|
actProductSkuId ?? "", |
|
|
|
|