diff --git a/common/env.js b/common/env.js
index adaa76e..ef93c37 100644
--- a/common/env.js
+++ b/common/env.js
@@ -12,7 +12,9 @@ const development = {
// 登录页面URL
loginPage: 'https://testapi.zfunbox.cn/login.html',
// 微信APPID
- wxAppId: 'wx0e33d80d35e4a3b1'
+ wxAppId: 'wx0e33d80d35e4a3b1',
+ routeMapSecretKey: 'g6R@9!zB2fL#1cVm',
+ normalizeResponseKeys: 'g6R@9!zB2fL#1cVm'
};
// 生产环境配置
@@ -21,21 +23,27 @@ const production = {
baseUrl: 'https://api.zfunbox.cn',
imageUrl: 'https://image.zfunbox.cn',
loginPage: 'https://api.zfunbox.cn/login.html',
- wxAppId: 'wx0e33d80d35e4a3b1'
+ wxAppId: 'wx0e33d80d35e4a3b1',
+ routeMapSecretKey: 'g6R@9!zB2fL#1cVm',
+ normalizeResponseKeys: 'g6R@9!zB2fL#1cVm'
};
const production_wz = {
// baseUrl: 'https://youda.zfunbox.cn',
baseUrl: 'https://youda.zfunbox.cn',
imageUrl: 'https://image.zfunbox.cn',
loginPage: 'https://youda.zfunbox.cn/login.html',
- wxAppId: 'wx0e33d80d35e4a3b1'
+ wxAppId: 'wx0e33d80d35e4a3b1',
+ routeMapSecretKey: 'g6R@9!zB2fL#1cVm',
+ normalizeResponseKeys: 'g6R@9!zB2fL#1cVm'
};
// 测试环境配置
const testing = {
baseUrl: 'https://testapi.zfunbox.cn',
imageUrl: 'https://image.zfunbox.cn',
loginPage: 'https://testapi.zfunbox.cn/login.html',
- wxAppId: 'wx0e33d80d35e4a3b1'
+ wxAppId: 'wx0e33d80d35e4a3b1',
+ routeMapSecretKey: 'g6R@9!zB2fL#1cVm',
+ normalizeResponseKeys: 'g6R@9!zB2fL#1cVm'
};
diff --git a/common/request.js b/common/request.js
index f5952e3..3c9a037 100644
--- a/common/request.js
+++ b/common/request.js
@@ -9,6 +9,8 @@ import CryptoJS from 'crypto-js';
import { apiWhiteList } from '@/common/config.js'
import RouterManager from '@/common/router.js'
import { platform } from '@/common/platform/PlatformFactory'
+import { normalizeResponseKeys, getRouteMap } from '@/common/routeMap.js'
+// import route_map from '@/common/route_map.js'
class RequestManager {
// 缓存对象
static cache = {
@@ -141,8 +143,9 @@ class RequestManager {
} else {
// 否则拼接基础URL和相对路径
// 确保基础URL以/结尾,而请求路径不以/开头
- const baseUrlWithSlash = apiBaseUrl.endsWith('/') ? apiBaseUrl : apiBaseUrl + '/'
- const path = url.startsWith('/') ? url.substring(1) : url
+ const baseUrlWithSlash = apiBaseUrl.endsWith('/') ? apiBaseUrl : apiBaseUrl + '/';
+ let routeMap = getRouteMap(url);
+ const path = routeMap.startsWith('/') ? routeMap.substring(1) : routeMap;
requestUrl = baseUrlWithSlash + path
}
@@ -247,7 +250,7 @@ class RequestManager {
header: header,
data: data,
success: res => {
- res = RequestManager.normalizeResponseKeys(res);
+ res = normalizeResponseKeys(res);
console.log("res.data.status", res.data.status)
var pages = getCurrentPages()
if (res.data.status == 1) {
@@ -397,72 +400,7 @@ class RequestManager {
Loading: !showLoading
})
}
- /**
- * 转换接口返回的字段名为统一结构
- * 支持安卓特有字段 => 通用字段
- *
- * @param {Object} res 接口返回的数据对象
- * @returns {Object} 处理后的对象(直接修改原对象)
- */
- static normalizeResponseKeys(res) {
- if (!res || typeof res !== 'object') return res;
- // 安全处理 res.data
- if (!res.data || typeof res.data !== 'object') {
- res.data = {};
- }
-
- // 将安卓专属字段映射为通用字段
- if (res.data.ret != null) {
- res.data.status = res.data.ret;
- }
-
- if (res.data.note != null) {
- res.data.msg = res.data.note;
- }
-
- // 解密 payload 字段(如果存在)
- if (res.data.payload != null && typeof res.data.payload === 'string') {
- try {
- const base64EncryptedData = res.data.payload;
-
- // 先 base64 解码(CryptoJS 需要的是 WordArray)
- const encryptedHexStr = CryptoJS.enc.Base64.parse(base64EncryptedData);
-
- // 解密 key 和 iv
- const secretKey = 'g6R@9!zB2fL#1cVm';
- const key = CryptoJS.enc.Utf8.parse(secretKey);
- const iv = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(secretKey).toString().substring(0, 16));
-
- // 进行解密
- const decrypted = CryptoJS.AES.decrypt(
- { ciphertext: encryptedHexStr },
- key,
- {
- iv: iv,
- mode: CryptoJS.mode.CBC,
- padding: CryptoJS.pad.Pkcs7
- }
- );
-
- const decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
- try {
- res.data.data = JSON.parse(decryptedText);
- } catch (e) {
- res.data.data = decryptedText;
- }
- } catch (e) {
- console.error('解密 payload 失败:', res.data.payload, e);
- res.data.data = null; // 解密失败时给 null 或原值
- }
- }
-
- if (res.data.ts != null) {
- res.data.timestamp = res.data.ts;
- }
-
- return res;
- }
}
export default RequestManager;
\ No newline at end of file
diff --git a/common/routeMap.js b/common/routeMap.js
new file mode 100644
index 0000000..01f2c8b
--- /dev/null
+++ b/common/routeMap.js
@@ -0,0 +1,121 @@
+import CryptoJS from 'crypto-js'
+import EnvConfig from './env'
+
+let routeMapSecretKey = EnvConfig.routeMapSecretKey;
+let normalizeSecretKeys = EnvConfig.normalizeResponseKeys;
+/**
+ * 解密 route_map 字符串
+ * @param {string} encryptedBase64 加密后的 Base64 字符串
+ * @param {string} secretKey 与后端一致的密钥(16字节)
+ * @returns {Object|null} 解密后的 JSON 对象(映射表),失败则为 null
+ */
+export function decryptRouteMap(encryptedBase64, secretKey = '') {
+ if (secretKey == '') {
+ secretKey = routeMapSecretKey;
+ }
+ try {
+ // 与 PHP 中 substr(md5(secretKey), 0, 16) 相同
+ const iv = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(secretKey).toString().substring(0, 16))
+ const key = CryptoJS.enc.Utf8.parse(secretKey)
+
+ // base64 解码
+ const encryptedHex = CryptoJS.enc.Base64.parse(encryptedBase64)
+
+ // 解密
+ const decrypted = CryptoJS.AES.decrypt({ ciphertext: encryptedHex }, key, {
+ iv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ })
+
+ const decryptedText = decrypted.toString(CryptoJS.enc.Utf8)
+ return JSON.parse(decryptedText)
+ } catch (e) {
+ console.error('❌ 解密失败:', e)
+ return null
+ }
+}
+
+/**
+ * 解密 payload 字段
+ * @param {Object} res 接口返回的数据对象
+ * @returns {Object} 处理后的对象(直接修改原对象)
+ */
+export function normalizeResponseKeys(res) {
+ if (!res || typeof res !== 'object') return res;
+
+ // 安全处理 res.data
+ if (!res.data || typeof res.data !== 'object') {
+ res.data = {};
+ }
+
+ // 将安卓专属字段映射为通用字段
+ if (res.data.ret != null) {
+ res.data.status = res.data.ret;
+ }
+
+ if (res.data.note != null) {
+ res.data.msg = res.data.note;
+ }
+
+ // 解密 payload 字段(如果存在)
+ if (res.data.payload != null && typeof res.data.payload === 'string') {
+ try {
+ const base64EncryptedData = res.data.payload;
+
+ // 先 base64 解码(CryptoJS 需要的是 WordArray)
+ const encryptedHexStr = CryptoJS.enc.Base64.parse(base64EncryptedData);
+
+ // 解密 key 和 iv
+ const secretKey = normalizeSecretKeys;
+ const key = CryptoJS.enc.Utf8.parse(secretKey);
+ const iv = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(secretKey).toString().substring(0, 16));
+
+ // 进行解密
+ const decrypted = CryptoJS.AES.decrypt(
+ { ciphertext: encryptedHexStr },
+ key,
+ {
+ iv: iv,
+ mode: CryptoJS.mode.CBC,
+ padding: CryptoJS.pad.Pkcs7
+ }
+ );
+
+ const decryptedText = decrypted.toString(CryptoJS.enc.Utf8);
+ try {
+ res.data.data = JSON.parse(decryptedText);
+ } catch (e) {
+ res.data.data = decryptedText;
+ }
+ } catch (e) {
+ console.error('解密 payload 失败:', res.data.payload, e);
+ res.data.data = null; // 解密失败时给 null 或原值
+ }
+ }
+
+ if (res.data.ts != null) {
+ res.data.timestamp = res.data.ts;
+ }
+
+ return res;
+}
+
+const routeMapText = 'f8a8sQn8JXoLR93kQKNs0Mtldb/lfXdxd5Po+fmAL61dD5mhO6Osy+aGE6uqKBTEoI3MFA9aFHS11yGNicJ+N3tXUV7Z2t92en0U5iYRqv9AJLr/u5Z7AdK7/xFWw7UygbnGYzU8zRVAeOFDMnYvqOPEe2mBnlCtaOEjT2oiOQ3C+9AePJSWshcC5ewJJEmZjzRILDOf/X2CrB8sVFamWBMOhBnSvbXBPC5XaViv5vSmE+pIHeQm8Twx8Pskk6Ib9C54wLMpf+oFvcir3ZCOXx7DptQMAjRhI1lUZEOCtr2/VoVySe7IaGLH9BGMsxlDykMbpBy5BUOq/LjTHqt10uWCD/NICFFVGGzD9SL2liqpgimC8IOOKWuTVG0AAbGKoR3vOMgHNU4gGrrWFsot9sBVI44iJjelVSMK06yZ7d9HUw/eT3xdJDZTN8/lZE3OpX8ahnFLvGf1AeX5daMZs2lJ+GzKPVRI4EpbqPRiOojQcANRJC478sP3wqBBbRVeopahaRzu6hqDtDjzcH1MtUV95KmPzfLQAwtXgV/iLfwNXdu4epdnGtUlEm1/LQzYX9Ih12G6vTApCGk/BE/j/ylPNjP5xnjw/aeu8p6eLdZvRg1NpoYwKDteRCICm9g/RSnjTd2+UC/+hUvhVuk8F0H8BFDNx/rlBCIlEInu5zaQdzyqtWKMVqlfqaYTjIJRdhOpRlIdk4p6FkWMNVjJab9n3jPIQCg2bxu08Yuhc5+jw/8TB8SomGVawBoVnOV1vG61OaizqAssu004jCjIHTCIFK0QVGjvi/WQIJdJ2MuMNa7SwE5MQcTWr+YVxRphDWctp8+qVMvuac9KdSmYJk6Q6o6PfsWI7DcJUiOrl0ufPp6hKpqUcwhFU2a+MAeMjl4wOQE8oRnoWoG3gy3z6dI1cQ/xxsiohGfzqjhFxNhn+s9rLZhjtWbn6vxjxEDf2MYGg+2cX/fA8x/IwRVbcPOpdWipu6wspOX9F8oMZrIMlD2mIKwbFic+o12KA/HGH/DIVgURluk6d1N0+8fvo7fEGtgU4d+WD/8tSCLhOEksQsLwzJ7JBgNNb5p4hM/AvwdoT/aLoBUGM+dYyQber4vFAX4CaNvy4gikVWVUwTuTaYIN0HMM2JXKwwL9ZD2jZT7RAL+F0j5c14YgB+5yw81SZV+EubQGA0D8U9rbRHG7+J+xEglpqnJhwHppXe2hAAy+wuGLoH0qnQsIXJFtVQmpaPIno5B9JITzIZNFwMi6BSXvh3lSM2SnK1M79LdmTg8nV6ETtTFL8THWfymZVEsTrxKFZ/xPNSj9/E18WCwlLzoprMfvLlMkIY9FqNe4uS/Fyuron9Ij1hn8XoUSIW5I80njEsWRijQ0x95E33NqtUK5KJ3MY4jLx4auj3BZvOvKzU14IqQogfhswwvpEhpCvjt/3KUieutcrBY6/f7tpj3BFwtRFCVbHsQVNzRR/zAAtgZ47BjtPBG29Cx/a4RxwcWPRGh5z6MbUnJIUfu6LsV8Hi/YM1erMvE8EfWFSKiTHSH6ZUhwWdnZY1id3gGyqgWhivptwI4MQZvP8cJZfojVzxhdhahTPq2YXB686qy0HEPme6UEZZtXKYhg07vsO6pP0S2hQ2A3e1aH9IWvMd7W8eoXojOG1HOoXXctIKmz7j2k1+4RSPhJ2WAYUn8tLwGdXDv8rkBjOSLRRAVXdGgmwI3pUgJYTsBD+C7SfFjj5DaaD0hHSFS+SnAS5/lUZmxF32Ixy5l2JQFD7sal8O/iid6ghANGa2jignd3FA8mXyq81SbyDCyUnEQqrnQdGKb2AbZi4QV3MgLvDtkLNJCjBcxMQLuvCtcRGaPtF81ZpCVpeq7b6AeeCJ0TfwlVzVy4pcx9exhuItHz7dT+KKlvCEaPVfAjSU2rF+/sashsr3XIaC6zcDzojCu5k80hvcRubOxdTo2Vfa7zH+IL0STvjHsXGlsWnx0hwW3sQvfxwGG3CWlKHsPF9e3X2giQ4hl25+NWBUzdnPSVWdNEt57fowIBu16nBf07ONM9CjCM9Dutd95freyinHiJytDRZWBOetejXmDiznrxaECZqvOoAodApgHNJPqgEYMSOkAKzRmvXTmOUeM/a2W74h+T9WBsBsjF6RfGfFBr5Cmt0/7k8M0WmmxZhyWJQmyb3obcuHmEMnA15cq9bcsv6HsN6Xs2IvOOUMt4V0Uff7SsjwTOLJ90YGcdrTQlwZkXSS6jlXP0iiZAl4clreq7P94pWBG7ttE0nmqhZz5FjJeSqJh5KJS99huHzoqwy+HZu+sir/yGvxg0OHd/1CiLlN9ovwpyRBS3toTP6yzyzPvCDn/Jl+BC9ZRpWf5x03RMbUdX97Ywp/OoBfodNP/EWaf2M0tSQmW3pvC2JNm7nxDERvjtfyghFZA6sP8aarmSeQwA0qyjvl6Yk3q7HgnMxfJljXwUbx42AiBkcOjloZVtianfNNwcCo6wNPZ2/Kt5cHSmE6x6CaWbejar4OfLGpD2FN7KLpOu+eQm15V/Sm6gu/i3z5ObnEFArrEqojPIafbAynXf+9nCeUjT4lTdQEtPPRtGAlBp+9HiyrEMivULiUAuTbDAidqPvLzSm4+/Bqs27cUUUdzVNxgzCFvpoXfa6brs2JdXe0sNRiUPBYGeEVdu/0Hg3uEs7Se4xv4mHx8/UGbBhjnI3IwFBTP8lLjmuBnPPSUZzsQl8NSNOlbX7oc0cYMFkDlC7zfc+BOAyW2uyPbgmffy5z/62igFulefWUrPFXlw0FuCvBzwv8jZ6X5xReQbGGfQIKTU1pPJinXFPdOBjdPzf7AA0quQTdQKYVFOnyEZTYjCWV+fN42g0oRr1fSWlyWKf98BObTnfeWPXHOFJ7AFWnGj3FupPwb+ig9U/975QL1IUA9eh7ZT8mAtKOmkD/9HJGKJFVuX2UdmhmuvtipNKn2ffQ0V8rOGqK5IaOv6OsGoL2u9PNuiZdCsPs+Gmc9RG1u1xVoPzjA/ojUcPd5cxwx2e+p9evEZ9DIFLpwszwoHrcu55IL5xaEv3wUgigu3dyRovK/DepvHbvATL7xKYn19ajrBzaXdfLGwhYQvEKq8sW7laGfMmNLX8Elzlo/GxddaRaDJNXtjkfYocFngViyHFPeD8TkOgrkB5GL1MbIgYpoq92i5UvmfPOZ2nqr3mZBGd23lld+CSIMUMlVsDr/pmbn78SBBfYKPLyi9kr2Wrclp5cwN+U0Ix5dH8uTIvh2GZt0Hbar08/bljXd9ZUrI70xByN781twq1nfm3fZ/kq0uCm5Q9zk1yJfCoLXM5e2cdwzNHDd1G5/EKHebqn6DxPCx0nGy684azRsKipoqAPpd8KQc4hA8EdshQZvyOr1ihSU3MdBYHt/y3JyTxR26miFznC0DcxVpt78Tnu/UHLZO2ysSw9GvaQevb9B16SRP4+gb8N0NyZuYlL/WLpdWtMC5Z5xMkBTTFCMdk3C95RNrtQb5Buv3HDR1QH5/4lrtfGeFFmk76uunsdUem5Rcq38MK4jEzzMeDhI7E0fTU/ru/bSu4llGwWQnwgDotpdsM2YhtVT8dh1GTiffv0ZYD5jD4xt8PuwfXZx2ezV+YYlMIeCPY/GdRzaGr534OuDCzFhUjLPZWOcJ70Wy/GjazOHBuxMa8eP5MIUOCuMKWcBs0uLZtcsvcbaavjjX6EXtLlv50eUPTYFfuG7LyRqqXwdX5m1V2pgzDiknbHy1S21/aiUNzHeOEP5emX/e0UEKivBIN52DRJF64M/tdAPeDRUOAXD/DCUFjR8C00p+fKPa36FYoyvhnIp5SieFCjOppVqRpQiVqy+jwF2CMlf73gAd+6zWQDkclIQq545q5Xkpii7rRvVDfkFVtF6ShSCnG3PAAvVkPt59f1Yu9Z4YY4mkwnZhX/NP2am9ASszpeWeq0+bwQ07YuNSGWJLU1iRSMkHEHS9cd8w6O4dUEQDrDHy08w+9I0wT/BxYXDNslhfoRWNXjthMicBzDiUlQbrMdr5RT6HFnA9j4wPOsFYArBBx+N510VD9e2aU6ct97mALX3BE0DjCEyD5a/LFAXxGoKJTK2Zj2y5I5jXI/UQp0hXtdVc1JnapMGjY1tvdcWV55Uo5y+P3ACQoxV461ekBaYe3intCUNlXVbLUlrEg1+0Op5WWFZ2+l7zBslWW6k8oNX+2jLwyxCi8KsZXVdbgmwQ1RcGtmEcPB8DvztUzA790kZ81DyuFZ6qGt7Qh7W5csCWVJ62M2s3XfrbO/EsZ17Yc8TdL4hIHahJ1I63WTVazM2yytZAtkZOo0GoHhR1+u3YxUPiLB8TwgESOUhrtjbnAThCVN8ul0M7MhBsxki4tYrrInoRJfobKAiic1fpH6U2jvomCaD5VYo8+UqnLoV7Qn/Bo+mTqWX4DeuYJKkr3Zkav20SRknUkkGMCHvDid9+Vg1YTD15QEft/L74wRey4lLnsvDHZKuoKXVSVlEpj1XVi1RFkALzdHK6mARxbycp2fvQBXwobaOuTQPuD1wHfTuod+hLXjgm5mQyN/+z3wuQOeNp6xLnvryKD73WWfdklJOGZNs/04RnyWIKfrTKT0wghbih0tN95WRCpy4Bi/EaF93XqAPZhVmK8/c5w9H+SsvMDELVzwRXLeyq++faAV3FHBc2o341jOvIjZlHAvlYh4ILC5pUkQ5ItkaT3JHaZT67x6RkQvpqjJHrFml9jw8xAhCOk06iN2UnG2rz9g1wNUJCyggdo+4wEX4oly3JvRhGgg/49bhGT/Su4maIYRxFkHTHdWiqjn5HZOMBzZmLyKs8nf1IBb9Qzrr+MMrSV1qAM0fwgR8nZwzVOYdBKandENx6sqz3SEzNjxFUhWRokSg4PsjkyiKuWpV8DVa77djz7pNEflClMnGbPnCSfhJgfhCbWWSxyBuZSpH1MdfN7xBLe902L+fwDlVnu+QSZfOZ79wAdYFtUtumfNoU+Vu6QrcTQhpbepbXiFnDz0IsrTl8TDmOTlKx3MiicK1Zdh6kPGwa9S39TbxuhFSpQMRhjPB1Z65wN2oaRJug7IAYZ0Oieyoihf0yIKPSAHIw0VwW3w0mZPCv3HH28pDmbSB7xdg+q8LJsvRHAeNG4o8IWKWeNIKhb0logFsgq6RaDNXLtOKKanqktX9gyQMHMxNRdcLHDe7XZX86V/K+DCrYwIKJxY8CquBMXVAAvlLMHSifrcf7wwq2ajEPxs64Ma7+2tChI2B2Ts/BkSsd97307B1fgl/mOPWDLI813aqL+Qdw7+5pPCsgzKkaLGEn4bSoXtDge4CHv9+sE24Z2Ci/BHM0iY5oN6WuZJEXgQkHeEzsrzKt91hmF2pPXu7LQjLp5ltF70Q0+XnEhBW7YhDwFiSLcy6SrqIUKPvOCYI8ZbyEczm02cttv1R/Ffh7v7RrUXaD1ZBf8j3w1FsE3m4Hd15OLpRDaFw0eks+9ujTHRuiXudfIbYTDYkGsGhhLMBz2dwe557YVvLgVT5PrKYIYNA4IyQJAoJGYgac6L9ZfIMZDLNAgBzxehsHGwsYbxt2Y19GckQh1NE29XkI5eohV6laNvmEdIrrmjr29VRt9Nq/YS/884Xv5Kn+lNSAenQ+RiRnrvsXVG8jT/JJfXrPe4YSWY6xkxDY1xnvSHLM1Tkxb7VCxoFwTW90ETCs3dPxRe8xEZfwx6zryNxNEpbMroPRylPiVqvsfRS3mHyK0Dl3DwfKc0GePgFJ41j/XG0siBmM2g8wbXcRHMZmjEQAVD4Cfy0Qyvvfe7rdXdzO5y0kgl8e6hW1kFFDRZdqkj3hShX48s58/Xg1VsayzPqk+axkU1AUNU5XtmM+K7egYNZbeQ49i9+oPvykevuZzVdocrhfglItRz+FQ/5dO9RscUwfxfj8tZIZDBzyJYQUg0fn9uVqK0CbE5nHO/3TUTi+VBgoFu5+6XwUntbDsviVxnXcYB+m38OFIegQ23Y4aTAax2efNuua8O6SsO38qWKfEXeiFidwJo1CAbFU78t5g+7tzVu7OlmWr9vbJCh4iTX9R9gVkdRRBwlMwkASxOayAvP+KtNQf4qLIBtqILXigUR8dezVTi5VbZ01ODXKvC0MYgLeu+kUhZLePyjednjC7W6AyyloalsvR6cNQOH5llSqCEQ87xRGB+dFEVagxofNBoZxMF0OUx9bkHNsFc2L1fkvvgaeemAgnf9luOBihw6FaPA7+bxS9kOag7zmW2BjAkoSlLILlAQ2YP2RrhkdLmxPhNFH/9LmcYUeUe7JOUfYq1CF0ogM7CiY0ocVim2bXZq6AUKk94W7RFCsV1wpTw1sPSKXJYxmquzUCh+Ce8RRiOp+b6kAaW1nhQbN68Hxd9xLb2S+DJnl2FxQdrA9D2Xt1bMApz+4T2Uk/2zsut/nJSMtDG/eVDbwf/fQe98Rt3T2eqz8tzT7O8LnbJ6Bk4xHXTIHH+8HC7B0HafH2sCo3QTjEi8GsA7Z6Jm7gwUuMohkXptwpwV8BzACOZplWZqJKv9Yo5mNv3u37y4LFkbSNrtLzxWG/nibeslzedYzSbQmi/lA3G1dG5GSJxfXIySo9JpnTW924TU0Gpq4gsDbh+jux7IMw6Ho6nVZ+cuq9ooOz5rVc/2VTOYpQqkLNsnRxTHd+FxjbOK3PtoLMWAgQzs+9M/jdTtHv4LqTDCuUaQuIRMS/a8snc8vIDkPEMQxX+db5yoZrBBMSBYaY880Xb0YUyzQoqC2Es3OlYUI8n1fntUWP4mbCie7NVOmWlcBe954umMNUq2znfRokoDdG6GtXZI5i+CrpmsSaQTG8Z6PCqeQMYvVSLkHhFWQKqxkkFnobsBwmta8fMNEi2Ar9bK40KidAqfB1uN6TGEPZKj50l/J8ey7mBZnnQuizLQQ/dwmn9WglAJEQdw5mQf72BLMSO/BrYTklEpk12Rzw3Dx8my4MtQLqLwxErG6DT7ZNZO15SPAUBK0c6/PRKh1hbiSCL/+4bD5Qzhz7TdOtLY8sI86bj82OngfBiucrkJq8TZWwbUJh2/41pAcAdLl/5QSLIQ0q5qc7xoF61J09RdkVfqBo/LNyLqH20e801EAOtwZJcYTlaKb7+If49DhzJbLqmxECQvbQ9U1ReapTxS08v7qboQXApgd+neBJaN/0iuAixO4uBfUZUDJWtSGEHhs+g1O6Rw+a5k/nKmb+2ktAbbqo7v9repDZnvRh1W/VFWzlqs5gN4gN19L2x/aNAJCsr6uxqxdHz5GSCP9Byx1tsojx0pWWZFZOAGD1HOjNKRz1qWKfIqnUCJkBK+6qKMNhk9aauGjVa8=';
+const route_map = decryptRouteMap(routeMapText);
+console.log(route_map);
+export { route_map };
+
+/**
+ * 获取路由映射
+ * @param {string} route 路由名称
+ * @returns {string} 映射后的路由名称
+ */
+export function getRouteMap(route) {
+ // 去除 route 中的 开头/
+ if (route.startsWith('/')) {
+ route = route.substring(1);
+ }
+ // 如果 route 中不包含 / 则返回 route_map[route]
+ return route_map[route] || route;
+}
\ No newline at end of file
diff --git a/common/router.js b/common/router.js
index 91d48eb..edbf477 100644
--- a/common/router.js
+++ b/common/router.js
@@ -21,13 +21,13 @@ function isLogin() {
*/
function isInWhiteList(url) {
if (!url) return false;
-
+
// 去除URL开头的斜杠,以便与白名单匹配
const cleanUrl = url.startsWith('/') ? url.substring(1) : url;
-
+
// 提取路径部分(不含参数)
const pathPart = cleanUrl.split('?')[0];
-
+
// 检查是否在白名单中
return whiteList.some(item => {
// 确保白名单项目不带/开头,以实现一致的比较
@@ -43,14 +43,14 @@ function isInWhiteList(url) {
export function navigateBack(delta = 1) {
return new Promise((resolve, reject) => {
const pages = getCurrentPages();
-
+
// 如果页面栈不足,直接返回首页
if (pages.length <= 1) {
return navigateTo('/pages/main/index', {}, 'reLaunch')
.then(resolve)
.catch(reject);
}
-
+
// 查看前一个页面是否是登录页
if (pages.length > 1 && pages[pages.length - 2].route === 'pages/users/login') {
// 如果前一个页面是登录页,则返回两步
@@ -82,30 +82,30 @@ export function routerTo(options) {
return new Promise((resolve, reject) => {
// 处理参数
let { url, params, type } = options;
-
+
// 判断url是否存在
if (!url || url.length === 0) {
reject('跳转地址不能为空');
return;
}
-
+
// 拼接参数
if (params && Object.keys(params).length > 0) {
const queryString = Object.keys(params)
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`)
.join('&');
-
+
url += (url.indexOf('?') === -1 ? '?' : '&') + queryString;
}
-
+
// 检查是否需要登录
const needLogin = !isInWhiteList(url);
-
+
if (needLogin && !isLogin()) {
// 需要登录但未登录,跳转到登录页面
// 先保存当前URL用于登录后重定向
uni.setStorageSync('redirect', url);
-
+
// 使用navigateTo而非redirectTo,保留页面栈
uni.navigateTo({
url: '/pages/users/login',
@@ -117,7 +117,7 @@ export function routerTo(options) {
reject(err);
}
});
-
+
// 拒绝当前的导航请求
return reject(new Error('需要登录'));
}
@@ -158,7 +158,7 @@ export function routerTo(options) {
}
} else {
// console.log('url',url,params,type,isInWhiteList(url),isLogin());
-
+
// 未指定跳转方式,先尝试navigateTo,失败后尝试switchTab
uni.navigateTo({
url,
@@ -187,6 +187,9 @@ export function routerTo(options) {
* @returns {Promise} 返回Promise对象
*/
export function navigateTo(url, params = {}, type = '') {
+ if (url.includes("shouye")) {
+ url = url.replace("shouye", "main");
+ }
return routerTo({
url,
params,
diff --git a/components/tab-bar/tab-bar.vue b/components/tab-bar/tab-bar.vue
deleted file mode 100644
index 56f615a..0000000
--- a/components/tab-bar/tab-bar.vue
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{item.title}}
-
-
-
-
-
-
-
-
diff --git a/pages/kit/kit.vue b/pages/kit/kit.vue
index 3be819f..52bffa7 100644
--- a/pages/kit/kit.vue
+++ b/pages/kit/kit.vue
@@ -204,7 +204,6 @@
-
{{ item.chooseNum }}
@@ -352,14 +351,6 @@ export default {
id: 1,
title: '赏品'
},
- // {
- // id: 5,
- // title: '无限赏'
- // },
- // {
- // id:3,
- // title: '宝箱'
- // },
{
id: 4,
title: '保险柜'
@@ -368,10 +359,6 @@ export default {
id: 2,
title: '预售'
}
- // {
- // id: 6,
- // title: '明信片'
- // }
],
subTabCur: 0,
listData: [],
@@ -393,12 +380,6 @@ export default {
}
this.canReload && this.tabChange(this.tabCur)
this.canReload = true
- const curPages = getCurrentPages()[0]; // 获取当前页面实例
- if (typeof curPages.getTabBar === 'function' && curPages.getTabBar()) {
- this.$mp.page.getTabBar().setData({
- selected: 3
- });
- }
this.$platform.getOrderNo(this).then(order_num => {
if (order_num != null && order_num != "") {
this.$common.msg("支付成功~")