1.1需求处理、修改请求地址IP
1.广播页面及功能 接口对接 完成更新正式网 2.用户管理页面 处理中 3.工单管理 完成 4.用户算力
This commit is contained in:
parent
2111eedabb
commit
62260e8483
|
@ -5,8 +5,8 @@ VUE_APP_TITLE = m2pool
|
||||||
ENV = 'development'
|
ENV = 'development'
|
||||||
|
|
||||||
#开发环境
|
#开发环境
|
||||||
VUE_APP_BASE_API = 'https://test.m2pool.com/api/'
|
VUE_APP_BASE_API = 'http://test.m2pool.com/api/'
|
||||||
# VUE_APP_BASE_API = 'http://10.168.2.150:8101/'
|
# VUE_APP_BASE_API = 'http://18.183.240.108:8080/api/'
|
||||||
VUE_APP_BASE_URL = 'https://test.m2pool.com/'
|
VUE_APP_BASE_URL = 'http://test.m2pool.com/'
|
||||||
# 路由懒加载
|
# 路由懒加载
|
||||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true
|
VUE_CLI_BABEL_TRANSPILE_MODULES = true
|
||||||
|
|
|
@ -7,8 +7,9 @@ NODE_ENV = production
|
||||||
ENV = 'staging'
|
ENV = 'staging'
|
||||||
|
|
||||||
# 测试环境
|
# 测试环境
|
||||||
VUE_APP_BASE_API = 'https://test.m2pool.com/api/'
|
# VUE_APP_BASE_API = 'http://18.183.240.108:8080/api/'
|
||||||
VUE_APP_BASE_URL = 'https://test.m2pool.com/'
|
VUE_APP_BASE_API = 'http://test.m2pool.com/api/'
|
||||||
|
VUE_APP_BASE_URL = 'http://test.m2pool.com/'
|
||||||
|
|
||||||
# 路由懒加载
|
# 路由懒加载
|
||||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true
|
VUE_CLI_BABEL_TRANSPILE_MODULES = true
|
Binary file not shown.
|
@ -20,11 +20,31 @@ export function sendMail(data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// //发送邮件给用户
|
//获取单个用户详情
|
||||||
// export function sendMail(data) {
|
export function getUserDetails(data) {
|
||||||
// return request({
|
return request({
|
||||||
// url: `manage/user/get/user/info`,
|
url: `manage/user/get/user/info`,
|
||||||
// method: 'post',
|
method: 'post',
|
||||||
// data
|
data
|
||||||
// })
|
})
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//用户详情曲线图
|
||||||
|
export function getUserLineChart(data) {
|
||||||
|
return request({
|
||||||
|
url: `manage/user/getMiningPowerInfo`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//用户离线柱状图
|
||||||
|
export function getUserOnlineStatus(data) {
|
||||||
|
return request({
|
||||||
|
url: `manage/user/getMinerUserOnlineStatus`,
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
|
@ -50,7 +50,12 @@
|
||||||
|
|
||||||
<!-- 主体内容 -->
|
<!-- 主体内容 -->
|
||||||
<el-main class="admin-main">
|
<el-main class="admin-main">
|
||||||
<router-view v-if="key !== '/'" :key="key" />
|
|
||||||
|
<router-view v-if="key !== '/zh' && key !== '/en' &&key !== '/zh/login' && key !== '/en/login' && key !== '/zh/register' && key !== '/en/register'" :key="key" />
|
||||||
|
<div v-else style="color: #333;font-size: 16px;text-align: center;line-height: 100vh;">
|
||||||
|
选择左侧导航栏查看页面
|
||||||
|
</div>
|
||||||
|
|
||||||
</el-main>
|
</el-main>
|
||||||
</el-container>
|
</el-container>
|
||||||
</el-container>
|
</el-container>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -49,20 +49,20 @@ export default {
|
||||||
id:"1",
|
id:"1",
|
||||||
|
|
||||||
},
|
},
|
||||||
// {//用户管理
|
{//用户管理
|
||||||
// path:"userManagement",
|
path:"userManagement",
|
||||||
// label:`backendSystem.userManagement`,
|
label:`backendSystem.userManagement`,
|
||||||
// icon:"el-icon-user",
|
icon:"el-icon-user",
|
||||||
// id:"2",
|
id:"2",
|
||||||
|
|
||||||
// },
|
},
|
||||||
// {//工单管理
|
{//工单管理
|
||||||
// path:"workOrderBackend",
|
path:"workOrderBackend",
|
||||||
// label:`backendSystem.workOrder`,
|
label:`backendSystem.workOrder`,
|
||||||
// icon:"el-icon-document-copy",
|
icon:"el-icon-document-copy",
|
||||||
// id:"3",
|
id:"3",
|
||||||
|
|
||||||
// },
|
},
|
||||||
// {//用户算力
|
// {//用户算力
|
||||||
// path:"userComputingPower",
|
// path:"userComputingPower",
|
||||||
// label:`backendSystem.userComputingPower`,
|
// label:`backendSystem.userComputingPower`,
|
||||||
|
@ -71,29 +71,36 @@ export default {
|
||||||
|
|
||||||
// },
|
// },
|
||||||
],
|
],
|
||||||
activeIndex:"1",
|
activeIndex: "0",
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted(){
|
mounted(){
|
||||||
if(localStorage.getItem("activeIndex")){
|
const savedIndex = localStorage.getItem("activeIndex");
|
||||||
this.activeIndex = localStorage.getItem("activeIndex");
|
if(savedIndex){
|
||||||
|
this.activeIndex = savedIndex;
|
||||||
|
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
this.$addStorageEvent(1, "activeIndex", this.activeIndex);
|
this.$addStorageEvent(1, "activeIndex", this.activeIndex);
|
||||||
this.activeIndex ="1"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
methods:{
|
methods:{
|
||||||
handleClick(item){
|
handleClick(item){
|
||||||
this.activeIndex = item.id;
|
console.log(item,'item');
|
||||||
this.$addStorageEvent(1, "activeIndex", item.id);
|
|
||||||
const lang = this.$i18n.locale;
|
const lang = this.$i18n.locale;
|
||||||
this.$router.push(`/${lang}/${item.path}`);
|
this.$router.push(`/${lang}/${item.path}`);
|
||||||
|
this.activeIndex = item.id;
|
||||||
|
this.$addStorageEvent(1, "activeIndex", item.id);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
beforeDestroy(){
|
||||||
|
localStorage.removeItem("activeIndex");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -175,8 +175,8 @@
|
||||||
<span class="line"></span>
|
<span class="line"></span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<!-- 工单管理 -->
|
||||||
<li
|
<!-- <li
|
||||||
v-show="ManagementShow"
|
v-show="ManagementShow"
|
||||||
class="personalCenter"
|
class="personalCenter"
|
||||||
:class="{
|
:class="{
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
<span class="circular"></span>
|
<span class="circular"></span>
|
||||||
<span class="line"></span>
|
<span class="line"></span>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li> -->
|
||||||
|
|
||||||
<li class="langBox">
|
<li class="langBox">
|
||||||
<div class="LangLine"></div>
|
<div class="LangLine"></div>
|
||||||
|
|
|
@ -26,7 +26,7 @@ Vue.use(ElementUI, {
|
||||||
});
|
});
|
||||||
Vue.prototype.$axios = axios
|
Vue.prototype.$axios = axios
|
||||||
|
|
||||||
console.log = ()=>{} //全局关闭打印
|
// console.log = ()=>{} //全局关闭打印
|
||||||
// 全局注册混入
|
// 全局注册混入
|
||||||
Vue.mixin(loadingStateMixin);//loading状态管理
|
Vue.mixin(loadingStateMixin);//loading状态管理
|
||||||
Vue.mixin(networkRecoveryMixin);//网络恢复后数据刷新
|
Vue.mixin(networkRecoveryMixin);//网络恢复后数据刷新
|
||||||
|
@ -36,6 +36,10 @@ const screenWidth = window.innerWidth || document.documentElement.clientWidth ||
|
||||||
const isNarrowScreen = screenWidth < 1280;
|
const isNarrowScreen = screenWidth < 1280;
|
||||||
Vue.prototype.$isMobile = isNarrowScreen
|
Vue.prototype.$isMobile = isNarrowScreen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 在路由守卫中设置
|
// 在路由守卫中设置
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
// 从路由中获取语言参数
|
// 从路由中获取语言参数
|
||||||
|
|
|
@ -86,7 +86,7 @@ const childrenRoutes = [
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{//报块页面
|
{//用户管理
|
||||||
path: 'userManagement',
|
path: 'userManagement',
|
||||||
name: 'UserManagement',
|
name: 'UserManagement',
|
||||||
component: () => import('../views/userManagement/index.vue'),
|
component: () => import('../views/userManagement/index.vue'),
|
||||||
|
@ -97,10 +97,25 @@ const childrenRoutes = [
|
||||||
en: 'userManagement',
|
en: 'userManagement',
|
||||||
zh: '用户管理'
|
zh: '用户管理'
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
{//用户详情
|
||||||
|
path: 'userDetails',
|
||||||
|
name: 'UserDetails',
|
||||||
|
component: () => import('../views/userDetails/index.vue'),
|
||||||
|
meta: {title: '用户详情',
|
||||||
|
description:i18n.t(`seo.userManagement`),
|
||||||
|
allAuthority:[`admin`,`back_admin`],
|
||||||
|
keywords:{
|
||||||
|
en: 'userDetails',
|
||||||
|
zh: '用户详情'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{//费率
|
{//费率
|
||||||
path: 'rate',
|
path: 'rate',
|
||||||
name: 'Rate',
|
name: 'Rate',
|
||||||
|
@ -662,88 +677,167 @@ const router = new VueRouter({
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// router.beforeEach((to, from, next) => {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// // 检查语言参数
|
||||||
|
// const lang = to.params.lang;
|
||||||
|
// const supportedLanguages = ['zh', 'en'];
|
||||||
|
|
||||||
|
// // 如果路径以斜杠结尾且不是根路径,则重定向
|
||||||
|
// if (to.path.endsWith('/') && to.path.length > 1) {
|
||||||
|
// const path = to.path.slice(0, -1);
|
||||||
|
// return next({
|
||||||
|
// path,
|
||||||
|
// query: to.query,
|
||||||
|
// hash: to.hash,
|
||||||
|
// params: to.params
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (!lang && to.path !== '/') {
|
||||||
|
// const defaultLang = localStorage.getItem('lang') || 'en';
|
||||||
|
// return next(`/${defaultLang}${to.path}`);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// let data = localStorage.getItem("jurisdiction");
|
||||||
|
// let jurisdiction =JSON.parse(data);
|
||||||
|
// console.log(jurisdiction,"权限");
|
||||||
|
|
||||||
|
// localStorage.setItem('superReportError',"")
|
||||||
|
// let element = document.getElementsByClassName('el-main')[0];
|
||||||
|
// if(element){
|
||||||
|
// element.scrollTop = 0
|
||||||
|
// }
|
||||||
|
|
||||||
|
// let token
|
||||||
|
// try{
|
||||||
|
// token =JSON.parse(localStorage.getItem('token'))
|
||||||
|
// }catch(e){
|
||||||
|
// console.log(e);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// console.log('beforeEach:', to.path, 'token:', token);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if (token) {
|
||||||
|
|
||||||
|
|
||||||
|
// if (to.path === `/${lang}/login`|| to.path === `/${lang}/register`) {
|
||||||
|
// next({ path: `/${lang}` })
|
||||||
|
// }else if(to.meta.allAuthority && to.meta.allAuthority[0] ==`all`){
|
||||||
|
// next()
|
||||||
|
// }else if(jurisdiction.roleKey && to.meta.allAuthority&&to.meta.allAuthority.some(item=>item == jurisdiction.roleKey )){
|
||||||
|
// next()
|
||||||
|
// }else{
|
||||||
|
// console.log(to.meta.allAuthority,to.path,"权限");
|
||||||
|
|
||||||
|
// Message({//权限不足
|
||||||
|
// showClose: true,
|
||||||
|
// message:i18n.t(`mining.jurisdiction`),
|
||||||
|
// type: 'error'
|
||||||
|
// });
|
||||||
|
|
||||||
|
// next({ path: `/${lang}` }) // 添加这行,重定向到首页
|
||||||
|
// }
|
||||||
|
|
||||||
|
// }else{
|
||||||
|
|
||||||
|
// console.log(to.path,"to.path 权限不足");
|
||||||
|
// let paths = [`/${lang}/miningAccount`,`/${lang}/workOrderRecords`,`/${lang}/userWorkDetails`,`/${lang}/submitWorkOrder`,`/${lang}/workOrderBackend`,`/${lang}/BKWorkDetails`]
|
||||||
|
// if (paths.includes(to.path) || to.path.includes(`personalCenter`) ) {
|
||||||
|
// console.log(to.path,"to.path 权限不足");
|
||||||
|
|
||||||
|
// Message({//权限不足
|
||||||
|
// showClose: true,
|
||||||
|
// message:i18n.t(`mining.logInFirst`),
|
||||||
|
// type: 'error'
|
||||||
|
// });
|
||||||
|
|
||||||
|
// next({ path: `/${lang}/login` })
|
||||||
|
// } else {
|
||||||
|
|
||||||
|
// next()
|
||||||
|
// }
|
||||||
|
// return; // 防止多次 next
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// })
|
||||||
|
|
||||||
router.beforeEach((to, from, next) => {
|
router.beforeEach((to, from, next) => {
|
||||||
// 检查语言参数
|
const lang = to.params.lang || (localStorage.getItem('lang') || 'en');
|
||||||
const lang = to.params.lang;
|
let token = null;
|
||||||
const supportedLanguages = ['zh', 'en'];
|
try {
|
||||||
|
token = JSON.parse(localStorage.getItem('token'));
|
||||||
// 如果路径以斜杠结尾且不是根路径,则重定向
|
} catch (e) {
|
||||||
if (to.path.endsWith('/') && to.path.length > 1) {
|
token = null;
|
||||||
const path = to.path.slice(0, -1);
|
|
||||||
return next({
|
|
||||||
path,
|
|
||||||
query: to.query,
|
|
||||||
hash: to.hash,
|
|
||||||
params: to.params
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lang && to.path !== '/') {
|
|
||||||
const defaultLang = localStorage.getItem('lang') || 'en';
|
|
||||||
return next(`/${defaultLang}${to.path}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
let data = localStorage.getItem("jurisdiction");
|
|
||||||
let jurisdiction =JSON.parse(data);
|
|
||||||
console.log(jurisdiction,"权限");
|
|
||||||
|
|
||||||
localStorage.setItem('superReportError',"")
|
|
||||||
let element = document.getElementsByClassName('el-main')[0];
|
|
||||||
if(element){
|
|
||||||
element.scrollTop = 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let token
|
// 需要登录的页面
|
||||||
try{
|
const needLoginPaths = [
|
||||||
token =JSON.parse(localStorage.getItem('token'))
|
`/${lang}/miningAccount`,
|
||||||
}catch(e){
|
`/${lang}/workOrderRecords`,
|
||||||
console.log(e);
|
`/${lang}/userWorkDetails`,
|
||||||
}
|
`/${lang}/submitWorkOrder`,
|
||||||
|
`/${lang}/workOrderBackend`,
|
||||||
|
`/${lang}/BKWorkDetails`
|
||||||
|
];
|
||||||
|
|
||||||
|
// 未登录
|
||||||
if (token) {
|
if (!token) {
|
||||||
|
// 只在不是登录/注册页时才跳转
|
||||||
|
if (
|
||||||
if (to.path === `/${lang}/login`|| to.path === `/${lang}/register`) {
|
(needLoginPaths.includes(to.path) || to.path.includes('personalCenter')) &&
|
||||||
next({ path: `/${lang}` })
|
to.name !== 'Login' &&
|
||||||
}else if(to.meta.allAuthority && to.meta.allAuthority[0] ==`all`){
|
to.name !== 'Register'
|
||||||
next()
|
) {
|
||||||
}else if(jurisdiction.roleKey && to.meta.allAuthority&&to.meta.allAuthority.some(item=>item == jurisdiction.roleKey )){
|
Message({
|
||||||
next()
|
|
||||||
}else{
|
|
||||||
console.log(to.meta.allAuthority,to.path,"权限");
|
|
||||||
|
|
||||||
Message({//权限不足
|
|
||||||
showClose: true,
|
showClose: true,
|
||||||
message:i18n.t(`mining.jurisdiction`),
|
message: i18n.t(`mining.logInFirst`),
|
||||||
type: 'error'
|
type: 'error'
|
||||||
});
|
});
|
||||||
|
return next({ path: `/${lang}/login` });
|
||||||
next({ path: `/${lang}` }) // 添加这行,重定向到首页
|
|
||||||
}
|
|
||||||
|
|
||||||
}else{
|
|
||||||
|
|
||||||
|
|
||||||
let paths = [`/${lang}/miningAccount`,`/${lang}/workOrderRecords`,`/${lang}/userWorkDetails`,`/${lang}/submitWorkOrder`,`/${lang}/workOrderBackend`,`/${lang}/BKWorkDetails`]
|
|
||||||
if (paths.includes(to.path) || to.path.includes(`personalCenter`) ) {
|
|
||||||
|
|
||||||
Message({//权限不足
|
|
||||||
showClose: true,
|
|
||||||
message:i18n.t(`mining.logInFirst`),
|
|
||||||
type: 'error'
|
|
||||||
});
|
|
||||||
|
|
||||||
next({ path: `/${lang}/login` })
|
|
||||||
} else {
|
|
||||||
|
|
||||||
next()
|
|
||||||
}
|
}
|
||||||
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 已登录
|
||||||
|
if (to.name === 'Login' || to.name === 'Register') {
|
||||||
|
return next({ path: `/${lang}` });
|
||||||
|
}
|
||||||
|
|
||||||
|
// 权限判断
|
||||||
|
let jurisdiction = null;
|
||||||
|
try {
|
||||||
|
jurisdiction = JSON.parse(localStorage.getItem("jurisdiction"));
|
||||||
|
} catch (e) {
|
||||||
|
jurisdiction = null;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
to.meta.allAuthority &&
|
||||||
|
(
|
||||||
|
to.meta.allAuthority[0] === 'all' ||
|
||||||
|
(jurisdiction && jurisdiction.roleKey && to.meta.allAuthority.includes(jurisdiction.roleKey))
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
|
||||||
})
|
// 无权限
|
||||||
|
Message({
|
||||||
|
showClose: true,
|
||||||
|
message: i18n.t(`mining.jurisdiction`),
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
return next({ path: `/${lang}/login` }); // 建议无权限时跳转登录页而不是首页
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ export const getImageUrl = (path) => {
|
||||||
const baseUrl = process.env.VUE_APP_BASE_URL;
|
const baseUrl = process.env.VUE_APP_BASE_URL;
|
||||||
if (!path) return '';
|
if (!path) return '';
|
||||||
if (path.startsWith('http')) {
|
if (path.startsWith('http')) {
|
||||||
return path.replace('https://test.m2pool.com', baseUrl);
|
return path.replace('http://test.m2pool.com', baseUrl);
|
||||||
}
|
}
|
||||||
return `${baseUrl}${path.startsWith('/') ? '' : '/'}${path}`;
|
return `${baseUrl}${path.startsWith('/') ? '' : '/'}${path}`;
|
||||||
};
|
};
|
||||||
|
|
|
@ -326,8 +326,8 @@ export default {
|
||||||
|
|
||||||
if (!this.activeCoin) {
|
if (!this.activeCoin) {
|
||||||
this.activeCoin = "nexa"
|
this.activeCoin = "nexa"
|
||||||
this.imgUrl = `https://test.m2pool.com/img/nexa.png`
|
this.imgUrl = `${this.$baseApi}/img/nexa.png`
|
||||||
this.currencyPath = `https://test.m2pool.com/img/nexa.png`
|
this.currencyPath = `${this.$baseApi}/img/nexa.png`
|
||||||
this.params.coin = "nexa"
|
this.params.coin = "nexa"
|
||||||
this.$addStorageEvent(1, `activeCoin`, JSON.stringify(this.activeCoin))
|
this.$addStorageEvent(1, `activeCoin`, JSON.stringify(this.activeCoin))
|
||||||
this.openAPI = true
|
this.openAPI = true
|
||||||
|
|
|
@ -73,13 +73,12 @@ export default {
|
||||||
this.activeCoin= JSON.parse(activeCoin)
|
this.activeCoin= JSON.parse(activeCoin)
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(this.activeCoin,"鸡脚低端局");
|
|
||||||
|
|
||||||
|
|
||||||
if ( !this.activeCoin ) {
|
if ( !this.activeCoin ) {
|
||||||
this.activeCoin ="nexa"
|
this.activeCoin ="nexa"
|
||||||
this.imgUrl = `https://test.m2pool.com/img/nexa.png`
|
this.imgUrl = `${this.$baseApi}/img/nexa.png`
|
||||||
this.currencyPath= `https://test.m2pool.com/img/nexa.png`
|
this.currencyPath= `${this.$baseApi}/img/nexa.png`
|
||||||
this.params.coin ="nexa"
|
this.params.coin ="nexa"
|
||||||
this.$addStorageEvent(1,`activeCoin`,JSON.stringify(this.activeCoin))
|
this.$addStorageEvent(1,`activeCoin`,JSON.stringify(this.activeCoin))
|
||||||
this.openAPI =true
|
this.openAPI =true
|
||||||
|
|
|
@ -422,21 +422,26 @@ export default {
|
||||||
}
|
}
|
||||||
.main {
|
.main {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 100vh;
|
|
||||||
background: #fff;
|
background: #fff;
|
||||||
background-image: url(../../assets/img/miningAccount/top.png);
|
// background-image: url(../../assets/img/miningAccount/top.png);
|
||||||
background-size: 100% 50%;
|
// background-size: 100% 50%;
|
||||||
background-repeat: no-repeat;
|
// background-repeat: no-repeat;
|
||||||
background-position: 30% -15%;
|
// background-position: 30% -15%;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding-top: 60PX;
|
// padding-top: 60PX;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
height: 100%;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
.content{
|
.content{
|
||||||
width: 50%;
|
width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
}
|
}
|
||||||
.elBtn{
|
.elBtn{
|
||||||
background: #661FFB;
|
background: #661FFB;
|
||||||
|
|
|
@ -588,9 +588,15 @@ export default {
|
||||||
if (this.stompClient) {
|
if (this.stompClient) {
|
||||||
this.forceDisconnectAll();
|
this.forceDisconnectAll();
|
||||||
}
|
}
|
||||||
|
let apiUrl = process.env.VUE_APP_BASE_API;
|
||||||
console.log("开始初始化WebSocket连接...");
|
let baseUrl=""
|
||||||
const baseUrl = process.env.VUE_APP_BASE_API.replace("https", "wss");
|
// 将 https 替换为 wss
|
||||||
|
if (apiUrl.startsWith("https://")) {
|
||||||
|
baseUrl= apiUrl.replace("https://", "wss://");
|
||||||
|
}
|
||||||
|
if (apiUrl.startsWith("http://")) {
|
||||||
|
baseUrl=apiUrl.replace("http://", "ws://");
|
||||||
|
}
|
||||||
const wsUrl = `${baseUrl}chat/ws`;
|
const wsUrl = `${baseUrl}chat/ws`;
|
||||||
this.stompClient = Stomp.client(wsUrl);
|
this.stompClient = Stomp.client(wsUrl);
|
||||||
|
|
||||||
|
|
|
@ -902,7 +902,7 @@ export default {
|
||||||
|
|
||||||
this.$addStorageEvent(1, `currencyList`, JSON.stringify(this.currencyList))
|
this.$addStorageEvent(1, `currencyList`, JSON.stringify(this.currencyList))
|
||||||
if (this.$refs.select) {
|
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;");
|
this.$refs.select.$el.children[0].children[0].setAttribute('style', `background:url(${this.$baseApi}/img/nexa.png) no-repeat 10PX;background-size: 20PX 20PX;color:#333;padding-left: 30PX;`);
|
||||||
|
|
||||||
}
|
}
|
||||||
this.fetchParam({ coin: this.params.coin })
|
this.fetchParam({ coin: this.params.coin })
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
import { getUserDetails,getUserLineChart,getUserOnlineStatus } from '../../api/userManagement'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'UserDetails',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
userDetailsID: null,
|
||||||
|
userData: {
|
||||||
|
// address:"D7tviVPKtTd2qnkzJEVfZWQqzV6NyQqHxw",
|
||||||
|
// historyBalance:[
|
||||||
|
// {
|
||||||
|
// "balance": "testAddBalanceForgrD7tviVPKtTd2qnkzJEVfZWQqzV6NyQqHxws"
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// "balance": "testAddBalancD7tviVPKtTd2qnkzJEVfZWQqzV6NyQqHxweForgrs"
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// "balance": "testAddBalancD7tviVPKtTd2qnkzJEVfZWQqzV6NyQqHxweForgrs"
|
||||||
|
// },
|
||||||
|
|
||||||
|
// ],
|
||||||
|
// maxHeight:"100000",
|
||||||
|
// createDate:"2025-06-16 00:00:00",
|
||||||
|
// amount:"273920.96662387",
|
||||||
|
// coin:"nexa",
|
||||||
|
// shouldOutDate:"2025-06-16 00:00:00",
|
||||||
|
// user:"ceshi1",
|
||||||
|
},
|
||||||
|
userDetailsLoading: false,
|
||||||
|
formInline: {
|
||||||
|
user: '',
|
||||||
|
region: ''
|
||||||
|
},
|
||||||
|
userDetailsParams:{
|
||||||
|
coin: '',
|
||||||
|
minerUser: '',
|
||||||
|
|
||||||
|
},
|
||||||
|
labelPosition: 'top',
|
||||||
|
noDataTip: false,
|
||||||
|
lineChartParams:{
|
||||||
|
user: '',
|
||||||
|
endDate:"",
|
||||||
|
startDate:"",
|
||||||
|
coin:"",
|
||||||
|
|
||||||
|
},
|
||||||
|
onlineStatusParams:{
|
||||||
|
user: '',
|
||||||
|
coin: '',
|
||||||
|
datePoint:"",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
console.log('userDetails mounted', this.$route.path, this.$route.query)
|
||||||
|
const params= this.$route.query || JSON.parse(localStorage.getItem("userDetailsParams"));
|
||||||
|
this.lineChartParams.user=params.user
|
||||||
|
this.lineChartParams.coin=params.coin
|
||||||
|
this.onlineStatusParams.user=params.user
|
||||||
|
this.onlineStatusParams.coin=params.coin
|
||||||
|
this.userDetailsParams.coin=params.coin
|
||||||
|
this.userDetailsParams.minerUser=params.minerUser
|
||||||
|
|
||||||
|
if (this.userDetailsParams.coin && this.userDetailsParams.minerUser) {
|
||||||
|
localStorage.setItem("userDetailsParams", JSON.stringify(params));
|
||||||
|
|
||||||
|
this.fetchUserDetails(this.userDetailsParams);
|
||||||
|
this.fetchUserLineChart(this.lineChartParams);
|
||||||
|
this.fetchUserOnlineStatus(this.onlineStatusParams);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async fetchUserDetails(params) {
|
||||||
|
this.userDetailsLoading = true
|
||||||
|
// 这里写你的获取详情逻辑
|
||||||
|
const res = await getUserDetails(params)
|
||||||
|
console.log(res)
|
||||||
|
|
||||||
|
if(res && res.code == 200){
|
||||||
|
if (!res.data) {
|
||||||
|
// this.$message.error('未获取到用户信息');
|
||||||
|
this.noDataTip = true
|
||||||
|
this.userData.coin = this.userDetailsParams.coin
|
||||||
|
this.userData.user = this.userDetailsParams.minerUser
|
||||||
|
}else{
|
||||||
|
this.userData = res.data
|
||||||
|
this.userData.shouldOutDate=`${this.userData.shouldOutDate.split("T")[0]} ${this.userData.shouldOutDate.split("T")[1]}`
|
||||||
|
this.userData.createDate=`${this.userData.createDate.split("T")[0]} ${this.userData.createDate.split("T")[1]}`
|
||||||
|
|
||||||
|
this.noDataTip = false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
this.userDetailsLoading = false
|
||||||
|
},
|
||||||
|
async fetchUserLineChart(params) {
|
||||||
|
const res = await getUserLineChart(params)
|
||||||
|
console.log(res)
|
||||||
|
},
|
||||||
|
async fetchUserOnlineStatus(params) {
|
||||||
|
const res = await getUserOnlineStatus(params)
|
||||||
|
console.log(res)
|
||||||
|
},
|
||||||
|
goBack(){
|
||||||
|
const lang = this.$i18n.locale;
|
||||||
|
this.$router.push({
|
||||||
|
path: `/${lang}/userManagement`,
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,178 @@
|
||||||
|
<template>
|
||||||
|
<div v-loading="userDetailsLoading">
|
||||||
|
<div class="main-title">用户详情 <span @click="goBack" style="color: #409EFF;cursor: pointer;font-size: 16px;">返回</span> </div>
|
||||||
|
<section class="user-details-box">
|
||||||
|
<section class="user-details-form">
|
||||||
|
<el-form
|
||||||
|
:label-position="labelPosition"
|
||||||
|
:inline="true"
|
||||||
|
:model="userData"
|
||||||
|
class="demo-form-inline"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item style="width: 80%;" label="币种:" label-width="100px" prop="coin">
|
||||||
|
<el-input disabled v-model="userData.coin"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item style="width: 80%;" label="挖矿账户:" label-width="100px" prop="user">
|
||||||
|
<el-input disabled v-model="userData.user"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item style="width: 80%;" label="交易金额:" label-width="100px" prop="amount">
|
||||||
|
<el-input disabled v-model="userData.amount"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item
|
||||||
|
label="收益分配日期:"
|
||||||
|
label-width="100px"
|
||||||
|
prop="createDate"
|
||||||
|
style="width: 80%;"
|
||||||
|
>
|
||||||
|
<el-input disabled v-model="userData.createDate"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item style="width: 80%;" label="最大高度:" label-width="100px" prop="maxHeight">
|
||||||
|
<el-input disabled v-model="userData.maxHeight"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item style="width: 80%;" label="实际转账日期:" label-width="100px" prop="shouldOutDate">
|
||||||
|
<el-input disabled v-model="userData.shouldOutDate"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item style="width: 55%;" label="转账地址:" label-width="100px" prop="address">
|
||||||
|
<el-input
|
||||||
|
disabled v-model="userData.address"
|
||||||
|
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item style="width: 55%; max-height: 300px;overflow-y: auto;" label="历史支付地址:" label-width="100px" prop="address">
|
||||||
|
<p class="history-balance-item" v-for="item in userData.historyBalance" :key="item.balance">{{item.balance}}</p>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="chartBox">
|
||||||
|
<div class="lineChartBox">用户挖矿曲线图</div>
|
||||||
|
<div class="barChartBox">柱状图</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Index from "./index";
|
||||||
|
export default {
|
||||||
|
mixins: [Index],
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.main-title {
|
||||||
|
font-size: 24px;
|
||||||
|
font-weight: bold;
|
||||||
|
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
.user-details-box{
|
||||||
|
width: 100%;
|
||||||
|
margin: 0 auto;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
height: 73vh;
|
||||||
|
overflow: hidden;
|
||||||
|
overflow-y: auto;
|
||||||
|
// background: palegoldenrod;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-details-form {
|
||||||
|
width: 80%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
// background: palegoldenrod;
|
||||||
|
}
|
||||||
|
|
||||||
|
.no-data-tip{
|
||||||
|
width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #999;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 20px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.history-balance-item{
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background:#E7DFF3 ;
|
||||||
|
padding: 0px 20px;
|
||||||
|
border-radius: 20px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
color: rgba(0,0,0,0.6);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
::v-deep .el-form-item__label {
|
||||||
|
// color: #409EFF; /* 例如设置为 Element UI 主色 */
|
||||||
|
font-weight: bold; /* 加粗 */
|
||||||
|
font-size: 16px; /* 字号 */
|
||||||
|
letter-spacing: 1px; /* 字间距 */
|
||||||
|
/* 你可以根据需要添加更多样式 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.chartBox{
|
||||||
|
width: 80vw;
|
||||||
|
box-sizing: border-box;
|
||||||
|
// background: palegoldenrod;
|
||||||
|
height: 800px;
|
||||||
|
display: flex;
|
||||||
|
align-content: center;
|
||||||
|
justify-content: space-around;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
.lineChartBox{
|
||||||
|
width: 49%;
|
||||||
|
height: 100%;
|
||||||
|
background: palegoldenrod;
|
||||||
|
}
|
||||||
|
.barChartBox{
|
||||||
|
width: 49%;
|
||||||
|
height: 100%;
|
||||||
|
background: pink;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,34 +1,223 @@
|
||||||
import { getUserList, sendMail } from '../../api/userManagement'
|
import { getUserList, sendMail, } from '../../api/userManagement'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data(){
|
data() {
|
||||||
return {
|
return {
|
||||||
userList:[],
|
userList: [],
|
||||||
userListLoading:false,
|
userListLoading: false,
|
||||||
userListParams:{
|
userListParams: {
|
||||||
coin:"nexa",
|
coin: "nexa",
|
||||||
minerUser:"",
|
minerUser: "",
|
||||||
user:"",
|
user: "",
|
||||||
pageNum:1,
|
pageNum: 1,
|
||||||
pageSize:50
|
pageSize: 50
|
||||||
},
|
},
|
||||||
tableData:[],
|
tableData: [],
|
||||||
userManagementLoading:false,
|
userManagementLoading: false,
|
||||||
|
formInline: {
|
||||||
|
user: "",
|
||||||
|
region: "",
|
||||||
|
},
|
||||||
|
currencyList: [],
|
||||||
|
screenCurrency: 'nexa',
|
||||||
|
rules: {
|
||||||
|
user: [
|
||||||
|
{
|
||||||
|
type: 'email',
|
||||||
|
message: '请输入正确的邮箱地址',
|
||||||
|
trigger: ['blur', 'change']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
emailRules: {
|
||||||
|
subject: [
|
||||||
|
{ required: true, message: '请输入邮件主题', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
text: [
|
||||||
|
{ required: true, message: '请输入邮件内容', trigger: 'blur' }
|
||||||
|
],
|
||||||
|
to: [
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 多邮箱校验+去重,支持中英文逗号分隔
|
||||||
|
* @param {Object} rule
|
||||||
|
* @param {string} value
|
||||||
|
* @param {Function} callback
|
||||||
|
*/
|
||||||
|
validator: (rule, value, callback) => {
|
||||||
|
if (!value) {
|
||||||
|
callback(); // 允许为空
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 以中英文逗号分隔,去除首尾空格
|
||||||
|
const emails = value.split(/[,,]/).map(e => e.trim()).filter(e => e);
|
||||||
|
// 邮箱正则
|
||||||
|
const emailReg = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$/;
|
||||||
|
// 检查格式
|
||||||
|
for (let email of emails) {
|
||||||
|
if (!emailReg.test(email)) {
|
||||||
|
callback(new Error('请输入正确的邮箱地址,多个邮箱用逗号分隔'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 检查去重(忽略大小写)
|
||||||
|
const lowerSet = new Set();
|
||||||
|
for (let email of emails) {
|
||||||
|
const lower = email.toLowerCase();
|
||||||
|
if (lowerSet.has(lower)) {
|
||||||
|
callback(new Error('存在重复邮箱,请检查'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lowerSet.add(lower);
|
||||||
|
}
|
||||||
|
callback();
|
||||||
|
},
|
||||||
|
trigger: ['blur', 'change']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
dialogVisible: false,
|
||||||
|
senParams:{
|
||||||
|
subject:"",
|
||||||
|
text:"",
|
||||||
|
to:"",
|
||||||
|
},
|
||||||
|
sendEmailLoading: false,
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted(){
|
mounted() {
|
||||||
this.fetchUserList(this.userListParams);
|
let token
|
||||||
},
|
try{
|
||||||
methods:{
|
token =JSON.parse(localStorage.getItem('token'))
|
||||||
async fetchUserList(params){
|
}catch(e){
|
||||||
this.userManagementLoading = true;
|
console.log(e);
|
||||||
const data = await getUserList(params);
|
}
|
||||||
console.log(data,'data');
|
if (token) {
|
||||||
|
|
||||||
if(data && data.code == 200){
|
this.fetchUserList(this.userListParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.currencyList = JSON.parse(localStorage.getItem("currencyList"))
|
||||||
|
window.addEventListener("setItem", () => {
|
||||||
|
this.currencyList = JSON.parse(localStorage.getItem("currencyList"))
|
||||||
|
});
|
||||||
|
this.changeScreen(this.screenCurrency);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async fetchUserList(params) {
|
||||||
|
|
||||||
|
this.setLoading('userManagementLoading', true);
|
||||||
|
const data = await getUserList(params);
|
||||||
|
|
||||||
|
if (data && data.code == 200) {
|
||||||
this.tableData = data.rows;
|
this.tableData = data.rows;
|
||||||
}
|
}
|
||||||
this.userManagementLoading = false;
|
|
||||||
|
this.setLoading('userManagementLoading', false);
|
||||||
|
},
|
||||||
|
async fetchSendEmail(params) {
|
||||||
|
|
||||||
|
this.setLoading('sendEmailLoading', true);
|
||||||
|
const data = await sendMail(params);
|
||||||
|
|
||||||
|
|
||||||
|
if (data && data.code == 200) {
|
||||||
|
this.$message.success('发送成功');
|
||||||
|
this.dialogVisible = false;
|
||||||
|
for (const key in this.senParams) {
|
||||||
|
this.senParams[key] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.setLoading('sendEmailLoading', false);
|
||||||
|
},
|
||||||
|
changeScreen(scope) {
|
||||||
|
let brand = scope
|
||||||
|
for (let index in this.currencyList) {
|
||||||
|
let aa = this.currencyList[index];
|
||||||
|
let value = aa.value;
|
||||||
|
if (brand === value) {
|
||||||
|
this.$refs.screen.$el.children[0].children[0].setAttribute('style', "background:url(" + aa.imgUrl + ") no-repeat 10PX;background-size: 20PX 20PX;color:#333;padding-left: 33PX;");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.userListParams.coin = scope
|
||||||
|
this.fetchUserList(this.userListParams);
|
||||||
|
|
||||||
|
},
|
||||||
|
handelImg(coin) {
|
||||||
|
return this.currencyList.find(item => item.value === coin)?.imgUrl || '';
|
||||||
|
},
|
||||||
|
handelQuery() {
|
||||||
|
this.$refs.formRef.validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
for (let key in this.userListParams) {
|
||||||
|
if (typeof this.userListParams[key] === 'string') {
|
||||||
|
this.userListParams[key] = this.userListParams[key].trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.userListParams.minerUser && !this.userListParams.user) {
|
||||||
|
this.$message.error('请输入查询条件(挖矿账号、邮箱)');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.fetchUserList(this.userListParams);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
sendEmail(row) {
|
||||||
|
this.dialogVisible = true;
|
||||||
|
this.senParams.to = row.user;
|
||||||
|
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
* 输入框清除后自动重新查询
|
||||||
|
*/
|
||||||
|
handleInputClear() {
|
||||||
|
this.fetchUserList(this.userListParams);
|
||||||
|
},
|
||||||
|
handleClose() {
|
||||||
|
this.dialogVisible = false;
|
||||||
|
},
|
||||||
|
handleInput(val, type) {
|
||||||
|
|
||||||
|
},
|
||||||
|
sureSendEmail(){
|
||||||
|
console.log(this.senParams,'this.senParams');
|
||||||
|
|
||||||
|
this.$refs.formRef.validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
this.fetchSendEmail(this.senParams);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleDetails(row){
|
||||||
|
console.log(row,'row');
|
||||||
|
|
||||||
|
// 获取当前语言
|
||||||
|
const lang = this.$i18n.locale;
|
||||||
|
|
||||||
|
// 添加语言参数的路由跳转
|
||||||
|
this.$router.push({
|
||||||
|
path: `/${lang}/userDetails`,
|
||||||
|
query: { coin: row.coin,minerUser:row.minerUser, user: row.user,}
|
||||||
|
}).catch(err => {
|
||||||
|
if(err.name !== 'NavigationDuplicated') {
|
||||||
|
console.error('路由跳转失败:', err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let obj ={
|
||||||
|
coin: row.coin,
|
||||||
|
minerUser: row.minerUser,
|
||||||
|
user: row.user,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存ID到localStorage
|
||||||
|
localStorage.setItem("userDetailsParams",JSON.stringify(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,94 +2,138 @@
|
||||||
<div v-loading="userManagementLoading">
|
<div v-loading="userManagementLoading">
|
||||||
<div class="main-title">注册用户管理</div>
|
<div class="main-title">注册用户管理</div>
|
||||||
|
|
||||||
|
<el-form :inline="true" :model="userListParams" class="demo-form-inline" :rules="rules" ref="formRef">
|
||||||
|
<el-form-item label="币种:" prop="coin">
|
||||||
|
<el-select
|
||||||
|
class="input"
|
||||||
|
|
||||||
<el-table
|
size="middle"
|
||||||
:data="tableData"
|
ref="screen"
|
||||||
border
|
@change="changeScreen(screenCurrency)"
|
||||||
style="width: 100%; margin-bottom: 18px"
|
v-model="screenCurrency"
|
||||||
:header-cell-style="{ 'text-align': 'center' }"
|
:placeholder="$t(`personal.screen`)"
|
||||||
:cell-style="{ 'text-align': 'center' }"
|
>
|
||||||
height="65vh"
|
<el-option
|
||||||
|
v-for="item in currencyList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
>
|
||||||
|
<div style="display: flex; align-items: center">
|
||||||
|
<img :src="item.imgUrl" style="float: left; width: 20px" />
|
||||||
|
<span style="float: left; margin-left: 5px">
|
||||||
|
{{ item.label }}</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="挖矿账号:" style="margin-left: 5vw" prop="minerUser">
|
||||||
|
<el-input v-model="userListParams.minerUser" placeholder="挖矿账号" clearable @clear="handleInputClear"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="邮箱:" style="margin-left: 5vw" prop="user">
|
||||||
|
<el-input
|
||||||
|
v-model="userListParams.user"
|
||||||
|
type="email"
|
||||||
|
placeholder="邮箱"
|
||||||
|
clearable
|
||||||
|
@clear="handleInputClear"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
>
|
<el-form-item style="margin-left: 1vw">
|
||||||
<el-table-column prop="id" label="ID" width="60" />
|
<el-button type="primary" @click="handelQuery">查询</el-button>
|
||||||
<el-table-column prop="coin" label="币种" />
|
</el-form-item>
|
||||||
<el-table-column prop="user" label="用户邮箱" />
|
</el-form>
|
||||||
<el-table-column prop="status" label="用户状态" />
|
<el-table
|
||||||
<el-table-column prop="minerUser" label="挖矿账号" />
|
:data="tableData"
|
||||||
|
border
|
||||||
|
style="width: 100%; margin-bottom: 18px"
|
||||||
|
:header-cell-style="{ 'text-align': 'center' }"
|
||||||
|
:cell-style="{ 'text-align': 'center' }"
|
||||||
|
height="65vh"
|
||||||
|
>
|
||||||
|
<el-table-column prop="id" label="ID" width="60" />
|
||||||
|
<el-table-column prop="coin" label="币种" width="100" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope" >
|
||||||
|
<div style="display: flex; align-items: center;justify-content: center;">
|
||||||
|
<img :src="handelImg(scope.row.coin)" style="width: 20px" />
|
||||||
|
<span style="margin-left: 5px">{{ scope.row.coin }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="user" label="用户邮箱" width="200" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="amount" label="最小起付金额" width="100" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="status" label="用户状态" width="80">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tag :type="scope.row.status === '1' ? 'success' : 'danger'">{{
|
||||||
|
scope.row.status == "0" ? "正常" : "删除"
|
||||||
|
}}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="minerUser" label="挖矿账号" width="180" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="balance" label="支付地址" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="active" label="是否自动提现" width="80" show-overflow-tooltip>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-tag :type="scope.row.active === '1' ? 'success' : 'danger'">{{
|
||||||
|
scope.row.active == "0" ? "是" : "否"
|
||||||
|
}}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column :label="$t('backendSystem.operation')" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<el-button size="mini" @click="handleDetails(scope.row)" type="primary" plain>详情</el-button>
|
||||||
|
<el-button size="mini" @click="sendEmail(scope.row)" style="color: #651fff; border: 1px solid #651fff"
|
||||||
|
>发送邮件</el-button
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
<el-table-column :label="$t('backendSystem.operation')" width="200">
|
<!-- 发送邮箱弹窗-->
|
||||||
<el-button
|
<el-dialog
|
||||||
size="mini"
|
title="邮件内容"
|
||||||
|
|
||||||
>详情</el-button>
|
|
||||||
<el-button
|
|
||||||
size="mini"
|
|
||||||
|
|
||||||
>发送邮件</el-button>
|
|
||||||
|
|
||||||
</el-table-column>
|
|
||||||
|
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<!-- 新增广播弹窗 -->
|
|
||||||
<!-- <el-dialog
|
|
||||||
:title="$t('backendSystem.dialogTitle')"
|
|
||||||
:visible.sync="dialogVisible"
|
:visible.sync="dialogVisible"
|
||||||
width="50%"
|
width="50%"
|
||||||
:before-close="handleClose"
|
:before-close="handleClose"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
>
|
>
|
||||||
<el-form :model="addParams" >
|
<el-form :model="senParams" ref="formRef" :rules="emailRules">
|
||||||
<el-form-item >
|
<el-form-item label="收件人" prop="to">
|
||||||
<el-input resize="none" v-model="addParams.content" type="textarea" :rows="5" @input="val => handleInput(val, 'add')" />
|
<el-input maxlength="500" resize="none" v-model="senParams.to" type="textarea" :rows="2" />
|
||||||
<div v-if="isOverLimit" style="color: #999; font-size: 12px; margin-top: 4px;">{{$t("backendSystem.exceedingInput")}}</div>
|
<div style="color: #999; font-size: 12px; margin-top: 4px;">可输入多个邮箱,用逗号隔开</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="邮件主题" prop="subject">
|
||||||
|
<el-input resize="none" maxlength="300" show-word-limit v-model="senParams.subject" type="textarea" :rows="3" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="邮件内容" prop="text">
|
||||||
|
<el-input resize="none" maxlength="600" show-word-limit v-model="senParams.text" type="textarea" :rows="8" />
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
<div slot="footer" class="dialog-footer">
|
<div slot="footer" class="dialog-footer">
|
||||||
<el-button @click="handleClose">{{$t("backendSystem.cancel")}}</el-button>
|
<el-button @click="handleClose">{{$t("backendSystem.cancel")}}</el-button>
|
||||||
<el-button type="primary" :loading="bthLoading" @click="sureAddBroadcast">{{$t("backendSystem.publish")}}</el-button>
|
<el-button type="primary" :loading="sendEmailLoading" @click="sureSendEmail">发送</el-button>
|
||||||
</div>
|
</div>
|
||||||
</el-dialog> -->
|
</el-dialog>
|
||||||
<!-- 修改广播弹窗 -->
|
|
||||||
<!-- <el-dialog
|
|
||||||
:title="$t('backendSystem.editContent')"
|
|
||||||
:visible.sync="editDialogVisible"
|
|
||||||
width="50%"
|
|
||||||
:before-close="handleEditClose"
|
|
||||||
:close-on-click-modal="false"
|
|
||||||
>
|
|
||||||
<el-form :model="editParams" >
|
|
||||||
|
|
||||||
<el-form-item >
|
</div>
|
||||||
<el-input resize="none" v-model="editParams.content" type="textarea" :rows="5" @input="val => handleInput(val, 'edit')" />
|
|
||||||
<div v-if="isOverLimit" style="color: #999; font-size: 12px; margin-top: 4px;">{{$t("backendSystem.exceedingInput")}}</div>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<div slot="footer" class="dialog-footer">
|
|
||||||
<el-button @click="handleEditClose">{{$t("backendSystem.cancel")}}</el-button>
|
|
||||||
<el-button type="primary" :loading="editLoading" @click="sureEditBroadcast">{{$t("backendSystem.editBroadcast")}}</el-button>
|
|
||||||
</div>
|
|
||||||
</el-dialog> -->
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import Index from './index'
|
import Index from "./index";
|
||||||
export default {
|
export default {
|
||||||
mixins:[Index],
|
mixins: [Index],
|
||||||
|
};
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.main-title{
|
.main-title {
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
||||||
color: #333;
|
color: #333;
|
||||||
margin-bottom: 18px;
|
margin-bottom: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
|
@ -686,19 +686,19 @@ export default {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
background-image: url(../../assets/img/miningAccount/top.png);
|
// background-image: url(../../assets/img/miningAccount/top.png);
|
||||||
background-size: 100% 50%;
|
// background-size: 100% 50%;
|
||||||
background-repeat: no-repeat;
|
// background-repeat: no-repeat;
|
||||||
background-position: 30% -15%;
|
// background-position: 30% -15%;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding-top: 60PX;
|
// padding-top: 60PX;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
}
|
}
|
||||||
.workBKContent{
|
.workBKContent{
|
||||||
width: 60%;
|
width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
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_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.d6c55a75.js></script><script defer src=/js/app-d363ae0c.e4b98918.js></script><script defer src=/js/app-5c551db8.89dc18d2.js></script><script defer src=/js/app-b4c4f6ec.699d67bf.js></script><script defer src=/js/app-45954fd3.470dc9c3.js></script><script defer src=/js/app-72600b29.3e7e0df2.js></script><script defer src=/js/app-f035d474.92e1d288.js></script><script defer src=/js/app-113c6c50.bce0e5a7.js></script><link href=/css/chunk-vendors-5c533fba.6f97509c.css rel=stylesheet><link href=/css/app-189e7968.dab6fbf8.css rel=stylesheet><link href=/css/app-b4c4f6ec.b7a26d39.css rel=stylesheet><link href=/css/app-45954fd3.605105ff.css rel=stylesheet><link href=/css/app-72600b29.8bee31b9.css rel=stylesheet><link href=/css/app-f035d474.0348646a.css rel=stylesheet><link href=/css/app-113c6c50.5229e45e.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.e36ba8a9.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.7d4ad37d.js></script><script defer src=/js/app-d363ae0c.603ece39.js></script><script defer src=/js/app-5c551db8.baf3658a.js></script><script defer src=/js/app-b4c4f6ec.94c0ddb2.js></script><script defer src=/js/app-45954fd3.53c0df94.js></script><script defer src=/js/app-72600b29.7a20ccca.js></script><script defer src=/js/app-f035d474.92e1d288.js></script><script defer src=/js/app-7023e5b0.a956a90d.js></script><script defer src=/js/app-113c6c50.6af405db.js></script><link href=/css/chunk-vendors-5c533fba.6f97509c.css rel=stylesheet><link href=/css/app-189e7968.abee2a01.css rel=stylesheet><link href=/css/app-b4c4f6ec.6e507abe.css rel=stylesheet><link href=/css/app-45954fd3.86c0fd20.css rel=stylesheet><link href=/css/app-72600b29.8bee31b9.css rel=stylesheet><link href=/css/app-f035d474.0348646a.css rel=stylesheet><link href=/css/app-7023e5b0.87f1eef9.css rel=stylesheet><link href=/css/app-113c6c50.59d737ac.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.
|
@ -1 +1 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://m2pool.com/en</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://m2pool.com/en/dataDisplay</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url><url><loc>https://m2pool.com/en/ServiceTerms</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>monthly</changefreq><priority>0.6</priority></url><url><loc>https://m2pool.com/en/apiFile</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/rate</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/nexaAccess</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/grsAccess</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/monaAccess</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/dgbsAccess</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/dgbqAccess</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/dgboAccess</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/rxdAccess</loc><lastmod>2025-06-25T08:37:39.425Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url></urlset>
|
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://m2pool.com/en</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>daily</changefreq><priority>1.0</priority></url><url><loc>https://m2pool.com/en/dataDisplay</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url><url><loc>https://m2pool.com/en/ServiceTerms</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>monthly</changefreq><priority>0.6</priority></url><url><loc>https://m2pool.com/en/apiFile</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/rate</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.8</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/nexaAccess</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/grsAccess</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/monaAccess</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/dgbsAccess</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/dgbqAccess</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/dgboAccess</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/en/AccessMiningPool/rxdAccess</loc><lastmod>2025-06-27T06:12:42.085Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url></urlset>
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://m2pool.com/zh</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/dataDisplay</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/ServiceTerms</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>monthly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/apiFile</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/rate</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/nexaAccess</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/grsAccess</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/monaAccess</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/dgbsAccess</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/dgbqAccess</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/dgboAccess</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/rxdAccess</loc><lastmod>2025-06-25T08:37:39.415Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url></urlset>
|
<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://m2pool.com/zh</loc><lastmod>2025-06-27T06:12:42.057Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/dataDisplay</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/ServiceTerms</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>monthly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/apiFile</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/rate</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/nexaAccess</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/grsAccess</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/monaAccess</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/dgbsAccess</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/dgbqAccess</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/dgboAccess</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url><url><loc>https://m2pool.com/zh/AccessMiningPool/rxdAccess</loc><lastmod>2025-06-27T06:12:42.067Z</lastmod><changefreq>weekly</changefreq><priority>0.7</priority></url></urlset>
|
Binary file not shown.
Loading…
Reference in New Issue