zzzz
2024-04-17 c34c87ff6bf310e461ae27c1988d39baef208da8
1
{"ast":null,"code":"import \"vant/es/icon/style\";\nimport _Icon from \"vant/es/icon\";\nimport \"vant/es/uploader/style\";\nimport _Uploader from \"vant/es/uploader\";\nimport \"core-js/modules/es.array.push.js\";\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport QRCode from \"qrcode\";\nimport * as imageConversion from \"image-conversion\";\nimport Axios from \"@/API/recharge.js\";\nimport axios from \"axios\";\nimport assetsHead from \"@/components/assets-head\";\n//import Config from \"@/config\";\nimport { BASE_URL } from \"@/config\";\nimport { signatureGenerate } from \"@/utils/signatureUtil\";\nimport { mapGetters } from \"vuex\";\nexport default {\n  name: \"rechargePage\",\n  components: {\n    [_Uploader.name]: _Uploader,\n    [_Icon.name]: _Icon,\n    assetsHead\n  },\n  computed: {\n    ...mapGetters({\n      userInfo: \"user/userInfo\"\n    })\n  },\n  state: {\n    status: 0,\n    // 状态\n    gasObj: {},\n    //\n    userInfo: {\n      usercode: \"\",\n      //\n      token: \"\",\n      // 登录token\n      username: \"\",\n      perpetual_contracts_status: 0,\n      account: \"\" // 钱包地址\n    }\n  },\n  getters: {\n    mingStatus: state => state.status,\n    isToken: state => state.token,\n    userInfo: state => state.userInfo\n  },\n  data() {\n    return {\n      BASE_URL,\n      tip: \"\",\n      fileList: [],\n      address: \"\",\n      uploadImgUrl: \"\",\n      nowUrl: \"\",\n      session_token: \"\",\n      amount: \"\",\n      //充币数量\n      from: \"\",\n      //客户转出地址\n      submitImg: \"\",\n      coin: \"\",\n      //币种\n      blockchainIndex: 0,\n      blockchain_name: \"\",\n      chainList: [],\n      QRCodeMsg: \"\",\n      imgshow: false,\n      img: \"\",\n      enterAddress: \"\"\n    };\n  },\n  mounted() {\n    //获取域名\n    this.nowUrl = \"https://\" + window.location.hostname;\n    this.coin = this.$route.query.symbol;\n    this.getData();\n    this.getToken();\n    // https://www.wbfjsfhjdbsh.site/wap/api/cms!get.action?language=en&content_code=002&token=fe3c35583f8a4f12a86b0c13faa75ee6\n    Axios.getRechargeTips({\n      language: this.$i18n.locale,\n      token: this.$store.state.user.userInfo.token,\n      content_code: \"002\"\n    }).then(res => {\n      //console.log('充值提示',res)\n      this.tip = res.data.content;\n    }).catch(err => {\n      if (err.code === \"ECONNABORTED\") {\n        this.$toast(this.$t(\"网络超时!\"));\n      } else if (err !== undefined) {\n        this.$toast(this.$t(err));\n      }\n    });\n  },\n  methods: {\n    getData() {\n      Axios.getBlock({\n        coin: this.coin\n      }).then(res => {\n        if (res.code == \"0\") {\n          this.chainList = res.data;\n          this.address = res.data[0].address;\n          this.blockchain_name = res.data[0].blockchain_name;\n          this.getQRCode();\n        }\n      });\n    },\n    changeBlockchain(index) {\n      this.blockchainIndex = index;\n      this.address = this.chainList[this.blockchainIndex].address;\n      this.blockchain_name = this.chainList[this.blockchainIndex].blockchain_name;\n      this.getQRCode();\n    },\n    getToken() {\n      Axios.getRechargeToken().then(res => {\n        this.session_token = res.data.session_token;\n      });\n    },\n    onClickLeft() {\n      this.$router.go(-1);\n    },\n    onCopy(e) {\n      this.$toast(this.$t(\"复制成功\"));\n    },\n    onError(e) {\n      this.$toast(this.$t(\"复制失败\"));\n    },\n    //上传前\n    beforeRead(file) {\n      let types = [\"image/jpeg\", \"image/jpg\", \"image/gif\", \"image/bmp\", \"image/png\"];\n      const isImage = types.includes(file.type);\n      if (!isImage) {\n        this.$toast(this.$t(\"上传图片只能是JPG、JPEG、gif、bmp、PNG格式!\"));\n        return false;\n      }\n      return true;\n    },\n    //上传完成\n    async afterRead(file) {\n      const {\n        timestamp,\n        signature\n      } = signatureGenerate();\n      const blob = await imageConversion.compressAccurately(file.file, 500);\n      const formData = new FormData();\n      formData.append(\"file\", blob);\n      const BASE_URL = this.BASE_URL;\n      await axios.post(`${BASE_URL}public/uploadimg!execute.action`, formData, {\n        headers: {\n          \"Content-Type\": \"multipart/form-data\",\n          tissuePaper: timestamp,\n          sign: signature\n        }\n      }).then(res => {\n        if (res.data.code == 0) {\n          this.submitImg = res.data.data;\n          // this.uploadImgUrl = this.nowUrl+'/wap/public/showimg!showImg.action?imagePath=' + res.data.data;\n          this.uploadImgUrl = `${BASE_URL}public/showimg!showImg.action?imagePath=${res.data.data}`;\n          this.$toast(this.$t(\"上传成功\"));\n          console.log(this.uploadImgUrl);\n        } else {\n          this.$toast(this.$t(\"上传失败\"));\n        }\n      });\n    },\n    //生成二维码\n    getQRCode() {\n      let opts = {\n        errorCorrectionLevel: \"H\",\n        //容错级别\n        type: \"image/png\",\n        //生成的二维码类型\n        quality: 0.3,\n        //二维码质量\n        margin: 4,\n        //二维码留白边距\n        width: 200,\n        //宽\n        height: 200,\n        //高\n        text: \"http://www.xxx.com\",\n        //二维码内容\n        color: {\n          dark: \"#333333\",\n          //前景色\n          light: \"#fff\" //背景色\n        }\n      };\n      this.QRCodeMsg = this.address; //生成的二维码为URL地址js\n      let msg = document.getElementById(\"QRcodeCanvas\"); // 将获取到的数据(val)画到msg(canvas)上\n      QRCode.toCanvas(msg, this.QRCodeMsg, opts, function (error) {\n        console.log(error);\n      });\n      // 将canvas转成图片格式,可以长按保存\n      this.img = msg.toDataURL(\"image/png\");\n      this.imgshow = true;\n    },\n    download(selector) {\n      // 通过 API 获取目标 canvas 元素\n      const canvas = document.querySelector(selector);\n      // 创建一个 a 标签,并设置 href 和 download 属性\n      const el = document.createElement(\"a\");\n      // 设置 href 为图片经过 base64 编码后的字符串,默认为 png 格式\n      el.href = canvas.toDataURL();\n      el.download = \"123\";\n\n      // 创建一个点击事件并对 a 标签进行触发\n      const event = new MouseEvent(\"click\");\n      el.dispatchEvent(event);\n    },\n    nextBtn() {\n      if (!this.amount) {\n        this.$toast(this.$t(\"请输入数量\"));\n        return;\n      }\n      let numReg = /^[0-9]+([.]{1}[0-9]+){0,1}$/;\n      if (!numReg.test(this.amount)) {\n        this.$toast(this.$t(\"请输入数字\"));\n        return;\n      }\n      if (this.amount) {\n        Axios.rechargeApply({\n          session_token: this.session_token,\n          amount: this.amount,\n          from: this.enterAddress,\n          blockchain_name: \"TRC20\",\n          img: this.submitImg,\n          coin: this.coin,\n          channel_address: this.address,\n          tx: \"\"\n        }).then(res => {\n          if (res.code == 0) {\n            this.$router.push({\n              path: \"/recharge/rechargeSubmit\"\n            });\n          } else {\n            this.getToken();\n            this.$toast(this.$t(res.msg));\n          }\n        }).catch(error => {\n          if (error.code === \"ECONNABORTED\") {\n            this.$toast(this.$t(\"网络超时!\"));\n          } else if (error.msg !== undefined) {\n            this.$toast(this.$t(error.msg));\n          }\n          this.getToken();\n        });\n      } else {\n        this.$toast(this.$t(\"请输入充币数量\"));\n      }\n    }\n  }\n};","map":{"version":3,"names":["QRCode","imageConversion","Axios","axios","assetsHead","BASE_URL","signatureGenerate","mapGetters","name","components","_Uploader","_Icon","computed","userInfo","state","status","gasObj","usercode","token","username","perpetual_contracts_status","account","getters","mingStatus","isToken","data","tip","fileList","address","uploadImgUrl","nowUrl","session_token","amount","from","submitImg","coin","blockchainIndex","blockchain_name","chainList","QRCodeMsg","imgshow","img","enterAddress","mounted","window","location","hostname","$route","query","symbol","getData","getToken","getRechargeTips","language","$i18n","locale","$store","user","content_code","then","res","content","catch","err","code","$toast","$t","undefined","methods","getBlock","getQRCode","changeBlockchain","index","getRechargeToken","onClickLeft","$router","go","onCopy","e","onError","beforeRead","file","types","isImage","includes","type","afterRead","timestamp","signature","blob","compressAccurately","formData","FormData","append","post","headers","tissuePaper","sign","console","log","opts","errorCorrectionLevel","quality","margin","width","height","text","color","dark","light","msg","document","getElementById","toCanvas","error","toDataURL","download","selector","canvas","querySelector","el","createElement","href","event","MouseEvent","dispatchEvent","nextBtn","numReg","test","rechargeApply","channel_address","tx","push","path"],"sources":["src/page/recharge/rechargePage.vue"],"sourcesContent":["<template>\n  <div class=\"rechargePage box-border font-26\">\n    <assets-head :title=\"$t('快速充币')\" />\n    <div class=\"mt-30 w-full text-center font-36 textColor\">\n      {{ coin.toUpperCase() + \" \" + $t(\"充值\") }}\n    </div>\n    <div\n      class=\"pl-30 pr-30 text-center flex flex-col items-center justify-center mt40\"\n    >\n      <div>\n        <canvas id=\"QRcodeCanvas\" v-show=\"!imgshow\"></canvas>\n        <img :src=\"img\" alt=\"\" v-show=\"imgshow\" class=\"QRcodeImg\" />\n      </div>\n      <div\n        class=\"code-btn btnMain text-center font-26 text-white\"\n        @click=\"download('#QRcodeCanvas')\"\n      >\n        {{ $t(\"保存二维码\") }}\n      </div>\n    </div>\n    <div class=\"border-light-grey\"></div>\n    <div class=\"pl-30 pr-30\">\n      <div class=\"flex flex-col items-center justify-center\">\n        <div class=\"textColor font-30 mt50\" ref=\"address\">{{ address }}</div>\n        <div\n          v-clipboard:copy=\"address\"\n          v-clipboard:success=\"onCopy\"\n          v-clipboard:error=\"onError\"\n          class=\"font-26 border-solid-grey text-center code-btn rounded-6 textColor\"\n        >\n          {{ $t(\"复制地址\") }}\n        </div>\n      </div>\n      <div>\n        <div class=\"font-26 textColor\">{{ $t(\"转出地址(选填)\") }}</div>\n        <div style=\"position: relative\" class=\"mt-26 mb-60\">\n          <input\n            style=\"padding-right: 80px\"\n            v-model=\"enterAddress\"\n            class=\"input-view font-26 textColor inputBackground\"\n            :placeholder=\"$t('请输入转出地址')\"\n          />\n          <div\n            style=\"\n              position: absolute;\n              right: 10px;\n              top: 50%;\n              color: #2c78f8;\n              transform: translateY(-50%);\n            \"\n            @click=\"enterAddress = address\"\n          >\n            {{ $t(\"粘贴\") }}\n          </div>\n        </div>\n      </div>\n      <div class=\"mb-60\">\n        <div class=\"font-26 textColor\">{{ $t(\"充币数量\") }}</div>\n        <div>\n          <input\n            v-model=\"amount\"\n            class=\"input-view w-full font-26 textColor inputBackground\"\n            :placeholder=\"$t('请输入充币数量')\"\n          />\n        </div>\n      </div>\n      <!-- <div>\n                <div class=\"font-26 textColor\">{{ $t('链名称') }}</div>\n                <div class=\"flex \">\n                    <div :class=\"blockchainIndex == index ? 'borderMain colorMain' : 'border-solid-dark-grey border-r-grey'\"\n                        class=\"mr-20 flex-wrap font-32 text-center name-btn rounded textColor\"\n                        v-for=\"(item, index) in chainList\" :key=\"index\" @click=\"changeBlockchain(index)\">{{\n                            item.blockchain_name }}</div>\n                </div>\n            </div> -->\n      <div>\n        <div class=\"font-26 textColor\">\n          {{ $t(\"付款凭证(上传支付详情截图)\") }}\n        </div>\n        <div class=\"img-box\">\n          <van-uploader\n            accept=\"image/*\"\n            style=\"width: 100%; height: 100%\"\n            v-model=\"fileList\"\n            multiple\n            :max-count=\"1\"\n            :before-read=\"beforeRead\"\n            :after-read=\"afterRead\"\n          />\n        </div>\n      </div>\n    </div>\n    <div class=\"hint-box\">\n      <div class=\"pl-30 pr-30\">\n        <div class=\"font-26 mb-27 textColor\">{{ $t(\"重要提示\") }}</div>\n        <div class=\"font-28 text-grey\" v-html=\"tip\"></div>\n        <button\n          class=\"btnMain text-white next-btn font-30 rounded-lg\"\n          @click=\"nextBtn\"\n        >\n          {{ $t(\"下一步\") }}\n        </button>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport QRCode from \"qrcode\";\nimport { Icon } from \"vant\";\nimport * as imageConversion from \"image-conversion\";\nimport { Uploader } from \"vant\";\nimport Axios from \"@/API/recharge.js\";\nimport axios from \"axios\";\nimport assetsHead from \"@/components/assets-head\";\n//import Config from \"@/config\";\nimport { BASE_URL } from \"@/config\";\nimport { signatureGenerate } from \"@/utils/signatureUtil\";\nimport { mapGetters } from \"vuex\";\n\nexport default {\n  name: \"rechargePage\",\n  components: {\n    [Uploader.name]: Uploader,\n    [Icon.name]: Icon,\n    assetsHead,\n  },\n  computed: {\n    ...mapGetters({\n      userInfo: \"user/userInfo\",\n    }),\n  },\n  state: {\n    status: 0, // 状态\n    gasObj: {}, //\n    userInfo: {\n      usercode: \"\", //\n      token: \"\", // 登录token\n      username: \"\",\n      perpetual_contracts_status: 0,\n      account: \"\", // 钱包地址\n    },\n  },\n  getters: {\n    mingStatus: (state) => state.status,\n    isToken: (state) => state.token,\n    userInfo: (state) => state.userInfo,\n  },\n  data() {\n    return {\n      BASE_URL,\n      tip: \"\",\n      fileList: [],\n      address: \"\",\n      uploadImgUrl: \"\",\n      nowUrl: \"\",\n      session_token: \"\",\n      amount: \"\", //充币数量\n      from: \"\", //客户转出地址\n      submitImg: \"\",\n      coin: \"\", //币种\n      blockchainIndex: 0,\n      blockchain_name: \"\",\n      chainList: [],\n      QRCodeMsg: \"\",\n      imgshow: false,\n      img: \"\",\n      enterAddress: \"\",\n    };\n  },\n  mounted() {\n    //获取域名\n    this.nowUrl = \"https://\" + window.location.hostname;\n    this.coin = this.$route.query.symbol;\n    this.getData();\n    this.getToken();\n    // https://www.wbfjsfhjdbsh.site/wap/api/cms!get.action?language=en&content_code=002&token=fe3c35583f8a4f12a86b0c13faa75ee6\n    Axios.getRechargeTips({\n      language: this.$i18n.locale,\n      token: this.$store.state.user.userInfo.token,\n      content_code: \"002\",\n    })\n      .then((res) => {\n        //console.log('充值提示',res)\n        this.tip = res.data.content;\n      })\n      .catch((err) => {\n        if (err.code === \"ECONNABORTED\") {\n          this.$toast(this.$t(\"网络超时!\"));\n        } else if (err !== undefined) {\n          this.$toast(this.$t(err));\n        }\n      });\n  },\n  methods: {\n    getData() {\n      Axios.getBlock({\n        coin: this.coin,\n      }).then((res) => {\n        if (res.code == \"0\") {\n          this.chainList = res.data;\n          this.address = res.data[0].address;\n          this.blockchain_name = res.data[0].blockchain_name;\n          this.getQRCode();\n        }\n      });\n    },\n    changeBlockchain(index) {\n      this.blockchainIndex = index;\n      this.address = this.chainList[this.blockchainIndex].address;\n      this.blockchain_name =\n        this.chainList[this.blockchainIndex].blockchain_name;\n      this.getQRCode();\n    },\n    getToken() {\n      Axios.getRechargeToken().then((res) => {\n        this.session_token = res.data.session_token;\n      });\n    },\n    onClickLeft() {\n      this.$router.go(-1);\n    },\n    onCopy(e) {\n      this.$toast(this.$t(\"复制成功\"));\n    },\n    onError(e) {\n      this.$toast(this.$t(\"复制失败\"));\n    },\n    //上传前\n    beforeRead(file) {\n      let types = [\n        \"image/jpeg\",\n        \"image/jpg\",\n        \"image/gif\",\n        \"image/bmp\",\n        \"image/png\",\n      ];\n      const isImage = types.includes(file.type);\n      if (!isImage) {\n        this.$toast(this.$t(\"上传图片只能是JPG、JPEG、gif、bmp、PNG格式!\"));\n        return false;\n      }\n      return true;\n    },\n    //上传完成\n    async afterRead(file) {\n      const { timestamp, signature } = signatureGenerate();\n      const blob = await imageConversion.compressAccurately(file.file, 500);\n      const formData = new FormData();\n      formData.append(\"file\", blob);\n      const BASE_URL = this.BASE_URL;\n      await axios\n        .post(`${BASE_URL}public/uploadimg!execute.action`, formData, {\n          headers: {\n            \"Content-Type\": \"multipart/form-data\",\n            tissuePaper: timestamp,\n            sign: signature,\n          },\n        })\n        .then((res) => {\n          if (res.data.code == 0) {\n            this.submitImg = res.data.data;\n            // this.uploadImgUrl = this.nowUrl+'/wap/public/showimg!showImg.action?imagePath=' + res.data.data;\n            this.uploadImgUrl = `${BASE_URL}public/showimg!showImg.action?imagePath=${res.data.data}`;\n            this.$toast(this.$t(\"上传成功\"));\n            console.log(this.uploadImgUrl);\n          } else {\n            this.$toast(this.$t(\"上传失败\"));\n          }\n        });\n    },\n    //生成二维码\n    getQRCode() {\n      let opts = {\n        errorCorrectionLevel: \"H\", //容错级别\n        type: \"image/png\", //生成的二维码类型\n        quality: 0.3, //二维码质量\n        margin: 4, //二维码留白边距\n        width: 200, //宽\n        height: 200, //高\n        text: \"http://www.xxx.com\", //二维码内容\n        color: {\n          dark: \"#333333\", //前景色\n          light: \"#fff\", //背景色\n        },\n      };\n      this.QRCodeMsg = this.address; //生成的二维码为URL地址js\n      let msg = document.getElementById(\"QRcodeCanvas\"); // 将获取到的数据(val)画到msg(canvas)上\n      QRCode.toCanvas(msg, this.QRCodeMsg, opts, function (error) {\n        console.log(error);\n      });\n      // 将canvas转成图片格式,可以长按保存\n      this.img = msg.toDataURL(\"image/png\");\n      this.imgshow = true;\n    },\n    download(selector) {\n      // 通过 API 获取目标 canvas 元素\n      const canvas = document.querySelector(selector);\n      // 创建一个 a 标签,并设置 href 和 download 属性\n      const el = document.createElement(\"a\");\n      // 设置 href 为图片经过 base64 编码后的字符串,默认为 png 格式\n      el.href = canvas.toDataURL();\n      el.download = \"123\";\n\n      // 创建一个点击事件并对 a 标签进行触发\n      const event = new MouseEvent(\"click\");\n      el.dispatchEvent(event);\n    },\n    nextBtn() {\n      if (!this.amount) {\n        this.$toast(this.$t(\"请输入数量\"));\n        return;\n      }\n\n      let numReg = /^[0-9]+([.]{1}[0-9]+){0,1}$/;\n      if (!numReg.test(this.amount)) {\n        this.$toast(this.$t(\"请输入数字\"));\n        return;\n      }\n      if (this.amount) {\n        Axios.rechargeApply({\n          session_token: this.session_token,\n          amount: this.amount,\n          from: this.enterAddress,\n          blockchain_name: \"TRC20\",\n          img: this.submitImg,\n          coin: this.coin,\n          channel_address: this.address,\n          tx: \"\",\n        })\n          .then((res) => {\n            if (res.code == 0) {\n              this.$router.push({\n                path: \"/recharge/rechargeSubmit\",\n              });\n            } else {\n              this.getToken();\n              this.$toast(this.$t(res.msg));\n            }\n          })\n          .catch((error) => {\n            if (error.code === \"ECONNABORTED\") {\n              this.$toast(this.$t(\"网络超时!\"));\n            } else if (error.msg !== undefined) {\n              this.$toast(this.$t(error.msg));\n            }\n            this.getToken();\n          });\n      } else {\n        this.$toast(this.$t(\"请输入充币数量\"));\n      }\n    },\n  },\n};\n</script>\n<style lang=\"scss\" scoped>\n.rechargePage {\n  width: 100%;\n  box-sizing: border-box;\n\n  ::v-deep .van-uploader__upload {\n    @include themify() {\n      background: themed(\"upload_bg\");\n    }\n  }\n}\n\n.code-btn {\n  width: 280px;\n  height: 70px;\n  margin-top: 36px;\n  margin-bottom: 56px;\n  line-height: 70px;\n}\n\n.mt50 {\n  margin-top: 50px;\n}\n\n.mt70 {\n  margin-top: 70px;\n}\n\n.input-view {\n  height: 100px;\n  width: 100%;\n  border: none;\n  outline: none;\n  padding-left: 20px;\n  box-sizing: border-box;\n}\n\n.name-btn {\n  width: 210px;\n  height: 80px;\n  line-height: 80px;\n  margin-top: 30px;\n  margin-bottom: 50px;\n}\n\n.img-box {\n  margin-top: 32px;\n  margin-bottom: 90px;\n}\n\n.hint-box {\n  @include themify() {\n    background: themed(\"tab_background\");\n  }\n\n  padding-top: 35px;\n  padding-bottom: 52px;\n}\n\n.mtb27 {\n  margin: 27px 0;\n}\n\n.next-btn {\n  width: 100%;\n  height: 100px;\n  margin-top: 35px;\n  border: none;\n  outline: none;\n}\n</style>\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}