jhzh
2024-03-23 0d29d9a2bf0d893a67f1263bb9525131a50a2128
src/page/kline/index.vue
@@ -4,12 +4,12 @@
      <div class="detail_title">
        <div class="ti_cont">
          <div class="top_back">
            <div class="left_back" @click="handleBack()">
            <div class="left_back" @click="handleBackaa()">
              <img src="../../assets/img/zuojiantou.png" alt />
            </div>
            <div class="right_title">
              <div class="t_t" style="white-space: nowrap;">
                <span>{{ kLineDetails.name | getName }}</span>
                <span>{{ singDetails.spell }}</span>
              </div>
              <div class="b_t">
                <span>{{ singDetails.code }}</span>
@@ -23,21 +23,23 @@
                  <span>{{ $t('hj47') }}</span>
                </div>
                <div class="right">
                  <span v-if="$store.state.userInfo.userAmt == undefined">¥0.00</span>
                  <span v-if="$store.state.userInfo.userAmt == undefined">₹0.00</span>
                  <span v-if="$store.state.userInfo && kLineDetails.if_zhishu != '0'" style="white-space: nowarp;">
                    {{ kLineDetails.if_us == 1 ? '$' + Number(Number($store.state.userInfo.userIndexAmt) /
                        7.1).toFixed(2) :
                        kLineDetails.if_us == 2 ? 'HK$' + (Number($store.state.userInfo.userIndexAmt) / 0.9).toFixed(2) :
                          '¥' +
                          '₹' +
                          $store.state.userInfo.userIndexAmt
                    }}
                  </span>
                  <span v-if="$store.state.userInfo.userAmt != undefined && kLineDetails.if_zhishu == '0'"
                    style="white-space: nowarp;">
                    {{ kLineDetails.if_us == 1 ? '$' + Number(Number($store.state.userInfo.userAmt) / 7.1).toFixed(2) :
                        kLineDetails.if_us == 2 ? 'HK$' + (Number($store.state.userInfo.userAmt) / 0.9).toFixed(2) : '¥ ' +
                    <!-- {{ kLineDetails.if_us == 1 ? '$' + Number(Number($store.state.userInfo.userAmt) / 7.1).toFixed(2) :
                        kLineDetails.if_us == 2 ? 'HK$' + (Number($store.state.userInfo.userAmt) / 0.9).toFixed(2) : '₹ ' +
                          $store.state.userInfo.userAmt
                    }}
                    }} -->
                    {{ '₹ ' +  parseFloat($store.state.userInfo.enableAmt.toFixed(2)).toLocaleString()
                  }}
                  </span>
                </div>
                <div class="sanjiao">
@@ -60,21 +62,28 @@
        <div class="real_time_detail">
          <div class="left_now_price">
            <div class="top_now">
              <span :class="singDetails.nowPrice - singDetails.preclose_px < 0 ? 'price green' : 'price red'">{{
              <!-- <span :class="singDetails.nowPrice - singDetails.preclose_px > 0 ? 'price green' : 'price red'">{{
                  singDetails.nowPrice
              }}</span> -->
              <span :class="singDetails.hcrate > 0 ? 'price green' : 'price red'">{{
                  singDetails.nowPrice
              }}</span>
            </div>
            <div class="bottom_now">
              <div>
                <span v-if="singDetails.nowPrice == 0">-</span>
                <span v-else>{{ singDetails.nowPrice - singDetails.preclose_px > 0
                <span v-if="singDetails.nowPrice === 0">-</span>
                <!-- <span v-else>{{ singDetails.nowPrice - singDetails.preclose_px > 0
                    ? '+' : ''
                }}{{ (singDetails.nowPrice - singDetails.preclose_px).toFixed(2) }}</span>
                }}{{ (singDetails.nowPrice - singDetails.preclose_px).toFixed(2) }}</span> -->
                <span v-else>
                  {{ (singDetails.nowPrice - singDetails.preclose_px).toFixed(2) || 0 }}</span>
              </div>
              <div class="tew"
                :class="singDetails.nowPrice - singDetails.preclose_px < 0 ? 'number green' : 'number red'">
                <span v-if="singDetails.nowPrice == 0">-</span>
                <span v-else>({{ singDetails.nowPrice - singDetails.preclose_px > 0 ? '+' : '' }}
                :class="singDetails.hcrate > 0 ? 'number green' : 'number red'">
                <span v-if="singDetails.nowPrice === 0">-</span>
                <!-- <span v-else>({{ singDetails.nowPrice - singDetails.preclose_px > 0 ? '+' : '' }}
                  {{ singDetails.hcrate ? singDetails.hcrate : '0' }}%)</span> -->
                  <span v-else>({{ singDetails.hcrate > 0 ? '+' : '' }}
                  {{ singDetails.hcrate ? singDetails.hcrate : '0' }}%)</span>
              </div>
            </div>
@@ -83,13 +92,19 @@
            <div class="tops">
              <div class="lefts topes">
                <span class="titles">{{ $t('hj72') }}</span>
                <span :class="singDetails.nowPrice - singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                    singDetails.open_px
                }}</span> -->
                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'">{{
                    singDetails.open_px
                }}</span>
              </div>
              <div class="rights topes">
                <span class="titles">{{ $t('hj73') }}</span>
                <span :class="singDetails.nowPrice - singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                    singDetails.today_max
                }}</span> -->
                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'">{{
                    singDetails.today_max
                }}</span>
              </div>
@@ -97,13 +112,19 @@
            <div class="bottoms">
              <div class="lefts bots">
                <span class="titles">{{ $t('hj74') }}</span>
                <span :class="singDetails.nowPrice - singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                    singDetails.preclose_px
                }}</span> -->
                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'">{{
                    singDetails.preclose_px
                }}</span>
              </div>
              <div class="rights bots">
                <span class="titles">{{ $t('hj75') }}</span>
                <span :class="singDetails.nowPrice - singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                <!-- <span :class="singDetails.preclose_px < 0 ? 'number green' : 'number red'">{{
                    singDetails.today_min
                }}</span> -->
                <span :class="singDetails.hcrate > 0 ? 'number green' : 'number red'">{{
                    singDetails.today_min
                }}</span>
              </div>
@@ -114,7 +135,7 @@
      <div class="k_line_detail">
        <Kline :type="singDetails.type" />
      </div>
      <div class="priect_top_bottom"
      <div class="priect_top_bottom" style="display: none"
        v-if="(kLineDetails.if_us != 1 && kLineDetails.type != 'hk') && kLineDetails.type != 'hk' && kLineDetails.if_zhishu == 0">
        <div class="t_title">
          <span>{{ $t('hj76') }}</span>
@@ -200,7 +221,6 @@
              <div class="right_sell1">
                <span>{{ singDetails.buy4_num }}</span>
              </div>
            </div>
            <div class="ets">
@@ -223,12 +243,12 @@
            <div class="t_ma">
              <span>{{ $t('hj80') }}</span>
            </div>
            <div class="ets" v-for="item in timedata.data.details">
            <div class="ets" v-for="(item, i) in timedata.data.details" :key="i">
              <div class="left_sell1">
                <span>{{ item.split(',')[0] }}</span>
              </div>
              <div class="right_sell1">
                <span>{{ }}</span>
                <!-- <span>{{ }}</span> -->
              </div>
            </div>
@@ -237,12 +257,12 @@
            <div class="t_ma">
              <span>{{ $t('hj81') }}</span>
            </div>
            <div class="ets" v-for="item in timedata.data.details">
            <div class="ets" v-for="(item, i) in timedata.data.details" :key="i">
              <div class="left_sell1">
                <span>{{ item.split(',')[1] }}</span>
              </div>
              <div class="right_sell1">
                <span>{{ }}</span>
                <!-- <span>{{ }}</span> -->
              </div>
            </div>
@@ -251,12 +271,12 @@
            <div class="t_ma">
              <span>{{ $t('hj82') }}</span>
            </div>
            <div class="ets" v-for="item in timedata.data.details">
            <div class="ets" v-for="(item, i) in timedata.data.details" :key="i">
              <div class="left_sell1">
                <span>{{ item.split(',')[2] }}</span>
              </div>
              <div class="right_sell1">
                <span>{{ }}</span>
                <!-- <span>{{ }}</span> -->
              </div>
            </div>
@@ -281,7 +301,7 @@
          <mt-tab-container v-model="news" :swipeable="false" style="padding-top: 0.5rem;">
            <mt-tab-container-item id="tab_2">
              <div class="news-content">
                <div class="item-out" v-for="(item, inde) in newsdetailList" :key="inde">
                <div class="item-out" v-for="(item, inde) in newsdetailList" :key="inde" >
                  <div class="item-times">{{ item.Art_ShowTime | utc2beijing }}</div>
                  <div class="titContent" style="-webkit-box-orient: vertical;">{{ item.Art_Title }}</div>
                </div>
@@ -298,7 +318,7 @@
          <mt-tab-container v-model="news" :swipeable="false" style="padding-top: 0.5rem;">
            <mt-tab-container-item id="tab_2">
              <div class="news-content">
                <div class="item-out" v-for="(item, inde) in newsdetailList" :key="inde">
                <div class="item-out" v-for="(item, inde) in newsdetailList" :key="inde" @click="godetail(item)">
                  <div class="item-times">{{ item.addTime | gettime }}</div>
                  <div class="titContent" style="-webkit-box-orient: vertical;">{{ item.title }}</div>
                </div>
@@ -307,7 +327,7 @@
          </mt-tab-container>
        </div>
      </div>
      <div class="border_bottom"></div>
      <!-- <div class="border_bottom"></div> -->
    </div>
    <div class="btns">
      <div class="lefts">
@@ -342,116 +362,123 @@
</template>
<script>
import Kline from "./components/kLine.vue";
import * as api from "@/axios/api";
import Kline from './components/kLine.vue'
import * as api from '@/axios/api'
import { Toast } from 'vant'
export default {
  name: "kline",
  data() {
  name: 'kline',
  data () {
    return {
      news: 'tab_2',
      kLineDetails: {}, // K线图详情数据
      singDetails: {},
      scFlag: false,
      acseFlag: false,
      jianjie: "",
      jianjie: '',
      optionBtn: false,
      isOptionOpt: false,
      dialogFlag: false,
      timedata: [],
      newsdetailList: []
    };
      newsdetailList: [],
      bayType: '',
      timer:null,
    }
  },
  components: {
    Kline
  },
  created() {
    const { query } = this.$route;
    this.kLineDetails = query;
    if (query.if_us == '1') {
      this.getSingDetailUs();
  created () {
    const { query } = this.$route
    this.kLineDetails = query
    if (query.if_us === '1') {
      this.getSingDetailUs()
    } else {
      this.getSingDetails();
      this.timer = setInterval(()=>{
        this.getSingDetails()
      },500)
    }
    this.getOpation();
    this.getOpation()
    // this.$Lazyload();
    this.getUserInfo();
    this.getUserInfo()
    this.getNohknews()
  },
  beforeDestroy() {
      this.clearInterval(this.timer); // 在组件销毁前清除定时器
  },
  // beforeDestroy() {
  //   this.Klinetype = false;
  //   window.clearInterval()
  // },
  methods: {
    async getHknews() {
    async getHknews () {
      await api.queryIndexNews().then(res => {
        if (res.status == 0) {
          this.newsdetailList = res.data.data;
        if (res.status === 0) {
          this.newsdetailList = res.data.data
        }
      });
      })
    },
    async getNohknews() {
      let data = await api.queryNewsList(4);
    async getNohknews () {
      let data = await api.queryNewsList(4)
      this.newsdetailList = data.data.list
    },
    async option() {
    async option () {
      if (this.optionBtn) {
        return
      };
      this.optionBtn = true;
      this.optionBtn = true
      if (this.isOptionOpt) {
        let data = await api.delOption({ code: this.kLineDetails.code });
        let data = await api.delOption({ code: this.kLineDetails.code })
        if (data.status === 0) {
          this.getOpation();
          this.optionBtn = false;
          this.getOpation()
          this.optionBtn = false
          this.$message({
            message: this.$t('hj97'),
            type: 'success'
          });
          })
        } else {
          this.optionBtn = false;
          this.optionBtn = false
          this.$message({
            message: data.msg,
            type: 'warning'
          });
          })
        }
      } else {
        let data = await api.addOption({ code: this.kLineDetails.code });
        let data = await api.addOption({ code: this.kLineDetails.code })
        if (data.status === 0) {
          this.getOpation();
          this.optionBtn = false;
          this.getOpation()
          this.optionBtn = false
          this.$message({
            message: this.$t('hj96'),
            type: 'success'
          });
          })
        } else {
          this.$message({
            message: data.msg,
            type: 'warning'
          });
          this.optionBtn = false;
          })
          this.optionBtn = false
        }
      }
      if (navigator.vibrate) {
        // 支持
        navigator.vibrate([55]);
        navigator.vibrate([55])
      }
    },
    async getUserInfo() {
    async getUserInfo () {
      // 获取用户信息
      //   let showcookie = this.getCookie('USER_TOKEN');
      let data = await api.getUserInfo();
      let data = await api.getUserInfo()
      if (data.status === 0) {
        // this.getProductSetting()
        this.$store.state.userInfo = data.data;
        this.$store.state.userInfo = data.data
      } else {
        Toast(data.msg);
        Toast(data.msg)
      }
      this.$store.state.user = this.user;
      this.$store.state.user = this.user
    },
    async getOpation() {
    async getOpation () {
      let opts = {
        code: this.$route.query.code
      }
@@ -463,34 +490,43 @@
        this.isOptionOpt = true
      }
    },
    async getSingDetails() {
    async getSingDetails () {
      let opts = {
        code: this.kLineDetails.code,
        stockType: this.kLineDetails.type
      };
      }
      await api.getSingleStock(opts).then(res => {
        if (res.status === 0) {
          this.singDetails = res.data.stock;
          this.singDetails = res.data.stock
          this.bayType = res.data.stock.type
          if (res.data.introduction) {
            this.jianjie = res.data.introduction;
            this.jianjie = res.data.introduction
          } else {
            this.jianjie = res.data.indexintroduction;
            this.jianjie = res.data.indexintroduction
          }
          console.log(this.singDetails);
          if (this.kLineDetails.if_zhishu != '0' && this.singDetails.gid.indexOf('hk') > -1) {
            this.getHknews();
          } else {
            this.getNohknews();
          const obj = {
            pid: res.data.stock.code,
            type: res.data.stock.type
          }
          window.localStorage.setItem('kLine', JSON.stringify(obj))
          // console.log(this.singDetails)
          // if (this.kLineDetails.if_zhishu !== '0' && this.singDetails.gid.indexOf('hk') > -1) {
          //   this.getHknews()
          // } else {
          //   this.getNohknews()
          // }
          // this.timer = setTimeout(() => {
          //       this.getSingDetails(); // 再次调用自身,形成递归效果
          // }, 500);
        }
      });
      })
    },
    async getSingDetailUs() {
    async getSingDetailUs () {
      let opts = {
        code: this.kLineDetails.code,
        stockType: this.kLineDetails.type
      };
      }
      await api.getUsDetail(opts).then(res => {
        // console.log(res,1111123);
        // var that = this
@@ -501,111 +537,126 @@
        // }
        if (res.status === 0) {
          this.singDetails = res.data.stock;
          this.timedata = res.data.timedata;
          this.singDetails = res.data.stock
          this.timedata = res.data.timedata
          if (res.data.introduction) {
            this.jianjie = res.data.introduction;
            this.jianjie = res.data.introduction
          } else {
            this.jianjie = res.data.indexintroduction;
            this.jianjie = res.data.indexintroduction
          }
          this.getNohknews();
          console.log(this.singDetails);
          this.getNohknews()
          console.log(this.singDetails)
        }
      });
      })
    },
    handleJj() {
      this.acseFlag = true;
    handleJj () {
      this.acseFlag = true
      setTimeout(() => {
        this.acseFlag = false;
      }, 1000);
        this.acseFlag = false
      }, 1000)
      if (navigator.vibrate) {
        // 支持
        navigator.vibrate([55]);
        navigator.vibrate([55])
      }
    },
    handleBack() {
      this.$router.go(-1);
    handleBackaa () {
      clearInterval(this.timer);
      window.localStorage.removeItem('kLine')
      this.$router.go(-1)
    },
    handleSc() {
      this.scFlag = !this.scFlag;
    handleSc () {
      this.scFlag = !this.scFlag
    },
    goBuy(index) {
    godetail(item){
      this.$router.push({
        path: "/TradingBuy",
        path: '/newPage',
        query: {
          listid: item.id
        }
      })
    },
    goBuy (index) {
      clearInterval(this.timer);
      this.$router.push({
        path: '/TradingBuy',
        query: {
          t: index,
          code: this.kLineDetails.code,
          m: this.singDetails.nowPrice,
          type: this.kLineDetails.if_zhishu,
          id: this.singDetails.id,
          name: this.kLineDetails.name,
          if_us: this.kLineDetails.if_us,
          bayType: this.bayType
        }
      });
      })
      if (navigator.vibrate) {
        // 支持
        navigator.vibrate([55]);
        navigator.vibrate([55])
      }
    }
  },
  filters: {
    getName(name) {
      if (name.length > 15) {
        return name.substring(0, 14);
      } else {
        return name;
      }
    getName (spell) {
      // if (name.length > 15) {
      //   return name.substring(0, 14)
      // } else {
        return spell
      // }
    },
    gettime(time) {
    gettime (time) {
      if (!time) {
        return "";
        return ''
      }
      var nd = new Date(time);
      var y = nd.getFullYear();
      var mm = nd.getMonth() + 1;
      var d = nd.getDate();
      var h = nd.getHours();
      var m = nd.getMinutes();
      var c = nd.getSeconds();
      var nd = new Date(time)
      var y = nd.getFullYear()
      var mm = nd.getMonth() + 1
      var d = nd.getDate()
      var h = nd.getHours()
      var m = nd.getMinutes()
      var c = nd.getSeconds()
      if (mm < 10) {
        mm = "0" + mm;
        mm = '0' + mm
      }
      if (d < 10) {
        d = "0" + d;
        d = '0' + d
      }
      if (h < 10) {
        h = "0" + h;
        h = '0' + h
      }
      if (m < 10) {
        m = "0" + m;
        m = '0' + m
      }
      if (c < 10) {
        c = "0" + c;
        c = '0' + c
      }
      //17:35:2922-06-2022
      return y + "-" + mm + "-" + d + " " + h + ":" + m + ":" + c;
      // 17:35:2922-06-2022
      return d + '/' + mm + '/' + y + ' ' + h + ':' + m + ':' + c  //日月年时分秒
      // return y + '-' + mm + '-' + d + ' ' + h + ':' + m + ':' + c
    },
    utc2beijing(utc_datetime) {
    utc2beijing (utcDatetime) {
      // 转为正常的时间格式 年-月-日 时:分:秒
      var T_pos = utc_datetime.indexOf('T');
      var Z_pos = utc_datetime.indexOf('Z');
      var year_month_day = utc_datetime.substr(0, T_pos);
      var hour_minute_second = utc_datetime.substr(T_pos + 1, Z_pos - T_pos - 1);
      var new_datetime = year_month_day + " " + hour_minute_second; // 2017-03-31 08:02:06
      var tPos = utcDatetime.indexOf('T')
      // var Z_pos = utcDatetime.indexOf('Z')
      var yearMonthDay = utcDatetime.substr(0, tPos)
      var hourMinuteSecond = utcDatetime.substr(tPos + 1, tPos - tPos - 1)
      var newDatetime = yearMonthDay + ' ' + hourMinuteSecond // 2017-03-31 08:02:06
      // 处理成为时间戳
      timestamp = new Date(Date.parse(new_datetime));
      timestamp = timestamp.getTime();
      timestamp = timestamp / 1000;
      var timestamp = new Date(Date.parse(newDatetime))
      timestamp = timestamp.getTime()
      timestamp = timestamp / 1000
      // 增加8个小时,北京时间比utc时间多八个时区
      var timestamp = timestamp + 8 * 60 * 60;
      var timestamp2 = timestamp + 8 * 60 * 60
      // 时间戳转为时间
      var beijing_datetime = new Date(parseInt(timestamp) * 1000).toLocaleString().replace(/年|月/g, "-").replace(/日/g, " ");
      return beijing_datetime; // 2017-03-31 16:02:06
      var beijingDatetime = new Date(parseInt(timestamp2) * 1000).toLocaleString().replace(/年|月/g, '-').replace(/日/g, ' ')
      return beijingDatetime // 2017-03-31 16:02:06
    }
  }
};
}
</script>
<style scoped lang="less">
@@ -686,11 +737,6 @@
  display: -webkit-box;
}
.ti_cont {
  width: 100%;
  display: flex;
@@ -718,7 +764,7 @@
.detail_title {
  width: 100%;
  height: 3.2rem;
  // height: 3.2rem;
  padding: 0 0.3rem;
  background: #fff;
@@ -778,22 +824,23 @@
.real_time_detail {
  width: 100%;
  height: 2rem;
  // height: 2rem;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  align-items: center;
  padding: 0.3rem 0;
  .left_now_price {
    width: 35%;
    // width: 35%;
    height: 100%;
    .top_now {
      width: 100%;
      height: 65%;
      // height: 65%;
      font-size: 0.741rem;
      display: flex;
      align-items: center;
      padding-left: 0.1rem;
      padding-top: 0.3rem;
      span {
        font-weight: 500;
@@ -802,9 +849,10 @@
    .bottom_now {
      width: 100%;
      height: 35%;
      // height: 35%;
      display: flex;
      padding-left: 0.1rem;
      padding-top: 0.1rem;
    }
    .tew {
@@ -813,20 +861,25 @@
  }
  .right_ets {
    width: 65%;
    max-width: 60%;
    height: 100%;
    >div {
      width: 100%;
      height: 50%;
      padding: 0.15rem 0;
      display: flex;
      align-items: center;
      >div {
        width: 50%;
        // width: 50%;
        height: 100%;
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 0 0.1rem;
        .titles{
          padding-right: 0.1rem;
        }
      }
    }
  }
@@ -835,14 +888,14 @@
.topes {
  span {
    display: inline-block;
    padding-top: 0.6rem;
    // padding-top: 0.6rem;
  }
}
.bots {
  span {
    display: inline-block;
    padding-top: 0.2rem;
    // padding-top: 0.2rem;
  }
}
@@ -1155,7 +1208,7 @@
  justify-content: flex-end;
  .left {
    width: 0.8rem;
    // width: 0.8rem;
    height: 0.4103rem;
    border-radius: 0.1rem;
    background: #4d73b1;
@@ -1201,4 +1254,5 @@
  margin-left: 0.2rem;
  padding-right: 0.68rem;
}
</style>
</style>