addInvoice.vue 8.77 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">
              <h3>{{ b.name }}</h3>
<!--              酒店订单-->
              <div v-if="b.orderType == 0">
                <p>{{b.messageObj.roomInfo}}</p>
                <p>{{b.messageObj.roomStayDate}}</p>
                <p class="poPrice">¥{{b.total}}</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.total}}</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.total}}</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 class="bigprice">¥{{totalMoney}}</span>
                </el-form-item>

                <el-form-item :label="`发票形式`" required>
                  <el-radio-group v-model="form.invoiceForm">
                    <el-radio value="1">{{ language == 0 ? '电子发票' : 'E-invoice' }}</el-radio>
                    <el-radio value="2">{{ language == 0 ? '纸质普票' : 'Paper-invoice' }}</el-radio>
                    <el-radio value="3">{{ language == 0 ? '纸质专票' : 'Paper-special-invoice' }}</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-form-item :label="`邮箱`" required>
                  <el-input v-model="form.contacts"/>
                </el-form-item>
                <el-form-item :label="`邮寄地址`" required>
                  <el-button plain type="primary" size="small" v-if="addrList.length==0" @click="goEditAddress">
                    +{{ language==0?'添加地址':'Add' }}
                  </el-button>
                  <div v-else class="flexCenter">
                    <div>
                      <div class="bigSize">{{nowAddress.contact}} {{nowAddress.phone}}</div>
                      <div class="smallSize">{{nowAddress.addName}}</div>
                    </div>
                    <a @click="goEditAddress" class="text-primary">
                      <el-icon><Switch /></el-icon>切换
                    </a>
                  </div>
                </el-form-item>
                <el-form-item :label="`发票类型`" required>
                  <el-radio-group v-model="form.invoiceType">
                    <el-radio value="0">{{ language == 0 ? '企业' : 'Company' }}</el-radio>
                    <el-radio value="1">{{ language == 0 ? '个人非企业' : 'Individual' }}</el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-form-item :label="`发票抬头`" required>
                  <el-input v-model="form.invoiceTitle"/>
                </el-form-item>
                <el-form-item :label="`税号`" required v-if="form.invoiceType=='0'">
                  <el-input v-model="form.invoiceTfn"/>
                </el-form-item>
                <div v-if="form.invoiceForm=='3'&&form.invoiceType=='0'">
                  <el-form-item :label="`地址`" required>
                    <el-input v-model="form.invoiceAddress"/>
                  </el-form-item>
                  <el-form-item :label="`电话`" required>
                    <el-input v-model="form.invoicePhone"/>
                  </el-form-item>
                  <el-form-item :label="`开户行`" required>
                    <el-input v-model="form.invoiceBank"/>
                  </el-form-item>
                  <el-form-item :label="`账户`" required>
                    <el-input v-model="form.invoiceAccount"/>
                  </el-form-item>
                </div>
              </el-form>
            </div>
          </el-col>
        </el-row>

        <el-row justify="center" align="middle" class="pd20">
          <el-col :span="12" class="text-center">
            <el-button type="primary" class="btn-lineG w200px" size="large" round @click="submit">
              {{ language==0?'提交':'Submit' }}
            </el-button>
          </el-col>
        </el-row>
      </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} from "@/apiPc/booking";
const {proxy} = getCurrentInstance()

const user = useUserStore().user
const language = useStorage('language', 0)
const router = useRouter()
const route = useRoute()
const form = ref({
  invoiceForm: '1',
  invoiceType: '0'
})
const list = ref([])
const addrList = ref([])
const nowAddress = ref({})
const totalMoney = ref(0)
const choseDays = ref([])
const rules = ref({})
const isEdit = ref(false)

onMounted(() => {
  if(route.query.orders){
    list.value = JSON.parse(decodeURIComponent(route.query.orders)) || []
  }
  if (route.query.totalMoney) {
    totalMoney.value = route.query.totalMoney
  }
  getAddrList()
})
function goEditAddress(id) {
  var obj = {
    title: language.value==0?'地址列表':'Address list',
    show: true,
    id: id
  }
  proxy.$refs['dialogAddressListRef'].open(obj)
}
function getAddrList() {
  addressList(user.userId).then(res=>{
    addrList.value = res.rows
    if(addrList.value.length>0){
      nowAddress.value = addrList.value[0]
    }
  })
}
function getAddress(obj) {
  console.log(obj)
  nowAddress.value = obj
  console.log(nowAddress.value)
}
function submit() {
  if(!user){
    useUserStore().setReLogin()
    return
  }

  // 提交确认
  ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', {
    confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
    cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
    type: 'warning'
  }).then(() => {
    form.value.total = totalMoney.value
    form.value.version = 2
    if (isEdit.value) {
      update()
    } else {
      add()
    }
  })
}

function update() {
  editInvoice(form.value).then(res=>{
    //返回列表
    backList()
  })
}
function add() {
  submitInvoice(form.value).then(res=>{
    //返回列表
    backList()
  })
}
function backList() {
  router.push({
    name: 'invoice'
  })
}
</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;
}

.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: 20px;
  line-height: 2;
}
</style>