From 6211bfda7c414050ec4838e35bde20fa4ae726ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=A7=8B=E4=BA=8E=E5=88=9D=E8=A7=81?= <752204717@qq.com>
Date: Mon, 4 Nov 2024 18:08:04 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.hbuilderx/launch.json | 4 +-
common/appcomact.js | 37 +
common/http.api.js | 58 +
common/http.interceptor.js | 68 +
common/md5.js | 695 ++++++++
components/battery.vue | 63 +
components/myProgress.vue | 121 ++
components/virtualList.vue | 135 ++
manifest.json | 509 +++---
pages.json | 9 +
pages/bookShop/commodityDetail copy.vue | 1 +
pages/bookShop/commodityDetail.vue | 1 +
pages/peanut/home.vue | 9 +-
pages/read/localread.vue | 1955 +++++++++++++++++++++
pages/read/read.vue | 2055 +++++++++++++++++++++++
pages/talkBook/talkBookDetail.vue | 1978 ++++++++++++----------
static/background0.jpg | Bin 0 -> 7387 bytes
static/background1.jpg | Bin 0 -> 2026 bytes
utils/utils.js | 58 +-
19 files changed, 6559 insertions(+), 1197 deletions(-)
create mode 100644 common/appcomact.js
create mode 100644 common/http.api.js
create mode 100644 common/http.interceptor.js
create mode 100644 common/md5.js
create mode 100644 components/battery.vue
create mode 100644 components/myProgress.vue
create mode 100644 components/virtualList.vue
create mode 100644 pages/read/localread.vue
create mode 100644 pages/read/read.vue
create mode 100644 static/background0.jpg
create mode 100644 static/background1.jpg
diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json
index 0d12f45..0852864 100644
--- a/.hbuilderx/launch.json
+++ b/.hbuilderx/launch.json
@@ -20,11 +20,11 @@
"type" : "uniCloud"
},
{
- "playground" : "custom",
+ "playground" : "standard",
"type" : "uni-app:app-ios"
},
{
- "playground" : "custom",
+ "playground" : "standard",
"type" : "uni-app:app-android"
}
]
diff --git a/common/appcomact.js b/common/appcomact.js
new file mode 100644
index 0000000..1227ff0
--- /dev/null
+++ b/common/appcomact.js
@@ -0,0 +1,37 @@
+
+
+export function getItem(key){
+ // #ifdef APP-PLUS
+ return plus.storage.getItem(key);
+ // #endif
+ // #ifdef APP-PLUS
+ return uni.getStorageSync(key);
+ // #endif
+
+ };
+export function setItem(key,value){
+ // #ifdef APP-PLUS
+ return plus.storage.setItem(key,value);
+ // #endif
+ // #ifdef APP-PLUS
+ return uni.setStorageSync(key,value);
+ // #endif
+ };
+
+export function removeItem(key){
+ // #ifdef APP-PLUS
+ return plus.storage.removeItem(key)
+ // #endif
+ // #ifdef APP-PLUS
+ return uni.removeStorageSync(key);
+ // #endif
+ };
+
+export function setFullscreen(type){
+ // #ifdef APP-PLUS
+ plus.navigator.setFullscreen(type);
+ // #endif
+ // #ifndef APP-PLUS
+ return false;
+ // #endif
+}
\ No newline at end of file
diff --git a/common/http.api.js b/common/http.api.js
new file mode 100644
index 0000000..eb589d2
--- /dev/null
+++ b/common/http.api.js
@@ -0,0 +1,58 @@
+// 如果没有通过拦截器配置域名的话,可以在这里写上完整的URL(加上域名部分)
+
+// 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作,更多内容详见uView对拦截器的介绍部分:
+// https://uviewui.com/js/http.html#%E4%BD%95%E8%B0%93%E8%AF%B7%E6%B1%82%E6%8B%A6%E6%88%AA%EF%BC%9F
+const install = (Vue, vm) => {
+ // 此处没有使用传入的params参数
+
+ // 此处使用了传入的params参数,一切自定义即可
+ let getByViews = (params = {}) => vm.$u.post('/api/getbooklistbyviews', params);
+ let getByTime = (params = {}) => vm.$u.post('/api/getbooklistbytime', params);
+
+ // 图书详情和目录
+ let getDetail = (params = {}) => vm.$u.post('/api/getbookinfo', params);
+
+ // 首页banner
+ let getBanner = (params = {}) => vm.$u.post('/api/getbanner', params);
+
+ // 获取分类信息
+ let getCategorys = (params = {}) => vm.$u.post('/api/categorylist', params);
+
+ // 根据分类名字获取图书
+ let getByCname = (params = {}) => vm.$u.post('/api/getbooklistbycategory', params);
+ let getByCid = (params = {}) => vm.$u.post('/api/getbooklistbycid', params);
+
+ let getRankList = (params = {}) => vm.$u.post('/api/getbooklistbyrank', params);
+
+ let getText = (params = {}) => vm.$u.post('/api/getcontent', params);
+
+ let getSearch = (params = {}) => vm.$u.post('/api/search', params);
+ // 更新阅读量
+ let updateViews = (params = {}) => vm.$u.post('/api/updateviews', params);
+ // 注册or登录
+ let loginto = (params = {}) => vm.$u.post('/member/login', params);
+
+ // 修改密码
+ let editpass = (params = {}) => vm.$u.post('/member/editpass', params);
+
+
+ vm.$u.api = {
+ getByViews,
+ getByTime,
+ getBanner,
+ getCategorys,
+ getByCname,
+ getByCid,
+ getRankList,
+ getDetail,
+ getText,
+ getSearch,
+ updateViews,
+ loginto,
+ editpass
+ };
+}
+
+export default {
+ install
+}
diff --git a/common/http.interceptor.js b/common/http.interceptor.js
new file mode 100644
index 0000000..80a048a
--- /dev/null
+++ b/common/http.interceptor.js
@@ -0,0 +1,68 @@
+import md5 from './md5.js'
+// 这里的vm,就是我们在vue文件里面的this,所以我们能在这里获取vuex的变量,比如存放在里面的token
+// 同时,我们也可以在此使用getApp().globalData,如果你把token放在getApp().globalData的话,也是可以使用的
+const install = (Vue, vm) => {
+ Vue.prototype.$u.http.setConfig({
+ baseUrl: vm.apidomain,
+ // 如果将此值设置为true,拦截回调中将会返回服务端返回的所有数据response,而不是response.data
+ // 设置为true后,就需要在this.$u.http.interceptor.response进行多一次的判断,请打印查看具体值
+ // originalData: true,
+ // 设置自定义头部content-type
+ header: {
+ 'content-type': 'application/x-www-form-urlencoded'
+ }
+ });
+ // 请求拦截,配置Token等参数
+ Vue.prototype.$u.http.interceptor.request = (config) => {
+ // config.header.Token = 'xxxxxx';
+
+ // 方式一,存放在vuex的token,假设使用了uView封装的vuex方式,见:https://uviewui.com/components/globalVariable.html
+ // config.header.token = vm.token;
+
+ // 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取
+ // config.header.token = vm.$store.state.token;
+
+ // 方式三,如果token放在了globalData,通过getApp().globalData获取
+ // config.header.token = getApp().globalData.username;
+
+ // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的,所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值
+ // const token = uni.getStorageSync('token');
+ // config.header.token = token;
+ // const token = uni.getStorageSync('access_token');
+ // if(token){
+ // config.header.access_token = token;
+ // // config.header.Token = 'xxxxxx';
+ // }
+ if (config.data) {
+ let tmp = uni.getStorageSync('lifeData');
+ if(tmp['vuex_uid']){
+ config.data['userid'] = tmp['vuex_uid']
+
+ }
+ if(tmp['vuex_token']){
+ config.data['token'] = tmp['vuex_token']
+ }
+ }
+ // console.log(config);
+ return config;
+ }
+ // 响应拦截,判断状态码是否通过
+ Vue.prototype.$u.http.interceptor.response = (res) => {
+ if (typeof res.status !== 'undefined') {
+ // res为服务端返回值,可能有code,result等字段
+ // 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到
+ // 如果配置了originalData为true,请留意这里的返回值
+ return res;
+ } else {
+ // vm.$u.toast('抱歉出错了:' + res)
+ // console.log('httpinert.js', res);
+ // 如果返回false,则会调用Promise的reject回调,
+ // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值
+ return false;
+ }
+ }
+}
+
+export default {
+ install
+}
diff --git a/common/md5.js b/common/md5.js
new file mode 100644
index 0000000..9cdd369
--- /dev/null
+++ b/common/md5.js
@@ -0,0 +1,695 @@
+/**
+ * [js-md5]{@link https://github.com/emn178/js-md5}
+ *
+ * @namespace md5
+ * @version 0.7.3
+ * @author Chen, Yi-Cyuan [emn178@gmail.com]
+ * @copyright Chen, Yi-Cyuan 2014-2017
+ * @license MIT
+ */
+(function() {
+ 'use strict';
+
+ var ERROR = 'input is invalid type';
+ var WINDOW = typeof window === 'object';
+ var root = WINDOW ? window : {};
+ if (root.JS_MD5_NO_WINDOW) {
+ WINDOW = false;
+ }
+ var WEB_WORKER = !WINDOW && typeof self === 'object';
+ var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions
+ .node;
+ if (NODE_JS) {
+ root = global;
+ } else if (WEB_WORKER) {
+ root = self;
+ }
+ var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
+ var AMD = typeof define === 'function' && define.amd;
+ var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
+ var HEX_CHARS = '0123456789abcdef'.split('');
+ var EXTRA = [128, 32768, 8388608, -2147483648];
+ var SHIFT = [0, 8, 16, 24];
+ var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
+ var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+ var blocks = [],
+ buffer8;
+ if (ARRAY_BUFFER) {
+ var buffer = new ArrayBuffer(68);
+ buffer8 = new Uint8Array(buffer);
+ blocks = new Uint32Array(buffer);
+ }
+
+ if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {
+ Array.isArray = function(obj) {
+ return Object.prototype.toString.call(obj) === '[object Array]';
+ };
+ }
+
+ if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
+ ArrayBuffer.isView = function(obj) {
+ return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
+ };
+ }
+
+ /**
+ * @method hex
+ * @memberof md5
+ * @description Output hash as hex string
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {String} Hex string
+ * @example
+ * md5.hex('The quick brown fox jumps over the lazy dog');
+ * // equal to
+ * md5('The quick brown fox jumps over the lazy dog');
+ */
+ /**
+ * @method digest
+ * @memberof md5
+ * @description Output hash as bytes array
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {Array} Bytes array
+ * @example
+ * md5.digest('The quick brown fox jumps over the lazy dog');
+ */
+ /**
+ * @method array
+ * @memberof md5
+ * @description Output hash as bytes array
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {Array} Bytes array
+ * @example
+ * md5.array('The quick brown fox jumps over the lazy dog');
+ */
+ /**
+ * @method arrayBuffer
+ * @memberof md5
+ * @description Output hash as ArrayBuffer
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {ArrayBuffer} ArrayBuffer
+ * @example
+ * md5.arrayBuffer('The quick brown fox jumps over the lazy dog');
+ */
+ /**
+ * @method buffer
+ * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
+ * @memberof md5
+ * @description Output hash as ArrayBuffer
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {ArrayBuffer} ArrayBuffer
+ * @example
+ * md5.buffer('The quick brown fox jumps over the lazy dog');
+ */
+ /**
+ * @method base64
+ * @memberof md5
+ * @description Output hash as base64 string
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {String} base64 string
+ * @example
+ * md5.base64('The quick brown fox jumps over the lazy dog');
+ */
+ var createOutputMethod = function(outputType) {
+ return function(message) {
+ return new Md5(true).update(message)[outputType]();
+ };
+ };
+
+ /**
+ * @method create
+ * @memberof md5
+ * @description Create Md5 object
+ * @returns {Md5} Md5 object.
+ * @example
+ * var hash = md5.create();
+ */
+ /**
+ * @method update
+ * @memberof md5
+ * @description Create and update Md5 object
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {Md5} Md5 object.
+ * @example
+ * var hash = md5.update('The quick brown fox jumps over the lazy dog');
+ * // equal to
+ * var hash = md5.create();
+ * hash.update('The quick brown fox jumps over the lazy dog');
+ */
+ var createMethod = function() {
+ var method = createOutputMethod('hex');
+ if (NODE_JS) {
+ method = nodeWrap(method);
+ }
+ method.create = function() {
+ return new Md5();
+ };
+ method.update = function(message) {
+ return method.create().update(message);
+ };
+ for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
+ var type = OUTPUT_TYPES[i];
+ method[type] = createOutputMethod(type);
+ }
+ return method;
+ };
+
+ var nodeWrap = function(method) {
+ var crypto = eval("require('crypto')");
+ var Buffer = eval("require('buffer').Buffer");
+ var nodeMethod = function(message) {
+ if (typeof message === 'string') {
+ return crypto.createHash('md5').update(message, 'utf8').digest('hex');
+ } else {
+ if (message === null || message === undefined) {
+ throw ERROR;
+ } else if (message.constructor === ArrayBuffer) {
+ message = new Uint8Array(message);
+ }
+ }
+ if (Array.isArray(message) || ArrayBuffer.isView(message) ||
+ message.constructor === Buffer) {
+ return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
+ } else {
+ return method(message);
+ }
+ };
+ return nodeMethod;
+ };
+
+ /**
+ * Md5 class
+ * @class Md5
+ * @description This is internal class.
+ * @see {@link md5.create}
+ */
+ function Md5(sharedMemory) {
+ if (sharedMemory) {
+ blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
+ blocks[4] = blocks[5] = blocks[6] = blocks[7] =
+ blocks[8] = blocks[9] = blocks[10] = blocks[11] =
+ blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
+ this.blocks = blocks;
+ this.buffer8 = buffer8;
+ } else {
+ if (ARRAY_BUFFER) {
+ var buffer = new ArrayBuffer(68);
+ this.buffer8 = new Uint8Array(buffer);
+ this.blocks = new Uint32Array(buffer);
+ } else {
+ this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
+ }
+ }
+ this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
+ this.finalized = this.hashed = false;
+ this.first = true;
+ }
+
+ /**
+ * @method update
+ * @memberof Md5
+ * @instance
+ * @description Update hash
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {Md5} Md5 object.
+ * @see {@link md5.update}
+ */
+ Md5.prototype.update = function(message) {
+ if (this.finalized) {
+ return;
+ }
+
+ var notString, type = typeof message;
+ if (type !== 'string') {
+ if (type === 'object') {
+ if (message === null) {
+ throw ERROR;
+ } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
+ message = new Uint8Array(message);
+ } else if (!Array.isArray(message)) {
+ if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
+ throw ERROR;
+ }
+ }
+ } else {
+ throw ERROR;
+ }
+ notString = true;
+ }
+ var code, index = 0,
+ i, length = message.length,
+ blocks = this.blocks;
+ var buffer8 = this.buffer8;
+
+ while (index < length) {
+ if (this.hashed) {
+ this.hashed = false;
+ blocks[0] = blocks[16];
+ blocks[16] = blocks[1] = blocks[2] = blocks[3] =
+ blocks[4] = blocks[5] = blocks[6] = blocks[7] =
+ blocks[8] = blocks[9] = blocks[10] = blocks[11] =
+ blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
+ }
+
+ if (notString) {
+ if (ARRAY_BUFFER) {
+ for (i = this.start; index < length && i < 64; ++index) {
+ buffer8[i++] = message[index];
+ }
+ } else {
+ for (i = this.start; index < length && i < 64; ++index) {
+ blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
+ }
+ }
+ } else {
+ if (ARRAY_BUFFER) {
+ for (i = this.start; index < length && i < 64; ++index) {
+ code = message.charCodeAt(index);
+ if (code < 0x80) {
+ buffer8[i++] = code;
+ } else if (code < 0x800) {
+ buffer8[i++] = 0xc0 | (code >> 6);
+ buffer8[i++] = 0x80 | (code & 0x3f);
+ } else if (code < 0xd800 || code >= 0xe000) {
+ buffer8[i++] = 0xe0 | (code >> 12);
+ buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
+ buffer8[i++] = 0x80 | (code & 0x3f);
+ } else {
+ code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
+ buffer8[i++] = 0xf0 | (code >> 18);
+ buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);
+ buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
+ buffer8[i++] = 0x80 | (code & 0x3f);
+ }
+ }
+ } else {
+ for (i = this.start; index < length && i < 64; ++index) {
+ code = message.charCodeAt(index);
+ if (code < 0x80) {
+ blocks[i >> 2] |= code << SHIFT[i++ & 3];
+ } else if (code < 0x800) {
+ blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
+ } else if (code < 0xd800 || code >= 0xe000) {
+ blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
+ blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
+ } else {
+ code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
+ blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
+ blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
+ blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
+ blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
+ }
+ }
+ }
+ }
+ this.lastByteIndex = i;
+ this.bytes += i - this.start;
+ if (i >= 64) {
+ this.start = i - 64;
+ this.hash();
+ this.hashed = true;
+ } else {
+ this.start = i;
+ }
+ }
+ if (this.bytes > 4294967295) {
+ this.hBytes += this.bytes / 4294967296 << 0;
+ this.bytes = this.bytes % 4294967296;
+ }
+ return this;
+ };
+
+ Md5.prototype.finalize = function() {
+ if (this.finalized) {
+ return;
+ }
+ this.finalized = true;
+ var blocks = this.blocks,
+ i = this.lastByteIndex;
+ blocks[i >> 2] |= EXTRA[i & 3];
+ if (i >= 56) {
+ if (!this.hashed) {
+ this.hash();
+ }
+ blocks[0] = blocks[16];
+ blocks[16] = blocks[1] = blocks[2] = blocks[3] =
+ blocks[4] = blocks[5] = blocks[6] = blocks[7] =
+ blocks[8] = blocks[9] = blocks[10] = blocks[11] =
+ blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
+ }
+ blocks[14] = this.bytes << 3;
+ blocks[15] = this.hBytes << 3 | this.bytes >>> 29;
+ this.hash();
+ };
+
+ Md5.prototype.hash = function() {
+ var a, b, c, d, bc, da, blocks = this.blocks;
+
+ if (this.first) {
+ a = blocks[0] - 680876937;
+ a = (a << 7 | a >>> 25) - 271733879 << 0;
+ d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;
+ d = (d << 12 | d >>> 20) + a << 0;
+ c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;
+ c = (c << 17 | c >>> 15) + d << 0;
+ b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;
+ b = (b << 22 | b >>> 10) + c << 0;
+ } else {
+ a = this.h0;
+ b = this.h1;
+ c = this.h2;
+ d = this.h3;
+ a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;
+ a = (a << 7 | a >>> 25) + b << 0;
+ d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;
+ d = (d << 12 | d >>> 20) + a << 0;
+ c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;
+ c = (c << 17 | c >>> 15) + d << 0;
+ b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;
+ b = (b << 22 | b >>> 10) + c << 0;
+ }
+
+ a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;
+ a = (a << 7 | a >>> 25) + b << 0;
+ d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;
+ d = (d << 12 | d >>> 20) + a << 0;
+ c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;
+ c = (c << 17 | c >>> 15) + d << 0;
+ b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;
+ b = (b << 22 | b >>> 10) + c << 0;
+ a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;
+ a = (a << 7 | a >>> 25) + b << 0;
+ d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;
+ d = (d << 12 | d >>> 20) + a << 0;
+ c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;
+ c = (c << 17 | c >>> 15) + d << 0;
+ b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;
+ b = (b << 22 | b >>> 10) + c << 0;
+ a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;
+ a = (a << 7 | a >>> 25) + b << 0;
+ d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;
+ d = (d << 12 | d >>> 20) + a << 0;
+ c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;
+ c = (c << 17 | c >>> 15) + d << 0;
+ b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;
+ b = (b << 22 | b >>> 10) + c << 0;
+ a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;
+ a = (a << 5 | a >>> 27) + b << 0;
+ d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;
+ d = (d << 9 | d >>> 23) + a << 0;
+ c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;
+ c = (c << 14 | c >>> 18) + d << 0;
+ b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;
+ b = (b << 20 | b >>> 12) + c << 0;
+ a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;
+ a = (a << 5 | a >>> 27) + b << 0;
+ d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;
+ d = (d << 9 | d >>> 23) + a << 0;
+ c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;
+ c = (c << 14 | c >>> 18) + d << 0;
+ b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;
+ b = (b << 20 | b >>> 12) + c << 0;
+ a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;
+ a = (a << 5 | a >>> 27) + b << 0;
+ d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;
+ d = (d << 9 | d >>> 23) + a << 0;
+ c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;
+ c = (c << 14 | c >>> 18) + d << 0;
+ b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;
+ b = (b << 20 | b >>> 12) + c << 0;
+ a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;
+ a = (a << 5 | a >>> 27) + b << 0;
+ d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;
+ d = (d << 9 | d >>> 23) + a << 0;
+ c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;
+ c = (c << 14 | c >>> 18) + d << 0;
+ b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;
+ b = (b << 20 | b >>> 12) + c << 0;
+ bc = b ^ c;
+ a += (bc ^ d) + blocks[5] - 378558;
+ a = (a << 4 | a >>> 28) + b << 0;
+ d += (bc ^ a) + blocks[8] - 2022574463;
+ d = (d << 11 | d >>> 21) + a << 0;
+ da = d ^ a;
+ c += (da ^ b) + blocks[11] + 1839030562;
+ c = (c << 16 | c >>> 16) + d << 0;
+ b += (da ^ c) + blocks[14] - 35309556;
+ b = (b << 23 | b >>> 9) + c << 0;
+ bc = b ^ c;
+ a += (bc ^ d) + blocks[1] - 1530992060;
+ a = (a << 4 | a >>> 28) + b << 0;
+ d += (bc ^ a) + blocks[4] + 1272893353;
+ d = (d << 11 | d >>> 21) + a << 0;
+ da = d ^ a;
+ c += (da ^ b) + blocks[7] - 155497632;
+ c = (c << 16 | c >>> 16) + d << 0;
+ b += (da ^ c) + blocks[10] - 1094730640;
+ b = (b << 23 | b >>> 9) + c << 0;
+ bc = b ^ c;
+ a += (bc ^ d) + blocks[13] + 681279174;
+ a = (a << 4 | a >>> 28) + b << 0;
+ d += (bc ^ a) + blocks[0] - 358537222;
+ d = (d << 11 | d >>> 21) + a << 0;
+ da = d ^ a;
+ c += (da ^ b) + blocks[3] - 722521979;
+ c = (c << 16 | c >>> 16) + d << 0;
+ b += (da ^ c) + blocks[6] + 76029189;
+ b = (b << 23 | b >>> 9) + c << 0;
+ bc = b ^ c;
+ a += (bc ^ d) + blocks[9] - 640364487;
+ a = (a << 4 | a >>> 28) + b << 0;
+ d += (bc ^ a) + blocks[12] - 421815835;
+ d = (d << 11 | d >>> 21) + a << 0;
+ da = d ^ a;
+ c += (da ^ b) + blocks[15] + 530742520;
+ c = (c << 16 | c >>> 16) + d << 0;
+ b += (da ^ c) + blocks[2] - 995338651;
+ b = (b << 23 | b >>> 9) + c << 0;
+ a += (c ^ (b | ~d)) + blocks[0] - 198630844;
+ a = (a << 6 | a >>> 26) + b << 0;
+ d += (b ^ (a | ~c)) + blocks[7] + 1126891415;
+ d = (d << 10 | d >>> 22) + a << 0;
+ c += (a ^ (d | ~b)) + blocks[14] - 1416354905;
+ c = (c << 15 | c >>> 17) + d << 0;
+ b += (d ^ (c | ~a)) + blocks[5] - 57434055;
+ b = (b << 21 | b >>> 11) + c << 0;
+ a += (c ^ (b | ~d)) + blocks[12] + 1700485571;
+ a = (a << 6 | a >>> 26) + b << 0;
+ d += (b ^ (a | ~c)) + blocks[3] - 1894986606;
+ d = (d << 10 | d >>> 22) + a << 0;
+ c += (a ^ (d | ~b)) + blocks[10] - 1051523;
+ c = (c << 15 | c >>> 17) + d << 0;
+ b += (d ^ (c | ~a)) + blocks[1] - 2054922799;
+ b = (b << 21 | b >>> 11) + c << 0;
+ a += (c ^ (b | ~d)) + blocks[8] + 1873313359;
+ a = (a << 6 | a >>> 26) + b << 0;
+ d += (b ^ (a | ~c)) + blocks[15] - 30611744;
+ d = (d << 10 | d >>> 22) + a << 0;
+ c += (a ^ (d | ~b)) + blocks[6] - 1560198380;
+ c = (c << 15 | c >>> 17) + d << 0;
+ b += (d ^ (c | ~a)) + blocks[13] + 1309151649;
+ b = (b << 21 | b >>> 11) + c << 0;
+ a += (c ^ (b | ~d)) + blocks[4] - 145523070;
+ a = (a << 6 | a >>> 26) + b << 0;
+ d += (b ^ (a | ~c)) + blocks[11] - 1120210379;
+ d = (d << 10 | d >>> 22) + a << 0;
+ c += (a ^ (d | ~b)) + blocks[2] + 718787259;
+ c = (c << 15 | c >>> 17) + d << 0;
+ b += (d ^ (c | ~a)) + blocks[9] - 343485551;
+ b = (b << 21 | b >>> 11) + c << 0;
+
+ if (this.first) {
+ this.h0 = a + 1732584193 << 0;
+ this.h1 = b - 271733879 << 0;
+ this.h2 = c - 1732584194 << 0;
+ this.h3 = d + 271733878 << 0;
+ this.first = false;
+ } else {
+ this.h0 = this.h0 + a << 0;
+ this.h1 = this.h1 + b << 0;
+ this.h2 = this.h2 + c << 0;
+ this.h3 = this.h3 + d << 0;
+ }
+ };
+
+ /**
+ * @method hex
+ * @memberof Md5
+ * @instance
+ * @description Output hash as hex string
+ * @returns {String} Hex string
+ * @see {@link md5.hex}
+ * @example
+ * hash.hex();
+ */
+ Md5.prototype.hex = function() {
+ this.finalize();
+
+ var h0 = this.h0,
+ h1 = this.h1,
+ h2 = this.h2,
+ h3 = this.h3;
+
+ return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
+ HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
+ HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
+ HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
+ HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
+ HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
+ HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
+ HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
+ HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
+ HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
+ HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
+ HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
+ HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
+ HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
+ HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
+ HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];
+ };
+
+ /**
+ * @method toString
+ * @memberof Md5
+ * @instance
+ * @description Output hash as hex string
+ * @returns {String} Hex string
+ * @see {@link md5.hex}
+ * @example
+ * hash.toString();
+ */
+ Md5.prototype.toString = Md5.prototype.hex;
+
+ /**
+ * @method digest
+ * @memberof Md5
+ * @instance
+ * @description Output hash as bytes array
+ * @returns {Array} Bytes array
+ * @see {@link md5.digest}
+ * @example
+ * hash.digest();
+ */
+ Md5.prototype.digest = function() {
+ this.finalize();
+
+ var h0 = this.h0,
+ h1 = this.h1,
+ h2 = this.h2,
+ h3 = this.h3;
+ return [
+ h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,
+ h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,
+ h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,
+ h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF
+ ];
+ };
+
+ /**
+ * @method array
+ * @memberof Md5
+ * @instance
+ * @description Output hash as bytes array
+ * @returns {Array} Bytes array
+ * @see {@link md5.array}
+ * @example
+ * hash.array();
+ */
+ Md5.prototype.array = Md5.prototype.digest;
+
+ /**
+ * @method arrayBuffer
+ * @memberof Md5
+ * @instance
+ * @description Output hash as ArrayBuffer
+ * @returns {ArrayBuffer} ArrayBuffer
+ * @see {@link md5.arrayBuffer}
+ * @example
+ * hash.arrayBuffer();
+ */
+ Md5.prototype.arrayBuffer = function() {
+ this.finalize();
+
+ var buffer = new ArrayBuffer(16);
+ var blocks = new Uint32Array(buffer);
+ blocks[0] = this.h0;
+ blocks[1] = this.h1;
+ blocks[2] = this.h2;
+ blocks[3] = this.h3;
+ return buffer;
+ };
+
+ /**
+ * @method buffer
+ * @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
+ * @memberof Md5
+ * @instance
+ * @description Output hash as ArrayBuffer
+ * @returns {ArrayBuffer} ArrayBuffer
+ * @see {@link md5.buffer}
+ * @example
+ * hash.buffer();
+ */
+ Md5.prototype.buffer = Md5.prototype.arrayBuffer;
+
+ /**
+ * @method base64
+ * @memberof Md5
+ * @instance
+ * @description Output hash as base64 string
+ * @returns {String} base64 string
+ * @see {@link md5.base64}
+ * @example
+ * hash.base64();
+ */
+ Md5.prototype.base64 = function() {
+ var v1, v2, v3, base64Str = '',
+ bytes = this.array();
+ for (var i = 0; i < 15;) {
+ v1 = bytes[i++];
+ v2 = bytes[i++];
+ v3 = bytes[i++];
+ base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
+ BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
+ BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
+ BASE64_ENCODE_CHAR[v3 & 63];
+ }
+ v1 = bytes[i];
+ base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
+ BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
+ '==';
+ return base64Str;
+ };
+
+ var exports = createMethod();
+
+ if (COMMON_JS) {
+ module.exports = exports;
+ } else {
+ /**
+ * @method md5
+ * @description Md5 hash function, export to global in browsers.
+ * @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
+ * @returns {String} md5 hashes
+ * @example
+ * md5(''); // d41d8cd98f00b204e9800998ecf8427e
+ * md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6
+ * md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0
+ *
+ * // It also supports UTF-8 encoding
+ * md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07
+ *
+ * // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
+ * md5([]); // d41d8cd98f00b204e9800998ecf8427e
+ * md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e
+ */
+ root.md5 = exports;
+ if (AMD) {
+ define(function() {
+ return exports;
+ });
+ }
+ }
+})();
diff --git a/components/battery.vue b/components/battery.vue
new file mode 100644
index 0000000..beed2f6
--- /dev/null
+++ b/components/battery.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/components/myProgress.vue b/components/myProgress.vue
new file mode 100644
index 0000000..3110924
--- /dev/null
+++ b/components/myProgress.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/virtualList.vue b/components/virtualList.vue
new file mode 100644
index 0000000..cfd1e10
--- /dev/null
+++ b/components/virtualList.vue
@@ -0,0 +1,135 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/manifest.json b/manifest.json
index 0c696f7..fd5e4b1 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,258 +1,255 @@
{
- "name" : "疯子读书",
- "appid" : "__UNI__9788EB5",
- "description" : "疯子读书",
- "networkTimeout" : {
- "request" : 30000
- },
- "transformPx" : false,
- "icons" : [
- {
- "sizes" : "分辨率,192x192",
- "src" : "图片路径"
- }
- ],
- "versionName" : "1.2.56",
- "versionCode" : 1256,
- "app-plus" : {
- "compatible" : {
- "ignoreVersion" : true
- },
- "privacy" : {
- "prompt" : "template",
- "template" : {
- "title" : "用户协议和隐私政策",
- "message" : "请你务必审慎阅读、充分理解“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。
你可阅读《用户协议》和《隐私协议》了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
- "buttonAccept" : "同意",
- "buttonRefuse" : "暂不同意"
- }
- },
- "modules" : {
- "Payment" : {},
- "Share" : {},
- "Camera" : {},
- "VideoPlayer" : {},
- "OAuth" : {}
- },
- "distribute" : {
- "apple" : {
- "devices" : "universal"
- },
- // "UIBackgroundModes" : [ "audio" ]
- "android" : {
- "permissionPhoneState" : {
- "request" : "none",
- "prompt" : "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
- },
- "permissionExternalStorage" : {
- "request" : "none",
- "prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
- },
- "permissions" : [
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ],
- "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
- "minSdkVersion" : 21,
- "targetSdkVersion" : 30,
- "schemes" : "nuttyreading"
- },
- "sdkConfigs" : {
- "ad" : {},
- "maps" : {},
- "share" : {
- "weixin" : {
- "appid" : "wx47134a8f15083734",
- "UniversalLinks" : "https://verification.nuttyreading.com/uni-universallinks/__UNI__9788EB5/"
- }
- },
- "payment" : {
- "alipay" : {
- "__platform__" : [ "ios", "android" ]
- },
- "appleiap" : {},
- "weixin" : {
- "__platform__" : [ "ios", "android" ],
- "appid" : "wx47134a8f15083734",
- "UniversalLinks" : "https://verification.nuttyreading.com/uni-universallinks/__UNI__9788EB5/"
- }
- },
- "oauth" : {},
- "push" : {}
- },
- "splashscreen" : {
- "iosStyle" : "common",
- "androidStyle" : "default",
- "useOriginalMsgbox" : true
- },
- "ios" : {
- "dSYMs" : false,
- // "UIBackgroundModes" : [ "audio" ], // 背景播放音乐
- "capabilities" : {
- "entitlements" : {
- "com.apple.developer.associated-domains" : [ "applinks:verification.nuttyreading.com" ]
- }
- },
- "idfa" : false,
- "urltypes" : "nuttyreading",
- "urlschemewhitelist" : "everhealth,medicine,zmzm",
- "privacyDescription" : {
- "NSPhotoLibraryUsageDescription" : "为了给您提供修改头像、申诉反馈的图片上传",
- "NSCameraUsageDescription" : "为了给您提供修改头像、申诉反馈的图片上传"
- }
- },
- "icons" : {
- "android" : {
- "hdpi" : "unpackage/res/icons/72x72.png",
- "xhdpi" : "unpackage/res/icons/96x96.png",
- "xxhdpi" : "unpackage/res/icons/144x144.png",
- "xxxhdpi" : "unpackage/res/icons/192x192.png"
- },
- "ios" : {
- "appstore" : "unpackage/res/icons/1024x1024.png",
- "ipad" : {
- "app" : "unpackage/res/icons/76x76.png",
- "app@2x" : "unpackage/res/icons/152x152.png",
- "notification" : "unpackage/res/icons/20x20.png",
- "notification@2x" : "unpackage/res/icons/40x40.png",
- "proapp@2x" : "unpackage/res/icons/167x167.png",
- "settings" : "unpackage/res/icons/29x29.png",
- "settings@2x" : "unpackage/res/icons/58x58.png",
- "spotlight" : "unpackage/res/icons/40x40.png",
- "spotlight@2x" : "unpackage/res/icons/80x80.png"
- },
- "iphone" : {
- "app@2x" : "unpackage/res/icons/120x120.png",
- "app@3x" : "unpackage/res/icons/180x180.png",
- "notification@2x" : "unpackage/res/icons/40x40.png",
- "notification@3x" : "unpackage/res/icons/60x60.png",
- "settings@2x" : "unpackage/res/icons/58x58.png",
- "settings@3x" : "unpackage/res/icons/87x87.png",
- "spotlight@2x" : "unpackage/res/icons/80x80.png",
- "spotlight@3x" : "unpackage/res/icons/120x120.png"
- }
- }
- }
- },
- "compilerVersion" : 3,
- "nvueLaunchMode" : "fast",
- "splashscreen" : {
- "alwaysShowBeforeRender" : false
- },
- "nativePlugins" : {},
- "uniStatistics" : {
- "enable" : true
- }
- },
- // 5+App特有相关
- "quickapp" : {},
- // 快应用特有相关
- "mp-weixin" : {
- "setting" : {
- "urlCheck" : false,
- "es6" : true,
- "postcss" : true,
- "minified" : true
- },
- "usingComponents" : true,
- "appid" : "wxd3ba52b7661b36be",
- "permission" : {
- "scope.userLocation" : {
- "desc" : "你的位置信息将用于小程序位置接口的效果展示"
- }
- },
- "uniStatistics" : {
- "enable" : true
- }
- },
- "h5" : {
- "template" : "template.h5.html",
- "router" : {
- "mode" : "hash",
- "base" : "/uniappDemo/"
- },
- "optimization" : {
- "treeShaking" : {
- "enable" : true
- }
- },
- "uniStatistics" : {
- "enable" : true
- }
- },
- "_spaceID" : "mp-3614b80b-2d75-4462-a481-4998f8187274",
- "uniStatistics" : {
- "version" : "2",
- "enable" : true
- },
- "mp-alipay" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "mp-baidu" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "mp-jd" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "mp-kuaishou" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "mp-lark" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "mp-qq" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "mp-toutiao" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "quickapp-webview-huawei" : {
- "uniStatistics" : {
- "enable" : true
- }
- },
- "quickapp-webview-union" : {
- "uniStatistics" : {
- "enable" : true
- }
- }
+ "name": "疯子读书",
+ "appid": "__UNI__9788EB5",
+ "description": "疯子读书",
+ "networkTimeout": {
+ "request": 30000
+ },
+ "transformPx": false,
+ "icons": [{
+ "sizes": "分辨率,192x192",
+ "src": "图片路径"
+ }],
+ "versionName": "1.2.59",
+ "versionCode": 1259,
+ "app-plus": {
+ "compatible": {
+ "ignoreVersion": true
+ },
+ "privacy": {
+ "prompt": "template",
+ "template": {
+ "title": "用户协议和隐私政策",
+ "message": "请你务必审慎阅读、充分理解“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。
你可阅读《用户协议》和《隐私协议》了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
+ "buttonAccept": "同意",
+ "buttonRefuse": "暂不同意"
+ }
+ },
+ "modules": {
+ "Payment": {},
+ "Share": {},
+ "Camera": {},
+ "VideoPlayer": {},
+ "OAuth": {}
+ },
+ "distribute": {
+ "apple": {
+ "devices": "universal"
+ },
+ // "UIBackgroundModes" : [ "audio" ]
+ "android": {
+ "permissionPhoneState": {
+ "request": "none",
+ "prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
+ },
+ "permissionExternalStorage": {
+ "request": "none",
+ "prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
+ },
+ "permissions": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "abiFilters": ["armeabi-v7a", "arm64-v8a", "x86"],
+ "minSdkVersion": 21,
+ "targetSdkVersion": 30,
+ "schemes": "nuttyreading"
+ },
+ "sdkConfigs": {
+ "ad": {},
+ "maps": {},
+ "share": {
+ "weixin": {
+ "appid": "wx47134a8f15083734",
+ "UniversalLinks": "https://verification.nuttyreading.com/uni-universallinks/__UNI__9788EB5/"
+ }
+ },
+ "payment": {
+ "alipay": {
+ "__platform__": ["ios", "android"]
+ },
+ "appleiap": {},
+ "weixin": {
+ "__platform__": ["ios", "android"],
+ "appid": "wx47134a8f15083734",
+ "UniversalLinks": "https://verification.nuttyreading.com/uni-universallinks/__UNI__9788EB5/"
+ }
+ },
+ "oauth": {},
+ "push": {}
+ },
+ "splashscreen": {
+ "iosStyle": "common",
+ "androidStyle": "default",
+ "useOriginalMsgbox": true
+ },
+ "ios": {
+ "dSYMs": false,
+ // "UIBackgroundModes" : [ "audio" ], // 背景播放音乐
+ "capabilities": {
+ "entitlements": {
+ "com.apple.developer.associated-domains": ["applinks:verification.nuttyreading.com"]
+ }
+ },
+ "idfa": false,
+ "urltypes": "nuttyreading",
+ "urlschemewhitelist": "everhealth,medicine,zmzm",
+ "privacyDescription": {
+ "NSPhotoLibraryUsageDescription": "为了给您提供修改头像、申诉反馈的图片上传",
+ "NSCameraUsageDescription": "为了给您提供修改头像、申诉反馈的图片上传"
+ }
+ },
+ "icons": {
+ "android": {
+ "hdpi": "unpackage/res/icons/72x72.png",
+ "xhdpi": "unpackage/res/icons/96x96.png",
+ "xxhdpi": "unpackage/res/icons/144x144.png",
+ "xxxhdpi": "unpackage/res/icons/192x192.png"
+ },
+ "ios": {
+ "appstore": "unpackage/res/icons/1024x1024.png",
+ "ipad": {
+ "app": "unpackage/res/icons/76x76.png",
+ "app@2x": "unpackage/res/icons/152x152.png",
+ "notification": "unpackage/res/icons/20x20.png",
+ "notification@2x": "unpackage/res/icons/40x40.png",
+ "proapp@2x": "unpackage/res/icons/167x167.png",
+ "settings": "unpackage/res/icons/29x29.png",
+ "settings@2x": "unpackage/res/icons/58x58.png",
+ "spotlight": "unpackage/res/icons/40x40.png",
+ "spotlight@2x": "unpackage/res/icons/80x80.png"
+ },
+ "iphone": {
+ "app@2x": "unpackage/res/icons/120x120.png",
+ "app@3x": "unpackage/res/icons/180x180.png",
+ "notification@2x": "unpackage/res/icons/40x40.png",
+ "notification@3x": "unpackage/res/icons/60x60.png",
+ "settings@2x": "unpackage/res/icons/58x58.png",
+ "settings@3x": "unpackage/res/icons/87x87.png",
+ "spotlight@2x": "unpackage/res/icons/80x80.png",
+ "spotlight@3x": "unpackage/res/icons/120x120.png"
+ }
+ }
+ }
+ },
+ "compilerVersion": 3,
+ "nvueLaunchMode": "fast",
+ "splashscreen": {
+ "alwaysShowBeforeRender": false
+ },
+ "nativePlugins": {},
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ // 5+App特有相关
+ "quickapp": {},
+ // 快应用特有相关
+ "mp-weixin": {
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "postcss": true,
+ "minified": true
+ },
+ "usingComponents": true,
+ "appid": "wxd3ba52b7661b36be",
+ "permission": {
+ "scope.userLocation": {
+ "desc": "你的位置信息将用于小程序位置接口的效果展示"
+ }
+ },
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "h5": {
+ "template": "template.h5.html",
+ "router": {
+ "mode": "hash",
+ "base": "/uniappDemo/"
+ },
+ "optimization": {
+ "treeShaking": {
+ "enable": true
+ }
+ },
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "_spaceID": "mp-3614b80b-2d75-4462-a481-4998f8187274",
+ "uniStatistics": {
+ "version": "2",
+ "enable": true
+ },
+ "mp-alipay": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "mp-baidu": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "mp-jd": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "mp-kuaishou": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "mp-lark": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "mp-qq": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "mp-toutiao": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "quickapp-webview-huawei": {
+ "uniStatistics": {
+ "enable": true
+ }
+ },
+ "quickapp-webview-union": {
+ "uniStatistics": {
+ "enable": true
+ }
+ }
}
-// 小程序特有相关
-
+// 小程序特有相关
\ No newline at end of file
diff --git a/pages.json b/pages.json
index 4659840..19755dc 100644
--- a/pages.json
+++ b/pages.json
@@ -49,6 +49,15 @@
"navigationBarTitleText": "小说1-1"
}
},
+ {
+ "path": "pages/read/read",
+ "style": {
+ "navigationStyle": "custom",
+ "app-plus": {
+ "bounce": "none"
+ }
+ }
+ },
// {
// "path": "pages/eBook/1/bookComent",
// "style": {
diff --git a/pages/bookShop/commodityDetail copy.vue b/pages/bookShop/commodityDetail copy.vue
index ee206b2..1706320 100644
--- a/pages/bookShop/commodityDetail copy.vue
+++ b/pages/bookShop/commodityDetail copy.vue
@@ -14,6 +14,7 @@
+
¥{{productInfo.price}}
原价¥{{productInfo.activityPrice}}
diff --git a/pages/bookShop/commodityDetail.vue b/pages/bookShop/commodityDetail.vue
index 1be896b..87deaf0 100644
--- a/pages/bookShop/commodityDetail.vue
+++ b/pages/bookShop/commodityDetail.vue
@@ -21,6 +21,7 @@
-->
+
¥{{ productInfo.activityPrice }}
原价¥{{
diff --git a/pages/peanut/home.vue b/pages/peanut/home.vue
index 9ef9599..aa8179b 100644
--- a/pages/peanut/home.vue
+++ b/pages/peanut/home.vue
@@ -278,8 +278,9 @@
{{item.product_name}}
+
¥{{item.activityPrice}}
+ v-if="item.activityPrice && item.activityPrice > 0">¥{{item.activity_price}}
¥{{item.price}}
已售:{{item.sum_sales}} 件
@@ -1214,8 +1215,9 @@ background-color: #eee;
// max-width: 12.5%;
background-color: #dfeae2;
color: #0e583a;
- font-size: 32rpx;
- padding: 5px 3px;
+ font-size: 34rpx;
+ line-height: 42rpx;
+ padding: 5px 10px;
font-weight: bold;
display: block;
width: 100%;
@@ -1223,6 +1225,7 @@ background-color: #eee;
border-radius: 10rpx;
overflow: hidden;
text-align: center;
+ letter-spacing: 10rpx;
}
text:last-child {
diff --git a/pages/read/localread.vue b/pages/read/localread.vue
new file mode 100644
index 0000000..f4262ac
--- /dev/null
+++ b/pages/read/localread.vue
@@ -0,0 +1,1955 @@
+
+
+
+
+
+ 正在加载阅读器...
+
+
+
+ 章节名
+
+
+
+
+
+ 显示电量、页码
+
+
+
+ 章节名
+
+
+
+
+
+ 显示电量、页码
+
+
+
+ 章节名
+
+
+
+
+
+ 显示电量、页码
+
+
+
+
+
+
+
+
+ {{ bookName }}
+
+
+
+
+
+
+
+
+
+ {{ prePage.chapterName }}
+
+
+
+
+
+
+
+
+ 暂时不可阅读
+
+
+
+ {{ systemTimeStr }}
+
+ {{ prePage.pageNum + 1 }}/{{ prePage.totalPage }}
+
+
+
+
+
+
+
+
+
+ {{ curPage.chapterName }}
+
+
+
+
+ 暂时不可阅读
+
+
+
+ {{ systemTimeStr }}
+
+ {{ curPage.pageNum + 1 }}/{{ curPage.totalPage }}
+
+
+
+
+
+
+ {{ nextPage.chapterName }}
+
+
+
+
+ 暂时不可阅读
+
+
+ {{ systemTimeStr }}
+ {{ nextPage.pageNum + 1 }}/{{ nextPage.totalPage }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/read/read.vue b/pages/read/read.vue
new file mode 100644
index 0000000..0edc0ac
--- /dev/null
+++ b/pages/read/read.vue
@@ -0,0 +1,2055 @@
+
+
+
+
+
+ {{ showtips }}
+
+
+
+ 章节名
+
+
+
+
+
+ 显示电量、页码
+
+
+
+ 章节名
+
+
+
+
+
+ 显示电量、页码
+
+
+
+ 章节名
+
+
+
+
+
+ 显示电量、页码
+
+
+
+
+
+
+
+
+ {{ bookName }}
+
+
+
+
+
+
+
+
+
+ {{ prePage.chapterName }}
+
+
+
+
+
+
+
+
+ 暂时不可阅读
+
+
+
+ {{ systemTimeStr }}
+
+ {{ prePage.pageNum + 1 }}/{{ prePage.totalPage }}
+
+
+
+
+
+
+
+
+
+ {{ curPage.chapterName }}
+
+
+
+
+ 暂时不可阅读
+
+
+
+ {{ systemTimeStr }}
+
+ {{ curPage.pageNum + 1 }}/{{ curPage.totalPage }}
+
+
+
+
+
+
+ {{ nextPage.chapterName }}
+
+
+
+
+ 暂时不可阅读
+
+
+ {{ systemTimeStr }}
+ {{ nextPage.pageNum + 1 }}/{{ nextPage.totalPage }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/talkBook/talkBookDetail.vue b/pages/talkBook/talkBookDetail.vue
index 5e5a004..0907505 100644
--- a/pages/talkBook/talkBookDetail.vue
+++ b/pages/talkBook/talkBookDetail.vue
@@ -1,110 +1,190 @@
-
-
-
- {{talkBookDetail.title}}
-
-
-
-
-
-
-
-
-
- {{talkBookDetail.title}}
- {{bookInfo.author.authorName}}
- {{currentTime+'/'+duration}}秒
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- {{talkBookDetail.createTime}}
-
-
-
- {{contlike}}
-
- {{pTotal}}
-
-
-
- 觉得这本书还不错?
-
-
-
-
-
-
-
- {{bookInfo.name}}
- 作者:{{bookInfo.author.authorName}}
-
-
-
- 立即购买
-
-
-
-
-
+
-
-
-
-
-
-
-
- {{item.user.nickname}}
- 匿名用户
-
-
-
- {{formatTimeDifferenceFromT(item.createTime)}}
- 删除
-
-
-
+
+
+
+
+ {{
+ item.user.nickname
+ }}
+ 匿名用户
+
+
+
+ {{
+ formatTimeDifferenceFromT(item.createTime)
+ }}
+ 删除
+
+
+
-
-
-
-
- 暂无评论内容~
-
-
-
-
- 努力加载中
-
-
-
-
-
-
- 添加评论
-
-
+
+
+
+
+ 暂无评论内容~
+
+
+
+
+ 努力加载中
+
+
+
+
+
+
+ 添加评论
+
+
+
+
+
+
+
+ 提交
+
+
-
-
-
-
-
- 提交
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
\ No newline at end of file
+.video {
+ text-align: center;
+ margin: 30rpx 0;
+ #myVideo {
+ width: 100%;
+ }
+}
+
diff --git a/static/background0.jpg b/static/background0.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8f40f4914601ab8b490b8297608f6e0392468693
GIT binary patch
literal 7387
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
literal 0
HcmV?d00001
diff --git a/static/background1.jpg b/static/background1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..81b5a02951cbd0fbcc9c3fb859fe117f15b6020b
GIT binary patch
literal 2026
zcmeHG%Wl&^6dlJ%jSxb3$8zMZiin?a9#%~-b}F(kiqc3$>>PXASgAdhJt0okd=0a?p*yPbdgSujsD_gpA=bm%#+&Pnf%rC*iZWf#Z(Ca+{Rj{%A8{q7z
zH<<$l+@WC~fc%m@7!wlfq8O!u>*Em;JRFLd8;i0aiQur4#jZC&1dh;I5E=ZBckg)^
z_y&KXIg%4wXdFCWBx?wei0UVSf-GP
z!J9=@_|oY^3nvI_f>iUQh6Ee3AglFev-ub*k}QdmBFailZtAL{OA=ffPpc*VsXnle
zmbK{0;FpJ*&1S+(6>xGU%I$W$;82tr&8VgGh`3oTO7~X`HcGuDh)IAWSTMRHJS7HC
zJNloB`cP|r4aiWh>w*G;qAZkkQ4rD>`xcb~Pa
zmSU==U8mnsOR-j18++3bMP!BbH`vBjY$1d&rj>1!1h0{Ql;9AS2iAk_y{KFHmRNs#
zFZHchkv1b1*LvleS0SpM!d;7&F4nR~5!HG^MV)^K_e-e)|AIaqCjSE70Os~q*%-UF
zCA`8gbeI0?joUi;1>maSC-anLI8fmjmSge{z@d$8-hJuaElORF?NuNA5dnbvE0TW(
f_gIE