diff --git a/app.json b/app.json index 22e4a66..4213283 100644 --- a/app.json +++ b/app.json @@ -40,9 +40,6 @@ "pages/user/member/account_unable/account_unable", "pages/user/member/cash_record/cash_record", "pages/user/coupons/coupons", - "pages/user/coupons/qr_code/qr_code", - "pages/user/coupons/query/index", - "pages/user/coupons/exchange/exchange", "pages/user/integral/integral", "pages/user/integral/query/index", "pages/user/integral/msg/msg", diff --git a/packageB/pages/coupons/filter.wxs b/packageB/pages/coupons/filter.wxs deleted file mode 100644 index 94bb477..0000000 --- a/packageB/pages/coupons/filter.wxs +++ /dev/null @@ -1,38 +0,0 @@ -var numFr = { - getNum: function(x) { - var f = parseFloat(x); - if (isNaN(f)) { - return false; - } - var f = Math.round(x * 100) / 100; - var s = f.toString(); - var rs = s.indexOf('.'); - if (rs < 0) { - rs = s.length; - s += '.'; - } - while (s.length <= rs + 2) { - s += '0'; - } - return s; - }, - showBtnText: function(index) { - switch(index) { - case 1: { - return '已使用'; - break; - }; - case 2: { - return '已过期'; - break; - }; - default: { - return '立即使用'; - }; - }; - }, -} -module.exports = { - getNum: numFr.getNum, - showBtnText: numFr.showBtnText, -} \ No newline at end of file diff --git a/packageB/pages/coupons/query/index.js b/packageB/pages/coupons/query/index.js deleted file mode 100644 index b4163d3..0000000 --- a/packageB/pages/coupons/query/index.js +++ /dev/null @@ -1,602 +0,0 @@ -var t = getApp(), - a = t.request, - o = t.globalData.setting, - os = o, - i = require("../../../../utils/util.js"), - ut = i, - s = require("../../../../utils/common.js"); -var regeneratorRuntime = require('../../../../utils/runtime.js'); -const { - barcode, - qrcode -} = require('../../../../utils/index.js'); -let _this = null; - -Page({ - data: { - - val:false, - datet: "", - dates: "", - parameter: false, - details:[],//数据 - isBind:true,//控制清空时间日期的按钮 - isBinds: true, - select: false,//下拉框 - grade_name: '未使用', - // grades: [ //old - // '所有', - // '已使用', - // '已过期', - // '未使用', - // ], - currentIndex: 0, //tab项当前指示器 - grades: [ - '未使用', - '已使用', - '已过期', - ], - display:false, - is_no_more: 0, - current_page:1, - by_list:[], - isloading:0, - pageNum: 1, - }, - /** - * 生命周期函数--监听页面加载 - */ - onLoad: function (options) { - _this = this; - this.setData({ - details: [] - }); - this.wjquery(); - }, - /** - * 生命周期函数--监听页面显示 - */ - onShow: function (options) { - var th = this; - - wx.setNavigationBarTitle({ - title: "微券查询", - }); - - /** - * 控制显示微券兑换 - * by sty - */ - getApp().getConfig2(function (ee) { - var json_d = JSON.parse(ee.switch_list); - let is_show_dhwz = json_d.dhwz_switch; - let grades = th.data.grades; - // console.log('is_show_dhwz----------------------------',is_show_dhwz); - if(is_show_dhwz) { - grades.push('微券兑换'); - th.setData({ grades }); - }; - th.setData({ is_show_dhwz }); - },1); - }, - - - - - // 点击选中二维码 - click: function (e) { - var val = e.currentTarget.dataset.cashrepno; - getApp().globalData.val = val; - wx.navigateTo({ - url: '../qr_code/qr_code', - }) - }, - // 点击返回主页 - // clicks: function () { - // this.setData({ - // hide:true, display:false - // }) - // }, - //监听输入框显示清空按钮 - watchPassWord: function (event) { - var val = event.detail.value; - if (val != "" && val != null) { - var isBind = false; - this.setData({ isBind: isBind }); - - } - }, - /** - * 点击下拉框 - */ - bindShowMsg() { - this.setData({ - select: !this.data.select - }) - }, - /** - * 已选下拉框 - */ - // mySelect(e) { - // var name = e.currentTarget.dataset.name; - // this.setData({ - // grade_name: name, - // select: false - // }) - // }, - - /** - * 点击tab - * by sty - */ - clickTab(e) { - let index = e.target.dataset.index; - let name = e.target.dataset.name; - - this.setData({ - is_get: 0, - pageNum: 1, - grade_name: name, - currentIndex: index, - is_no_more: 0, - current_page: 1, - noMore: false, - details: [], - by_list: [], - }); - - - if(index == 3) {//微券兑换 - this.exchange(); - } else {//其他 - this.wjquery(); - }; - }, - - /** - * 点击"立即使用" - * by sty - */ - clickUse(e) { - let useIndex = e.currentTarget.dataset.index; - let val = e.currentTarget.dataset.cashrepno; - - this.setData({ - showQr: true, - useIndex, - }); - this.qrcode(val); - }, - - /** - * 关闭二维码 - * by sty - */ - closeQr() { - this.setData({ - showQr: false, - }); - }, - - /** - * 生成二维码 - * by sty - */ - qrcode:function(val){ - // console.log(val); - // barcode('barcode', val, 600,160); - qrcode('qrcode', val, 300, 300); - }, - - /** - * 请求微券列表 - * by sty - */ - async exchange() { - var result; - var user_id = getApp().globalData.user_id; - var store_id = os.stoid; - - - this.getData(true, '/api/weshop/users/listExchangeCoupons', { - user_id: user_id, store_id: store_id, - }).then(()=>{ - _this.setData({ - result: _this.data.list.pageData, - }); - }); - - // await getApp().request.promiseGet("/api/weshop/users/listExchangeCoupons", { - // data: { - // user_id: user_id, store_id: store_id, - // } - // }).then(res => { - // // var msg = res.data; - // // result = msg.data.pageData; - // }) - // e.setData({ - // result: result - // }) - }, - - /** - * 微券兑换对话框 - * by sty - */ - async clickExchange(e) { - var th=this; - var index = e.currentTarget.dataset.index; - var item = this.data.result[index]; - this.data.monye = item.ToSum; - this.data.integr = item.Integral; - this.data.number = item.Number; - - let content = `确定使用${th.data.integr}积分兑换代金券面值${th.data.monye}元吗?`; - wx.showModal({ - title: '提示', - content: content, - success (res) { - if (res.confirm) { - console.log('用户点击确定'); - th.sure_pay(); - } else if (res.cancel) { - console.log('用户点击取消') - } - } - }); - - - - // var my_con = this.selectComponent("#my_con"); //组件的id - // var title="是否使用"+th.data.integr+"积分兑换代金券面值"+th.data.monye+"元"; - // my_con.open(title, "确定", "取消", th.sure_pay, null) - }, - - - /** - * 微券兑换 - * by sty - */ - sure_pay:function(){ - var monye=this.data.monye; - var integr=this.data.integr; - var number=this.data.number; - - var user_id = getApp().globalData.user_id; - console.log(integr,"是什么微卷",typeof integr,monye); - var store_id = os.stoid; - getApp().request.post("/api/weshop/users/saveInterToCash", { - data: { - user_id: user_id, - store_id: store_id, - money:monye, - integ:integr, - number:number, - }, - success: function (su) { - if (su.data.data!=null) { - // getApp().showWarning("兑换成功"); - wx.showToast({ - title: '兑换成功', - icon: 'success', - }); - }else{ - // getApp().showWarning("积分不足"); - wx.showToast({ - title: '积分不足', - icon: 'error', - }); - } - } - - }) - }, - - - //明细查询 - Gettime:function(e){ - var page = 0; - //开始获取时间 - var th = this; - var stime = th.data.datet; - var etime = th.data.dates; - var tpye = th.data.grade_name; - - //开始获取时间结束 - //删除字符中的—— - var datatk = stime.replace(/[-]/g, ""); - var dataj = etime.replace(/[-]/g, ""); - //转换类型 - var datak = parseInt(datatk); - var dataj = parseInt(dataj); - - //判断初始时间小于结束时间 - if (datak > dataj) { - getApp().showWarning("结束时间错误"); - } else { - this.setData({ details: [] }); - this.data.current_page=1; - this.data.is_no_more=0; - this.data.by_list=[]; - this.data.details=[]; - this.wjquery(); - } - - }, - - //微卷查询流水明细 - async wjquery() { - if(this.data.isloading) return; - if(this.data.is_no_more) return; - this.data.isloading=1; - var th=this; - - var len = this.data.details.length; - - var e = this,sum, val, number; - var user_id = getApp().globalData.user_id; - var store_id = os.stoid; - - var stime = this.data.datet; - var etime = this.data.dates; - - var tpye = this.data.grade_name; - console.log("是什么类型",tpye); - var IsUse = 0; - var e = this; - var get_data = { - user_id: user_id, - store_id: store_id, - // pageSize: 10, - page: e.data.current_page, - }; - - var dd={ - user_id: user_id, - store_id: store_id, - // pageSize: 10, - }; - dd.isuse=0; - // 判断下拉框,添加类型 - if (tpye == "已使用"){ - get_data.IsUse = 1; - dd.isuse=1; - } else if (tpye == "已过期"){ - get_data.IsUse = 2; - } else if (tpye == "未使用"){ - get_data.IsUse = 0; - }; - if (etime != "" && etime != null) { - get_data.EndDate = etime; - - //时间要转成时间戳 - var new_t=new Date(etime)/1000; - dd.etime=new_t; - } - - if (stime != "" && stime != null) { - get_data.BeginDate= stime; - //时间要转成时间戳 - var new_t=new Date(stime)/1000; - dd.stime=new_t; - } - - var by_list=[]; - if(th.data.current_page==1){ - //先拿包邮券 - await getApp().request.promiseGet("/api/weshop/userfeemail/pageAndArea?pageSize=100", { - data: dd, - }).then(res => { - - if(res.data.code == 0) { - th.setData({ - byTotal: res.data.data.total, - }); - }; - - if(res.data.code==0 && res.data.data && res.data.data.total>0){ - - by_list=res.data.data.pageData; - for(var i in by_list){ - by_list[i].isby=1; - //过滤是时间的范围 - if(get_data.IsUse == 2 && by_list[i].use_end_time<=ut.gettimestamp()){ - th.data.by_list.push(by_list[i]); - }else if(get_data.IsUse == 0){ - th.data.by_list.push(by_list[i]); - }else if(get_data.IsUse==1){ - th.data.by_list.push(by_list[i]); - }else if(get_data.IsUse==undefined){ - th.data.by_list.push(by_list[i]); - } - } - } - }) - } - - var big_arr = this.data.details; ///api/weshop / users / listQuan - if(th.data.current_page==1 && th.data.by_list.length>0) { - big_arr=th.data.by_list; - }; - - - await getApp().request.promiseGet("/api/weshop/users/listQuan", { - data: get_data, - isShowLoading: 1 - - }).then(res => { - - th.data.isloading=0; - var a = res.data; - var len = e.data.details.length; - var details = a.data.pageData; - - th.setData({ - pageSize: a.data.pageSize, - wjTotal: a.data.total, - }); - - if (details.length == 0) { - this.setData({ - is_no_more: 1, - }); - // getApp().showWarning("未找更多数据"); - if(th.data.by_list && th.data.current_page==1){ - th.setData({ val: val,details:th.data.by_list}); - details=th.data.by_list; - setTimeout(function () { - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].no,460, 460); - } - }, 100) - } - return false; - } - - th.data.current_page++; - val = a.data.total+th.data.by_list.length; - - big_arr=big_arr.concat(details); - this.setData({ - details: big_arr,val: val, - is_get: 1, - current_page: this.data.current_page, - }); - - setTimeout(function () { - if(by_list) details=big_arr; - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no,460, 460); - } - }, 100) - }) - - - - }, - - - // 使用说明详情展开 - clickDetails: function(e) { - let details = this.data.details; - let index = e.currentTarget.dataset.index; - details[index].isShowDetails = !details[index].isShowDetails; - this.setData({ - details, - }); - }, - - - - //---加载更多是靠这个函数---- - onReachBottom: function () { - if(this.data.currentIndex != 3) { - this.wjquery(); - } else { - this.scrollToLower('/api/weshop/users/listExchangeCoupons', { - user_id: getApp().globalData.user_id, - store_id: os.stoid, - }, function() { - // console.log('!!!!!', _this.data.list.pageData); - _this.setData({ - result: _this.data.list.pageData, - }); - }); - }; - }, - - - //起始时间 - // bindDateChenge: function(e) { - // console.log("是什么", e.detail.value); - // var isBind = false; - // this.setData({ - // datet: e.detail.value, isBind: isBind - // }); - // }, - // 结束时间 - // bindDateChenges: function(e) { - // console.log("是什么", e.detail.value); - // var isBinds = false; - // this.setData({ - // dates: e.detail.value, isBinds: isBinds - // }); - // }, - //catchtap阻止冒泡,点击清除开始时间的按钮 - // eliminate:function(){ - // console.log("试试"); - // var isBind= true; - // var data=""; - // this.setData({ datet: data, isBind: isBind}) - // }, - //catchtap阻止冒泡,点击清除结束时间的按钮 - // eliminates: function () { - // console.log("试试"); - // var isBinds = true; - // var dates = ""; - // this.setData({ dates: dates, isBinds: isBinds }) - // }, - - - - - - - // 上拉加载请求数据 - getData: function(isInit, url, data) { - return getApp().request.promiseGet(url, {data: data, isShowLoading: true,}) - .then((res) => { - _this.data.isLoading = false; - if(res.data.code == 0) { - if(isInit) {// 第一次加载 - _this.setData({ - list: res.data.data - }); - } else { - _this.setData({ - 'list.pageData': _this.data.list.pageData.concat(res.data.data.pageData) - }); - }; - - if((res.data.data.pageData.length == 0) || (res.data.data.pageSize * res.data.data.page >= res.data.data.total)) { - _this.setData({ - noMore: true - }); - }; - }; - }); - }, - - - // 上拉加载 - scrollToLower(url, requestData, callback) { - // 页面数据 - // let pageData = this.data.list.pageData; - // 数据总量 - let total = this.data.list.total; - // 单页最大数据量 - let pageSize = this.data.list.pageSize; - // 如果数据总量不为0且小于或等于单页最大数据量,说明数据已全部加载,显示‘没有更多了’ - if((total != 0)&&(total <= pageSize)) { - this.setData({ - noMore: true - }); - }; - - if(!this.data.isloading && !this.data.noMore) { - this.setData({ - isLoading: true, - pageNum: this.data.pageNum + 1 - }); - requestData.page = this.data.pageNum; - this.getData(false, url, requestData).then(()=>{ - if(callback) { - callback(); - }; - }); - }; - }, - -}) \ No newline at end of file diff --git a/packageB/pages/coupons/query/index.json b/packageB/pages/coupons/query/index.json deleted file mode 100644 index 8851a02..0000000 --- a/packageB/pages/coupons/query/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "enablePullDownRefresh": false, - "usingComponents": { - "nodata": "/components/nodata/nodata" - } -} \ No newline at end of file diff --git a/packageB/pages/coupons/query/index.wxml b/packageB/pages/coupons/query/index.wxml deleted file mode 100644 index 1e06d8f..0000000 --- a/packageB/pages/coupons/query/index.wxml +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - - - - - - - {{item}} - - - - - - - - - 包邮券 - - - - 包邮券 - 微券来源: 微信商城 - - {{filter.showBtnText(currentIndex)}} - - - 有效期:{{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}} 至 {{time.format_time(detail.use_end_time)}} - 有效期:不限 - - - - - - 使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?',不包邮地区:'+detail.title:''}} - - - - - - - {{filter.getNum(detail.Sum)}} - - - - {{filter.getNum(detail.Sum)}}元微券 - 微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}} - - - {{filter.showBtnText(currentIndex)}} - - - - 有效期:{{detail.BeginDate==null ? " " : time.replace_time2(detail.BeginDate)}} 至 {{time.replace_time2(detail.ValidDate)}} - 有效期:不限 - - - - - - {{filter.getNum(detail.Sum)}}元优惠券,{{(detail.UseObjectID==null || detail.UseObjectID=='')?"全场通用":"仅限"+(detail.UseObjectName)+"使用"}},满 {{detail.BuySum==null || detail.BuySum==''?filter.getNum(0):filter.getNum(detail.BuySum)}}元使用 {{detail.region_list_name==null || detail.region_list_name==''?"":",不包邮地区:"+region_list_name}};{{detail.Remark}} - 使用说明: {{filter.getNum(detail.Sum)}}元优惠券,{{(detail.UseObjectID==null || detail.UseObjectID=='')?"全场通用":"仅限"+(detail.UseObjectName)+"使用"}},满 {{detail.BuySum==null || detail.BuySum==''?filter.getNum(0):filter.getNum(detail.BuySum)}}元使用 {{detail.region_list_name==null || detail.region_list_name==''?"":",不包邮地区:"+region_list_name}} - - - - - - - - - - - {{filter.getNum(result.ToSum)}} - - - - {{result.Integral}}积分兑换{{filter.getNum(result.ToSum)}}元微券 - - - 立即兑换 - - - - - - - - - - - - - - —— 已经到底了 —— - - —— 已经到底了 —— - - - - - - - - - - - - - - - - - - diff --git a/packageB/pages/coupons/query/index.wxss b/packageB/pages/coupons/query/index.wxss deleted file mode 100644 index 2c39bbb..0000000 --- a/packageB/pages/coupons/query/index.wxss +++ /dev/null @@ -1,640 +0,0 @@ -/* 大边框 */ -.big-rim{ - margin-top: 15rpx; - width: 100%; - height: 310rpx; -border-bottom: 8px solid #EEEEEE; -} -.min-rim{ -display: flex; -width: 100%; -height: auto; -margin-left: 30rpx; -} - -/* 开始时间 */ -.kssj{ - -display: inline-block; -height: 50rpx; -background-color: #EEEEEE; -border: 1px solid #DADADA; -width:200rpx; -border-radius: 3px; -line-height:40rpx; -} -/* 开始时间的文字 */ -.wz{ - display: inline-block; -font-size: 25rpx; -color: #333; -} -/* 日期控件 */ -.pi{ - width:200rpx; - height:auto; - margin-left:20rpx; - -} - - - -/* 查询内容 */ -.cxnr{ - margin-left:30rpx; - font-size:28rpx; - font-family: 'SimHei',Arial; -} -.rq-rim{ -position:relative; -left:0; -top:0; -} -/* 至 */ -.zi{ - - margin-top:14rpx; - font-size:28rpx; - font-family: 'SimHei',Arial; - margin-left:20rpx; - -} -/* 结束时间 */ - -.jssj{ - padding-left: 10rpx; - margin-left: 30rpx; -padding-bottom: 10rpx; -height: 35rpx; -font-size: 25rpx; -color: #333; -background-color: #EEEEEE; -border: 1px solid #DADADA; -width:85%; -font-family: 'SimHei',Arial; -border-radius: 3px; -} -/* 查询内容的备考的边框 */ -.xknr-rim{ - display: flex; - width: 100%; - height: 55rpx; - line-height:105rpx; - margin-top:10rpx; - -} -/* 明细查询 */ -.botton{ - margin-left: 30rpx; - margin-top: 63rpx; - background-color: #C4182E; - width: 95%; - border-radius:10rpx; - text-align: center; - height: 70rpx; - line-height: 70rpx; - color: #FFF; - font-size: 25rpx; - border: none; - font-family: '微软雅黑'; - } - /* 底部边框线 - .bottom{ - width: 100%; - border-bottom: 20rpx solid #eeeeee; - } */ - /* 清空按钮的 边框*/ -.qc-rim{ - position:absolute; - top:10rpx; - left:175rpx; -} - -/*开始时间清空输入框的按钮*/ -.empty{ - width: 25rpx; - height: 25rpx; - border-radius:50%; - background: #767676; - color: #fff; - font-size: 25rpx; - text-align: center; - line-height:18rpx; -} -/* 结束时间清空输入框的按钮的边框 */ -.end-rim{ -position: absolute; - top: 11rpx; - left:173rpx; - width: 25rpx; - height: 25rpx; -} -/*结束时间清空输入框的按钮*/ -.end{ - - width: 25rpx; - height: 25rpx; - border-radius:50%; - background: #767676; - color: #fff; - font-size: 25rpx; - text-align: center; - line-height:21rpx; - -} - -/* 顶部 */ -.top{ - width: 200rpx; - height: 50rpx; - padding: 0 10rpx; - line-height: 50rpx; - font-size: 34rpx; - margin-top: 25rpx; - - -} -.images{ - width:35rpx; -height:30rpx; -margin-top:10rpx; -margin-left:-14rpx; - -} -.rim-images{ - width: 45rpx; - height: 46rpx; - line-height: 37rpx; - /* border-style: inset;padding:4rpx;text-align: center; */ - background: #f1f1f1; - border-color:#000000; - border-width: 1rpx; - transform:translateX(28%); - margin-top:-3rpx; -border-radius:5rpx; - - -} -/* 下拉框 */ -.top-selected{ - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - border: 1px solid #ccc; - padding: 0 10rpx; - font-size: 30rpx; - background:#eeeeee; - height:50rpx; - border-radius:6rpx; -} -.texts{ - margin:0 auto; - font-size: 25rpx; - -} -/* 下拉内容 */ -.select-box { - background-color: #eeeeee; - width:225rpx; - position: relative; - z-index:1; - overflow: hidden; - text-align: left; - animation: myfirst 0.5s; - font-size: 25rpx; -} -.select_one { - padding-left: 20rpx; - width: 100%; - height: 60rpx; - line-height: 60rpx; -} -/* 优惠券样式 */ -.body{ - text-align: center; - padding: 20rpx; - margin: 20rpx auto; - width: 80%; - max-width: 1000rpx; - font-size: 28rpx; - color: #333333; - border-bottom: 2rpx solid #EEEEEE; -} - -.b_iimg{ - background-color: red; - width: 400rpx; - height: 400rpx; -} - -.b_sz2{ - font-size: 40rpx; - color: #6fd137; - margin: 20rpx 0; - text-align: center; -} -/* 二维码列表查询 */ -/* 列表数据*/ -.data{ - width: 80%; - - height:auto; - margin-left:80rpx; - -} -.rim{ - position: relative; - top:0rpx; - left: 0rpx; -} -/* 二维码边框 */ -.code_rim{ - width: 100%; - height: auto; - text-align: center; - font-size: 25rpx; - padding-top: -30rpx; - margin-top:-20rpx; -padding-left:45rpx; - -} - -/* 二维码 */ -.code{ - height: 520rpx; - display: flex; - flex-direction: column; - justify-content: flex-end; - align-items: center; - margin-left:40rpx; - -} -.car-rim{ -width:98%; -height:177rpx; -text-align:center; -border-bottom:2rpx solid #eee; -margin-left:22rpx; - -} -/* 二维码值 */ -.code_val{ - margin-top:-104rpx; -margin-left:-59rpx; -color:#999999; - -} -/* 金额 */ -.moneys{ - margin-top:20rpx; - height: 47rpx; - width: 100%; - color:#6fd137; - text-align: center; - font-size: 38rpx; - font-family: 'SimHei',Arial; - margin-bottom:20rpx; - margin-left:11rpx; - -} -/* 文字 */ -.text{ - width: 100%; - font-size: 25rpx; - text-align: center; - - height: 41rpx; - color: #999999; -} -/* 二维码和条形码的边框 */ -.barqrcode{ - width: 100%; - height: auto; - margin-top:50rpx; - -} -/* 日期 */ -.rq{ - height: 25rpx; - font-size: 28rpx; - margin-top:12rpx; - font-family:'SimHei',Arial; -} -/* 点击条形 */ -.barcode { - height: 320rpx; - flex-direction: column; - justify-content: center; - align-items: center; - margin-left: 30rpx; -} -/* 二维码边框*/ -.qrcode_rim { - width: 100%; - height: 420rpx; - display: flex; - flex-direction: column; - justify-content: flex-end; - align-items: center; - margin-left: 80rpx; - margin-top:-210rpx; - -} -.qrcode{ - /* margin-left: 100rpx; */ -} -/* 使用说明 */ -.textss{ - width: 100%; - font-size: 25rpx; - text-align: center; - - min-height: 47rpx; - height:auto; - color: #999999; -} - - - - - - -page { - background-color: #f0f0f0; - scroll-behavior: smooth; -} - -.c-fe0000 { - color: #fe0000; -} - -.tab-head { - display: flex; - position: sticky; - top: 0; - background-color: white; - font-size: 28rpx; - z-index: 2; -} - -.tab-head-item { - flex: 1; - text-align: center; - padding: 30rpx 0; - position: relative; -} - -.tab-head-item.active { - color: #fe0000; -} - -.tab-head-item.active::after { - content: ''; - width: 60%; - height: 2rpx; - background-color: #fe0000; - position: absolute; - bottom: 0; - left: 50%; - transform: translateX(-50%); -} - -.tab-body { - padding: 0 20rpx; - overflow: hidden; -} - - .tab-list-item { - border-radius: 10rpx; - overflow: hidden; - margin-top: 30rpx; - } - - - -.coupon { - position: relative; - - background: radial-gradient(transparent 0, #FFD3D6 0) top left / 200rpx no-repeat, - radial-gradient(transparent 6px, #fff 0), - radial-gradient(transparent 6px, #fff 0); -} - - -.coupon::after { - content: ''; - position: absolute; - height: 100%; - width:4px; - top: 0; - left: 0; - background-image: linear-gradient(to bottom, #FFD3D6 4px, transparent 4px, transparent), - radial-gradient(4px circle at 0px 8px, #f0f0f0 4px, #FFD3D6 4px); - background-size: 4px 12px; - background-repeat: repeat-y; - } - - - .coupon2 { - /* width: 300px; */ - padding: 40rpx 0; - position: relative; - background: radial-gradient(circle at right top, transparent 16rpx, #FFD3D6 0) top left / 200rpx 51% no-repeat, - radial-gradient(circle at right bottom, transparent 16rpx, #FFD3D6 0) bottom left /200rpx 51% no-repeat, - radial-gradient(circle at left top, transparent 16rpx, white 0) top right /calc(100% - 200rpx) 51% no-repeat, - radial-gradient(circle at left bottom, transparent 16rpx, white 0) bottom right /calc(100% - 200rpx) 51% no-repeat; - /* filter: drop-shadow(2px 2px 2px rgba(0,0,0,.2)); */ - } - - .coupon2::after { - content: ''; - height: 70%; - border: 2rpx dashed #fff; - position: absolute; - left: 198rpx; - top: 0; - bottom: 0; - margin: auto; - } - -/* .coupon2 .c-l, - .coupon2 .c-r { - border: 2rpx solid red; - padding: 20rpx 0; - } */ - - - - .c-l { - color: #fe0000; - width: 200rpx; - display: flex; - align-items: center; - justify-content: center; - flex-shrink: 0; - } - - .rmb::before { - content: '¥'; - font-size: 28rpx; - } - - .c-r { - box-sizing: border-box; - padding: 20rpx; - flex: 1; - } - - .c-time { - color: #7b7b7b; - font-size: 24rpx; - padding-top: 10rpx; - word-break: break-all; - } - - .btn, .btn2 { - font-size: 26rpx; - padding: 10rpx 20rpx; - border: 2rpx solid #fe0000; - border-radius: 30rpx; - flex-shrink: 0; - } - - .btn { - color: #fe0000; - } - - .btn.gray { - color: #ccc; - border-color: #ccc; - } - - .btn2 { - color: white; - background-color: #fe0000; - } - - .c-info { - border-top: 2rpx dashed #f0f0f0; - padding: 10rpx 40rpx 10rpx 10rpx; - font-size: 22rpx; - background-color: #fefefe; - color: #7b7b7b; - position: relative; - } - - .arrow-down::after { - font-family: iconfont; - content: '\e600'; - font-size: 32rpx; - position: absolute; - right: 10rpx; - top: 10rpx; - /* transform: translateY(-50%); */ - transition: all 0.3s; - } - - .arrow-down.active::after { - transform: rotateZ(180deg); - } - - .mask { - position: fixed; - width: 100%; - height: 100%; - top: 0; - background-color: rgba(0,0,0,.7); - z-index: 1; - } - - .popup-container { - position: fixed; - width: 70%; - border-radius: 12rpx; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - z-index: 3; - } - - .popup { - text-align: center; - border-radius: 12rpx; - background-color: white; - overflow: hidden; - /* width: 80%; */ - } - - .popup-container .icon-close { - color: rgba(255,255,255,.6); - } - - .popup-title { - padding: 40rpx 0; - color: #fe0000; - background-color: #FFD3D6; - position: relative; - } - - .popup-title::after { - content: ''; - position: absolute; - left: -20rpx; - bottom: -12rpx; - width: 130%; - height: 20rpx; - background-image: -webkit-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent); - background-image: -moz-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent); - background-image: radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent); - background-size: 40rpx 40rpx; - transform: rotate(180deg); - -webkit-transform: rotate(180deg); - } - - - .popup .rmb::before { - font-size: 40rpx; - } - - .img-qr { - display: block; - width: 300rpx; - height: 300rpx; - margin: 0 auto; - background-color: pink; - } - - .qrcode { - width: 300rpx; - height: 300rpx; - margin: 0 auto; - } - - - .noMore { - padding: 20rpx; - color: #bbb; - text-align: center; - font-size: 22rpx; - } - - .breakall { - word-break: break-all; - } - - - - - - - - - - - - - - - - diff --git a/pages/user/coupons/code.js b/pages/user/coupons/code.js deleted file mode 100644 index 1c85f85..0000000 --- a/pages/user/coupons/code.js +++ /dev/null @@ -1,1170 +0,0 @@ -var CHAR_TILDE = 126; -var CODE_FNC1 = 102; - -var SET_STARTA = 103; -var SET_STARTB = 104; -var SET_STARTC = 105; -var SET_SHIFT = 98; -var SET_CODEA = 101; -var SET_CODEB = 100; -var SET_STOP = 106; - - -var REPLACE_CODES = { - CHAR_TILDE: CODE_FNC1 //~ corresponds to FNC1 in GS1-128 standard -} - -var CODESET = { - ANY: 1, - AB: 2, - A: 3, - B: 4, - C: 5 -}; - -function getBytes(str) { - var bytes = []; - for (var i = 0; i < str.length; i++) { - bytes.push(str.charCodeAt(i)); - } - return bytes; -} - -exports.code128 = function (ctx, text, width, height) { - - width = parseInt(width); - - height = parseInt(height); - - var codes = stringToCode128(text); - - var g = new Graphics(ctx, width, height); - - var barWeight = g.area.width / ((codes.length - 3) * 11 + 35); - - var x = g.area.left; - var y = g.area.top; - for (var i = 0; i < codes.length; i++) { - var c = codes[i]; - //two bars at a time: 1 black and 1 white - for (var bar = 0; bar < 8; bar += 2) { - var barW = PATTERNS[c][bar] * barWeight; - // var barH = height - y - this.border; - var barH = height - y; - var spcW = PATTERNS[c][bar + 1] * barWeight; - - //no need to draw if 0 width - if (barW > 0) { - g.fillFgRect(x, y, barW, barH); - } - - x += barW + spcW; - } - } - - ctx.draw(); -} - - -function stringToCode128(text) { - - var barc = { - currcs: CODESET.C - }; - - var bytes = getBytes(text); - //decide starting codeset - var index = bytes[0] == CHAR_TILDE ? 1 : 0; - - var csa1 = bytes.length > 0 ? codeSetAllowedFor(bytes[index++]) : CODESET.AB; - var csa2 = bytes.length > 0 ? codeSetAllowedFor(bytes[index++]) : CODESET.AB; - barc.currcs = getBestStartSet(csa1, csa2); - barc.currcs = perhapsCodeC(bytes, barc.currcs); - - //if no codeset changes this will end up with bytes.length+3 - //start, checksum and stop - var codes = new Array(); - - switch (barc.currcs) { - case CODESET.A: - codes.push(SET_STARTA); - break; - case CODESET.B: - codes.push(SET_STARTB); - break; - default: - codes.push(SET_STARTC); - break; - } - - - for (var i = 0; i < bytes.length; i++) { - var b1 = bytes[i]; //get the first of a pair - //should we translate/replace - if (b1 in REPLACE_CODES) { - codes.push(REPLACE_CODES[b1]); - i++ //jump to next - b1 = bytes[i]; - } - - //get the next in the pair if possible - var b2 = bytes.length > (i + 1) ? bytes[i + 1] : -1; - - codes = codes.concat(codesForChar(b1, b2, barc.currcs)); - //code C takes 2 chars each time - if (barc.currcs == CODESET.C) i++; - } - - //calculate checksum according to Code 128 standards - var checksum = codes[0]; - for (var weight = 1; weight < codes.length; weight++) { - checksum += (weight * codes[weight]); - } - codes.push(checksum % 103); - - codes.push(SET_STOP); - - //encoding should now be complete - return codes; - - function getBestStartSet(csa1, csa2) { - //tries to figure out the best codeset - //to start with to get the most compact code - var vote = 0; - vote += csa1 == CODESET.A ? 1 : 0; - vote += csa1 == CODESET.B ? -1 : 0; - vote += csa2 == CODESET.A ? 1 : 0; - vote += csa2 == CODESET.B ? -1 : 0; - //tie goes to B due to my own predudices - return vote > 0 ? CODESET.A : CODESET.B; - } - - function perhapsCodeC(bytes, codeset) { - for (var i = 0; i < bytes.length; i++) { - var b = bytes[i] - if ((b < 48 || b > 57) && b != CHAR_TILDE) - return codeset; - } - return CODESET.C; - } - - //chr1 is current byte - //chr2 is the next byte to process. looks ahead. - function codesForChar(chr1, chr2, currcs) { - var result = []; - var shifter = -1; - - if (charCompatible(chr1, currcs)) { - if (currcs == CODESET.C) { - if (chr2 == -1) { - shifter = SET_CODEB; - currcs = CODESET.B; - } - else if ((chr2 != -1) && !charCompatible(chr2, currcs)) { - //need to check ahead as well - if (charCompatible(chr2, CODESET.A)) { - shifter = SET_CODEA; - currcs = CODESET.A; - } - else { - shifter = SET_CODEB; - currcs = CODESET.B; - } - } - } - } - else { - //if there is a next char AND that next char is also not compatible - if ((chr2 != -1) && !charCompatible(chr2, currcs)) { - //need to switch code sets - switch (currcs) { - case CODESET.A: - shifter = SET_CODEB; - currcs = CODESET.B; - break; - case CODESET.B: - shifter = SET_CODEA; - currcs = CODESET.A; - break; - } - } - else { - //no need to shift code sets, a temporary SHIFT will suffice - shifter = SET_SHIFT; - } - } - - //ok some type of shift is nessecary - if (shifter != -1) { - result.push(shifter); - result.push(codeValue(chr1)); - } - else { - if (currcs == CODESET.C) { - //include next as well - result.push(codeValue(chr1, chr2)); - } - else { - result.push(codeValue(chr1)); - } - } - barc.currcs = currcs; - - return result; - } -} - -//reduce the ascii code to fit into the Code128 char table -function codeValue(chr1, chr2) { - if (typeof chr2 == "undefined") { - return chr1 >= 32 ? chr1 - 32 : chr1 + 64; - } - else { - return parseInt(String.fromCharCode(chr1) + String.fromCharCode(chr2)); - } -} - -function charCompatible(chr, codeset) { - var csa = codeSetAllowedFor(chr); - if (csa == CODESET.ANY) return true; - //if we need to change from current - if (csa == CODESET.AB) return true; - if (csa == CODESET.A && codeset == CODESET.A) return true; - if (csa == CODESET.B && codeset == CODESET.B) return true; - return false; -} - -function codeSetAllowedFor(chr) { - if (chr >= 48 && chr <= 57) { - //0-9 - return CODESET.ANY; - } - else if (chr >= 32 && chr <= 95) { - //0-9 A-Z - return CODESET.AB; - } - else { - //if non printable - return chr < 32 ? CODESET.A : CODESET.B; - } -} - -var Graphics = function (ctx, width, height) { - - this.width = width; - this.height = height; - this.quiet = Math.round(this.width / 40); - - this.border_size = 0; - this.padding_width = 0; - - this.area = { - width: width - this.padding_width * 2 - this.quiet * 2, - height: height - this.border_size * 2, - top: this.border_size - 4, - left: this.padding_width + this.quiet - }; - - this.ctx = ctx; - this.fg = "#000000"; - this.bg = "#ffffff"; - - // fill background - this.fillBgRect(0, 0, width, height); - - // fill center to create border - this.fillBgRect(0, this.border_size, width, height - this.border_size * 2); -} - -//use native color -Graphics.prototype._fillRect = function (x, y, width, height, color) { - this.ctx.setFillStyle(color) - this.ctx.fillRect(x, y, width, height) -} - -Graphics.prototype.fillFgRect = function (x, y, width, height) { - this._fillRect(x, y, width, height, this.fg); -} - -Graphics.prototype.fillBgRect = function (x, y, width, height) { - this._fillRect(x, y, width, height, this.bg); -} - -var PATTERNS = [ - [2, 1, 2, 2, 2, 2, 0, 0], // 0 - [2, 2, 2, 1, 2, 2, 0, 0], // 1 - [2, 2, 2, 2, 2, 1, 0, 0], // 2 - [1, 2, 1, 2, 2, 3, 0, 0], // 3 - [1, 2, 1, 3, 2, 2, 0, 0], // 4 - [1, 3, 1, 2, 2, 2, 0, 0], // 5 - [1, 2, 2, 2, 1, 3, 0, 0], // 6 - [1, 2, 2, 3, 1, 2, 0, 0], // 7 - [1, 3, 2, 2, 1, 2, 0, 0], // 8 - [2, 2, 1, 2, 1, 3, 0, 0], // 9 - [2, 2, 1, 3, 1, 2, 0, 0], // 10 - [2, 3, 1, 2, 1, 2, 0, 0], // 11 - [1, 1, 2, 2, 3, 2, 0, 0], // 12 - [1, 2, 2, 1, 3, 2, 0, 0], // 13 - [1, 2, 2, 2, 3, 1, 0, 0], // 14 - [1, 1, 3, 2, 2, 2, 0, 0], // 15 - [1, 2, 3, 1, 2, 2, 0, 0], // 16 - [1, 2, 3, 2, 2, 1, 0, 0], // 17 - [2, 2, 3, 2, 1, 1, 0, 0], // 18 - [2, 2, 1, 1, 3, 2, 0, 0], // 19 - [2, 2, 1, 2, 3, 1, 0, 0], // 20 - [2, 1, 3, 2, 1, 2, 0, 0], // 21 - [2, 2, 3, 1, 1, 2, 0, 0], // 22 - [3, 1, 2, 1, 3, 1, 0, 0], // 23 - [3, 1, 1, 2, 2, 2, 0, 0], // 24 - [3, 2, 1, 1, 2, 2, 0, 0], // 25 - [3, 2, 1, 2, 2, 1, 0, 0], // 26 - [3, 1, 2, 2, 1, 2, 0, 0], // 27 - [3, 2, 2, 1, 1, 2, 0, 0], // 28 - [3, 2, 2, 2, 1, 1, 0, 0], // 29 - [2, 1, 2, 1, 2, 3, 0, 0], // 30 - [2, 1, 2, 3, 2, 1, 0, 0], // 31 - [2, 3, 2, 1, 2, 1, 0, 0], // 32 - [1, 1, 1, 3, 2, 3, 0, 0], // 33 - [1, 3, 1, 1, 2, 3, 0, 0], // 34 - [1, 3, 1, 3, 2, 1, 0, 0], // 35 - [1, 1, 2, 3, 1, 3, 0, 0], // 36 - [1, 3, 2, 1, 1, 3, 0, 0], // 37 - [1, 3, 2, 3, 1, 1, 0, 0], // 38 - [2, 1, 1, 3, 1, 3, 0, 0], // 39 - [2, 3, 1, 1, 1, 3, 0, 0], // 40 - [2, 3, 1, 3, 1, 1, 0, 0], // 41 - [1, 1, 2, 1, 3, 3, 0, 0], // 42 - [1, 1, 2, 3, 3, 1, 0, 0], // 43 - [1, 3, 2, 1, 3, 1, 0, 0], // 44 - [1, 1, 3, 1, 2, 3, 0, 0], // 45 - [1, 1, 3, 3, 2, 1, 0, 0], // 46 - [1, 3, 3, 1, 2, 1, 0, 0], // 47 - [3, 1, 3, 1, 2, 1, 0, 0], // 48 - [2, 1, 1, 3, 3, 1, 0, 0], // 49 - [2, 3, 1, 1, 3, 1, 0, 0], // 50 - [2, 1, 3, 1, 1, 3, 0, 0], // 51 - [2, 1, 3, 3, 1, 1, 0, 0], // 52 - [2, 1, 3, 1, 3, 1, 0, 0], // 53 - [3, 1, 1, 1, 2, 3, 0, 0], // 54 - [3, 1, 1, 3, 2, 1, 0, 0], // 55 - [3, 3, 1, 1, 2, 1, 0, 0], // 56 - [3, 1, 2, 1, 1, 3, 0, 0], // 57 - [3, 1, 2, 3, 1, 1, 0, 0], // 58 - [3, 3, 2, 1, 1, 1, 0, 0], // 59 - [3, 1, 4, 1, 1, 1, 0, 0], // 60 - [2, 2, 1, 4, 1, 1, 0, 0], // 61 - [4, 3, 1, 1, 1, 1, 0, 0], // 62 - [1, 1, 1, 2, 2, 4, 0, 0], // 63 - [1, 1, 1, 4, 2, 2, 0, 0], // 64 - [1, 2, 1, 1, 2, 4, 0, 0], // 65 - [1, 2, 1, 4, 2, 1, 0, 0], // 66 - [1, 4, 1, 1, 2, 2, 0, 0], // 67 - [1, 4, 1, 2, 2, 1, 0, 0], // 68 - [1, 1, 2, 2, 1, 4, 0, 0], // 69 - [1, 1, 2, 4, 1, 2, 0, 0], // 70 - [1, 2, 2, 1, 1, 4, 0, 0], // 71 - [1, 2, 2, 4, 1, 1, 0, 0], // 72 - [1, 4, 2, 1, 1, 2, 0, 0], // 73 - [1, 4, 2, 2, 1, 1, 0, 0], // 74 - [2, 4, 1, 2, 1, 1, 0, 0], // 75 - [2, 2, 1, 1, 1, 4, 0, 0], // 76 - [4, 1, 3, 1, 1, 1, 0, 0], // 77 - [2, 4, 1, 1, 1, 2, 0, 0], // 78 - [1, 3, 4, 1, 1, 1, 0, 0], // 79 - [1, 1, 1, 2, 4, 2, 0, 0], // 80 - [1, 2, 1, 1, 4, 2, 0, 0], // 81 - [1, 2, 1, 2, 4, 1, 0, 0], // 82 - [1, 1, 4, 2, 1, 2, 0, 0], // 83 - [1, 2, 4, 1, 1, 2, 0, 0], // 84 - [1, 2, 4, 2, 1, 1, 0, 0], // 85 - [4, 1, 1, 2, 1, 2, 0, 0], // 86 - [4, 2, 1, 1, 1, 2, 0, 0], // 87 - [4, 2, 1, 2, 1, 1, 0, 0], // 88 - [2, 1, 2, 1, 4, 1, 0, 0], // 89 - [2, 1, 4, 1, 2, 1, 0, 0], // 90 - [4, 1, 2, 1, 2, 1, 0, 0], // 91 - [1, 1, 1, 1, 4, 3, 0, 0], // 92 - [1, 1, 1, 3, 4, 1, 0, 0], // 93 - [1, 3, 1, 1, 4, 1, 0, 0], // 94 - [1, 1, 4, 1, 1, 3, 0, 0], // 95 - [1, 1, 4, 3, 1, 1, 0, 0], // 96 - [4, 1, 1, 1, 1, 3, 0, 0], // 97 - [4, 1, 1, 3, 1, 1, 0, 0], // 98 - [1, 1, 3, 1, 4, 1, 0, 0], // 99 - [1, 1, 4, 1, 3, 1, 0, 0], // 100 - [3, 1, 1, 1, 4, 1, 0, 0], // 101 - [4, 1, 1, 1, 3, 1, 0, 0], // 102 - [2, 1, 1, 4, 1, 2, 0, 0], // 103 - [2, 1, 1, 2, 1, 4, 0, 0], // 104 - [2, 1, 1, 2, 3, 2, 0, 0], // 105 - [2, 3, 3, 1, 1, 1, 2, 0] // 106 -] -var QR = (function () { - - // alignment pattern - var adelta = [ - 0, 11, 15, 19, 23, 27, 31, // force 1 pat - 16, 18, 20, 22, 24, 26, 28, 20, 22, 24, 24, 26, 28, 28, 22, 24, 24, - 26, 26, 28, 28, 24, 24, 26, 26, 26, 28, 28, 24, 26, 26, 26, 28, 28 - ]; - - // version block - var vpat = [ - 0xc94, 0x5bc, 0xa99, 0x4d3, 0xbf6, 0x762, 0x847, 0x60d, - 0x928, 0xb78, 0x45d, 0xa17, 0x532, 0x9a6, 0x683, 0x8c9, - 0x7ec, 0xec4, 0x1e1, 0xfab, 0x08e, 0xc1a, 0x33f, 0xd75, - 0x250, 0x9d5, 0x6f0, 0x8ba, 0x79f, 0xb0b, 0x42e, 0xa64, - 0x541, 0xc69 - ]; - - // final format bits with mask: level << 3 | mask - var fmtword = [ - 0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976, //L - 0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, //M - 0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed, //Q - 0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b //H - ]; - - // 4 per version: number of blocks 1,2; data width; ecc width - var eccblocks = [ - 1, 0, 19, 7, 1, 0, 16, 10, 1, 0, 13, 13, 1, 0, 9, 17, - 1, 0, 34, 10, 1, 0, 28, 16, 1, 0, 22, 22, 1, 0, 16, 28, - 1, 0, 55, 15, 1, 0, 44, 26, 2, 0, 17, 18, 2, 0, 13, 22, - 1, 0, 80, 20, 2, 0, 32, 18, 2, 0, 24, 26, 4, 0, 9, 16, - 1, 0, 108, 26, 2, 0, 43, 24, 2, 2, 15, 18, 2, 2, 11, 22, - 2, 0, 68, 18, 4, 0, 27, 16, 4, 0, 19, 24, 4, 0, 15, 28, - 2, 0, 78, 20, 4, 0, 31, 18, 2, 4, 14, 18, 4, 1, 13, 26, - 2, 0, 97, 24, 2, 2, 38, 22, 4, 2, 18, 22, 4, 2, 14, 26, - 2, 0, 116, 30, 3, 2, 36, 22, 4, 4, 16, 20, 4, 4, 12, 24, - 2, 2, 68, 18, 4, 1, 43, 26, 6, 2, 19, 24, 6, 2, 15, 28, - 4, 0, 81, 20, 1, 4, 50, 30, 4, 4, 22, 28, 3, 8, 12, 24, - 2, 2, 92, 24, 6, 2, 36, 22, 4, 6, 20, 26, 7, 4, 14, 28, - 4, 0, 107, 26, 8, 1, 37, 22, 8, 4, 20, 24, 12, 4, 11, 22, - 3, 1, 115, 30, 4, 5, 40, 24, 11, 5, 16, 20, 11, 5, 12, 24, - 5, 1, 87, 22, 5, 5, 41, 24, 5, 7, 24, 30, 11, 7, 12, 24, - 5, 1, 98, 24, 7, 3, 45, 28, 15, 2, 19, 24, 3, 13, 15, 30, - 1, 5, 107, 28, 10, 1, 46, 28, 1, 15, 22, 28, 2, 17, 14, 28, - 5, 1, 120, 30, 9, 4, 43, 26, 17, 1, 22, 28, 2, 19, 14, 28, - 3, 4, 113, 28, 3, 11, 44, 26, 17, 4, 21, 26, 9, 16, 13, 26, - 3, 5, 107, 28, 3, 13, 41, 26, 15, 5, 24, 30, 15, 10, 15, 28, - 4, 4, 116, 28, 17, 0, 42, 26, 17, 6, 22, 28, 19, 6, 16, 30, - 2, 7, 111, 28, 17, 0, 46, 28, 7, 16, 24, 30, 34, 0, 13, 24, - 4, 5, 121, 30, 4, 14, 47, 28, 11, 14, 24, 30, 16, 14, 15, 30, - 6, 4, 117, 30, 6, 14, 45, 28, 11, 16, 24, 30, 30, 2, 16, 30, - 8, 4, 106, 26, 8, 13, 47, 28, 7, 22, 24, 30, 22, 13, 15, 30, - 10, 2, 114, 28, 19, 4, 46, 28, 28, 6, 22, 28, 33, 4, 16, 30, - 8, 4, 122, 30, 22, 3, 45, 28, 8, 26, 23, 30, 12, 28, 15, 30, - 3, 10, 117, 30, 3, 23, 45, 28, 4, 31, 24, 30, 11, 31, 15, 30, - 7, 7, 116, 30, 21, 7, 45, 28, 1, 37, 23, 30, 19, 26, 15, 30, - 5, 10, 115, 30, 19, 10, 47, 28, 15, 25, 24, 30, 23, 25, 15, 30, - 13, 3, 115, 30, 2, 29, 46, 28, 42, 1, 24, 30, 23, 28, 15, 30, - 17, 0, 115, 30, 10, 23, 46, 28, 10, 35, 24, 30, 19, 35, 15, 30, - 17, 1, 115, 30, 14, 21, 46, 28, 29, 19, 24, 30, 11, 46, 15, 30, - 13, 6, 115, 30, 14, 23, 46, 28, 44, 7, 24, 30, 59, 1, 16, 30, - 12, 7, 121, 30, 12, 26, 47, 28, 39, 14, 24, 30, 22, 41, 15, 30, - 6, 14, 121, 30, 6, 34, 47, 28, 46, 10, 24, 30, 2, 64, 15, 30, - 17, 4, 122, 30, 29, 14, 46, 28, 49, 10, 24, 30, 24, 46, 15, 30, - 4, 18, 122, 30, 13, 32, 46, 28, 48, 14, 24, 30, 42, 32, 15, 30, - 20, 4, 117, 30, 40, 7, 47, 28, 43, 22, 24, 30, 10, 67, 15, 30, - 19, 6, 118, 30, 18, 31, 47, 28, 34, 34, 24, 30, 20, 61, 15, 30 - ]; - - // Galois field log table - var glog = [ - 0xff, 0x00, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b, - 0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, 0x4c, 0x71, - 0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45, - 0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, 0x4d, 0xe4, 0x72, 0xa6, - 0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88, - 0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40, - 0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d, - 0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57, - 0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18, - 0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e, - 0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61, - 0xf2, 0x56, 0xd3, 0xab, 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2, - 0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6, - 0x6c, 0xa1, 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a, - 0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7, - 0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf - ]; - - // Galios field exponent table - var gexp = [ - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26, - 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, - 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23, - 0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1, - 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0, - 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2, - 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce, - 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc, - 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54, - 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73, - 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff, - 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41, - 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6, - 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09, - 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16, - 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x00 - ]; - - // Working buffers: - // data input and ecc append, image working buffer, fixed part of image, run lengths for badness - var strinbuf = [], eccbuf = [], qrframe = [], framask = [], rlens = []; - // Control values - width is based on version, last 4 are from table. - var version, width, neccblk1, neccblk2, datablkw, eccblkwid; - var ecclevel = 2; - // set bit to indicate cell in qrframe is immutable. symmetric around diagonal - function setmask(x, y) { - var bt; - if (x > y) { - bt = x; - x = y; - y = bt; - } - // y*y = 1+3+5... - bt = y; - bt *= y; - bt += y; - bt >>= 1; - bt += x; - framask[bt] = 1; - } - - // enter alignment pattern - black to qrframe, white to mask (later black frame merged to mask) - function putalign(x, y) { - var j; - - qrframe[x + width * y] = 1; - for (j = -2; j < 2; j++) { - qrframe[(x + j) + width * (y - 2)] = 1; - qrframe[(x - 2) + width * (y + j + 1)] = 1; - qrframe[(x + 2) + width * (y + j)] = 1; - qrframe[(x + j + 1) + width * (y + 2)] = 1; - } - for (j = 0; j < 2; j++) { - setmask(x - 1, y + j); - setmask(x + 1, y - j); - setmask(x - j, y - 1); - setmask(x + j, y + 1); - } - } - - //======================================================================== - // Reed Solomon error correction - // exponentiation mod N - function modnn(x) { - while (x >= 255) { - x -= 255; - x = (x >> 8) + (x & 255); - } - return x; - } - - var genpoly = []; - - // Calculate and append ECC data to data block. Block is in strinbuf, indexes to buffers given. - function appendrs(data, dlen, ecbuf, eclen) { - var i, j, fb; - - for (i = 0; i < eclen; i++) - strinbuf[ecbuf + i] = 0; - for (i = 0; i < dlen; i++) { - fb = glog[strinbuf[data + i] ^ strinbuf[ecbuf]]; - if (fb != 255) /* fb term is non-zero */ - for (j = 1; j < eclen; j++) - strinbuf[ecbuf + j - 1] = strinbuf[ecbuf + j] ^ gexp[modnn(fb + genpoly[eclen - j])]; - else - for (j = ecbuf; j < ecbuf + eclen; j++) - strinbuf[j] = strinbuf[j + 1]; - strinbuf[ecbuf + eclen - 1] = fb == 255 ? 0 : gexp[modnn(fb + genpoly[0])]; - } - } - - //======================================================================== - // Frame data insert following the path rules - - // check mask - since symmetrical use half. - function ismasked(x, y) { - var bt; - if (x > y) { - bt = x; - x = y; - y = bt; - } - bt = y; - bt += y * y; - bt >>= 1; - bt += x; - return framask[bt]; - } - - //======================================================================== - // Apply the selected mask out of the 8. - function applymask(m) { - var x, y, r3x, r3y; - - switch (m) { - case 0: - for (y = 0; y < width; y++) - for (x = 0; x < width; x++) - if (!((x + y) & 1) && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - break; - case 1: - for (y = 0; y < width; y++) - for (x = 0; x < width; x++) - if (!(y & 1) && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - break; - case 2: - for (y = 0; y < width; y++) - for (r3x = 0, x = 0; x < width; x++ , r3x++) { - if (r3x == 3) - r3x = 0; - if (!r3x && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - } - break; - case 3: - for (r3y = 0, y = 0; y < width; y++ , r3y++) { - if (r3y == 3) - r3y = 0; - for (r3x = r3y, x = 0; x < width; x++ , r3x++) { - if (r3x == 3) - r3x = 0; - if (!r3x && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - } - } - break; - case 4: - for (y = 0; y < width; y++) - for (r3x = 0, r3y = ((y >> 1) & 1), x = 0; x < width; x++ , r3x++) { - if (r3x == 3) { - r3x = 0; - r3y = !r3y; - } - if (!r3y && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - } - break; - case 5: - for (r3y = 0, y = 0; y < width; y++ , r3y++) { - if (r3y == 3) - r3y = 0; - for (r3x = 0, x = 0; x < width; x++ , r3x++) { - if (r3x == 3) - r3x = 0; - if (!((x & y & 1) + !(!r3x | !r3y)) && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - } - } - break; - case 6: - for (r3y = 0, y = 0; y < width; y++ , r3y++) { - if (r3y == 3) - r3y = 0; - for (r3x = 0, x = 0; x < width; x++ , r3x++) { - if (r3x == 3) - r3x = 0; - if (!(((x & y & 1) + (r3x && (r3x == r3y))) & 1) && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - } - } - break; - case 7: - for (r3y = 0, y = 0; y < width; y++ , r3y++) { - if (r3y == 3) - r3y = 0; - for (r3x = 0, x = 0; x < width; x++ , r3x++) { - if (r3x == 3) - r3x = 0; - if (!(((r3x && (r3x == r3y)) + ((x + y) & 1)) & 1) && !ismasked(x, y)) - qrframe[x + y * width] ^= 1; - } - } - break; - } - return; - } - - // Badness coefficients. - var N1 = 3, N2 = 3, N3 = 40, N4 = 10; - - // Using the table of the length of each run, calculate the amount of bad image - // - long runs or those that look like finders; called twice, once each for X and Y - function badruns(length) { - var i; - var runsbad = 0; - for (i = 0; i <= length; i++) - if (rlens[i] >= 5) - runsbad += N1 + rlens[i] - 5; - // BwBBBwB as in finder - for (i = 3; i < length - 1; i += 2) - if (rlens[i - 2] == rlens[i + 2] - && rlens[i + 2] == rlens[i - 1] - && rlens[i - 1] == rlens[i + 1] - && rlens[i - 1] * 3 == rlens[i] - // white around the black pattern? Not part of spec - && (rlens[i - 3] == 0 // beginning - || i + 3 > length // end - || rlens[i - 3] * 3 >= rlens[i] * 4 || rlens[i + 3] * 3 >= rlens[i] * 4) - ) - runsbad += N3; - return runsbad; - } - - // Calculate how bad the masked image is - blocks, imbalance, runs, or finders. - function badcheck() { - var x, y, h, b, b1; - var thisbad = 0; - var bw = 0; - - // blocks of same color. - for (y = 0; y < width - 1; y++) - for (x = 0; x < width - 1; x++) - if ((qrframe[x + width * y] && qrframe[(x + 1) + width * y] - && qrframe[x + width * (y + 1)] && qrframe[(x + 1) + width * (y + 1)]) // all black - || !(qrframe[x + width * y] || qrframe[(x + 1) + width * y] - || qrframe[x + width * (y + 1)] || qrframe[(x + 1) + width * (y + 1)])) // all white - thisbad += N2; - - // X runs - for (y = 0; y < width; y++) { - rlens[0] = 0; - for (h = b = x = 0; x < width; x++) { - if ((b1 = qrframe[x + width * y]) == b) - rlens[h]++; - else - rlens[++h] = 1; - b = b1; - bw += b ? 1 : -1; - } - thisbad += badruns(h); - } - - // black/white imbalance - if (bw < 0) - bw = -bw; - - var big = bw; - var count = 0; - big += big << 2; - big <<= 1; - while (big > width * width) - big -= width * width, count++; - thisbad += count * N4; - - // Y runs - for (x = 0; x < width; x++) { - rlens[0] = 0; - for (h = b = y = 0; y < width; y++) { - if ((b1 = qrframe[x + width * y]) == b) - rlens[h]++; - else - rlens[++h] = 1; - b = b1; - } - thisbad += badruns(h); - } - return thisbad; - } - - function genframe(instring) { - var x, y, k, t, v, i, j, m; - - // find the smallest version that fits the string - t = instring.length; - version = 0; - do { - version++; - k = (ecclevel - 1) * 4 + (version - 1) * 16; - neccblk1 = eccblocks[k++]; - neccblk2 = eccblocks[k++]; - datablkw = eccblocks[k++]; - eccblkwid = eccblocks[k]; - k = datablkw * (neccblk1 + neccblk2) + neccblk2 - 3 + (version <= 9); - if (t <= k) - break; - } while (version < 40); - - // FIXME - insure that it fits insted of being truncated - width = 17 + 4 * version; - - // allocate, clear and setup data structures - v = datablkw + (datablkw + eccblkwid) * (neccblk1 + neccblk2) + neccblk2; - for (t = 0; t < v; t++) - eccbuf[t] = 0; - strinbuf = instring.slice(0); - - for (t = 0; t < width * width; t++) - qrframe[t] = 0; - - for (t = 0; t < (width * (width + 1) + 1) / 2; t++) - framask[t] = 0; - - // insert finders - black to frame, white to mask - for (t = 0; t < 3; t++) { - k = 0; - y = 0; - if (t == 1) - k = (width - 7); - if (t == 2) - y = (width - 7); - qrframe[(y + 3) + width * (k + 3)] = 1; - for (x = 0; x < 6; x++) { - qrframe[(y + x) + width * k] = 1; - qrframe[y + width * (k + x + 1)] = 1; - qrframe[(y + 6) + width * (k + x)] = 1; - qrframe[(y + x + 1) + width * (k + 6)] = 1; - } - for (x = 1; x < 5; x++) { - setmask(y + x, k + 1); - setmask(y + 1, k + x + 1); - setmask(y + 5, k + x); - setmask(y + x + 1, k + 5); - } - for (x = 2; x < 4; x++) { - qrframe[(y + x) + width * (k + 2)] = 1; - qrframe[(y + 2) + width * (k + x + 1)] = 1; - qrframe[(y + 4) + width * (k + x)] = 1; - qrframe[(y + x + 1) + width * (k + 4)] = 1; - } - } - - // alignment blocks - if (version > 1) { - t = adelta[version]; - y = width - 7; - for (; ;) { - x = width - 7; - while (x > t - 3) { - putalign(x, y); - if (x < t) - break; - x -= t; - } - if (y <= t + 9) - break; - y -= t; - putalign(6, y); - putalign(y, 6); - } - } - - // single black - qrframe[8 + width * (width - 8)] = 1; - - // timing gap - mask only - for (y = 0; y < 7; y++) { - setmask(7, y); - setmask(width - 8, y); - setmask(7, y + width - 7); - } - for (x = 0; x < 8; x++) { - setmask(x, 7); - setmask(x + width - 8, 7); - setmask(x, width - 8); - } - - // reserve mask-format area - for (x = 0; x < 9; x++) - setmask(x, 8); - for (x = 0; x < 8; x++) { - setmask(x + width - 8, 8); - setmask(8, x); - } - for (y = 0; y < 7; y++) - setmask(8, y + width - 7); - - // timing row/col - for (x = 0; x < width - 14; x++) - if (x & 1) { - setmask(8 + x, 6); - setmask(6, 8 + x); - } - else { - qrframe[(8 + x) + width * 6] = 1; - qrframe[6 + width * (8 + x)] = 1; - } - - // version block - if (version > 6) { - t = vpat[version - 7]; - k = 17; - for (x = 0; x < 6; x++) - for (y = 0; y < 3; y++ , k--) - if (1 & (k > 11 ? version >> (k - 12) : t >> k)) { - qrframe[(5 - x) + width * (2 - y + width - 11)] = 1; - qrframe[(2 - y + width - 11) + width * (5 - x)] = 1; - } - else { - setmask(5 - x, 2 - y + width - 11); - setmask(2 - y + width - 11, 5 - x); - } - } - - // sync mask bits - only set above for white spaces, so add in black bits - for (y = 0; y < width; y++) - for (x = 0; x <= y; x++) - if (qrframe[x + width * y]) - setmask(x, y); - - // convert string to bitstream - // 8 bit data to QR-coded 8 bit data (numeric or alphanum, or kanji not supported) - v = strinbuf.length; - - // string to array - for (i = 0; i < v; i++) - eccbuf[i] = strinbuf.charCodeAt(i); - strinbuf = eccbuf.slice(0); - - // calculate max string length - x = datablkw * (neccblk1 + neccblk2) + neccblk2; - if (v >= x - 2) { - v = x - 2; - if (version > 9) - v--; - } - - // shift and repack to insert length prefix - i = v; - if (version > 9) { - strinbuf[i + 2] = 0; - strinbuf[i + 3] = 0; - while (i--) { - t = strinbuf[i]; - strinbuf[i + 3] |= 255 & (t << 4); - strinbuf[i + 2] = t >> 4; - } - strinbuf[2] |= 255 & (v << 4); - strinbuf[1] = v >> 4; - strinbuf[0] = 0x40 | (v >> 12); - } - else { - strinbuf[i + 1] = 0; - strinbuf[i + 2] = 0; - while (i--) { - t = strinbuf[i]; - strinbuf[i + 2] |= 255 & (t << 4); - strinbuf[i + 1] = t >> 4; - } - strinbuf[1] |= 255 & (v << 4); - strinbuf[0] = 0x40 | (v >> 4); - } - // fill to end with pad pattern - i = v + 3 - (version < 10); - while (i < x) { - strinbuf[i++] = 0xec; - // buffer has room if (i == x) break; - strinbuf[i++] = 0x11; - } - - // calculate and append ECC - - // calculate generator polynomial - genpoly[0] = 1; - for (i = 0; i < eccblkwid; i++) { - genpoly[i + 1] = 1; - for (j = i; j > 0; j--) - genpoly[j] = genpoly[j] - ? genpoly[j - 1] ^ gexp[modnn(glog[genpoly[j]] + i)] : genpoly[j - 1]; - genpoly[0] = gexp[modnn(glog[genpoly[0]] + i)]; - } - for (i = 0; i <= eccblkwid; i++) - genpoly[i] = glog[genpoly[i]]; // use logs for genpoly[] to save calc step - - // append ecc to data buffer - k = x; - y = 0; - for (i = 0; i < neccblk1; i++) { - appendrs(y, datablkw, k, eccblkwid); - y += datablkw; - k += eccblkwid; - } - for (i = 0; i < neccblk2; i++) { - appendrs(y, datablkw + 1, k, eccblkwid); - y += datablkw + 1; - k += eccblkwid; - } - // interleave blocks - y = 0; - for (i = 0; i < datablkw; i++) { - for (j = 0; j < neccblk1; j++) - eccbuf[y++] = strinbuf[i + j * datablkw]; - for (j = 0; j < neccblk2; j++) - eccbuf[y++] = strinbuf[(neccblk1 * datablkw) + i + (j * (datablkw + 1))]; - } - for (j = 0; j < neccblk2; j++) - eccbuf[y++] = strinbuf[(neccblk1 * datablkw) + i + (j * (datablkw + 1))]; - for (i = 0; i < eccblkwid; i++) - for (j = 0; j < neccblk1 + neccblk2; j++) - eccbuf[y++] = strinbuf[x + i + j * eccblkwid]; - strinbuf = eccbuf; - - // pack bits into frame avoiding masked area. - x = y = width - 1; - k = v = 1; // up, minus - /* inteleaved data and ecc codes */ - m = (datablkw + eccblkwid) * (neccblk1 + neccblk2) + neccblk2; - for (i = 0; i < m; i++) { - t = strinbuf[i]; - for (j = 0; j < 8; j++ , t <<= 1) { - if (0x80 & t) - qrframe[x + width * y] = 1; - do { // find next fill position - if (v) - x--; - else { - x++; - if (k) { - if (y != 0) - y--; - else { - x -= 2; - k = !k; - if (x == 6) { - x--; - y = 9; - } - } - } - else { - if (y != width - 1) - y++; - else { - x -= 2; - k = !k; - if (x == 6) { - x--; - y -= 8; - } - } - } - } - v = !v; - } while (ismasked(x, y)); - } - } - - // save pre-mask copy of frame - strinbuf = qrframe.slice(0); - t = 0; // best - y = 30000; // demerit - // for instead of while since in original arduino code - // if an early mask was "good enough" it wouldn't try for a better one - // since they get more complex and take longer. - for (k = 0; k < 8; k++) { - applymask(k); // returns black-white imbalance - x = badcheck(); - if (x < y) { // current mask better than previous best? - y = x; - t = k; - } - if (t == 7) - break; // don't increment i to a void redoing mask - qrframe = strinbuf.slice(0); // reset for next pass - } - if (t != k) // redo best mask - none good enough, last wasn't t - applymask(t); - - // add in final mask/ecclevel bytes - y = fmtword[t + ((ecclevel - 1) << 3)]; - // low byte - for (k = 0; k < 8; k++ , y >>= 1) - if (y & 1) { - qrframe[(width - 1 - k) + width * 8] = 1; - if (k < 6) - qrframe[8 + width * k] = 1; - else - qrframe[8 + width * (k + 1)] = 1; - } - // high byte - for (k = 0; k < 7; k++ , y >>= 1) - if (y & 1) { - qrframe[8 + width * (width - 7 + k)] = 1; - if (k) - qrframe[(6 - k) + width * 8] = 1; - else - qrframe[7 + width * 8] = 1; - } - - // return image - return qrframe; - } - - var _canvas = null, - _size = null; - - var api = { - - get ecclevel() { - return ecclevel; - }, - - set ecclevel(val) { - ecclevel = val; - }, - - get size() { - return _size; - }, - - set size(val) { - _size = val - }, - - get canvas() { - return _canvas; - }, - - set canvas(el) { - _canvas = el; - }, - - getFrame: function (string) { - return genframe(string); - }, - - draw: function (string, canvas, size, ecc) { - - ecclevel = ecc || ecclevel; - canvas = canvas || _canvas; - - if (!canvas) { - console.warn('No canvas provided to draw QR code in!') - return; - } - - size = size || _size || Math.min(canvas.width, canvas.height); - - var frame = genframe(string), - ctx = canvas.ctx, - px = Math.round(size / (width + 8)); - - var roundedSize = px * (width + 8), - offset = Math.floor((size - roundedSize) / 2); - - size = roundedSize; - - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.setFillStyle('#000000'); - - for (var i = 0; i < width; i++) { - for (var j = 0; j < width; j++) { - if (frame[j * width + i]) { - ctx.fillRect(px * (4 + i) + offset, px * (4 + j) + offset, px, px); - } - } - } - ctx.draw(); - } - } - - module.exports = { - api: api - } - -})() \ No newline at end of file diff --git a/pages/user/coupons/coupons.js b/pages/user/coupons/coupons.js index 7937315..ebb19bc 100644 --- a/pages/user/coupons/coupons.js +++ b/pages/user/coupons/coupons.js @@ -1,424 +1,602 @@ -var e = function(e) { - return e && e.__esModule ? e : { - default: e - }; - }(require("../../../utils/LoadMore.js")), - t = getApp(), +var t = getApp(), a = t.request, o = t.globalData.setting, os = o, - i = require("../../../utils/util.js"), + i = require("../../../utils/util.js"), ut = i, - b = require("../../../app.js"), - app = b, - s = require("../../../utils/common.js"), - - n = new e.default(); + s = require("../../../utils/common.js"); var regeneratorRuntime = require('../../../utils/runtime.js'); -var auth = require("../../../utils/auth.js"),rq = require("../../../utils/request.js"); const { barcode, qrcode -} = require('../../../utils/index.js') -Page({ +} = require('../../../utils/index.js'); +let _this = null; - /** - * 页面的初始数据 - */ +Page({ data: { - sheng:1, //是否有更多 - overdue_sheng:1, //是否有更多 - - details: [], //可使用的数据 - sum: 0, //全部票 - val: 0, //可使用票 - number: 0, //已过期票 - //判断已过期的 - ygq: false, - ksy: true, - pageSize: 10, - page: 1, - current_page: 0, - is_no_more: 0, - /** - * 页面配置 - */ - winWidth: 0, - winHeight: 0, - currentTab: 0, - // 点击选中二维码 - show: true, - udata: null, - iurl:os.imghost, - is_show_dhwz:0, - - b_can_arr:null, //包邮券的未使用内容 - b_out_arr:null, //包邮券的已过期的内容 - b_isuse_arr:null,//包邮券的已使用的内容 - - isloading:0, //正在加载中的代码 - isset:0, - }, - // 点击选中二维码 - click: function(e) { - var val = e.currentTarget.dataset.cashrepno; - getApp().globalData.val =val; - wx.navigateTo({ - url: 'qr_code/qr_code', - }) + val:false, + datet: "", + dates: "", + parameter: false, + details:[],//数据 + isBind:true,//控制清空时间日期的按钮 + isBinds: true, + select: false,//下拉框 + grade_name: '未使用', + // grades: [ //old + // '所有', + // '已使用', + // '已过期', + // '未使用', + // ], + currentIndex: 0, //tab项当前指示器 + grades: [ + '未使用', + '已使用', + '已过期', + ], + display:false, + is_no_more: 0, + current_page:1, + by_list:[], + isloading:0, + pageNum: 1, }, - // 点击返回主页 - clicks: function() { + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + _this = this; this.setData({ - show: true - }) + details: [] + }); + this.wjquery(); }, /** - * 点击tab切换,已过期,控制页面显示隐藏和样式的显示隐藏 - */ - swichNav: function(e) { - this.setData({ current_page:0}) - this.data.details=[]; - - var that = this; - var current = e.currentTarget.dataset.current - - //控制显示隐藏 - if (e.currentTarget.dataset.current == 0) { - - var ygq = true; - var ksy = false; - that.setData({ - details:[], - ygq: ygq, - ksy: ksy, - currentTab: e.currentTarget.dataset.current - }); - this.myyhj(); - } else { - - var ygq = false; - var ksy = true; - var currentTab=this.data.currentTab; - - that.setData({ - details: [], - ygq: ygq, - ksy: ksy, - currentTab: e.currentTarget.dataset.current - }); - this.overdue(); - - } //控制样式 - if (this.data.currentTab === e.currentTarget.dataset.current) { - - return false; - } else { - var details=this.data.details; - - that.setData({ - currentTab: e.currentTarget.dataset.current, - details:[], - }) - } - + * 生命周期函数--监听页面显示 + */ + onShow: function (options) { + var th = this; + + wx.setNavigationBarTitle({ + title: "微券查询", + }); + + /** + * 控制显示微券兑换 + * by sty + */ + getApp().getConfig2(function (ee) { + var json_d = JSON.parse(ee.switch_list); + let is_show_dhwz = json_d.dhwz_switch; + let grades = th.data.grades; + // console.log('is_show_dhwz----------------------------',is_show_dhwz); + if(is_show_dhwz) { + grades.push('微券兑换'); + th.setData({ grades }); + }; + th.setData({ is_show_dhwz }); + },1); }, - // 微卷兑换 - exchange: function() { + + + + + // 点击选中二维码 + click: function (e) { + var val = e.currentTarget.dataset.cashrepno; + getApp().globalData.val = val; wx.navigateTo({ - url: 'exchange/exchange' + url: '../qr_code/qr_code', }) }, - // 维劵查询 - query: function() { - wx.navigateTo({ - url: 'query/index' - }) + // 点击返回主页 + // clicks: function () { + // this.setData({ + // hide:true, display:false + // }) + // }, + //监听输入框显示清空按钮 + watchPassWord: function (event) { + var val = event.detail.value; + if (val != "" && val != null) { + var isBind = false; + this.setData({ isBind: isBind }); + + } }, /** - * 生命周期函数--监听页面加载 + * 点击下拉框 */ - onLoad: function(options) { - + bindShowMsg() { + this.setData({ + select: !this.data.select + }) }, + /** + * 已选下拉框 + */ + // mySelect(e) { + // var name = e.currentTarget.dataset.name; + // this.setData({ + // grade_name: name, + // select: false + // }) + // }, + + /** + * 点击tab + * by sty + */ + clickTab(e) { + let index = e.target.dataset.index; + let name = e.target.dataset.name; + + this.setData({ + is_get: 0, + pageNum: 1, + grade_name: name, + currentIndex: index, + is_no_more: 0, + current_page: 1, + noMore: false, + details: [], + by_list: [], + }); + + + if(index == 3) {//微券兑换 + this.exchange(); + } else {//其他 + this.wjquery(); + }; + }, + + /** + * 点击"立即使用" + * by sty + */ + clickUse(e) { + let useIndex = e.currentTarget.dataset.index; + let val = e.currentTarget.dataset.cashrepno; + + this.setData({ + showQr: true, + useIndex, + }); + this.qrcode(val); + }, + + /** + * 关闭二维码 + * by sty + */ + closeQr() { + this.setData({ + showQr: false, + }); + }, + + /** + * 生成二维码 + * by sty + */ + qrcode:function(val){ + // console.log(val); + // barcode('barcode', val, 600,160); + qrcode('qrcode', val, 300, 300); + }, + + /** + * 请求微券列表 + * by sty + */ + async exchange() { + var result; + var user_id = getApp().globalData.user_id; + var store_id = os.stoid; + + + this.getData(true, '/api/weshop/users/listExchangeCoupons', { + user_id: user_id, store_id: store_id, + }).then(()=>{ + _this.setData({ + result: _this.data.list.pageData, + }); + }); + + // await getApp().request.promiseGet("/api/weshop/users/listExchangeCoupons", { + // data: { + // user_id: user_id, store_id: store_id, + // } + // }).then(res => { + // // var msg = res.data; + // // result = msg.data.pageData; + // }) + // e.setData({ + // result: result + // }) + }, + + /** + * 微券兑换对话框 + * by sty + */ + async clickExchange(e) { + var th=this; + var index = e.currentTarget.dataset.index; + var item = this.data.result[index]; + this.data.monye = item.ToSum; + this.data.integr = item.Integral; + this.data.number = item.Number; + + let content = `确定使用${th.data.integr}积分兑换代金券面值${th.data.monye}元吗?`; + wx.showModal({ + title: '提示', + content: content, + success (res) { + if (res.confirm) { + console.log('用户点击确定'); + th.sure_pay(); + } else if (res.cancel) { + console.log('用户点击取消') + } + } + }); + - - onShow: function() { - var th=this; - wx.setNavigationBarTitle({ title: "我的优惠券", }) - - //--先判断会员状态-- - var user_info = getApp().globalData.userInfo; - if (user_info == null || user_info.mobile == undefined || user_info.mobile == "" || user_info.mobile == null) { - wx.navigateTo({ url: '/pages/togoin/togoin', }) - return false; - } - this.init(th.myyhj,th.s_guoqi); - var th = this; - //-- 要实时 -- - getApp().getConfig2(function (ee) { - var json_d = JSON.parse(ee.switch_list); - th.setData({ is_show_dhwz: json_d.dhwz_switch }); - },1) - - }, - - //----------券的界面初始化----------- - init:function(func,s_guoqi){ + // var my_con = this.selectComponent("#my_con"); //组件的id + // var title="是否使用"+th.data.integr+"积分兑换代金券面值"+th.data.monye+"元"; + // my_con.open(title, "确定", "取消", th.sure_pay, null) + }, + + + /** + * 微券兑换 + * by sty + */ + sure_pay:function(){ + var monye=this.data.monye; + var integr=this.data.integr; + var number=this.data.number; + var user_id = getApp().globalData.user_id; + console.log(integr,"是什么微卷",typeof integr,monye); var store_id = os.stoid; - var th=this; - rq.get("/api/weshop/users/getinfo/" + os.stoid + "/" + user_id, { - isShowLoading: 0, - success: function (su) { - - var data = su.data.data; - data.cashcount = parseInt(data.CashCount); - getApp().globalData.Integral = data.Integral; - - getApp().request.get("/api/weshop/userfeemail/pageAndArea",{ - data:{user_id: user_id, store_id: os.stoid, pageSize:200}, - success:function(res){ - if(res.data.code==0 && res.data.data && res.data.data.total>0 ){ - var b_arr=res.data.data.pageData; - var b_can_arr=[]; //未使用 - var b_out_arr=[]; //已过期 - var b_isuse_arr=[]; //已过期 - for(var i in b_arr){ - b_arr[i].isby=1; - if(b_arr[i].isuse==0){ - if(b_arr[i].use_end_time<=ut.gettimestamp()){ - b_out_arr.push(b_arr[i]); - }else{ - b_can_arr.push(b_arr[i]); - } - - }else{ - b_isuse_arr.push(b_arr[i]); - } - } - data.cashcount= data.cashcount+b_can_arr.length; //加上包邮券的数量 - th.data.b_can_arr=b_can_arr; //可使用 - th.data.b_out_arr=b_out_arr; //过期 - th.data.b_isuse_arr=b_isuse_arr; //已使用 - th.setData({ udata: data}); - func();s_guoqi(); - - }else{ - th.setData({ udata: data}); - func();s_guoqi(); - } - } - }) - - } - }) - }, - - s_guoqi:function(){ + getApp().request.post("/api/weshop/users/saveInterToCash", { + data: { + user_id: user_id, + store_id: store_id, + money:monye, + integ:integr, + number:number, + }, + success: function (su) { + if (su.data.data!=null) { + // getApp().showWarning("兑换成功"); + wx.showToast({ + title: '兑换成功', + icon: 'success', + }); + }else{ + // getApp().showWarning("积分不足"); + wx.showToast({ + title: '积分不足', + icon: 'error', + }); + } + } - var th = this, number=0; - var user_id = getApp().globalData.user_id; - var store_id = os.stoid; - var get_data = { - user_id: user_id, - store_id: store_id, - IsUse: 2, - pageSize: 1, - page: 1 - }; - - getApp().request.get("/api/weshop/users/listQuan", { - data:get_data, - success:function(res){ - if(res.data.code==0 && res.data){ - var a = res.data,val = a.data.total; - var details = a.data.pageData; - if (details.length == 0){ - if(th.data.b_out_arr) th.setData({ number: th.data.b_out_arr.length}); - return false; - } - var all_length=val; - if(th.data.b_out_arr) all_length+=th.data.b_out_arr.length; - th.setData({ number: all_length}); - } - } }) - }, - - //获取劵的数量 - myyhj:function() { - if(this.data.isloading) return; - var len = this.data.details.length; - this.data.current_page++; - var e = this, sum, val, number; - var user_id = getApp().globalData.user_id; - var store_id = os.stoid; - var th=this; var init_num=0; - - var get_data = { - user_id: user_id, - store_id: store_id, - IsUse: 0, - pageSize: 10, - page: e.data.current_page - }; - var big_arr = this.data.details; - //可用券加入包邮券 - if(big_arr.length==0 && this.data.b_can_arr){ - big_arr=this.data.b_can_arr; - } - if(this.data.b_can_arr) init_num=this.data.b_can_arr.length; - - wx.showLoading(); th.data.isloading=1; - getApp().request.get("/api/weshop/users/listQuan", { - data: get_data, - success:function(res){ - th.data.isloading=0; - var a = res.data; - val = a.data.total; - var details = a.data.pageData; - th.setData({isset:1}); - - //没有找到优惠券的时候 - if (details.length == 0 && th.data.current_page==1) { - th.setData({sheng:0}); - getApp().showWarning("未找更多数据"); - if(big_arr.length>0) { - th.setData({ details: big_arr, }); - th.setData({ val: init_num}); - setTimeout(function(){ - details=big_arr; - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460); - } - },1000) - } - return false; - } - - th.setData({ val: val+init_num }); - //数组合并 - big_arr=big_arr.concat(details); - //设置数组 - th.setData({ details: big_arr, }); - //延迟显示二维码的内容 - setTimeout(function () { - if(th.data.current_page==1) details=big_arr; - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460); - } - wx.hideLoading(); - }, 1200) - } - }) + }, - + //明细查询 + Gettime:function(e){ + var page = 0; + //开始获取时间 + var th = this; + var stime = th.data.datet; + var etime = th.data.dates; + var tpye = th.data.grade_name; + + //开始获取时间结束 + //删除字符中的—— + var datatk = stime.replace(/[-]/g, ""); + var dataj = etime.replace(/[-]/g, ""); + //转换类型 + var datak = parseInt(datatk); + var dataj = parseInt(dataj); + + //判断初始时间小于结束时间 + if (datak > dataj) { + getApp().showWarning("结束时间错误"); + } else { + this.setData({ details: [] }); + this.data.current_page=1; + this.data.is_no_more=0; + this.data.by_list=[]; + this.data.details=[]; + this.wjquery(); + } + }, - - overdue:function(){ - if(this.data.isloading) return; - + //微卷查询流水明细 + async wjquery() { + if(this.data.isloading) return; + if(this.data.is_no_more) return; + this.data.isloading=1; + var th=this; + var len = this.data.details.length; - this.data.current_page++; + var e = this,sum, val, number; var user_id = getApp().globalData.user_id; - var store_id = os.stoid,init_num=0,th=this; - + var store_id = os.stoid; + + var stime = this.data.datet; + var etime = this.data.dates; + + var tpye = this.data.grade_name; + console.log("是什么类型",tpye); + var IsUse = 0; + var e = this; var get_data = { user_id: user_id, store_id: store_id, - IsUse: 2, - pageSize: 10, - page: e.data.current_page + // pageSize: 10, + page: e.data.current_page, }; - var big_arr= this.data.details; - //可用券加入包邮券 - if(big_arr.length==0 && this.data.b_out_arr){ - big_arr=this.data.b_out_arr; - } - if(this.data.b_out_arr) - init_num=this.data.b_out_arr.length; + var dd={ + user_id: user_id, + store_id: store_id, + // pageSize: 10, + }; + dd.isuse=0; + // 判断下拉框,添加类型 + if (tpye == "已使用"){ + get_data.IsUse = 1; + dd.isuse=1; + } else if (tpye == "已过期"){ + get_data.IsUse = 2; + } else if (tpye == "未使用"){ + get_data.IsUse = 0; + }; + if (etime != "" && etime != null) { + get_data.EndDate = etime; + + //时间要转成时间戳 + var new_t=new Date(etime)/1000; + dd.etime=new_t; + } + + if (stime != "" && stime != null) { + get_data.BeginDate= stime; + //时间要转成时间戳 + var new_t=new Date(stime)/1000; + dd.stime=new_t; + } + + var by_list=[]; + if(th.data.current_page==1){ + //先拿包邮券 + await getApp().request.promiseGet("/api/weshop/userfeemail/pageAndArea?pageSize=100", { + data: dd, + }).then(res => { + + if(res.data.code == 0) { + th.setData({ + byTotal: res.data.data.total, + }); + }; + + if(res.data.code==0 && res.data.data && res.data.data.total>0){ + + by_list=res.data.data.pageData; + for(var i in by_list){ + by_list[i].isby=1; + //过滤是时间的范围 + if(get_data.IsUse == 2 && by_list[i].use_end_time<=ut.gettimestamp()){ + th.data.by_list.push(by_list[i]); + }else if(get_data.IsUse == 0){ + th.data.by_list.push(by_list[i]); + }else if(get_data.IsUse==1){ + th.data.by_list.push(by_list[i]); + }else if(get_data.IsUse==undefined){ + th.data.by_list.push(by_list[i]); + } + } + } + }) + } + + var big_arr = this.data.details; ///api/weshop / users / listQuan + if(th.data.current_page==1 && th.data.by_list.length>0) { + big_arr=th.data.by_list; + }; + - wx.showLoading();th.data.isloading=1; - getApp().request.get("/api/weshop/users/listQuan" - , { + await getApp().request.promiseGet("/api/weshop/users/listQuan", { data: get_data, - success:function(res){ - th.data.isloading=0; - var a = res.data; - number = a.data.total; - var details = a.data.pageData; - - if (details.length == 0) { - this.setData({overdue_sheng:0}); - getApp().showWarning("未找更多数据"); - if( big_arr.length>0 && th.data.current_page==1) { - th.setData({ details: big_arr, }); - th.setData({ number: init_num}); - setTimeout(function(){ - details=big_arr; - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460); - } - },1000) - - } - return false; - } - - big_arr=big_arr.concat(details); - - this.setData({ - details: big_arr, number:number+init_num, - }); - + isShowLoading: 1 + + }).then(res => { + + th.data.isloading=0; + var a = res.data; + var len = e.data.details.length; + var details = a.data.pageData; - setTimeout(function () { - if(th.data.current_page==1) details=big_arr; - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460); - - } - wx.hideLoading(); - }, 800) - } - }) + th.setData({ + pageSize: a.data.pageSize, + wjTotal: a.data.total, + }); + + if (details.length == 0) { + this.setData({ + is_no_more: 1, + }); + // getApp().showWarning("未找更多数据"); + if(th.data.by_list && th.data.current_page==1){ + th.setData({ val: val,details:th.data.by_list}); + details=th.data.by_list; + setTimeout(function () { + for (var i = 0; i < details.length; i++) { + var no = i + len; + qrcode('qrcode' + no, details[i].no,460, 460); + } + }, 100) + } + return false; + } + + th.data.current_page++; + val = a.data.total+th.data.by_list.length; + + big_arr=big_arr.concat(details); + this.setData({ + details: big_arr,val: val, + is_get: 1, + current_page: this.data.current_page, + }); + + setTimeout(function () { + if(by_list) details=big_arr; + for (var i = 0; i < details.length; i++) { + var no = i + len; + qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no,460, 460); + } + }, 100) + }) + + + }, - + + + // 使用说明详情展开 + clickDetails: function(e) { + let details = this.data.details; + let index = e.currentTarget.dataset.index; + details[index].isShowDetails = !details[index].isShowDetails; + this.setData({ + details, + }); + }, + + + //---加载更多是靠这个函数---- - onReachBottom: function() { - if(this.data.isloading) return false; //正在加载中,则不处理 - var currentTab=this.data.currentTab; - if (currentTab==2){ - if(this.data.overdue_sheng==0) return false; - this.overdue(); - } - if (currentTab==0){ - if(this.data.sheng==0) return false; - this.myyhj(); - } - }, - /** - * 生命周期函数--监听页面隐藏 - */ - onHide: function() { - + onReachBottom: function () { + if(this.data.currentIndex != 3) { + this.wjquery(); + } else { + this.scrollToLower('/api/weshop/users/listExchangeCoupons', { + user_id: getApp().globalData.user_id, + store_id: os.stoid, + }, function() { + // console.log('!!!!!', _this.data.list.pageData); + _this.setData({ + result: _this.data.list.pageData, + }); + }); + }; }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function() { - - } + + + //起始时间 + // bindDateChenge: function(e) { + // console.log("是什么", e.detail.value); + // var isBind = false; + // this.setData({ + // datet: e.detail.value, isBind: isBind + // }); + // }, + // 结束时间 + // bindDateChenges: function(e) { + // console.log("是什么", e.detail.value); + // var isBinds = false; + // this.setData({ + // dates: e.detail.value, isBinds: isBinds + // }); + // }, + //catchtap阻止冒泡,点击清除开始时间的按钮 + // eliminate:function(){ + // console.log("试试"); + // var isBind= true; + // var data=""; + // this.setData({ datet: data, isBind: isBind}) + // }, + //catchtap阻止冒泡,点击清除结束时间的按钮 + // eliminates: function () { + // console.log("试试"); + // var isBinds = true; + // var dates = ""; + // this.setData({ dates: dates, isBinds: isBinds }) + // }, + + + + + + + // 上拉加载请求数据 + getData: function(isInit, url, data) { + return getApp().request.promiseGet(url, {data: data, isShowLoading: true,}) + .then((res) => { + _this.data.isLoading = false; + if(res.data.code == 0) { + if(isInit) {// 第一次加载 + _this.setData({ + list: res.data.data + }); + } else { + _this.setData({ + 'list.pageData': _this.data.list.pageData.concat(res.data.data.pageData) + }); + }; + + if((res.data.data.pageData.length == 0) || (res.data.data.pageSize * res.data.data.page >= res.data.data.total)) { + _this.setData({ + noMore: true + }); + }; + }; + }); + }, + + + // 上拉加载 + scrollToLower(url, requestData, callback) { + // 页面数据 + // let pageData = this.data.list.pageData; + // 数据总量 + let total = this.data.list.total; + // 单页最大数据量 + let pageSize = this.data.list.pageSize; + // 如果数据总量不为0且小于或等于单页最大数据量,说明数据已全部加载,显示‘没有更多了’ + if((total != 0)&&(total <= pageSize)) { + this.setData({ + noMore: true + }); + }; + + if(!this.data.isloading && !this.data.noMore) { + this.setData({ + isLoading: true, + pageNum: this.data.pageNum + 1 + }); + requestData.page = this.data.pageNum; + this.getData(false, url, requestData).then(()=>{ + if(callback) { + callback(); + }; + }); + }; + }, + }) \ No newline at end of file diff --git a/pages/user/coupons/coupons.json b/pages/user/coupons/coupons.json index 8835af0..8851a02 100644 --- a/pages/user/coupons/coupons.json +++ b/pages/user/coupons/coupons.json @@ -1,3 +1,6 @@ { - "usingComponents": {} + "enablePullDownRefresh": false, + "usingComponents": { + "nodata": "/components/nodata/nodata" + } } \ No newline at end of file diff --git a/pages/user/coupons/coupons.wxml b/pages/user/coupons/coupons.wxml index d11839d..8692528 100644 --- a/pages/user/coupons/coupons.wxml +++ b/pages/user/coupons/coupons.wxml @@ -1,79 +1,236 @@ - - 账户微券 - - {{udata.cashcount}}张 - - - - 微券查询 - 微券兑换 + + + + + + + + + + + + + + {{item}} - - - - 可使用( - {{val}} ) - 已过期 - ({{number}} + + + + + + + + 包邮券 + + + + 包邮券 + 微券来源: 微信商城 + + {{filter.showBtnText(currentIndex)}} + + + 有效期:{{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}} 至 {{time.format_time(detail.use_end_time)}} + 有效期:不限 + + + + + + 使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?',不包邮地区:'+detail.title:''}} + + + + + + + {{filter.getNum(detail.Sum)}} + + + + {{filter.getNum(detail.Sum)}}元微券 + 微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}} + + + {{filter.showBtnText(currentIndex)}} + + + + 有效期:{{detail.BeginDate==null ? " " : time.replace_time2(detail.BeginDate)}} 至 {{time.replace_time2(detail.ValidDate)}} + 有效期:不限 + + + + + + {{filter.getNum(detail.Sum)}}元优惠券,{{(detail.UseObjectID==null || detail.UseObjectID=='')?"全场通用":"仅限"+(detail.UseObjectName)+"使用"}},满 {{detail.BuySum==null || detail.BuySum==''?filter.getNum(0):filter.getNum(detail.BuySum)}}元使用 {{detail.region_list_name==null || detail.region_list_name==''?"":",不包邮地区:"+region_list_name}};{{detail.Remark}} + 使用说明: {{filter.getNum(detail.Sum)}}元优惠券,{{(detail.UseObjectID==null || detail.UseObjectID=='')?"全场通用":"仅限"+(detail.UseObjectName)+"使用"}},满 {{detail.BuySum==null || detail.BuySum==''?filter.getNum(0):filter.getNum(detail.BuySum)}}元使用 {{detail.region_list_name==null || detail.region_list_name==''?"":",不包邮地区:"+region_list_name}} + + + + + + + + + + + {{filter.getNum(result.ToSum)}} + + + + {{result.Integral}}积分兑换{{filter.getNum(result.ToSum)}}元微券 + + + 立即兑换 + + + + + + + + + + + + + + —— 已经到底了 —— + + —— 已经到底了 —— - - - - 没有微券? - 快去兑换吧 - 立即兑换 - - - 暂无数据 - + + + + - - - - - {{detail.no}} - - 包邮券 + + + + + + + + + - 有效期: {{(detail.BeginDate==null || detail.BeginDate=='')?"":time.replace_time2(detail.BeginDate)}}至{{time.replace_time2(detail.ValidDate)}} + - - \ No newline at end of file diff --git a/pages/user/coupons/coupons.wxss b/pages/user/coupons/coupons.wxss index 13e65ce..2c39bbb 100644 --- a/pages/user/coupons/coupons.wxss +++ b/pages/user/coupons/coupons.wxss @@ -1,94 +1,216 @@ -/* pages/yhq/yhq.wxss */ - -.money{ - background-image: url(https://mshopimg.yolipai.net/miniapp/images/user/redbg.jpg); - color: #FFFFFF; - padding: 40rpx; - text-align: left; - height:70rpx; +/* 大边框 */ +.big-rim{ + margin-top: 15rpx; + width: 100%; + height: 310rpx; +border-bottom: 8px solid #EEEEEE; +} +.min-rim{ +display: flex; +width: 100%; +height: auto; +margin-left: 30rpx; +} +/* 开始时间 */ +.kssj{ + +display: inline-block; +height: 50rpx; +background-color: #EEEEEE; +border: 1px solid #DADADA; +width:200rpx; +border-radius: 3px; +line-height:40rpx; +} +/* 开始时间的文字 */ +.wz{ + display: inline-block; +font-size: 25rpx; +color: #333; +} +/* 日期控件 */ +.pi{ + width:200rpx; + height:auto; + margin-left:20rpx; + } -.mt1{ -font-size:28rpx; -margin-top:-15rpx; -} -.mt10{ - margin-top: 15rpx !important; - width: 80%; - font-size:28rpx; - position: relative; - font-family: 'SimHei',Arial; +/* 查询内容 */ +.cxnr{ + margin-left:30rpx; + font-size:28rpx; + font-family: 'SimHei',Arial; } +.rq-rim{ +position:relative; +left:0; +top:0; +} +/* 至 */ +.zi{ + + margin-top:14rpx; + font-size:28rpx; + font-family: 'SimHei',Arial; + margin-left:20rpx; - -/* pages/team_ping/team_ping.wxss */ -.top{ - display: flex; - flex-direction: row; +} +/* 结束时间 */ + +.jssj{ + padding-left: 10rpx; + margin-left: 30rpx; +padding-bottom: 10rpx; +height: 35rpx; +font-size: 25rpx; +color: #333; +background-color: #EEEEEE; +border: 1px solid #DADADA; +width:85%; +font-family: 'SimHei',Arial; +border-radius: 3px; +} +/* 查询内容的备考的边框 */ +.xknr-rim{ + display: flex; width: 100%; - min-height: 50rpx; - color: #000000; - line-height: 50rpx; - text-align: center; + height: 55rpx; + line-height:105rpx; + margin-top:10rpx; + +} +/* 明细查询 */ +.botton{ + margin-left: 30rpx; + margin-top: 63rpx; + background-color: #C4182E; + width: 95%; + border-radius:10rpx; + text-align: center; + height: 70rpx; + line-height: 70rpx; + color: #FFF; + font-size: 25rpx; + border: none; + font-family: '微软雅黑'; + } + /* 底部边框线 + .bottom{ + width: 100%; + border-bottom: 20rpx solid #eeeeee; + } */ + /* 清空按钮的 边框*/ +.qc-rim{ + position:absolute; + top:10rpx; + left:175rpx; +} + +/*开始时间清空输入框的按钮*/ +.empty{ + width: 25rpx; + height: 25rpx; + border-radius:50%; + background: #767676; + color: #fff; font-size: 25rpx; - border-bottom: 20rpx solid #eeeeee; - + text-align: center; + line-height:18rpx; } - - - -.tsan{ - background-color: blue; - flex:1; - min-height: 90rpx; - color: #000000; - line-height: 90rpx; +/* 结束时间清空输入框的按钮的边框 */ +.end-rim{ +position: absolute; + top: 11rpx; + left:173rpx; + width: 25rpx; + height: 25rpx; } - -.tsan{ - background-color: brown; - flex:1; - min-height: 90rpx; - color: #000000; - line-height: 90rpx; +/*结束时间清空输入框的按钮*/ +.end{ + + width: 25rpx; + height: 25rpx; + border-radius:50%; + background: #767676; + color: #fff; + font-size: 25rpx; + text-align: center; + line-height:21rpx; + } -.tsi{ - background-color: yellowgreen; - flex:1; - min-height: 90rpx; - color: #000000; - line-height: 90rpx; +/* 顶部 */ +.top{ + width: 200rpx; + height: 50rpx; + padding: 0 10rpx; + line-height: 50rpx; + font-size: 34rpx; + margin-top: 25rpx; + + } +.images{ + width:35rpx; +height:30rpx; +margin-top:10rpx; +margin-left:-14rpx; +} +.rim-images{ + width: 45rpx; + height: 46rpx; + line-height: 37rpx; + /* border-style: inset;padding:4rpx;text-align: center; */ + background: #f1f1f1; + border-color:#000000; + border-width: 1rpx; + transform:translateX(28%); + margin-top:-3rpx; +border-radius:5rpx; -.swiper-tab{ - width: 100%; - border-bottom: 2rpx solid #777777; - text-align: center; - line-height: 80rpx; - } -.swiper-tab-list{ - font-size: 25rpx; - display: inline-block; - width: 50%; - color: #777777; - border-left: 2rpx solid #eeeeee; } -.on{ color: red; - border-bottom: 5rpx solid red; - width: 50%; - } +/* 下拉框 */ +.top-selected{ + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + border: 1px solid #ccc; + padding: 0 10rpx; + font-size: 30rpx; + background:#eeeeee; + height:50rpx; + border-radius:6rpx; +} +.texts{ + margin:0 auto; + font-size: 25rpx; -.swiper-box{ display: block; height: 100%; width: 100%; overflow: hidden; } -.swiper-box view{ - text-align: center; } - +/* 下拉内容 */ +.select-box { + background-color: #eeeeee; + width:225rpx; + position: relative; + z-index:1; + overflow: hidden; + text-align: left; + animation: myfirst 0.5s; + font-size: 25rpx; +} +.select_one { + padding-left: 20rpx; + width: 100%; + height: 60rpx; + line-height: 60rpx; +} +/* 优惠券样式 */ .body{ text-align: center; padding: 20rpx; @@ -112,152 +234,407 @@ margin-top:-15rpx; margin: 20rpx 0; text-align: center; } - -.center{ - border: 2rpx solid #e03835; - background-color: #C4182E; - color: #FFFFFF; - display: flex; - height:70rpx; -} - -.cen-left{ - width: 49%; - text-align: center; - margin: 17rpx 0; - border-right: 2px solid #e03835; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - height:35rpx; - font-size:25rpx; - -} - -.cen-right{ - width: 49%; - text-align: center; - margin: 17rpx 0; - height:30rpx; - font-size:25rpx; -} - - -/* 没有维券【】 */ -.noCoupons{ - text-align: center; - font-size: 30rpx; - color: #666666; - margin: 30rpx; -} - -.noCoupons image{ - width:300rpx; - height:200rpx; -} - -.no_wz1{ - margin-top: 25rpx; - -} - -.no_wz2{ - margin-top: 30rpx; -} - -.no_btn{ - background-color: #C4182E; - color: #fff; - font-size: 35rpx; - height: 90rpx; - line-height: 90rpx; - margin: 40rpx auto; - width: 350rpx; - -} - +/* 二维码列表查询 */ /* 列表数据*/ .data{ - width: 100%; - text-align:center; -height:440rpx; + width: 80%; + height:auto; + margin-left:80rpx; + +} +.rim{ + position: relative; + top:0rpx; + left: 0rpx; } /* 二维码边框 */ .code_rim{ - width: 100%; + width: 100%; height: auto; text-align: center; font-size: 25rpx; padding-top: -30rpx; margin-top:-20rpx; +padding-left:45rpx; } /* 二维码 */ .code{ - height:415rpx; - width:61%; -position:relative; -left:20%; + height: 520rpx; + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: center; + margin-left:40rpx; - } +.car-rim{ +width:98%; +height:177rpx; +text-align:center; +border-bottom:2rpx solid #eee; +margin-left:22rpx; + +} +/* 二维码值 */ +.code_val{ + margin-top:-104rpx; +margin-left:-59rpx; +color:#999999; -/* 单据时间 */ -.time{ - margin-top: 10rpx; - font-size: 25rpx; - color: #999999; - width: 100%; } /* 金额 */ .moneys{ - margin-top:20rpx; - height: 45rpx; + margin-top:20rpx; + height: 47rpx; width: 100%; color:#6fd137; text-align: center; - font-size: 40rpx; + font-size: 38rpx; font-family: 'SimHei',Arial; margin-bottom:20rpx; - + margin-left:11rpx; - } /* 文字 */ .text{ + width: 100%; + font-size: 25rpx; + text-align: center; + + height: 41rpx; + color: #999999; +} +/* 二维码和条形码的边框 */ +.barqrcode{ width: 100%; + height: auto; + margin-top:50rpx; + +} +/* 日期 */ +.rq{ + height: 25rpx; font-size: 28rpx; - text-align: center; - height: 43rpx; + margin-top:12rpx; + font-family:'SimHei',Arial; } -/* 二维码值 */ -.code_val{ -font-size:27rpx; +/* 点击条形 */ +.barcode { + height: 320rpx; + flex-direction: column; + justify-content: center; + align-items: center; + margin-left: 30rpx; } -.car-rim{ -width:85%; -min-height:135rpx; -text-align:center; -border-bottom:2rpx solid #eee; -margin-left:54rpx; -height: auto; -padding-bottom:10rpx; +/* 二维码边框*/ +.qrcode_rim { + width: 100%; + height: 420rpx; + display: flex; + flex-direction: column; + justify-content: flex-end; + align-items: center; + margin-left: 80rpx; + margin-top:-210rpx; } +.qrcode{ + /* margin-left: 100rpx; */ +} /* 使用说明 */ .textss{ width: 100%; - font-size: 28rpx; + font-size: 25rpx; text-align: center; - padding-bottom:15rpx; + + min-height: 47rpx; + height:auto; + color: #999999; } -.coupon_from{ -width:100%; -font-size:28rpx; -text-align:center; -height:40rpx; -} \ No newline at end of file + + + + +page { + background-color: #f0f0f0; + scroll-behavior: smooth; +} + +.c-fe0000 { + color: #fe0000; +} + +.tab-head { + display: flex; + position: sticky; + top: 0; + background-color: white; + font-size: 28rpx; + z-index: 2; +} + +.tab-head-item { + flex: 1; + text-align: center; + padding: 30rpx 0; + position: relative; +} + +.tab-head-item.active { + color: #fe0000; +} + +.tab-head-item.active::after { + content: ''; + width: 60%; + height: 2rpx; + background-color: #fe0000; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); +} + +.tab-body { + padding: 0 20rpx; + overflow: hidden; +} + + .tab-list-item { + border-radius: 10rpx; + overflow: hidden; + margin-top: 30rpx; + } + + + +.coupon { + position: relative; + + background: radial-gradient(transparent 0, #FFD3D6 0) top left / 200rpx no-repeat, + radial-gradient(transparent 6px, #fff 0), + radial-gradient(transparent 6px, #fff 0); +} + + +.coupon::after { + content: ''; + position: absolute; + height: 100%; + width:4px; + top: 0; + left: 0; + background-image: linear-gradient(to bottom, #FFD3D6 4px, transparent 4px, transparent), + radial-gradient(4px circle at 0px 8px, #f0f0f0 4px, #FFD3D6 4px); + background-size: 4px 12px; + background-repeat: repeat-y; + } + + + .coupon2 { + /* width: 300px; */ + padding: 40rpx 0; + position: relative; + background: radial-gradient(circle at right top, transparent 16rpx, #FFD3D6 0) top left / 200rpx 51% no-repeat, + radial-gradient(circle at right bottom, transparent 16rpx, #FFD3D6 0) bottom left /200rpx 51% no-repeat, + radial-gradient(circle at left top, transparent 16rpx, white 0) top right /calc(100% - 200rpx) 51% no-repeat, + radial-gradient(circle at left bottom, transparent 16rpx, white 0) bottom right /calc(100% - 200rpx) 51% no-repeat; + /* filter: drop-shadow(2px 2px 2px rgba(0,0,0,.2)); */ + } + + .coupon2::after { + content: ''; + height: 70%; + border: 2rpx dashed #fff; + position: absolute; + left: 198rpx; + top: 0; + bottom: 0; + margin: auto; + } + +/* .coupon2 .c-l, + .coupon2 .c-r { + border: 2rpx solid red; + padding: 20rpx 0; + } */ + + + + .c-l { + color: #fe0000; + width: 200rpx; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + } + + .rmb::before { + content: '¥'; + font-size: 28rpx; + } + + .c-r { + box-sizing: border-box; + padding: 20rpx; + flex: 1; + } + + .c-time { + color: #7b7b7b; + font-size: 24rpx; + padding-top: 10rpx; + word-break: break-all; + } + + .btn, .btn2 { + font-size: 26rpx; + padding: 10rpx 20rpx; + border: 2rpx solid #fe0000; + border-radius: 30rpx; + flex-shrink: 0; + } + + .btn { + color: #fe0000; + } + + .btn.gray { + color: #ccc; + border-color: #ccc; + } + + .btn2 { + color: white; + background-color: #fe0000; + } + + .c-info { + border-top: 2rpx dashed #f0f0f0; + padding: 10rpx 40rpx 10rpx 10rpx; + font-size: 22rpx; + background-color: #fefefe; + color: #7b7b7b; + position: relative; + } + + .arrow-down::after { + font-family: iconfont; + content: '\e600'; + font-size: 32rpx; + position: absolute; + right: 10rpx; + top: 10rpx; + /* transform: translateY(-50%); */ + transition: all 0.3s; + } + + .arrow-down.active::after { + transform: rotateZ(180deg); + } + + .mask { + position: fixed; + width: 100%; + height: 100%; + top: 0; + background-color: rgba(0,0,0,.7); + z-index: 1; + } + + .popup-container { + position: fixed; + width: 70%; + border-radius: 12rpx; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 3; + } + + .popup { + text-align: center; + border-radius: 12rpx; + background-color: white; + overflow: hidden; + /* width: 80%; */ + } + + .popup-container .icon-close { + color: rgba(255,255,255,.6); + } + + .popup-title { + padding: 40rpx 0; + color: #fe0000; + background-color: #FFD3D6; + position: relative; + } + + .popup-title::after { + content: ''; + position: absolute; + left: -20rpx; + bottom: -12rpx; + width: 130%; + height: 20rpx; + background-image: -webkit-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent); + background-image: -moz-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent); + background-image: radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent); + background-size: 40rpx 40rpx; + transform: rotate(180deg); + -webkit-transform: rotate(180deg); + } + + + .popup .rmb::before { + font-size: 40rpx; + } + + .img-qr { + display: block; + width: 300rpx; + height: 300rpx; + margin: 0 auto; + background-color: pink; + } + + .qrcode { + width: 300rpx; + height: 300rpx; + margin: 0 auto; + } + + + .noMore { + padding: 20rpx; + color: #bbb; + text-align: center; + font-size: 22rpx; + } + + .breakall { + word-break: break-all; + } + + + + + + + + + + + + + + + + diff --git a/pages/user/coupons/exchange/exchange.js b/pages/user/coupons/exchange/exchange.js deleted file mode 100644 index e2a519b..0000000 --- a/pages/user/coupons/exchange/exchange.js +++ /dev/null @@ -1,148 +0,0 @@ -// pages/user/yhq/exchange/exchange.js -var e = function (e) { - return e && e.__esModule ? e : { - default: e - }; -}(require("../../../../utils/LoadMore.js")), - t = getApp(), - a = t.request, - o = t.globalData.setting, - os = o, - i = require("../../../../utils/util.js"), - ut = i, - b = require("../../../../app.js"), - app = b, - s = require("../../../../utils/common.js"), - n = new e.default(); -var regeneratorRuntime = require('../../../../utils/runtime.js'); -Page({ - - /** - * 页面的初始数据 - */ - data: { - result:[],//结果 - }, - - /** - * 生命周期函数--监听页面加载 - */ - onLoad: function (options) { - - }, - - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady: function () { - - }, - // 刷出兑换劵 - async exchange() { - var e = this, result; - var user_id = getApp().globalData.user_id; - var store_id = os.stoid; - await getApp().request.promiseGet("/api/weshop/users/listExchangeCoupons", { - data: { - user_id: user_id, store_id: store_id, - } - }).then(res => { - var msg=res.data; - result=msg.data.pageData; - - }) - e.setData({ - result: result - }) - - }, - /** - * 点击兑换 - */ - async click(e) { - var th=this; - - var index=e.currentTarget.dataset.index; - var item=this.data.result[index]; - this.data.monye=item.ToSum; - this.data.integr=item.Integral; - this.data.number=item.Number; - - var my_con = this.selectComponent("#my_con"); //组件的id - var title="是否使用"+th.data.integr+"积分兑换代金券面值"+th.data.monye+"元"; - my_con.open(title, "确定", "取消", th.sure_pay, null) - }, - - sure_pay:function(){ - var monye=this.data.monye; - var integr=this.data.integr; - var number=this.data.number; - - var user_id = getApp().globalData.user_id; - console.log(integr,"是什么微卷",typeof integr,monye); - var store_id = os.stoid; - getApp().request.post("/api/weshop/users/saveInterToCash", { - data: { - user_id: user_id, - store_id: store_id, - money:monye, - integ:integr, - number:number, - }, - success: function (su) { - if (su.data.data!=null) { - getApp().showWarning("兑换成功"); - }else{ - getApp().showWarning("积分不足"); - } - } - - }) - }, - - - /** - * 生命周期函数--监听页面显示 - */ - onShow: function () { - this.exchange(); - wx.setNavigationBarTitle({ - title: "微券兑换", - }) - }, - - /** - * 生命周期函数--监听页面隐藏 - */ - onHide: function () { - - }, - - /** - * 生命周期函数--监听页面卸载 - */ - onUnload: function () { - - }, - - /** - * 页面相关事件处理函数--监听用户下拉动作 - */ - onPullDownRefresh: function () { - - }, - - /** - * 页面上拉触底事件的处理函数 - */ - onReachBottom: function () { - - }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function () { - - } -}) \ No newline at end of file diff --git a/pages/user/coupons/exchange/exchange.json b/pages/user/coupons/exchange/exchange.json deleted file mode 100644 index cc141cd..0000000 --- a/pages/user/coupons/exchange/exchange.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "usingComponents": { - "my_confirm": "/components/my_confirm/my_confirm" - } -} \ No newline at end of file diff --git a/pages/user/coupons/exchange/exchange.wxml b/pages/user/coupons/exchange/exchange.wxml deleted file mode 100644 index 4a7f534..0000000 --- a/pages/user/coupons/exchange/exchange.wxml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - {{filter.getNum(result.ToSum)}} - - {{result.Integral}}积分兑换{{filter.getNum(result.ToSum)}}元微券 - 立即兑换 - - - \ No newline at end of file diff --git a/pages/user/coupons/exchange/exchange.wxss b/pages/user/coupons/exchange/exchange.wxss deleted file mode 100644 index f01a407..0000000 --- a/pages/user/coupons/exchange/exchange.wxss +++ /dev/null @@ -1,48 +0,0 @@ -/* 替换【】 */ -.jfcz1{ - background: url(https://mshopimg.yolipai.net/miniapp/images/user/jfzyc1.png); - text-align: center; - padding: 20px 0; - font-size: 18px; - color: #FFF; - margin: 20px 2% 0 0; - margin-left: 40rpx; - width:88%; - vertical-align: top; - display: inline-block; -} -.jf-w{ - display: flex; - width: 100%; - height: auto; -} -/* 人民币的符号 */ -.symbol{ - width: 35rpx; - height: 45rpx; - margin-left: 279rpx; - margin-top:5rpx; - -} -/* 钱 */ -.f-big{ - font-size: 25px; - font-family: 'SimHei',Arial; - margin-left:4rpx; - -} - -.mb20{ - margin-bottom: 20px; -} - -.jf-btn{ - background-color: #C4182E; - display: inline-block; - height: 50px; - line-height: 50px; - width: 80%; - margin: auto; - border-radius: 4px; - text-align: center; -} \ No newline at end of file diff --git a/pages/user/coupons/exchange/filter.wxs b/pages/user/coupons/exchange/filter.wxs deleted file mode 100644 index c352e51..0000000 --- a/pages/user/coupons/exchange/filter.wxs +++ /dev/null @@ -1,22 +0,0 @@ -var numFr = { - getNum: function(x) { - var f = parseFloat(x); - if (isNaN(f)) { - return false; - } - var f = Math.round(x * 100) / 100; - var s = f.toString(); - var rs = s.indexOf('.'); - if (rs < 0) { - rs = s.length; - s += '.'; - } - while (s.length <= rs + 2) { - s += '0'; - } - return s; - } -} -module.exports = { - getNum: numFr.getNum -} \ No newline at end of file diff --git a/pages/user/coupons/filter.wxs b/pages/user/coupons/filter.wxs index c352e51..94bb477 100644 --- a/pages/user/coupons/filter.wxs +++ b/pages/user/coupons/filter.wxs @@ -15,8 +15,24 @@ var numFr = { s += '0'; } return s; - } + }, + showBtnText: function(index) { + switch(index) { + case 1: { + return '已使用'; + break; + }; + case 2: { + return '已过期'; + break; + }; + default: { + return '立即使用'; + }; + }; + }, } module.exports = { - getNum: numFr.getNum + getNum: numFr.getNum, + showBtnText: numFr.showBtnText, } \ No newline at end of file diff --git a/pages/user/coupons/index.wxs b/pages/user/coupons/index.wxs deleted file mode 100644 index e247f84..0000000 --- a/pages/user/coupons/index.wxs +++ /dev/null @@ -1,63 +0,0 @@ -var formatNumber = function (n) { - n = n.toString() - return n[1] ? n : '0' + n -} - -var regYear = getRegExp("(y+)", "i"); - -var dateFormat = function (timestamp, format) { - if (!format) { - format = "yyyy-MM-dd hh:mm:ss"; - } - timestamp = parseInt(timestamp)*1000;; - var realDate = getDate(timestamp); - function timeFormat(num) { - return num < 10 ? '0' + num : num; - } - var date = [ - ["M+", timeFormat(realDate.getMonth() + 1)], - ["d+", timeFormat(realDate.getDate())], - ["h+", timeFormat(realDate.getHours())], - ["m+", timeFormat(realDate.getMinutes())], - ["s+", timeFormat(realDate.getSeconds())], - ["q+", Math.floor((realDate.getMonth() + 3) / 3)], - ["S+", realDate.getMilliseconds()], - ]; - var reg1 = regYear.exec(format); - // console.log(reg1[0]); - if (reg1) { - - format = format.replace(reg1[1], (realDate.getFullYear() + '').substring(4 - reg1[1].length)); - } - for (var i = 0; i < date.length; i++) { - var k = date[i][0]; - var v = date[i][1]; - - var reg2 = getRegExp("(" + k + ")").exec(format); - if (reg2) { - format = format.replace(reg2[1], reg2[1].length == 1 - ? v : ("00" + v).substring(("" + v).length)); - } - } - return format; -} - - -module.exports = { - dateFormat: dateFormat -}; - - -function parse(fmt) { - - var a = fmt.slice(0, 4); - console.log("a",a); - var b=+"-"; - console.log("b", b); - var c = fmt.slice(5, 7); - var d=+"-"; - console.log("d", d); - var e = fmt.slice(8, 9); - console.log("e", e); - -} \ No newline at end of file diff --git a/pages/user/coupons/qr_code/qr_code.js b/pages/user/coupons/qr_code/qr_code.js deleted file mode 100644 index 151e0ad..0000000 --- a/pages/user/coupons/qr_code/qr_code.js +++ /dev/null @@ -1,82 +0,0 @@ -// pages/user/yhq/qr_code/qr_code.js -const { - barcode, - qrcode -} = require('../../../../utils/index.js') -Page({ - - /** - * 页面的初始数据 - */ - data: { - - }, - - /** - * 生命周期函数--监听页面加载 - */ - onLoad: function (options) { - var val = getApp().globalData.val; - console.log(val); - this.qrcode(val); - }, - clicks:function(){ - - wx.navigateBack(); - - }, - /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady: function () { - - }, - - /** - * 生命周期函数--监听页面显示 - */ - onShow: function () { - wx.setNavigationBarTitle({ - title: "微券查询", - }) - }, -qrcode:function(val){ - console.log(val); - barcode('barcode', val, 600,160); - qrcode('qrcode', val,520,520); -}, - /** - * 生命周期函数--监听页面隐藏 - */ - onHide: function () { - - }, - - /** - * 生命周期函数--监听页面卸载 - */ - onUnload: function () { - - }, - - /** - * 页面相关事件处理函数--监听用户下拉动作 - */ - onPullDownRefresh: function () { - - }, - - /** - * 页面上拉触底事件的处理函数 - */ - onReachBottom: function () { - - }, - - /** - * 用户点击右上角分享 - */ - onShareAppMessage: function () { - - } -}) \ No newline at end of file diff --git a/pages/user/coupons/qr_code/qr_code.json b/pages/user/coupons/qr_code/qr_code.json deleted file mode 100644 index 8835af0..0000000 --- a/pages/user/coupons/qr_code/qr_code.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "usingComponents": {} -} \ No newline at end of file diff --git a/pages/user/coupons/qr_code/qr_code.wxml b/pages/user/coupons/qr_code/qr_code.wxml deleted file mode 100644 index 841aa2f..0000000 --- a/pages/user/coupons/qr_code/qr_code.wxml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/pages/user/coupons/qr_code/qr_code.wxss b/pages/user/coupons/qr_code/qr_code.wxss deleted file mode 100644 index 7172f3c..0000000 --- a/pages/user/coupons/qr_code/qr_code.wxss +++ /dev/null @@ -1,36 +0,0 @@ -/* 二维码和条形码的边框 */ -.barqrcode{ - width: 100%; - height: auto; - margin-top:225rpx; - -} -/* 点击条形 */ -.barcode { - height:150rpx; - width: 600rpx; - flex-direction: column; - justify-content: center; - align-items: center; - padding-left:40px; - -} -/* 二维码边框*/ -.qrcode_rim { - width: 550rpx; - height:550rpx; -display:flex; -flex-direction:column; -justify-content:flex-end; -align-items:center; -margin-left:121rpx; -margin-top:-13rpx; - -} - -.qrcode{ - width:550rpx; -height:550rpx; - - -} \ No newline at end of file diff --git a/pages/user/coupons/query/index.js b/pages/user/coupons/query/index.js deleted file mode 100644 index 47431f0..0000000 --- a/pages/user/coupons/query/index.js +++ /dev/null @@ -1,288 +0,0 @@ -var t = getApp(), - a = t.request, - o = t.globalData.setting, - os = o, - i = require("../../../../utils/util.js"), - ut = i, - s = require("../../../../utils/common.js"); -var regeneratorRuntime = require('../../../../utils/runtime.js'); -const { - barcode, - qrcode -} = require('../../../../utils/index.js') -Page({ - data: { - - val:false, - datet: "", - dates: "", - parameter: false, - details:[],//数据 - isBind:true,//控制清空时间日期的按钮 - isBinds: true, - select: false,//下拉框 - grade_name: '所有', - grades: [ - '所有', - '已使用', - '已过期', - '未使用', - ], - display:false, - is_no_more: 0, - current_page:1, - by_list:[], - islading:0, - }, - /** - * 生命周期函数--监听页面加载 - */ - onLoad: function (options) { - this.setData({ - details: [] - }); - this.wjquery(); - }, - /** - * 生命周期函数--监听页面显示 - */ - onShow: function (options) { - wx.setNavigationBarTitle({ - title: "微券查询", - }) - }, - // 点击选中二维码 - click: function (e) { - var val = e.currentTarget.dataset.cashrepno; - getApp().globalData.val = val; - wx.navigateTo({ - url: '../qr_code/qr_code', - }) - }, - // 点击返回主页 - // clicks: function () { - // this.setData({ - // hide:true, display:false - // }) - // }, - //监听输入框显示清空按钮 - watchPassWord: function (event) { - var val = event.detail.value; - if (val != "" && val != null) { - var isBind = false; - this.setData({ isBind: isBind }); - - } - }, - /** - * 点击下拉框 - */ - bindShowMsg() { - this.setData({ - select: !this.data.select - }) - }, - /** - * 已选下拉框 - */ - mySelect(e) { - var name = e.currentTarget.dataset.name; - this.setData({ - grade_name: name, - select: false - }) - }, - - //明细查询 - Gettime:function(e){ - var page = 0; - //开始获取时间 - var th = this; - var stime = th.data.datet; - var etime = th.data.dates; - var tpye = th.data.grade_name; - - //开始获取时间结束 - //删除字符中的—— - var datatk = stime.replace(/[-]/g, ""); - var dataj = etime.replace(/[-]/g, ""); - //转换类型 - var datak = parseInt(datatk); - var dataj = parseInt(dataj); - - //判断初始时间小于结束时间 - if (datak > dataj) { - getApp().showWarning("结束时间错误"); - } else { - this.setData({ details: [] }); - this.data.current_page=1; - this.data.is_no_more=0; - this.data.by_list=[]; - this.data.details=[]; - this.wjquery(); - } - - }, - //微卷查询流水明细 - async wjquery() { - if (this.data.islading) return; - if(this.data.is_no_more) return; - this.data.islading=1; - var th=this; - - var len = this.data.details.length; - - var e = this,sum, val, number; - var user_id = getApp().globalData.user_id; - var store_id = os.stoid; - var stime = this.data.datet; - var etime = this.data.dates; - var tpye = this.data.grade_name; - console.log("是什么类型",tpye); - var IsUse = 0; - var e = this; - var get_data = { - user_id: user_id, - store_id: store_id, - pageSize: 10, - page: e.data.current_page - }; - - var dd={ user_id: user_id, store_id: store_id,pageSize: 100}; - dd.isuse=0; - // 判断下拉框,添加类型 - if (tpye == "已使用"){ - get_data.IsUse = 1; - dd.isuse=1; - } else if (tpye == "已过期"){ - get_data.IsUse = 2; - } else if (tpye == "未使用"){ - get_data.IsUse = 0; - } - if (etime != "" && etime != null) { - get_data.EndDate = etime; - - //时间要转成时间戳 - var new_t=new Date(etime)/1000; - dd.etime=new_t; - } - - if (stime != "" && stime != null) { - get_data.BeginDate= stime; - //时间要转成时间戳 - var new_t=new Date(stime)/1000; - dd.stime=new_t; - } - - var by_list=[]; - if(th.data.current_page==1){ - //先拿包邮券 - await getApp().request.promiseGet("/api/weshop/userfeemail/pageAndArea", { - data: dd, - }).then(res => { - if(res.data.code==0 && res.data.data && res.data.data.total>0){ - by_list=res.data.data.pageData; - for(var i in by_list){ - by_list[i].isby=1; - //过滤是时间的范围 - if(get_data.IsUse == 2 && by_list[i].use_end_time>=ut.gettimestamp()){ - th.data.by_list.push(by_list[i]); - }else if(get_data.IsUse == 0 && by_list[i].use_end_time0) - big_arr=th.data.by_list; - - await getApp().request.promiseGet("/api/weshop/users/listQuan", { - data: get_data, - isShowLoading: 1 - - }).then(res => { - - th.data.islading=0; - var a = res.data; - var len = e.data.details.length; - var details = a.data.pageData; - - if (details.length == 0 ) { - this.data.is_no_more = 1; - getApp().showWarning("未找更多数据"); - if(th.data.by_list && th.data.current_page==1){ - th.setData({ val: val,details:th.data.by_list}); - details=th.data.by_list; - setTimeout(function () { - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].no,460, 460); - } - }, 100) - } - return false; - } - - th.data.current_page++; - val = a.data.total+th.data.by_list.length; - - big_arr=big_arr.concat(details); - this.setData({ - details: big_arr,val: val - }); - - setTimeout(function () { - if(by_list) details=big_arr; - for (var i = 0; i < details.length; i++) { - var no = i + len; - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no,460, 460); - } - }, 100) - }) - - - - }, - //---加载更多是靠这个函数---- - onReachBottom: function () { - this.wjquery(); - }, - //起始时间 - bindDateChenge: function(e) { - console.log("是什么", e.detail.value); - var isBind = false; - this.setData({ - datet: e.detail.value, isBind: isBind - }); - }, - // 结束时间 - bindDateChenges: function(e) { - console.log("是什么", e.detail.value); - var isBinds = false; - this.setData({ - dates: e.detail.value, isBinds: isBinds - }); - }, - //catchtap阻止冒泡,点击清除开始时间的按钮 - eliminate:function(){ - console.log("试试"); - var isBind= true; - var data=""; - this.setData({ datet: data, isBind: isBind}) - }, - //catchtap阻止冒泡,点击清除结束时间的按钮 - eliminates: function () { - console.log("试试"); - var isBinds = true; - var dates = ""; - this.setData({ dates: dates, isBinds: isBinds }) - } - -}) \ No newline at end of file diff --git a/pages/user/coupons/query/index.json b/pages/user/coupons/query/index.json deleted file mode 100644 index 9e26dfe..0000000 --- a/pages/user/coupons/query/index.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/pages/user/coupons/query/index.wxml b/pages/user/coupons/query/index.wxml deleted file mode 100644 index 77a1742..0000000 --- a/pages/user/coupons/query/index.wxml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - -
- - 日期: - - - - {{datet}} - - - - - - - - - - {{dates}} - - - - - - - - 查询内容 - - - - {{grade_name}} - - - - - - - - {{item}} - - - - - -
-
- - - - - - - - {{detail.no}} - - - 包邮券 - - 微券来源: 微信商城 - - - 有效期: - {{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}} - 至 {{ time.format_time(detail.use_end_time)}} - - - 有效期: 不限 - - 使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?",不包邮地区:"+detail.title:""}} - - - - - - - - - - - - - {{detail.CashRepNo}} - - - {{filter.getNum(detail.Sum)}}元微券 - - - 微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}} - - - 有效期: - {{detail.BeginDate==null?" " : time.replace_time2(detail.BeginDate)}} - 至 {{ time.replace_time2(detail.ValidDate)}} - - - 有效期: 不限 - - {{filter.getNum(detail.Sum)}}元优惠券,{{(detail.UseObjectID==null || detail.UseObjectID=='')?"全场通用":"仅限"+(detail.UseObjectName)+"使用"}},满 {{detail.BuySum==null || detail.BuySum==''?filter.getNum(0):filter.getNum(detail.BuySum)}}元使用 {{detail.region_list_name==null || detail.region_list_name==''?"":",不包邮地区:"+region_list_name}};{{detail.Remark}} - 使用说明: {{filter.getNum(detail.Sum)}}元优惠券,{{(detail.UseObjectID==null || detail.UseObjectID=='')?"全场通用":"仅限"+(detail.UseObjectName)+"使用"}},满 {{detail.BuySum==null || detail.BuySum==''?filter.getNum(0):filter.getNum(detail.BuySum)}}元使用 {{detail.region_list_name==null || detail.region_list_name==''?"":",不包邮地区:"+region_list_name}} - - - - - - diff --git a/pages/user/coupons/query/index.wxss b/pages/user/coupons/query/index.wxss deleted file mode 100644 index e0f335c..0000000 --- a/pages/user/coupons/query/index.wxss +++ /dev/null @@ -1,357 +0,0 @@ -/* 大边框 */ -.big-rim{ - margin-top: 15rpx; - width: 100%; - height: 310rpx; -border-bottom: 8px solid #EEEEEE; -} -.min-rim{ -display: flex; -width: 100%; -height: auto; -margin-left: 30rpx; -} - -/* 开始时间 */ -.kssj{ - -display: inline-block; -height: 50rpx; -background-color: #EEEEEE; -border: 1px solid #DADADA; -width:200rpx; -border-radius: 3px; -line-height:40rpx; -} -/* 开始时间的文字 */ -.wz{ - display: inline-block; -font-size: 25rpx; -color: #333; -} -/* 日期控件 */ -.pi{ - width:200rpx; - height:auto; - margin-left:20rpx; - -} - - - -/* 查询内容 */ -.cxnr{ - margin-left:30rpx; - font-size:28rpx; - font-family: 'SimHei',Arial; -} -.rq-rim{ -position:relative; -left:0; -top:0; -} -/* 至 */ -.zi{ - - margin-top:14rpx; - font-size:28rpx; - font-family: 'SimHei',Arial; - margin-left:20rpx; - -} -/* 结束时间 */ - -.jssj{ - padding-left: 10rpx; - margin-left: 30rpx; -padding-bottom: 10rpx; -height: 35rpx; -font-size: 25rpx; -color: #333; -background-color: #EEEEEE; -border: 1px solid #DADADA; -width:85%; -font-family: 'SimHei',Arial; -border-radius: 3px; -} -/* 查询内容的备考的边框 */ -.xknr-rim{ - display: flex; - width: 100%; - height: 55rpx; - line-height:105rpx; - margin-top:10rpx; - -} -/* 明细查询 */ -.botton{ - margin-left: 30rpx; - margin-top: 63rpx; - background-color: #C4182E; - width: 95%; - border-radius:10rpx; - text-align: center; - height: 70rpx; - line-height: 70rpx; - color: #FFF; - font-size: 25rpx; - border: none; - font-family: '微软雅黑'; - } - /* 底部边框线 - .bottom{ - width: 100%; - border-bottom: 20rpx solid #eeeeee; - } */ - /* 清空按钮的 边框*/ -.qc-rim{ - position:absolute; - top:10rpx; - left:175rpx; -} - -/*开始时间清空输入框的按钮*/ -.empty{ - width: 25rpx; - height: 25rpx; - border-radius:50%; - background: #767676; - color: #fff; - font-size: 25rpx; - text-align: center; - line-height:18rpx; -} -/* 结束时间清空输入框的按钮的边框 */ -.end-rim{ -position: absolute; - top: 11rpx; - left:173rpx; - width: 25rpx; - height: 25rpx; -} -/*结束时间清空输入框的按钮*/ -.end{ - - width: 25rpx; - height: 25rpx; - border-radius:50%; - background: #767676; - color: #fff; - font-size: 25rpx; - text-align: center; - line-height:21rpx; - -} - -/* 顶部 */ -.top{ - width: 200rpx; - height: 50rpx; - padding: 0 10rpx; - line-height: 50rpx; - font-size: 34rpx; - margin-top: 25rpx; - - -} -.images{ - width:35rpx; -height:30rpx; -margin-top:10rpx; -margin-left:-14rpx; - -} -.rim-images{ - width: 45rpx; - height: 46rpx; - line-height: 37rpx; - /* border-style: inset;padding:4rpx;text-align: center; */ - background: #f1f1f1; - border-color:#000000; - border-width: 1rpx; - transform:translateX(28%); - margin-top:-3rpx; -border-radius:5rpx; - - -} -/* 下拉框 */ -.top-selected{ - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - border: 1px solid #ccc; - padding: 0 10rpx; - font-size: 30rpx; - background:#eeeeee; - height:50rpx; - border-radius:6rpx; -} -.texts{ - margin:0 auto; - font-size: 25rpx; - -} -/* 下拉内容 */ -.select-box { - background-color: #eeeeee; - width:225rpx; - position: relative; - z-index:1; - overflow: hidden; - text-align: left; - animation: myfirst 0.5s; - font-size: 25rpx; -} -.select_one { - padding-left: 20rpx; - width: 100%; - height: 60rpx; - line-height: 60rpx; -} -/* 优惠券样式 */ -.body{ - text-align: center; - padding: 20rpx; - margin: 20rpx auto; - width: 80%; - max-width: 1000rpx; - font-size: 28rpx; - color: #333333; - border-bottom: 2rpx solid #EEEEEE; -} - -.b_iimg{ - background-color: red; - width: 400rpx; - height: 400rpx; -} - -.b_sz2{ - font-size: 40rpx; - color: #6fd137; - margin: 20rpx 0; - text-align: center; -} -/* 二维码列表查询 */ -/* 列表数据*/ -.data{ - width: 80%; - - height:auto; - margin-left:80rpx; - -} -.rim{ - position: relative; - top:0rpx; - left: 0rpx; -} -/* 二维码边框 */ -.code_rim{ - width: 100%; - height: auto; - text-align: center; - font-size: 25rpx; - padding-top: -30rpx; - margin-top:-20rpx; -padding-left:45rpx; - -} - -/* 二维码 */ -.code{ - height: 520rpx; - display: flex; - flex-direction: column; - justify-content: flex-end; - align-items: center; - margin-left:40rpx; - -} -.car-rim{ -width:98%; -height:177rpx; -text-align:center; -border-bottom:2rpx solid #eee; -margin-left:22rpx; - -} -/* 二维码值 */ -.code_val{ - margin-top:-104rpx; -margin-left:-59rpx; -color:#999999; - -} -/* 金额 */ -.moneys{ - margin-top:20rpx; - height: 47rpx; - width: 100%; - color:#6fd137; - text-align: center; - font-size: 38rpx; - font-family: 'SimHei',Arial; - margin-bottom:20rpx; - margin-left:11rpx; - -} -/* 文字 */ -.text{ - width: 100%; - font-size: 25rpx; - text-align: center; - - height: 41rpx; - color: #999999; -} -/* 二维码和条形码的边框 */ -.barqrcode{ - width: 100%; - height: auto; - margin-top:50rpx; - -} -/* 日期 */ -.rq{ - height: 25rpx; - font-size: 28rpx; - margin-top:12rpx; - font-family:'SimHei',Arial; -} -/* 点击条形 */ -.barcode { - height: 320rpx; - flex-direction: column; - justify-content: center; - align-items: center; - margin-left: 30rpx; -} -/* 二维码边框*/ -.qrcode_rim { - width: 100%; - height: 420rpx; - display: flex; - flex-direction: column; - justify-content: flex-end; - align-items: center; - margin-left: 80rpx; - margin-top:-210rpx; - -} -.qrcode{ - margin-left: 100rpx; -} -/* 使用说明 */ -.textss{ - width: 100%; - font-size: 25rpx; - text-align: center; - - min-height: 47rpx; - height:auto; - color: #999999; -} -