Unverified Commit 7023b205 authored by staney's avatar staney Committed by GitHub
Browse files

Merge pull request #1 from linlinjava/master

同步更新代码
parents c6ab92f9 506a8c01
...@@ -39,8 +39,9 @@ ...@@ -39,8 +39,9 @@
<script> <script>
import { Radio, RadioGroup, Dialog } from 'vant'; import { Radio, RadioGroup, Dialog } from 'vant';
import { orderDetail, orderPrepay } from '@/api/api'; import { orderDetail, orderPrepay, orderH5pay } from '@/api/api';
import _ from 'lodash'; import _ from 'lodash';
import { getLocalStorage, setLocalStorage } from '@/utils/local-storage';
export default { export default {
name: 'payment', name: 'payment',
...@@ -72,20 +73,109 @@ export default { ...@@ -72,20 +73,109 @@ export default {
Dialog.alert({ Dialog.alert({
message: '你选择了' + (this.payWay === 'wx' ? '微信支付' : '支付宝支付') message: '你选择了' + (this.payWay === 'wx' ? '微信支付' : '支付宝支付')
}).then(() => { }).then(() => {
if (this.payWay === 'wx') {
this.$router.push({ let ua = navigator.userAgent.toLowerCase();
let isWeixin = ua.indexOf('micromessenger') != -1;
if (isWeixin) {
orderPrepay({ orderId: this.orderId })
.then(res => {
let data = res.data.data;
let prepay_data = JSON.stringify({
appId: data.appId,
timeStamp: data.timeStamp,
nonceStr: data.nonceStr,
package: data.packageValue,
signType: 'MD5',
paySign: data.paySign
});
setLocalStorage({ prepay_data: prepay_data });
if (typeof WeixinJSBridge == 'undefined') {
if (document.addEventListener) {
document.addEventListener(
'WeixinJSBridgeReady',
this.onBridgeReady,
false
);
} else if (document.attachEvent) {
document.attachEvent(
'WeixinJSBridgeReady',
this.onBridgeReady
);
document.attachEvent(
'onWeixinJSBridgeReady',
this.onBridgeReady
);
}
} else {
this.onBridgeReady();
}
})
.catch(err => {
Dialog.alert({ message: err.data.errmsg });
that.$router.replace({
name: 'paymentStatus',
params: {
status: 'failed'
}
});
});
} else {
orderH5pay({ orderId: this.orderId })
.then(res => {
let data = res.data.data;
window.location.replace(
data.mwebUrl +
'&redirect_url=' +
encodeURIComponent(
window.location.origin +
'/#/?orderId=' +
this.orderId +
'&tip=yes'
)
);
})
.catch(err => {
Dialog.alert({ message: err.data.errmsg });
});
}
} else {
//todo : alipay
}
});
},
onBridgeReady() {
let that = this;
let data = getLocalStorage('prepay_data');
// eslint-disable-next-line no-undef
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
JSON.parse(data.prepay_data),
function(res) {
if (res.err_msg == 'get_brand_wcpay_request:ok') {
that.$router.replace({
name: 'paymentStatus', name: 'paymentStatus',
params: { params: {
status: 'success' status: 'success'
} }
}); });
} else if (res.err_msg == 'get_brand_wcpay_request:cancel') {
that.$router.replace({
name: 'paymentStatus',
params: {
status: 'cancel'
}
}); });
} else {
// // 利用weixin-js-sdk调用微信支付 that.$router.replace({
// orderPrepay({orderId: this.orderId}).then(res => { name: 'paymentStatus',
// var payParams = res.data.data; params: {
status: 'failed'
// }); }
});
}
}
);
} }
}, },
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
class="verifi_code red" class="verifi_code red"
:class="{verifi_code_counting: counting}" :class="{verifi_code_counting: counting}"
@click="getCode"> @click="getCode">
<countdown v-if="counting" :time="60000" @countdownend="countdownend"> <countdown v-if="counting" :time="60000" @end="countdownend">
<template slot-scope="props">{{ +props.seconds || 60 }}秒后获取</template> <template slot-scope="props">{{ +props.seconds || 60 }}秒后获取</template>
</countdown> </countdown>
<span v-else>获取验证码</span> <span v-else>获取验证码</span>
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
class="verifi_code red" class="verifi_code red"
:class="{verifi_code_counting: counting}" :class="{verifi_code_counting: counting}"
@click="getCode"> @click="getCode">
<countdown v-if="counting" :time="60000" @countdownend="countdownend"> <countdown v-if="counting" :time="60000" @end="countdownend">
<template slot-scope="props">{{ +props.seconds || 60 }}秒后获取</template> <template slot-scope="props">{{ +props.seconds || 60 }}秒后获取</template>
</countdown> </countdown>
<span v-else>获取验证码</span> <span v-else>获取验证码</span>
......
...@@ -3,6 +3,7 @@ package org.linlinjava.litemall.wx.service; ...@@ -3,6 +3,7 @@ package org.linlinjava.litemall.wx.service;
import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse; import com.github.binarywang.wxpay.bean.notify.WxPayNotifyResponse;
import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult; import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.github.binarywang.wxpay.bean.order.WxPayMwebOrderResult;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.constant.WxPayConstants;
...@@ -17,6 +18,7 @@ import org.linlinjava.litemall.core.notify.NotifyService; ...@@ -17,6 +18,7 @@ import org.linlinjava.litemall.core.notify.NotifyService;
import org.linlinjava.litemall.core.notify.NotifyType; import org.linlinjava.litemall.core.notify.NotifyType;
import org.linlinjava.litemall.core.qcode.QCodeService; import org.linlinjava.litemall.core.qcode.QCodeService;
import org.linlinjava.litemall.core.system.SystemConfig; import org.linlinjava.litemall.core.system.SystemConfig;
import org.linlinjava.litemall.core.task.TaskService;
import org.linlinjava.litemall.core.util.DateTimeUtil; import org.linlinjava.litemall.core.util.DateTimeUtil;
import org.linlinjava.litemall.core.util.JacksonUtil; import org.linlinjava.litemall.core.util.JacksonUtil;
import org.linlinjava.litemall.core.util.ResponseUtil; import org.linlinjava.litemall.core.util.ResponseUtil;
...@@ -26,6 +28,7 @@ import org.linlinjava.litemall.db.util.CouponUserConstant; ...@@ -26,6 +28,7 @@ import org.linlinjava.litemall.db.util.CouponUserConstant;
import org.linlinjava.litemall.db.util.OrderHandleOption; import org.linlinjava.litemall.db.util.OrderHandleOption;
import org.linlinjava.litemall.db.util.OrderUtil; import org.linlinjava.litemall.db.util.OrderUtil;
import org.linlinjava.litemall.core.util.IpUtil; import org.linlinjava.litemall.core.util.IpUtil;
import org.linlinjava.litemall.wx.task.OrderUnpaidTask;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -104,6 +107,8 @@ public class WxOrderService { ...@@ -104,6 +107,8 @@ public class WxOrderService {
private LitemallCouponUserService couponUserService; private LitemallCouponUserService couponUserService;
@Autowired @Autowired
private CouponVerifyService couponVerifyService; private CouponVerifyService couponVerifyService;
@Autowired
private TaskService taskService;
/** /**
* 订单列表 * 订单列表
...@@ -152,6 +157,7 @@ public class WxOrderService { ...@@ -152,6 +157,7 @@ public class WxOrderService {
orderGoodsVo.put("number", orderGoods.getNumber()); orderGoodsVo.put("number", orderGoods.getNumber());
orderGoodsVo.put("picUrl", orderGoods.getPicUrl()); orderGoodsVo.put("picUrl", orderGoods.getPicUrl());
orderGoodsVo.put("specifications", orderGoods.getSpecifications()); orderGoodsVo.put("specifications", orderGoods.getSpecifications());
orderGoodsVo.put("price",orderGoods.getPrice());
orderGoodsVoList.add(orderGoodsVo); orderGoodsVoList.add(orderGoodsVo);
} }
orderVo.put("goodsList", orderGoodsVoList); orderVo.put("goodsList", orderGoodsVoList);
...@@ -185,6 +191,7 @@ public class WxOrderService { ...@@ -185,6 +191,7 @@ public class WxOrderService {
Map<String, Object> orderVo = new HashMap<String, Object>(); Map<String, Object> orderVo = new HashMap<String, Object>();
orderVo.put("id", order.getId()); orderVo.put("id", order.getId());
orderVo.put("orderSn", order.getOrderSn()); orderVo.put("orderSn", order.getOrderSn());
orderVo.put("message", order.getMessage());
orderVo.put("addTime", order.getAddTime()); orderVo.put("addTime", order.getAddTime());
orderVo.put("consignee", order.getConsignee()); orderVo.put("consignee", order.getConsignee());
orderVo.put("mobile", order.getMobile()); orderVo.put("mobile", order.getMobile());
...@@ -239,6 +246,7 @@ public class WxOrderService { ...@@ -239,6 +246,7 @@ public class WxOrderService {
Integer cartId = JacksonUtil.parseInteger(body, "cartId"); Integer cartId = JacksonUtil.parseInteger(body, "cartId");
Integer addressId = JacksonUtil.parseInteger(body, "addressId"); Integer addressId = JacksonUtil.parseInteger(body, "addressId");
Integer couponId = JacksonUtil.parseInteger(body, "couponId"); Integer couponId = JacksonUtil.parseInteger(body, "couponId");
Integer userCouponId = JacksonUtil.parseInteger(body, "userCouponId");
String message = JacksonUtil.parseString(body, "message"); String message = JacksonUtil.parseString(body, "message");
Integer grouponRulesId = JacksonUtil.parseInteger(body, "grouponRulesId"); Integer grouponRulesId = JacksonUtil.parseInteger(body, "grouponRulesId");
Integer grouponLinkId = JacksonUtil.parseInteger(body, "grouponLinkId"); Integer grouponLinkId = JacksonUtil.parseInteger(body, "grouponLinkId");
...@@ -300,7 +308,7 @@ public class WxOrderService { ...@@ -300,7 +308,7 @@ public class WxOrderService {
BigDecimal couponPrice = new BigDecimal(0.00); BigDecimal couponPrice = new BigDecimal(0.00);
// 如果couponId=0则没有优惠券,couponId=-1则不使用优惠券 // 如果couponId=0则没有优惠券,couponId=-1则不使用优惠券
if (couponId != 0 && couponId != -1) { if (couponId != 0 && couponId != -1) {
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice); LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, userCouponId, checkedGoodsPrice);
if (coupon == null) { if (coupon == null) {
return ResponseUtil.badArgumentValue(); return ResponseUtil.badArgumentValue();
} }
...@@ -389,7 +397,7 @@ public class WxOrderService { ...@@ -389,7 +397,7 @@ public class WxOrderService {
// 如果使用了优惠券,设置优惠券使用状态 // 如果使用了优惠券,设置优惠券使用状态
if (couponId != 0 && couponId != -1) { if (couponId != 0 && couponId != -1) {
LitemallCouponUser couponUser = couponUserService.queryOne(userId, couponId); LitemallCouponUser couponUser = couponUserService.findById(userCouponId);
couponUser.setStatus(CouponUserConstant.STATUS_USED); couponUser.setStatus(CouponUserConstant.STATUS_USED);
couponUser.setUsedTime(LocalDateTime.now()); couponUser.setUsedTime(LocalDateTime.now());
couponUser.setOrderId(orderId); couponUser.setOrderId(orderId);
...@@ -419,6 +427,9 @@ public class WxOrderService { ...@@ -419,6 +427,9 @@ public class WxOrderService {
grouponService.createGroupon(groupon); grouponService.createGroupon(groupon);
} }
// 订单支付超期任务
taskService.addTask(new OrderUnpaidTask(orderId));
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
data.put("orderId", orderId); data.put("orderId", orderId);
return ResponseUtil.ok(data); return ResponseUtil.ok(data);
...@@ -560,6 +571,60 @@ public class WxOrderService { ...@@ -560,6 +571,60 @@ public class WxOrderService {
return ResponseUtil.ok(result); return ResponseUtil.ok(result);
} }
/**
* 微信H5支付
*
* @param userId
* @param body
* @param request
* @return
*/
@Transactional
public Object h5pay(Integer userId, String body, HttpServletRequest request) {
if (userId == null) {
return ResponseUtil.unlogin();
}
Integer orderId = JacksonUtil.parseInteger(body, "orderId");
if (orderId == null) {
return ResponseUtil.badArgument();
}
LitemallOrder order = orderService.findById(orderId);
if (order == null) {
return ResponseUtil.badArgumentValue();
}
if (!order.getUserId().equals(userId)) {
return ResponseUtil.badArgumentValue();
}
// 检测是否能够取消
OrderHandleOption handleOption = OrderUtil.build(order);
if (!handleOption.isPay()) {
return ResponseUtil.fail(ORDER_INVALID_OPERATION, "订单不能支付");
}
WxPayMwebOrderResult result = null;
try {
WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
orderRequest.setOutTradeNo(order.getOrderSn());
orderRequest.setTradeType("MWEB");
orderRequest.setBody("订单:" + order.getOrderSn());
// 元转成分
int fee = 0;
BigDecimal actualPrice = order.getActualPrice();
fee = actualPrice.multiply(new BigDecimal(100)).intValue();
orderRequest.setTotalFee(fee);
orderRequest.setSpbillCreateIp(IpUtil.getIpAddr(request));
result = wxPayService.createOrder(orderRequest);
} catch (Exception e) {
e.printStackTrace();
}
return ResponseUtil.ok(result);
}
/** /**
* 微信付款成功或失败回调接口 * 微信付款成功或失败回调接口
* <p> * <p>
...@@ -612,7 +677,7 @@ public class WxOrderService { ...@@ -612,7 +677,7 @@ public class WxOrderService {
} }
// 检查这个订单是否已经处理过 // 检查这个订单是否已经处理过
if (OrderUtil.isPayStatus(order) && order.getPayId() != null) { if (OrderUtil.hasPayed(order)) {
return WxPayNotifyResponse.success("订单已经处理成功!"); return WxPayNotifyResponse.success("订单已经处理成功!");
} }
...@@ -658,6 +723,37 @@ public class WxOrderService { ...@@ -658,6 +723,37 @@ public class WxOrderService {
if (grouponService.updateById(groupon) == 0) { if (grouponService.updateById(groupon) == 0) {
return WxPayNotifyResponse.fail("更新数据已失效"); return WxPayNotifyResponse.fail("更新数据已失效");
} }
// 团购已达成,更新关联订单支付状态
if (groupon.getGrouponId() > 0) {
List<LitemallGroupon> grouponList = grouponService.queryJoinRecord(groupon.getGrouponId());
if (grouponList.size() >= grouponRules.getDiscountMember() - 1) {
for (LitemallGroupon grouponActivity : grouponList) {
if (grouponActivity.getOrderId().equals(order.getId())) {
//当前订单
continue;
}
LitemallOrder grouponOrder = orderService.findById(grouponActivity.getOrderId());
if (grouponOrder.getOrderStatus().equals(OrderUtil.STATUS_PAY_GROUPON)) {
grouponOrder.setOrderStatus(OrderUtil.STATUS_PAY);
orderService.updateWithOptimisticLocker(grouponOrder);
}
}
LitemallGroupon grouponSource = grouponService.queryById(groupon.getGrouponId());
LitemallOrder grouponOrder = orderService.findById(grouponSource.getOrderId());
if (grouponOrder.getOrderStatus().equals(OrderUtil.STATUS_PAY_GROUPON)) {
grouponOrder.setOrderStatus(OrderUtil.STATUS_PAY);
orderService.updateWithOptimisticLocker(grouponOrder);
}
}
} else {
order = orderService.findBySn(orderSn);
order.setOrderStatus(OrderUtil.STATUS_PAY_GROUPON);
orderService.updateWithOptimisticLocker(order);
}
} }
//TODO 发送邮件和短信通知,这里采用异步发送 //TODO 发送邮件和短信通知,这里采用异步发送
...@@ -678,6 +774,9 @@ public class WxOrderService { ...@@ -678,6 +774,9 @@ public class WxOrderService {
notifyService.notifyWxTemplate(result.getOpenid(), NotifyType.PAY_SUCCEED, parms, "pages/index/index?orderId=" + order.getId()); notifyService.notifyWxTemplate(result.getOpenid(), NotifyType.PAY_SUCCEED, parms, "pages/index/index?orderId=" + order.getId());
// 取消订单超时未支付任务
taskService.removeTask(new OrderUnpaidTask(order.getId()));
return WxPayNotifyResponse.success("处理成功!"); return WxPayNotifyResponse.success("处理成功!");
} }
......
package org.linlinjava.litemall.wx.task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.core.system.SystemConfig;
import org.linlinjava.litemall.core.task.Task;
import org.linlinjava.litemall.core.util.BeanUtil;
import org.linlinjava.litemall.db.domain.LitemallOrder;
import org.linlinjava.litemall.db.domain.LitemallOrderGoods;
import org.linlinjava.litemall.db.service.LitemallGoodsProductService;
import org.linlinjava.litemall.db.service.LitemallOrderGoodsService;
import org.linlinjava.litemall.db.service.LitemallOrderService;
import org.linlinjava.litemall.db.util.OrderUtil;
import java.time.LocalDateTime;
import java.util.List;
public class OrderUnpaidTask extends Task {
private final Log logger = LogFactory.getLog(OrderUnpaidTask.class);
private int orderId = -1;
public OrderUnpaidTask(Integer orderId, long delayInMilliseconds){
super("OrderUnpaidTask-" + orderId, delayInMilliseconds);
this.orderId = orderId;
}
public OrderUnpaidTask(Integer orderId){
super("OrderUnpaidTask-" + orderId, SystemConfig.getOrderUnpaid() * 60 * 1000);
this.orderId = orderId;
}
@Override
public void run() {
logger.info("系统开始处理延时任务---订单超时未付款---" + this.orderId);
LitemallOrderService orderService = BeanUtil.getBean(LitemallOrderService.class);
LitemallOrderGoodsService orderGoodsService = BeanUtil.getBean(LitemallOrderGoodsService.class);
LitemallGoodsProductService productService = BeanUtil.getBean(LitemallGoodsProductService.class);
LitemallOrder order = orderService.findById(this.orderId);
if(order == null){
return;
}
if(!OrderUtil.isCreateStatus(order)){
return;
}
// 设置订单已取消状态
order.setOrderStatus(OrderUtil.STATUS_AUTO_CANCEL);
order.setEndTime(LocalDateTime.now());
if (orderService.updateWithOptimisticLocker(order) == 0) {
throw new RuntimeException("更新数据已失效");
}
// 商品货品数量增加
Integer orderId = order.getId();
List<LitemallOrderGoods> orderGoodsList = orderGoodsService.queryByOid(orderId);
for (LitemallOrderGoods orderGoods : orderGoodsList) {
Integer productId = orderGoods.getProductId();
Short number = orderGoods.getNumber();
if (productService.addStock(productId, number) == 0) {
throw new RuntimeException("商品货品库存增加失败");
}
}
logger.info("系统结束处理延时任务---订单超时未付款---" + this.orderId);
}
}
package org.linlinjava.litemall.wx.task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.core.system.SystemConfig;
import org.linlinjava.litemall.core.task.TaskService;
import org.linlinjava.litemall.db.domain.LitemallOrder;
import org.linlinjava.litemall.db.service.LitemallOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
@Component
public class TaskStartupRunner implements ApplicationRunner {
@Autowired
private LitemallOrderService orderService;
@Autowired
private TaskService taskService;
@Override
public void run(ApplicationArguments args) throws Exception {
List<LitemallOrder> orderList = orderService.queryUnpaid(SystemConfig.getOrderUnpaid());
for(LitemallOrder order : orderList){
LocalDateTime add = order.getAddTime();
LocalDateTime now = LocalDateTime.now();
LocalDateTime expire = add.plusMinutes(SystemConfig.getOrderUnpaid());
if(expire.isBefore(now)) {
// 已经过期,则加入延迟队列
taskService.addTask(new OrderUnpaidTask(order.getId(), 0));
}
else{
// 还没过期,则加入延迟队列
long delay = ChronoUnit.MILLIS.between(now, expire);
taskService.addTask(new OrderUnpaidTask(order.getId(), delay));
}
}
}
}
\ No newline at end of file
...@@ -4,6 +4,7 @@ import java.time.LocalDateTime; ...@@ -4,6 +4,7 @@ import java.time.LocalDateTime;
public class CouponVo { public class CouponVo {
private Integer id; private Integer id;
private Integer cid;
private String name; private String name;
private String desc; private String desc;
private String tag; private String tag;
...@@ -11,6 +12,7 @@ public class CouponVo { ...@@ -11,6 +12,7 @@ public class CouponVo {
private String discount; private String discount;
private LocalDateTime startTime; private LocalDateTime startTime;
private LocalDateTime endTime; private LocalDateTime endTime;
private boolean available;
public Integer getId() { public Integer getId() {
return id; return id;
...@@ -20,6 +22,14 @@ public class CouponVo { ...@@ -20,6 +22,14 @@ public class CouponVo {
this.id = id; this.id = id;
} }
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getName() { public String getName() {
return name; return name;
} }
...@@ -75,4 +85,12 @@ public class CouponVo { ...@@ -75,4 +85,12 @@ public class CouponVo {
public void setEndTime(LocalDateTime endTime) { public void setEndTime(LocalDateTime endTime) {
this.endTime = endTime; this.endTime = endTime;
} }
public boolean isAvailable() {
return available;
}
public void setAvailable(boolean available) {
this.available = available;
}
} }
...@@ -239,10 +239,12 @@ public class WxAuthController { ...@@ -239,10 +239,12 @@ public class WxAuthController {
String password = JacksonUtil.parseString(body, "password"); String password = JacksonUtil.parseString(body, "password");
String mobile = JacksonUtil.parseString(body, "mobile"); String mobile = JacksonUtil.parseString(body, "mobile");
String code = JacksonUtil.parseString(body, "code"); String code = JacksonUtil.parseString(body, "code");
// 如果是小程序注册,则必须非空
// 其他情况,可以为空
String wxCode = JacksonUtil.parseString(body, "wxCode"); String wxCode = JacksonUtil.parseString(body, "wxCode");
if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || StringUtils.isEmpty(mobile) if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password) || StringUtils.isEmpty(mobile)
|| StringUtils.isEmpty(wxCode) || StringUtils.isEmpty(code)) { || StringUtils.isEmpty(code)) {
return ResponseUtil.badArgument(); return ResponseUtil.badArgument();
} }
...@@ -264,7 +266,10 @@ public class WxAuthController { ...@@ -264,7 +266,10 @@ public class WxAuthController {
return ResponseUtil.fail(AUTH_CAPTCHA_UNMATCH, "验证码错误"); return ResponseUtil.fail(AUTH_CAPTCHA_UNMATCH, "验证码错误");
} }
String openId = null; String openId = "";
// 非空,则是小程序注册
// 继续验证openid
if(!StringUtils.isEmpty(wxCode)) {
try { try {
WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(wxCode); WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(wxCode);
openId = result.getOpenid(); openId = result.getOpenid();
...@@ -284,6 +289,7 @@ public class WxAuthController { ...@@ -284,6 +289,7 @@ public class WxAuthController {
return ResponseUtil.fail(AUTH_OPENID_BINDED, "openid已绑定账号"); return ResponseUtil.fail(AUTH_OPENID_BINDED, "openid已绑定账号");
} }
} }
}
LitemallUser user = null; LitemallUser user = null;
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
......
package org.linlinjava.litemall.wx.web; package org.linlinjava.litemall.wx.web;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.linlinjava.litemall.core.system.SystemConfig; import org.linlinjava.litemall.core.system.SystemConfig;
...@@ -14,10 +15,7 @@ import org.springframework.validation.annotation.Validated; ...@@ -14,10 +15,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.linlinjava.litemall.wx.util.WxResponseCode.GOODS_NO_STOCK; import static org.linlinjava.litemall.wx.util.WxResponseCode.GOODS_NO_STOCK;
import static org.linlinjava.litemall.wx.util.WxResponseCode.GOODS_UNSHELVE; import static org.linlinjava.litemall.wx.util.WxResponseCode.GOODS_UNSHELVE;
...@@ -60,7 +58,22 @@ public class WxCartController { ...@@ -60,7 +58,22 @@ public class WxCartController {
return ResponseUtil.unlogin(); return ResponseUtil.unlogin();
} }
List<LitemallCart> cartList = cartService.queryByUid(userId); List<LitemallCart> list = cartService.queryByUid(userId);
List<LitemallCart> cartList = new ArrayList<>();
// TODO
// 如果系统检查商品已删除或已下架,则系统自动删除。
// 更好的效果应该是告知用户商品失效,允许用户点击按钮来清除失效商品。
for (LitemallCart cart : list) {
LitemallGoods goods = goodsService.findById(cart.getGoodsId());
if (goods == null || !goods.getIsOnSale()) {
cartService.deleteById(cart.getId());
logger.debug("系统自动删除失效购物车商品 goodsId=" + cart.getGoodsId() + " productId=" + cart.getProductId());
}
else{
cartList.add(cart);
}
}
Integer goodsCount = 0; Integer goodsCount = 0;
BigDecimal goodsAmount = new BigDecimal(0.00); BigDecimal goodsAmount = new BigDecimal(0.00);
Integer checkedGoodsCount = 0; Integer checkedGoodsCount = 0;
...@@ -133,7 +146,12 @@ public class WxCartController { ...@@ -133,7 +146,12 @@ public class WxCartController {
cart.setId(null); cart.setId(null);
cart.setGoodsSn(goods.getGoodsSn()); cart.setGoodsSn(goods.getGoodsSn());
cart.setGoodsName((goods.getName())); cart.setGoodsName((goods.getName()));
if(StringUtils.isEmpty(product.getUrl())){
cart.setPicUrl(goods.getPicUrl()); cart.setPicUrl(goods.getPicUrl());
}
else{
cart.setPicUrl(product.getUrl());
}
cart.setPrice(product.getPrice()); cart.setPrice(product.getPrice());
cart.setSpecifications(product.getSpecifications()); cart.setSpecifications(product.getSpecifications());
cart.setUserId(userId); cart.setUserId(userId);
...@@ -202,7 +220,12 @@ public class WxCartController { ...@@ -202,7 +220,12 @@ public class WxCartController {
cart.setId(null); cart.setId(null);
cart.setGoodsSn(goods.getGoodsSn()); cart.setGoodsSn(goods.getGoodsSn());
cart.setGoodsName((goods.getName())); cart.setGoodsName((goods.getName()));
if(StringUtils.isEmpty(product.getUrl())){
cart.setPicUrl(goods.getPicUrl()); cart.setPicUrl(goods.getPicUrl());
}
else{
cart.setPicUrl(product.getUrl());
}
cart.setPrice(product.getPrice()); cart.setPrice(product.getPrice());
cart.setSpecifications(product.getSpecifications()); cart.setSpecifications(product.getSpecifications());
cart.setUserId(userId); cart.setUserId(userId);
...@@ -386,7 +409,7 @@ public class WxCartController { ...@@ -386,7 +409,7 @@ public class WxCartController {
* @return 购物车操作结果 * @return 购物车操作结果
*/ */
@GetMapping("checkout") @GetMapping("checkout")
public Object checkout(@LoginUser Integer userId, Integer cartId, Integer addressId, Integer couponId, Integer grouponRulesId) { public Object checkout(@LoginUser Integer userId, Integer cartId, Integer addressId, Integer couponId, Integer userCouponId, Integer grouponRulesId) {
if (userId == null) { if (userId == null) {
return ResponseUtil.unlogin(); return ResponseUtil.unlogin();
} }
...@@ -445,10 +468,12 @@ public class WxCartController { ...@@ -445,10 +468,12 @@ public class WxCartController {
// 计算优惠券可用情况 // 计算优惠券可用情况
BigDecimal tmpCouponPrice = new BigDecimal(0.00); BigDecimal tmpCouponPrice = new BigDecimal(0.00);
Integer tmpCouponId = 0; Integer tmpCouponId = 0;
Integer tmpUserCouponId = 0;
int tmpCouponLength = 0; int tmpCouponLength = 0;
List<LitemallCouponUser> couponUserList = couponUserService.queryAll(userId); List<LitemallCouponUser> couponUserList = couponUserService.queryAll(userId);
for(LitemallCouponUser couponUser : couponUserList){ for(LitemallCouponUser couponUser : couponUserList){
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponUser.getCouponId(), checkedGoodsPrice); tmpUserCouponId = couponUser.getId();
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponUser.getCouponId(), tmpUserCouponId, checkedGoodsPrice);
if(coupon == null){ if(coupon == null){
continue; continue;
} }
...@@ -468,17 +493,20 @@ public class WxCartController { ...@@ -468,17 +493,20 @@ public class WxCartController {
// 3. 用户已选择优惠券,则测试优惠券是否合适 // 3. 用户已选择优惠券,则测试优惠券是否合适
if (couponId == null || couponId.equals(-1)){ if (couponId == null || couponId.equals(-1)){
couponId = -1; couponId = -1;
userCouponId = -1;
} }
else if (couponId.equals(0)) { else if (couponId.equals(0)) {
couponPrice = tmpCouponPrice; couponPrice = tmpCouponPrice;
couponId = tmpCouponId; couponId = tmpCouponId;
userCouponId = tmpUserCouponId;
} }
else { else {
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, checkedGoodsPrice); LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponId, userCouponId, checkedGoodsPrice);
// 用户选择的优惠券有问题,则选择合适优惠券,否则使用用户选择的优惠券 // 用户选择的优惠券有问题,则选择合适优惠券,否则使用用户选择的优惠券
if(coupon == null){ if(coupon == null){
couponPrice = tmpCouponPrice; couponPrice = tmpCouponPrice;
couponId = tmpCouponId; couponId = tmpCouponId;
userCouponId = tmpUserCouponId;
} }
else { else {
couponPrice = coupon.getDiscount(); couponPrice = coupon.getDiscount();
...@@ -502,6 +530,7 @@ public class WxCartController { ...@@ -502,6 +530,7 @@ public class WxCartController {
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();
data.put("addressId", addressId); data.put("addressId", addressId);
data.put("couponId", couponId); data.put("couponId", couponId);
data.put("userCouponId", userCouponId);
data.put("cartId", cartId); data.put("cartId", cartId);
data.put("grouponRulesId", grouponRulesId); data.put("grouponRulesId", grouponRulesId);
data.put("grouponPrice", grouponPrice); data.put("grouponPrice", grouponPrice);
......
...@@ -30,6 +30,20 @@ public class WxCatalogController { ...@@ -30,6 +30,20 @@ public class WxCatalogController {
@Autowired @Autowired
private LitemallCategoryService categoryService; private LitemallCategoryService categoryService;
@GetMapping("/getfirstcategory")
public Object getFirstCategory() {
// 所有一级分类目录
List<LitemallCategory> l1CatList = categoryService.queryL1();
return ResponseUtil.ok(l1CatList);
}
@GetMapping("/getsecondcategory")
public Object getSecondCategory(@NotNull Integer id) {
// 所有二级分类目录
List<LitemallCategory> currentSubCategory = categoryService.queryByPid(id);
return ResponseUtil.ok(currentSubCategory);
}
/** /**
* 分类详情 * 分类详情
* *
......
...@@ -79,7 +79,7 @@ public class WxCouponController { ...@@ -79,7 +79,7 @@ public class WxCouponController {
*/ */
@GetMapping("mylist") @GetMapping("mylist")
public Object mylist(@LoginUser Integer userId, public Object mylist(@LoginUser Integer userId,
@NotNull Short status, Short status,
@RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer limit, @RequestParam(defaultValue = "10") Integer limit,
@Sort @RequestParam(defaultValue = "add_time") String sort, @Sort @RequestParam(defaultValue = "add_time") String sort,
...@@ -99,7 +99,8 @@ public class WxCouponController { ...@@ -99,7 +99,8 @@ public class WxCouponController {
Integer couponId = couponUser.getCouponId(); Integer couponId = couponUser.getCouponId();
LitemallCoupon coupon = couponService.findById(couponId); LitemallCoupon coupon = couponService.findById(couponId);
CouponVo couponVo = new CouponVo(); CouponVo couponVo = new CouponVo();
couponVo.setId(coupon.getId()); couponVo.setId(couponUser.getId());
couponVo.setCid(coupon.getId());
couponVo.setName(coupon.getName()); couponVo.setName(coupon.getName());
couponVo.setDesc(coupon.getDesc()); couponVo.setDesc(coupon.getDesc());
couponVo.setTag(coupon.getTag()); couponVo.setTag(coupon.getTag());
...@@ -160,17 +161,12 @@ public class WxCouponController { ...@@ -160,17 +161,12 @@ public class WxCouponController {
// 计算优惠券可用情况 // 计算优惠券可用情况
List<LitemallCouponUser> couponUserList = couponUserService.queryAll(userId); List<LitemallCouponUser> couponUserList = couponUserService.queryAll(userId);
List<LitemallCouponUser> availableCouponUserList = new ArrayList<>(couponUserList.size()); List<CouponVo> couponVoList = change(couponUserList);
for (LitemallCouponUser couponUser : couponUserList) { for (CouponVo cv : couponVoList) {
LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, couponUser.getCouponId(), checkedGoodsPrice); LitemallCoupon coupon = couponVerifyService.checkCoupon(userId, cv.getCid(), cv.getId(), checkedGoodsPrice);
if (coupon == null) { cv.setAvailable(coupon != null);
continue;
}
availableCouponUserList.add(couponUser);
} }
List<CouponVo> couponVoList = change(availableCouponUserList);
return ResponseUtil.okList(couponVoList); return ResponseUtil.okList(couponVoList);
} }
......
...@@ -90,6 +90,18 @@ public class WxOrderController { ...@@ -90,6 +90,18 @@ public class WxOrderController {
return wxOrderService.prepay(userId, body, request); return wxOrderService.prepay(userId, body, request);
} }
/**
* 微信H5支付
* @param userId
* @param body
* @param request
* @return
*/
@PostMapping("h5pay")
public Object h5pay(@LoginUser Integer userId, @RequestBody String body, HttpServletRequest request) {
return wxOrderService.h5pay(userId, body, request);
}
/** /**
* 微信付款成功或失败回调接口 * 微信付款成功或失败回调接口
* <p> * <p>
......
...@@ -4,7 +4,7 @@ var WxApiRoot = 'http://localhost:8080/wx/'; ...@@ -4,7 +4,7 @@ var WxApiRoot = 'http://localhost:8080/wx/';
// 局域网测试使用 // 局域网测试使用
// var WxApiRoot = 'http://192.168.0.101:8080/wx/'; // var WxApiRoot = 'http://192.168.0.101:8080/wx/';
// 云平台部署时使用 // 云平台部署时使用
// var WxApiRoot = 'http://118.24.0.153:8080/wx/'; // var WxApiRoot = 'http://122.51.199.160:8080/wx/';
// 云平台上线时使用 // 云平台上线时使用
// var WxApiRoot = 'https://www.menethil.com.cn/wx/'; // var WxApiRoot = 'https://www.menethil.com.cn/wx/';
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<text class="name">{{item.goodsName}}</text> <text class="name">{{item.goodsName}}</text>
<text class="num">x{{item.number}}</text> <text class="num">x{{item.number}}</text>
</view> </view>
<view class="attr">{{ isEditCart ? '已选择:' : ''}}{{item.goodsSpecificationValues||''}}</view> <view class="attr">{{ isEditCart ? '已选择:' : ''}}{{item.specifications||''}}</view>
<view class="b"> <view class="b">
<text class="price">¥{{item.price}}</text> <text class="price">¥{{item.price}}</text>
<view class="selnum"> <view class="selnum">
......
...@@ -17,6 +17,7 @@ Page({ ...@@ -17,6 +17,7 @@ Page({
cartId: 0, cartId: 0,
addressId: 0, addressId: 0,
couponId: 0, couponId: 0,
userCouponId: 0,
message: '', message: '',
grouponLinkId: 0, //参与的团购,如果是发起则为0 grouponLinkId: 0, //参与的团购,如果是发起则为0
grouponRulesId: 0 //团购规则ID grouponRulesId: 0 //团购规则ID
...@@ -32,6 +33,7 @@ Page({ ...@@ -32,6 +33,7 @@ Page({
cartId: that.data.cartId, cartId: that.data.cartId,
addressId: that.data.addressId, addressId: that.data.addressId,
couponId: that.data.couponId, couponId: that.data.couponId,
userCouponId: that.data.userCouponId,
grouponRulesId: that.data.grouponRulesId grouponRulesId: that.data.grouponRulesId
}).then(function(res) { }).then(function(res) {
if (res.errno === 0) { if (res.errno === 0) {
...@@ -47,6 +49,7 @@ Page({ ...@@ -47,6 +49,7 @@ Page({
orderTotalPrice: res.data.orderTotalPrice, orderTotalPrice: res.data.orderTotalPrice,
addressId: res.data.addressId, addressId: res.data.addressId,
couponId: res.data.couponId, couponId: res.data.couponId,
userCouponId: res.data.userCouponId,
grouponRulesId: res.data.grouponRulesId, grouponRulesId: res.data.grouponRulesId,
}); });
} }
...@@ -90,6 +93,10 @@ Page({ ...@@ -90,6 +93,10 @@ Page({
if (couponId === "") { if (couponId === "") {
couponId = 0; couponId = 0;
} }
var userCouponId = wx.getStorageSync('userCouponId');
if (userCouponId === "") {
userCouponId = 0;
}
var grouponRulesId = wx.getStorageSync('grouponRulesId'); var grouponRulesId = wx.getStorageSync('grouponRulesId');
if (grouponRulesId === "") { if (grouponRulesId === "") {
grouponRulesId = 0; grouponRulesId = 0;
...@@ -103,6 +110,7 @@ Page({ ...@@ -103,6 +110,7 @@ Page({
cartId: cartId, cartId: cartId,
addressId: addressId, addressId: addressId,
couponId: couponId, couponId: couponId,
userCouponId: userCouponId,
grouponRulesId: grouponRulesId, grouponRulesId: grouponRulesId,
grouponLinkId: grouponLinkId grouponLinkId: grouponLinkId
}); });
...@@ -131,6 +139,7 @@ Page({ ...@@ -131,6 +139,7 @@ Page({
cartId: this.data.cartId, cartId: this.data.cartId,
addressId: this.data.addressId, addressId: this.data.addressId,
couponId: this.data.couponId, couponId: this.data.couponId,
userCouponId: this.data.userCouponId,
message: this.data.message, message: this.data.message,
grouponRulesId: this.data.grouponRulesId, grouponRulesId: this.data.grouponRulesId,
grouponLinkId: this.data.grouponLinkId grouponLinkId: this.data.grouponLinkId
......
...@@ -45,15 +45,15 @@ Page({ ...@@ -45,15 +45,15 @@ Page({
if (that.data.showType == 0) { if (that.data.showType == 0) {
that.setData({ that.setData({
allCommentList: that.data.allCommentList.concat(res.data.data), allCommentList: that.data.allCommentList.concat(res.data.list),
allPage: res.data.currentPage, allPage: res.data.page,
comments: that.data.allCommentList.concat(res.data.data) comments: that.data.allCommentList.concat(res.data.list)
}); });
} else { } else {
that.setData({ that.setData({
picCommentList: that.data.picCommentList.concat(res.data.data), picCommentList: that.data.picCommentList.concat(res.data.list),
picPage: res.data.currentPage, picPage: res.data.page,
comments: that.data.picCommentList.concat(res.data.data) comments: that.data.picCommentList.concat(res.data.list)
}); });
} }
} }
...@@ -84,21 +84,30 @@ Page({ ...@@ -84,21 +84,30 @@ Page({
// 页面关闭 // 页面关闭
}, },
switchTab: function() { switchTab: function () {
this.setData({ let that = this;
showType: this.data.showType == 1 ? 0 : 1 if (that.data.showType == 0) {
that.setData({
allCommentList: [],
allPage: 1,
comments: [],
showType: 1
}); });
} else {
that.setData({
picCommentList: [],
picPage: 1,
comments: [],
showType: 0
});
}
this.getCommentList(); this.getCommentList();
}, },
onReachBottom: function() { onReachBottom: function() {
console.log('onPullDownRefresh');
if (this.data.showType == 0) { if (this.data.showType == 0) {
if (this.data.allCount / this.data.limit < this.data.allPage) { if (this.data.allCount / this.data.limit < this.data.allPage) {
return false; return false;
} }
this.setData({ this.setData({
allPage: this.data.allPage + 1 allPage: this.data.allPage + 1
}); });
...@@ -106,14 +115,10 @@ Page({ ...@@ -106,14 +115,10 @@ Page({
if (this.data.hasPicCount / this.data.limit < this.data.picPage) { if (this.data.hasPicCount / this.data.limit < this.data.picPage) {
return false; return false;
} }
this.setData({ this.setData({
picPage: this.data.picPage + 1 picPage: this.data.picPage + 1
}); });
} }
this.getCommentList(); this.getCommentList();
} }
}) })
\ No newline at end of file
<view class="comments"> <view class="comments">
<view class="h">
<view class="item {{ showType == 0 ? 'active' : ''}}" bindtap="switchTab">
<view class="txt">全部({{allCount}})</view>
</view>
<view class="item {{ showType == 0 ? '' : 'active'}}" bindtap="switchTab">
<view class="txt">有图({{hasPicCount}})</view>
</view>
</view>
<view class="b"> <view class="b">
<view class="item" wx:for="{{comments}}" wx:key="id"> <view class="item" wx:for="{{comments}}" wx:key="id">
<view class="info"> <view class="info">
...@@ -10,7 +18,7 @@ ...@@ -10,7 +18,7 @@
</view> </view>
<view class="comment">{{item.content}}</view> <view class="comment">{{item.content}}</view>
<view class="imgs" wx:if="{{item.picList.length > 0}}"> <view class="imgs" wx:if="{{item.picList.length > 0}}">
<image class="img" wx:for="{{item.picList}}" wx:key="id" wx:for-item="pitem" src="{{pitem.picUrl}}"></image> <image class="img" wx:for="{{item.picList}}" wx:key="*this" wx:for-item="pitem" src="{{pitem}}"></image>
</view> </view>
</view> </view>
......
...@@ -6,7 +6,44 @@ ...@@ -6,7 +6,44 @@
margin: 20rpx 0; margin: 20rpx 0;
} }
.comments .h {
position: fixed;
left: 0;
top: 0;
z-index: 1000;
width: 100%;
display: flex;
background: #fff;
height: 84rpx;
border-bottom: 1px solid rgba(0, 0, 0, 0.15);
}
.comments .h .item {
display: inline-block;
height: 82rpx;
width: 50%;
padding: 0 15rpx;
text-align: center;
}
.comments .h .item .txt {
display: inline-block;
height: 82rpx;
padding: 0 20rpx;
line-height: 82rpx;
color: #333;
font-size: 30rpx;
width: 170rpx;
}
.comments .h .item.active .txt {
color: #ab2b2b;
border-bottom: 4rpx solid #ab2b2b;
}
.comments .b { .comments .b {
margin-top: 85rpx;
height: auto; height: auto;
width: 720rpx; width: 720rpx;
} }
......
...@@ -8,6 +8,7 @@ Page({ ...@@ -8,6 +8,7 @@ Page({
couponList: [], couponList: [],
cartId: 0, cartId: 0,
couponId: 0, couponId: 0,
userCouponId: 0,
grouponLinkId: 0, grouponLinkId: 0,
scrollTop: 0 scrollTop: 0
}, },
...@@ -46,6 +47,11 @@ Page({ ...@@ -46,6 +47,11 @@ Page({
couponId = 0; couponId = 0;
} }
var userCouponId = wx.getStorageSync('userCouponId');
if (!userCouponId) {
userCouponId = 0;
}
var grouponRulesId = wx.getStorageSync('grouponRulesId'); var grouponRulesId = wx.getStorageSync('grouponRulesId');
if (!grouponRulesId) { if (!grouponRulesId) {
grouponRulesId = 0; grouponRulesId = 0;
...@@ -54,6 +60,7 @@ Page({ ...@@ -54,6 +60,7 @@ Page({
this.setData({ this.setData({
cartId: cartId, cartId: cartId,
couponId: couponId, couponId: couponId,
userCouponId: userCouponId,
grouponRulesId: grouponRulesId grouponRulesId: grouponRulesId
}); });
...@@ -116,8 +123,14 @@ Page({ ...@@ -116,8 +123,14 @@ Page({
grouponRulesId: that.data.grouponRulesId, grouponRulesId: that.data.grouponRulesId,
}).then(function (res) { }).then(function (res) {
if (res.errno === 0) { if (res.errno === 0) {
let list = [];
for (var i = 0; i < res.data.list.length; i++) {
if (res.data.list[i].available) {
list.push(res.data.list[i]);
}
}
that.setData({ that.setData({
couponList: res.data.list couponList: list
}); });
} }
wx.hideToast(); wx.hideToast();
...@@ -126,7 +139,8 @@ Page({ ...@@ -126,7 +139,8 @@ Page({
}, },
selectCoupon: function (e) { selectCoupon: function (e) {
try { try {
wx.setStorageSync('couponId', e.currentTarget.dataset.id); wx.setStorageSync('couponId', e.currentTarget.dataset.cid);
wx.setStorageSync('userCouponId', e.currentTarget.dataset.id);
} catch (error) { } catch (error) {
} }
...@@ -137,6 +151,7 @@ Page({ ...@@ -137,6 +151,7 @@ Page({
// 如果优惠券ID设置-1,则表示订单不使用优惠券 // 如果优惠券ID设置-1,则表示订单不使用优惠券
try { try {
wx.setStorageSync('couponId', -1); wx.setStorageSync('couponId', -1);
wx.setStorageSync('userCouponId', -1);
} catch (error) { } catch (error) {
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<view class="unselect" bindtap='unselectCoupon'>不选择优惠券</view> <view class="unselect" bindtap='unselectCoupon'>不选择优惠券</view>
<view class="item" wx:for="{{couponList}}" wx:for-index="index" wx:for-item="item" wx:key="id" bindtap="selectCoupon" data-id="{{item.id}}"> <view class="item" wx:for="{{couponList}}" wx:for-index="index" wx:for-item="item" wx:key="id" bindtap="selectCoupon" data-id="{{item.id}}" data-cid="{{item.cid}}">
<view class="tag">{{item.tag}}</view> <view class="tag">{{item.tag}}</view>
<view class="content"> <view class="content">
<view class="left"> <view class="left">
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment