diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1a18c24 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/unpackage diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..003bcd4 --- /dev/null +++ b/App.vue @@ -0,0 +1,22 @@ + + + diff --git a/README.md b/README.md index 6290b01..a29acd4 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# dianpin-h5-4000-0827 +# bin-yuan-uniapp -公众号项目 \ No newline at end of file +兼职招聘信息公众号 \ No newline at end of file diff --git a/common/com.js b/common/com.js new file mode 100644 index 0000000..82592b4 --- /dev/null +++ b/common/com.js @@ -0,0 +1,13 @@ +export default{ + displayNav(){ + let iswx = navigator.userAgent.toLowerCase().indexOf('micromessenger') != -1; + //#ifdef H5 + if (iswx) { + let pageNav = document.getElementsByTagName("uni-page-head"); + if (pageNav && pageNav[0]) { + pageNav[0].style.display = "none"; + } + } + //#endif + } +} \ No newline at end of file diff --git a/common/components.js b/common/components.js new file mode 100644 index 0000000..6e69dc4 --- /dev/null +++ b/common/components.js @@ -0,0 +1,5 @@ +import Vue from 'vue' + +// import Navbar from '@/components/comm-navbar/comm-navbar.vue' + +// Vue.component('comm-navbar', Navbar) \ No newline at end of file diff --git a/common/uqrcode.js b/common/uqrcode.js new file mode 100644 index 0000000..a34811a --- /dev/null +++ b/common/uqrcode.js @@ -0,0 +1,1441 @@ +// uqrcode.js +//--------------------------------------------------------------------- +// github https://github.com/Sansnn/uQRCode +//--------------------------------------------------------------------- + +let uQRCode = {}; + +(function() { + //--------------------------------------------------------------------- + // QRCode for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word "QR Code" is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // QR8bitByte + //--------------------------------------------------------------------- + + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + } + + QR8bitByte.prototype = { + + getLength: function(buffer) { + return this.data.length; + }, + + write: function(buffer) { + for (var i = 0; i < this.data.length; i++) { + // not JIS ... + buffer.put(this.data.charCodeAt(i), 8); + } + } + }; + + //--------------------------------------------------------------------- + // QRCode + //--------------------------------------------------------------------- + + function QRCode(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = new Array(); + } + + QRCode.prototype = { + + addData: function(data) { + var newData = new QR8bitByte(data); + this.dataList.push(newData); + this.dataCache = null; + }, + + isDark: function(row, col) { + if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { + throw new Error(row + "," + col); + } + return this.modules[row][col]; + }, + + getModuleCount: function() { + return this.moduleCount; + }, + + make: function() { + // Calculate automatically typeNumber if provided is < 1 + if (this.typeNumber < 1) { + var typeNumber = 1; + for (typeNumber = 1; typeNumber < 40; typeNumber++) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel); + + var buffer = new QRBitBuffer(); + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + for (var i = 0; i < this.dataList.length; i++) { + var data = this.dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + if (buffer.getLengthInBits() <= totalDataCount * 8) + break; + } + this.typeNumber = typeNumber; + } + this.makeImpl(false, this.getBestMaskPattern()); + }, + + makeImpl: function(test, maskPattern) { + + this.moduleCount = this.typeNumber * 4 + 17; + this.modules = new Array(this.moduleCount); + + for (var row = 0; row < this.moduleCount; row++) { + + this.modules[row] = new Array(this.moduleCount); + + for (var col = 0; col < this.moduleCount; col++) { + this.modules[row][col] = null; //(col + row) % 3; + } + } + + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(test, maskPattern); + + if (this.typeNumber >= 7) { + this.setupTypeNumber(test); + } + + if (this.dataCache == null) { + this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); + } + + this.mapData(this.dataCache, maskPattern); + }, + + setupPositionProbePattern: function(row, col) { + + for (var r = -1; r <= 7; r++) { + + if (row + r <= -1 || this.moduleCount <= row + r) continue; + + for (var c = -1; c <= 7; c++) { + + if (col + c <= -1 || this.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)) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + }, + + getBestMaskPattern: function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i++) { + + this.makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }, + + createMovieClip: function(target_mc, instance_name, depth) { + + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); + var cs = 1; + + this.make(); + + for (var row = 0; row < this.modules.length; row++) { + + var y = row * cs; + + for (var col = 0; col < this.modules[row].length; col++) { + + var x = col * cs; + var dark = this.modules[row][col]; + + if (dark) { + qr_mc.beginFill(0, 100); + qr_mc.moveTo(x, y); + qr_mc.lineTo(x + cs, y); + qr_mc.lineTo(x + cs, y + cs); + qr_mc.lineTo(x, y + cs); + qr_mc.endFill(); + } + } + } + + return qr_mc; + }, + + setupTimingPattern: function() { + + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { + continue; + } + this.modules[r][6] = (r % 2 == 0); + } + + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { + continue; + } + this.modules[6][c] = (c % 2 == 0); + } + }, + + setupPositionAdjustPattern: function() { + + var pos = QRUtil.getPatternPosition(this.typeNumber); + + for (var i = 0; i < pos.length; i++) { + + for (var j = 0; j < pos.length; j++) { + + var row = pos[i]; + var col = pos[j]; + + if (this.modules[row][col] != null) { + continue; + } + + for (var r = -2; r <= 2; r++) { + + for (var c = -2; c <= 2; c++) { + + if (r == -2 || r == 2 || c == -2 || c == 2 || + (r == 0 && c == 0)) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + } + } + }, + + setupTypeNumber: function(test) { + + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); + + for (var i = 0; i < 18; i++) { + var mod = (!test && ((bits >> i) & 1) == 1); + this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; + } + + for (var i = 0; i < 18; i++) { + var mod = (!test && ((bits >> i) & 1) == 1); + this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }, + + setupTypeInfo: function(test, maskPattern) { + + var data = (this.errorCorrectLevel << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + + // vertical + for (var i = 0; i < 15; i++) { + + var mod = (!test && ((bits >> i) & 1) == 1); + + if (i < 6) { + this.modules[i][8] = mod; + } else if (i < 8) { + this.modules[i + 1][8] = mod; + } else { + this.modules[this.moduleCount - 15 + i][8] = mod; + } + } + + // horizontal + for (var i = 0; i < 15; i++) { + + var mod = (!test && ((bits >> i) & 1) == 1); + + if (i < 8) { + this.modules[8][this.moduleCount - i - 1] = mod; + } else if (i < 9) { + this.modules[8][15 - i - 1 + 1] = mod; + } else { + this.modules[8][15 - i - 1] = mod; + } + } + + // fixed module + this.modules[this.moduleCount - 8][8] = (!test); + + }, + + mapData: function(data, maskPattern) { + + var inc = -1; + var row = this.moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + + for (var col = this.moduleCount - 1; col > 0; col -= 2) { + + if (col == 6) col--; + + while (true) { + + for (var c = 0; c < 2; c++) { + + if (this.modules[row][col - c] == null) { + + var dark = false; + + if (byteIndex < data.length) { + dark = (((data[byteIndex] >>> bitIndex) & 1) == 1); + } + + var mask = QRUtil.getMask(maskPattern, row, col - c); + + if (mask) { + dark = !dark; + } + + this.modules[row][col - c] = dark; + bitIndex--; + + if (bitIndex == -1) { + byteIndex++; + bitIndex = 7; + } + } + } + + row += inc; + + if (row < 0 || this.moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + + } + + }; + + QRCode.PAD0 = 0xEC; + QRCode.PAD1 = 0x11; + + QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = new QRBitBuffer(); + + for (var i = 0; i < dataList.length; i++) { + var data = dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + 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(QRCode.PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD1, 8); + } + + return QRCode.createBytes(buffer, rsBlocks); + } + + QRCode.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++) { + + 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++) { + dcdata[r][i] = 0xff & buffer.buffer[i + offset]; + } + offset += dcCount; + + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = new 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++) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0; + } + + } + + var totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + var index = 0; + + for (var i = 0; i < maxDcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < dcdata[r].length) { + data[index++] = dcdata[r][i]; + } + } + } + + for (var i = 0; i < maxEcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < ecdata[r].length) { + data[index++] = ecdata[r][i]; + } + } + } + + return data; + + } + + //--------------------------------------------------------------------- + // 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 = { + + 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] + ], + + G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), + G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), + G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), + + getBCHTypeInfo: function(data) { + var d = data << 10; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { + d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15))); + } + return ((data << 10) | d) ^ QRUtil.G15_MASK; + }, + + getBCHTypeNumber: function(data) { + var d = data << 12; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { + d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18))); + } + return (data << 12) | d; + }, + + getBCHDigit: function(data) { + + var digit = 0; + + while (data != 0) { + digit++; + data >>>= 1; + } + + return digit; + }, + + getPatternPosition: function(typeNumber) { + return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; + }, + + getMask: function(maskPattern, i, j) { + + switch (maskPattern) { + + case QRMaskPattern.PATTERN000: + return (i + j) % 2 == 0; + case QRMaskPattern.PATTERN001: + return i % 2 == 0; + case QRMaskPattern.PATTERN010: + return j % 3 == 0; + case QRMaskPattern.PATTERN011: + return (i + j) % 3 == 0; + case QRMaskPattern.PATTERN100: + return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; + case QRMaskPattern.PATTERN101: + return (i * j) % 2 + (i * j) % 3 == 0; + case QRMaskPattern.PATTERN110: + return ((i * j) % 2 + (i * j) % 3) % 2 == 0; + case QRMaskPattern.PATTERN111: + return ((i * j) % 3 + (i + j) % 2) % 2 == 0; + + default: + throw new Error("bad maskPattern:" + maskPattern); + } + }, + + getErrorCorrectPolynomial: function(errorCorrectLength) { + + var a = new QRPolynomial([1], 0); + + for (var i = 0; i < errorCorrectLength; i++) { + a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); + } + + return a; + }, + + 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); + } + }, + + getLostPoint: function(qrCode) { + + var moduleCount = qrCode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row++) { + + for (var col = 0; col < moduleCount; col++) { + + var sameCount = 0; + var dark = qrCode.isDark(row, col); + + for (var r = -1; r <= 1; r++) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c++) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrCode.isDark(row + r, col + c)) { + sameCount++; + } + } + } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } + } + } + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row++) { + for (var col = 0; col < moduleCount - 1; col++) { + var count = 0; + if (qrCode.isDark(row, col)) count++; + if (qrCode.isDark(row + 1, col)) count++; + if (qrCode.isDark(row, col + 1)) count++; + if (qrCode.isDark(row + 1, col + 1)) count++; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount - 6; col++) { + 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++) { + for (var row = 0; row < moduleCount - 6; row++) { + 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++) { + for (var row = 0; row < moduleCount; row++) { + if (qrCode.isDark(row, col)) { + darkCount++; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + } + + }; + + + //--------------------------------------------------------------------- + // QRMath + //--------------------------------------------------------------------- + + var QRMath = { + + glog: function(n) { + + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + + return QRMath.LOG_TABLE[n]; + }, + + gexp: function(n) { + + while (n < 0) { + n += 255; + } + + while (n >= 256) { + n -= 255; + } + + return QRMath.EXP_TABLE[n]; + }, + + EXP_TABLE: new Array(256), + + LOG_TABLE: new Array(256) + + }; + + for (var i = 0; i < 8; i++) { + QRMath.EXP_TABLE[i] = 1 << i; + } + for (var i = 8; i < 256; i++) { + QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ + QRMath.EXP_TABLE[i - 5] ^ + QRMath.EXP_TABLE[i - 6] ^ + QRMath.EXP_TABLE[i - 8]; + } + for (var i = 0; i < 255; i++) { + QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; + } + + //--------------------------------------------------------------------- + // QRPolynomial + //--------------------------------------------------------------------- + + function QRPolynomial(num, shift) { + + if (num.length == undefined) { + throw new Error(num.length + "/" + shift); + } + + var offset = 0; + + while (offset < num.length && num[offset] == 0) { + offset++; + } + + this.num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i++) { + this.num[i] = num[i + offset]; + } + } + + QRPolynomial.prototype = { + + get: function(index) { + return this.num[index]; + }, + + getLength: function() { + return this.num.length; + }, + + multiply: function(e) { + + var num = new Array(this.getLength() + e.getLength() - 1); + + for (var i = 0; i < this.getLength(); i++) { + for (var j = 0; j < e.getLength(); j++) { + num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))); + } + } + + return new QRPolynomial(num, 0); + }, + + mod: function(e) { + + if (this.getLength() - e.getLength() < 0) { + return this; + } + + var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); + + var num = new Array(this.getLength()); + + for (var i = 0; i < this.getLength(); i++) { + num[i] = this.get(i); + } + + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); + } + + // recursive call + return new QRPolynomial(num, 0).mod(e); + } + }; + + //--------------------------------------------------------------------- + // QRRSBlock + //--------------------------------------------------------------------- + + function QRRSBlock(totalCount, dataCount) { + this.totalCount = totalCount; + this.dataCount = dataCount; + } + + QRRSBlock.RS_BLOCK_TABLE = [ + + // L + // M + // Q + // H + + // 1 + [1, 26, 19], + [1, 26, 16], + [1, 26, 13], + [1, 26, 9], + + // 2 + [1, 44, 34], + [1, 44, 28], + [1, 44, 22], + [1, 44, 16], + + // 3 + [1, 70, 55], + [1, 70, 44], + [2, 35, 17], + [2, 35, 13], + + // 4 + [1, 100, 80], + [2, 50, 32], + [2, 50, 24], + [4, 25, 9], + + // 5 + [1, 134, 108], + [2, 67, 43], + [2, 33, 15, 2, 34, 16], + [2, 33, 11, 2, 34, 12], + + // 6 + [2, 86, 68], + [4, 43, 27], + [4, 43, 19], + [4, 43, 15], + + // 7 + [2, 98, 78], + [4, 49, 31], + [2, 32, 14, 4, 33, 15], + [4, 39, 13, 1, 40, 14], + + // 8 + [2, 121, 97], + [2, 60, 38, 2, 61, 39], + [4, 40, 18, 2, 41, 19], + [4, 40, 14, 2, 41, 15], + + // 9 + [2, 146, 116], + [3, 58, 36, 2, 59, 37], + [4, 36, 16, 4, 37, 17], + [4, 36, 12, 4, 37, 13], + + // 10 + [2, 86, 68, 2, 87, 69], + [4, 69, 43, 1, 70, 44], + [6, 43, 19, 2, 44, 20], + [6, 43, 15, 2, 44, 16], + + // 11 + [4, 101, 81], + [1, 80, 50, 4, 81, 51], + [4, 50, 22, 4, 51, 23], + [3, 36, 12, 8, 37, 13], + + // 12 + [2, 116, 92, 2, 117, 93], + [6, 58, 36, 2, 59, 37], + [4, 46, 20, 6, 47, 21], + [7, 42, 14, 4, 43, 15], + + // 13 + [4, 133, 107], + [8, 59, 37, 1, 60, 38], + [8, 44, 20, 4, 45, 21], + [12, 33, 11, 4, 34, 12], + + // 14 + [3, 145, 115, 1, 146, 116], + [4, 64, 40, 5, 65, 41], + [11, 36, 16, 5, 37, 17], + [11, 36, 12, 5, 37, 13], + + // 15 + [5, 109, 87, 1, 110, 88], + [5, 65, 41, 5, 66, 42], + [5, 54, 24, 7, 55, 25], + [11, 36, 12], + + // 16 + [5, 122, 98, 1, 123, 99], + [7, 73, 45, 3, 74, 46], + [15, 43, 19, 2, 44, 20], + [3, 45, 15, 13, 46, 16], + + // 17 + [1, 135, 107, 5, 136, 108], + [10, 74, 46, 1, 75, 47], + [1, 50, 22, 15, 51, 23], + [2, 42, 14, 17, 43, 15], + + // 18 + [5, 150, 120, 1, 151, 121], + [9, 69, 43, 4, 70, 44], + [17, 50, 22, 1, 51, 23], + [2, 42, 14, 19, 43, 15], + + // 19 + [3, 141, 113, 4, 142, 114], + [3, 70, 44, 11, 71, 45], + [17, 47, 21, 4, 48, 22], + [9, 39, 13, 16, 40, 14], + + // 20 + [3, 135, 107, 5, 136, 108], + [3, 67, 41, 13, 68, 42], + [15, 54, 24, 5, 55, 25], + [15, 43, 15, 10, 44, 16], + + // 21 + [4, 144, 116, 4, 145, 117], + [17, 68, 42], + [17, 50, 22, 6, 51, 23], + [19, 46, 16, 6, 47, 17], + + // 22 + [2, 139, 111, 7, 140, 112], + [17, 74, 46], + [7, 54, 24, 16, 55, 25], + [34, 37, 13], + + // 23 + [4, 151, 121, 5, 152, 122], + [4, 75, 47, 14, 76, 48], + [11, 54, 24, 14, 55, 25], + [16, 45, 15, 14, 46, 16], + + // 24 + [6, 147, 117, 4, 148, 118], + [6, 73, 45, 14, 74, 46], + [11, 54, 24, 16, 55, 25], + [30, 46, 16, 2, 47, 17], + + // 25 + [8, 132, 106, 4, 133, 107], + [8, 75, 47, 13, 76, 48], + [7, 54, 24, 22, 55, 25], + [22, 45, 15, 13, 46, 16], + + // 26 + [10, 142, 114, 2, 143, 115], + [19, 74, 46, 4, 75, 47], + [28, 50, 22, 6, 51, 23], + [33, 46, 16, 4, 47, 17], + + // 27 + [8, 152, 122, 4, 153, 123], + [22, 73, 45, 3, 74, 46], + [8, 53, 23, 26, 54, 24], + [12, 45, 15, 28, 46, 16], + + // 28 + [3, 147, 117, 10, 148, 118], + [3, 73, 45, 23, 74, 46], + [4, 54, 24, 31, 55, 25], + [11, 45, 15, 31, 46, 16], + + // 29 + [7, 146, 116, 7, 147, 117], + [21, 73, 45, 7, 74, 46], + [1, 53, 23, 37, 54, 24], + [19, 45, 15, 26, 46, 16], + + // 30 + [5, 145, 115, 10, 146, 116], + [19, 75, 47, 10, 76, 48], + [15, 54, 24, 25, 55, 25], + [23, 45, 15, 25, 46, 16], + + // 31 + [13, 145, 115, 3, 146, 116], + [2, 74, 46, 29, 75, 47], + [42, 54, 24, 1, 55, 25], + [23, 45, 15, 28, 46, 16], + + // 32 + [17, 145, 115], + [10, 74, 46, 23, 75, 47], + [10, 54, 24, 35, 55, 25], + [19, 45, 15, 35, 46, 16], + + // 33 + [17, 145, 115, 1, 146, 116], + [14, 74, 46, 21, 75, 47], + [29, 54, 24, 19, 55, 25], + [11, 45, 15, 46, 46, 16], + + // 34 + [13, 145, 115, 6, 146, 116], + [14, 74, 46, 23, 75, 47], + [44, 54, 24, 7, 55, 25], + [59, 46, 16, 1, 47, 17], + + // 35 + [12, 151, 121, 7, 152, 122], + [12, 75, 47, 26, 76, 48], + [39, 54, 24, 14, 55, 25], + [22, 45, 15, 41, 46, 16], + + // 36 + [6, 151, 121, 14, 152, 122], + [6, 75, 47, 34, 76, 48], + [46, 54, 24, 10, 55, 25], + [2, 45, 15, 64, 46, 16], + + // 37 + [17, 152, 122, 4, 153, 123], + [29, 74, 46, 14, 75, 47], + [49, 54, 24, 10, 55, 25], + [24, 45, 15, 46, 46, 16], + + // 38 + [4, 152, 122, 18, 153, 123], + [13, 74, 46, 32, 75, 47], + [48, 54, 24, 14, 55, 25], + [42, 45, 15, 32, 46, 16], + + // 39 + [20, 147, 117, 4, 148, 118], + [40, 75, 47, 7, 76, 48], + [43, 54, 24, 22, 55, 25], + [10, 45, 15, 67, 46, 16], + + // 40 + [19, 148, 118, 6, 149, 119], + [18, 75, 47, 31, 76, 48], + [34, 54, 24, 34, 55, 25], + [20, 45, 15, 61, 46, 16] + ]; + + QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) { + + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); + + if (rsBlock == undefined) { + throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i++) { + + 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++) { + list.push(new QRRSBlock(totalCount, dataCount)); + } + } + + return list; + } + + QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) { + + switch (errorCorrectLevel) { + case QRErrorCorrectLevel.L: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default: + return undefined; + } + } + + //--------------------------------------------------------------------- + // QRBitBuffer + //--------------------------------------------------------------------- + + function QRBitBuffer() { + this.buffer = new Array(); + this.length = 0; + } + + QRBitBuffer.prototype = { + + get: function(index) { + var bufIndex = Math.floor(index / 8); + return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1; + }, + + put: function(num, length) { + for (var i = 0; i < length; i++) { + this.putBit(((num >>> (length - i - 1)) & 1) == 1); + } + }, + + getLengthInBits: function() { + return this.length; + }, + + putBit: function(bit) { + + var bufIndex = Math.floor(this.length / 8); + if (this.buffer.length <= bufIndex) { + this.buffer.push(0); + } + + if (bit) { + this.buffer[bufIndex] |= (0x80 >>> (this.length % 8)); + } + + this.length++; + } + }; + + //--------------------------------------------------------------------- + // Support Chinese + //--------------------------------------------------------------------- + function utf16To8(text) { + var result = ''; + var c; + for (var i = 0; i < text.length; i++) { + c = text.charCodeAt(i); + if (c >= 0x0001 && c <= 0x007F) { + result += text.charAt(i); + } else if (c > 0x07FF) { + result += String.fromCharCode(0xE0 | c >> 12 & 0x0F); + result += String.fromCharCode(0x80 | c >> 6 & 0x3F); + result += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } else { + result += String.fromCharCode(0xC0 | c >> 6 & 0x1F); + result += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } + } + return result; + } + + uQRCode = { + + errorCorrectLevel: QRErrorCorrectLevel, + + defaults: { + size: 354, + margin: 0, + backgroundColor: '#ffffff', + foregroundColor: '#000000', + fileType: 'png', // 'jpg', 'png' + errorCorrectLevel: QRErrorCorrectLevel.H, + typeNumber: -1 + }, + + make: function(options) { + return new Promise((reslove, reject) => { + var defaultOptions = { + canvasId: options.canvasId, + componentInstance: options.componentInstance, + text: options.text, + size: this.defaults.size, + margin: this.defaults.margin, + backgroundColor: this.defaults.backgroundColor, + foregroundColor: this.defaults.foregroundColor, + fileType: this.defaults.fileType, + errorCorrectLevel: this.defaults.errorCorrectLevel, + typeNumber: this.defaults.typeNumber + }; + if (options) { + for (var i in options) { + defaultOptions[i] = options[i]; + } + } + options = defaultOptions; + if (!options.canvasId) { + console.error('uQRCode: Please set canvasId!'); + return; + } + + function createCanvas() { + var qrcode = new QRCode(options.typeNumber, options.errorCorrectLevel); + qrcode.addData(utf16To8(options.text)); + qrcode.make(); + + var ctx = uni.createCanvasContext(options.canvasId, options.componentInstance); + ctx.setFillStyle(options.backgroundColor); + ctx.fillRect(0, 0, options.size, options.size); + + var tileW = (options.size - options.margin * 2) / qrcode.getModuleCount(); + var tileH = tileW; + + for (var row = 0; row < qrcode.getModuleCount(); row++) { + for (var col = 0; col < qrcode.getModuleCount(); col++) { + var style = qrcode.isDark(row, col) ? options.foregroundColor : options.backgroundColor; + ctx.setFillStyle(style); + var x = Math.round(col * tileW) + options.margin; + var y = Math.round(row * tileH) + options.margin; + var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW); + var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW); + ctx.fillRect(x, y, w, h); + } + } + + setTimeout(function() { + ctx.draw(false, (function() { + setTimeout(function() { + uni.canvasToTempFilePath({ + canvasId: options.canvasId, + fileType: options.fileType, + width: options.size, + height: options.size, + destWidth: options.size, + destHeight: options.size, + success: function(res) { + let resData; // 将统一为base64格式 + let tempFilePath = res.tempFilePath; // H5为base64,其他为相对路径 + + // #ifdef H5 + resData = tempFilePath; + options.success && options.success(resData); + reslove(resData); + // #endif + + // #ifdef APP-PLUS + const path = plus.io.convertLocalFileSystemURL(tempFilePath) // 绝对路径 + let fileReader = new plus.io.FileReader(); + fileReader.readAsDataURL(path); + fileReader.onloadend = res => { + resData = res.target.result; + options.success && options.success(resData); + reslove(resData); + }; + // #endif + + // #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO + uni.getFileSystemManager().readFile({ + filePath: tempFilePath, + encoding: 'base64', + success: res => { + resData = 'data:image/png;base64,' + res.data; + options.success && options.success(resData); + reslove(resData); + } + }) + // #endif + + // #ifndef H5 || APP-PLUS || MP-WEIXIN || MP-QQ || MP-TOUTIAO + if (plus) { + const path = plus.io.convertLocalFileSystemURL(tempFilePath) // 绝对路径 + let fileReader = new plus.io.FileReader(); + fileReader.readAsDataURL(path); + fileReader.onloadend = res => { + resData = res.target.result; + options.success && options.success(resData); + reslove(resData); + }; + } else { + uni.request({ + url: tempFilePath, + method: 'GET', + responseType: 'arraybuffer', + success: res => { + resData = `data:image/png;base64,${uni.arrayBufferToBase64(res.data)}`; // 把arraybuffer转成base64 + options.success && options.success(resData); + reslove(resData); + } + }) + } + // #endif + }, + fail: function(error) { + options.fail && options.fail(error); + reject(error); + }, + complete: function(res) { + options.complete && options.complete(res); + } + }, options.componentInstance); + }, options.text.length + 100); + })()); + }, 150); + } + + createCanvas(); + }); + } + } + +})() + +export default uQRCode + + \ No newline at end of file diff --git a/components/active-card/address-list.vue b/components/active-card/address-list.vue new file mode 100644 index 0000000..8a584e9 --- /dev/null +++ b/components/active-card/address-list.vue @@ -0,0 +1,145 @@ + + + + + \ No newline at end of file diff --git a/components/active-card/order-list.vue b/components/active-card/order-list.vue new file mode 100644 index 0000000..6e7a38d --- /dev/null +++ b/components/active-card/order-list.vue @@ -0,0 +1,159 @@ + + + + + \ No newline at end of file diff --git a/components/run-component/wx-b-card.vue b/components/run-component/wx-b-card.vue new file mode 100644 index 0000000..07bb2b5 --- /dev/null +++ b/components/run-component/wx-b-card.vue @@ -0,0 +1,69 @@ + + + + + \ No newline at end of file diff --git a/components/run-component/wx-b-login.vue b/components/run-component/wx-b-login.vue new file mode 100644 index 0000000..4b7ad16 --- /dev/null +++ b/components/run-component/wx-b-login.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/env.js b/env.js new file mode 100644 index 0000000..89ad530 --- /dev/null +++ b/env.js @@ -0,0 +1,26 @@ +// .env.js 文件 +// 不同环境访问不同的路径 +// import store from '@/common/store/index' +const ENV_API_URL = { + development: 'https://jobadmin.java996.icu', //开发环境 + production: 'https://jobadmin.java996.icu', //生产环境 +} +const ENV_BASE_URL = { + development: 'https://jobadmin.java996.icu', //开发环境 + production: 'https://jobadmin.java996.icu', //生产环境 +} + +// const ENV_API_URL = { +// development: 'http://localhost:8091', //开发环境 +// production: 'http://localhost:8091', //生产环境 +// } +// const ENV_BASE_URL = { +// development: 'http://localhost:8091', //开发环境 +// production: 'http://localhost:8091', //生产环境 +// } + + + +export const BASE_URL = ENV_BASE_URL[process.env.NODE_ENV || 'development']; //后台根域名 +export const API_URL = ENV_API_URL[process.env.NODE_ENV || 'development']; //后台接口域名 +export const HAS_LIVE = false; //后台是否开通直播权限,根据情况在manifest.json中,开启注释相应组件的引入。 diff --git a/main.js b/main.js new file mode 100644 index 0000000..9b053a3 --- /dev/null +++ b/main.js @@ -0,0 +1,48 @@ +import Vue from 'vue' +import App from './App' +import '@/common/components' +// import util from '@/common/utils/common' +import { + API_URL +} from './env.js'//这里是接口api +import api from '@/request/index' +import com from '@/common/com.js' +Vue.prototype.$api = api; +Vue.prototype.$API_URL = API_URL; +Vue.prototype.$com = com; + +Vue.config.productionTip = false +import uView from "uview-ui"; +import store from './store/index.js' +import jweixin from 'jweixin-module' +Vue.prototype.$jweixin = jweixin +Vue.prototype.$store = store +Vue.prototype.$base_img = 'https://bag.3iot.top' +// Vue.prototype.$util = util +Vue.use(uView); + +Vue.prototype.$Toast = function(title) { + return uni.showToast({ + title:title, + icon:'none' + }) +} + +//全局混入 +Vue.mixin({ + data() { + return { + } + }, + onTabItemTap(e){ + let token = uni.getStorageSync('userToken') + }, +}) +App.mpType = 'app' + +const app = new Vue({ + store, + ...App +}) + +app.$mount() diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..a7fde16 --- /dev/null +++ b/manifest.json @@ -0,0 +1,98 @@ +{ + "name" : "兼兼街", + "appid" : "__UNI__278B20D", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wx6fb4a17b28186d58", + "setting" : { + "urlCheck" : false, + "es6" : true, + "minified" : true + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "获取地理位置" + } + } + }, + "h5" : { + "optimization" : { + "treeShaking" : { + "enable" : true //启用摇树优化 + } + }, + "devServer" : { + "disableHostCheck" : true + }, + "router" : { + "mode" : "history" + } + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9cfd7f2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,59 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, + "jweixin-module": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/jweixin-module/-/jweixin-module-1.6.0.tgz", + "integrity": "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==" + }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, + "uview-ui": { + "version": "2.0.34", + "resolved": "https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.34.tgz", + "integrity": "sha512-usJHnPCtk45yLTWTXTpLX9Vuqhzjth/+4t/m+S3J5bZuahv49mVQ126rtSnuAWWVkOUtKCX4CU83gFHZj8nP5g==" + }, + "weixin-js-sdk": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/weixin-js-sdk/-/weixin-js-sdk-1.6.0.tgz", + "integrity": "sha512-3IYQH7aalJGFJrwdT3epvTdR1MboMiH7vIZ5BRL2eYOJ12BNah7csoMkmSZzkq1+l92sSq29XdTCVjCJoK2sBQ==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..97e7996 --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "html2canvas": "^1.4.1", + "jweixin-module": "^1.6.0", + "uview-ui": "^2.0.31", + "weixin-js-sdk": "^1.6.0" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..fbb2ed3 --- /dev/null +++ b/pages.json @@ -0,0 +1,70 @@ +{ + "easycom": { + "autoscan": true, + "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue" + }, + "pages": [ + { + "path": "pages/home/index", + "name": "home", + "style": { + "navigationBarTitleText": "汇智文化学苑", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/my/login-kehu", + "style": { + "navigationBarTitleText": "登录" + } + },{ + "path": "pages/my/my-order-list", + "style": { + "navigationBarTitleText": "订阅历史" + } + },{ + "path": "pages/my/my-order-details", + "style": { + "navigationBarTitleText": "订单详情" + } + }, + { + "path": "pages/my/my-kanwu-list", + "style": { + "navigationBarTitleText": "刊物目录" + } + }, + { + "path": "pages/my/my-kanwu-details", + "style": { + "navigationBarTitleText": "刊物详情" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "condition" : { + "current": 0, + "list": [ + { + "name": "", + "path": "pages/student-information/student-information", + "query": "" + } + ] + }, + "tabBar": { + "borderStyle": "white", + "color": "#4D4D4D", + "selectedColor": "#00CCCC;", + "backgroundColor": "#ffffff", + "list": [ + + ] + } + +} diff --git a/pages/home/index.vue b/pages/home/index.vue new file mode 100644 index 0000000..6a6aad3 --- /dev/null +++ b/pages/home/index.vue @@ -0,0 +1,312 @@ + + + + + \ No newline at end of file diff --git a/pages/my/login-kehu.vue b/pages/my/login-kehu.vue new file mode 100644 index 0000000..24c6833 --- /dev/null +++ b/pages/my/login-kehu.vue @@ -0,0 +1,194 @@ + + + + + \ No newline at end of file diff --git a/pages/my/my-kanwu-details.vue b/pages/my/my-kanwu-details.vue new file mode 100644 index 0000000..8183fd0 --- /dev/null +++ b/pages/my/my-kanwu-details.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/pages/my/my-kanwu-list.vue b/pages/my/my-kanwu-list.vue new file mode 100644 index 0000000..8bfca95 --- /dev/null +++ b/pages/my/my-kanwu-list.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/pages/my/my-order-details.vue b/pages/my/my-order-details.vue new file mode 100644 index 0000000..8183fd0 --- /dev/null +++ b/pages/my/my-order-details.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/pages/my/my-order-list.vue b/pages/my/my-order-list.vue new file mode 100644 index 0000000..351ed23 --- /dev/null +++ b/pages/my/my-order-list.vue @@ -0,0 +1,172 @@ + + + + + \ No newline at end of file diff --git a/request/index.js b/request/index.js new file mode 100644 index 0000000..c19a70f --- /dev/null +++ b/request/index.js @@ -0,0 +1,69 @@ +import Request from './request' +import apiList from './shopro' +// import store from '@/common/store/index.js' + +export default function api(url, data = {}) { + const request = new Request(); + let api = getApiObj(url); + request.interceptor.request((config, cancel) => { /* 请求之前拦截器 */ + if (api.auth) { + let userToken = uni.getStorageSync('userToken'); + if (!userToken) { + // store.commit('LOGIN_TIP', true) + // store.commit('OUT_LOGIN'); + throw('暂未登录,已阻止此次API请求~'); + } + } + if (uni.getStorageSync('userToken')) { + config.header['X-Access-Token'] = uni.getStorageSync('userToken'); + } + return config + }); + + request.interceptor.response((response) => { /* 请求之后拦截器 */ + // if (response.data.code === 0) { // 服务端返回的状态码不等于200,则reject() + // uni.showToast({ + // title: response.data.msg || '请求出错,稍后重试', + // icon: 'none', + // duration: 1000, + // mask: true + // }); + // } + + if (response.data.status === 7001) { // 服务端返回的状态码不等于200,则reject() + uni.clearStorageSync() + uni.showToast({ + title: '登录过期,请重新登录' + }) + uni.reLaunch({ + url: '/pages/login/login' + }) + // store.commit('LOGIN_TIP', true) + } + // if (response.config.custom.verification) { // 演示自定义参数的作用 + // return response.data + // } + return response + }, (response) => { // 预留可以日志上报 + return response + }) + + let option = { + url: api.url, + data, + method: api.method + } + if (api.headers!=null){ + option.header = api.headers + } + return request.request(option) +} + +function getApiObj(url) { + let apiArray = url.split("."); + let api = apiList; + apiArray.forEach(v => { + api = api[v]; + }); + return api; +} diff --git a/request/request.js b/request/request.js new file mode 100644 index 0000000..1b33ca2 --- /dev/null +++ b/request/request.js @@ -0,0 +1,280 @@ +import { + API_URL +} from '@/env' + +export default class Request { + config = { + baseUrl: API_URL, + header: { + 'content-type': 'application/x-www-form-urlencoded', + 'platform': uni.getStorageSync('platform'), + }, + method: 'GET', + dataType: 'json', + // #ifndef MP-ALIPAY || APP-PLUS + responseType: 'text', + // #endif + custom: {}, + // #ifdef MP-ALIPAY + timeout: 30000, + // #endif + // #ifdef APP-PLUS + sslVerify: true + // #endif + } + + static posUrl(url) { /* 判断url是否为绝对路径 */ + return /(http|https):\/\/([\w.]+\/?)\S*/.test(url) + } + + static addQueryString(params) { + let paramsData = '' + Object.keys(params).forEach(function(key) { + paramsData += key + '=' + encodeURIComponent(params[key]) + '&' + }) + return paramsData.substring(0, paramsData.length - 1) + } + + /** + * @property {Function} request 请求拦截器 + * @property {Function} response 响应拦截器 + * @type {{request: Request.interceptor.request, response: Request.interceptor.response}} + */ + interceptor = { + /** + * @param {Request~requestCallback} cb - 请求之前拦截,接收一个函数(config, cancel)=> {return config}。第一个参数为全局config,第二个参数为函数,调用则取消本次请求。 + */ + request: (cb) => { + if (cb) { + this.requestBeforeFun = cb + } + }, + /** + * @param {Request~responseCallback} cb 响应拦截器,对响应数据做点什么 + * @param {Request~responseErrCallback} ecb 响应拦截器,对响应错误做点什么 + */ + response: (cb, ecb) => { + if (cb && ecb) { + this.requestComFun = cb + this.requestComFail = ecb + } + } + } + + requestBeforeFun(config) { + return config + } + + requestComFun(response) { + return response + } + + requestComFail(response) { + return response + } + + /** + * 自定义验证器,如果返回true 则进入响应拦截器的响应成功函数(resolve),否则进入响应拦截器的响应错误函数(reject) + * @param { Number } statusCode - 请求响应体statusCode(只读) + * @return { Boolean } 如果为true,则 resolve, 否则 reject + */ + validateStatus(statusCode) { + return statusCode === 200 + } + + /** + * @Function + * @param {Request~setConfigCallback} f - 设置全局默认配置 + */ + setConfig(f) { + this.config = f(this.config) + } + + /** + * @Function + * @param {Object} options - 请求配置项 + * @prop {String} options.url - 请求路径 + * @prop {Object} options.data - 请求参数 + * @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型 + * @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse + * @prop {Object} [options.header = config.header] - 请求header + * @prop {Object} [options.method = config.method] - 请求方法 + * @returns {Promise} + */ + async request(options = {}) { + options.baseUrl = this.config.baseUrl + options.dataType = options.dataType || this.config.dataType + // #ifndef MP-ALIPAY || APP-PLUS + options.responseType = options.responseType || this.config.responseType + // #endif + // #ifdef MP-ALIPAY + options.timeout = options.timeout || this.config.timeout + // #endif + options.url = options.url || '' + options.data = options.data || {} + options.params = options.params || {} + options.header = options.header || this.config.header + options.method = options.method || this.config.method + options.custom = { ...this.config.custom, + ...(options.custom || {}) + } + // #ifdef APP-PLUS + options.sslVerify = options.sslVerify === undefined ? this.config.sslVerify : options.sslVerify + // #endif + // uni.showToast({ + // icon: "loading", + // image: "/static/imgs//logo/logo.gif" + // }) + return new Promise((resolve, reject) => { + let next = true + let handleRe = {} + options.complete = (response) => { + response.config = handleRe + if (this.validateStatus(response.statusCode)) { // 成功 + response = this.requestComFun(response) + resolve(response.data) + } else if (401 === response.statusCode) { + response = this.requestComFun(response) + resolve(response.data) + } else if (500 === response.statusCode) { + resolve(response.data) + } else { + response = this.requestComFail(response) + reject(response) + } + } + const cancel = (t = 'handle cancel', config = options) => { + const err = { + errMsg: t, + config: config + } + reject(err) + next = false + } + + handleRe = { ...this.requestBeforeFun(options, cancel) + } + const _config = { ...handleRe + } + if (!next) return + delete _config.custom + let mergeUrl = Request.posUrl(_config.url) ? _config.url : (_config.baseUrl + _config.url) + if (JSON.stringify(_config.params) !== '{}') { + const paramsH = Request.addQueryString(_config.params); + mergeUrl += mergeUrl.indexOf('?') === -1 ? `?${paramsH}` : `&${paramsH}` + } + _config.url = mergeUrl + uni.request(_config) + }) + } + + get(url, options = {}) { + return this.request({ + url, + method: 'GET', + ...options + }) + } + + post(url, data, options = {}) { + return this.request({ + url, + data, + method: 'POST', + ...options + }) + } + + upload(url, { + // #ifdef APP-PLUS + files, + // #endif + // #ifdef MP-ALIPAY + fileType, + // #endif + filePath, + name, + header, + formData, + custom + }) { + return new Promise((resolve, reject) => { + let next = true + let handleRe = {} + const globalHeader = { ...this.config.header + } + delete globalHeader['content-type'] + const pubConfig = { + baseUrl: this.config.baseUrl, + url, + // #ifdef APP-PLUS + files, + // #endif + // #ifdef MP-ALIPAY + fileType, + // #endif + filePath, + method: 'UPLOAD', + name, + header: header || globalHeader, + formData, + custom: { ...this.config.custom, + ...(custom || {}) + }, + complete: (response) => { + response.config = handleRe + if (response.statusCode === 200) { // 成功 + response = this.requestComFun(response) + resolve(response) + } else { + response = this.requestComFail(response) + reject(response) + } + } + } + const cancel = (t = 'handle cancel', config = pubConfig) => { + const err = { + errMsg: t, + config: config + } + reject(err) + next = false + } + + handleRe = { ...this.requestBeforeFun(pubConfig, cancel) + } + const _config = { ...handleRe + } + if (!next) return + delete _config.custom + _config.url = Request.posUrl(_config.url) ? _config.url : (_config.baseUrl + _config.url) + uni.uploadFile(_config) + }) + } +} + +/** + * setConfig回调 + * @return {Object} - 返回操作后的config + * @callback Request~setConfigCallback + * @param {Object} config - 全局默认config + */ +/** + * 请求拦截器回调 + * @return {Object} - 返回操作后的config + * @callback Request~requestCallback + * @param {Object} config - 全局config + * @param {Function} [cancel] - 取消请求钩子,调用会取消本次请求 + */ +/** + * 响应拦截器回调 + * @return {Object} - 返回操作后的response + * @callback Request~responseCallback + * @param {Object} response - 请求结果 response + */ +/** + * 响应错误拦截器回调 + * @return {Object} - 返回操作后的response + * @callback Request~responseErrCallback + * @param {Object} response - 请求结果 response + */ diff --git a/request/shopro.js b/request/shopro.js new file mode 100644 index 0000000..00f82cd --- /dev/null +++ b/request/shopro.js @@ -0,0 +1,12 @@ +/** + * 接口列表文件 + */ +export default { + myInfo: {url:'/han-hai-dev/sm/index/getUserInfo',auth:false,method:'GET'}, + //用户-微信公众号授权登录 + wxLogin: {url:'/han-hai-dev/sm/index/wxLogin',auth:false,method:'POST'}, + //微信支付 + create: {url:'/job-dev/job/pay/create',auth:false,method:'GET'}, + //创建分享 + creteFenxian: {url:'/job-dev/binYuan/pay/creteFenXian',auth:false,method:'POST'}, +}; diff --git a/router/router.js b/router/router.js new file mode 100644 index 0000000..91a16e7 --- /dev/null +++ b/router/router.js @@ -0,0 +1,37 @@ +import Vue from 'vue' +import Router from 'uni-simple-router' +import store from '../store' + +Vue.use(Router) +//初始化 +const router = new Router({ + APP: { + animation: { + animationType: 'pop-in', + animationDuration: 300 + } + }, + encodeURI: false, + routes: ROUTES //路由表 +}); + +//全局路由前置守卫 +// router.beforeEach((to, from, next) => { +// // 有两个个判断条件,一个是token,还有一个路由元信息 +// let userInfo = Boolean(uni.getStorageSync('userInfo')); +// let token = uni.getStorageSync('userToken'); +// // 权限控制 +// if(!token){ +// uni.reLaunch({ +// url: '/pages/login/login' +// }); +// } +// next() +// // if (to.meta && to.meta.auth && !userInfo) { +// // store.commit('LOGIN_TIP', true) +// // } else { +// // } +// }) +// 全局路由后置守卫 +router.afterEach((to, from) => {}) +export default router; diff --git a/static/1.jpeg b/static/1.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/static/2.png b/static/2.png new file mode 100644 index 0000000..72960ab Binary files /dev/null and b/static/2.png differ diff --git a/static/3.png b/static/3.png new file mode 100644 index 0000000..724d50d Binary files /dev/null and b/static/3.png differ diff --git a/static/4.png b/static/4.png new file mode 100644 index 0000000..70b810a Binary files /dev/null and b/static/4.png differ diff --git a/static/5.jpg b/static/5.jpg new file mode 100644 index 0000000..c43a7d5 Binary files /dev/null and b/static/5.jpg differ diff --git a/static/img/add-icon.png b/static/img/add-icon.png new file mode 100644 index 0000000..af17c80 Binary files /dev/null and b/static/img/add-icon.png differ diff --git a/static/img/arrow-right.png b/static/img/arrow-right.png new file mode 100644 index 0000000..e51b183 Binary files /dev/null and b/static/img/arrow-right.png differ diff --git a/static/img/choose-act.png b/static/img/choose-act.png new file mode 100644 index 0000000..087325d Binary files /dev/null and b/static/img/choose-act.png differ diff --git a/static/img/info/code.png b/static/img/info/code.png new file mode 100644 index 0000000..12c6043 Binary files /dev/null and b/static/img/info/code.png differ diff --git a/static/img/info/fans.png b/static/img/info/fans.png new file mode 100644 index 0000000..50970ea Binary files /dev/null and b/static/img/info/fans.png differ diff --git a/static/img/info/kefu.png b/static/img/info/kefu.png new file mode 100644 index 0000000..1fd0f2d Binary files /dev/null and b/static/img/info/kefu.png differ diff --git a/static/img/info/money.png b/static/img/info/money.png new file mode 100644 index 0000000..3400dbb Binary files /dev/null and b/static/img/info/money.png differ diff --git a/static/img/info/smrz.png b/static/img/info/smrz.png new file mode 100644 index 0000000..38f6df2 Binary files /dev/null and b/static/img/info/smrz.png differ diff --git a/static/img/jiantou-icon.png b/static/img/jiantou-icon.png new file mode 100644 index 0000000..0077c01 Binary files /dev/null and b/static/img/jiantou-icon.png differ diff --git a/static/img/logon-icon.png b/static/img/logon-icon.png new file mode 100644 index 0000000..a4916b0 Binary files /dev/null and b/static/img/logon-icon.png differ diff --git a/static/img/mima-icon.png b/static/img/mima-icon.png new file mode 100644 index 0000000..14f3217 Binary files /dev/null and b/static/img/mima-icon.png differ diff --git a/static/img/my/wechat-icon.png b/static/img/my/wechat-icon.png new file mode 100644 index 0000000..743bf71 Binary files /dev/null and b/static/img/my/wechat-icon.png differ diff --git a/static/img/pay-success.png b/static/img/pay-success.png new file mode 100644 index 0000000..c5735ad Binary files /dev/null and b/static/img/pay-success.png differ diff --git a/static/img/phone-icon.png b/static/img/phone-icon.png new file mode 100644 index 0000000..8c1ccf8 Binary files /dev/null and b/static/img/phone-icon.png differ diff --git a/static/img/search-icon.png b/static/img/search-icon.png new file mode 100644 index 0000000..363594e Binary files /dev/null and b/static/img/search-icon.png differ diff --git a/static/img/tabbar/add.png b/static/img/tabbar/add.png new file mode 100644 index 0000000..e8c3e97 Binary files /dev/null and b/static/img/tabbar/add.png differ diff --git a/static/img/tabbar/address.png b/static/img/tabbar/address.png new file mode 100644 index 0000000..473d49f Binary files /dev/null and b/static/img/tabbar/address.png differ diff --git a/static/img/tabbar/fabu-xuan.png b/static/img/tabbar/fabu-xuan.png new file mode 100644 index 0000000..14118e7 Binary files /dev/null and b/static/img/tabbar/fabu-xuan.png differ diff --git a/static/img/tabbar/fabu.png b/static/img/tabbar/fabu.png new file mode 100644 index 0000000..0b6c3cc Binary files /dev/null and b/static/img/tabbar/fabu.png differ diff --git a/static/img/tabbar/icon-home-active.png b/static/img/tabbar/icon-home-active.png new file mode 100644 index 0000000..63c7f52 Binary files /dev/null and b/static/img/tabbar/icon-home-active.png differ diff --git a/static/img/tabbar/icon-home.png b/static/img/tabbar/icon-home.png new file mode 100644 index 0000000..0e4c929 Binary files /dev/null and b/static/img/tabbar/icon-home.png differ diff --git a/static/img/tabbar/icon-my-active.png b/static/img/tabbar/icon-my-active.png new file mode 100644 index 0000000..02a79dd Binary files /dev/null and b/static/img/tabbar/icon-my-active.png differ diff --git a/static/img/tabbar/icon-my.png b/static/img/tabbar/icon-my.png new file mode 100644 index 0000000..5502301 Binary files /dev/null and b/static/img/tabbar/icon-my.png differ diff --git a/static/img/tabbar/icon-new-active.png b/static/img/tabbar/icon-new-active.png new file mode 100644 index 0000000..20fb2a8 Binary files /dev/null and b/static/img/tabbar/icon-new-active.png differ diff --git a/static/img/tabbar/icon-new.png b/static/img/tabbar/icon-new.png new file mode 100644 index 0000000..ad11268 Binary files /dev/null and b/static/img/tabbar/icon-new.png differ diff --git a/static/img/tabbar/order.png b/static/img/tabbar/order.png new file mode 100644 index 0000000..2bf03b1 Binary files /dev/null and b/static/img/tabbar/order.png differ diff --git a/static/img/tabbar/sfz.png b/static/img/tabbar/sfz.png new file mode 100644 index 0000000..5b1c86b Binary files /dev/null and b/static/img/tabbar/sfz.png differ diff --git a/static/img/tabbar/xinxi.png b/static/img/tabbar/xinxi.png new file mode 100644 index 0000000..49ca2a3 Binary files /dev/null and b/static/img/tabbar/xinxi.png differ diff --git a/static/img/tabbar/zx.png b/static/img/tabbar/zx.png new file mode 100644 index 0000000..fd59551 Binary files /dev/null and b/static/img/tabbar/zx.png differ diff --git a/static/img/tabbar/zxq.png b/static/img/tabbar/zxq.png new file mode 100644 index 0000000..dd1ac3a Binary files /dev/null and b/static/img/tabbar/zxq.png differ diff --git a/static/img/time-icon.png b/static/img/time-icon.png new file mode 100644 index 0000000..8e364c3 Binary files /dev/null and b/static/img/time-icon.png differ diff --git a/static/img/title-icon.png b/static/img/title-icon.png new file mode 100644 index 0000000..878e198 Binary files /dev/null and b/static/img/title-icon.png differ diff --git a/static/img/wechat-icon.png b/static/img/wechat-icon.png new file mode 100644 index 0000000..743bf71 Binary files /dev/null and b/static/img/wechat-icon.png differ diff --git a/static/kefu.jpg b/static/kefu.jpg new file mode 100644 index 0000000..43bdf0e Binary files /dev/null and b/static/kefu.jpg differ diff --git a/static/kefu.png b/static/kefu.png new file mode 100644 index 0000000..eadaf85 Binary files /dev/null and b/static/kefu.png differ diff --git a/static/qrcode.jpg b/static/qrcode.jpg new file mode 100644 index 0000000..d9fc34a Binary files /dev/null and b/static/qrcode.jpg differ diff --git a/store/actions.js b/store/actions.js new file mode 100644 index 0000000..56004c9 --- /dev/null +++ b/store/actions.js @@ -0,0 +1 @@ +export default {} \ No newline at end of file diff --git a/store/getters.js b/store/getters.js new file mode 100644 index 0000000..56004c9 --- /dev/null +++ b/store/getters.js @@ -0,0 +1 @@ +export default {} \ No newline at end of file diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..80574a7 --- /dev/null +++ b/store/index.js @@ -0,0 +1,16 @@ +import Vue from "vue" +import Vuex from "vuex" +import state from './state.js' +import actions from './actions.js' +import getters from './getters.js' +import mutations from './mutations.js' +Vue.use(Vuex) + +export default new Vuex.Store({ + state, + actions, + getters, + mutations, + modules:{ + } +}) diff --git a/store/mutations.js b/store/mutations.js new file mode 100644 index 0000000..e3ed2a2 --- /dev/null +++ b/store/mutations.js @@ -0,0 +1,18 @@ +export default { + 'set_userToken' (state, userToken) {//存储 userToken + state.userToken = userToken + uni.setStorageSync('userToken', userToken) + }, + 'set_userInfo' (state, userInfo) {//存储 userToken + state.userInfo = JSON.stringify(userInfo) + uni.setStorageSync('userInfo', JSON.stringify(userInfo)) + }, + 'set_geographyStatus' (state, flag) { + state.geographyStatus = flag + uni.setStorageSync('geographyStatus', flag) + }, + 'set_ivcode' (state, ivcode) { + state.ivcode = ivcode + uni.setStorageSync('ivcode', ivcode) + } +} \ No newline at end of file diff --git a/store/state.js b/store/state.js new file mode 100644 index 0000000..f5e18a9 --- /dev/null +++ b/store/state.js @@ -0,0 +1,6 @@ +export default { + userToken: uni.getStorageSync('userToken') || '', + userInfo: uni.getStorageSync('userInfo') || '', + ivcode: uni.getStorageSync('ivcode') || '', + geographyStatus: uni.getStorageSync('geographyStatus') || '', +} \ No newline at end of file diff --git a/styles/common.css b/styles/common.css new file mode 100644 index 0000000..3c46766 --- /dev/null +++ b/styles/common.css @@ -0,0 +1,453 @@ +/* 1. 页面背景色 */ +.page{ + background-color: #EDEDED; + /* #ifndef APP-PLUS-NVUE */ + min-height: 100%; + height: auto; + /* #endif */ + /* #ifdef APP-PLUS-NVUE */ + flex: 1; + /* #endif */ +} +/* 2. 主背景色(原谅绿) */ +.main-bg-color{ + background-color: #F6F7F8 !important; +} +/* 3. 主文字色(原谅绿) */ +.main-text-color{ + color: #333333; +} +/* 4. 主边框颜色(原谅绿) */ +.border-main{ + border-color: #08C060 !important; +} + + +/* 防止图片闪一下 */ +image{will-change: transform;width: 100%; } + +/* scroll-view 横向 */ +.scroll-row{ width: 100%;white-space: nowrap; } +.scroll-row-item{ display: inline-block; } +/* 图标 */ + +.iconfont{ + font-family:iconfont; +} + + +.view,.text{ + font-size:24rpx; + line-height:1.8; + color:#0E151D; +} + +/* 宽度 */ +.w-100{ width: 750rpx; } +.h-100 {height: 100%;} +.min-h-100 {min-height: 100vh;} +/* flex 布局 */ +.flex{ + /* #ifndef APP-PLUS-NVUE */ + display:flex; + /* #endif */ + flex-direction:row; +} +.flex-row{ flex-direction:row!important; } +.flex-column{ flex-direction:column!important; } +.flex-row-reverse{ flex-direction:row-reverse!important; } +.flex-column-reverse{ flex-direction:column-reverse!important; } +.flex-wrap{ flex-wrap:wrap;} +.flex-nowrap{ flex-wrap:nowrap;} +.justify-start{justify-content:flex-start;} +.justify-end{justify-content:flex-end;} +.justify-between{justify-content:space-between;} +.justify-center{justify-content:center;} +.align-center{ align-items: center; } +.align-stretch{ align-items: stretch; } +.align-start{ align-items: flex-start; } +.align-end{ align-items: flex-end; } +/* #ifndef APP-PLUS-NVUE */ +.content-start {align-content: flex-start;} +.content-end {align-content: flex-end;} +.content-center {align-content: center;} +.content-between {align-content: space-between;} +.content-around {align-content: space-around;} +.content-stretch {align-content: stretch;} +/* #endif */ +.flex-1{ flex: 1 !important; } +.flex-2{ flex: 2 !important; } +.flex-3{ flex: 3 !important; } +.flex-4{ flex: 4 !important; } +.flex-5{ flex: 5 !important; } +.flex-6{ flex: 6 !important; } +.flex-7{ flex: 7 !important; } +.flex-8{ flex: 8 !important; } +.flex-9{ flex: 9 !important; } +/* #ifndef APP-PLUS-NVUE */ +.flex-shrink{ flex-shrink: 0; } +/* #endif */ + +.container { + padding-right: 20rpx; + padding-left: 20rpx; +} +/* -- 内外边距 -- */ +.m-0 { margin: 0; } +/* #ifndef APP-PLUS-NVUE */ +.m-auto{ margin: auto; } +/* #endif */ +.m-1 { margin: 10rpx; } +.m-2 { margin: 20rpx; } +.m-3 { margin: 30rpx; } +.m-4 { margin: 40rpx; } +.m-5 { margin: 50rpx; } +.mt-0 { margin-top: 0; } +/* #ifndef APP-PLUS-NVUE */ +.mt-auto { margin-top: auto; } +/* #endif */ +.mt-1 { margin-top: 10rpx; } +.mt-2 { margin-top: 20rpx; } +.mt-3 { margin-top: 30rpx; } +.mt-4 { margin-top: 40rpx; } +.mt-5 { margin-top: 50rpx; } +.mb-0 { margin-bottom: 0; } +/* #ifndef APP-PLUS-NVUE */ +.mb-auto { margin-bottom: auto; } +/* #endif */ +.mb-1 { margin-bottom: 10rpx; } +.mb-2 { margin-bottom: 20rpx; } +.mb-3 { margin-bottom: 30rpx; } +.mb-4 { margin-bottom: 40rpx; } +.mb-5 { margin-bottom: 50rpx; } +.ml-0 { margin-left: 0; } +/* #ifndef APP-PLUS-NVUE */ +.ml-auto { margin-left: auto; } +/* #endif */ +.ml-1 { margin-left: 10rpx; } +.ml-2 { margin-left: 20rpx; } +.ml-3 { margin-left: 30rpx; } +.ml-4 { margin-left: 40rpx; } +.ml-5 { margin-left: 50rpx; } +.mr-0 { margin-right: 0; } +/* #ifndef APP-PLUS-NVUE */ +.mr-auto { margin-right: auto; } +/* #endif */ +.mr-1 { margin-right: 10rpx; } +.mr-2 { margin-right: 20rpx; } +.mr-3 { margin-right: 30rpx; } +.mr-4 { margin-right: 40rpx; } +.mr-5 { margin-right: 50rpx; } +.my-0 { margin-top: 0; margin-bottom: 0; } +/* #ifndef APP-PLUS-NVUE */ +.my-auto { margin-top: auto; margin-bottom: auto; } +/* #endif */ +.my-1 { margin-top: 10rpx; margin-bottom: 10rpx; } +.my-2 { margin-top: 20rpx; margin-bottom: 20rpx; } +.my-3 { margin-top: 30rpx; margin-bottom: 30rpx; } +.my-4 { margin-top: 40rpx; margin-bottom: 40rpx; } +.my-5 { margin-top: 50rpx; margin-bottom: 50rpx; } +.mx-0 { margin-left: 0; margin-right: 0; } +/* #ifndef APP-PLUS-NVUE */ +.mx-auto { margin-left: auto; margin-right: auto; } +/* #endif */ +.mx-1 { margin-left: 10rpx; margin-right: 10rpx;} +.mx-2 { margin-left: 20rpx; margin-right: 20rpx;} +.mx-3 { margin-left: 30rpx; margin-right: 30rpx;} +.mx-4 { margin-left: 40rpx; margin-right: 40rpx;} +.mx-5 { margin-left: 50rpx; margin-right: 50rpx;} + + +.p-0 { padding: 0; } +.p { padding: 5rpx; } +.p-1 { padding: 10rpx; } +.p-2 { padding: 20rpx; } +.p-3 { padding: 30rpx; } +.p-4 { padding: 40rpx; } +.p-5 { padding: 50rpx; } +.pt-0 { padding-top: 0; } +.pt { padding-top: 5rpx; } +.pt-1 { padding-top: 10rpx; } +.pt-2 { padding-top: 20rpx; } +.pt-3 { padding-top: 30rpx; } +.pt-4 { padding-top: 40rpx; } +.pt-5 { padding-top: 50rpx; } +.pb-0 { padding-bottom: 0; } +.pb-1 { padding-bottom: 10rpx; } +.pb { padding-bottom: 5rpx; } +.pb-2 { padding-bottom: 20rpx; } +.pb-3 { padding-bottom: 30rpx; } +.pb-4 { padding-bottom: 40rpx; } +.pb-5 { padding-bottom: 50rpx; } +.pl-0 { padding-left: 0; } +.pl { padding-left: 5rpx; } +.pl-1 { padding-left: 10rpx; } +.pl-2 { padding-left: 20rpx; } +.pl-3 { padding-left: 30rpx; } +.pl-4 { padding-left: 40rpx; } +.pl-5 { padding-left: 50rpx; } +.pr-0 { padding-right: 0; } +.pr { padding-right: 5rpx; } +.pr-1 { padding-right: 10rpx; } +.pr-2 { padding-right: 20rpx; } +.pr-3 { padding-right: 30rpx; } +.pr-4 { padding-right: 40rpx; } +.pr-5 { padding-right: 50rpx; } +.py-0 { padding-top: 0; padding-bottom: 0; } +.py { padding-top: 5rpx; padding-bottom: 5rpx; } +.py-1 { padding-top: 10rpx; padding-bottom: 10rpx; } +.py-2 { padding-top: 20rpx; padding-bottom: 20rpx; } +.py-3 { padding-top: 30rpx; padding-bottom: 30rpx; } +.py-4 { padding-top: 40rpx; padding-bottom: 40rpx; } +.py-5 { padding-top: 50rpx; padding-bottom: 50rpx; } +.px-0 { padding-left: 0; padding-right: 0; } +.px-1 { padding-left: 10rpx; padding-right: 10rpx;} +.px { padding-left: 5rpx; padding-right: 5rpx;} +.px-2 { padding-left: 20rpx; padding-right: 20rpx;} +.px-3 { padding-left: 30rpx; padding-right: 30rpx;} +.px-4 { padding-left: 40rpx; padding-right: 40rpx;} +.px-5 { padding-left: 50rpx; padding-right: 50rpx;} + +/* 文字大小 */ +.font-lg { font-size: 40rpx;} +.font-38 { font-size: 38rpx;} +.font-36 { font-size: 36rpx;} +.font-md { font-size: 35rpx;} +.font-34 { font-size: 34rpx;} +.font-32 {font-size: 32rpx} +.font { font-size: 30upx;} +.font-main {font-size: 28rpx;} +.font-26 {font-size: 26rpx} +.font-sm { font-size: 25upx;} +.font-24 {font-size: 24rpx} +.font-22 {font-size: 22rpx} +.font-small { font-size: 20upx;} +.font-10 {font-size: 24rpx; transform:scale(0.81);} + +.h1{font-size:80upx; line-height:1.8;} +.h2{font-size:60upx; line-height:1.8;} +.h3{font-size:45upx; line-height:1.8;} +.h4{font-size:32upx; line-height:1.8;} +.h5{font-size:30upx; line-height:1.8;} +.h6{font-size:28upx; line-height:1.8;} +/* 文字缩进 */ +/* #ifndef APP-PLUS-NVUE */ +.text-indent{text-indent:2;} +/* #endif */ +/* 文字划线 */ +.text-through{text-decoration:line-through;} +/* 文字对齐 */ +.text-left { text-align: left;} +.text-right { text-align: right;} +.text-center { text-align: center;} +/* 文字换行溢出处理 */ +.text-ellipsis { + /* #ifndef APP-PLUS-NVUE */ + overflow: hidden;text-overflow: ellipsis;white-space: nowrap; + /* #endif */ + /* #ifdef APP-PLUS-NVUE */ + lines: 1; + /* #endif */ +} +/* 文字粗细和斜体 */ +.font-weight-light {font-weight: 300;} /*细*/ +.font-weight-lighter {font-weight: 100;}/*更细*/ +.font-weight-normal { font-weight: 500;} /*正常*/ +.font-weight-bold { font-weight: 700;} /*粗*/ +.font-weight-bolder { font-weight: bold;} /*更粗*/ +.font-italic { font-style: italic;} /*斜体*/ +/* 文字颜色 */ +.text-red {color: #FF0000} +.text-white {color: #ffffff;} +.text-primary {color: #007bff;} +.text-hover-primary { color: #0056b3;} +.text-secondary {color: #6c757d;} +.text-hover-secondary { color: #494f54;} +.text-success {color: #28a745;} +.text-hover-success{color: #19692c;} +.text-info { color: #17a2b8;} +.text-hover-info {color: #0f6674;} +.text-warning {color: #ffc107;} +.text-hover-warning { color: #ba8b00;} +.text-danger { color: #dc3545;} +.text-hover-danger { color: #a71d2a;} +.text-light { color: #f8f9fa;} +.text-hover-light { color: #cbd3da;} +.text-dark { color: #343a40;} +.text-hover-dark{ color: #121416;} +.text-body { color: #212529;} +.text-muted { color: #999999;} +.text-EE8414 {color: #EE8414;} +.text-FE6347 {color:#FE6347} +.text-blue {color: #0175FF} +.text-black {color: #000} +.text-light-muted { color: #A9A5A0;} +.text-light-black { color: rgba(0, 0, 0, 0.5);} +.text-light-white { color: rgba(255, 255, 255, 0.5);} + +/* 背景颜色 */ +.bg-primary { background-color: #007bff;} +.bg-hover-primary:hover{ background-color: #0062cc !important;} +.bg-secondary { background-color: #6c757d;} +.bg-hover-secondary:hover{ background-color: #545b62 !important;} +.bg-success { background-color: #28a745;} +.bg-hover-success { background-color: #1e7e34 !important;} +.bg-info { background-color: #17a2b8;} +.bg-hover-info { background-color: #117a8b !important;} +.bg-warning { background-color: #ffc107;} + +.bg-FFE9E5 {background-color:#FFE9E5 !important;} +.bg-hover-warning { background-color: #d39e00 !important;} + +.bg-hover-f1f1f1 {background-color: #f1f1f1 !important;} +.bg-hover-dc563e {background-color: #ef5d43 !important;} +.bg-danger { background-color: #dc3545;} +.bg-FE6347 {background-color: #FE6347 !important;} +.bg-hover-danger{ background-color: #bd2130 !important;} +.bg-light { background-color: #f8f9fa;} +.bg-hover-light{ background-color: #dae0e5 !important;} +.bg-dark { background-color: #343a40;} +.bg-hover-dark { background-color: #1d2124 !important;} +.bg-white { background-color: #ffffff;} +.bg-hover-main {background-color: #F6F7F8 !important;} +.bg-transparent { background-color: transparent;} +/* 边框 */ +.border { border-width: 1rpx;border-style: solid;border-color: #dee2e6;} +.border-top { + border-top-width: 1rpx; + border-top-style: solid; + border-top-color: #dee2e6; +} +.border-right { + border-right-width: 1rpx; + border-right-style: solid; + border-right-color: #dee2e6; +} +.border-bottom { + border-bottom-width: 1rpx; + border-bottom-style: solid; + border-bottom-color: #dee2e6; +} +.border-bottom-ee { + border-bottom-width: 1rpx; + border-bottom-style: solid; + border-bottom-color: #EEEEEE; +} +.border-bottom-dashed { + border-bottom-width: 2rpx; + border-bottom-style: dashed; + border-bottom-color: #F2F2F2; +} +.border-top-dashed { + border-top-width: 2rpx; + border-top-style: dashed; + border-top-color: #F2F2F2; +} +.border-left { + border-left-width: 1rpx; + border-left-style: solid; + border-left-color: #dee2e6; +} +.border-0 { border-width: 0!important;} +.border-top-0 { border-top-width: 0!important;} +.border-right-0 {border-right-width: 0!important;} +.border-bottom-0 {border-bottom-width: 0!important;} +.border-left-0 {border-left-width: 0!important;} +.border-primary { border-color: #007bff;} +.border-secondary {border-color: #6c757d;} +.border-light-secondary {border-color: #E9E8E5;} +.border-success {border-color: #28a745;} +.border-info {border-color: #17a2b8;} +.border-warning {border-color: #ffc107;} +.border-danger {border-color: #dc3545;} +.border-light {border-color: #f8f9fa;} +.border-dark {border-color: #343a40;} +.border-white {border-color: #FFFFFF;} +/* 圆角 */ +.rounded { border-radius: 8rpx;} +.rounded-top { + border-top-left-radius: 8rpx; + border-top-right-radius: 8rpx; +} +.rounded-right { + border-top-right-radius: 8rpx; + border-bottom-right-radius: 8rpx; +} +.rounded-bottom { + border-bottom-right-radius: 8rpx; + border-bottom-left-radius: 8rpx; +} +.rounded-left { + border-top-left-radius: 8rpx; + border-bottom-left-radius: 8rpx; + } +.rounded-circle { border-radius: 100rpx;} +.rounded-0 { border-radius: 0;} +/* 显示 */ +/* #ifndef APP-PLUS-NVUE */ +.d-none{ display: none; } +.d-inline-block{ display: inline-block; } +.d-block{ display: block; } +/* #endif */ +/* 内容溢出 */ +.overflow-hidden { overflow: hidden;} +/* 定位 */ +.position-relative { position: relative;} +.position-absolute { position: absolute;} +.position-fixed { position: fixed;} +/* 定位 - 固定顶部 */ +.fixed-top { + position: fixed !important; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} +/* 定位 - 固定底部 */ +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} +.top-0 { top: 0; } +.left-0 { left: 0; } +.right-0 { right: 0; } +.bottom-0 { bottom: 0; } + +/* 阴影 */ +/* #ifndef APP-PLUS-NVUE */ +.shadow { box-shadow: 0 2upx 12upx rgba(0, 0, 0, 0.15);} +.shadow-lg { box-shadow: 0upx 40upx 100upx 0upx rgba(0, 0, 0, 0.175);} +.shadow-none { box-shadow: none !important;} +.shadow-sm { + box-shadow: 0 2upx 4upx rgba(114, 130, 138, 0.2)!important; +} +.shadow { + box-shadow: 0 8upx 16upx rgba(114, 130, 138, 0.2)!important; +} +.shadow-md { + box-shadow: 0 12upx 20upx rgba(114, 130, 138, 0.2)!important; +} +.shadow-lg { + box-shadow: 0 16upx 48upx rgba(114, 130, 138, 0.2)!important; +} +.shadow-qm { + box-shadow: 10rpx 10rpx 10rpx rgba(0, 0, 0, 0.02), 10rpx -10rpx 10rpx rgba(0, 0, 0, 0.02), -10rpx 10rpx 10rpx rgba(0, 0, 0, 0.02), -10rpx -10rpx 10rpx rgba(0, 0, 0, 0.02) !important; +} + +/* #endif */ + +.user-msg-r{ + width: 150rpx; + height: 60rpx; + background: #F0F0F7; + border-radius: 30rpx; + text-align: center; + line-height: 60rpx; + font-weight: bold; + font-size: 30rpx; + color: #0175FF; + margin-top: 13rpx; +} diff --git a/styles/init.css b/styles/init.css new file mode 100644 index 0000000..49f906c --- /dev/null +++ b/styles/init.css @@ -0,0 +1,44 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + font-family: PingFang SC; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..031f113 --- /dev/null +++ b/uni.scss @@ -0,0 +1,75 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:24rpx; +$uni-font-size-base:28rpx; +$uni-font-size-lg:32rpx; + +/* 图片尺寸 */ +$uni-img-size-sm:40rpx; +$uni-img-size-base:52rpx; +$uni-img-size-lg:80rpx; + +/* Border Radius */ +$uni-border-radius-sm: 4rpx; +$uni-border-radius-base: 6rpx; +$uni-border-radius-lg: 12rpx; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 20rpx; +$uni-spacing-row-lg: 30rpx; + +/* 垂直间距 */ +$uni-spacing-col-sm: 8rpx; +$uni-spacing-col-base: 16rpx; +$uni-spacing-col-lg: 24rpx; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ + +$uni-theme-color: #0175FF; + +$uni-text-color: #FF0000; +@import 'uview-ui/theme.scss';