From 7fc6bfe900790ec7c92bce85d5b20a95fbc06e65 Mon Sep 17 00:00:00 2001
From: 李凌 <344137771@qq.com>
Date: Wed, 15 Oct 2025 10:29:30 +0800
Subject: [PATCH] 其他人改的版本

---
 src/components/Transform/perpetual-open/index.vue |  565 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 356 insertions(+), 209 deletions(-)

diff --git a/src/components/Transform/perpetual-open/index.vue b/src/components/Transform/perpetual-open/index.vue
index 3604a08..7875660 100644
--- a/src/components/Transform/perpetual-open/index.vue
+++ b/src/components/Transform/perpetual-open/index.vue
@@ -6,13 +6,13 @@
 
         <div class="w-180 h-60 lh-60 rounded tabBackground textColor" v-if="selectIndex / 1 === 1">
           <div @click="locationShow = !locationShow" style="height:100%; box-sizing: border-box"
-            class="relative word-30 pl-28 pr-10 w-180 h-60 tabBackground select-wrap flex justify-between items-center">
+               class="relative word-30 pl-28 pr-10 w-180 h-60 tabBackground select-wrap flex justify-between items-center">
             {{ locationTitle }}
-            <img src="../../../assets/image/public/grey-select.png" alt="select-icon" class="w-22 h-11" />
+            <img src="../../../assets/image/public/grey-select.png" alt="select-icon" class="w-22 h-11"/>
             <div v-if="locationShow" class="options tabBackground w-180 absolute top-97 left-0 z-10">
               <div class="w-full" @click.stop="locationSelect(item)"
-                :class="{ 'option-active': form.lever_rate === item.lever_rate }" :value="item.lever_rate"
-                v-for="item in locationList" :key="item.type">
+                   :class="{ 'option-active': form.lever_rate === item.lever_rate }" :value="item.lever_rate"
+                   v-for="item in locationList" :key="item.type">
                 {{ item.title }}
               </div>
             </div>
@@ -21,13 +21,13 @@
 
         <div class="w-140 h-60 lh-60 ml-29 rounded tabBackground textColor" v-if="selectIndex / 1 === 1">
           <div @click="showOptions = !showOptions" style="height:100%; box-sizing: border-box"
-            class="relative word-30 pl-28 pr-10 w-140 h-60 tabBackground select-wrap flex justify-between items-center">
+               class="relative word-30 pl-28 pr-10 w-140 h-60 tabBackground select-wrap flex justify-between items-center">
             {{ form.lever_rate }}x <img src="../../../assets/image/public/grey-select.png" alt="select-icon"
-              class="w-22 h-11" />
+                                        class="w-22 h-11"/>
             <div v-if="showOptions" class="options tabBackground w-140 absolute top-97 left-0 z-10">
               <div class="w-full" @click.stop="handleChoose(item)"
-                :class="{ 'option-active': form.lever_rate === item.lever_rate }" :value="item.lever_rate"
-                v-for="item in initData.lever" :key="item.id">
+                   :class="{ 'option-active': form.lever_rate === item.lever_rate }" :value="item.lever_rate"
+                   v-for="item in initData.lever" :key="item.id">
                 {{ item.lever_rate }}x
               </div>
             </div>
@@ -36,58 +36,176 @@
       </div>
       <div class="pt-30 pb-20">
         <div class="flex justify-between">
-          <div class="w-440 flex flex-col">
+          <div>
+            <div class="w-290 flex justify-between text-grey font-22">
+              <div>
+                <div>{{ $t("价格") }}</div>
+                <div class="mt-4">{{ queryType === 'cryptos' ? '(USDT)' : '(USD)' }}</div>
+              </div>
+              <div class="text-right items-end justify-end">
+                <div class="">{{ $t("数量") }}</div>
+                <div class="mt-4">{{
+                    queryType === 'cryptos' ?
+                        `(${symbol_data.toUpperCase() || "--"})` : '(USD)'
+                  }}
+                </div>
+              </div>
+            </div>
+            <div class="deep-div">
+              <!-- <div v-if="showType == 0 || showType == 2" class="w-290 flex justify-between pt-1  font-26"
+                v-for="(item, index) in redData" :key="item + index" @click="onQuickPrice(item.price)" :style="{
+                  background:
+                    `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
+                    } 0%` +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(246,70,93,.1) ' +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(246,70,93,.1) 100%)',
+                }"> -->
+
+              <div v-show="(showType == 0 || showType == 2)" class="w-290 flex justify-between pt-1 font-26"
+                   v-for="(item, index) in redData" :key="item + index" @click="onQuickPrice(item.price)" :style="{
+                  background:
+                    `linear-gradient(to right,${$store.state.vant.theme == 'dark' ? '#131A2E' : '#fff'
+                    } 0%` +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(246,70,93,.1) ' +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(246,70,93,.1) 100%)'
+                }">
+                <div class="text-red">{{ item.price }}</div>
+                <div class="text-right textColor" v-if="symbol == 'shib'">
+                  {{ fixDate(item.amount, $i18n) || "--" }}
+                </div>
+                <div class="text-right textColor" v-else>
+                  {{ item.amount || "--" }}
+                </div>
+              </div>
+            </div>
+            <div class="w-290 text-red pt-5 font-34 font-700 text-center">
+              {{ price || '--' }}
+            </div>
+            <div class="pb-5 font-20 text-center">
+              ≈ {{
+                ((price *
+                    currency.rate).toFixed(price.toString().split('.')[1] ?
+                    price.toString().split('.')[1].length : 2)) || '--'
+              }}
+            </div>
+            <div class="deep-div">
+              <!-- <div v-if="showType == 0 || showType == 1" class="w-290 flex justify-between pt-1 font-26"
+                v-for="(item, index) in greenData" :key="index" @click="onQuickPrice(item.price)" :style="{
+                  background:
+                    `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
+                    } 0%` +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(94,186,137,.1) ' +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(94,186,137,.1) 100%)',
+                }"> -->
+
+              <div v-if="showType == 0 || showType == 1" class="w-290 flex justify-between pt-1 font-26"
+                   v-for="(item, index) in greenData" :key="index" @click="onQuickPrice(item.price)" :style="{
+                  background:
+                    `linear-gradient(to right,${$store.state.vant.theme == 'dark' ? '#131A2E' : '#fff'
+                    } 0%` +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(94,186,137,.1) ' +
+                    (1 - item.amount / greenData[greenData.length - 1].amount) *
+                    100 +
+                    '%,rgba(94,186,137,.1) 100%)',
+                }">
+                <div class="text-green">{{ item.price }}</div>
+                <div class="text-right textColor" v-if="symbol_data == 'shib'">
+                  {{ fixDate(item.amount, $i18n) || "--" }}
+                </div>
+                <div class="text-right textColor" v-else>
+                  {{ item.amount || "--" }}
+                </div>
+
+              </div>
+            </div>
+            <div class="flex k-select-box">
+              <div class=" mb-22 select-box pl-5 pr-5" 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>
+                  <img src="../../../assets/image/public/grey-select.png" alt="select-icon" class="w-22 h-11 mr-10"/>
+                </div>
+                <div class="option-box" v-show="arryIsShow">
+                  <div class="font-28" v-for="(item, index) in selectDataArry" :key="index"
+                       @click="selectItemArry(item)">
+                    {{ item.name }}
+                  </div>
+                </div>
+              </div>
+              <div @click="isSelectShow = true">
+                <img src="../../../assets/image/selectIcon.png" alt="warn-icon" class="w-36 h-30 ml-10"/>
+              </div>
+            </div>
+          </div>
+          <div style="margin-left: 20px" class="w-440 flex flex-col">
             <template v-if="selectIndex == 1">
               <div class="flex items-center h-66 greyBg textColor">
                 <p class="font-28 flex-1 flex items-center justify-center h-66 "
-                  :class="currentType == 'long' ? 'long' : ''" @click="changeTab('long')">
+                   :class="currentType == 'long' ? 'long' : ''" @click="changeTab('long')">
                   {{ $t("开多") }}
                 </p>
                 <p class="font-28 flex-1 flex items-center justify-center h-66"
-                  :class="currentType == 'short' ? 'short' : ''" @click="changeTab('short')">
+                   :class="currentType == 'short' ? 'short' : ''" @click="changeTab('short')">
                   {{ $t("开空") }}
                 </p>
               </div>
               <div class="mt-22 mb-30" style="position:relative;">
                 <div class="greyBg flex justify-between items-center w-full h-76 greyBg textColor" @click="selectBtn">
-                  <img src="../../../assets/image/public/warn.png" alt="warn-icon" class="w-25 h-25 ml-20" />
+                  <img src="../../../assets/image/public/warn.png" alt="warn-icon" class="w-25 h-25 ml-20"/>
                   <div class="text-center" style="width:80%;">{{ title }}</div>
-                  <img src="../../../assets/image/public/grey-select.png" alt="select-icon" class="w-22 h-11 mr-20" />
+                  <img src="../../../assets/image/public/grey-select.png" alt="select-icon" class="w-22 h-11 mr-20"/>
                 </div>
                 <div class="option-box" v-show="isShow">
                   <div class="font-30" v-for="item in selectData" :key="item.type" @click="selectItem(item)">{{
-                    item.title
-                  }}</div>
+                      item.title
+                    }}
+                  </div>
                 </div>
               </div>
             </template>
             <contract-futrue v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'" class="mb-20"
-              :initFutrue="initFutrue" @paraId="onParaId" />
+                             :initFutrue="initFutrue" @paraId="onParaId"/>
             <div class="h-76 lh-76 greyBg mb-30 flex pr-20 justify-center greyBg textColor" v-if="selectIndex == 1">
               <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" />
+                     :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 h-76" v-if="selectIndex == 2"></div>
             <div class="w-440 flex items-center greyBg h-76 lh-76 pr-5 pl-5 greyBg" 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" />
+                   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="USDT" class="border-none greyBg text-center textColor"
-                style="width: 17rem;border-radius: 5rem;" v-model="form.amount" type="number" @input="onInput" />
+                     style="width: 17rem;border-radius: 5rem;" 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 greyBg text-center textColor" style="width: 17rem;border-radius: 5rem;"
-                v-model="form.amount" type="number" @input="onInput" />
+                     :placeholder="($t('最少') + initFutrue && initFutrue.para ? $t('最小金额') + initFutrue.para[paraIndex].buy_min : '')"
+                     class="border-none greyBg text-center textColor" style="width: 17rem;border-radius: 5rem;"
+                     v-model="form.amount" type="number" @input="onInput"/>
 
               <div v-else class="flex-1"></div>
 
               <div class="w-80 flex items-center justify-center" style="height:100%;">
                 <template v-if="selectIndex == 1">
-                  <img @click="onAdd" src="../../../assets/image/public/add.png" alt="reduce" class="w-30 h-30" />
+                  <img @click="onAdd" src="../../../assets/image/public/add.png" alt="reduce" class="w-30 h-30"/>
                 </template>
                 <template v-else>
                   <span class="textColor">{{ queryType === 'cryptos' ? 'USDT' : 'USD' }}</span>
@@ -122,9 +240,34 @@
               <!-- 张数输入 -->
               <!-- <amount-slider ref="sliderRef" :maxAmount="maxUSDT" @getAmount="getAmount"
                 :propsAmount="form.amount"></amount-slider> -->
-              <div class="btns_box">
-                <div :class="bfbindex == index ? 'btns_box_boxs' : 'btns_box_box'" @click="bfbclick(item, index)"
-                  v-for="(item, index) in bfblist" :key="index">{{ item.name }}%</div>
+              <!--              <div class="btns_box">-->
+              <!--                <div :class="bfbindex == index ? 'btns_box_boxs' : 'btns_box_box'" @click="bfbclick(item, index)"-->
+              <!--                  v-for="(item, index) in bfblist" :key="index">{{ item.name }}%</div>-->
+              <!--              </div>-->
+              <div style="margin: 0 10px">
+                <div @click="handleClick"
+                     @touchstart="handleTouchStart"
+                     @touchmove="handleTouchMove"
+                     @touchend="handleTouchEnd"   style="width: 100%;height:20px;position: relative" class="flex-centerY progress-bar">
+                  <div
+                      style="position: absolute;left: 0;width: 100%;height:2px;margin-top: 1px;border-radius: 90px;background: #f1f1f1">
+                    <div class="progress-in flex flex-position-end-to-start" :style="{width:progressRate+'%'}" >
+                      <div class="progress-icon"></div>
+                    </div>
+                  </div>
+                  <div v-for="(item, index) in bfblist" class="progress-i flex"
+                       :style="{flex:index==bfblist.length-1?0:1}"
+                       :class="{'flex-position-end-to-start':index==bfblist.length-1}">
+                    <div class="progress-icon1" @click.stop="bfbclick(parseInt(item.name))" ></div>
+                  </div>
+                </div>
+                <div style="width: 100%;position: relative;margin-top: 10px" class="flex-centerY">
+                  <div v-for="(item, index) in bfblist" @click="bfbclick(parseInt(item.name))" class="progress-i flex"
+                       :style="{flex:index==bfblist.length-1?0:1}"
+                       :class="{'flex-position-end-to-start':index==bfblist.length-1}">
+                    {{ item.name }}%
+                  </div>
+                </div>
               </div>
             </template>
             <template v-if="selectIndex == 1 && userInfo.token">
@@ -145,8 +288,10 @@
               </div> -->
               <div class="flex justify-between mt-30">
                 <div class="text-grey">{{ $t("建仓手续费") }}</div>
-                <div class="textColor">{{ reserve(userInfo.perpetual_contracts_status === '1' ?
-                  initData.fee * (form.amount / 1) : initData.fee * (form.amount / 1) * form.lever_rate, 6) }}
+                <div class="textColor">{{
+                    reserve(userInfo.perpetual_contracts_status === '1' ?
+                        initData.fee * (form.amount / 1) : initData.fee * (form.amount / 1) * form.lever_rate, 6)
+                  }}
                   {{ queryType === 'cryptos' ? 'USDT' : 'USD' }}
                 </div>
               </div>
@@ -157,15 +302,15 @@
               <div class="textColor">{{ initFutrue.amount }} USDT</div>
             </div>
             <div class="flex font-24 text-grey justify-between mt-20"
-              v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'">
+                 v-if="selectIndex == 2 && JSON.stringify(initFutrue.para) != '[]'">
               <div>{{ $t("手续费") }}</div>
               <div class="textColor">
                 {{
                   (
-                    form.amount *
-                    (initFutrue && initFutrue.para
-                      ? initData.para[paraIndex].unit_fee
-                      : "")
+                      form.amount *
+                      (initFutrue && initFutrue.para
+                          ? initData.para[paraIndex].unit_fee
+                          : "")
                   ).toFixed(2)
                 }}
                 {{ queryType === 'cryptos' ? 'USDT' : 'USD' }}
@@ -174,34 +319,34 @@
 
             <template v-if="userInfo.token">
               <template v-if="selectIndex == 1">
-                <div class="w-full h-80 lh-80 bg-green flex text-white mt-70" v-if="currentType == 'long'"
-                  @click="order('long')">
-                  <div class="font-34 relative text-center" style="flex-grow:1;" v-if="selectIndex == 1">
+                <div class=" flex-center text-white " style="margin-top: 10px" v-if="currentType == 'long'"
+                     @click="order('long')">
+                  <div class="long flex-center" style="flex-grow:1;padding: 20px" v-if="selectIndex == 1">
                     {{ $t('开多') }}
                     <!-- <span class="right-word font-22 text-center">{{
                       $t("看涨")
                       }}</span> -->
                   </div>
-                  <div class="font-34 relative text-center" style="flex-grow:1;" v-else>
+                  <div class="long flex-center" style="flex-grow:1;padding: 20px" v-else>
                     {{ $t('做多买入') }}
                   </div>
                 </div>
-                <div class="w-full h-80 lh-80 bg-red flex text-white mt-70" v-if="currentType == 'short'"
-                  @click="order('short')">
-                  <div class="relative font-34 text-center" style="flex-grow:1;" v-if="selectIndex == 1">
+                <div class="flex-center text-white " v-if="currentType == 'short'"
+                     @click="order('short')">
+                  <div class="short flex-center" style="flex-grow:1;padding: 20px" v-if="selectIndex == 1">
                     {{ $t('开空') }}
                     <!-- <span class="right-word font-22 text-center">{{
                       $t("看跌")
                       }}</span> -->
                   </div>
-                  <div class="relative font-34 text-center" style="flex-grow:1;" v-else>
+                  <div class="short flex-center" style="flex-grow:1;padding: 20px" v-else>
                     {{ $t('做空买入') }}
                   </div>
                 </div>
               </template>
               <template v-if="selectIndex == 2">
                 <div class="w-full h-80 lh-80 bg-green flex text-white mt-10 " @click="order('open')"
-                  v-if="userInfo.token">
+                     v-if="userInfo.token">
                   <div class="font-34 relative text-center" style="flex-grow: 1">
                     {{ $t("开多") }}
                     <!-- <span class="right-word font-22 text-center">{{
@@ -210,7 +355,7 @@
                   </div>
                 </div>
                 <div class="w-full h-80 lh-80 bg-red flex text-white mt-20 mb-10" style="position: relative;"
-                  :class="{ 'mt-22': selectIndex == 2 }" @click="order('close')" v-if="userInfo.token">
+                     :class="{ 'mt-22': selectIndex == 2 }" @click="order('close')" v-if="userInfo.token">
                   <div class="relative font-34 text-center" style="flex-grow: 1">
                     {{ $t("开空") }}
                     <!-- <span class="right-word font-22 text-center">{{
@@ -226,130 +371,20 @@
                 <p class="pt-8">{{ $t('登陆后继续') }}</p>
               </div>
               <div class="h-80 lh-80 btnBackground flex text-white rounded-ban justify-center mt-50"
-                @click="$router.push('/login')">
-                {{ $t('logIn') }}</div>
-            </div>
-          </div>
-          <div>
-            <div class="w-290 flex justify-between text-grey font-22">
-              <div>
-                <div>{{ $t("价格") }}</div>
-                <div class="mt-4">{{ queryType === 'cryptos' ? '(USDT)' : '(USD)' }}</div>
-              </div>
-              <div class="text-right items-end justify-end">
-                <div class="">{{ $t("数量") }}</div>
-                <div class="mt-4">{{ queryType === 'cryptos' ?
-                  `(${symbol_data.toUpperCase() || "--"})` : '(USD)' }}</div>
-              </div>
-            </div>
-            <div class="deep-div">
-              <!-- <div v-if="showType == 0 || showType == 2" class="w-290 flex justify-between pt-1  font-26"
-                v-for="(item, index) in redData" :key="item + index" @click="onQuickPrice(item.price)" :style="{
-                  background:
-                    `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
-                    } 0%` +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(246,70,93,.1) ' +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(246,70,93,.1) 100%)',
-                }"> -->
-
-              <div v-show="(showType == 0 || showType == 2)" class="w-290 flex justify-between pt-1 font-26"
-                v-for="(item, index) in redData" :key="item + index" @click="onQuickPrice(item.price)" :style="{
-                  background:
-                    `linear-gradient(to right,${$store.state.vant.theme == 'dark' ? '#131A2E' : '#fff'
-                    } 0%` +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(246,70,93,.1) ' +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(246,70,93,.1) 100%)'
-                }">
-                <div class="text-red">{{ item.price }}</div>
-                <div class="text-right textColor" v-if="symbol == 'shib'">
-                  {{ fixDate(item.amount, $i18n) || "--" }}
-                </div>
-                <div class="text-right textColor" v-else>
-                  {{ item.amount || "--" }}
-                </div>
-              </div>
-            </div>
-            <div class="w-290 text-red pt-5 font-34 font-700 text-center">
-              {{ price || '--' }}
-            </div>
-            <div class="pb-5 font-20 text-center">
-              ≈ {{ ((price *
-                currency.rate).toFixed(price.toString().split('.')[1] ?
-                  price.toString().split('.')[1].length : 2)) || '--' }}
-            </div>
-            <div class="deep-div">
-              <!-- <div v-if="showType == 0 || showType == 1" class="w-290 flex justify-between pt-1 font-26"
-                v-for="(item, index) in greenData" :key="index" @click="onQuickPrice(item.price)" :style="{
-                  background:
-                    `linear-gradient(to right,${THEME == 'dark' ? '#131A2E' : '#fff'
-                    } 0%` +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(94,186,137,.1) ' +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(94,186,137,.1) 100%)',
-                }"> -->
-
-              <div v-if="showType == 0 || showType == 1" class="w-290 flex justify-between pt-1 font-26"
-                v-for="(item, index) in greenData" :key="index" @click="onQuickPrice(item.price)" :style="{
-                  background:
-                    `linear-gradient(to right,${$store.state.vant.theme == 'dark' ? '#131A2E' : '#fff'
-                    } 0%` +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(94,186,137,.1) ' +
-                    (1 - item.amount / greenData[greenData.length - 1].amount) *
-                    100 +
-                    '%,rgba(94,186,137,.1) 100%)',
-                }">
-                <div class="text-green">{{ item.price }}</div>
-                <div class="text-right textColor" v-if="symbol_data == 'shib'">
-                  {{ fixDate(item.amount, $i18n) || "--" }}
-                </div>
-                <div class="text-right textColor" v-else>
-                  {{ item.amount || "--" }}
-                </div>
-
-              </div>
-            </div>
-            <div class="flex k-select-box">
-              <div class="mt-22 mb-22 select-box pl-5 pr-5" 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>
-                  <img src="../../../assets/image/public/grey-select.png" alt="select-icon" class="w-22 h-11 mr-10" />
-                </div>
-                <div class="option-box" v-show="arryIsShow">
-                  <div class="font-28" v-for="(item, index) in selectDataArry" :key="index"
-                    @click="selectItemArry(item)">
-                    {{ item.name }}
-                  </div>
-                </div>
-              </div>
-              <div @click="isSelectShow = true">
-                <img src="../../../assets/image/selectIcon.png" alt="warn-icon" class="w-36 h-30 ml-10" />
+                   @click="$router.push('/login')">
+                {{ $t('logIn') }}
               </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"
-          @continueToBuy="continueTobuy" @timeEnd="handleTimeEnd" :price="price" />
+                        @continueToBuy="continueTobuy" @timeEnd="handleTimeEnd" :price="price"/>
       </van-popup>
       <van-action-sheet v-model:show="isSelectShow" @select="onSelect" :actions="actions" :cancel-text="$t('取消')"
-        close-on-click-action @cancel="onCancel">
+                        close-on-click-action @cancel="onCancel">
       </van-action-sheet>
     </div>
   </div>
@@ -357,20 +392,21 @@
 
 <script>
 import config from "@/config";
-import { Popup, showToast } from 'vant';
-import { mapGetters } from 'vuex'
+import {Popup, showToast} from 'vant';
+import {mapGetters} from 'vuex'
 import VueSlider from 'vue-slider-component/dist-css/vue-slider-component.umd.js'
 import 'vue-slider-component/theme/default.css'
-import { _orderOpen, _futrueOrder, _futrueOrderDetail, _getBalance, _futrueOrderInit } from '@/service/trade.api'
+import {_orderOpen, _futrueOrder, _futrueOrderDetail, _getBalance, _futrueOrderInit} from '@/service/trade.api'
 import ContractFutrue from '@/components/Transform/contract-futrue/index.vue'
 import PopupDelivery from "@/components/Transform/popup-delivery/index.vue";
-import { fixDate } from "@/utils/index.js";
-import { THEME } from '@/config/theme'
+import {fixDate} from "@/utils/index.js";
+import {THEME} from '@/config/theme'
 import AmountSlider from "./amountSlider.vue";
 import "vue-slider-component/theme/default.css";
-import { _getHomeList } from "@/service/home.api";
-import { _getContractBySymbolType } from "@/service/etf.api";
-import { reserve } from "@/utils/utis";
+import {_getHomeList} from "@/service/home.api";
+import {_getContractBySymbolType} from "@/service/etf.api";
+import {reserve} from "@/utils/utis";
+
 export default {
   name: "perpetualPosition",
   components: {
@@ -472,21 +508,21 @@
         if (this.dataArrValue == -2) {
           this.greenData.map((item) => {
             item.price =
-              item.price.substring(0, item.price.indexOf(".") - 1) + "0";
+                item.price.substring(0, item.price.indexOf(".") - 1) + "0";
           });
           this.redData.map((item) => {
             item.price =
-              item.price.substring(0, item.price.indexOf(".") - 1) + "0";
+                item.price.substring(0, item.price.indexOf(".") - 1) + "0";
           });
         }
         if (this.dataArrValue == -3) {
           this.greenData.map((item) => {
             item.price =
-              item.price.substring(0, item.price.indexOf(".") - 2) + "00";
+                item.price.substring(0, item.price.indexOf(".") - 2) + "00";
           });
           this.redData.map((item) => {
             item.price =
-              item.price.substring(0, item.price.indexOf(".") - 2) + "00";
+                item.price.substring(0, item.price.indexOf(".") - 2) + "00";
           });
         }
       }
@@ -513,7 +549,7 @@
 
         obj = this.initOpen
         if (!obj.lever || !obj.lever.length) { // 倍数
-          obj.lever = [{ id: 1, lever_rate: 1 }]
+          obj.lever = [{id: 1, lever_rate: 1}]
         }
         return obj
       }
@@ -538,14 +574,21 @@
   },
   data() {
     return {
+      progressRate:0,
+      progress: 30, // 初始进度
+      isDragging: false, // 是否正在拖动
+      barWidth: 0, // 进度条宽度
+      startX: 0, // 触摸开始的X坐标
+      startProgress: 0, // 触摸开始时的进度
       THEME,
       fixDate,
       bfbindex: null,
       bfblist: [
-        { name: '25' },
-        { name: '50' },
-        { name: '75' },
-        { name: '100' }
+        {name: '0'},
+        {name: '25'},
+        {name: '50'},
+        {name: '75'},
+        {name: '100'}
       ],
       currentBuyType: '', // 交割合约当前下单的类型,用于弹窗倒计时结束以后,点击再下一单
       timeout2: null,
@@ -560,8 +603,8 @@
       title: this.$t('市价'),
       paraIndex: 0,
       selectData: [
-        { title: this.$t('市价'), type: '1' },
-        { title: this.$t('限价'), type: '2' },
+        {title: this.$t('市价'), type: '1'},
+        {title: this.$t('限价'), type: '2'},
       ],
       form: {
         symbol: '', // 币种
@@ -580,9 +623,9 @@
       selectDataArry: [],
       isSelectShow: false,
       actions: [
-        { name: this.$t("默认"), value: 0, className: 'actions-active' },
-        { name: this.$t("展示买单"), value: 1, className: '' },
-        { name: this.$t("展示卖单"), value: 2, className: '' },
+        {name: this.$t("默认"), value: 0, className: 'actions-active'},
+        {name: this.$t("展示买单"), value: 1, className: ''},
+        {name: this.$t("展示卖单"), value: 2, className: ''},
       ],
       showType: 0,
       dataArrTitle: 0,
@@ -593,8 +636,8 @@
       queryType: 'cryptos',
       assetObj: {}, // 总资产估值数据对象
       locationList: [
-        { title: this.$t('逐仓'), type: 0 },
-        { title: this.$t('全仓'), type: 1 },
+        {title: this.$t('逐仓'), type: 0},
+        {title: this.$t('全仓'), type: 1},
       ],
       locationShow: false,
       locationTitle: this.$t('全仓'),
@@ -608,12 +651,13 @@
   },
   activated() {
     this.selectData = [
-      { title: this.$t('市价'), type: '1' },
-      { title: this.$t('限价'), type: '2' },
+      {title: this.$t('市价'), type: '1'},
+      {title: this.$t('限价'), type: '2'},
     ]
     this.title = this.$t('市价');
   },
   mounted() {
+    this.barWidth = document.querySelector('.progress-bar').offsetWidth;
     this.getHomeList(this.$route.params.symbol);
     this.form.price = this.price
     this.getAsset()
@@ -622,10 +666,71 @@
     this.clearTimeout()
   },
   methods: {
+    mousedown(event){
+      // this.bfbclick(event.touches[0].)
+      const x1=event.touches[0].pageX
+      const x2=event.touches[0].clientX
+      console.log(event.touches[0])
+    } ,
+    mousemove(event){
+      console.log(event.touches[0])
+    },
+    // 处理点击事件
+    handleClick(e) {
+      if (this.isDragging) return;
+
+      // 获取进度条的位置信息
+      const barRect = document.querySelector('.progress-bar').getBoundingClientRect();
+      // 计算点击位置相对于进度条的百分比
+      const clickPosition = e.clientX - barRect.left;
+      const newProgress = (clickPosition / barRect.width) * 100;
+
+      // 更新进度,限制在0-100之间
+      this.updateProgress(newProgress);
+    },
+
+    // 处理触摸开始事件
+    handleTouchStart(e) {
+      this.isDragging = true;
+      const barRect = document.querySelector('.progress-bar').getBoundingClientRect();
+      this.barWidth = barRect.width;
+      this.startX = e.touches[0].clientX;
+      this.startProgress = this.progressRate;
+    },
+
+    // 处理触摸移动事件
+    handleTouchMove(e) {
+      if (!this.isDragging) return;
+
+      // 计算移动的距离
+      const currentX = e.touches[0].clientX;
+      const diffX = currentX - this.startX;
+
+      // 根据移动距离计算新进度
+      const percentageChange = (diffX / this.barWidth) * 100;
+      const newProgress = this.startProgress + percentageChange;
+
+      // 更新进度,限制在0-100之间
+      this.updateProgress(newProgress);
+    },
+
+    // 处理触摸结束事件
+    handleTouchEnd(e) {
+      this.isDragging = false;
+    },
+
+    // 更新进度的通用方法
+    updateProgress(value) {
+      // 限制进度在0-100之间
+      const clampedValue = Math.max(0, Math.min(100, value));
+      this.bfbclick(clampedValue)
+
+      // 可以在这里添加进度变化的回调逻辑
+      // this.$emit('progress-change', this.progress);
+    },
     reserve,
-    bfbclick(e, i) {
-      this.bfbindex = i
-      e = parseInt(e.name)
+    bfbclick(e) {
+      this.progressRate = e
       const rate = e / 100; //如0.25
       this.form.amount = this.maxUSDT * rate
       var a = this.form.amount
@@ -657,9 +762,9 @@
     // 获取总资产估值
     getAsset() {
       _getContractBySymbolType()
-        .then(res => {
-          this.assetObj = res
-        })
+          .then(res => {
+            this.assetObj = res
+          })
     },
     //价格类型下拉框切换
     selectBtn() {
@@ -684,7 +789,7 @@
           let obj = {
             name: item + "1",
             value:
-              item.substring(item.indexOf(".") + 1, item.length).length + 1,
+                item.substring(item.indexOf(".") + 1, item.length).length + 1,
           };
           newArry.push(obj);
         });
@@ -907,11 +1012,13 @@
             this.form.session_token = data.session_token;
             this.openOrder(_order, emitFunc);
           }).catch((err) => {
-            if (err.code == 'ECONNABORTED') { showToast(this.$t('网络超时!')); }
-            else if (err.msg != undefined) { showToast(this.$t(err.msg)); }
+            if (err.code == 'ECONNABORTED') {
+              showToast(this.$t('网络超时!'));
+            } else if (err.msg != undefined) {
+              showToast(this.$t(err.msg));
+            }
           });
-        }
-        else {
+        } else {
           this.form.session_token = this.initFutrue.session_token;
           this.openOrder(_order, emitFunc);
         }
@@ -925,7 +1032,7 @@
         }
         this.$emit('ordered', emitFunc)
         _getBalance().then(data => { // 刷新余额
-          this.$store.commit('user/SET_USERINFO', { balance: data.money })
+          this.$store.commit('user/SET_USERINFO', {balance: data.money})
         })
 
         if (this.selectIndex / 1 === 2) { // 交割合约需要弹出详情框
@@ -955,6 +1062,41 @@
 
 <style lang="scss">
 @import "@/assets/init.scss";
+
+.progress-i {
+  flex: 1;
+  position: relative;
+  color: #aaa;
+  font-size: 0.8em;
+}
+
+.progress-in {
+  height: 2px;
+  position: relative;
+  border-radius: 90px;
+  background: #111;
+  width: 0%;
+  //transition: width 0.3s linear;
+}
+
+.progress-icon {
+  width: 34px;
+  height: 35px;
+  border-radius: 90px;
+  position: absolute;
+  background: white;
+  right:-18px;
+  z-index: 99;
+  top:-16px;
+  border: #111 6px solid;
+}
+
+.progress-icon1 {
+  width: 14px;
+  height: 15px;
+  border-radius: 90px;
+  background: #111;
+}
 
 .btns_box_boxs {
   width: 23%;
@@ -1068,16 +1210,16 @@
     overflow: hidden;
   }
 
-  .tab>* {
+  .tab > * {
     height: 100%;
   }
 
-  .tab>img {
+  .tab > img {
     margin-left: -2px;
     margin-right: -2px;
   }
 
-  .tab>a {
+  .tab > a {
     flex-grow: 1;
     display: flex;
     justify-content: center;
@@ -1111,12 +1253,12 @@
     }
   }
 
-  .option-box>div {
+  .option-box > div {
     padding: 10px 0;
 
   }
 
-  .option-box>div:hover {
+  .option-box > div:hover {
     background-color: rgba($color: $bg_yellow, $alpha: 0.6);
   }
 
@@ -1149,9 +1291,12 @@
     // background-color: $green;
     // background: url(@/assets/image/public/open-bg.png) no-repeat right center;
     // background-size: 100% 100%;
-    color: white;
-
-    background: #06CDA5;
+    color: white !important;
+    border-radius: 6px !important;
+    background: #24c18d !important;
+    font-size: 14px;
+    font-size: 22px !important;
+    height: 60px;
     // border-radius: 5rem;
   }
 
@@ -1159,9 +1304,11 @@
     // background-color: $green;
     // background: url(@/assets/image/public/close-bg.png) no-repeat left center;
     // background-size: 100% 100%;
-    color: white;
-
-    background: #F43368;
+    color: white !important;
+    border-radius: 6px !important;
+    background: #f14b3f !important;
+    font-size: 22px !important;
+    height: 60px;
     // border-radius: 5rem;
   }
 
@@ -1201,6 +1348,6 @@
 }
 
 .deep-div {
-  min-height: 370px;
+  min-height: 200px;
 }
 </style>

--
Gitblit v1.9.3