45 files modified
1 files added
| | |
| | | import { Image as VanImage } from 'vant'; |
| | | import assetsHead from "@/components/Transform/assets-head/index.vue"; |
| | | import { dataTimeEx } from '@/utils/utis' |
| | | import { customerServiceUrl } from "@/config"; |
| | | export default { |
| | | name: 'rechargeSubmit', |
| | | components: { |
| | |
| | | this.time = dataTimeEx(Date.parse(new Date()), true); |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss"> |
| | | @import "@/assets/init.scss"; |
| | |
| | | </div> |
| | | <div class="text-right items-end justify-end"> |
| | | <div class="">{{ $t('数量') }}</div> |
| | | <div class="mt-5">({{ symbol_data.toUpperCase() || '--' }})</div> |
| | | <div class="mt-5">({{ symbol_name.toUpperCase() || '--' }})</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div v-if="showType == 0 || showType == 2" class="flex justify-between pt-6 font-26" v-for="(item, index) in redData" |
| | | :key="item + index" @click="onPrice(item.price)" :style="{ |
| | | <div v-if="showType == 0 || showType == 2" class="flex justify-between pt-6 font-26" |
| | | v-for="(item, index) in redData" :key="item + index" @click="onPrice(item.price)" :style="{ |
| | | 'background': `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'} 0%` + |
| | | (item.amount / greenData[greenData.length - 1].amount) * 100 + '%,rgba(246,70,93,.1) ' + |
| | | (item.amount / greenData[greenData.length - 1].amount) * 100 + '%,rgba(246,70,93,.1) 100%)' |
| | |
| | | |
| | | <script> |
| | | import { WS_URL } from '@/config' |
| | | import { fixDate } from "@/utils/utis"; |
| | | import { fixDate, strToArr } from "@/utils/utis"; |
| | | import { THEME } from '@/config/theme' |
| | | import { _getHomeList } from '@/service/home.api' |
| | | import { mapGetters } from 'vuex' |
| | |
| | | greenData: init, |
| | | redData: init, |
| | | socket: null, |
| | | symbol_data: '' |
| | | symbol_data: '', |
| | | symbol_name: '', |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | getHomeList() { |
| | | _getHomeList(this.symbol).then((res) => { |
| | | this.symbol_data = res[0].symbol_data |
| | | this.symbol_name = strToArr(res[0].name, '/')[0] |
| | | let numberText = res[0].close.toString() |
| | | let numberLength = (numberText.substring(numberText.indexOf('.') + 1, numberText.length)).length |
| | | |
| | |
| | | |
| | | <script> |
| | | import { THEME } from '@/config/theme' |
| | | import { customerServiceUrl } from "@/config"; |
| | | export default { |
| | | props: { |
| | | unread_num: { |
| | |
| | | this.tabList[index]['data'] = this.tabList[index]['data'].filter(item => item.symbol.includes(this.keywords)) |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | |
| | | return account && account.substr(0, 5) + '********' + account.substr(account.length - 5) |
| | | }, |
| | | amountAvailable() { |
| | | console.log(this.form.symbol) |
| | | console.log(this.wallets) |
| | | // console.log("ddddddddddddddddddd", this.form.iconImg1, this.wallets) |
| | | let res |
| | | let dataInfo = this.wallets.find(item => item.symbol_data.toUpperCase() === this.form.symbol.toUpperCase()) |
| | | let dataInfo = this.wallets.find(item => item.symbol_data.toUpperCase() == this.form.iconImg1.toUpperCase()) |
| | | |
| | | if (dataInfo) { |
| | | res = dataInfo.usable |
| | | } else { |
| | | res = 0 |
| | | } |
| | | |
| | | return res |
| | | }, |
| | | }, |
| | |
| | | form: { // 闪兑 |
| | | symbol: 'USDC', |
| | | symbol_to: 'USDT', |
| | | name: '', |
| | | volume: '', |
| | | rate: 0, |
| | | iconImg2: '', |
| | |
| | | data.extends.map(item => { |
| | | this.actions.push({ |
| | | symbol: item.symbol, |
| | | name: item.symbol, |
| | | name: item.name, |
| | | symbol_data: item.symbol, |
| | | usable: item.usable, |
| | | usdt: item.usdt, |
| | |
| | | }) |
| | | this.wallets = data.extends |
| | | console.log("this.actions",this.actions[0].symbol_data); |
| | | this.form.symbol = this.actions[0].symbol_data |
| | | this.form.symbol_to = this.actions[1].symbol_data |
| | | this.form.symbol = this.strToArr(this.actions[0].name, '/')[0] |
| | | this.form.symbol_to = this.strToArr(this.actions[1].name, '/')[0] |
| | | this.form.iconImg1 = this.actions[0].symbol_data |
| | | this.form.iconImg2 = this.actions[1].symbol_data |
| | | this.form.symbol_ex = this.actions[0].symbol |
| | |
| | | }, |
| | | onSelect(type, evt) { // 选择 |
| | | if (evt.type == 0) { |
| | | this.form['symbol'] = evt.item.symbol_data |
| | | this.form['symbol'] = this.strToArr(evt.item.name, '/')[0] |
| | | this.form['iconImg1'] = evt.item.symbol_data |
| | | this.form['symbol_ex'] = evt.item.symbol |
| | | } else { |
| | | this.form['symbol_to'] = evt.item.symbol_data |
| | | this.form['symbol_to'] = this.strToArr(evt.item.name, '/')[0] |
| | | this.form['iconImg2'] = evt.item.symbol_data |
| | | this.form['symbol_to_ex'] = evt.item.symbol |
| | | } |
| | |
| | | clearInterval() { // 清除定时器 |
| | | clearInterval(this.interval) |
| | | this.interval = null |
| | | } |
| | | }, |
| | | strToArr(str, separator = ',') { |
| | | if (typeof str !== 'string') return []; |
| | | return str.split(separator); |
| | | }, |
| | | }, |
| | | beforeUnmount() { |
| | | // console.log('beforeDestroy') |
| | |
| | | class="w-30 h-30 rounded-full mr-10 currency-icon" /> |
| | | </div> |
| | | <div> |
| | | <div class="item-title textColor">{{ item.symbol_data.toUpperCase() }}</div> |
| | | <div class="item-title textColor">{{ strToArr(item.name.toUpperCase(),'/')[0] }}</div> |
| | | </div> |
| | | </div> |
| | | <div class="text-right" v-if="activeIndex == 0"> |
| | |
| | | } else { |
| | | this.currencyList = this.allCurrencyList |
| | | } |
| | | } |
| | | }, |
| | | strToArr(str, separator = ',') { |
| | | if (typeof str !== 'string') return []; |
| | | return str.split(separator); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | |
| | | <span>{{ title }}</span> |
| | | </div> |
| | | |
| | | <template v-if="initClose.status / 1 === 0"> |
| | | <!-- <template v-if="initClose.status / 1 === 0"> |
| | | <div class="flex justify-center items-center h-66 buy-item">{{ $t('停牌中,禁止交易') }}</div> |
| | | </template> |
| | | <template v-else> |
| | | </template> --> |
| | | <!-- <template v-else> --> |
| | | <div class="flex total-list"> |
| | | <div class="total-div" :class="[!isTotal ? 'active-bg' : '']" @click="checkIsTotal(false)"> |
| | | {{ $t('数量') }} |
| | |
| | | :class="currentType === 'open' ? 'bg-green' : 'bg-red'" @click="order()"> |
| | | {{ currentType == 'open' ? $t('买入') : $t('卖出') }} |
| | | </div> |
| | | </template> |
| | | <!-- </template> --> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <!-- </div>--> |
| | | </div> |
| | | <div class="btn-wrap"> |
| | | <button class="btnMain text-white next-btn font-35" @click="goRouter('/cryptos/assetsCenter/rechargeWithdrawRecord')"> |
| | | <button class="btnMain text-white next-btn font-35" |
| | | @click="goRouter('/cryptos/assetsCenter/rechargeWithdrawRecord')"> |
| | | {{ $t('查看') }} {{ title }} {{ $t('历史') }}</button> |
| | | </div> |
| | | </div> |
| | |
| | | <script> |
| | | import { Image as VanImage } from 'vant'; |
| | | import assetsHead from "@/components/Transform/assets-head/index.vue"; |
| | | import { customerServiceUrl } from "@/config"; |
| | | import { dataTimeEx } from '@/utils/utis' |
| | | export default { |
| | | name:'rechargeSubmit', |
| | |
| | | this.time = dataTimeEx(Date.parse(new Date()),true); |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/init.scss"; |
| | | |
| | | #cryptos{ |
| | | .page-box { |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .btn-wrap { |
| | | position: fixed; |
| | | left: 0; |
| | |
| | | padding: 0 30px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .mt96 { |
| | | margin-top:114px; |
| | | } |
| | | |
| | | .success-title{ |
| | | margin-top:70px; |
| | | margin-bottom:115px; |
| | |
| | | .service-text{ |
| | | text-decoration:underline; |
| | | } |
| | | |
| | | .next-btn{ |
| | | width:100%; |
| | | height:96px; |
| | |
| | | border-radius: 8px; |
| | | } |
| | | } |
| | | |
| | | |
| | | </style> |
| | |
| | | "反洗钱协议": "Anti-Geldwäsche-Vereinbarung", |
| | | "法律声明": "Rechtlicher Hinweis", |
| | | "金融服务牌照": "Finanzdienstleistungslizenz", |
| | | "充值记录": "Aufladeprotokoll", |
| | | "当日": "Ist das", |
| | | "最低认购": "Mindestzeichnung", |
| | | "币种数量": "Menge der währung", |
| | | "进度": "Fortschritt", |
| | | } |
| | |
| | | "反洗钱协议": "Accordo antiriciclaggio", |
| | | "法律声明": "Dichiarazione legale", |
| | | "金融服务牌照": "Licenza di servizi finanziari", |
| | | "充值记录": "Registro di ricarica", |
| | | "当日": "Oggi", |
| | | "最低认购": "Sottoscrizione minima", |
| | | "币种数量": "Menge der Währung", |
| | | "进度": "Fortschritt", |
| | | } |
| | |
| | | "反洗钱协议": "マネーロンダリング防止契約", |
| | | "法律声明": "法的声明", |
| | | "金融服务牌照": "金融サービスライセンス", |
| | | "充值记录": "入金記録", |
| | | "当日": "当日", |
| | | "最低认购": "最低申込", |
| | | "币种数量": "通貨数量", |
| | | "进度": "進捗", |
| | | } |
| | |
| | | "反洗钱协议": "Acordo de Prevenção à Lavagem de Dinheiro", |
| | | "法律声明": "Declaração Legal", |
| | | "金融服务牌照": "Licença de Serviços Financeiros", |
| | | "充值记录": "Registro de recarga", |
| | | "当日": "Hoje", |
| | | "最低认购": "Subscrição mínima", |
| | | "币种数量": "Quantidade de moeda", |
| | | "进度": "Progresso", |
| | | } |
| | |
| | | "反洗钱协议": "Acuerdo de prevención de lavado de dinero", |
| | | "法律声明": "Declaración legal", |
| | | "金融服务牌照": "Licencia de servicios financieros", |
| | | "充值记录": "Registro de recarga", |
| | | "当日": "Hoy", |
| | | "最低认购": "Suscripción mínima", |
| | | "币种数量": "Cantidad de moneda", |
| | | "进度": "Progreso", |
| | | } |
| | |
| | | "反洗钱协议": "反洗錢協議", |
| | | "法律声明": "法律聲明", |
| | | "金融服务牌照": "金融服務牌照", |
| | | "充值记录": "充值記錄", |
| | | "当日": "當日", |
| | | "最低认购": "最低認購", |
| | | "币种数量": "幣種數量", |
| | | "进度": "進度", |
| | | } |
| | |
| | | "反洗钱协议": "Anti-Money Laundering Agreement", |
| | | "法律声明": "Legal Statement", |
| | | "金融服务牌照": "Financial Services License", |
| | | "充值记录": "Recharge record", |
| | | "当日": "Today", |
| | | "最低认购": "Minimum subscription", |
| | | "币种数量": "Currency quantity", |
| | | "进度": "Progress", |
| | | } |
| | |
| | | "反洗钱协议": "Accord de lutte contre le blanchiment d'argent", |
| | | "法律声明": "Mention légale", |
| | | "金融服务牌照": "Licence de services financiers", |
| | | "充值记录": "Recharge record", |
| | | "当日": "Aujourd'hui", |
| | | "最低认购": "Souscription minimale", |
| | | "币种数量": "Menge der Währung", |
| | | "进度": "Fortschritt", |
| | | } |
| | |
| | | "反洗钱协议": "자금세탁 방지 계약", |
| | | "法律声明": "법적 선언", |
| | | "金融服务牌照": "금융 서비스 라이센스", |
| | | "充值记录": "충전 기록", |
| | | "当日": "당일", |
| | | "最低认购": "최소 구독", |
| | | "币种数量": "통화 수량", |
| | | "进度": "진행 상황", |
| | | } |
| | |
| | | "反洗钱协议": "ข้อตกลงการป้องกันการฟอกเงิน", |
| | | "法律声明": "คำชี้แจงทางกฎหมาย", |
| | | "金融服务牌照": "ใบอนุญาตบริการทางการเงิน", |
| | | "充值记录": "บันทึกการเติมเงิน", |
| | | "当日": "วันนี้", |
| | | "最低认购": "การจองซื้อขั้นต่ำ", |
| | | "币种数量": "จำนวนเงินตรา", |
| | | "进度": "ความก้าวหน้า", |
| | | } |
| | |
| | | "反洗钱协议": "Thỏa thuận chống rửa tiền", |
| | | "法律声明": "Tuyên bố pháp lý", |
| | | "金融服务牌照": "Giấy phép dịch vụ tài chính", |
| | | "充值记录": "Lịch sử nạp tiền", |
| | | "当日": "Ngày nay", |
| | | "最低认购": "Đăng ký tối thiểu", |
| | | "币种数量": "Số lượng tiền tệ", |
| | | "进度": "Tiến độ", |
| | | } |
| | |
| | | "反洗钱协议": "反洗钱协议", |
| | | "法律声明": "法律声明", |
| | | "金融服务牌照": "金融服务牌照", |
| | | "充值记录": "充值记录", |
| | | "当日": "当日", |
| | | "最低认购": "最低认购", |
| | | "币种数量": "币种数量", |
| | | "进度": "进度", |
| | | } |
| | |
| | | import( /* webpackChunkName: "changeFundsPassword" */ /* webpackPrefetch: true */ |
| | | '@/views/changeFundsPassword/index.vue') |
| | | }, |
| | | { //重置邮箱/手机号 |
| | | path: '/resetPhoneEmail', |
| | | name: 'resetPhoneEmail', |
| | | component: () => |
| | | import( /* webpackChunkName: "changeFundsPassword" */ /* webpackPrefetch: true */ |
| | | '@/views/safety/resetPhoneEmail.vue') |
| | | }, |
| | | { //绑定验证 |
| | | path: '/bindVerify', |
| | | name: 'bindVerify', |
| | |
| | | case 403: // 登录状态已过期,您可以继续留在该页面,或者重新登录 |
| | | userStore.userInfo = {} |
| | | store.state.user.userInfo = {} |
| | | showToast({ type: 'warning', message: i18n.global.t('请重新登录')}) |
| | | router.push({ |
| | | path: '/login' |
| | | }) |
| | |
| | | params, |
| | | }) |
| | | } |
| | | |
| | | //重置账户密码 |
| | | export const _registerEorP = (params) => { |
| | | return request({ |
| | | url: `${API_PREFIX}/user/resetUserName`, |
| | | method: METHODS.POST, |
| | | data: params |
| | | }) |
| | | }; |
| | |
| | | export const handleImage = (url) => { |
| | | return new URL(url, import.meta.url).href |
| | | } |
| | | |
| | | // 字符串转数组 |
| | | export const strToArr = (str, separator = ',') => { |
| | | if (typeof str !== 'string') return []; |
| | | return str.split(separator); |
| | | } |
| | | |
| | |
| | | import OrderData from "./OrderData.vue"; |
| | | import Evaluation from "./Evaluation.vue"; |
| | | import otcApi from "@/service/otc"; |
| | | import { customerServiceUrl } from "@/config"; |
| | | export default { |
| | | name: "TradeSuccessDetail", |
| | | props: ['title', 'back'], |
| | |
| | | return str |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | |
| | | import OrderData from "../../c2cOrder/components/order-data/OrderData.vue"; |
| | | import Evaluation from "../../c2cOrder/payment/components/Evaluation.vue"; |
| | | import otcApi from "@/service/otc"; |
| | | import { customerServiceUrl } from "@/config"; |
| | | export default { |
| | | name: "TradeSuccessDetail", |
| | | props: ['title', 'back'], |
| | |
| | | return str |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | |
| | | :create-order-time="fullTime(orderDetail.createTime)" :seller-name="orderDetail.c2cUserNickName" |
| | | :unit-price="orderDetail.symbolValue" /> |
| | | <!-- 已超时 --> |
| | | <cancel-success v-if="timeout" :title="$t('出售')" :count="orderDetail.coinAmount" :total-price="orderDetail.amount" |
| | | :order-number="orderDetail.orderNo" :create-order-time="fullTime(orderDetail.createTime)" |
| | | :seller-name="orderDetail.c2cUserNickName" :unit-price="orderDetail.symbolValue"> |
| | | <cancel-success v-if="timeout" :title="$t('出售')" :count="orderDetail.coinAmount" |
| | | :total-price="orderDetail.amount" :order-number="orderDetail.orderNo" |
| | | :create-order-time="fullTime(orderDetail.createTime)" :seller-name="orderDetail.c2cUserNickName" |
| | | :unit-price="orderDetail.symbolValue"> |
| | | <template #title>{{ $t('已超时') }}</template> |
| | | <template #desc>{{ $t('买家付款超时,您的订单已取消') }}</template> |
| | | </cancel-success> |
| | |
| | | import otcApi from "@/service/otc"; |
| | | |
| | | import { formatTime } from "@/utils/utis"; |
| | | import { customerServiceUrl } from "@/config"; |
| | | import { SET_ORDER_INFO } from "@/store/const.store"; |
| | | |
| | | export default { |
| | |
| | | return formatTime(new Date(time), 'yyyy-MM-dd hh:mm:ss') |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | }, |
| | | watch: { |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/css/copy2.scss"; |
| | | |
| | | .border-ra { |
| | | border-radius: 20px; |
| | | } |
| | |
| | | </div> |
| | | </div> |
| | | <div class="px-33 mt-92"> |
| | | <van-button |
| | | color="#1D91FF" |
| | | class="w-full h-100 rounded-xl" |
| | | type="info" |
| | | @click="tokefu" |
| | | >{{$t('联系客服')}} |
| | | <van-button color="#1D91FF" class="w-full h-100 rounded-xl" type="info" @click="tokefu">{{ $t('联系客服') }} |
| | | </van-button> |
| | | <div @click="hide" class="mt-34 font-36 text-center" style="color: #1D91FF">{{$t('返回')}}</div> |
| | | </div> |
| | |
| | | <script> |
| | | import {Button} from "vant"; |
| | | import OrderNav from "@/components/order-nav/OrderNav.vue"; |
| | | import { customerServiceUrl } from "@/config"; |
| | | export default { |
| | | name: "AppealWaiting", |
| | | components: { |
| | |
| | | }, |
| | | methods:{ |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | }, |
| | | hide() { |
| | | console.log(213) |
| | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
| | | <style scoped></style> |
| | |
| | | import OrderNav from "@/components/order-nav/OrderNav.vue"; |
| | | import OrderData from "../components/order-data/OrderData.vue"; |
| | | import otcApi from "@/service/otc"; |
| | | |
| | | import { customerServiceUrl } from "@/config"; |
| | | |
| | | export default { |
| | | name: "orderGeneration", |
| | |
| | | this.$router.push({ path: '/chat' }) |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapState('c2cBuy', ['count', 'totalPrice', 'orderNumber']), |
| | |
| | | <template v-slot:title> |
| | | <div>STO</div> |
| | | </template> |
| | | <template v-slot:right> |
| | | <!-- <template v-slot:right> |
| | | <van-icon name="todo-list-o" @click="$router.push('/ICO/icoRecord')" /> |
| | | </template> |
| | | </template> --> |
| | | </fx-header> |
| | | |
| | | <div class="ico_list"> |
| | |
| | | <div>{{ i.startDate }} ~ {{ i.endDate }}</div> |
| | | </div> |
| | | <div class="item_2 flex justify-between"> |
| | | <div>{{ $t('最低认购') }}</div> |
| | | <div>{{ i.minContribution }}</div> |
| | | </div> |
| | | <div class="item_2 flex justify-between"> |
| | | <div>{{ $t('币种数量') }}</div> |
| | | <div>{{ i.maxContribution }}</div> |
| | | </div> |
| | | <div class="item_2 flex justify-between"> |
| | | <div>{{ $t('IssuePrice') }}</div> |
| | | <div>{{ i.unitAmount }}</div> |
| | | </div> |
| | | |
| | | <div class="item_2 flex justify-between"> |
| | | <div>{{$t('listingDate')}}</div> |
| | | <div>{{ i.marketDate }}</div> |
| | | </div> |
| | | <div class="item_2 flex justify-between"> |
| | | <div>{{$t('每张金额')}}</div> |
| | | <div>{{ i.unitAmount }}</div> |
| | | <div class="item_2 flex justify-between align-center"> |
| | | <div>{{ $t('进度') }}</div> |
| | | <div style="width: 70%;padding-top: 1rem;"> |
| | | <van-progress :percentage="i.progressRate || 0" track-color="#ccc" /> |
| | | </div> |
| | | <div class="item_2 flex justify-between"> |
| | | <div>{{$t('每张手续费')}}</div> |
| | | <div>{{ i.unitFee }}</div> |
| | | </div> |
| | | <div class="item_3 flex justify-center"> |
| | | <!-- <div class="item_3 flex justify-center"> |
| | | <van-button type="default" round size="large" @click="openBuy(i)">{{$t('申购')}}</van-button> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | </div> |
| | | |
| | |
| | | _icoList().then(res => { |
| | | icoList.value = res.records |
| | | }).catch(err => { |
| | | showToast(err.msg) |
| | | // showToast(err.msg) |
| | | }) |
| | | |
| | | // 打开申购弹窗 |
| | |
| | | .ico{ |
| | | padding: 0rem 1.2rem 5rem 1.2rem; |
| | | font-size: 1.5rem; |
| | | |
| | | .buy_popup{ |
| | | width: 40rem; |
| | | padding: 1rem; |
| | |
| | | |
| | | .ico_list{ |
| | | padding: 1rem 0rem; |
| | | |
| | | .ico_item{ |
| | | background-color: #eee; |
| | | padding:.5rem 1rem; |
| | | border: #aaa solid 1px; |
| | | border-radius: 1rem; |
| | | |
| | | .item_1{ |
| | | padding: 1rem .5rem; |
| | | border-bottom: #ccc solid 1px; |
| | | font-size: 2rem; |
| | | font-weight: 700; |
| | | } |
| | | |
| | | .item_2{ |
| | | padding: 1rem .5rem; |
| | | border-bottom: #ccc solid 1px; |
| | | font-size: 1.6rem; |
| | | font-weight: 500; |
| | | |
| | | &>div:last-child{ |
| | | color: #999; |
| | | } |
| | | } |
| | | |
| | | .item_3{ |
| | | padding: .5rem; |
| | | } |
| | |
| | | return this.$t('反洗钱协议') |
| | | case '26': |
| | | return this.$t('金融服务牌照') |
| | | case '27': |
| | | return this.$t('帮助中心') |
| | | default: |
| | | return this.$t('关于我们') |
| | | } |
| | |
| | | } |
| | | _getAboutUs({ |
| | | content_code: this.serviceTerm, |
| | | // language: this.serviceTerm ? language : this.$i18n.locale, |
| | | language: 'en', // 强制英文,后台暂时只设置了英文 |
| | | not_language: 1, |
| | | language: this.serviceTerm ? language : this.$i18n.locale, |
| | | // language: 'en', // 强制英文,后台暂时只设置了英文 |
| | | // not_language: 1, |
| | | }).then((res) => { |
| | | this.content = res.content |
| | | this.title = res.title |
| | |
| | | <!-- <img v-if="item.amount > 0" src="@/assets/image/assets-center/in.png" class="w-44 h-44 mr-20" /> |
| | | <img v-else src="@/assets/image/assets-center/out.png" class="w-44 h-44 mr-20" /> --> |
| | | <div> |
| | | <div class="font-32 textColor">{{ category[item.category] }}</div> |
| | | <!-- <div class="font-32 textColor">{{ category[item.category] }}</div> --> |
| | | <div class="font-32 textColor">{{ orderTypes[item.content_type] }}</div> |
| | | <div class="text-grey font-26 mt-6">{{ item.createTime }}(UTC+2)</div> |
| | | <div class="text-grey font-26 mt-6">{{ orderTypes[item.content_type] }}</div> |
| | | <!-- <div class="text-grey font-26 mt-6">{{ orderTypes[item.content_type] }}</div> --> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <div class="font-32 text-right" :class="item.amount > 0 ? 'text-green' : 'text-red'">{{ |
| | | item.amount }} {{ item.wallet_type.toUpperCase() }}</div> |
| | | item.amount }} {{ (item.wallet_type || '').toUpperCase() }}</div> |
| | | <!-- <div class="text-grey font-28 mt-14">{{ item.createTimeStr }}</div> --> |
| | | <div class="text-grey font-28 mt-6 text-right">{{ item.amountAfter }}</div> |
| | | </div> |
| | |
| | | title: this.$t('选择账户类型'), |
| | | selectData: [ |
| | | { title: this.$t('全部'), type: '' }, |
| | | { title: this.$t('法币交易'), type: 'coin' }, |
| | | { title: this.$t('合约交易'), type: 'contract' }, |
| | | { title: this.$t('充值记录'), type: 'coin' }, |
| | | // { title: this.$t('合约交易'), type: 'contract' }, |
| | | { title: this.$t('币币交易'), type: 'exchange' }, |
| | | ], |
| | | type: "",//选中类型 |
| | |
| | | this.symbolType = this.$route.query.type |
| | | } |
| | | _fundRecord(this.type, this.page, this.symbolType).then(data => { |
| | | console.log("data", data); |
| | | |
| | | this.list = [...this.list, ...data] |
| | | // console.log(logs) |
| | | this.loading = false |
| | |
| | | class="w-70 h-70 rounded-full" /> |
| | | </div> |
| | | <div class="text-grey font-28 mt-20">{{ $t('从') }}</div> |
| | | <div class="font-30 mt-30">{{ detail.volume }} {{ detail.symbol }}</div> |
| | | <div class="font-30 mt-30">{{ detail.volume }} {{ detail.name }}</div> |
| | | </div> |
| | | <img src="../../../assets/image/exchange/icon_6.png" class="w-30 h-20" style="margin-top:-65px" /> |
| | | |
| | |
| | | </li> --> |
| | | <li class="flex justify-between font-28 mt-25"> |
| | | <span class="text-grey">{{ $t('汇率') }}</span> |
| | | <span class="textColor">1 {{ detail.symbol && |
| | | detail.symbol.toUpperCase() }}≈{{ (detail.rate * 1).toFixed(5) }} {{ detail.symbol_to && |
| | | <span class="textColor">1 {{ detail.name && |
| | | detail.name.toUpperCase() }}≈{{ (detail.rate * 1).toFixed(5) }} {{ detail.symbol_to && |
| | | detail.symbol_to.toUpperCase() }}</span> |
| | | </li> |
| | | </ul> |
| | |
| | | item.blockchain_name }}</div> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <!-- <div> |
| | | <div class="font-28 textColor">{{ $t('付款凭证(上传支付详情截图)') }}</div> |
| | | <div class="img-box"> |
| | | <van-uploader accept="image/*" v-model="fileList" multiple :max-count="1" |
| | | :before-read="beforeRead" :after-read="afterRead" /> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | <div class="hint-box"> |
| | | <div class="pl-30 pr-30"> |
| | |
| | | amount: this.amount, |
| | | from: this.enterAddress, |
| | | blockchain_name: this.blockchain_name, |
| | | img: this.fileList[0].resURL, |
| | | // img: this.fileList[0].resURL, |
| | | coin: this.coin, |
| | | channel_address: this.address, |
| | | tx: "", |
| | |
| | | <!-- </div>--> |
| | | </div> |
| | | <div class="btn-wrap"> |
| | | <button class="btnMain text-white next-btn font-35" @click="goRouter('/cryptos/assetsCenter/rechargeWithdrawRecord')"> |
| | | <button class="btnMain text-white next-btn font-35" |
| | | @click="goRouter('/cryptos/assetsCenter/rechargeWithdrawRecord')"> |
| | | {{ $t('查看') }} {{ title }} {{ $t('历史') }}</button> |
| | | </div> |
| | | </div> |
| | |
| | | import { Image as VanImage } from 'vant'; |
| | | import assetsHead from "@/components/Transform/assets-head/index.vue"; |
| | | import { dataTimeEx } from '@/utils/utis' |
| | | import { customerServiceUrl } from "@/config"; |
| | | export default { |
| | | name:'rechargeSubmit', |
| | | components:{ |
| | |
| | | this.time = dataTimeEx(Date.parse(new Date()),true); |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/init.scss"; |
| | | |
| | | #cryptos{ |
| | | .page-box { |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .btn-wrap { |
| | | position: fixed; |
| | | left: 0; |
| | |
| | | padding: 0 30px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .mt96 { |
| | | margin-top:114px; |
| | | } |
| | | |
| | | .success-title{ |
| | | margin-top:70px; |
| | | margin-bottom:115px; |
| | |
| | | .service-text{ |
| | | text-decoration:underline; |
| | | } |
| | | |
| | | .next-btn{ |
| | | width:100%; |
| | | height:96px; |
| | |
| | | border-radius: 8px; |
| | | } |
| | | } |
| | | |
| | | |
| | | </style> |
| | | |
| | |
| | | import { mapGetters } from 'vuex'; |
| | | import { fixDate } from "@/utils"; |
| | | import { WS_URL } from '@/config'; |
| | | import { strToArr } from "@/utils/utis"; |
| | | import PopupDelivery from "@/components/Transform/popup-delivery/index.vue"; |
| | | import PopupConfirmOrder from '@/components/Transform/popup-confirm-order/index.vue' |
| | | import deepChart from '@/components/Transform/deepChart/index.vue' |
| | |
| | | _getHomeList(this.symbol).then(data => { |
| | | // console.log(data[0]) |
| | | this.quote = data[0] |
| | | this.symbolData = data[0].symbol_data |
| | | this.symbolData = strToArr(data[0].name, '/')[0] |
| | | this.$nextTick(() => { |
| | | if (!this.sockets.quote && this.symbol) { |
| | | this.startQuoteScoket() |
| | |
| | | <!-- </div>--> |
| | | </div> |
| | | <div class="btn-wrap"> |
| | | <button class="btnMain text-white next-btn font-35" @click="goRouter('/cryptos/assetsCenter/rechargeWithdrawRecord?back=1')"> |
| | | <button class="btnMain text-white next-btn font-35" |
| | | @click="goRouter('/cryptos/assetsCenter/rechargeWithdrawRecord?back=1')"> |
| | | {{ $t('查看') }} {{ title }} {{ $t('历史') }}</button> |
| | | </div> |
| | | </div> |
| | |
| | | import { Image as VanImage } from 'vant'; |
| | | import assetsHead from "@/components/Transform/assets-head/index.vue"; |
| | | import { dataTimeEx } from '@/utils/utis' |
| | | import { customerServiceUrl } from "@/config"; |
| | | export default { |
| | | name:'rechargeSubmit', |
| | | components:{ |
| | |
| | | this.time = dataTimeEx(Date.parse(new Date()),true); |
| | | }, |
| | | tokefu() { |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | this.$router.push('/customerService') |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style lang="scss" scoped> |
| | | @import "@/assets/init.scss"; |
| | | |
| | | #cryptos{ |
| | | .page-box { |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .btn-wrap { |
| | | position: fixed; |
| | | left: 0; |
| | |
| | | padding: 0 30px; |
| | | box-sizing: border-box; |
| | | } |
| | | |
| | | .mt96 { |
| | | margin-top:114px; |
| | | } |
| | | |
| | | .success-title{ |
| | | margin-top:70px; |
| | | margin-bottom:115px; |
| | |
| | | .service-text{ |
| | | text-decoration:underline; |
| | | } |
| | | |
| | | .next-btn{ |
| | | width:100%; |
| | | height:96px; |
| | |
| | | border-radius: 8px; |
| | | } |
| | | } |
| | | |
| | | |
| | | </style> |
| | | |
| | |
| | | { key: 7, name: t('提现'), icon: new URL('@/assets/imgs/home/home_6.png', import.meta.url), path: '/cryptos/Withdraw/withdrawPage' }, |
| | | // { key: 8, name: t('卡券中心'), icon: new URL('@/assets/imgs/home/home_7.png', import.meta.url) }, |
| | | // { key: 9, name: t('闪兑'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/cryptos/exchangePage' }, |
| | | { key: 9, name: t('划转'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/my/transfer' }, |
| | | // { key: 9, name: t('划转'), icon: new URL('@/assets/imgs/home/home_8.png', import.meta.url), path: '/my/transfer' }, |
| | | // { key: 10, name: t('更多'), icon: new URL('@/assets/imgs/home/home_9.png', import.meta.url) }, |
| | | |
| | | { key: 11, name: "STO", icon: new URL('@/assets/imgs/home/home_1.png', import.meta.url), path: '/ICO/ico' }, |
| | |
| | | </span> |
| | | </div> |
| | | |
| | | <div class="flex re-tab"> |
| | | <div class="textColor1" :class="activeIndex == 1 ? 'active' : ''" @click="changeIndex(1)"> |
| | | {{ $t('email') }} |
| | | </div> |
| | | <div class="textColor1" :class="activeIndex == 2 ? 'active' : ''" @click="changeIndex(2)"> |
| | | {{ $t('phoneNum') }} |
| | | </div> |
| | | </div> |
| | | |
| | | <ExInput style="padding-bottom:16px !important;" :placeholderText="getRegType(activeIndex, false)" |
| | | v-model="username" :dialCode="dialCode" @selectArea="onSelectArea" :area="isArea" :icon="icon" |
| | | @pressEnter="verifyLogin" /> |
| | |
| | | |
| | | let username = ref('') |
| | | let password = ref('') |
| | | let activeIndex = ref(0) |
| | | let activeIndex = ref(1) |
| | | let isArea = ref(false) |
| | | let dialCode = ref(0) |
| | | let icon = ref('') |
| | |
| | | _loginUser({ |
| | | userName: (activeIndex.value == 0 || activeIndex.value == 1) ? username.value : `${dialCode.value}${username.value}`, |
| | | passWord: password.value, |
| | | type: type.value |
| | | // type: type.value |
| | | type: '3' // 写死, 算所有的登录都是账户登录 |
| | | }).then((res) => { |
| | | userStore[GET_USERINFO](res) |
| | | store.commit('user/SET_USERINFO', res) |
| | |
| | | background: $mainbgWhiteColor; |
| | | min-height: 100vh; |
| | | |
| | | .re-tab { |
| | | margin-bottom: 22px; |
| | | |
| | | div { |
| | | padding: 0 18px; |
| | | height: 34px; |
| | | line-height: 34px; |
| | | text-align: center; |
| | | border-radius: 4px; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .active { |
| | | // background: $US_tabActice_background; |
| | | background: $bg_yellow; |
| | | // color: $color_main; |
| | | color: $text_color4; |
| | | } |
| | | } |
| | | |
| | | :deep(.textColor) { |
| | | color: $log-c; |
| | | } |
| | |
| | | </van-dropdown-item> |
| | | </van-dropdown-menu> |
| | | </div> |
| | | <div class="assets_revenue mt-5"> |
| | | <span>{{ $t('ProfitDay') }}</span> |
| | | {{ currency.currency_symbol }}{{ forexAssets?.money_contract_profit_today ? |
| | | <!-- <div class="assets_revenue mt-5"> |
| | | <span>{{ $t('当日') }}</span> |
| | | {{ currency.currency_symbol }} |
| | | <span |
| | | :style="forexAssets?.money_contract_profit_today > 0 ? 'color:green' : forexAssets?.money_contract_profit_today < 0 ? 'color:red' : ''"> |
| | | {{ forexAssets?.money_contract_profit_today ? |
| | | (forexAssets?.money_contract_profit_today * (currency.rate ?? 0)).toFixed(2) : |
| | | '--' }} |
| | | </div> |
| | | </span> |
| | | </div> --> |
| | | |
| | | <div class="tabbers flex justify-between mt-20 pl-1 pr-1"> |
| | | <div class="item" v-for="item in tabList" :key="item.key" @click="toPage(item.path)"> |
| | |
| | | <span class="mr-5">{{ assetObj.capital }}</span> |
| | | <van-icon name="arrow" /> |
| | | </div> |
| | | <div class="assets_item flex justify-start items-center mt-14 font-bold"> |
| | | <!-- <div class="assets_item flex justify-start items-center mt-14 font-bold"> |
| | | <div class="icon" style="background-color: #f7b600;"></div> |
| | | <span class="ml-5 flex-1">{{ $t('交易账户') }}</span> |
| | | <span class="mr-5">{{ assetObj.contract }}</span> |
| | | <van-icon name="arrow" /> |
| | | </div> |
| | | </div> --> |
| | | </van-collapse-item> |
| | | </van-collapse> |
| | | |
| | |
| | | // { icon: 'todo-list-o', title: t('账变记录'), path: '/cryptos/accountChange' }, |
| | | { icon: new URL('../../assets/image/assets-center/valuation.png', import.meta.url), title: t('计价方式'), path: '/cryptos/exchangeRate' }, |
| | | // { icon: new URL('../../assets/image/assets-center/AddPaymentMethod.png', import.meta.url), title: t('AddPaymentMethod'), path: '/payMentMethod/list' }, |
| | | { icon: new URL('../../assets/image/assets-center/help.png', import.meta.url), title: t('帮助中心'), path: '/helpCenter' }, |
| | | // { icon: new URL('../../assets/image/assets-center/help.png', import.meta.url), title: t('帮助中心'), path: '/helpCenter' }, // 原帮助中心页面 |
| | | { icon: new URL('../../assets/image/assets-center/help.png', import.meta.url), title: t('帮助中心'), path: '/aboutUs?serviceTerm=27' }, // 现跳转关于我们通过后台编辑获取的页面 |
| | | ] |
| | | } |
| | | ] |
| | |
| | | <div class="flex step mt-5"> |
| | | <img class="success mr-1" src="@/assets/image/order/success.png" alt="" /> |
| | | <!-- {{ $t('Payconfidence') }} --> |
| | | {{ payInfo.direction == 'recharge' ? $t('买家') : $t('卖家') }} {{ payInfo.currency }} {{ $t('已存入交易所账户,请放心付款') }} |
| | | {{ payInfo.direction == 'recharge' ? $t('买家') : $t('卖家') }} {{ payInfo.currency }} {{ $t('已存入交易所账户,请放心付款') |
| | | }} |
| | | </div> |
| | | <div class="flex mt-5"> |
| | | <div class="flex step flex-1"> |
| | |
| | | showToast |
| | | } from 'vant'; |
| | | import useClipboard from "vue-clipboard3"; |
| | | import { customerServiceUrl } from '@/config' |
| | | import { useI18n } from "vue-i18n"; |
| | | const { toClipboard } = useClipboard(); |
| | | const { t } = useI18n() |
| | |
| | | const showPopup = ref(false) |
| | | const orderNo = ref(null) |
| | | const onRoute = () => { |
| | | // router.push('/order/success') |
| | | if (customerServiceUrl) { |
| | | window.location.href = customerServiceUrl; |
| | | } else { |
| | | router.push('/customerService?order_no=' + orderNo.value) |
| | | } |
| | | } |
| | | const onClickLeft = () => { |
| | | // router.push('/exchange/channel-in') |
| | | router.go(-1) |
| | |
| | | <img v-show="agree" src="../../assets/image/login/prot2.png" alt="" /> |
| | | <img v-show="!agree" src="../../assets/image/login/prot1.png" alt="" /> |
| | | </i> |
| | | {{ $t('readAgree') }}<span class="colorMain" @click="router.push('/TermsOfService')">{{ |
| | | <!-- {{ $t('readAgree') }}<span class="colorMain" @click="router.push('/TermsOfService')">{{ |
| | | $t('serviceConf') |
| | | }}</span> --> |
| | | {{ $t('readAgree') }}<span class="colorMain" @click="router.push('/aboutUs?serviceTerm=23')">{{ |
| | | $t('serviceConf') |
| | | }}</span> |
| | | </div> |
| | |
| | | name: t('resetFundsPassword'), |
| | | type: 0 |
| | | }, |
| | | { |
| | | name: t('resetPhone'), |
| | | type: 1 |
| | | }, |
| | | { |
| | | name: t('resetEmail'), |
| | | type: 2 |
| | | }, |
| | | { |
| | | name: t('resetGoogleVerify'), |
| | | type: 3 |
| | | }, |
| | | // { |
| | | // name: t('resetPhone'), |
| | | // type: 1 |
| | | // }, |
| | | // { |
| | | // name: t('resetEmail'), |
| | | // type: 2 |
| | | // }, |
| | | // { |
| | | // name: t('resetGoogleVerify'), |
| | | // type: 3 |
| | | // }, |
| | | ]) |
| | | const frontFile = ref([]) |
| | | const reverseFile = ref([]) |
| | |
| | | { |
| | | name: t('manualReset'), |
| | | url: "/resetVerify?type=0" |
| | | } |
| | | }, |
| | | { |
| | | name: `${t('resetPhone')}/${t('resetEmail')}`, |
| | | url: "/resetPhoneEmail" |
| | | }, |
| | | ]) |
| | | |
| | | onMounted(() => { |
| New file |
| | |
| | | <template> |
| | | <div class="register"> |
| | | <div class="top flex justify-between items-center"> |
| | | <img src="../../assets/image/icon-close.png" alt="" @click="router.go(-1)"> |
| | | <div @click="onRoute('/customerService')">{{ $t('onLineService') }}</div> |
| | | </div> |
| | | <div class="title textColor">{{ $t('重置') }}</div> |
| | | <div class="flex re-tab"> |
| | | <!-- <div class="textColor1" :class="activeIndex == 0 ? 'active' : ''" @click="changeIndex(0)">{{ |
| | | $t('account') |
| | | }}</div> --> |
| | | <div class="textColor1" :class="activeIndex == 1 ? 'active' : ''" @click="changeIndex(1)"> |
| | | {{ $t('email') }} |
| | | </div> |
| | | <div class="textColor1" :class="activeIndex == 2 ? 'active' : ''" @click="changeIndex(2)"> |
| | | {{ $t('phoneNum') }} |
| | | </div> |
| | | </div> |
| | | <ExInput :label="getRegType(activeIndex, true)" :placeholderText="getRegType(activeIndex, false)" |
| | | v-model="username" :area="isArea" :dialCode="dialCode" @selectArea="onSelectArea" :icon="icon" /> |
| | | |
| | | <ExInput :label="$t('repassword')" :placeholderText="$t('请输入')" v-model="password" |
| | | typeText="password" /> |
| | | <!-- <ExInput :label="$t('repassword')" :placeholderText="$t('surePassword')" v-model="repassword" |
| | | typeText="password" /> --> |
| | | <ExInput :label="$t('fundsPassword')" :placeholderText="$t('请输入')" v-model="safeword" typeText="password" |
| | | v-if="activeIndex === 1 || activeIndex === 2" /> |
| | | <div class="inputCom" v-if="activeIndex === 1 || activeIndex === 2"> |
| | | <p class="label textColor">{{ $t('验证码') }}</p> |
| | | <div class="iptbox inputBackground"> |
| | | <input class="inputBackground textColor" type="text" :placeholder="$t('entryVerifyCode')" |
| | | v-model="verifyCode"> |
| | | <span v-if="type !== 3" @click="senCode">{{ $t('sendVerifyCode') }} |
| | | <template v-if="time">({{ time }})s</template> |
| | | </span> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- <ExInput :label="$t('金融机构代码')" :placeholderText="$t('请输入')" v-model="invitCode" :clearBtn="false" /> --> |
| | | |
| | | <div class="protocol textColor"> |
| | | <i @click="agreeProt"> |
| | | <img v-show="agree" src="../../assets/image/login/prot2.png" alt="" /> |
| | | <img v-show="!agree" src="../../assets/image/login/prot1.png" alt="" /> |
| | | </i> |
| | | <!-- {{ $t('readAgree') }}<span class="colorMain" @click="router.push('/TermsOfService')">{{ |
| | | $t('serviceConf') |
| | | }}</span> --> |
| | | {{ $t('readAgree') }}<span class="colorMain" @click="router.push('/aboutUs?serviceTerm=23')">{{ |
| | | $t('serviceConf') |
| | | }}</span> |
| | | </div> |
| | | <van-button class="w-full" style="margin-top:10px;" type="primary" @click="register">{{ $t('confirm') }} |
| | | </van-button> |
| | | <!-- <div class="noTips textColor">{{ $t('hasAccount') }}<span class="colorMain" @click="router.push('/login')"> |
| | | {{ $t('goLogin') }}</span> |
| | | </div> --> |
| | | <nationality-list ref='controlChildRef' :title="$t('selectArea')" @getName="getName"></nationality-list> |
| | | |
| | | <Vcode :imgs="[img1, img2]" :show="show" @success="onSuccess" :canvasHeight="200" @fail="onFail" |
| | | @close="show = false;" sliderText='' :successText="$t('vertifyPass')" :failText="$t('vertifuFail')" /> |
| | | |
| | | <div>{{ msg }}</div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import ExInput from "@/components/ex-input/index.vue"; |
| | | import { _registerUser, _sendVerifyCode } from "@/service/login.api"; |
| | | import { _bindEmailRegister, _registerEorP } from "@/service/user.api.js"; |
| | | import { useUserStore } from '@/store/user'; |
| | | import { GET_USERINFO } from '@/store/types.store' |
| | | import nationalityList from '../authentication/components/nationalityList.vue' |
| | | import Vcode from "vue3-puzzle-vcode"; |
| | | import img1 from "@/assets/image/slider/1.png"; |
| | | import img2 from "@/assets/image/slider/2.png"; |
| | | import { getStorage } from '@/utils/index' |
| | | import { useI18n } from 'vue-i18n' |
| | | import { customerServiceUrl } from "@/config"; |
| | | import { useRouter } from 'vue-router'; |
| | | import { ref, onMounted, reactive, onUnmounted } from 'vue'; |
| | | import { showToast } from "vant"; |
| | | import store from '@/store/store' |
| | | const customer_service_url = ref(customerServiceUrl) // 客服链接,有值的话就会跳转到客服外链 |
| | | const { t } = useI18n() |
| | | const router = useRouter() |
| | | const onRoute = (path) => { |
| | | if (path == 'back') { |
| | | router.go(-1) |
| | | } else { |
| | | if (path == '/customerService') { |
| | | if (customer_service_url.value) { |
| | | window.location.href = customer_service_url.value; |
| | | } else { |
| | | router.push(path) |
| | | } |
| | | } else { |
| | | router.push(path) |
| | | } |
| | | } |
| | | } |
| | | const userStore = useUserStore(); |
| | | |
| | | let show = ref(false) |
| | | const msg = ref('') |
| | | const type = ref(1) |
| | | const time = ref(0) |
| | | let agree = ref(false) |
| | | const username = ref('') |
| | | const password = ref('') |
| | | const repassword = ref('') |
| | | const verifyCode = ref('') |
| | | const safeword = ref('') |
| | | const fundPassword = ref('') |
| | | const refundPassword = ref('') |
| | | const activeIndex = ref(1) |
| | | const typeText = ref('password') |
| | | let isArea = ref(false) |
| | | let dialCode = ref(0) |
| | | let icon = ref('') |
| | | const state = reactive({ |
| | | timer: null |
| | | }) |
| | | |
| | | let invitCode = ref('') |
| | | onMounted(() => { |
| | | console.log(store) |
| | | let usercode = getStorage('usercode') |
| | | if (usercode) { |
| | | invitCode = usercode; |
| | | } |
| | | clearInterval(state.timer) |
| | | state.timer = null |
| | | }) |
| | | |
| | | onUnmounted(() => { |
| | | clearInterval(state.timer) |
| | | state.timer = null |
| | | }) |
| | | |
| | | const getRegType = (activeIndex, bFlag) => { |
| | | switch (activeIndex) { |
| | | case 0: |
| | | return bFlag ? t('account') : t('entryAccount'); |
| | | case 1: |
| | | return bFlag ? t('email') : t('entryEmail'); |
| | | case 2: |
| | | return bFlag ? t('phoneNum') : t('entryPhone'); |
| | | } |
| | | } |
| | | |
| | | const senCode = () => { |
| | | if (time.value > 0) { |
| | | return false |
| | | } |
| | | _sendVerifyCode({ |
| | | target: activeIndex.value === 1 ? username.value : dialCode.value + username.value, |
| | | }).then((res) => { |
| | | time.value = 30; |
| | | state.timer = setInterval(() => { |
| | | if (time.value > 0) { |
| | | time.value = time.value - 1 |
| | | } else { |
| | | time.value = 0; |
| | | clearInterval(state.timer) |
| | | state.timer = null |
| | | } |
| | | }, 1000); |
| | | }).catch((error) => { |
| | | showToast(t(error.msg)); |
| | | }); |
| | | } |
| | | |
| | | const onSuccess = () => { |
| | | console.log('onSuccess') |
| | | registerApi(); |
| | | show.value = false; |
| | | } |
| | | const onFail = () => { |
| | | msg.value = '' |
| | | } |
| | | const onRefresh = () => { |
| | | msg.value = '' |
| | | } |
| | | |
| | | const controlChildRef = ref(null) |
| | | const onSelectArea = () => { |
| | | controlChildRef.value.open(); |
| | | } |
| | | |
| | | const getName = (params) => { |
| | | icon.value = params.code; |
| | | dialCode.value = params.dialCode; |
| | | } |
| | | const agreeProt = () => { |
| | | agree.value = !agree.value |
| | | } |
| | | const register = () => { |
| | | console.log(activeIndex.value, 'activeIndex.value') |
| | | if (activeIndex.value == 0) { |
| | | if (username.value == '') { |
| | | showToast(t('entryAccount')); |
| | | return |
| | | } |
| | | if (username.value.length < 6 || username.value.length > 30) { |
| | | showToast(t('accountLength')); |
| | | return |
| | | } |
| | | } else if (activeIndex.value == 1) { |
| | | let match = username.value.search(/@/); |
| | | if (username.value == '' || match.value == -1) { |
| | | showToast(t('entryCorrectEmail')); |
| | | return |
| | | } |
| | | if (safeword.value == '') { |
| | | showToast(t('safewordTips')); |
| | | return |
| | | } |
| | | if (verifyCode.value.length < 6) { |
| | | showToast(t('entryVerifyTips')); |
| | | return |
| | | } |
| | | } else if (activeIndex.value == 2) { |
| | | if (!(/(^[1-9]\d*$)/.test(username.value))) { |
| | | showToast(t('entryPhone')); |
| | | return |
| | | } |
| | | if (username.value == '') { |
| | | showToast(t('entryPhone')); |
| | | return |
| | | } |
| | | } |
| | | if (password.value == '') { |
| | | showToast(t('entryPassword')); |
| | | return |
| | | } |
| | | if (password.value.length < 6) { |
| | | showToast(t('passwordTips')); |
| | | return |
| | | } |
| | | // if (repassword.value !== password.value) { |
| | | // showToast(t('noSamePassword')); |
| | | // return |
| | | // } |
| | | if (!agree.value) { |
| | | showToast(t('agreeServiceCond')); |
| | | return |
| | | } |
| | | show.value = true |
| | | } |
| | | const changeIndex = (index) => { |
| | | activeIndex.value = index; |
| | | if (index == 0 || index == 1) { |
| | | isArea.value = false |
| | | } else { |
| | | isArea.value = true |
| | | } |
| | | } |
| | | const registerApi = () => { |
| | | switch (activeIndex.value) { |
| | | case 0: |
| | | { |
| | | type.value = 3; |
| | | break; |
| | | } |
| | | case 1: |
| | | { |
| | | type.value = 2; |
| | | break; |
| | | } |
| | | case 2: |
| | | { |
| | | type.value = 1; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | _registerEorP({ |
| | | username: activeIndex.value === 1 ? username.value : dialCode.value + username.value, |
| | | password: password.value, |
| | | type: activeIndex.value === 1 ? '2' : '1', // 2邮箱,1手机 |
| | | verifcode: verifyCode.value, |
| | | safeword: safeword.value |
| | | }).then((res) => { |
| | | userStore[GET_USERINFO](res) |
| | | store.state.user.userInfo = res |
| | | // 其他操作?? |
| | | // router.push('/identity') |
| | | router.push('/login') |
| | | }) |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .activeBKClick { |
| | | &:active { |
| | | background: $tab_background; |
| | | opacity: 0.5; |
| | | } |
| | | } |
| | | |
| | | .activeClick { |
| | | &:active { |
| | | background: $mainbgWhiteColor; |
| | | opacity: 0.5; |
| | | } |
| | | } |
| | | |
| | | .register { |
| | | width: 100%; |
| | | box-sizing: border-box; |
| | | padding: 16px; |
| | | font-size: 13px; |
| | | background-color: $mainbgWhiteColor; |
| | | } |
| | | |
| | | .top { |
| | | padding-left: 9px; |
| | | padding-top: 9px; |
| | | |
| | | img { |
| | | width: 18px; |
| | | height: 18px; |
| | | } |
| | | } |
| | | |
| | | .title { |
| | | font-weight: 700; |
| | | font-size: 26px; |
| | | margin-top: 27px; |
| | | margin-bottom: 33px; |
| | | } |
| | | |
| | | .re-tab { |
| | | margin-bottom: 22px; |
| | | |
| | | div { |
| | | padding: 0 18px; |
| | | height: 34px; |
| | | line-height: 34px; |
| | | text-align: center; |
| | | border-radius: 4px; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .active { |
| | | // background: $US_tabActice_background; |
| | | background: $bg_yellow; |
| | | // color: $color_main; |
| | | color: $text_color4; |
| | | } |
| | | } |
| | | |
| | | .forget { |
| | | color: $color_main; |
| | | font-size: 12px; |
| | | line-height: 14px; |
| | | } |
| | | |
| | | .noTips { |
| | | margin-top: 24px; |
| | | } |
| | | |
| | | .protocol { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 15px; |
| | | |
| | | i { |
| | | width: 15px; |
| | | height: 15px; |
| | | margin-right: 9px; |
| | | |
| | | img { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .iptbox { |
| | | height: 44px; |
| | | margin-top: 8px; |
| | | margin-bottom: 18px; |
| | | padding: 0 20px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | border-radius: 6px; |
| | | |
| | | input { |
| | | flex: 1; |
| | | height: 100%; |
| | | border: none; |
| | | } |
| | | |
| | | span { |
| | | color: $color_main; |
| | | } |
| | | } |
| | | </style> |