1
PC-20250623MANY\Administrator
2025-09-25 4f437aec7cfb60fe87daec1c5e52b3ed1d10e719
src/page/trading/TradeNew.vue
@@ -2,6 +2,16 @@
  <div class="trade_new">
    <tab-head></tab-head>
    <div class="order_tabs">
      <van-tabs v-model="active" swipe-threshold="1">
        <van-tab :title="$t('hj160')" name=""></van-tab>
        <van-tab :title="$t('美股指数')" name="US"></van-tab>
        <van-tab :title="$t('hksi')" name="HK"></van-tab>
        <van-tab :title="$t('tsi')" name="TW"></van-tab>
        <van-tab :title="$t('ni')" name="IN"></van-tab>
      </van-tabs>
    </div>
    <van-row class="list_head">
      <van-col span="8" class="flex-start head_item">
        {{ $t("hj313") }}/{{ $t("Worth") }}
@@ -14,53 +24,141 @@
      </van-col>
    </van-row>
    <van-row class="list_item" v-for="item in 10" :key="item">
    <van-row class="list_item" v-for="i in list" :key="i.id" @click="toDetails(i)">
      <van-col span="8" class="item_n">
        <div class="flex-start">
          <span class="i_icon">US</span>
          <span class="i_hint">WINVU</span>
          <span class="i_icon">{{ i.stockGid }}</span>
          <span class="i_hint">{{ i.stockSpell }}</span>
        </div>
        <div class="i_name">124.1</div>
        <div class="i_name">
          {{ (i.orderNum * i.now_price).toFixed(2) }}
        </div>
      </van-col>
      <van-col span="8" class="item_n">
        <p class="flex-start">18</p>
        <p class="flex-start i_name">24.1 (24.1%)</p>
        <p class="flex-start">{{ i.orderNum }}</p>
        <p class="flex-start i_name" :style="{
          color:
            i.profitAndLose > 0 ? 'green' : i.profitAndLose < 0 ? 'red' : ''
        }">
          {{ i.profitAndLose }} ({{ i.profitAndLoseParent }})
        </p>
      </van-col>
      <van-col span="8" class="item_n">
        <div class="flex-end" style="margin-bottom: .15em;">
          <span>10</span>
          <span>{{ i.buyOrderPrice }}</span>
        </div>
        <div class="flex-end">
          <span>12.41</span>
          <span>{{ i.now_price }}</span>
        </div>
      </van-col>
      <van-col span="24" class="flex-start transaction_type">
        <span>AI交易</span>
        <span>{{ types[i.positionType] }}</span>
      </van-col>
      <van-col span="24" class="flex-between item_card">
      <van-col span="24" class="flex-between-start item_card" v-if="i.positionType == 4">
        <div class="card_label">
          <p>建仓成本</p>
          <p>100</p>
          <p>{{ $t("建仓成本") }}</p>
          <p>{{ i.orderTotalPrice }}</p>
        </div>
        <div class="card_label">
          <p>平仓金额</p>
          <p>90</p>
          <p>{{ $t("pcje") }}</p>
          <p>{{ i.sellOrderTotalPrice }}</p>
        </div>
        <div class="card_label">
          <p>预期收益</p>
          <p>-10</p>
          <p>{{ $t("预期收益") }}</p>
          <p>{{ i.profitAndLose }}</p>
        </div>
      </van-col>
    </van-row>
    <!-- 无数据时显示 -->
    <div class="no_data flex-center" v-show="!list || list.length == 0">
      <img src="@/assets/img/zhaobudao2.png" alt="" />
    </div>
    <n-pagination :pageNo.sync="pageNum" :pageSize="pageSize" :total="total"></n-pagination>
  </div>
</template>
<script>
let times = null; // 计时器
import tabHead from "@/components/tabHead.vue";
import * as api from "@/axios/api";
import nPagination from "@/components/nPagination.vue";
export default {
  components: {
    tabHead
    tabHead,
    nPagination
  },
  data() {
    return {
      pageNum: 1,
      pageSize: 15,
      total: 1,
      list: [],
      active: "",
      types: {
        0: this.$t("日内"),
        2: "IPO",
        3: this.$t("hj621"),
        4: "AI"
      }
    };
  },
  watch: {
    pageNum() {
      this.getList();
      this.creatTimer();
    },
    active() {
      this.pageNum = 1;
      this.getList();
      this.creatTimer();
    }
  },
  created() {
    this.getList();
    this.creatTimer();
  },
  destroyed() {
    this.stopTimer();
  },
  methods: {
    // 获取数据
    async getList() {
      let data = await api.getchicang({
        state: 0,
        stockType: this.active,
        pageNum: this.pageNum,
        pageSize: this.pageSize
      });
      if (data.status === 0) {
        this.list = data.data.list;
        this.total = data.data.total;
      }
    },
    // 跳转详情
    toDetails(i) {
      if (!i.positionSn) return;
      this.$router.push({
        path: "/Stockdetail",
        query: { codes: i.positionSn }
      });
    },
    //
    stopTimer() {
      if (times) {
        clearInterval(times);
        times = null;
      }
    },
    creatTimer() {
      this.stopTimer()
      times = setInterval(() => {
        this.getList();
      }, 3000);
    }
  }
};
</script>
@@ -70,12 +168,41 @@
@dark_green: #07c160;
@red: #ee0a24;
@brown: #ff976a;
@green: #c4d600;
.trade_new {
  width: 100%;
  height: 100%;
  // height: 100%;
  background: #fff;
  font-size: 10vw;
  padding-bottom: 1.3rem;
  // padding-top: 1.4em;
  /deep/ .van-tabs--line .van-tabs__wrap {
    height: 1.2em;
  }
  /deep/ .van-tab__text--ellipsis {
    overflow: visible;
  }
  /deep/ .van-tab {
    font-size: 0.4em;
  }
  /deep/ .van-tabs__line {
    background-color: @green;
    height: 0.1em;
    width: 1em;
  }
  .order_tabs {
    width: 100%;
    // position: fixed;
    // top: 1.4em;
    // left: 0;
    // z-index: 999;
  }
  .list_head {
    background-color: @green2;
@@ -107,7 +234,7 @@
        color: #999;
        font-size: 0.35em;
        & > p:last-child {
        &>p:last-child {
          color: #333;
          margin-top: 0.15em;
        }
@@ -117,6 +244,7 @@
    .transaction_type {
      color: #fff;
      padding-top: 0.08em;
      span {
        font-size: 0.3em;
        background: @brown;
@@ -158,11 +286,9 @@
      position: absolute;
      top: 0;
      left: 0;
      background: linear-gradient(
        to right,
        rgba(0, 0, 0, 0),
        rgba(0, 0, 0, 0.8)
      );
      background: linear-gradient(to right,
          rgba(0, 0, 0, 0),
          rgba(0, 0, 0, 0.8));
      text-align: end;
      color: @red;
      padding-right: 0.25em;