invoiceDetail.vue 11 KB
<template>
  <div>
    <div class="box">
      <el-card :body-style="{ padding: '0px' }" class="mt20">
        <div slot="header">
          <div class="bg-lineg">{{ language == 0 ? '发票开具' : 'Invoice application' }}</div>
        </div>
        <el-row class="pd20" :gutter="20">
          <el-col :span="24">
            <!--已选订单-->
            <div class="border-info" v-for="b in list" :key="b.id">
              <label class="blueTag" v-if="b.orderType == 0"> 酒店订单</label>
              <label class="orangeTag" v-if="b.orderType == 1"> 接送订单</label>
              <label class="purpleTag" v-if="b.orderType == 2"> 餐饮订单</label>
              <label class="pinkTag" v-if="b.orderType == 3">化妆订单</label>
              <label class="yellowTag" v-if="b.orderType == 4">拍照订单</label>

              <h3>{{ b.name }}</h3>
              <!--              酒店订单-->
              <div v-if="b.orderType == 0">
                <p>{{b.messageObj.roomInfo}}</p>
                <p>{{b.messageObj.roomStayDate}}</p>
                <p class="poPrice">{{ b.paymentType==3?'€' :'¥' }}{{b.totalStr}}</p>
              </div>
              <!--              接送订单-->
              <div v-if="b.orderType == 1">
                <p v-for="(car,index) in b.messageObj.carsList" :key="index" v-show="car.num>0">
                  <span>{{car.name}}{{car.num}}</span>
                </p>
                <p class="poPrice">{{ b.paymentType==3?'€' :'¥' }}{{b.totalStr}}</p>
              </div>
              <!--              餐饮订单-->
              <div v-if="b.orderType == 2">
                <p v-for="(n,index) in b.messageObj.foodsList" :key="index">
                  <span v-if="n.num > 0">
                    {{n.name}}({{n.categoryName}}) <span>{{n.num}}</span>
                  </span>
                </p>
                <p class="poPrice">{{ b.paymentType==3?'€' :'¥' }}{{b.totalStr}}</p>
              </div>
              <div v-if="b.orderType == 3 || b.orderType == 4">
                <div>
                  {{language==0?'套餐名称:':''}}{{b.messageObj.packageName}}
                </div>
                <div>
                  {{language==0?'预约时间:':''}}{{b.deliveryTime.slice(0,10)}} {{b.messageObj.timePeriod}}
                </div>
                <p class="poPrice">{{ b.paymentType==3?'€' :'¥' }}{{b.totalStr}}</p>
              </div>
            </div>

            <div class="leftboderTT">{{ language == 0 ? '开票信息' : 'Invoice information' }}</div>
            <div class="border-rr mt20 pd20">
              <el-form class="mw500" :model="form" :label-width="language == 0 ?'100':'150'" :rules="rules" ref="formRef">
                <el-form-item :label="'开票金额'">
                  <span v-if="orderType==5||orderType==6" class="bigprice">{{paymentType!=2?'¥':'€'}}{{totalMoney}}</span>
                  <span v-else class="bigprice">{{paymentType!=3?'¥':'€'}}{{totalMoney}}</span>
                </el-form-item>

                <el-form-item :label="`发票形式`" required prop="invoiceForm">
                  <span v-if="form.invoiceForm=='1'">电子发票</span>
                  <span v-if="form.invoiceForm=='2'">纸质普票</span>
                  <span v-if="form.invoiceForm=='3'">纸质专票</span>
                </el-form-item>

                <el-form-item :label="`发票类型`" required prop="invoiceType">
                  <span v-show="form.invoiceType=='0'"> 企业</span>
                  <span v-show="form.invoiceType=='1'"> 个人非企业</span>
                </el-form-item>
                <el-form-item :label="`发票抬头`" required prop="invoiceTitle">
                  {{form.invoiceTitle}}
                </el-form-item>
                <el-form-item :label="`税号`" required v-if="form.invoiceType=='0'" prop="invoiceTfn">
                 {{form.invoiceTfn}}
                </el-form-item>
                <el-form-item :label="`邮箱`" v-if="form.invoiceForm=='1'" required prop="invoiceEmail">
                  {{form.invoiceEmail}}
                </el-form-item>
                <el-form-item :label="`邮寄地址`" v-else required>
                  <div class="flexCenter">
                    <div>
                      <div class="bigSize">{{nowAddress.contact}} {{nowAddress.phone}}</div>
                      <div class="smallSize">{{nowAddress.addName}}</div>
                    </div>
                  </div>
                </el-form-item>
                <div v-if="form.invoiceForm=='3'&&form.invoiceType=='0'">
                  <el-form-item :label="`地址`" required prop="invoiceAddress">
                    {{form.invoiceAddress}}
                  </el-form-item>
                  <el-form-item :label="`电话`" required prop="invoicePhone">
                    {{form.invoicePhone}}
                  </el-form-item>
                  <el-form-item :label="`开户行`" required prop="invoiceBank">
                    {{form.invoiceBank}}
                  </el-form-item>
                  <el-form-item :label="`账户`" required prop="invoiceAccount">
                    {{form.invoiceAccount}}
                  </el-form-item>
                </div>
              </el-form>
            </div>
          </el-col>
        </el-row>
        <div class="text-center mb20">
          <el-button type="primary" @click="backList" round plain>返回</el-button>
        </div>
      </el-card>
      <div style="height: 60px;"></div>
    </div>
  </div>
  <address-list-dialog ref="dialogAddressListRef" @submit="getAddress"/>
</template>

<script setup>
import {useRouter, useRoute} from "vue-router";
import {ref, reactive, onMounted} from "vue";
import {useStorage} from "@vueuse/core/index";
import AddressListDialog from "./component/addressList"
import dayjs from 'dayjs'
import {ElMessage,ElMessageBox} from "element-plus";
import useUserStore from "@/store/modules/user";
import {getCurrentInstance} from "@vue/runtime-core";
import {addressList, editInvoice, submitInvoice,getInvoiceDetailBills,getInvoiceDetail,getInvoiceDetailMatch} from "@/apiPc/booking";
import {submitTitckInvoice, invoice, TitckUpdateInvoice} from '@/viewsPc/seat/api/index'

const {proxy} = getCurrentInstance()

const user = useUserStore().user
const language = useStorage('language', 0)
const paymentType=ref(1)
const router = useRouter()
const route = useRoute()
const list = ref([])
const addrList = ref([])
const nowAddress = ref({})
const totalMoney = ref(0)
const orderType=ref(0)
const form = ref({})
const rules = ref({
  invoiceType: [
    {required: true, message: language.value==0?'请选择发票类型':'Please select invoice type', trigger: 'change'}
  ],
  invoiceEmail: [
    {required: true, message: language.value==0?'请输入邮箱':'Please enter email', trigger: 'blur'}
  ],
  invoiceForm: [
    {required: true, message: language.value==0?'请选择发票形式':'Please select invoice form', trigger: 'change'}
  ],
  invoiceTitle: [
    {required: true, message: language.value==0?'请输入发票抬头':'Please enter invoice title', trigger: 'blur'}
  ],
  invoiceTfn: [
    {required: true, message: language.value==0?'请输入税号':'Please enter TFN', trigger: 'blur'}
  ],
  invoiceAddress: [
    {required: true, message: language.value==0?'请输入地址':'Please enter address', trigger: 'blur'}
  ],
  invoicePhone: [
    {required: true, message: language.value==0?'请输入电话':'Please enter phone', trigger: 'blur'}
  ],
  invoiceBank: [
    {required: true, message: language.value==0?'请输入开户行':'Please enter bank', trigger: 'blur'}
  ],
  invoiceAccount: [
    {required: true, message: language.value==0?'请输入账户':'Please enter account', trigger: 'blur'}
  ],
})
const isEdit = ref(false)
let invoiceId
onMounted(() => {
  if(route.query.activeId){
    form.value.activeId = route.query.activeId
  }
  orderType.value=route.query.orderType
  paymentType.value=route.query.paymentType
  invoiceId = route.query.invoiceId
  getList()

})
function getList() {
  getInvoiceDetailBills(invoiceId).then(res => {
    // 订单
    list.value = res.rows;
    for (var bill of list.value) {
      bill.messageObj = JSON.parse(bill.message)
    }
  });
  if (orderType.value==6){
    invoice(invoiceId).then(res=>{
      // console.log(res)
      form.value = res.data;
      form.value.invoiceForm=1
      totalMoney.value = form.value.total
    })
  }else if(orderType.value==5){
    getInvoiceDetailMatch(invoiceId).then(res => {
      form.value = res.data;
      totalMoney.value = form.value.total
      if (form.value.invoiceForm == '1') {
        email.value = form.value.address
      }
      getAddrList()
    });
  }else{
    getInvoiceDetail(invoiceId).then(res => {
      form.value = res.data;
      totalMoney.value = form.value.total
      if (form.value.invoiceForm == '1') {
        email.value = form.value.address
      }
      getAddrList()
    });
  }

}
function getAddrList() {
  addressList(user.userId).then(res=>{
    addrList.value = res.rows
    if(addrList.value.length>0){
      nowAddress.value = addrList.value[0]
    }
  })
}
function backList() {
  router.push({
    name: 'myKP'
  })
}
</script>

<style scoped lang="scss">
.bigMoney {
  font-size: 36px !important;
  font-family: 'DIN Alternate';
  font-weight: bold;
}
.btn-lineG{font-size: 16px}
.bg-lineg {
  height: 40px;
  line-height: 40px;
  font-size: 18px;
  text-align: center;
}
.border-info{position: relative;
  &>label{position: absolute;right: 0;top: 0;margin: 0;border-radius: 0 0 0px 15px;
    padding: 5px 15px;font-size: 14px;
  }
  .poPrice{position: absolute;bottom: 0px;right: 10px;font-size: 24px;
    line-height: 1;font-family: "DIN Alternate"}
}
.blueTag {
  color: #fff;
  background-color: #1EC886;
}

.purpleTag {
  color: #fff;
  background-color: #717bef;
}

.orangeTag {
  color: #fff;
  background-color: #ff8124;
}
.pinkTag {
  color: #fff;
  background-color: #f55497;
}

.yellowTag {
  color: #fff;
  background-color: #bad814;
}
.leftboderTT {
  font-weight: 600;
  font-size: 16px;
  color: #453DEA;
}

.border-rr {
  border-radius: 5px;
  border: 1px solid #DCDFE6;
}

.room {
  font-weight: 400;
  font-size: 14px;
  color: #929AA0;
}

.ccitemBox {
  overflow: auto;

  label {
    margin: 10px 0;
    display: block;
    min-height: 30px;

    span {
      color: #FF8124;
      font-family: DIN Alternate;
      font-size: 24px;
    }
  }
}

.ccitem {
  display: flex;
  justify-content: space-between;
  font-size: 15px;
  color: #666;
  margin: 5px 0 10px;

  label {
    font-size: 16px;
    color: #000;
  }

  span {
    font-size: 13px;
  }
}

.red {
  color: #FF8124;
}
.tip{font-size: 14px;color: #666;padding: 0 10px;}
.mw500{max-width: 500px;margin: auto}
.bigSize {
  font-size: 16px;
  margin-bottom: 5px;
}

.smallSize {
  font-size: 14px;
  color: #999;
}

.flexCenter {
  display: flex;
  width: 100%;
  align-items: center;
  justify-content: space-between;
  background: #f4f4f4;
  padding: 10px;
  box-sizing: border-box;
}
.bigprice {
  font-size: 26px;
  line-height: 1;font-family: "DIN Alternate";
}
</style>