From bcea875894533bf0ac337692a60c085d4cdbb282 Mon Sep 17 00:00:00 2001 From: "liujw155@outlook.com" Date: Mon, 10 Feb 2025 18:27:05 +0800 Subject: [PATCH] add mall logic for tid1878 --- src/pages.json | 48 + src/subpackage/mall/components/submit_bar.vue | 74 + src/subpackage/mall/js/api.js | 29 + src/subpackage/mall/js/wxqrcode.js | 1623 ++++++++++++++++++++ src/subpackage/mall/pages/goods_info.vue | 1 + .../mall/pages/modules/order/details_goods.vue | 182 +++ .../mall/pages/modules/order/order_list_item.vue | 369 +++++ .../mall/pages/modules/order/product_info.vue | 158 ++ .../mall/pages/modules/order/upload_image.vue | 159 ++ .../mall/pages/modules/pay/product_item.vue | 101 ++ .../mall/pages/modules/pay/self_pickup_addr.vue | 180 +++ src/subpackage/mall/pages/order/comment_edit.vue | 214 +++ src/subpackage/mall/pages/order/comment_list.vue | 128 ++ src/subpackage/mall/pages/order/order_details.vue | 938 +++++++++++ src/subpackage/mall/pages/order/order_list.vue | 352 +++++ src/subpackage/mall/pages/order/request_write.vue | 423 +++++ src/subpackage/mall/pages/pay/order_pay.vue | 423 +++++ src/subpackage/mall/pages/pay/pay_confirm.vue | 841 ++++++++++ src/subpackage/mall/pages/pay/pay_product.vue | 57 + src/subpackage/mall/static/images/close_333.png | Bin 0 -> 353 bytes src/subpackage/mall/static/images/line.png | Bin 0 -> 331 bytes .../mall/static/images/no_venue_order.png | Bin 0 -> 1975 bytes .../mall/static/images/order/invalid.png | Bin 0 -> 3237 bytes .../mall/static/images/order/status_0.png | Bin 0 -> 4125 bytes .../mall/static/images/order/status_1.png | Bin 0 -> 3544 bytes .../mall/static/images/order/status_2.png | Bin 0 -> 3646 bytes .../mall/static/images/order/status_3.png | Bin 0 -> 3302 bytes .../mall/static/images/order/status_4.png | Bin 0 -> 3247 bytes .../mall/static/images/order/status_5.png | Bin 0 -> 3726 bytes src/subpackage/mall/static/images/position.png | Bin 0 -> 1957 bytes src/subpackage/mall/static/images/road_sign.png | Bin 0 -> 470 bytes src/subpackage/mall/static/images/star_empty.png | Bin 0 -> 979 bytes src/subpackage/mall/static/images/star_fill.png | Bin 0 -> 1158 bytes src/subpackage/mall/static/images/vip_pay.png | Bin 0 -> 627 bytes src/subpackage/mall/static/images/wx_pay.png | Bin 0 -> 583 bytes 35 files changed, 6300 insertions(+) create mode 100644 src/subpackage/mall/components/submit_bar.vue create mode 100644 src/subpackage/mall/js/wxqrcode.js create mode 100644 src/subpackage/mall/pages/modules/order/details_goods.vue create mode 100644 src/subpackage/mall/pages/modules/order/order_list_item.vue create mode 100644 src/subpackage/mall/pages/modules/order/product_info.vue create mode 100644 src/subpackage/mall/pages/modules/order/upload_image.vue create mode 100644 src/subpackage/mall/pages/modules/pay/product_item.vue create mode 100644 src/subpackage/mall/pages/modules/pay/self_pickup_addr.vue create mode 100644 src/subpackage/mall/pages/order/comment_edit.vue create mode 100644 src/subpackage/mall/pages/order/comment_list.vue create mode 100644 src/subpackage/mall/pages/order/order_details.vue create mode 100644 src/subpackage/mall/pages/order/order_list.vue create mode 100644 src/subpackage/mall/pages/order/request_write.vue create mode 100644 src/subpackage/mall/pages/pay/order_pay.vue create mode 100644 src/subpackage/mall/pages/pay/pay_confirm.vue create mode 100644 src/subpackage/mall/pages/pay/pay_product.vue create mode 100644 src/subpackage/mall/static/images/close_333.png create mode 100644 src/subpackage/mall/static/images/line.png create mode 100644 src/subpackage/mall/static/images/no_venue_order.png create mode 100644 src/subpackage/mall/static/images/order/invalid.png create mode 100644 src/subpackage/mall/static/images/order/status_0.png create mode 100644 src/subpackage/mall/static/images/order/status_1.png create mode 100644 src/subpackage/mall/static/images/order/status_2.png create mode 100644 src/subpackage/mall/static/images/order/status_3.png create mode 100644 src/subpackage/mall/static/images/order/status_4.png create mode 100644 src/subpackage/mall/static/images/order/status_5.png create mode 100644 src/subpackage/mall/static/images/position.png create mode 100644 src/subpackage/mall/static/images/road_sign.png create mode 100644 src/subpackage/mall/static/images/star_empty.png create mode 100644 src/subpackage/mall/static/images/star_fill.png create mode 100644 src/subpackage/mall/static/images/vip_pay.png create mode 100644 src/subpackage/mall/static/images/wx_pay.png diff --git a/src/pages.json b/src/pages.json index 6407ae3..22a97b4 100644 --- a/src/pages.json +++ b/src/pages.json @@ -1024,6 +1024,54 @@ "navigationBarTitleText": "购物车", "enablePullDownRefresh": true } + }, + { + "path": "pages/pay/pay_confirm", + "style" : { + "navigationBarTitleText": "确认订单" + } + }, + { + "path": "pages/pay/order_pay", + "style" : { + "navigationBarTitleText": "支付订单" + } + }, + { + "path": "pages/pay/pay_product", + "style" : { + "navigationBarTitleText": "商品信息" + } + }, + { + "path": "pages/order/order_list", + "style" : { + "navigationBarTitleText": "我的订单" + } + }, + { + "path": "pages/order/order_details", + "style" : { + "navigationBarTitleText": "订单详情" + } + }, + { + "path": "pages/order/request_write", + "style" : { + "navigationBarTitleText": "申请退款" + } + }, + { + "path": "pages/order/comment_list", + "style" : { + "navigationBarTitleText": "评价" + } + }, + { + "path": "pages/order/comment_edit", + "style" : { + "navigationBarTitleText": "评价" + } } ] } diff --git a/src/subpackage/mall/components/submit_bar.vue b/src/subpackage/mall/components/submit_bar.vue new file mode 100644 index 0000000..42256ed --- /dev/null +++ b/src/subpackage/mall/components/submit_bar.vue @@ -0,0 +1,74 @@ + + + + + \ No newline at end of file diff --git a/src/subpackage/mall/js/api.js b/src/subpackage/mall/js/api.js index abf5d11..7fab14b 100644 --- a/src/subpackage/mall/js/api.js +++ b/src/subpackage/mall/js/api.js @@ -10,9 +10,38 @@ export const MALL_API = { goodsComment:`${ORIGIN}/shop2/goodsComment`, //商品评价列表 goodsList:`${ORIGIN}/shop2/goodsList`, //商品列表 goodsCateList:`${ORIGIN}/shop2/goodsCateList`, // 商品分类列表 + goodsCartNumsEdit:`${ORIGIN}/shop2/goodsCartNumsEdit`, //购物车 - 修改数量 goodsCartDel:`${ORIGIN}/shop2/goodsCartDel`, //购物车 - 删除商品 goodsCartSettlement:`${ORIGIN}/shop2/goodsCartSettlement`, //购物车 - 去结算 + + goodsOrderUsingStores:`${ORIGIN}/shop2/goodsOrderUsingStores`, //确认订单 - 获取自提门店信息 + getLogisticsTime:`${ORIGIN}/shop2/getLogisticsTime`, //确认订单 - 获取自提时间段 + getLogisticsAmount:`${ORIGIN}/shop2/getLogisticsAmount`, //确认订单 - 获取运费 + goodsOrderConfirm:`${ORIGIN}/shop2/goodsOrderConfirm`, //确认订单 - 提交订单 + payInfo:`${ORIGIN}/stadium/order/pay/info`, //订单支付接口-积分优惠券计算 + addrList:`${ORIGIN}/user/addr/list`, // 收货地址列表 + canPayCard:`${ORIGIN}/userValueCard/current`, //支付时可选储值卡 + orderPay:`${ORIGIN}/stadium/order/pay/mini`, // A预约场馆-预约场馆-微信支付[小程序] + orderPayVip:`${ORIGIN}/stadium/order/pay/card`, // A预约场馆-预约场馆-会员卡支付 + + goodsOrderList:`${ORIGIN}/shop2/goodsOrderList`, //订单 - 列表 + goodsOrderInfo:`${ORIGIN}/shop2/goodsOrderInfo`, //订单 - 详情 + goodsOrdeChangeAddr:`${ORIGIN}/shop2/goodsOrdeChangeAddr`, //订单 - 修改地址[未支付订单] + goodsOrderDel:`${ORIGIN}/shop2/goodsOrderDel`, //订单 - 删除 + goodsOrderCancel:`${ORIGIN}/shop2/goodsOrderCancel`, //订单 - 取消 + goodsOrderAgain:`${ORIGIN}/shop2/goodsOrderAgain`, //订单 - 再来一单 + goodsOrderUserTake:`${ORIGIN}/shop2/goodsOrderUserTake`, //订单 - 确认收货 + + feedbackInfo:`${ORIGIN}/stadium/order/feedback/info`, //售后反馈-页面信息 + feedbackSubmit:`${ORIGIN}/stadium/order/feedback/submit`, //售后反馈-提交信息 + uploadFeedbackImg:`${ORIGIN}/upload/file/mall_feedback`, // 上传反馈图片 + + goodsOrdeRefund:`${ORIGIN}/shop2/goodsOrdeRefund`, //订单 - 售后 - 申请退款 + goodsOrdeRefundCancel:`${ORIGIN}/shop2/goodsOrdeRefundCancel`, //订单 - 售后 - 撤销退款申请 + + goodsComment:`${ORIGIN}/shop2/goodsComment`, //商品评价列表 + goodsCommentPublish:`${ORIGIN}/shop2/goodsCommentPublish`, //商品评价 } export default { ORIGIN, MALL_API }; \ No newline at end of file diff --git a/src/subpackage/mall/js/wxqrcode.js b/src/subpackage/mall/js/wxqrcode.js new file mode 100644 index 0000000..384d483 --- /dev/null +++ b/src/subpackage/mall/js/wxqrcode.js @@ -0,0 +1,1623 @@ + +/** + * qrcode + * @param typeNumber 1 to 40 + * @param errorCorrectLevel 'L','M','Q','H' + */ +var qrcode = function(typeNumber, errorCorrectLevel) { + + var PAD0 = 0xEC; + var PAD1 = 0x11; + + var _typeNumber = typeNumber; + var _errorCorrectLevel = QRErrorCorrectLevel[errorCorrectLevel]; + var _modules = null; + var _moduleCount = 0; + var _dataCache = null; + var _dataList = new Array(); + + var _this = {}; + + var makeImpl = function(test, maskPattern) { + + _moduleCount = _typeNumber * 4 + 17; + _modules = function(moduleCount) { + var modules = new Array(moduleCount); + for (var row = 0; row < moduleCount; row += 1) { + modules[row] = new Array(moduleCount); + for (var col = 0; col < moduleCount; col += 1) { + modules[row][col] = null; + } + } + return modules; + }(_moduleCount); + + setupPositionProbePattern(0, 0); + setupPositionProbePattern(_moduleCount - 7, 0); + setupPositionProbePattern(0, _moduleCount - 7); + setupPositionAdjustPattern(); + setupTimingPattern(); + setupTypeInfo(test, maskPattern); + + if (_typeNumber >= 7) { + setupTypeNumber(test); + } + + if (_dataCache == null) { + _dataCache = createData(_typeNumber, _errorCorrectLevel, _dataList); + } + + mapData(_dataCache, maskPattern); + }; + + var setupPositionProbePattern = function(row, col) { + + for (var r = -1; r <= 7; r += 1) { + + if (row + r <= -1 || _moduleCount <= row + r) continue; + + for (var c = -1; c <= 7; c += 1) { + + if (col + c <= -1 || _moduleCount <= col + c) continue; + + if ( (0 <= r && r <= 6 && (c == 0 || c == 6) ) + || (0 <= c && c <= 6 && (r == 0 || r == 6) ) + || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) { + _modules[row + r][col + c] = true; + } else { + _modules[row + r][col + c] = false; + } + } + } + }; + + var getBestMaskPattern = function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i += 1) { + + makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(_this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }; + + var setupTimingPattern = function() { + + for (var r = 8; r < _moduleCount - 8; r += 1) { + if (_modules[r][6] != null) { + continue; + } + _modules[r][6] = (r % 2 == 0); + } + + for (var c = 8; c < _moduleCount - 8; c += 1) { + if (_modules[6][c] != null) { + continue; + } + _modules[6][c] = (c % 2 == 0); + } + }; + + var setupPositionAdjustPattern = function() { + + var pos = QRUtil.getPatternPosition(_typeNumber); + + for (var i = 0; i < pos.length; i += 1) { + + for (var j = 0; j < pos.length; j += 1) { + + var row = pos[i]; + var col = pos[j]; + + if (_modules[row][col] != null) { + continue; + } + + for (var r = -2; r <= 2; r += 1) { + + for (var c = -2; c <= 2; c += 1) { + + if (r == -2 || r == 2 || c == -2 || c == 2 + || (r == 0 && c == 0) ) { + _modules[row + r][col + c] = true; + } else { + _modules[row + r][col + c] = false; + } + } + } + } + } + }; + + var setupTypeNumber = function(test) { + + var bits = QRUtil.getBCHTypeNumber(_typeNumber); + + for (var i = 0; i < 18; i += 1) { + var mod = (!test && ( (bits >> i) & 1) == 1); + _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod; + } + + for (var i = 0; i < 18; i += 1) { + var mod = (!test && ( (bits >> i) & 1) == 1); + _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }; + + var setupTypeInfo = function(test, maskPattern) { + + var data = (_errorCorrectLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + + // vertical + for (var i = 0; i < 15; i += 1) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 6) { + _modules[i][8] = mod; + } else if (i < 8) { + _modules[i + 1][8] = mod; + } else { + _modules[_moduleCount - 15 + i][8] = mod; + } + } + + // horizontal + for (var i = 0; i < 15; i += 1) { + + var mod = (!test && ( (bits >> i) & 1) == 1); + + if (i < 8) { + _modules[8][_moduleCount - i - 1] = mod; + } else if (i < 9) { + _modules[8][15 - i - 1 + 1] = mod; + } else { + _modules[8][15 - i - 1] = mod; + } + } + + // fixed module + _modules[_moduleCount - 8][8] = (!test); + }; + + var mapData = function(data, maskPattern) { + + var inc = -1; + var row = _moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + var maskFunc = QRUtil.getMaskFunction(maskPattern); + + for (var col = _moduleCount - 1; col > 0; col -= 2) { + + if (col == 6) col -= 1; + + while (true) { + + for (var c = 0; c < 2; c += 1) { + + if (_modules[row][col - c] == null) { + + var dark = false; + + if (byteIndex < data.length) { + dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1); + } + + var mask = maskFunc(row, col - c); + + if (mask) { + dark = !dark; + } + + _modules[row][col - c] = dark; + bitIndex -= 1; + + if (bitIndex == -1) { + byteIndex += 1; + bitIndex = 7; + } + } + } + + row += inc; + + if (row < 0 || _moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + }; + + var createBytes = function(buffer, rsBlocks) { + + var offset = 0; + + var maxDcCount = 0; + var maxEcCount = 0; + + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + + for (var r = 0; r < rsBlocks.length; r += 1) { + + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - dcCount; + + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + + dcdata[r] = new Array(dcCount); + + for (var i = 0; i < dcdata[r].length; i += 1) { + dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset]; + } + offset += dcCount; + + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1); + + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i += 1) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0; + } + } + + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i += 1) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + var index = 0; + + for (var i = 0; i < maxDcCount; i += 1) { + for (var r = 0; r < rsBlocks.length; r += 1) { + if (i < dcdata[r].length) { + data[index] = dcdata[r][i]; + index += 1; + } + } + } + + for (var i = 0; i < maxEcCount; i += 1) { + for (var r = 0; r < rsBlocks.length; r += 1) { + if (i < ecdata[r].length) { + data[index] = ecdata[r][i]; + index += 1; + } + } + } + + return data; + }; + + var createData = function(typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = qrBitBuffer(); + + for (var i = 0; i < dataList.length; i += 1) { + var data = dataList[i]; + buffer.put(data.getMode(), 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) ); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i += 1) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error('code length overflow. (' + + buffer.getLengthInBits() + + '>' + + totalDataCount * 8 + + ')'); + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(PAD1, 8); + } + + return createBytes(buffer, rsBlocks); + }; + + _this.addData = function(data) { + var newData = qr8BitByte(data); + _dataList.push(newData); + _dataCache = null; + }; + + _this.isDark = function(row, col) { + if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) { + throw new Error(row + ',' + col); + } + return _modules[row][col]; + }; + + _this.getModuleCount = function() { + return _moduleCount; + }; + + _this.make = function() { + makeImpl(false, getBestMaskPattern() ); + }; + + _this.createTableTag = function(cellSize, margin) { + + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + + var qrHtml = ''; + + qrHtml += ''; + qrHtml += ''; + + for (var r = 0; r < _this.getModuleCount(); r += 1) { + + qrHtml += ''; + + for (var c = 0; c < _this.getModuleCount(); c += 1) { + qrHtml += ''; + } + + qrHtml += ''; + qrHtml += '
'; + } + + qrHtml += '
'; + + return qrHtml; + }; + + _this.createImgTag = function(cellSize, margin, size) { + + cellSize = cellSize || 2; + margin = (typeof margin == 'undefined')? cellSize * 4 : margin; + + var min = margin; + var max = _this.getModuleCount() * cellSize + margin; + + return createImgTag(size, size, function(x, y) { + if (min <= x && x < max && min <= y && y < max) { + var c = Math.floor( (x - min) / cellSize); + var r = Math.floor( (y - min) / cellSize); + return _this.isDark(r, c)? 0 : 1; + } else { + return 1; + } + } ); + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// qrcode.stringToBytes +//--------------------------------------------------------------------- + +qrcode.stringToBytes = function(s) { + var bytes = new Array(); + for (var i = 0; i < s.length; i += 1) { + var c = s.charCodeAt(i); + bytes.push(c & 0xff); + } + return bytes; +}; + +//--------------------------------------------------------------------- +// qrcode.createStringToBytes +//--------------------------------------------------------------------- + +/** + * @param unicodeData base64 string of byte array. + * [16bit Unicode],[16bit Bytes], ... + * @param numChars + */ +qrcode.createStringToBytes = function(unicodeData, numChars) { + + // create conversion map. + + var unicodeMap = function() { + + var bin = base64DecodeInputStream(unicodeData); + var read = function() { + var b = bin.read(); + if (b == -1) throw new Error(); + return b; + }; + + var count = 0; + var unicodeMap = {}; + while (true) { + var b0 = bin.read(); + if (b0 == -1) break; + var b1 = read(); + var b2 = read(); + var b3 = read(); + var k = String.fromCharCode( (b0 << 8) | b1); + var v = (b2 << 8) | b3; + unicodeMap[k] = v; + count += 1; + } + if (count != numChars) { + throw new Error(count + ' != ' + numChars); + } + + return unicodeMap; + }(); + + var unknownChar = '?'.charCodeAt(0); + + return function(s) { + var bytes = new Array(); + for (var i = 0; i < s.length; i += 1) { + var c = s.charCodeAt(i); + if (c < 128) { + bytes.push(c); + } else { + var b = unicodeMap[s.charAt(i)]; + if (typeof b == 'number') { + if ( (b & 0xff) == b) { + // 1byte + bytes.push(b); + } else { + // 2bytes + bytes.push(b >>> 8); + bytes.push(b & 0xff); + } + } else { + bytes.push(unknownChar); + } + } + } + return bytes; + }; +}; + +//--------------------------------------------------------------------- +// QRMode +//--------------------------------------------------------------------- + +var QRMode = { + MODE_NUMBER : 1 << 0, + MODE_ALPHA_NUM : 1 << 1, + MODE_8BIT_BYTE : 1 << 2, + MODE_KANJI : 1 << 3 +}; + +//--------------------------------------------------------------------- +// QRErrorCorrectLevel +//--------------------------------------------------------------------- + +var QRErrorCorrectLevel = { + L : 1, + M : 0, + Q : 3, + H : 2 +}; + +//--------------------------------------------------------------------- +// QRMaskPattern +//--------------------------------------------------------------------- + +var QRMaskPattern = { + PATTERN000 : 0, + PATTERN001 : 1, + PATTERN010 : 2, + PATTERN011 : 3, + PATTERN100 : 4, + PATTERN101 : 5, + PATTERN110 : 6, + PATTERN111 : 7 +}; + +//--------------------------------------------------------------------- +// QRUtil +//--------------------------------------------------------------------- + +var QRUtil = function() { + + var PATTERN_POSITION_TABLE = [ + [], + [6, 18], + [6, 22], + [6, 26], + [6, 30], + [6, 34], + [6, 22, 38], + [6, 24, 42], + [6, 26, 46], + [6, 28, 50], + [6, 30, 54], + [6, 32, 58], + [6, 34, 62], + [6, 26, 46, 66], + [6, 26, 48, 70], + [6, 26, 50, 74], + [6, 30, 54, 78], + [6, 30, 56, 82], + [6, 30, 58, 86], + [6, 34, 62, 90], + [6, 28, 50, 72, 94], + [6, 26, 50, 74, 98], + [6, 30, 54, 78, 102], + [6, 28, 54, 80, 106], + [6, 32, 58, 84, 110], + [6, 30, 58, 86, 114], + [6, 34, 62, 90, 118], + [6, 26, 50, 74, 98, 122], + [6, 30, 54, 78, 102, 126], + [6, 26, 52, 78, 104, 130], + [6, 30, 56, 82, 108, 134], + [6, 34, 60, 86, 112, 138], + [6, 30, 58, 86, 114, 142], + [6, 34, 62, 90, 118, 146], + [6, 30, 54, 78, 102, 126, 150], + [6, 24, 50, 76, 102, 128, 154], + [6, 28, 54, 80, 106, 132, 158], + [6, 32, 58, 84, 110, 136, 162], + [6, 26, 54, 82, 110, 138, 166], + [6, 30, 58, 86, 114, 142, 170] + ]; + var G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0); + var G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0); + var G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1); + + var _this = {}; + + var getBCHDigit = function(data) { + var digit = 0; + while (data != 0) { + digit += 1; + data >>>= 1; + } + return digit; + }; + + _this.getBCHTypeInfo = function(data) { + var d = data << 10; + while (getBCHDigit(d) - getBCHDigit(G15) >= 0) { + d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) ); + } + return ( (data << 10) | d) ^ G15_MASK; + }; + + _this.getBCHTypeNumber = function(data) { + var d = data << 12; + while (getBCHDigit(d) - getBCHDigit(G18) >= 0) { + d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) ); + } + return (data << 12) | d; + }; + + _this.getPatternPosition = function(typeNumber) { + return PATTERN_POSITION_TABLE[typeNumber - 1]; + }; + + _this.getMaskFunction = function(maskPattern) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000 : + return function(i, j) { return (i + j) % 2 == 0; }; + case QRMaskPattern.PATTERN001 : + return function(i, j) { return i % 2 == 0; }; + case QRMaskPattern.PATTERN010 : + return function(i, j) { return j % 3 == 0; }; + case QRMaskPattern.PATTERN011 : + return function(i, j) { return (i + j) % 3 == 0; }; + case QRMaskPattern.PATTERN100 : + return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; }; + case QRMaskPattern.PATTERN101 : + return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; }; + case QRMaskPattern.PATTERN110 : + return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; }; + case QRMaskPattern.PATTERN111 : + return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; }; + + default : + throw new Error('bad maskPattern:' + maskPattern); + } + }; + + _this.getErrorCorrectPolynomial = function(errorCorrectLength) { + var a = qrPolynomial([1], 0); + for (var i = 0; i < errorCorrectLength; i += 1) { + a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) ); + } + return a; + }; + + _this.getLengthInBits = function(mode, type) { + + if (1 <= type && type < 10) { + + // 1 - 9 + + switch(mode) { + case QRMode.MODE_NUMBER : return 10; + case QRMode.MODE_ALPHA_NUM : return 9; + case QRMode.MODE_8BIT_BYTE : return 8; + case QRMode.MODE_KANJI : return 8; + default : + throw new Error('mode:' + mode); + } + + } else if (type < 27) { + + // 10 - 26 + + switch(mode) { + case QRMode.MODE_NUMBER : return 12; + case QRMode.MODE_ALPHA_NUM : return 11; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 10; + default : + throw new Error('mode:' + mode); + } + + } else if (type < 41) { + + // 27 - 40 + + switch(mode) { + case QRMode.MODE_NUMBER : return 14; + case QRMode.MODE_ALPHA_NUM : return 13; + case QRMode.MODE_8BIT_BYTE : return 16; + case QRMode.MODE_KANJI : return 12; + default : + throw new Error('mode:' + mode); + } + + } else { + throw new Error('type:' + type); + } + }; + + _this.getLostPoint = function(qrcode) { + + var moduleCount = qrcode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row += 1) { + for (var col = 0; col < moduleCount; col += 1) { + + var sameCount = 0; + var dark = qrcode.isDark(row, col); + + for (var r = -1; r <= 1; r += 1) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c += 1) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrcode.isDark(row + r, col + c) ) { + sameCount += 1; + } + } + } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } + } + }; + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row += 1) { + for (var col = 0; col < moduleCount - 1; col += 1) { + var count = 0; + if (qrcode.isDark(row, col) ) count += 1; + if (qrcode.isDark(row + 1, col) ) count += 1; + if (qrcode.isDark(row, col + 1) ) count += 1; + if (qrcode.isDark(row + 1, col + 1) ) count += 1; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row += 1) { + for (var col = 0; col < moduleCount - 6; col += 1) { + if (qrcode.isDark(row, col) + && !qrcode.isDark(row, col + 1) + && qrcode.isDark(row, col + 2) + && qrcode.isDark(row, col + 3) + && qrcode.isDark(row, col + 4) + && !qrcode.isDark(row, col + 5) + && qrcode.isDark(row, col + 6) ) { + lostPoint += 40; + } + } + } + + for (var col = 0; col < moduleCount; col += 1) { + for (var row = 0; row < moduleCount - 6; row += 1) { + if (qrcode.isDark(row, col) + && !qrcode.isDark(row + 1, col) + && qrcode.isDark(row + 2, col) + && qrcode.isDark(row + 3, col) + && qrcode.isDark(row + 4, col) + && !qrcode.isDark(row + 5, col) + && qrcode.isDark(row + 6, col) ) { + lostPoint += 40; + } + } + } + + // LEVEL4 + + var darkCount = 0; + + for (var col = 0; col < moduleCount; col += 1) { + for (var row = 0; row < moduleCount; row += 1) { + if (qrcode.isDark(row, col) ) { + darkCount += 1; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + }; + + return _this; +}(); + +//--------------------------------------------------------------------- +// QRMath +//--------------------------------------------------------------------- + +var QRMath = function() { + + var EXP_TABLE = new Array(256); + var LOG_TABLE = new Array(256); + + // initialize tables + for (var i = 0; i < 8; i += 1) { + EXP_TABLE[i] = 1 << i; + } + for (var i = 8; i < 256; i += 1) { + EXP_TABLE[i] = EXP_TABLE[i - 4] + ^ EXP_TABLE[i - 5] + ^ EXP_TABLE[i - 6] + ^ EXP_TABLE[i - 8]; + } + for (var i = 0; i < 255; i += 1) { + LOG_TABLE[EXP_TABLE[i] ] = i; + } + + var _this = {}; + + _this.glog = function(n) { + + if (n < 1) { + throw new Error('glog(' + n + ')'); + } + + return LOG_TABLE[n]; + }; + + _this.gexp = function(n) { + + while (n < 0) { + n += 255; + } + + while (n >= 256) { + n -= 255; + } + + return EXP_TABLE[n]; + }; + + return _this; +}(); + +//--------------------------------------------------------------------- +// qrPolynomial +//--------------------------------------------------------------------- + +function qrPolynomial(num, shift) { + + if (typeof num.length == 'undefined') { + throw new Error(num.length + '/' + shift); + } + + var _num = function() { + var offset = 0; + while (offset < num.length && num[offset] == 0) { + offset += 1; + } + var _num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i += 1) { + _num[i] = num[i + offset]; + } + return _num; + }(); + + var _this = {}; + + _this.getAt = function(index) { + return _num[index]; + }; + + _this.getLength = function() { + return _num.length; + }; + + _this.multiply = function(e) { + + var num = new Array(_this.getLength() + e.getLength() - 1); + + for (var i = 0; i < _this.getLength(); i += 1) { + for (var j = 0; j < e.getLength(); j += 1) { + num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) ); + } + } + + return qrPolynomial(num, 0); + }; + + _this.mod = function(e) { + + if (_this.getLength() - e.getLength() < 0) { + return _this; + } + + var ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) ); + + var num = new Array(_this.getLength() ); + for (var i = 0; i < _this.getLength(); i += 1) { + num[i] = _this.getAt(i); + } + + for (var i = 0; i < e.getLength(); i += 1) { + num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio); + } + + // recursive call + return qrPolynomial(num, 0).mod(e); + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// QRRSBlock +//--------------------------------------------------------------------- + +var QRRSBlock = function() { + + + // [1: [L, M, Q, H], ..] + var RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]]; + + var qrRSBlock = function(totalCount, dataCount) { + var _this = {}; + _this.totalCount = totalCount; + _this.dataCount = dataCount; + return _this; + }; + + var _this = {}; + + var getRsBlockTable = function(typeNumber, errorCorrectLevel) { + + switch(errorCorrectLevel) { + case QRErrorCorrectLevel.L : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H : + return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default : + return undefined; + } + }; + + _this.getRSBlocks = function(typeNumber, errorCorrectLevel) { + + var rsBlock = getRsBlockTable(typeNumber, errorCorrectLevel); + + if (typeof rsBlock == 'undefined') { + throw new Error('bad rs block [url=home.php?mod=space&uid=5302]@[/url] typeNumber:' + typeNumber + + '/errorCorrectLevel:' + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i += 1) { + + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + + for (var j = 0; j < count; j += 1) { + list.push(qrRSBlock(totalCount, dataCount) ); + } + } + + return list; + }; + + return _this; +}(); + +//--------------------------------------------------------------------- +// qrBitBuffer +//--------------------------------------------------------------------- + +var qrBitBuffer = function() { + + var _buffer = new Array(); + var _length = 0; + + var _this = {}; + + _this.getBuffer = function() { + return _buffer; + }; + + _this.getAt = function(index) { + var bufIndex = Math.floor(index / 8); + return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1; + }; + + _this.put = function(num, length) { + for (var i = 0; i < length; i += 1) { + _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1); + } + }; + + _this.getLengthInBits = function() { + return _length; + }; + + _this.putBit = function(bit) { + + var bufIndex = Math.floor(_length / 8); + if (_buffer.length <= bufIndex) { + _buffer.push(0); + } + + if (bit) { + _buffer[bufIndex] |= (0x80 >>> (_length % 8) ); + } + + _length += 1; + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// qr8BitByte +//--------------------------------------------------------------------- + +var qr8BitByte = function(data) { + + var _mode = QRMode.MODE_8BIT_BYTE; + var _data = data; + var _parsedData = []; + + var _this = {}; + + + // Added to support UTF-8 Characters + for (var i = 0, l = _data.length; i < l; i++) { + var byteArray = []; + var code = _data.charCodeAt(i); + + if (code > 0x10000) { + byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); + byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); + byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[3] = 0x80 | (code & 0x3F); + } else if (code > 0x800) { + byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); + byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[2] = 0x80 | (code & 0x3F); + } else if (code > 0x80) { + byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); + byteArray[1] = 0x80 | (code & 0x3F); + } else { + byteArray[0] = code; + } + + // Fix Unicode corruption bug + _parsedData.push(byteArray); + } + + _parsedData = Array.prototype.concat.apply([], _parsedData); + + if (_parsedData.length != _data.length) { + _parsedData.unshift(191); + _parsedData.unshift(187); + _parsedData.unshift(239); + } + + var _bytes = _parsedData; + + _this.getMode = function() { + return _mode; + }; + + _this.getLength = function(buffer) { + return _bytes.length; + }; + + _this.write = function(buffer) { + for (var i = 0; i < _bytes.length; i += 1) { + buffer.put(_bytes[i], 8); + } + }; + + return _this; +}; + +//===================================================================== +// GIF Support etc. +// + +//--------------------------------------------------------------------- +// byteArrayOutputStream +//--------------------------------------------------------------------- + +var byteArrayOutputStream = function() { + + var _bytes = new Array(); + + var _this = {}; + + _this.writeByte = function(b) { + _bytes.push(b & 0xff); + }; + + _this.writeShort = function(i) { + _this.writeByte(i); + _this.writeByte(i >>> 8); + }; + + _this.writeBytes = function(b, off, len) { + off = off || 0; + len = len || b.length; + for (var i = 0; i < len; i += 1) { + _this.writeByte(b[i + off]); + } + }; + + _this.writeString = function(s) { + for (var i = 0; i < s.length; i += 1) { + _this.writeByte(s.charCodeAt(i) ); + } + }; + + _this.toByteArray = function() { + return _bytes; + }; + + _this.toString = function() { + var s = ''; + s += '['; + for (var i = 0; i < _bytes.length; i += 1) { + if (i > 0) { + s += ','; + } + s += _bytes[i]; + } + s += ']'; + return s; + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// base64EncodeOutputStream +//--------------------------------------------------------------------- + +var base64EncodeOutputStream = function() { + + var _buffer = 0; + var _buflen = 0; + var _length = 0; + var _base64 = ''; + + var _this = {}; + + var writeEncoded = function(b) { + _base64 += String.fromCharCode(encode(b & 0x3f) ); + }; + + var encode = function(n) { + if (n < 0) { + // error. + } else if (n < 26) { + return 0x41 + n; + } else if (n < 52) { + return 0x61 + (n - 26); + } else if (n < 62) { + return 0x30 + (n - 52); + } else if (n == 62) { + return 0x2b; + } else if (n == 63) { + return 0x2f; + } + throw new Error('n:' + n); + }; + + _this.writeByte = function(n) { + + _buffer = (_buffer << 8) | (n & 0xff); + _buflen += 8; + _length += 1; + + while (_buflen >= 6) { + writeEncoded(_buffer >>> (_buflen - 6) ); + _buflen -= 6; + } + }; + + _this.flush = function() { + + if (_buflen > 0) { + writeEncoded(_buffer << (6 - _buflen) ); + _buffer = 0; + _buflen = 0; + } + + if (_length % 3 != 0) { + // padding + var padlen = 3 - _length % 3; + for (var i = 0; i < padlen; i += 1) { + _base64 += '='; + } + } + }; + + _this.toString = function() { + return _base64; + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// base64DecodeInputStream +//--------------------------------------------------------------------- + +var base64DecodeInputStream = function(str) { + + var _str = str; + var _pos = 0; + var _buffer = 0; + var _buflen = 0; + + var _this = {}; + + _this.read = function() { + + while (_buflen < 8) { + + if (_pos >= _str.length) { + if (_buflen == 0) { + return -1; + } + throw new Error('unexpected end of file./' + _buflen); + } + + var c = _str.charAt(_pos); + _pos += 1; + + if (c == '=') { + _buflen = 0; + return -1; + } else if (c.match(/^\s$/) ) { + // ignore if whitespace. + continue; + } + + _buffer = (_buffer << 6) | decode(c.charCodeAt(0) ); + _buflen += 6; + } + + var n = (_buffer >>> (_buflen - 8) ) & 0xff; + _buflen -= 8; + return n; + }; + + var decode = function(c) { + if (0x41 <= c && c <= 0x5a) { + return c - 0x41; + } else if (0x61 <= c && c <= 0x7a) { + return c - 0x61 + 26; + } else if (0x30 <= c && c <= 0x39) { + return c - 0x30 + 52; + } else if (c == 0x2b) { + return 62; + } else if (c == 0x2f) { + return 63; + } else { + throw new Error('c:' + c); + } + }; + + return _this; +}; + +//--------------------------------------------------------------------- +// gifImage (B/W) +//--------------------------------------------------------------------- + +var gifImage = function(width, height) { + + var _width = width; + var _height = height; + var _data = new Array(width * height); + + var _this = {}; + + _this.setPixel = function(x, y, pixel) { + _data[y * _width + x] = pixel; + }; + + _this.write = function(out) { + + //--------------------------------- + // GIF Signature + + out.writeString('GIF87a'); + + //--------------------------------- + // Screen Descriptor + + out.writeShort(_width); + out.writeShort(_height); + + out.writeByte(0x80); // 2bit + out.writeByte(0); + out.writeByte(0); + + //--------------------------------- + // Global Color Map + + // black + out.writeByte(0x00); + out.writeByte(0x00); + out.writeByte(0x00); + + // white + out.writeByte(0xff); + out.writeByte(0xff); + out.writeByte(0xff); + + //--------------------------------- + // Image Descriptor + + out.writeString(','); + out.writeShort(0); + out.writeShort(0); + out.writeShort(_width); + out.writeShort(_height); + out.writeByte(0); + + //--------------------------------- + // Local Color Map + + //--------------------------------- + // Raster Data + + var lzwMinCodeSize = 2; + var raster = getLZWRaster(lzwMinCodeSize); + + out.writeByte(lzwMinCodeSize); + + var offset = 0; + + while (raster.length - offset > 255) { + out.writeByte(255); + out.writeBytes(raster, offset, 255); + offset += 255; + } + + out.writeByte(raster.length - offset); + out.writeBytes(raster, offset, raster.length - offset); + out.writeByte(0x00); + + //--------------------------------- + // GIF Terminator + out.writeString(';'); + }; + + var bitOutputStream = function(out) { + + var _out = out; + var _bitLength = 0; + var _bitBuffer = 0; + + var _this = {}; + + _this.write = function(data, length) { + + if ( (data >>> length) != 0) { + throw new Error('length over'); + } + + while (_bitLength + length >= 8) { + _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) ); + length -= (8 - _bitLength); + data >>>= (8 - _bitLength); + _bitBuffer = 0; + _bitLength = 0; + } + + _bitBuffer = (data << _bitLength) | _bitBuffer; + _bitLength = _bitLength + length; + }; + + _this.flush = function() { + if (_bitLength > 0) { + _out.writeByte(_bitBuffer); + } + }; + + return _this; + }; + + var getLZWRaster = function(lzwMinCodeSize) { + + var clearCode = 1 << lzwMinCodeSize; + var endCode = (1 << lzwMinCodeSize) + 1; + var bitLength = lzwMinCodeSize + 1; + + // Setup LZWTable + var table = lzwTable(); + + for (var i = 0; i < clearCode; i += 1) { + table.add(String.fromCharCode(i) ); + } + table.add(String.fromCharCode(clearCode) ); + table.add(String.fromCharCode(endCode) ); + + var byteOut = byteArrayOutputStream(); + var bitOut = bitOutputStream(byteOut); + + // clear code + bitOut.write(clearCode, bitLength); + + var dataIndex = 0; + + var s = String.fromCharCode(_data[dataIndex]); + dataIndex += 1; + + while (dataIndex < _data.length) { + + var c = String.fromCharCode(_data[dataIndex]); + dataIndex += 1; + + if (table.contains(s + c) ) { + + s = s + c; + + } else { + + bitOut.write(table.indexOf(s), bitLength); + + if (table.size() < 0xfff) { + + if (table.size() == (1 << bitLength) ) { + bitLength += 1; + } + + table.add(s + c); + } + + s = c; + } + } + + bitOut.write(table.indexOf(s), bitLength); + + // end code + bitOut.write(endCode, bitLength); + + bitOut.flush(); + + return byteOut.toByteArray(); + }; + + var lzwTable = function() { + + var _map = {}; + var _size = 0; + + var _this = {}; + + _this.add = function(key) { + if (_this.contains(key) ) { + throw new Error('dup key:' + key); + } + _map[key] = _size; + _size += 1; + }; + + _this.size = function() { + return _size; + }; + + _this.indexOf = function(key) { + return _map[key]; + }; + + _this.contains = function(key) { + return typeof _map[key] != 'undefined'; + }; + + return _this; + }; + + return _this; +}; + +var createImgTag = function(width, height, getPixel, alt) { + + var gif = gifImage(width, height); + for (var y = 0; y < height; y += 1) { + for (var x = 0; x < width; x += 1) { + gif.setPixel(x, y, getPixel(x, y) ); + } + } + + var b = byteArrayOutputStream(); + gif.write(b); + + var base64 = base64EncodeOutputStream(); + var bytes = b.toByteArray(); + for (var i = 0; i < bytes.length; i += 1) { + base64.writeByte(bytes[i]); + } + base64.flush(); + + var img = ''; + img += 'data:image/gif;base64,'; + img += base64; + + return img; +}; + +//--------------------------------------------------------------------- +// returns qrcode function. + +var createQrCodeImg = function(text, options) { + options = options || {}; + var typeNumber = options.typeNumber || getSizeFromText(text); + var errorCorrectLevel = options.errorCorrectLevel || 'M'; + var size = options.size || 500; + + var qr; + console.log(typeNumber + " <<<<<"); + try { + qr = qrcode(typeNumber, errorCorrectLevel || 'M'); + qr.addData(text); + qr.make(); + } catch (e) { + + if(typeNumber >= 40) { + throw new Error('Text too long to encode'); + } else { + return gen(text, { + size: size, + errorCorrectLevel: errorCorrectLevel, + typeNumber: typeNumber + 1 + }); + } + } + + // calc cellsize and margin + var cellsize = parseInt(size / qr.getModuleCount()); + var margin = parseInt((size - qr.getModuleCount() * cellsize) / 2); + + function getSizeFromText(text){ + var num = 4,len = text.length; + if(len>560){ + num = 26 + }else if(len>450){ + num = 22 + }else if(len>330){ + num = 18 + }else if(len>210){ + num = 14 + }else if(len>110){ + num = 10 + }else if(len>90){ + num = 8 + }else if(len>62){ + num = 6 + }else{ + num = 4 + } + return num + } + + return qr.createImgTag(cellsize, margin, size); +}; +// var module = {}; 需要注释这一行,否则微信小程序无法使用 +module.exports = { + createQrCodeImg : createQrCodeImg +}; \ No newline at end of file diff --git a/src/subpackage/mall/pages/goods_info.vue b/src/subpackage/mall/pages/goods_info.vue index f03ace6..0cb7d25 100644 --- a/src/subpackage/mall/pages/goods_info.vue +++ b/src/subpackage/mall/pages/goods_info.vue @@ -316,6 +316,7 @@ export default { go_buy: 1, price_amount: _amount } + routeTo(`/subpackage/mall/pages/pay/pay_confirm?query=${jsonStr(_query)}&brand_id=${brand_id}`, 'nT'); console.log(_query); }else{ showModal({content: '购买操作失败,请稍后重试!'}); diff --git a/src/subpackage/mall/pages/modules/order/details_goods.vue b/src/subpackage/mall/pages/modules/order/details_goods.vue new file mode 100644 index 0000000..d6af1b2 --- /dev/null +++ b/src/subpackage/mall/pages/modules/order/details_goods.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/subpackage/mall/pages/modules/order/order_list_item.vue b/src/subpackage/mall/pages/modules/order/order_list_item.vue new file mode 100644 index 0000000..b265cdd --- /dev/null +++ b/src/subpackage/mall/pages/modules/order/order_list_item.vue @@ -0,0 +1,369 @@ + + + + + diff --git a/src/subpackage/mall/pages/modules/order/product_info.vue b/src/subpackage/mall/pages/modules/order/product_info.vue new file mode 100644 index 0000000..0e484f4 --- /dev/null +++ b/src/subpackage/mall/pages/modules/order/product_info.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/subpackage/mall/pages/modules/order/upload_image.vue b/src/subpackage/mall/pages/modules/order/upload_image.vue new file mode 100644 index 0000000..2239977 --- /dev/null +++ b/src/subpackage/mall/pages/modules/order/upload_image.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/subpackage/mall/pages/modules/pay/product_item.vue b/src/subpackage/mall/pages/modules/pay/product_item.vue new file mode 100644 index 0000000..1b5bcb6 --- /dev/null +++ b/src/subpackage/mall/pages/modules/pay/product_item.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/subpackage/mall/pages/modules/pay/self_pickup_addr.vue b/src/subpackage/mall/pages/modules/pay/self_pickup_addr.vue new file mode 100644 index 0000000..b99bd86 --- /dev/null +++ b/src/subpackage/mall/pages/modules/pay/self_pickup_addr.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/subpackage/mall/pages/order/comment_edit.vue b/src/subpackage/mall/pages/order/comment_edit.vue new file mode 100644 index 0000000..999501d --- /dev/null +++ b/src/subpackage/mall/pages/order/comment_edit.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/subpackage/mall/pages/order/comment_list.vue b/src/subpackage/mall/pages/order/comment_list.vue new file mode 100644 index 0000000..967e58a --- /dev/null +++ b/src/subpackage/mall/pages/order/comment_list.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/subpackage/mall/pages/order/order_details.vue b/src/subpackage/mall/pages/order/order_details.vue new file mode 100644 index 0000000..55a1aee --- /dev/null +++ b/src/subpackage/mall/pages/order/order_details.vue @@ -0,0 +1,938 @@ + + + + diff --git a/src/subpackage/mall/pages/order/order_list.vue b/src/subpackage/mall/pages/order/order_list.vue new file mode 100644 index 0000000..a90d3ab --- /dev/null +++ b/src/subpackage/mall/pages/order/order_list.vue @@ -0,0 +1,352 @@ + + + + + diff --git a/src/subpackage/mall/pages/order/request_write.vue b/src/subpackage/mall/pages/order/request_write.vue new file mode 100644 index 0000000..d3ba1d4 --- /dev/null +++ b/src/subpackage/mall/pages/order/request_write.vue @@ -0,0 +1,423 @@ + + + + diff --git a/src/subpackage/mall/pages/pay/order_pay.vue b/src/subpackage/mall/pages/pay/order_pay.vue new file mode 100644 index 0000000..5e75f00 --- /dev/null +++ b/src/subpackage/mall/pages/pay/order_pay.vue @@ -0,0 +1,423 @@ + + + \ No newline at end of file diff --git a/src/subpackage/mall/pages/pay/pay_confirm.vue b/src/subpackage/mall/pages/pay/pay_confirm.vue new file mode 100644 index 0000000..9e2e837 --- /dev/null +++ b/src/subpackage/mall/pages/pay/pay_confirm.vue @@ -0,0 +1,841 @@ + + + + + diff --git a/src/subpackage/mall/pages/pay/pay_product.vue b/src/subpackage/mall/pages/pay/pay_product.vue new file mode 100644 index 0000000..08c5152 --- /dev/null +++ b/src/subpackage/mall/pages/pay/pay_product.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/subpackage/mall/static/images/close_333.png b/src/subpackage/mall/static/images/close_333.png new file mode 100644 index 0000000000000000000000000000000000000000..327b50218e7841fa0b82f250ea779a80e2a2a1aa GIT binary patch literal 353 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 KMym>87yU1c1t5$7 literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/order/status_0.png b/src/subpackage/mall/static/images/order/status_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5ffd1f44cee0c09a1ae7176fd6a1a6ca99acae11 GIT binary patch literal 4125 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 Ql>h($07*qoM6N<$f>*_v^#A|> literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/order/status_3.png b/src/subpackage/mall/static/images/order/status_3.png new file mode 100644 index 0000000000000000000000000000000000000000..45942d003dab57fe166385b28b63148b6068528d GIT binary patch literal 3302 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 literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/order/status_4.png b/src/subpackage/mall/static/images/order/status_4.png new file mode 100644 index 0000000000000000000000000000000000000000..35a70d6be770ed76487a9e79b0187f1ff241ada9 GIT binary patch literal 3247 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 OCjckNG}1jHJLP}4h`%NP literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/order/status_5.png b/src/subpackage/mall/static/images/order/status_5.png new file mode 100644 index 0000000000000000000000000000000000000000..08133f8a337f3181e4fc8eb1d95f56646a27758f GIT binary patch literal 3726 zcmaKv?LQL=*vDr!w0YPv^AIw`Vj-nGH?t|~tc_92PN9t)iFry%*&4?6%rjL zjF63K%1MP4Jzzw42&a>Z;LZzpk{ykER#Hl3G)#9AqS5N3D(LJf|QiI7ypG)?l-dBIcTVFiA1yYJ}BrC@MdhYj; z3f?>P-M;RAK>31ao5#D}NrRp4-_D<#@ffHHpqzSlfz6;IrQ-kC)Y_Bcj6cVm9&QQE zhrIF2)<&mLQ}XpZ26;Qd1wF<-lD0M=C<+w*A&-=&1Ya({DF7IR62K=t%?&Xq%S9OCJ9CMVL8+IjkrvW7u)@Po*<9oLVV7REbyZYsuYv*eI@7rn_rq13| z1(%LbhA`oCO})A!%w+{ z_r&aaA1eCBp9iY^_#sFlAJA~*-P;5QMV2V`I3o1Kpc_7s4BMWQ1DVl-R~>zvvgt%aKCgr(l!Up(SmAmKCs_aO?Vea{sziTo-L=KAp$aGlXzbOn_{b+H7rqV5 zn&Hr&@#1l(D-ApT)yh;fA)?A2XvtR)ZAR0}elgT3%I%G_8(!!3s2k!+Qy+&W0mbGU0TgVbFzDsd%HPoFp#Kwna< zO|4o+!3|iv_h;;>N$nU{!{Z3?>xbW3GFW{o&GoDC+yNwBUafh3XOaAJuDdDF&XZx* zEoT(Hd9y{OjZ)2JhKLoOT0x|Xmqc20Eb{5%(x4})u=5rs;h{%f1W#+}f7l+Jumh^o z-`4eU95UQ1*plc7jmr;JL|jjlLhW8n-{!82b%Cq7W!6-H>^XH@_2VMif~PIUHd~~% zgdI?*0!8r}reMRh07PX`a)+-36QP`>ok6g)ISS`M^kJO}m`|-Tcd+;F{IV*}$}dX* z{PX~voUa=0RlUt@zk5&1cqB+pa9le6 z(VH49i&eenb`p7O-hG3ao$(brY?;!&MR7glt#E*iY43Q8=PRg&F1`S(?m(6|&wwJn z{%K~aPC*rZ{i^GKLQ8VQ$$6&%nt?;o8)LUYY@Pws#pAk5|ClRM#r)i++D~~rDZ`gp z*)~JD3Ds1mw{NMgr~Q|17EWs))h0ZzEYtBaYu#gN$krx+6OfLPV2(6w@tg?O=UnXA z1*!!2^>V7ee`yx3f7bJn&)u0;4S7|S>iGCw|21J^ahN*8a{s8K(GjbTc(=3ef81=3 zBClu*g%Jp!Uu7R?{m*Jhb4HMIx7dNLtpMZtn9FQQfr{_O@VxI+(M$~@5QG|*`+I|S z+rLi$vR7|nwcq}IsD}LZX@6;@Gk#;on?^eA3v1sLMk+t~%RiV)*Cr^CPG%^MDwH74 z;sw>KA&C4h1KVgY_*n2$et=vKw!g#+jLiV1s^C&B&}i7c2iM3P5PVGwR)Vb>}(`nv?zC zyshrff%zmh%&49QB0Mh3`ebzIR;czYWoT^Ue$$?$wJ1__ ziaMFStwvH3DXP^W0dcHIs5t!c$phEN5fujac8JnX{Ls}-`J<-5j3|ik_TaLc#!_+; zzY>S~%`JG|J#Jsb@y)@kzgp|<$2ju`Z;Xx!*i5p(bvK%g`TU($`OxcM1@$=M)Hj=wU6#)f1O^21{mK%b!4c9ebFa<2%K|+K)F7w z>VwLP7jeA-bpA?kZX%Gmt3C<{x!TyC9-PUR>}zt}fRAxl>Ew0+4Qw()5gtite#omK zZB8`pE_oG_U_+u8RDNDQB3HZ$L0&v6mD}!0j&z|-jUK2T`0J+QimzK;Hmu7q0$#I)EV<*mJ$ge=s%GwV>Hggp#hgDeq`$)~!>dtSd{JHyXkoOad>I|y#9(fJ{ zX`QytPR-{|?&rzwKT4iHd0Dp1ckMv@Q|1%?YOIZ05RE8RW*#XYdLk2c^-SCAOV~Uke)J%3Pf(+JS9`ej%v!(_K>QJ)q0)j zylM2W5)G0Y%?J*#jT&i-n8!7 zw+RvbVWp?y#QR^JrH}898h3d|_k-!I;ssIlU9advox^B%6M0TS<~T4$X|vp+pEd9H zgF+|YK8+QR1{dz93{ULtvgjz2oXmr1EN6iG!)AP!a3&n|?} zla#(8%Cy|vd>ySI%Ix2Xmm9;tuRZ>?>R%f_iyw&ylm95~s(%Wh-sY(Amo23|AL430 z)rdup;AXn4jC8v+;$a9vLCu3G6LUj5vEgy$*jtd^y?<$0P!B}+X;K%lV9=S>(BBHO zTwm*%oZ1ARUANgIC2%(rlZ!wEQ1ELd$y!8Oss5K{2AV0_q2 z0x=7ot9T#YgBBMVPV64XnO)OKo<@Xhg$nllv$BacmksDbOJLcI*V5xHwl6b%d>YQ$ zZuG<4mEbZk3DogY4N~n_wLPWRiW}A`ITzhZ_n=g?=hhLY(`23E=)s~! zV)dt-Qqp#q&u^ayY&kf^84VJr2LD!}%`Y!3>KdzaN|d*J5M0Vs?UNw*>pNz^18%&1 zhSt!=@E(23UO9L3htUlN&BevqC>i;785D>jCK$3Ho~Q^K41NWIpm4aB>cmn%tt)s3 zhjEw{6xZ;qZYN&bu>9IGRqF8Zi~bKjAf%|`d$B<>H)y){lA~42 z4QTD77f~ZW|HSzT*ojN9d)FECX)}F^lUOT@4`!N(vf|FF35mVT`KQj`Iix8yu~J;0 ze(jbn6KYEf0Op>mJ=$%Vs6t)UR6|$@+XvXU2p{O2P>tHYC?gB#+T8ZtsZ$i>(2XNV zX^;NH_*W$rsn6G1-qqB#yGp^7@YZ_9JII4^RkxOG9A&w~*7Qmg@t@3h&E`+2pL$LA zzPPmC7nC!oPNs1^oaotfHP#9?ITMsMEet?za)g@SE!u{E>23ji?R`8Rp|=bFJTwE+ zo7rXzHqxZ4{aSmzmBb&9#%br5uO;dv9D-lCCD#|6; ztqrA#(MK2U5zSwkDCfv6u?jr`=!yO=P?*IPRDwO(0@tIGHIEH@`?%;g9J%fmw=;L8 z+j&!!(g`KD_J#+8(vfs2`L!rHloUnwNZUvocb~!a0nxDPmF1j-eIBzMdiW|vA$!A! zw{SQ064vY`NAUo>6~ zPfHKUv&12*3_LEf^a@1}Hl#msZ0({nTf)L*n9vE>f4k>(bhqy}O$EgztoojrY<=tt z8qf=!8L&}teCJd@O4>IJ9!p?NvrEDjh`aBMnJ`Xy^4KeWNe?<^zCB~}HvNgOb^XvW zJ6UHnGgbfZwhoGkqzfZ+UznUfSoUbQ=Y_x5T8yi^o!k40)8#LK!-?WE#(7b*&4TmV z(dLe%^X3f^;_*#>9u>k?xA*6drz6B>|DrL0MRtMaD@7J*P}#gW z*;HT8n*d%7pauW~w1$-9`<6Wluk04oSn(2?*drBjDHCsmRnY6 zSEW5YgLii)ZW4lj3!sUJdRtp>FqSM?lC5OG%jeN(G)NRk0{9|;e+GkMQ79C8v)o!w z;E~A7f#&8TzXxzL5p6Zi&_hJTUZA|{Ff+ws$*s(+FZ%w0f&SYfkw{6$cmj9b_y%Tt z8^FO}P}~vjGW>L@^%cQ;dwZ`Q8Oam4V)4ZvrFpeIZ-tWWxXq%63OJJ*dL0%#UM_emMvQO>YF>iYV| z$B4wE0InLR`!2J3rnWY)sZywQcgOA%f_?_zuw{kk6uVDl!5t?#A5gCX^!C8O(OHp5 zM3n-MMx)mf1z!UA)`HFfBKm{=o0;bUxUt~<*O)W++qQk8)LxNDL`)^CZo*|| zlbP1rcDTzYczi2>HX;gJR#@lRq7sd|8;Qh|I_n6*3r*AfM=`}%EcRZdXpe?xR^PB~ z>zk$ajKz{+rBs}mx7xP(1;60>sBZzpJSjtC$39;4MLd1_%sV=!iNxYcuU^6PzX9-W zQ&ZzLr7mnN7MrIO>9=FQl*UK>g7*WsE|&{j*U_>1crkF-P2SF|v=7%3BV*rjxX|(tRPYeM(H5e3AOU0w>CLUtu=ZWZf%L?l!yP~*m z;(N^eFcCd$S>f*&TTpn6biF<#rE$Kl|Bq^g%Nf@%WZlTfxhd<`ts5=w@rwhVN~LN~ zpFX2)j!J1v@#*on4v%K$z)ag-ee_a>N+OYH$!1yG9FWqO?h`z*6X3f6x?jrh_Dgv= zqtVzhBHFIoJSoFVe1W@e>`7+Y2+(FJ!;f9cbm+Q?rr1_y)qa2qrN-O&E-Uv5Ddlco;JP|;ocKWitpHX?X}nn4>t&yOoriDAuceAlzT+g8 z=Q}NW%d$eVeb*}5jO)f9WyWTJ_DUIEST5I9tH^TQ_-amPST0e*!R*nZ9D%;qR0(Qqkjjp)NCzRfhvH_EN|3|^mzb>(&^!aYuBzlRmn)X z&o8Xe0ZK_3)_Yf!34o7f89izGn4V?<*?T5Bb?xj-O>Jm6^D6+0i14~n**m=M<{;Q7ni zGY81(PDbbV7n_$*2Gi(lyeRL@d`;AMvK-|@O-OT4+R zj(!5LF1U^GaUb$>#p5#Q1m*b#-;s)zvk` zh*(3PAK3{a>Kh(DYnE!dy?Xk*UR6DQq48)m@iiiTO8-v?`g*CUt6$)Y4z3Nvlq8 zcV;oeOdz9_VQM+Uq+E#L|NsBf53Z>{y)$<2vXGq%B^Nib%_?`;INe}%AFocc8_+cV zk|4ieh6&%_JUDKka&AwWmleDF?A<2r3=E9go-U3d9>?ciixz4&;9w0f&|kdu%CC&? z`!9W4JhP9@ap(PciC0({)K(sT6MNZW{zmTtB|+QVM}}HU_>ZW337YDZRTh%#Ak@U1 z9^{>LD`fU;Wz~1v%)hr?G5H=lHz{T7%BeDQyS(d-x0D#YWl;54-h9;M(We@r=|7ws zP5aqbA9}w>b_Vm+=}vPryL3e>gGK&_otVAo2mcF8WljDG7RswxWRpd%GG22F=9sx- z%JWWdwtCshg6k8T-JDNn&pVb`EH1ib-|~;MZHts<9pC8Y_ftT*-R8+_4dz!bwyxPd z|8{0Z)T`tvA|~t4G_vX|o~vMR5Y+vn+9OmYZ@N)o!C|>;@y@kZbxK8EZCkTALy}=x zV6tS^w2ztcSH4X>u&?Gtc3J3W!-OE$Xy_Pahxo&8wtG_; z9KKXzZvMGXi=TdYbN*zp@(y3Wy0r&R*oR8XZI3g%Q0{p{pMlZ&aCOolfA*Al{BePI z4$a|d=+r&F>Y%jKtCg3wNc(wAcD!KlR;rfgRED_Sajj&_mMx8EHtI=){k05F;GVa4 zg1~qCvZYP`mt1)0Q~h-&- z?knmh6FJhaJP7%}^~&6WJ{F7f7J`%1zHa<_LUMoWd?A0s+4quv7eBgrqF_m-+`$uf zPqFTE;@Z=Hx`l_E_2}9L(}m8*8XuMInD1kf|LRT&3&)DQ5{WHJ8C-X@bgqbOk5UQf zTIRMyCe*a`-m4_v;uvm`)8;p>=+r7tez!7^cZ2$5y_HP&SWZ>7NtS*zZrs)(5#k!O zciq%|fA^SteIdQ8d(~tOudPRUZ+pF566dONcj2GN>t}f;=y)?3eNK-LNHTx9^|zi_ z!pw`hjc58VF5SHNsAu<{tL4|{h}U{FS1*1xkMaMCn&`WW`RClN-YkB>zF^D$S-Om2 zZuN0zBsR?1TFh1RXTm~xr=?{fFMgMwdz-o5xl~Bs=EVfpsKfpqMJLKRQaR-XvTfJ% vUcR>b=;V72=S;4}r~^~sA@2WT`x!b8yL^6rUYZq{4H!IK{an^LB{Ts5-nIK4 literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/star_fill.png b/src/subpackage/mall/static/images/star_fill.png new file mode 100644 index 0000000000000000000000000000000000000000..9cff83dcbcc2a7a0d58a01507332d2268f40a5a0 GIT binary patch literal 1158 zcmV;11bO?3P)PWH z{GT2Fjxzp_F#Mhy{g5#Erw{q82>GfE`Kk*1n<4&=Gxx9n`K|`}tp@#%F#Vh#|Bx{J zk}CO}9siFr__F~2t^oO{4Ed-G{*E;MjWqYM0Qjp2{Fx&Bl_>e95BaGI{gE#Ds0{m? zANiyb`k@y2qZ9m>B>ATe`K1v3k}Lb48T+0Z`l1#4oE`m>D)_Dg`k)v5mL~h19QUjR z_^bx~k1+m@G5D(o`lA#sT9xbo002I8QchC<1O57{jyxk8`70>#=G@M$V_P^g6AAV2 z?by}Sq?nL{gI+=`@$Ky9W5PJfQtQ^G} zz3w!;qA0*oFd*~F@Qhb{J;UBwv?$;JD5bZ|gIZhL=>7SOonWV1ZcPIq9c0(icY!l{ ze!BkBC8VU3lx0~3EeT;2H0&L0?k;^p!8zze0R4bDJ8L4u8j}W51&L7F<^dvI#c>=( zZ~!q204hs7x6N0G^doL0O;gBi^Uu!XPnrq?(t8%iXQb(|ZN5+*nel0sWmQILp3krw z)69f0(VKQYJ_#_Mg95cC$ti(gB)q>u3&A>w<~eiX7$$tR0=oJuM$_Chltvu$0wkB~ zg;DQ0_}p}qCk!WN_{^EXEAOFJ8Jkariqc|5_-eOqS`>t$FaV#s5Jy4@DK`ok*vF<8 zeQsvJKwJb)BpTTN{~@Cs?4EE2-h$crfaf0W+c}%NsVL+j0Xu7vUA)MSfd5YRw@~oM zRTH^AAb?qKy)^2XrgFzUleujY#9Ulp3zI;H8|*-^;M%BX+FIkv=dH~H!cDG1n#$T7 z+Jtc16tpGWGzCoww~9e4!UZuXAebs+=^X#5RD_Dou!vAD50vd>**FV2ck#zBVfgb8 zPY-2#a?>#+lyibP1oBReTvs8_>l>MSgc;>87!hWlWm(Q2%O4%z%Y085BWont6U+B4 zeXBbIef*@ucReD{^}EUN-KCDJI8mBca%OI3m^Mqx5(62rWi+{0JggbuDEk~~Gu63;0*O7X?UhjYX Y0JUqUH>{(@Q2+n{07*qoM6N<$f)i9j@Bjb+ literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/vip_pay.png b/src/subpackage/mall/static/images/vip_pay.png new file mode 100644 index 0000000000000000000000000000000000000000..be953ed5abd216dcacd504a5714dc6d6a8b4d88d GIT binary patch literal 627 zcmV-(0*w8MP)a=mp03(LDjPhqklWkttq~o8nKQOtB4@BlQYMqJ<+far-Nc?2uc6|03~!% zPE!D5Wfv>Ai+yueJrMET+S$sXl1K65!L^`)dLQ%b*u=f6a$d(T9;*H&;!sUint^MJ@~jXCIe7@`)CTFLru<&W=HNIdV@v}#wtjW zpz|2Oh!W0I5_ff?x;|+z<1#Q-p{u$~9qmOPwb1U~h#W3-Q4fq&C<6j8>B_!R;?7qK zahLd!_$Ff$%EV=b?6;JX^F7tYjfwhJ#*$tGh`4pMI>wbynV>L909K(}6n!wNm~!rg z;UsPqCCV}nLY+Ht=N3gIR*QR(ne-ue+{JQDmbqdzy9ecQCYMMP$aDBNll?C9Yqgpu zP0YvIkt%F;B=j1Z(Lk=+H_sReBWHnIR1R#y$d1nr6r1H5=rz5q09{n;4)OTGXA N002ovPDHLkV1hRc7S{j( literal 0 HcmV?d00001 diff --git a/src/subpackage/mall/static/images/wx_pay.png b/src/subpackage/mall/static/images/wx_pay.png new file mode 100644 index 0000000000000000000000000000000000000000..28fa1fbfada89f26c642d923aac3f42d4b35ea66 GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL3?z5Yp7kC``33ldxB_X8J!~9%**N#GbAS;i zkh_PSZ8uN^BnT#f3Rpq1yMYKSxR;G#H&7!`mYs7qhy)q}WR#W^egT>&SrX(I%0*42=DrE{-7{$KPH(JMEEz0PBO(`AH4e zj%2L)UVrhWpW76nB+K+^e{*9hEDk(%`tbkDy4hzt_h}lJCpR6~Xncg{Uq|foj1{LM zdY7$O;d!$-xw5T{S6Iuc>hyk}75XY4u5LcV+qoj3N6N!PHRV_L5xx^?KNl=FQRe*l zLFQ4Xir-za#ounPS8r5&bw_3YG7U@p^88CuaY9>@?e3j_>9v}#p=!GGu6X|0;XEu= z8zwGaEGK@%KHR#&n97u1uNZM?>irB>V^r1pFBH(!+z;Ri<2oi<)5Y-&3(bF zwf#=*wj*aI-RP~olcK{FW+ncZW#eRgzx>$xi+Qc?vc;Fu1dW05$KdJe K=d#Wzp$PzppaMt$ literal 0 HcmV?d00001