Merge branch 'dev' of http://47.129.22.53:22345/lizixuan/m2pool_web_frontend
This commit is contained in:
commit
a8e3066e02
|
@ -5,8 +5,8 @@ VUE_APP_TITLE = m2pool
|
|||
ENV = 'development'
|
||||
|
||||
#开发环境
|
||||
# VUE_APP_BASE_API = 'https://test.m2pool.com/api/'
|
||||
VUE_APP_BASE_API = 'http://10.168.2.150:8101/'
|
||||
VUE_APP_BASE_API = 'https://test.m2pool.com/api/'
|
||||
# VUE_APP_BASE_API = 'http://10.168.2.150:8101/'
|
||||
VUE_APP_BASE_URL = 'https://test.m2pool.com/'
|
||||
# 路由懒加载
|
||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true
|
||||
|
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div id="app">
|
||||
<router-view class="page" />
|
||||
<ChatWidget v-if="!$route.path.includes('/customerService')" />
|
||||
<ChatWidget v-if="!$route.path.includes('/customerService') && !$isMobile" />
|
||||
</div>
|
||||
</template>
|
||||
<script >
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -382,10 +382,15 @@ export default {
|
|||
document.addEventListener("click", function () {
|
||||
const dropdown = document.querySelector(".dropdown");
|
||||
const arrow = document.querySelector(".arrow");
|
||||
if (dropdown.classList.contains("show")) {
|
||||
try {
|
||||
if (dropdown.classList.contains("show")) {
|
||||
dropdown.classList.remove("show");
|
||||
arrow.classList.remove("up");
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
@ -445,6 +450,8 @@ export default {
|
|||
async fetchSignOut() {
|
||||
const data = await getLogout();
|
||||
if (data && data.code == 200) {
|
||||
// 调用 Vuex 的 logout action 清除前端状态
|
||||
await this.$store.dispatch('logout')
|
||||
const lang = this.$i18n.locale;
|
||||
this.$router.push(`/${lang}`);
|
||||
}
|
||||
|
@ -695,8 +702,11 @@ export default {
|
|||
justify-content: center;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.miningAccountTitle:hover {
|
||||
color: #6e3edb !important;
|
||||
|
||||
}
|
||||
.hidden {
|
||||
display: block;
|
||||
|
|
|
@ -10,7 +10,104 @@ export const ChatWidget_zh = {
|
|||
onlyImages:"只能上传图片文件!",
|
||||
imageTooLarge:"图片大小不能超过5MB!",
|
||||
imageReceived:"已收到您的图片,我们会尽快处理您的问题。",
|
||||
},
|
||||
|
||||
networkError:"网络连接已断开,请刷新页面重试",
|
||||
openCustomerService:"打开客服聊天",
|
||||
connectToCustomerService:"正在连接客服系统...",
|
||||
connectionFailed:"连接失败,请刷新页面重试",
|
||||
tryConnectingAgain:"重试连接",
|
||||
loading:"加载中...",
|
||||
loadMore:"加载更多历史消息",
|
||||
welcomeToUse:"欢迎使用在线客服,请问有什么可以帮您?",
|
||||
picture:"聊天图片",
|
||||
read:"已读",
|
||||
unread:"未读",
|
||||
subscriptionFailed:"消息订阅失败,可能无法接收新消息",
|
||||
break:"连接断开",
|
||||
retry:"秒后重试",
|
||||
disconnectWaiting:"断线重连中...",
|
||||
sendFailed:"发送消息失败,请重试",
|
||||
noHistory:"暂无历史消息",
|
||||
historicalFailure:"加载历史消息失败,请重试",
|
||||
loadingHistory:"正在加载更多历史消息...",
|
||||
noMoreHistory:"没有更多历史消息了",
|
||||
Loaded:"已加载历史消息",
|
||||
newMessage:"新消息",
|
||||
pictureMessage:"图片消息",
|
||||
initializationFailed:"初始化失败,请刷新页面重试",
|
||||
beSorry:"抱歉,我暂时无法回答这个问题。请排队等待人工客服或提交工单。",
|
||||
today:"今天",
|
||||
yesterday:"昨天",
|
||||
canOnlyUploadImages:"只能上传图片文件!",
|
||||
imageSizeExceeded:"图片大小不能超过5MB!",
|
||||
uploading:"正在上传图片...",
|
||||
pictureFailed:"发送图片失败,请重试",
|
||||
readImage:"读取图片失败,请重试",
|
||||
processingFailed:"图片处理失败,请重试",
|
||||
Disconnected:"连接已断开",
|
||||
reconnecting:"正在重连...",
|
||||
contactList:"联系列表",
|
||||
search:"搜索最近联系人",
|
||||
tourist:"游客",
|
||||
important:"重要",
|
||||
markAsImportant:"标记为重要",
|
||||
cancelImportant:"已取消重要标记",
|
||||
markingFailed:"标记操作失败,请重试",
|
||||
Marked:"已标记为重要",
|
||||
select:"请选择联系人",
|
||||
notSelected:"您尚未选择联系人",
|
||||
None:"暂无消息记录",
|
||||
sendPicture:"发送图片",
|
||||
inputMessage:"请输入消息,按Enter键发送,按Ctrl+Enter键换行",
|
||||
bottom:"回到底部",
|
||||
Preview:"预览图片",
|
||||
chatRoom:"聊天室",
|
||||
CLOSED:"已关闭",
|
||||
picture2:"图片",
|
||||
Unnamed:"未命名聊天室",
|
||||
noNewsAtTheMoment:"暂无未读消息",
|
||||
contactFailed:"加载更多联系人失败",
|
||||
listException:"获取聊天室列表异常",
|
||||
my:"我",
|
||||
unknownSender:"未知发送者",
|
||||
recordFailed:"加载聊天记录失败",
|
||||
messageException:"加载消息异常",
|
||||
chooseFirst:"请先选择联系人",
|
||||
chatDisconnected:"聊天连接已断开,请刷新页面重试",
|
||||
pictureSuccessful:"图片已发送",
|
||||
history:"历史记录",
|
||||
loadFailed:"加载失败",
|
||||
guestNotice:"您当前以游客身份聊天,聊天记录将不会保存。",
|
||||
guestNotice2:"后即可保存聊天记录",
|
||||
loginToSave:"登录",
|
||||
server500:"服务器暂时不可用,请稍后重试",
|
||||
CheckNetwork:"连接失败,请检查网络后重试",
|
||||
attemptToReconnect:"连接已断开,正在尝试重连...",
|
||||
retryFailed:"重试连接失败,请刷新页面",
|
||||
maxConnectionsError:"连接数已达上限,请刷新页面重试",
|
||||
ipLimitError:"本机连接数已达上限,请刷新页面重试",
|
||||
serverLimitError:"服务器连接数已达上限,请稍后刷新重试",
|
||||
identityError:"用户身份设置失败,请刷新页面重试",
|
||||
emailError:"用户信息获取失败,请刷新页面重试",
|
||||
refreshPage:"刷新页面",
|
||||
reconnectSuccess:"重新连接成功",
|
||||
sendMessageEmpty:"发送消息不能为空",
|
||||
unableToSubscribe:"连接状态异常,刷新页面重试",
|
||||
conflict:"连接异常,可能是多窗口冲突,请关闭其他窗口重试",
|
||||
abnormal:"连接异常",
|
||||
networkAnomaly:"网络连接异常",
|
||||
customerServiceOffline:"客服离线,请登录账号发送留言消息",
|
||||
contentMax:"超出发送内容大小限制,请删除部分内容(300字以内)",
|
||||
failInSend:"发送失败,请重试",
|
||||
connectionLimitError:"连接数已达上限,请关闭一些窗口后刷新重试",
|
||||
serverBusy:"服务器繁忙,请稍后刷新重试",
|
||||
connectionTimedOut:"连接超时,稍后重试...",
|
||||
reconnectFailed:"重连失败,请稍后重试",
|
||||
serviceConfigurationError:"服务配置异常,请稍后重试",
|
||||
serviceAddressUnavailable:"服务地址不可用,请稍后重试",
|
||||
connectionFailedService:"无法连接到服务器,请稍后重试",
|
||||
connectionFailedCustomer:"连接客服系统失败,请检查网络或稍后重试",
|
||||
},
|
||||
|
||||
|
||||
}
|
||||
|
@ -28,5 +125,111 @@ export const ChatWidget_en = {
|
|||
onlyImages:"Only image files can be uploaded!",
|
||||
imageTooLarge:"The image size cannot exceed 5MB!",
|
||||
imageReceived:"We have received your image, and we will handle your question as soon as possible.",
|
||||
}
|
||||
|
||||
networkError: "Network disconnected, please refresh page",
|
||||
openCustomerService: "Open customer service chat",
|
||||
connectToCustomerService: "Connecting to customer service...",
|
||||
connectionFailed: "Connection failed, please refresh page",
|
||||
tryConnectingAgain: "Retry connection",
|
||||
loading: "Loading...",
|
||||
loadMore: "Load more history",
|
||||
welcomeToUse: "Welcome to online service, how can I help you?",
|
||||
picture: "Chat image",
|
||||
read: "Read",
|
||||
unread: "Unread",
|
||||
subscriptionFailed: "Message subscription failed",
|
||||
break: "Connection lost",
|
||||
retry: "Retry in seconds",
|
||||
disconnectWaiting: "Reconnecting...",
|
||||
sendFailed: "Send failed, please retry",
|
||||
noHistory: "No history",
|
||||
historicalFailure: "Failed to load history",
|
||||
loadingHistory: "Loading more history...",
|
||||
noMoreHistory: "No more history",
|
||||
Loaded: "History loaded",
|
||||
newMessage: "New message",
|
||||
pictureMessage: "Image message",
|
||||
initializationFailed: "Initialization failed, please refresh",
|
||||
beSorry: "Sorry, I cannot answer this. Please wait for agent or submit ticket",
|
||||
today: "Today",
|
||||
yesterday: "Yesterday",
|
||||
canOnlyUploadImages: "Only image files allowed",
|
||||
imageSizeExceeded: "Image size exceeds 5MB",
|
||||
uploading: "Uploading image...",
|
||||
pictureFailed: "Failed to send image",
|
||||
readImage: "Failed to read image",
|
||||
processingFailed: "Image processing failed",
|
||||
Disconnected: "Disconnected",
|
||||
reconnecting: "Reconnecting...",
|
||||
contactList: "Contact list",
|
||||
search: "Search contacts",
|
||||
tourist: "Guest",
|
||||
important: "Important",
|
||||
markAsImportant: "Mark as important",
|
||||
cancelImportant: "Unmarked as important",
|
||||
markingFailed: "Marking failed",
|
||||
select: "Select contact",
|
||||
notSelected: "No contact selected",
|
||||
None: "No messages",
|
||||
sendPicture: "Send image",
|
||||
inputMessage: "Type message, Enter to send, Ctrl+Enter for new line",
|
||||
bottom: "to bottom",
|
||||
Preview: "Preview image",
|
||||
chatRoom: "Chat room",
|
||||
CLOSED: "Closed",
|
||||
picture2: "Image",
|
||||
Unnamed: "Unnamed chat",
|
||||
noNewsAtTheMoment: "No unread messages",
|
||||
contactFailed: "Failed to load contacts",
|
||||
listException: "Failed to get chat list",
|
||||
my: "Me",
|
||||
unknownSender: "Unknown sender",
|
||||
recordFailed: "Failed to load chat records",
|
||||
messageException: "Failed to load messages",
|
||||
chooseFirst: "Please select contact first",
|
||||
chatDisconnected: "Chat disconnected, please refresh",
|
||||
pictureSuccessful: "Image sent",
|
||||
history:"History",
|
||||
loadFailed:"Load Fail",
|
||||
Marked:"Marked as important",
|
||||
guestNotice:"You are currently chatting as a guest, and your chat history will not be saved.",
|
||||
guestNotice2:" to save chat history",
|
||||
loginToSave:"Login",
|
||||
server500:"The server is temporarily unavailable, please try again later",
|
||||
CheckNetwork:"Connection failed, please check the network and try again",
|
||||
attemptToReconnect:"Connection lost, attempting to reconnect...",
|
||||
retryFailed:"Retry connection failed, please refresh page",
|
||||
maxConnectionsError:"Connection limit reached, please refresh page",
|
||||
ipLimitError:"Connection limit reached, please refresh page",
|
||||
serverLimitError:"Connection limit reached, please try again later",
|
||||
identityError:"Failed to set user identity, please refresh page",
|
||||
emailError:"Failed to get user information, please refresh page",
|
||||
refreshPage:"Refresh page",
|
||||
reconnectSuccess:"Reconnect successfully",
|
||||
sendMessageEmpty:"Message cannot be empty",
|
||||
unableToSubscribe:"Connection status abnormal, please refresh the page",
|
||||
conflict:"Connection exception, possibly due to multiple window conflicts, please close other windows and try again",
|
||||
abnormal:"Connection exception",
|
||||
networkAnomaly:"Network connection exception",
|
||||
customerServiceOffline:"Customer service offline, please login to send message",
|
||||
contentMax:"Content exceeds the size limit, please delete some content(300 characters or less)",
|
||||
failInSend:"Failed to send, please try again",
|
||||
connectionLimitError:"Connection limit reached, please close some windows and refresh to try again",
|
||||
serverBusy:"Server busy, please refresh later",
|
||||
connectionTimedOut:"Connection timed out, please try again later",
|
||||
reconnectFailed:"Reconnect failed, please try again later",
|
||||
serviceConfigurationError:"Service configuration exception, please try again later",
|
||||
serviceAddressUnavailable:"Service address unavailable, please try again later",
|
||||
connectionFailedService:"Failed to connect to the server, please try again later",
|
||||
connectionFailedCustomer:"Failed to connect to the customer service system, please check the network or try again later",
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -15,6 +15,9 @@ import networkRecoveryMixin from './mixins/networkRecoveryMixin';
|
|||
import './utils/loadingRecovery';
|
||||
import errorNotificationManager from '../src/utils/errorNotificationManager';
|
||||
|
||||
// 创建事件总线 用于组件通信
|
||||
Vue.prototype.$bus = new Vue();
|
||||
|
||||
Vue.use(MetaInfo)
|
||||
Vue.prototype.$addStorageEvent = $addStorageEvent // 添加storage事件
|
||||
Vue.config.productionTip = false
|
||||
|
@ -23,7 +26,7 @@ Vue.use(ElementUI, {
|
|||
});
|
||||
Vue.prototype.$axios = axios
|
||||
|
||||
// console.log = ()=>{} //全局关闭打印
|
||||
console.log = ()=>{} //全局关闭打印
|
||||
// 全局注册混入
|
||||
Vue.mixin(loadingStateMixin);
|
||||
Vue.mixin(networkRecoveryMixin);
|
||||
|
|
|
@ -32,7 +32,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/miningAccount/index.vue'),
|
||||
meta: {title: '挖矿账户页面',
|
||||
description:i18n.t(`seo.miningAccount`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool mining account, crypto mining stats, mining rewards, hashrate monitor, 矿池账户, 挖矿收益, 算力监控'
|
||||
keywords:{
|
||||
en: 'M2Pool mining account, crypto mining stats, mining rewards, hashrate monitor, 矿池账户, 挖矿收益, 算力监控',
|
||||
|
@ -63,7 +63,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/reportBlock/index.vue'),
|
||||
meta: {title: '报块页面',
|
||||
description:i18n.t(`seo.reportBlock`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,报块页面,幸运值,区块高度,Block page,Lucky Value,block height,Mining Pool'
|
||||
keywords:{
|
||||
en: 'Block page,Lucky Value,block height,Mining Pool',
|
||||
|
@ -308,7 +308,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/submitWorkOrder/index.vue'),
|
||||
meta: {title: '提交工单页面',
|
||||
description:i18n.t(`seo.submitWorkOrder`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,提交工单,技术支持,问题处理,Mining Pool,Work Order Submission, Technical Support, Troubleshooting'
|
||||
keywords:{
|
||||
en: 'Mining Pool,Work Order Submission, Technical Support, Troubleshooting',
|
||||
|
@ -322,7 +322,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/workOrderRecords/index.vue'),
|
||||
meta: {title: '工单记录页面(用户)',
|
||||
description:i18n.t(`seo.workOrderRecords`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,用户工单记录,处理状态,问题进度,User Work Order Records, Processing Status, Issue Progress'
|
||||
keywords:{
|
||||
en: 'User Work Order Records, Processing Status, Issue Progress',
|
||||
|
@ -336,7 +336,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/userWorkDetails/index.vue'),
|
||||
meta: {title: '工单详情页面(用户)',
|
||||
description:i18n.t(`seo.userWorkDetails`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,用户工单详情,问题描述,补充提交,User Work Order Details, Problem Description, Additional Submissions'
|
||||
keywords:{
|
||||
en: 'User Work Order Details, Problem Description, Additional Submissions',
|
||||
|
@ -408,7 +408,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/personalCenter/index.vue'),
|
||||
meta: {title: '个人中心页面',
|
||||
description:i18n.t(`seo.personalCenter`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,个人中心,挖矿账户,只读页面设置,安全设置,API密钥生成,Personal Center,Mining Account,Read-Only Page Setup,Security Settings,API Key Generation'
|
||||
keywords:{
|
||||
en: 'Personal Center,Mining Account,Read-Only Page Setup,Security Settings,API Key Generation',
|
||||
|
@ -422,7 +422,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/personalCenter/personalMining/index.vue'),
|
||||
meta: {title: '挖矿账户设置页面',
|
||||
description:i18n.t(`seo.personalMining`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,个人中心,挖矿账户设置,币种账户,Personal Center,Mining Account Settings,Coin Accounts'
|
||||
keywords:{
|
||||
en: 'Personal Center,Mining Account Settings,Coin Accounts',
|
||||
|
@ -436,7 +436,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/personalCenter/readOnly/index.vue'),
|
||||
meta: {title: '只读页面设置',
|
||||
description:i18n.t(`seo.readOnly`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,个人中心,只读页面设置,矿池分享,Personal Center,Read-Only Page Setting,Mining Pool Sharing'
|
||||
keywords:{
|
||||
en: 'Personal Center,Read-Only Page Setting,Mining Pool Sharing',
|
||||
|
@ -450,7 +450,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/personalCenter/securitySetting/index.vue'),
|
||||
meta: {title: '安全设置页面',
|
||||
description:i18n.t(`seo.securitySetting`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,安全设置,密码修改,Security settings, password change'
|
||||
keywords:{
|
||||
en: 'Security settings, password change',
|
||||
|
@ -464,7 +464,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/personalCenter/personal/index.vue'),
|
||||
meta: {title: '个人信息页面',
|
||||
description:i18n.t(`seo.personal`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,个人信息,登录历史,Personal Information, Login History'
|
||||
keywords:{
|
||||
en: 'Personal Information, Login History',
|
||||
|
@ -478,7 +478,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/personalCenter/miningReport/index.vue'),
|
||||
meta: {title: '挖矿报告页面',
|
||||
description:i18n.t(`seo.miningReport`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,个人中心,挖矿报告,订阅服务,Mining Report, Subscription Service'
|
||||
keywords:{
|
||||
en: 'Mining Report, Subscription Service',
|
||||
|
@ -493,7 +493,7 @@ const childrenRoutes = [
|
|||
component: () => import('../views/personalCenter/personalAPI/index.vue'),
|
||||
meta: {title: 'API页面',
|
||||
description:i18n.t(`seo.personalAPI`),
|
||||
allAuthority:[`admin`,`registered`],
|
||||
allAuthority:[`admin`,`registered`,`customer_service`],
|
||||
// keywords: 'M2Pool 矿池,个人中心,API 页面,API密钥生成,API Page,API Key Generation'
|
||||
keywords:{
|
||||
en: 'API Page,API Key Generation',
|
||||
|
@ -657,6 +657,7 @@ router.beforeEach((to, from, next) => {
|
|||
|
||||
let data = localStorage.getItem("jurisdiction");
|
||||
let jurisdiction =JSON.parse(data);
|
||||
console.log(jurisdiction,"权限");
|
||||
|
||||
localStorage.setItem('superReportError',"")
|
||||
let element = document.getElementsByClassName('el-main')[0];
|
||||
|
|
|
@ -5,12 +5,48 @@ Vue.use(Vuex)
|
|||
|
||||
export default new Vuex.Store({
|
||||
state: {
|
||||
isLoggedIn: false,
|
||||
userInfo: null
|
||||
},
|
||||
getters: {
|
||||
isLoggedIn: state => state.isLoggedIn,
|
||||
userInfo: state => state.userInfo
|
||||
},
|
||||
mutations: {
|
||||
SET_LOGIN_STATE(state, isLoggedIn) {
|
||||
state.isLoggedIn = isLoggedIn
|
||||
},
|
||||
SET_USER_INFO(state, userInfo) {
|
||||
state.userInfo = userInfo
|
||||
},
|
||||
CLEAR_USER_DATA(state) {
|
||||
state.isLoggedIn = false
|
||||
state.userInfo = null
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
// 退出登录
|
||||
async logout({ commit }) {
|
||||
try {
|
||||
// 清除本地存储
|
||||
localStorage.removeItem('token')
|
||||
localStorage.removeItem('userEmail')
|
||||
localStorage.removeItem('jurisdiction')
|
||||
|
||||
// 清除 Vuex 状态
|
||||
commit('CLEAR_USER_DATA')
|
||||
|
||||
// 触发全局事件,通知其他组件用户已退出
|
||||
if (Vue.prototype.$bus) {
|
||||
Vue.prototype.$bus.$emit('user-logged-out')
|
||||
}
|
||||
|
||||
return true
|
||||
} catch (error) {
|
||||
console.error('退出登录失败:', error)
|
||||
return false
|
||||
}
|
||||
}
|
||||
},
|
||||
modules: {
|
||||
}
|
||||
|
|
|
@ -4,6 +4,13 @@ import { Notification, MessageBox, Message } from 'element-ui'
|
|||
import loadingManager from './loadingManager';
|
||||
import errorNotificationManager from './errorNotificationManager';
|
||||
|
||||
|
||||
const pendingRequestMap = new Map(); //处理Request aborted 错误
|
||||
|
||||
function getRequestKey(config) { //处理Request aborted 错误 生成唯一 key 的函数
|
||||
const { url, method, params, data } = config;
|
||||
return [url, method, JSON.stringify(params), JSON.stringify(data)].join('&');
|
||||
}
|
||||
// 创建axios实例
|
||||
const service = axios.create({
|
||||
// axios中请求配置有baseURL选项,表示请求URL公共部分
|
||||
|
@ -143,9 +150,6 @@ window.addEventListener('online', () => {
|
|||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// 使用错误提示管理器控制网络断开提示
|
||||
window.addEventListener('offline', () => {
|
||||
if (window.vm && window.vm.$message && errorNotificationManager.canShowError('networkOffline')) {
|
||||
|
@ -215,6 +219,22 @@ service.interceptors.request.use(config => {
|
|||
config.params = {};
|
||||
config.url = url;
|
||||
}
|
||||
|
||||
// 生成请求唯一key 处理Request aborted 错误
|
||||
const requestKey = getRequestKey(config);
|
||||
|
||||
// 如果有相同请求,先取消 处理Request aborted 错误
|
||||
if (pendingRequestMap.has(requestKey)) {
|
||||
const cancel = pendingRequestMap.get(requestKey);
|
||||
cancel(); // 取消上一次请求
|
||||
pendingRequestMap.delete(requestKey);
|
||||
}
|
||||
|
||||
// 创建新的CancelToken 处理Request aborted 错误
|
||||
config.cancelToken = new axios.CancelToken(cancel => {
|
||||
pendingRequestMap.set(requestKey, cancel);
|
||||
});
|
||||
|
||||
return config
|
||||
}, error => {
|
||||
Promise.reject(error)
|
||||
|
@ -222,6 +242,10 @@ service.interceptors.request.use(config => {
|
|||
|
||||
// 响应拦截器
|
||||
service.interceptors.response.use(res => {
|
||||
|
||||
// 请求完成后移除
|
||||
const requestKey = getRequestKey(res.config);
|
||||
pendingRequestMap.delete(requestKey);
|
||||
// 未设置状态码则默认成功状态
|
||||
const code = res.data.code || 200;
|
||||
// 获取错误信息
|
||||
|
@ -284,8 +308,15 @@ service.interceptors.response.use(res => {
|
|||
|
||||
},
|
||||
error => {
|
||||
|
||||
|
||||
if (error.message && error.message.includes('canceled') || error.message.includes('Request aborted')) {
|
||||
// 主动取消的请求,直接忽略,不提示
|
||||
return Promise.reject(error);
|
||||
}
|
||||
// 请求异常也要移除 处理Request aborted 错误
|
||||
if (error.config) {
|
||||
const requestKey = getRequestKey(error.config);
|
||||
pendingRequestMap.delete(requestKey);
|
||||
}
|
||||
|
||||
|
||||
let { message } = error;
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
<div class="textBox">
|
||||
<p>{{ $t(`ServiceTerms.clauseService1`) }}</p>
|
||||
<p>{{ $t(`ServiceTerms.clauseService2`) }}</p>
|
||||
<p><span style="font-weight: 600;">{{ $t(`ServiceTerms.clauseService3`) }} </span>{{ $t(`ServiceTerms.clauseService4`) }}</p>
|
||||
|
||||
<p style="text-align: justify;"><span style="font-weight: 600 ;text-align: justify;">{{ $t(`ServiceTerms.clauseService3`) }} </span>{{ $t(`ServiceTerms.clauseService4`) }}</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
@ -88,13 +89,13 @@
|
|||
<p>{{ $t(`ServiceTerms.clauseTermination2`) }}</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="clauseBox">
|
||||
<!-- <section class="clauseBox">
|
||||
<h5>{{ $t(`ServiceTerms.title11`) }}</h5>
|
||||
<div class="textBox">
|
||||
<p>{{ $t(`ServiceTerms.clauseLaw1`) }}</p>
|
||||
<p>{{ $t(`ServiceTerms.clauseLaw2`) }}</p>
|
||||
</div>
|
||||
</section>
|
||||
</section> -->
|
||||
|
||||
</section>
|
||||
|
||||
|
@ -117,7 +118,8 @@
|
|||
<div class="textBox">
|
||||
<p>{{ $t(`ServiceTerms.clauseService1`) }}</p>
|
||||
<p>{{ $t(`ServiceTerms.clauseService2`) }}</p>
|
||||
<p><span style="font-weight: 600;">{{ $t(`ServiceTerms.clauseService3`) }} </span>{{ $t(`ServiceTerms.clauseService4`) }}</p>
|
||||
|
||||
<p style="text-align: justify;"><span style="font-weight: 600;text-align: justify;">{{ $t(`ServiceTerms.clauseService3`) }} </span>{{ $t(`ServiceTerms.clauseService4`) }}</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
@ -187,13 +189,13 @@
|
|||
<p>{{ $t(`ServiceTerms.clauseTermination2`) }}</p>
|
||||
</div>
|
||||
</section>
|
||||
<section class="clauseBox">
|
||||
<!-- <section class="clauseBox">
|
||||
<h3>{{ $t(`ServiceTerms.title11`) }}</h3>
|
||||
<div class="textBox">
|
||||
<p>{{ $t(`ServiceTerms.clauseLaw1`) }}</p>
|
||||
<p>{{ $t(`ServiceTerms.clauseLaw2`) }}</p>
|
||||
</div>
|
||||
</section>
|
||||
</section> -->
|
||||
|
||||
</section>
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -276,20 +276,20 @@ export default {
|
|||
name: "GH/s",
|
||||
nameTextStyle: {
|
||||
padding: [0, 0, 0, -40],
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: function (value) {
|
||||
// let data
|
||||
// if (value > 10000000) {
|
||||
// data = `${(value / 10000000)} KW`
|
||||
// } else if (value > 1000000) {
|
||||
// data = `${(value / 1000000)} M`
|
||||
// } else if (value / 10000) {
|
||||
// data = `${(value / 10000)} W`
|
||||
// }
|
||||
return value
|
||||
}
|
||||
}
|
||||
// axisLabel: {
|
||||
// formatter: function (value) {
|
||||
// let data
|
||||
// if (value > 10000000) {
|
||||
// data = `${(value / 10000000)} KW`
|
||||
// } else if (value > 1000000) {
|
||||
// data = `${(value / 1000000)} M`
|
||||
// } else if (value / 10000) {
|
||||
// data = `${(value / 10000)} W`
|
||||
// }
|
||||
// return data
|
||||
// }
|
||||
// }
|
||||
},
|
||||
{
|
||||
position: "right",
|
||||
|
@ -833,6 +833,7 @@ export default {
|
|||
const maxValue = Math.max(...this.option.series[0].data); // 获取数据最大值
|
||||
const formatter = yAxis.axisLabel.formatter;
|
||||
const formattedValue = formatter(maxValue); // 格式化最大值
|
||||
|
||||
|
||||
// 创建一个临时 DOM 元素计算宽度
|
||||
const tempDiv = document.createElement('div');
|
||||
|
@ -847,11 +848,30 @@ export default {
|
|||
// 动态设置 grid.left,加上安全边距
|
||||
const safeMargin = 20;
|
||||
this.option.grid.left = labelWidth + safeMargin + 'px';
|
||||
// this.$nextTick(
|
||||
// // 更新图表
|
||||
// this.inCharts()
|
||||
|
||||
// )
|
||||
|
||||
// ------------全网算力图---------------
|
||||
//
|
||||
|
||||
const yAxis2 = this.minerOption.yAxis[0]; // 第一个 Y 轴
|
||||
const maxValue2 = Math.max(...this.minerOption.series[0].data); // 获取数据最大值
|
||||
const formatter2 = yAxis2.axisLabel.formatter;
|
||||
const formattedValue2 = formatter2(maxValue2); // 格式化最大值
|
||||
|
||||
|
||||
// 创建一个临时 DOM 元素计算宽度
|
||||
const tempDiv2 = document.createElement('div');
|
||||
tempDiv2.style.position = 'absolute';
|
||||
tempDiv2.style.visibility = 'hidden';
|
||||
tempDiv2.style.fontSize = '12px'; // 与 axisLabel.fontSize 一致
|
||||
tempDiv2.innerText = formattedValue2;
|
||||
document.body.appendChild(tempDiv2);
|
||||
const labelWidth2 = tempDiv2.offsetWidth;
|
||||
document.body.removeChild(tempDiv2);
|
||||
// 动态设置 grid.left,加上安全边距
|
||||
const safeMargin2 = 20;
|
||||
this.minerOption.grid.left = labelWidth2 + safeMargin2 + 'px';
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -888,6 +908,30 @@ export default {
|
|||
|
||||
|
||||
methods: {
|
||||
|
||||
handelOptionYAxis(option){
|
||||
const yAxis = option.yAxis[0]; // 第一个 Y 轴
|
||||
const maxValue = Math.max(...option.series[0].data); // 获取数据最大值
|
||||
const formatter = yAxis.axisLabel.formatter;
|
||||
const formattedValue = formatter(maxValue); // 格式化最大值
|
||||
|
||||
|
||||
// 创建一个临时 DOM 元素计算宽度
|
||||
const tempDiv = document.createElement('div');
|
||||
tempDiv.style.position = 'absolute';
|
||||
tempDiv.style.visibility = 'hidden';
|
||||
tempDiv.style.fontSize = '12px'; // 与 axisLabel.fontSize 一致
|
||||
tempDiv.innerText = formattedValue;
|
||||
document.body.appendChild(tempDiv);
|
||||
const labelWidth = tempDiv.offsetWidth;
|
||||
document.body.removeChild(tempDiv);
|
||||
|
||||
// 动态设置 grid.left,加上安全边距
|
||||
const safeMargin = 20;
|
||||
option.grid.left = labelWidth + safeMargin + 'px';
|
||||
|
||||
return option
|
||||
},
|
||||
slideLeft() {
|
||||
const allLength = this.currencyList.length * 120
|
||||
const boxLength = document.getElementById('list-box').clientWidth
|
||||
|
@ -940,7 +984,7 @@ export default {
|
|||
this.MinerChart = echarts.init(document.getElementById("minerChart"));
|
||||
}
|
||||
|
||||
|
||||
this.minerOption= this.handelOptionYAxis(this.minerOption) // Y轴文字显示动态调整grid.left
|
||||
this.minerOption.series[0].name = this.$t(`home.networkPower`)
|
||||
this.minerOption.series[1].name = this.$t(`home.currencyPrice`)
|
||||
this.MinerChart.setOption(this.minerOption);
|
||||
|
@ -1363,13 +1407,13 @@ export default {
|
|||
// 其他CSS样式可以根据需要添加
|
||||
},
|
||||
handelProfitCalculation() {
|
||||
|
||||
|
||||
for (const key in this.CalculatorData) {
|
||||
if (!this.CalculatorData[key]) {
|
||||
// this.$message({
|
||||
// message: this.$t(`home.acquisitionFailed`),
|
||||
// type: "error",
|
||||
// });
|
||||
if (this.CalculatorData[key]!==0 && !this.CalculatorData[key]) {
|
||||
this.$message({
|
||||
message: this.$t(`home.acquisitionFailed`),
|
||||
type: "error",
|
||||
});
|
||||
this.profit = 0
|
||||
// var myDiv = document.getElementById('myDiv');
|
||||
// this.disableElement(myDiv);
|
||||
|
@ -1440,67 +1484,37 @@ export default {
|
|||
|
||||
return width + marginLeft + marginRight;
|
||||
},
|
||||
|
||||
|
||||
// 左滑动逻辑
|
||||
scrollLeft() {
|
||||
const listEl = this.$refs.currencyList;
|
||||
const listBox = this.$refs.listBox;
|
||||
if (!listEl || !listBox) return;
|
||||
|
||||
const itemFullWidth = this.getItemFullWidth();
|
||||
const step = 2 * itemFullWidth; // 每次滑动2个币种
|
||||
const allLength = this.currencyList.length * itemFullWidth;
|
||||
const boxLength = listBox.clientWidth;
|
||||
|
||||
if (allLength <= boxLength) return;
|
||||
|
||||
let currentLeft = Math.abs(parseInt(listEl.style.transform.replace('translateX(', '').replace('px)', '')) || 0);
|
||||
let newLeft = currentLeft - step;
|
||||
|
||||
listEl.classList.add('scrolling');
|
||||
|
||||
if (newLeft <= 0) {
|
||||
listEl.style.transform = 'translateX(0)';
|
||||
const allLength = this.currencyList.length * 120
|
||||
const boxLength = document.getElementById('list-box').clientWidth
|
||||
if (allLength < boxLength) return
|
||||
const listEl = document.getElementById('list')
|
||||
const leftMove = Math.abs(parseInt(window.getComputedStyle(listEl, null)?.left))
|
||||
if (leftMove + boxLength - 360 < boxLength) {
|
||||
// 到最开始的时候
|
||||
listEl.style.left = '0PX'
|
||||
} else {
|
||||
listEl.style.transform = `translateX(-${newLeft}px)`;
|
||||
listEl.style.left = '-' + (leftMove - 360) + 'PX'
|
||||
}
|
||||
|
||||
// 增加动画时间到 500ms
|
||||
setTimeout(() => {
|
||||
listEl.classList.remove('scrolling');
|
||||
}, 500);
|
||||
},
|
||||
},
|
||||
// 右滑动逻辑
|
||||
scrollRight() {
|
||||
const allLength = this.currencyList.length * 120
|
||||
const boxLength = document.getElementById('list-box').clientWidth
|
||||
if (allLength < boxLength) return
|
||||
const listEl = document.getElementById('list')
|
||||
const leftMove = Math.abs(parseInt(window.getComputedStyle(listEl, null)?.left))
|
||||
if (leftMove + boxLength + 360 > allLength) {
|
||||
listEl.style.left = '-' + (allLength - boxLength) + 'PX'
|
||||
} else {
|
||||
listEl.style.left = '-' + (leftMove + 360) + 'PX'
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
|
||||
// 右滑动逻辑
|
||||
scrollRight() {
|
||||
const listEl = this.$refs.currencyList;
|
||||
const listBox = this.$refs.listBox;
|
||||
if (!listEl || !listBox) return;
|
||||
|
||||
const itemFullWidth = this.getItemFullWidth();
|
||||
const step = 2 * itemFullWidth; // 每次滑动2个币种
|
||||
const allLength = this.currencyList.length * itemFullWidth;
|
||||
const boxLength = listBox.clientWidth;
|
||||
|
||||
if (allLength <= boxLength) return;
|
||||
|
||||
let currentLeft = Math.abs(parseInt(listEl.style.transform.replace('translateX(', '').replace('px)', '')) || 0);
|
||||
let newLeft = currentLeft + step;
|
||||
const maxLeft = allLength - boxLength;
|
||||
|
||||
listEl.classList.add('scrolling');
|
||||
|
||||
if (newLeft >= maxLeft) {
|
||||
listEl.style.transform = `translateX(-${maxLeft}px)`;
|
||||
} else {
|
||||
listEl.style.transform = `translateX(-${newLeft}px)`;
|
||||
}
|
||||
|
||||
// 增加动画时间到 500ms
|
||||
setTimeout(() => {
|
||||
listEl.classList.remove('scrolling');
|
||||
}, 500);
|
||||
},
|
||||
// // 左滑动逻辑
|
||||
// scrollLeft() {
|
||||
// const allLength = this.currencyList.length * 120
|
||||
|
|
|
@ -21,12 +21,12 @@
|
|||
</span>
|
||||
</template>
|
||||
|
||||
<ul class="moveCurrencyBox" >
|
||||
<li @click="clickCurrency(item)" v-for="item in currencyList" :key="item.value">
|
||||
<img :src="item.img" alt="coin" loading="lazy"/>
|
||||
<p>{{ item.label }}</p>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="moveCurrencyBox" >
|
||||
<li @click="clickCurrency(item)" v-for="item in currencyList" :key="item.value">
|
||||
<img :src="item.img" alt="coin" loading="lazy"/>
|
||||
<p>{{ item.label }}</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</el-submenu>
|
||||
|
@ -340,29 +340,6 @@
|
|||
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
||||
<el-card>
|
||||
<div class="monitor-list">
|
||||
<div class="btn left" @click="scrollLeft">
|
||||
<i class="iconfont icon-icon-prev" />
|
||||
</div>
|
||||
<div ref="listBox" class="list-box">
|
||||
<div ref="currencyList" class="list">
|
||||
<div
|
||||
v-for="item in currencyList"
|
||||
:key="item.value"
|
||||
@click="clickCurrency(item)"
|
||||
class="list-item"
|
||||
>
|
||||
<img :src="item.img" alt="coin" />
|
||||
<span :class="{ active: itemActive === item.value }">
|
||||
{{ item.label }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn right" @click="scrollRight">
|
||||
<i class="iconfont icon-zuoyoujiantou1" />
|
||||
</div>
|
||||
</div>
|
||||
<!-- <div class="monitor-list">
|
||||
<div class="btn left" @click="scrollLeft">
|
||||
<i class="iconfont icon-icon-prev" />
|
||||
</div>
|
||||
|
@ -384,10 +361,11 @@
|
|||
<div class="btn right" @click="scrollRight">
|
||||
<i class="iconfont icon-zuoyoujiantou1" />
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<section class="describeBox">
|
||||
<p> <i class="iconfont icon-tishishuoming "></i><span class="describeTitle">{{ $t(`home.describeTitle`) }}</span>{{ $t(`home.describe`) }} <span class="view" @click="handelJump(`/allocationExplanation`)"> {{ $t(`home.view`) }} </span> </p>
|
||||
</section>
|
||||
|
@ -702,6 +680,7 @@
|
|||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-show="item.value !== 'enx'"
|
||||
>
|
||||
<div style="display: flex; align-items: center">
|
||||
<img :src="item.imgUrl" style="float: left; width: 20px" />
|
||||
|
@ -783,7 +762,7 @@ export default {
|
|||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
<style scoped lang="scss">
|
||||
// 手机端适配
|
||||
@media screen and (min-width: 220px) and (max-width: 800px) {
|
||||
.imgTop {
|
||||
|
@ -822,6 +801,7 @@ export default {
|
|||
.view{
|
||||
color: #5721e4;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -848,6 +828,7 @@ export default {
|
|||
// overflow: hidden;
|
||||
padding: 5px 5px;
|
||||
box-sizing: border-box;
|
||||
cursor: pointer;
|
||||
// background: palegoldenrod;
|
||||
|
||||
img {
|
||||
|
@ -863,7 +844,13 @@ export default {
|
|||
text-transform: capitalize;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
.moveCurrencyBox li:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.currencySelect{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
@ -1352,6 +1339,7 @@ export default {
|
|||
.view{
|
||||
color: #5721e4;
|
||||
margin-left: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1381,6 +1369,7 @@ export default {
|
|||
padding: 5px 5px;
|
||||
box-sizing: border-box;
|
||||
// background: palegoldenrod;
|
||||
cursor: pointer;
|
||||
|
||||
img {
|
||||
width: 25px;
|
||||
|
@ -1395,7 +1384,13 @@ export default {
|
|||
text-transform: capitalize;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
.moveCurrencyBox li:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
.currencySelect{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
@ -3141,63 +3136,6 @@ export default {
|
|||
transition: left 1s;
|
||||
}
|
||||
}
|
||||
|
||||
.list-box {//加的
|
||||
width: calc(100% - 100px);
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.list {
|
||||
display: flex;
|
||||
will-change: transform;
|
||||
padding-left: 2%;
|
||||
|
||||
&.scrolling {
|
||||
// 增加动画时长到 0.5s,使用更平滑的缓动函数
|
||||
transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||
}
|
||||
|
||||
.list-item {
|
||||
flex-shrink: 0;
|
||||
width: 120px;
|
||||
height: 95%;
|
||||
margin-left: 18px;
|
||||
// 增加过渡时间,使悬停效果更平滑
|
||||
transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||
|
||||
&:hover {
|
||||
transform: translateY(-3px);
|
||||
box-shadow: 0 6px 16px rgba(110, 62, 219, 0.2);
|
||||
}
|
||||
|
||||
img {
|
||||
transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||
}
|
||||
|
||||
span {
|
||||
transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
// 增加按钮过渡时间
|
||||
transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||
|
||||
&:hover {
|
||||
background-color: #6e3edb;
|
||||
color: #fff;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
&:active {
|
||||
transform: scale(0.95);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
// -----------------------
|
||||
|
@ -3348,6 +3286,7 @@ export default {
|
|||
cursor: pointer;
|
||||
margin-left: 8px;
|
||||
color: #6E3EDB;
|
||||
// background: palegoldenrod;
|
||||
|
||||
}
|
||||
.view:hover{
|
||||
|
|
|
@ -214,6 +214,7 @@ import {
|
|||
import { encryption } from "../../utils/fun";
|
||||
import { getAccountList } from "../../api/personalCenter";
|
||||
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
@ -372,6 +373,11 @@ export default {
|
|||
JSON.stringify(data.data.access_token)
|
||||
);
|
||||
|
||||
|
||||
// 等待一小段时间确保写入完成
|
||||
await new Promise(resolve => setTimeout(resolve, 50));
|
||||
// 登录成功后
|
||||
this.$bus.$emit('user-logged-in'); // 触发登录成功全局事件
|
||||
this.fetchAccountList();
|
||||
this.fetchAccountGradeList();
|
||||
this.fetchJurisdiction();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
import { getCheck,getAddBalace, getAddMinerAccount, getAccountList, getDelMinerAccount, getMinerAccountBalance, getCheckAccount,getCheckBalance,getIfBind } from "../../../api/personalCenter"
|
||||
import {getAccountGradeList } from "../../../api/login"
|
||||
import { Debounce,throttle }from "../../../utils/publicMethods";
|
||||
|
||||
export default {
|
||||
data() {
|
||||
|
@ -542,13 +543,7 @@ export default {
|
|||
}
|
||||
|
||||
},
|
||||
confirmAdd() {
|
||||
// this.accountList.push({
|
||||
// account: this.params.account,
|
||||
// miningPool: this.params.miningPool,
|
||||
// currency: this.params.miningPool,
|
||||
// remarks: this.params.remarks,
|
||||
// })
|
||||
confirmAdd:Debounce(function(){
|
||||
if (!this.AccountParams.ma) {
|
||||
this.$message({
|
||||
message: this.$t(`personal.accountNumber`),
|
||||
|
@ -600,12 +595,66 @@ export default {
|
|||
}
|
||||
|
||||
this.fetchCheck({ coin: this.AccountParams.coin, ma: this.AccountParams.ma,balance: this.AccountParams.balance})
|
||||
// this.fetchCheckAccount({ coin: this.AccountParams.coin, ma: this.AccountParams.ma })
|
||||
},200),
|
||||
// confirmAdd() {
|
||||
|
||||
// if (!this.AccountParams.ma) {
|
||||
// this.$message({
|
||||
// message: this.$t(`personal.accountNumber`),
|
||||
// type: "error",
|
||||
// showClose: true
|
||||
// });
|
||||
// return
|
||||
// }
|
||||
// if (!this.AccountParams.balance) {
|
||||
// this.$message({
|
||||
// message: this.$t(`personal.inputWalletAddress`),
|
||||
// type: "error",
|
||||
// showClose: true
|
||||
// });
|
||||
// return
|
||||
// }
|
||||
// if (!this.AccountParams.coin) {
|
||||
// this.$message({
|
||||
// message:this.$t(`personal.selectCurrency`),
|
||||
// type: "error",
|
||||
// showClose: true
|
||||
// });
|
||||
// return
|
||||
// }
|
||||
|
||||
// if (!this.AccountParams.code && this.isItBound) {
|
||||
// this.$message({
|
||||
// showClose: true,
|
||||
// message: this.$t(`personal.gCode`),
|
||||
// type: 'error'
|
||||
// });
|
||||
|
||||
// return
|
||||
// }
|
||||
|
||||
// // 账户只能输入字母、数字、下划线,且不能以数字开头,长度不小于4位,不大于24位
|
||||
// const regexAccount=/^[a-zA-Z_][a-zA-Z0-9_]{3,23}$/
|
||||
|
||||
// const PasswordIsValid = regexAccount.test(this.AccountParams.ma);
|
||||
// if (!PasswordIsValid) {
|
||||
// // 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
|
||||
// this.$message({
|
||||
// message: this.$t(`personal.accountFormat`),
|
||||
// type: "error",
|
||||
// showClose: true
|
||||
// });
|
||||
|
||||
// return;
|
||||
// }
|
||||
|
||||
// this.fetchCheck({ coin: this.AccountParams.coin, ma: this.AccountParams.ma,balance: this.AccountParams.balance})
|
||||
// // this.fetchCheckAccount({ coin: this.AccountParams.coin, ma: this.AccountParams.ma })
|
||||
|
||||
|
||||
|
||||
|
||||
},
|
||||
// },
|
||||
handelAddClose(){
|
||||
for (let key in this.AccountParams) {
|
||||
this.AccountParams[key] = "";
|
||||
|
|
|
@ -269,7 +269,7 @@
|
|||
<span class="title">{{ $t(`personal.verificationCode`) }}</span>
|
||||
<div class="verificationCode">
|
||||
<el-input
|
||||
type="email"
|
||||
type="text"
|
||||
v-model="closeParams.eCode"
|
||||
autocomplete="off"
|
||||
:placeholder="$t(`user.verificationCode`)"
|
||||
|
|
|
@ -247,7 +247,7 @@
|
|||
import { getResetPwd, getResetPwdCode } from "../../api/login";
|
||||
import { encryption } from "../../utils/fun";
|
||||
import { getEmailIfBind } from "../../api/personalCenter";
|
||||
|
||||
import { Debounce,throttle }from "../../utils/publicMethods";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
@ -419,6 +419,10 @@ export default {
|
|||
type: "success",
|
||||
showClose: true,
|
||||
});
|
||||
for (const key in this.loginForm) {//清空表单
|
||||
this.loginForm[key] = "";
|
||||
}
|
||||
|
||||
this.$router.push(`/${this.lang}/login`);
|
||||
}
|
||||
},
|
||||
|
@ -521,7 +525,8 @@ export default {
|
|||
}
|
||||
});
|
||||
},
|
||||
submitForm() {
|
||||
|
||||
submitForm:Debounce(function(){
|
||||
this.$refs.ruleForm.validate((valid) => {
|
||||
if (valid) {
|
||||
//去空格
|
||||
|
@ -596,7 +601,83 @@ export default {
|
|||
this.fetchResetPwd(form);
|
||||
}
|
||||
});
|
||||
},
|
||||
},200),
|
||||
// submitForm() {
|
||||
// this.$refs.ruleForm.validate((valid) => {
|
||||
// if (valid) {
|
||||
// //去空格
|
||||
// this.loginForm.userName = this.loginForm.email.trim();
|
||||
// this.loginForm.password = this.loginForm.password.trim();
|
||||
// this.loginForm.newPassword = this.loginForm.newPassword.trim();
|
||||
// if (this.loginForm.password !== this.loginForm.newPassword) {
|
||||
// this.$message({
|
||||
// message: this.$t(`user.confirmPassword2`),
|
||||
// type: "error",
|
||||
// customClass: "messageClass",
|
||||
// showClose: true,
|
||||
// });
|
||||
|
||||
// return;
|
||||
// }
|
||||
// //邮箱格式验证
|
||||
// const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/;
|
||||
|
||||
// let isMailbox = emailRegex.test(this.loginForm.email);
|
||||
// if (!isMailbox) {
|
||||
// this.$message({
|
||||
// message: this.$t(`user.emailVerification`),
|
||||
// type: "error",
|
||||
// customClass: "messageClass",
|
||||
// showClose: true,
|
||||
// });
|
||||
|
||||
// return;
|
||||
|
||||
// //用户名规则1.长度限制:3<=用户名<=16; 字符限制:仅允许使用字母、数字、下划线 用户名必须以字母开头
|
||||
// // const regex = /^[a-zA-Z][a-zA-Z0-9_]{2,15}$/; // 正则表达式
|
||||
// // const isValid = regex.test(this.loginForm.email);
|
||||
// // if (!isValid) {
|
||||
// // // 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
|
||||
// // this.$message({
|
||||
// // message: this.$t(`user.accountReminder`),
|
||||
// // type: "error",
|
||||
// // customClass: "messageClass",
|
||||
// // showClose: true
|
||||
// // });
|
||||
|
||||
// // return;
|
||||
// // }
|
||||
// }
|
||||
|
||||
// // 密码验证 8<=密码<=32 包含大小写字母、数字和特殊字符(!@#¥%……&*)
|
||||
// const regexPassword =
|
||||
// /^(?!.*[\u4e00-\u9fa5])(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,32}$/; // 正则表达式
|
||||
// const PasswordIsValid = regexPassword.test(this.loginForm.password);
|
||||
// if (!PasswordIsValid) {
|
||||
// // 如果输入不符合要求,可以根据具体需求给出错误提示或进行其他处理
|
||||
// this.$message({
|
||||
// message: this.$t(`user.PasswordReminder`),
|
||||
// type: "error",
|
||||
// showClose: true,
|
||||
// });
|
||||
|
||||
// return;
|
||||
// }
|
||||
// // ,gCode: this.loginForm.gCode,
|
||||
// let obj = {
|
||||
// email: this.loginForm.email,
|
||||
// password: this.loginForm.password,
|
||||
// resetPwdCode: this.loginForm.resetPwdCode,
|
||||
// };
|
||||
// //加密
|
||||
// // const form = { ...this.loginForm };
|
||||
// // form.password = encryption(this.loginForm.password);
|
||||
// const form = { ...obj };
|
||||
// form.password = encryption(obj.password);
|
||||
// this.fetchResetPwd(form);
|
||||
// }
|
||||
// });
|
||||
// },
|
||||
handleClick() {
|
||||
this.$router.push(`/${this.lang}`);
|
||||
},
|
||||
|
|
|
@ -103,11 +103,21 @@ export default {
|
|||
data: this.FormDatas,
|
||||
}).then(res => {
|
||||
console.log(res,"文件返回");
|
||||
if (res.status == 200 && res.data.code != 200) {
|
||||
this.$message.error(res.data.msg);
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
this.ruleForm.files = res.data.data.id
|
||||
// if (this.ruleForm.files) {//成功拿到返回ID
|
||||
// this.fetchSubmitWork(this.ruleForm)
|
||||
// }
|
||||
if (this.ruleForm.files) {//成功拿到返回ID
|
||||
this.fetchSubmitWork(this.ruleForm)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
})
|
||||
} else {
|
||||
|
||||
|
|
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -1 +1 @@
|
|||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><meta name=google-site-verification content=pKAZogQ0NQ6L4j9-V58WJMjm7zYCFwkJXSJzWu9UDM8><meta name=robots content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta name=googlebot content="index, follow"><meta name=googlebot-news content="index, follow"><meta name=bingbot content="index, follow"><link rel=alternate hreflang=zh href=https://m2pool.com/zh><link rel=alternate hreflang=en href=https://m2pool.com/en><link rel=alternate hreflang=x-default href=https://m2pool.com/en><meta property=og:title content="M2pool - Stable leading high-yield mining pool"><meta property=og:description content="M2Pool provides professional mining services, supporting multiple cryptocurrency mining"><meta property=og:url content=https://m2pool.com/en><meta property=og:site_name content=M2Pool><meta property=og:type content=website><meta property=og:image content=https://m2pool.com/logo.png><link rel=icon href=/favicon.ico><link rel=stylesheet href=//at.alicdn.com/t/c/font_4582735_irzdjxdsrq8.css><title>M2pool - Stable leading high-yield mining pool</title><meta name=keywords content="M2Pool, cryptocurrency mining pool,Entropyx(enx),entropyx, bitcoin mining, DGB mining, mining pool service, 加密货币矿池, 比特币挖矿, DGB挖矿"><meta name=description content="M2Pool provides professional mining services, supporting multiple cryptocurrency mining, including nexa, grs, mona, dgb, rxd, enx"><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><script defer src=/js/chunk-vendors-945ce2fe.648a91a9.js></script><script defer src=/js/chunk-vendors-aacc2dbb.d317c558.js></script><script defer src=/js/chunk-vendors-bc050c32.3f2f14d2.js></script><script defer src=/js/chunk-vendors-3003db77.d0b93d36.js></script><script defer src=/js/chunk-vendors-9d134daf.bb668c99.js></script><script defer src=/js/chunk-vendors-439af1fa.48a48f35.js></script><script defer src=/js/chunk-vendors-5c533fba.b9c00e08.js></script><script defer src=/js/chunk-vendors-96cecd74.a7d9b845.js></script><script defer src=/js/chunk-vendors-c2f7d60e.3710fdc2.js></script><script defer src=/js/chunk-vendors-89d5c698.2190b4ca.js></script><script defer src=/js/chunk-vendors-377fed06.159de137.js></script><script defer src=/js/chunk-vendors-5a805870.4cfc0ae8.js></script><script defer src=/js/chunk-vendors-cf2e0a28.c6e99da0.js></script><script defer src=/js/app-42f9d7e6.17cb0808.js></script><script defer src=/js/app-5c551db8.2b99b68c.js></script><script defer src=/js/app-01dc9ae1.188fe4f5.js></script><script defer src=/js/app-b4c4f6ec.bf0536f4.js></script><script defer src=/js/app-72600b29.6b68c3d1.js></script><script defer src=/js/app-f035d474.30e8939b.js></script><script defer src=/js/app-113c6c50.28d27f0c.js></script><link href=/css/chunk-vendors-5c533fba.6f97509c.css rel=stylesheet><link href=/css/app-42f9d7e6.23095695.css rel=stylesheet><link href=/css/app-01dc9ae1.825b7ca3.css rel=stylesheet><link href=/css/app-b4c4f6ec.c96edfc1.css rel=stylesheet><link href=/css/app-72600b29.83c22f01.css rel=stylesheet><link href=/css/app-f035d474.0e6b8898.css rel=stylesheet><link href=/css/app-113c6c50.af06316f.css rel=stylesheet></head><body><div id=app></div></body></html>
|
||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><meta name=google-site-verification content=pKAZogQ0NQ6L4j9-V58WJMjm7zYCFwkJXSJzWu9UDM8><meta name=robots content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta name=googlebot content="index, follow"><meta name=googlebot-news content="index, follow"><meta name=bingbot content="index, follow"><link rel=alternate hreflang=zh href=https://m2pool.com/zh><link rel=alternate hreflang=en href=https://m2pool.com/en><link rel=alternate hreflang=x-default href=https://m2pool.com/en><meta property=og:title content="M2pool - Stable leading high-yield mining pool"><meta property=og:description content="M2Pool provides professional mining services, supporting multiple cryptocurrency mining"><meta property=og:url content=https://m2pool.com/en><meta property=og:site_name content=M2Pool><meta property=og:type content=website><meta property=og:image content=https://m2pool.com/logo.png><link rel=icon href=/favicon.ico><link rel=stylesheet href=//at.alicdn.com/t/c/font_4582735_7i8wfzc0art.css><title>M2pool - Stable leading high-yield mining pool</title><meta name=keywords content="M2Pool, cryptocurrency mining pool,Entropyx(enx),entropyx, bitcoin mining, DGB mining, mining pool service, 加密货币矿池, 比特币挖矿, DGB挖矿"><meta name=description content="M2Pool provides professional mining services, supporting multiple cryptocurrency mining, including nexa, grs, mona, dgb, rxd, enx"><meta name=format-detection content="telephone=no"><meta name=apple-mobile-web-app-capable content=yes><script defer src=/js/chunk-vendors-945ce2fe.648a91a9.js></script><script defer src=/js/chunk-vendors-aacc2dbb.d317c558.js></script><script defer src=/js/chunk-vendors-bc050c32.3f2f14d2.js></script><script defer src=/js/chunk-vendors-3003db77.d0b93d36.js></script><script defer src=/js/chunk-vendors-9d134daf.bb668c99.js></script><script defer src=/js/chunk-vendors-439af1fa.48a48f35.js></script><script defer src=/js/chunk-vendors-5c533fba.b9c00e08.js></script><script defer src=/js/chunk-vendors-96cecd74.a7d9b845.js></script><script defer src=/js/chunk-vendors-c2f7d60e.3710fdc2.js></script><script defer src=/js/chunk-vendors-89d5c698.2190b4ca.js></script><script defer src=/js/chunk-vendors-377fed06.159de137.js></script><script defer src=/js/chunk-vendors-5a805870.4cfc0ae8.js></script><script defer src=/js/chunk-vendors-cf2e0a28.c6e99da0.js></script><script defer src=/js/app-42f9d7e6.f413248c.js></script><script defer src=/js/app-d363ae0c.ec582e15.js></script><script defer src=/js/app-5c551db8.6b412dd5.js></script><script defer src=/js/app-01dc9ae1.e746f05c.js></script><script defer src=/js/app-8e0489d9.3811f71f.js></script><script defer src=/js/app-72600b29.11174efb.js></script><script defer src=/js/app-f035d474.92e1d288.js></script><script defer src=/js/app-113c6c50.56b97e4e.js></script><link href=/css/chunk-vendors-5c533fba.6f97509c.css rel=stylesheet><link href=/css/app-189e7968.908e0479.css rel=stylesheet><link href=/css/app-01dc9ae1.04da7d85.css rel=stylesheet><link href=/css/app-8e0489d9.c5f430f0.css rel=stylesheet><link href=/css/app-72600b29.37eab263.css rel=stylesheet><link href=/css/app-f035d474.0348646a.css rel=stylesheet><link href=/css/app-113c6c50.dfa1d227.css rel=stylesheet></head><body><div id=app></div></body></html>
|
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue