From e73f995d539a99c02c9912853c5c39bb7384559a Mon Sep 17 00:00:00 2001 From: Vinjor Date: Mon, 31 Mar 2025 14:31:41 +0800 Subject: [PATCH] 1 --- api/business/notice.js | 27 + components/hj-placard/shareImages.vue | 196 +++ components/qr_code/qrcode.js | 1362 +++++++++++++++++ components/qr_code/qrcode.vue | 27 + components/tabbar/tabBar.vue | 9 +- package.json | 1 + pages/components/notice-item.vue | 3 +- pages/index.vue | 25 +- pages/mine/index.vue | 582 ++++--- static/bg.jpg | Bin 0 -> 6946 bytes static/detail/approval.png | Bin 0 -> 4422 bytes static/detail/card.png | Bin 0 -> 2004 bytes static/detail/home.png | Bin 0 -> 1883 bytes static/detail/share.png | Bin 0 -> 2362 bytes .../tabbar/{my_motice_.png => my_notice_.png} | Bin store/modules/user.js | 2 + .../uni-popup-dialog/uni-popup-dialog.vue | 60 +- .../uni-popup-share/uni-popup-share.vue | 62 +- utils/auth.js | 30 +- utils/common.js | 42 +- utils/constant.js | 2 + 21 files changed, 2175 insertions(+), 255 deletions(-) create mode 100644 components/hj-placard/shareImages.vue create mode 100644 components/qr_code/qrcode.js create mode 100644 components/qr_code/qrcode.vue create mode 100644 static/bg.jpg create mode 100644 static/detail/approval.png create mode 100644 static/detail/card.png create mode 100644 static/detail/home.png create mode 100644 static/detail/share.png rename static/images/tabbar/{my_motice_.png => my_notice_.png} (100%) diff --git a/api/business/notice.js b/api/business/notice.js index b39a993..5c33a36 100644 --- a/api/business/notice.js +++ b/api/business/notice.js @@ -8,4 +8,31 @@ export function getNoticeList(params) { method: 'get', params: params }) +} + +// 查通告详情 +export function getNoticeDetail(params) { + return request({ + url: '/busi/notice/appGetDetail', + method: 'get', + params: params + }) +} + +// 浏览通告 +export function addView(params) { + return request({ + url: '/busi/view/addView', + method: 'post', + params: params + }) +} + +// 关闭通告 +export function closeNotice(params) { + return request({ + url: '/busi/notice/publishTakeDown', + method: 'post', + params: params + }) } \ No newline at end of file diff --git a/components/hj-placard/shareImages.vue b/components/hj-placard/shareImages.vue new file mode 100644 index 0000000..56ad082 --- /dev/null +++ b/components/hj-placard/shareImages.vue @@ -0,0 +1,196 @@ + + + \ No newline at end of file diff --git a/components/qr_code/qrcode.js b/components/qr_code/qrcode.js new file mode 100644 index 0000000..44e5715 --- /dev/null +++ b/components/qr_code/qrcode.js @@ -0,0 +1,1362 @@ +//--------------------------------------------------------------------- +// github https://github.com/Sansnn/uQRCode +// version 2.0.2 +//--------------------------------------------------------------------- + +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, + enableDelay: false // 启用延迟绘制 + }, + + getModules: function(options) { + options = Object.assign(this.defaults, options); + var qrcode = new QRCode(options.typeNumber, options.errorCorrectLevel); + qrcode.addData(utf16To8(options.text)); + qrcode.make(); + return qrcode.modules; + }, + + make: function(options, componentInstance) { + return new Promise((reslove, reject) => { + options = Object.assign(this.defaults, options); + if (!options.canvasId) { + throw new Error('uQRCode: Please set canvasId!'); + } + var modules = this.getModules(options); + var tileW = (options.size - options.margin * 2) / modules.length; + var tileH = tileW; + var delay = 0; + var ctx = uni.createCanvasContext(options.canvasId, componentInstance); + ctx.setFillStyle(options.backgroundColor); + ctx.fillRect(0, 0, options.size, options.size); + for (var row = 0; row < modules.length; row++) { + for (var col = 0; col < modules.length; col++) { + delay = options.enableDelay ? row * modules.length + col + 1 : 0; + setTimeout(function(row, col) { + // 计算每一个小块的位置 + 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); + var style = modules[row][col] ? options.foregroundColor : + options.backgroundColor; + ctx.setFillStyle(style); + ctx.fillRect(x, y, w, h); + }, delay, row, col); + } + } + + // 耗时 + var time = options.enableDelay ? delay + options.size * 2 + options.margin * 2 + options.text.length : 0; + setTimeout(function() { + ctx.draw(false, function() { + uni.canvasToTempFilePath({ + canvasId: options.canvasId, + fileType: options.fileType, + width: options.size, + height: options.size, + destWidth: options.size, + destHeight: options.size, + success: function(res) { + reslove(Object.assign(res, { + time + })); + }, + fail: function(err) { + reject(err); + } + }, componentInstance); + }); + }, time); + }); + } + } +})(); + +export default uQRCode; diff --git a/components/qr_code/qrcode.vue b/components/qr_code/qrcode.vue new file mode 100644 index 0000000..621582c --- /dev/null +++ b/components/qr_code/qrcode.vue @@ -0,0 +1,27 @@ + + + \ No newline at end of file diff --git a/components/tabbar/tabBar.vue b/components/tabbar/tabBar.vue index 8b25043..10a851f 100644 --- a/components/tabbar/tabBar.vue +++ b/components/tabbar/tabBar.vue @@ -16,9 +16,14 @@ + .fans-box { + font-size: 18rpx; + display: flex; + align-items: center; + justify-content: center; + background-color: #FEF4EF; + padding: 5rpx 10rpx; + color: #FE9860; + border-radius: 20rpx; + + image { + height: 20rpx; + width: 20rpx; + } + } + + + .fans-num {} + } + + .edit-box { + color: #929292; + text-align: right; + padding-right: 20rpx; + font-size: 22rpx; + width: 200rpx; + + } + } + + .dl-member-box { + display: flex; + align-items: center; + margin-top: 10rpx; + border-radius: 35rpx; + justify-content: center; + height: 120rpx; + width: 100%; + background: url('/static/index/member-bg.png'); + background-size: contain; + background-position: center; + /* 图片居中显示 */ + background-repeat: no-repeat; + /* 不重复背景图片 */ + + .dl-left { + display: flex; + flex: 1; + padding-left: 30rpx; + align-items: center; + font-size: 30rpx; + color: #623109; + justify-content: left; + + .dl-icon { + width: 60rpx; + height: 56rpx; + + } + } + + .dl-right { + .dl-go-view { + font-size: 28rpx; + display: flex; + align-items: center; + justify-content: center; + background-color: #F5D8A5; + color: #623109; + padding: 10rpx 25rpx; + float: right; + border-radius: 30rpx; + } + } + } + } + + .points-box { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + + .item-box { + flex: 1; + border-radius: 20rpx; + background-color: #FEF4EF; + margin: 8rpx; + display: flex; + align-items: center; + justify-content: center; + padding: 20rpx; + + .item-text-box { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + .dl-little { + font-size: 22rpx; + background-color: white; + border-radius: 20rpx; + padding: 5rpx 20rpx; + margin-top: 15rpx; + } + } + + image { + width: 100rpx; + height: 100rpx; + } + + .red-text { + color: #FC1F3E; + } + } + } + + .other-box { + background-color: #F6F6F6; + width: 100%; + flex-direction: column; + padding: 30rpx; + display: flex; + align-items: center; + justify-content: center; + + .box-room { + display: flex; + background-color: white; + border-radius: 20rpx; + width: 100%; + flex-direction: column; + padding: 25rpx 30rpx; + align-items: self-start; + justify-content: center; + + .detail-title { + border-left: 8rpx solid #FC1F3E; + font-weight: bold; + font-size: 29rpx; + padding-left: 20rpx; + margin-bottom: 30rpx; + + } + + .menu-box { + border-top: 1rpx solid #F7F7F7; + width: 100%; + display: flex; + align-items: center; + justify-content: center; + + .menu-item { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 24rpx; + margin: 10rpx; + + image { + width: 60rpx; + height: 60rpx; + margin-bottom: 10rpx; + } + } + } + } + } + } + \ No newline at end of file diff --git a/static/bg.jpg b/static/bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03a698a094d6e8c7846d0404aa797dc5f79b5dcb GIT binary patch literal 6946 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 M07*qoM6N<$f`UY9mjD0& literal 0 HcmV?d00001 diff --git a/static/detail/card.png b/static/detail/card.png new file mode 100644 index 0000000000000000000000000000000000000000..f68ac986ab1fe7fed88061a05e0c06a215c1a658 GIT binary patch literal 2004 zcmV;_2P^oAP)Px+j!8s8RCr$PoNbI;RT;;h|2Z=STiJrdmbSr}*)9kTDhh}#aqe!nRH`YFm<>i= zs>Trg(1tfPKqZT=0TUtw{U9NMq%A6x@KOv-NxM6<2?Z%N6ior!-QHDbbxo7Hp=Gyo z@A;cMyMxQH+qrY^xwN}G^JRBtp67p_=XcMXd+u}3xsVB7?Ceysq40I%n{SH9QUMl{ zJaZ!3nfe)kBSIb&!A_;svvQ-e6`h@?ng^;sU~}sVWB6;5pPQ-hqT~(88%pV0(ciOU zy#I#)`x)m>5q44JBjBSnI@5e0Vgy*P-QvBK+&=*6XYzMZq-&-@Ng`hWcUB;m0W;@Z zX$-eDdafPZ5TVj)CHf275uDJ>V?BE)yvUAxLnR;p;IHbtZ5M+%XSHv*rGdph0j=S^<-T?3sl5_3LHxvQ<7hWdM28!eeGyo^ZwyfL$ z+yI;~frRA~@4Oub6B6QXhq9$JK(s6JV_p`J*(=D%Gu5LX$Z*d-HVz z5Faq4H|6#^ae^4{>u2)6pvd~TdH^2KZt>Q*I$k#aicl_(suLS9pl;D_;lZc@RQs`I z`Ir2Xw>z$$PNmw>*WDdg$Im%Gqv6k^>cj@DQ~FZ$^~45J)r*hDolyYlN7^m?E-ILc zpPz9yP=bgT4Xsl_BR1e52|(SU-NJow6XN3K%Y4rZPD<0}WeG5b z6|{o`-LFO^!wcHaHt&~SrATvBjcPxLJgyX;5Tfo`gb&js#LaPkO;!Mxd$GtNbz15& z{Js0#dI9m0o6`Q_x3>w|Rq%l|k+w8_^t1T~NV&OIE|Yz44REkbh)Uh7KXt~_*!}#mumO#3S17jm#@sIC zRbl;V+Cl!TXV1@L@8;t*Z6`6{XRlmnhDZKJk+Y&|#0Ct=AR#~2YnE@CXpcfYfidTN z)leQHd2u~{laIsL1(9b2^`GR#ut~r*qZoM3EN&$c98%B>K^SDI+F^jqRWi4%7D+3 zGArq}lG3jmFn|r(Ev`u_plV$&*ZKo7=8=!9J=^Wn1sEcKQRz9$uz%}_?LbbX=VzUV zN#68vwrQ)a(13$IU`ngY(O-DYR^wrH*s`k0l#aedkp*FWM(5;sOUOS(nnj$rp+zG6 zc9@|nJYdMf+U@;eJqg;h^>VG(i!mF+Y694!nohd{Z@hRktWQ05!9p3|_iNU{Ljf-L z-dXAMuy03yJwe#CWk-iLy9WD0*9Cy@q}<{kY{pQn`|V6JjD@2YH+9`zYHK7mce_BcgV{vWds-jDcc zV@lTv`OB$P1PTW@$wNHNwHtsFKEMsY4ZsN#NLU_zCht>3CEU)8ln+V_!Q%`LkvwNc z5=c1dV66z^?m!3a_`QKjWn!*rW%FH;g`*?!vDvFvs5CUGFWK8BcK%01!E-W`E*Ryt(br2g3rJ zoy&~jc2b%e;Gz>Kugz0ff&SvIa>-`A)aZEZJr}0V89jvQ>j}YrCA=B~y>C{s{OIFt zv#qBa;kxqDCCaC#FAjT|0rDRa+^+-=!7U7rSDtj{5Zq*x*9Mmv%2E+56funlG=J!r ms3Rggs30#-^i-FM>Hh$MTO%-Ig|cV>0000Vk literal 0 HcmV?d00001 diff --git a/static/detail/home.png b/static/detail/home.png new file mode 100644 index 0000000000000000000000000000000000000000..49c748596922ec7b95ad3c49371a56dad2ef4311 GIT binary patch literal 1883 zcmV-h2c-CkP)Px+6-h)vRCr$PntyB*MHI*1+ugR@8L&WT2nNwaBm99%j5oUn=tT^sN=QX&P|)D- z7zH&F6l0XcUl@P1#QHE*|t54h(0Ewb3%ddwJfVCo6YVTDsabf zW(y%cBBHZHeSb&9Ydp`(js&z31?D);A|Zra+$V$r_G)Wum$bLH|5i%C3l=PxeB{Ux znVpw~^u2~*+~s-Rrc!KFq8Tw@jIjra=m`KYLa??>nl$P5*4EZzDnZCP?dZ{?&jY}! zqV?~kSS)sLCX?w?v8SS~Ixxp^VnT@5i0HZyr~m-uo9;OkXN$E1yp(Fv3( zj2Sc5rqgM;c2%`8#?}D91|l*;1GUuD)GW_tvxh4kJThRZRI0wGr{`TFS{QQbm|+-q zc%JuWrH-ofcO2)6APC+8fcnt7_Pt>ki(S|KNyS#NHWFZt#U&fg9MHacULeTyKfMuNX9p&1s7#L&hN&wg%E=B=hmuZ?!uIuhC*Rd%2F~%n3 z9^%%VKZ`=pDk^Cz0+vW5*5(%Wr;3Wv?S^68;<|266hT*NWBvN|Mq69kV?v0Bie3h9 z$6~SDR6pL!0+z3|<%jU{kP~v-cQ`C&v{?s;Czs3R3}D49%N7zDwGL^LDxbDQt`jivfsF0d{lIwL>G&xp8~bN*ea zgN~$5mO22?Ut)B1bxjF^Ko+xd8~nd!n&xEJbq|!{S6RRkiNtOIn4TX%PDK$OjELlK z9plH3Z`!$Y=b=&@iCQDquGZGpZ2%zm(ZV%Z@lev&iJbGlOYxyBV76_q7eYKb+yIDp z3+Mdx;dIsbeReAmVBwiVZQsD&O~CEWzo> zCAMudA;eHMU@s!RX&A;mDsS|%fEA)^Y;3GMaNxk1h-k^*hzN=3+fekQ2AFA@OLA-N zm(n-Ovc$}pGxu%Wxbe8^ld1?<@n8}dV=TO$jT&HIESHh1pa z^MW9_N(ga2BA#9pM-LHwV;IJ#p6BsWVk}<6#!QCgr}1L|AV0HehJ%5KTN)Y~?rdpk zksE}AwlNEgF?K%@DV<^?;v1avoBnse7A{^yP*+#i(B9tu=U@;RW4{woLmt=$&Uya^KyjZj3Cy&gpv6}QNNNsnyXZX}{jp{ZH1qh%WCHVk8(=Xo!b+5e<&RRNZtniCN5 zdLo)54}E1(8ROp$=1TxXaDrbs|ht}{#nQzW1$*BPdPDH2eW>kQMt6bUHGb%rSd`xnyF VFo~GKoU{M{002ovPDHLkV1nm*dguTE literal 0 HcmV?d00001 diff --git a/static/detail/share.png b/static/detail/share.png new file mode 100644 index 0000000000000000000000000000000000000000..ecaccc3112bbb67a1982a7eb234770439803746a GIT binary patch literal 2362 zcmZ`*c~sJg7XFbNS&op6TP}fPI)n}75}IRWC~ladskvn#*=X+aNXum$Q%pq@H5bGQ z(;1gwa@P>CLCXyyGsjHyp+=6WHJIzD!~6HW^ZvN^`{$l}zVDuU@A`S}CS<8lDSpzL|Q$31R5ib7T zco)}dzMn&2FS)&W2SPcvgZ~lDs>CR|$^Pxnt;jNYdj?k$FKBKKljiGxo628*-+j6# z*<2V6b%U%A9N!t5CesF=Tk})czDd;Y~tm+E;W(}YD1(XM;Tc$!u16|fdW<# z&+h=g5yxx_HYq8|XZdYw!y7AA-FsSke$mm3RH(##MC0yS*VzJ$V<1F!1@1|Q?SR|Z*Cg)IIg=r5Q2RzR6W8u2(NY~xl zHGwC3Ubcy_9`AhQ9ikS7hlei!C{$Lo5H5*E4kdB$b)3V!drB*>tU{=>fdJ5>kmmZV z+MeG7;$0VPGL#ITJnU@)4ur%4=+kr4oJ#!=?GOJ@hH*Cj1l$5EZU zm5FBQ=VK9Xq9)te$YPi0l7!%~)~Knjc&g#q6sIY_w;(g05Z0m?meFCUNF=AG?q&YV zt+%U^%jFu=XtWZDL=(Qn2tONj;|YkC=+o+-3@ftv*c^H0h;Qh8Tqh&Ebt@Klp&`lw z&FBFI#MgzI_itNNx?c%A@gTp{@zzbA-t$CcQIWyYhYv9lzvlE);m4st*1r44R2AVV zdGWiWK5>sz@|8-F<-f8?OKHS|NP3X#-L}Xpeu&~=E6{tipkVmbq78DWYf{Fk2v`Ws4RXZ5Y=wdAwWOml&}Mw_6nA=3IfYxz@hYEJe~ zti>p({R@pOuSlz)j=XsBMo;!KdP^5{fNdEYI!c|j-3MIpc*8z!E2O2GM^R_*r~=FO z{L@}_uYHH+;~aeJzWuGx_Hx}3Tn)bJu{WY;j0A7VOvLbuz)y?fcj?*g6Xci}6lsPB z>ip`&0XX@r^lyc(q&)eo5STdxPZ?1>7!_n<&s&3v`dl)CW)j6`aS4N5)*=@R{;WQK zL2s5$Uii~e$;u5=L(YA zn=)JW&x;t-XS+B|G<$EPZHa}ZW@!_uOqfA~&y(-Riz#!PTQ_yDk`IZl_hswTWsA}X zP8od`{a5;pM{z$zS9w#HJY?zM|I2^_|YB=JysqD7qPRgJA|9El0-h_l|5N z11~|q=~zM5EFfQAYiLmQop*-uf}XmDNw8ncnMc9l1(B00^80K8+eP@tjK?^2_qo*I z?^~G~g%pAbAK94I^F;lpy)s)JSQt)DpF6ujlf29p2n1jEUHgm+GMNS1@+eVW_Q|F3 zVpBRvKRk;gX9;QY46SrjKR;mst!i8$n=rmkK^VS24)tCcQxS;P20U|&$s??y*Qd$fgSI)wE@qC7+? zn)UXYf+l9d9q2&J&3#XoMPqiDo?D%)+m#T>Zh@hYcuJ?;59w3=;b!BH$0~nMR#8^A zQ8%qWB9mTAV(9gz;Z5O_*ayq%Syepq3)<+Dc*EhFA=B9fA} zbl`ogD#uhbZ1pz?G%WnD*uh$S-D=~) z1E1}oDF~FDp}EoJG)HeJ%Z~&dQzJG{q{P5c4^sVO-lK - + + {{content}} - + {{closeText}} - + {{okText}} @@ -28,10 +30,12 @@ - + \ No newline at end of file diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue index 5be7624..c11a119 100644 --- a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue +++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -3,7 +3,9 @@ {{shareTitleText}} - + + {{item.text}} @@ -19,14 +21,16 @@ - + \ No newline at end of file diff --git a/utils/auth.js b/utils/auth.js index 973d047..8cf97c0 100644 --- a/utils/auth.js +++ b/utils/auth.js @@ -1,41 +1,41 @@ const TokenKey = 'App-Token' export function getToken() { - return uni.getStorageSync(TokenKey) + return uni.getStorageSync(TokenKey) } export function setToken(token) { - return uni.setStorageSync(TokenKey, token) + return uni.setStorageSync(TokenKey, token) } export function removeToken() { - return uni.removeStorageSync(TokenKey) + return uni.removeStorageSync(TokenKey) } export function getJSONData(keyStr) { - if(uni.getStorageSync(keyStr)){ - return JSON.parse(uni.getStorageSync(keyStr)) - }else{ - return ""; - } + if (uni.getStorageSync(keyStr)) { + return JSON.parse(uni.getStorageSync(keyStr)) + } else { + return null; + } } -export function setJSONData(keyStr,dataObj) { - return uni.setStorageSync(keyStr, JSON.stringify(dataObj)) +export function setJSONData(keyStr, dataObj) { + return uni.setStorageSync(keyStr, JSON.stringify(dataObj)) } export function removeJSONData(keyStr) { - return uni.removeStorageSync(keyStr) + return uni.removeStorageSync(keyStr) } export function getStrData(keyStr) { - return uni.getStorageSync(keyStr) + return uni.getStorageSync(keyStr) } -export function setStrData(keyStr,dataStr) { - return uni.setStorageSync(keyStr, dataStr) +export function setStrData(keyStr, dataStr) { + return uni.setStorageSync(keyStr, dataStr) } export function removeStrData(keyStr) { - return uni.removeStorageSync(keyStr) + return uni.removeStorageSync(keyStr) } \ No newline at end of file diff --git a/utils/common.js b/utils/common.js index b2e1948..a00f9c7 100644 --- a/utils/common.js +++ b/utils/common.js @@ -28,7 +28,8 @@ export function hasRights(code) { rtnData = userRights[code] } return rtnData -}/** +} +/** * 切换用户当前身份 * @param {Object} value 身份值 */ @@ -36,6 +37,14 @@ export function changeUserType(value) { setStrData(constant.userTypeKey, value) } +/** + * 获取用户当前身份 + * @param {Object} value 身份值 + */ +export function getUserType() { + return getStrData(constant.userTypeKey) +} + /** * 显示消息提示框 * @param content 提示的标题 @@ -97,10 +106,11 @@ export function tansParams(params) { */ export function formatNumberWithUnits(num) { const units = ['', 'k', 'w', 'kw']; - const absNum = Math.abs(num); // 获取绝对值以处理负数 + // 获取绝对值以处理负数 + let absNum = Math.abs(num); // 处理小于1000的情况,直接返回原数字的字符串形式 if (absNum < 1000) { - return absNum.toString(); + return num; } // 寻找合适的单位 @@ -119,3 +129,29 @@ export function formatNumberWithUnits(num) { const formattedNum = absNum.toFixed(2).replace(/\.?0+$/, ''); // 保留两位小数并去除末尾的零 return formattedNum + units[unitIndex]; } + +/** + * 计算某个时间是几天、几小时之前 + * @param {Object} time + */ +export function calculateTimeDifference(time) { + // 将时间字符串转换为Date对象 + const nowDate = new Date(); + const lastDate = new Date(time); + + // 计算时间差(毫秒) + const diffMs = Math.abs(nowDate.getTime() - lastDate.getTime()); + + // 将毫秒转换为小时 + const diffHours = diffMs / (1000 * 60 * 60); + + // 计算完整的整天天数和剩余的小时数 + const diffDays = Math.floor(diffHours / 24); + const remainingHours = diffHours % 24; + + if (diffDays > 0) { + return parseInt(diffDays) + "天前" + } else { + return parseInt(remainingHours) + "小时前" + } +} \ No newline at end of file diff --git a/utils/constant.js b/utils/constant.js index d4e6c79..b7beb1a 100644 --- a/utils/constant.js +++ b/utils/constant.js @@ -7,6 +7,8 @@ const constant = { userRightsKey: 'User-Rights', // 用户当前身份code userTypeKey: 'User-Type', + //当前用户信息 + userInfo: 'User-Info', //博主 bz: '02', //通告主