m2pool_web_frontend/mining-pool/src/views/personalCenter/personalMining/index.js

947 lines
34 KiB
JavaScript
Raw Normal View History

import { getCheck,getAddBalace, getAddMinerAccount, getAccountList, getDelMinerAccount, getMinerAccountBalance, getCheckAccount,getCheckBalance,getIfBind } from "../../../api/personalCenter"
import {getAccountGradeList } from "../../../api/login"
2025-06-13 06:58:47 +00:00
import { Debounce,throttle }from "../../../utils/publicMethods";
export default {
data() {
return {
activeName: "mining",
dialogVisible: false,
labelPosition: "top",
formLabelAlign: {
},
currencyList: [
// {
// value: "nexa",
// label: "nexa",
// img: require("../../../assets/img/currency-nexa.png"),
// imgUrl: `${this.$baseApi}img/nexa.png`,
// },
// {
// value: "grs",
// label: "grs",
// // img: require("../assets/images/grs.png"),
// imgUrl: `${this.$baseApi}img/grs.svg`,
// },
// {
// value: "mona",
// label: "mona",
// imgUrl: `${this.$baseApi}img/mona.svg`,
// },
// {
// value: "dgb_skein",
// label: "dgb-skein-pool1",
// imgUrl: `${this.$baseApi}img/dgb.svg`,
// },
// {
// value: "dgb_qubit",
// label: "dgb-qubit-pool1",
// imgUrl: `${this.$baseApi}img/dgb.svg`,
// },
// {
// value: "dgb_odo",
// label: "dgb-odocrypt-pool1",
// imgUrl: `${this.$baseApi}img/dgb.svg`,
// },
// {
// value: "dgb2_odo",
// label: "dgb-odocrypt-pool2",
// imgUrl: `${this.$baseApi}img/dgb.svg`,
// },
// {
// value: "dgb_qubit_a10",
// label: "dgb-qubit-pool2",
// imgUrl: `${this.$baseApi}img/dgb.svg`,
// },
// {
// value: "dgb_skein_a10",
// label: "dgb-skein-pool2",
// imgUrl: `${this.$baseApi}img/dgb.svg`,
// },
// {
// value: "dgb_odo_b20",
// label: "dgb-odoscrypt-pool3",
// imgUrl: `${this.$baseApi}img/dgb.svg`,
// },
],
walletDialogVisible: false,
accountList: [
// {
// addr: "sdijfsjdfdiougujidododododododododod44444444444444444444444dodododododododododoufsohifsfhifhsidi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remark: "备注信息jiojgddddddddddddddddddddddddddddddddddddd测试",
// },
// {
// addr: "sdijfsdsiofjsiofjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remark: "备注信息测试",
// },
// {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// },
// {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remarks: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remark: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remark: "备注信息测试",
// }, {
// account: "sdijf6656fjsdifi",
// miningPool: "dgb-skein-pool1",
// currency: "dgb",
// remark: "备注信息测试",
// },
],
params: {
account: "",
miningPool: "",
currency: "",
remarks: "",
},
checked: "",
checkAll: false,
checkedItems: [],
isIndeterminate: true,
selectedIndices: [],
WalletAddressParams: {
ma: "",
balance: "",
coin: "",
active: "0",
amount: "0",
remarks:"",
gCode:""
},
AccountParams: {
coin: "",
ma: "",
remarks: "",
balance:"",
code:"",
},
options: [
{
value: "1",
label: "personal.no"
},
{
value: "0",
label: "personal.yes"
},
],
MiningLoading: false,
paymentSettingsData: {
ma: "",
balance: "",
active: "",
amount: "",
},
deleteAccountDialog: false,
deleteAccount: "",
confirmBindingLoading:false,
amountDisabled:false,
isItBound:false,
securityLoading:false,
deleteGCode:"",
dialogVerification:false,
addMinerLoading:false,
screenCurrency:"",
newAccountList:[],
quotaList:[
{
value:"nexa",
amount:10000,
},
{
value:"grs",
amount:1,
},
{
value:"mona",
amount:1,
},
{
value:"dgbs",
amount:1,
},
{
value:"dgbq",
amount:1,
},
{
value:"dgbo",
amount:1,
},
{
value:"rxd",
amount:100,
},
{
value:"enx",
amount:5000,
},
{
value:"alph",
amount:1,
},
],
amount:1,
lang: this.$i18n.locale,
}
},
mounted() {
this.fetchIfBind()
this.fetchAccountList()
this.registerRecoveryMethod('fetchIfBind', "");
this.registerRecoveryMethod('fetchAccountList', "");
this.currencyList = JSON.parse(localStorage.getItem("currencyList"))
window.addEventListener("setItem", () => {
this.currencyList = JSON.parse(localStorage.getItem("currencyList"))
});
if (this.dialogVisible) {
this.$refs.select.$el.children[0].children[0].setAttribute('style', "background:#ffff;background-size: 20PX 20PX;color:#333;padding-left: 30PX;");
}
},
methods: {
async fetchIfBind(params){
// this.securityLoading = true
this.setLoading('securityLoading', true);
const data = await getIfBind(params)
if (data && data.code === 200) {
if (data.data) {
this.isItBound =true
}else if(!data.data){
this.isItBound =false
}
if (this.$route.query.id && this.$route.query.coin && this.isItBound) {
this.fetchMinerAccountBalance({ id: this.$route.query.id })
this.WalletAddressParams.coin =this.$route.query.coin
this.WalletAddressParams.ma =this.$route.query.ma
}else if(this.$route.query.id && this.$route.query.coin && !this.isItBound){
this.dialogVerification=true
}
}
this.setLoading('securityLoading', false);
},
async fetchCheck(params){
// this.addMinerLoading =true
this.setLoading('addMinerLoading', true);
const data = await getCheck(params)
if (!data) {
this.setLoading('addMinerLoading', false);
}
if (data && data.code === 200) {
this.fetchAddMinerAccount(this.AccountParams)
}else if(data.code === 801){//账号不可用
this.$message({
message: this.$t(`personal.duplicateAccount`),
type: "error",
showClose: true
});
this.setLoading('addMinerLoading', false);
}else if(data.code === 802){//钱包不可用
this.$message({
message: this.$t(`personal.invalidAddress`),
type: "error",
showClose: true
});
this.setLoading('addMinerLoading', false);
}
},
async fetchCheckBalance(params){
// this.confirmBindingLoading =true
this.setLoading('confirmBindingLoading', true);
const data = await getCheckBalance(params)
if (data && data.data) {
this.fetchWalletAddress(this.WalletAddressParams)
}else{
this.$message({
message: this.$t(`personal.invalidAddress`),
showClose: true,
type: 'error'
});
}
this.setLoading('confirmBindingLoading', false);
},
async fetchAccountGradeList(){
const data = await getAccountGradeList()
this.$addStorageEvent(1,`miningAccountList`,JSON.stringify(data.data))
},
async fetchCheckAccount(params) {
const data = await getCheckAccount(params)
if (data && data.code == 200) {
if (data.data) {
this.fetchAddMinerAccount(this.AccountParams)
} else {
this.$message({
message: this.$t(`personal.duplicateAccount`),
type: "error",
showClose: true
});
}
}
},
async fetchMinerAccountBalance(params) {
// this.MiningLoading = true
this.setLoading('MiningLoading', true);
const data = await getMinerAccountBalance(params)
if (data && data.code == 200) {
this.walletDialogVisible = true
this.paymentSettingsData = data.data
}
if ( this.paymentSettingsData.active == `1` || this.paymentSettingsData.active == ``|| this.paymentSettingsData.active == `No`) {
this.amountDisabled=true
}else{
this.amountDisabled=false
}
// this.paymentSettingsData.active = this.paymentSettingsData.active ? this.paymentSettingsData.active : `0`
this.paymentSettingsData.active = this.paymentSettingsData.active==`1` ? this.$t(`personal.no`) :this.$t(`personal.yes`)
this.paymentSettingsData.amount = this.paymentSettingsData.amount ? this.paymentSettingsData.amount : `0`
this.setLoading('MiningLoading', false);
},
async fetchDelMinerAccount(params) {
// this.MiningLoading = true
this.setLoading('MiningLoading', true);
const data = await getDelMinerAccount(params)
if (data && data.code == 200) {
this.fetchAccountGradeList()
this.fetchAccountList()
this.checkedItems = []
this.deleteAccountDialog = false
}
this.setLoading('MiningLoading', false);
},
async fetchAccountList(params) {
// this.MiningLoading = true
this.setLoading('MiningLoading', true);
const data = await getAccountList(params)
this.accountList = data.data
console.log("请求成功,",data);
this.newAccountList = this.accountList
this.$addStorageEvent(1, `accountList`, JSON.stringify(this.accountList))
this.setLoading('MiningLoading', false);
},
async fetchWalletAddress(params) {
const data = await getAddBalace(params)
if (data && data.code == 200) {
this.$message({
message: data.msg,
type: "success",
showClose: true
});
this.walletDialogVisible = false
for (const key in this.WalletAddressParams) {
this.WalletAddressParams[key]=""
}
}
this.fetchAccountList()
},
//添加挖矿账户
async fetchAddMinerAccount(params) {
// this.addMinerLoading =true
this.setLoading('addMinerLoading', true);
const data = await getAddMinerAccount(params)
if (data && data.code == 200) {
this.$message({
message: data.msg,
type: "success",
showClose: true
});
this.dialogVisible = false
this.AccountParams.ma=""
this.AccountParams.coin=""
this.AccountParams.remarks =""
this.AccountParams.balance =""
// this.fetchAccountList()
// this.fetchAccountGradeList()
}
this.fetchAccountList()
this.fetchAccountGradeList()
this.setLoading('addMinerLoading', false);
},
handleCheckAllChange(val) {
if (val) {
this.checkedItems = this.accountList.map(item => item.id);
}else{
this.checkedItems=[]
}
this.isIndeterminate = false;
// if (val) {
// this.checkedItems = this.accountList.map(() => true);
// this.selectedIndices = this.accountList.map((_, index) => index);
// } else {
// this.checkedItems = this.accountList.map(() => false);
// this.selectedIndices = [];
// }
// this.isIndeterminate = false;
// -------------------------------------
// if (val) {
// this.checkedItems = this.accountList.map((_, index) => index !== 0);
// this.selectedIndices = this.accountList.map((_, index) => index !== 0 ? index : null).filter(Boolean);
// } else {
// this.checkedItems = this.accountList.map(() => false);
// this.selectedIndices = [];
// }
// this.isIndeterminate = false;
},
handleSingleCheckChange(index) {
if ((this.checkedItems.every((item) => item)) && (this.checkedItems.length == this.accountList.length)) {
this.checkAll = true
} else {
this.checkAll = false
}
if (this.checkedItems[index]) {
this.selectedIndices.push(index);
} else {
this.selectedIndices = this.selectedIndices.filter(i => i !== index);
}
// ---------------------------
// if (index === 0) {
// return;
// }
// if (this.checkedItems.every((item, i) => i !== 0 && item) && this.checkedItems.filter((item, i) => i !== 0).length === this.accountList.filter((_, i) => i !== 0).length) {
// this.checkAll = true;
// } else {
// this.checkAll = false;
// }
// if (index !== 0 && this.checkedItems[index]) {
// this.selectedIndices.push(index);
// } else if (index !== 0) {
// this.selectedIndices = this.selectedIndices.filter(i => i !== index);
// }
// console.log(!this.selectedIndices[0],5656);
},
handelActive(){
if (this.paymentSettingsData.active ==0) {
this.amountDisabled = false
}else if(this.paymentSettingsData.active ==1){
this.amountDisabled = true
}
},
closeDialog(){
this.walletDialogVisible =false
this.WalletAddressParams.gCode =""
},
addTo() {
if (this.isItBound) {
this.dialogVisible = true
}else{
this.dialogVerification=true
}
},
2025-06-13 06:58:47 +00:00
confirmAdd:Debounce(function(){
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})
2025-06-13 06:58:47 +00:00
},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 })
2025-06-13 06:58:47 +00:00
// },
handelAddClose(){
for (let key in this.AccountParams) {
this.AccountParams[key] = "";
}
this.$refs.select.$el.children[0].children[0].setAttribute('style', "background:#ffff;background-size: 20PX 20PX;color:#333;padding-left: 30PX;");
},
deleteSelected() {
let id = this.checkedItems.join(`,`)
this.deleteAccount = this.accountList.filter(item => this.checkedItems.includes(item.id)).map(item => item.ma);
this.deleteAccount = this.deleteAccount.join(``)
if (this.isItBound) {
this.deleteAccountDialog = true
}else{
this.dialogVerification=true
}
//删除选中项
// this.selectedIndices.sort((a, b) => b - a);
// this.selectedIndices.forEach(index => {
// this.accountList.splice(index, 1);
// });
// // 清空选中索引数组
// this.selectedIndices = [];
// this.checkedItems = []
// -----------
//删除选中项 默认第一项不能删除
// const validSelectedIndices = this.selectedIndices.filter(index => index !== 0);
// validSelectedIndices.sort((a, b) => b - a);
// validSelectedIndices.forEach(index => {
// this.accountList.splice(index, 1);
// });
// this.selectedIndices = [];
// this.checkedItems = this.accountList.map(() => false);
},
confirmDelete() {
if (!this.deleteGCode && this.isItBound) {
this.$message({
showClose: true,
message: this.$t(`personal.gCode`),
type: 'error'
});
return
}
this.fetchDelMinerAccount({ id: this.checkedItems.join(`,`), gCode:this.deleteGCode})
},
handleCheckedCitiesChange(value) {
let checkedCount = value.length;
this.checkAll = checkedCount === this.accountList.length;
this.isIndeterminate = checkedCount > 0 && checkedCount < this.accountList.length;
},
bindWallet(item) {
this.handelQuotaList(item.coin)
this.WalletAddressParams.ma = item.ma
this.WalletAddressParams.coin = item.coin
if (this.isItBound) {
this.fetchMinerAccountBalance({ id: item.id })
}else{
this.dialogVerification=true
}
},
confirmBinding() {
if (!this.paymentSettingsData.balance) {
this.$message({
message: this.$t(`personal.walletTips`),
type: "error",
showClose: true
});
return
}
if ( this.WalletAddressParams.coin.includes(`dgb`) &&this.paymentSettingsData.amount < 1) {
this.$message({
message: `${this.$t(`personal.PaymentAmountTips`)} 1`,
type: "error",
showClose: true
});
return
}
if (this.isItBound && !this.WalletAddressParams.gCode) {
this.$message({
showClose: true,
message: this.$t(`personal.gCode`),
type: 'error'
});
return
}
const currentQuota = this.quotaList.find(item => item.value === this.WalletAddressParams.coin);
if (currentQuota) {
// 比较用户设置的支付额度是否小于最小支付额度
if (Number(this.paymentSettingsData.amount) < currentQuota.amount) {
// 如果小于最小支付额度,显示错误提示
this.$message({
message: `${this.$t(`personal.PaymentAmountTips`)} ${currentQuota.amount} `,
type: "error",
showClose: true
});
return
}
}
this.WalletAddressParams.balance = this.paymentSettingsData.balance
this.WalletAddressParams.amount = this.paymentSettingsData.amount
this.WalletAddressParams.active = this.paymentSettingsData.active
this.WalletAddressParams.remarks = this.paymentSettingsData.remark
if (this.WalletAddressParams.active == "是" ||this.WalletAddressParams.active == "Yes" ) {
this.WalletAddressParams.active=0
}else if(this.WalletAddressParams.active == "否" ||this.WalletAddressParams.active == "No"){
this.WalletAddressParams.active=1
}
this.fetchCheckBalance({coin:this.WalletAddressParams.coin,balance:this.WalletAddressParams.balance})
// this.fetchWalletAddress(this.WalletAddressParams)
},
jumpVerification(){
// this.$router.push( { name: 'SecuritySetting', params: { active: true} })
this.$router.push({
path: `/${this.lang}/personalCenter/securitySetting`,
params: { active: true }
}).catch(err => {
if(err.name !== 'NavigationDuplicated') {
console.error('路由跳转失败:', err);
}
});
},
closeDeleteDialog(){
this.deleteGCode =""
},
changeSelection(scope) {
let brand = scope
for (let index in this.currencyList) {
let aa = this.currencyList[index];
let value = aa.value;
if (brand === value) {
this.$refs.select.$el.children[0].children[0].setAttribute('style', "background:url(" + aa.imgUrl + ") no-repeat 10PX;background-size: 20PX 20PX;color:#333;padding-left: 33PX;");
}
}
// this.fetchParam({ coin: this.value })
},
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;");
}
}
if (!scope) {
this.newAccountList =this.accountList
this.$refs.screen.$el.children[0].children[0].setAttribute('style', "background:url(``) no-repeat 10PX;background-size: 20PX 20PX;color:#333;padding-left: 8PX;");
}else{
this.newAccountList = this.accountList.filter(item=>item.coin == scope)
}
// this.fetchParam({ coin: this.value })
},
clickCopy(item){
// 创建临时输入框
var tempInput = document.createElement('input');
tempInput.value = item.addr;
document.body.appendChild(tempInput);
try {
tempInput.select();
const isCopySuccessful = document.execCommand('copy');
if (isCopySuccessful) {
this.$message({
showClose: true,
message: this.$t(`personal.copySuccessful`),
type: 'success',
});
} else {
this.$message({
showClose: true,
message: this.$t(`personal.copyFailed`),
type: 'success',
});
}
} catch (error) {
this.$message({
showClose: true,
message: this.$t(`personal.copyFailed`),
type: 'success',
});
} finally {
if (document.body.contains(tempInput)) {
document.body.removeChild(tempInput);
} else {
console.log('临时输入框不是 body 的子节点,无法移除。');
}
}
// navigator.clipboard.writeText(value).then(() => {
// this.$message({
// showClose: true,
// message: this.$t(`personal.copySuccessful`),
// type: 'success',
// });
// }).catch(err => {
// this.$message({
// showClose: true,
// message: this.$t(`personal.copyFailed`),
// type: 'error',
// });
// });
},
jumpAlerts(item){
this.$message({
showClose: true,
message: this.$t(`alerts.turnOffReminder`),
type: 'error',
});
// const lang = this.lang;
// this.$router.push({
// path: `/${lang}/alerts`,
// query: {
// ma: item.ma,
// img: item.img,
// id: item.id,
// coin: item.coin
// }
// });
// this.$router.push({
// path: "/alerts",
// query: { ma:item.ma,img:item.img, id:item.id,coin:item.coin },
// });
},
handelQuotaList(coin){
try {
let obj = this.quotaList.find(item=>item.value == coin)
if (obj) {
this.amount = obj.amount
}else{
return 0
}
} catch (error) {
console.log(error);
}
}
}
}