zzzz
2024-03-20 d25a45190cee44b36296693d5022a0ce9ae9b698
1
{"ast":null,"code":"import \"vant/es/swipe-item/style\";\nimport _SwipeItem from \"vant/es/swipe-item\";\nimport \"vant/es/swipe/style\";\nimport _Swipe from \"vant/es/swipe\";\nimport \"vant/es/popup/style\";\nimport _Popup from \"vant/es/popup\";\nimport \"core-js/modules/es.array.push.js\";\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport ContractHeader from \"@/components/contract-header/index.vue\";\nimport PerpetualOpen from \"@/components/perpetual-open/index.vue\";\nimport PerpetualOrder from \"@/components/perpetual-order/index.vue\";\nimport { _getBalance, _getDeepData, _initOpen, _initClose, _orderListCur, _orderListHold, _futrueOrderInit, _futrueOrderList } from \"@/API/trade.api\";\nimport { _getHomeList } from \"@/API/home.api\";\nimport { mapActions, mapGetters } from \"vuex\";\nimport { SET_COIN_LIST } from \"@/store/const.store\";\nimport { WS_URL } from \"@/config\";\nimport { getStorage } from \"@/utils/utis\";\nimport KLineCharts from \"@/components/kline-charts\";\nvar showLength = 7;\nexport default {\n  name: \"perpetualContract\",\n  components: {\n    ContractHeader,\n    PerpetualOpen,\n    PerpetualOrder,\n    [_Popup.name]: _Popup,\n    [_Swipe.name]: _Swipe,\n    [_SwipeItem.name]: _SwipeItem,\n    KLineCharts\n  },\n  computed: {\n    ...mapGetters(\"user\", [\"userInfo\"]),\n    ...mapGetters({\n      coinList: \"home/coinList\"\n    })\n  },\n  watch: {\n    selectIndex(val) {\n      showLength = 7;\n    }\n  },\n  data() {\n    const initArr = [];\n    for (let i = 0; i < showLength; i++) {\n      initArr.push({\n        amount: \"--\",\n        price: \"--\"\n      });\n    }\n    return {\n      quote: {},\n      initTimer: null,\n      keyIndex: 0,\n      timeout: null,\n      timer: null,\n      // 底部持仓等的公用定时器\n      timer1: null,\n      // tab切换动画\n      timer2: null,\n      // 交割合约底部持仓等的公用定时器\n      balance: 0,\n      symbol: \"\",\n      price: \"\",\n      range: \"\",\n      stop_price_profit: \"\",\n      stop_price_loss: \"\",\n      initOpen: {},\n      initClose: {},\n      asks: initArr,\n      // 卖单\n      bids: initArr,\n      // 买单\n      orderCur: [],\n      // 当前委托\n      orderHold: [],\n      // 持有仓位\n      futrueHold: [],\n      // 交割持仓\n      futrueHistroy: [],\n      // 交割历史\n      sockets: {\n        quotes: null,\n        // 行情\n        deep: null /// 深度\n      },\n      curTab: \"\",\n      // 当前委托还是持有仓位\n      selectIndex: 1,\n      // 当前tab\n      initFutrue: {},\n      /// 交割合约\n      show: false,\n      // popup\n      animated1: false,\n      animated2: false,\n      currentType: \"\",\n      showCharts: false\n      // curRequest: [], //\n    };\n  },\n  async created() {\n    if (!this.coinList.length) {\n      await this.SET_COIN_LIST();\n    }\n    _getBalance().then(data => {\n      // 获取用户余额\n      this.$store.commit(\"user/SET_USERINFO\", {\n        balance: data.money\n      });\n      // const { money } = data\n      // this.balance = money\n    });\n  },\n  methods: {\n    ...mapActions(\"home\", [SET_COIN_LIST]),\n    onUpdate(symbol) {\n      // 更新\n      this.symbol = symbol;\n      this.closeSocket();\n      this.init(symbol);\n    },\n    onRecall() {\n      // 撤单or 平仓 evt\n      this.clearTimer();\n      _orderListHold(this.symbol).then(data => {\n        this.orderHold = data;\n      });\n      this[this.curTab](this.symbol);\n      _initOpen(this.symbol).then(data => {\n        this.initOpen = data;\n      });\n    },\n    onTopTab(evt) {\n      // 当前tab 永续/交割\n      this.keyIndex += 1;\n      this.selectIndex = evt;\n      this.clearTimer();\n      if (this.selectIndex / 1 === 1) {\n        //this.curTab = 'fetchOrderListCur'\n        this.curTab = \"fetchOrderListHold\";\n        // this.animated1 = true\n        // this.timer = setTimeout(() => {\n        //     this.animated1 = false\n        //     clearTimeout(this.timer)\n        // }, 200)\n        this.animated2 = true;\n        this.timer1 = setTimeout(() => {\n          this.animated2 = false;\n          clearTimeout(this.timer1);\n        }, 200);\n      } else {\n        // this.animated2 = true\n        // this.timer = setTimeout(() => {\n        //     this.animated2 = false\n        //     clearTimeout(this.timer)\n        // }, 200)\n        this.animated1 = true;\n        this.timer1 = setTimeout(() => {\n          this.animated1 = false;\n          clearTimeout(this.timer1);\n        }, 200);\n      }\n      console.log(this.curTab);\n      this[this.curTab](this.symbol);\n    },\n    onOrdered(evt) {\n      // 下单过后的回调\n      this.clearTimer();\n      // this.clearTimeout()\n      this.initParam(this.symbol, evt); // 重新初始化\n      // TODO: 这里要做判断\n      if (this.selectIndex / 1 === 1) {\n        this[this.curTab](this.symbol); // 重新调取记录\n        console.log(\"this.curTab\", this.curTab);\n      } else {\n        // 交割合约\n        this[this.curTab](this.symbol);\n        // this.show = true\n        console.log(\"curTab\", evt, this.curTab);\n      }\n      //console.log('下单后更新数据')\n    },\n    onTab(evt) {\n      // 点击tab后的回调\n      console.log(\"evt\", evt);\n      this.clearTimer();\n      // this.clearTimeout()\n      this.curTab = evt;\n      this[evt](this.symbol);\n    },\n    fetchQoutes(symbol) {\n      // 获取当前行情\n      _getHomeList(symbol).then(data => {\n        // 获取行情\n        this.handleQoutes(data);\n        this.startQuoteSocket(); // socket\n      });\n    },\n    handleQoutes(data) {\n      if (data && data.length) {\n        const cur = data[0];\n        this.price = cur.close;\n        this.range = cur.change_ratio + \"\";\n        this.quote = cur;\n        this.updateKey++;\n      }\n    },\n    fetchDeepData(symbol) {\n      console.log(\"sd\");\n      _getDeepData(symbol).then(data => {\n        // 获取深度\n        console.log(data);\n        this.handleDeep(data);\n        this.startDeepSocket(); // socket\n      });\n    },\n    handleDeep(data) {\n      this.deepData = data;\n      const {\n        asks,\n        bids\n      } = data;\n      this.asks = asks.sort((a, b) => a.price - b.price).slice(0, showLength);\n      this.bids = bids.sort((a, b) => a.price - b.price).slice(-showLength);\n    },\n    startQuoteSocket() {\n      // 行情socket\n      this.sockets.quotes = new WebSocket(`${WS_URL}/1/${this.symbol}`);\n      // socket.onopen =  () => {\n      //     console.log('open')\n      //     socket.send('hello')\n      // }\n      this.sockets.quotes.onmessage = evt => {\n        const {\n          data\n        } = evt;\n        const {\n          code,\n          data: _data\n        } = JSON.parse(data);\n        if (code / 1 === 0) {\n          this.handleQoutes(_data);\n        }\n      };\n    },\n    startDeepSocket() {\n      this.sockets.deep = new WebSocket(`${WS_URL}/3/${this.symbol}`);\n      this.sockets.deep.onmessage = evt => {\n        const {\n          data\n        } = evt;\n        const {\n          code,\n          data: _data\n        } = JSON.parse(data);\n        if (code / 1 === 0) {\n          this.handleDeep(_data);\n        }\n      };\n    },\n    initParam(symbol, type) {\n      // 初始化参数\n      if (type === \"open\" || type === \"long\" || type === \"short\" || !type) {\n        let initFunTimer = null;\n        let initFun = () => {\n          _initOpen(symbol).then(data => {\n            this.initOpen = data;\n            clearTimeout(initFunTimer);\n            initFunTimer = null;\n          }).catch(err => {\n            initFunTimer = setTimeout(() => {\n              initFun();\n            }, 3000);\n          });\n        };\n        initFun();\n      }\n      if (type === \"close\" || !type) {\n        let initFunTimer = null;\n        let initFun = () => {\n          _initClose(symbol).then(data => {\n            this.initClose = data;\n            console.log(this.initClose);\n            clearTimeout(initFunTimer);\n            initFunTimer = null;\n          }).catch(err => {\n            initFunTimer = setTimeout(() => {\n              initFun();\n            }, 3000);\n          });\n        };\n        initFunTimer = setTimeout(() => {\n          initFun();\n        }, 600);\n      }\n      if (type === \"futrue\" || !type) {\n        _futrueOrderInit(symbol).then(data => {\n          this.initFutrue = data;\n        });\n      }\n    },\n    fetchOrderListCur(symbol) {\n      // 当前委托\n      //console.log('当前委托')\n      if (this.userInfo.token) {\n        _orderListCur(symbol).then(data => {\n          this.orderCur = data;\n        });\n        this.clearTimer();\n        this.timer = setInterval(() => {\n          _orderListCur(symbol).then(data => {\n            // if (typeof this.timer === 'string') {\n            //   this.timer = null\n            //   return\n            // }\n            this.orderCur = data;\n          });\n        }, 1000);\n      } else {\n        this.orderCur = [];\n      }\n    },\n    fetchOrderListHold(symbol) {\n      // 当前持仓\n      if (this.userInfo.token) {\n        _orderListHold(symbol).then(data => {\n          // this.orderHold = data\n          this.orderHold = data.sort(this.sortData);\n        });\n        this.timer = setInterval(() => {\n          _orderListHold(symbol).then(data => {\n            // if (typeof this.timer === 'string') {\n            //   this.timer = null\n            //   return\n            // }\n            // this.orderHold = data\n            this.orderHold = data.sort(this.sortData);\n          });\n        }, 1000);\n      } else {\n        this.orderHold = [];\n      }\n    },\n    fetchFutrueHoldList(symbol) {\n      // 交割持仓\n      if (this.userInfo.token) {\n        let length = 0;\n        _futrueOrderList(symbol).then(data => {\n          // this.futrueHold = data\n          this.futrueHold = data.sort(this.sortData);\n          length = data.length;\n        });\n        this.timer = setInterval(() => {\n          _futrueOrderList(symbol).then(data => {\n            // if (typeof this.timer === 'string') {\n            //   this.timer = null\n            //   return\n            // }\n\n            this.futrueHold = data.sort(this.sortData);\n            if (length != data.length) {\n              length = data.length;\n              _futrueOrderInit(symbol).then(dataList => {\n                this.initFutrue = dataList;\n              });\n            }\n          });\n        }, 1000);\n      } else {\n        this.futrueHold = [];\n      }\n    },\n    fetchFutrueHistory(symbol) {\n      // 交割历史持仓\n      _futrueOrderList(symbol, \"hisorders\").then(data => {\n        this.futrueHistroy = data;\n        // this.clearTimeout()\n      });\n    },\n    init(symbol) {\n      // 初始化页面\n      this.symbol = symbol.toLowerCase();\n      this.fetchQoutes(symbol);\n      this.fetchDeepData(symbol);\n      this.initParam(symbol); // 'open'\n      this.clearTimer();\n      //if (this.curTab === 'fetchOrderListCur') {\n      if (this.curTab === \"fetchOrderListHold\") {\n        //this.fetchOrderListCur(symbol)\n        this.fetchOrderListHold(symbol);\n      } else {\n        this.fetchFutrueHoldList(symbol);\n      }\n    },\n    closeSocket() {\n      this.sockets.quotes && this.sockets.quotes.close();\n      this.sockets.deep && this.sockets.deep.close();\n      this.sockets.quotes = null;\n      this.sockets.deep = null;\n    },\n    // clearTimeout(noNeed) {\n    //     clearTimeout(this.timeout)\n    //     if (noNeed) { // 防止timout定时器因接口返回继续触发\n    //       this.timeout = ''\n    //       return\n    //     }\n    //     this.timeout = null\n    // },\n    clearTimer() {\n      clearInterval(this.timer);\n      // if (isNeed) {\n      //   this.timer = ''\n      //   return\n      // }\n      this.timer = null;\n    },\n    changeCurrentType(type) {\n      this.currentType = type;\n    },\n    changeValueBack(val) {\n      if (val == 0) {\n        showLength = 7;\n      } else {\n        showLength = 13;\n      }\n    },\n    sortData(a, b) {\n      return new Date(b.open_time).getTime() - new Date(a.open_time).getTime();\n    }\n  },\n  mounted() {\n    let symbol = this.$route.params.symbol;\n    let catchSymbol = getStorage(\"symbol\");\n    if (!symbol && catchSymbol) {\n      symbol = catchSymbol;\n    }\n    if (this.selectIndex / 1 === 2) {\n      this.curTab = \"fetchFutrueHoldList\";\n    } else {\n      this.curTab = \"fetchOrderListHold\";\n    }\n    this.symbol = symbol;\n    this.init(symbol);\n  },\n  activated() {\n    let symbol = this.$route.params.symbol;\n    let catchSymbol = getStorage(\"symbol\");\n    if (!symbol && catchSymbol) {\n      symbol = catchSymbol;\n    }\n    if (this.selectIndex / 1 === 2) {\n      this.curTab = \"fetchFutrueHoldList\";\n    } else {\n      this.curTab = \"fetchOrderListHold\";\n    }\n    this.symbol = symbol;\n    this.init(symbol);\n  },\n  // beforeRouteEnter(to, from, next) {\n  //     let { params: { symbol }, query: { selectIndex } } = to\n  //     // if(this.$route.query.selectIndex) {\n  //     //   this.selectIndex = this.$route.query.selectIndex\n  //     // }\n  //     let catchSymbol = getStorage('symbol')\n  //     if (!symbol && catchSymbol) {\n  //         symbol = catchSymbol\n  //     }\n  //     if (symbol) {\n  //         next(vm => {\n  //             if (selectIndex) {\n  //                 vm.selectIndex = selectIndex\n  //                 if (vm.selectIndex / 1 === 2) {\n  //                     vm.curTab = 'fetchFutrueHoldList'\n  //                 } else {\n  //                     //vm.curTab = 'fetchOrderListCur'\n  //                     vm.curTab = 'fetchOrderListHold'\n  //                 }\n  //             } else {\n  //                 //vm.curTab = 'fetchOrderListCur'\n  //                 vm.curTab = 'fetchOrderListHold'\n  //             }\n  //             vm.symbol = symbol\n  //             vm.init(symbol)\n  //         })\n  //     } else {\n  //         next()\n  //     }\n  // },\n  deactivated() {\n    this.closeSocket();\n    this.clearTimer();\n  },\n  activated() {\n    this.currentType = this.$route.query.currentType ? this.$route.query.currentType : \"long\";\n  },\n  beforeDestroy() {\n    this.closeSocket();\n    // this.clearTimeout(true)\n    this.clearTimer();\n  }\n};","map":{"version":3,"names":["ContractHeader","PerpetualOpen","PerpetualOrder","_getBalance","_getDeepData","_initOpen","_initClose","_orderListCur","_orderListHold","_futrueOrderInit","_futrueOrderList","_getHomeList","mapActions","mapGetters","SET_COIN_LIST","WS_URL","getStorage","KLineCharts","showLength","name","components","_Popup","_Swipe","_SwipeItem","computed","coinList","watch","selectIndex","val","data","initArr","i","push","amount","price","quote","initTimer","keyIndex","timeout","timer","timer1","timer2","balance","symbol","range","stop_price_profit","stop_price_loss","initOpen","initClose","asks","bids","orderCur","orderHold","futrueHold","futrueHistroy","sockets","quotes","deep","curTab","initFutrue","show","animated1","animated2","currentType","showCharts","created","length","then","$store","commit","money","methods","onUpdate","closeSocket","init","onRecall","clearTimer","onTopTab","evt","setTimeout","clearTimeout","console","log","onOrdered","initParam","onTab","fetchQoutes","handleQoutes","startQuoteSocket","cur","close","change_ratio","updateKey","fetchDeepData","handleDeep","startDeepSocket","deepData","sort","a","b","slice","WebSocket","onmessage","code","_data","JSON","parse","type","initFunTimer","initFun","catch","err","fetchOrderListCur","userInfo","token","setInterval","fetchOrderListHold","sortData","fetchFutrueHoldList","dataList","fetchFutrueHistory","toLowerCase","clearInterval","changeCurrentType","changeValueBack","Date","open_time","getTime","mounted","$route","params","catchSymbol","activated","deactivated","query","beforeDestroy"],"sources":["src/page/perpetualContract/index.vue"],"sourcesContent":["<template>\n  <div :key=\"symbol\" class=\"pb-108 no_touch\">\n    <!-- 头部区 -->\n    <ContractHeader\n      v-if=\"symbol === 'wld'\"\n      :symbol=\"'FTB'\"\n      :range=\"range\"\n      :selectIndex=\"selectIndex\"\n      :balance=\"userInfo.balance\"\n      @tab=\"onTopTab\"\n      @update-coin=\"onUpdate\"\n    >\n    </ContractHeader>\n    <ContractHeader\n      v-else-if=\"symbol === 'mln'\"\n      :symbol=\"'DKL'\"\n      :range=\"range\"\n      :selectIndex=\"selectIndex\"\n      :balance=\"userInfo.balance\"\n      @tab=\"onTopTab\"\n      @update-coin=\"onUpdate\"\n    >\n    </ContractHeader>\n    <ContractHeader\n      v-else-if=\"symbol === 'qtum'\"\n      :symbol=\"'BQHN'\"\n      :range=\"range\"\n      :selectIndex=\"selectIndex\"\n      :balance=\"userInfo.balance\"\n      @tab=\"onTopTab\"\n      @update-coin=\"onUpdate\"\n    >\n    </ContractHeader>\n    <ContractHeader\n      v-else-if=\"symbol === 'knc'\"\n      :symbol=\"'XCM'\"\n      :range=\"range\"\n      :selectIndex=\"selectIndex\"\n      :balance=\"userInfo.balance\"\n      @tab=\"onTopTab\"\n      @update-coin=\"onUpdate\"\n    >\n    </ContractHeader>\n    <ContractHeader\n      v-else-if=\"symbol === 'vet'\"\n      :symbol=\"'ACG'\"\n      :range=\"range\"\n      :selectIndex=\"selectIndex\"\n      :balance=\"userInfo.balance\"\n      @tab=\"onTopTab\"\n      @update-coin=\"onUpdate\"\n    >\n    </ContractHeader>\n    <ContractHeader\n      v-else\n      :symbol=\"symbol\"\n      :range=\"range\"\n      :selectIndex=\"selectIndex\"\n      :balance=\"userInfo.balance\"\n      @tab=\"onTopTab\"\n      @update-coin=\"onUpdate\"\n    >\n    </ContractHeader>\n\n    <!-- <div :class=\"{ slide2: animated1 }\" v-if=\"selectIndex === 1\">\n            <div class=\"mainBackground\" key=\"x\">\n                <PerpetualOpen class=\"pl-30 pr-30\" :key=\"keyIndex + 'a'\" :selectIndex=\"selectIndex\" :symbol=\"symbol\"\n                    :green-data=\"bids\" :red-data=\"asks\" :price=\"price\" :init-open=\"initOpen\" :init-close=\"initClose\"\n                    :init-futrue=\"initFutrue\" @ordered=\"onOrdered\" :currentType=\"currentType\"\n                    @changeCurrentType=\"changeCurrentType\" @changeValueBack=\"changeValueBack\">\n                </PerpetualOpen>\n                <div class=\"line\"></div>\n                <PerpetualOrder class=\"pl-30 pr-30\" :key=\"keyIndex + 'b'\" :symbol=\"symbol\" :order-cur=\"orderCur\"\n                    :order-hold=\"orderHold\" :topIndex=\"selectIndex\" :futrue-hold=\"futrueHold\"\n                    :futrue-histroy=\"futrueHistroy\" @tab=\"onTab\" @recall=\"onRecall\">\n                </PerpetualOrder>\n            </div>\n        </div> -->\n    <div :class=\"{ slide1: animated2 }\" v-else>\n      <div class=\"mainBackground\" key=\"y\">\n        <PerpetualOpen\n          class=\"pl-30 pr-30\"\n          :key=\"keyIndex + 'c'\"\n          :selectIndex=\"selectIndex\"\n          :symbol=\"symbol\"\n          :green-data=\"bids\"\n          :red-data=\"asks\"\n          :price=\"price\"\n          :init-open=\"initOpen\"\n          :init-close=\"initClose\"\n          :init-futrue=\"initFutrue\"\n          @ordered=\"onOrdered\"\n          @changeValueBack=\"changeValueBack\"\n        >\n        </PerpetualOpen>\n        <div class=\"line\"></div>\n        <!-- 委托/持仓-->\n        <PerpetualOrder\n          class=\"pl-30 pr-30\"\n          :key=\"keyIndex + 'd'\"\n          :symbol=\"symbol\"\n          :order-cur=\"orderCur\"\n          :order-hold=\"orderHold\"\n          :price=\"price\"\n          :topIndex=\"selectIndex\"\n          :futrue-hold=\"futrueHold\"\n          :futrue-histroy=\"futrueHistroy\"\n          @tab=\"onTab\"\n          @recall=\"onRecall\"\n        >\n        </PerpetualOrder>\n      </div>\n    </div>\n    <div class=\"fixed w-full shadow z-10 tabBackground1\">\n      <div class=\"flex justify-between px-30 py-10\">\n        <span class=\"font-24 textColor2\" v-if=\"symbol === 'wld'\"\n          >FTB/USDT&nbsp;{{ $t(\"k线图表\") }}</span\n        >\n        <span class=\"font-24 textColor2\" v-else-if=\"symbol === 'mln'\"\n          >DKL/USDT&nbsp;{{ $t(\"k线图表\") }}</span\n        >\n        <span class=\"font-24 textColor2\" v-else-if=\"symbol === 'qtum'\"\n          >BQHN/USDT&nbsp;{{ $t(\"k线图表\") }}</span\n        >\n        <span class=\"font-24 textColor2\" v-else-if=\"symbol === 'knc'\"\n          >XCM/USDT&nbsp;{{ $t(\"k线图表\") }}</span\n        >\n        <span class=\"font-24 textColor2\" v-else-if=\"symbol === 'vet'\"\n          >ACG/USDT&nbsp;{{ $t(\"k线图表\") }}</span\n        >\n        <span class=\"font-24 textColor2\" v-else\n          >{{ symbol.toUpperCase() }}/USDT&nbsp;{{ $t(\"k线图表\") }}</span\n        >\n        <van-icon\n          class=\"textColor\"\n          @click.stop=\"showCharts = !showCharts\"\n          :name=\"showCharts ? 'arrow-down' : 'arrow-up'\"\n        ></van-icon>\n      </div>\n      <k-line-charts\n        :update-key=\"updateKey\"\n        :update-data=\"quote\"\n        :symbol=\"symbol\"\n        v-if=\"symbol && showCharts\"\n        :showBottom=\"false\"\n      />\n    </div>\n  </div>\n</template>\n\n<script>\nimport ContractHeader from \"@/components/contract-header/index.vue\";\nimport PerpetualOpen from \"@/components/perpetual-open/index.vue\";\nimport PerpetualOrder from \"@/components/perpetual-order/index.vue\";\n\nimport {\n  _getBalance,\n  _getDeepData,\n  _initOpen,\n  _initClose,\n  _orderListCur,\n  _orderListHold,\n  _futrueOrderInit,\n  _futrueOrderList,\n} from \"@/API/trade.api\";\nimport { _getHomeList } from \"@/API/home.api\";\nimport { Popup, Swipe, SwipeItem } from \"vant\";\nimport { mapActions, mapGetters } from \"vuex\";\nimport { SET_COIN_LIST } from \"@/store/const.store\";\nimport { WS_URL } from \"@/config\";\nimport { getStorage } from \"@/utils/utis\";\nimport KLineCharts from \"@/components/kline-charts\";\nvar showLength = 7;\nexport default {\n  name: \"perpetualContract\",\n  components: {\n    ContractHeader,\n    PerpetualOpen,\n    PerpetualOrder,\n    [Popup.name]: Popup,\n    [Swipe.name]: Swipe,\n    [SwipeItem.name]: SwipeItem,\n    KLineCharts,\n  },\n  computed: {\n    ...mapGetters(\"user\", [\"userInfo\"]),\n    ...mapGetters({\n      coinList: \"home/coinList\",\n    }),\n  },\n  watch: {\n    selectIndex(val) {\n      showLength = 7;\n    },\n  },\n  data() {\n    const initArr = [];\n    for (let i = 0; i < showLength; i++) {\n      initArr.push({\n        amount: \"--\",\n        price: \"--\",\n      });\n    }\n    return {\n      quote: {},\n      initTimer: null,\n      keyIndex: 0,\n      timeout: null,\n      timer: null, // 底部持仓等的公用定时器\n      timer1: null, // tab切换动画\n      timer2: null, // 交割合约底部持仓等的公用定时器\n      balance: 0,\n      symbol: \"\",\n      price: \"\",\n      range: \"\",\n      stop_price_profit: \"\",\n      stop_price_loss: \"\",\n      initOpen: {},\n      initClose: {},\n      asks: initArr, // 卖单\n      bids: initArr, // 买单\n      orderCur: [], // 当前委托\n      orderHold: [], // 持有仓位\n      futrueHold: [], // 交割持仓\n      futrueHistroy: [], // 交割历史\n      sockets: {\n        quotes: null, // 行情\n        deep: null, /// 深度\n      },\n      curTab: \"\", // 当前委托还是持有仓位\n      selectIndex: 1, // 当前tab\n      initFutrue: {}, /// 交割合约\n      show: false, // popup\n      animated1: false,\n      animated2: false,\n      currentType: \"\",\n      showCharts: false,\n      // curRequest: [], //\n    };\n  },\n  async created() {\n    if (!this.coinList.length) {\n      await this.SET_COIN_LIST();\n    }\n    _getBalance().then((data) => {\n      // 获取用户余额\n      this.$store.commit(\"user/SET_USERINFO\", { balance: data.money });\n      // const { money } = data\n      // this.balance = money\n    });\n  },\n  methods: {\n    ...mapActions(\"home\", [SET_COIN_LIST]),\n    onUpdate(symbol) {\n      // 更新\n      this.symbol = symbol;\n      this.closeSocket();\n      this.init(symbol);\n    },\n    onRecall() {\n      // 撤单or 平仓 evt\n      this.clearTimer();\n      _orderListHold(this.symbol).then((data) => {\n        this.orderHold = data;\n      });\n      this[this.curTab](this.symbol);\n      _initOpen(this.symbol).then((data) => {\n        this.initOpen = data;\n      });\n    },\n    onTopTab(evt) {\n      // 当前tab 永续/交割\n      this.keyIndex += 1;\n      this.selectIndex = evt;\n      this.clearTimer();\n      if (this.selectIndex / 1 === 1) {\n        //this.curTab = 'fetchOrderListCur'\n        this.curTab = \"fetchOrderListHold\";\n        // this.animated1 = true\n        // this.timer = setTimeout(() => {\n        //     this.animated1 = false\n        //     clearTimeout(this.timer)\n        // }, 200)\n        this.animated2 = true;\n        this.timer1 = setTimeout(() => {\n          this.animated2 = false;\n          clearTimeout(this.timer1);\n        }, 200);\n      } else {\n        // this.animated2 = true\n        // this.timer = setTimeout(() => {\n        //     this.animated2 = false\n        //     clearTimeout(this.timer)\n        // }, 200)\n        this.animated1 = true;\n        this.timer1 = setTimeout(() => {\n          this.animated1 = false;\n          clearTimeout(this.timer1);\n        }, 200);\n      }\n      console.log(this.curTab);\n      this[this.curTab](this.symbol);\n    },\n    onOrdered(evt) {\n      // 下单过后的回调\n      this.clearTimer();\n      // this.clearTimeout()\n      this.initParam(this.symbol, evt); // 重新初始化\n      // TODO: 这里要做判断\n      if (this.selectIndex / 1 === 1) {\n        this[this.curTab](this.symbol); // 重新调取记录\n        console.log(\"this.curTab\", this.curTab);\n      } else {\n        // 交割合约\n        this[this.curTab](this.symbol);\n        // this.show = true\n        console.log(\"curTab\", evt, this.curTab);\n      }\n      //console.log('下单后更新数据')\n    },\n    onTab(evt) {\n      // 点击tab后的回调\n      console.log(\"evt\", evt);\n      this.clearTimer();\n      // this.clearTimeout()\n      this.curTab = evt;\n      this[evt](this.symbol);\n    },\n    fetchQoutes(symbol) {\n      // 获取当前行情\n      _getHomeList(symbol).then((data) => {\n        // 获取行情\n        this.handleQoutes(data);\n        this.startQuoteSocket(); // socket\n      });\n    },\n    handleQoutes(data) {\n      if (data && data.length) {\n        const cur = data[0];\n        this.price = cur.close;\n        this.range = cur.change_ratio + \"\";\n        this.quote = cur;\n        this.updateKey++;\n      }\n    },\n    fetchDeepData(symbol) {\n      console.log(\"sd\");\n      _getDeepData(symbol).then((data) => {\n        // 获取深度\n        console.log(data);\n        this.handleDeep(data);\n        this.startDeepSocket(); // socket\n      });\n    },\n    handleDeep(data) {\n      this.deepData = data;\n      const { asks, bids } = data;\n      this.asks = asks.sort((a, b) => a.price - b.price).slice(0, showLength);\n      this.bids = bids.sort((a, b) => a.price - b.price).slice(-showLength);\n    },\n    startQuoteSocket() {\n      // 行情socket\n      this.sockets.quotes = new WebSocket(`${WS_URL}/1/${this.symbol}`);\n      // socket.onopen =  () => {\n      //     console.log('open')\n      //     socket.send('hello')\n      // }\n      this.sockets.quotes.onmessage = (evt) => {\n        const { data } = evt;\n        const { code, data: _data } = JSON.parse(data);\n        if (code / 1 === 0) {\n          this.handleQoutes(_data);\n        }\n      };\n    },\n    startDeepSocket() {\n      this.sockets.deep = new WebSocket(`${WS_URL}/3/${this.symbol}`);\n      this.sockets.deep.onmessage = (evt) => {\n        const { data } = evt;\n        const { code, data: _data } = JSON.parse(data);\n        if (code / 1 === 0) {\n          this.handleDeep(_data);\n        }\n      };\n    },\n    initParam(symbol, type) {\n      // 初始化参数\n      if (type === \"open\" || type === \"long\" || type === \"short\" || !type) {\n        let initFunTimer = null;\n        let initFun = () => {\n          _initOpen(symbol)\n            .then((data) => {\n              this.initOpen = data;\n              clearTimeout(initFunTimer);\n              initFunTimer = null;\n            })\n            .catch((err) => {\n              initFunTimer = setTimeout(() => {\n                initFun();\n              }, 3000);\n            });\n        };\n        initFun();\n      }\n      if (type === \"close\" || !type) {\n        let initFunTimer = null;\n        let initFun = () => {\n          _initClose(symbol)\n            .then((data) => {\n              this.initClose = data;\n              console.log(this.initClose);\n              clearTimeout(initFunTimer);\n              initFunTimer = null;\n            })\n            .catch((err) => {\n              initFunTimer = setTimeout(() => {\n                initFun();\n              }, 3000);\n            });\n        };\n        initFunTimer = setTimeout(() => {\n          initFun();\n        }, 600);\n      }\n      if (type === \"futrue\" || !type) {\n        _futrueOrderInit(symbol).then((data) => {\n          this.initFutrue = data;\n        });\n      }\n    },\n    fetchOrderListCur(symbol) {\n      // 当前委托\n      //console.log('当前委托')\n      if (this.userInfo.token) {\n        _orderListCur(symbol).then((data) => {\n          this.orderCur = data;\n        });\n        this.clearTimer();\n        this.timer = setInterval(() => {\n          _orderListCur(symbol).then((data) => {\n            // if (typeof this.timer === 'string') {\n            //   this.timer = null\n            //   return\n            // }\n            this.orderCur = data;\n          });\n        }, 1000);\n      } else {\n        this.orderCur = [];\n      }\n    },\n    fetchOrderListHold(symbol) {\n      // 当前持仓\n      if (this.userInfo.token) {\n        _orderListHold(symbol).then((data) => {\n          // this.orderHold = data\n          this.orderHold = data.sort(this.sortData);\n        });\n        this.timer = setInterval(() => {\n          _orderListHold(symbol).then((data) => {\n            // if (typeof this.timer === 'string') {\n            //   this.timer = null\n            //   return\n            // }\n            // this.orderHold = data\n            this.orderHold = data.sort(this.sortData);\n          });\n        }, 1000);\n      } else {\n        this.orderHold = [];\n      }\n    },\n    fetchFutrueHoldList(symbol) {\n      // 交割持仓\n      if (this.userInfo.token) {\n        let length = 0;\n        _futrueOrderList(symbol).then((data) => {\n          // this.futrueHold = data\n          this.futrueHold = data.sort(this.sortData);\n          length = data.length;\n        });\n        this.timer = setInterval(() => {\n          _futrueOrderList(symbol).then((data) => {\n            // if (typeof this.timer === 'string') {\n            //   this.timer = null\n            //   return\n            // }\n\n            this.futrueHold = data.sort(this.sortData);\n            if (length != data.length) {\n              length = data.length;\n              _futrueOrderInit(symbol).then((dataList) => {\n                this.initFutrue = dataList;\n              });\n            }\n          });\n        }, 1000);\n      } else {\n        this.futrueHold = [];\n      }\n    },\n    fetchFutrueHistory(symbol) {\n      // 交割历史持仓\n      _futrueOrderList(symbol, \"hisorders\").then((data) => {\n        this.futrueHistroy = data;\n        // this.clearTimeout()\n      });\n    },\n    init(symbol) {\n      // 初始化页面\n      this.symbol = symbol.toLowerCase();\n      this.fetchQoutes(symbol);\n      this.fetchDeepData(symbol);\n      this.initParam(symbol); // 'open'\n      this.clearTimer();\n      //if (this.curTab === 'fetchOrderListCur') {\n      if (this.curTab === \"fetchOrderListHold\") {\n        //this.fetchOrderListCur(symbol)\n        this.fetchOrderListHold(symbol);\n      } else {\n        this.fetchFutrueHoldList(symbol);\n      }\n    },\n    closeSocket() {\n      this.sockets.quotes && this.sockets.quotes.close();\n      this.sockets.deep && this.sockets.deep.close();\n      this.sockets.quotes = null;\n      this.sockets.deep = null;\n    },\n    // clearTimeout(noNeed) {\n    //     clearTimeout(this.timeout)\n    //     if (noNeed) { // 防止timout定时器因接口返回继续触发\n    //       this.timeout = ''\n    //       return\n    //     }\n    //     this.timeout = null\n    // },\n    clearTimer() {\n      clearInterval(this.timer);\n      // if (isNeed) {\n      //   this.timer = ''\n      //   return\n      // }\n      this.timer = null;\n    },\n    changeCurrentType(type) {\n      this.currentType = type;\n    },\n    changeValueBack(val) {\n      if (val == 0) {\n        showLength = 7;\n      } else {\n        showLength = 13;\n      }\n    },\n    sortData(a, b) {\n      return new Date(b.open_time).getTime() - new Date(a.open_time).getTime();\n    },\n  },\n  mounted() {\n    let symbol = this.$route.params.symbol;\n    let catchSymbol = getStorage(\"symbol\");\n    if (!symbol && catchSymbol) {\n      symbol = catchSymbol;\n    }\n    if (this.selectIndex / 1 === 2) {\n      this.curTab = \"fetchFutrueHoldList\";\n    } else {\n      this.curTab = \"fetchOrderListHold\";\n    }\n    this.symbol = symbol;\n    this.init(symbol);\n  },\n  activated() {\n    let symbol = this.$route.params.symbol;\n    let catchSymbol = getStorage(\"symbol\");\n    if (!symbol && catchSymbol) {\n      symbol = catchSymbol;\n    }\n    if (this.selectIndex / 1 === 2) {\n      this.curTab = \"fetchFutrueHoldList\";\n    } else {\n      this.curTab = \"fetchOrderListHold\";\n    }\n    this.symbol = symbol;\n    this.init(symbol);\n  },\n  // beforeRouteEnter(to, from, next) {\n  //     let { params: { symbol }, query: { selectIndex } } = to\n  //     // if(this.$route.query.selectIndex) {\n  //     //   this.selectIndex = this.$route.query.selectIndex\n  //     // }\n  //     let catchSymbol = getStorage('symbol')\n  //     if (!symbol && catchSymbol) {\n  //         symbol = catchSymbol\n  //     }\n  //     if (symbol) {\n  //         next(vm => {\n  //             if (selectIndex) {\n  //                 vm.selectIndex = selectIndex\n  //                 if (vm.selectIndex / 1 === 2) {\n  //                     vm.curTab = 'fetchFutrueHoldList'\n  //                 } else {\n  //                     //vm.curTab = 'fetchOrderListCur'\n  //                     vm.curTab = 'fetchOrderListHold'\n  //                 }\n  //             } else {\n  //                 //vm.curTab = 'fetchOrderListCur'\n  //                 vm.curTab = 'fetchOrderListHold'\n  //             }\n  //             vm.symbol = symbol\n  //             vm.init(symbol)\n  //         })\n  //     } else {\n  //         next()\n  //     }\n  // },\n  deactivated() {\n    this.closeSocket();\n    this.clearTimer();\n  },\n  activated() {\n    this.currentType = this.$route.query.currentType\n      ? this.$route.query.currentType\n      : \"long\";\n  },\n  beforeDestroy() {\n    this.closeSocket();\n    // this.clearTimeout(true)\n    this.clearTimer();\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n//.list-enter-active, .list-leave-active {\n//  transition: all .5s;\n//  transform: translateY(30px)\n//}\n//.list-enter, .list-leave-to\n//  /* .list-leave-active for below version 2.1.8 */ {\n//  transform: translateY(0)\n//}\n.no_touch {\n  -webkit-user-select: none;\n  user-select: none;\n  -ms-user-select: none;\n  -moz-user-select: none;\n  padding-bottom: 150px !important;\n}\n\n.list-enter-active,\n.list-leave-active {\n  will-change: transform;\n  transition: all 250ms;\n}\n\n.list-enter {\n  opacity: 0;\n  transform: translate3d(-100%, 0, 0);\n}\n\n.list-leave {\n  opacity: 0;\n  transform: translate3d(100%, 0, 0);\n}\n\n.rounded-view {\n  border-top-left-radius: 20px;\n  border-top-right-radius: 20px;\n  box-sizing: border-box;\n}\n\n.my-swipe {\n  width: 100%;\n}\n\n.my-swipe .van-swipe-item {\n}\n\n.line {\n  height: 13px;\n\n  @include themify() {\n    background: themed(\"tab_background\");\n  }\n}\n\n@keyframes animate1 {\n  0% {\n    opacity: 1;\n    transform: translate3d(100%, 0, 0);\n  }\n\n  //   40% {\n  //      opacity: 1;\n  //     transform: translate3d(50%, 0, 0);\n  //   }\n  100% {\n    opacity: 1;\n    transform: translate3d(0%, 0, 0);\n  }\n}\n\n@keyframes animate2 {\n  0% {\n    opacity: 1;\n    transform: translate3d(-100%, 0, 0);\n  }\n\n  //   40% {\n  //      opacity: 1;\n  //     transform: translate3d(50%, 0, 0);\n  //   }\n  100% {\n    opacity: 1;\n    transform: translate3d(0%, 0, 0);\n  }\n}\n\n.slide1 {\n  animation: animate1 200ms linear;\n}\n\n.slide2 {\n  animation: animate2 200ms linear;\n}\n\n.line {\n  @include themify() {\n    background: themed(\"divi_line\");\n  }\n}\n\n::v-deep .contract-header {\n  @include themify() {\n    background: themed(\"main_background\");\n  }\n}\n\n.tabBackground1 {\n  @include themify() {\n    border: 1px solid themed(\"border_color1\");\n  }\n}\n\n.shadow {\n  bottom: 108px;\n  box-sizing: border-box;\n}\n</style>\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}