diff --git a/pages/cardListDetail/cardListDetail.js b/pages/cardListDetail/cardListDetail.js new file mode 100644 index 0000000..7ce0f87 --- /dev/null +++ b/pages/cardListDetail/cardListDetail.js @@ -0,0 +1,540 @@ +var config = require("../../config/config.js"); +var app = getApp(); +const Http = require("../../utils/HttpBasics"); +const util = require("../../utils/util"); + +Page({ + data: { + data: { + title: null + }, + showPage: false, + questions1: null, + questions2: null, + carList: [], + couponChannelId: null, + couponId: null, + orderId: "", + hour: null, + minute: "", + tempFilePaths: null, + userInfo: {}, + hasUserInfo: false, + canIUse: wx.canIUse('button.open-type.getUserInfo'), + id: null, + result: [], + end_time: null, + checked: false, + clock: "已经截止", + questionnaire: {}, + questionId: null, + widthScreen: null, + moveData: null, + rotateData: null, + alphaData: null, + scaleData: null, + skewData: null, + matrixData: null, + opacity: 0, + queueData: null, + zIndex: 11, + display: "none", + showbutton: false + }, + phone: function (e) { + let that = this; + wx.makePhoneCall({ + phoneNumber: e.target.dataset.merchantlinkphone + }); + }, + /** + * 点击提交问题单选 + */ + formSubmit: function (e) { + console.log(e); + let that = this; + /** + * 多选 + */ + if (e.currentTarget.dataset.flags == 'multi') { + if (that.data.anwserId.length == 0) { + var answserIs = null + } else { + var answserIs = that.data.anwserId.join(","); + } + } + else if (e.currentTarget.dataset.flags == 'single') { + var answserIs = e.detail.value; + } + console.log(answserIs) + console.log(e.currentTarget.dataset.questionid) + Http.post({ + url: config.api.answerQuestion, + data: { + answer: answserIs, + questionId: e.currentTarget.dataset.questionid + } + }) + .then(res => { + that.closeQuestion(); + }) + .catch(err => { + wx.showToast({ + title: err.message, + icon: 'none', + duration: 2000, + mask: false + }); + }) + }, + /** + * 多选 + */ + checkboxChange: function (e) { + console.log(e) + this.setData({ + anwserId: e.detail.value + }) + }, + + closeQuestion: function () { + let that = this; + that.setData({ + display: "none", + zIndex: 11, + opacity: 0 + }) + setTimeout(function () { + that.orderFunc(); + }, 500) + }, + /** + * gotopay + */ + gotopay: function () { + let that = this; + that.setData({ + queueData: null, + showbutton: true + }) + Http.get({ + url: config.api.getQuestion, + data: { + couponType: JSON.stringify(that.data.data.type) + } + }) + .then(res => { + console.log(res); + if (res.data == undefined) { + that.orderFunc(); + that.setData({ + flag: false + }) + } else if (res.data) { + var animation = wx.createAnimation({}); + animation.translate((that.data.widthScreen - that.data.widthScreen), 0).scale(1).opacity(1).step({ + duration: 500 + }) + that.setData({ + queueData: animation.export(), + zIndex: 9, + opacity: 1, + display: "block", + questionnaire: JSON.parse(res.data.content), + questionId: res.data.id + }); + } + }) + .catch(err => { + wx.showToast({ + title: err.message, + icon: 'none', + duration: 2000, + mask: false + }); + }) + }, + + countdown(end_time) { + let that = this; + var EndTime = end_time; + var NowTime = new Date().getTime(); + var total_micro_second = EndTime - NowTime || []; + // 渲染倒计时时钟 + let obj = that.dateformat(total_micro_second); + if (total_micro_second > 0) { + that.setData({ + clock: obj, + day: obj.a1, + hour: obj.b1, + min: obj.c1, + sec: obj.d1, + }) + } else { + that.setData({ + clock: "00", + day: "00", + hour: "00", + min: "00", + sec: "00", + }) + } + setTimeout(function () { + total_micro_second -= 1000; + that.countdown(end_time); + }, 1000) + }, + + // 时间格式化输出,如11:03 25:19 每1s都会调用一次 + dateformat(micro_second) { + // 总秒数 + var second = Math.floor(micro_second / 1000); + // 天数 + var day = Math.floor(second / 3600 / 24) < 10 ? "0" + Math.floor(second / 3600 / 24) : Math.floor(second / 3600 / 24); + // 小时 + var hr = Math.floor(second / 3600 % 24) < 10 ? "0" + Math.floor(second / 3600 % 24) : Math.floor(second / 3600 % 24); + // 分钟 + var min = Math.floor(second / 60 % 60) < 10 ? "0" + Math.floor(second / 60 % 60) : Math.floor(second / 60 % 60); + // 秒 + var sec = Math.floor(second % 60) < 10 ? "0" + Math.floor(second % 60) : Math.floor(second % 60); + + // return day + "天" + hr + "小时" + min + "分钟" + sec + "秒"; + return { + a1: day, + b1: hr, + c1: min, + d1: sec + } + }, + onLoad(options) { + let that = this; + wx.showLoading({ + title: "加载中..." + }); + that.setData({ + couponChannelId: options.couponChannelId, + couponId: options.couponId, + title: that.data.data.title ? that.data.data.title : '', + }); + var parmer = { + url: config.api.couponDetail, + data: { + couponChannelId: options.couponChannelId + } + }; + Http.get(parmer) + .then(res => { + if (res.code == 200) { + that.setData({ + showPage: true + }) + } + if (res.data.endTime) { + that.countdown(res.data.endTime); + //当前时间与优惠券下架时间做计算 + var endTime = util.formatTime(res.data.endTime, "yyyy-MM-dd hh:mm:ss"); + if (util.timechuo(endTime).indexOf('-') == 0) { + that.setData({ + endtime: "活动已结束", + }); + } else { + that.setData({ + endtime: util.timechuo(endTime) + }); + } + } + wx.hideLoading(); + that.setData({ + data: res.data + }); + + if (res.data.validType == 1) { + that.setData({ + validStartDate: util.formatTime(res.data.validStartDate, "yyyy-MM-dd"), + validEndDate: util.formatTime(res.data.validEndDate, "yyyy-MM-dd"), + }); + } else { + that.setData({ + validDays: res.data.validDays + }); + } + }).catch(err => { + wx.showToast({ + title: err.message, + icon: 'none', + duration: 2000, + mask: false + }); + }) + }, + /** + * 支付订单更新 + */ + payOrderUpdate: (orderId, payOrderId, status, reason, type, _this) => { + let that = this; + // 支付成功 + Http.post({ + url: config.api.payOrderUpdate, + data: { + payOrderId: payOrderId, + orderId: orderId, + status: status, + reason: reason + } + }) + .then(res => { + wx.hideLoading() + // 有价券 + if (!type && type != 'free') { + wx.navigateTo({ + url: `/pages/order/detail/index?orderId=${ + orderId + }` + }); + } else if (type == 'free') { + wx.navigateTo({ + url: `/pages/order/detail/index?orderId=${ + orderId + }` + }); + } + }) + .catch(err => { + console.log(err); + if (!type) { + setTimeout(function () { + _this.payOrderUpdate(orderId, payOrderId, status, reason, type, _this); + }, 2000) + } + }) + }, + /** + * 发起支付 + */ + orderFunc(flag) { + var that = this; + // wx.showLoading({ + // title: "加载中..." + // }); + Http.post({ + url: config.api.checkPhoneStatus, + data: {} + }) + .then(res => { + var data = { + couponChannelId: "" + that.data.couponChannelId, + couponId: "" + that.data.couponId + }; + if (that.data.couponChannelId == null) { + var data = { + couponId: "" + that.data.couponId + }; + } + /** + * orderSave 下单 + */ + return Http.post({ + url: config.api.orderSave, + data: data + }); + }) + .catch(err => { + if (err.code == "2011") { + wx.showToast({ + title: "商户信息没找到", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == "2013") { + wx.showToast({ + title: "商户信息禁用", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == "3000") { + wx.showToast({ + title: "库存不足", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == "3001") { + wx.showToast({ + title: "领取达到上限", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == "3002") { + wx.showToast({ + title: "订单失败", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == "3003") { + wx.showToast({ + title: "订单不存在", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == "3004") { + wx.showToast({ + title: "订单不存在", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == "4003") { + wx.showToast({ + title: "卡券已作废", + image: "./../../../assets/img/fail.png", + duration: 2000, + mask: false + }); + } else if (err.code == 11005) { + /** + * 将值传到用户手机号授权的页面 + * + */ + wx.redirectTo({ + url: "/pages/getphoneInfo/index?couponChannelId=" + + that.data.couponChannelId + + "&couponId=" + + that.data.couponId + }); + } else if (err.code == 11006) { + // 用户手机已加密 + wx.redirectTo({ + url: "/pages/phoneinput/phoneinput?couponChannelId=" + + that.data.couponChannelId + + "&couponId=" + + that.data.couponId + }); + } else { + wx.showToast({ + title: err.message, + icon: 'none', + duration: 2000, + mask: false + }); + } + }) + .then(res => { + if (typeof (res) != "undefined") { + let orderId = "" + res.data.id; + that.setData({ + orderId: orderId + }); + if (res.data.payment > 0) { + // 支付金额不为0 + /** + * 支付订单创建 + */ + Http.post({ + url: config.api.payOrderCreate, + data: { + orderId: orderId + } + }).then(res => { + var payOrderId = "" + res.data.payOrderId; + wx.hideLoading(); + wx.requestPayment({ + timeStamp: res.data.timeStamp, + nonceStr: res.data.nonceStr, + package: res.data.package, + signType: (res.data.signType) ? res.data.signType : "MD5", + paySign: res.data.paySign, + success: res => { + wx.showLoading({ + title: '订单正在处理中...', + }) + setTimeout(function () { + wx.hideLoading() + }, 5000) + that.payOrderUpdate(that.data.orderId, payOrderId, 1, '', '', that); + if (res.errMsg == "requestPayment:ok") { + setTimeout(function () { + wx.hideLoading(); + }, 2000); + /** + * 用户支付成功以后跳转到券包列表 + */ + wx.setStorage({ + key: 'couponNum', + data: "couponNum", + }) + } + }, + fail: res => { + /** + * 支付失败,需要更新订单的状态 + */ + that.payOrderUpdate(that.data.orderId, payOrderId, 2, '', 'fail', that); + that.setData({ + showbutton: false + }) + return; + }, + complete: res => { } + }); + /// End payment -------- + }) + .catch(err => { + wx.showToast({ + title: err.message, + icon: 'none', + duration: 2000, + mask: false + }); + }) + } else { + // 免费券 + that.payOrderUpdate(orderId, "0", 1, '', 'free'); + wx.setStorage({ + key: 'couponNum', + data: "couponNum" + }) + } + } + }) + .catch(err => { + wx.showToast({ + title: err.message, + icon: 'none', + duration: 2000, + mask: false + }); + }) + }, + onShow() { + this.setData({ + showbutton: false + }) + }, + onShareAppMessage: function (options) { + var that = this; + var shareObj = { + title: that.data.data.title, + path: `/pages/index/index?couponChannelId=${that.data.couponChannelId}&couponId=${that.data.couponId}`, + success: function (res) { + if (res.errMsg == 'shareAppMessage:ok') { } + }, + fail: function (error) { + if (res.errMsg == 'shareAppMessage:fail cancel') { } else if (res.errMsg == 'shareAppMessage:fail') { } + } + }; + // 来自页面内的按钮的转发 + if (options.from == 'button') { + var eData = options.target.dataset.id; + var couponId = options.target.dataset.couponid; + shareObj.path = `/pages/index/index?couponChannelId=${eData}&couponId=${couponId}`; + } + // 返回shareObj + return shareObj; + }, + +}); \ No newline at end of file diff --git a/pages/cardListDetail/cardListDetail.json b/pages/cardListDetail/cardListDetail.json new file mode 100644 index 0000000..c82f53b --- /dev/null +++ b/pages/cardListDetail/cardListDetail.json @@ -0,0 +1,3 @@ +{ + "navigationBarTitleText": "卡详情" +} \ No newline at end of file diff --git a/pages/cardListDetail/cardListDetail.wxml b/pages/cardListDetail/cardListDetail.wxml new file mode 100644 index 0000000..9bc7994 --- /dev/null +++ b/pages/cardListDetail/cardListDetail.wxml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + 距结束还剩 : + + + {{day}}天 + {{hour}}: + {{min}}: + {{sec}} + + + {{day}}天 + {{hour}}: + {{min}}: + {{sec}} + + + {{data.title}} + {{data.subTitle}} + + 售价: + {{data.salePriceStr}} + + {{data.priceStr}}元 + {{data.priceStr}}小时 + + 剩余{{data.remainInventory}}件 + + 有效期:自领取之日起 + {{validDays}}天内有效 + 有效期: + {{validStartDate}}至{{validEndDate}} + + + 当次有效 + + + 使用条件: + 满{{data.usePriceStr}}元可用 + + + 限购条件: + 每人{{data.useLimitQuantity}}张 + + + + + + + + + 购买须知 + + + {{data.remark}} + + + + + \ No newline at end of file diff --git a/pages/cardListDetail/cardListDetail.wxss b/pages/cardListDetail/cardListDetail.wxss new file mode 100644 index 0000000..d0fa900 --- /dev/null +++ b/pages/cardListDetail/cardListDetail.wxss @@ -0,0 +1,435 @@ +@import "../../app.wxss"; +page { + background: #fff; +} + +.coupons { + width: 100%; + position: relative; + overflow: hidden; + padding-bottom: 170rpx; +} + +.banner { + position: relative; + width: 750rpx; + height: 534.5rpx; +} + +.banner image { + width: 100%; + height: 100%; +} + +.coupons_info { + width: 92%; + padding: 0 4%; + background: #fff; + border-top-left-radius: 20rpx; + border-top-right-radius: 20rpx; + margin-top: -25rpx; +} + +.fenxiang { + position: absolute; + right: 36rpx; + top: 27rpx; + width: 77rpx; +} + +.fenxiang image { + width: 50rpx; + position: absolute; + top: 0; + right: 0; +} + +.user-motto { + width: 100rpx; + border: 0; + background: none; + height: 60rpx; + color: #fff; +} + +.user-motto::after { + border: none; +} + +.title { + display: block; + font-size: 32rpx; + color: #000; + letter-spacing: 1.09rpx; + line-height: 45rpx; + width: 542rpx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding-top: 30rpx; +} + +.subTitle { + display: block; + width: 588rpx; + /* height: 37rpx; */ + font-size: 26rpx; + color: #999; + letter-spacing: 1.16rpx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 6rpx 0; +} + +.rest { + font-size: 24rpx; + color: #919191; + letter-spacing: 0; + height: 70rpx; + line-height: 70rpx; + /* border-bottom: 1px solid #eee; */ + border-bottom: 1px solid #f9f9f9; +} + +.restNum { + font-size: 24rpx; + color: #999; + letter-spacing: 1.16rpx; + text-align: right; +} + +.time { + font-size: 24rpx; + color: #333; + letter-spacing: 0; + line-height: 33rpx; + display: inline-block; +} + +.txt01 { + font-size: 24rpx; + color: #919191; + letter-spacing: 0; +} + +.price { + font-size: 24rpx; + color: #999; + letter-spacing: 0; +} + +.salePriceStr { + font-size: 24rpx; + color: #999; + letter-spacing: 0; +} + +.salePriceStr .pri01 { + font-size: 40rpx; + color: #ff4949; + letter-spacing: 0; + margin-left: 10rpx; +} + +.salePriceStr .yuan { + font-size: 24rpx; + color: #ff4949; + letter-spacing: 0; +} + +.price text { + font-size: 24rpx; + color: #333; + letter-spacing: 0; +} + +.throgh { + text-decoration: line-through; + margin-left: 10rpx; +} + +.posi { + position: relative; + width: 92%; + margin: 0 auto; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +.posi>view:nth-child(2) { + width: 100%; + height: 87rpx; + display: flex; + justify-content: space-between; + border-top: 1px solid #f6f6f6; + line-height: 87rpx; +} + +.posi>view:nth-child(2) text:nth-child(1) { + font-size: 30rpx; + color: #a9a9a9; +} + +.posi>view:nth-child(2) text:nth-child(2) { + font-size: 30rpx; + color: #a9a9a9; +} + +.posi_logo { + width: 100%; + display: flex; + padding: 20rpx 0; + background: #fff; + height: 100rpx; + margin-bottom: 20rpx; +} + +.posi_logo view:nth-child(1) { + width: 100rpx; + height: 100rpx; + border-radius: 16rpx; +} + +.posi_logo view:nth-child(1) image { + display: block; + width: 100rpx; + height: 100rpx; + border-radius: 16rpx; + border: 1px solid #e5e5e5; +} + +.posi_logo view:nth-child(2) { + display: flex; + flex-direction: column; + flex: 8; + padding-left: 30rpx; +} + +.posi_logo view:nth-child(2) text:nth-child(1) { + font-size: 32rpx; + color: #333; + letter-spacing: 0; +} + +.posi_logo view:nth-child(2) text:nth-child(2) { + font-size: 24rpx; + color: #b8b8b8; + padding-top: 3rpx; + width: 450rpx; + height: 36rpx; + overflow: hidden; +} + +.notes view:nth-child(1) { + width: 92%; + height: 87rpx; + padding: 0 4%; + line-height: 87rpx; + background: #fff; +} + +.active { + opacity: 0.6; +} + +.notes view:nth-child(1) text { + font-size: 24rpx; + color: #333; + letter-spacing: 0; +} + +.notes view:nth-child(2) { + width: 92%; + padding: 0 4%; + background: #fff; + display: flex; + flex-direction: column; +} + +.notes view:nth-child(2)>text { + font-size: 24rpx; + color: #919191; + letter-spacing: 0; + line-height: 42rpx; +} + +.buy-view { + background: #fff; + height: 96rpx; + bottom: 0; + left: 0; + right: 0; + padding-bottom: 22rpx; + padding-top: 22rpx; +} + +.buy { + position: relative; + background: #00c0ff; + height: 94rpx; + width: 670rpx; + margin: 0 auto 30rpx; + color: #fff; + font-size: 36rpx; + line-height: 94rpx; + border-radius: 61rpx; +} + +.tel { + right: 0; + top: 0; + bottom: 0; + margin: auto; + width: 50rpx; + height: 50rpx; +} + +.txt { + margin-right: 30rpx; +} +.distance{ + border: none; + border-radius:16rpx; + width: 600rpx; + padding: 16rpx 6rpx 0 0; +} +.distance .txt01{ + display: block; + font-size: 26rpx; + color: #ff4949; +} +.clock{ + width: 116rpx!important; + vertical-align: middle; + margin-right: 10rpx; + margin-top: -4rpx; +} +.qiang{ + position: inline-block; + width: 60rpx; + height: 40rpx; + line-height: 40rpx; + color: #ff4949; + text-align: center; + font-size: 28rpx; + margin-right: 10rpx; +} +.times{ + display: inline-block; + color: #ff4949; + font-weight:bold; + font-size: 26rpx; + text-align:center; +} +.times text{ + display: inline-block; + margin: 6rpx; + width: 46rpx; + height: 56rpx; + text-align: center; + font-size: 28rpx; + line-height: 60rpx; + border-radius:12rpx; + color: #fff; + font-weight:bold; + background: #ff4949; +} + +.b1 { + position: fixed; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + background: rgba(0, 0, 0, 0.8); + overflow: hidden; + z-index: 10; +} + +.con { + position: absolute; + top: 35rpx; + right: 0; + bottom: 0; + left: 0; + margin: auto; + width: 587rpx; +} + +.con .image{ + display: block; + width: 100%; +} + +.img { + margin-top: -50rpx; +} +.question { + display: block; + width: 587rpx; + background: #fff; + border-bottom-left-radius: 22rpx; + border-bottom-right-radius: 22rpx; + overflow: hidden; +} + +.ques { + display: block; + width: 511rpx; + margin: 0 auto; + height: 95rpx; + line-height: 95rpx; + font-size: 30rpx; + color: #333; + border-bottom: 1rpx solid #eee; +} + +.titles { + width: 511rpx; + display: block; + text-align: center; + height: 50rpx; + margin: 0 auto; + padding-top:10rpx; + padding-bottom:20rpx; + font-size: 32rpx; + font-weight: bold; + line-height: 41rpx; + border-bottom: 1rpx solid #eee; +} +.quessss >view:last-child{ + border-bottom:0; +} +.close{ + position: relative; + z-index: 10000; + display: block; + width: 70rpx; +} +.ques_gou{ + position: absolute; + width: 20rpx; + top: 160rpx; + left: 23rpx; +} +.btns{ + color: #f8755b; + font-weight: bold; + font-size: 30rpx!important; + text-align: center!important; +} +.radios{ + display: block; + font-size:28rpx; + height: 95rpx; + line-height: 95rpx; + color: #333; + text-indent: .5em; +} \ No newline at end of file