From 88ae7714b5e6fcc5ebead9832860007c4871bf96 Mon Sep 17 00:00:00 2001 From: yaoqin <497681109@qq.com> Date: Fri, 15 Aug 2025 17:33:35 +0800 Subject: [PATCH] =?UTF-8?q?v1.2.0=20bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mining-pool/package.json | 6 +- mining-pool/src/i18n/AccessMiningPool.js | 2 +- mining-pool/src/i18n/backendSystem.js | 32 +- mining-pool/src/main.js | 13 + mining-pool/src/utils/routeUtils.js | 6 + .../src/views/announcementDetails/index.js | 105 ++++++- mining-pool/src/views/broadcast/index.js | 38 +-- mining-pool/src/views/commonProblem/index.js | 91 +++++- .../documentManagement/addDocument/index.vue | 43 +-- .../src/views/documentManagement/index.js | 2 +- .../modifyDocument/index.vue | 6 +- mining-pool/src/views/helpCenter/index.js | 55 ++-- mining-pool/src/views/helpCenter/index.vue | 4 +- mining-pool/src/views/home/index.js | 27 ++ mining-pool/src/views/home/index.vue | 20 +- mining-pool/src/views/searchResult/index.js | 2 + mining-pool/src/views/searchResult/index.vue | 22 +- mining-pool/test.zip | Bin 7686965 -> 6162410 bytes .../test/css/app-189e7968.08b6b890.css | 1 + .../css/chunk-vendors-bc050c32.6f97509c.css | 1 + mining-pool/test/index.html | 2 +- mining-pool/test/js/app-113c6c50.f9ecb579.js | 1 + mining-pool/test/js/app-42f9d7e6.2094f944.js | 1 + mining-pool/test/js/app-45954fd3.021a00eb.js | 1 + mining-pool/test/js/app-5c551db8.47473daa.js | 1 + mining-pool/test/js/app-ca0caf25.6463d629.js | 1 + .../js/chunk-vendors-377fed06.0e89b4b7.js | 30 ++ .../js/chunk-vendors-bc050c32.8062ab74.js | 25 ++ .../js/chunk-vendors-c0d76f48.f34181ba.js | 2 + mining-pool/vue.config.js | 293 ++---------------- 30 files changed, 463 insertions(+), 370 deletions(-) create mode 100644 mining-pool/test/css/app-189e7968.08b6b890.css create mode 100644 mining-pool/test/css/chunk-vendors-bc050c32.6f97509c.css create mode 100644 mining-pool/test/js/app-113c6c50.f9ecb579.js create mode 100644 mining-pool/test/js/app-42f9d7e6.2094f944.js create mode 100644 mining-pool/test/js/app-45954fd3.021a00eb.js create mode 100644 mining-pool/test/js/app-5c551db8.47473daa.js create mode 100644 mining-pool/test/js/app-ca0caf25.6463d629.js create mode 100644 mining-pool/test/js/chunk-vendors-377fed06.0e89b4b7.js create mode 100644 mining-pool/test/js/chunk-vendors-bc050c32.8062ab74.js create mode 100644 mining-pool/test/js/chunk-vendors-c0d76f48.f34181ba.js diff --git a/mining-pool/package.json b/mining-pool/package.json index 819c5df..5b5fc12 100644 --- a/mining-pool/package.json +++ b/mining-pool/package.json @@ -9,7 +9,6 @@ "lint": "vue-cli-service lint" }, "dependencies": { - "@dreysolano/prerender-spa-plugin": "^1.0.3", "@stomp/stompjs": "^7.1.1", "@tinymce/tinymce-vue": "^6.2.0", "amfe-flexible": "^2.2.1", @@ -35,15 +34,12 @@ "@vue/cli-plugin-router": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-service": "~5.0.0", - "compression-webpack-plugin": "^6.1.1", "eslint": "^7.32.0", "eslint-plugin-vue": "^8.0.3", "less": "^4.2.0", "less-loader": "^12.2.0", "sass": "^1.79.1", "sass-loader": "^12.6.0", - "sitemap-webpack-plugin": "^1.1.1", - "vue-template-compiler": "^2.6.14", - "webpack-merge": "^6.0.1" + "vue-template-compiler": "^2.6.14" } } diff --git a/mining-pool/src/i18n/AccessMiningPool.js b/mining-pool/src/i18n/AccessMiningPool.js index 4dfdaad..e0d7303 100644 --- a/mining-pool/src/i18n/AccessMiningPool.js +++ b/mining-pool/src/i18n/AccessMiningPool.js @@ -194,7 +194,7 @@ export const AccessMiningPool_en = { estimatedTimeDgbs:"≈ 10 minutes", estimatedTimeDgbq:"≈ 10 minutes", estimatedTimeDgbo:"≈ 10 minutes", - estimatedTimeMona:"≈ 25 hours", + estimatedTimeMona:"≈ 2.5 hours", estimatedTimeAlph:" 500 minutes", estimatedTimeEnx:"", describeNexa:"For example, if a 1,000,000 NEXA reward was earned on 1-1, that reward will be paid out approximately 7 days later (1-8), depending on actual block heights", diff --git a/mining-pool/src/i18n/backendSystem.js b/mining-pool/src/i18n/backendSystem.js index 806cc9c..e785e5e 100644 --- a/mining-pool/src/i18n/backendSystem.js +++ b/mining-pool/src/i18n/backendSystem.js @@ -150,7 +150,22 @@ export const backendSystem_zh = { selectCurrency:"选择币种", pleaseSelectCurrency2:"添加挖矿教程,请选择币种", pleaseInputTitle:"请输入标题", - + + searchResult:"搜索结果", + returnSearch:"返回搜索", + keyword:"关键词", + find:"找到", + relatedResults:"条相关结果", + documentIcon:"文档图标", + preview:"预览", + noResult:"未找到相关结果", + keyword2:"关键词", + noMatch:"没有找到匹配的文档", + resetSearch:"重新搜索", + 类型:"类型", + 创建时间:"创建时间", + 创建者:"创建者", + } } @@ -307,7 +322,20 @@ export const backendSystem_en = { pleaseSelectCurrency2:"Please select a currency when adding mining tutorials", pleaseInputContent2:"Please input content", pleaseInputTitle:"Please input title", - + searchResult:"Search Result", + returnSearch:"Return Search", + keyword:"Keyword", + find:"Find", + relatedResults:"Items", + documentIcon:"Document Icon", + preview:"Preview", + noResult:"No Related Results", + keyword2:"Keyword", + noMatch:"No Matching Document", + resetSearch:"Reset Search", + 类型:"Type", + 创建时间:"Create Time", + 创建者:"Create User", } } diff --git a/mining-pool/src/main.js b/mining-pool/src/main.js index 88d1bd0..94e4dcb 100644 --- a/mining-pool/src/main.js +++ b/mining-pool/src/main.js @@ -42,6 +42,19 @@ Vue.prototype.$isMobile = isNarrowScreen +/** + * 全局处理未捕获的 Promise 拒绝(仅限网络类错误), + * 防止错误遮罩层把页面完全遮挡。不影响其他错误的默认行为。 + */ +window.addEventListener('unhandledrejection', (event) => { + const reason = event && event.reason; + const message = typeof reason === 'string' ? reason : (reason && reason.message); + if (message && (message === 'Network Error' || message.includes('timeout'))) { + event.preventDefault(); + console.warn('[unhandledrejection] blocked network error:', message); + } +}); + // 在路由守卫中设置 router.beforeEach((to, from, next) => { // 从路由中获取语言参数 diff --git a/mining-pool/src/utils/routeUtils.js b/mining-pool/src/utils/routeUtils.js index 452db95..5d49511 100644 --- a/mining-pool/src/utils/routeUtils.js +++ b/mining-pool/src/utils/routeUtils.js @@ -30,6 +30,12 @@ export function getAllValidPaths() { '/BKWorkDetails', '/dataDisplay', '/alerts', + '/helpCenter', + '/commonProblem', + '/announcementDetails', + '/searchResult', + '/announcements', + '/announcementDetails', // 个人中心子页面 '/personalCenter', diff --git a/mining-pool/src/views/announcementDetails/index.js b/mining-pool/src/views/announcementDetails/index.js index 40aebbf..5ea8923 100644 --- a/mining-pool/src/views/announcementDetails/index.js +++ b/mining-pool/src/views/announcementDetails/index.js @@ -1,4 +1,10 @@ import { documentsList,findDataInfo} from '../../api/documentManagement' + +/** + * 本地存储选中的问题ID的键名 + * @type {string} + */ +const SELECTED_PROBLEM_ID_KEY = 'announcementDetails:selectedId' export default { data() { return { @@ -34,11 +40,11 @@ export default { }; }, mounted() { - this.DetailsParams.id = this.$route.query.id; - console.log(this.$route.query.id,"this.DetailsParams.id"); - if (this.DetailsParams.id) { - this.fetchProblemDetails(this.DetailsParams) - } + // this.DetailsParams.id = this.$route.query.id; + // console.log(this.$route.query.id,"this.DetailsParams.id"); + // if (this.DetailsParams.id) { + // this.fetchProblemDetails(this.DetailsParams) + // } this.fetchProblemsList(this.listParams) }, methods: { @@ -47,8 +53,33 @@ export default { const res = await documentsList(params) if(res && res.code === 200){ this.problems = res.rows; - // this.DetailsParams.id = this.problems[0].id; - // this.fetchProblemDetails(this.DetailsParams) + // 优先级:URL 参数 > 本地存储 > 列表首项 + const routeId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : '' + const savedId = this.getSavedSelectedId() + + let resolvedId = routeId || savedId || '' + + if (!resolvedId && this.problems && this.problems.length > 0) { + resolvedId = String(this.problems[0].id) + } + + // 如果存在但不在当前列表中,则回退到首项 + if (resolvedId) { + const existsInList = (this.problems || []).some(item => String(item.id) === String(resolvedId)) + if (!existsInList && this.problems && this.problems.length > 0) { + resolvedId = String(this.problems[0].id) + } + } + + this.DetailsParams.id = resolvedId + + // 同步到URL与本地存储 + this.persistSelectedId(this.DetailsParams.id) + this.updateRouteQueryId(this.DetailsParams.id) + + if (this.DetailsParams.id) { + this.fetchProblemDetails(this.DetailsParams) + } } this.setLoading('problemLoading', false); }, @@ -71,9 +102,65 @@ export default { * @param {number} id 问题ID */ handleClick(id) { - - this.DetailsParams.id = id; + // 更新当前选中ID + this.DetailsParams.id = id + // 持久化并同步URL + this.persistSelectedId(this.DetailsParams.id) + this.updateRouteQueryId(this.DetailsParams.id) + // 获取详情 this.fetchProblemDetails(this.DetailsParams) }, + + /** + * 将选中的问题ID持久化到本地存储 + * @param {string|number} id 问题ID + * @returns {void} + */ + persistSelectedId(id) { + try { + window.localStorage.setItem(SELECTED_PROBLEM_ID_KEY, String(id)) + } catch (error) { + // 上报或静默处理本地存储异常 + console.error('persistSelectedId error', error) + } + }, + + /** + * 读取本地存储中保存的选中问题ID + * @returns {string} + */ + getSavedSelectedId() { + try { + return window.localStorage.getItem(SELECTED_PROBLEM_ID_KEY) || '' + } catch (error) { + console.error('getSavedSelectedId error', error) + return '' + } + }, + + /** + * 使用 replace 同步更新当前路由的查询参数中的 id + * 避免产生新的历史记录条目 + * @param {string|number} id 问题ID + * @returns {void} + */ + updateRouteQueryId(id) { + try { + if (!this.$route) return + const targetId = String(id) + const currentId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : '' + if (currentId === targetId) return + + const nextQuery = { ...(this.$route.query || {}), id: targetId } + if (this.$router && typeof this.$router.replace === 'function') { + const maybePromise = this.$router.replace({ query: nextQuery }) + if (maybePromise && typeof maybePromise.catch === 'function') { + maybePromise.catch(() => {}) + } + } + } catch (error) { + console.error('updateRouteQueryId error', error) + } + }, }, }; \ No newline at end of file diff --git a/mining-pool/src/views/broadcast/index.js b/mining-pool/src/views/broadcast/index.js index f226c8c..183cd38 100644 --- a/mining-pool/src/views/broadcast/index.js +++ b/mining-pool/src/views/broadcast/index.js @@ -164,6 +164,12 @@ export default { return } + // 验证每个路径是否以/开头 + const invalidPaths = pathArray.filter(path => !path.startsWith('/')); + if (invalidPaths.length > 0) { + this.$message.error(`路径必须以 / 开头: ${invalidPaths.join(', ')}`); + return + } if (this.addParams.buttonContent) { // 兼容中英文逗号分割 @@ -187,14 +193,6 @@ export default { } - // 验证每个路径是否有效 - const invalidPaths = pathArray.filter(path => !isValidPath(path)); - if (invalidPaths.length > 0) { - const suggestions = getPathSuggestions(invalidPaths[0]); - this.$message.error(`${this.$t("backendSystem.invalidPath")}: ${invalidPaths.join(', ')}。${this.$t("backendSystem.invalidPathSuggestions")}: ${suggestions.slice(0, 3).join(', ')}`); - return - } - // 验证通过,保持字符串格式传给后端(不转换为数组) // this.addParams.buttonPath 保持原始字符串格式 } @@ -254,14 +252,12 @@ export default { return } - // 验证每个路径是否有效 - const invalidPaths = pathArray.filter(path => !isValidPath(path)); + // 验证每个路径是否以/开头 + const invalidPaths = pathArray.filter(path => !path.startsWith('/')); if (invalidPaths.length > 0) { - const suggestions = getPathSuggestions(invalidPaths[0]); - this.$message.error(`${this.$t("backendSystem.invalidPath")}: ${invalidPaths.join(', ')}。${this.$t("backendSystem.invalidPathSuggestions")}: ${suggestions.slice(0, 3).join(', ')}`); + this.$message.error(`路径必须以 / 开头: ${invalidPaths.join(', ')}`); return } - } } else { this.$message.warning(this.$t("backendSystem.pleaseInputButtonContentAndPath")) @@ -363,23 +359,19 @@ export default { * @returns {Array} 路径建议列表 */ getValidPathSuggestions() { - return getPathSuggestions('').slice(0, 8); // 返回前8个常用路径 + // 移除路径建议,返回空数组 + return []; }, /** * 显示路径使用帮助 */ showPathHelp() { - const suggestions = this.getValidPathSuggestions(); const helpMessage = ` - 常用路径示例: - ${suggestions.slice(0, 10).join('\n')} - 路径规则: • 多个路径用逗号分隔 - • 路径必须以 / 开头 - • 支持动态路由参数 - • 不要包含域名,只写路径部分 + • 路径格式自由,不做严格验证 + • 支持任意路径格式 `; this.$alert(helpMessage, '路径格式说明', { @@ -399,7 +391,7 @@ export default { return []; } return buttonContent - .split(',') + .split(/[,,]/) .map(btn => btn.trim()) .filter(btn => btn); }, @@ -414,7 +406,7 @@ export default { return []; } return buttonPath - .split(',') + .split(/[,,]/) .map(path => path.trim()) .filter(path => path); }, diff --git a/mining-pool/src/views/commonProblem/index.js b/mining-pool/src/views/commonProblem/index.js index 1fa53e9..6dc25e6 100644 --- a/mining-pool/src/views/commonProblem/index.js +++ b/mining-pool/src/views/commonProblem/index.js @@ -1,4 +1,10 @@ import { documentsList,findDataInfo} from '../../api/documentManagement' + +/** + * 本地存储选中的问题ID的键名(常见问题页) + * @type {string} + */ +const SELECTED_PROBLEM_ID_KEY = 'commonProblem:selectedId' export default { data() { return { @@ -46,14 +52,29 @@ export default { const res = await documentsList(params) if(res && res.code === 200){ this.problems = res.rows; - - if (this.$route.query.id) { - this.DetailsParams.id = this.$route.query.id - - }else if(this.problems.length > 0){ - this.DetailsParams.id = this.problems[0].id; - } - this.fetchProblemDetails(this.DetailsParams) + + // 优先级:URL 参数 > 本地存储 > 列表首项 + const routeId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : '' + const savedId = this.getSavedSelectedId() + let resolvedId = routeId || savedId || '' + + if (!resolvedId && this.problems && this.problems.length > 0) { + resolvedId = String(this.problems[0].id) + } + + if (resolvedId) { + const existsInList = (this.problems || []).some(item => String(item.id) === String(resolvedId)) + if (!existsInList && this.problems && this.problems.length > 0) { + resolvedId = String(this.problems[0].id) + } + } + + this.DetailsParams.id = resolvedId + this.persistSelectedId(this.DetailsParams.id) + this.updateRouteQueryId(this.DetailsParams.id) + if (this.DetailsParams.id) { + this.fetchProblemDetails(this.DetailsParams) + } } this.setLoading('problemLoading', false); }, @@ -76,9 +97,61 @@ export default { * @param {number} id 问题ID */ handleClick(id) { - this.DetailsParams.id = id; + this.persistSelectedId(this.DetailsParams.id) + this.updateRouteQueryId(this.DetailsParams.id) this.fetchProblemDetails(this.DetailsParams) }, + + /** + * 将选中的问题ID持久化到本地存储 + * @param {string|number} id 问题ID + * @returns {void} + */ + persistSelectedId(id) { + try { + window.localStorage.setItem(SELECTED_PROBLEM_ID_KEY, String(id)) + } catch (error) { + console.error('persistSelectedId error', error) + } + }, + + /** + * 读取本地存储中保存的选中问题ID + * @returns {string} + */ + getSavedSelectedId() { + try { + return window.localStorage.getItem(SELECTED_PROBLEM_ID_KEY) || '' + } catch (error) { + console.error('getSavedSelectedId error', error) + return '' + } + }, + + /** + * 使用 replace 同步更新当前路由的查询参数中的 id + * 避免产生新的历史记录条目 + * @param {string|number} id 问题ID + * @returns {void} + */ + updateRouteQueryId(id) { + try { + if (!this.$route) return + const targetId = String(id) + const currentId = this.$route && this.$route.query && this.$route.query.id ? String(this.$route.query.id) : '' + if (currentId === targetId) return + + const nextQuery = { ...(this.$route.query || {}), id: targetId } + if (this.$router && typeof this.$router.replace === 'function') { + const maybePromise = this.$router.replace({ query: nextQuery }) + if (maybePromise && typeof maybePromise.catch === 'function') { + maybePromise.catch(() => {}) + } + } + } catch (error) { + console.error('updateRouteQueryId error', error) + } + }, }, }; \ No newline at end of file diff --git a/mining-pool/src/views/documentManagement/addDocument/index.vue b/mining-pool/src/views/documentManagement/addDocument/index.vue index 4807cfa..ed22a61 100644 --- a/mining-pool/src/views/documentManagement/addDocument/index.vue +++ b/mining-pool/src/views/documentManagement/addDocument/index.vue @@ -380,7 +380,7 @@ export default Vue.extend({ this.$message.success(this.$t("backendSystem.updateSuccess")); // 发布成功后清除本地草稿 const LOCAL_STORAGE_KEY = "editor_draft_add"; - localStorage.removeItem(LOCAL_STORAGE_KEY); + sessionStorage.removeItem(LOCAL_STORAGE_KEY); this.$router.push({ path: `/${this.$i18n.locale}/documentManagement` }); for (const key in this.addParams) { this.addParams[key] = ""; @@ -409,7 +409,7 @@ export default Vue.extend({ }, handelAddDocument() { - + this.addParams.title = this.addParams.title.trim(); // 强制同步编辑器内容 if (this.editor) { this.addParams.content = this.editor.txt.html(); @@ -426,6 +426,17 @@ export default Vue.extend({ }); return; } + if (!this.addParams.title) { + this.$message({ + message: + this.$t("backendSystem.pleaseInputTitle") || + "请输入标题", + type: "warning", + duration: 4000, + showClose: true, + }); + return; + } console.log(this.addParams.type,this.typeArray, "this.addParams.type"); if (!this.addParams.type ) { @@ -449,18 +460,9 @@ export default Vue.extend({ }); return; } - if (!this.addParams.title) { - this.$message({ - message: - this.$t("backendSystem.pleaseInputTitle") || - "请输入标题", - type: "warning", - duration: 4000, - showClose: true, - }); - return; - } - + + + if (this.addParams.type == "1" && !this.screenCurrency) { this.$message({ @@ -598,7 +600,7 @@ export default Vue.extend({ }; const LOCAL_STORAGE_KEY = "editor_draft_add"; - localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(saveData)); + sessionStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(saveData)); this.lastSaveTime = saveData.timestamp; this.isSaving = false; } catch (error) { @@ -610,7 +612,7 @@ export default Vue.extend({ loadFromLocalStorage() { try { const LOCAL_STORAGE_KEY = "editor_draft_add"; - const savedData = localStorage.getItem(LOCAL_STORAGE_KEY); + const savedData = sessionStorage.getItem(LOCAL_STORAGE_KEY); if (savedData) { const data = JSON.parse(savedData); console.log(data, "data"); @@ -621,7 +623,7 @@ export default Vue.extend({ if (isExpired) { console.log("本地数据已过期,清除缓存"); - localStorage.removeItem(LOCAL_STORAGE_KEY); + sessionStorage.removeItem(LOCAL_STORAGE_KEY); return; } @@ -632,10 +634,11 @@ export default Vue.extend({ this.addParams.title = data.title || ""; this.addParams.content = data.content || ""; - this.addParams.type = data.type || "1"; + this.addParams.type = data.type || ""; this.addParams.imageUrl = data.imageUrl || ""; this.lastSaveTime = data.timestamp || ""; console.log(data.type,this.typeArray, "data.type"); + this.typeArray = [data.type]; // 如果编辑器已经创建,直接设置内容 if (this.editor) { this.editor.txt.html(data.content || ""); @@ -651,7 +654,7 @@ export default Vue.extend({ clearDraft() { const LOCAL_STORAGE_KEY = "editor_draft_add"; - localStorage.removeItem(LOCAL_STORAGE_KEY); + sessionStorage.removeItem(LOCAL_STORAGE_KEY); this.lastSaveTime = ""; this.isSaving = false; }, @@ -779,7 +782,7 @@ export default Vue.extend({ } // 清除本地草稿 const LOCAL_STORAGE_KEY = "editor_draft_add"; - localStorage.removeItem(LOCAL_STORAGE_KEY); + sessionStorage.removeItem(LOCAL_STORAGE_KEY); this.$message.success( this.$t("backendSystem.contentReset") || "内容已重置" ); diff --git a/mining-pool/src/views/documentManagement/index.js b/mining-pool/src/views/documentManagement/index.js index dbaeacb..99c7a51 100644 --- a/mining-pool/src/views/documentManagement/index.js +++ b/mining-pool/src/views/documentManagement/index.js @@ -63,7 +63,7 @@ export default { {//公告中心 value:"3", label:"backendSystem.announcementCenter", - articleUrl:"announcementDetails" + articleUrl:"announcements" }, {//其他 value:"0", diff --git a/mining-pool/src/views/documentManagement/modifyDocument/index.vue b/mining-pool/src/views/documentManagement/modifyDocument/index.vue index a17d512..eead055 100644 --- a/mining-pool/src/views/documentManagement/modifyDocument/index.vue +++ b/mining-pool/src/views/documentManagement/modifyDocument/index.vue @@ -375,7 +375,7 @@ export default Vue.extend({ if (this.editor) { this.addParams.content = this.editor.txt.html(); } - console.log(this.addParams.content, "this.addParams.content"); + this.addParams.title = this.addParams.title.trim(); if (!this.addParams.content.trim()) { this.$message({ message: @@ -610,10 +610,10 @@ export default Vue.extend({ this.addParams.title = data.title || ""; this.addParams.content = data.content || ""; - this.addParams.type = data.type || "1"; + this.addParams.type = data.type || ""; this.addParams.imageUrl = data.imageUrl || ""; this.lastSaveTime = data.timestamp || ""; - + this.typeArray = [data.type]; // 如果编辑器已经创建,直接设置内容 if (this.editor) { this.editor.txt.html(data.content || ""); diff --git a/mining-pool/src/views/helpCenter/index.js b/mining-pool/src/views/helpCenter/index.js index 9815e6e..5522fc9 100644 --- a/mining-pool/src/views/helpCenter/index.js +++ b/mining-pool/src/views/helpCenter/index.js @@ -69,32 +69,47 @@ export default{ pageSize:10 }, TypeList:[ - { - value:"1", - label:"挖矿教程" + {//挖矿教程 + value:"1", + label:"backendSystem.miningTutorial", + articleUrl:"AccessMiningPool" }, - { - value:"2", - label:"常见问题" + {//常见问题 + value:"2", + label:"backendSystem.commonProblems", + articleUrl:"commonProblem" }, - { - value:"3", - label:"公告中心" + {//公告中心 + value:"3", + label:"backendSystem.announcementCenter", + articleUrl:"announcements" }, - { - value:"0", - label:"其他" - }, - - ] + {//其他 + value:"0", + label:"backendSystem.other", + articleUrl:"", + children:[{ + value:"1", + label:"home.serviceTerms", + articleUrl:"serviceTerms" + },{ + value:"2", + label:"home.rate", + articleUrl:"rate" + },{ + value:"3", + label:"home.APIfile", + articleUrl:"apiFile" + } + ] + + } + ], } }, mounted(){ - try { - this.TypeList = JSON.parse(localStorage.getItem('TypeList')) - } catch (error) { - console.log(error); - } + this.$addStorageEvent(1, "TypeList", JSON.stringify(this.TypeList)); + this.fetchActivityList(this.activeParams) }, methods: { diff --git a/mining-pool/src/views/helpCenter/index.vue b/mining-pool/src/views/helpCenter/index.vue index ff88364..e2088aa 100644 --- a/mining-pool/src/views/helpCenter/index.vue +++ b/mining-pool/src/views/helpCenter/index.vue @@ -2,11 +2,11 @@
-x4~udgHo%F!bp2jVi{N`tFY3;g5H7;Y9sx z%@YT{gGp=45j2skOOtL-Q^-j4`G{xePo%<}%o{`1vi+RtNaD&&t8@oL+#q77$v?sD z=&rCpN^HS#hZt5Yo`}N^kxcW?xO{_KWai1!3jrU(5_-V^CyvROy;9m=P(9OcG*Znq zM>4aEP?$l-=?1L?bwbI0 zVDaG5Ys%dyPgl>>tWJk_7muSkygwRG2NkGJp!Mtny5n)n7JvrZDGtt6?{;XmnS`qA4f?|K0o{tPhb6vTn!r%vfKu4hVdD z+z8U5b)EjktIe*T+tP+oqm%pc#a{~CQ^`0nftkD!fw*s&t^&kA*V{j(`oqc3l0KlZ zw}1N%G(Ow>6EtAG5yqB4K{CrpRKsKdGU%~HktPI2g$`?v ddQP%iD`o(JdY?MNt zKZNnGvZbGCPHtaJ#o`3#o}tU6ssmi&tWEdu-bqj!6>Equ>7yW%aGNa?gNO}OHOu*v z55UnV9b9Y2>ve?d;_6{Fy4-nbt>^s0yD{qGogCVyg-MOS1BNU)0g-e+-g{lB=uLhr z*#M#&*BUR)@;SGmYSGDIA72h9Kc(TL6^xCPUq_*PR!kl-Fo}F%^~FLDP#yoWd7mYv zX5}$H{3#|6u7 |yeX~(9aCe{P6A)e0&k#vx(nd==chiG!-aUI->b?0=J&e(=Poeo3)(M1 zr(RDf_ER>|A*ObtOn+a0a6_G%cM_c2UNUeP?W{`EFDQb6unWIsv& -1i_64F}Xb YC3P-0SP-qn5o4!k~|6r3zsi#Mozt zO&C>0Se2k{riztcN=aY3)~b$4W0tpB>B~ `bvWJjY!Af$~Bh3NdMkOr$sI zaNcYl4)DQ#yqc*U3@U-9=ah=a&L;pLN$tLPzSOP66x3#%OJm~kU=T7boX@b}+9;;R z8jig{Cl>xaT;IID9Kno5chyVmhKiAmkBN>?0XlX|YW2dZ!uQTYS*>FJ$iO0mYqRap z);3FL;29xR*DpYqb$XRn^^$>Eza6w( n;C+?IDb-yQPzP07xQ@izs%Z?4lI#y-V z#?j;BQAOV5jTcQd$<$LC@2^{c<`6;I(80$dA=}@xsFwURljAIE_0z!U(YxUm+&Src z-E%$477%zkE2A+vF%dV3uQK%QhvB0hJXiI7>CGq*Y>}5p`F!p$SjAIH|Fz#U%#g69 zu~~~WH)$Nf5JxrCJ#3zr-`1=}Xa=!0)y4;BPe)5j$_cV9zm|)n!ow1Q;i<#Ai5PV_ zZK q)LU|#&J7BnThIi&d;2IcnH<(NQmrwNXzSG7Wy0O14Lw{V4B4Y~gP7pvOk8S0kF_v5xGRwc|&8(`b_j?@& zq0lX?bs(K(Z{mRJL#+7=X+ SuPtFq_tsbW~dvvqSs?XNKPabSN+UDB@V gl&T5aYw0ws=jvYl#MLT@G4;~ fG5bbfN=sKH#H59;pHq_KZ rx!qi{MspqhTo&KFGhL{z9?-Q~h$cZCLnM4+|WdM!Tc8{~t42QQ%Wo6PK$f_SQ+i zjUVgug&5g;yZukEXETCQ(?W0XO^1D2uorGDn5+6$zx VKjGK3TCl^V;A!)e*pJc1 zs1(j}YF?q7?)-@%y2bG}zuvT;{tM9mhb!U~+WI@ZAdH >nyg^?Rw-G3vK3SG3^ZUhxN4Fr+v}W zB4?qif8I4~_EYZoCU(>5@2Ubb }gUs5!wH8*c$J-uO#ab^BqNw zjfMwK_mgDcHN-vP+>d@B d(%-Y&H0B$$nK$K=IEmf)AVfog33;WKGYF zzM}e**Vd=o^+IdIMEL=WU%S-_atv4mcWLD(;XrkrybIpsrmbM2AX##b&9+2F4ol&( zhv(8?J(qN=Mj|O<&1^GwSIz8s)^Eaj@|x5XFDUW1!zo<%iyQGo5Om{YQn00+SbE9* zL9*vK3otUNg+CF2gv}@Ow~ThAO)cCg!V?nba%JUhRoo~6m3N!56X&{1b7WE}OYz)c zwg3fZB#8X3Wi^P%Zpb-^C{R)0`gIZsVoXTNv f%?@(hc@S+|#M1oV3I_t JXj8)zQiT89y*q{Rwr?|dJv6w&@Aba)CQ_NdAc z)poP?+EXnAW@sSnbEvbESz+2g=S8&53stsN*S1uo{EBBXq^IkQZnb_0zVb1{g12XJ zqgA@@2eQ+bHbc1OB(OGAEG9lT 6kN9ozgu~*_BUX(A0Jle?(JY7z%>knDoZ))do<$(PkyG5wZ zZLa17$rAp~tYa3(-(Nk1nRm{+08;tJ;uU7IU)@#6tg!+DMB~)=H!Q~IFp~1HjNI{p z_n8;b7rur+4_deVu$_y#Z}I4h?kVEqd2IS%pwJWGF_+#G(3 ~7l z;Pk`Qgt@8qY+;Xh7xyin3Q_j O;CLl}Sg>z7S z{BvW5FpTzlHsgyEEHD{^{>q$+9HwBWE?F#rEay2`_c}Yp(P*uwJEN|5RN#;;rta`4 z(K4de)+xb~Q?gZuxM=a~8~rsAb&uakgZ|ep(v-O%&zq#d?6lF({0_1+`w{#zu8Snn zl>2oqRFl7w{x~ZZT^jhjv ze+!q1QiR2n>JO&y02&izrDk)qe20H^BAxZ^lmZ^*`PCsKB}<=Yg59SaFPcAgz9`1k z$Kcq)4*P9g-wEh47XJIz&m^V?oh>A$mqkszqpmd$5gC1yRmZ1AF4e$s{R*u5xL{vb z*Vj+zT-P@W=f3sDJq1@vAx4gypow$Z*zF(H>BDYz;`V(J5nE`avW `bvPq7HWMFGQ+2`p|uF%Lz#wMqtYkN0lj|t&bI@8 cQi^7`=%Ix(%Q&;D%Xk^pQU(PDm`VvCoa+3EU$ISp3H|(%}t8F_z5-0iQ zdqdJdh33eI32HR0m1BC7n0aOalb`fBTc%+k&cE=GZ~OY^G`Yy=-AmYgnQqre!)f zWVchL3An_ZzyC1ElfZRK%n^D0qrW^{{Ugl;63NWyTwjl@638_C&GbpkiacA}YzD6I z;qcoir^2B#=cFp2Y2WVt-s>rkTe3=5(VbgTJiEVs3$t5fZC?cYBSY=CLkmHBaD-Rk zygA{PC806Lw{Jp;<(^oMPtpRm)DOmbyKn7j;?A@$tZvW0Epaszq+xk~9b6H!abIu! zS;Zx6;OBp^1?WVv@;zgrC`T{~rMSM_E2-NinJq*$5@HbpwoO$qb=YKL2`aC`W~dUE z^(J4Hr9#=TPzf|K&q%b^dfW}{+zaZ3nRleAar89|-f{rEAGIRXVVIsSYa;Q{vDiG{ z|J>lvN;6@6rxu&B@i7 V&t$I!-K1>1?*BK;LPA8QTCFURoU!ydFho^w zkwV^_%y>~g$6AtWH;H^{^vu)W7~3j8i@K t5@!l;w`^$?da|H?rVr zu{uRVXNH=;OWozL43$g|#UH N(2V^$<<8yj^Ym6LqiXO{yAy{Oc*N;w{Ow1KzokJ_EqY z+Na{z8Fv>;;y49an1;r~f!qDYA^Y8BX`jXT{i~tu(UoJgNoHIl(@0B+jIF5lnFp z-b$2rVqb-~Qe7!46O&|5zDeoe;Cu^YH28jq{mbXt;IuCUe@?3VNI>S(n}I8{hxCK? z+u{GT%=n(EbfD6Rh=H>ncE&<|&J|t9!4L2)?I4wNHlsy97^i z4L!7LJMssY$wNTR*=>gLxO%L*5 &Sp% zw4C&v>#lRqT&7&_QRCEoqE?(8pp1=4|56y7IrPVM^(F3)Jd`EJb0dqG8a#D(%cM^( z3`%E>D7qj&TO*uNN!qsu# qeuP)KPp!JqE3EWj#a)BpH}dVk>q(6Te|mOdwKfvx>mse};mi`^gw!2Jm%%qC7XR zEtVJGJgBo34k_7QH-3}c G1uY5+0B@4rQmX`UUMMYL{IAH(RSe6kLb?p_$ z9>q{3_4rp*zd29unLv!TH^K3XE|hydP6bdAd_nSF26&wqyxUi>@v^c@w3%wO)xq`s zF6cf9LT(dghvyB_ (KBbu4!E?lvqk;%)Q}%_FOz)8 zL$^MU6Z*-NA+MT}Ghe+TPioWIE)j=+_upEO_hkS7UJEX=&|`lQFFADdPcWE@fSps5 zomjwr&Sj{QgB*$y9cO7Wp;p$gO9Pv5gM~^|*Sp5|7drdyG@MJOR=&|p@aWO|#C=TM z_&qg1tVyo2<rCF{j`wilCSHg(ddO**_^=TqoRzW+tu ze;0H%_N<;xrktxqQje=a2j7vSK?nHjUS8e00^>sssR`mmol6wsUq}miThe%cf?@HV z=0I?F?J-kaGGu)90JHGOx2I$<_T2rM55%{Z^-h9Qt)R1XC9G}j=2&fpG&;QP)@ Nb)TWo>`VS{ym@Csd(IMscN|* zd6G>hR{FjgZ>8y=K_F|P@!n=nrozU7lNe};MPG{NhcGzUdM)A9f|g}`-0z^Sw$u~c z)-|rav=Xd3BN+=kirl$ed-?;47*98S$1C_*JAUMk3$A8IQ>AM_jcFc?yH5jv8(QP{ z220*IZJ*m8dtQFPc@kIx)W_Srd9PJ&Q+lIv*$uR~tX#GNwn&rF5cOBBcG=vIx8fs9 zZ@u>E-l7h0(7_7+>PaLvs8am{noWlP$z!a%f{7J2(t?O9DK=TEM^1*o!9h21VTQ)n z(j)3lxUq=Dg3YwoLl@zpq(6X 9zscR|TR>%HVye3Ey$;A! z;*AaUfH&!b=9p{xkDk6)BIbb13qhqSrTbhCf|zbO+|Sq_TRx=CXzBqs_5l-zwanqq zPo-Glqr+8rHHlGPgl?@84nh@s9?ST+vz|ET+9htw_NDYq#T@Z<#vDF=lx$Zv=f15z z2OLp8lp4=MLA4vVG~ol!m|tQ(ukiI6+#xz3bX$$zT7V?3_R}~o{;&ugS03G38;Oxl zdx{e4J$pvR{D;;;O{W5=r?$K>{2M{zGdP7JEro?k6!FR2RWjpI<-PHA4R$)aahz(6 zILlRe-qD-8$WgW31et+>nc-kAEE`<;@L@*$zQ33R-`>X+L=*6i0cJ6gY0B67Vi2=< z&)3i|(+~LRnx@Jsg~ J(AJ*#U4$K zZqP-&p?e$#n;qMzg1zD38cn-(r5$PN EG_VZL$~si^5mDjY~+UJ zw9;-z6>s@bdpGBFakYyNeD1-XL(cA65Dl6H kPmq2 zI6T#~YMpOKalApb3iX)23wH?5J=|xOztXv1B^eoEO%G_o+Kmp0D!3L~N4FcTz%|9# z-}T4s^Xun6En}+6toWDcbK{XFY4ML>)Oy-ck9^>mfK>NgpFd0KV`Xf`JCUCs3~kJj zTv>f(aVbm=M6tT`A=scfx1Tui|IDpzg7yVgy1th}+gJ)AtxK67_76}dPm2#Gl0M+_ z!+VH`Jd;s4y5hcN>R#fc-R;*?Baz~(d-p{`I94aCw93AK^fLCfRH%cW#dWXxdmwbV z`wWrKQha9c^H;vmzQ<0r?J92>OXSn7OIq&8)lX00On{dAo!`0laQaqxm3VD>s&!*6 z8zmQ{ fNF5Om@e#)6OkeMFl_FhEby-&TOj#`K5#yaT$hP8aZRR`nmGk?WdpS*@U zHT^Lp%XC(KR}=d+LGf2*q_gEzQrMZBHU41Yu#3i*TI$pE)Eoco{7TOR6$;j2Ia#fC zfwyCXjflc<#=Safz1F2)$vP{Rn5#3)_8(UPa{oKlHU5nj)n;1(uh-uf!{ n#O3pJwIa6*MYSOh*h_0tw_`w3xM|M0!?`*^13q(F4Ou_5K0Aq&U!%gZ#~yFp&( zOh zZk?c2%U5ugM9y{HgCb$i&CDV-WxR1FA|11sjWCWX|Mbz7UzJ2c? z8di=yN3^Yp)mywA?lOvdL0e@KwBfn38}Q5L@TPKiEfh?~BKgwsOuNH()}qy#5g3W4 z|M2RIfwFOCjS<*4VfQjZQ|2FJZZ ZFSjhVvGq^1Z!tuN{Z5Mx1sio$ZmW?AV`w5uCQ^ z`AnA~Qm`I;a{MAU;l$yjsSnz@n80i#L%7GLo3ia&e4dI}d3L=x8muGJv^uSrEIQRJ z`jMqMlg)=WapojwS-OyiBYgDaJnoOo3#>yMYq6I-74F%mly$qtBO3;{qc493F~(tY z9#t}h=K-jf3ma$du2NZ|ZVal zl^u@Uby|`aM~EY-0}(%)uh$4U`qyE-N+x32?`c@2>^>N~d+l!rfPeg+-@n3*eP3@5 zg`ccZWLunQW~17 (cndfsL^q?jk|)ZGV^6>A%p09}Z&EVj+4}40 zZ({|&vd|mb@r)d~di2q!-2$LVAu^frtFB-u`+;sYt$@v#B2y2E| z`(3EL$YHm&TZF;L#^OJ~F|O$K7s@2`NyH~}4mA+dy4*&6?3v81r~f_Y($X9VTMBJ& zQlXeWPS=#DOf~6597mY)qr7rD@j%?GrJ&D`pdP({ZyQ z;Z$uKWUX?9{7ZIEXDRHNhMllX%VN!xU1#Wmi_d<>LlzH*?yOt@D*A@;*2HP++@xE# zF+(>qPO0Inv3E5mGW9I$*v?$g{K jWjm7)6GgJO@(9J?UGvsF z6xW4F^nLbMD%WVGT3?_fl%Ky+IFIwO%-5->=RB!breypH{ivdgQ%10<;Bbc7yiaIM zn;<&Dvgal&GyBW B_DAhz{F4EmiMKf_?KT(XTE~= znN>rcX TrW+VmIMOO^01#seLO34u&k4oV;N4yTdn91o|nds+++m_K}flj!JjR82cu zuPK)3DBheg)ZnzZykU4bt&!-cw6bvAyd^aA&m9+BkWV|C@ Y=B1toWnLK&rr+~_Yc(*;2YT_#M%DF zP}Ul&M8~Ccq2p%se~qWjTeNxa{f%>Ks4kngw*IyZHRwKsrrQUW-AmK}x5ZgQ7aCnV z5;cYG7~3O13vC@wt3(5g_e;JRjxi9 ;bsdRVeOWD}Rm4|)ubbXhzRQ)xd%m?#scRM1ZXKFmwWMJXiFYDT{>!Dqh(Vi^W z^mbu|Pm=qV_ UnzcQ2QY_Rj<)4$V~g_1*1QjcO*v(JuFiV# z^Gfr{^kumvxpkzD`o~B6D_vH%y>~~;uFlrur}BbL$=agY^D}l)?7a8YAKLj*AO<;| zq4{LBqErv<(Y=e3lH3({ji+a=1dN>!C!qy?Mc0(LF*L%A7ukgFU`9Qu{>@)P()}#Y z0TYIGB-qi-w#Su>>x;`qgzoS%8pZ^SE9riljmzj}L}h+-^Y u$^l9_2}(u#&zUgCV@MA375dVXkr3ecF`S5ExLoO&M%ak zaT#fqOzTwz6U2ld4dbEcW|vVadSE?dQ8!xn>iC?HP{>3mF51&`kD73{Lh@tOP*eq- z$ghI-?cDG<@yf1LYU}d} Lly!l-->SjeK> Ao_RUrWjWTCn3d$S5vXk#eQW1$0(+VaMEU$>@jRAi8_3WP7 zm}t)cSGj(hB5<@Y?IJc|M*ITPdVOs$<9bSGQ)o2uf8)~qJ$UCt$WpBg>(q{p5z$k8 z4j=mac5vy}J>*@{2o=PK$Ovn5e2_glbP0*3iik9&Uk4I$HYcQx2;9f80|`%%9Hbxw zp+%HL3kR%=%J+L4Ek7f~_}3`i-x5`t7~Q x75?BJ+R0z}&y^8||JLn(*WyH^~ zA$;AqAtr(@iO|u`+b>X++hueZ0CTN+3BnMY&_EX3iG+GqRg=Kf$9If|;G1#FSg-`& z1a6qA&=EQ)V`=FbNC*qJqZ>{mG+G$GyoSgmyIw~u OQ?>OjwWBYR$ z-Y@3}s3*P#ojZ8SyH8k5s1)W7uD(U(LcRWYfeJ!mCInN@n_hVdz|`@7lek^_PrP*l zr-!#}Ae_#yR}uf#?cBiekMqPJQ2g`X?%;YuWV347uQ8nV1-f!p5vM`t{qW%|hXm*X z!ll{`d`NIf1R5G${Q`wn`cgrb`e$$Bp*gaX$Vwj$jwoR2`C+u{2 5U5&IZx9aBq;@Se z0r?&gfNEd -2+k mZy21fVD+BJ}u{yDC z_^`M80Gy}xtQ#&8c^C>U!Wbt5WyJ18LEm8c3kkP{>Mfywx{hu5R}oe2^JJi|zY>2} z5s}yh)75PQaKGoUDzz095J(3k388s2A%PURw}I@CT<9KPOa@9Uk>WLzmva68!lVBw zje!3{Jo=x~2>3t5qyH(5fd4&@W(VLK(@q_xu)7=~(^qzb@c$eN^q)h4{&OfO(xFxn z|2Y&C=}-f3q(cddAsq@Sc?%nedTuZFC;b0)qg0TQE7Ne@mKnn$!9;J0_yA)pr?LhB z4v43rP8{#%i@osE$BD7l{1)} m-5D3`0tgv$&lKVv-tw z0a+^NH%5ceHXA&DQG*8>sxM%N0n0So&F)}bO}khqlzNs2=CW{#q!Rg|0g|aF#!Rq7 zQ5SO1_SRn!n2P{V0D8tZ?Y)ZlxZ)TGO?A9jc>yX_Jwrz}VNWJ3_NJ%T9o%?><_7j~ z;}mWi2zEx+2@AOt7Bi@>?1r19Bjs~}tIMYce(^9z0AdxNrUe04H%qWyxX9~vbqEc& zj0_~#WZ JH9Oo=1bZNIvLALZ>QMv5+!s Bd815YWWt=Hhru;|5;#a`_A;LcP6p13UaL1?>=ZjfHB+53?yjcc<48{vj@q+}vMC z@o(Ms>4jfBYwd-fSc w$D4qUxZD29vfv(U;u zcpax*4Af^x1lha}@%%c1a|r2j3ytk)FuceBQW(rcd^Q@|mOwQKZxQiMfExX#+o9-I z^`;RP`+G&Xf%s?mAk+hApF+B#sSk2IVah+;Ai2)L&mp ?!I=A?_foS(^Wq<|OdH&i!)S#L-RErJ3xv(G$*})i)T%la5 zHAH_%=X*%*d@orq+@KbQy!<~-g5#w{`@gAbF?RkVX!}c8O+YX!#00 d12Ma6sF#3rH4h z{&A%N&GOyqx`CNJv)2*G5Fa`F4v{mabkdDPIAGNlji6Z+LNgkMq?!+8V-Rj2SI7l} zc^D4~w>gg*ts=~uL2HP`0Z*id?l)UNa*+X~aNG2KXx{U&Prz&_R3@mF2c}*#4G=+c zd4D5^&b!nE=_4<&hv4unGNkwP)U6^&?;4PmilWYMAgmi|P(VHg+0;Lro9>s z92tN4^}>4K0v#$F2wBVgMCjDUt7s^Z0a*eRiXuS`8X_~5fzWVTBJGlYLJUdF`aK%A zOBFhKF&Ip&lxiJ8CKe@*6p3fL3$5CarElFW)w@2(aAc~55T=f^v)>0V=L%$i =T+0ecQ5pi^GR+UhNs(N@rJKf4LsymvqXjkGenH{PA#2CoS`c&+r%p z^-klO9X)Y-x_85tG*ZO)Bg4%@?Gi52ISx(Lk3JQ Ik3J+T(=r*=Dp- QbOCBW*MBdn#S)Ny#Zbn;)Ydrwjxu{xaj_9d5LQ~Bw# |HojR1wnhGDV#lO!!#m6n}h$9<6M38?S>8z7i4G-!)<)C^0<4h8W4^x zkee{GKhSZ>Ttu4&9Js4~G3VMB-yW}>p1(KAo7bscO8Dl*Yi66pz5Ki@KLlsF-; aVYQ&av&6ZF6 IgvZvDLU>F3dgzP%#lr(Bl)c!l$Ts;f_&eNL2qCH7^#_wj {mcD (3fEqd~I~upH$|jJl|9{ZQs`ra;7w$`sy3jKK>mkb`=< jmYl z!__{NxEe9{Cqxy7=lfO3pNQA(F5)1j{d*ZYsc*r_U0^fF-P%;GLsR;&^yOEnEt%yD z@!E%>DL5}J$hv-pA%}1}nE>@Y#jPRdS09z*pBCz|Wz1S{+xG2x*i`2RIXqPx!tXl( zyN9K-$703u`s5WQZ(~F*|1Z7UCTSfYSddhKO}`SC)yrftIuCV2sI#^YAxEH-5Q42t z*_hfWEl-4<#7)Ft7C1tw?tA(kMNy-&10mJ+8&{S0v~P>;5mNhDFD5?RWHbIPV<}Wb z$A;g%(~`Ez$tPvZ*6*hZ<25-kz1%e531bhUjDZA>R)0jxr^A^W8%d>aMM3@`h$AuB ztgsc9|I8of+Y7o=(r1o63C-><=!;)gejlfC(GB1M^Gcn?4*>$&KP?np>%|-8Nm(rH zy!Re2PpxOO)ckQyO;#{UHel OSb}d^p*hiu2yc_mFr25Q@ zP6My{yq=~w^_f(=D0SW6V$!UR9yEoioE xV@9{^q%2&S>G+i?X-jx`L+Iql;)1 zh0`uV^yBMxE+*_t<+mqgXQ3Q?K*J2N>C2s=lW()*i-K8de}w8sZx}KkO^8-ETvP4& zRpj{ 3!M{!L;xUp!j- zQpt}pj$RBckg^TTQt;M^w|-1 NK0dhD=?niFqYCKA2x zzgGT++RS5EgnAxTDLO;TA2Rm08$%b}8&t^gZ pHAK9iyXrg?ct?98~>7vh6e@^kLZBD(XQ3bW3Rg{MO#? zeVpO4$G&3<3;ofhmQN2H5nST`8$2_As`(sGcj-zGGX5b+$n*622hg_U^776KjQ9DW zoVgVf;kr5eY>sZM3ZOx_5}J@8#(R%ir}jfu%4_@$u5 !5mchd8Ab($Z+tTi9c^jrLv0{mB|Lb z-FhI35>@h?K&!BgL<-a>6P(;Dv2f3vyQURV<|B7d(!79L2#lUGl~=uR_C506kqV^= z*LrG*ukt0=@$-I-%z>$zcgxX=GEDDC` $ zC(qUBmwhiH>a(!XyrJfAarRu_=+Wd;8Uyva1QkcY>)da%i?YA_u}7$fk6m73Qs3M@ zi>fR~ku@D#uktf`JJV{eWVD{Y$bqRwL=KK QsZVcQGc!5`vboN?Z26+l+)1urXW`>r`dx2KF{+%!!t`l#zwUFu4ZU3|YaX`+XLr|OQ@=#Yb>|MWOIe>H}IT(z7|kS633=NS8$Fokxn z2^olZ12-$J!QnRzVFn$zINYfDmm3ReEV|q;Y?|U^Rm}%fXDSZTndJL*yp+AcA7J6Z zB({v=cjFj-&dh|z)X_)5$%h#|eWSKt7ZMYbI{|v%SG9d%RnGR1C@l+uq0}Tr)qh@c zH$MY>=VFQiEC=HjS x)*4M?rIbzf1c{T7HZa4medPn#pX>_IK}q3+q%ij zw?24V;-#0isC(x9(($1Bi`}nkQ^kiCe}RENbO=-R@2P7ingN<~dHoH~gjRfr*M9{Q z52gac;=>d(r+H(_52!4|m4pW4_ 9 zQL1Hs$W^!nUs9YkmZh`(__93>MBC4soH@+poQ&bRFX{;|((>HAy)BXq1>S}M-Ig#8 zs2GCVf5~#sBnevG^mTaJ?2ld{QCat-R7bTi%AJE{gChNK*sSavDgSye{~3rW?B$Ud z6caw)6~5q)l3NDr&8aU|O^Dr(O0DXT)`#0$#mWS0EM8M>_7;s3l|EiUJvrh5*jmmM zD>^1OHx@!Z*MuB*kze3(cQ`FyPTeolC_&2 rZOiq9CNL!mdT&%gwIe&fpb183o+tijImHz IGiVq8rKgB-V4!Y~ zFHd4#UqVe`=?F5nGSLDou(n^d;MIcye_5lh`d-mqZiRMx7vF;q40eZ&JlIt|3p9)D zaNx|q>S4lic|O0nyQuh0-2SI8Qpw|3!Co~Zt?rkKLgjkhxHe`AHfFV2u|5xz+}?Yr z*$N!`U0ai@Qemug&PXFg-XCcKNMoUVP2n|*y}o!x5yuBxDds9lyeKqTk3n$be=i+4 ziF_3O)xnYHr?Kw}*TMi&+j6}z_7i*aLuF0roYTSy>m9G@{8}4jF6f0xrornlVzjr^ zLtDGd(^-E!?#FRjyx!7mO;^+Q#Lm&id@xGp03NphX&O$kED_IW6XnLh61Sm5i(L?0 zdiq$>XRGEGmkW}0&OXGJ51s`>fA{?#lZJms%T@JSOe?T&yOzdHn|n%Cg9@{0svb=R z<5$qM4MU}P_d_kqpqx9N4*6;MXy8oku$AHwl^a@Nat=3z3e*!a=&QG(0JhWF$iqKo zhG?Cgxluu0=zb%QcyUn#I13#NpvLBLr}e!)M7ZT12T0%LL*o4*qxHe(f7j?c+(Qn? zhw&2!I3)l>jKZwgzRzvYccOd!Ch8P@g;0jE#2Q8PJ0T{Gd=_PD%^=r9;aw;MOMo43 zAl^}9t1}_p@FpF9L@d5od2-YOc~wux$%_NE9wdKi(L62Pb+6_9@=+Y$b$&P&SJB|O zd=&G&TZs;u+%EJ=8)fn Ble(g33Q>p|)5od_I3|K;b27FIJfeR|#m+w54-*GO2Y^1ijc? zvSaM{; U3CK|Zk$@ufrmpdf?%O|uIt$CJ4lTixwk vUJ4)GgQ<>qwXsqDH@*btMpuLu*hy|N-uUSdwAH +8ug Xau^0e-;{nZhRdYfgVpAjX<}4BaJ|J_;wlr=<~7~ffgH=*9d@+yr4$V$&5IS zz&CuqMxZIYu|`mLe5OVKCSZQ7#K|g8U-nQp$yZst$VZX$Ioh2JFPp8i+E-}81DXbC zQamajJV*^e?9<25I9cTneZfVuJkR F0Y(vcu&8~Og=h+)u~@eVhxA6mi$2Q~P)-r1?$qr*@+u!eJkKza4p zM*pzeuIgzXiq|bU1{+v5csy>^&fWB-`XM7%X> ugWupO1`hZVVRpO(Ly*fS~HqXDvHD2wOmZnv)1CYdnresjbeHQ=BmnRu(FO>Js zMRK)*C`?*>MhDE}nx^r|<*&i5YKDxLi)cMyf29ScbNEJOi{^51#K=YabDs(9rzbH! z?@1jmbuoivI*BGExZhmjaXtOx%c8}6oYAV)_#tj=ImBjEpe+ozM1BRirh) >h5(y7WOpA9Wm7&Tsk)~jyEK| zcT!fD7Ey&DyMnM5$2|_?gd0W&o2;0v7we_ywcv2UCE0fO(5rv0Y@5f}y YDNo7nO-H@2v+T8MzIl3p8g7Kj5s{5+O24%uvSBx?raQqq9EHg8dmEc~WE##= z8O9#QGE$00-})_Ekbx%IyRMm-l~Qgalm_0pttI1mS`p*sG&Rh$F_CTj;fi>~f9f>u zYZ~6YMv}4OeWp2}!|qo;S4aN5aw=pxw$3eeoqEFSS>-QCfr)&X%+qw0+EQ@xMJ()D zF<~|ikReld3}W4M-)zb?oD$wv;-`pw)*TG<-^8WGO%Y_KN)u44qROO7hcUf1NoUKY zSeDaw&(hE|Lh;#!G%DBdF1+Mce?N0wZ+^>H>S60t@?FV}KApQhK{vhR=Kf!U&GSmw zQ*jiHd}D{X=J5CnRn6Dlwv`|11f0bcKa5FfkP!OA<<7H@q~u6qHvr|BP@cYJwpTdB zzjFUro-+SP96i&?|LODyl8>?sguTVcO!Kx1OSNipI6HfN(~P4VZ`D+mr!P`9)xB!Q z;0meYIC%+(Cumzkb-3H-2VAic939&-(lVsrESoQ+=R%7#)1&&UkGgKDhUG_555VBI zup)sg8j$+R);@Ajko&R!e?sYK`I+o3iTsh9nu|(U#`&B{4~j)R6l Y}T6Z z9u}~2E=e(av?OWplBCg9Er~fC`;rXzORs+Kt;KqF&i$lC&i!$Nf1LYarD3ye4$`@D zOY!<<8hv`xg+AX _Nqm$ zOIe7e%s~kxlR!CSe{smM#UQl!w^%67k{ICNQd{(uyIh>i53}*9GAFcs`5mk*P4=&< zk{XhD5H5<+Kl$=f>_{vt2Bn!?7UIpdPs=%_5ndA-hr(*^id*YE464?=SymjD-nmC> z=u|bn+OO^61Eb+|F`3WTX=b^) H zu7Ff!&C~YsvRUQqVMi~Ljp}zGbjSFE62l9>m<+wRr62yLqFAB>yO-mSr<^lv3M){o zIb_taG#22r-BNt!Gph?urvw4ldd3M%jnpjCw2G8-1O{liI}(Eumf;h-f4Z9~ss&}9 zo3(jpO3RA7e~^IJXk0~6jY`MSIlgpZ-ye6++4ht1v^37gv(Y?X)xIQYRrBSaV^oGK z-0Kc~In^-48pm`HntK5qeq=ChiKSk3@douNe|~`iANMxbCEF)Bv2a 04KIM(n9I?F+~!=H z21TKZwF4V2n(Jt#=begIqItB*hC7C;fA}j1$khY)D<%!d_lEM{|CQ_Vr$i>ifh)v$ zkvkh*Z}`X0Vtg(h7yF{!1mcIv6((3WpuTm|dX{I+r>79}?*LG&X9liVH6acQZ_{)B zlx_Gke?f{0A;?i*EJbm-z^s#;b=i3A-wP4xm2l;c#*;m*HMQtbmOFFq%v5Ylm2@MT z=ctn3tS%o8_^|q5EnRD71 uF_oX}XW zOqwQ( _`l+!(LCylP436>Sb4CDe `*d*GDZeZ$C?-G$7RoXJ&-!} zS4-*4ugqPYTeTikxmZ!P8j<(nzRT7pm7wvtN-j;EdZSd`L?r2SU9_Td;i-bBPweS& zW&W$18KE$`ExqKBF{N|{@ujS3d)dZnW}_QVk7Y1DjQlXv<+3}DK}^cBqP6+(h{}`E ze~pVf?enC}WehTDG02{0SqfgM?yj % n~OxjB $Mt}Ifg?qC+84Mhf^}j*SYBc zH!kmb^Lr%NgI!}1ZDB@cjA3L3Q^DBLt@_Ta3Rw@p<9!LFYgP EbQAj9+|x4B+Ev2u#8~_XBcO(e@P#f zJz~LnTPaq x78Pn`-R=2JGkR5>%Gh%_3~!1wGRjR)+xBPF zq^ {Yesc1)QY8@NriF^v*_EcKTBT*VCXsmML-UHUk8JBU@^3? zo_j+fe6qtYN9$&2pLr0yJt5?af7xkC))K!HM$L@nVKkHXiREc>eJYK!;#DQCe*U=# z>^F1c7JC;4v{^SFN_ICX1e$4z_6sj)YUS3ky5sqAOlH^T#xZf!0)loxvnz;Wax6)U zIHpT3Nq8JnxM?CQ(X;1K9 { Tx6-Con z<~ Q=m zG>z&zl9R2e2N?CqyR<4 {e&T>u{%?O`2$BpO( z?f+72KiYelJ`@D#e}pcEN8(Cn9FV;Y7leCWM@4S!o2>Y#UMjQ+;g1p WAH4RjHAM8FlK@R&tjTWDS$XBX@g#yQIdAx6MkZC$K6(+{gHtEhy;o zQVY5cRoth4htqa~TR!i g;+CEKG_oMmtB8Re@})SHrOOeN5<7AE;b{n zP+DIH;$pM-KT9>?=btyv&$Zn+fJYF0YX5SQQ3Mji7p(py--6~GDGD$9M^MsMzsgtq z00|dIMqX($0oJMP^2xvRlNnZF?()eD?%<3kGpr~7&7aKh&c2pUW-Q=@@5ziMf}xWq zGpvvNTA$1ae^Hlj|0+zMCOUs$@F<6Ci>Yp&e}HMA$KvSD;>b8Ze9RKK2it} d_fbQ7!fkX z8x)ye?89ohie-jHI397tfSkcYnar&FP%IV6vn`fNf9Ba9rHffU?G57SreEd(?@gnd zTN+%?4M(lhjt+{3sufORWfxcPJ1T7NhNTQ&Fmqf-yC~z}M$?-rI5UC)aq@i2m%=ux zbLcxMb|cZ*o6E*#zA|Q9 +!gjW>!aBfIufkYGAyhMx=){va zEic>re=qDp!f6?mT)?t8H#X(=wYWH|)K`j!ut}gtxZLiJIlKBiVa16D{e0g~x%`fH zK%VLajEXTw)@4I8XAaX#Tn8Y4$L;20ay|oT*}*5-X^>>c54P%YW(EeUX*9-Bagv5Z z{vfWo{Lq5B%0tfOwU2e$>nbCA-HDm!Nb^j2e-aXP|FG99 yH2$a7!rATrN= zJ5H5I&&}sw&&j2-c#x0!R- 9=#lk@5B;AS&>VYt85w17nV4G^Hse5aKK~p1)C~Flb|8$ z-ZuUE17_@mCfZ44y{{AcAb<(3#~8kDf8JdrJq?3pJCxF`KI2?DyYt|^R|XLEa17_j z2|?EJB2LgUc>I^7d3zjLwBY;>$r%!n&Ar`i1x%vXgb!|&Cob_&OhLJ4#0A^ z^Ep6B>_6q6OU3>>5;=x(($t;|lL_3Xe2ne_9Ks($99~QC@Z%``@Q{2w%(+oWe`16( ztKzb54wh&h9?!(WOH7KnBK%SFWN~!Vyd##qZWW%^(oTbohrfru1#cWYb929UPD?$~ z%z8CXSIKg|U^jFxaggIt!lrW2E=CGz-$ax!7+n39yeb3WUK{tN-z@&0%?-+)rzR;! zl*7>))Z{q);FRz%kQ3anp0?J{e-r|)y4Ro`xa>0pv+Hx8DR9&RV)8+=D|n{hSdtdc z6fU_W=RZ@R^4S`5NuDVLtIgJ$dyO6 xj$>iP(Xf>kUdjT`ZA4^7(UZ-`q zKYxQ%!B#pOY=UxFjj L01dH8APa8PD`r_UbLBxz8z$pP=i1^;6g!jOP ze}$Y|&_z)^$f4B894l3p5KwDxqVRv1d-*&jV>ZW{vBonKd2{Su7^}w`p8!*xnOtGy ziV5wX5xzRuv33lO(6gQie@>=o6l*~dP-=miy_R Kh%yTx7i=>bw z!Rlv3#{?|OV)HCH(r)+8vlXd Pe zSu9y~nH`r1f^Gl_e}UG4&TaqfE)$)t{m;Sc`*zXUoToU3C=)ER_BPSktf+8CXBQO& zn*?a%K1hJJ&Idm(%V(Y8(WF+%g~PRZUkeki&8V{OAZ!ap-y{gz=-{6(hs|-dS$Z7W zGwo1G@E8#ZEmME=x|tE~7(~=Kl(zAX$HQ^`zZ=4uPM>FZe~?hoARf-6crhENtCkVZ zB*@$@EK8xQeo(xpzpLbvy;RQ`5m(1tD94*q4R9?caWYL-u_ZL6`Zx^H(oOh0?PUgg z*tDlA_5!wKX_)mXVB+`vZ){v+m;=J&wl)1!MO+Cx_9B*=&cLSumHLMagK*Flf(N8O z*3@aFpqGe-e?n_A9Gt2lot89F)k;8ghO=;MQvs #`T7PbWz)zuG^VnVY9zSm zke~iD|Ki+9Zr{zeMa(p`n&1fZ-RmC(_^CIP75IKsKc2}8%Wd{@WER*yLn9Iu^jen+ zQ7J0iPxqa5i3WpJzRq5@)|>7wad1*ejn+0IRE&DrW)Yqaq7LfrI*B^qs0BdmpxG5f z9XOVxe?`>6C6^>P>OdT?%` (|m`) z*E&Z8L@j7K$YrTp>6# +qAJqYpDuMUD4qwGxz75k)_cVZ*+!JeT6tJgxoUEB0*phM$eSVQ5CqxGUb zUDML+=G5+nBQislf))jN^o!EG MIzvF&f5E*u0?J!*EfZE*eTN}XCb!V-p-k&gI)gIt zcugqNpuAG2{gZOnnSq%#k-p>eb}tz8o!9M|YX!V+OS(SouxBy!?D&|k{>qAdm@l1R zcSXY<5b|{{97z8tmS)K?9CQ=F&o3-4&v1R)q}QqJin|qFaktVdz8>)vcPhW=f5e&y zu($&WMrm{*!kkpklVNdFAx0a7NwIJs?yVG;P#CX~2;hktVTwdiEtI@Qm|*asKN}(J z_~bjr)AsoLrWhat8X}Fs`LOS)(|VMIpo&Y72@3D}gb#`JQB)su-QTg9kB{cVYnh?X zqFe-zR~cH)fos!pf=ae5=d010e>(>D&U7v~A_7ud1_Ai^%6RG+wAY~X#p$vWt$%97 zTrGFLE9@L1W #cUfa*J@O+#+8Cgq%=t?nEajth2FoI4JY& zOR*>oq71CADkG(!N|+ECSvf2{Fd=AKL!fS5D;4(+c&14o8t}IrJA!9%e;|H5<;*;E z0$gAAY (r6|sP iTK;%n`>Xb#xNuC K?m zxY(DE+4DnQB@Jaeb1tlYZ&o!NO()~|G|Smg6IE>h=ytj}4Li| 7WEqaC{WtS|r}JkZCo3cw`x%dQTY7jRfW>6TCY8b ScT}KE>CprC z6N=w*9fWBFs-QHkf76%JI(^pBlsjwVDdVaCBG1=jJ0 {QVJL8EdQR%SkkI> z9Ixi9NiwnCtY$NMqiO=)8>keN=(w4pty35Z))bVGYb ;ejvG!mKobdJps()*mb@Ys2m675Onl+0S!%kP(LTl}nlb?ic z&~DznJQyqTf85xIt^zkI6$3};1*Xqb2h%u)l^TO!Xu|JVD~y-9EkiHZDUn)X7T}Uw zXhY;Q3caunrL)irJYED_o>Q?x9sKWA-HKW-Nb~tJQu8q?$4fT=rwQoK^W^~Gh35S1 zJ$N8Zp0wQ2Toy{JBwZN>bln|fIsDM9Y*xt8f4)5JfB*Qyca#E)aG(biX8s_W>lgN9 zD5_O2jz`G&?V#y9)Z>I|hBeb6-G{V%OKK}+0Jwtqrf~u{ZZI9zEkLJ(>CJp|=PY>u z=k;bK55PDA<} PMyY`lB|CrJwfzR|Dr33)s?|ulPW@$~*trEsEUn}Bk*nNbI+*|B{Kf9EJ zNA@!J0(YqdrtmY;?E2(KnWXFGsIxhlw Ft}wx|2Ix4lbljwpgO6Q|q7LrT zCL`-HLIogPjMPN|h}Gt^^+I!1bP(+{UaN2GfA&=!z(mik>cA*fS6J0SkFs@D2VTi( zSk=KJRoYc`aOIU`t31@B2(9vvG^TRdN(E-u=jIIHs0BQb2hGmT8SuLn`@0tVyB7Oz zrNtIpazQ;dTw(iNukBo~jow vj@zq$bIt%%siygMG9w4`JySDx&3MX?%8?|GMiFo{5uDW z!^8Jvbaq&kw73mZ$;PQtd{dQd_%arHejS#rQS9$4TH`1rqX)&;Nl^50l>|~tBuqgk z1MymOlN)Lo)E1&c)h@| ~RjL;_1LC _egmGc5kX}!w)u)d9(NRTX`Aj8m`%r0#wc_Ie9fZ3$(N1o#tkox z!a_2g6?E9^w0Q*`8w&49E}hiL-z@~fO7mT0Qs>L_PD<=}1>rEcah2q8%4Jt^f1Xz2 z54LY2A<8CAWkcD_D;1K)Qo&NCsGB<%8=d4jbQ*wHQDMUqW5q^W<7UkJrBI)GK(saS zh49hVbxV6p6$Mrb|4d4A)7Dj@R&l 5AX+&pzDs7r)=iWe{9R`=KUkKocp+|)y(AH+RX4P}xfqw#b!wLZ6G z_1d-xP3*U&bhSJT$59fkqAY89SAzMKZ>qlEtzNd-!8Y4ute@23_nAy~e{^iFBV<3W z$|?0etfu1j$c*urx%Kr(y3Va{E`m7D;O4;dpUkYAUF?tSDmx4w U+F=>A{o4E}aEpR=9F z-|c8Oly(7p$_-Z5LR#a8f3d7!C61tcRcagW+<1~)-*LS{<0>1gQ{b9$IRVF3CB7$- zj#J0v`6n-!`HKv5JeVnVnkjR)nuWYPp2V?y+2(&?7ms<-U0nEJDV%JQa$Hh-?+-ew z5Wbl75SQDX5h3H^k(x6aQ7*r89r`kbM!={TbG%w{!vN=ciEB6$e?+&K9^B#pP@7bB z@JV(WbZ79jrUaSn`GH;Q#>ywI@_Wc1Hpf%W49`s(=HxL_9f4#~g-TZS&>KGN{wkLv zXm1FA2ubjuvoz^pQXNo!a(Ak-T-YbZ_#R`NPY6B)=9ebmAu!9iTmqYO9vZ19MzHQ8 z!)Tv>HLgSPi${{vf6A_9EFQ!;9 x6O;K(PhO@< zBiQ^)ipV;jt61Lx@BR}=MC&?3Q-Vzer#-Ju3RDrMu&@ilcWpt6GC*-u1}VbfyF_wf ztAWp&s3b4@iSa8s_-VIyE>p-g2;tnDiYh<)T5`?HqxbY3e|$#Rb_gM2qZSxSg94i* z?UmP|=wl-en>tGaajs5U1}AAekMiZB&Se73p*)gbIOzkYzv6=fnIJA=kx2fLVjN;+ zciST!&3UebIuJ_n-xO;YGH*g=Epl4U`&H(X&j-g}H>c&JXMl78;F3+jxry-^k^PRD z yO9%I8OV+ICy!B z>sT!2>0>#dThntJ$**bv#c*DSlBEZk(tmxNEf+!Qe+is-R0X^lz=5WM)C_Y=(1z7# zO`acdE#}PW$GbQ#c9Aw6u3xs>LX 1FYJ&FY%e<&8b+aGcjj|6;sTqrI6v-%7F_l~BG zDb@=B{(zQ(#!eTU4t uy?`n zbjZaW s*YeU);z(;mi)uG~`Z{m|4C(0*X+ 0)xjxLf4w-68*4N!366f$?~kO1dh9BcoxYIUrpae}&;F zde8s+;~ p<}4$5 5tZj+uP!voob(B#XwVI1Q2PlXt?|psPAz@&tNQ+Nj?)s z5_PW_Qa%%FwIoJ%ZJxQuTM1kPf66Vjdtz*?ExRtJa%&palk$BJv8<(}&?8!Mhr6ji z(kKf$0Z|_l8uXF2V?>LvMTHBLzOQ!q@gS63DFKYBa`u!d0Hoe7da^7`<#rE0Sd(Hp z>-BUoUGzUp^5tqNrZq_xv(>2oVLn~vi;4Vuo@F!f-_>lMrTE-U46a}0e?q}x?p`_Z zyAk