暂存
This commit is contained in:
parent
2bd2293384
commit
af8feb3fe7
30
common/env.js
Normal file
30
common/env.js
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
/**
|
||||||
|
* 项目环境配置文件
|
||||||
|
* 集中管理所有环境相关的配置参数
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 开发环境配置
|
||||||
|
const development = {
|
||||||
|
// API基础URL
|
||||||
|
// baseUrl: 'https://ydsapi.zpc-xy.com',
|
||||||
|
baseUrl: 'http://localhost:2015',
|
||||||
|
imageUrl: 'https://guyu-1308826010.cos.ap-shanghai.myqcloud.com',
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// 生产环境配置
|
||||||
|
const production = {
|
||||||
|
baseUrl: 'https://ydsapi.zpc-xy.com',
|
||||||
|
imageUrl: 'https://guyu-1308826010.cos.ap-shanghai.myqcloud.com',
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// 根据环境变量选择对应配置
|
||||||
|
let currentEnv = development;//production;//testing;
|
||||||
|
// 衍生配置
|
||||||
|
const config = {
|
||||||
|
...currentEnv,
|
||||||
|
apiBaseUrl: currentEnv.baseUrl + '/api/',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
||||||
8
common/server/config.js
Normal file
8
common/server/config.js
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
import request from '@/common/system/request';
|
||||||
|
|
||||||
|
export const getConfig = async () => {
|
||||||
|
let res = await request.get('Common/GetConfigV3', {});
|
||||||
|
return res.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
66
common/system/cacheService.js
Normal file
66
common/system/cacheService.js
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
/**
|
||||||
|
* 设置缓存,持久化到本地
|
||||||
|
* @param {String} key 缓存key
|
||||||
|
* @param {Object} value 缓存数据
|
||||||
|
*/
|
||||||
|
export const setCache = (key, value) => {
|
||||||
|
uni.setStorageSync(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取缓存
|
||||||
|
* @param {String} key 缓存key
|
||||||
|
* @returns {Object} 缓存数据
|
||||||
|
*/
|
||||||
|
export const getCache = (key) => {
|
||||||
|
return uni.getStorageSync(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除缓存
|
||||||
|
* @param {String} key 缓存key
|
||||||
|
*/
|
||||||
|
export const removeCache = (key) => {
|
||||||
|
uni.removeStorageSync(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地缓存
|
||||||
|
*/
|
||||||
|
let localCache = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置缓存,非持久化
|
||||||
|
* @param {String} key 缓存key
|
||||||
|
* @param {Object} value 缓存数据
|
||||||
|
* @param {Number} time 缓存时间,秒
|
||||||
|
*/
|
||||||
|
export const setLocalStorage = (key, value, time = 0) => {
|
||||||
|
localCache[key] = {
|
||||||
|
value: value,
|
||||||
|
expireTime: time > 0 ? Date.now() + time * 1000 : 0,
|
||||||
|
createTime: Date.now()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取缓存,非持久化
|
||||||
|
* @param {String} key 缓存key
|
||||||
|
* @returns {Object} 缓存数据
|
||||||
|
*/
|
||||||
|
export const getLocalStorage = (key) => {
|
||||||
|
if (localCache[key]) {
|
||||||
|
if (localCache[key].expireTime > 0 && localCache[key].expireTime > Date.now()) {
|
||||||
|
return localCache[key].value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除缓存,非持久化
|
||||||
|
* @param {String} key 缓存key
|
||||||
|
*/
|
||||||
|
export const removeLocalStorage = (key) => {
|
||||||
|
delete localCache[key];
|
||||||
|
}
|
||||||
204
common/system/request.js
Normal file
204
common/system/request.js
Normal file
|
|
@ -0,0 +1,204 @@
|
||||||
|
/**
|
||||||
|
* 网络请求工具类
|
||||||
|
* 封装统一的网络请求方法
|
||||||
|
*/
|
||||||
|
|
||||||
|
import EnvConfig from '@/common/env.js';
|
||||||
|
import md5 from 'js-md5';
|
||||||
|
import { getLocalStorage, setLocalStorage } from './cacheService';
|
||||||
|
import qs from 'qs';
|
||||||
|
class request {
|
||||||
|
/**
|
||||||
|
* 生成唯一的nonce值
|
||||||
|
* @returns {String} nonce值
|
||||||
|
*/
|
||||||
|
static generateNonce() {
|
||||||
|
return md5(Date.now() + Math.random().toString(36).substring(2, 15));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建签名
|
||||||
|
* @param {Object} data 请求数据
|
||||||
|
* @param {String} host 主机名
|
||||||
|
* @returns {Object} 带签名的数据和参数字符串
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static _createSignature(data, host) {
|
||||||
|
// 添加时间戳
|
||||||
|
data.timestamp = Math.floor(Date.now() / 1000);
|
||||||
|
// 添加nonce随机字符串
|
||||||
|
data.nonce = request.generateNonce();
|
||||||
|
|
||||||
|
// 按照键名对参数进行排序
|
||||||
|
const sortedParams = {};
|
||||||
|
Object.keys(data).sort().forEach(key => {
|
||||||
|
sortedParams[key] = data[key];
|
||||||
|
});
|
||||||
|
|
||||||
|
// 组合参数为字符串
|
||||||
|
let signStr = '';
|
||||||
|
for (const key in sortedParams) {
|
||||||
|
if (typeof sortedParams[key] === 'object') {
|
||||||
|
signStr += key + '=' + JSON.stringify(sortedParams[key]) + '&';
|
||||||
|
} else {
|
||||||
|
signStr += key + '=' + sortedParams[key] + '&';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取时间戳,组合为密钥
|
||||||
|
const timestamp = data.timestamp;
|
||||||
|
const appSecret = host + timestamp;
|
||||||
|
|
||||||
|
// 添加密钥并去除最后的&
|
||||||
|
signStr = signStr.substring(0, signStr.length - 1) + appSecret;
|
||||||
|
|
||||||
|
// 使用MD5生成签名
|
||||||
|
const sign = md5(signStr);
|
||||||
|
data.sign = sign;
|
||||||
|
|
||||||
|
return { data, signStr };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建请求URL
|
||||||
|
* @param {String} url 请求路径
|
||||||
|
* @returns {Object} 包含请求URL和主机名的对象
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
static _buildRequestUrl(url) {
|
||||||
|
let requestUrl = '';
|
||||||
|
|
||||||
|
if (url.startsWith('http://') || url.startsWith('https://')) {
|
||||||
|
// 如果是完整的URL,直接使用
|
||||||
|
requestUrl = url;
|
||||||
|
} else {
|
||||||
|
// 否则拼接基础URL和相对路径
|
||||||
|
// 确保基础URL以/结尾,而请求路径不以/开头
|
||||||
|
const apiBaseUrl = EnvConfig.apiBaseUrl;
|
||||||
|
const baseUrlWithSlash = apiBaseUrl.endsWith('/') ? apiBaseUrl : apiBaseUrl + '/';
|
||||||
|
let routeMap = url;
|
||||||
|
const path = routeMap.startsWith('/') ? routeMap.substring(1) : routeMap;
|
||||||
|
requestUrl = baseUrlWithSlash + path;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用正则表达式从URL中提取主机名
|
||||||
|
const hostRegex = /^(?:https?:\/\/)?([^\/]+)/i;
|
||||||
|
const matches = requestUrl.match(hostRegex);
|
||||||
|
const host = matches && matches[1] ? matches[1] : 'localhost';
|
||||||
|
|
||||||
|
return { requestUrl, host };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送请求
|
||||||
|
* @param {String} url 请求地址
|
||||||
|
* @param {Object} fromData 请求数据
|
||||||
|
* @param {String} method 请求方式
|
||||||
|
* @param {Boolean} showLoading 是否显示加载提示
|
||||||
|
* @returns {Promise} 返回请求Promise
|
||||||
|
*/
|
||||||
|
static request(url, fromData = {}, method = 'POST', showLoading = false) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
// 使用传入的method而不是重新声明
|
||||||
|
const requestMethod = method.toUpperCase();
|
||||||
|
const token = uni.getStorageSync('token');
|
||||||
|
let data = { ...fromData }; // 创建数据的深拷贝,避免修改原数据
|
||||||
|
|
||||||
|
// 构建请求URL和提取主机名
|
||||||
|
const { requestUrl, host } = request._buildRequestUrl(url);
|
||||||
|
|
||||||
|
// 显示加载提示
|
||||||
|
if (showLoading) {
|
||||||
|
uni.showLoading({
|
||||||
|
title: '正在加载中...',
|
||||||
|
mask: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建签名并准备请求数据和头信息
|
||||||
|
const { data: signedData } = request._createSignature(data, host);
|
||||||
|
data = signedData;
|
||||||
|
// 根据请求方法设置不同的headers
|
||||||
|
const header = {
|
||||||
|
Authorization: 'Bearer ' + token,
|
||||||
|
'content-type': 'application/json'
|
||||||
|
};
|
||||||
|
|
||||||
|
const startDate = Date.now();
|
||||||
|
|
||||||
|
// 发起网络请求
|
||||||
|
uni.request({
|
||||||
|
url: requestUrl,
|
||||||
|
method: requestMethod,
|
||||||
|
header: header,
|
||||||
|
data: data,
|
||||||
|
timeout: 30000, // 设置30秒超时
|
||||||
|
success: res => {
|
||||||
|
const endDate = Date.now();
|
||||||
|
console.log(requestUrl, "请求消耗时间", endDate - startDate);
|
||||||
|
resolve(res);
|
||||||
|
},
|
||||||
|
fail: e => {
|
||||||
|
console.error('网络请求失败:', e);
|
||||||
|
uni.showToast({
|
||||||
|
title: e.errMsg || '发送请求失败,请稍后再试!',
|
||||||
|
icon: 'none'
|
||||||
|
});
|
||||||
|
reject(e);
|
||||||
|
},
|
||||||
|
complete: () => {
|
||||||
|
if (showLoading) {
|
||||||
|
uni.hideLoading();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送GET请求
|
||||||
|
* @param {String} url 请求地址
|
||||||
|
* @param {Object} data 请求参数
|
||||||
|
* @param {Boolean} showLoading 是否显示加载提示
|
||||||
|
* @returns {Promise} 返回请求Promise
|
||||||
|
*/
|
||||||
|
static get(url, data = {}, showLoading = false) {
|
||||||
|
return request.request(url, data, 'GET', showLoading);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送POST请求
|
||||||
|
* @param {String} url 请求地址
|
||||||
|
* @param {Object} data 请求参数
|
||||||
|
* @param {Boolean} showLoading 是否显示加载提示
|
||||||
|
* @returns {Promise} 返回请求Promise
|
||||||
|
*/
|
||||||
|
static post(url, data = {}, showLoading = false) {
|
||||||
|
return request.request(url, data, 'POST', showLoading);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送get请求,如果缓存存在,则返回缓存数据,否则发送请求,并缓存数据
|
||||||
|
* @param {String} url 请求地址
|
||||||
|
* @param {Object} data 请求参数
|
||||||
|
* @param {Number} time 缓存时间,秒
|
||||||
|
* @param {Boolean} showLoading 是否显示加载提示
|
||||||
|
* @returns {Promise} 返回请求Promise
|
||||||
|
*/
|
||||||
|
static async getOrCache(url, data = {}, time = 300, showLoading = false) {
|
||||||
|
const cacheKey = 'cache_' + url + '_' + qs.stringify(data);
|
||||||
|
// console.log('getOrCache', cacheKey, '查询缓存');
|
||||||
|
const cacheData = getLocalStorage(cacheKey);
|
||||||
|
if (cacheData) {
|
||||||
|
console.log('getOrCache', cacheKey, '缓存命中');
|
||||||
|
return cacheData;
|
||||||
|
}
|
||||||
|
|
||||||
|
const res = await request.request(url, data, 'GET', showLoading);
|
||||||
|
setLocalStorage(cacheKey, res, time);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default request;
|
||||||
|
|
@ -109,3 +109,20 @@ export function hideLoading() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let os = '';
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export function getOS() {
|
||||||
|
if (os != '') {
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
// #ifdef APP-PLUS
|
||||||
|
const systemInfo = uni.getSystemInfoSync();
|
||||||
|
return systemInfo.platform === 'ios' ? 'ios' : 'android';
|
||||||
|
// #endif
|
||||||
|
|
||||||
|
return 'mp';
|
||||||
|
}
|
||||||
7
package-lock.json
generated
7
package-lock.json
generated
|
|
@ -8,6 +8,7 @@
|
||||||
"@dcloudio/uni-ui": "^1.5.7",
|
"@dcloudio/uni-ui": "^1.5.7",
|
||||||
"crypto-js": "^4.2.0",
|
"crypto-js": "^4.2.0",
|
||||||
"js-md5": "^0.8.3",
|
"js-md5": "^0.8.3",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
"qs": "^6.14.0"
|
"qs": "^6.14.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
@ -685,6 +686,12 @@
|
||||||
"url": "https://github.com/sponsors/antfu"
|
"url": "https://github.com/sponsors/antfu"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/lodash": {
|
||||||
|
"version": "4.17.21",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||||
|
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/magic-string": {
|
"node_modules/magic-string": {
|
||||||
"version": "0.30.17",
|
"version": "0.30.17",
|
||||||
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
|
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
"@dcloudio/uni-ui": "^1.5.7",
|
"@dcloudio/uni-ui": "^1.5.7",
|
||||||
"crypto-js": "^4.2.0",
|
"crypto-js": "^4.2.0",
|
||||||
"js-md5": "^0.8.3",
|
"js-md5": "^0.8.3",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
"qs": "^6.14.0"
|
"qs": "^6.14.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
||||||
14
pages.json
14
pages.json
|
|
@ -1,18 +1,17 @@
|
||||||
{
|
{
|
||||||
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
||||||
|
{
|
||||||
|
"path": "pages/index/index",
|
||||||
|
"style": {
|
||||||
|
"navigationStyle": "custom"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/home/home-page",
|
"path": "pages/home/home-page",
|
||||||
"style": {
|
"style": {
|
||||||
"navigationStyle": "custom",
|
"navigationStyle": "custom",
|
||||||
"navigationBarTitleText": ""
|
"navigationBarTitleText": ""
|
||||||
}
|
}
|
||||||
}, {
|
|
||||||
"path": "pages/index/index",
|
|
||||||
"style": {
|
|
||||||
"navigationStyle": "custom",
|
|
||||||
"navigationBarTitleText": ""
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "pages/bags/bags-page",
|
"path": "pages/bags/bags-page",
|
||||||
|
|
@ -78,7 +77,6 @@
|
||||||
"backgroundColor": "#F8F8F8"
|
"backgroundColor": "#F8F8F8"
|
||||||
},
|
},
|
||||||
"uniIdRouter": {},
|
"uniIdRouter": {},
|
||||||
|
|
||||||
"tabBar": {
|
"tabBar": {
|
||||||
"color": "#FFFDF1",
|
"color": "#FFFDF1",
|
||||||
"selectedColor": "#333333",
|
"selectedColor": "#333333",
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,24 @@
|
||||||
<template>
|
<template>
|
||||||
<view class="content">
|
<view class="content">
|
||||||
|
<image src="/static/bg.png" style="width: 100vw; height: 100vh;"></image>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup>
|
||||||
export default {
|
import { getConfig } from '@/common/server/config';
|
||||||
data() {
|
onLoad(async () => {
|
||||||
return {
|
let res = await getConfig();
|
||||||
|
console.log(res);
|
||||||
}
|
sleep(200);
|
||||||
},
|
|
||||||
onLoad() {
|
|
||||||
|
|
||||||
},
|
})
|
||||||
methods: {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.content {
|
.content {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
BIN
static/bg.png
Normal file
BIN
static/bg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 257 KiB |
|
|
@ -31,18 +31,10 @@ export default defineConfig({
|
||||||
return `https://guyu-1308826010.cos.ap-shanghai.myqcloud.com/${path}`
|
return `https://guyu-1308826010.cos.ap-shanghai.myqcloud.com/${path}`
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
// code.replace(
|
|
||||||
// /@\/?([^\s"'()]+)/g,
|
|
||||||
// (match) => {
|
|
||||||
// count++
|
|
||||||
// return 'https://guyu-1308826010.cos.ap-shanghai.myqcloud.com/' + match
|
|
||||||
// .replace(/^http:\/\/@\/?/, '')
|
|
||||||
// }
|
|
||||||
// )
|
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
console.log(id, `本次替换了 ${count} 个图片地址`)
|
console.log(id, `本次替换了 ${count} 个图片地址`)
|
||||||
}
|
}
|
||||||
// console.log(id, fcode)
|
// console.log(id)
|
||||||
return {
|
return {
|
||||||
code: replacedCode,
|
code: replacedCode,
|
||||||
map: null
|
map: null
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user