Newer
Older
VueSharedPrinting / src / views / pay.vue
hanfei on 20 Mar 2024 5 KB han
<template>
  <!--支付确认-->
  <div class="pay">
    <navbar :name="name" />
    <div :class="['box', { 'vertical-box-width': isVertical }]">
      <div class="flex-start name">
        <img src="../assets/demo11.png" alt="" />
        <span>文件 x{{ selectedFile.length }}</span>
      </div>
      <div :class="['info', 'flex-start', { 'vertical-box-width0': isVertical }]">
        {{ parameter.specification }},{{ parameter.printingColor == 'BW' ? '黑白' : '彩色' }},{{ parameter.printingFaces == 'SINGLE' ? '单面' : '双面' }},{{ parameter.copies }}份
      </div>
    </div>
    <div :class="['box2', 'flex-between', { 'vertical-box-btn': isVertical }]">
      <div class="flex-start price" v-if="price != ''">
        <span>费用合计:</span>
        <div>¥{{ price }}</div>
      </div>
      <span v-else>文件正在处理中,请稍后!</span>
      <div class="flex-center btn" @click="skip('expense', name)">确认支付</div>
    </div>
  </div>
</template>

<script>
import navbar from '@/components/nav'
import { getPrintPrice } from '../api/resultApi'
import alert from "@/utils/alert";
// import {getPrintPrice,submitPrintingTask} from "../api/resultApi";

export default {
  name: 'pay',
  components: {
    navbar
  },
  provide() {
    return {
      title: '支付',
      type: this.name
    }
  },
  data() {
    return {
      name: this.cite.modeName,
      facility: this.cite.facility,
      selectedFile: this.cite.selectedFile,
      parameter: this.cite.parameter,
      price: '',
      num: 0,
      isVertical: false
    }
  },
  methods: {
    async submitPrintingTask() {
      let _this = this
      let { parameter, facility, selectedFile } = _this
      let taskList = []
      selectedFile.forEach(item => {
        taskList.push({
          printType: 'DocumentPrinting',
          copies: parameter.copies,
          printDirection: 'VERTICAL',
          printingColor: parameter.printingColor,
          printingFaces: parameter.printingFaces,
          fileId: item.id
        })
      })
      let data = {
        deviceId: facility.id,
        // payMode: 'WX_NATIVE_PAY',
        payMode: 'WX_JS_PAY',
        taskList: taskList
      }
      _this.cite.printData = data
      // let res = await submitPrintingTask(data)
      // _this.cite.orderId = res
    },
    async skip(href, name) {
      if (this.num > 0) {
        this.cite.state = {
          name: '加载中,请稍后!',
          sta: true
        }
        return
      }
      await this.submitPrintingTask()

      this.$router.push({
        name: href,
        params: {
          name: name
        }
      })
    },
    async getPrintPrice(id) {
      let _this = this
      let { parameter, facility } = _this
      let data = {
        deviceId: facility.id,
        printType: 'DocumentPrinting',
        copies: parameter.copies,
        printDirection: 'VERTICAL',
        printingColor: parameter.printingColor,
        printingFaces: parameter.printingFaces,
        fileId: id
      }
      let res = await getPrintPrice(data).catch(error => {alert(error,this)})
      if (_this.price == '') {
        _this.price = 0
      }
      _this.price = (parseFloat(res * 1000) + _this.price * 1000) / 1000
      _this.num = _this.num - 1
    },
    load() {
      let { selectedFile } = this
      this.num = selectedFile.length
      selectedFile.forEach(item => {
        this.getPrintPrice(item.id)
      })
    }
  },
  created() {
    this.isVertical = this.cite.isVertical
  },
  mounted() {
    this.price = ''
    this.load()
  }
}
</script>

<style scoped lang="less">
.pay {
  .css1 {
    width: 105.43rem;
    background: #ffffff;
    box-shadow: 0rem 0.31rem 0.63rem 0.06rem rgba(0, 0, 0, 0.14);
    border-radius: 1.63rem;
    margin: 0 auto;
    padding: 0 2.69rem;
  }
  .box {
    height: 23rem;
    .css1();
    margin-bottom: 2.5rem;
    .name {
      font-size: 2.13rem;
      font-weight: bold;
      color: #323232;
      line-height: 3rem;
      padding: 3.25rem 0 2.56rem;
      img {
        width: 3.66rem;
        margin-right: 1.63rem;
      }
    }
    .info {
      width: 97.94rem;
      height: 9.44rem;
      background: #f6f6f6;
      border-radius: 1.63rem;
      font-size: 2.13rem;
      font-weight: bold;
      color: #989898;
      line-height: 3rem;
      padding: 0 3.75rem;
    }
  }
  .box2 {
    height: 12.44rem;
    .css1();
    .price {
      font-size: 2.13rem;
      font-weight: bold;
      color: #323232;
      line-height: 3rem;
      align-items: flex-end;
      div {
        font-size: 4.13rem;
        font-weight: bold;
        color: #d51919;
        line-height: 5rem;
        margin-left: 3rem;
      }
    }
    .btn {
      width: 51.13rem;
      height: 5.5rem;
      background: linear-gradient(132deg, #52a39d 0%, #a1c553 50%, #81d012 100%);
      border-radius: 1.25rem;
      font-size: 1.88rem;
      font-weight: 400;
      color: #ffffff;
      line-height: 2.63rem;
    }
  }
}
.vertical-box-width {
  width: 87% !important;
}
.vertical-box-width0 {
  width: auto !important;
}
.vertical-box-btn {
  width: 87% !important;
  height: 14.44rem !important;
  padding: 2rem 2.69rem !important;
  flex-direction: column !important;
}
</style>