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 @@
+
+
+ 【{{item.name}}】
+
+ 【电话】{{item.phone}}
+
+
+ 【地址】{{item.region}}
+
+
+ 【详细地址】{{item.detailAddress}}
+
+
+
+
+
+
+
\ 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 @@
+
+
+ 【{{item.title}}】
+
+ 【商品】{{item.shopName}}
+
+
+ 【地址】{{item.addressText}}
+
+
+ 【价格】{{item.price}}
+
+
+ 【数量】{{item.num}}
+
+
+ 【类型】微信订单
+
+
+ 【类型】积分订单
+
+
+
+ 【下单时间】{{item.createTime}}
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+ {{userInfo?userInfo.nickName: '点击登录'}}
+
+
+
+
+
+
+ 刊物介绍
+
+
+ 订阅申请
+
+
+
+
+
+ 姓名:
+
+
+
+ 电话:
+
+
+
+ 地区:
+
+
+
+
+
+
+
+ 学历:
+
+
+
+
+
+
+
+ 学校:
+
+
+
+ 年级:
+
+
+
+ 班级:
+
+
+
+
+ 订阅项目
+ ¥43.88 语文
+ ¥43.88 数学
+ ¥43.88 英语
+ ¥43.88 化学
+ ¥43.88 物理
+ ¥43.88 历史
+
+
+
+
+ 提交申请
+
+
+
+
+
+
+
+
+
+
+
+
\ 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';