Commit d006bc5c21b7437d4f1426d9a7996a018957847d

Authored by WXD-SEASON\season
1 parent 70482432

优化券换新界面去掉旧的

app.json
... ... @@ -40,9 +40,6 @@
40 40 "pages/user/member/account_unable/account_unable",
41 41 "pages/user/member/cash_record/cash_record",
42 42 "pages/user/coupons/coupons",
43   - "pages/user/coupons/qr_code/qr_code",
44   - "pages/user/coupons/query/index",
45   - "pages/user/coupons/exchange/exchange",
46 43 "pages/user/integral/integral",
47 44 "pages/user/integral/query/index",
48 45 "pages/user/integral/msg/msg",
... ...
packageB/pages/coupons/filter.wxs deleted
1   -var numFr = {
2   - getNum: function(x) {
3   - var f = parseFloat(x);
4   - if (isNaN(f)) {
5   - return false;
6   - }
7   - var f = Math.round(x * 100) / 100;
8   - var s = f.toString();
9   - var rs = s.indexOf('.');
10   - if (rs < 0) {
11   - rs = s.length;
12   - s += '.';
13   - }
14   - while (s.length <= rs + 2) {
15   - s += '0';
16   - }
17   - return s;
18   - },
19   - showBtnText: function(index) {
20   - switch(index) {
21   - case 1: {
22   - return '已使用';
23   - break;
24   - };
25   - case 2: {
26   - return '已过期';
27   - break;
28   - };
29   - default: {
30   - return '立即使用';
31   - };
32   - };
33   - },
34   -}
35   -module.exports = {
36   - getNum: numFr.getNum,
37   - showBtnText: numFr.showBtnText,
38   -}
39 0 \ No newline at end of file
packageB/pages/coupons/query/index.js deleted
1   -var t = getApp(),
2   - a = t.request,
3   - o = t.globalData.setting,
4   - os = o,
5   - i = require("../../../../utils/util.js"),
6   - ut = i,
7   - s = require("../../../../utils/common.js");
8   -var regeneratorRuntime = require('../../../../utils/runtime.js');
9   -const {
10   - barcode,
11   - qrcode
12   -} = require('../../../../utils/index.js');
13   -let _this = null;
14   -
15   -Page({
16   - data: {
17   -
18   - val:false,
19   - datet: "",
20   - dates: "",
21   - parameter: false,
22   - details:[],//数据
23   - isBind:true,//控制清空时间日期的按钮
24   - isBinds: true,
25   - select: false,//下拉框
26   - grade_name: '未使用',
27   - // grades: [ //old
28   - // '所有',
29   - // '已使用',
30   - // '已过期',
31   - // '未使用',
32   - // ],
33   - currentIndex: 0, //tab项当前指示器
34   - grades: [
35   - '未使用',
36   - '已使用',
37   - '已过期',
38   - ],
39   - display:false,
40   - is_no_more: 0,
41   - current_page:1,
42   - by_list:[],
43   - isloading:0,
44   - pageNum: 1,
45   - },
46   - /**
47   - * 生命周期函数--监听页面加载
48   - */
49   - onLoad: function (options) {
50   - _this = this;
51   - this.setData({
52   - details: []
53   - });
54   - this.wjquery();
55   - },
56   - /**
57   - * 生命周期函数--监听页面显示
58   - */
59   - onShow: function (options) {
60   - var th = this;
61   -
62   - wx.setNavigationBarTitle({
63   - title: "微券查询",
64   - });
65   -
66   - /**
67   - * 控制显示微券兑换
68   - * by sty
69   - */
70   - getApp().getConfig2(function (ee) {
71   - var json_d = JSON.parse(ee.switch_list);
72   - let is_show_dhwz = json_d.dhwz_switch;
73   - let grades = th.data.grades;
74   - // console.log('is_show_dhwz----------------------------',is_show_dhwz);
75   - if(is_show_dhwz) {
76   - grades.push('微券兑换');
77   - th.setData({ grades });
78   - };
79   - th.setData({ is_show_dhwz });
80   - },1);
81   - },
82   -
83   -
84   -
85   -
86   - // 点击选中二维码
87   - click: function (e) {
88   - var val = e.currentTarget.dataset.cashrepno;
89   - getApp().globalData.val = val;
90   - wx.navigateTo({
91   - url: '../qr_code/qr_code',
92   - })
93   - },
94   - // 点击返回主页
95   - // clicks: function () {
96   - // this.setData({
97   - // hide:true, display:false
98   - // })
99   - // },
100   - //监听输入框显示清空按钮
101   - watchPassWord: function (event) {
102   - var val = event.detail.value;
103   - if (val != "" && val != null) {
104   - var isBind = false;
105   - this.setData({ isBind: isBind });
106   -
107   - }
108   - },
109   - /**
110   - * 点击下拉框
111   - */
112   - bindShowMsg() {
113   - this.setData({
114   - select: !this.data.select
115   - })
116   - },
117   - /**
118   - * 已选下拉框
119   - */
120   - // mySelect(e) {
121   - // var name = e.currentTarget.dataset.name;
122   - // this.setData({
123   - // grade_name: name,
124   - // select: false
125   - // })
126   - // },
127   -
128   - /**
129   - * 点击tab
130   - * by sty
131   - */
132   - clickTab(e) {
133   - let index = e.target.dataset.index;
134   - let name = e.target.dataset.name;
135   -
136   - this.setData({
137   - is_get: 0,
138   - pageNum: 1,
139   - grade_name: name,
140   - currentIndex: index,
141   - is_no_more: 0,
142   - current_page: 1,
143   - noMore: false,
144   - details: [],
145   - by_list: [],
146   - });
147   -
148   -
149   - if(index == 3) {//微券兑换
150   - this.exchange();
151   - } else {//其他
152   - this.wjquery();
153   - };
154   - },
155   -
156   - /**
157   - * 点击"立即使用"
158   - * by sty
159   - */
160   - clickUse(e) {
161   - let useIndex = e.currentTarget.dataset.index;
162   - let val = e.currentTarget.dataset.cashrepno;
163   -
164   - this.setData({
165   - showQr: true,
166   - useIndex,
167   - });
168   - this.qrcode(val);
169   - },
170   -
171   - /**
172   - * 关闭二维码
173   - * by sty
174   - */
175   - closeQr() {
176   - this.setData({
177   - showQr: false,
178   - });
179   - },
180   -
181   - /**
182   - * 生成二维码
183   - * by sty
184   - */
185   - qrcode:function(val){
186   - // console.log(val);
187   - // barcode('barcode', val, 600,160);
188   - qrcode('qrcode', val, 300, 300);
189   - },
190   -
191   - /**
192   - * 请求微券列表
193   - * by sty
194   - */
195   - async exchange() {
196   - var result;
197   - var user_id = getApp().globalData.user_id;
198   - var store_id = os.stoid;
199   -
200   -
201   - this.getData(true, '/api/weshop/users/listExchangeCoupons', {
202   - user_id: user_id, store_id: store_id,
203   - }).then(()=>{
204   - _this.setData({
205   - result: _this.data.list.pageData,
206   - });
207   - });
208   -
209   - // await getApp().request.promiseGet("/api/weshop/users/listExchangeCoupons", {
210   - // data: {
211   - // user_id: user_id, store_id: store_id,
212   - // }
213   - // }).then(res => {
214   - // // var msg = res.data;
215   - // // result = msg.data.pageData;
216   - // })
217   - // e.setData({
218   - // result: result
219   - // })
220   - },
221   -
222   - /**
223   - * 微券兑换对话框
224   - * by sty
225   - */
226   - async clickExchange(e) {
227   - var th=this;
228   - var index = e.currentTarget.dataset.index;
229   - var item = this.data.result[index];
230   - this.data.monye = item.ToSum;
231   - this.data.integr = item.Integral;
232   - this.data.number = item.Number;
233   -
234   - let content = `确定使用${th.data.integr}积分兑换代金券面值${th.data.monye}元吗?`;
235   - wx.showModal({
236   - title: '提示',
237   - content: content,
238   - success (res) {
239   - if (res.confirm) {
240   - console.log('用户点击确定');
241   - th.sure_pay();
242   - } else if (res.cancel) {
243   - console.log('用户点击取消')
244   - }
245   - }
246   - });
247   -
248   -
249   -
250   - // var my_con = this.selectComponent("#my_con"); //组件的id
251   - // var title="是否使用"+th.data.integr+"积分兑换代金券面值"+th.data.monye+"元";
252   - // my_con.open(title, "确定", "取消", th.sure_pay, null)
253   - },
254   -
255   -
256   - /**
257   - * 微券兑换
258   - * by sty
259   - */
260   - sure_pay:function(){
261   - var monye=this.data.monye;
262   - var integr=this.data.integr;
263   - var number=this.data.number;
264   -
265   - var user_id = getApp().globalData.user_id;
266   - console.log(integr,"是什么微卷",typeof integr,monye);
267   - var store_id = os.stoid;
268   - getApp().request.post("/api/weshop/users/saveInterToCash", {
269   - data: {
270   - user_id: user_id,
271   - store_id: store_id,
272   - money:monye,
273   - integ:integr,
274   - number:number,
275   - },
276   - success: function (su) {
277   - if (su.data.data!=null) {
278   - // getApp().showWarning("兑换成功");
279   - wx.showToast({
280   - title: '兑换成功',
281   - icon: 'success',
282   - });
283   - }else{
284   - // getApp().showWarning("积分不足");
285   - wx.showToast({
286   - title: '积分不足',
287   - icon: 'error',
288   - });
289   - }
290   - }
291   -
292   - })
293   - },
294   -
295   -
296   - //明细查询
297   - Gettime:function(e){
298   - var page = 0;
299   - //开始获取时间
300   - var th = this;
301   - var stime = th.data.datet;
302   - var etime = th.data.dates;
303   - var tpye = th.data.grade_name;
304   -
305   - //开始获取时间结束
306   - //删除字符中的——
307   - var datatk = stime.replace(/[-]/g, "");
308   - var dataj = etime.replace(/[-]/g, "");
309   - //转换类型
310   - var datak = parseInt(datatk);
311   - var dataj = parseInt(dataj);
312   -
313   - //判断初始时间小于结束时间
314   - if (datak > dataj) {
315   - getApp().showWarning("结束时间错误");
316   - } else {
317   - this.setData({ details: [] });
318   - this.data.current_page=1;
319   - this.data.is_no_more=0;
320   - this.data.by_list=[];
321   - this.data.details=[];
322   - this.wjquery();
323   - }
324   -
325   - },
326   -
327   - //微卷查询流水明细
328   - async wjquery() {
329   - if(this.data.isloading) return;
330   - if(this.data.is_no_more) return;
331   - this.data.isloading=1;
332   - var th=this;
333   -
334   - var len = this.data.details.length;
335   -
336   - var e = this,sum, val, number;
337   - var user_id = getApp().globalData.user_id;
338   - var store_id = os.stoid;
339   -
340   - var stime = this.data.datet;
341   - var etime = this.data.dates;
342   -
343   - var tpye = this.data.grade_name;
344   - console.log("是什么类型",tpye);
345   - var IsUse = 0;
346   - var e = this;
347   - var get_data = {
348   - user_id: user_id,
349   - store_id: store_id,
350   - // pageSize: 10,
351   - page: e.data.current_page,
352   - };
353   -
354   - var dd={
355   - user_id: user_id,
356   - store_id: store_id,
357   - // pageSize: 10,
358   - };
359   - dd.isuse=0;
360   - // 判断下拉框,添加类型
361   - if (tpye == "已使用"){
362   - get_data.IsUse = 1;
363   - dd.isuse=1;
364   - } else if (tpye == "已过期"){
365   - get_data.IsUse = 2;
366   - } else if (tpye == "未使用"){
367   - get_data.IsUse = 0;
368   - };
369   - if (etime != "" && etime != null) {
370   - get_data.EndDate = etime;
371   -
372   - //时间要转成时间戳
373   - var new_t=new Date(etime)/1000;
374   - dd.etime=new_t;
375   - }
376   -
377   - if (stime != "" && stime != null) {
378   - get_data.BeginDate= stime;
379   - //时间要转成时间戳
380   - var new_t=new Date(stime)/1000;
381   - dd.stime=new_t;
382   - }
383   -
384   - var by_list=[];
385   - if(th.data.current_page==1){
386   - //先拿包邮券
387   - await getApp().request.promiseGet("/api/weshop/userfeemail/pageAndArea?pageSize=100", {
388   - data: dd,
389   - }).then(res => {
390   -
391   - if(res.data.code == 0) {
392   - th.setData({
393   - byTotal: res.data.data.total,
394   - });
395   - };
396   -
397   - if(res.data.code==0 && res.data.data && res.data.data.total>0){
398   -
399   - by_list=res.data.data.pageData;
400   - for(var i in by_list){
401   - by_list[i].isby=1;
402   - //过滤是时间的范围
403   - if(get_data.IsUse == 2 && by_list[i].use_end_time<=ut.gettimestamp()){
404   - th.data.by_list.push(by_list[i]);
405   - }else if(get_data.IsUse == 0){
406   - th.data.by_list.push(by_list[i]);
407   - }else if(get_data.IsUse==1){
408   - th.data.by_list.push(by_list[i]);
409   - }else if(get_data.IsUse==undefined){
410   - th.data.by_list.push(by_list[i]);
411   - }
412   - }
413   - }
414   - })
415   - }
416   -
417   - var big_arr = this.data.details; ///api/weshop / users / listQuan
418   - if(th.data.current_page==1 && th.data.by_list.length>0) {
419   - big_arr=th.data.by_list;
420   - };
421   -
422   -
423   - await getApp().request.promiseGet("/api/weshop/users/listQuan", {
424   - data: get_data,
425   - isShowLoading: 1
426   -
427   - }).then(res => {
428   -
429   - th.data.isloading=0;
430   - var a = res.data;
431   - var len = e.data.details.length;
432   - var details = a.data.pageData;
433   -
434   - th.setData({
435   - pageSize: a.data.pageSize,
436   - wjTotal: a.data.total,
437   - });
438   -
439   - if (details.length == 0) {
440   - this.setData({
441   - is_no_more: 1,
442   - });
443   - // getApp().showWarning("未找更多数据");
444   - if(th.data.by_list && th.data.current_page==1){
445   - th.setData({ val: val,details:th.data.by_list});
446   - details=th.data.by_list;
447   - setTimeout(function () {
448   - for (var i = 0; i < details.length; i++) {
449   - var no = i + len;
450   - qrcode('qrcode' + no, details[i].no,460, 460);
451   - }
452   - }, 100)
453   - }
454   - return false;
455   - }
456   -
457   - th.data.current_page++;
458   - val = a.data.total+th.data.by_list.length;
459   -
460   - big_arr=big_arr.concat(details);
461   - this.setData({
462   - details: big_arr,val: val,
463   - is_get: 1,
464   - current_page: this.data.current_page,
465   - });
466   -
467   - setTimeout(function () {
468   - if(by_list) details=big_arr;
469   - for (var i = 0; i < details.length; i++) {
470   - var no = i + len;
471   - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no,460, 460);
472   - }
473   - }, 100)
474   - })
475   -
476   -
477   -
478   - },
479   -
480   -
481   - // 使用说明详情展开
482   - clickDetails: function(e) {
483   - let details = this.data.details;
484   - let index = e.currentTarget.dataset.index;
485   - details[index].isShowDetails = !details[index].isShowDetails;
486   - this.setData({
487   - details,
488   - });
489   - },
490   -
491   -
492   -
493   - //---加载更多是靠这个函数----
494   - onReachBottom: function () {
495   - if(this.data.currentIndex != 3) {
496   - this.wjquery();
497   - } else {
498   - this.scrollToLower('/api/weshop/users/listExchangeCoupons', {
499   - user_id: getApp().globalData.user_id,
500   - store_id: os.stoid,
501   - }, function() {
502   - // console.log('!!!!!', _this.data.list.pageData);
503   - _this.setData({
504   - result: _this.data.list.pageData,
505   - });
506   - });
507   - };
508   - },
509   -
510   -
511   - //起始时间
512   - // bindDateChenge: function(e) {
513   - // console.log("是什么", e.detail.value);
514   - // var isBind = false;
515   - // this.setData({
516   - // datet: e.detail.value, isBind: isBind
517   - // });
518   - // },
519   - // 结束时间
520   - // bindDateChenges: function(e) {
521   - // console.log("是什么", e.detail.value);
522   - // var isBinds = false;
523   - // this.setData({
524   - // dates: e.detail.value, isBinds: isBinds
525   - // });
526   - // },
527   - //catchtap阻止冒泡,点击清除开始时间的按钮
528   - // eliminate:function(){
529   - // console.log("试试");
530   - // var isBind= true;
531   - // var data="";
532   - // this.setData({ datet: data, isBind: isBind})
533   - // },
534   - //catchtap阻止冒泡,点击清除结束时间的按钮
535   - // eliminates: function () {
536   - // console.log("试试");
537   - // var isBinds = true;
538   - // var dates = "";
539   - // this.setData({ dates: dates, isBinds: isBinds })
540   - // },
541   -
542   -
543   -
544   -
545   -
546   -
547   - // 上拉加载请求数据
548   - getData: function(isInit, url, data) {
549   - return getApp().request.promiseGet(url, {data: data, isShowLoading: true,})
550   - .then((res) => {
551   - _this.data.isLoading = false;
552   - if(res.data.code == 0) {
553   - if(isInit) {// 第一次加载
554   - _this.setData({
555   - list: res.data.data
556   - });
557   - } else {
558   - _this.setData({
559   - 'list.pageData': _this.data.list.pageData.concat(res.data.data.pageData)
560   - });
561   - };
562   -
563   - if((res.data.data.pageData.length == 0) || (res.data.data.pageSize * res.data.data.page >= res.data.data.total)) {
564   - _this.setData({
565   - noMore: true
566   - });
567   - };
568   - };
569   - });
570   - },
571   -
572   -
573   - // 上拉加载
574   - scrollToLower(url, requestData, callback) {
575   - // 页面数据
576   - // let pageData = this.data.list.pageData;
577   - // 数据总量
578   - let total = this.data.list.total;
579   - // 单页最大数据量
580   - let pageSize = this.data.list.pageSize;
581   - // 如果数据总量不为0且小于或等于单页最大数据量,说明数据已全部加载,显示‘没有更多了’
582   - if((total != 0)&&(total <= pageSize)) {
583   - this.setData({
584   - noMore: true
585   - });
586   - };
587   -
588   - if(!this.data.isloading && !this.data.noMore) {
589   - this.setData({
590   - isLoading: true,
591   - pageNum: this.data.pageNum + 1
592   - });
593   - requestData.page = this.data.pageNum;
594   - this.getData(false, url, requestData).then(()=>{
595   - if(callback) {
596   - callback();
597   - };
598   - });
599   - };
600   - },
601   -
602   -})
603 0 \ No newline at end of file
packageB/pages/coupons/query/index.json deleted
1   -{
2   - "enablePullDownRefresh": false,
3   - "usingComponents": {
4   - "nodata": "/components/nodata/nodata"
5   - }
6   -}
7 0 \ No newline at end of file
packageB/pages/coupons/query/index.wxml deleted
1   -<wxs module="filter" src="../filter.wxs"></wxs>
2   -<wxs module="time" src="../../../../utils/filter.wxs"></wxs>
3   -
4   -
5   -<!-- <view class="big-rim">
6   - <form bindsubmit='Gettime'>
7   - <view class="min-rim">
8   - <view class="rq">日期:</view>
9   -
10   - <picker class='pi' mode="date" value='{{datet}}' start="2019/1/1" bindchange='bindDateChenge'>
11   - <view class="rq-rim">
12   - <view class='kssj'><text class="wz"name="datat"value='{{datet}}'bindinput='watchPassWord'>{{datet}}</text></view> -->
13   - <!-- 清除输入框中的内容-->
14   - <!-- <view hidden='{{isBind}}' class="qc-rim">
15   - <button class="empty" catchtap="eliminate">x</button>
16   - </view>
17   - </view>
18   - </picker>
19   -
20   - <view class="zi">至 </view>
21   - <picker class="pi"mode="date" value='{{dates}}' start="2019/1/1" end="" bindchange='bindDateChenges'>
22   - <view class="rim">
23   - <view class="kssj">
24   - <text class='wz' name="datas" value='{{dates}}'>{{dates}}</text>
25   - </view> -->
26   - <!-- 清除输入框中的内容 -->
27   - <!-- <view class="end-rim" hidden="{{isBinds}}">
28   - <button class="end" catchtap="eliminates">x</button>
29   - </view>
30   - </view>
31   - </picker>
32   - </view>
33   - <view class="xknr-rim">
34   - <view class="cxnr">查询内容 </view>
35   - <view class='top'> -->
36   - <!-- 下拉框 -->
37   - <!-- <view class='top-selected' bindtap='bindShowMsg'>
38   - <input name="grade_name" class="texts" value='{{grade_name}}'>{{grade_name}}</input>
39   - <view class="rim-images">
40   - <image class="images" src='{{iurl}}/miniapp/images/usermoney/ico-pt4.png'></image>
41   - </view>
42   - </view> -->
43   - <!-- 下拉需要显示的列表 -->
44   - <!-- <view class="select-box" wx:if="{{select}}">
45   - <view wx:for="{{grades}}" wx:key="unique">
46   - <view class="select_one" bindtap="mySelect" data-name="{{item}}">{{item}}</view>
47   - </view>
48   - </view>
49   - </view>
50   - </view>
51   - <button class="botton" form-type='submit' data-query='{{item}}'>查询明细</button>
52   - </form>
53   -</view> -->
54   -
55   -
56   -<view class="tab-head" bindtap="clickTab">
57   - <view wx:for="{{grades}}" wx:key="unique" class="tab-head-item {{currentIndex == index ? 'active':''}}" data-name="{{item}}" data-index="{{index}}">{{item}}</view>
58   -</view>
59   -
60   -<view class="tab-body">
61   - <block wx:if="{{currentIndex != 3}}">
62   - <view class="tab-list-item" wx:for="{{details}}" wx:for-index="idx" wx:for-item="detail">
63   - <block wx:if="{{detail.isby}}">
64   - <view class="coupon">
65   - <view class="flex">
66   - <view class="c-l"><text class="fs40">包邮券</text></view>
67   - <view class="c-r dash">
68   - <view class="flex jc_sb ai_c">
69   - <view class="pdr20">
70   - <view class="fs28 ellipsis-1x">包邮券</view>
71   - <view class="fs24 c-7b pdt4 ellipsis-1x">微券来源: 微信商城</view>
72   - </view>
73   - <view class="shrink0"><text class="btn {{currentIndex != 0 ? 'gray':''}}" bindtap="{{currentIndex == 0 ? 'clickUse':''}}" data-index="{{idx}}" data-cashrepno="{{detail.no}}">{{filter.showBtnText(currentIndex)}}</text></view>
74   - </view>
75   - <view class="c-time">
76   - <text class="ellipsis-1x" wx:if="{{detail.use_end_time!=null}}">有效期:{{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}} 至 {{time.format_time(detail.use_end_time)}}</text>
77   - <text wx:else>有效期:不限</text>
78   - </view>
79   - </view>
80   - </view>
81   - </view>
82   - <view class="c-info arrow-down {{detail.isShowDetails ? 'active':''}}" bindtap="clickDetails" data-index="{{idx}}">
83   - <text class="{{detail.isShowDetails ? '':'ellipsis-1x'}}">使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?',不包邮地区:'+detail.title:''}}</text>
84   - </view>
85   - </block>
86   -
87   - <block wx:else>
88   - <view class="coupon">
89   - <view class="flex">
90   - <view class="c-l"><text class="rmb fs40">{{filter.getNum(detail.Sum)}}</text></view>
91   - <view class="c-r dash">
92   - <view class="flex jc_sb ai_c">
93   - <view class="pdr20">
94   - <view class="fs28 ellipsis-1x">{{filter.getNum(detail.Sum)}}元微券</view>
95   - <view class="fs24 c-7b pdt4 ellipsis-1x">微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}}</view>
96   - </view>
97   - <view class="shrink0">
98   - <text class="btn {{currentIndex != 0 ? 'gray':''}}" bindtap="{{currentIndex == 0 ? 'clickUse':''}}" data-index="{{idx}}" data-cashrepno="{{detail.CashRepNo}}">{{filter.showBtnText(currentIndex)}}</text>
99   - </view>
100   - </view>
101   - <view class="c-time">
102   - <text wx:if="{{detail.ValidDate}}" class="ellipsis-1x">有效期:{{detail.BeginDate==null ? " " : time.replace_time2(detail.BeginDate)}} 至 {{time.replace_time2(detail.ValidDate)}}</text>
103   - <text wx:else>有效期:不限</text>
104   - </view>
105   - </view>
106   - </view>
107   - </view>
108   - <view class="c-info arrow-down {{detail.isShowDetails ? 'active':''}}" bindtap="clickDetails" data-index="{{idx}}">
109   - <text class="{{detail.isShowDetails ? '':'ellipsis-1x'}}" wx:if="{{detail.Remark1}}">{{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}}</text>
110   - <text class="{{detail.isShowDetails ? '':'ellipsis-1x'}}" wx:else>使用说明: {{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}}</text>
111   - </view>
112   - </block>
113   - </view>
114   - </block>
115   -
116   -
117   - <block wx:else>
118   - <view class="tab-list-item" wx:for="{{result}}" wx:for-item="result">
119   - <view class="coupon2">
120   - <view class="flex">
121   - <view class="c-l"><text class="rmb fs40">{{filter.getNum(result.ToSum)}}</text></view>
122   - <view class="c-r dash">
123   - <view class="flex jc_sb ai_c">
124   - <view class="pdr20">
125   - <view class="fs26 ellipsis-1x breakall">{{result.Integral}}积分兑换{{filter.getNum(result.ToSum)}}元微券</view>
126   - <!-- <view class="fs24 c-7b pdt4 ellipsis-1x">微券来源: 微信商城</view> -->
127   - </view>
128   - <view class="shrink0"><text class="btn2" bindtap="clickExchange" data-index="{{index}}">立即兑换</text></view>
129   - </view>
130   - <!-- <view class="c-time">
131   - <text class="ellipsis-1x" wx:if="{{detail.use_end_time!=null}}">有效期:{{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}}至{{ time.format_time(detail.use_end_time)}}</text>
132   - <text wx:else>有效期:不限</text>
133   - </view> -->
134   - </view>
135   - </view>
136   - </view>
137   - </view>
138   - </block>
139   -
140   - <!-- 暂无数据 -->
141   - <nodata nodataContainer="t-c" wx:if="{{(is_no_more == 1 && current_page == 1) || (result.length == 0)}}"></nodata>
142   -
143   - <block wx:if="{{is_get}}">
144   - <!-- 没有更多数据 -->
145   - <view class="noMore 1" wx:if="{{(is_no_more == 1)||((details.length !== 0) && (pageSize >= (byTotal+wjTotal)))}}">—— 已经到底了 ——</view>
146   - </block>
147   - <view class="noMore 2" wx:if="{{noMore}}">—— 已经到底了 ——</view>
148   -</view>
149   -
150   -<!-- 遮罩层 -->
151   -<view class="mask" hidden="{{!showQr}}"></view>
152   -<!-- 码 -->
153   -<view class="popup-container" hidden="{{!showQr}}">
154   - <view class="t-r pdb20"><text class="iconfont icon-close fs40" bindtap="closeQr"></text></view>
155   - <view class="popup">
156   - <view class="popup-title">
157   - <block wx:if="{{details[useIndex].isby == 1}}">包邮券</block>
158   - <block wx:else>
159   - {{filter.getNum(details[useIndex].Sum)}}元微券
160   - </block>
161   - </view>
162   - <view class="pdt20 c-fe0000"><text class="rmb fs80" wx:if="{{details[useIndex].isby != 1}}">{{filter.getNum(details[useIndex].Sum)}}</text></view>
163   - <!-- <img src="" alt="" class="img-qr"/> -->
164   - <view class="qr-container">
165   - <canvas class="qrcode" canvas-id="qrcode"/>
166   - </view>
167   - <view class="pdt20 pdb10 fs26" wx:if="{{details[useIndex].CashRepNo}}">{{details[useIndex].CashRepNo}}</view>
168   - <view class="pdt20 pdb10 fs26" wx:else>{{details[useIndex].no}}</view>
169   - <view class="pdv30 c-7b fs26 bdt">
170   - <text wx:if="{{details[useIndex].ValidDate}}" class="ellipsis-1x">有效期:{{details[useIndex].BeginDate==null ? " " : time.replace_time2(details[useIndex].BeginDate)}} 至 {{time.replace_time2(details[useIndex].ValidDate)}}</text>
171   - <text wx:elif="{{details[useIndex].use_end_time}}" class="ellipsis-1x">有效期:{{details[useIndex].use_start_time==null ? " " : time.format_time(details[useIndex].use_start_time)}} 至 {{time.format_time(details[useIndex].use_end_time)}}</text>
172   - <text wx:else>有效期:不限</text>
173   - </view>
174   - </view>
175   -</view>
176   -
177   -
178   -<!-- <block wx:for="{{details}}" wx:for-index="idx" wx:for-item="detail">
179   -
180   - <block wx:if="{{detail.isby}}"> -->
181   - <!-- 判断有没有数据有显示没有不显示 -->
182   - <!-- <view class="data" data-cashrepno='{{detail.no}}' bindtap='click'>
183   - <view class="code_rim">
184   - <canvas class="code" canvas-id="qrcode{{idx}}" />
185   - <view class="code_val">{{detail.no}}</view>
186   - </view>
187   -
188   - <view class="moneys">包邮券</view>
189   - <view class="car-rim">
190   - <view class="text">微券来源: 微信商城</view>
191   - <view wx:if="{{detail.use_end_time!=null}}"> -->
192   - <!-- 不指定格式则默认输出:yyyy-MM-dd hh:mm:ss 格式 -->
193   - <!-- <view class="text">有效期:
194   - {{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}}
195   - 至 {{ time.format_time(detail.use_end_time)}}</view>
196   - </view>
197   - <view wx:else>
198   - <view class="text">有效期: 不限</view>
199   - </view>
200   - <view class="textss">使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?",不包邮地区:"+detail.title:""}}
201   - </view>
202   - </view>
203   - </view>
204   -
205   -
206   -
207   - </block>
208   - <block wx:else> -->
209   - <!-- 判断有没有数据有显示没有不显示 -->
210   - <!-- <view class="data" data-cashrepno='{{detail.CashRepNo}}' bindtap='click'>
211   - <view class="code_rim">
212   - <canvas class="code" canvas-id="qrcode{{idx}}" />
213   - <view class="code_val">{{detail.CashRepNo}}</view>
214   - </view>
215   -
216   - <view class="moneys">{{filter.getNum(detail.Sum)}}元微券</view>
217   - <view class="car-rim">
218   - <view class="text">
219   - 微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}}</view>
220   - <view wx:if="{{detail.ValidDate!=null}}"> -->
221   - <!-- 不指定格式则默认输出:yyyy-MM-dd hh:mm:ss 格式 -->
222   - <!-- <view class="text">有效期:
223   - {{detail.BeginDate==null?" " : time.replace_time2(detail.BeginDate)}}
224   - 至 {{ time.replace_time2(detail.ValidDate)}}</view>
225   - </view>
226   - <view wx:else>
227   - <view class="text">有效期: 不限</view>
228   - </view>
229   - <view wx:if="{{detail.Remark1}}" class="textss"> {{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}}</view>
230   - <view wx:else class="textss">使用说明: {{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}}
231   - </view>
232   - </view>
233   - </view>
234   - </block>
235   -</block> -->
236   -
packageB/pages/coupons/query/index.wxss deleted
1   -/* 大边框 */
2   -.big-rim{
3   - margin-top: 15rpx;
4   - width: 100%;
5   - height: 310rpx;
6   -border-bottom: 8px solid #EEEEEE;
7   -}
8   -.min-rim{
9   -display: flex;
10   -width: 100%;
11   -height: auto;
12   -margin-left: 30rpx;
13   -}
14   -
15   -/* 开始时间 */
16   -.kssj{
17   -
18   -display: inline-block;
19   -height: 50rpx;
20   -background-color: #EEEEEE;
21   -border: 1px solid #DADADA;
22   -width:200rpx;
23   -border-radius: 3px;
24   -line-height:40rpx;
25   -}
26   -/* 开始时间的文字 */
27   -.wz{
28   - display: inline-block;
29   -font-size: 25rpx;
30   -color: #333;
31   -}
32   -/* 日期控件 */
33   -.pi{
34   - width:200rpx;
35   - height:auto;
36   - margin-left:20rpx;
37   -
38   -}
39   -
40   -
41   -
42   -/* 查询内容 */
43   -.cxnr{
44   - margin-left:30rpx;
45   - font-size:28rpx;
46   - font-family: 'SimHei',Arial;
47   -}
48   -.rq-rim{
49   -position:relative;
50   -left:0;
51   -top:0;
52   -}
53   -/* 至 */
54   -.zi{
55   -
56   - margin-top:14rpx;
57   - font-size:28rpx;
58   - font-family: 'SimHei',Arial;
59   - margin-left:20rpx;
60   -
61   -}
62   -/* 结束时间 */
63   -
64   -.jssj{
65   - padding-left: 10rpx;
66   - margin-left: 30rpx;
67   -padding-bottom: 10rpx;
68   -height: 35rpx;
69   -font-size: 25rpx;
70   -color: #333;
71   -background-color: #EEEEEE;
72   -border: 1px solid #DADADA;
73   -width:85%;
74   -font-family: 'SimHei',Arial;
75   -border-radius: 3px;
76   -}
77   -/* 查询内容的备考的边框 */
78   -.xknr-rim{
79   - display: flex;
80   - width: 100%;
81   - height: 55rpx;
82   - line-height:105rpx;
83   - margin-top:10rpx;
84   -
85   -}
86   -/* 明细查询 */
87   -.botton{
88   - margin-left: 30rpx;
89   - margin-top: 63rpx;
90   - background-color: #C4182E;
91   - width: 95%;
92   - border-radius:10rpx;
93   - text-align: center;
94   - height: 70rpx;
95   - line-height: 70rpx;
96   - color: #FFF;
97   - font-size: 25rpx;
98   - border: none;
99   - font-family: '微软雅黑';
100   - }
101   - /* 底部边框线
102   - .bottom{
103   - width: 100%;
104   - border-bottom: 20rpx solid #eeeeee;
105   - } */
106   - /* 清空按钮的 边框*/
107   -.qc-rim{
108   - position:absolute;
109   - top:10rpx;
110   - left:175rpx;
111   -}
112   -
113   -/*开始时间清空输入框的按钮*/
114   -.empty{
115   - width: 25rpx;
116   - height: 25rpx;
117   - border-radius:50%;
118   - background: #767676;
119   - color: #fff;
120   - font-size: 25rpx;
121   - text-align: center;
122   - line-height:18rpx;
123   -}
124   -/* 结束时间清空输入框的按钮的边框 */
125   -.end-rim{
126   -position: absolute;
127   - top: 11rpx;
128   - left:173rpx;
129   - width: 25rpx;
130   - height: 25rpx;
131   -}
132   -/*结束时间清空输入框的按钮*/
133   -.end{
134   -
135   - width: 25rpx;
136   - height: 25rpx;
137   - border-radius:50%;
138   - background: #767676;
139   - color: #fff;
140   - font-size: 25rpx;
141   - text-align: center;
142   - line-height:21rpx;
143   -
144   -}
145   -
146   -/* 顶部 */
147   -.top{
148   - width: 200rpx;
149   - height: 50rpx;
150   - padding: 0 10rpx;
151   - line-height: 50rpx;
152   - font-size: 34rpx;
153   - margin-top: 25rpx;
154   -
155   -
156   -}
157   -.images{
158   - width:35rpx;
159   -height:30rpx;
160   -margin-top:10rpx;
161   -margin-left:-14rpx;
162   -
163   -}
164   -.rim-images{
165   - width: 45rpx;
166   - height: 46rpx;
167   - line-height: 37rpx;
168   - /* border-style: inset;padding:4rpx;text-align: center; */
169   - background: #f1f1f1;
170   - border-color:#000000;
171   - border-width: 1rpx;
172   - transform:translateX(28%);
173   - margin-top:-3rpx;
174   -border-radius:5rpx;
175   -
176   -
177   -}
178   -/* 下拉框 */
179   -.top-selected{
180   - width: 100%;
181   - display: flex;
182   - align-items: center;
183   - justify-content: space-between;
184   - border: 1px solid #ccc;
185   - padding: 0 10rpx;
186   - font-size: 30rpx;
187   - background:#eeeeee;
188   - height:50rpx;
189   - border-radius:6rpx;
190   -}
191   -.texts{
192   - margin:0 auto;
193   - font-size: 25rpx;
194   -
195   -}
196   -/* 下拉内容 */
197   -.select-box {
198   - background-color: #eeeeee;
199   - width:225rpx;
200   - position: relative;
201   - z-index:1;
202   - overflow: hidden;
203   - text-align: left;
204   - animation: myfirst 0.5s;
205   - font-size: 25rpx;
206   -}
207   -.select_one {
208   - padding-left: 20rpx;
209   - width: 100%;
210   - height: 60rpx;
211   - line-height: 60rpx;
212   -}
213   -/* 优惠券样式 */
214   -.body{
215   - text-align: center;
216   - padding: 20rpx;
217   - margin: 20rpx auto;
218   - width: 80%;
219   - max-width: 1000rpx;
220   - font-size: 28rpx;
221   - color: #333333;
222   - border-bottom: 2rpx solid #EEEEEE;
223   -}
224   -
225   -.b_iimg{
226   - background-color: red;
227   - width: 400rpx;
228   - height: 400rpx;
229   -}
230   -
231   -.b_sz2{
232   - font-size: 40rpx;
233   - color: #6fd137;
234   - margin: 20rpx 0;
235   - text-align: center;
236   -}
237   -/* 二维码列表查询 */
238   -/* 列表数据*/
239   -.data{
240   - width: 80%;
241   -
242   - height:auto;
243   - margin-left:80rpx;
244   -
245   -}
246   -.rim{
247   - position: relative;
248   - top:0rpx;
249   - left: 0rpx;
250   -}
251   -/* 二维码边框 */
252   -.code_rim{
253   - width: 100%;
254   - height: auto;
255   - text-align: center;
256   - font-size: 25rpx;
257   - padding-top: -30rpx;
258   - margin-top:-20rpx;
259   -padding-left:45rpx;
260   -
261   -}
262   -
263   -/* 二维码 */
264   -.code{
265   - height: 520rpx;
266   - display: flex;
267   - flex-direction: column;
268   - justify-content: flex-end;
269   - align-items: center;
270   - margin-left:40rpx;
271   -
272   -}
273   -.car-rim{
274   -width:98%;
275   -height:177rpx;
276   -text-align:center;
277   -border-bottom:2rpx solid #eee;
278   -margin-left:22rpx;
279   -
280   -}
281   -/* 二维码值 */
282   -.code_val{
283   - margin-top:-104rpx;
284   -margin-left:-59rpx;
285   -color:#999999;
286   -
287   -}
288   -/* 金额 */
289   -.moneys{
290   - margin-top:20rpx;
291   - height: 47rpx;
292   - width: 100%;
293   - color:#6fd137;
294   - text-align: center;
295   - font-size: 38rpx;
296   - font-family: 'SimHei',Arial;
297   - margin-bottom:20rpx;
298   - margin-left:11rpx;
299   -
300   -}
301   -/* 文字 */
302   -.text{
303   - width: 100%;
304   - font-size: 25rpx;
305   - text-align: center;
306   -
307   - height: 41rpx;
308   - color: #999999;
309   -}
310   -/* 二维码和条形码的边框 */
311   -.barqrcode{
312   - width: 100%;
313   - height: auto;
314   - margin-top:50rpx;
315   -
316   -}
317   -/* 日期 */
318   -.rq{
319   - height: 25rpx;
320   - font-size: 28rpx;
321   - margin-top:12rpx;
322   - font-family:'SimHei',Arial;
323   -}
324   -/* 点击条形 */
325   -.barcode {
326   - height: 320rpx;
327   - flex-direction: column;
328   - justify-content: center;
329   - align-items: center;
330   - margin-left: 30rpx;
331   -}
332   -/* 二维码边框*/
333   -.qrcode_rim {
334   - width: 100%;
335   - height: 420rpx;
336   - display: flex;
337   - flex-direction: column;
338   - justify-content: flex-end;
339   - align-items: center;
340   - margin-left: 80rpx;
341   - margin-top:-210rpx;
342   -
343   -}
344   -.qrcode{
345   - /* margin-left: 100rpx; */
346   -}
347   -/* 使用说明 */
348   -.textss{
349   - width: 100%;
350   - font-size: 25rpx;
351   - text-align: center;
352   -
353   - min-height: 47rpx;
354   - height:auto;
355   - color: #999999;
356   -}
357   -
358   -
359   -
360   -
361   -
362   -
363   -page {
364   - background-color: #f0f0f0;
365   - scroll-behavior: smooth;
366   -}
367   -
368   -.c-fe0000 {
369   - color: #fe0000;
370   -}
371   -
372   -.tab-head {
373   - display: flex;
374   - position: sticky;
375   - top: 0;
376   - background-color: white;
377   - font-size: 28rpx;
378   - z-index: 2;
379   -}
380   -
381   -.tab-head-item {
382   - flex: 1;
383   - text-align: center;
384   - padding: 30rpx 0;
385   - position: relative;
386   -}
387   -
388   -.tab-head-item.active {
389   - color: #fe0000;
390   -}
391   -
392   -.tab-head-item.active::after {
393   - content: '';
394   - width: 60%;
395   - height: 2rpx;
396   - background-color: #fe0000;
397   - position: absolute;
398   - bottom: 0;
399   - left: 50%;
400   - transform: translateX(-50%);
401   -}
402   -
403   -.tab-body {
404   - padding: 0 20rpx;
405   - overflow: hidden;
406   -}
407   -
408   - .tab-list-item {
409   - border-radius: 10rpx;
410   - overflow: hidden;
411   - margin-top: 30rpx;
412   - }
413   -
414   -
415   -
416   -.coupon {
417   - position: relative;
418   -
419   - background: radial-gradient(transparent 0, #FFD3D6 0) top left / 200rpx no-repeat,
420   - radial-gradient(transparent 6px, #fff 0),
421   - radial-gradient(transparent 6px, #fff 0);
422   -}
423   -
424   -
425   -.coupon::after {
426   - content: '';
427   - position: absolute;
428   - height: 100%;
429   - width:4px;
430   - top: 0;
431   - left: 0;
432   - background-image: linear-gradient(to bottom, #FFD3D6 4px, transparent 4px, transparent),
433   - radial-gradient(4px circle at 0px 8px, #f0f0f0 4px, #FFD3D6 4px);
434   - background-size: 4px 12px;
435   - background-repeat: repeat-y;
436   - }
437   -
438   -
439   - .coupon2 {
440   - /* width: 300px; */
441   - padding: 40rpx 0;
442   - position: relative;
443   - background: radial-gradient(circle at right top, transparent 16rpx, #FFD3D6 0) top left / 200rpx 51% no-repeat,
444   - radial-gradient(circle at right bottom, transparent 16rpx, #FFD3D6 0) bottom left /200rpx 51% no-repeat,
445   - radial-gradient(circle at left top, transparent 16rpx, white 0) top right /calc(100% - 200rpx) 51% no-repeat,
446   - radial-gradient(circle at left bottom, transparent 16rpx, white 0) bottom right /calc(100% - 200rpx) 51% no-repeat;
447   - /* filter: drop-shadow(2px 2px 2px rgba(0,0,0,.2)); */
448   - }
449   -
450   - .coupon2::after {
451   - content: '';
452   - height: 70%;
453   - border: 2rpx dashed #fff;
454   - position: absolute;
455   - left: 198rpx;
456   - top: 0;
457   - bottom: 0;
458   - margin: auto;
459   - }
460   -
461   -/* .coupon2 .c-l,
462   - .coupon2 .c-r {
463   - border: 2rpx solid red;
464   - padding: 20rpx 0;
465   - } */
466   -
467   -
468   -
469   - .c-l {
470   - color: #fe0000;
471   - width: 200rpx;
472   - display: flex;
473   - align-items: center;
474   - justify-content: center;
475   - flex-shrink: 0;
476   - }
477   -
478   - .rmb::before {
479   - content: '¥';
480   - font-size: 28rpx;
481   - }
482   -
483   - .c-r {
484   - box-sizing: border-box;
485   - padding: 20rpx;
486   - flex: 1;
487   - }
488   -
489   - .c-time {
490   - color: #7b7b7b;
491   - font-size: 24rpx;
492   - padding-top: 10rpx;
493   - word-break: break-all;
494   - }
495   -
496   - .btn, .btn2 {
497   - font-size: 26rpx;
498   - padding: 10rpx 20rpx;
499   - border: 2rpx solid #fe0000;
500   - border-radius: 30rpx;
501   - flex-shrink: 0;
502   - }
503   -
504   - .btn {
505   - color: #fe0000;
506   - }
507   -
508   - .btn.gray {
509   - color: #ccc;
510   - border-color: #ccc;
511   - }
512   -
513   - .btn2 {
514   - color: white;
515   - background-color: #fe0000;
516   - }
517   -
518   - .c-info {
519   - border-top: 2rpx dashed #f0f0f0;
520   - padding: 10rpx 40rpx 10rpx 10rpx;
521   - font-size: 22rpx;
522   - background-color: #fefefe;
523   - color: #7b7b7b;
524   - position: relative;
525   - }
526   -
527   - .arrow-down::after {
528   - font-family: iconfont;
529   - content: '\e600';
530   - font-size: 32rpx;
531   - position: absolute;
532   - right: 10rpx;
533   - top: 10rpx;
534   - /* transform: translateY(-50%); */
535   - transition: all 0.3s;
536   - }
537   -
538   - .arrow-down.active::after {
539   - transform: rotateZ(180deg);
540   - }
541   -
542   - .mask {
543   - position: fixed;
544   - width: 100%;
545   - height: 100%;
546   - top: 0;
547   - background-color: rgba(0,0,0,.7);
548   - z-index: 1;
549   - }
550   -
551   - .popup-container {
552   - position: fixed;
553   - width: 70%;
554   - border-radius: 12rpx;
555   - top: 50%;
556   - left: 50%;
557   - transform: translate(-50%, -50%);
558   - z-index: 3;
559   - }
560   -
561   - .popup {
562   - text-align: center;
563   - border-radius: 12rpx;
564   - background-color: white;
565   - overflow: hidden;
566   - /* width: 80%; */
567   - }
568   -
569   - .popup-container .icon-close {
570   - color: rgba(255,255,255,.6);
571   - }
572   -
573   - .popup-title {
574   - padding: 40rpx 0;
575   - color: #fe0000;
576   - background-color: #FFD3D6;
577   - position: relative;
578   - }
579   -
580   - .popup-title::after {
581   - content: '';
582   - position: absolute;
583   - left: -20rpx;
584   - bottom: -12rpx;
585   - width: 130%;
586   - height: 20rpx;
587   - background-image: -webkit-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent);
588   - background-image: -moz-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent);
589   - background-image: radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent);
590   - background-size: 40rpx 40rpx;
591   - transform: rotate(180deg);
592   - -webkit-transform: rotate(180deg);
593   - }
594   -
595   -
596   - .popup .rmb::before {
597   - font-size: 40rpx;
598   - }
599   -
600   - .img-qr {
601   - display: block;
602   - width: 300rpx;
603   - height: 300rpx;
604   - margin: 0 auto;
605   - background-color: pink;
606   - }
607   -
608   - .qrcode {
609   - width: 300rpx;
610   - height: 300rpx;
611   - margin: 0 auto;
612   - }
613   -
614   -
615   - .noMore {
616   - padding: 20rpx;
617   - color: #bbb;
618   - text-align: center;
619   - font-size: 22rpx;
620   - }
621   -
622   - .breakall {
623   - word-break: break-all;
624   - }
625   -
626   -
627   -
628   -
629   -
630   -
631   -
632   -
633   -
634   -
635   -
636   -
637   -
638   -
639   -
640   -
pages/user/coupons/code.js deleted
1   -var CHAR_TILDE = 126;
2   -var CODE_FNC1 = 102;
3   -
4   -var SET_STARTA = 103;
5   -var SET_STARTB = 104;
6   -var SET_STARTC = 105;
7   -var SET_SHIFT = 98;
8   -var SET_CODEA = 101;
9   -var SET_CODEB = 100;
10   -var SET_STOP = 106;
11   -
12   -
13   -var REPLACE_CODES = {
14   - CHAR_TILDE: CODE_FNC1 //~ corresponds to FNC1 in GS1-128 standard
15   -}
16   -
17   -var CODESET = {
18   - ANY: 1,
19   - AB: 2,
20   - A: 3,
21   - B: 4,
22   - C: 5
23   -};
24   -
25   -function getBytes(str) {
26   - var bytes = [];
27   - for (var i = 0; i < str.length; i++) {
28   - bytes.push(str.charCodeAt(i));
29   - }
30   - return bytes;
31   -}
32   -
33   -exports.code128 = function (ctx, text, width, height) {
34   -
35   - width = parseInt(width);
36   -
37   - height = parseInt(height);
38   -
39   - var codes = stringToCode128(text);
40   -
41   - var g = new Graphics(ctx, width, height);
42   -
43   - var barWeight = g.area.width / ((codes.length - 3) * 11 + 35);
44   -
45   - var x = g.area.left;
46   - var y = g.area.top;
47   - for (var i = 0; i < codes.length; i++) {
48   - var c = codes[i];
49   - //two bars at a time: 1 black and 1 white
50   - for (var bar = 0; bar < 8; bar += 2) {
51   - var barW = PATTERNS[c][bar] * barWeight;
52   - // var barH = height - y - this.border;
53   - var barH = height - y;
54   - var spcW = PATTERNS[c][bar + 1] * barWeight;
55   -
56   - //no need to draw if 0 width
57   - if (barW > 0) {
58   - g.fillFgRect(x, y, barW, barH);
59   - }
60   -
61   - x += barW + spcW;
62   - }
63   - }
64   -
65   - ctx.draw();
66   -}
67   -
68   -
69   -function stringToCode128(text) {
70   -
71   - var barc = {
72   - currcs: CODESET.C
73   - };
74   -
75   - var bytes = getBytes(text);
76   - //decide starting codeset
77   - var index = bytes[0] == CHAR_TILDE ? 1 : 0;
78   -
79   - var csa1 = bytes.length > 0 ? codeSetAllowedFor(bytes[index++]) : CODESET.AB;
80   - var csa2 = bytes.length > 0 ? codeSetAllowedFor(bytes[index++]) : CODESET.AB;
81   - barc.currcs = getBestStartSet(csa1, csa2);
82   - barc.currcs = perhapsCodeC(bytes, barc.currcs);
83   -
84   - //if no codeset changes this will end up with bytes.length+3
85   - //start, checksum and stop
86   - var codes = new Array();
87   -
88   - switch (barc.currcs) {
89   - case CODESET.A:
90   - codes.push(SET_STARTA);
91   - break;
92   - case CODESET.B:
93   - codes.push(SET_STARTB);
94   - break;
95   - default:
96   - codes.push(SET_STARTC);
97   - break;
98   - }
99   -
100   -
101   - for (var i = 0; i < bytes.length; i++) {
102   - var b1 = bytes[i]; //get the first of a pair
103   - //should we translate/replace
104   - if (b1 in REPLACE_CODES) {
105   - codes.push(REPLACE_CODES[b1]);
106   - i++ //jump to next
107   - b1 = bytes[i];
108   - }
109   -
110   - //get the next in the pair if possible
111   - var b2 = bytes.length > (i + 1) ? bytes[i + 1] : -1;
112   -
113   - codes = codes.concat(codesForChar(b1, b2, barc.currcs));
114   - //code C takes 2 chars each time
115   - if (barc.currcs == CODESET.C) i++;
116   - }
117   -
118   - //calculate checksum according to Code 128 standards
119   - var checksum = codes[0];
120   - for (var weight = 1; weight < codes.length; weight++) {
121   - checksum += (weight * codes[weight]);
122   - }
123   - codes.push(checksum % 103);
124   -
125   - codes.push(SET_STOP);
126   -
127   - //encoding should now be complete
128   - return codes;
129   -
130   - function getBestStartSet(csa1, csa2) {
131   - //tries to figure out the best codeset
132   - //to start with to get the most compact code
133   - var vote = 0;
134   - vote += csa1 == CODESET.A ? 1 : 0;
135   - vote += csa1 == CODESET.B ? -1 : 0;
136   - vote += csa2 == CODESET.A ? 1 : 0;
137   - vote += csa2 == CODESET.B ? -1 : 0;
138   - //tie goes to B due to my own predudices
139   - return vote > 0 ? CODESET.A : CODESET.B;
140   - }
141   -
142   - function perhapsCodeC(bytes, codeset) {
143   - for (var i = 0; i < bytes.length; i++) {
144   - var b = bytes[i]
145   - if ((b < 48 || b > 57) && b != CHAR_TILDE)
146   - return codeset;
147   - }
148   - return CODESET.C;
149   - }
150   -
151   - //chr1 is current byte
152   - //chr2 is the next byte to process. looks ahead.
153   - function codesForChar(chr1, chr2, currcs) {
154   - var result = [];
155   - var shifter = -1;
156   -
157   - if (charCompatible(chr1, currcs)) {
158   - if (currcs == CODESET.C) {
159   - if (chr2 == -1) {
160   - shifter = SET_CODEB;
161   - currcs = CODESET.B;
162   - }
163   - else if ((chr2 != -1) && !charCompatible(chr2, currcs)) {
164   - //need to check ahead as well
165   - if (charCompatible(chr2, CODESET.A)) {
166   - shifter = SET_CODEA;
167   - currcs = CODESET.A;
168   - }
169   - else {
170   - shifter = SET_CODEB;
171   - currcs = CODESET.B;
172   - }
173   - }
174   - }
175   - }
176   - else {
177   - //if there is a next char AND that next char is also not compatible
178   - if ((chr2 != -1) && !charCompatible(chr2, currcs)) {
179   - //need to switch code sets
180   - switch (currcs) {
181   - case CODESET.A:
182   - shifter = SET_CODEB;
183   - currcs = CODESET.B;
184   - break;
185   - case CODESET.B:
186   - shifter = SET_CODEA;
187   - currcs = CODESET.A;
188   - break;
189   - }
190   - }
191   - else {
192   - //no need to shift code sets, a temporary SHIFT will suffice
193   - shifter = SET_SHIFT;
194   - }
195   - }
196   -
197   - //ok some type of shift is nessecary
198   - if (shifter != -1) {
199   - result.push(shifter);
200   - result.push(codeValue(chr1));
201   - }
202   - else {
203   - if (currcs == CODESET.C) {
204   - //include next as well
205   - result.push(codeValue(chr1, chr2));
206   - }
207   - else {
208   - result.push(codeValue(chr1));
209   - }
210   - }
211   - barc.currcs = currcs;
212   -
213   - return result;
214   - }
215   -}
216   -
217   -//reduce the ascii code to fit into the Code128 char table
218   -function codeValue(chr1, chr2) {
219   - if (typeof chr2 == "undefined") {
220   - return chr1 >= 32 ? chr1 - 32 : chr1 + 64;
221   - }
222   - else {
223   - return parseInt(String.fromCharCode(chr1) + String.fromCharCode(chr2));
224   - }
225   -}
226   -
227   -function charCompatible(chr, codeset) {
228   - var csa = codeSetAllowedFor(chr);
229   - if (csa == CODESET.ANY) return true;
230   - //if we need to change from current
231   - if (csa == CODESET.AB) return true;
232   - if (csa == CODESET.A && codeset == CODESET.A) return true;
233   - if (csa == CODESET.B && codeset == CODESET.B) return true;
234   - return false;
235   -}
236   -
237   -function codeSetAllowedFor(chr) {
238   - if (chr >= 48 && chr <= 57) {
239   - //0-9
240   - return CODESET.ANY;
241   - }
242   - else if (chr >= 32 && chr <= 95) {
243   - //0-9 A-Z
244   - return CODESET.AB;
245   - }
246   - else {
247   - //if non printable
248   - return chr < 32 ? CODESET.A : CODESET.B;
249   - }
250   -}
251   -
252   -var Graphics = function (ctx, width, height) {
253   -
254   - this.width = width;
255   - this.height = height;
256   - this.quiet = Math.round(this.width / 40);
257   -
258   - this.border_size = 0;
259   - this.padding_width = 0;
260   -
261   - this.area = {
262   - width: width - this.padding_width * 2 - this.quiet * 2,
263   - height: height - this.border_size * 2,
264   - top: this.border_size - 4,
265   - left: this.padding_width + this.quiet
266   - };
267   -
268   - this.ctx = ctx;
269   - this.fg = "#000000";
270   - this.bg = "#ffffff";
271   -
272   - // fill background
273   - this.fillBgRect(0, 0, width, height);
274   -
275   - // fill center to create border
276   - this.fillBgRect(0, this.border_size, width, height - this.border_size * 2);
277   -}
278   -
279   -//use native color
280   -Graphics.prototype._fillRect = function (x, y, width, height, color) {
281   - this.ctx.setFillStyle(color)
282   - this.ctx.fillRect(x, y, width, height)
283   -}
284   -
285   -Graphics.prototype.fillFgRect = function (x, y, width, height) {
286   - this._fillRect(x, y, width, height, this.fg);
287   -}
288   -
289   -Graphics.prototype.fillBgRect = function (x, y, width, height) {
290   - this._fillRect(x, y, width, height, this.bg);
291   -}
292   -
293   -var PATTERNS = [
294   - [2, 1, 2, 2, 2, 2, 0, 0], // 0
295   - [2, 2, 2, 1, 2, 2, 0, 0], // 1
296   - [2, 2, 2, 2, 2, 1, 0, 0], // 2
297   - [1, 2, 1, 2, 2, 3, 0, 0], // 3
298   - [1, 2, 1, 3, 2, 2, 0, 0], // 4
299   - [1, 3, 1, 2, 2, 2, 0, 0], // 5
300   - [1, 2, 2, 2, 1, 3, 0, 0], // 6
301   - [1, 2, 2, 3, 1, 2, 0, 0], // 7
302   - [1, 3, 2, 2, 1, 2, 0, 0], // 8
303   - [2, 2, 1, 2, 1, 3, 0, 0], // 9
304   - [2, 2, 1, 3, 1, 2, 0, 0], // 10
305   - [2, 3, 1, 2, 1, 2, 0, 0], // 11
306   - [1, 1, 2, 2, 3, 2, 0, 0], // 12
307   - [1, 2, 2, 1, 3, 2, 0, 0], // 13
308   - [1, 2, 2, 2, 3, 1, 0, 0], // 14
309   - [1, 1, 3, 2, 2, 2, 0, 0], // 15
310   - [1, 2, 3, 1, 2, 2, 0, 0], // 16
311   - [1, 2, 3, 2, 2, 1, 0, 0], // 17
312   - [2, 2, 3, 2, 1, 1, 0, 0], // 18
313   - [2, 2, 1, 1, 3, 2, 0, 0], // 19
314   - [2, 2, 1, 2, 3, 1, 0, 0], // 20
315   - [2, 1, 3, 2, 1, 2, 0, 0], // 21
316   - [2, 2, 3, 1, 1, 2, 0, 0], // 22
317   - [3, 1, 2, 1, 3, 1, 0, 0], // 23
318   - [3, 1, 1, 2, 2, 2, 0, 0], // 24
319   - [3, 2, 1, 1, 2, 2, 0, 0], // 25
320   - [3, 2, 1, 2, 2, 1, 0, 0], // 26
321   - [3, 1, 2, 2, 1, 2, 0, 0], // 27
322   - [3, 2, 2, 1, 1, 2, 0, 0], // 28
323   - [3, 2, 2, 2, 1, 1, 0, 0], // 29
324   - [2, 1, 2, 1, 2, 3, 0, 0], // 30
325   - [2, 1, 2, 3, 2, 1, 0, 0], // 31
326   - [2, 3, 2, 1, 2, 1, 0, 0], // 32
327   - [1, 1, 1, 3, 2, 3, 0, 0], // 33
328   - [1, 3, 1, 1, 2, 3, 0, 0], // 34
329   - [1, 3, 1, 3, 2, 1, 0, 0], // 35
330   - [1, 1, 2, 3, 1, 3, 0, 0], // 36
331   - [1, 3, 2, 1, 1, 3, 0, 0], // 37
332   - [1, 3, 2, 3, 1, 1, 0, 0], // 38
333   - [2, 1, 1, 3, 1, 3, 0, 0], // 39
334   - [2, 3, 1, 1, 1, 3, 0, 0], // 40
335   - [2, 3, 1, 3, 1, 1, 0, 0], // 41
336   - [1, 1, 2, 1, 3, 3, 0, 0], // 42
337   - [1, 1, 2, 3, 3, 1, 0, 0], // 43
338   - [1, 3, 2, 1, 3, 1, 0, 0], // 44
339   - [1, 1, 3, 1, 2, 3, 0, 0], // 45
340   - [1, 1, 3, 3, 2, 1, 0, 0], // 46
341   - [1, 3, 3, 1, 2, 1, 0, 0], // 47
342   - [3, 1, 3, 1, 2, 1, 0, 0], // 48
343   - [2, 1, 1, 3, 3, 1, 0, 0], // 49
344   - [2, 3, 1, 1, 3, 1, 0, 0], // 50
345   - [2, 1, 3, 1, 1, 3, 0, 0], // 51
346   - [2, 1, 3, 3, 1, 1, 0, 0], // 52
347   - [2, 1, 3, 1, 3, 1, 0, 0], // 53
348   - [3, 1, 1, 1, 2, 3, 0, 0], // 54
349   - [3, 1, 1, 3, 2, 1, 0, 0], // 55
350   - [3, 3, 1, 1, 2, 1, 0, 0], // 56
351   - [3, 1, 2, 1, 1, 3, 0, 0], // 57
352   - [3, 1, 2, 3, 1, 1, 0, 0], // 58
353   - [3, 3, 2, 1, 1, 1, 0, 0], // 59
354   - [3, 1, 4, 1, 1, 1, 0, 0], // 60
355   - [2, 2, 1, 4, 1, 1, 0, 0], // 61
356   - [4, 3, 1, 1, 1, 1, 0, 0], // 62
357   - [1, 1, 1, 2, 2, 4, 0, 0], // 63
358   - [1, 1, 1, 4, 2, 2, 0, 0], // 64
359   - [1, 2, 1, 1, 2, 4, 0, 0], // 65
360   - [1, 2, 1, 4, 2, 1, 0, 0], // 66
361   - [1, 4, 1, 1, 2, 2, 0, 0], // 67
362   - [1, 4, 1, 2, 2, 1, 0, 0], // 68
363   - [1, 1, 2, 2, 1, 4, 0, 0], // 69
364   - [1, 1, 2, 4, 1, 2, 0, 0], // 70
365   - [1, 2, 2, 1, 1, 4, 0, 0], // 71
366   - [1, 2, 2, 4, 1, 1, 0, 0], // 72
367   - [1, 4, 2, 1, 1, 2, 0, 0], // 73
368   - [1, 4, 2, 2, 1, 1, 0, 0], // 74
369   - [2, 4, 1, 2, 1, 1, 0, 0], // 75
370   - [2, 2, 1, 1, 1, 4, 0, 0], // 76
371   - [4, 1, 3, 1, 1, 1, 0, 0], // 77
372   - [2, 4, 1, 1, 1, 2, 0, 0], // 78
373   - [1, 3, 4, 1, 1, 1, 0, 0], // 79
374   - [1, 1, 1, 2, 4, 2, 0, 0], // 80
375   - [1, 2, 1, 1, 4, 2, 0, 0], // 81
376   - [1, 2, 1, 2, 4, 1, 0, 0], // 82
377   - [1, 1, 4, 2, 1, 2, 0, 0], // 83
378   - [1, 2, 4, 1, 1, 2, 0, 0], // 84
379   - [1, 2, 4, 2, 1, 1, 0, 0], // 85
380   - [4, 1, 1, 2, 1, 2, 0, 0], // 86
381   - [4, 2, 1, 1, 1, 2, 0, 0], // 87
382   - [4, 2, 1, 2, 1, 1, 0, 0], // 88
383   - [2, 1, 2, 1, 4, 1, 0, 0], // 89
384   - [2, 1, 4, 1, 2, 1, 0, 0], // 90
385   - [4, 1, 2, 1, 2, 1, 0, 0], // 91
386   - [1, 1, 1, 1, 4, 3, 0, 0], // 92
387   - [1, 1, 1, 3, 4, 1, 0, 0], // 93
388   - [1, 3, 1, 1, 4, 1, 0, 0], // 94
389   - [1, 1, 4, 1, 1, 3, 0, 0], // 95
390   - [1, 1, 4, 3, 1, 1, 0, 0], // 96
391   - [4, 1, 1, 1, 1, 3, 0, 0], // 97
392   - [4, 1, 1, 3, 1, 1, 0, 0], // 98
393   - [1, 1, 3, 1, 4, 1, 0, 0], // 99
394   - [1, 1, 4, 1, 3, 1, 0, 0], // 100
395   - [3, 1, 1, 1, 4, 1, 0, 0], // 101
396   - [4, 1, 1, 1, 3, 1, 0, 0], // 102
397   - [2, 1, 1, 4, 1, 2, 0, 0], // 103
398   - [2, 1, 1, 2, 1, 4, 0, 0], // 104
399   - [2, 1, 1, 2, 3, 2, 0, 0], // 105
400   - [2, 3, 3, 1, 1, 1, 2, 0] // 106
401   -]
402   -var QR = (function () {
403   -
404   - // alignment pattern
405   - var adelta = [
406   - 0, 11, 15, 19, 23, 27, 31, // force 1 pat
407   - 16, 18, 20, 22, 24, 26, 28, 20, 22, 24, 24, 26, 28, 28, 22, 24, 24,
408   - 26, 26, 28, 28, 24, 24, 26, 26, 26, 28, 28, 24, 26, 26, 26, 28, 28
409   - ];
410   -
411   - // version block
412   - var vpat = [
413   - 0xc94, 0x5bc, 0xa99, 0x4d3, 0xbf6, 0x762, 0x847, 0x60d,
414   - 0x928, 0xb78, 0x45d, 0xa17, 0x532, 0x9a6, 0x683, 0x8c9,
415   - 0x7ec, 0xec4, 0x1e1, 0xfab, 0x08e, 0xc1a, 0x33f, 0xd75,
416   - 0x250, 0x9d5, 0x6f0, 0x8ba, 0x79f, 0xb0b, 0x42e, 0xa64,
417   - 0x541, 0xc69
418   - ];
419   -
420   - // final format bits with mask: level << 3 | mask
421   - var fmtword = [
422   - 0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976, //L
423   - 0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0, //M
424   - 0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed, //Q
425   - 0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b //H
426   - ];
427   -
428   - // 4 per version: number of blocks 1,2; data width; ecc width
429   - var eccblocks = [
430   - 1, 0, 19, 7, 1, 0, 16, 10, 1, 0, 13, 13, 1, 0, 9, 17,
431   - 1, 0, 34, 10, 1, 0, 28, 16, 1, 0, 22, 22, 1, 0, 16, 28,
432   - 1, 0, 55, 15, 1, 0, 44, 26, 2, 0, 17, 18, 2, 0, 13, 22,
433   - 1, 0, 80, 20, 2, 0, 32, 18, 2, 0, 24, 26, 4, 0, 9, 16,
434   - 1, 0, 108, 26, 2, 0, 43, 24, 2, 2, 15, 18, 2, 2, 11, 22,
435   - 2, 0, 68, 18, 4, 0, 27, 16, 4, 0, 19, 24, 4, 0, 15, 28,
436   - 2, 0, 78, 20, 4, 0, 31, 18, 2, 4, 14, 18, 4, 1, 13, 26,
437   - 2, 0, 97, 24, 2, 2, 38, 22, 4, 2, 18, 22, 4, 2, 14, 26,
438   - 2, 0, 116, 30, 3, 2, 36, 22, 4, 4, 16, 20, 4, 4, 12, 24,
439   - 2, 2, 68, 18, 4, 1, 43, 26, 6, 2, 19, 24, 6, 2, 15, 28,
440   - 4, 0, 81, 20, 1, 4, 50, 30, 4, 4, 22, 28, 3, 8, 12, 24,
441   - 2, 2, 92, 24, 6, 2, 36, 22, 4, 6, 20, 26, 7, 4, 14, 28,
442   - 4, 0, 107, 26, 8, 1, 37, 22, 8, 4, 20, 24, 12, 4, 11, 22,
443   - 3, 1, 115, 30, 4, 5, 40, 24, 11, 5, 16, 20, 11, 5, 12, 24,
444   - 5, 1, 87, 22, 5, 5, 41, 24, 5, 7, 24, 30, 11, 7, 12, 24,
445   - 5, 1, 98, 24, 7, 3, 45, 28, 15, 2, 19, 24, 3, 13, 15, 30,
446   - 1, 5, 107, 28, 10, 1, 46, 28, 1, 15, 22, 28, 2, 17, 14, 28,
447   - 5, 1, 120, 30, 9, 4, 43, 26, 17, 1, 22, 28, 2, 19, 14, 28,
448   - 3, 4, 113, 28, 3, 11, 44, 26, 17, 4, 21, 26, 9, 16, 13, 26,
449   - 3, 5, 107, 28, 3, 13, 41, 26, 15, 5, 24, 30, 15, 10, 15, 28,
450   - 4, 4, 116, 28, 17, 0, 42, 26, 17, 6, 22, 28, 19, 6, 16, 30,
451   - 2, 7, 111, 28, 17, 0, 46, 28, 7, 16, 24, 30, 34, 0, 13, 24,
452   - 4, 5, 121, 30, 4, 14, 47, 28, 11, 14, 24, 30, 16, 14, 15, 30,
453   - 6, 4, 117, 30, 6, 14, 45, 28, 11, 16, 24, 30, 30, 2, 16, 30,
454   - 8, 4, 106, 26, 8, 13, 47, 28, 7, 22, 24, 30, 22, 13, 15, 30,
455   - 10, 2, 114, 28, 19, 4, 46, 28, 28, 6, 22, 28, 33, 4, 16, 30,
456   - 8, 4, 122, 30, 22, 3, 45, 28, 8, 26, 23, 30, 12, 28, 15, 30,
457   - 3, 10, 117, 30, 3, 23, 45, 28, 4, 31, 24, 30, 11, 31, 15, 30,
458   - 7, 7, 116, 30, 21, 7, 45, 28, 1, 37, 23, 30, 19, 26, 15, 30,
459   - 5, 10, 115, 30, 19, 10, 47, 28, 15, 25, 24, 30, 23, 25, 15, 30,
460   - 13, 3, 115, 30, 2, 29, 46, 28, 42, 1, 24, 30, 23, 28, 15, 30,
461   - 17, 0, 115, 30, 10, 23, 46, 28, 10, 35, 24, 30, 19, 35, 15, 30,
462   - 17, 1, 115, 30, 14, 21, 46, 28, 29, 19, 24, 30, 11, 46, 15, 30,
463   - 13, 6, 115, 30, 14, 23, 46, 28, 44, 7, 24, 30, 59, 1, 16, 30,
464   - 12, 7, 121, 30, 12, 26, 47, 28, 39, 14, 24, 30, 22, 41, 15, 30,
465   - 6, 14, 121, 30, 6, 34, 47, 28, 46, 10, 24, 30, 2, 64, 15, 30,
466   - 17, 4, 122, 30, 29, 14, 46, 28, 49, 10, 24, 30, 24, 46, 15, 30,
467   - 4, 18, 122, 30, 13, 32, 46, 28, 48, 14, 24, 30, 42, 32, 15, 30,
468   - 20, 4, 117, 30, 40, 7, 47, 28, 43, 22, 24, 30, 10, 67, 15, 30,
469   - 19, 6, 118, 30, 18, 31, 47, 28, 34, 34, 24, 30, 20, 61, 15, 30
470   - ];
471   -
472   - // Galois field log table
473   - var glog = [
474   - 0xff, 0x00, 0x01, 0x19, 0x02, 0x32, 0x1a, 0xc6, 0x03, 0xdf, 0x33, 0xee, 0x1b, 0x68, 0xc7, 0x4b,
475   - 0x04, 0x64, 0xe0, 0x0e, 0x34, 0x8d, 0xef, 0x81, 0x1c, 0xc1, 0x69, 0xf8, 0xc8, 0x08, 0x4c, 0x71,
476   - 0x05, 0x8a, 0x65, 0x2f, 0xe1, 0x24, 0x0f, 0x21, 0x35, 0x93, 0x8e, 0xda, 0xf0, 0x12, 0x82, 0x45,
477   - 0x1d, 0xb5, 0xc2, 0x7d, 0x6a, 0x27, 0xf9, 0xb9, 0xc9, 0x9a, 0x09, 0x78, 0x4d, 0xe4, 0x72, 0xa6,
478   - 0x06, 0xbf, 0x8b, 0x62, 0x66, 0xdd, 0x30, 0xfd, 0xe2, 0x98, 0x25, 0xb3, 0x10, 0x91, 0x22, 0x88,
479   - 0x36, 0xd0, 0x94, 0xce, 0x8f, 0x96, 0xdb, 0xbd, 0xf1, 0xd2, 0x13, 0x5c, 0x83, 0x38, 0x46, 0x40,
480   - 0x1e, 0x42, 0xb6, 0xa3, 0xc3, 0x48, 0x7e, 0x6e, 0x6b, 0x3a, 0x28, 0x54, 0xfa, 0x85, 0xba, 0x3d,
481   - 0xca, 0x5e, 0x9b, 0x9f, 0x0a, 0x15, 0x79, 0x2b, 0x4e, 0xd4, 0xe5, 0xac, 0x73, 0xf3, 0xa7, 0x57,
482   - 0x07, 0x70, 0xc0, 0xf7, 0x8c, 0x80, 0x63, 0x0d, 0x67, 0x4a, 0xde, 0xed, 0x31, 0xc5, 0xfe, 0x18,
483   - 0xe3, 0xa5, 0x99, 0x77, 0x26, 0xb8, 0xb4, 0x7c, 0x11, 0x44, 0x92, 0xd9, 0x23, 0x20, 0x89, 0x2e,
484   - 0x37, 0x3f, 0xd1, 0x5b, 0x95, 0xbc, 0xcf, 0xcd, 0x90, 0x87, 0x97, 0xb2, 0xdc, 0xfc, 0xbe, 0x61,
485   - 0xf2, 0x56, 0xd3, 0xab, 0x14, 0x2a, 0x5d, 0x9e, 0x84, 0x3c, 0x39, 0x53, 0x47, 0x6d, 0x41, 0xa2,
486   - 0x1f, 0x2d, 0x43, 0xd8, 0xb7, 0x7b, 0xa4, 0x76, 0xc4, 0x17, 0x49, 0xec, 0x7f, 0x0c, 0x6f, 0xf6,
487   - 0x6c, 0xa1, 0x3b, 0x52, 0x29, 0x9d, 0x55, 0xaa, 0xfb, 0x60, 0x86, 0xb1, 0xbb, 0xcc, 0x3e, 0x5a,
488   - 0xcb, 0x59, 0x5f, 0xb0, 0x9c, 0xa9, 0xa0, 0x51, 0x0b, 0xf5, 0x16, 0xeb, 0x7a, 0x75, 0x2c, 0xd7,
489   - 0x4f, 0xae, 0xd5, 0xe9, 0xe6, 0xe7, 0xad, 0xe8, 0x74, 0xd6, 0xf4, 0xea, 0xa8, 0x50, 0x58, 0xaf
490   - ];
491   -
492   - // Galios field exponent table
493   - var gexp = [
494   - 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1d, 0x3a, 0x74, 0xe8, 0xcd, 0x87, 0x13, 0x26,
495   - 0x4c, 0x98, 0x2d, 0x5a, 0xb4, 0x75, 0xea, 0xc9, 0x8f, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0,
496   - 0x9d, 0x27, 0x4e, 0x9c, 0x25, 0x4a, 0x94, 0x35, 0x6a, 0xd4, 0xb5, 0x77, 0xee, 0xc1, 0x9f, 0x23,
497   - 0x46, 0x8c, 0x05, 0x0a, 0x14, 0x28, 0x50, 0xa0, 0x5d, 0xba, 0x69, 0xd2, 0xb9, 0x6f, 0xde, 0xa1,
498   - 0x5f, 0xbe, 0x61, 0xc2, 0x99, 0x2f, 0x5e, 0xbc, 0x65, 0xca, 0x89, 0x0f, 0x1e, 0x3c, 0x78, 0xf0,
499   - 0xfd, 0xe7, 0xd3, 0xbb, 0x6b, 0xd6, 0xb1, 0x7f, 0xfe, 0xe1, 0xdf, 0xa3, 0x5b, 0xb6, 0x71, 0xe2,
500   - 0xd9, 0xaf, 0x43, 0x86, 0x11, 0x22, 0x44, 0x88, 0x0d, 0x1a, 0x34, 0x68, 0xd0, 0xbd, 0x67, 0xce,
501   - 0x81, 0x1f, 0x3e, 0x7c, 0xf8, 0xed, 0xc7, 0x93, 0x3b, 0x76, 0xec, 0xc5, 0x97, 0x33, 0x66, 0xcc,
502   - 0x85, 0x17, 0x2e, 0x5c, 0xb8, 0x6d, 0xda, 0xa9, 0x4f, 0x9e, 0x21, 0x42, 0x84, 0x15, 0x2a, 0x54,
503   - 0xa8, 0x4d, 0x9a, 0x29, 0x52, 0xa4, 0x55, 0xaa, 0x49, 0x92, 0x39, 0x72, 0xe4, 0xd5, 0xb7, 0x73,
504   - 0xe6, 0xd1, 0xbf, 0x63, 0xc6, 0x91, 0x3f, 0x7e, 0xfc, 0xe5, 0xd7, 0xb3, 0x7b, 0xf6, 0xf1, 0xff,
505   - 0xe3, 0xdb, 0xab, 0x4b, 0x96, 0x31, 0x62, 0xc4, 0x95, 0x37, 0x6e, 0xdc, 0xa5, 0x57, 0xae, 0x41,
506   - 0x82, 0x19, 0x32, 0x64, 0xc8, 0x8d, 0x07, 0x0e, 0x1c, 0x38, 0x70, 0xe0, 0xdd, 0xa7, 0x53, 0xa6,
507   - 0x51, 0xa2, 0x59, 0xb2, 0x79, 0xf2, 0xf9, 0xef, 0xc3, 0x9b, 0x2b, 0x56, 0xac, 0x45, 0x8a, 0x09,
508   - 0x12, 0x24, 0x48, 0x90, 0x3d, 0x7a, 0xf4, 0xf5, 0xf7, 0xf3, 0xfb, 0xeb, 0xcb, 0x8b, 0x0b, 0x16,
509   - 0x2c, 0x58, 0xb0, 0x7d, 0xfa, 0xe9, 0xcf, 0x83, 0x1b, 0x36, 0x6c, 0xd8, 0xad, 0x47, 0x8e, 0x00
510   - ];
511   -
512   - // Working buffers:
513   - // data input and ecc append, image working buffer, fixed part of image, run lengths for badness
514   - var strinbuf = [], eccbuf = [], qrframe = [], framask = [], rlens = [];
515   - // Control values - width is based on version, last 4 are from table.
516   - var version, width, neccblk1, neccblk2, datablkw, eccblkwid;
517   - var ecclevel = 2;
518   - // set bit to indicate cell in qrframe is immutable. symmetric around diagonal
519   - function setmask(x, y) {
520   - var bt;
521   - if (x > y) {
522   - bt = x;
523   - x = y;
524   - y = bt;
525   - }
526   - // y*y = 1+3+5...
527   - bt = y;
528   - bt *= y;
529   - bt += y;
530   - bt >>= 1;
531   - bt += x;
532   - framask[bt] = 1;
533   - }
534   -
535   - // enter alignment pattern - black to qrframe, white to mask (later black frame merged to mask)
536   - function putalign(x, y) {
537   - var j;
538   -
539   - qrframe[x + width * y] = 1;
540   - for (j = -2; j < 2; j++) {
541   - qrframe[(x + j) + width * (y - 2)] = 1;
542   - qrframe[(x - 2) + width * (y + j + 1)] = 1;
543   - qrframe[(x + 2) + width * (y + j)] = 1;
544   - qrframe[(x + j + 1) + width * (y + 2)] = 1;
545   - }
546   - for (j = 0; j < 2; j++) {
547   - setmask(x - 1, y + j);
548   - setmask(x + 1, y - j);
549   - setmask(x - j, y - 1);
550   - setmask(x + j, y + 1);
551   - }
552   - }
553   -
554   - //========================================================================
555   - // Reed Solomon error correction
556   - // exponentiation mod N
557   - function modnn(x) {
558   - while (x >= 255) {
559   - x -= 255;
560   - x = (x >> 8) + (x & 255);
561   - }
562   - return x;
563   - }
564   -
565   - var genpoly = [];
566   -
567   - // Calculate and append ECC data to data block. Block is in strinbuf, indexes to buffers given.
568   - function appendrs(data, dlen, ecbuf, eclen) {
569   - var i, j, fb;
570   -
571   - for (i = 0; i < eclen; i++)
572   - strinbuf[ecbuf + i] = 0;
573   - for (i = 0; i < dlen; i++) {
574   - fb = glog[strinbuf[data + i] ^ strinbuf[ecbuf]];
575   - if (fb != 255) /* fb term is non-zero */
576   - for (j = 1; j < eclen; j++)
577   - strinbuf[ecbuf + j - 1] = strinbuf[ecbuf + j] ^ gexp[modnn(fb + genpoly[eclen - j])];
578   - else
579   - for (j = ecbuf; j < ecbuf + eclen; j++)
580   - strinbuf[j] = strinbuf[j + 1];
581   - strinbuf[ecbuf + eclen - 1] = fb == 255 ? 0 : gexp[modnn(fb + genpoly[0])];
582   - }
583   - }
584   -
585   - //========================================================================
586   - // Frame data insert following the path rules
587   -
588   - // check mask - since symmetrical use half.
589   - function ismasked(x, y) {
590   - var bt;
591   - if (x > y) {
592   - bt = x;
593   - x = y;
594   - y = bt;
595   - }
596   - bt = y;
597   - bt += y * y;
598   - bt >>= 1;
599   - bt += x;
600   - return framask[bt];
601   - }
602   -
603   - //========================================================================
604   - // Apply the selected mask out of the 8.
605   - function applymask(m) {
606   - var x, y, r3x, r3y;
607   -
608   - switch (m) {
609   - case 0:
610   - for (y = 0; y < width; y++)
611   - for (x = 0; x < width; x++)
612   - if (!((x + y) & 1) && !ismasked(x, y))
613   - qrframe[x + y * width] ^= 1;
614   - break;
615   - case 1:
616   - for (y = 0; y < width; y++)
617   - for (x = 0; x < width; x++)
618   - if (!(y & 1) && !ismasked(x, y))
619   - qrframe[x + y * width] ^= 1;
620   - break;
621   - case 2:
622   - for (y = 0; y < width; y++)
623   - for (r3x = 0, x = 0; x < width; x++ , r3x++) {
624   - if (r3x == 3)
625   - r3x = 0;
626   - if (!r3x && !ismasked(x, y))
627   - qrframe[x + y * width] ^= 1;
628   - }
629   - break;
630   - case 3:
631   - for (r3y = 0, y = 0; y < width; y++ , r3y++) {
632   - if (r3y == 3)
633   - r3y = 0;
634   - for (r3x = r3y, x = 0; x < width; x++ , r3x++) {
635   - if (r3x == 3)
636   - r3x = 0;
637   - if (!r3x && !ismasked(x, y))
638   - qrframe[x + y * width] ^= 1;
639   - }
640   - }
641   - break;
642   - case 4:
643   - for (y = 0; y < width; y++)
644   - for (r3x = 0, r3y = ((y >> 1) & 1), x = 0; x < width; x++ , r3x++) {
645   - if (r3x == 3) {
646   - r3x = 0;
647   - r3y = !r3y;
648   - }
649   - if (!r3y && !ismasked(x, y))
650   - qrframe[x + y * width] ^= 1;
651   - }
652   - break;
653   - case 5:
654   - for (r3y = 0, y = 0; y < width; y++ , r3y++) {
655   - if (r3y == 3)
656   - r3y = 0;
657   - for (r3x = 0, x = 0; x < width; x++ , r3x++) {
658   - if (r3x == 3)
659   - r3x = 0;
660   - if (!((x & y & 1) + !(!r3x | !r3y)) && !ismasked(x, y))
661   - qrframe[x + y * width] ^= 1;
662   - }
663   - }
664   - break;
665   - case 6:
666   - for (r3y = 0, y = 0; y < width; y++ , r3y++) {
667   - if (r3y == 3)
668   - r3y = 0;
669   - for (r3x = 0, x = 0; x < width; x++ , r3x++) {
670   - if (r3x == 3)
671   - r3x = 0;
672   - if (!(((x & y & 1) + (r3x && (r3x == r3y))) & 1) && !ismasked(x, y))
673   - qrframe[x + y * width] ^= 1;
674   - }
675   - }
676   - break;
677   - case 7:
678   - for (r3y = 0, y = 0; y < width; y++ , r3y++) {
679   - if (r3y == 3)
680   - r3y = 0;
681   - for (r3x = 0, x = 0; x < width; x++ , r3x++) {
682   - if (r3x == 3)
683   - r3x = 0;
684   - if (!(((r3x && (r3x == r3y)) + ((x + y) & 1)) & 1) && !ismasked(x, y))
685   - qrframe[x + y * width] ^= 1;
686   - }
687   - }
688   - break;
689   - }
690   - return;
691   - }
692   -
693   - // Badness coefficients.
694   - var N1 = 3, N2 = 3, N3 = 40, N4 = 10;
695   -
696   - // Using the table of the length of each run, calculate the amount of bad image
697   - // - long runs or those that look like finders; called twice, once each for X and Y
698   - function badruns(length) {
699   - var i;
700   - var runsbad = 0;
701   - for (i = 0; i <= length; i++)
702   - if (rlens[i] >= 5)
703   - runsbad += N1 + rlens[i] - 5;
704   - // BwBBBwB as in finder
705   - for (i = 3; i < length - 1; i += 2)
706   - if (rlens[i - 2] == rlens[i + 2]
707   - && rlens[i + 2] == rlens[i - 1]
708   - && rlens[i - 1] == rlens[i + 1]
709   - && rlens[i - 1] * 3 == rlens[i]
710   - // white around the black pattern? Not part of spec
711   - && (rlens[i - 3] == 0 // beginning
712   - || i + 3 > length // end
713   - || rlens[i - 3] * 3 >= rlens[i] * 4 || rlens[i + 3] * 3 >= rlens[i] * 4)
714   - )
715   - runsbad += N3;
716   - return runsbad;
717   - }
718   -
719   - // Calculate how bad the masked image is - blocks, imbalance, runs, or finders.
720   - function badcheck() {
721   - var x, y, h, b, b1;
722   - var thisbad = 0;
723   - var bw = 0;
724   -
725   - // blocks of same color.
726   - for (y = 0; y < width - 1; y++)
727   - for (x = 0; x < width - 1; x++)
728   - if ((qrframe[x + width * y] && qrframe[(x + 1) + width * y]
729   - && qrframe[x + width * (y + 1)] && qrframe[(x + 1) + width * (y + 1)]) // all black
730   - || !(qrframe[x + width * y] || qrframe[(x + 1) + width * y]
731   - || qrframe[x + width * (y + 1)] || qrframe[(x + 1) + width * (y + 1)])) // all white
732   - thisbad += N2;
733   -
734   - // X runs
735   - for (y = 0; y < width; y++) {
736   - rlens[0] = 0;
737   - for (h = b = x = 0; x < width; x++) {
738   - if ((b1 = qrframe[x + width * y]) == b)
739   - rlens[h]++;
740   - else
741   - rlens[++h] = 1;
742   - b = b1;
743   - bw += b ? 1 : -1;
744   - }
745   - thisbad += badruns(h);
746   - }
747   -
748   - // black/white imbalance
749   - if (bw < 0)
750   - bw = -bw;
751   -
752   - var big = bw;
753   - var count = 0;
754   - big += big << 2;
755   - big <<= 1;
756   - while (big > width * width)
757   - big -= width * width, count++;
758   - thisbad += count * N4;
759   -
760   - // Y runs
761   - for (x = 0; x < width; x++) {
762   - rlens[0] = 0;
763   - for (h = b = y = 0; y < width; y++) {
764   - if ((b1 = qrframe[x + width * y]) == b)
765   - rlens[h]++;
766   - else
767   - rlens[++h] = 1;
768   - b = b1;
769   - }
770   - thisbad += badruns(h);
771   - }
772   - return thisbad;
773   - }
774   -
775   - function genframe(instring) {
776   - var x, y, k, t, v, i, j, m;
777   -
778   - // find the smallest version that fits the string
779   - t = instring.length;
780   - version = 0;
781   - do {
782   - version++;
783   - k = (ecclevel - 1) * 4 + (version - 1) * 16;
784   - neccblk1 = eccblocks[k++];
785   - neccblk2 = eccblocks[k++];
786   - datablkw = eccblocks[k++];
787   - eccblkwid = eccblocks[k];
788   - k = datablkw * (neccblk1 + neccblk2) + neccblk2 - 3 + (version <= 9);
789   - if (t <= k)
790   - break;
791   - } while (version < 40);
792   -
793   - // FIXME - insure that it fits insted of being truncated
794   - width = 17 + 4 * version;
795   -
796   - // allocate, clear and setup data structures
797   - v = datablkw + (datablkw + eccblkwid) * (neccblk1 + neccblk2) + neccblk2;
798   - for (t = 0; t < v; t++)
799   - eccbuf[t] = 0;
800   - strinbuf = instring.slice(0);
801   -
802   - for (t = 0; t < width * width; t++)
803   - qrframe[t] = 0;
804   -
805   - for (t = 0; t < (width * (width + 1) + 1) / 2; t++)
806   - framask[t] = 0;
807   -
808   - // insert finders - black to frame, white to mask
809   - for (t = 0; t < 3; t++) {
810   - k = 0;
811   - y = 0;
812   - if (t == 1)
813   - k = (width - 7);
814   - if (t == 2)
815   - y = (width - 7);
816   - qrframe[(y + 3) + width * (k + 3)] = 1;
817   - for (x = 0; x < 6; x++) {
818   - qrframe[(y + x) + width * k] = 1;
819   - qrframe[y + width * (k + x + 1)] = 1;
820   - qrframe[(y + 6) + width * (k + x)] = 1;
821   - qrframe[(y + x + 1) + width * (k + 6)] = 1;
822   - }
823   - for (x = 1; x < 5; x++) {
824   - setmask(y + x, k + 1);
825   - setmask(y + 1, k + x + 1);
826   - setmask(y + 5, k + x);
827   - setmask(y + x + 1, k + 5);
828   - }
829   - for (x = 2; x < 4; x++) {
830   - qrframe[(y + x) + width * (k + 2)] = 1;
831   - qrframe[(y + 2) + width * (k + x + 1)] = 1;
832   - qrframe[(y + 4) + width * (k + x)] = 1;
833   - qrframe[(y + x + 1) + width * (k + 4)] = 1;
834   - }
835   - }
836   -
837   - // alignment blocks
838   - if (version > 1) {
839   - t = adelta[version];
840   - y = width - 7;
841   - for (; ;) {
842   - x = width - 7;
843   - while (x > t - 3) {
844   - putalign(x, y);
845   - if (x < t)
846   - break;
847   - x -= t;
848   - }
849   - if (y <= t + 9)
850   - break;
851   - y -= t;
852   - putalign(6, y);
853   - putalign(y, 6);
854   - }
855   - }
856   -
857   - // single black
858   - qrframe[8 + width * (width - 8)] = 1;
859   -
860   - // timing gap - mask only
861   - for (y = 0; y < 7; y++) {
862   - setmask(7, y);
863   - setmask(width - 8, y);
864   - setmask(7, y + width - 7);
865   - }
866   - for (x = 0; x < 8; x++) {
867   - setmask(x, 7);
868   - setmask(x + width - 8, 7);
869   - setmask(x, width - 8);
870   - }
871   -
872   - // reserve mask-format area
873   - for (x = 0; x < 9; x++)
874   - setmask(x, 8);
875   - for (x = 0; x < 8; x++) {
876   - setmask(x + width - 8, 8);
877   - setmask(8, x);
878   - }
879   - for (y = 0; y < 7; y++)
880   - setmask(8, y + width - 7);
881   -
882   - // timing row/col
883   - for (x = 0; x < width - 14; x++)
884   - if (x & 1) {
885   - setmask(8 + x, 6);
886   - setmask(6, 8 + x);
887   - }
888   - else {
889   - qrframe[(8 + x) + width * 6] = 1;
890   - qrframe[6 + width * (8 + x)] = 1;
891   - }
892   -
893   - // version block
894   - if (version > 6) {
895   - t = vpat[version - 7];
896   - k = 17;
897   - for (x = 0; x < 6; x++)
898   - for (y = 0; y < 3; y++ , k--)
899   - if (1 & (k > 11 ? version >> (k - 12) : t >> k)) {
900   - qrframe[(5 - x) + width * (2 - y + width - 11)] = 1;
901   - qrframe[(2 - y + width - 11) + width * (5 - x)] = 1;
902   - }
903   - else {
904   - setmask(5 - x, 2 - y + width - 11);
905   - setmask(2 - y + width - 11, 5 - x);
906   - }
907   - }
908   -
909   - // sync mask bits - only set above for white spaces, so add in black bits
910   - for (y = 0; y < width; y++)
911   - for (x = 0; x <= y; x++)
912   - if (qrframe[x + width * y])
913   - setmask(x, y);
914   -
915   - // convert string to bitstream
916   - // 8 bit data to QR-coded 8 bit data (numeric or alphanum, or kanji not supported)
917   - v = strinbuf.length;
918   -
919   - // string to array
920   - for (i = 0; i < v; i++)
921   - eccbuf[i] = strinbuf.charCodeAt(i);
922   - strinbuf = eccbuf.slice(0);
923   -
924   - // calculate max string length
925   - x = datablkw * (neccblk1 + neccblk2) + neccblk2;
926   - if (v >= x - 2) {
927   - v = x - 2;
928   - if (version > 9)
929   - v--;
930   - }
931   -
932   - // shift and repack to insert length prefix
933   - i = v;
934   - if (version > 9) {
935   - strinbuf[i + 2] = 0;
936   - strinbuf[i + 3] = 0;
937   - while (i--) {
938   - t = strinbuf[i];
939   - strinbuf[i + 3] |= 255 & (t << 4);
940   - strinbuf[i + 2] = t >> 4;
941   - }
942   - strinbuf[2] |= 255 & (v << 4);
943   - strinbuf[1] = v >> 4;
944   - strinbuf[0] = 0x40 | (v >> 12);
945   - }
946   - else {
947   - strinbuf[i + 1] = 0;
948   - strinbuf[i + 2] = 0;
949   - while (i--) {
950   - t = strinbuf[i];
951   - strinbuf[i + 2] |= 255 & (t << 4);
952   - strinbuf[i + 1] = t >> 4;
953   - }
954   - strinbuf[1] |= 255 & (v << 4);
955   - strinbuf[0] = 0x40 | (v >> 4);
956   - }
957   - // fill to end with pad pattern
958   - i = v + 3 - (version < 10);
959   - while (i < x) {
960   - strinbuf[i++] = 0xec;
961   - // buffer has room if (i == x) break;
962   - strinbuf[i++] = 0x11;
963   - }
964   -
965   - // calculate and append ECC
966   -
967   - // calculate generator polynomial
968   - genpoly[0] = 1;
969   - for (i = 0; i < eccblkwid; i++) {
970   - genpoly[i + 1] = 1;
971   - for (j = i; j > 0; j--)
972   - genpoly[j] = genpoly[j]
973   - ? genpoly[j - 1] ^ gexp[modnn(glog[genpoly[j]] + i)] : genpoly[j - 1];
974   - genpoly[0] = gexp[modnn(glog[genpoly[0]] + i)];
975   - }
976   - for (i = 0; i <= eccblkwid; i++)
977   - genpoly[i] = glog[genpoly[i]]; // use logs for genpoly[] to save calc step
978   -
979   - // append ecc to data buffer
980   - k = x;
981   - y = 0;
982   - for (i = 0; i < neccblk1; i++) {
983   - appendrs(y, datablkw, k, eccblkwid);
984   - y += datablkw;
985   - k += eccblkwid;
986   - }
987   - for (i = 0; i < neccblk2; i++) {
988   - appendrs(y, datablkw + 1, k, eccblkwid);
989   - y += datablkw + 1;
990   - k += eccblkwid;
991   - }
992   - // interleave blocks
993   - y = 0;
994   - for (i = 0; i < datablkw; i++) {
995   - for (j = 0; j < neccblk1; j++)
996   - eccbuf[y++] = strinbuf[i + j * datablkw];
997   - for (j = 0; j < neccblk2; j++)
998   - eccbuf[y++] = strinbuf[(neccblk1 * datablkw) + i + (j * (datablkw + 1))];
999   - }
1000   - for (j = 0; j < neccblk2; j++)
1001   - eccbuf[y++] = strinbuf[(neccblk1 * datablkw) + i + (j * (datablkw + 1))];
1002   - for (i = 0; i < eccblkwid; i++)
1003   - for (j = 0; j < neccblk1 + neccblk2; j++)
1004   - eccbuf[y++] = strinbuf[x + i + j * eccblkwid];
1005   - strinbuf = eccbuf;
1006   -
1007   - // pack bits into frame avoiding masked area.
1008   - x = y = width - 1;
1009   - k = v = 1; // up, minus
1010   - /* inteleaved data and ecc codes */
1011   - m = (datablkw + eccblkwid) * (neccblk1 + neccblk2) + neccblk2;
1012   - for (i = 0; i < m; i++) {
1013   - t = strinbuf[i];
1014   - for (j = 0; j < 8; j++ , t <<= 1) {
1015   - if (0x80 & t)
1016   - qrframe[x + width * y] = 1;
1017   - do { // find next fill position
1018   - if (v)
1019   - x--;
1020   - else {
1021   - x++;
1022   - if (k) {
1023   - if (y != 0)
1024   - y--;
1025   - else {
1026   - x -= 2;
1027   - k = !k;
1028   - if (x == 6) {
1029   - x--;
1030   - y = 9;
1031   - }
1032   - }
1033   - }
1034   - else {
1035   - if (y != width - 1)
1036   - y++;
1037   - else {
1038   - x -= 2;
1039   - k = !k;
1040   - if (x == 6) {
1041   - x--;
1042   - y -= 8;
1043   - }
1044   - }
1045   - }
1046   - }
1047   - v = !v;
1048   - } while (ismasked(x, y));
1049   - }
1050   - }
1051   -
1052   - // save pre-mask copy of frame
1053   - strinbuf = qrframe.slice(0);
1054   - t = 0; // best
1055   - y = 30000; // demerit
1056   - // for instead of while since in original arduino code
1057   - // if an early mask was "good enough" it wouldn't try for a better one
1058   - // since they get more complex and take longer.
1059   - for (k = 0; k < 8; k++) {
1060   - applymask(k); // returns black-white imbalance
1061   - x = badcheck();
1062   - if (x < y) { // current mask better than previous best?
1063   - y = x;
1064   - t = k;
1065   - }
1066   - if (t == 7)
1067   - break; // don't increment i to a void redoing mask
1068   - qrframe = strinbuf.slice(0); // reset for next pass
1069   - }
1070   - if (t != k) // redo best mask - none good enough, last wasn't t
1071   - applymask(t);
1072   -
1073   - // add in final mask/ecclevel bytes
1074   - y = fmtword[t + ((ecclevel - 1) << 3)];
1075   - // low byte
1076   - for (k = 0; k < 8; k++ , y >>= 1)
1077   - if (y & 1) {
1078   - qrframe[(width - 1 - k) + width * 8] = 1;
1079   - if (k < 6)
1080   - qrframe[8 + width * k] = 1;
1081   - else
1082   - qrframe[8 + width * (k + 1)] = 1;
1083   - }
1084   - // high byte
1085   - for (k = 0; k < 7; k++ , y >>= 1)
1086   - if (y & 1) {
1087   - qrframe[8 + width * (width - 7 + k)] = 1;
1088   - if (k)
1089   - qrframe[(6 - k) + width * 8] = 1;
1090   - else
1091   - qrframe[7 + width * 8] = 1;
1092   - }
1093   -
1094   - // return image
1095   - return qrframe;
1096   - }
1097   -
1098   - var _canvas = null,
1099   - _size = null;
1100   -
1101   - var api = {
1102   -
1103   - get ecclevel() {
1104   - return ecclevel;
1105   - },
1106   -
1107   - set ecclevel(val) {
1108   - ecclevel = val;
1109   - },
1110   -
1111   - get size() {
1112   - return _size;
1113   - },
1114   -
1115   - set size(val) {
1116   - _size = val
1117   - },
1118   -
1119   - get canvas() {
1120   - return _canvas;
1121   - },
1122   -
1123   - set canvas(el) {
1124   - _canvas = el;
1125   - },
1126   -
1127   - getFrame: function (string) {
1128   - return genframe(string);
1129   - },
1130   -
1131   - draw: function (string, canvas, size, ecc) {
1132   -
1133   - ecclevel = ecc || ecclevel;
1134   - canvas = canvas || _canvas;
1135   -
1136   - if (!canvas) {
1137   - console.warn('No canvas provided to draw QR code in!')
1138   - return;
1139   - }
1140   -
1141   - size = size || _size || Math.min(canvas.width, canvas.height);
1142   -
1143   - var frame = genframe(string),
1144   - ctx = canvas.ctx,
1145   - px = Math.round(size / (width + 8));
1146   -
1147   - var roundedSize = px * (width + 8),
1148   - offset = Math.floor((size - roundedSize) / 2);
1149   -
1150   - size = roundedSize;
1151   -
1152   - ctx.clearRect(0, 0, canvas.width, canvas.height);
1153   - ctx.setFillStyle('#000000');
1154   -
1155   - for (var i = 0; i < width; i++) {
1156   - for (var j = 0; j < width; j++) {
1157   - if (frame[j * width + i]) {
1158   - ctx.fillRect(px * (4 + i) + offset, px * (4 + j) + offset, px, px);
1159   - }
1160   - }
1161   - }
1162   - ctx.draw();
1163   - }
1164   - }
1165   -
1166   - module.exports = {
1167   - api: api
1168   - }
1169   -
1170   -})()
1171 0 \ No newline at end of file
pages/user/coupons/coupons.js
1   -var e = function(e) {
2   - return e && e.__esModule ? e : {
3   - default: e
4   - };
5   - }(require("../../../utils/LoadMore.js")),
6   - t = getApp(),
  1 +var t = getApp(),
7 2 a = t.request,
8 3 o = t.globalData.setting,
9 4 os = o,
10   - i = require("../../../utils/util.js"),
  5 + i = require("../../../utils/util.js"),
11 6 ut = i,
12   - b = require("../../../app.js"),
13   - app = b,
14   - s = require("../../../utils/common.js"),
15   -
16   - n = new e.default();
  7 + s = require("../../../utils/common.js");
17 8 var regeneratorRuntime = require('../../../utils/runtime.js');
18   -var auth = require("../../../utils/auth.js"),rq = require("../../../utils/request.js");
19 9 const {
20 10 barcode,
21 11 qrcode
22   -} = require('../../../utils/index.js')
23   -Page({
  12 +} = require('../../../utils/index.js');
  13 +let _this = null;
24 14  
25   - /**
26   - * 页面的初始数据
27   - */
  15 +Page({
28 16 data: {
29   - sheng:1, //是否有更多
30   - overdue_sheng:1, //是否有更多
31   -
32   - details: [], //可使用的数据
33   - sum: 0, //全部票
34   - val: 0, //可使用票
35   - number: 0, //已过期票
36   - //判断已过期的
37   - ygq: false,
38   - ksy: true,
39   - pageSize: 10,
40   - page: 1,
41   - current_page: 0,
42   - is_no_more: 0,
43   - /**
44   - * 页面配置
45   - */
46   - winWidth: 0,
47   - winHeight: 0,
48   - currentTab: 0,
49   - // 点击选中二维码
50   - show: true,
51   - udata: null,
52   - iurl:os.imghost,
53   - is_show_dhwz:0,
54   -
55   - b_can_arr:null, //包邮券的未使用内容
56   - b_out_arr:null, //包邮券的已过期的内容
57   - b_isuse_arr:null,//包邮券的已使用的内容
58   -
59   - isloading:0, //正在加载中的代码
60   - isset:0,
61   - },
62   - // 点击选中二维码
63   - click: function(e) {
64   - var val = e.currentTarget.dataset.cashrepno;
65   - getApp().globalData.val =val;
66   - wx.navigateTo({
67   - url: 'qr_code/qr_code',
68   - })
69 17  
  18 + val:false,
  19 + datet: "",
  20 + dates: "",
  21 + parameter: false,
  22 + details:[],//数据
  23 + isBind:true,//控制清空时间日期的按钮
  24 + isBinds: true,
  25 + select: false,//下拉框
  26 + grade_name: '未使用',
  27 + // grades: [ //old
  28 + // '所有',
  29 + // '已使用',
  30 + // '已过期',
  31 + // '未使用',
  32 + // ],
  33 + currentIndex: 0, //tab项当前指示器
  34 + grades: [
  35 + '未使用',
  36 + '已使用',
  37 + '已过期',
  38 + ],
  39 + display:false,
  40 + is_no_more: 0,
  41 + current_page:1,
  42 + by_list:[],
  43 + isloading:0,
  44 + pageNum: 1,
70 45 },
71   - // 点击返回主页
72   - clicks: function() {
  46 + /**
  47 + * 生命周期函数--监听页面加载
  48 + */
  49 + onLoad: function (options) {
  50 + _this = this;
73 51 this.setData({
74   - show: true
75   - })
  52 + details: []
  53 + });
  54 + this.wjquery();
76 55 },
77 56 /**
78   - * 点击tab切换,已过期,控制页面显示隐藏和样式的显示隐藏
79   - */
80   - swichNav: function(e) {
81   - this.setData({ current_page:0})
82   - this.data.details=[];
83   -
84   - var that = this;
85   - var current = e.currentTarget.dataset.current
86   -
87   - //控制显示隐藏
88   - if (e.currentTarget.dataset.current == 0) {
89   -
90   - var ygq = true;
91   - var ksy = false;
92   - that.setData({
93   - details:[],
94   - ygq: ygq,
95   - ksy: ksy,
96   - currentTab: e.currentTarget.dataset.current
97   - });
98   - this.myyhj();
99   - } else {
100   -
101   - var ygq = false;
102   - var ksy = true;
103   - var currentTab=this.data.currentTab;
104   -
105   - that.setData({
106   - details: [],
107   - ygq: ygq,
108   - ksy: ksy,
109   - currentTab: e.currentTarget.dataset.current
110   - });
111   - this.overdue();
112   -
113   - } //控制样式
114   - if (this.data.currentTab === e.currentTarget.dataset.current) {
115   -
116   - return false;
117   - } else {
118   - var details=this.data.details;
119   -
120   - that.setData({
121   - currentTab: e.currentTarget.dataset.current,
122   - details:[],
123   - })
124   - }
125   -
  57 + * 生命周期函数--监听页面显示
  58 + */
  59 + onShow: function (options) {
  60 + var th = this;
  61 +
  62 + wx.setNavigationBarTitle({
  63 + title: "微券查询",
  64 + });
  65 +
  66 + /**
  67 + * 控制显示微券兑换
  68 + * by sty
  69 + */
  70 + getApp().getConfig2(function (ee) {
  71 + var json_d = JSON.parse(ee.switch_list);
  72 + let is_show_dhwz = json_d.dhwz_switch;
  73 + let grades = th.data.grades;
  74 + // console.log('is_show_dhwz----------------------------',is_show_dhwz);
  75 + if(is_show_dhwz) {
  76 + grades.push('微券兑换');
  77 + th.setData({ grades });
  78 + };
  79 + th.setData({ is_show_dhwz });
  80 + },1);
126 81 },
127   - // 微卷兑换
128   - exchange: function() {
  82 +
  83 +
  84 +
  85 +
  86 + // 点击选中二维码
  87 + click: function (e) {
  88 + var val = e.currentTarget.dataset.cashrepno;
  89 + getApp().globalData.val = val;
129 90 wx.navigateTo({
130   - url: 'exchange/exchange'
  91 + url: '../qr_code/qr_code',
131 92 })
132 93 },
133   - // 维劵查询
134   - query: function() {
135   - wx.navigateTo({
136   - url: 'query/index'
137   - })
  94 + // 点击返回主页
  95 + // clicks: function () {
  96 + // this.setData({
  97 + // hide:true, display:false
  98 + // })
  99 + // },
  100 + //监听输入框显示清空按钮
  101 + watchPassWord: function (event) {
  102 + var val = event.detail.value;
  103 + if (val != "" && val != null) {
  104 + var isBind = false;
  105 + this.setData({ isBind: isBind });
  106 +
  107 + }
138 108 },
139 109 /**
140   - * 生命周期函数--监听页面加载
  110 + * 点击下拉框
141 111 */
142   - onLoad: function(options) {
143   -
  112 + bindShowMsg() {
  113 + this.setData({
  114 + select: !this.data.select
  115 + })
144 116 },
  117 + /**
  118 + * 已选下拉框
  119 + */
  120 + // mySelect(e) {
  121 + // var name = e.currentTarget.dataset.name;
  122 + // this.setData({
  123 + // grade_name: name,
  124 + // select: false
  125 + // })
  126 + // },
  127 +
  128 + /**
  129 + * 点击tab
  130 + * by sty
  131 + */
  132 + clickTab(e) {
  133 + let index = e.target.dataset.index;
  134 + let name = e.target.dataset.name;
  135 +
  136 + this.setData({
  137 + is_get: 0,
  138 + pageNum: 1,
  139 + grade_name: name,
  140 + currentIndex: index,
  141 + is_no_more: 0,
  142 + current_page: 1,
  143 + noMore: false,
  144 + details: [],
  145 + by_list: [],
  146 + });
  147 +
  148 +
  149 + if(index == 3) {//微券兑换
  150 + this.exchange();
  151 + } else {//其他
  152 + this.wjquery();
  153 + };
  154 + },
  155 +
  156 + /**
  157 + * 点击"立即使用"
  158 + * by sty
  159 + */
  160 + clickUse(e) {
  161 + let useIndex = e.currentTarget.dataset.index;
  162 + let val = e.currentTarget.dataset.cashrepno;
  163 +
  164 + this.setData({
  165 + showQr: true,
  166 + useIndex,
  167 + });
  168 + this.qrcode(val);
  169 + },
  170 +
  171 + /**
  172 + * 关闭二维码
  173 + * by sty
  174 + */
  175 + closeQr() {
  176 + this.setData({
  177 + showQr: false,
  178 + });
  179 + },
  180 +
  181 + /**
  182 + * 生成二维码
  183 + * by sty
  184 + */
  185 + qrcode:function(val){
  186 + // console.log(val);
  187 + // barcode('barcode', val, 600,160);
  188 + qrcode('qrcode', val, 300, 300);
  189 + },
  190 +
  191 + /**
  192 + * 请求微券列表
  193 + * by sty
  194 + */
  195 + async exchange() {
  196 + var result;
  197 + var user_id = getApp().globalData.user_id;
  198 + var store_id = os.stoid;
  199 +
  200 +
  201 + this.getData(true, '/api/weshop/users/listExchangeCoupons', {
  202 + user_id: user_id, store_id: store_id,
  203 + }).then(()=>{
  204 + _this.setData({
  205 + result: _this.data.list.pageData,
  206 + });
  207 + });
  208 +
  209 + // await getApp().request.promiseGet("/api/weshop/users/listExchangeCoupons", {
  210 + // data: {
  211 + // user_id: user_id, store_id: store_id,
  212 + // }
  213 + // }).then(res => {
  214 + // // var msg = res.data;
  215 + // // result = msg.data.pageData;
  216 + // })
  217 + // e.setData({
  218 + // result: result
  219 + // })
  220 + },
  221 +
  222 + /**
  223 + * 微券兑换对话框
  224 + * by sty
  225 + */
  226 + async clickExchange(e) {
  227 + var th=this;
  228 + var index = e.currentTarget.dataset.index;
  229 + var item = this.data.result[index];
  230 + this.data.monye = item.ToSum;
  231 + this.data.integr = item.Integral;
  232 + this.data.number = item.Number;
  233 +
  234 + let content = `确定使用${th.data.integr}积分兑换代金券面值${th.data.monye}元吗?`;
  235 + wx.showModal({
  236 + title: '提示',
  237 + content: content,
  238 + success (res) {
  239 + if (res.confirm) {
  240 + console.log('用户点击确定');
  241 + th.sure_pay();
  242 + } else if (res.cancel) {
  243 + console.log('用户点击取消')
  244 + }
  245 + }
  246 + });
  247 +
145 248  
146   -
147   - onShow: function() {
148   - var th=this;
149   - wx.setNavigationBarTitle({ title: "我的优惠券", })
150   -
151   - //--先判断会员状态--
152   - var user_info = getApp().globalData.userInfo;
153   - if (user_info == null || user_info.mobile == undefined || user_info.mobile == "" || user_info.mobile == null) {
154   - wx.navigateTo({ url: '/pages/togoin/togoin', })
155   - return false;
156   - }
157   - this.init(th.myyhj,th.s_guoqi);
158   - var th = this;
159   - //-- 要实时 --
160   - getApp().getConfig2(function (ee) {
161   - var json_d = JSON.parse(ee.switch_list);
162   - th.setData({ is_show_dhwz: json_d.dhwz_switch });
163   - },1)
164 249  
165   -
166   - },
167   -
168   - //----------券的界面初始化-----------
169   - init:function(func,s_guoqi){
  250 + // var my_con = this.selectComponent("#my_con"); //组件的id
  251 + // var title="是否使用"+th.data.integr+"积分兑换代金券面值"+th.data.monye+"元";
  252 + // my_con.open(title, "确定", "取消", th.sure_pay, null)
  253 + },
  254 +
  255 +
  256 + /**
  257 + * 微券兑换
  258 + * by sty
  259 + */
  260 + sure_pay:function(){
  261 + var monye=this.data.monye;
  262 + var integr=this.data.integr;
  263 + var number=this.data.number;
  264 +
170 265 var user_id = getApp().globalData.user_id;
  266 + console.log(integr,"是什么微卷",typeof integr,monye);
171 267 var store_id = os.stoid;
172   - var th=this;
173   - rq.get("/api/weshop/users/getinfo/" + os.stoid + "/" + user_id, {
174   - isShowLoading: 0,
175   - success: function (su) {
176   -
177   - var data = su.data.data;
178   - data.cashcount = parseInt(data.CashCount);
179   - getApp().globalData.Integral = data.Integral;
180   -
181   - getApp().request.get("/api/weshop/userfeemail/pageAndArea",{
182   - data:{user_id: user_id, store_id: os.stoid, pageSize:200},
183   - success:function(res){
184   - if(res.data.code==0 && res.data.data && res.data.data.total>0 ){
185   - var b_arr=res.data.data.pageData;
186   - var b_can_arr=[]; //未使用
187   - var b_out_arr=[]; //已过期
188   - var b_isuse_arr=[]; //已过期
189   - for(var i in b_arr){
190   - b_arr[i].isby=1;
191   - if(b_arr[i].isuse==0){
192   - if(b_arr[i].use_end_time<=ut.gettimestamp()){
193   - b_out_arr.push(b_arr[i]);
194   - }else{
195   - b_can_arr.push(b_arr[i]);
196   - }
197   -
198   - }else{
199   - b_isuse_arr.push(b_arr[i]);
200   - }
201   - }
202   - data.cashcount= data.cashcount+b_can_arr.length; //加上包邮券的数量
203   - th.data.b_can_arr=b_can_arr; //可使用
204   - th.data.b_out_arr=b_out_arr; //过期
205   - th.data.b_isuse_arr=b_isuse_arr; //已使用
206   - th.setData({ udata: data});
207   - func();s_guoqi();
208   -
209   - }else{
210   - th.setData({ udata: data});
211   - func();s_guoqi();
212   - }
213   - }
214   - })
215   -
216   - }
217   - })
218   - },
219   -
220   - s_guoqi:function(){
  268 + getApp().request.post("/api/weshop/users/saveInterToCash", {
  269 + data: {
  270 + user_id: user_id,
  271 + store_id: store_id,
  272 + money:monye,
  273 + integ:integr,
  274 + number:number,
  275 + },
  276 + success: function (su) {
  277 + if (su.data.data!=null) {
  278 + // getApp().showWarning("兑换成功");
  279 + wx.showToast({
  280 + title: '兑换成功',
  281 + icon: 'success',
  282 + });
  283 + }else{
  284 + // getApp().showWarning("积分不足");
  285 + wx.showToast({
  286 + title: '积分不足',
  287 + icon: 'error',
  288 + });
  289 + }
  290 + }
221 291  
222   - var th = this, number=0;
223   - var user_id = getApp().globalData.user_id;
224   - var store_id = os.stoid;
225   - var get_data = {
226   - user_id: user_id,
227   - store_id: store_id,
228   - IsUse: 2,
229   - pageSize: 1,
230   - page: 1
231   - };
232   -
233   - getApp().request.get("/api/weshop/users/listQuan", {
234   - data:get_data,
235   - success:function(res){
236   - if(res.data.code==0 && res.data){
237   - var a = res.data,val = a.data.total;
238   - var details = a.data.pageData;
239   - if (details.length == 0){
240   - if(th.data.b_out_arr) th.setData({ number: th.data.b_out_arr.length});
241   - return false;
242   - }
243   - var all_length=val;
244   - if(th.data.b_out_arr) all_length+=th.data.b_out_arr.length;
245   - th.setData({ number: all_length});
246   - }
247   - }
248 292 })
249   - },
250   -
251   - //获取劵的数量
252   - myyhj:function() {
253   - if(this.data.isloading) return;
254   - var len = this.data.details.length;
255   - this.data.current_page++;
256   - var e = this, sum, val, number;
257   - var user_id = getApp().globalData.user_id;
258   - var store_id = os.stoid;
259   - var th=this; var init_num=0;
260   -
261   - var get_data = {
262   - user_id: user_id,
263   - store_id: store_id,
264   - IsUse: 0,
265   - pageSize: 10,
266   - page: e.data.current_page
267   - };
268   - var big_arr = this.data.details;
269   - //可用券加入包邮券
270   - if(big_arr.length==0 && this.data.b_can_arr){
271   - big_arr=this.data.b_can_arr;
272   - }
273   - if(this.data.b_can_arr) init_num=this.data.b_can_arr.length;
274   -
275   - wx.showLoading(); th.data.isloading=1;
276   - getApp().request.get("/api/weshop/users/listQuan", {
277   - data: get_data,
278   - success:function(res){
279   - th.data.isloading=0;
280   - var a = res.data;
281   - val = a.data.total;
282   - var details = a.data.pageData;
283   - th.setData({isset:1});
284   -
285   - //没有找到优惠券的时候
286   - if (details.length == 0 && th.data.current_page==1) {
287   - th.setData({sheng:0});
288   - getApp().showWarning("未找更多数据");
289   - if(big_arr.length>0) {
290   - th.setData({ details: big_arr, });
291   - th.setData({ val: init_num});
292   - setTimeout(function(){
293   - details=big_arr;
294   - for (var i = 0; i < details.length; i++) {
295   - var no = i + len;
296   - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460);
297   - }
298   - },1000)
299   - }
300   - return false;
301   - }
302   -
303   - th.setData({ val: val+init_num });
304   - //数组合并
305   - big_arr=big_arr.concat(details);
306   - //设置数组
307   - th.setData({ details: big_arr, });
308   - //延迟显示二维码的内容
309   - setTimeout(function () {
310   - if(th.data.current_page==1) details=big_arr;
311   - for (var i = 0; i < details.length; i++) {
312   - var no = i + len;
313   - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460);
314   - }
315   - wx.hideLoading();
316   - }, 1200)
317   - }
318   - })
  293 + },
319 294  
320   -
321 295  
  296 + //明细查询
  297 + Gettime:function(e){
  298 + var page = 0;
  299 + //开始获取时间
  300 + var th = this;
  301 + var stime = th.data.datet;
  302 + var etime = th.data.dates;
  303 + var tpye = th.data.grade_name;
  304 +
  305 + //开始获取时间结束
  306 + //删除字符中的——
  307 + var datatk = stime.replace(/[-]/g, "");
  308 + var dataj = etime.replace(/[-]/g, "");
  309 + //转换类型
  310 + var datak = parseInt(datatk);
  311 + var dataj = parseInt(dataj);
  312 +
  313 + //判断初始时间小于结束时间
  314 + if (datak > dataj) {
  315 + getApp().showWarning("结束时间错误");
  316 + } else {
  317 + this.setData({ details: [] });
  318 + this.data.current_page=1;
  319 + this.data.is_no_more=0;
  320 + this.data.by_list=[];
  321 + this.data.details=[];
  322 + this.wjquery();
  323 + }
  324 +
322 325 },
323   -
324   - overdue:function(){
325 326  
326   - if(this.data.isloading) return;
327   -
  327 + //微卷查询流水明细
  328 + async wjquery() {
  329 + if(this.data.isloading) return;
  330 + if(this.data.is_no_more) return;
  331 + this.data.isloading=1;
  332 + var th=this;
  333 +
328 334 var len = this.data.details.length;
329   - this.data.current_page++;
  335 +
330 336 var e = this,sum, val, number;
331 337 var user_id = getApp().globalData.user_id;
332   - var store_id = os.stoid,init_num=0,th=this;
333   -
  338 + var store_id = os.stoid;
  339 +
  340 + var stime = this.data.datet;
  341 + var etime = this.data.dates;
  342 +
  343 + var tpye = this.data.grade_name;
  344 + console.log("是什么类型",tpye);
  345 + var IsUse = 0;
  346 + var e = this;
334 347 var get_data = {
335 348 user_id: user_id,
336 349 store_id: store_id,
337   - IsUse: 2,
338   - pageSize: 10,
339   - page: e.data.current_page
  350 + // pageSize: 10,
  351 + page: e.data.current_page,
340 352 };
341   - var big_arr= this.data.details;
342   - //可用券加入包邮券
343   - if(big_arr.length==0 && this.data.b_out_arr){
344   - big_arr=this.data.b_out_arr;
345   - }
346   - if(this.data.b_out_arr)
347   - init_num=this.data.b_out_arr.length;
348 353  
  354 + var dd={
  355 + user_id: user_id,
  356 + store_id: store_id,
  357 + // pageSize: 10,
  358 + };
  359 + dd.isuse=0;
  360 + // 判断下拉框,添加类型
  361 + if (tpye == "已使用"){
  362 + get_data.IsUse = 1;
  363 + dd.isuse=1;
  364 + } else if (tpye == "已过期"){
  365 + get_data.IsUse = 2;
  366 + } else if (tpye == "未使用"){
  367 + get_data.IsUse = 0;
  368 + };
  369 + if (etime != "" && etime != null) {
  370 + get_data.EndDate = etime;
  371 +
  372 + //时间要转成时间戳
  373 + var new_t=new Date(etime)/1000;
  374 + dd.etime=new_t;
  375 + }
  376 +
  377 + if (stime != "" && stime != null) {
  378 + get_data.BeginDate= stime;
  379 + //时间要转成时间戳
  380 + var new_t=new Date(stime)/1000;
  381 + dd.stime=new_t;
  382 + }
  383 +
  384 + var by_list=[];
  385 + if(th.data.current_page==1){
  386 + //先拿包邮券
  387 + await getApp().request.promiseGet("/api/weshop/userfeemail/pageAndArea?pageSize=100", {
  388 + data: dd,
  389 + }).then(res => {
  390 +
  391 + if(res.data.code == 0) {
  392 + th.setData({
  393 + byTotal: res.data.data.total,
  394 + });
  395 + };
  396 +
  397 + if(res.data.code==0 && res.data.data && res.data.data.total>0){
  398 +
  399 + by_list=res.data.data.pageData;
  400 + for(var i in by_list){
  401 + by_list[i].isby=1;
  402 + //过滤是时间的范围
  403 + if(get_data.IsUse == 2 && by_list[i].use_end_time<=ut.gettimestamp()){
  404 + th.data.by_list.push(by_list[i]);
  405 + }else if(get_data.IsUse == 0){
  406 + th.data.by_list.push(by_list[i]);
  407 + }else if(get_data.IsUse==1){
  408 + th.data.by_list.push(by_list[i]);
  409 + }else if(get_data.IsUse==undefined){
  410 + th.data.by_list.push(by_list[i]);
  411 + }
  412 + }
  413 + }
  414 + })
  415 + }
  416 +
  417 + var big_arr = this.data.details; ///api/weshop / users / listQuan
  418 + if(th.data.current_page==1 && th.data.by_list.length>0) {
  419 + big_arr=th.data.by_list;
  420 + };
  421 +
349 422  
350   - wx.showLoading();th.data.isloading=1;
351   - getApp().request.get("/api/weshop/users/listQuan"
352   - , {
  423 + await getApp().request.promiseGet("/api/weshop/users/listQuan", {
353 424 data: get_data,
354   - success:function(res){
355   - th.data.isloading=0;
356   - var a = res.data;
357   - number = a.data.total;
358   - var details = a.data.pageData;
359   -
360   - if (details.length == 0) {
361   - this.setData({overdue_sheng:0});
362   - getApp().showWarning("未找更多数据");
363   - if( big_arr.length>0 && th.data.current_page==1) {
364   - th.setData({ details: big_arr, });
365   - th.setData({ number: init_num});
366   - setTimeout(function(){
367   - details=big_arr;
368   - for (var i = 0; i < details.length; i++) {
369   - var no = i + len;
370   - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460);
371   - }
372   - },1000)
373   -
374   - }
375   - return false;
376   - }
377   -
378   - big_arr=big_arr.concat(details);
379   -
380   - this.setData({
381   - details: big_arr, number:number+init_num,
382   - });
383   -
  425 + isShowLoading: 1
  426 +
  427 + }).then(res => {
  428 +
  429 + th.data.isloading=0;
  430 + var a = res.data;
  431 + var len = e.data.details.length;
  432 + var details = a.data.pageData;
384 433  
385   - setTimeout(function () {
386   - if(th.data.current_page==1) details=big_arr;
387   - for (var i = 0; i < details.length; i++) {
388   - var no = i + len;
389   - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no, 460, 460);
390   -
391   - }
392   - wx.hideLoading();
393   - }, 800)
394   - }
395   - })
  434 + th.setData({
  435 + pageSize: a.data.pageSize,
  436 + wjTotal: a.data.total,
  437 + });
  438 +
  439 + if (details.length == 0) {
  440 + this.setData({
  441 + is_no_more: 1,
  442 + });
  443 + // getApp().showWarning("未找更多数据");
  444 + if(th.data.by_list && th.data.current_page==1){
  445 + th.setData({ val: val,details:th.data.by_list});
  446 + details=th.data.by_list;
  447 + setTimeout(function () {
  448 + for (var i = 0; i < details.length; i++) {
  449 + var no = i + len;
  450 + qrcode('qrcode' + no, details[i].no,460, 460);
  451 + }
  452 + }, 100)
  453 + }
  454 + return false;
  455 + }
  456 +
  457 + th.data.current_page++;
  458 + val = a.data.total+th.data.by_list.length;
  459 +
  460 + big_arr=big_arr.concat(details);
  461 + this.setData({
  462 + details: big_arr,val: val,
  463 + is_get: 1,
  464 + current_page: this.data.current_page,
  465 + });
  466 +
  467 + setTimeout(function () {
  468 + if(by_list) details=big_arr;
  469 + for (var i = 0; i < details.length; i++) {
  470 + var no = i + len;
  471 + qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no,460, 460);
  472 + }
  473 + }, 100)
  474 + })
  475 +
  476 +
  477 +
396 478 },
397   -
  479 +
  480 +
  481 + // 使用说明详情展开
  482 + clickDetails: function(e) {
  483 + let details = this.data.details;
  484 + let index = e.currentTarget.dataset.index;
  485 + details[index].isShowDetails = !details[index].isShowDetails;
  486 + this.setData({
  487 + details,
  488 + });
  489 + },
  490 +
  491 +
  492 +
398 493 //---加载更多是靠这个函数----
399   - onReachBottom: function() {
400   - if(this.data.isloading) return false; //正在加载中,则不处理
401   - var currentTab=this.data.currentTab;
402   - if (currentTab==2){
403   - if(this.data.overdue_sheng==0) return false;
404   - this.overdue();
405   - }
406   - if (currentTab==0){
407   - if(this.data.sheng==0) return false;
408   - this.myyhj();
409   - }
410   - },
411   - /**
412   - * 生命周期函数--监听页面隐藏
413   - */
414   - onHide: function() {
415   -
  494 + onReachBottom: function () {
  495 + if(this.data.currentIndex != 3) {
  496 + this.wjquery();
  497 + } else {
  498 + this.scrollToLower('/api/weshop/users/listExchangeCoupons', {
  499 + user_id: getApp().globalData.user_id,
  500 + store_id: os.stoid,
  501 + }, function() {
  502 + // console.log('!!!!!', _this.data.list.pageData);
  503 + _this.setData({
  504 + result: _this.data.list.pageData,
  505 + });
  506 + });
  507 + };
416 508 },
417   -
418   - /**
419   - * 用户点击右上角分享
420   - */
421   - onShareAppMessage: function() {
422   -
423   - }
  509 +
  510 +
  511 + //起始时间
  512 + // bindDateChenge: function(e) {
  513 + // console.log("是什么", e.detail.value);
  514 + // var isBind = false;
  515 + // this.setData({
  516 + // datet: e.detail.value, isBind: isBind
  517 + // });
  518 + // },
  519 + // 结束时间
  520 + // bindDateChenges: function(e) {
  521 + // console.log("是什么", e.detail.value);
  522 + // var isBinds = false;
  523 + // this.setData({
  524 + // dates: e.detail.value, isBinds: isBinds
  525 + // });
  526 + // },
  527 + //catchtap阻止冒泡,点击清除开始时间的按钮
  528 + // eliminate:function(){
  529 + // console.log("试试");
  530 + // var isBind= true;
  531 + // var data="";
  532 + // this.setData({ datet: data, isBind: isBind})
  533 + // },
  534 + //catchtap阻止冒泡,点击清除结束时间的按钮
  535 + // eliminates: function () {
  536 + // console.log("试试");
  537 + // var isBinds = true;
  538 + // var dates = "";
  539 + // this.setData({ dates: dates, isBinds: isBinds })
  540 + // },
  541 +
  542 +
  543 +
  544 +
  545 +
  546 +
  547 + // 上拉加载请求数据
  548 + getData: function(isInit, url, data) {
  549 + return getApp().request.promiseGet(url, {data: data, isShowLoading: true,})
  550 + .then((res) => {
  551 + _this.data.isLoading = false;
  552 + if(res.data.code == 0) {
  553 + if(isInit) {// 第一次加载
  554 + _this.setData({
  555 + list: res.data.data
  556 + });
  557 + } else {
  558 + _this.setData({
  559 + 'list.pageData': _this.data.list.pageData.concat(res.data.data.pageData)
  560 + });
  561 + };
  562 +
  563 + if((res.data.data.pageData.length == 0) || (res.data.data.pageSize * res.data.data.page >= res.data.data.total)) {
  564 + _this.setData({
  565 + noMore: true
  566 + });
  567 + };
  568 + };
  569 + });
  570 + },
  571 +
  572 +
  573 + // 上拉加载
  574 + scrollToLower(url, requestData, callback) {
  575 + // 页面数据
  576 + // let pageData = this.data.list.pageData;
  577 + // 数据总量
  578 + let total = this.data.list.total;
  579 + // 单页最大数据量
  580 + let pageSize = this.data.list.pageSize;
  581 + // 如果数据总量不为0且小于或等于单页最大数据量,说明数据已全部加载,显示‘没有更多了’
  582 + if((total != 0)&&(total <= pageSize)) {
  583 + this.setData({
  584 + noMore: true
  585 + });
  586 + };
  587 +
  588 + if(!this.data.isloading && !this.data.noMore) {
  589 + this.setData({
  590 + isLoading: true,
  591 + pageNum: this.data.pageNum + 1
  592 + });
  593 + requestData.page = this.data.pageNum;
  594 + this.getData(false, url, requestData).then(()=>{
  595 + if(callback) {
  596 + callback();
  597 + };
  598 + });
  599 + };
  600 + },
  601 +
424 602 })
425 603 \ No newline at end of file
... ...
pages/user/coupons/coupons.json
1 1 {
2   - "usingComponents": {}
  2 + "enablePullDownRefresh": false,
  3 + "usingComponents": {
  4 + "nodata": "/components/nodata/nodata"
  5 + }
3 6 }
4 7 \ No newline at end of file
... ...
pages/user/coupons/coupons.wxml
1 1 <wxs module="filter" src="filter.wxs"></wxs>
2 2 <wxs module="time" src="../../../utils/filter.wxs"></wxs>
3 3  
4   -<view class='money'>
5   - <view class='mt1'>账户微券</view>
6   - <view class='mt10'>
7   - <text class='sz'>{{udata.cashcount}}</text>张
8   - </view>
9   -</view>
10   -<view class='center'>
11   - <view class='cen-left' bindtap='query'>微券查询</view>
12   - <view wx:if="{{is_show_dhwz}}" class='cen-right' bindtap='exchange'>微券兑换</view>
  4 +
  5 +<!-- <view class="big-rim">
  6 + <form bindsubmit='Gettime'>
  7 + <view class="min-rim">
  8 + <view class="rq">日期:</view>
  9 +
  10 + <picker class='pi' mode="date" value='{{datet}}' start="2019/1/1" bindchange='bindDateChenge'>
  11 + <view class="rq-rim">
  12 + <view class='kssj'><text class="wz"name="datat"value='{{datet}}'bindinput='watchPassWord'>{{datet}}</text></view> -->
  13 + <!-- 清除输入框中的内容-->
  14 + <!-- <view hidden='{{isBind}}' class="qc-rim">
  15 + <button class="empty" catchtap="eliminate">x</button>
  16 + </view>
  17 + </view>
  18 + </picker>
  19 +
  20 + <view class="zi">至 </view>
  21 + <picker class="pi"mode="date" value='{{dates}}' start="2019/1/1" end="" bindchange='bindDateChenges'>
  22 + <view class="rim">
  23 + <view class="kssj">
  24 + <text class='wz' name="datas" value='{{dates}}'>{{dates}}</text>
  25 + </view> -->
  26 + <!-- 清除输入框中的内容 -->
  27 + <!-- <view class="end-rim" hidden="{{isBinds}}">
  28 + <button class="end" catchtap="eliminates">x</button>
  29 + </view>
  30 + </view>
  31 + </picker>
  32 + </view>
  33 + <view class="xknr-rim">
  34 + <view class="cxnr">查询内容 </view>
  35 + <view class='top'> -->
  36 + <!-- 下拉框 -->
  37 + <!-- <view class='top-selected' bindtap='bindShowMsg'>
  38 + <input name="grade_name" class="texts" value='{{grade_name}}'>{{grade_name}}</input>
  39 + <view class="rim-images">
  40 + <image class="images" src='{{iurl}}/miniapp/images/usermoney/ico-pt4.png'></image>
  41 + </view>
  42 + </view> -->
  43 + <!-- 下拉需要显示的列表 -->
  44 + <!-- <view class="select-box" wx:if="{{select}}">
  45 + <view wx:for="{{grades}}" wx:key="unique">
  46 + <view class="select_one" bindtap="mySelect" data-name="{{item}}">{{item}}</view>
  47 + </view>
  48 + </view>
  49 + </view>
  50 + </view>
  51 + <button class="botton" form-type='submit' data-query='{{item}}'>查询明细</button>
  52 + </form>
  53 +</view> -->
  54 +
  55 +
  56 +<view class="tab-head" bindtap="clickTab">
  57 + <view wx:for="{{grades}}" wx:key="unique" class="tab-head-item {{currentIndex == index ? 'active':''}}" data-name="{{item}}" data-index="{{index}}">{{item}}</view>
13 58 </view>
14   -<!--选择款-->
15   -<view class='top'>
16   - <!--class='tyi'//class='ter'// -->
17   - <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">可使用(
18   - <text class='k_sz'>{{val}}</text> )</view>
19   - <view class="swiper-tab-list {{currentTab==2? 'on' : ''}}" data-current="2" bindtap="swichNav">已过期
20   - (<text class='y_sz'>{{number}}</text>)</view>
  59 +
  60 +<view class="tab-body">
  61 + <block wx:if="{{currentIndex != 3}}">
  62 + <view class="tab-list-item" wx:for="{{details}}" wx:for-index="idx" wx:for-item="detail">
  63 + <block wx:if="{{detail.isby}}">
  64 + <view class="coupon">
  65 + <view class="flex">
  66 + <view class="c-l"><text class="fs40">包邮券</text></view>
  67 + <view class="c-r dash">
  68 + <view class="flex jc_sb ai_c">
  69 + <view class="pdr20">
  70 + <view class="fs28 ellipsis-1x">包邮券</view>
  71 + <view class="fs24 c-7b pdt4 ellipsis-1x">微券来源: 微信商城</view>
  72 + </view>
  73 + <view class="shrink0"><text class="btn {{currentIndex != 0 ? 'gray':''}}" bindtap="{{currentIndex == 0 ? 'clickUse':''}}" data-index="{{idx}}" data-cashrepno="{{detail.no}}">{{filter.showBtnText(currentIndex)}}</text></view>
  74 + </view>
  75 + <view class="c-time">
  76 + <text class="ellipsis-1x" wx:if="{{detail.use_end_time!=null}}">有效期:{{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}} 至 {{time.format_time(detail.use_end_time)}}</text>
  77 + <text wx:else>有效期:不限</text>
  78 + </view>
  79 + </view>
  80 + </view>
  81 + </view>
  82 + <view class="c-info arrow-down {{detail.isShowDetails ? 'active':''}}" bindtap="clickDetails" data-index="{{idx}}">
  83 + <text class="{{detail.isShowDetails ? '':'ellipsis-1x'}}">使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?',不包邮地区:'+detail.title:''}}</text>
  84 + </view>
  85 + </block>
  86 +
  87 + <block wx:else>
  88 + <view class="coupon">
  89 + <view class="flex">
  90 + <view class="c-l"><text class="rmb fs40">{{filter.getNum(detail.Sum)}}</text></view>
  91 + <view class="c-r dash">
  92 + <view class="flex jc_sb ai_c">
  93 + <view class="pdr20">
  94 + <view class="fs28 ellipsis-1x">{{filter.getNum(detail.Sum)}}元微券</view>
  95 + <view class="fs24 c-7b pdt4 ellipsis-1x">微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}}</view>
  96 + </view>
  97 + <view class="shrink0">
  98 + <text class="btn {{currentIndex != 0 ? 'gray':''}}" bindtap="{{currentIndex == 0 ? 'clickUse':''}}" data-index="{{idx}}" data-cashrepno="{{detail.CashRepNo}}">{{filter.showBtnText(currentIndex)}}</text>
  99 + </view>
  100 + </view>
  101 + <view class="c-time">
  102 + <text wx:if="{{detail.ValidDate}}" class="ellipsis-1x">有效期:{{detail.BeginDate==null ? " " : time.replace_time2(detail.BeginDate)}} 至 {{time.replace_time2(detail.ValidDate)}}</text>
  103 + <text wx:else>有效期:不限</text>
  104 + </view>
  105 + </view>
  106 + </view>
  107 + </view>
  108 + <view class="c-info arrow-down {{detail.isShowDetails ? 'active':''}}" bindtap="clickDetails" data-index="{{idx}}">
  109 + <text class="{{detail.isShowDetails ? '':'ellipsis-1x'}}" wx:if="{{detail.Remark1}}">{{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}}</text>
  110 + <text class="{{detail.isShowDetails ? '':'ellipsis-1x'}}" wx:else>使用说明: {{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}}</text>
  111 + </view>
  112 + </block>
  113 + </view>
  114 + </block>
  115 +
  116 +
  117 + <block wx:else>
  118 + <view class="tab-list-item" wx:for="{{result}}" wx:for-item="result">
  119 + <view class="coupon2">
  120 + <view class="flex">
  121 + <view class="c-l"><text class="rmb fs40">{{filter.getNum(result.ToSum)}}</text></view>
  122 + <view class="c-r dash">
  123 + <view class="flex jc_sb ai_c">
  124 + <view class="pdr20">
  125 + <view class="fs26 ellipsis-1x breakall">{{result.Integral}}积分兑换{{filter.getNum(result.ToSum)}}元微券</view>
  126 + <!-- <view class="fs24 c-7b pdt4 ellipsis-1x">微券来源: 微信商城</view> -->
  127 + </view>
  128 + <view class="shrink0"><text class="btn2" bindtap="clickExchange" data-index="{{index}}">立即兑换</text></view>
  129 + </view>
  130 + <!-- <view class="c-time">
  131 + <text class="ellipsis-1x" wx:if="{{detail.use_end_time!=null}}">有效期:{{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}}至{{ time.format_time(detail.use_end_time)}}</text>
  132 + <text wx:else>有效期:不限</text>
  133 + </view> -->
  134 + </view>
  135 + </view>
  136 + </view>
  137 + </view>
  138 + </block>
  139 +
  140 + <!-- 暂无数据 -->
  141 + <nodata nodataContainer="t-c" wx:if="{{(is_no_more == 1 && current_page == 1) || (result.length == 0)}}"></nodata>
  142 +
  143 + <block wx:if="{{is_get}}">
  144 + <!-- 没有更多数据 -->
  145 + <view class="noMore 1" wx:if="{{(is_no_more == 1)||((details.length !== 0) && (pageSize >= (byTotal+wjTotal)))}}">—— 已经到底了 ——</view>
  146 + </block>
  147 + <view class="noMore 2" wx:if="{{noMore}}">—— 已经到底了 ——</view>
21 148 </view>
22 149  
23   -<view class='noCoupons' wx:if='{{details.length==0 && isset}}'>
24   - <image src='{{iurl}}miniapp/images/user/wqnone.png'></image>
25   - <block wx:if="{{is_show_dhwz}}">
26   - <view class='no_wz1'>没有微券?</view>
27   - <view class='no_wz2'>快去兑换吧</view>
28   - <view class='no_btn' bindtap='exchange'>立即兑换</view>
29   - </block>
30   - <block wx:else>
31   - <view class='no_wz1'>暂无数据</view>
32   - </block>
  150 +<!-- 遮罩层 -->
  151 +<view class="mask" hidden="{{!showQr}}"></view>
  152 +<!-- 码 -->
  153 +<view class="popup-container" hidden="{{!showQr}}">
  154 + <view class="t-r pdb20"><text class="iconfont icon-close fs40" bindtap="closeQr"></text></view>
  155 + <view class="popup">
  156 + <view class="popup-title">
  157 + <block wx:if="{{details[useIndex].isby == 1}}">包邮券</block>
  158 + <block wx:else>
  159 + {{filter.getNum(details[useIndex].Sum)}}元微券
  160 + </block>
  161 + </view>
  162 + <view class="pdt20 c-fe0000"><text class="rmb fs80" wx:if="{{details[useIndex].isby != 1}}">{{filter.getNum(details[useIndex].Sum)}}</text></view>
  163 + <!-- <img src="" alt="" class="img-qr"/> -->
  164 + <view class="qr-container">
  165 + <canvas class="qrcode" canvas-id="qrcode"/>
  166 + </view>
  167 + <view class="pdt20 pdb10 fs26" wx:if="{{details[useIndex].CashRepNo}}">{{details[useIndex].CashRepNo}}</view>
  168 + <view class="pdt20 pdb10 fs26" wx:else>{{details[useIndex].no}}</view>
  169 + <view class="pdv30 c-7b fs26 bdt">
  170 + <text wx:if="{{details[useIndex].ValidDate}}" class="ellipsis-1x">有效期:{{details[useIndex].BeginDate==null ? " " : time.replace_time2(details[useIndex].BeginDate)}} 至 {{time.replace_time2(details[useIndex].ValidDate)}}</text>
  171 + <text wx:elif="{{details[useIndex].use_end_time}}" class="ellipsis-1x">有效期:{{details[useIndex].use_start_time==null ? " " : time.format_time(details[useIndex].use_start_time)}} 至 {{time.format_time(details[useIndex].use_end_time)}}</text>
  172 + <text wx:else>有效期:不限</text>
  173 + </view>
  174 + </view>
33 175 </view>
34   -<view wx:else>
35   - <block wx:for="{{details}}" wx:for-index="idx" wx:for-item="detail">
36   - <block wx:if="{{detail.isby}}">
37   - <view class="data" data-cashrepno='{{detail.no}}' bindtap='click'>
38   - <canvas class="code" canvas-id="qrcode{{idx}}" /><view class="code_val">{{detail.no}}</view>
39   - </view>
40   - <view class="moneys">包邮券</view>
  176 +
  177 +
  178 +<!-- <block wx:for="{{details}}" wx:for-index="idx" wx:for-item="detail">
  179 +
  180 + <block wx:if="{{detail.isby}}"> -->
  181 + <!-- 判断有没有数据有显示没有不显示 -->
  182 + <!-- <view class="data" data-cashrepno='{{detail.no}}' bindtap='click'>
  183 + <view class="code_rim">
  184 + <canvas class="code" canvas-id="qrcode{{idx}}" />
  185 + <view class="code_val">{{detail.no}}</view>
  186 + </view>
  187 +
  188 + <view class="moneys">包邮券</view>
41 189 <view class="car-rim">
42   - <view class="coupon_from">微券来源: 微信商城</view>
43   - <view wx:if="{{detail.use_end_time!='' && detail.use_end_time!=null}}">
44   -
45   - <view class="text">有效期: {{time.format_time(detail.use_start_time)}}至{{time.format_time(detail.use_end_time)}}</view>
46   - </view>
47   - <view wx:else>
48   - <view class="text" wx:if="{{detail.use_start_time!='' && detail.use_start_time!=null}}">有效期: time.format_time(detail.use_start_time)至不限</view>
49   - <view class="text" wx:else>有效期:不限</view>
50   - </view>
51   - <view class="textss">使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用 {{detail.title==null?"":",不包邮地区:"+detail.title}}</view>
52   - </view>
53   - </block>
54   - <block wx:else>
55   -
56   -
57   - <view class="data" data-cashrepno='{{detail.CashRepNo}}' bindtap='click'>
58   - <canvas class="code" canvas-id="qrcode{{idx}}" />
59   - <view class="code_val">{{detail.CashRepNo}}</view>
60   - </view>
61   - <view class="moneys">{{filter.getNum(detail.Sum)}}元微券</view>
62   - <view class="car-rim">
63   - <view class="coupon_from">微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}}</view>
64   - <view wx:if="{{detail.ValidDate!=null&&detail.BeginDate!=null}}">
  190 + <view class="text">微券来源: 微信商城</view>
  191 + <view wx:if="{{detail.use_end_time!=null}}"> -->
  192 + <!-- 不指定格式则默认输出:yyyy-MM-dd hh:mm:ss 格式 -->
  193 + <!-- <view class="text">有效期:
  194 + {{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}}
  195 + 至 {{ time.format_time(detail.use_end_time)}}</view>
  196 + </view>
  197 + <view wx:else>
  198 + <view class="text">有效期: 不限</view>
  199 + </view>
  200 + <view class="textss">使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?",不包邮地区:"+detail.title:""}}
  201 + </view>
  202 + </view>
  203 + </view>
  204 +
  205 +
  206 +
  207 + </block>
  208 + <block wx:else> -->
  209 + <!-- 判断有没有数据有显示没有不显示 -->
  210 + <!-- <view class="data" data-cashrepno='{{detail.CashRepNo}}' bindtap='click'>
  211 + <view class="code_rim">
  212 + <canvas class="code" canvas-id="qrcode{{idx}}" />
  213 + <view class="code_val">{{detail.CashRepNo}}</view>
  214 + </view>
  215 +
  216 + <view class="moneys">{{filter.getNum(detail.Sum)}}元微券</view>
  217 + <view class="car-rim">
  218 + <view class="text">
  219 + 微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}}</view>
  220 + <view wx:if="{{detail.ValidDate!=null}}"> -->
65 221 <!-- 不指定格式则默认输出:yyyy-MM-dd hh:mm:ss 格式 -->
66   - <view class="text">有效期: {{(detail.BeginDate==null || detail.BeginDate=='')?"":time.replace_time2(detail.BeginDate)}}至{{time.replace_time2(detail.ValidDate)}}</view>
  222 + <!-- <view class="text">有效期:
  223 + {{detail.BeginDate==null?" " : time.replace_time2(detail.BeginDate)}}
  224 + 至 {{ time.replace_time2(detail.ValidDate)}}</view>
67 225 </view>
68 226 <view wx:else>
69   - <view class="text">有效期:不限</view>
  227 + <view class="text">有效期: 不限</view>
70 228 </view>
71   - <view wx:if="{{detail.Remark1}}" class="textss"> {{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.Remark1}}</view>
  229 + <view wx:if="{{detail.Remark1}}" class="textss"> {{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}}</view>
72 230 <view wx:else class="textss">使用说明: {{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}}
73 231 </view>
74   -
75 232 </view>
76   - </block>
  233 + </view>
  234 + </block>
  235 +</block> -->
77 236  
78   - </block>
79   -</view>
80 237 \ No newline at end of file
... ...
pages/user/coupons/coupons.wxss
1   -/* pages/yhq/yhq.wxss */
2   -
3   -.money{
4   - background-image: url(https://mshopimg.yolipai.net/miniapp/images/user/redbg.jpg);
5   - color: #FFFFFF;
6   - padding: 40rpx;
7   - text-align: left;
8   - height:70rpx;
  1 +/* 大边框 */
  2 +.big-rim{
  3 + margin-top: 15rpx;
  4 + width: 100%;
  5 + height: 310rpx;
  6 +border-bottom: 8px solid #EEEEEE;
  7 +}
  8 +.min-rim{
  9 +display: flex;
  10 +width: 100%;
  11 +height: auto;
  12 +margin-left: 30rpx;
  13 +}
9 14  
  15 +/* 开始时间 */
  16 +.kssj{
  17 +
  18 +display: inline-block;
  19 +height: 50rpx;
  20 +background-color: #EEEEEE;
  21 +border: 1px solid #DADADA;
  22 +width:200rpx;
  23 +border-radius: 3px;
  24 +line-height:40rpx;
  25 +}
  26 +/* 开始时间的文字 */
  27 +.wz{
  28 + display: inline-block;
  29 +font-size: 25rpx;
  30 +color: #333;
  31 +}
  32 +/* 日期控件 */
  33 +.pi{
  34 + width:200rpx;
  35 + height:auto;
  36 + margin-left:20rpx;
  37 +
10 38 }
11 39  
12   -.mt1{
13   -font-size:28rpx;
14   -margin-top:-15rpx;
15 40  
16   -}
17 41  
18   -.mt10{
19   - margin-top: 15rpx !important;
20   - width: 80%;
21   - font-size:28rpx;
22   - position: relative;
23   - font-family: 'SimHei',Arial;
  42 +/* 查询内容 */
  43 +.cxnr{
  44 + margin-left:30rpx;
  45 + font-size:28rpx;
  46 + font-family: 'SimHei',Arial;
24 47 }
  48 +.rq-rim{
  49 +position:relative;
  50 +left:0;
  51 +top:0;
  52 +}
  53 +/* 至 */
  54 +.zi{
  55 +
  56 + margin-top:14rpx;
  57 + font-size:28rpx;
  58 + font-family: 'SimHei',Arial;
  59 + margin-left:20rpx;
25 60  
26   -
27   -/* pages/team_ping/team_ping.wxss */
28   -.top{
29   - display: flex;
30   - flex-direction: row;
  61 +}
  62 +/* 结束时间 */
  63 +
  64 +.jssj{
  65 + padding-left: 10rpx;
  66 + margin-left: 30rpx;
  67 +padding-bottom: 10rpx;
  68 +height: 35rpx;
  69 +font-size: 25rpx;
  70 +color: #333;
  71 +background-color: #EEEEEE;
  72 +border: 1px solid #DADADA;
  73 +width:85%;
  74 +font-family: 'SimHei',Arial;
  75 +border-radius: 3px;
  76 +}
  77 +/* 查询内容的备考的边框 */
  78 +.xknr-rim{
  79 + display: flex;
31 80 width: 100%;
32   - min-height: 50rpx;
33   - color: #000000;
34   - line-height: 50rpx;
35   - text-align: center;
  81 + height: 55rpx;
  82 + line-height:105rpx;
  83 + margin-top:10rpx;
  84 +
  85 +}
  86 +/* 明细查询 */
  87 +.botton{
  88 + margin-left: 30rpx;
  89 + margin-top: 63rpx;
  90 + background-color: #C4182E;
  91 + width: 95%;
  92 + border-radius:10rpx;
  93 + text-align: center;
  94 + height: 70rpx;
  95 + line-height: 70rpx;
  96 + color: #FFF;
  97 + font-size: 25rpx;
  98 + border: none;
  99 + font-family: '微软雅黑';
  100 + }
  101 + /* 底部边框线
  102 + .bottom{
  103 + width: 100%;
  104 + border-bottom: 20rpx solid #eeeeee;
  105 + } */
  106 + /* 清空按钮的 边框*/
  107 +.qc-rim{
  108 + position:absolute;
  109 + top:10rpx;
  110 + left:175rpx;
  111 +}
  112 +
  113 +/*开始时间清空输入框的按钮*/
  114 +.empty{
  115 + width: 25rpx;
  116 + height: 25rpx;
  117 + border-radius:50%;
  118 + background: #767676;
  119 + color: #fff;
36 120 font-size: 25rpx;
37   - border-bottom: 20rpx solid #eeeeee;
38   -
  121 + text-align: center;
  122 + line-height:18rpx;
39 123 }
40   -
41   -
42   -
43   -.tsan{
44   - background-color: blue;
45   - flex:1;
46   - min-height: 90rpx;
47   - color: #000000;
48   - line-height: 90rpx;
  124 +/* 结束时间清空输入框的按钮的边框 */
  125 +.end-rim{
  126 +position: absolute;
  127 + top: 11rpx;
  128 + left:173rpx;
  129 + width: 25rpx;
  130 + height: 25rpx;
49 131 }
50   -
51   -.tsan{
52   - background-color: brown;
53   - flex:1;
54   - min-height: 90rpx;
55   - color: #000000;
56   - line-height: 90rpx;
  132 +/*结束时间清空输入框的按钮*/
  133 +.end{
  134 +
  135 + width: 25rpx;
  136 + height: 25rpx;
  137 + border-radius:50%;
  138 + background: #767676;
  139 + color: #fff;
  140 + font-size: 25rpx;
  141 + text-align: center;
  142 + line-height:21rpx;
  143 +
57 144 }
58 145  
59   -.tsi{
60   - background-color: yellowgreen;
61   - flex:1;
62   - min-height: 90rpx;
63   - color: #000000;
64   - line-height: 90rpx;
  146 +/* 顶部 */
  147 +.top{
  148 + width: 200rpx;
  149 + height: 50rpx;
  150 + padding: 0 10rpx;
  151 + line-height: 50rpx;
  152 + font-size: 34rpx;
  153 + margin-top: 25rpx;
  154 +
  155 +
65 156 }
  157 +.images{
  158 + width:35rpx;
  159 +height:30rpx;
  160 +margin-top:10rpx;
  161 +margin-left:-14rpx;
66 162  
  163 +}
  164 +.rim-images{
  165 + width: 45rpx;
  166 + height: 46rpx;
  167 + line-height: 37rpx;
  168 + /* border-style: inset;padding:4rpx;text-align: center; */
  169 + background: #f1f1f1;
  170 + border-color:#000000;
  171 + border-width: 1rpx;
  172 + transform:translateX(28%);
  173 + margin-top:-3rpx;
  174 +border-radius:5rpx;
67 175  
68   -.swiper-tab{
69   - width: 100%;
70   - border-bottom: 2rpx solid #777777;
71   - text-align: center;
72   - line-height: 80rpx;
73   - }
74 176  
75   -.swiper-tab-list{
76   - font-size: 25rpx;
77   - display: inline-block;
78   - width: 50%;
79   - color: #777777;
80   - border-left: 2rpx solid #eeeeee;
81 177 }
82   -.on{ color: red;
83   - border-bottom: 5rpx solid red;
84   - width: 50%;
85   - }
  178 +/* 下拉框 */
  179 +.top-selected{
  180 + width: 100%;
  181 + display: flex;
  182 + align-items: center;
  183 + justify-content: space-between;
  184 + border: 1px solid #ccc;
  185 + padding: 0 10rpx;
  186 + font-size: 30rpx;
  187 + background:#eeeeee;
  188 + height:50rpx;
  189 + border-radius:6rpx;
  190 +}
  191 +.texts{
  192 + margin:0 auto;
  193 + font-size: 25rpx;
86 194  
87   -.swiper-box{ display: block; height: 100%; width: 100%; overflow: hidden; }
88   -.swiper-box view{
89   - text-align: center;
90 195 }
91   -
  196 +/* 下拉内容 */
  197 +.select-box {
  198 + background-color: #eeeeee;
  199 + width:225rpx;
  200 + position: relative;
  201 + z-index:1;
  202 + overflow: hidden;
  203 + text-align: left;
  204 + animation: myfirst 0.5s;
  205 + font-size: 25rpx;
  206 +}
  207 +.select_one {
  208 + padding-left: 20rpx;
  209 + width: 100%;
  210 + height: 60rpx;
  211 + line-height: 60rpx;
  212 +}
  213 +/* 优惠券样式 */
92 214 .body{
93 215 text-align: center;
94 216 padding: 20rpx;
... ... @@ -112,152 +234,407 @@ margin-top:-15rpx;
112 234 margin: 20rpx 0;
113 235 text-align: center;
114 236 }
115   -
116   -.center{
117   - border: 2rpx solid #e03835;
118   - background-color: #C4182E;
119   - color: #FFFFFF;
120   - display: flex;
121   - height:70rpx;
122   -}
123   -
124   -.cen-left{
125   - width: 49%;
126   - text-align: center;
127   - margin: 17rpx 0;
128   - border-right: 2px solid #e03835;
129   - overflow: hidden;
130   - text-overflow: ellipsis;
131   - white-space: nowrap;
132   - height:35rpx;
133   - font-size:25rpx;
134   -
135   -}
136   -
137   -.cen-right{
138   - width: 49%;
139   - text-align: center;
140   - margin: 17rpx 0;
141   - height:30rpx;
142   - font-size:25rpx;
143   -}
144   -
145   -
146   -/* 没有维券【】 */
147   -.noCoupons{
148   - text-align: center;
149   - font-size: 30rpx;
150   - color: #666666;
151   - margin: 30rpx;
152   -}
153   -
154   -.noCoupons image{
155   - width:300rpx;
156   - height:200rpx;
157   -}
158   -
159   -.no_wz1{
160   - margin-top: 25rpx;
161   -
162   -}
163   -
164   -.no_wz2{
165   - margin-top: 30rpx;
166   -}
167   -
168   -.no_btn{
169   - background-color: #C4182E;
170   - color: #fff;
171   - font-size: 35rpx;
172   - height: 90rpx;
173   - line-height: 90rpx;
174   - margin: 40rpx auto;
175   - width: 350rpx;
176   -
177   -}
178   -
  237 +/* 二维码列表查询 */
179 238 /* 列表数据*/
180 239 .data{
181   - width: 100%;
182   - text-align:center;
183   -height:440rpx;
  240 + width: 80%;
184 241  
  242 + height:auto;
  243 + margin-left:80rpx;
  244 +
  245 +}
  246 +.rim{
  247 + position: relative;
  248 + top:0rpx;
  249 + left: 0rpx;
185 250 }
186 251 /* 二维码边框 */
187 252 .code_rim{
188   - width: 100%;
  253 + width: 100%;
189 254 height: auto;
190 255 text-align: center;
191 256 font-size: 25rpx;
192 257 padding-top: -30rpx;
193 258 margin-top:-20rpx;
  259 +padding-left:45rpx;
194 260  
195 261 }
196 262  
197 263 /* 二维码 */
198 264 .code{
199   - height:415rpx;
200   - width:61%;
201   -position:relative;
202   -left:20%;
  265 + height: 520rpx;
  266 + display: flex;
  267 + flex-direction: column;
  268 + justify-content: flex-end;
  269 + align-items: center;
  270 + margin-left:40rpx;
203 271  
204   -
205 272 }
  273 +.car-rim{
  274 +width:98%;
  275 +height:177rpx;
  276 +text-align:center;
  277 +border-bottom:2rpx solid #eee;
  278 +margin-left:22rpx;
  279 +
  280 +}
  281 +/* 二维码值 */
  282 +.code_val{
  283 + margin-top:-104rpx;
  284 +margin-left:-59rpx;
  285 +color:#999999;
206 286  
207   -/* 单据时间 */
208   -.time{
209   - margin-top: 10rpx;
210   - font-size: 25rpx;
211   - color: #999999;
212   - width: 100%;
213 287 }
214 288 /* 金额 */
215 289 .moneys{
216   - margin-top:20rpx;
217   - height: 45rpx;
  290 + margin-top:20rpx;
  291 + height: 47rpx;
218 292 width: 100%;
219 293 color:#6fd137;
220 294 text-align: center;
221   - font-size: 40rpx;
  295 + font-size: 38rpx;
222 296 font-family: 'SimHei',Arial;
223 297 margin-bottom:20rpx;
224   -
  298 + margin-left:11rpx;
225 299  
226   -
227 300 }
228 301 /* 文字 */
229 302 .text{
  303 + width: 100%;
  304 + font-size: 25rpx;
  305 + text-align: center;
  306 +
  307 + height: 41rpx;
  308 + color: #999999;
  309 +}
  310 +/* 二维码和条形码的边框 */
  311 +.barqrcode{
230 312 width: 100%;
  313 + height: auto;
  314 + margin-top:50rpx;
  315 +
  316 +}
  317 +/* 日期 */
  318 +.rq{
  319 + height: 25rpx;
231 320 font-size: 28rpx;
232   - text-align: center;
233   - height: 43rpx;
  321 + margin-top:12rpx;
  322 + font-family:'SimHei',Arial;
234 323 }
235   -/* 二维码值 */
236   -.code_val{
237   -font-size:27rpx;
  324 +/* 点击条形 */
  325 +.barcode {
  326 + height: 320rpx;
  327 + flex-direction: column;
  328 + justify-content: center;
  329 + align-items: center;
  330 + margin-left: 30rpx;
238 331 }
239   -.car-rim{
240   -width:85%;
241   -min-height:135rpx;
242   -text-align:center;
243   -border-bottom:2rpx solid #eee;
244   -margin-left:54rpx;
245   -height: auto;
246   -padding-bottom:10rpx;
  332 +/* 二维码边框*/
  333 +.qrcode_rim {
  334 + width: 100%;
  335 + height: 420rpx;
  336 + display: flex;
  337 + flex-direction: column;
  338 + justify-content: flex-end;
  339 + align-items: center;
  340 + margin-left: 80rpx;
  341 + margin-top:-210rpx;
247 342  
248 343 }
  344 +.qrcode{
  345 + /* margin-left: 100rpx; */
  346 +}
249 347 /* 使用说明 */
250 348 .textss{
251 349 width: 100%;
252   - font-size: 28rpx;
  350 + font-size: 25rpx;
253 351 text-align: center;
254   - padding-bottom:15rpx;
  352 +
  353 + min-height: 47rpx;
  354 + height:auto;
  355 + color: #999999;
255 356 }
256 357  
257   -.coupon_from{
258   -width:100%;
259   -font-size:28rpx;
260   -text-align:center;
261   -height:40rpx;
262 358  
263   -}
264 359 \ No newline at end of file
  360 +
  361 +
  362 +
  363 +
  364 +page {
  365 + background-color: #f0f0f0;
  366 + scroll-behavior: smooth;
  367 +}
  368 +
  369 +.c-fe0000 {
  370 + color: #fe0000;
  371 +}
  372 +
  373 +.tab-head {
  374 + display: flex;
  375 + position: sticky;
  376 + top: 0;
  377 + background-color: white;
  378 + font-size: 28rpx;
  379 + z-index: 2;
  380 +}
  381 +
  382 +.tab-head-item {
  383 + flex: 1;
  384 + text-align: center;
  385 + padding: 30rpx 0;
  386 + position: relative;
  387 +}
  388 +
  389 +.tab-head-item.active {
  390 + color: #fe0000;
  391 +}
  392 +
  393 +.tab-head-item.active::after {
  394 + content: '';
  395 + width: 60%;
  396 + height: 2rpx;
  397 + background-color: #fe0000;
  398 + position: absolute;
  399 + bottom: 0;
  400 + left: 50%;
  401 + transform: translateX(-50%);
  402 +}
  403 +
  404 +.tab-body {
  405 + padding: 0 20rpx;
  406 + overflow: hidden;
  407 +}
  408 +
  409 + .tab-list-item {
  410 + border-radius: 10rpx;
  411 + overflow: hidden;
  412 + margin-top: 30rpx;
  413 + }
  414 +
  415 +
  416 +
  417 +.coupon {
  418 + position: relative;
  419 +
  420 + background: radial-gradient(transparent 0, #FFD3D6 0) top left / 200rpx no-repeat,
  421 + radial-gradient(transparent 6px, #fff 0),
  422 + radial-gradient(transparent 6px, #fff 0);
  423 +}
  424 +
  425 +
  426 +.coupon::after {
  427 + content: '';
  428 + position: absolute;
  429 + height: 100%;
  430 + width:4px;
  431 + top: 0;
  432 + left: 0;
  433 + background-image: linear-gradient(to bottom, #FFD3D6 4px, transparent 4px, transparent),
  434 + radial-gradient(4px circle at 0px 8px, #f0f0f0 4px, #FFD3D6 4px);
  435 + background-size: 4px 12px;
  436 + background-repeat: repeat-y;
  437 + }
  438 +
  439 +
  440 + .coupon2 {
  441 + /* width: 300px; */
  442 + padding: 40rpx 0;
  443 + position: relative;
  444 + background: radial-gradient(circle at right top, transparent 16rpx, #FFD3D6 0) top left / 200rpx 51% no-repeat,
  445 + radial-gradient(circle at right bottom, transparent 16rpx, #FFD3D6 0) bottom left /200rpx 51% no-repeat,
  446 + radial-gradient(circle at left top, transparent 16rpx, white 0) top right /calc(100% - 200rpx) 51% no-repeat,
  447 + radial-gradient(circle at left bottom, transparent 16rpx, white 0) bottom right /calc(100% - 200rpx) 51% no-repeat;
  448 + /* filter: drop-shadow(2px 2px 2px rgba(0,0,0,.2)); */
  449 + }
  450 +
  451 + .coupon2::after {
  452 + content: '';
  453 + height: 70%;
  454 + border: 2rpx dashed #fff;
  455 + position: absolute;
  456 + left: 198rpx;
  457 + top: 0;
  458 + bottom: 0;
  459 + margin: auto;
  460 + }
  461 +
  462 +/* .coupon2 .c-l,
  463 + .coupon2 .c-r {
  464 + border: 2rpx solid red;
  465 + padding: 20rpx 0;
  466 + } */
  467 +
  468 +
  469 +
  470 + .c-l {
  471 + color: #fe0000;
  472 + width: 200rpx;
  473 + display: flex;
  474 + align-items: center;
  475 + justify-content: center;
  476 + flex-shrink: 0;
  477 + }
  478 +
  479 + .rmb::before {
  480 + content: '¥';
  481 + font-size: 28rpx;
  482 + }
  483 +
  484 + .c-r {
  485 + box-sizing: border-box;
  486 + padding: 20rpx;
  487 + flex: 1;
  488 + }
  489 +
  490 + .c-time {
  491 + color: #7b7b7b;
  492 + font-size: 24rpx;
  493 + padding-top: 10rpx;
  494 + word-break: break-all;
  495 + }
  496 +
  497 + .btn, .btn2 {
  498 + font-size: 26rpx;
  499 + padding: 10rpx 20rpx;
  500 + border: 2rpx solid #fe0000;
  501 + border-radius: 30rpx;
  502 + flex-shrink: 0;
  503 + }
  504 +
  505 + .btn {
  506 + color: #fe0000;
  507 + }
  508 +
  509 + .btn.gray {
  510 + color: #ccc;
  511 + border-color: #ccc;
  512 + }
  513 +
  514 + .btn2 {
  515 + color: white;
  516 + background-color: #fe0000;
  517 + }
  518 +
  519 + .c-info {
  520 + border-top: 2rpx dashed #f0f0f0;
  521 + padding: 10rpx 40rpx 10rpx 10rpx;
  522 + font-size: 22rpx;
  523 + background-color: #fefefe;
  524 + color: #7b7b7b;
  525 + position: relative;
  526 + }
  527 +
  528 + .arrow-down::after {
  529 + font-family: iconfont;
  530 + content: '\e600';
  531 + font-size: 32rpx;
  532 + position: absolute;
  533 + right: 10rpx;
  534 + top: 10rpx;
  535 + /* transform: translateY(-50%); */
  536 + transition: all 0.3s;
  537 + }
  538 +
  539 + .arrow-down.active::after {
  540 + transform: rotateZ(180deg);
  541 + }
  542 +
  543 + .mask {
  544 + position: fixed;
  545 + width: 100%;
  546 + height: 100%;
  547 + top: 0;
  548 + background-color: rgba(0,0,0,.7);
  549 + z-index: 1;
  550 + }
  551 +
  552 + .popup-container {
  553 + position: fixed;
  554 + width: 70%;
  555 + border-radius: 12rpx;
  556 + top: 50%;
  557 + left: 50%;
  558 + transform: translate(-50%, -50%);
  559 + z-index: 3;
  560 + }
  561 +
  562 + .popup {
  563 + text-align: center;
  564 + border-radius: 12rpx;
  565 + background-color: white;
  566 + overflow: hidden;
  567 + /* width: 80%; */
  568 + }
  569 +
  570 + .popup-container .icon-close {
  571 + color: rgba(255,255,255,.6);
  572 + }
  573 +
  574 + .popup-title {
  575 + padding: 40rpx 0;
  576 + color: #fe0000;
  577 + background-color: #FFD3D6;
  578 + position: relative;
  579 + }
  580 +
  581 + .popup-title::after {
  582 + content: '';
  583 + position: absolute;
  584 + left: -20rpx;
  585 + bottom: -12rpx;
  586 + width: 130%;
  587 + height: 20rpx;
  588 + background-image: -webkit-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent);
  589 + background-image: -moz-radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent);
  590 + background-image: radial-gradient(circle, #FFD3D6, #FFD3D6 20rpx, transparent 20rpx, transparent);
  591 + background-size: 40rpx 40rpx;
  592 + transform: rotate(180deg);
  593 + -webkit-transform: rotate(180deg);
  594 + }
  595 +
  596 +
  597 + .popup .rmb::before {
  598 + font-size: 40rpx;
  599 + }
  600 +
  601 + .img-qr {
  602 + display: block;
  603 + width: 300rpx;
  604 + height: 300rpx;
  605 + margin: 0 auto;
  606 + background-color: pink;
  607 + }
  608 +
  609 + .qrcode {
  610 + width: 300rpx;
  611 + height: 300rpx;
  612 + margin: 0 auto;
  613 + }
  614 +
  615 +
  616 + .noMore {
  617 + padding: 20rpx;
  618 + color: #bbb;
  619 + text-align: center;
  620 + font-size: 22rpx;
  621 + }
  622 +
  623 + .breakall {
  624 + word-break: break-all;
  625 + }
  626 +
  627 +
  628 +
  629 +
  630 +
  631 +
  632 +
  633 +
  634 +
  635 +
  636 +
  637 +
  638 +
  639 +
  640 +
  641 +
... ...
pages/user/coupons/exchange/exchange.js deleted
1   -// pages/user/yhq/exchange/exchange.js
2   -var e = function (e) {
3   - return e && e.__esModule ? e : {
4   - default: e
5   - };
6   -}(require("../../../../utils/LoadMore.js")),
7   - t = getApp(),
8   - a = t.request,
9   - o = t.globalData.setting,
10   - os = o,
11   - i = require("../../../../utils/util.js"),
12   - ut = i,
13   - b = require("../../../../app.js"),
14   - app = b,
15   - s = require("../../../../utils/common.js"),
16   - n = new e.default();
17   -var regeneratorRuntime = require('../../../../utils/runtime.js');
18   -Page({
19   -
20   - /**
21   - * 页面的初始数据
22   - */
23   - data: {
24   - result:[],//结果
25   - },
26   -
27   - /**
28   - * 生命周期函数--监听页面加载
29   - */
30   - onLoad: function (options) {
31   -
32   - },
33   -
34   - /**
35   - * 生命周期函数--监听页面初次渲染完成
36   - */
37   - onReady: function () {
38   -
39   - },
40   - // 刷出兑换劵
41   - async exchange() {
42   - var e = this, result;
43   - var user_id = getApp().globalData.user_id;
44   - var store_id = os.stoid;
45   - await getApp().request.promiseGet("/api/weshop/users/listExchangeCoupons", {
46   - data: {
47   - user_id: user_id, store_id: store_id,
48   - }
49   - }).then(res => {
50   - var msg=res.data;
51   - result=msg.data.pageData;
52   -
53   - })
54   - e.setData({
55   - result: result
56   - })
57   -
58   - },
59   - /**
60   - * 点击兑换
61   - */
62   - async click(e) {
63   - var th=this;
64   -
65   - var index=e.currentTarget.dataset.index;
66   - var item=this.data.result[index];
67   - this.data.monye=item.ToSum;
68   - this.data.integr=item.Integral;
69   - this.data.number=item.Number;
70   -
71   - var my_con = this.selectComponent("#my_con"); //组件的id
72   - var title="是否使用"+th.data.integr+"积分兑换代金券面值"+th.data.monye+"元";
73   - my_con.open(title, "确定", "取消", th.sure_pay, null)
74   - },
75   -
76   - sure_pay:function(){
77   - var monye=this.data.monye;
78   - var integr=this.data.integr;
79   - var number=this.data.number;
80   -
81   - var user_id = getApp().globalData.user_id;
82   - console.log(integr,"是什么微卷",typeof integr,monye);
83   - var store_id = os.stoid;
84   - getApp().request.post("/api/weshop/users/saveInterToCash", {
85   - data: {
86   - user_id: user_id,
87   - store_id: store_id,
88   - money:monye,
89   - integ:integr,
90   - number:number,
91   - },
92   - success: function (su) {
93   - if (su.data.data!=null) {
94   - getApp().showWarning("兑换成功");
95   - }else{
96   - getApp().showWarning("积分不足");
97   - }
98   - }
99   -
100   - })
101   - },
102   -
103   -
104   - /**
105   - * 生命周期函数--监听页面显示
106   - */
107   - onShow: function () {
108   - this.exchange();
109   - wx.setNavigationBarTitle({
110   - title: "微券兑换",
111   - })
112   - },
113   -
114   - /**
115   - * 生命周期函数--监听页面隐藏
116   - */
117   - onHide: function () {
118   -
119   - },
120   -
121   - /**
122   - * 生命周期函数--监听页面卸载
123   - */
124   - onUnload: function () {
125   -
126   - },
127   -
128   - /**
129   - * 页面相关事件处理函数--监听用户下拉动作
130   - */
131   - onPullDownRefresh: function () {
132   -
133   - },
134   -
135   - /**
136   - * 页面上拉触底事件的处理函数
137   - */
138   - onReachBottom: function () {
139   -
140   - },
141   -
142   - /**
143   - * 用户点击右上角分享
144   - */
145   - onShareAppMessage: function () {
146   -
147   - }
148   -})
149 0 \ No newline at end of file
pages/user/coupons/exchange/exchange.json deleted
1   -{
2   - "usingComponents": {
3   - "my_confirm": "/components/my_confirm/my_confirm"
4   - }
5   -}
6 0 \ No newline at end of file
pages/user/coupons/exchange/exchange.wxml deleted
1   -<wxs module="filter" src="filter.wxs"></wxs>
2   -<block wx:for="{{result}}" wx:for-index="idx" wx:for-item="result">
3   - <view class='jfcz1'>
4   - <view class='jf-w'>
5   - <view class="symbol">¥</view>
6   - <view><text class='f-big'>{{filter.getNum(result.ToSum)}}</text></view>
7   - </view>
8   - <view class='mb20'>{{result.Integral}}积分兑换{{filter.getNum(result.ToSum)}}元微券</view>
9   - <view class='jf-btn' bindtap='click' data-index="{{idx}}">立即兑换</view>
10   - </view>
11   -</block>
12   -<my_confirm id="my_con"></my_confirm>
13 0 \ No newline at end of file
pages/user/coupons/exchange/exchange.wxss deleted
1   -/* 替换【】 */
2   -.jfcz1{
3   - background: url(https://mshopimg.yolipai.net/miniapp/images/user/jfzyc1.png);
4   - text-align: center;
5   - padding: 20px 0;
6   - font-size: 18px;
7   - color: #FFF;
8   - margin: 20px 2% 0 0;
9   - margin-left: 40rpx;
10   - width:88%;
11   - vertical-align: top;
12   - display: inline-block;
13   -}
14   -.jf-w{
15   - display: flex;
16   - width: 100%;
17   - height: auto;
18   -}
19   -/* 人民币的符号 */
20   -.symbol{
21   - width: 35rpx;
22   - height: 45rpx;
23   - margin-left: 279rpx;
24   - margin-top:5rpx;
25   -
26   -}
27   -/* 钱 */
28   -.f-big{
29   - font-size: 25px;
30   - font-family: 'SimHei',Arial;
31   - margin-left:4rpx;
32   -
33   -}
34   -
35   -.mb20{
36   - margin-bottom: 20px;
37   -}
38   -
39   -.jf-btn{
40   - background-color: #C4182E;
41   - display: inline-block;
42   - height: 50px;
43   - line-height: 50px;
44   - width: 80%;
45   - margin: auto;
46   - border-radius: 4px;
47   - text-align: center;
48   -}
49 0 \ No newline at end of file
pages/user/coupons/exchange/filter.wxs deleted
1   -var numFr = {
2   - getNum: function(x) {
3   - var f = parseFloat(x);
4   - if (isNaN(f)) {
5   - return false;
6   - }
7   - var f = Math.round(x * 100) / 100;
8   - var s = f.toString();
9   - var rs = s.indexOf('.');
10   - if (rs < 0) {
11   - rs = s.length;
12   - s += '.';
13   - }
14   - while (s.length <= rs + 2) {
15   - s += '0';
16   - }
17   - return s;
18   - }
19   -}
20   -module.exports = {
21   - getNum: numFr.getNum
22   -}
23 0 \ No newline at end of file
pages/user/coupons/filter.wxs
... ... @@ -15,8 +15,24 @@ var numFr = {
15 15 s += '0';
16 16 }
17 17 return s;
18   - }
  18 + },
  19 + showBtnText: function(index) {
  20 + switch(index) {
  21 + case 1: {
  22 + return '已使用';
  23 + break;
  24 + };
  25 + case 2: {
  26 + return '已过期';
  27 + break;
  28 + };
  29 + default: {
  30 + return '立即使用';
  31 + };
  32 + };
  33 + },
19 34 }
20 35 module.exports = {
21   - getNum: numFr.getNum
  36 + getNum: numFr.getNum,
  37 + showBtnText: numFr.showBtnText,
22 38 }
23 39 \ No newline at end of file
... ...
pages/user/coupons/index.wxs deleted
1   -var formatNumber = function (n) {
2   - n = n.toString()
3   - return n[1] ? n : '0' + n
4   -}
5   -
6   -var regYear = getRegExp("(y+)", "i");
7   -
8   -var dateFormat = function (timestamp, format) {
9   - if (!format) {
10   - format = "yyyy-MM-dd hh:mm:ss";
11   - }
12   - timestamp = parseInt(timestamp)*1000;;
13   - var realDate = getDate(timestamp);
14   - function timeFormat(num) {
15   - return num < 10 ? '0' + num : num;
16   - }
17   - var date = [
18   - ["M+", timeFormat(realDate.getMonth() + 1)],
19   - ["d+", timeFormat(realDate.getDate())],
20   - ["h+", timeFormat(realDate.getHours())],
21   - ["m+", timeFormat(realDate.getMinutes())],
22   - ["s+", timeFormat(realDate.getSeconds())],
23   - ["q+", Math.floor((realDate.getMonth() + 3) / 3)],
24   - ["S+", realDate.getMilliseconds()],
25   - ];
26   - var reg1 = regYear.exec(format);
27   - // console.log(reg1[0]);
28   - if (reg1) {
29   -
30   - format = format.replace(reg1[1], (realDate.getFullYear() + '').substring(4 - reg1[1].length));
31   - }
32   - for (var i = 0; i < date.length; i++) {
33   - var k = date[i][0];
34   - var v = date[i][1];
35   -
36   - var reg2 = getRegExp("(" + k + ")").exec(format);
37   - if (reg2) {
38   - format = format.replace(reg2[1], reg2[1].length == 1
39   - ? v : ("00" + v).substring(("" + v).length));
40   - }
41   - }
42   - return format;
43   -}
44   -
45   -
46   -module.exports = {
47   - dateFormat: dateFormat
48   -};
49   -
50   -
51   -function parse(fmt) {
52   -
53   - var a = fmt.slice(0, 4);
54   - console.log("a",a);
55   - var b=+"-";
56   - console.log("b", b);
57   - var c = fmt.slice(5, 7);
58   - var d=+"-";
59   - console.log("d", d);
60   - var e = fmt.slice(8, 9);
61   - console.log("e", e);
62   -
63   -}
64 0 \ No newline at end of file
pages/user/coupons/qr_code/qr_code.js deleted
1   -// pages/user/yhq/qr_code/qr_code.js
2   -const {
3   - barcode,
4   - qrcode
5   -} = require('../../../../utils/index.js')
6   -Page({
7   -
8   - /**
9   - * 页面的初始数据
10   - */
11   - data: {
12   -
13   - },
14   -
15   - /**
16   - * 生命周期函数--监听页面加载
17   - */
18   - onLoad: function (options) {
19   - var val = getApp().globalData.val;
20   - console.log(val);
21   - this.qrcode(val);
22   - },
23   - clicks:function(){
24   -
25   - wx.navigateBack();
26   -
27   - },
28   - /**
29   - * 生命周期函数--监听页面初次渲染完成
30   - */
31   - onReady: function () {
32   -
33   - },
34   -
35   - /**
36   - * 生命周期函数--监听页面显示
37   - */
38   - onShow: function () {
39   - wx.setNavigationBarTitle({
40   - title: "微券查询",
41   - })
42   - },
43   -qrcode:function(val){
44   - console.log(val);
45   - barcode('barcode', val, 600,160);
46   - qrcode('qrcode', val,520,520);
47   -},
48   - /**
49   - * 生命周期函数--监听页面隐藏
50   - */
51   - onHide: function () {
52   -
53   - },
54   -
55   - /**
56   - * 生命周期函数--监听页面卸载
57   - */
58   - onUnload: function () {
59   -
60   - },
61   -
62   - /**
63   - * 页面相关事件处理函数--监听用户下拉动作
64   - */
65   - onPullDownRefresh: function () {
66   -
67   - },
68   -
69   - /**
70   - * 页面上拉触底事件的处理函数
71   - */
72   - onReachBottom: function () {
73   -
74   - },
75   -
76   - /**
77   - * 用户点击右上角分享
78   - */
79   - onShareAppMessage: function () {
80   -
81   - }
82   -})
83 0 \ No newline at end of file
pages/user/coupons/qr_code/qr_code.json deleted
1   -{
2   - "usingComponents": {}
3   -}
4 0 \ No newline at end of file
pages/user/coupons/qr_code/qr_code.wxml deleted
1   -<view class="barqrcode" bindtap='clicks'>
2   - <view class="barcode">
3   - <canvas canvas-id="barcode" />
4   - </view>
5   - <view class="qrcode_rim">
6   - <canvas class="qrcode" canvas-id="qrcode" />
7   - </view>
8   -</view>
9 0 \ No newline at end of file
pages/user/coupons/qr_code/qr_code.wxss deleted
1   -/* 二维码和条形码的边框 */
2   -.barqrcode{
3   - width: 100%;
4   - height: auto;
5   - margin-top:225rpx;
6   -
7   -}
8   -/* 点击条形 */
9   -.barcode {
10   - height:150rpx;
11   - width: 600rpx;
12   - flex-direction: column;
13   - justify-content: center;
14   - align-items: center;
15   - padding-left:40px;
16   -
17   -}
18   -/* 二维码边框*/
19   -.qrcode_rim {
20   - width: 550rpx;
21   - height:550rpx;
22   -display:flex;
23   -flex-direction:column;
24   -justify-content:flex-end;
25   -align-items:center;
26   -margin-left:121rpx;
27   -margin-top:-13rpx;
28   -
29   -}
30   -
31   -.qrcode{
32   - width:550rpx;
33   -height:550rpx;
34   -
35   -
36   -}
37 0 \ No newline at end of file
pages/user/coupons/query/index.js deleted
1   -var t = getApp(),
2   - a = t.request,
3   - o = t.globalData.setting,
4   - os = o,
5   - i = require("../../../../utils/util.js"),
6   - ut = i,
7   - s = require("../../../../utils/common.js");
8   -var regeneratorRuntime = require('../../../../utils/runtime.js');
9   -const {
10   - barcode,
11   - qrcode
12   -} = require('../../../../utils/index.js')
13   -Page({
14   - data: {
15   -
16   - val:false,
17   - datet: "",
18   - dates: "",
19   - parameter: false,
20   - details:[],//数据
21   - isBind:true,//控制清空时间日期的按钮
22   - isBinds: true,
23   - select: false,//下拉框
24   - grade_name: '所有',
25   - grades: [
26   - '所有',
27   - '已使用',
28   - '已过期',
29   - '未使用',
30   - ],
31   - display:false,
32   - is_no_more: 0,
33   - current_page:1,
34   - by_list:[],
35   - islading:0,
36   - },
37   - /**
38   - * 生命周期函数--监听页面加载
39   - */
40   - onLoad: function (options) {
41   - this.setData({
42   - details: []
43   - });
44   - this.wjquery();
45   - },
46   - /**
47   - * 生命周期函数--监听页面显示
48   - */
49   - onShow: function (options) {
50   - wx.setNavigationBarTitle({
51   - title: "微券查询",
52   - })
53   - },
54   - // 点击选中二维码
55   - click: function (e) {
56   - var val = e.currentTarget.dataset.cashrepno;
57   - getApp().globalData.val = val;
58   - wx.navigateTo({
59   - url: '../qr_code/qr_code',
60   - })
61   - },
62   - // 点击返回主页
63   - // clicks: function () {
64   - // this.setData({
65   - // hide:true, display:false
66   - // })
67   - // },
68   - //监听输入框显示清空按钮
69   - watchPassWord: function (event) {
70   - var val = event.detail.value;
71   - if (val != "" && val != null) {
72   - var isBind = false;
73   - this.setData({ isBind: isBind });
74   -
75   - }
76   - },
77   - /**
78   - * 点击下拉框
79   - */
80   - bindShowMsg() {
81   - this.setData({
82   - select: !this.data.select
83   - })
84   - },
85   - /**
86   - * 已选下拉框
87   - */
88   - mySelect(e) {
89   - var name = e.currentTarget.dataset.name;
90   - this.setData({
91   - grade_name: name,
92   - select: false
93   - })
94   - },
95   -
96   - //明细查询
97   - Gettime:function(e){
98   - var page = 0;
99   - //开始获取时间
100   - var th = this;
101   - var stime = th.data.datet;
102   - var etime = th.data.dates;
103   - var tpye = th.data.grade_name;
104   -
105   - //开始获取时间结束
106   - //删除字符中的——
107   - var datatk = stime.replace(/[-]/g, "");
108   - var dataj = etime.replace(/[-]/g, "");
109   - //转换类型
110   - var datak = parseInt(datatk);
111   - var dataj = parseInt(dataj);
112   -
113   - //判断初始时间小于结束时间
114   - if (datak > dataj) {
115   - getApp().showWarning("结束时间错误");
116   - } else {
117   - this.setData({ details: [] });
118   - this.data.current_page=1;
119   - this.data.is_no_more=0;
120   - this.data.by_list=[];
121   - this.data.details=[];
122   - this.wjquery();
123   - }
124   -
125   - },
126   - //微卷查询流水明细
127   - async wjquery() {
128   - if (this.data.islading) return;
129   - if(this.data.is_no_more) return;
130   - this.data.islading=1;
131   - var th=this;
132   -
133   - var len = this.data.details.length;
134   -
135   - var e = this,sum, val, number;
136   - var user_id = getApp().globalData.user_id;
137   - var store_id = os.stoid;
138   - var stime = this.data.datet;
139   - var etime = this.data.dates;
140   - var tpye = this.data.grade_name;
141   - console.log("是什么类型",tpye);
142   - var IsUse = 0;
143   - var e = this;
144   - var get_data = {
145   - user_id: user_id,
146   - store_id: store_id,
147   - pageSize: 10,
148   - page: e.data.current_page
149   - };
150   -
151   - var dd={ user_id: user_id, store_id: store_id,pageSize: 100};
152   - dd.isuse=0;
153   - // 判断下拉框,添加类型
154   - if (tpye == "已使用"){
155   - get_data.IsUse = 1;
156   - dd.isuse=1;
157   - } else if (tpye == "已过期"){
158   - get_data.IsUse = 2;
159   - } else if (tpye == "未使用"){
160   - get_data.IsUse = 0;
161   - }
162   - if (etime != "" && etime != null) {
163   - get_data.EndDate = etime;
164   -
165   - //时间要转成时间戳
166   - var new_t=new Date(etime)/1000;
167   - dd.etime=new_t;
168   - }
169   -
170   - if (stime != "" && stime != null) {
171   - get_data.BeginDate= stime;
172   - //时间要转成时间戳
173   - var new_t=new Date(stime)/1000;
174   - dd.stime=new_t;
175   - }
176   -
177   - var by_list=[];
178   - if(th.data.current_page==1){
179   - //先拿包邮券
180   - await getApp().request.promiseGet("/api/weshop/userfeemail/pageAndArea", {
181   - data: dd,
182   - }).then(res => {
183   - if(res.data.code==0 && res.data.data && res.data.data.total>0){
184   - by_list=res.data.data.pageData;
185   - for(var i in by_list){
186   - by_list[i].isby=1;
187   - //过滤是时间的范围
188   - if(get_data.IsUse == 2 && by_list[i].use_end_time>=ut.gettimestamp()){
189   - th.data.by_list.push(by_list[i]);
190   - }else if(get_data.IsUse == 0 && by_list[i].use_end_time<ut.gettimestamp()){
191   - th.data.by_list.push(by_list[i]);
192   - }else if(get_data.IsUse==1){
193   - th.data.by_list.push(by_list[i]);
194   - }else if(get_data.IsUse==undefined){
195   - th.data.by_list.push(by_list[i]);
196   - }
197   - }
198   - }
199   - })
200   - }
201   -
202   - var big_arr = this.data.details; ///api/weshop / users / listQuan
203   - if(th.data.current_page==1 && th.data.by_list.length>0)
204   - big_arr=th.data.by_list;
205   -
206   - await getApp().request.promiseGet("/api/weshop/users/listQuan", {
207   - data: get_data,
208   - isShowLoading: 1
209   -
210   - }).then(res => {
211   -
212   - th.data.islading=0;
213   - var a = res.data;
214   - var len = e.data.details.length;
215   - var details = a.data.pageData;
216   -
217   - if (details.length == 0 ) {
218   - this.data.is_no_more = 1;
219   - getApp().showWarning("未找更多数据");
220   - if(th.data.by_list && th.data.current_page==1){
221   - th.setData({ val: val,details:th.data.by_list});
222   - details=th.data.by_list;
223   - setTimeout(function () {
224   - for (var i = 0; i < details.length; i++) {
225   - var no = i + len;
226   - qrcode('qrcode' + no, details[i].no,460, 460);
227   - }
228   - }, 100)
229   - }
230   - return false;
231   - }
232   -
233   - th.data.current_page++;
234   - val = a.data.total+th.data.by_list.length;
235   -
236   - big_arr=big_arr.concat(details);
237   - this.setData({
238   - details: big_arr,val: val
239   - });
240   -
241   - setTimeout(function () {
242   - if(by_list) details=big_arr;
243   - for (var i = 0; i < details.length; i++) {
244   - var no = i + len;
245   - qrcode('qrcode' + no, details[i].CashRepNo?details[i].CashRepNo:details[i].no,460, 460);
246   - }
247   - }, 100)
248   - })
249   -
250   -
251   -
252   - },
253   - //---加载更多是靠这个函数----
254   - onReachBottom: function () {
255   - this.wjquery();
256   - },
257   - //起始时间
258   - bindDateChenge: function(e) {
259   - console.log("是什么", e.detail.value);
260   - var isBind = false;
261   - this.setData({
262   - datet: e.detail.value, isBind: isBind
263   - });
264   - },
265   - // 结束时间
266   - bindDateChenges: function(e) {
267   - console.log("是什么", e.detail.value);
268   - var isBinds = false;
269   - this.setData({
270   - dates: e.detail.value, isBinds: isBinds
271   - });
272   - },
273   - //catchtap阻止冒泡,点击清除开始时间的按钮
274   - eliminate:function(){
275   - console.log("试试");
276   - var isBind= true;
277   - var data="";
278   - this.setData({ datet: data, isBind: isBind})
279   - },
280   - //catchtap阻止冒泡,点击清除结束时间的按钮
281   - eliminates: function () {
282   - console.log("试试");
283   - var isBinds = true;
284   - var dates = "";
285   - this.setData({ dates: dates, isBinds: isBinds })
286   - }
287   -
288   -})
289 0 \ No newline at end of file
pages/user/coupons/query/index.json deleted
1   -{}
2 0 \ No newline at end of file
pages/user/coupons/query/index.wxml deleted
1   -<wxs module="filter" src="../filter.wxs"></wxs>
2   -<wxs module="time" src="../../../../utils/filter.wxs"></wxs>
3   -
4   -
5   -<view class="big-rim">
6   - <form bindsubmit='Gettime'>
7   - <view class="min-rim">
8   - <view class="rq">日期:</view>
9   -
10   - <picker class='pi' mode="date" value='{{datet}}' start="2019/1/1" bindchange='bindDateChenge'>
11   - <view class="rq-rim">
12   - <view class='kssj'><text class="wz"name="datat"value='{{datet}}'bindinput='watchPassWord'>{{datet}}</text></view>
13   - <!-- 清除输入框中的内容-->
14   - <view hidden='{{isBind}}' class="qc-rim">
15   - <button class="empty" catchtap="eliminate">x</button>
16   - </view>
17   - </view>
18   - </picker>
19   -
20   - <view class="zi">至 </view>
21   - <picker class="pi"mode="date" value='{{dates}}' start="2019/1/1" end="" bindchange='bindDateChenges'>
22   - <view class="rim">
23   - <view class="kssj">
24   - <text class='wz' name="datas" value='{{dates}}'>{{dates}}</text>
25   - </view>
26   - <!-- 清除输入框中的内容 -->
27   - <view class="end-rim" hidden="{{isBinds}}">
28   - <button class="end" catchtap="eliminates">x</button>
29   - </view>
30   - </view>
31   - </picker>
32   - </view>
33   - <view class="xknr-rim">
34   - <view class="cxnr">查询内容 </view>
35   - <view class='top'>
36   - <!-- 下拉框 -->
37   - <view class='top-selected' bindtap='bindShowMsg'>
38   - <input name="grade_name" class="texts" value='{{grade_name}}'>{{grade_name}}</input>
39   - <view class="rim-images">
40   - <image class="images" src='{{iurl}}/miniapp/images/usermoney/ico-pt4.png'></image>
41   - </view>
42   - </view>
43   - <!-- 下拉需要显示的列表 -->
44   - <view class="select-box" wx:if="{{select}}">
45   - <view wx:for="{{grades}}" wx:key="unique">
46   - <view class="select_one" bindtap="mySelect" data-name="{{item}}">{{item}}</view>
47   - </view>
48   - </view>
49   - </view>
50   - </view>
51   - <button class="botton" form-type='submit' data-query='{{item}}'>查询明细</button>
52   - </form>
53   -</view>
54   -<block wx:for="{{details}}" wx:for-index="idx" wx:for-item="detail">
55   -
56   - <block wx:if="{{detail.isby}}">
57   - <!-- 判断有没有数据有显示没有不显示 -->
58   - <view class="data" data-cashrepno='{{detail.no}}' bindtap='click'>
59   - <view class="code_rim">
60   - <canvas class="code" canvas-id="qrcode{{idx}}" />
61   - <view class="code_val">{{detail.no}}</view>
62   - </view>
63   -
64   - <view class="moneys">包邮券</view>
65   - <view class="car-rim">
66   - <view class="text">微券来源: 微信商城</view>
67   - <view wx:if="{{detail.use_end_time!=null}}">
68   - <!-- 不指定格式则默认输出:yyyy-MM-dd hh:mm:ss 格式 -->
69   - <view class="text">有效期:
70   - {{detail.use_start_time==null?" " : time.format_time(detail.use_start_time)}}
71   - 至 {{ time.format_time(detail.use_end_time)}}</view>
72   - </view>
73   - <view wx:else>
74   - <view class="text">有效期: 不限</view>
75   - </view>
76   - <view class="textss">使用说明: 包邮券,全场通用,满 {{detail.condition}}元使用{{detail.title?",不包邮地区:"+detail.title:""}}
77   - </view>
78   - </view>
79   - </view>
80   -
81   -
82   -
83   - </block>
84   - <block wx:else>
85   - <!-- 判断有没有数据有显示没有不显示 -->
86   - <view class="data" data-cashrepno='{{detail.CashRepNo}}' bindtap='click'>
87   - <view class="code_rim">
88   - <canvas class="code" canvas-id="qrcode{{idx}}" />
89   - <view class="code_val">{{detail.CashRepNo}}</view>
90   - </view>
91   -
92   - <view class="moneys">{{filter.getNum(detail.Sum)}}元微券</view>
93   - <view class="car-rim">
94   - <view class="text">
95   - 微券来源: {{detail.SendMan==null?'线下发放':detail.SendMan==''?"线下发放":detail.SendMan}}</view>
96   - <view wx:if="{{detail.ValidDate!=null}}">
97   - <!-- 不指定格式则默认输出:yyyy-MM-dd hh:mm:ss 格式 -->
98   - <view class="text">有效期:
99   - {{detail.BeginDate==null?" " : time.replace_time2(detail.BeginDate)}}
100   - 至 {{ time.replace_time2(detail.ValidDate)}}</view>
101   - </view>
102   - <view wx:else>
103   - <view class="text">有效期: 不限</view>
104   - </view>
105   - <view wx:if="{{detail.Remark1}}" class="textss"> {{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}}</view>
106   - <view wx:else class="textss">使用说明: {{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}}
107   - </view>
108   - </view>
109   - </view>
110   - </block>
111   -</block>
112   -
pages/user/coupons/query/index.wxss deleted
1   -/* 大边框 */
2   -.big-rim{
3   - margin-top: 15rpx;
4   - width: 100%;
5   - height: 310rpx;
6   -border-bottom: 8px solid #EEEEEE;
7   -}
8   -.min-rim{
9   -display: flex;
10   -width: 100%;
11   -height: auto;
12   -margin-left: 30rpx;
13   -}
14   -
15   -/* 开始时间 */
16   -.kssj{
17   -
18   -display: inline-block;
19   -height: 50rpx;
20   -background-color: #EEEEEE;
21   -border: 1px solid #DADADA;
22   -width:200rpx;
23   -border-radius: 3px;
24   -line-height:40rpx;
25   -}
26   -/* 开始时间的文字 */
27   -.wz{
28   - display: inline-block;
29   -font-size: 25rpx;
30   -color: #333;
31   -}
32   -/* 日期控件 */
33   -.pi{
34   - width:200rpx;
35   - height:auto;
36   - margin-left:20rpx;
37   -
38   -}
39   -
40   -
41   -
42   -/* 查询内容 */
43   -.cxnr{
44   - margin-left:30rpx;
45   - font-size:28rpx;
46   - font-family: 'SimHei',Arial;
47   -}
48   -.rq-rim{
49   -position:relative;
50   -left:0;
51   -top:0;
52   -}
53   -/* 至 */
54   -.zi{
55   -
56   - margin-top:14rpx;
57   - font-size:28rpx;
58   - font-family: 'SimHei',Arial;
59   - margin-left:20rpx;
60   -
61   -}
62   -/* 结束时间 */
63   -
64   -.jssj{
65   - padding-left: 10rpx;
66   - margin-left: 30rpx;
67   -padding-bottom: 10rpx;
68   -height: 35rpx;
69   -font-size: 25rpx;
70   -color: #333;
71   -background-color: #EEEEEE;
72   -border: 1px solid #DADADA;
73   -width:85%;
74   -font-family: 'SimHei',Arial;
75   -border-radius: 3px;
76   -}
77   -/* 查询内容的备考的边框 */
78   -.xknr-rim{
79   - display: flex;
80   - width: 100%;
81   - height: 55rpx;
82   - line-height:105rpx;
83   - margin-top:10rpx;
84   -
85   -}
86   -/* 明细查询 */
87   -.botton{
88   - margin-left: 30rpx;
89   - margin-top: 63rpx;
90   - background-color: #C4182E;
91   - width: 95%;
92   - border-radius:10rpx;
93   - text-align: center;
94   - height: 70rpx;
95   - line-height: 70rpx;
96   - color: #FFF;
97   - font-size: 25rpx;
98   - border: none;
99   - font-family: '微软雅黑';
100   - }
101   - /* 底部边框线
102   - .bottom{
103   - width: 100%;
104   - border-bottom: 20rpx solid #eeeeee;
105   - } */
106   - /* 清空按钮的 边框*/
107   -.qc-rim{
108   - position:absolute;
109   - top:10rpx;
110   - left:175rpx;
111   -}
112   -
113   -/*开始时间清空输入框的按钮*/
114   -.empty{
115   - width: 25rpx;
116   - height: 25rpx;
117   - border-radius:50%;
118   - background: #767676;
119   - color: #fff;
120   - font-size: 25rpx;
121   - text-align: center;
122   - line-height:18rpx;
123   -}
124   -/* 结束时间清空输入框的按钮的边框 */
125   -.end-rim{
126   -position: absolute;
127   - top: 11rpx;
128   - left:173rpx;
129   - width: 25rpx;
130   - height: 25rpx;
131   -}
132   -/*结束时间清空输入框的按钮*/
133   -.end{
134   -
135   - width: 25rpx;
136   - height: 25rpx;
137   - border-radius:50%;
138   - background: #767676;
139   - color: #fff;
140   - font-size: 25rpx;
141   - text-align: center;
142   - line-height:21rpx;
143   -
144   -}
145   -
146   -/* 顶部 */
147   -.top{
148   - width: 200rpx;
149   - height: 50rpx;
150   - padding: 0 10rpx;
151   - line-height: 50rpx;
152   - font-size: 34rpx;
153   - margin-top: 25rpx;
154   -
155   -
156   -}
157   -.images{
158   - width:35rpx;
159   -height:30rpx;
160   -margin-top:10rpx;
161   -margin-left:-14rpx;
162   -
163   -}
164   -.rim-images{
165   - width: 45rpx;
166   - height: 46rpx;
167   - line-height: 37rpx;
168   - /* border-style: inset;padding:4rpx;text-align: center; */
169   - background: #f1f1f1;
170   - border-color:#000000;
171   - border-width: 1rpx;
172   - transform:translateX(28%);
173   - margin-top:-3rpx;
174   -border-radius:5rpx;
175   -
176   -
177   -}
178   -/* 下拉框 */
179   -.top-selected{
180   - width: 100%;
181   - display: flex;
182   - align-items: center;
183   - justify-content: space-between;
184   - border: 1px solid #ccc;
185   - padding: 0 10rpx;
186   - font-size: 30rpx;
187   - background:#eeeeee;
188   - height:50rpx;
189   - border-radius:6rpx;
190   -}
191   -.texts{
192   - margin:0 auto;
193   - font-size: 25rpx;
194   -
195   -}
196   -/* 下拉内容 */
197   -.select-box {
198   - background-color: #eeeeee;
199   - width:225rpx;
200   - position: relative;
201   - z-index:1;
202   - overflow: hidden;
203   - text-align: left;
204   - animation: myfirst 0.5s;
205   - font-size: 25rpx;
206   -}
207   -.select_one {
208   - padding-left: 20rpx;
209   - width: 100%;
210   - height: 60rpx;
211   - line-height: 60rpx;
212   -}
213   -/* 优惠券样式 */
214   -.body{
215   - text-align: center;
216   - padding: 20rpx;
217   - margin: 20rpx auto;
218   - width: 80%;
219   - max-width: 1000rpx;
220   - font-size: 28rpx;
221   - color: #333333;
222   - border-bottom: 2rpx solid #EEEEEE;
223   -}
224   -
225   -.b_iimg{
226   - background-color: red;
227   - width: 400rpx;
228   - height: 400rpx;
229   -}
230   -
231   -.b_sz2{
232   - font-size: 40rpx;
233   - color: #6fd137;
234   - margin: 20rpx 0;
235   - text-align: center;
236   -}
237   -/* 二维码列表查询 */
238   -/* 列表数据*/
239   -.data{
240   - width: 80%;
241   -
242   - height:auto;
243   - margin-left:80rpx;
244   -
245   -}
246   -.rim{
247   - position: relative;
248   - top:0rpx;
249   - left: 0rpx;
250   -}
251   -/* 二维码边框 */
252   -.code_rim{
253   - width: 100%;
254   - height: auto;
255   - text-align: center;
256   - font-size: 25rpx;
257   - padding-top: -30rpx;
258   - margin-top:-20rpx;
259   -padding-left:45rpx;
260   -
261   -}
262   -
263   -/* 二维码 */
264   -.code{
265   - height: 520rpx;
266   - display: flex;
267   - flex-direction: column;
268   - justify-content: flex-end;
269   - align-items: center;
270   - margin-left:40rpx;
271   -
272   -}
273   -.car-rim{
274   -width:98%;
275   -height:177rpx;
276   -text-align:center;
277   -border-bottom:2rpx solid #eee;
278   -margin-left:22rpx;
279   -
280   -}
281   -/* 二维码值 */
282   -.code_val{
283   - margin-top:-104rpx;
284   -margin-left:-59rpx;
285   -color:#999999;
286   -
287   -}
288   -/* 金额 */
289   -.moneys{
290   - margin-top:20rpx;
291   - height: 47rpx;
292   - width: 100%;
293   - color:#6fd137;
294   - text-align: center;
295   - font-size: 38rpx;
296   - font-family: 'SimHei',Arial;
297   - margin-bottom:20rpx;
298   - margin-left:11rpx;
299   -
300   -}
301   -/* 文字 */
302   -.text{
303   - width: 100%;
304   - font-size: 25rpx;
305   - text-align: center;
306   -
307   - height: 41rpx;
308   - color: #999999;
309   -}
310   -/* 二维码和条形码的边框 */
311   -.barqrcode{
312   - width: 100%;
313   - height: auto;
314   - margin-top:50rpx;
315   -
316   -}
317   -/* 日期 */
318   -.rq{
319   - height: 25rpx;
320   - font-size: 28rpx;
321   - margin-top:12rpx;
322   - font-family:'SimHei',Arial;
323   -}
324   -/* 点击条形 */
325   -.barcode {
326   - height: 320rpx;
327   - flex-direction: column;
328   - justify-content: center;
329   - align-items: center;
330   - margin-left: 30rpx;
331   -}
332   -/* 二维码边框*/
333   -.qrcode_rim {
334   - width: 100%;
335   - height: 420rpx;
336   - display: flex;
337   - flex-direction: column;
338   - justify-content: flex-end;
339   - align-items: center;
340   - margin-left: 80rpx;
341   - margin-top:-210rpx;
342   -
343   -}
344   -.qrcode{
345   - margin-left: 100rpx;
346   -}
347   -/* 使用说明 */
348   -.textss{
349   - width: 100%;
350   - font-size: 25rpx;
351   - text-align: center;
352   -
353   - min-height: 47rpx;
354   - height:auto;
355   - color: #999999;
356   -}
357   -