lxf
2025-07-11 fd66f3c47027795370f363d74f2258491dd38542
src/components/Transform/perpetual-open/index.vue
@@ -1,7 +1,7 @@
<template>
  <!-- 永续合约开仓页 -->
  <div id="cryptos">
    <div class="perpetual-open">
    <div class="perpetual-open" style="width: 280px;">
      <div class="flex pt-34  ">
        <div class="w-180 h-60 lh-60 text-center rounded tabBackground textColor">{{ $t('全仓') }} </div>
        <div class="w-140 h-60 lh-60 ml-29 rounded tabBackground textColor" v-if="selectIndex / 1 === 1">
@@ -21,7 +21,7 @@
      </div>
      <div class="pt-30 pb-20">
        <div class="flex">
          <div class="w-440 flex flex-col" :style="selectIndex==2 ? 'width:100%' : ''">
          <div class=" flex flex-col">
            <template v-if="selectIndex == 1">
              <div class="flex items-center h-66 rounded-lg text-grey">
                <p class="font-28 flex-1 flex items-center justify-center h-66 "
@@ -45,42 +45,42 @@
                </div>
              </div>
            </template>
            <contract-futrue v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'" class="mb-20"
            <contract-futrue v-if="selectIndex == 2" class="mb-20"
              :initFutrue="initFutrue" @paraId="onParaId" />
            <div class="h-76 lh-76 greyBg mb-30 flex pr-20 justify-center rounded-lg textColor" v-if="selectIndex == 1">
              <input placeholder="" class=" w-full pl-20  h-76 border-none text-left rounded-lg"
              <input placeholder="" class="greyBg w-full pl-20  h-76 border-none text-left rounded-lg"
                :disabled="type / 1 === 1" @focus="focus = true" v-model="form.price" />
              <span class="ml-20">{{ queryType === 'cryptos' ? 'USDT' : 'USD' }}</span>
            </div>
            <div class="w-440 flex items-center  h-76 lh-76 rounded-lg" v-if="initFutrue" >
              <div v-if="selectIndex == 1 && initFutrue.para && initFutrue.para.length > 0"
            <div class=" flex items-center greyBg h-76 lh-76 rounded-lg" style="background-color:#f5f5f5;" v-if="initFutrue" >
              <!-- <div v-if="selectIndex == 1 && initFutrue.para && initFutrue.para.length > 0"
                class="w-80 flex items-center justify-center" style="height:100%;" @click="onReduce">
                <img src="../../../assets/image/public/reduce.png" alt="add" class="w-30 h-6" />
              </div>
              <input v-if="selectIndex == 1" :placeholder="$t('张数')" class="border-none  text-center textColor"
                style="width: 156px;" v-model="form.amount" type="number" @input="onInput" />
              </div> -->
              <!-- <input v-if="selectIndex == 1" :placeholder="$t('张数')" class="border-none greyBg text-center textColor"
                style="width: 156px;" v-model="form.amount" type="number" @input="onInput" /> -->
              <input v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'"
                :placeholder="($t('最少') + initFutrue && initFutrue.para ? $t('最小金额') + initFutrue.para[paraIndex].buy_min : '')"
                class="border-none  text-center ipt_min" style="width: 156px;background-color: #f0f0f0;" v-model="form.amount" type="number"
                class="border-none greyBg text-center textColor" style="width: 226px;background-color:#f5f5f5;" v-model="form.amount" type="number"
                @input="onInput" />
              <div class="w-80 flex items-center justify-center" style="height:100%;">
              <div class="w-80 flex items-center justify-center" style="height:100%;background-color:#f5f5f5;">
                <template v-if="selectIndex == 1">
                  <img @click="onAdd" src="../../../assets/image/public/add.png" alt="reduce" class="w-30 h-30" />
                </template>
                <template v-else>
                  <span class="text-grey">{{ queryType === 'cryptos' ? 'USDT' : 'USD' }}</span>
                  <span class="textColor">{{ queryType === 'cryptos' ? 'USDT' : 'USD' }}</span>
                </template>
              </div>
            </div>
            <template v-if="selectIndex == 1">
              <div class="mt-40 mb-30 w-full flex justify-between items-center">
              <!-- <div class="mt-40 mb-30 w-full flex justify-between items-center">
                <span class="font-22 font-400 text-grey">{{ $t("可开张数") }}</span>
                <span class="font-22 font-400 textColor">
                  {{ initData.volume }}
                  {{ initData.volume || 0}}
                  {{ $t("张") }}
                </span>
              </div>
              </div> -->
              <!-- <vue-slider v-bind="options" v-model="form.amount"></vue-slider> -->
              <!-- <vue-slider class="mainBox" v-bind="options" :marks="marks" v-model="form.volume" :hide-label="true"  width="90%"
              :railStyle="{ background: '#404040', height: '4px' }"
@@ -124,6 +124,7 @@
              <div>{{ $t("可用USDT") }}</div>
              <div class="textColor">{{ initFutrue.amount }} {{ queryType === 'cryptos' ? 'USDT' : 'USD' }}</div>
            </div>
            <!-- {{JSON.stringify(initFutrue.para) != '[]'}} {{JSON.stringify(initFutrue.para)}} -->
            <div class="flex font-24 text-grey justify-between mt-20"
              v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'">
              <div>{{ $t("手续费") }}</div>
@@ -131,7 +132,7 @@
                {{
                  (
                    form.amount *
                    (initFutrue && initFutrue.para
                    (initFutrue?.para.length>0
                      ? initData.para[paraIndex].unit_fee
                      : "")
                  ).toFixed(2)
@@ -197,7 +198,7 @@
                @click="$router.push('/login')">{{ $t('logIn') }}</div>
            </div>
          </div>
          <div class="ml-30" v-if="!selectIndex==2">
          <!-- <div class="ml-30">
            <div class="w-290 flex justify-between text-grey font-22">
              <div>
                <div>{{ $t("价格") }}</div>
@@ -266,7 +267,6 @@
            <div class="flex k-select-box">
              <div class="mt-22 mb-22 select-box" style="position: relative">
                <div class="flex justify-between items-center w-full h-70" @click="selectArryBtn">
                  <!-- <img src="@/assets/image/public/warn.png" alt="warn-icon" class="w-25 h-25 pl-20"/> -->
                  <div class="pl-16 font-28 textColor" style="width: 80%">
                    {{ dataArrTitle }}
                  </div>
@@ -282,11 +282,11 @@
                <img src="../../../assets/image/selectIcon.png" alt="warn-icon" class="w-36 h-30 ml-10" />
              </div>
            </div>
          </div>
          </div> -->
        </div>
      </div>
      <van-popup v-model:show="show" class="rounded-2xl">
        <popup-delivery showBtns :detailData="detailData" :key="detailData.order_no" @close="onClose"
        <popup-delivery style="padding: 10px;" showBtns :detailData="detailData" :key="detailData.order_no" @close="onClose"
          @continueToBuy="continueTobuy" @timeEnd="handleTimeEnd" :price="price" />
      </van-popup>
      <van-action-sheet v-model:show="isSelectShow" @select="onSelect" :actions="actions" :cancel-text="$t('取消')"
@@ -436,27 +436,32 @@
    '$route'(val) {
      this.getHomeList(val.params.symbol);
    },
    initData(val) {
      if (val.lever.length > 0) {
        val.lever = val.lever.sort(this.orderListAsc('lever_rate'))
      }
    // initData(val) {
    //   if (val && val.lever && val.lever.length > 0) {
    //     val.lever = val.lever.sort(this.orderListAsc('lever_rate'))
    //   }
    }
    // }
  },
  computed: {
    ...mapGetters('user', ['userInfo']),
    ...mapGetters('home', ['currency']),
    initData() {
      let obj = null
      if (this.selectIndex / 1 === 1) {
        obj = this.initOpen
        if (!obj.lever || !obj.lever.length) { // 倍数
          obj.lever = [{ id: 1, lever_rate: 1 }]
        const obj = this.initOpen ? { ...this.initOpen } : { lever: [{ id: 1, lever_rate: 1 }] };
        if (!obj.lever || !Array.isArray(obj.lever) || !obj.lever.length) {
          obj.lever = [{ id: 1, lever_rate: 1 }];
        } else {
          obj.lever = [...obj.lever].sort(this.orderListAsc('lever_rate'));
        }
        return obj
        return obj;
      }
      return this.initFutrue
      // 交割合约
      if (this.initFutrue && Array.isArray(this.initFutrue.para) && this.initFutrue.para.length > 0) {
        return this.initFutrue;
      }
      // 返回一个默认对象,避免模板报错
      return {};
    },
    coudBuyVolume() { // 可买数量
      return Math.floor((this.initOpen.volume / 1) / this.form.lever_rate)
@@ -812,7 +817,9 @@
        if (this.selectIndex / 1 === 1) {
          this.$refs.sliderRef.emptyValue()
        }
        this.$emit('ordered', emitFunc)
        if (this.$emit) {
          // this.$emit('ordered', emitFunc)
        }
        _getBalance().then(data => { // 刷新余额
          this.$store.commit('user/SET_USERINFO', { balance: data.money })
        })
@@ -965,9 +972,11 @@
    right: 0;
    top: 90px;
    width: 100%;
    background-color: $grey_bg;
    background-color: #f5f5f5;
    box-shadow: 0px 0px 0.1875rem 0.1875rem #f5f5f5;
    // background-color: $grey_bg;
    text-align: center;
    box-shadow: 0px 0px 3px 3px $grey_bg;
    // box-shadow: 0px 0px 3px 3px $grey_bg;
    border-radius: 4px;
    color: $text-color;
    z-index: 10;
@@ -1044,21 +1053,22 @@
  justify-content: flex-end;
  // padding-right: 40px;
  align-items: center;
s
  .select-box {
    width: 220px;
    background: #1E1E1E;
    background: #f5f5f5;
    margin-right: 20px;
  }
}
.diviLine{
  background-color: #f5f5f5;
}
.textColor2, .textColor{
  color: #fff;
}
.deep-div {
  min-height: 370px;
}
#cryptos .ipt_min::placeholder {
  color: #868C9A;
}
</style>