| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <template>
- <view class="d-flex flex-col page-otc" @click="menu = false">
- <v-header :left-arrow="false" title="OTC" :left-click="leftClick">
- <template #left>
- <v-link to="/pages/otc/send-ad">{{$t('otc.a0')}}</v-link>
- </template>
- <template #right>
- <view @click.stop="menu = !menu">{{$t('otc.a1')}}</view>
- </template>
- </v-header>
- <view class="d-flex border">
- <view class="w-6/12 border-r p-x-md p-y-xs box-size color-light">
- <v-picker :list="coinList" v-model="virtual_coin" @input="changeCoin">
- {{$t('otc.a2')}}:{{ activeCoin.label }}
- <van-icon name="arrow-down" />
- </v-picker>
- </view>
- </view>
- <!-- menu -->
- <view
- class="menu rounded-xs bg-panel-4 box-shadow"
- v-show="menu"
- @click.stop
- >
- <view @click="_router.push('/pages/otc/order')" class="p-xs border-b">
- {{$t('otc.a3')}}
- </view>
- <view @click="_router.push('/pages/otc/ad')" class="p-xs">
- {{$t('otc.a4')}}
- </view>
- </view>
- <van-tabs
- :ellipsis="false"
- :border="false"
- class="border-b"
- :active="tab"
- @change="tabChange($event.detail.name)"
- >
- <van-tab :title="$t('otc.a5')" :name="2"></van-tab>
- <van-tab :title="$t('otc.a6')" :name="1"></van-tab>
- </van-tabs>
- <v-paging
- :ajax="tradingEntrusts"
- :data="{ side: tab, virtual_coin, pay_type: 'all' }"
- ref="scroll"
- class="layout-main"
- >
- <template #box="list">
- <van-empty v-if="!$list(list).length" description="" />
- <view class="list">
- <view
- class="item bg-panel-3 box-shadow rounded-sm p-md m-md"
- v-for="item in $list(list)"
- :key="item.id"
- >
- <view class="row d-flex align-center">
- <view
- class="w-50 h-50 border rounded-max border-light bg-primary color-plain d-flex justify-center align-center fn-30"
- >
- {{ userName(item.user.username) }}
- </view>
- <view class="flex-fill fn-right"> {{ item.user.username }} </view>
- </view>
- <view class="row m-t-sm d-flex align-center">
- <view class="label"> {{$t('otc.a7')}} </view>
- <view class="flex-fill fn-right color-light">
- {{ item.amount }}
- </view>
- </view>
- <view class="row m-t-sm d-flex align-center">
- <view class="label"> {{$t('otc.a8')}} </view>
- <view class="flex-fill fn-right color-light">
- {{ item.cur_amount }}
- </view>
- </view>
- <view class="row m-t-sm d-flex align-center">
- <view class="label"> {{$t('otc.a9')}} </view>
- <view class="flex-fill fn-right color-light">
- {{ item.min_num * 1 }} - {{ item.max_num * 1 || "∞" }}
- </view>
- </view>
- <view class="row m-t-sm d-flex align-center">
- <view class="label"> {{$t('otc.b0')}} </view>
- <view class="flex-fill fn-right color-light">
- {{ item.price * 1 }} CNY
- </view>
- </view>
- <view class="row m-t-sm d-flex align-center">
- <view class="label"> {{$t('otc.b1')}} </view>
- <view class="flex-fill fn-right color-light">
- <template v-for="minItem in item.pay_type">
- {{ payTypeMap[minItem] }},
- </template>
- </view>
- </view>
- <view class="row m-t-sm d-flex align-center">
- <view class="label"> {{$t('otc.b2')}} </view>
- <view class="flex-fill fn-right color-light">
- <v-button
- type="green"
- size="mini"
- class="rounded-xs"
- @click="clickItem(item)"
- >
- {{ item.side == 2 ? $t('otc.a5') : $t('otc.a6') }}
- </v-button>
- </view>
- </view>
- </view>
- </view>
- </template>
- </v-paging>
- <van-popup
- :show="buyShow"
- @close="buyShow = false"
- closeable
- close-on-popstate
- position="center"
- custom-style="height:70%;width:70%;border-radius:8px;"
- >
- <view class="p-md">
- <view class="fn-center color-light"> {{ activeItem.side == 2 ? $t('otc.a5') : $t('otc.a6') }} </view>
- <view
- class="m-x-auto m-t-sm w-50 h-50 border rounded-max border-light bg-primary color-plain d-flex justify-center align-center fn-30"
- >
- {{userName(activeItem.user&&activeItem.user.username||'')}}
- </view>
- <view class="fn-center"> {{activeItem.user.username}} </view>
- <view class="row d-flex m-t-sm">
- <view class="label">{{$t('otc.b3')}}</view>
- <view class="color-light flex-fill fn-right">{{ activeItem.amount }}</view>
- </view>
- <view class="row d-flex m-t-sm">
- <view class="label">{{$t('otc.a8')}}</view>
- <view class="color-light flex-fill fn-right">{{ activeItem.cur_amount }}</view>
- </view>
- <view class="row d-flex m-t-sm">
- <view class="label">{{$t('otc.a9')}}</view>
- <view class="color-light flex-fill fn-right">{{ activeItem.min_num * 1 }} - {{
- activeItem.max_num * 1||'∞'
- }}</view>
- </view>
- <view class="row d-flex m-t-sm">
- <view class="label">{{$t('otc.b0')}}</view>
- <view class="color-light flex-fill fn-right">{{ activeItem.price * 1 }}CNY</view>
- </view>
- <view>
- <v-picker :list="paysList" v-model="form.pay_type">
- <template #default="{label}">
- <view class="p-xs rounded-xs bg-panel-1 m-t-sm d-flex align-center box-shadow">
- <view class="flex-fill">
- {{label||$t('otc.b4')}}
- </view>
- <van-icon name="arrow-down" />
- </view>
- </template>
- </v-picker>
- </view>
- <view>
- <v-input
- :placeholder="$t('otc.b5')"
- class="p-xs rounded-xs bg-panel-1 m-t-sm box-shadow"
- type="number"
- v-model="form.amount"
- ></v-input>
- </view>
- <view class="m-t-sm">
- <v-button
- type="green"
- block
- size="small"
- class="rounded-xs"
- @click="storeOrder"
- >{{$t('otc.b6')}}</v-button>
- </view>
- </view>
- </van-popup>
- </view>
- </template>
- <script>
- import Otc from "@/api/otc";
- export default {
- name: "otc",
- props: ["isShow"],
- watch: {
- isShow() {
- this.menu = false;
- },
- },
- data() {
- return {
- tab: 2,
- buyShow: false,
- list: [],
- menu: false,
- virtual_coin: "USDT",
- coinList: [],
- activeItem: {
- user:{}
- },
- form: {
- entrust_id: "",
- amount: "",
- pay_type: "",
- },
- };
- },
- computed: {
- payTypeMap() {
- return {
- alipay: this.$t('otc.b7'),
- wechat: this.$t('otc.b8'),
- bank_card: this.$t('otc.b9'),
- };
- },
- activeCoin() {
- return (
- this.coinList.find((item) => item.value == this.virtual_coin) || {}
- );
- },
- paysList(){
- if(this.activeItem.pay_type){
- return this.activeItem.pay_type.map(item=>({value:item,label:this.payTypeMap[item]}))
- }else{
- return []
- }
- }
- },
- created() {
- this.otcTicker();
- },
- methods: {
- otcTicker() {
- Otc.otcTicker().then((res) => {
- this.coinList = res.data.map((item) => {
- return {
- value: item.coin_name,
- label: item.coin_name,
- };
- });
- });
- },
- tradingEntrusts: Otc.tradingEntrusts,
- userName(name) {
- return name.substring(0, 1);
- },
- changeCoin() {
- this.$nextTick(() => {
- this.$refs.scroll.ref();
- });
- },
- // tab切换
- tabChange(idx) {
- this.tab = idx;
- this.$nextTick(() => {
- this.$refs.scroll.ref();
- });
- },
- clickItem(item) {
- this.activeItem = item;
- this.form.entrust_id = this.activeItem.id;
- this.form.pay_type = this.activeItem.pay_type[0];
- this.buyShow = true;
- },
- // 下单
- storeOrder() {
- let data = {
- ...this.form,
- };
- Otc.storeOrder(data).then((res) => {
- this.$toast(this.$t('otc.c0'));
- this.buyShow = false;
- this.form.amount=''
- // this.$router.push({ path: "/pages/otc/detail", query: { id: res.data.id } });
- uni.navigateTo({
- url:"/pages/otc/detail?id=" + res.data.id
- })
- });
- },
- leftClick() {},
- },
- };
- </script>
- <style lang="scss" scoped>
- .page-otc {
- position: relative;
- .menu {
- position: absolute;
- z-index: 999;
- top: calc(44px + var(--status-bar-height));
- right: $padding-md;
- }
- }
- </style>
|