ZZJ
2022-07-28 edef6ae8f59823258ce610c9074d32e698958b51
src/views/productDetail/components/PayCard.vue
@@ -1,16 +1,16 @@
<template>
  <div class="PayCard">
    <div class="imageArea" v-if="data.pics.length">
      <img class="activeImg" :src="'/httpImage/' + activeImg.url" />
      <ImageShow class="activeImg" :src="activeImg.url" />
      <div class="imgList">
        <img
        <ImageShow
          v-for="(item, index) in data.pics"
          class="preImg"
          :src="'/httpImage/' + item.url"
          :src="item.url"
          :key="index"
          alt=""
          :class="{ active: activeImg.index == index }"
          @click="selectImg(index, item.url)"
          @click.native="selectImg(index, item.url)"
        />
      </div>
    </div>
@@ -19,226 +19,34 @@
      <div class="title">
        <div class="name">{{ data.productName }}</div>
        <div class="tagList">
          <span class="tag" v-for="(name, index) in labels" :key="index">{{
          <!-- <span class="tag" v-for="(name, index) in labels" :key="index">{{
            name
          }}</span>
          }}</span> -->
          <span class="tag red" v-if="data.productType == 1">软件</span>
          <span class="tag orange" v-if="data.productType == 4">应用</span>
          <span class="tag lightBlue" v-if="data.productType == 3">SDK</span>
          <span class="tag" v-if="data.productType == 2">软硬一体</span>
          <span class="tag blue" v-if="data.productType == 5">产品密钥</span>
        </div>
      </div>
      <div class="des">{{ data.description }}</div>
      <div class="typeVersion">
        <div class="label">型号:</div>
        <div class="typeVersionContent">{{ data.productModel }}</div>
        <div class="typeVersionContent">
          {{ data.productModel ? data.productModel : "-" }}
        </div>
        <div class="label">版本:</div>
        <div class="typeVersionContent">{{ data.productVersion }}</div>
        <div class="typeVersionContent">
          {{ data.productVersion ? data.productVersion : "-" }}
        </div>
      </div>
      <div class="price">
      <!-- <div class="price">
        <div class="label">价格</div>
        <div class="number">¥{{ data.priceBase }}.00</div>
      </div>
      <!--
      <div class="row">
        <div class="label">购买数量</div>
        <el-input-number
          v-model="cartItem.devCount"
          :disabled="data.productType == 5"
          size="small"
          :min="1"
          label="描述文字"
        ></el-input-number>
      </div>
      <div class="row">
        <div class="label">服务时长</div>
        <el-button-group class="serviceYearOpt">
          <el-button
            type="default"
            size="small"
            :class="cartItem.timeLength == 1 ? 'selected' : ''"
            @click="selectYear(1)"
            >一年</el-button
          >
          <el-button
            type="default"
            size="small"
            :class="cartItem.timeLength == 2 ? 'selected' : ''"
            @click="selectYear(2)"
            >两年</el-button
          >
          <el-button
            type="default"
            size="small"
            :class="cartItem.timeLength == 3 ? 'selected' : ''"
            @click="selectYear(3)"
            >三年</el-button
          >
        </el-button-group>
      </div>
      <div class="row">
        <div class="label">配置模块</div>
        <div class="check-component">
          <div class="check-list">
            <div
              class="check-item"
              v-for="(item, index) in cartItem.modules"
              :key="index + 'c'"
              :style="isSmartCalDot ? { cursor: 'default' } : {}"
              :class="item.selected ? 'selected' : ''"
              @click="selectModel(index)"
            >
              {{ item.moduleName }}
            </div>
          </div>
          <div class="checked-list">
            <div class="label">已选</div>
            <div class="list">
              <div
                class="checked-item"
                v-for="(item, index) in cartItem.modules"
                v-show="item.selected"
                :key="index + 'd'"
              >
                {{ item.moduleName }}
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="row">
        <div class="label">请求码</div>
        <el-input
          type="textarea"
          autosize
          placeholder="请输入请求码"
          v-model="cartItem.requestCode"
        >
        </el-input>
      </div>
      <div class="row">
        <div class="label">通道数量</div>
        <el-input-number
          v-model="cartItem.chCount"
          @change="handleChangeCh"
          :disabled="!data.hasChUnitPrice"
          size="small"
          :min="1"
          :max="16"
          label="描述文字"
        ></el-input-number>
        <span class="desText">最大支持16路</span>
      </div>
      <div class="row">
        <div class="label">授权数量</div>
        <el-input-number
          v-model="cartItem.chCount"
          @change="handleChangeCh"
          :disabled="!data.hasChUnitPrice"
          size="small"
          :min="1"
          :max="16"
          label="描述文字"
        ></el-input-number>
        <span class="desText">最大支持16路</span>
        <el-input-number
          v-model="cartItem.authCount"
          @change="handleChangeAuth"
          :disabled="!data.hasAuthPrice"
          size="small"
          :min="this.cartItem.chCount"
          label="描述文字"
        ></el-input-number>
        <span class="desText">可支持的轮询路数</span>
      </div>
      <div class="row">
        <div class="label">配置算法</div>
        <div class="check-component">
          <div class="check-list">
            <div
              class="check-item"
              v-for="(item, index) in cartItem.sdks"
              :key="index + 'c'"
              :class="item.selected ? 'selected' : ''"
              @click="selectAlgorithm(index)"
            >
              {{ item.sdkName }}
            </div>
          </div>
          <div class="checked-list">
            <div class="label">已选</div>
            <div class="list">
              <div
                class="checked-item"
                v-for="(item, index) in cartItem.sdks"
                v-show="item.selected"
                :key="index + 'd'"
              >
                {{ item.sdkName }}
              </div>
            </div>
          </div>
        </div>
      </div>
      <div class="row">
        <div class="label">芯片架构</div>
        <el-select
          v-model="cartItem.targetPlatform"
          placeholder="请选择使用芯片"
          style="
            width: 329px;
            height: 40px;
            border-color: #ddd;
            border-radius: 0;
          "
        >
          <el-option
            v-for="item in data.productBaseDetail &&
            data.productBaseDetail.platforms"
            style="font-size: 12px"
            :key="item.id"
            :label="item.id"
            :value="item.id"
            :title="item.name"
          ></el-option>
        </el-select>
      </div>
      <div class="row">
        <div class="label">设备ID</div>
        <el-select
          collapse-tags
          multiple
          :multiple-limit="cartItem.devCount"
          v-model="cartItem.devIdList"
          placeholder="请选择设备ID"
          :popper-append-to-body="false"
          style="
            width: 329px;
            height: 40px;
            border-color: #ddd;
            border-radius: 0;
          "
        >
          <el-option
            v-for="item in devList"
            style="font-size: 12px"
            :key="item.id"
            :label="item.id"
            :value="item.id"
            :title="item.id"
          >
            <span class="option-lt" :title="item.id">{{ item.id }}</span>
            <span class="option-rt" :title="item.name">{{ item.name }}</span>
          </el-option>
        </el-select>
        <div class="number">¥{{ this.totalMoney }}.00</div>
      </div> -->
      <div class="row">
      <!--   <div class="row">
        <div class="label">购买数量</div>
        <el-input-number
          v-model="cartItem.devCount"
@@ -274,7 +82,7 @@
            >三年</el-button
          >
        </el-button-group>
      </div>
      </div> -->
      <div
        class="row"
@@ -344,16 +152,6 @@
      >
        <div class="label">授权数量</div>
        <el-input-number
          v-model="cartItem.chCount"
          @change="handleChangeCh"
          :disabled="!data.hasChUnitPrice"
          size="small"
          :min="1"
          :max="16"
          label="描述文字"
        ></el-input-number>
        <span class="desText">最大支持16路</span>
        <el-input-number
          v-model="cartItem.authCount"
          @change="handleChangeAuth"
          :disabled="!data.hasAuthPrice"
@@ -370,7 +168,8 @@
          data.productBaseDetail &&
          data.productBaseDetail.hasPriceBase &&
          data.productType != 5 &&
          !isSmartCalDot
          !isSmartCalDot &&
          cartItem.sdks.length > 0
        "
      >
        <div class="label">配置算法</div>
@@ -441,15 +240,49 @@
        v-if="
          data.productType != 2 &&
          data.productType != 1 &&
          data.productType != 5 &&
          data.productType == 3 &&
          (cartItem.targetPlatform.includes('x86') ||
            cartItem.targetPlatform.includes('X86'))
        "
      >
        <div class="label">显卡型号</div>
        <el-select
          v-model="cartItem.vGpu"
          style="
            width: 329px;
            height: 40px;
            border-color: #ddd;
            border-radius: 0;
          "
          placeholder="请选择显卡型号"
        >
          <el-option
            v-for="item in data.productBaseDetail &&
            data.productBaseDetail.vGpus"
            style="font-size: 12px"
            :key="item.id"
            :label="item.id"
            :value="item.id"
            :title="item.name"
          ></el-option>
        </el-select>
      </div>
      <div
        class="row"
        v-if="
          data.productType != 2 &&
          data.productType != 1 &&
          data.productType != 5
        "
      >
        <div class="label">设备ID</div>
        <!-- :multiple-limit="cartItem.devCount" -->
        <el-select
          collapse-tags
          multiple
          :multiple-limit="cartItem.devCount"
          v-model="cartItem.devIdList"
          placeholder="请选择设备ID"
          :popper-append-to-body="false"
@@ -475,22 +308,37 @@
      </div>
      <div class="btns">
        <div class="button addCar">加入购物车</div>
        <div class="button pay">立即购买</div>
        <!-- <div class="button addCar">加入购物车</div> -->
        <div class="button pay" @click="confirmNow">立即安装</div>
      </div>
    </div>
    <ConfirmOrder
      v-if="showOrder"
      :orderId="orderId"
      @close="showOrder = false"
    ></ConfirmOrder>
  </div>
</template>
<script>
import { findDevListByUser } from "@/api/device";
import { getReleaseProduct } from "@/api/product";
import { resumeOrder } from "@/api/shopcart";
import ConfirmOrder from "@/views/productDetail/components/ConfirmOrder";
import { resumePay } from "@/api/order";
export default {
  props: {
    dataInfo: {},
  },
  components: {
    ConfirmOrder,
  },
  created() {
    this.data = this.dataInfo.data;
    this.labels = this.dataInfo.labels;
    this.cartItem.id = this.data.id;
    this.getDevList();
    if (this.dataInfo.data.pics.length > 0) {
      this.activeImg.url = this.dataInfo.data.pics[0].url;
@@ -499,8 +347,8 @@
  },
  data() {
    return {
      data: this.dataInfo.data,
      labels: this.dataInfo.labels,
      data: {},
      labels: [],
      cartItem: {
        id: "",
        productName: "",
@@ -528,7 +376,31 @@
        index: 0,
        url: "",
      },
      showOrder: false,
      orderId: "",
    };
  },
  computed: {
    totalMoney() {
      let modulesPrice = 0;
      this.cartItem.moduleIds.forEach((id) => {
        this.data.modulePriceSet.forEach((module) => {
          if (module.moduleId === id) {
            modulesPrice += module.modulePrice;
          }
        });
      });
      let priceSingle =
        this.data.priceBase +
        this.data.authPrice * this.cartItem.authCount +
        this.data.chUnitPrice * this.cartItem.chCount +
        modulesPrice;
      console.log(this.data);
      return priceSingle * this.cartItem.devCount * this.cartItem.timeLength;
    },
  },
  methods: {
    getInfo() {
@@ -610,8 +482,6 @@
      this.cartItem.timeLength = year;
    },
    selectModel(index) {
      console.log("-----");
      console.log(this.isSmartCalDot);
      if (this.isSmartCalDot) {
        return;
      }
@@ -671,6 +541,59 @@
    selectImg(index, url) {
      this.activeImg.index = index;
      this.activeImg.url = url;
    },
    confirmNow() {
      let products = [
        {
          activateCode: this.cartItem.requestCode,
          authCount: this.cartItem.authCount,
          chCount: this.cartItem.chCount,
          devCount: this.cartItem.devCount,
          devIdList: this.cartItem.devIdList,
          moduleIds: this.cartItem.moduleIds,
          productId: this.cartItem.id,
          productPrice: this.cartItem.totalPrice,
          quantity: 1,
          sdkIds: this.cartItem.sdkIds,
          serveYear: this.cartItem.timeLength,
          targetPlatform: this.cartItem.targetPlatform,
          vGpu: this.cartItem.vGpu,
        },
      ];
      resumeOrder({
        // orderMoney: this.numeral(this.totalMoney).value(),
        orderMoney: 0,
        payMethod: 0,
        products,
        status: 0,
        userId: JSON.parse(sessionStorage.getItem("userInfo")).id,
      }).then((res) => {
        if (res.success) {
          this.orderId = res.data.orderId;
          if (this.totalMoney == 0) {
            resumePay({ orderId: this.orderId, payMethod: 5 }).then((res) => {
              if (res.success) {
                this.$router.push({
                  path: "/personalCenter",
                  query: {
                    id: 0,
                  },
                });
                this.$notify({
                  type: "success",
                  message: "成功试用",
                  duration: 2500,
                  offset: 57,
                });
              }
            });
            return;
          } else {
            this.showOrder = true;
          }
        }
      });
    },
  },
};
@@ -735,6 +658,26 @@
          padding: 2px 5px;
          border: 1px solid #ff5033;
          color: #ff5033;
          &.red {
            color: #ff4f32;
            border-color: #ff4f32;
          }
          &.orange {
            color: #ff9500;
            border-color: #ff9500;
          }
          &.lightBlue {
            color: #00bee7;
            border-color: #00bee7;
          }
          &.blue {
            color: #0064ff;
            border-color: #0064ff;
          }
        }
      }
    }
@@ -871,6 +814,14 @@
          border: 1px solid #c0c5cc;
          border-radius: 0;
        }
        .el-tag {
          margin-top: 0;
        }
        .el-select__tags-text {
          color: #999;
        }
      }
    }