浏览代码

添加促销活动

wangxl@jiinfo.cn 1 月之前
父节点
当前提交
fa3f4393ac
共有 35 个文件被更改,包括 2046 次插入854 次删除
  1. 二进制
      src/assets/img/doubleAntibody/S-24.png
  2. 二进制
      src/assets/img/promotion/closed.png
  3. 二进制
      src/assets/img/promotion/cn/banner1.png
  4. 二进制
      src/assets/img/promotion/cn/banner2.png
  5. 二进制
      src/assets/img/promotion/cn/banner_ADC.png
  6. 二进制
      src/assets/img/promotion/cn/banner_ADC_duizhaopin.png
  7. 二进制
      src/assets/img/promotion/cn/banner_baijie.png
  8. 二进制
      src/assets/img/promotion/cn/banner_dankang.png
  9. 二进制
      src/assets/img/promotion/cn/banner_gaopingzhi.png
  10. 二进制
      src/assets/img/promotion/cn/banner_gaopingzhi_kangyuan_kangti.png
  11. 二进制
      src/assets/img/promotion/cn/banner_holophyly.png
  12. 二进制
      src/assets/img/promotion/cn/banner_thanksgiving.png
  13. 二进制
      src/assets/img/promotion/cn/banner_yuehui.png
  14. 二进制
      src/assets/img/promotion/cn/free-sample.jpg
  15. 二进制
      src/assets/img/promotion/cn/holophyly.png
  16. 二进制
      src/assets/img/promotion/cn/monkeypox.jpg
  17. 二进制
      src/assets/img/promotion/doing.png
  18. 二进制
      src/assets/img/promotion/done.png
  19. 二进制
      src/assets/img/promotion/en/banner_ADC_duizhaopin_en_new.jpg
  20. 二进制
      src/assets/img/promotion/en/banner_ADC_en_new.jpg
  21. 二进制
      src/assets/img/promotion/en/banner_baijie_en_new.jpg
  22. 二进制
      src/assets/img/promotion/en/banner_dankang_en_new.jpg
  23. 二进制
      src/assets/img/promotion/en/banner_gaopingzhi_en_new.jpg
  24. 二进制
      src/assets/img/promotion/en/banner_gaopingzhi_kangyuan_kangti_en_new.jpg
  25. 二进制
      src/assets/img/promotion/en/banner_holophyly.png
  26. 二进制
      src/assets/img/promotion/en/banner_thanksgiving_en_new.jpg
  27. 二进制
      src/assets/img/promotion/en/banner_yuehui_en_new.jpg
  28. 二进制
      src/assets/img/promotion/en/free-sample.jpg
  29. 二进制
      src/assets/img/promotion/en/holophyly.png
  30. 二进制
      src/assets/img/promotion/en/monkeypox.jpg
  31. 5 3
      src/components/homeHeader.vue
  32. 12 1
      src/router/routerList.js
  33. 861 0
      src/view/promotion/double.vue
  34. 916 0
      src/view/promotion/index copy.vue
  35. 252 850
      src/view/promotion/index.vue

二进制
src/assets/img/doubleAntibody/S-24.png


二进制
src/assets/img/promotion/closed.png


二进制
src/assets/img/promotion/cn/banner1.png


二进制
src/assets/img/promotion/cn/banner2.png


二进制
src/assets/img/promotion/cn/banner_ADC.png


二进制
src/assets/img/promotion/cn/banner_ADC_duizhaopin.png


二进制
src/assets/img/promotion/cn/banner_baijie.png


二进制
src/assets/img/promotion/cn/banner_dankang.png


二进制
src/assets/img/promotion/cn/banner_gaopingzhi.png


二进制
src/assets/img/promotion/cn/banner_gaopingzhi_kangyuan_kangti.png


二进制
src/assets/img/promotion/cn/banner_holophyly.png


二进制
src/assets/img/promotion/cn/banner_thanksgiving.png


二进制
src/assets/img/promotion/cn/banner_yuehui.png


二进制
src/assets/img/promotion/cn/free-sample.jpg


二进制
src/assets/img/promotion/cn/holophyly.png


二进制
src/assets/img/promotion/cn/monkeypox.jpg


二进制
src/assets/img/promotion/doing.png


二进制
src/assets/img/promotion/done.png


二进制
src/assets/img/promotion/en/banner_ADC_duizhaopin_en_new.jpg


二进制
src/assets/img/promotion/en/banner_ADC_en_new.jpg


二进制
src/assets/img/promotion/en/banner_baijie_en_new.jpg


二进制
src/assets/img/promotion/en/banner_dankang_en_new.jpg


二进制
src/assets/img/promotion/en/banner_gaopingzhi_en_new.jpg


二进制
src/assets/img/promotion/en/banner_gaopingzhi_kangyuan_kangti_en_new.jpg


二进制
src/assets/img/promotion/en/banner_holophyly.png


二进制
src/assets/img/promotion/en/banner_thanksgiving_en_new.jpg


二进制
src/assets/img/promotion/en/banner_yuehui_en_new.jpg


二进制
src/assets/img/promotion/en/free-sample.jpg


二进制
src/assets/img/promotion/en/holophyly.png


二进制
src/assets/img/promotion/en/monkeypox.jpg


+ 5 - 3
src/components/homeHeader.vue

@@ -48,6 +48,7 @@
             <el-menu-item index="product"><img class="el-menu-img" src="@/assets/img/doubleAntibody/S-19.png" alt="" srcset="" />Product</el-menu-item>
             <el-menu-item index="antibody"><img class="el-menu-img" src="@/assets/img/doubleAntibody/S-23.png" alt="" srcset="" />Database</el-menu-item>
             <el-menu-item index="profile"><img class="el-menu-img" src="@/assets/img/doubleAntibody/S-21.png" alt="" srcset="" />Brochure</el-menu-item>
+            <el-menu-item index="promotion"><img class="el-menu-img" src="@/assets/img/doubleAntibody/S-24.png" alt="" srcset="" />Promotion</el-menu-item>
           </el-menu>
 
         </div>
@@ -72,6 +73,7 @@
             <el-menu-item index="product">Product</el-menu-item>
             <el-menu-item index="antibody">Database</el-menu-item>
             <el-menu-item index="profile">Brochure</el-menu-item>
+            <el-menu-item index="promotion">Promotion</el-menu-item>
           </el-menu>
         </div>
       </div>
@@ -286,7 +288,7 @@ export default {
               height: 80px;
               line-height: 80px;
               border-bottom: none;
-              padding: 0 10px;
+              padding: 0 5px;
               position: relative;
               font-size: 18px;
               font-family: "Arial-BoldMT", Arial;
@@ -506,8 +508,8 @@ export default {
   }
   .el-menu-demo /deep/{
     .el-menu-img{
-      width: 36px;
-      margin-right: 10px;
+      width: 24px;
+      margin-right: 5px;
     }
     .is-active{
       .el-submenu__title{

+ 12 - 1
src/router/routerList.js

@@ -150,5 +150,16 @@ export default [
       navActive: "promotion",
       fullScreen: false
     }
+  },
+  {
+    path: '/bispecific-antibody-reference',
+    name: 'DoubleAntibodyStandard',
+    component: () => import('@/view/promotion/double'),
+    hidden: true,
+    meta: {
+      pageTitle: 'Full range of bispecific antibody standard free of charge',
+      chineseTitle: '全系列双抗参比品免费拿',
+      navActive: 'DoubleAntibodyStandard' // 双抗
+    }
   }
-]
+]

+ 861 - 0
src/view/promotion/double.vue

@@ -0,0 +1,861 @@
+<template>
+  <div class="box">
+    <div class="header-image">
+      <img
+        src="@/assets/img/promotion/cn/banner2.png"
+        alt=""
+        class="image"
+      />
+    </div>
+    <div class="contentbox">
+      <div class="topcontentbox">
+        <div class="title">Tips</div>
+        <div class="tips_b">
+          <!-- <div class="tips_d">
+            <div class="name">Promotion Time:</div>
+            <div class="data">2024.04.22-2024.05.22</div>
+          </div> -->
+          <div class="tips_d">
+            <div class="name">Promotion Method:</div>
+            <div class="data">
+              Search for the antibodies you need, and add to the list.
+            </div>
+          </div>
+          <div class="tips_d">
+            <div class="name">Promotion Rules:</div>
+            <div class="data">
+              1. 73 bispecific reference antibodies available for selection<br />
+              2. Each product is limited to one sample when applied, and each
+              customer applies for ≤ 3 types of product<br />
+              3. 20 μg/product<br />
+            </div>
+          </div>
+        </div>
+      </div>
+      <div class="bottomcontentbox_b">
+        <p>
+         Selected samples({{ checkList.length }})
+        </p>
+        <div class="bottomcontentbox">
+          <apply-sample-table :list="checkList" @delete-list="deleteList" />
+        </div>
+        <p>All samples</p>
+        <div class="bottomcontentbox">
+          <div class="input_box">
+            <el-input
+              placeholder="Enter Keywords"
+              v-model="catalog"
+              @clear="inputClear"
+              @change="
+                pageable.page = 0;
+                searchByCatalog();
+              "
+              clearable
+            >
+            </el-input>
+            <div
+              class="buttom"
+              @click="
+                pageable.page = 0;
+                searchByCatalog();
+              "
+            >
+              search
+            </div>
+          </div>
+          <el-table
+            :data="list"
+            ref="multipleTable"
+            style="width: 100%; margin-top:1.5rem; margin-bottom:2rem; border-bottom: none"
+            :empty-text="$t('table.notable')"
+            max-height="500"
+            :row-key="getRowKeys"
+            :row-class-name="tableRowClassName"
+            @selection-change="handleSelectionChange"
+          >
+            <el-table-column
+              type="selection"
+              :reserve-selection="true"
+              width="40"
+            />
+            <el-table-column
+              prop="catalog"
+              label="Catalog"
+              width="100"
+            >
+            </el-table-column>
+            <el-table-column
+              prop="productName"
+              label="Product Name"
+            >
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+
+      <div class="footerbox_b">
+        <p>
+          Your Information
+        </p>
+        <div class="footerbox">
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.name"
+              :placeholder="$t('input.fullname')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.region"
+              :placeholder="$t('input.country')"
+            ></el-input>
+            <!-- <div class="red-t">*</div> -->
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.company"
+              :placeholder="$t('input.companyInstitution')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.shippingAddress"
+              :placeholder="$t('input.address_must')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.email"
+              :placeholder="$t('input.email')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.phone"
+              :placeholder="$t('input.tel')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              type="textarea"
+              :autosize="{ minRows: 4, maxRows: 6 }"
+              v-model="from.message"
+              :placeholder="$t('input.telFor')"
+            ></el-input>
+          </div>
+          <el-button class="buttonbox" :disabled="isSubmitting" type="primary" @click="postsubmit">{{
+            $t("button.submit")
+          }}</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import ApplySampleTable from "./Components/ApplySampleTable.vue";
+
+export default {
+  components: {
+    ApplySampleTable
+  },
+  name: "ApplySample",
+  data() {
+    return {
+      from: {
+        company: "",
+        shippingAddress: "",
+        name: "",
+        email: "",
+        phone: "",
+        region: "",
+        message: ""
+      },
+      catalog: "", // 货号
+      pageable: {
+        page: 0,
+        size: 1000
+      },
+      list: [],
+      // loadShow: false,
+      // moreParams: {},
+      checkList: [],
+      maxNum: 3,
+      isSubmitting: false
+    };
+  },
+  methods: {
+    // 清空
+    inputClear() {
+      this.pageable.page = 0;
+      // this.searchByCatalog()
+    },
+    // 删除数据
+    deleteList(e) {
+      const targetItem = this.checkList[e];
+
+      let canDelete = false;
+      for (var n = 0; n < this.list.length; n++) {
+        if (this.list[n].catalog === targetItem.catalog) {
+          canDelete = true;
+          this.$refs.multipleTable.toggleRowSelection(this.list[n], false);
+        }
+      }
+
+      if (!canDelete) {
+        // this.checkList.splice(e, 1)
+        this.$refs.multipleTable.toggleRowSelection(targetItem, false);
+      }
+
+      this.$message({
+        message: this.$t("message.delete"),
+        type: "success"
+      });
+    },
+    handleChange(value) {
+      console.log(value);
+    },
+    setTableRowSelected() {
+      const listCheck = [].concat(this.checkList);
+      if (listCheck.length === 0) {
+        this.$refs.multipleTable.clearSelection();
+      } else {
+        const needToSetList = [];
+        for (var i = 0; i < this.list.length; i++) {
+          for (var j = 0; j < listCheck.length; j++) {
+            if (listCheck[j].catalog === this.list[i].catalog) {
+              needToSetList.push(this.list[i]);
+            }
+          }
+        }
+
+        if (needToSetList.length > 0) {
+          this.$refs.multipleTable.clearSelection();
+          needToSetList.forEach(item => {
+            this.$refs.multipleTable.toggleRowSelection(item, true);
+          });
+
+          this.checkList = listCheck;
+        }
+      }
+    },
+    searchByCatalog() {
+      // 货号查询
+      let that = this;
+      this.$api
+        .post("product/crsSampleSack", {
+          criteria: {
+            keywords: this.catalog,
+            types: [3]
+          },
+          pageable: this.pageable
+        })
+        .then(res => {
+          if (res.code === 0) {
+            if (that.pageable.page === 0) {
+              this.list = res.data.content;
+            } else {
+              this.list = this.list.concat(res.data.content);
+            }
+            // this.moreParams = res.data.more_params
+            // this.loadShow = false
+            this.setTableRowSelected();
+          } else {
+            this.$message.error(res.msg);
+          }
+        });
+    },
+    postsubmit() {
+      if (this.isSubmitting) return;
+      // 提交询单
+      if (this.verification()) {
+        this.isSubmitting = true;
+        const params = {
+          ...this.from,
+          inquiryType: 0,
+          inquiryDetailList: this.checkList.map(item => {
+            return {
+              catalog: item.catalog,
+              productName: item.productName,
+              quantity: 1,
+              size: 20,
+              unit: "μg"
+            };
+          })
+        };
+        this.$api.post("inquiry/submitForm", params).then(res => {
+          if (res.code === 0) {
+            this.$message({
+              message: this.$t("message.YourInformation"),
+              type: "success",
+              center: true,
+              duration: 6000,
+              customClass: "submit-success"
+            });
+            // this.from = {'company': '', 'address': '', 'name': '', 'phone': '', 'region': ''}
+            // this.checkList = []
+            // this.catalog = ''
+          } else {
+            this.$message.error(res.msg);
+          }
+        }).finally(() => {
+          // 请求完成,无论成功失败都恢复按钮状态
+          this.isSubmitting = false;
+        });
+      }
+    },
+    // 验证
+    verification() {
+      if (this.checkList.length === 0) {
+        this.$message.error(this.$t("message.goods"));
+        return false;
+      } else if (this.from.name === "") {
+        this.$message.error(
+          this.$t("input.fullname") + this.$t("message.empty")
+        );
+        return false;
+      } else if (this.from.company === "") {
+        this.$message.error(
+          this.$t("input.companyInstitution") + this.$t("message.empty")
+        );
+        return false;
+      } else if (this.from.shippingAddress === "") {
+        this.$message.error(
+          this.$t("input.address") + this.$t("message.empty")
+        );
+        return false;
+      } else if (this.from.phone === "") {
+        this.$message.error(this.$t("input.tel") + this.$t("message.empty"));
+        return false;
+      } else if (this.from.email === "") {
+        this.$message.error(this.$t("input.email") + this.$t("message.empty"));
+        return false;
+      } else {
+        return true;
+      }
+    },
+    handleSelectionChange(val) {
+      if (val.length > this.maxNum) {
+        this.$message({
+          message: this.$t("message.MaxNum") + this.maxNum,
+          type: "error"
+        });
+
+        const targetList = val.filter(item => {
+          return !this.checkList.includes(item);
+        });
+
+        if (targetList.length > 0) {
+          this.$refs.multipleTable.toggleRowSelection(targetList[0]);
+        }
+
+        return false;
+      }
+
+      console.log(val);
+      this.checkList = val;
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (rowIndex % 2 === 0) {
+        return "warning-row";
+      } else {
+        return "success-row";
+      }
+    },
+    getRowKeys(row, index) {
+      return row.id;
+    },
+    // 加载更多
+    loadList() {
+      this.loadShow = true;
+      this.pageable.page++;
+      this.searchByCatalog();
+    }
+  },
+  mounted() {},
+  created() {
+    this.searchByCatalog();
+  }
+};
+</script>
+<style>
+@media screen and (min-width: 751px) and (max-width: 9999px) {
+  .submit-success {
+    top: 100px !important;
+    height: 80px;
+  }
+  .submit-success > i {
+    font-size: 24px !important;
+  }
+  .submit-success > p {
+    font-size: 24px !important;
+  }
+}
+</style>
+<style lang="scss" scoped>
+@media screen and (min-width: 751px) and (max-width: 9999px) {
+  .header-image {
+    width: 100%;
+    margin-bottom: 20px;
+    .image {
+      width: 100%;
+    }
+  }
+  .contentbox {
+    width: 100%;
+    overflow: hidden;
+  }
+  .topcontentbox {
+    border: 1px solid #dbdbdb;
+    // padding: 1.5rem 2rem;
+    .title {
+      font-size: 18px;
+      padding: 1.5rem 2rem;
+      font-weight: 700;
+      font-family: Arial;
+      color: #005bab;
+      background: #cfe0ef;
+    }
+    .tips_b {
+      padding: 1.5rem 2rem 2rem 2rem;
+      .tips_d {
+        display: flex;
+        font-size: 16px;
+        font-family: Arial;
+        color: #005bab;
+        .name {
+          // width: 100px;
+          font-weight: 600;
+          white-space: nowrap;
+        }
+        .data {
+          word-wrap: break-word;
+          word-break: normal;
+        }
+      }
+      .tips_d + .tips_d {
+        margin-top: 10px;
+      }
+    }
+  }
+
+  .bottomcontentbox_b /deep/ {
+    margin-top: 2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+    .el-table__header-wrapper {
+      .cell {
+        font-size: 16px;
+        font-family: Arial;
+        font-weight: normal;
+        color: #005bab;
+      }
+
+      .el-checkbox {
+        display: none;
+      }
+    }
+    .el-table__body-wrapper {
+      tr {
+        //  .el-table__cell:nth-of-type(1){
+        //  .cell{
+        //    font-size: 14px;
+        //     font-family: Arial;
+        //     color: #005BAB;
+        //     word-break: break-all;
+        //     text-overflow: ellipsis;
+        //     overflow: hidden;
+        //     display: -webkit-box;
+        //     -webkit-box-orient: vertical;
+        //     -webkit-line-clamp: 4;
+        //     margin: 8px;
+        //     text-align: center;
+        //  }
+        // }
+        .cell {
+          word-break: break-word;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 4;
+          margin: 8px 2px;
+        }
+      }
+    }
+  }
+  .bottomcontentbox_b > p {
+    font-size: 18px;
+    padding: 1.5rem 2rem;
+    font-weight: 700;
+    font-family: Arial;
+    color: #005bab;
+    background: #cfe0ef;
+    margin-bottom: 1.5rem;
+  }
+  .bottomcontentbox /deep/ {
+    // margin-top: 2rem;
+    padding: 0rem 2rem;
+    overflow: hidden;
+    .el-table {
+      border: 1px solid #dfdfdf;
+    }
+    .el-table__row {
+      .el-table__cell {
+        padding: 0;
+      }
+    }
+
+    .size_data {
+      display: flex;
+      align-items: center;
+    }
+  }
+
+  .input_box /deep/ {
+    margin-bottom: 20px;
+    display: flex;
+    align-items: center;
+    .title {
+      color: #005bab;
+      font-size: 0.14rem;
+      margin-right: 0.04rem;
+    }
+    .el-input {
+      width: 200px;
+      //   flex: 1;
+      //   font-size: 0.14rem;
+    }
+    .buttom {
+      // width: 100px;
+      text-align: center;
+      padding: 0 10px;
+      line-height: 40px;
+      color: #fff;
+      background-color: #005bab;
+      border-radius: 4px;
+      margin-left: 20px;
+      cursor: pointer;
+    }
+  }
+
+  .footerbox_b {
+    margin-top: 2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+    margin-bottom: 3rem;
+  }
+  .footerbox_b > p {
+    font-size: 1.4rem;
+    padding: 1.5rem 2rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+    margin-bottom: 1.5rem;
+  }
+  .footerbox {
+    padding: 0rem 2rem;
+    overflow: hidden;
+  }
+  .footerbox > div {
+    position: relative;
+    margin-bottom: 1.4rem;
+  }
+  .inputbox {
+    width: 100%;
+  }
+  .footerbox > div > .red-t {
+    font-size: 1.5rem;
+    color: #e52323;
+    position: absolute;
+    top: 40%;
+    left: -1rem;
+  }
+  .buttonbox {
+    width: 100%;
+    background: #0166b4;
+    height: 3rem;
+    padding: 0;
+    margin-bottom: 2rem;
+    font-size: 20px;
+  }
+  .load_b {
+    margin: 1.2rem 0;
+    font-size: 14px;
+    font-family: Arial;
+    color: #005bab;
+    text-align: center;
+    cursor: pointer;
+    .el-icon-loading {
+      font-size: 24px;
+    }
+    .load {
+      display: block;
+      line-height: 32px;
+    }
+  }
+}
+
+@media screen and (min-width: 0px) and (max-width: 750px) {
+  .header-image {
+    width: 100%;
+    margin-bottom: 0.1rem;
+    .image {
+      width: 100%;
+    }
+  }
+  .contentbox {
+    width: 100%;
+    overflow: hidden;
+  }
+  .topcontentbox {
+    border: 1px solid #dbdbdb;
+    .title {
+      font-size: 0.16rem;
+      padding: 0.14rem 0.23rem;
+      font-weight: 700;
+      color: #005bab;
+      background: #cfe0ef;
+    }
+    .tips_b {
+      padding: 0.14rem;
+      .tips_d {
+        // display: flex;
+        font-size: 0.14rem;
+        color: #005bab;
+        .name {
+          // width: 1.2rem;
+          font-weight: 600;
+          white-space: nowrap;
+        }
+        .data {
+          margin-top: 0.06rem;
+          word-wrap: break-word;
+          word-break: normal;
+        }
+      }
+      .tips_d + .tips_d {
+        margin-top: 0.1rem;
+      }
+    }
+  }
+  .topcontentbox > p:nth-of-type(1) {
+    font-size: 0.16rem;
+    padding: 0.14rem 0.23rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+  }
+  .topcontentbox > p:nth-of-type(2) {
+    padding: 0.14rem;
+    font-size: 0.16rem;
+    color: #005bab;
+    word-wrap: break-word;
+    word-break: normal;
+  }
+
+  .bottomcontentbox_b {
+    margin-top: 0.2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+  }
+  .bottomcontentbox_b > p {
+    font-size: 0.16rem;
+    padding: 0.14rem 0.23rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+    margin-bottom: 0.14rem;
+  }
+  .bottomcontentbox /deep/ {
+    // margin-top: 2rem;
+    padding: 0rem 0.14rem;
+    overflow: hidden;
+    .el-table {
+      border: 1px solid #dfdfdf;
+      margin-top: 0.12rem !important ;
+      margin-bottom: 0.14rem !important ;
+      .el-table__header-wrapper {
+        .el-checkbox {
+          display: none;
+        }
+
+        width: 100%;
+        .el-table__header {
+          width: 100% !important;
+          thead {
+            tr {
+              th {
+                .cell {
+                  font-size: 12px;
+                  padding: 0 4px;
+                  font-family: Arial;
+                  font-weight: bold;
+                  color: #005bab;
+                }
+              }
+            }
+          }
+        }
+      }
+      .el-table__body-wrapper {
+        .el-table__body {
+          width: 100% !important;
+          tbody {
+            .el-table__row {
+              .el-table__cell {
+                padding: 0;
+                .cell {
+                  font-size: 12px;
+                  padding: 0 4px;
+                  line-height: 0.24rem;
+                  word-break: break-word;
+                  .size_data {
+                    .size_q {
+                      width: 40% !important;
+                      max-width: 100px;
+                      .el-input__inner {
+                        width: 100% !important;
+                      }
+                    }
+                    .el-select {
+                      max-width: 100px;
+                      width: 60% !important;
+                      .el-input__inner {
+                        padding-right: 16px;
+                      }
+                      .el-input__suffix {
+                        .el-select__caret {
+                          width: 16px;
+                        }
+                      }
+                    }
+                  }
+                  .el-input-number {
+                    .el-input-number__decrease {
+                      width: 0.16rem;
+                    }
+                    .el-input-number__increase {
+                      width: 0.16rem;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        .cell {
+          word-break: break-all;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 4;
+        }
+      }
+      .el-table__empty-block {
+        width: 100% !important;
+      }
+    }
+
+    .size_data {
+      display: flex;
+      align-items: center;
+    }
+  }
+
+  .input_box /deep/ {
+    margin-bottom: 20px;
+    display: flex;
+    align-items: center;
+    .title {
+      color: #005bab;
+      font-size: 0.14rem;
+      margin-right: 0.04rem;
+    }
+    .el-input {
+      flex: 1;
+      width: 100px;
+      //   font-size: 0.14rem;
+    }
+    .buttom {
+      // width: 100px;
+      text-align: center;
+      padding: 0 10px;
+      line-height: 40px;
+      color: #fff;
+      background-color: #005bab;
+      border-radius: 4px;
+      margin-left: 20px;
+      cursor: pointer;
+    }
+  }
+
+  .footerbox_b {
+    margin-top: 0.2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+  }
+  .footerbox_b > p {
+    font-size: 0.16rem;
+    padding: 0.14rem 0.23rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+  }
+  .footerbox {
+    margin-top: 0.14rem;
+    padding: 0rem 0.14rem;
+    overflow: hidden;
+  }
+  .footerbox > div {
+    position: relative;
+    margin-bottom: 0.15rem;
+    margin-left: 0.1rem;
+  }
+  .inputbox {
+    width: 100%;
+  }
+  .footerbox > div > .red-t {
+    font-size: 0.2rem;
+    color: #e52323;
+    position: absolute;
+    top: 40%;
+    left: -0.1rem;
+  }
+  .buttonbox {
+    width: 100%;
+    background: #0166b4;
+    height: 0.4rem;
+    padding: 0;
+    margin-bottom: 0.14rem;
+    font-size: 20px;
+  }
+  .load_b {
+    margin: 0.2rem 0;
+    font-size: 14px;
+    font-family: Arial;
+    color: #005bab;
+    text-align: center;
+    cursor: pointer;
+    .el-icon-loading {
+      font-size: 24px;
+    }
+    .load {
+      display: block;
+      line-height: 32px;
+    }
+  }
+}
+</style>

+ 916 - 0
src/view/promotion/index copy.vue

@@ -0,0 +1,916 @@
+<template>
+  <div class="box">
+    <div class="header-image">
+      <img
+        v-if="$util.localeStorage()"
+        src="@/assets/img/ApplyFreeSample/banner_en.jpg"
+        alt=""
+        class="image"
+      />
+      <img
+        v-if="!$util.localeStorage()"
+        src="@/assets/img/ApplyFreeSample/banner_cn.jpg"
+        alt=""
+        class="image"
+      />
+    </div>
+    <div class="contentbox">
+      <div class="topcontentbox" v-if="!$util.localeStorage()">
+        <div class="title">提示</div>
+        <div class="tips_b">
+          <!-- <div class="tips_d">
+            <div class="name">活动时间:</div>
+            <div class="data">2024.04.22-2024.05.22</div>
+          </div> -->
+          <div class="tips_d">
+            <div class="name">活动方式:</div>
+            <div class="data">搜索您所需要的抗体,并确认加入领取清单。</div>
+          </div>
+          <div class="tips_d">
+            <div class="name">活动规则:</div>
+            <div class="data">
+              1. 385个现货抗体可供选择<br />
+              2. 每种产品限领一个,同一客户申请种类≤3个<br />
+              3. 抗体小样规格20 μg/个<br />
+              <!-- 4. 点击下方“申请产品试用装”,搜索您所需要的抗体,并确认加入领取清单 -->
+            </div>
+          </div>
+          <!-- <div class="tips_d">
+            <div class="data">活动最终解释权归三优生物所有。</div>
+          </div> -->
+        </div>
+      </div>
+      <div class="topcontentbox" v-if="$util.localeStorage()">
+        <div class="title">Tips</div>
+        <div class="tips_b">
+          <!-- <div class="tips_d">
+            <div class="name">Promotion Time:</div>
+            <div class="data">2024.04.22-2024.05.22</div>
+          </div> -->
+          <div class="tips_d">
+            <div class="name">Promotion Method:</div>
+            <div class="data">
+              Search for the antibodies you need, and add to the list.
+            </div>
+          </div>
+          <div class="tips_d">
+            <div class="name">Promotion Rules:</div>
+            <div class="data">
+              1. 385 spot antibodies available for selection<br />
+              2. Each product is limited to one sample when applied, and each
+              customer applies for ≤ 3 types of product<br />
+              3. 20 μg/product<br />
+              <!-- 4. Click "Free Trial Application" below, search for the antibodoies you need, and add to the list -->
+            </div>
+          </div>
+          <!-- <div class="tips_d">
+              <div class="data">The final interpretation right of the promotion belongs to SanyouBio.</div>
+            </div> -->
+        </div>
+      </div>
+      <div class="bottomcontentbox_b">
+        <p>
+          {{ $t("inquiry.ProductInformation") }}
+        </p>
+        <div
+          class="bottomcontentbox"
+          style="font-size: 16px;font-weight: bold;"
+        >
+          {{ $t("applyFressSamples.SelectedSamples") }}({{ checkList.length }})
+        </div>
+        <div class="bottomcontentbox">
+          <apply-sample-table :list="checkList" @delete-list="deleteList" />
+        </div>
+        <div
+          class="bottomcontentbox"
+          style="font-size: 16px;font-weight: bold;margin-bottom: 10px;"
+        >
+          {{ $t("applyFressSamples.AllSamples") }}
+        </div>
+        <div class="bottomcontentbox">
+          <div class="input_box">
+            <el-input
+              :placeholder="$t('input.enterkeywords')"
+              v-model="catalog"
+              @clear="inputClear"
+              @change="
+                pageable.page = 0;
+                searchByCatalog();
+              "
+              clearable
+            >
+            </el-input>
+            <div
+              class="buttom"
+              @click="
+                pageable.page = 0;
+                searchByCatalog();
+              "
+            >
+              {{ $t("button.search") }}
+            </div>
+          </div>
+          <el-table
+            :data="list"
+            ref="multipleTable"
+            style="width: 100%; margin-top:1.5rem; margin-bottom:2rem; border-bottom: none"
+            :empty-text="$t('table.notable')"
+            max-height="500"
+            :row-key="getRowKeys"
+            :row-class-name="tableRowClassName"
+            @selection-change="handleSelectionChange"
+          >
+            <el-table-column
+              type="selection"
+              :reserve-selection="true"
+              width="40"
+            />
+            <el-table-column
+              prop="catalog"
+              :label="$t('table.catalog')"
+              width="80"
+            >
+            </el-table-column>
+            <el-table-column
+              prop="productName"
+              :label="$t('table.productName')"
+            >
+            </el-table-column>
+            <!-- <el-table-column prop="date" :label="$t('table.size')" width="120px">
+                <template slot-scope="scope">
+                    <div class="size_data">50μg</div>
+                </template>
+                </el-table-column>
+                <el-table-column prop="date" :label="$t('table.quantity')" width="120px">
+                <template slot-scope="scope">
+                    <div class="size_data">1</div>
+                </template>
+                </el-table-column> -->
+            <!-- <el-table-column :label="$t('table.delete')" width="120px">
+                <template slot-scope="scope">
+                    <el-button type="text" size="small"><img style="width:24px;" src="@/assets/img/delete.png" alt="" @click="deleteList(scope.$index)"></el-button>
+                </template>
+                </el-table-column> -->
+          </el-table>
+          <!-- <div class="load_b" v-if="list.length > 9 && (pageable.page+1) !== moreParams.totalPages " @click="loadList">
+                <i v-show="loadShow" class="el-icon-loading"></i>
+                <span class="load">{{$t('table.load')}}</span>
+            </div> -->
+        </div>
+      </div>
+
+      <div class="footerbox_b">
+        <p>
+          {{ $t("inquiry.YourInformation") }}
+        </p>
+        <div class="footerbox">
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.name"
+              :placeholder="$t('input.fullname')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.region"
+              :placeholder="$t('input.country')"
+            ></el-input>
+            <!-- <div class="red-t">*</div> -->
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.company"
+              :placeholder="$t('input.companyInstitution')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.shippingAddress"
+              :placeholder="$t('input.address_must')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.email"
+              :placeholder="$t('input.email')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              v-model="from.phone"
+              :placeholder="$t('input.tel')"
+            ></el-input>
+            <div class="red-t">*</div>
+          </div>
+          <div>
+            <el-input
+              class="inputbox"
+              type="textarea"
+              :autosize="{ minRows: 4, maxRows: 6 }"
+              v-model="from.message"
+              :placeholder="$t('input.telFor')"
+            ></el-input>
+          </div>
+          <el-button class="buttonbox" type="primary" @click="postsubmit">{{
+            $t("button.submit")
+          }}</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script>
+import ApplySampleTable from "./Components/ApplySampleTable.vue";
+
+export default {
+  components: {
+    ApplySampleTable
+  },
+  name: "ApplySample",
+  data() {
+    return {
+      from: {
+        company: "",
+        shippingAddress: "",
+        name: "",
+        email: "",
+        phone: "",
+        region: "",
+        message: ""
+      },
+      catalog: "", // 货号
+      pageable: {
+        page: 0,
+        size: 1000
+      },
+      list: [],
+      // loadShow: false,
+      // moreParams: {},
+      checkList: [],
+      maxNum: 3
+    };
+  },
+  methods: {
+    // 清空
+    inputClear() {
+      this.pageable.page = 0;
+      // this.searchByCatalog()
+    },
+    // 删除数据
+    deleteList(e) {
+      const targetItem = this.checkList[e];
+
+      let canDelete = false;
+      for (var n = 0; n < this.list.length; n++) {
+        if (this.list[n].catalog === targetItem.catalog) {
+          canDelete = true;
+          this.$refs.multipleTable.toggleRowSelection(this.list[n], false);
+        }
+      }
+
+      if (!canDelete) {
+        // this.checkList.splice(e, 1)
+        this.$refs.multipleTable.toggleRowSelection(targetItem, false);
+      }
+
+      this.$message({
+        message: this.$t("message.delete"),
+        type: "success"
+      });
+    },
+    handleChange(value) {
+      console.log(value);
+    },
+    setTableRowSelected() {
+      const listCheck = [].concat(this.checkList);
+      if (listCheck.length === 0) {
+        this.$refs.multipleTable.clearSelection();
+      } else {
+        const needToSetList = [];
+        for (var i = 0; i < this.list.length; i++) {
+          for (var j = 0; j < listCheck.length; j++) {
+            if (listCheck[j].catalog === this.list[i].catalog) {
+              needToSetList.push(this.list[i]);
+            }
+          }
+        }
+
+        if (needToSetList.length > 0) {
+          this.$refs.multipleTable.clearSelection();
+          needToSetList.forEach(item => {
+            this.$refs.multipleTable.toggleRowSelection(item, true);
+          });
+
+          this.checkList = listCheck;
+        }
+      }
+    },
+    searchByCatalog() {
+      // 货号查询
+      let that = this;
+      this.$api
+        .post("product/crsSampleSack", {
+          criteria: {
+            keywords: this.catalog,
+            types: [1, 2]
+          },
+          pageable: this.pageable
+        })
+        .then(res => {
+          if (res.code === 0) {
+            if (that.pageable.page === 0) {
+              this.list = res.data.content;
+            } else {
+              this.list = this.list.concat(res.data.content);
+            }
+            this.setTableRowSelected();
+          } else {
+            this.$message.error(res.msg);
+          }
+        });
+    },
+    postsubmit() {
+      // 提交询单
+      if (this.verification()) {
+        const params = {
+          ...this.from,
+          inquiryType: 0,
+          inquiryDetailList: this.checkList.map(item => {
+            return {
+              catalog: item.catalog,
+              productName: item.productName,
+              quantity: 1,
+              size: 20,
+              unit: "μg"
+            };
+          })
+        };
+        this.$api.post("inquiry/submitForm", params).then(res => {
+          if (res.code === 0) {
+            this.$message({
+              message: this.$t("message.YourInformation"),
+              type: "success",
+              center: true,
+              duration: 6000,
+              customClass: "submit-success"
+            });
+          } else {
+            this.$message.error(res.msg);
+          }
+        });
+      }
+    },
+    // 验证
+    verification() {
+      if (this.checkList.length === 0) {
+        this.$message.error(this.$t("message.goods"));
+        return false;
+      } else if (this.from.name === "") {
+        this.$message.error(
+          this.$t("input.fullname") + this.$t("message.empty")
+        );
+        return false;
+      } else if (this.from.company === "") {
+        this.$message.error(
+          this.$t("input.companyInstitution") + this.$t("message.empty")
+        );
+        return false;
+      } else if (this.from.shippingAddress === "") {
+        this.$message.error(
+          this.$t("input.address") + this.$t("message.empty")
+        );
+        return false;
+      } else if (this.from.phone === "") {
+        this.$message.error(this.$t("input.tel") + this.$t("message.empty"));
+        return false;
+      } else if (this.from.email === "") {
+        this.$message.error(this.$t("input.email") + this.$t("message.empty"));
+        return false;
+      } else {
+        return true;
+      }
+    },
+    handleSelectionChange(val) {
+      if (val.length > this.maxNum) {
+        this.$message({
+          message: this.$t("message.MaxNum") + this.maxNum,
+          type: "error"
+        });
+
+        const targetList = val.filter(item => {
+          return !this.checkList.includes(item);
+        });
+
+        if (targetList.length > 0) {
+          this.$refs.multipleTable.toggleRowSelection(targetList[0]);
+        }
+
+        return false;
+      }
+
+      console.log(val);
+      this.checkList = val;
+    },
+    tableRowClassName({ row, rowIndex }) {
+      if (rowIndex % 2 === 0) {
+        return "warning-row";
+      } else {
+        return "success-row";
+      }
+    },
+    getRowKeys(row, index) {
+      return row.id;
+    },
+    // 加载更多
+    loadList() {
+      this.loadShow = true;
+      this.pageable.page++;
+      this.searchByCatalog();
+    }
+  },
+  mounted() {},
+  created() {
+    this.searchByCatalog();
+  }
+};
+</script>
+<style>
+@media screen and (min-width: 751px) and (max-width: 9999px) {
+  .submit-success {
+    top: 100px !important;
+    height: 80px;
+  }
+  .submit-success > i {
+    font-size: 24px !important;
+  }
+  .submit-success > p {
+    font-size: 24px !important;
+  }
+}
+</style>
+<style lang="scss" scoped>
+@media screen and (min-width: 751px) and (max-width: 9999px) {
+  .header-image {
+    width: 100%;
+    margin-bottom: 20px;
+    .image {
+      width: 100%;
+    }
+  }
+  .contentbox {
+    width: 100%;
+    overflow: hidden;
+  }
+  .topcontentbox {
+    border: 1px solid #dbdbdb;
+    // padding: 1.5rem 2rem;
+    .title {
+      font-size: 18px;
+      padding: 1.5rem 2rem;
+      font-weight: 700;
+      font-family: Arial;
+      color: #005bab;
+      background: #cfe0ef;
+    }
+    .tips_b {
+      padding: 1.5rem 2rem 2rem 2rem;
+      .tips_d {
+        display: flex;
+        font-size: 16px;
+        font-family: Arial;
+        color: #005bab;
+        .name {
+          // width: 100px;
+          font-weight: 600;
+          white-space: nowrap;
+        }
+        .data {
+          word-wrap: break-word;
+          word-break: normal;
+        }
+      }
+      .tips_d + .tips_d {
+        margin-top: 10px;
+      }
+    }
+  }
+
+  .bottomcontentbox_b /deep/ {
+    margin-top: 2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+    .el-table__header-wrapper {
+      .cell {
+        font-size: 16px;
+        font-family: Arial;
+        font-weight: normal;
+        color: #005bab;
+      }
+
+      .el-checkbox {
+        display: none;
+      }
+    }
+    .el-table__body-wrapper {
+      tr {
+        //  .el-table__cell:nth-of-type(1){
+        //  .cell{
+        //    font-size: 14px;
+        //     font-family: Arial;
+        //     color: #005BAB;
+        //     word-break: break-all;
+        //     text-overflow: ellipsis;
+        //     overflow: hidden;
+        //     display: -webkit-box;
+        //     -webkit-box-orient: vertical;
+        //     -webkit-line-clamp: 4;
+        //     margin: 8px;
+        //     text-align: center;
+        //  }
+        // }
+        .cell {
+          word-break: break-word;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 4;
+          margin: 8px 2px;
+        }
+      }
+    }
+  }
+  .bottomcontentbox_b > p {
+    font-size: 18px;
+    padding: 1.5rem 2rem;
+    font-weight: 700;
+    font-family: Arial;
+    color: #005bab;
+    background: #cfe0ef;
+    margin-bottom: 1.5rem;
+  }
+  .bottomcontentbox /deep/ {
+    // margin-top: 2rem;
+    padding: 0rem 2rem;
+    overflow: hidden;
+    .el-table {
+      border: 1px solid #dfdfdf;
+    }
+    .el-table__row {
+      .el-table__cell {
+        padding: 0;
+      }
+    }
+
+    .size_data {
+      display: flex;
+      align-items: center;
+    }
+  }
+
+  .input_box /deep/ {
+    margin-bottom: 20px;
+    display: flex;
+    align-items: center;
+    .title {
+      color: #005bab;
+      font-size: 0.14rem;
+      margin-right: 0.04rem;
+    }
+    .el-input {
+      width: 200px;
+      //   flex: 1;
+      //   font-size: 0.14rem;
+    }
+    .buttom {
+      // width: 100px;
+      text-align: center;
+      padding: 0 10px;
+      line-height: 40px;
+      color: #fff;
+      background-color: #005bab;
+      border-radius: 4px;
+      margin-left: 20px;
+      cursor: pointer;
+    }
+  }
+
+  .footerbox_b {
+    margin-top: 2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+    margin-bottom: 3rem;
+  }
+  .footerbox_b > p {
+    font-size: 1.4rem;
+    padding: 1.5rem 2rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+    margin-bottom: 1.5rem;
+  }
+  .footerbox {
+    padding: 0rem 2rem;
+    overflow: hidden;
+  }
+  .footerbox > div {
+    position: relative;
+    margin-bottom: 1.4rem;
+  }
+  .inputbox {
+    width: 100%;
+  }
+  .footerbox > div > .red-t {
+    font-size: 1.5rem;
+    color: #e52323;
+    position: absolute;
+    top: 40%;
+    left: -1rem;
+  }
+  .buttonbox {
+    width: 100%;
+    background: #0166b4;
+    height: 3rem;
+    padding: 0;
+    margin-bottom: 2rem;
+    font-size: 20px;
+  }
+  .load_b {
+    margin: 1.2rem 0;
+    font-size: 14px;
+    font-family: Arial;
+    color: #005bab;
+    text-align: center;
+    cursor: pointer;
+    .el-icon-loading {
+      font-size: 24px;
+    }
+    .load {
+      display: block;
+      line-height: 32px;
+    }
+  }
+}
+
+@media screen and (min-width: 0px) and (max-width: 750px) {
+  .header-image {
+    width: 100%;
+    margin-bottom: 0.1rem;
+    .image {
+      width: 100%;
+    }
+  }
+  .contentbox {
+    width: 100%;
+    overflow: hidden;
+  }
+  .topcontentbox {
+    border: 1px solid #dbdbdb;
+    .title {
+      font-size: 0.16rem;
+      padding: 0.14rem 0.23rem;
+      font-weight: 700;
+      color: #005bab;
+      background: #cfe0ef;
+    }
+    .tips_b {
+      padding: 0.14rem;
+      .tips_d {
+        // display: flex;
+        font-size: 0.14rem;
+        color: #005bab;
+        .name {
+          // width: 1.2rem;
+          font-weight: 600;
+          white-space: nowrap;
+        }
+        .data {
+          margin-top: 0.06rem;
+          word-wrap: break-word;
+          word-break: normal;
+        }
+      }
+      .tips_d + .tips_d {
+        margin-top: 0.1rem;
+      }
+    }
+  }
+  .topcontentbox > p:nth-of-type(1) {
+    font-size: 0.16rem;
+    padding: 0.14rem 0.23rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+  }
+  .topcontentbox > p:nth-of-type(2) {
+    padding: 0.14rem;
+    font-size: 0.16rem;
+    color: #005bab;
+    word-wrap: break-word;
+    word-break: normal;
+  }
+
+  .bottomcontentbox_b {
+    margin-top: 0.2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+  }
+  .bottomcontentbox_b > p {
+    font-size: 0.16rem;
+    padding: 0.14rem 0.23rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+    margin-bottom: 0.14rem;
+  }
+  .bottomcontentbox /deep/ {
+    // margin-top: 2rem;
+    padding: 0rem 0.14rem;
+    overflow: hidden;
+    .el-table {
+      border: 1px solid #dfdfdf;
+      margin-top: 0.12rem !important ;
+      margin-bottom: 0.14rem !important ;
+      .el-table__header-wrapper {
+        .el-checkbox {
+          display: none;
+        }
+
+        width: 100%;
+        .el-table__header {
+          width: 100% !important;
+          thead {
+            tr {
+              th {
+                .cell {
+                  font-size: 12px;
+                  padding: 0 4px;
+                  font-family: Arial;
+                  font-weight: bold;
+                  color: #005bab;
+                }
+              }
+            }
+          }
+        }
+      }
+      .el-table__body-wrapper {
+        .el-table__body {
+          width: 100% !important;
+          tbody {
+            .el-table__row {
+              .el-table__cell {
+                padding: 0;
+                .cell {
+                  font-size: 12px;
+                  padding: 0 4px;
+                  line-height: 0.24rem;
+                  word-break: break-word;
+                  .size_data {
+                    .size_q {
+                      width: 40% !important;
+                      max-width: 100px;
+                      .el-input__inner {
+                        width: 100% !important;
+                      }
+                    }
+                    .el-select {
+                      max-width: 100px;
+                      width: 60% !important;
+                      .el-input__inner {
+                        padding-right: 16px;
+                      }
+                      .el-input__suffix {
+                        .el-select__caret {
+                          width: 16px;
+                        }
+                      }
+                    }
+                  }
+                  .el-input-number {
+                    .el-input-number__decrease {
+                      width: 0.16rem;
+                    }
+                    .el-input-number__increase {
+                      width: 0.16rem;
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+        .cell {
+          word-break: break-all;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          -webkit-line-clamp: 4;
+        }
+      }
+      .el-table__empty-block {
+        width: 100% !important;
+      }
+    }
+
+    .size_data {
+      display: flex;
+      align-items: center;
+    }
+  }
+
+  .input_box /deep/ {
+    margin-bottom: 20px;
+    display: flex;
+    align-items: center;
+    .title {
+      color: #005bab;
+      font-size: 0.14rem;
+      margin-right: 0.04rem;
+    }
+    .el-input {
+      flex: 1;
+      width: 100px;
+      //   font-size: 0.14rem;
+    }
+    .buttom {
+      // width: 100px;
+      text-align: center;
+      padding: 0 10px;
+      line-height: 40px;
+      color: #fff;
+      background-color: #005bab;
+      border-radius: 4px;
+      margin-left: 20px;
+      cursor: pointer;
+    }
+  }
+
+  .footerbox_b {
+    margin-top: 0.2rem;
+    border: 1px solid #dbdbdb;
+    // padding: 0rem 2rem;
+  }
+  .footerbox_b > p {
+    font-size: 0.16rem;
+    padding: 0.14rem 0.23rem;
+    font-weight: 700;
+    color: #005bab;
+    background: #cfe0ef;
+  }
+  .footerbox {
+    margin-top: 0.14rem;
+    padding: 0rem 0.14rem;
+    overflow: hidden;
+  }
+  .footerbox > div {
+    position: relative;
+    margin-bottom: 0.15rem;
+    margin-left: 0.1rem;
+  }
+  .inputbox {
+    width: 100%;
+  }
+  .footerbox > div > .red-t {
+    font-size: 0.2rem;
+    color: #e52323;
+    position: absolute;
+    top: 40%;
+    left: -0.1rem;
+  }
+  .buttonbox {
+    width: 100%;
+    background: #0166b4;
+    height: 0.4rem;
+    padding: 0;
+    margin-bottom: 0.14rem;
+    font-size: 20px;
+  }
+  .load_b {
+    margin: 0.2rem 0;
+    font-size: 14px;
+    font-family: Arial;
+    color: #005bab;
+    text-align: center;
+    cursor: pointer;
+    .el-icon-loading {
+      font-size: 24px;
+    }
+    .load {
+      display: block;
+      line-height: 32px;
+    }
+  }
+}
+</style>

+ 252 - 850
src/view/promotion/index.vue

@@ -1,915 +1,317 @@
 <template>
-  <div class="box">
-    <div class="header-image">
-      <img
-        v-if="$util.localeStorage()"
-        src="@/assets/img/ApplyFreeSample/banner_en.jpg"
-        alt=""
-        class="image"
-      />
-      <img
-        v-if="!$util.localeStorage()"
-        src="@/assets/img/ApplyFreeSample/banner_cn.jpg"
-        alt=""
-        class="image"
-      />
-    </div>
-    <div class="contentbox">
-      <div class="topcontentbox" v-if="!$util.localeStorage()">
-        <div class="title">提示</div>
-        <div class="tips_b">
-          <!-- <div class="tips_d">
-            <div class="name">活动时间:</div>
-            <div class="data">2024.04.22-2024.05.22</div>
-          </div> -->
-          <div class="tips_d">
-            <div class="name">活动方式:</div>
-            <div class="data">搜索您所需要的抗体,并确认加入领取清单。</div>
-          </div>
-          <div class="tips_d">
-            <div class="name">活动规则:</div>
-            <div class="data">
-              1. 385个现货抗体可供选择<br />
-              2. 每种产品限领一个,同一客户申请种类≤3个<br />
-              3. 抗体小样规格20 μg/个<br />
-              <!-- 4. 点击下方“申请产品试用装”,搜索您所需要的抗体,并确认加入领取清单 -->
-            </div>
-          </div>
-          <!-- <div class="tips_d">
-            <div class="data">活动最终解释权归三优生物所有。</div>
-          </div> -->
-        </div>
+  <div class="promotion-list">
+    <div class="promotion-list-item" v-for="(item, idx) in list" :key="idx">
+      <div class="promotion-img">
+        <img :src="item.imgName" />
       </div>
-      <div class="topcontentbox" v-if="$util.localeStorage()">
-        <div class="title">Tips</div>
-        <div class="tips_b">
-          <!-- <div class="tips_d">
-            <div class="name">Promotion Time:</div>
-            <div class="data">2024.04.22-2024.05.22</div>
-          </div> -->
-          <div class="tips_d">
-            <div class="name">Promotion Method:</div>
-            <div class="data">
-              Search for the antibodies you need, and add to the list.
+      <div class="promotion-content">
+        <div class="promotion-title">{{ item.title }}</div>
+        <div class="promotion-desc">{{ item.desc }}</div>
+        <div class="promotion-time" v-if="item.time.length > 0">
+          {{ $t("Promotion.time") }}:{{ item.time.join(" ~ ") }}
+        </div>
+        <div class="footer">
+          <template v-if="isClosed(item)">
+            <div v-if="isClosed(item)" class="close-btn">
+              Ended
             </div>
-          </div>
-          <div class="tips_d">
-            <div class="name">Promotion Rules:</div>
-            <div class="data">
-              1. 385 spot antibodies available for selection<br />
-              2. Each product is limited to one sample when applied, and each
-              customer applies for ≤ 3 types of product<br />
-              3. 20 μg/product<br />
-              <!-- 4. Click "Free Trial Application" below, search for the antibodoies you need, and add to the list -->
+            <div class="view-button disabled">
+              View All
             </div>
-          </div>
-          <!-- <div class="tips_d">
-              <div class="data">The final interpretation right of the promotion belongs to SanyouBio.</div>
-            </div> -->
-        </div>
-      </div>
-      <div class="bottomcontentbox_b">
-        <p>
-          {{ $t("inquiry.ProductInformation") }}
-        </p>
-        <div
-          class="bottomcontentbox"
-          style="font-size: 16px;font-weight: bold;"
-        >
-          {{ $t("applyFressSamples.SelectedSamples") }}({{ checkList.length }})
-        </div>
-        <div class="bottomcontentbox">
-          <apply-sample-table :list="checkList" @delete-list="deleteList" />
-        </div>
-        <div
-          class="bottomcontentbox"
-          style="font-size: 16px;font-weight: bold;margin-bottom: 10px;"
-        >
-          {{ $t("applyFressSamples.AllSamples") }}
-        </div>
-        <div class="bottomcontentbox">
-          <div class="input_box">
-            <el-input
-              :placeholder="$t('input.enterkeywords')"
-              v-model="catalog"
-              @clear="inputClear"
-              @change="
-                pageable.page = 0;
-                searchByCatalog();
-              "
-              clearable
-            >
-            </el-input>
-            <div
-              class="buttom"
-              @click="
-                pageable.page = 0;
-                searchByCatalog();
-              "
-            >
-              {{ $t("button.search") }}
+          </template>
+          <template v-else-if="isClosedActive(item)">
+            <div class="close-btn">
+              Not started
             </div>
+          </template>
+          <div v-else class="view-button" @click="openPage(item.pageRoute)">
+            View All
           </div>
-          <el-table
-            :data="list"
-            ref="multipleTable"
-            style="width: 100%; margin-top:1.5rem; margin-bottom:2rem; border-bottom: none"
-            :empty-text="$t('table.notable')"
-            max-height="500"
-            :row-key="getRowKeys"
-            :row-class-name="tableRowClassName"
-            @selection-change="handleSelectionChange"
-          >
-            <el-table-column
-              type="selection"
-              :reserve-selection="true"
-              width="40"
-            />
-            <el-table-column
-              prop="catalog"
-              :label="$t('table.catalog')"
-              width="80"
-            >
-            </el-table-column>
-            <el-table-column
-              prop="productName"
-              :label="$t('table.productName')"
-            >
-            </el-table-column>
-            <!-- <el-table-column prop="date" :label="$t('table.size')" width="120px">
-                <template slot-scope="scope">
-                    <div class="size_data">50μg</div>
-                </template>
-                </el-table-column>
-                <el-table-column prop="date" :label="$t('table.quantity')" width="120px">
-                <template slot-scope="scope">
-                    <div class="size_data">1</div>
-                </template>
-                </el-table-column> -->
-            <!-- <el-table-column :label="$t('table.delete')" width="120px">
-                <template slot-scope="scope">
-                    <el-button type="text" size="small"><img style="width:24px;" src="@/assets/img/delete.png" alt="" @click="deleteList(scope.$index)"></el-button>
-                </template>
-                </el-table-column> -->
-          </el-table>
-          <!-- <div class="load_b" v-if="list.length > 9 && (pageable.page+1) !== moreParams.totalPages " @click="loadList">
-                <i v-show="loadShow" class="el-icon-loading"></i>
-                <span class="load">{{$t('table.load')}}</span>
-            </div> -->
         </div>
       </div>
-
-      <div class="footerbox_b">
-        <p>
-          {{ $t("inquiry.YourInformation") }}
-        </p>
-        <div class="footerbox">
-          <div>
-            <el-input
-              class="inputbox"
-              v-model="from.name"
-              :placeholder="$t('input.fullname')"
-            ></el-input>
-            <div class="red-t">*</div>
-          </div>
-          <div>
-            <el-input
-              class="inputbox"
-              v-model="from.region"
-              :placeholder="$t('input.country')"
-            ></el-input>
-            <!-- <div class="red-t">*</div> -->
-          </div>
-          <div>
-            <el-input
-              class="inputbox"
-              v-model="from.company"
-              :placeholder="$t('input.companyInstitution')"
-            ></el-input>
-            <div class="red-t">*</div>
-          </div>
-          <div>
-            <el-input
-              class="inputbox"
-              v-model="from.shippingAddress"
-              :placeholder="$t('input.address_must')"
-            ></el-input>
-            <div class="red-t">*</div>
+      <div class="activity-status">
+        <template v-if="isClosed(item)">
+          <img
+            class="activity-status-img"
+            src="@/assets/img/promotion/done.png"
+          />
+          <div class="activity-status-text">
+            Ended
           </div>
-          <div>
-            <el-input
-              class="inputbox"
-              v-model="from.email"
-              :placeholder="$t('input.email')"
-            ></el-input>
-            <div class="red-t">*</div>
+        </template>
+        <template v-else-if="isClosedActive(item)">
+          <img
+            class="activity-status-img"
+            src="@/assets/img/promotion/done.png"
+          />
+          <div class="activity-status-text">
+            Not started
           </div>
-          <div>
-            <el-input
-              class="inputbox"
-              v-model="from.phone"
-              :placeholder="$t('input.tel')"
-            ></el-input>
-            <div class="red-t">*</div>
+        </template>
+        <template v-else>
+          <img
+            class="activity-status-img"
+            src="@/assets/img/promotion/doing.png"
+          />
+          <div class="activity-status-text">
+            In progress
           </div>
-          <div>
-            <el-input
-              class="inputbox"
-              type="textarea"
-              :autosize="{ minRows: 4, maxRows: 6 }"
-              v-model="from.message"
-              :placeholder="$t('input.telFor')"
-            ></el-input>
-          </div>
-          <el-button class="buttonbox" type="primary" @click="postsubmit">{{
-            $t("button.submit")
-          }}</el-button>
-        </div>
+        </template>
       </div>
     </div>
   </div>
 </template>
 <script>
-import ApplySampleTable from "./Components/ApplySampleTable.vue";
-
 export default {
-  components: {
-    ApplySampleTable
-  },
-  name: "ApplySample",
+  components: {},
+  name: "Promotion",
   data() {
     return {
-      from: {
-        company: "",
-        shippingAddress: "",
-        name: "",
-        email: "",
-        phone: "",
-        region: "",
-        message: ""
-      },
-      catalog: "", // 货号
-      pageable: {
-        page: 0,
-        size: 1000
-      },
-      list: [],
-      // loadShow: false,
-      // moreParams: {},
-      checkList: [],
-      maxNum: 3
+      list: [
+        {
+          imgName: require("@/assets/img/promotion/en/banner_holophyly.png"),
+          title: "Whole Series Bispecific Reference Antibody",
+          desc: "72 bispecific reference antibodies available for selection",
+          time: ["2025-03-05", "2025-05-30"],
+          pageRoute: "/bispecific-antibody-reference"
+        }
+      ]
     };
   },
   methods: {
-    // 清空
-    inputClear() {
-      this.pageable.page = 0;
-      // this.searchByCatalog()
+    isClosed(item) {
+      const endTime = item.time[1];
+      const endTimeDate = new Date(endTime);
+      return Date.now() > endTimeDate.getTime();
     },
-    // 删除数据
-    deleteList(e) {
-      const targetItem = this.checkList[e];
+    isClosedActive(item) {
+      const endTime = item.time[0];
+      const endTimeDate = new Date(endTime);
+      console.log(Date.now(), endTimeDate.getTime(), Date.now() < endTimeDate.getTime());
+      return Date.now() < endTimeDate.getTime();
+    },
+    openPage(pageRoute) {
+      window.open(pageRoute, "_blank");
+    }
+  },
+  mounted() {},
+  created() {}
+};
+</script>
+<style lang="scss" scoped>
+@media screen and (min-width: 751px) and (max-width: 9999px) {
+  .promotion-list {
+    .promotion-list-item {
+      display: flex;
+      border-radius: 1px;
+      border: 1px solid #d9d9d9;
+      overflow: hidden;
+      font-size: 14px;
+      margin-bottom: 31px;
+      padding: 22px 24px;
+      position: relative;
 
-      let canDelete = false;
-      for (var n = 0; n < this.list.length; n++) {
-        if (this.list[n].catalog === targetItem.catalog) {
-          canDelete = true;
-          this.$refs.multipleTable.toggleRowSelection(this.list[n], false);
-        }
+      .promotion-img {
+        flex: 0 0 400px;
+        width: 400px;
+        height: 200px;
+        border: 1px solid #d6d6d6;
+        overflow: hidden;
+        position: relative;
       }
 
-      if (!canDelete) {
-        // this.checkList.splice(e, 1)
-        this.$refs.multipleTable.toggleRowSelection(targetItem, false);
-      }
+      .promotion-content {
+        width: 100%;
+        margin-left: 30px;
+        display: flex;
+        flex-direction: column;
+        position: relative;
 
-      this.$message({
-        message: this.$t("message.delete"),
-        type: "success"
-      });
-    },
-    handleChange(value) {
-      console.log(value);
-    },
-    setTableRowSelected() {
-      const listCheck = [].concat(this.checkList);
-      if (listCheck.length === 0) {
-        this.$refs.multipleTable.clearSelection();
-      } else {
-        const needToSetList = [];
-        for (var i = 0; i < this.list.length; i++) {
-          for (var j = 0; j < listCheck.length; j++) {
-            if (listCheck[j].catalog === this.list[i].catalog) {
-              needToSetList.push(this.list[i]);
-            }
-          }
+        .promotion-title {
+          font-weight: bold;
+          margin-top: 23px;
+          padding-bottom: 23px;
+          border-bottom: 1px dashed #ccc;
+          color: #000;
         }
 
-        if (needToSetList.length > 0) {
-          this.$refs.multipleTable.clearSelection();
-          needToSetList.forEach(item => {
-            this.$refs.multipleTable.toggleRowSelection(item, true);
-          });
+        .promotion-desc {
+          font-size: 14px;
+          color: #666;
+          line-height: 24px;
+          margin-top: 15px;
+          margin-bottom: 15px;
+          flex: 1;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          margin-bottom: 10px;
+          display: -webkit-box;
+          -webkit-line-clamp: 3;
+        }
 
-          this.checkList = listCheck;
+        .promotion-time {
+          margin-bottom: 15px;
+          font-weight: 400;
         }
-      }
-    },
-    searchByCatalog() {
-      // 货号查询
-      let that = this;
-      this.$api
-        .post("product/crsSampleSack", {
-          criteria: {
-            keywords: this.catalog,
-            types: [1, 2]
-          },
-          pageable: this.pageable
-        })
-        .then(res => {
-          if (res.code === 0) {
-            if (that.pageable.page === 0) {
-              this.list = res.data.content;
-            } else {
-              this.list = this.list.concat(res.data.content);
-            }
-            this.setTableRowSelected();
-          } else {
-            this.$message.error(res.msg);
-          }
-        });
-    },
-    postsubmit() {
-      // 提交询单
-      if (this.verification()) {
-        const params = {
-          ...this.from,
-          inquiryType: 0,
-          inquiryDetailList: this.checkList.map(item => {
-            return {
-              catalog: item.catalog,
-              productName: item.productName,
-              quantity: 1,
-              size: 20,
-              unit: "μg"
-            };
-          })
-        };
-        this.$api.post("inquiry/submitForm", params).then(res => {
-          if (res.code === 0) {
-            this.$message({
-              message: this.$t("message.YourInformation"),
-              type: "success",
-              center: true,
-              duration: 6000,
-              customClass: "submit-success"
-            });
-          } else {
-            this.$message.error(res.msg);
-          }
-        });
-      }
-    },
-    // 验证
-    verification() {
-      if (this.checkList.length === 0) {
-        this.$message.error(this.$t("message.goods"));
-        return false;
-      } else if (this.from.name === "") {
-        this.$message.error(
-          this.$t("input.fullname") + this.$t("message.empty")
-        );
-        return false;
-      } else if (this.from.company === "") {
-        this.$message.error(
-          this.$t("input.companyInstitution") + this.$t("message.empty")
-        );
-        return false;
-      } else if (this.from.shippingAddress === "") {
-        this.$message.error(
-          this.$t("input.address") + this.$t("message.empty")
-        );
-        return false;
-      } else if (this.from.phone === "") {
-        this.$message.error(this.$t("input.tel") + this.$t("message.empty"));
-        return false;
-      } else if (this.from.email === "") {
-        this.$message.error(this.$t("input.email") + this.$t("message.empty"));
-        return false;
-      } else {
-        return true;
-      }
-    },
-    handleSelectionChange(val) {
-      if (val.length > this.maxNum) {
-        this.$message({
-          message: this.$t("message.MaxNum") + this.maxNum,
-          type: "error"
-        });
 
-        const targetList = val.filter(item => {
-          return !this.checkList.includes(item);
-        });
+        .footer {
+          display: flex;
+          justify-content: flex-end;
 
-        if (targetList.length > 0) {
-          this.$refs.multipleTable.toggleRowSelection(targetList[0]);
-        }
+          .view-button {
+            width: 112px;
+            height: 41px;
+            border-radius: 1px;
+            text-align: center;
+            line-height: 41px;
+            color: #0166b4;
+            font-size: 12px;
+            cursor: pointer;
+            background-color: #d5edff;
 
-        return false;
-      }
+            &.disabled {
+              cursor: no-drop;
+              color: #666;
+              background-color: #ebebeb;
+            }
+          }
 
-      console.log(val);
-      this.checkList = val;
-    },
-    tableRowClassName({ row, rowIndex }) {
-      if (rowIndex % 2 === 0) {
-        return "warning-row";
-      } else {
-        return "success-row";
-      }
-    },
-    getRowKeys(row, index) {
-      return row.id;
-    },
-    // 加载更多
-    loadList() {
-      this.loadShow = true;
-      this.pageable.page++;
-      this.searchByCatalog();
-    }
-  },
-  mounted() {},
-  created() {
-    this.searchByCatalog();
-  }
-};
-</script>
-<style>
-@media screen and (min-width: 751px) and (max-width: 9999px) {
-  .submit-success {
-    top: 100px !important;
-    height: 80px;
-  }
-  .submit-success > i {
-    font-size: 24px !important;
-  }
-  .submit-success > p {
-    font-size: 24px !important;
-  }
-}
-</style>
-<style lang="scss" scoped>
-@media screen and (min-width: 751px) and (max-width: 9999px) {
-  .header-image {
-    width: 100%;
-    margin-bottom: 20px;
-    .image {
-      width: 100%;
-    }
-  }
-  .contentbox {
-    width: 100%;
-    overflow: hidden;
-  }
-  .topcontentbox {
-    border: 1px solid #dbdbdb;
-    // padding: 1.5rem 2rem;
-    .title {
-      font-size: 18px;
-      padding: 1.5rem 2rem;
-      font-weight: 700;
-      font-family: Arial;
-      color: #005bab;
-      background: #cfe0ef;
-    }
-    .tips_b {
-      padding: 1.5rem 2rem 2rem 2rem;
-      .tips_d {
-        display: flex;
-        font-size: 16px;
-        font-family: Arial;
-        color: #005bab;
-        .name {
-          // width: 100px;
-          font-weight: 600;
-          white-space: nowrap;
-        }
-        .data {
-          word-wrap: break-word;
-          word-break: normal;
+          .close-btn {
+            display: none;
+          }
         }
       }
-      .tips_d + .tips_d {
-        margin-top: 10px;
-      }
-    }
-  }
 
-  .bottomcontentbox_b /deep/ {
-    margin-top: 2rem;
-    border: 1px solid #dbdbdb;
-    // padding: 0rem 2rem;
-    .el-table__header-wrapper {
-      .cell {
+      .activity-status {
+        position: absolute;
+        top: 0;
+        right: 22px;
+        width: 112px;
+        height: 44px;
+        color: #fff;
         font-size: 16px;
-        font-family: Arial;
-        font-weight: normal;
-        color: #005bab;
-      }
 
-      .el-checkbox {
-        display: none;
-      }
-    }
-    .el-table__body-wrapper {
-      tr {
-        //  .el-table__cell:nth-of-type(1){
-        //  .cell{
-        //    font-size: 14px;
-        //     font-family: Arial;
-        //     color: #005BAB;
-        //     word-break: break-all;
-        //     text-overflow: ellipsis;
-        //     overflow: hidden;
-        //     display: -webkit-box;
-        //     -webkit-box-orient: vertical;
-        //     -webkit-line-clamp: 4;
-        //     margin: 8px;
-        //     text-align: center;
-        //  }
-        // }
-        .cell {
-          word-break: break-word;
-          text-overflow: ellipsis;
-          overflow: hidden;
-          display: -webkit-box;
-          -webkit-box-orient: vertical;
-          -webkit-line-clamp: 4;
-          margin: 8px 2px;
+        .activity-status-text {
+          width: 100%;
+          position: absolute;
+          // top: 8px;
+          // right: 17px;
+          left: 50%;
+          top: 8px;
+          transform: translateX(-50%);
+          white-space: nowrap;
+          text-align: center;
         }
       }
     }
   }
-  .bottomcontentbox_b > p {
-    font-size: 18px;
-    padding: 1.5rem 2rem;
-    font-weight: 700;
-    font-family: Arial;
-    color: #005bab;
-    background: #cfe0ef;
-    margin-bottom: 1.5rem;
-  }
-  .bottomcontentbox /deep/ {
-    // margin-top: 2rem;
-    padding: 0rem 2rem;
-    overflow: hidden;
-    .el-table {
-      border: 1px solid #dfdfdf;
-    }
-    .el-table__row {
-      .el-table__cell {
-        padding: 0;
-      }
-    }
+}
+
+@media screen and (min-width: 0px) and (max-width: 750px) {
+  .promotion-list {
+    margin-top: -20px;
 
-    .size_data {
+    .promotion-list-item {
       display: flex;
-      align-items: center;
-    }
-  }
+      border-radius: 1px;
+      border: 1px solid #d9d9d9;
+      overflow: hidden;
+      font-size: 14px;
+      margin-bottom: 31px;
+      padding: 10px;
+      position: relative;
+      flex-direction: column;
 
-  .input_box /deep/ {
-    margin-bottom: 20px;
-    display: flex;
-    align-items: center;
-    .title {
-      color: #005bab;
-      font-size: 0.14rem;
-      margin-right: 0.04rem;
-    }
-    .el-input {
-      width: 200px;
-      //   flex: 1;
-      //   font-size: 0.14rem;
-    }
-    .buttom {
-      // width: 100px;
-      text-align: center;
-      padding: 0 10px;
-      line-height: 40px;
-      color: #fff;
-      background-color: #005bab;
-      border-radius: 4px;
-      margin-left: 20px;
-      cursor: pointer;
-    }
-  }
+      .promotion-img {
+        width: 100%;
+        overflow: hidden;
+        position: relative;
+      }
 
-  .footerbox_b {
-    margin-top: 2rem;
-    border: 1px solid #dbdbdb;
-    // padding: 0rem 2rem;
-    margin-bottom: 3rem;
-  }
-  .footerbox_b > p {
-    font-size: 1.4rem;
-    padding: 1.5rem 2rem;
-    font-weight: 700;
-    color: #005bab;
-    background: #cfe0ef;
-    margin-bottom: 1.5rem;
-  }
-  .footerbox {
-    padding: 0rem 2rem;
-    overflow: hidden;
-  }
-  .footerbox > div {
-    position: relative;
-    margin-bottom: 1.4rem;
-  }
-  .inputbox {
-    width: 100%;
-  }
-  .footerbox > div > .red-t {
-    font-size: 1.5rem;
-    color: #e52323;
-    position: absolute;
-    top: 40%;
-    left: -1rem;
-  }
-  .buttonbox {
-    width: 100%;
-    background: #0166b4;
-    height: 3rem;
-    padding: 0;
-    margin-bottom: 2rem;
-    font-size: 20px;
-  }
-  .load_b {
-    margin: 1.2rem 0;
-    font-size: 14px;
-    font-family: Arial;
-    color: #005bab;
-    text-align: center;
-    cursor: pointer;
-    .el-icon-loading {
-      font-size: 24px;
-    }
-    .load {
-      display: block;
-      line-height: 32px;
-    }
-  }
-}
+      .promotion-content {
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        position: relative;
 
-@media screen and (min-width: 0px) and (max-width: 750px) {
-  .header-image {
-    width: 100%;
-    margin-bottom: 0.1rem;
-    .image {
-      width: 100%;
-    }
-  }
-  .contentbox {
-    width: 100%;
-    overflow: hidden;
-  }
-  .topcontentbox {
-    border: 1px solid #dbdbdb;
-    .title {
-      font-size: 0.16rem;
-      padding: 0.14rem 0.23rem;
-      font-weight: 700;
-      color: #005bab;
-      background: #cfe0ef;
-    }
-    .tips_b {
-      padding: 0.14rem;
-      .tips_d {
-        // display: flex;
-        font-size: 0.14rem;
-        color: #005bab;
-        .name {
-          // width: 1.2rem;
-          font-weight: 600;
-          white-space: nowrap;
+        .promotion-title {
+          font-weight: bold;
+          margin-top: 23px;
+          padding-bottom: 23px;
+          border-bottom: 1px dashed #ccc;
+          color: #000;
         }
-        .data {
-          margin-top: 0.06rem;
-          word-wrap: break-word;
-          word-break: normal;
+
+        .promotion-desc {
+          font-size: 14px;
+          color: #666;
+          line-height: 24px;
+          margin-top: 15px;
+          margin-bottom: 15px;
+          flex: 1;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          margin-bottom: 10px;
+          display: -webkit-box;
+          -webkit-line-clamp: 3;
         }
-      }
-      .tips_d + .tips_d {
-        margin-top: 0.1rem;
-      }
-    }
-  }
-  .topcontentbox > p:nth-of-type(1) {
-    font-size: 0.16rem;
-    padding: 0.14rem 0.23rem;
-    font-weight: 700;
-    color: #005bab;
-    background: #cfe0ef;
-  }
-  .topcontentbox > p:nth-of-type(2) {
-    padding: 0.14rem;
-    font-size: 0.16rem;
-    color: #005bab;
-    word-wrap: break-word;
-    word-break: normal;
-  }
 
-  .bottomcontentbox_b {
-    margin-top: 0.2rem;
-    border: 1px solid #dbdbdb;
-    // padding: 0rem 2rem;
-  }
-  .bottomcontentbox_b > p {
-    font-size: 0.16rem;
-    padding: 0.14rem 0.23rem;
-    font-weight: 700;
-    color: #005bab;
-    background: #cfe0ef;
-    margin-bottom: 0.14rem;
-  }
-  .bottomcontentbox /deep/ {
-    // margin-top: 2rem;
-    padding: 0rem 0.14rem;
-    overflow: hidden;
-    .el-table {
-      border: 1px solid #dfdfdf;
-      margin-top: 0.12rem !important ;
-      margin-bottom: 0.14rem !important ;
-      .el-table__header-wrapper {
-        .el-checkbox {
-          display: none;
+        .promotion-time {
+          margin-bottom: 15px;
+          font-weight: 400;
         }
 
-        width: 100%;
-        .el-table__header {
-          width: 100% !important;
-          thead {
-            tr {
-              th {
-                .cell {
-                  font-size: 12px;
-                  padding: 0 4px;
-                  font-family: Arial;
-                  font-weight: bold;
-                  color: #005bab;
-                }
-              }
+        .footer {
+          display: flex;
+          justify-content: flex-end;
+
+          .view-button {
+            width: 112px;
+            height: 41px;
+            border-radius: 1px;
+            text-align: center;
+            line-height: 41px;
+            color: #0166b4;
+            font-size: 12px;
+            cursor: pointer;
+            background-color: #d5edff;
+
+            &.disabled {
+              display: none;
+              cursor: no-drop;
+              color: #666;
+              background-color: #ebebeb;
             }
           }
-        }
-      }
-      .el-table__body-wrapper {
-        .el-table__body {
-          width: 100% !important;
-          tbody {
-            .el-table__row {
-              .el-table__cell {
-                padding: 0;
-                .cell {
-                  font-size: 12px;
-                  padding: 0 4px;
-                  line-height: 0.24rem;
-                  word-break: break-word;
-                  .size_data {
-                    .size_q {
-                      width: 40% !important;
-                      max-width: 100px;
-                      .el-input__inner {
-                        width: 100% !important;
-                      }
-                    }
-                    .el-select {
-                      max-width: 100px;
-                      width: 60% !important;
-                      .el-input__inner {
-                        padding-right: 16px;
-                      }
-                      .el-input__suffix {
-                        .el-select__caret {
-                          width: 16px;
-                        }
-                      }
-                    }
-                  }
-                  .el-input-number {
-                    .el-input-number__decrease {
-                      width: 0.16rem;
-                    }
-                    .el-input-number__increase {
-                      width: 0.16rem;
-                    }
-                  }
-                }
-              }
-            }
+
+          .close-btn {
+            width: 112px;
+            height: 41px;
+            line-height: 41px;
+            text-align: center;
+            background-color: #ababab;
+            color: #fff;
           }
         }
-        .cell {
-          word-break: break-all;
-          text-overflow: ellipsis;
-          overflow: hidden;
-          display: -webkit-box;
-          -webkit-box-orient: vertical;
-          -webkit-line-clamp: 4;
-        }
       }
-      .el-table__empty-block {
-        width: 100% !important;
-      }
-    }
 
-    .size_data {
-      display: flex;
-      align-items: center;
-    }
-  }
+      .activity-status {
+        display: none;
 
-  .input_box /deep/ {
-    margin-bottom: 20px;
-    display: flex;
-    align-items: center;
-    .title {
-      color: #005bab;
-      font-size: 0.14rem;
-      margin-right: 0.04rem;
-    }
-    .el-input {
-      flex: 1;
-      width: 100px;
-      //   font-size: 0.14rem;
-    }
-    .buttom {
-      // width: 100px;
-      text-align: center;
-      padding: 0 10px;
-      line-height: 40px;
-      color: #fff;
-      background-color: #005bab;
-      border-radius: 4px;
-      margin-left: 20px;
-      cursor: pointer;
-    }
-  }
+        position: absolute;
+        top: 0;
+        right: 22px;
+        width: 112px;
+        height: 44px;
+        color: #fff;
+        font-size: 16px;
 
-  .footerbox_b {
-    margin-top: 0.2rem;
-    border: 1px solid #dbdbdb;
-    // padding: 0rem 2rem;
-  }
-  .footerbox_b > p {
-    font-size: 0.16rem;
-    padding: 0.14rem 0.23rem;
-    font-weight: 700;
-    color: #005bab;
-    background: #cfe0ef;
-  }
-  .footerbox {
-    margin-top: 0.14rem;
-    padding: 0rem 0.14rem;
-    overflow: hidden;
-  }
-  .footerbox > div {
-    position: relative;
-    margin-bottom: 0.15rem;
-    margin-left: 0.1rem;
-  }
-  .inputbox {
-    width: 100%;
-  }
-  .footerbox > div > .red-t {
-    font-size: 0.2rem;
-    color: #e52323;
-    position: absolute;
-    top: 40%;
-    left: -0.1rem;
-  }
-  .buttonbox {
-    width: 100%;
-    background: #0166b4;
-    height: 0.4rem;
-    padding: 0;
-    margin-bottom: 0.14rem;
-    font-size: 20px;
-  }
-  .load_b {
-    margin: 0.2rem 0;
-    font-size: 14px;
-    font-family: Arial;
-    color: #005bab;
-    text-align: center;
-    cursor: pointer;
-    .el-icon-loading {
-      font-size: 24px;
-    }
-    .load {
-      display: block;
-      line-height: 32px;
+        .activity-status-text {
+          position: absolute;
+          top: 8px;
+          right: 17px;
+        }
+      }
     }
   }
 }