From 61944978f51ca99a001162ac1ff3d32dcd5315ed Mon Sep 17 00:00:00 2001
From: PC-20250623MANY\Administrator <344137771@qq.com>
Date: Wed, 16 Jul 2025 14:54:58 +0800
Subject: [PATCH] 1

---
 src/page/markets/blockTrading.vue |  322 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 294 insertions(+), 28 deletions(-)

diff --git a/src/page/markets/blockTrading.vue b/src/page/markets/blockTrading.vue
index 57034db..33874dc 100644
--- a/src/page/markets/blockTrading.vue
+++ b/src/page/markets/blockTrading.vue
@@ -22,40 +22,41 @@
       }}</van-button>
     </div>
 
-    <!-- <div class="trading_card" v-for="i in 5" :key="i">
-      <p class="card_label1 flex-start">
-        <span class="label_icon">US</span>
-        <span>444</span>
+    <div class="trading_card" v-for="i in list" :key="i.id">
+      <div class="card_label2 flex-between" style="height:1.8em" @click="toDetails(i)">
+        <div>
+          <p class="flex-start">
+            <span class="label_icon">{{ i.stockType }}</span>
+            <span class="label_name line-one">{{ i.stockSpell }}</span>
+          </p>
+          <p class="flex-start gp">
+            <span>{{ i.stockName }}</span>
+          </p>
+        </div>
+
+        <div class="flex-end">
+          <van-icon name="arrow" color="#969799" size=".5em" />
+        </div>
+      </div>
+
+      <p class="card_label2 flex-between">
+        <span>{{ $t("市场价") }}</span>
+        <span>{{ i.stockType | currencySymbol }} {{ i.nowPrice }}</span>
       </p>
 
       <p class="card_label2 flex-between">
-        <span>{{ $t("最低认购金额") }}</span>
-        <span>$ 2,000</span>
+        <span>{{ $t("最小购买数量") }}</span>
+        <span>{{ i.stockNum }}</span>
       </p>
 
-      <p class="card_label2 flex-between">
-        <span>{{ $t("交易成功率") }}</span>
-        <span>100%</span>
-      </p>
-
-      <p class="card_label2 flex-between">
-        <span>{{ $t("预期收益") }}</span>
-        <span>3</span>
-      </p>
-
-      <p class="card_label2 flex-between">
-        <span>{{ $t("交易周期") }}</span>
-        <span>1天</span>
-      </p>
-
-      <p class="card_buy flex-center">
+      <p class="card_buy flex-center" @click="buyOpen(i)">
         <van-icon name="add-square" size=".4em" />
-        <span>{{ $t("gm") }}</span>
+        <span>{{ $t("hj85") }}</span>
       </p>
-    </div> -->
+    </div>
 
     <!-- 无数据时显示 -->
-    <div class="no_data flex-center">
+    <div class="no_data flex-center" v-show="!list || list.length == 0">
       <img src="@/assets/img/zhaobudao2.png" alt="" />
     </div>
 
@@ -64,12 +65,81 @@
       :pageSize="pageSize"
       :total="total"
     ></n-pagination>
+
+    <!-- 购买弹窗 -->
+    <van-popup v-model="buyShow" round>
+      <van-form class="buy_popup" @submit="popupSubmit">
+        <div class="popup_title flex-center">
+          <span>{{ popupData.stockName }}</span>
+        </div>
+
+        <div class="division"></div>
+
+        <div class="popup_item flex-between">
+          <span>{{ $t("市场价") }}</span>
+          <span>
+            {{ popupData.stockType | currencySymbol }} {{ popupData.nowPrice }}
+          </span>
+        </div>
+
+        <div class="popup_item flex-between">
+          <span>{{ $t("最小购买数量") }}</span>
+          <span>
+            {{ popupData.stockNum }}
+          </span>
+        </div>
+
+        <div class="popup_item flex-between-start">
+          <span style="color:red">*</span>
+          <van-field
+            v-model="popFrom.password"
+            :label="$t('购买密码')"
+            :placeholder="$t('请输入')"
+            :rules="[{ required: true, message: $t('请输入') }]"
+          />
+        </div>
+
+        <div class="popup_item flex-between">
+          <p class="flex-start">
+            <span style="color:red">*</span>
+            <span>{{ $t("sl") }}</span>
+          </p>
+          <span>
+            <van-stepper
+              v-model="popFrom.num"
+              integer
+              :min="popupData.stockNum"
+            />
+          </span>
+        </div>
+
+        <div class="popup_item flex-end">
+          <div class="zxgm flex-center" @click="minimum">
+            <span>{{ $t("最小购买") }}</span>
+          </div>
+        </div>
+
+        <div class="division"></div>
+
+        <div class="buts flex-between">
+          <p class="flex-center" @click="buyShow = false">
+            <span>{{ $t("qx") }}</span>
+          </p>
+          <p class="flex-center" native-type="submit">
+            <!-- <span>{{ $t("qr") }}</span> -->
+            <van-button native-type="submit">{{ $t("qr") }}</van-button>
+          </p>
+        </div>
+      </van-form>
+    </van-popup>
   </div>
 </template>
 
 <script>
 import PageHead from "@/components/pageHead.vue";
 import nPagination from "@/components/nPagination.vue";
+import * as api from "@/axios/api";
+import { Toast } from "vant";
 
 export default {
   components: {
@@ -81,12 +151,87 @@
       pageNum: 1,
       pageSize: 10,
       total: 1,
-      searchValue: ""
+      searchValue: "",
+      list: [],
+      buyShow: false, // 购买弹窗控制
+      popupData: {}, // 点击购买的数据
+      popFrom: {
+        password: "",
+        num: 0
+      }
     };
   },
+  watch: {
+    pageNum() {
+      this.list = [];
+      this.getDzListTwo();
+    }
+  },
+  created() {
+    this.getDzListTwo();
+  },
   methods: {
+    // 提交搜索
     submit() {
-      console.log(this.searchValue);
+      this.pageNum = 1;
+      this.getDzListTwo();
+    },
+    // 获取列表数据
+    async getDzListTwo() {
+      let opt = {
+        pageNum: this.pageNum,
+        pageSize: this.pageSize,
+        keyWords: this.searchValue
+        // orderBy: ""
+      };
+      let data = await api.getDzListTwo(opt);
+      if (data.status === 0) {
+        this.total = data.data.total;
+        this.list = data.data.list;
+      }
+    },
+    // 购买弹窗
+    buyOpen(i) {
+      this.popupData = i;
+      this.buyShow = true;
+    },
+    // 提交购买
+    async popupSubmit() {
+      let opt = {
+        ...this.popFrom,
+        dzId: this.popupData.id
+      };
+
+      let data = await api.getBuyStockDz(opt);
+
+      if (data.status == 0) {
+        Toast.success();
+        setTimeout(() => {
+          this.buyShow = false;
+        }, 1000);
+      } else {
+        Toast.fail(data.msg);
+      }
+    },
+    // 最小购买
+    minimum() {
+      this.popFrom.num = this.popupData.stockNum;
+    },
+    // 点击进入详情
+    toDetails(item) {
+      const obj = {
+        pid: item.id || "",
+        type: item.stockType || ""
+      };
+      window.localStorage.setItem("kLine", JSON.stringify(obj));
+
+      this.$router.push({
+        path: "/kline",
+        query: {
+          code: item.id,
+          type: item.stockType
+        }
+      });
     }
   }
 };
@@ -94,6 +239,8 @@
 
 <style lang="less" scoped>
 @green: #c4d600;
+@grey-two: #969799;
+@red: #ee0a24;
 .block_trading {
   font-size: 10vw;
   width: 100%;
@@ -101,6 +248,95 @@
   min-height: 100vh;
   padding-bottom: 0.3em;
   padding-top: 1.4em;
+
+  .buy_popup {
+    width: 8.8em;
+    /deep/ .van-cell {
+      padding: 0;
+      font-size: 0.4em;
+    }
+    /deep/ .van-field__body {
+      // border: 0.01em solid #f5f5f5;
+      // height: 2.5em;
+      // padding: 0 0.5em;
+      // margin-top: 0.5em;
+    }
+    /deep/ .van-field__label {
+      color: #000;
+    }
+    /deep/ .van-stepper__minus {
+      width: 1rem;
+      height: 1rem;
+    }
+    /deep/ .van-stepper__plus {
+      width: 1rem;
+      height: 1rem;
+    }
+    /deep/ .van-stepper__input {
+      height: 1rem;
+      width: 2rem;
+      font-size: 0.4rem;
+    }
+    .division {
+      width: 100%;
+      height: 0.25em;
+      background-color: #f5f5f5;
+    }
+    .popup_title {
+      width: 100%;
+      min-height: 1.22em;
+      font-weight: bold;
+      padding: 0 0.25em;
+    }
+    .popup_name {
+      color: @green;
+      .popup_icon {
+        background: @green;
+        color: #fff;
+        padding: 0.2em 0.35em;
+        border-radius: 0.15em;
+        margin-right: 0.3em;
+        font-size: 0.3em;
+      }
+    }
+    .popup_item {
+      width: 8.3em;
+      margin: 0 auto;
+      padding: 0.35em 0;
+      border-bottom: #f5f5f5 solid 0.01em;
+
+      .zxgm {
+        height: 0.8em;
+        width: 2em;
+        border-radius: 0.1em;
+        border: #ddd solid 0.01em;
+        span {
+          font-size: 0.3em;
+        }
+      }
+    }
+    span {
+      font-size: 0.4em;
+    }
+    .buts {
+      width: 100%;
+      height: 1.22em;
+
+      /deep/ .van-button {
+        border: none;
+        font-size: 1em;
+        color: @green;
+      }
+      p {
+        height: 100%;
+        flex: 1;
+      }
+      & > p:last-child {
+        border-left: #f5f5f5 solid 0.01em;
+        color: @green;
+      }
+    }
+  }
 
   .popup_head {
     display: flex;
@@ -160,6 +396,7 @@
       width: 9em;
       border-bottom: #f5f5f5 solid 0.01em;
     }
+
     .card_label2 {
       height: 1.1em;
       color: #323233;
@@ -168,8 +405,28 @@
         font-weight: 300;
       }
       & > span:last-child {
-        color: #969799;
+        color: @grey-two;
         font-size: 0.36em;
+      }
+      .gp {
+        margin-top: 0.22em;
+        color: @grey-two;
+        font-size: 0.9em;
+      }
+      .app {
+        color: @green;
+        font-size: 0.6em;
+      }
+      .label_name {
+        color: @green;
+        width: 14em;
+      }
+      span.zje {
+        color: @red;
+        font-size: 0.48em;
+      }
+      span.zt {
+        color: @green;
       }
     }
 
@@ -189,6 +446,15 @@
         font-size: 0.3em;
       }
     }
+
+    .label_icon {
+      background: @green;
+      color: #fff;
+      padding: 0.2em 0.35em;
+      border-radius: 0.15em;
+      margin-right: 0.3em;
+      font-size: 0.3em !important;
+    }
   }
 
   .head_right {

--
Gitblit v1.9.3