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\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  v-if=\"symbol === 'wld'\" :symbol=\"'FTB'\" :range=\"range\" :selectIndex=\"selectIndex\" :balance=\"userInfo.balance\"\n            @tab=\"onTopTab\" @update-coin=\"onUpdate\">\n        </ContractHeader>\n\t\t<ContractHeader  v-else-if=\"symbol === 'mln'\" :symbol=\"'DKL'\" :range=\"range\" :selectIndex=\"selectIndex\" :balance=\"userInfo.balance\"\n\t\t    @tab=\"onTopTab\" @update-coin=\"onUpdate\">\n\t\t</ContractHeader>\n\t\t<ContractHeader  v-else-if=\"symbol === 'qtum'\" :symbol=\"'BQHN'\" :range=\"range\" :selectIndex=\"selectIndex\" :balance=\"userInfo.balance\"\n\t\t    @tab=\"onTopTab\" @update-coin=\"onUpdate\">\n\t\t</ContractHeader>\n\t\t<ContractHeader  v-else-if=\"symbol === 'knc'\" :symbol=\"'XCM'\" :range=\"range\" :selectIndex=\"selectIndex\" :balance=\"userInfo.balance\"\n\t\t    @tab=\"onTopTab\" @update-coin=\"onUpdate\">\n\t\t</ContractHeader>\n\t\t<ContractHeader  v-else-if=\"symbol === 'vet'\" :symbol=\"'ACG'\" :range=\"range\" :selectIndex=\"selectIndex\" :balance=\"userInfo.balance\"\n\t\t    @tab=\"onTopTab\" @update-coin=\"onUpdate\">\n\t\t</ContractHeader>\n\t\t<ContractHeader  v-else :symbol=\"symbol\" :range=\"range\" :selectIndex=\"selectIndex\" :balance=\"userInfo.balance\"\n\t\t    @tab=\"onTopTab\" @update-coin=\"onUpdate\">\n\t\t</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 class=\"pl-30 pr-30\" :key=\"keyIndex + 'c'\" :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\" @changeValueBack=\"changeValueBack\">\n                </PerpetualOpen>\n                <div class=\"line\"></div>\n                <!-- 委托/持仓-->\n                <PerpetualOrder class=\"pl-30 pr-30\" :key=\"keyIndex + 'd'\" :symbol=\"symbol\" :order-cur=\"orderCur\"\n                    :order-hold=\"orderHold\" :price=\"price\" :topIndex=\"selectIndex\" :futrue-hold=\"futrueHold\"\n                    :futrue-histroy=\"futrueHistroy\" @tab=\"onTab\" @recall=\"onRecall\">\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\t\t\t\t<span class=\"font-24 textColor2\"v-if=\"symbol === 'wld'\">FTB/USDT&nbsp;{{ $t('k线图表') }}</span>\n\t\t\t\t<span class=\"font-24 textColor2\"v-else-if=\"symbol === 'mln'\">DKL/USDT&nbsp;{{ $t('k线图表') }}</span>\n\t\t\t\t<span class=\"font-24 textColor2\"v-else-if=\"symbol === 'qtum'\">BQHN/USDT&nbsp;{{ $t('k线图表') }}</span>\n\t\t\t\t<span class=\"font-24 textColor2\"v-else-if=\"symbol === 'knc'\">XCM/USDT&nbsp;{{ $t('k线图表') }}</span>\n\t\t\t\t<span class=\"font-24 textColor2\"v-else-if=\"symbol === 'vet'\">ACG/USDT&nbsp;{{ $t('k线图表') }}</span>\n                <span class=\"font-24 textColor2\" v-else>{{ symbol.toUpperCase() }}/USDT&nbsp;{{ $t('k线图表') }}</span>\n                <van-icon class=\"textColor\" @click.stop=\"showCharts = !showCharts\"\n                    :name=\"showCharts ? 'arrow-down' : 'arrow-up'\"></van-icon>\n            </div>\n            <k-line-charts :update-key=\"updateKey\" :update-data=\"quote\" :symbol=\"symbol\" v-if=\"symbol && showCharts\"\n                :showBottom=\"false\" />\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 { _getBalance, _getDeepData, _initOpen, _initClose, _orderListCur, _orderListHold, _futrueOrderInit, _futrueOrderList } 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\t\t\tstop_price_profit:'',\n\t\t\tstop_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\n        if (!this.coinList.length) {\n            await this.SET_COIN_LIST()\n        }\n        _getBalance().then(data => { // 获取用户余额\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            this.symbol = symbol\n            this.closeSocket()\n            this.init(symbol)\n        },\n        onRecall() { // 撤单or 平仓 evt\n            this.clearTimer()\n            _orderListHold(this.symbol).then(data => {\n\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) { // 当前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            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                this[this.curTab](this.symbol)\n                // this.show = true\n                console.log('curTab', evt, this.curTab)\n\n            }\n            //console.log('下单后更新数据')\n        },\n        onTab(evt) { // 点击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            _getHomeList(symbol).then(data => { // 获取行情\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                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() { // 行情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            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            //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            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            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            _futrueOrderList(symbol, 'hisorders').then(data => {\n                this.futrueHistroy = data\n                // this.clearTimeout()\n            })\n        },\n        init(symbol) { // 初始化页面\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}\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.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":[]}