1.m2pool断网重连 60秒内重连机制 所有页面添加

2.优化响应错误提示 3秒内同一种错误只提示一次
This commit is contained in:
2025-04-18 14:45:39 +08:00
parent 00e6f9010a
commit 4d436c725e
48 changed files with 652 additions and 297 deletions

View File

@@ -11,6 +11,9 @@ import './assets/icons/iconfont/iconfont.css'
import {$addStorageEvent} from '../src/utils/publicMethods'
import MetaInfo from 'vue-meta-info'
import loadingStateMixin from './utils/loadingStateMixin';
import networkRecoveryMixin from './mixins/networkRecoveryMixin';
import './utils/loadingRecovery';
import errorNotificationManager from '../src/utils/errorNotificationManager';
Vue.use(MetaInfo)
Vue.prototype.$addStorageEvent = $addStorageEvent // 添加storage事件
@@ -21,7 +24,9 @@ Vue.use(ElementUI, {
Vue.prototype.$axios = axios
console.log = ()=>{} //全局关闭打印
// 全局注册混入
Vue.mixin(loadingStateMixin);
Vue.mixin(networkRecoveryMixin);
Vue.prototype.$baseApi = process.env.VUE_APP_BASE_URL //图片base路径
const screenWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
@@ -45,6 +50,11 @@ router.beforeEach((to, from, next) => {
next();
});
// 定期清理过期的错误记录
setInterval(() => {
errorNotificationManager.cleanup();
}, 60000); // 每分钟清理一次
window.vm = new Vue({
router,
store,

View File

@@ -0,0 +1,61 @@
//处理断网重连后数据刷新的混入
export default {
data() {
return {
// 注册需要在网络恢复时调用的方法名
recoveryMethods: [],
// 上次调用这些方法时的参数
methodParams: {}
};
},
methods: {
/**
* 注册需要在网络恢复时自动重新调用的方法
* @param {String} methodName - 方法名
* @param {*} params - 调用方法时需要的参数
*/
registerRecoveryMethod(methodName, params) {
if (typeof this[methodName] === 'function' && !this.recoveryMethods.includes(methodName)) {
this.recoveryMethods.push(methodName);
this.methodParams[methodName] = params;
console.log(`[NetworkRecovery] 注册方法: ${methodName}`);
}
},
/**
* 更新方法的参数
* @param {String} methodName - 方法名
* @param {*} params - 新的参数
*/
updateMethodParams(methodName, params) {
if (this.recoveryMethods.includes(methodName)) {
this.methodParams[methodName] = params;
}
},
/**
* 网络恢复后调用所有注册的方法
*/
handleNetworkRecovery() {
console.log('[NetworkRecovery] 网络已恢复,正在刷新数据...');
this.recoveryMethods.forEach(methodName => {
if (typeof this[methodName] === 'function') {
const params = this.methodParams[methodName];
console.log(`[NetworkRecovery] 重新调用方法: ${methodName}`);
this[methodName](params);
}
});
}
},
mounted() {
// 监听网络恢复事件
window.addEventListener('network-retry-complete', this.handleNetworkRecovery);
},
beforeDestroy() {
// 清理事件监听
window.removeEventListener('network-retry-complete', this.handleNetworkRecovery);
}
};

View File

@@ -0,0 +1,74 @@
/**
* 错误提示管理器
* 用于控制错误提示的频率,避免短时间内重复显示相同类型的错误
*/
class ErrorNotificationManager {
constructor() {
// 记录最近显示的错误信息
this.recentErrors = new Map();
// 默认节流时间 (30秒)
this.throttleTime = 3000;
// 错误类型映射
this.errorTypes = {
'Network Error': 'network',
'timeout': 'timeout',
'Request failed with status code': 'statusCode',
// 添加网络状态类型
'networkReconnected': 'networkStatus',
'NetworkError': 'network'
};
}
/**
* 获取错误类型
* @param {String} message 错误信息
* @returns {String} 错误类型
*/
getErrorType(message) {
for (const [key, type] of Object.entries(this.errorTypes)) {
if (message.includes(key)) {
return type;
}
}
return 'unknown';
}
/**
* 检查是否可以显示错误
* @param {String} message 错误信息
* @returns {Boolean} 是否可以显示
*/
canShowError(message) {
const errorType = this.getErrorType(message);
const now = Date.now();
// 检查同类型的错误是否最近已经显示过
if (this.recentErrors.has(errorType)) {
const lastTime = this.recentErrors.get(errorType);
if (now - lastTime < this.throttleTime) {
console.log(`[错误提示] 已抑制重复错误: ${errorType}`);
return false;
}
}
// 更新最后显示时间
this.recentErrors.set(errorType, now);
return true;
}
/**
* 清理过期的错误记录
*/
cleanup() {
const now = Date.now();
this.recentErrors.forEach((time, type) => {
if (now - time > this.throttleTime) {
this.recentErrors.delete(type);
}
});
}
}
// 创建单例实例
const errorNotificationManager = new ErrorNotificationManager();
export default errorNotificationManager;

View File

@@ -0,0 +1,41 @@
import Vue from 'vue';
/**
* 自动恢复加载状态的指令
* 用法: v-loading-recovery="{ loading: 'loadingProp', recovery: ['method1', 'method2'] }"
*/
export const loadingRecoveryDirective = {
// 当绑定元素插入到 DOM 中时
inserted(el, binding, vnode) {
const component = vnode.context;
const { loading, recovery } = binding.value || {};
if (!loading || !recovery || !Array.isArray(recovery)) return;
// 为组件添加加载状态恢复的逻辑
const handleNetworkRecovery = () => {
// 当网络恢复时自动设置loading为false
if (component[loading]) {
component[loading] = false;
}
};
// 保存到元素上,以便后续清理
el._loadingRecovery = handleNetworkRecovery;
window.addEventListener('network-retry-complete', handleNetworkRecovery);
console.log(`[LoadingRecovery] 添加加载状态恢复: ${loading}`);
},
// 当指令与元素解绑时
unbind(el) {
// 清理事件监听
if (el._loadingRecovery) {
window.removeEventListener('network-retry-complete', el._loadingRecovery);
delete el._loadingRecovery;
}
}
};
// 注册全局指令
Vue.directive('loading-recovery', loadingRecoveryDirective);

View File

@@ -2,6 +2,8 @@ import axios from 'axios'
import errorCode from './errorCode'
import { Notification, MessageBox, Message } from 'element-ui'
import loadingManager from './loadingManager';
import errorNotificationManager from './errorNotificationManager';
// 创建axios实例
const service = axios.create({
// axios中请求配置有baseURL选项表示请求URL公共部分
@@ -19,10 +21,51 @@ let lastNetworkErrorTime = 0; // 上次网络错误提示时间
let pendingRequests = new Map();
// 网络状态监听器
// 网络状态最后提示时间
let lastNetworkStatusTime = {
online: 0,
offline: 0
};
// 创建一个全局标志,确保每次网络恢复只显示一次提示
let networkRecoveryInProgress = false;
// 网络状态监听器
window.addEventListener('online', () => {
// 网络恢复时,重试所有待处理的请求
const now = Date.now();
// 避免短时间内多次触发
if (networkRecoveryInProgress) {
console.log('[网络] 网络恢复处理已在进行中,忽略重复事件');
return;
}
networkRecoveryInProgress = true;
// 严格检查是否应该显示提示
if (now - lastNetworkStatusTime.online > 30000) { // 30秒内不重复提示
lastNetworkStatusTime.online = now;
try {
if (window.vm && window.vm.$message) {
// 确保消息只显示一次
window.vm.$message({
message: window.vm.$i18n.t('home.networkReconnected') || '网络已重新连接,正在恢复数据...',
type: 'success',
duration: 5000,
showClose: true,
});
console.log('[网络] 显示网络恢复提示, 时间:', new Date().toLocaleTimeString());
}
} catch (e) {
console.error('[网络] 显示网络恢复提示失败:', e);
}
} else {
console.log('[网络] 抑制重复的网络恢复提示, 间隔过短:', now - lastNetworkStatusTime.online + 'ms');
}
// 网络恢复时,重试所有待处理的请求
const pendingPromises = [];
pendingRequests.forEach(async (request, key) => {
@@ -71,27 +114,46 @@ window.addEventListener('online', () => {
// 等待所有请求完成
Promise.allSettled(pendingPromises).then(() => {
// 重置所有 loading 状态
loadingManager.resetAllLoadingStates();
if (loadingManager) {
loadingManager.resetAllLoadingStates();
}
// 手动重置一些关键的 loading 状态
if (window.vm) {
// 常见的加载状态
const commonLoadingProps = [
'minerChartLoading', 'reportBlockLoading', 'apiPageLoading',
'MiningLoading', 'miniLoading'
];
commonLoadingProps.forEach(prop => {
if (typeof window.vm[prop] !== 'undefined') {
window.vm[prop] = false;
}
});
}
// 触发网络重试完成事件
window.dispatchEvent(new CustomEvent('network-retry-complete'));
// 重置网络恢复标志
setTimeout(() => {
networkRecoveryInProgress = false;
}, 5000); // 5秒后允许再次处理网络恢复
});
// 显示网络恢复提示
if (window.vm && window.vm.$message) {
window.vm.$message({
message: window.vm.$i18n.t('home.networkReconnected') || '网络已重新连接,正在恢复数据...',
type: 'success',
duration: 3000
});
}
});
// 使用错误提示管理器控制网络断开提示
window.addEventListener('offline', () => {
if (window.vm && window.vm.$message) {
if (window.vm && window.vm.$message && errorNotificationManager.canShowError('networkOffline')) {
window.vm.$message({
message: window.vm.$i18n.t('home.networkOffline') || '网络连接已断开,系统将在恢复连接后自动重试',
type: 'warning',
duration: 3000
type: 'error',
duration: 5000,
showClose: true,
});
}
});
@@ -273,19 +335,12 @@ service.interceptors.response.use(res => {
}
}
if (!superReportError) {
superReportError = "error"
localStorage.setItem('superReportError', superReportError)
let { message } = error;
if (message == "Network Error") {
// message = "后端接口网络连接异常,请刷新重试";
const now = Date.now();
if (now - lastNetworkErrorTime > NETWORK_ERROR_THROTTLE_TIME) {
lastNetworkErrorTime = now; // 更新最后提示时间
//使用错误提示管理器errorNotificationManager
if (errorNotificationManager.canShowError(message)) {
if (message == "Network Error") {
Message({
message: window.vm.$i18n.t(`home.NetworkError`),
type: 'error',
@@ -293,36 +348,84 @@ service.interceptors.response.use(res => {
showClose: true
});
}
}
else if (message.includes("timeout")) {
// message = "系统接口请求超时,请刷新重试";
Message({
message: window.vm.$i18n.t(`home.requestTimeout`),
type: 'error',
duration: 5 * 1000,
showClose: true
})
}
else if (message.includes("Request failed with status code")) {
// message = "系统接口" + message.substr(message.length - 3) + "异常";
Message({
message: "系统接口" + message.substr(message.length - 3) + "异常",
type: 'error',
duration: 5 * 1000,
showClose: true
})
else if (message.includes("timeout")) {
Message({
message: window.vm.$i18n.t(`home.requestTimeout`),
type: 'error',
duration: 5 * 1000,
showClose: true
});
}
else if (message.includes("Request failed with status code")) {
Message({
message: "系统接口" + message.substr(message.length - 3) + "异常",
type: 'error',
duration: 5 * 1000,
showClose: true
});
} else {
Message({
message: message,
type: 'error',
duration: 5 * 1000,
showClose: true
});
}
} else {
Message({
message: message,
type: 'error',
duration: 5 * 1000,
showClose: true
})
// 避免完全不提示,可以在控制台记录被抑制的错误
console.log('[错误提示] 已抑制重复错误:', message);
}
// let { message } = error;
// if (message == "Network Error") {
// // message = "后端接口网络连接异常,请刷新重试";
// const now = Date.now();
// if (now - lastNetworkErrorTime > NETWORK_ERROR_THROTTLE_TIME) {
// lastNetworkErrorTime = now; // 更新最后提示时间
// Message({
// message: window.vm.$i18n.t(`home.NetworkError`),
// type: 'error',
// duration: 4 * 1000,
// showClose: true
// });
// }
// }
// else if (message.includes("timeout")) {
// // message = "系统接口请求超时,请刷新重试";
// Message({
// message: window.vm.$i18n.t(`home.requestTimeout`),
// type: 'error',
// duration: 5 * 1000,
// showClose: true
// })
// }
// else if (message.includes("Request failed with status code")) {
// // message = "系统接口" + message.substr(message.length - 3) + "异常";
// Message({
// message: "系统接口" + message.substr(message.length - 3) + "异常",
// type: 'error',
// duration: 5 * 1000,
// showClose: true
// })
// } else {
// Message({
// message: message,
// type: 'error',
// duration: 5 * 1000,
// showClose: true
// })
// }
}

View File

@@ -0,0 +1,34 @@
//自动记录请求参数,并支持断网重连,创建一个函数装饰器
/**
* 包装请求方法,自动注册断网重连恢复
* @param {Object} component - 组件实例
* @param {String} methodName - 方法名
* @param {Function} originalMethod - 原始方法
* @returns {Function} 包装后的方法
*/
export function wrapRequestMethod(component, methodName, originalMethod) {
return async function(...args) {
// 注册为恢复方法(仅当组件支持断网重连恢复)
if (component.registerRecoveryMethod) {
component.registerRecoveryMethod(methodName, args[0]);
}
// 调用原始方法
return await originalMethod.apply(component, args);
};
}
/**
* 自动包装组件中的所有请求方法
* @param {Object} component - 组件实例
* @param {Array<String>} methodNames - 方法名列表
*/
export function wrapComponentMethods(component, methodNames) {
methodNames.forEach(methodName => {
if (typeof component[methodName] === 'function') {
const originalMethod = component[methodName];
component[methodName] = wrapRequestMethod(component, methodName, originalMethod);
console.log(`[RequestWrapper] 包装方法: ${methodName}`);
}
});
}

View File

@@ -171,10 +171,13 @@ export default {
// this.stateList = JSON.parse(localStorage.getItem('stateList') )
// this.typeList = JSON.parse(localStorage.getItem('typeList') )
this.registerRecoveryMethod('fetchTicketDetails', { id: this.workOrderId });
},
methods: {
async fetchBKendTicket(params){
this.totalDetailsLoading =true
// this.totalDetailsLoading =true
this.setLoading('totalDetailsLoading', true);
const data = await getBKendTicket(params)
if (data && data.code == 200) {
this.$message({
@@ -185,11 +188,12 @@ export default {
}
this.totalDetailsLoading =false
this.setLoading('totalDetailsLoading', false);
},
async fetchReply(params){
this.totalDetailsLoading = true
// this.totalDetailsLoading = true
this.setLoading('totalDetailsLoading', true);
const data = await getReply(params)
if (data && data.code == 200) {
this.$message({
@@ -205,7 +209,7 @@ export default {
}
this.totalDetailsLoading = false
this.setLoading('totalDetailsLoading', false);
},
handelType2(label){
if (label) {
@@ -231,14 +235,15 @@ export default {
},
//请求工单详情
async fetchTicketDetails(param) {
this.totalDetailsLoading = true
// this.totalDetailsLoading = true
this.setLoading('totalDetailsLoading', true);
const { data } = await getDetails(param)
this.recordList = data.list
this.ticketDetails = data
this.totalDetailsLoading = false
this.setLoading('totalDetailsLoading', false);
},

View File

@@ -92,7 +92,7 @@ export default {
this.params.maId = this.receiveData.id
}
this.fetchList(this.listParams)
this.registerRecoveryMethod('fetchList', this.listParams);
},
methods:{
@@ -100,7 +100,8 @@ export default {
return getImageUrl(path);
},
async fetchAddNoticeEmail(params){
this.addMinerLoading = true
// this.addMinerLoading = true
this.setLoading('addMinerLoading', true);
const data = await getAddNoticeEmail(params)
if (data && data.code == 200) {
this.$message({
@@ -121,17 +122,18 @@ export default {
}
}
this.addMinerLoading = false
this.setLoading('addMinerLoading', false);
},
async fetchList(params){
this.alertsLoading=true
// this.alertsLoading=true
this.setLoading('alertsLoading', true);
const data = await getList(params)
if (data && data.code == 200) {
this.tableData = data.rows
}
this.alertsLoading=false
this.setLoading('alertsLoading', false);
},
async fetchCode(params){
@@ -147,7 +149,8 @@ export default {
},
async fetchUpdateInfo(params){
this.addMinerLoading = true
// this.addMinerLoading = true
this.setLoading('addMinerLoading', true);
const data = await getUpdateInfo(params)
if (data && data.code == 200) {
this.$message({
@@ -159,11 +162,12 @@ export default {
this.fetchList(this.listParams)
}
this.addMinerLoading = false
this.setLoading('addMinerLoading', false);
},
async fetchDeleteEmail(params){
this.deleteLoading = true
// this.deleteLoading = true
this.setLoading('deleteLoading', true);
const data = await deleteEmail(params)
if (data && data.code == 200) {
this.$message({
@@ -175,8 +179,8 @@ export default {
this.fetchList(this.listParams)
}
this.deleteLoading = false
this.setLoading('deleteLoading', false);
},
add(){

View File

@@ -442,7 +442,7 @@
<!-- 挖矿账号下矿工总览 -->
<div class="Pool">
<p class="hash">{{ $t(`apiFile.overviewOfMiners`) }}</p>
<p class="Interface">Post /oapi/v1/account/miners_list</p>
<p class="Interface">Post /oapi/v1/account/watch</p>
<p class="hash">{{ $t(`apiFile.jurisdiction`) }} account</p>
<p class="hash">{{ $t(`apiFile.parameter`) }}</p>
<table border="1">
@@ -797,7 +797,7 @@
<!-- 指定矿机历史24h平均算力 -->
<div class="Pool">
<p class="hash">{{ $t(`apiFile.miningMachineHistory24h`) }}</p>
<p class="Interface">Post /oapi/v1/miner/hashrate_history</p>
<p class="Interface">Post /oapi/v1/miner/hashrate_history</p>
<p class="hash">{{ $t(`apiFile.jurisdiction`) }} miner</p>
<p class="hash">{{ $t(`apiFile.parameter`) }}</p>
<table border="1">
@@ -1371,7 +1371,7 @@
<!-- 挖矿账号下矿工总览 -->
<div class="Pool">
<p class="hash">{{ $t(`apiFile.overviewOfMiners`) }}</p>
<p class="Interface">Post /oapi/v1/account/miners_list</p>
<p class="Interface">Post /oapi/v1/account/watch </p>
<p class="hash">{{ $t(`apiFile.jurisdiction`) }} account</p>
<p class="hash">{{ $t(`apiFile.parameter`) }}</p>
<table border="1">
@@ -1726,7 +1726,7 @@
<!-- 指定矿机历史24h平均算力 -->
<div class="Pool">
<p class="hash">{{ $t(`apiFile.miningMachineHistory24h`) }}</p>
<p class="Interface">Get /oapi/v1/miner/hashrate_history</p>
<p class="Interface">Post /oapi/v1/miner/hashrate_history</p>
<p class="hash">{{ $t(`apiFile.jurisdiction`) }} miner</p>
<p class="hash">{{ $t(`apiFile.parameter`) }}</p>
<table border="1">

View File

@@ -6,7 +6,7 @@ import * as echarts from "echarts";
import { Debounce, throttle } from "../../utils/publicMethods";
export default {
data() {
return {
activeName: "second",
@@ -759,7 +759,7 @@ export default {
],
FeeShow: true,
lang: 'en',
activeItemCoin:{
activeItemCoin: {
value: "nexa",
label: "nexa",
img: require("../../assets/img/currency-nexa.png"),
@@ -781,19 +781,19 @@ export default {
},
activeItemCoin: {
handler(newVal) {
// 防止无限循环
if (this.isInternalChange) {
return;
}
this.handleActiveItemChange(newVal);
// 防止无限循环
if (this.isInternalChange) {
return;
}
this.handleActiveItemChange(newVal);
},
deep: true
}
}
},
mounted() {
this.lang = this.$i18n.locale; // 初始化语言值
this.$addStorageEvent(1, `activeItemCoin`, JSON.stringify(this.currencyList[0]))
this.minerChartLoading = true
@@ -832,6 +832,11 @@ export default {
this.getCoinInfoData(this.params)
this.getPoolPowerData(this.PowerParams)
// 注册需要在网络恢复后自动重新调用的方法
this.registerRecoveryMethod('getCoinInfoData', this.params);
this.registerRecoveryMethod('getPoolPowerData', this.PowerParams);
this.registerRecoveryMethod('getBlockInfoData', this.BlockInfoParams);
this.$addStorageEvent(1, `currencyList`, JSON.stringify(this.currencyList))
if (this.$refs.select) {
this.$refs.select.$el.children[0].children[0].setAttribute('style', "background:url(https://test.m2pool.com/img/nexa.png) no-repeat 10PX;background-size: 20PX 20PX;color:#333;padding-left: 30PX;");
@@ -844,9 +849,9 @@ export default {
// let activeItemCoin =localStorage.getItem(`activeItemCoin`)
// this.activeItemCoin=JSON.parse(activeItemCoin)
window.addEventListener("setItem", () => {
let value =localStorage.getItem(`activeItemCoin`)
this.activeItemCoin=JSON.parse(value)
let value = localStorage.getItem(`activeItemCoin`)
this.activeItemCoin = JSON.parse(value)
});
},
@@ -866,7 +871,7 @@ export default {
listEl.style.left = '-' + (leftMove - 360) + 'PX'
}
},
//初始化图表
inCharts() {
@@ -1047,15 +1052,15 @@ export default {
let rejectRate = []
let price = []
chartData.forEach(item => {
if (item.date.includes(`T`) && params.interval == `rt`) {
item.date = `${item.date.split("T")[0]} ${item.date.split("T")[1].split(`.`)[0]}`
} else if (item.date.includes(`T`) && params.interval == `1d`) {
item.date = item.date.split("T")[0]
}
xData.push(item.date)
pvData.push(Number(item.pv).toFixed(2))
// rejectRate.push((item.rejectRate * 100).toFixed(2))
@@ -1063,13 +1068,13 @@ export default {
price.push(item.price)
} else if (item.price < 1) {
price.push(Number(item.price).toFixed(8))
} else {
price.push(Number(item.price).toFixed(2))
}
});
// this.maxValue = Math.max(...rejectRate);
// let leftYMaxData = Math.max(...pvData);
@@ -1082,13 +1087,13 @@ export default {
this.inCharts()
})
}catch{
} catch {
console.error('获取数据失败:', error);
}finally {
} finally {
// 确保无论成功失败都设置loading为false
this.setLoading('minerChartLoading', false);
}
}
@@ -1221,37 +1226,11 @@ export default {
}, 200),
// async getBlockInfoData(params) {
// this.reportBlockLoading = true
// const data = await getBlockInfo(params)
// if (data && data.code == 200) {
// this.BlockShow = true
// this.newBlockInfoData = []
// this.BlockInfoData = data.rows
// if (!this.BlockInfoData[0]) {
// this.reportBlockLoading = false
// return
// }
// this.BlockInfoData.forEach((item, index) => {
// item.date = `${item.date.split("T")[0]} ${item.date.split("T")[1].split(`.`)[0]}`
// if (index < 8) {
// this.newBlockInfoData.push(item)
// }
// })
// } else {
// this.BlockShow = false
// }
// this.reportBlockLoading = false
// },
getBlockInfoData: Debounce(async function (params) {
// this.reportBlockLoading = true
try {
// this.reportBlockLoading = true
this.setLoading('reportBlockLoading', true);
const data = await getBlockInfo(params)
if (data && data.code == 200) {
@@ -1259,7 +1238,8 @@ export default {
this.newBlockInfoData = []
this.BlockInfoData = data.rows
if (!this.BlockInfoData[0]) {
this.reportBlockLoading = false
// this.reportBlockLoading = false
this.setLoading('reportBlockLoading', false);
return
}
@@ -1271,13 +1251,21 @@ export default {
}
})
} else {
this.BlockShow = false
}
this.setLoading('reportBlockLoading', false);
// this.reportBlockLoading = false
} catch (error) {
console.error('获取区块信息失败:', error);
this.BlockShow = false;
}finally {
// 确保在任何情况下都会重置 loading 状态
this.setLoading('reportBlockLoading', false);
}
@@ -1321,38 +1309,54 @@ export default {
switch (this.time) {
case "day":
// this.profit = result.toFixed(10)
this.profit = result.toFixed(8)
// this.profit = Math.floor(result * 1e10) / 1e10;
this.profit = this.toFixedNoRound(result, 10);
// this.profit = this.toFixedNoRound(result, 10);
break;
case "week":
// this.profit = (result * 7).toFixed(10)
this.profit = (result * 7).toFixed(8)
// this.profit = Math.floor(result * 7 * 1e10) / 1e10;
this.profit = this.toFixedNoRound(result * 7, 10);
// this.profit = this.toFixedNoRound(result * 7, 10);
break;
case "month":
// this.profit = (result * 30).toFixed(10)
this.profit = (result * 30).toFixed(8)
// this.profit = Math.floor(result * 30 * 1e10) / 1e10;
this.profit = this.toFixedNoRound(result * 30, 10);
// this.profit = this.toFixedNoRound(result * 30, 10);
break;
case "year":
// this.profit = (result * 365).toFixed(10)
this.profit = (result * 365).toFixed(8)
// this.profit = Math.floor(result * 365 * 1e10) / 1e10;
this.profit = this.toFixedNoRound(result * 365, 10);
// this.profit = this.toFixedNoRound(result * 365, 10);
break;
default:
break;
}
// 10000000000000000
const formatter = new Intl.NumberFormat("en-US", {
minimumFractionDigits: 10, // 强制显示足够多的小数位
const nexaFormatter = new Intl.NumberFormat("en-US", {
minimumFractionDigits: 2, // 强制显示 2 位小数(不足补零)
maximumFractionDigits: 2, // 可选:限制最多 2 位小数(避免多余位数)
useGrouping: true, // 不使用千位分隔符(如 1,000
});
this.profit = formatter.format(this.profit);
if (this.value == "nexa") {
this.profit = nexaFormatter.format(this.profit);
} else {
const formatter = new Intl.NumberFormat("en-US", {
minimumFractionDigits: 8, // 强制显示足够多的小数位
useGrouping: true, // 不使用千位分隔符(如 1,000
});
this.profit = formatter.format(this.profit);
}
// const formatter = new Intl.NumberFormat("en-US", {
// minimumFractionDigits: 8, // 强制显示足够多的小数位
// useGrouping: false, // 不使用千位分隔符(如 1,000
// });
// this.profit = formatter.format(this.profit);
},
@@ -1417,7 +1421,7 @@ export default {
this.fetchParam({ coin: this.value })
},
handelJump(url) {
handelJump(url) {
if (url === '/AccessMiningPool') {
const coin = this.currencyList.find(item => item.value === this.params.coin);
@@ -1425,16 +1429,16 @@ export default {
let jumpName = coin.path.charAt(0).toUpperCase() + coin.path.slice(1) //name跳转 首字母大写
// 使用 name 进行导航,避免重复的路由参数
this.$router.push({
name: jumpName,
params: {
lang: this.lang,
coin: this.params.coin,
imgUrl: this.currencyPath
name: jumpName,
params: {
lang: this.lang,
coin: this.params.coin,
imgUrl: this.currencyPath
},
replace: false // 保留历史记录,允许回退
},
replace: false // 保留历史记录,允许回退
});
} else {
// 移除开头的斜杠,统一处理路径格式
const cleanPath = url.startsWith('/') ? url.slice(1) : url;
@@ -1493,29 +1497,29 @@ export default {
// }, 1000),
handleActiveItemChange(item) {
if (!item) return;
this.currency = item.label;
this.currencyPath = item.imgUrl;
this.params.coin = item.value;
console.log( this.params.coin , "item");
console.log(this.params.coin, "item");
this.BlockInfoParams.coin = item.value;
this.itemActive = item.value;
this.PowerParams.coin = item.value;
// 调用相关数据更新方法
this.getCoinInfoData(this.params);
this.getBlockInfoData(this.BlockInfoParams);
if (this.powerActive) {
this.handelPower();
this.handelPower();
} else {
this.handelMiner();
this.handelMiner();
}
this.handelCoinLabel(item.value);
},
},
clickCurrency(item) {
if (!item) return;
@@ -1531,16 +1535,16 @@ export default {
// this.PowerParams.coin = item.value
// this.getCoinInfoData(this.params)
// this.getBlockInfoData(this.BlockInfoParams)
// 在下一个事件循环中重置标记
this.$nextTick(() => {
this.isInternalChange = false;
});
// 直接调用处理方法
this.handleActiveItemChange(item);
// 直接调用处理方法
this.handleActiveItemChange(item);
},
clickReportBlock() {
this.$router.push({

View File

@@ -375,7 +375,7 @@
<div class="currencyDescription2">
<section class="miningPoolBox">
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
<div class="miningPoolLeft" v-loading="minerChartLoading">
<div class="miningPoolLeft" v-loading="minerChartLoading" v-loading-recovery="{ loading: 'minerChartLoading', recovery: ['getPoolPowerData', 'fetchNetPower'] }">
<div class="interval">
<div class="chartBth">
@@ -603,7 +603,7 @@
<el-row>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<div class="reportBlock">
<div class="reportBlockBox" v-loading="reportBlockLoading">
<div class="reportBlockBox" v-loading="reportBlockLoading" v-loading-recovery="{ loading: 'reportBlockLoading', recovery: ['getBlockInfoData'] }">
<div class="belowTable">
<ul>
<li class="table-title">

View File

@@ -1345,7 +1345,14 @@ export default {
this.getMinerListData(this.MinerListParams)
this.getHistoryIncomeData(this.IncomeParams)
this.getHistoryOutcomeData(this.OutcomeParams)
this.registerRecoveryMethod('getMinerAccountInfoData', this.params);
this.registerRecoveryMethod('getMinerAccountPowerData', this.PowerParams);
this.registerRecoveryMethod('getAccountPowerDistributionData', this.PowerDistribution);
this.registerRecoveryMethod('getMinerListData', this.MinerListParams);
this.registerRecoveryMethod('getHistoryIncomeData', this.IncomeParams);
this.registerRecoveryMethod('getHistoryOutcomeData', this.OutcomeParams);
},
methods: {
@@ -1400,11 +1407,12 @@ export default {
// console.log(data,"获取币种信息");
},
async getMinerAccountPowerData(params) {
this.powerChartLoading = true
// this.powerChartLoading = true
this.setLoading('powerChartLoading', true);
const data = await getMinerAccountPower(params)
if (!data) {
this.powerChartLoading = false
this.setLoading('powerChartLoading', false);
if (this.myChart) {
this.myChart.dispose()//销毁图表实列
}
@@ -1437,13 +1445,13 @@ export default {
this.option.series[1].data = rejectRate
this.inCharts()
this.powerChartLoading = false
this.setLoading('powerChartLoading', false);
},
async getAccountPowerDistributionData(params) {
this.barChartLoading = true
this.setLoading('barChartLoading', true);
const data = await getAccountPowerDistribution(params)
let barData = data.data
let xData = []
@@ -1455,7 +1463,7 @@ export default {
this.barOption.xAxis[0].data = xData
this.barOption.series[0].data = barValueList
this.barInCharts()
this.barChartLoading = false
this.setLoading('barChartLoading', false);
},
formatNumber(num) {//保留两位小数并补0
const intPart = Math.floor(num);
@@ -1463,7 +1471,7 @@ export default {
return `${intPart}.${String(decimalPart).padStart(2, '0')}`;
},
async getMinerListData(params) {
this.MinerListLoading = true
this.setLoading('MinerListLoading', true);
const data = await getMinerList(params)
if (data && data.code == 200) {
this.MinerListData = data.data
@@ -1503,7 +1511,7 @@ export default {
}
this.MinerListLoading = false
this.setLoading('MinerListLoading', false);
},
@@ -1562,11 +1570,11 @@ export default {
// this.miniLoading=false
// },
getMinerPowerData:Debounce(async function(params){
this.miniLoading=true
this.setLoading('miniLoading', true);
const data = await getMinerPower(params)
if (!data) {
this.miniLoading=false
this.setLoading('miniLoading', false);
return
}
let miniData = data.data
@@ -1618,62 +1626,18 @@ export default {
this.miniLoading=false
this.setLoading('miniLoading', false);
},200),
//小图
// async getMinerPowerOnLine(params) {
// this.miniLoading=true
// const data = await getMinerPower(params)
// if (!data) {
// this.miniLoading=false
// return
// }
// let miniData = data.data
// let xData = []
// let pv = []
// let rejectRate = []
// miniData.forEach(item => {
// if (item.date.includes(`T`)) {
// xData.push(`${item.date.split("T")[0]} ${item.date.split("T")[1].split(".")[0]}` )
// } else {
// xData.push(item.date)
// }
// pv.push(item.pv.toFixed(2))
// rejectRate.push((item.rejectRate * 100).toFixed(4))
// })
// this.onLineOption.xAxis.data = xData
// this.onLineOption.series[0].data = pv
// this.onLineOption.series[1].data = rejectRate
// this.onLineOption.series[0].name= this.$t(`home.finallyPower`)
// this.onLineOption.series[1].name= this.$t(`home.rejectionRate`)
// this.ids = `Small${this.miniId}`
// this.miniChartOnLine = echarts.init(document.getElementById(this.ids))
// this.$nextTick(() => {
// this.miniChartOnLine.setOption(this.onLineOption,true);
// window.addEventListener("resize", () => {
// if (this.miniChartOnLine) this.miniChartOnLine.resize();
// });
// });
// this.miniLoading=false
// },
getMinerPowerOnLine:Debounce(async function(params){
this.miniLoading=true
this.setLoading('miniLoading', true);
const data = await getMinerPower(params)
if (!data) {
this.miniLoading=false
this.setLoading('miniLoading', false);
return
}
let miniData = data.data
@@ -1716,7 +1680,7 @@ export default {
this.miniLoading=false
this.setLoading('miniLoading', false);
},200),
@@ -1768,10 +1732,10 @@ export default {
// this.miniLoading=false
// },
getMinerPowerOffLine:Debounce(async function(params){
this.miniLoading=true
this.setLoading('miniLoading', true);
const data = await getMinerPower(params)
if (!data) {
this.miniLoading=false
this.setLoading('miniLoading', false);
return
}
let miniData = data.data
@@ -1815,7 +1779,7 @@ export default {
this.miniLoading=false
this.setLoading('miniLoading', false);
},200),

View File

@@ -96,17 +96,20 @@ export default {
},
mounted() {
this.fetchApiList(this.listParams)
this.registerRecoveryMethod('fetchApiList', this.listParams);
},
methods: {
async fetchApiKey(params) {
this.ApiKeyLoading = true
this.setLoading('ApiKeyLoading', true);
const data = await getApiKey(params)
if (data && data.code == 200) {
this.fetchApiList(this.listParams)
this.dialogVisible = false
}
this.ApiKeyLoading = false
this.setLoading('ApiKeyLoading', false);
},
async fetchApiList(params) {
this.apiPageLoading = true
@@ -115,7 +118,7 @@ export default {
this.apiList = data.rows
}
this.apiPageLoading = false
this.setLoading('apiPageLoading', false);
},
async fetchApiInfo(params) {
this.apiPageLoading = true
@@ -127,7 +130,7 @@ export default {
}
}
this.apiPageLoading = false
this.setLoading('apiPageLoading', false);
},
async fetchUpdateAPI(params) {
this.apiPageLoading = true
@@ -137,7 +140,7 @@ export default {
this.modifyDialogVisible =false
}
this.apiPageLoading = false
this.setLoading('apiPageLoading', false);
},
async fetchDelApi(params) {
this.apiPageLoading = true
@@ -149,7 +152,7 @@ export default {
this.fetchApiList(this.listParams)
}
this.apiPageLoading = false
this.setLoading('apiPageLoading', false);
},
RequestApiKey() {
this.dialogVisible = true

View File

@@ -270,6 +270,9 @@ export default {
this.fetchAccountList()
this.registerRecoveryMethod('fetchIfBind', "");
this.registerRecoveryMethod('fetchAccountList', "");
this.currencyList = JSON.parse(localStorage.getItem("currencyList"))
window.addEventListener("setItem", () => {
this.currencyList = JSON.parse(localStorage.getItem("currencyList"))
@@ -284,7 +287,8 @@ export default {
},
methods: {
async fetchIfBind(params){
this.securityLoading = true
// this.securityLoading = true
this.setLoading('securityLoading', true);
const data = await getIfBind(params)
if (data && data.code === 200) {
if (data.data) {
@@ -302,13 +306,14 @@ export default {
this.dialogVerification=true
}
}
this.securityLoading = false
this.setLoading('securityLoading', false);
},
async fetchCheck(params){
this.addMinerLoading =true
// this.addMinerLoading =true
this.setLoading('addMinerLoading', true);
const data = await getCheck(params)
if (!data) {
this.addMinerLoading =false
this.setLoading('addMinerLoading', false);
}
if (data && data.code === 200) {
@@ -320,20 +325,21 @@ export default {
type: "error",
showClose: true
});
this.addMinerLoading =false
this.setLoading('addMinerLoading', false);
}else if(data.code === 802){//钱包不可用
this.$message({
message: this.$t(`personal.invalidAddress`),
type: "error",
showClose: true
});
this.addMinerLoading =false
this.setLoading('addMinerLoading', false);
}
},
async fetchCheckBalance(params){
this.confirmBindingLoading =true
// this.confirmBindingLoading =true
this.setLoading('confirmBindingLoading', true);
const data = await getCheckBalance(params)
if (data && data.data) {
this.fetchWalletAddress(this.WalletAddressParams)
@@ -344,7 +350,7 @@ export default {
type: 'error'
});
}
this.confirmBindingLoading =false
this.setLoading('confirmBindingLoading', false);
},
async fetchAccountGradeList(){
const data = await getAccountGradeList()
@@ -369,7 +375,8 @@ export default {
}
},
async fetchMinerAccountBalance(params) {
this.MiningLoading = true
// this.MiningLoading = true
this.setLoading('MiningLoading', true);
const data = await getMinerAccountBalance(params)
if (data && data.code == 200) {
this.walletDialogVisible = true
@@ -386,10 +393,11 @@ export default {
this.paymentSettingsData.active = this.paymentSettingsData.active==`1` ? this.$t(`personal.no`) :this.$t(`personal.yes`)
this.paymentSettingsData.amount = this.paymentSettingsData.amount ? this.paymentSettingsData.amount : `0`
this.MiningLoading = false
this.setLoading('MiningLoading', false);
},
async fetchDelMinerAccount(params) {
this.MiningLoading = true
// this.MiningLoading = true
this.setLoading('MiningLoading', true);
const data = await getDelMinerAccount(params)
if (data && data.code == 200) {
@@ -400,17 +408,18 @@ export default {
}
this.MiningLoading = false
this.setLoading('MiningLoading', false);
},
async fetchAccountList(params) {
this.MiningLoading = true
// this.MiningLoading = true
this.setLoading('MiningLoading', true);
const data = await getAccountList(params)
this.accountList = data.data
console.log("请求成功,",data);
this.newAccountList = this.accountList
this.$addStorageEvent(1, `accountList`, JSON.stringify(this.accountList))
this.MiningLoading = false
this.setLoading('MiningLoading', false);
},
@@ -431,7 +440,8 @@ export default {
},
//添加挖矿账户
async fetchAddMinerAccount(params) {
this.addMinerLoading =true
// this.addMinerLoading =true
this.setLoading('addMinerLoading', true);
const data = await getAddMinerAccount(params)
if (data && data.code == 200) {
this.$message({
@@ -451,7 +461,7 @@ export default {
this.fetchAccountList()
this.fetchAccountGradeList()
this.addMinerLoading =false
this.setLoading('addMinerLoading', false);
},
handleCheckAllChange(val) {

View File

@@ -197,14 +197,16 @@ export default {
}))
}));
console.log( this.newMiningAccountList,"isrjiojfeo");
this.fetchUrlList(this.UrlListParams)
this.registerRecoveryMethod('fetchUrlList', this.UrlListParams);
},
methods: {
async fetchHtmlUrl(params){
this.establishLoading = true
// this.establishLoading = true
this.setLoading('establishLoading', true);
const data = await getHtmlUrl(params)
if (data && data.code == 200) {
@@ -212,10 +214,11 @@ export default {
this.dialogVisible=false
}
this.establishLoading = false
this.setLoading('establishLoading', false);
},
async fetchUrlList(params){
this.UrlListLoading = true
// this.UrlListLoading = true
this.setLoading('UrlListLoading', true);
const data = await getUrlList(params)
console.log(data,666 );
@@ -223,7 +226,7 @@ export default {
this.TotalSize = data.total
this.UrlListLoading = false
this.setLoading('UrlListLoading', false);
},
async fetchUrlInfo(params){
const data = await getUrlInfo(params)
@@ -239,7 +242,8 @@ export default {
},
async fetchChangeUrlInfo(params){
this.modifyLoading=true
// this.modifyLoading=true
this.setLoading('modifyLoading', true);
const data = await getChangeUrlInfo(params)
console.log(data);
if (data && data.code == 200) {
@@ -248,7 +252,7 @@ export default {
console.log("修改成功");
}
this.modifyLoading=false
this.setLoading('modifyLoading', false);
},
async fetchDelete(params){

View File

@@ -155,13 +155,14 @@ export default {
this.lang = this.$i18n.locale; // 初始化语言值
this.fetchIfBind()
this.registerRecoveryMethod('fetchIfBind', "");
if (this.$route.params.active) {
this.handelVerification()
}
},
methods: {
async fetchIfBind(params) {
this.securityLoading = true
this.setLoading('securityLoading', true);
const data = await getIfBind(params)
if (data && data.code === 200) {
if (data.data) {
@@ -170,10 +171,10 @@ export default {
this.isItBound = false
}
}
this.securityLoading = false
this.setLoading('securityLoading', false);
},
async fetchBindInfo(params) {
this.BindInfoLoading = true
this.setLoading('BindInfoLoading', true);
const data = await getBindInfo(params)
console.log(data, "绑定信息");
if (data && data.code === 200) {
@@ -182,10 +183,10 @@ export default {
this.dialogVisible = false
}
this.BindInfoLoading = false
this.setLoading('BindInfoLoading', false);
},
async fetchBindGoogle(params) {
this.BindInfoLoading = true
this.setLoading('BindInfoLoading', true);
const data = await getBindGoogle(params)
console.log(data, "绑定");
if (data && data.code === 200) {
@@ -203,7 +204,7 @@ export default {
}
this.BindInfoLoading = false
this.setLoading('BindInfoLoading', false);
},
async fetchBindCode(params) {
const data = await getBindCode(params)
@@ -216,7 +217,7 @@ export default {
}
},
async fetchResetPwd(params) {
this.ResetPwdLoading = true
this.setLoading('ResetPwdLoading', true);
const data = await getUpdatePwd(params)
if (data && data.code === 200) {
this.$message({
@@ -230,7 +231,7 @@ export default {
localStorage.removeItem("token")
this.$router.push(`/${lang}/login`);
}
this.ResetPwdLoading = false
this.setLoading('ResetPwdLoading', false);
},
async fetchResetPwdCode(params) {
const data = await getUpdatePwdCode(params)
@@ -244,7 +245,7 @@ export default {
},
async fetchCloseStepTwo(params) {
this.closeLoading = true
this.setLoading('closeLoading', true);
const data = await getCloseStepTwo(params)
if (data && data.code === 200) {
this.$message({
@@ -260,7 +261,7 @@ export default {
this.closeParams[key] = ""
}
}
this.closeLoading = false
this.setLoading('closeLoading', false);
},
async fetchCloseCode(params) {
const data = await getCloseCode(params)

View File

@@ -1228,6 +1228,8 @@ export default {
this.getMinerAccountPowerData(this.PowerParams)
this.getAccountPowerDistributionData(this.PowerDistribution)
},
"$i18n.locale":(val)=>{
location.reload();//刷新页面 刷新echarts
@@ -1269,6 +1271,12 @@ export default {
this.getMinerListData(this.MinerListParams)
this.getMinerAccountPowerData(this.PowerParams)
this.getAccountPowerDistributionData(this.PowerDistribution)
this.registerRecoveryMethod('getMinerListData', this.MinerListParams);
this.registerRecoveryMethod('getMinerAccountPowerData', this.PowerParams);
this.registerRecoveryMethod('getAccountPowerDistributionData', this.PowerDistribution);
this.registerRecoveryMethod('fetchPageInfo', {key:this.params.key});
},
@@ -1320,7 +1328,7 @@ export default {
},
//返回权限 1矿工 2收益 3支付
async fetchPageInfo(params){
this.jurisdictionLoading = true
this.setLoading('jurisdictionLoading', true);
const data = await getPageInfo(params)
console.log(data);
if (data && data.code == 200) {
@@ -1354,7 +1362,7 @@ export default {
}
this.jurisdictionLoading = false
this.setLoading('jurisdictionLoading', false);
},
//获取当前挖矿账号信息(包含收益、余额)
async getMinerAccountInfoData(params) {
@@ -1362,11 +1370,11 @@ export default {
this.MinerAccountData = data.data
},
async getMinerAccountPowerData(params) {
this.powerChartLoading = true
this.setLoading('powerChartLoading', true);
const data = await getMinerAccountPower(params)
if (!data) {
this.powerChartLoading = false
this.setLoading('powerChartLoading', false);
if (this.myChart) {
this.myChart.dispose()//销毁图表实列
}
@@ -1399,13 +1407,13 @@ export default {
this.option.series[1].data = rejectRate
this.inCharts()
this.powerChartLoading = false
this.setLoading('powerChartLoading', false);
},
async getAccountPowerDistributionData(params) {
this.barChartLoading = true
this.setLoading('barChartLoading', true);
const data = await getAccountPowerDistribution(params)
let barData = data.data
let xData = []
@@ -1417,7 +1425,7 @@ export default {
this.barOption.xAxis[0].data = xData
this.barOption.series[0].data = barValueList
this.barInCharts()
this.barChartLoading = false
this.setLoading('barChartLoading', false);
},
formatNumber(num) {//保留两位小数并补0
const intPart = Math.floor(num);
@@ -1425,7 +1433,7 @@ export default {
return `${intPart}.${String(decimalPart).padStart(2, '0')}`;
},
async getMinerListData(params) {
this.MinerListLoading = true
this.setLoading('MinerListLoading', true);
const data = await getMinerList(params)
if (data && data.code == 200) {
this.MinerListData = data.data
@@ -1451,17 +1459,17 @@ export default {
}
this.MinerListLoading = false
this.setLoading('MinerListLoading', false);
},
//小图
async getMinerPowerData(params) {
this.miniLoading=true
this.setLoading('miniLoading', true);
const data = await getMinerPower(params)
if (!data) {
this.miniLoading=false
this.setLoading('miniLoading', false);
return
}
let miniData = data.data
@@ -1507,15 +1515,15 @@ export default {
this.miniLoading=false
this.setLoading('miniLoading', false);
},
//小图
async getMinerPowerOnLine(params) {
this.miniLoading=true
this.setLoading('miniLoading', true);
const data = await getMinerPower(params)
if (!data) {
this.miniLoading=false
this.setLoading('miniLoading', false);
return
}
let miniData = data.data
@@ -1556,14 +1564,14 @@ export default {
this.miniLoading=false
this.setLoading('miniLoading', false);
},
//小图
async getMinerPowerOffLine(params) {
this.miniLoading=true
this.setLoading('miniLoading', true);
const data = await getMinerPower(params)
if (!data) {
this.miniLoading=false
this.setLoading('miniLoading', false);
return
}
let miniData = data.data
@@ -1605,7 +1613,7 @@ export default {
this.miniLoading=false
this.setLoading('miniLoading', false);
},
async getHistoryIncomeData(params) {
const data = await getHistoryIncome(params)

View File

@@ -235,6 +235,10 @@ export default {
this.getLuckData(this.params)
this.getBlockInfoData(this.BlockInfoParams)
this.registerRecoveryMethod('getLuckData', this.params);
this.registerRecoveryMethod('getBlockInfoData', this.BlockInfoParams);
let value = localStorage.getItem("activeItemCoin")
this.activeItemCoin = JSON.parse(value)
this.currencyList = JSON.parse(localStorage.getItem("currencyList"))
@@ -260,14 +264,14 @@ export default {
// },
getLuckData: Debounce(async function (params) {
this.LuckDataLoading = true
this.setLoading('LuckDataLoading', true);
const data = await getLuck(params)
if (data && data.code == 200) {
this.luckData = data.data
}
this.LuckDataLoading = false
this.setLoading('LuckDataLoading', false);
}, 200),
// async getBlockInfoData(params) {
// this.reportBlockLoading=true
@@ -286,10 +290,10 @@ export default {
// },
getBlockInfoData: Debounce(async function (params) {
this.reportBlockLoading = true
this.setLoading('reportBlockLoading', true);
const data = await getBlockInfo(params)
if (!data) {
this.reportBlockLoading = false
this.setLoading('reportBlockLoading', false);
}
this.totalSize = data.total
this.BlockInfoData = data.rows
@@ -298,7 +302,7 @@ export default {
})
// this.currentPage = 1
// console.log(data,"获取币种信息");
this.reportBlockLoading = false
this.setLoading('reportBlockLoading', false);
}, 200),
handleActiveItemChange(item) {
@@ -314,6 +318,9 @@ export default {
clickCurrency(item) {
if (!item) return;
// 设置标记,防止触发 watch
this.luckData={}
this.isInternalChange = true;
this.activeItemCoin = item;
this.$addStorageEvent(1, `activeItemCoin`, JSON.stringify(item))

View File

@@ -27,7 +27,7 @@
</el-menu>
</div>
<div class="luckyBox" >
<div class="luckyBox" v-show="this.activeItemCoin.value != 'enx' && this.activeItemCoin.value != 'alph'">
<div class="luckyItem">
<span class="title">{{$t(`home.lucky3`)}}</span>
@@ -125,7 +125,8 @@
</el-col>
<!-- v-loading = "LuckDataLoading" -->
<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
<div class="luckyBox" >
<div class="luckyBox" v-show="this.activeItemCoin.value != 'enx' && this.activeItemCoin.value != 'alph'" >
<div class="luckyItem">
<span class="title">{{$t(`home.lucky3`)}}</span>

View File

@@ -167,6 +167,7 @@ export default {
this.workOrderId = localStorage.getItem("workOrderId")
if (this.workOrderId) {
this.fetchTicketDetails({ id: this.workOrderId })
this.registerRecoveryMethod('fetchTicketDetails', { id: this.workOrderId });
}
// this.faultList = JSON.parse(localStorage.getItem('faultList') )

View File

@@ -198,18 +198,22 @@ export default {
case `all`:
this.params.status = 0
this.fetchRechargeRecord0(this.params)
this.registerRecoveryMethod('fetchRechargeRecord0', this.params);
break;
case `pending`:
this.params.status = 2
this.fetchRechargeRecord2(this.params)
this.registerRecoveryMethod('fetchRechargeRecord2', this.params);
break;
case `Finished`:
this.params.status = 10
this.fetchRechargeRecord10(this.params)
this.registerRecoveryMethod('fetchRechargeRecord10', this.params);
break;
case `pendingProcessing`:
this.params.status = 1
this.fetchRechargeRecord1(this.params)
this.registerRecoveryMethod('fetchRechargeRecord1', this.params);
break;
default:

View File

@@ -95,14 +95,17 @@ export default {
case "pending":
this.params.status = 1
this.fetchPrivateConsume1(this.params)
this.registerRecoveryMethod('fetchPrivateConsume1', this.params);
break;
case "success"://已完成工单
this.params.status = 2
this.fetchPrivateConsume2(this.params)
this.registerRecoveryMethod('fetchPrivateConsume2', this.params);
break;
case "reply"://全部工单
this.params.status = 0
this.fetchPrivateConsume0(this.params)
this.registerRecoveryMethod('fetchPrivateConsume0', this.params);
break;
default: