zzzz
2024-03-20 d25a45190cee44b36296693d5022a0ce9ae9b698
1
{"ast":null,"code":"import \"vant/es/action-sheet/style\";\nimport _ActionSheet from \"vant/es/action-sheet\";\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//\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//\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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nimport config from \"@/config\";\nimport { mapGetters } from \"vuex\";\n// import VueSlider from \"vue-slider-component\";\nimport AmountSlider from \"./amountSlider.vue\";\nimport \"vue-slider-component/theme/default.css\";\nimport { _orderOpen, _orderClose, _futrueOrder, _futrueOrderDetail, _getBalance, _futrueOrderInit } from \"@/API/trade.api\";\nimport ContractFutrue from \"@/components/contract-futrue\";\nimport PopupDelivery from \"@/components/popup-delivery\";\nimport { fixDate } from \"@/utils/utis\";\nimport { _getHomeList } from \"@/API/home.api\";\nimport { getStorage } from \"@/utils/utis\";\n// import PopupConfirmOrder from '@/components/popup-confirm-order'\nexport default {\n  name: \"perpetualPosition\",\n  components: {\n    // VueSlider,\n    AmountSlider,\n    ContractFutrue,\n    [_Popup.name]: _Popup,\n    PopupDelivery,\n    [_ActionSheet.name]: _ActionSheet\n    // PopupConfirmOrder\n  },\n  props: {\n    greenData: {\n      // 买单\n      type: Array,\n      default() {\n        return [];\n      }\n    },\n    redData: {\n      // 卖单\n      type: Array,\n      default() {\n        return [];\n      }\n    },\n    symbol: {\n      type: String,\n      default: \"\"\n    },\n    price: {\n      type: [Number, String],\n      default: \"0.00\"\n    },\n    initOpen: {\n      type: Object,\n      default() {\n        return {};\n      }\n    },\n    initClose: {\n      type: Object,\n      default() {\n        return {};\n      }\n    },\n    initFutrue: {\n      type: Object,\n      default() {\n        return {};\n      }\n    },\n    selectIndex: {\n      type: [String, Number],\n      default: 1\n    },\n    currentType: {\n      type: String,\n      default: \"long\"\n    }\n  },\n  watch: {\n    price(val) {\n      if (this.type === \"1\") {\n        // !this.focus &&\n        this.form.price = val;\n      }\n      this.form.para_id = this.initFutrue.para && this.initFutrue.para[this.paraIndex].para_id; // 不优雅,不可靠\n      // this.form.symbol = this.symbol.toLowerCase()\n    },\n    initOpen: {\n      // 处理滚动条初始值\n      deep: true,\n      handler(val) {\n        this.handleInitSliderOption();\n      }\n    },\n    initClose: {\n      // 处理滚动条初始值\n      deep: true,\n      handler(newVal, oldVal) {\n        if (newVal.amount / 1 > 0) {\n          this.handleInitSliderOption(true);\n        }\n      }\n    },\n    symbol(val) {\n      this.getHomeList(val);\n    },\n    greenData(val) {\n      if (this.dataArrValue >= 1) {\n        this.greenData.map(item => {\n          item.price = parseFloat(item.price).toFixed(this.dataArrValue);\n        });\n        this.redData.map(item => {\n          item.price = parseFloat(item.price).toFixed(this.dataArrValue);\n        });\n      } else {\n        if (this.dataArrValue == -1) {\n          this.greenData.map(item => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\"));\n          });\n          this.redData.map(item => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\"));\n          });\n        }\n        if (this.dataArrValue == -2) {\n          this.greenData.map(item => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\") - 1) + \"0\";\n          });\n          this.redData.map(item => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\") - 1) + \"0\";\n          });\n        }\n        if (this.dataArrValue == -3) {\n          this.greenData.map(item => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\") - 2) + \"00\";\n          });\n          this.redData.map(item => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\") - 2) + \"00\";\n          });\n        }\n      }\n      this.approximately = this.redData[0].price;\n    }\n  },\n  mounted() {\n    this.getHomeList(this.$route.params.symbol);\n    setInterval(() => {\n      // 刷新页面\n      if (location.href.indexOf(\"#reloaded\") == -1 && location.href.indexOf(\"perpetualContract\") > 0) {\n        location.href = location.href + \"#reloaded\";\n        location.reload();\n      }\n    }, 1000); // 1000毫秒 = 1秒\n  },\n  computed: {\n    ...mapGetters({\n      userInfo: \"user/userInfo\",\n      theme: \"home/theme\"\n    }),\n    initData() {\n      let obj = null;\n      if (this.selectIndex / 1 === 1) {\n        obj = this.initOpen;\n        if (!obj.lever || !obj.lever.length) {\n          // 倍数\n          obj.lever = [{\n            id: 1,\n            lever_rate: 1\n          }];\n        }\n        return obj;\n      }\n      return this.initFutrue;\n    },\n    coudBuyVolume() {\n      // 可买数量\n      return Math.floor(this.initOpen.volume / 1 / this.form.lever_rate);\n    }\n  },\n  filters: {\n    nan(val) {\n      return isNaN(val) ? \"--\" : val;\n    }\n  },\n  data() {\n    return {\n      fixDate,\n      currentBuyType: \"\",\n      // 交割合约当前下单的类型,用于弹窗倒计时结束以后,点击再下一单\n      timeout2: null,\n      timeout: null,\n      detailData: {},\n      // 交割合约订单详情数据\n      show: false,\n      popType: \"confirm\",\n      // 弹框类型 confirm / counting\n      showOptions: false,\n      options: config.sliderOptions,\n      value: 0,\n      isShow: false,\n      title: this.$t(\"市价\"),\n      paraIndex: 0,\n      selectData: [{\n        title: this.$t(\"市价\"),\n        type: \"1\"\n      }, {\n        title: this.$t(\"限价\"),\n        type: \"2\"\n      }],\n      form: {\n        symbol: \"\",\n        // 币种\n        session_token: \"\",\n        direction: \"buy\",\n        // 买or卖\n        price_type: \"opponent\",\n        // 市价or限价\n        lever_rate: 1,\n        // 杠杆\n        stop_price_profit: \"\",\n        stop_price_loss: \"\",\n        price: \"\",\n        amount: \"\",\n        // 数量\n        para_id: \"\" // 交割周琦id\n      },\n      focus: false,\n      type: \"1\",\n      //选中市价或限价类型\n      // currentType:\"open\", //开仓类型\n      // action: _orderOpen // 开仓or\n      isShow: false,\n      selectDataArry: [],\n      isSelectShow: false,\n      actions: [{\n        name: this.$t(\"默认\"),\n        value: 0,\n        className: \"actions-active\"\n      }, {\n        name: this.$t(\"展示买单\"),\n        value: 1,\n        className: \"\"\n      }, {\n        name: this.$t(\"展示卖单\"),\n        value: 2,\n        className: \"\"\n      }],\n      showType: 0,\n      dataArrTitle: 0,\n      dataArrValue: 0,\n      arryIsShow: false,\n      marks: val => val % 50 === 0,\n      approximately: \"\"\n    };\n  },\n  beforeDestroy() {\n    this.clearTimeout();\n  },\n  activated() {\n    this.selectData = [{\n      title: this.$t(\"市价\"),\n      type: \"1\"\n    }, {\n      title: this.$t(\"限价\"),\n      type: \"2\"\n    }];\n    this.title = this.selectData[0].title;\n    this.type = this.selectData[0].type;\n  },\n  methods: {\n    //获取张数\n    getAmount(val) {\n      this.form.amount = val;\n    },\n    // 获取张数,数据转换\n    getVolumnByLever() {\n      let vol;\n      vol = this.initOpen.volume / 1;\n      return Math.floor(vol);\n    },\n    getHomeList(symbol) {\n      _getHomeList(symbol).then(res => {\n        let numberText = res[0].close;\n        let numberLength = numberText.substring(numberText.indexOf(\".\") + 1, numberText.length).length;\n        let arry = [];\n        let str = \"0.\";\n        for (let j = 0; j < numberLength - 1; j++) {\n          str = str + \"0\";\n          arry.push(str);\n        }\n        let newArry = [];\n        arry.map(item => {\n          let obj = {\n            name: item + \"1\",\n            value: item.substring(item.indexOf(\".\") + 1, item.length).length + 1\n          };\n          newArry.push(obj);\n        });\n        if (numberLength <= 2) {\n          let obj = [{\n            name: \"0.1\",\n            value: 1\n          }, {\n            name: \"1\",\n            value: -1\n          }, {\n            name: \"10\",\n            value: -2\n          }\n          // {\n          //   name: '100',\n          //   value: -3,\n          // }\n          ];\n          let arryItem = {\n            name: \"100\",\n            value: -3\n          };\n          if (numberText.substring(0, numberText.indexOf(\".\")).length > 2) {\n            obj.push(arryItem);\n          }\n          newArry = newArry.concat(obj);\n        }\n        if (this.symbol == \"shib\") {\n          newArry = newArry.slice(-4);\n        }\n        let dataObj = {\n          arry: newArry,\n          numberLength: numberLength\n        };\n        this.selectDataArry = dataObj.arry;\n        if (numberLength >= 2) {\n          this.dataArrTitle = this.selectDataArry[0].name;\n        } else {\n          this.dataArrTitle = this.selectDataArry[this.selectDataArry.length - 1].name;\n        }\n      });\n    },\n    continueTobuy(detailData) {\n      this.show = false;\n      setTimeout(() => {\n        this.$router.push(`/trendDetails/${detailData.symbol}?direction=${detailData.direction}`);\n      }, 300);\n    },\n    onQuickPrice(price) {\n      // 点击金额变化\n      if (this.type === \"2\") {\n        this.form.price = price;\n      }\n    },\n    clearTimeout() {\n      clearTimeout(this.timeout);\n      this.timeout = null;\n    },\n    handleTimeEnd(order) {\n      if (this.selectIndex / 1 === 2) {\n        // 交割合约需要弹出详情框\n        _futrueOrderDetail(order).then(data => {\n          this.clearTimeout();\n          this.detailData = data;\n          if (data.state !== \"created\") {\n            this.timeout = setTimeout(() => {\n              this.handleTimeEnd(order);\n            }, 1000);\n          }\n        });\n      }\n    },\n    handleInitSliderOption(amount) {\n      if (!amount) {\n        // 金额是否需要变动\n        this.form.amount = \"\";\n      }\n      console.log(this.initOpen.volume, this.form.lever_rate);\n      let vol;\n      vol = this.initOpen.volume / 1;\n      this.options.max = Math.floor(vol);\n      console.log(\"this.options.max\", this.options.max);\n      if (this.options.max > 0) {\n        this.options.disabled = false;\n      } else {\n        this.options.disabled = true;\n      }\n    },\n    handleChoose(item) {\n      this.showOptions = !this.showOptions;\n      this.form.lever_rate = item.lever_rate;\n      console.log(\"handleChoose\");\n      this.handleInitSliderOption();\n    },\n    onAdd() {\n      // +\n      if (this.options.max === 0) {\n        return;\n      }\n      if (this.form.amount === this.options.max) {\n        return;\n      }\n      console.log(this.options.max);\n      this.form.amount++;\n    },\n    onReduce() {\n      // -\n      if (this.form.amount > 1) {\n        this.form.amount--;\n      }\n    },\n    jump() {\n      this.$router.push(`/trendDetails/${this.symbol}`);\n    },\n    onParaId({\n      id,\n      index\n    }) {\n      // 交割日期\n      // console.log(evt)\n      this.form.para_id = id;\n      this.form.amount = \"\";\n      this.paraIndex = index;\n    },\n    onInput() {\n      // 数量变化\n      // console.log(1111111, this.form.amount, this.selectIndex)\n      if (this.selectIndex == 1 && this.options.max == 0) {\n        this.form.amount = this.form.amount / 1;\n      } else if (this.selectIndex == 1 && this.form.amount / 1 > this.options.max / 1) {\n        this.form.amount = this.options.max / 1;\n      }\n      if (this.selectIndex / 1 === 1) {\n        this.$refs.sliderRef.amountChange(this.form.amount);\n      }\n    },\n    //价格类型下拉框切换\n    selectBtn() {\n      this.isShow = !this.isShow;\n    },\n    //选择价格类型\n    selectItem(item) {\n      if (item.type == 1) {\n        this.form.price = this.price;\n      }\n      this.form.price_type = item.type === \"1\" ? \"opponent\" : \"limit\";\n      this.title = item.title;\n      this.type = item.type;\n      this.isShow = false;\n    },\n    //选择开仓类型\n    changeTab(type) {\n      // 开仓和\n      console.log(\"changeTab\", type);\n      if (this.currentType === type) {\n        return;\n      }\n      this.$emit(\"changeCurrentType\", type);\n      // this.currentType = type;\n\n      this.$refs.sliderRef.emptyValue();\n      this.handleInitSliderOption();\n    },\n    onClose() {\n      // 关闭\n      this.show = false;\n      setTimeout(() => {\n        this.popType = \"confirm\";\n      }, 500);\n    },\n    // onOrderConfirm() {\n    //   /// 交割合约确认\n    //   this.show = false;\n    //   this.popType = \"counting\";\n    //   this.order(this.form.direction === \"buy\" ? \"open\" : \"close\");\n    // },\n    order(type) {\n      if (!this.userInfo.token) {\n        this.$router.push(\"/login\");\n        return false;\n      }\n      //  if (!this.form.stop_price_profit) {\n      //  \tthis.$toast.fail(this.$t(\"请输入止盈金额\"));\n      //  \t return false;\n      //  \t}\n      // if (!this.form.stop_price_loss) {\n      // \tthis.$toast.fail(this.$t(\"请输入止损金额\"));\n      // \t return false;\n      // \t}\n      if (!this.form.amount) {\n        if (this.selectIndex == 1) {\n          this.$toast.fail(this.$t(\"请输入合约张数\"));\n        } else {\n          this.$toast.fail(this.$t(\"请输入金额\"));\n        }\n        return;\n      }\n\n      // this.form.direction = type\n      this.form.symbol = this.$route.params.symbol;\n      if (type == \"long\" || type == \"open\") {\n        this.form.direction = \"buy\";\n      } else {\n        this.form.direction = \"sell\";\n      }\n      let _order = null; // api\n      let emitFunc = null; // 触发函数\n      if (this.selectIndex / 1 === 1) {\n        // 永续合约\n        this.form.session_token = this.initOpen.session_token;\n        _order = _orderOpen;\n        emitFunc = this.currentType;\n        this.openOrder(_order, emitFunc);\n      } else {\n        // 交割合约\n        this.form.session_token = this.initFutrue.session_token;\n        _order = _futrueOrder;\n        emitFunc = \"futrue\";\n        if (this.initFutrue.session_token == undefined || this.initFutrue.session_token == \"\") {\n          _futrueOrderInit(this.symbol).then(data => {\n            this.form.session_token = data.session_token;\n            this.openOrder(_order, emitFunc);\n          }).catch(err => {\n            if (err.code == \"ECONNABORTED\") {\n              this.$toast(this.$t(\"网络超时!\"));\n            } else if (err.msg != undefined) {\n              this.$toast(this.$t(err.msg));\n            }\n          });\n        } else {\n          this.form.session_token = this.initFutrue.session_token;\n          this.openOrder(_order, emitFunc);\n        }\n      }\n    },\n    openOrder(_order, emitFunc) {\n      _order(this.form).then(res => {\n        if (this.selectIndex / 1 === 1) {\n          this.$refs.sliderRef.emptyValue();\n        }\n        this.$toast(this.$t(\"操作成功\"));\n        _getBalance().then(data => {\n          // 刷新余额\n          this.$store.commit(\"user/SET_USERINFO\", {\n            balance: data.money\n          });\n        });\n        this.$emit(\"ordered\", emitFunc);\n        if (this.selectIndex / 1 === 2) {\n          // 交割合约需要弹出详情框\n          _futrueOrderDetail(res.order_no).then(data => {\n            this.detailData = data;\n            this.show = true;\n          });\n        }\n      }).catch(() => {\n        // 也需要重新初始化\n        this.$emit(\"ordered\", emitFunc);\n        if (this.selectIndex / 1 === 1) {\n          this.$refs.sliderRef.emptyValue();\n        }\n      });\n    },\n    //价格类型下拉框切换\n    selectBtn() {\n      this.isShow = !this.isShow;\n    },\n    selectArryBtn() {\n      this.arryIsShow = !this.arryIsShow;\n    },\n    onSelect(item) {\n      this.actions.map(item => {\n        item.className = \"\";\n      });\n      item.className = \"actions-active\";\n      this.showType = item.value;\n      this.$emit(\"changeValueBack\", this.showType);\n    },\n    onCancel() {\n      this.isSelectShow = false;\n    },\n    selectItemArry(item) {\n      this.dataArrValue = item.value;\n      this.arryIsShow = false;\n      this.dataArrTitle = item.name;\n    }\n  }\n};","map":{"version":3,"names":["config","mapGetters","AmountSlider","_orderOpen","_orderClose","_futrueOrder","_futrueOrderDetail","_getBalance","_futrueOrderInit","ContractFutrue","PopupDelivery","fixDate","_getHomeList","getStorage","name","components","_Popup","_ActionSheet","props","greenData","type","Array","default","redData","symbol","String","price","Number","initOpen","Object","initClose","initFutrue","selectIndex","currentType","watch","val","form","para_id","para","paraIndex","deep","handler","handleInitSliderOption","newVal","oldVal","amount","getHomeList","dataArrValue","map","item","parseFloat","toFixed","substring","indexOf","approximately","mounted","$route","params","setInterval","location","href","reload","computed","userInfo","theme","initData","obj","lever","length","id","lever_rate","coudBuyVolume","Math","floor","volume","filters","nan","isNaN","data","currentBuyType","timeout2","timeout","detailData","show","popType","showOptions","options","sliderOptions","value","isShow","title","$t","selectData","session_token","direction","price_type","stop_price_profit","stop_price_loss","focus","selectDataArry","isSelectShow","actions","className","showType","dataArrTitle","arryIsShow","marks","beforeDestroy","clearTimeout","activated","methods","getAmount","getVolumnByLever","vol","then","res","numberText","close","numberLength","arry","str","j","push","newArry","arryItem","concat","slice","dataObj","continueTobuy","setTimeout","$router","onQuickPrice","handleTimeEnd","order","state","console","log","max","disabled","handleChoose","onAdd","onReduce","jump","onParaId","index","onInput","$refs","sliderRef","amountChange","selectBtn","selectItem","changeTab","$emit","emptyValue","onClose","token","$toast","fail","_order","emitFunc","openOrder","undefined","catch","err","code","msg","$store","commit","balance","money","order_no","selectArryBtn","onSelect","onCancel","selectItemArry"],"sources":["src/components/perpetual-open/index.vue"],"sourcesContent":["<template>\n  <!-- 永续合约开仓页 -->\n  <div class=\"perpetual-open\">\n    <!-- 隐藏杠杠   全仓     k 线图入口 -->\n    <!-- <div class=\"flex header-open\">\n      <div class=\"flex flex-1 pt-34\">\n        <div class=\"w-180 h-60 lh-60 text-center rounded inputBackground textColor\">\n          {{ $t(\"全仓\") }}\n        </div>\n        <div class=\"w-140 h-60 lh-60 ml-29 rounded tabBackground textColor\" v-if=\"selectIndex / 1 === 1\">\n          <div @click=\"showOptions = !showOptions\" style=\"height: 100%; box-sizing: border-box\"\n            class=\"relative word-30 pl-28 pr-10 w-140 h-60 select-wrap flex justify-between items-center\">\n            {{ form.lever_rate }}x\n            <img src=\"../../assets/image/public/grey-select.png\" alt=\"select-icon\" class=\"w-22 h-11\" />\n            <div v-if=\"showOptions\" class=\"options w-140 absolute top-97 left-0 z-10\">\n              <div class=\"w-full\" @click.stop=\"handleChoose(item)\" :class=\"{\n                'option-active': form.lever_rate === item.lever_rate,\n              }\" :value=\"item.lever_rate\" v-for=\"item in initData.lever\" :key=\"item.id\">\n                {{ item.lever_rate }}x\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div>\n        <img src=\"../../assets/image/public/k-line.png\" alt=\"line-img\" class=\"w-38 h-35\" @click=\"jump\" />\n      </div>\n    </div> -->\n    <div class=\"pt-30 pb-20\">\n      <div class=\"flex\">\n        <div class=\"mr-30\">\n          <div class=\"w-290 flex justify-between text-grey font-22\">\n            <div>\n              <div>{{ $t(\"价格\") }}</div>\n              <div class=\"mt-4\">(USDT)</div>\n            </div>\n            <div class=\"text-right items-end justify-end\">\n              <div class=\"\">{{ $t(\"数量\") }}</div>\n              <div class=\"mt-4\">({{ symbol.toUpperCase() || \"--\" }})</div>\n            </div>\n          </div>\n          <div\n            v-if=\"showType == 0 || showType == 1\"\n            class=\"w-290 flex justify-between pt-12 font-26\"\n            v-for=\"(item, index) in greenData\"\n            :key=\"index\"\n            @click=\"onQuickPrice(item.price)\"\n            :style=\"{\n              background:\n                `linear-gradient(to right,${\n                  theme == 'dark' ? '#121212' : '#ffffff'\n                } 0%` +\n                (1 - item.amount / greenData[greenData.length - 1].amount) *\n                  100 +\n                '%,rgba(94,186,137,.1) ' +\n                (1 - item.amount / greenData[greenData.length - 1].amount) *\n                  100 +\n                '%,rgba(94,186,137,.1) 100%)',\n            }\"\n          >\n            <div class=\"text-green\">{{ item.price }}</div>\n            <div class=\"text-right textColor\" v-if=\"symbol == 'shib'\">\n              {{ fixDate(item.amount, $i18n) || \"--\" }}\n            </div>\n            <div class=\"text-right textColor\" v-else>\n              {{ item.amount || \"--\" }}\n            </div>\n          </div>\n          <div\n            v-if=\"showType == 0 || showType == 1 || showType == 2\"\n            class=\"w-290 text-red pt-12 font-34 font-700 text-center\"\n          >\n            {{ approximately || \"--\" }}\n          </div>\n          <div\n            v-if=\"showType == 0 || showType == 1 || showType == 2\"\n            class=\"approximately-text pb-12 font-20 text-center\"\n          >\n            ≈ {{ price || \"--\" }}\n          </div>\n          <div\n            v-if=\"showType == 0 || showType == 2\"\n            class=\"w-290 flex justify-between pt-12 font-26\"\n            v-for=\"(item, index) in redData\"\n            :key=\"item + index\"\n            @click=\"onQuickPrice(item.price)\"\n            :style=\"{\n              background:\n                `linear-gradient(to right,${\n                  theme == 'dark' ? '#121212' : '#ffffff'\n                } 0%` +\n                (1 - item.amount / greenData[greenData.length - 1].amount) *\n                  100 +\n                '%,rgba(246,70,93,.1) ' +\n                (1 - item.amount / greenData[greenData.length - 1].amount) *\n                  100 +\n                '%,rgba(246,70,93,.1) 100%)',\n            }\"\n          >\n            <div class=\"text-red\">{{ item.price }}</div>\n            <div class=\"text-right textColor\" v-if=\"symbol == 'shib'\">\n              {{ fixDate(item.amount, $i18n) || \"--\" }}\n            </div>\n            <div class=\"text-right textColor\" v-else>\n              {{ item.amount || \"--\" }}\n            </div>\n          </div>\n          <div class=\"flex k-select-box\">\n            <div class=\"mt-30 mb-30 select-box\" style=\"position: relative\">\n              <div\n                class=\"flex justify-between items-center w-full h-70\"\n                @click=\"selectArryBtn\"\n              >\n                <!-- <img src=\"@/assets/image/public/warn.png\" alt=\"warn-icon\" class=\"w-25 h-25 pl-20\"/> -->\n                <div class=\"pl-16 textColor\" style=\"width: 80%\">\n                  {{ dataArrTitle }}\n                </div>\n                <img\n                  src=\"@/assets/image/public/grey-select.png\"\n                  alt=\"select-icon\"\n                  class=\"w-22 h-11 pr-20\"\n                />\n              </div>\n              <div class=\"option-box\" v-show=\"arryIsShow\">\n                <div\n                  class=\"font-30\"\n                  v-for=\"(item, index) in selectDataArry\"\n                  :key=\"index\"\n                  @click=\"selectItemArry(item)\"\n                >\n                  {{ item.name }}\n                </div>\n              </div>\n            </div>\n            <div @click=\"isSelectShow = true\">\n              <img\n                src=\"@/assets/image/selectIcon.png\"\n                alt=\"warn-icon\"\n                class=\"w-36 h-30\"\n              />\n            </div>\n          </div>\n        </div>\n        <div class=\"w-440 flex flex-col\">\n          <template v-if=\"selectIndex == 1\">\n            <div class=\"flex items-center h-66 rounded-lg text-grey\">\n              <p\n                class=\"font-28 flex-1 flex items-center justify-center h-66 long\"\n                :class=\"currentType == 'long' ? 'long' : ''\"\n                @click=\"changeTab('long')\"\n              >\n                {{ $t(\"开多\") }}\n              </p>\n              <p\n                class=\"font-28 flex-1 ml-20 flex items-center justify-center h-66 short\"\n                :class=\"currentType == 'short' ? 'short' : ''\"\n                @click=\"changeTab('short')\"\n              >\n                {{ $t(\"开空\") }}\n              </p>\n            </div>\n            <div class=\"mt-30 mb-30\" style=\"position: relative\">\n              <div\n                class=\"box-show flex justify-between items-center w-full h-76 rounded-lg textColor\"\n                @click=\"selectBtn\"\n              >\n                <img\n                  src=\"../../assets/image/public/warn.png\"\n                  alt=\"warn-icon\"\n                  class=\"w-25 h-25 pl-20\"\n                />\n                <div class=\"text-center\" style=\"width: 80%\">{{ title }}</div>\n                <img\n                  src=\"../../assets/image/public/grey-select.png\"\n                  alt=\"select-icon\"\n                  class=\"w-22 h-11 pr-20\"\n                />\n              </div>\n              <div class=\"option-box\" v-show=\"isShow\">\n                <div\n                  class=\"font-30\"\n                  v-for=\"item in selectData\"\n                  :key=\"item.type\"\n                  @click=\"selectItem(item)\"\n                >\n                  {{ item.title }}\n                </div>\n              </div>\n            </div>\n          </template>\n          <contract-futrue\n            v-if=\"selectIndex == 2\"\n            class=\"mb-20 box-show\"\n            :initFutrue=\"initFutrue\"\n            @paraId=\"onParaId\"\n          />\n          <div\n            class=\"h-76 lh-76 mb-30 flex pr-20 justify-center rounded-lg textColor\"\n            v-if=\"selectIndex == 1\"\n          >\n            <input\n              placeholder=\"\"\n              class=\"w-full pl-20 h-76 border-none text-left rounded-lg\"\n              :disabled=\"type / 1 === 1\"\n              @focus=\"focus = true\"\n              v-model=\"form.price\"\n            />\n            <span class=\"ml-20\">USDT</span>\n          </div>\n          <!-- <div\n            class=\"h-76 lh-76 inputBackground mb-30 flex pr-20 justify-center rounded-lg textColor\"\n            v-if=\"selectIndex == 1\"\n          >\n            <input\n              :placeholder=\"selectIndex == 1 ? $t('请输入止盈金额') : ''\"\n              class=\"inputBackground pl-20 h-76 border-none text-left rounded-lg\"\n              v-model=\"form.stop_price_profit\"\n            />\n            <span class=\"font-22 font-400 textColor\">{{ $t(\"止盈\") }}</span>\n          </div> -->\n          <!-- <div\n            class=\"h-76 lh-76 inputBackground mb-30 flex pr-20 justify-center rounded-lg textColor\"\n            v-if=\"selectIndex == 1\"\n          >\n            <input\n              :placeholder=\"selectIndex == 1 ? $t('请输入止损金额') : ''\"\n              class=\"inputBackground pl-20 h-76 border-none text-left rounded-lg\"\n              v-model=\"form.stop_price_loss\"\n            />\n            <span class=\"font-22 font-400 textColor\">{{ $t(\"止损\") }}</span>\n          </div> -->\n          <div\n            class=\"w-440 flex items-center inputBackground h-76 lh-76 rounded-lg\"\n          >\n            <div\n              v-if=\"selectIndex == 1\"\n              class=\"w-80 flex items-center justify-center\"\n              style=\"height: 100%\"\n              @click=\"onReduce\"\n            >\n              <img\n                src=\"../../assets/image/public/reduce.png\"\n                alt=\"add\"\n                class=\"w-30 h-6\"\n              />\n            </div>\n            <input\n              :placeholder=\"\n                selectIndex == 1\n                  ? $t('张数')\n                  : $t('最少') + initFutrue && initFutrue.para\n                  ? $t('最小金额') + initFutrue.para[paraIndex].buy_min\n                  : ''\n              \"\n              class=\"border-none inputBackground text-center textColor\"\n              style=\"width: 156px\"\n              v-model=\"form.amount\"\n              type=\"number\"\n              @input=\"onInput\"\n            />\n            <div\n              class=\"w-80 flex items-center justify-center\"\n              style=\"height: 100%\"\n            >\n              <template v-if=\"selectIndex == 1\">\n                <img\n                  @click=\"onAdd\"\n                  src=\"../../assets/image/public/add.png\"\n                  alt=\"reduce\"\n                  class=\"w-30 h-30\"\n                />\n              </template>\n              <template v-else>\n                <span class=\"textColor\">USDT</span>\n              </template>\n            </div>\n          </div>\n          <template v-if=\"selectIndex == 1\">\n            <div class=\"mt-40 mb-30 w-full flex justify-between items-center\">\n              <span class=\"font-22 font-400 text-grey\">{{\n                $t(\"可开张数\")\n              }}</span>\n              <span class=\"font-22 font-400 textColor\">\n                {{ initData.volume }}\n                {{ $t(\"张\") }}\n              </span>\n            </div>\n            <!-- <vue-slider v-bind=\"options\" v-model=\"form.amount\"></vue-slider> -->\n            <!-- <vue-slider class=\"mainBox\" v-bind=\"options\" :marks=\"marks\" v-model=\"form.volume\" :hide-label=\"true\"  width=\"90%\"\n              :railStyle=\"{ background: '#404040', height: '4px' }\"\n              :processStyle=\"{ background: '#266BFF', height: '4px' }\">\n              <template v-slot:step=\"{ active }\">\n                <div :class=\"['custom-step', { active }]\"></div>\n              </template>\n            </vue-slider>\n            <div style=\"color: #868D9A\" class=\"mt-36 font-24 w-full flex justify-between items-center\">\n              <span class=\"flex-1 text-left\">0%</span>\n              <span class=\"flex-1 text-left\">25%</span>\n              <span class=\"flex-1 text-center\">50%</span>\n              <span class=\"flex-1 text-right\">75%</span>\n              <span class=\"flex-1 text-right\">100%</span>\n            </div> -->\n            <!-- 张数输入 -->\n            <amount-slider\n              ref=\"sliderRef\"\n              :maxAmount=\"getVolumnByLever()\"\n              @getAmount=\"getAmount\"\n            ></amount-slider>\n          </template>\n          <template v-if=\"selectIndex == 1 && userInfo.token\">\n            <div class=\"flex justify-between mt-30\">\n              <div class=\"text-grey\">{{ $t(\"合约金额\") }}</div>\n              <div class=\"textColor\">\n                {{ initData.amount * (form.amount / 1) * form.lever_rate }} USDT\n              </div>\n            </div>\n            <div class=\"flex justify-between mt-30\">\n              <div class=\"text-grey\">{{ $t(\"保证金\") }}</div>\n              <div class=\"textColor\">\n                {{ (initData.amount * (form.amount / 1)) | nan }} USDT\n              </div>\n            </div>\n            <div class=\"flex justify-between mt-30\">\n              <div class=\"text-grey\">{{ $t(\"建仓手续费\") }}</div>\n              <div class=\"textColor\">\n                {{\n                  userInfo.perpetual_contracts_status === \"1\"\n                    ? initData.fee * (form.amount / 1)\n                    : (initData.fee * (form.amount / 1) * form.lever_rate) | nan\n                }}\n                USDT\n              </div>\n            </div>\n          </template>\n          <div\n            class=\"flex font-24 text-grey justify-between mt-32\"\n            v-if=\"selectIndex == 2\"\n          >\n            <div>{{ $t(\"可用USDT\") }}</div>\n            <div class=\"textColor\">{{ initFutrue.amount | nan }} USDT</div>\n          </div>\n          <div\n            class=\"flex font-24 text-grey justify-between mt-20\"\n            v-if=\"selectIndex == 2\"\n          >\n            <div>{{ $t(\"手续费\") }}</div>\n            <div class=\"textColor\">\n              {{\n                (\n                  form.amount *\n                  (initFutrue && initFutrue.para\n                    ? initData.para[paraIndex].unit_fee\n                    : \"\")\n                ).toFixed(2) | nan\n              }}\n              USDT\n            </div>\n          </div>\n          <template v-if=\"userInfo.token\">\n            <template v-if=\"selectIndex == 1\">\n              <div\n                class=\"w-full h-80 lh-80 bg-green flex text-white rounded-md mt-50\"\n                v-if=\"currentType == 'long'\"\n                @click=\"order('long')\"\n              >\n                <div\n                  class=\"font-34 relative text-center\"\n                  style=\"flex-grow: 1\"\n                  v-if=\"selectIndex == 1\"\n                >\n                  {{ $t(\"开多\") }}\n                  <span class=\"right-word font-22 text-center\">{{\n                    $t(\"看涨\")\n                  }}</span>\n                </div>\n                <div\n                  class=\"font-34 relative text-center\"\n                  style=\"flex-grow: 1\"\n                  v-else\n                >\n                  {{ $t(\"做多买入\") }}\n                </div>\n              </div>\n              <div\n                class=\"w-full h-80 lh-80 bg-red flex text-white rounded-md mt-50\"\n                v-if=\"currentType == 'short'\"\n                @click=\"order('short')\"\n              >\n                <div\n                  class=\"relative font-34 text-center\"\n                  style=\"flex-grow: 1\"\n                  v-if=\"selectIndex == 1\"\n                >\n                  {{ $t(\"开空\") }}\n                  <span class=\"right-word font-22 text-center\">{{\n                    $t(\"看跌\")\n                  }}</span>\n                </div>\n                <div\n                  class=\"relative font-34 text-center\"\n                  style=\"flex-grow: 1\"\n                  v-else\n                >\n                  {{ $t(\"做空买入\") }}\n                </div>\n              </div>\n            </template>\n            <template v-if=\"selectIndex == 2\">\n              <div\n                class=\"w-full h-80 lh-80 bg-green flex text-white rounded-md mt-30\"\n                @click=\"order('open')\"\n                v-if=\"userInfo.token\"\n              >\n                <div class=\"font-34 relative text-center\" style=\"flex-grow: 1\">\n                  {{ $t(\"开多\") }}\n                  <span class=\"right-word font-22 text-center\">{{\n                    $t(\"看涨\")\n                  }}</span>\n                </div>\n              </div>\n              <div\n                class=\"w-full h-80 lh-80 bg-red flex text-white rounded-md mt-20 mb-10\"\n                style=\"position: relative\"\n                :class=\"{ 'mt-22': selectIndex == 2 }\"\n                @click=\"order('close')\"\n                v-if=\"userInfo.token\"\n              >\n                <div class=\"relative font-34 text-center\" style=\"flex-grow: 1\">\n                  {{ $t(\"开空\") }}\n                  <span class=\"right-word font-22 text-center\">{{\n                    $t(\"看跌\")\n                  }}</span>\n                </div>\n              </div>\n            </template>\n          </template>\n          <div v-else class=\"w-full mt-120\">\n            <div class=\"textColor\">\n              <p>{{ $t(\"套期保值,风险对冲\") }}</p>\n              <p class=\"pt-8\">{{ $t(\"登陆后继续\") }}</p>\n            </div>\n            <div\n              class=\"h-80 lh-80 btnBackground flex text-white rounded-md justify-center mt-50\"\n              @click=\"$router.push('/login')\"\n            >\n              {{ $t(\"登录后进行交易\") }}\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <van-popup v-model=\"show\" class=\"rounded-2xl\">\n      <popup-delivery\n        showBtns\n        :detailData=\"detailData\"\n        :key=\"detailData.order_no\"\n        @close=\"onClose\"\n        @continueToBuy=\"continueTobuy\"\n        @timeEnd=\"handleTimeEnd\"\n        :price=\"price\"\n      />\n    </van-popup>\n    <van-action-sheet\n      v-model=\"isSelectShow\"\n      @select=\"onSelect\"\n      :actions=\"actions\"\n      :cancel-text=\"$t('取消')\"\n      close-on-click-action\n      @cancel=\"onCancel\"\n    >\n    </van-action-sheet>\n  </div>\n</template>\n\n<script>\nimport config from \"@/config\";\nimport { Popup, ActionSheet } from \"vant\";\nimport { mapGetters } from \"vuex\";\n// import VueSlider from \"vue-slider-component\";\nimport AmountSlider from \"./amountSlider.vue\";\nimport \"vue-slider-component/theme/default.css\";\nimport {\n  _orderOpen,\n  _orderClose,\n  _futrueOrder,\n  _futrueOrderDetail,\n  _getBalance,\n  _futrueOrderInit,\n} from \"@/API/trade.api\";\nimport ContractFutrue from \"@/components/contract-futrue\";\nimport PopupDelivery from \"@/components/popup-delivery\";\nimport { fixDate } from \"@/utils/utis\";\nimport { _getHomeList } from \"@/API/home.api\";\nimport { getStorage } from \"@/utils/utis\";\n// import PopupConfirmOrder from '@/components/popup-confirm-order'\nexport default {\n  name: \"perpetualPosition\",\n  components: {\n    // VueSlider,\n    AmountSlider,\n    ContractFutrue,\n    [Popup.name]: Popup,\n    PopupDelivery,\n    [ActionSheet.name]: ActionSheet,\n    // PopupConfirmOrder\n  },\n  props: {\n    greenData: {\n      // 买单\n      type: Array,\n      default() {\n        return [];\n      },\n    },\n    redData: {\n      // 卖单\n      type: Array,\n      default() {\n        return [];\n      },\n    },\n    symbol: {\n      type: String,\n      default: \"\",\n    },\n    price: {\n      type: [Number, String],\n      default: \"0.00\",\n    },\n    initOpen: {\n      type: Object,\n      default() {\n        return {};\n      },\n    },\n    initClose: {\n      type: Object,\n      default() {\n        return {};\n      },\n    },\n    initFutrue: {\n      type: Object,\n      default() {\n        return {};\n      },\n    },\n    selectIndex: {\n      type: [String, Number],\n      default: 1,\n    },\n    currentType: {\n      type: String,\n      default: \"long\",\n    },\n  },\n  watch: {\n    price(val) {\n      if (this.type === \"1\") {\n        // !this.focus &&\n        this.form.price = val;\n      }\n      this.form.para_id =\n        this.initFutrue.para && this.initFutrue.para[this.paraIndex].para_id; // 不优雅,不可靠\n      // this.form.symbol = this.symbol.toLowerCase()\n    },\n    initOpen: {\n      // 处理滚动条初始值\n      deep: true,\n      handler(val) {\n        this.handleInitSliderOption();\n      },\n    },\n    initClose: {\n      // 处理滚动条初始值\n      deep: true,\n      handler(newVal, oldVal) {\n        if (newVal.amount / 1 > 0) {\n          this.handleInitSliderOption(true);\n        }\n      },\n    },\n    symbol(val) {\n      this.getHomeList(val);\n    },\n    greenData(val) {\n      if (this.dataArrValue >= 1) {\n        this.greenData.map((item) => {\n          item.price = parseFloat(item.price).toFixed(this.dataArrValue);\n        });\n        this.redData.map((item) => {\n          item.price = parseFloat(item.price).toFixed(this.dataArrValue);\n        });\n      } else {\n        if (this.dataArrValue == -1) {\n          this.greenData.map((item) => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\"));\n          });\n          this.redData.map((item) => {\n            item.price = item.price.substring(0, item.price.indexOf(\".\"));\n          });\n        }\n        if (this.dataArrValue == -2) {\n          this.greenData.map((item) => {\n            item.price =\n              item.price.substring(0, item.price.indexOf(\".\") - 1) + \"0\";\n          });\n          this.redData.map((item) => {\n            item.price =\n              item.price.substring(0, item.price.indexOf(\".\") - 1) + \"0\";\n          });\n        }\n        if (this.dataArrValue == -3) {\n          this.greenData.map((item) => {\n            item.price =\n              item.price.substring(0, item.price.indexOf(\".\") - 2) + \"00\";\n          });\n          this.redData.map((item) => {\n            item.price =\n              item.price.substring(0, item.price.indexOf(\".\") - 2) + \"00\";\n          });\n        }\n      }\n      this.approximately = this.redData[0].price;\n    },\n  },\n  mounted() {\n    this.getHomeList(this.$route.params.symbol);\n    setInterval(() => {\n      // 刷新页面\n      if (\n        location.href.indexOf(\"#reloaded\") == -1 &&\n        location.href.indexOf(\"perpetualContract\") > 0\n      ) {\n        location.href = location.href + \"#reloaded\";\n        location.reload();\n      }\n    }, 1000); // 1000毫秒 = 1秒\n  },\n  computed: {\n    ...mapGetters({\n      userInfo: \"user/userInfo\",\n      theme: \"home/theme\",\n    }),\n    initData() {\n      let obj = null;\n      if (this.selectIndex / 1 === 1) {\n        obj = this.initOpen;\n        if (!obj.lever || !obj.lever.length) {\n          // 倍数\n          obj.lever = [{ id: 1, lever_rate: 1 }];\n        }\n        return obj;\n      }\n      return this.initFutrue;\n    },\n    coudBuyVolume() {\n      // 可买数量\n      return Math.floor(this.initOpen.volume / 1 / this.form.lever_rate);\n    },\n  },\n  filters: {\n    nan(val) {\n      return isNaN(val) ? \"--\" : val;\n    },\n  },\n  data() {\n    return {\n      fixDate,\n      currentBuyType: \"\", // 交割合约当前下单的类型,用于弹窗倒计时结束以后,点击再下一单\n      timeout2: null,\n      timeout: null,\n      detailData: {}, // 交割合约订单详情数据\n      show: false,\n      popType: \"confirm\", // 弹框类型 confirm / counting\n      showOptions: false,\n      options: config.sliderOptions,\n      value: 0,\n      isShow: false,\n      title: this.$t(\"市价\"),\n      paraIndex: 0,\n      selectData: [\n        { title: this.$t(\"市价\"), type: \"1\" },\n        { title: this.$t(\"限价\"), type: \"2\" },\n      ],\n      form: {\n        symbol: \"\", // 币种\n        session_token: \"\",\n        direction: \"buy\", // 买or卖\n        price_type: \"opponent\", // 市价or限价\n        lever_rate: 1, // 杠杆\n        stop_price_profit: \"\",\n        stop_price_loss: \"\",\n        price: \"\",\n        amount: \"\", // 数量\n        para_id: \"\", // 交割周琦id\n      },\n      focus: false,\n      type: \"1\", //选中市价或限价类型\n      // currentType:\"open\", //开仓类型\n      // action: _orderOpen // 开仓or\n      isShow: false,\n      selectDataArry: [],\n      isSelectShow: false,\n      actions: [\n        { name: this.$t(\"默认\"), value: 0, className: \"actions-active\" },\n        { name: this.$t(\"展示买单\"), value: 1, className: \"\" },\n        { name: this.$t(\"展示卖单\"), value: 2, className: \"\" },\n      ],\n      showType: 0,\n      dataArrTitle: 0,\n      dataArrValue: 0,\n      arryIsShow: false,\n      marks: (val) => val % 50 === 0,\n      approximately: \"\",\n    };\n  },\n  beforeDestroy() {\n    this.clearTimeout();\n  },\n  activated() {\n    this.selectData = [\n      { title: this.$t(\"市价\"), type: \"1\" },\n      { title: this.$t(\"限价\"), type: \"2\" },\n    ];\n    this.title = this.selectData[0].title;\n    this.type = this.selectData[0].type;\n  },\n\n  methods: {\n    //获取张数\n    getAmount(val) {\n      this.form.amount = val;\n    },\n    // 获取张数,数据转换\n    getVolumnByLever() {\n      let vol;\n      vol = this.initOpen.volume / 1;\n      return Math.floor(vol);\n    },\n\n    getHomeList(symbol) {\n      _getHomeList(symbol).then((res) => {\n        let numberText = res[0].close;\n        let numberLength = numberText.substring(\n          numberText.indexOf(\".\") + 1,\n          numberText.length\n        ).length;\n        let arry = [];\n        let str = \"0.\";\n        for (let j = 0; j < numberLength - 1; j++) {\n          str = str + \"0\";\n          arry.push(str);\n        }\n        let newArry = [];\n        arry.map((item) => {\n          let obj = {\n            name: item + \"1\",\n            value:\n              item.substring(item.indexOf(\".\") + 1, item.length).length + 1,\n          };\n          newArry.push(obj);\n        });\n        if (numberLength <= 2) {\n          let obj = [\n            {\n              name: \"0.1\",\n              value: 1,\n            },\n            {\n              name: \"1\",\n              value: -1,\n            },\n            {\n              name: \"10\",\n              value: -2,\n            },\n            // {\n            //   name: '100',\n            //   value: -3,\n            // }\n          ];\n          let arryItem = {\n            name: \"100\",\n            value: -3,\n          };\n          if (numberText.substring(0, numberText.indexOf(\".\")).length > 2) {\n            obj.push(arryItem);\n          }\n          newArry = newArry.concat(obj);\n        }\n        if (this.symbol == \"shib\") {\n          newArry = newArry.slice(-4);\n        }\n        let dataObj = {\n          arry: newArry,\n          numberLength: numberLength,\n        };\n        this.selectDataArry = dataObj.arry;\n        if (numberLength >= 2) {\n          this.dataArrTitle = this.selectDataArry[0].name;\n        } else {\n          this.dataArrTitle =\n            this.selectDataArry[this.selectDataArry.length - 1].name;\n        }\n      });\n    },\n    continueTobuy(detailData) {\n      this.show = false;\n      setTimeout(() => {\n        this.$router.push(\n          `/trendDetails/${detailData.symbol}?direction=${detailData.direction}`\n        );\n      }, 300);\n    },\n    onQuickPrice(price) {\n      // 点击金额变化\n      if (this.type === \"2\") {\n        this.form.price = price;\n      }\n    },\n    clearTimeout() {\n      clearTimeout(this.timeout);\n      this.timeout = null;\n    },\n    handleTimeEnd(order) {\n      if (this.selectIndex / 1 === 2) {\n        // 交割合约需要弹出详情框\n        _futrueOrderDetail(order).then((data) => {\n          this.clearTimeout();\n          this.detailData = data;\n          if (data.state !== \"created\") {\n            this.timeout = setTimeout(() => {\n              this.handleTimeEnd(order);\n            }, 1000);\n          }\n        });\n      }\n    },\n    handleInitSliderOption(amount) {\n      if (!amount) {\n        // 金额是否需要变动\n        this.form.amount = \"\";\n      }\n      console.log(this.initOpen.volume, this.form.lever_rate);\n      let vol;\n      vol = this.initOpen.volume / 1;\n      this.options.max = Math.floor(vol);\n      console.log(\"this.options.max\", this.options.max);\n      if (this.options.max > 0) {\n        this.options.disabled = false;\n      } else {\n        this.options.disabled = true;\n      }\n    },\n    handleChoose(item) {\n      this.showOptions = !this.showOptions;\n      this.form.lever_rate = item.lever_rate;\n      console.log(\"handleChoose\");\n      this.handleInitSliderOption();\n    },\n    onAdd() {\n      // +\n      if (this.options.max === 0) {\n        return;\n      }\n      if (this.form.amount === this.options.max) {\n        return;\n      }\n      console.log(this.options.max);\n      this.form.amount++;\n    },\n    onReduce() {\n      // -\n      if (this.form.amount > 1) {\n        this.form.amount--;\n      }\n    },\n    jump() {\n      this.$router.push(`/trendDetails/${this.symbol}`);\n    },\n    onParaId({ id, index }) {\n      // 交割日期\n      // console.log(evt)\n      this.form.para_id = id;\n      this.form.amount = \"\";\n      this.paraIndex = index;\n    },\n    onInput() {\n      // 数量变化\n      // console.log(1111111, this.form.amount, this.selectIndex)\n      if (this.selectIndex == 1 && this.options.max == 0) {\n        this.form.amount = this.form.amount / 1;\n      } else if (\n        this.selectIndex == 1 &&\n        this.form.amount / 1 > this.options.max / 1\n      ) {\n        this.form.amount = this.options.max / 1;\n      }\n      if (this.selectIndex / 1 === 1) {\n        this.$refs.sliderRef.amountChange(this.form.amount);\n      }\n    },\n    //价格类型下拉框切换\n    selectBtn() {\n      this.isShow = !this.isShow;\n    },\n    //选择价格类型\n    selectItem(item) {\n      if (item.type == 1) {\n        this.form.price = this.price;\n      }\n      this.form.price_type = item.type === \"1\" ? \"opponent\" : \"limit\";\n      this.title = item.title;\n      this.type = item.type;\n      this.isShow = false;\n    },\n    //选择开仓类型\n    changeTab(type) {\n      // 开仓和\n      console.log(\"changeTab\", type);\n\n      if (this.currentType === type) {\n        return;\n      }\n      this.$emit(\"changeCurrentType\", type);\n      // this.currentType = type;\n\n      this.$refs.sliderRef.emptyValue();\n      this.handleInitSliderOption();\n    },\n    onClose() {\n      // 关闭\n      this.show = false;\n      setTimeout(() => {\n        this.popType = \"confirm\";\n      }, 500);\n    },\n    // onOrderConfirm() {\n    //   /// 交割合约确认\n    //   this.show = false;\n    //   this.popType = \"counting\";\n    //   this.order(this.form.direction === \"buy\" ? \"open\" : \"close\");\n    // },\n    order(type) {\n      if (!this.userInfo.token) {\n        this.$router.push(\"/login\");\n        return false;\n      }\n      //  if (!this.form.stop_price_profit) {\n      //  \tthis.$toast.fail(this.$t(\"请输入止盈金额\"));\n      //  \t return false;\n      //  \t}\n      // if (!this.form.stop_price_loss) {\n      // \tthis.$toast.fail(this.$t(\"请输入止损金额\"));\n      // \t return false;\n      // \t}\n      if (!this.form.amount) {\n        if (this.selectIndex == 1) {\n          this.$toast.fail(this.$t(\"请输入合约张数\"));\n        } else {\n          this.$toast.fail(this.$t(\"请输入金额\"));\n        }\n        return;\n      }\n\n      // this.form.direction = type\n      this.form.symbol = this.$route.params.symbol;\n      if (type == \"long\" || type == \"open\") {\n        this.form.direction = \"buy\";\n      } else {\n        this.form.direction = \"sell\";\n      }\n      let _order = null; // api\n      let emitFunc = null; // 触发函数\n      if (this.selectIndex / 1 === 1) {\n        // 永续合约\n        this.form.session_token = this.initOpen.session_token;\n        _order = _orderOpen;\n        emitFunc = this.currentType;\n        this.openOrder(_order, emitFunc);\n      } else {\n        // 交割合约\n        this.form.session_token = this.initFutrue.session_token;\n        _order = _futrueOrder;\n        emitFunc = \"futrue\";\n        if (\n          this.initFutrue.session_token == undefined ||\n          this.initFutrue.session_token == \"\"\n        ) {\n          _futrueOrderInit(this.symbol)\n            .then((data) => {\n              this.form.session_token = data.session_token;\n              this.openOrder(_order, emitFunc);\n            })\n            .catch((err) => {\n              if (err.code == \"ECONNABORTED\") {\n                this.$toast(this.$t(\"网络超时!\"));\n              } else if (err.msg != undefined) {\n                this.$toast(this.$t(err.msg));\n              }\n            });\n        } else {\n          this.form.session_token = this.initFutrue.session_token;\n          this.openOrder(_order, emitFunc);\n        }\n      }\n    },\n    openOrder(_order, emitFunc) {\n      _order(this.form)\n        .then((res) => {\n          if (this.selectIndex / 1 === 1) {\n            this.$refs.sliderRef.emptyValue();\n          }\n          this.$toast(this.$t(\"操作成功\"));\n          _getBalance().then((data) => {\n            // 刷新余额\n            this.$store.commit(\"user/SET_USERINFO\", { balance: data.money });\n          });\n          this.$emit(\"ordered\", emitFunc);\n          if (this.selectIndex / 1 === 2) {\n            // 交割合约需要弹出详情框\n            _futrueOrderDetail(res.order_no).then((data) => {\n              this.detailData = data;\n              this.show = true;\n            });\n          }\n        })\n        .catch(() => {\n          // 也需要重新初始化\n          this.$emit(\"ordered\", emitFunc);\n          if (this.selectIndex / 1 === 1) {\n            this.$refs.sliderRef.emptyValue();\n          }\n        });\n    },\n    //价格类型下拉框切换\n    selectBtn() {\n      this.isShow = !this.isShow;\n    },\n    selectArryBtn() {\n      this.arryIsShow = !this.arryIsShow;\n    },\n    onSelect(item) {\n      this.actions.map((item) => {\n        item.className = \"\";\n      });\n      item.className = \"actions-active\";\n      this.showType = item.value;\n      this.$emit(\"changeValueBack\", this.showType);\n    },\n    onCancel() {\n      this.isSelectShow = false;\n    },\n    selectItemArry(item) {\n      this.dataArrValue = item.value;\n      this.arryIsShow = false;\n      this.dataArrTitle = item.name;\n    },\n  },\n};\n</script>\n\n<style lang=\"scss\" scoped>\n.perpetual-open {\n  font-size: 26px;\n}\n\n.options {\n  box-shadow: 0px 0px 7px rgba(0, 0, 0, 0.3);\n  border-radius: 6px;\n\n  @include themify() {\n    background: themed(\"tab_background\");\n  }\n\n  div {\n    font-size: 22px;\n    text-align: center;\n    width: 140px;\n    height: 50px;\n    line-height: 50px;\n\n    &.option-active {\n      @include themify() {\n        background: themed(\"tab_background\");\n      }\n    }\n  }\n}\n\n.right-word {\n  top: 50%;\n  transform: translateY(-50%);\n  right: 19px;\n  position: absolute;\n  border-radius: 6px;\n}\n\n.vue-slider {\n  height: 3px !important;\n  padding: 0 20px !important;\n}\n\n.vue-slider-dot {\n  width: 32px !important;\n  height: 32px !important;\n}\n\n.vue-slider-mark-label {\n  font-size: 16px;\n  margin-top: 14px !important;\n}\n\n.vue-slider-mark-label-active {\n  color: #868d9a !important;\n}\n\n.vue-slider-dot-handle {\n  border: 3px solid #2c78f8;\n}\n\n.vue-slider-mark {\n  width: 20px !important;\n  height: 20px !important;\n\n  &:nth-child(1) {\n    .vue-slider-mark-label {\n      transform: translateX(-14px) !important;\n    }\n  }\n\n  &:nth-child(5) {\n    .vue-slider-mark-label {\n      transform: translateX(-60px) !important;\n    }\n  }\n}\n\n// 开仓样式\n.tabcon {\n  // padding-bottom: 16%;\n  position: relative;\n  height: 80px;\n}\n\n.tab {\n  position: absolute;\n  left: 0px;\n  right: 0px;\n  top: 0px;\n  bottom: 0px;\n  display: flex;\n  align-items: center;\n  background-color: #f3f3f3;\n  border-radius: 5px;\n  overflow: hidden;\n}\n\n.tab > * {\n  height: 100%;\n}\n\n.tab > img {\n  margin-left: -2px;\n  margin-right: -2px;\n}\n\n.tab > a {\n  flex-grow: 1;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  cursor: pointer;\n}\n\n.open,\n.long {\n  background-color: #12b298;\n  color: white;\n}\n\n// 下拉\n.option-box {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 90px;\n  width: 100%;\n\n  @include themify() {\n    background: themed(\"grey_bg\");\n  }\n\n  text-align: center;\n\n  @include themify() {\n    box-shadow: 0px 0px 3px 3px themed(\"grey_bg\");\n  }\n\n  border-radius: 4px;\n\n  @include themify() {\n    color: themed(\"text_color3\");\n  }\n}\n\n.option-box > div {\n  padding: 30px 0;\n}\n\n.option-box > div:hover {\n  // background-color: #f5f5f5;\n}\n\n.num-text-color {\n  color: #4c4a54;\n}\n\nselect {\n  appearance: none;\n  /* 去掉默认图标 */\n  -moz-appearance: none;\n  /* Firefox */\n  -webkit-appearance: none;\n  /* Safari and Chrome */\n  padding: 0 20px 0 20px;\n  background: url(\"../../assets/image/public/grey-select.png\") no-repeat scroll\n    right center transparent;\n  /* 自己的图*/\n  background-size: 20px 11px;\n}\n\n.with100 {\n  width: 100%;\n}\n\n.height100 {\n  height: 100%;\n}\n\n.open {\n  background-color: #12b298;\n  // background: url(@/assets/image/public/open-bg.png) no-repeat right center;\n  // background-size: 100% 100%;\n  color: white;\n}\n\n.close,\n.short {\n  background-color: #f6465d;\n  // background: url(@/assets/image/public/close-bg.png) no-repeat left center;\n  // background-size: 100% 100%;\n  color: white;\n}\n\n// .custom-step {\n//   width: 10px;\n//   height: 10px;\n//   border-radius: 50%;\n//   background: fff;\n//   border: solid 1px #1d91ff;\n//   background: #fff;\n// }\n\n// .custom-step.active {\n//   box-shadow: 0 0 0 2px #1d91ff;\n//   background-color: #1d91ff;\n// }\n\n.all-div {\n  @include themify() {\n    background: themed(\"input_background1\");\n  }\n}\n\n.select-wrap {\n  @include themify() {\n    background: themed(\"input_background1\");\n  }\n\n  border: none;\n}\n\n.greyBg {\n  @include themify() {\n    border: 1px solid themed(\"input_background1\");\n  }\n\n  @include themify() {\n    background: themed(\"input_background1\");\n  }\n}\n\n.usdt-bg {\n  @include themify() {\n    background: themed(\"input_background1\");\n  }\n}\n\n.header-open {\n  align-items: center;\n}\n\n.k-select-box {\n  justify-content: flex-end;\n  padding-right: 40px;\n  align-items: center;\n\n  .select-box {\n    width: 220px;\n\n    @include themify() {\n      background: themed(\"input_background\");\n    }\n\n    margin-right: 20px;\n  }\n}\n\n.van-popup {\n  @include themify() {\n    background: themed(\"input_background1\");\n  }\n}\n\n::v-deep .van-popup {\n  @include themify() {\n    background: themed(\"input_background1\");\n  }\n}\n\n.actions-active {\n  @include themify() {\n    background: themed(\"color_main\") !important;\n  }\n\n  color: #fff !important;\n}\n\n.perpetual-open {\n  ::v-deep .van-action-sheet__item,\n  ::v-deep .van-action-sheet__cancel {\n    @include themify() {\n      background: themed(\"input_background1\");\n    }\n\n    @include themify() {\n      color: themed(\"text_color\");\n    }\n  }\n\n  ::v-deep .van-action-sheet__gap {\n    @include themify() {\n      background: themed(\"cont_background\");\n    }\n  }\n}\n\n.approximately-text {\n  @include themify() {\n    color: themed(\"text_color1\");\n  }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2dA,OAAAA,MAAA;AAEA,SAAAC,UAAA;AACA;AACA,OAAAC,YAAA;AACA;AACA,SACAC,UAAA,EACAC,WAAA,EACAC,YAAA,EACAC,kBAAA,EACAC,WAAA,EACAC,gBAAA,QACA;AACA,OAAAC,cAAA;AACA,OAAAC,aAAA;AACA,SAAAC,OAAA;AACA,SAAAC,YAAA;AACA,SAAAC,UAAA;AACA;AACA;EACAC,IAAA;EACAC,UAAA;IACA;IACAb,YAAA;IACAO,cAAA;IACA,CAAAO,MAAA,CAAAF,IAAA,GAAAE,MAAA;IACAN,aAAA;IACA,CAAAO,YAAA,CAAAH,IAAA,GAAAG;IACA;EACA;EACAC,KAAA;IACAC,SAAA;MACA;MACAC,IAAA,EAAAC,KAAA;MACAC,QAAA;QACA;MACA;IACA;IACAC,OAAA;MACA;MACAH,IAAA,EAAAC,KAAA;MACAC,QAAA;QACA;MACA;IACA;IACAE,MAAA;MACAJ,IAAA,EAAAK,MAAA;MACAH,OAAA;IACA;IACAI,KAAA;MACAN,IAAA,GAAAO,MAAA,EAAAF,MAAA;MACAH,OAAA;IACA;IACAM,QAAA;MACAR,IAAA,EAAAS,MAAA;MACAP,QAAA;QACA;MACA;IACA;IACAQ,SAAA;MACAV,IAAA,EAAAS,MAAA;MACAP,QAAA;QACA;MACA;IACA;IACAS,UAAA;MACAX,IAAA,EAAAS,MAAA;MACAP,QAAA;QACA;MACA;IACA;IACAU,WAAA;MACAZ,IAAA,GAAAK,MAAA,EAAAE,MAAA;MACAL,OAAA;IACA;IACAW,WAAA;MACAb,IAAA,EAAAK,MAAA;MACAH,OAAA;IACA;EACA;EACAY,KAAA;IACAR,MAAAS,GAAA;MACA,SAAAf,IAAA;QACA;QACA,KAAAgB,IAAA,CAAAV,KAAA,GAAAS,GAAA;MACA;MACA,KAAAC,IAAA,CAAAC,OAAA,GACA,KAAAN,UAAA,CAAAO,IAAA,SAAAP,UAAA,CAAAO,IAAA,MAAAC,SAAA,EAAAF,OAAA;MACA;IACA;IACAT,QAAA;MACA;MACAY,IAAA;MACAC,QAAAN,GAAA;QACA,KAAAO,sBAAA;MACA;IACA;IACAZ,SAAA;MACA;MACAU,IAAA;MACAC,QAAAE,MAAA,EAAAC,MAAA;QACA,IAAAD,MAAA,CAAAE,MAAA;UACA,KAAAH,sBAAA;QACA;MACA;IACA;IACAlB,OAAAW,GAAA;MACA,KAAAW,WAAA,CAAAX,GAAA;IACA;IACAhB,UAAAgB,GAAA;MACA,SAAAY,YAAA;QACA,KAAA5B,SAAA,CAAA6B,GAAA,CAAAC,IAAA;UACAA,IAAA,CAAAvB,KAAA,GAAAwB,UAAA,CAAAD,IAAA,CAAAvB,KAAA,EAAAyB,OAAA,MAAAJ,YAAA;QACA;QACA,KAAAxB,OAAA,CAAAyB,GAAA,CAAAC,IAAA;UACAA,IAAA,CAAAvB,KAAA,GAAAwB,UAAA,CAAAD,IAAA,CAAAvB,KAAA,EAAAyB,OAAA,MAAAJ,YAAA;QACA;MACA;QACA,SAAAA,YAAA;UACA,KAAA5B,SAAA,CAAA6B,GAAA,CAAAC,IAAA;YACAA,IAAA,CAAAvB,KAAA,GAAAuB,IAAA,CAAAvB,KAAA,CAAA0B,SAAA,IAAAH,IAAA,CAAAvB,KAAA,CAAA2B,OAAA;UACA;UACA,KAAA9B,OAAA,CAAAyB,GAAA,CAAAC,IAAA;YACAA,IAAA,CAAAvB,KAAA,GAAAuB,IAAA,CAAAvB,KAAA,CAAA0B,SAAA,IAAAH,IAAA,CAAAvB,KAAA,CAAA2B,OAAA;UACA;QACA;QACA,SAAAN,YAAA;UACA,KAAA5B,SAAA,CAAA6B,GAAA,CAAAC,IAAA;YACAA,IAAA,CAAAvB,KAAA,GACAuB,IAAA,CAAAvB,KAAA,CAAA0B,SAAA,IAAAH,IAAA,CAAAvB,KAAA,CAAA2B,OAAA;UACA;UACA,KAAA9B,OAAA,CAAAyB,GAAA,CAAAC,IAAA;YACAA,IAAA,CAAAvB,KAAA,GACAuB,IAAA,CAAAvB,KAAA,CAAA0B,SAAA,IAAAH,IAAA,CAAAvB,KAAA,CAAA2B,OAAA;UACA;QACA;QACA,SAAAN,YAAA;UACA,KAAA5B,SAAA,CAAA6B,GAAA,CAAAC,IAAA;YACAA,IAAA,CAAAvB,KAAA,GACAuB,IAAA,CAAAvB,KAAA,CAAA0B,SAAA,IAAAH,IAAA,CAAAvB,KAAA,CAAA2B,OAAA;UACA;UACA,KAAA9B,OAAA,CAAAyB,GAAA,CAAAC,IAAA;YACAA,IAAA,CAAAvB,KAAA,GACAuB,IAAA,CAAAvB,KAAA,CAAA0B,SAAA,IAAAH,IAAA,CAAAvB,KAAA,CAAA2B,OAAA;UACA;QACA;MACA;MACA,KAAAC,aAAA,QAAA/B,OAAA,IAAAG,KAAA;IACA;EACA;EACA6B,QAAA;IACA,KAAAT,WAAA,MAAAU,MAAA,CAAAC,MAAA,CAAAjC,MAAA;IACAkC,WAAA;MACA;MACA,IACAC,QAAA,CAAAC,IAAA,CAAAP,OAAA,uBACAM,QAAA,CAAAC,IAAA,CAAAP,OAAA,2BACA;QACAM,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAC,IAAA;QACAD,QAAA,CAAAE,MAAA;MACA;IACA;EACA;EACAC,QAAA;IACA,GAAA7D,UAAA;MACA8D,QAAA;MACAC,KAAA;IACA;IACAC,SAAA;MACA,IAAAC,GAAA;MACA,SAAAlC,WAAA;QACAkC,GAAA,QAAAtC,QAAA;QACA,KAAAsC,GAAA,CAAAC,KAAA,KAAAD,GAAA,CAAAC,KAAA,CAAAC,MAAA;UACA;UACAF,GAAA,CAAAC,KAAA;YAAAE,EAAA;YAAAC,UAAA;UAAA;QACA;QACA,OAAAJ,GAAA;MACA;MACA,YAAAnC,UAAA;IACA;IACAwC,cAAA;MACA;MACA,OAAAC,IAAA,CAAAC,KAAA,MAAA7C,QAAA,CAAA8C,MAAA,YAAAtC,IAAA,CAAAkC,UAAA;IACA;EACA;EACAK,OAAA;IACAC,IAAAzC,GAAA;MACA,OAAA0C,KAAA,CAAA1C,GAAA,WAAAA,GAAA;IACA;EACA;EACA2C,KAAA;IACA;MACAnE,OAAA;MACAoE,cAAA;MAAA;MACAC,QAAA;MACAC,OAAA;MACAC,UAAA;MAAA;MACAC,IAAA;MACAC,OAAA;MAAA;MACAC,WAAA;MACAC,OAAA,EAAAtF,MAAA,CAAAuF,aAAA;MACAC,KAAA;MACAC,MAAA;MACAC,KAAA,OAAAC,EAAA;MACApD,SAAA;MACAqD,UAAA,GACA;QAAAF,KAAA,OAAAC,EAAA;QAAAvE,IAAA;MAAA,GACA;QAAAsE,KAAA,OAAAC,EAAA;QAAAvE,IAAA;MAAA,EACA;MACAgB,IAAA;QACAZ,MAAA;QAAA;QACAqE,aAAA;QACAC,SAAA;QAAA;QACAC,UAAA;QAAA;QACAzB,UAAA;QAAA;QACA0B,iBAAA;QACAC,eAAA;QACAvE,KAAA;QACAmB,MAAA;QAAA;QACAR,OAAA;MACA;MACA6D,KAAA;MACA9E,IAAA;MAAA;MACA;MACA;MACAqE,MAAA;MACAU,cAAA;MACAC,YAAA;MACAC,OAAA,GACA;QAAAvF,IAAA,OAAA6E,EAAA;QAAAH,KAAA;QAAAc,SAAA;MAAA,GACA;QAAAxF,IAAA,OAAA6E,EAAA;QAAAH,KAAA;QAAAc,SAAA;MAAA,GACA;QAAAxF,IAAA,OAAA6E,EAAA;QAAAH,KAAA;QAAAc,SAAA;MAAA,EACA;MACAC,QAAA;MACAC,YAAA;MACAzD,YAAA;MACA0D,UAAA;MACAC,KAAA,EAAAvE,GAAA,IAAAA,GAAA;MACAmB,aAAA;IACA;EACA;EACAqD,cAAA;IACA,KAAAC,YAAA;EACA;EACAC,UAAA;IACA,KAAAjB,UAAA,IACA;MAAAF,KAAA,OAAAC,EAAA;MAAAvE,IAAA;IAAA,GACA;MAAAsE,KAAA,OAAAC,EAAA;MAAAvE,IAAA;IAAA,EACA;IACA,KAAAsE,KAAA,QAAAE,UAAA,IAAAF,KAAA;IACA,KAAAtE,IAAA,QAAAwE,UAAA,IAAAxE,IAAA;EACA;EAEA0F,OAAA;IACA;IACAC,UAAA5E,GAAA;MACA,KAAAC,IAAA,CAAAS,MAAA,GAAAV,GAAA;IACA;IACA;IACA6E,iBAAA;MACA,IAAAC,GAAA;MACAA,GAAA,QAAArF,QAAA,CAAA8C,MAAA;MACA,OAAAF,IAAA,CAAAC,KAAA,CAAAwC,GAAA;IACA;IAEAnE,YAAAtB,MAAA;MACAZ,YAAA,CAAAY,MAAA,EAAA0F,IAAA,CAAAC,GAAA;QACA,IAAAC,UAAA,GAAAD,GAAA,IAAAE,KAAA;QACA,IAAAC,YAAA,GAAAF,UAAA,CAAAhE,SAAA,CACAgE,UAAA,CAAA/D,OAAA,WACA+D,UAAA,CAAAhD,MACA,EAAAA,MAAA;QACA,IAAAmD,IAAA;QACA,IAAAC,GAAA;QACA,SAAAC,CAAA,MAAAA,CAAA,GAAAH,YAAA,MAAAG,CAAA;UACAD,GAAA,GAAAA,GAAA;UACAD,IAAA,CAAAG,IAAA,CAAAF,GAAA;QACA;QACA,IAAAG,OAAA;QACAJ,IAAA,CAAAvE,GAAA,CAAAC,IAAA;UACA,IAAAiB,GAAA;YACApD,IAAA,EAAAmC,IAAA;YACAuC,KAAA,EACAvC,IAAA,CAAAG,SAAA,CAAAH,IAAA,CAAAI,OAAA,WAAAJ,IAAA,CAAAmB,MAAA,EAAAA,MAAA;UACA;UACAuD,OAAA,CAAAD,IAAA,CAAAxD,GAAA;QACA;QACA,IAAAoD,YAAA;UACA,IAAApD,GAAA,IACA;YACApD,IAAA;YACA0E,KAAA;UACA,GACA;YACA1E,IAAA;YACA0E,KAAA;UACA,GACA;YACA1E,IAAA;YACA0E,KAAA;UACA;UACA;UACA;UACA;UACA;UAAA,CACA;UACA,IAAAoC,QAAA;YACA9G,IAAA;YACA0E,KAAA;UACA;UACA,IAAA4B,UAAA,CAAAhE,SAAA,IAAAgE,UAAA,CAAA/D,OAAA,OAAAe,MAAA;YACAF,GAAA,CAAAwD,IAAA,CAAAE,QAAA;UACA;UACAD,OAAA,GAAAA,OAAA,CAAAE,MAAA,CAAA3D,GAAA;QACA;QACA,SAAA1C,MAAA;UACAmG,OAAA,GAAAA,OAAA,CAAAG,KAAA;QACA;QACA,IAAAC,OAAA;UACAR,IAAA,EAAAI,OAAA;UACAL,YAAA,EAAAA;QACA;QACA,KAAAnB,cAAA,GAAA4B,OAAA,CAAAR,IAAA;QACA,IAAAD,YAAA;UACA,KAAAd,YAAA,QAAAL,cAAA,IAAArF,IAAA;QACA;UACA,KAAA0F,YAAA,GACA,KAAAL,cAAA,MAAAA,cAAA,CAAA/B,MAAA,MAAAtD,IAAA;QACA;MACA;IACA;IACAkH,cAAA9C,UAAA;MACA,KAAAC,IAAA;MACA8C,UAAA;QACA,KAAAC,OAAA,CAAAR,IAAA,CACA,iBAAAxC,UAAA,CAAA1D,MAAA,cAAA0D,UAAA,CAAAY,SAAA,EACA;MACA;IACA;IACAqC,aAAAzG,KAAA;MACA;MACA,SAAAN,IAAA;QACA,KAAAgB,IAAA,CAAAV,KAAA,GAAAA,KAAA;MACA;IACA;IACAkF,aAAA;MACAA,YAAA,MAAA3B,OAAA;MACA,KAAAA,OAAA;IACA;IACAmD,cAAAC,KAAA;MACA,SAAArG,WAAA;QACA;QACA1B,kBAAA,CAAA+H,KAAA,EAAAnB,IAAA,CAAApC,IAAA;UACA,KAAA8B,YAAA;UACA,KAAA1B,UAAA,GAAAJ,IAAA;UACA,IAAAA,IAAA,CAAAwD,KAAA;YACA,KAAArD,OAAA,GAAAgD,UAAA;cACA,KAAAG,aAAA,CAAAC,KAAA;YACA;UACA;QACA;MACA;IACA;IACA3F,uBAAAG,MAAA;MACA,KAAAA,MAAA;QACA;QACA,KAAAT,IAAA,CAAAS,MAAA;MACA;MACA0F,OAAA,CAAAC,GAAA,MAAA5G,QAAA,CAAA8C,MAAA,OAAAtC,IAAA,CAAAkC,UAAA;MACA,IAAA2C,GAAA;MACAA,GAAA,QAAArF,QAAA,CAAA8C,MAAA;MACA,KAAAY,OAAA,CAAAmD,GAAA,GAAAjE,IAAA,CAAAC,KAAA,CAAAwC,GAAA;MACAsB,OAAA,CAAAC,GAAA,0BAAAlD,OAAA,CAAAmD,GAAA;MACA,SAAAnD,OAAA,CAAAmD,GAAA;QACA,KAAAnD,OAAA,CAAAoD,QAAA;MACA;QACA,KAAApD,OAAA,CAAAoD,QAAA;MACA;IACA;IACAC,aAAA1F,IAAA;MACA,KAAAoC,WAAA,SAAAA,WAAA;MACA,KAAAjD,IAAA,CAAAkC,UAAA,GAAArB,IAAA,CAAAqB,UAAA;MACAiE,OAAA,CAAAC,GAAA;MACA,KAAA9F,sBAAA;IACA;IACAkG,MAAA;MACA;MACA,SAAAtD,OAAA,CAAAmD,GAAA;QACA;MACA;MACA,SAAArG,IAAA,CAAAS,MAAA,UAAAyC,OAAA,CAAAmD,GAAA;QACA;MACA;MACAF,OAAA,CAAAC,GAAA,MAAAlD,OAAA,CAAAmD,GAAA;MACA,KAAArG,IAAA,CAAAS,MAAA;IACA;IACAgG,SAAA;MACA;MACA,SAAAzG,IAAA,CAAAS,MAAA;QACA,KAAAT,IAAA,CAAAS,MAAA;MACA;IACA;IACAiG,KAAA;MACA,KAAAZ,OAAA,CAAAR,IAAA,uBAAAlG,MAAA;IACA;IACAuH,SAAA;MAAA1E,EAAA;MAAA2E;IAAA;MACA;MACA;MACA,KAAA5G,IAAA,CAAAC,OAAA,GAAAgC,EAAA;MACA,KAAAjC,IAAA,CAAAS,MAAA;MACA,KAAAN,SAAA,GAAAyG,KAAA;IACA;IACAC,QAAA;MACA;MACA;MACA,SAAAjH,WAAA,cAAAsD,OAAA,CAAAmD,GAAA;QACA,KAAArG,IAAA,CAAAS,MAAA,QAAAT,IAAA,CAAAS,MAAA;MACA,WACA,KAAAb,WAAA,SACA,KAAAI,IAAA,CAAAS,MAAA,YAAAyC,OAAA,CAAAmD,GAAA,MACA;QACA,KAAArG,IAAA,CAAAS,MAAA,QAAAyC,OAAA,CAAAmD,GAAA;MACA;MACA,SAAAzG,WAAA;QACA,KAAAkH,KAAA,CAAAC,SAAA,CAAAC,YAAA,MAAAhH,IAAA,CAAAS,MAAA;MACA;IACA;IACA;IACAwG,UAAA;MACA,KAAA5D,MAAA,SAAAA,MAAA;IACA;IACA;IACA6D,WAAArG,IAAA;MACA,IAAAA,IAAA,CAAA7B,IAAA;QACA,KAAAgB,IAAA,CAAAV,KAAA,QAAAA,KAAA;MACA;MACA,KAAAU,IAAA,CAAA2D,UAAA,GAAA9C,IAAA,CAAA7B,IAAA;MACA,KAAAsE,KAAA,GAAAzC,IAAA,CAAAyC,KAAA;MACA,KAAAtE,IAAA,GAAA6B,IAAA,CAAA7B,IAAA;MACA,KAAAqE,MAAA;IACA;IACA;IACA8D,UAAAnI,IAAA;MACA;MACAmH,OAAA,CAAAC,GAAA,cAAApH,IAAA;MAEA,SAAAa,WAAA,KAAAb,IAAA;QACA;MACA;MACA,KAAAoI,KAAA,sBAAApI,IAAA;MACA;;MAEA,KAAA8H,KAAA,CAAAC,SAAA,CAAAM,UAAA;MACA,KAAA/G,sBAAA;IACA;IACAgH,QAAA;MACA;MACA,KAAAvE,IAAA;MACA8C,UAAA;QACA,KAAA7C,OAAA;MACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACAiD,MAAAjH,IAAA;MACA,UAAA2C,QAAA,CAAA4F,KAAA;QACA,KAAAzB,OAAA,CAAAR,IAAA;QACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA,UAAAtF,IAAA,CAAAS,MAAA;QACA,SAAAb,WAAA;UACA,KAAA4H,MAAA,CAAAC,IAAA,MAAAlE,EAAA;QACA;UACA,KAAAiE,MAAA,CAAAC,IAAA,MAAAlE,EAAA;QACA;QACA;MACA;;MAEA;MACA,KAAAvD,IAAA,CAAAZ,MAAA,QAAAgC,MAAA,CAAAC,MAAA,CAAAjC,MAAA;MACA,IAAAJ,IAAA,cAAAA,IAAA;QACA,KAAAgB,IAAA,CAAA0D,SAAA;MACA;QACA,KAAA1D,IAAA,CAAA0D,SAAA;MACA;MACA,IAAAgE,MAAA;MACA,IAAAC,QAAA;MACA,SAAA/H,WAAA;QACA;QACA,KAAAI,IAAA,CAAAyD,aAAA,QAAAjE,QAAA,CAAAiE,aAAA;QACAiE,MAAA,GAAA3J,UAAA;QACA4J,QAAA,QAAA9H,WAAA;QACA,KAAA+H,SAAA,CAAAF,MAAA,EAAAC,QAAA;MACA;QACA;QACA,KAAA3H,IAAA,CAAAyD,aAAA,QAAA9D,UAAA,CAAA8D,aAAA;QACAiE,MAAA,GAAAzJ,YAAA;QACA0J,QAAA;QACA,IACA,KAAAhI,UAAA,CAAA8D,aAAA,IAAAoE,SAAA,IACA,KAAAlI,UAAA,CAAA8D,aAAA,QACA;UACArF,gBAAA,MAAAgB,MAAA,EACA0F,IAAA,CAAApC,IAAA;YACA,KAAA1C,IAAA,CAAAyD,aAAA,GAAAf,IAAA,CAAAe,aAAA;YACA,KAAAmE,SAAA,CAAAF,MAAA,EAAAC,QAAA;UACA,GACAG,KAAA,CAAAC,GAAA;YACA,IAAAA,GAAA,CAAAC,IAAA;cACA,KAAAR,MAAA,MAAAjE,EAAA;YACA,WAAAwE,GAAA,CAAAE,GAAA,IAAAJ,SAAA;cACA,KAAAL,MAAA,MAAAjE,EAAA,CAAAwE,GAAA,CAAAE,GAAA;YACA;UACA;QACA;UACA,KAAAjI,IAAA,CAAAyD,aAAA,QAAA9D,UAAA,CAAA8D,aAAA;UACA,KAAAmE,SAAA,CAAAF,MAAA,EAAAC,QAAA;QACA;MACA;IACA;IACAC,UAAAF,MAAA,EAAAC,QAAA;MACAD,MAAA,MAAA1H,IAAA,EACA8E,IAAA,CAAAC,GAAA;QACA,SAAAnF,WAAA;UACA,KAAAkH,KAAA,CAAAC,SAAA,CAAAM,UAAA;QACA;QACA,KAAAG,MAAA,MAAAjE,EAAA;QACApF,WAAA,GAAA2G,IAAA,CAAApC,IAAA;UACA;UACA,KAAAwF,MAAA,CAAAC,MAAA;YAAAC,OAAA,EAAA1F,IAAA,CAAA2F;UAAA;QACA;QACA,KAAAjB,KAAA,YAAAO,QAAA;QACA,SAAA/H,WAAA;UACA;UACA1B,kBAAA,CAAA6G,GAAA,CAAAuD,QAAA,EAAAxD,IAAA,CAAApC,IAAA;YACA,KAAAI,UAAA,GAAAJ,IAAA;YACA,KAAAK,IAAA;UACA;QACA;MACA,GACA+E,KAAA;QACA;QACA,KAAAV,KAAA,YAAAO,QAAA;QACA,SAAA/H,WAAA;UACA,KAAAkH,KAAA,CAAAC,SAAA,CAAAM,UAAA;QACA;MACA;IACA;IACA;IACAJ,UAAA;MACA,KAAA5D,MAAA,SAAAA,MAAA;IACA;IACAkF,cAAA;MACA,KAAAlE,UAAA,SAAAA,UAAA;IACA;IACAmE,SAAA3H,IAAA;MACA,KAAAoD,OAAA,CAAArD,GAAA,CAAAC,IAAA;QACAA,IAAA,CAAAqD,SAAA;MACA;MACArD,IAAA,CAAAqD,SAAA;MACA,KAAAC,QAAA,GAAAtD,IAAA,CAAAuC,KAAA;MACA,KAAAgE,KAAA,yBAAAjD,QAAA;IACA;IACAsE,SAAA;MACA,KAAAzE,YAAA;IACA;IACA0E,eAAA7H,IAAA;MACA,KAAAF,YAAA,GAAAE,IAAA,CAAAuC,KAAA;MACA,KAAAiB,UAAA;MACA,KAAAD,YAAA,GAAAvD,IAAA,CAAAnC,IAAA;IACA;EACA;AACA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}