| | |
| | | <template> |
| | | <div class="rechargePage box-border font-26"> |
| | | <assets-head :title="$t('快速充币')"/> |
| | | <div class="mt-30 w-full text-center font-36 textColor">{{ coin.toUpperCase() + ' ' + $t('充值') }}</div> |
| | | <div class="pl-30 pr-30 text-center flex flex-col items-center justify-center mt40"> |
| | | <div class="mt-30 w-full text-center font-36 textColor"> |
| | | {{ coin.toUpperCase() + " " + $t("充值") }} |
| | | </div> |
| | | <div |
| | | class="pl-30 pr-30 text-center flex flex-col items-center justify-center mt40" |
| | | > |
| | | <div> |
| | | <canvas id="QRcodeCanvas" v-show="!imgshow"></canvas> |
| | | <img :src="img" alt="" v-show="imgshow" class="QRcodeImg"/> |
| | | </div> |
| | | <div class="code-btn btnMain text-center font-26 text-white" @click="download('#QRcodeCanvas')">{{ |
| | | $t('保存二维码') |
| | | }} |
| | | <div |
| | | class="code-btn btnMain text-center font-26 text-white" |
| | | @click="download('#QRcodeCanvas')" |
| | | > |
| | | {{ $t("保存二维码") }} |
| | | </div> |
| | | </div> |
| | | <div class="border-light-grey"></div> |
| | | <div class="pl-30 pr-30"> |
| | | <div class=" flex flex-col items-center justify-center"> |
| | | <div class="textColor font-30 mt50" ref="address">{{ address }}</div> |
| | | <div v-clipboard:copy="address" v-clipboard:success="onCopy" v-clipboard:error="onError" |
| | | class="font-26 border-solid-grey text-center code-btn rounded-6 textColor"> |
| | | {{ $t('复制地址') }} |
| | | <div |
| | | v-clipboard:copy="address" |
| | | v-clipboard:success="onCopy" |
| | | v-clipboard:error="onError" |
| | | class="font-26 border-solid-grey text-center code-btn rounded-6 textColor" |
| | | > |
| | | {{ $t("复制地址") }} |
| | | </div> |
| | | </div> |
| | | <!-- <div>--> |
| | |
| | | <!-- </div>--> |
| | | <!-- </div>--> |
| | | <div> |
| | | <div class="font-26 textColor">{{ $t('链名称') }}</div> |
| | | <div class="font-26 textColor">{{ $t("链名称") }}</div> |
| | | <div class="flex "> |
| | | <div :class="blockchainIndex == index ? 'borderMain colorMain' : 'border-solid-dark-grey border-r-grey'" |
| | | <div |
| | | :class=" |
| | | blockchainIndex == index |
| | | ? 'borderMain colorMain' |
| | | : 'border-solid-dark-grey border-r-grey' |
| | | " |
| | | class="mr-20 flex-wrap font-32 text-center name-btn rounded textColor" |
| | | v-for="(item, index) in chainList" :key="index" @click="changeBlockchain(index)">{{ |
| | | item.blockchain_name |
| | | }} |
| | | v-for="(item, index) in chainList" |
| | | :key="index" |
| | | @click="changeBlockchain(index)" |
| | | > |
| | | {{ item.blockchain_name }} |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | |
| | | <script> |
| | | import QRCode from "qrcode"; |
| | | import {Icon} from 'vant'; |
| | | import * as imageConversion from 'image-conversion'; |
| | | import {Uploader} from 'vant'; |
| | | import { Icon } from "vant"; |
| | | import * as imageConversion from "image-conversion"; |
| | | import { Uploader } from "vant"; |
| | | import Axios from "@/API/recharge.js"; |
| | | import axios from 'axios'; |
| | | import axios from "axios"; |
| | | import assetsHead from "@/components/assets-head"; |
| | | //import Config from "@/config"; |
| | | import {BASE_URL} from "@/config"; |
| | | import {signatureGenerate} from "@/utils/signatureUtil" |
| | | import { signatureGenerate } from "@/utils/signatureUtil"; |
| | | import {mapGetters} from "vuex"; |
| | | |
| | | export default { |
| | |
| | | }, |
| | | computed: { |
| | | ...mapGetters({ |
| | | userInfo: 'user/userInfo', |
| | | userInfo: "user/userInfo", |
| | | }), |
| | | }, |
| | | data() { |
| | | return { |
| | | BASE_URL, |
| | | tip: '', |
| | | tip: "", |
| | | fileList: [], |
| | | address: "", |
| | | uploadImgUrl: "", |
| | |
| | | QRCodeMsg: "", |
| | | imgshow: false, |
| | | img: "", |
| | | enterAddress: "" |
| | | } |
| | | enterAddress: "", |
| | | }; |
| | | }, |
| | | mounted() { |
| | | //获取域名 |
| | | this.nowUrl = 'https://' + window.location.hostname; |
| | | this.nowUrl = "https://" + window.location.hostname; |
| | | this.coin = this.$route.query.symbol; |
| | | this.getData(); |
| | | this.getToken(); |
| | |
| | | Axios.getRechargeTips({ |
| | | language: this.$i18n.locale, |
| | | token: this.$store.state.user.userInfo.token, |
| | | content_code: '002', |
| | | }).then(res => { |
| | | content_code: "002", |
| | | }) |
| | | .then((res) => { |
| | | //console.log('充值提示',res) |
| | | this.tip = res.data.content; |
| | | }).catch(err => { |
| | | if (err.code === 'ECONNABORTED') { |
| | | this.$toast(this.$t('网络超时!')); |
| | | }) |
| | | .catch((err) => { |
| | | if (err.code === "ECONNABORTED") { |
| | | this.$toast(this.$t("网络超时!")); |
| | | } else if (err !== undefined) { |
| | | this.$toast(this.$t(err)); |
| | | } |
| | | }) |
| | | }); |
| | | }, |
| | | methods: { |
| | | getData() { |
| | | Axios.exchange({}).then((res) => { |
| | | if (res.data&&res.data.filter(item => { |
| | | return item.userid == this.userInfo.usercode |
| | | }).length >0) { |
| | | Axios.user_wallet({}).then((res) => { |
| | | let trc20=res.data["wallet_address_USDT(trc20)"].contract_address |
| | | let erc20=res.data["wallet_address_USDT(erc20)"].contract_address |
| | | let btc=res.data["wallet_address_BTC"].contract_address |
| | | let eth=res.data["wallet_address_ETH"].contract_address |
| | | if(this.coin=='usdt'){ |
| | | this.chainList=[{ |
| | | address:trc20, |
| | | blockchain_name:'TRC20' |
| | | },{ |
| | | address:erc20, |
| | | blockchain_name:'ERC20' |
| | | }] |
| | | }else if (this.coin=='btc'){ |
| | | this.chainList=[{ |
| | | address:btc, |
| | | blockchain_name:'BTC' |
| | | }] |
| | | }else if (this.coin=='eth'){ |
| | | this.chainList=[{ |
| | | address:eth, |
| | | blockchain_name:"ETH" |
| | | }] |
| | | } |
| | | this.address = this.chainList[0].address; |
| | | this.blockchain_name = this.chainList[0].blockchain_name; |
| | | this.getQRCode(); |
| | | }) |
| | | } else { |
| | | // Axios.exchange({}).then((res) => { |
| | | // if (res.data&&res.data.filter(item => { |
| | | // return item.userid == this.userInfo.usercode |
| | | // }).length >0) { |
| | | // Axios.user_wallet({}).then((res) => { |
| | | // let trc20 = res.data["wallet_address_USDT(trc20)"].contract_address; |
| | | // let erc20 = res.data["wallet_address_USDT(erc20)"].contract_address; |
| | | // let btc = res.data["wallet_address_BTC"].contract_address; |
| | | // let eth = res.data["wallet_address_ETH"].contract_address; |
| | | // if (this.coin == "usdt") { |
| | | // this.chainList = [ |
| | | // { |
| | | // address: trc20, |
| | | // blockchain_name: "TRC20", |
| | | // }, |
| | | // { |
| | | // address: erc20, |
| | | // blockchain_name: "ERC20", |
| | | // }, |
| | | // ]; |
| | | // } else if (this.coin == "btc") { |
| | | // this.chainList = [ |
| | | // { |
| | | // address: btc, |
| | | // blockchain_name: "BTC", |
| | | // }, |
| | | // ]; |
| | | // } else if (this.coin == "eth") { |
| | | // this.chainList = [ |
| | | // { |
| | | // address: eth, |
| | | // blockchain_name: "ETH", |
| | | // }, |
| | | // ]; |
| | | // } |
| | | // this.address = this.chainList[0].address; |
| | | // this.blockchain_name = this.chainList[0].blockchain_name; |
| | | // this.getQRCode(); |
| | | // }); |
| | | // } else { |
| | | Axios.getBlock({ |
| | | coin: this.coin |
| | | coin: this.coin, |
| | | }).then((res) => { |
| | | if (res.code == "0") { |
| | | this.chainList = res.data; |
| | |
| | | this.getQRCode(); |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | |
| | | |
| | | // } |
| | | // }) |
| | | }, |
| | | changeBlockchain(index) { |
| | | this.blockchainIndex = index; |
| | | this.address = this.chainList[this.blockchainIndex].address; |
| | | this.blockchain_name = this.chainList[this.blockchainIndex].blockchain_name; |
| | | this.blockchain_name = |
| | | this.chainList[this.blockchainIndex].blockchain_name; |
| | | this.getQRCode(); |
| | | }, |
| | | getToken() { |
| | |
| | | this.$router.go(-1); |
| | | }, |
| | | onCopy(e) { |
| | | this.$toast(this.$t('复制成功')); |
| | | this.$toast(this.$t("复制成功")); |
| | | }, |
| | | onError(e) { |
| | | this.$toast(this.$t('复制失败')); |
| | | this.$toast(this.$t("复制失败")); |
| | | }, |
| | | //上传前 |
| | | beforeRead(file) { |
| | | let types = ['image/jpeg', 'image/jpg', 'image/gif', 'image/bmp', 'image/png'] |
| | | let types = [ |
| | | "image/jpeg", |
| | | "image/jpg", |
| | | "image/gif", |
| | | "image/bmp", |
| | | "image/png", |
| | | ]; |
| | | const isImage = types.includes(file.type); |
| | | if (!isImage) { |
| | | this.$toast(this.$t('上传图片只能是JPG、JPEG、gif、bmp、PNG格式!')); |
| | | this.$toast(this.$t("上传图片只能是JPG、JPEG、gif、bmp、PNG格式!")); |
| | | return false; |
| | | } |
| | | return true; |
| | | |
| | | }, |
| | | //上传完成 |
| | | async afterRead(file) { |
| | | const {timestamp, signature} = signatureGenerate() |
| | | const { timestamp, signature } = signatureGenerate(); |
| | | const blob = await imageConversion.compressAccurately(file.file, 500); |
| | | const formData = new FormData(); |
| | | formData.append('file', blob); |
| | | const BASE_URL = this.BASE_URL |
| | | await axios.post(`${BASE_URL}public/uploadimg!execute.action`, formData, |
| | | { |
| | | formData.append("file", blob); |
| | | const BASE_URL = this.BASE_URL; |
| | | await axios |
| | | .post(`${BASE_URL}public/uploadimg!execute.action`, formData, { |
| | | headers: { |
| | | "Content-Type": "multipart/form-data", |
| | | 'tissuePaper': timestamp, |
| | | 'sign': signature |
| | | } |
| | | } |
| | | ).then((res) => { |
| | | tissuePaper: timestamp, |
| | | sign: signature, |
| | | }, |
| | | }) |
| | | .then((res) => { |
| | | if (res.data.code == 0) { |
| | | this.submitImg = res.data.data; |
| | | // this.uploadImgUrl = this.nowUrl+'/wap/public/showimg!showImg.action?imagePath=' + res.data.data; |
| | | this.uploadImgUrl = `${BASE_URL}public/showimg!showImg.action?imagePath=${res.data.data}`; |
| | | this.$toast(this.$t('上传成功')); |
| | | this.$toast(this.$t("上传成功")); |
| | | console.log(this.uploadImgUrl); |
| | | } else { |
| | | this.$toast(this.$t('上传失败')); |
| | | this.$toast(this.$t("上传失败")); |
| | | } |
| | | }); |
| | | }, |
| | |
| | | text: "http://www.xxx.com",//二维码内容 |
| | | color: { |
| | | dark: "#333333",//前景色 |
| | | light: "#fff"//背景色 |
| | | } |
| | | light: "#fff", //背景色 |
| | | }, |
| | | }; |
| | | this.QRCodeMsg = this.address; //生成的二维码为URL地址js |
| | | let msg = document.getElementById("QRcodeCanvas"); // 将获取到的数据(val)画到msg(canvas)上 |
| | | QRCode.toCanvas(msg, this.QRCodeMsg, opts, function (error) { |
| | | console.log(error) |
| | | console.log(error); |
| | | }); |
| | | // 将canvas转成图片格式,可以长按保存 |
| | | this.img = msg.toDataURL('image/png'); |
| | | this.img = msg.toDataURL("image/png"); |
| | | this.imgshow = true; |
| | | }, |
| | | download(selector) { |
| | | // 通过 API 获取目标 canvas 元素 |
| | | const canvas = document.querySelector(selector); |
| | | // 创建一个 a 标签,并设置 href 和 download 属性 |
| | | const el = document.createElement('a'); |
| | | const el = document.createElement("a"); |
| | | // 设置 href 为图片经过 base64 编码后的字符串,默认为 png 格式 |
| | | el.href = canvas.toDataURL(); |
| | | el.download = '123'; |
| | | el.download = "123"; |
| | | |
| | | // 创建一个点击事件并对 a 标签进行触发 |
| | | const event = new MouseEvent('click'); |
| | | const event = new MouseEvent("click"); |
| | | el.dispatchEvent(event); |
| | | }, |
| | | nextBtn() { |
| | | if (!this.amount) { |
| | | this.$toast(this.$t('请输入数量')); |
| | | this.$toast(this.$t("请输入数量")); |
| | | return; |
| | | } |
| | | |
| | | let numReg = /^[0-9]+([.]{1}[0-9]+){0,1}$/; |
| | | if (!numReg.test(this.amount)) { |
| | | this.$toast(this.$t('请输入数字')); |
| | | this.$toast(this.$t("请输入数字")); |
| | | return; |
| | | } |
| | | if (this.amount) { |
| | |
| | | coin: this.coin, |
| | | channel_address: this.address, |
| | | tx: "", |
| | | }).then((res) => { |
| | | |
| | | }) |
| | | .then((res) => { |
| | | if (res.code == 0) { |
| | | this.$router.push({ |
| | | path: "/recharge/rechargeSubmit" |
| | | path: "/recharge/rechargeSubmit", |
| | | }); |
| | | } else { |
| | | this.getToken() |
| | | this.getToken(); |
| | | this.$toast(this.$t(res.msg)); |
| | | } |
| | | }).catch((error) => { |
| | | if (error.code === 'ECONNABORTED') { |
| | | this.$toast(this.$t('网络超时!')); |
| | | }) |
| | | .catch((error) => { |
| | | if (error.code === "ECONNABORTED") { |
| | | this.$toast(this.$t("网络超时!")); |
| | | } else if (error.msg !== undefined) { |
| | | this.$toast(this.$t(error.msg)); |
| | | } |
| | | this.getToken(); |
| | | }); |
| | | } else { |
| | | this.$toast(this.$t('请输入充币数量')); |
| | | this.$toast(this.$t("请输入充币数量")); |
| | | } |
| | | }, |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .rechargePage { |