297 lines
9.7 KiB
Vue
297 lines
9.7 KiB
Vue
<template>
|
||
<view class="invoice">
|
||
<view class="invoice_tip">
|
||
<view style="display: flex; align-items: center">
|
||
<up-icon name="error-circle-fill" color="#3c9cff"></up-icon>
|
||
发票须知:
|
||
</view>
|
||
<view>1.开票金额为用户实际支付金额(不含返利返佣)</view>
|
||
<view>2.未寄出的纸质发票会在开票确认后的20个工作日内寄出</view>
|
||
<view>3.单笔订单只支持开具一种发票类型</view>
|
||
<view>4.云快充仅为平台方,实际开票主体以申请开票时展示的开票运营商公司为准</view>
|
||
<view>5.发票由各家电站运营商提供,一起申请可能会生成多张发票</view>
|
||
<view>6.若超过20个工作日仍未收到发票,您可以通过(区号)+12366向开票公司所在区域的主管税务机关进行反馈处理</view>
|
||
</view>
|
||
<view style="height: 30rpx"></view>
|
||
<view style="padding: 30rpx; font-size: 28rpx; background-color: #fff">
|
||
<view class="flex-acsb" style="height: 80rpx">
|
||
<view>
|
||
发票主体
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view class="flex-acsb" @click="show2 = true">
|
||
<text :style="{ color: !dataFrom.subjectType ? '#808080' : '' }">
|
||
{{ !dataFrom.subjectType ? '请选择' : columns2[0].find((val) => val.id == dataFrom.subjectType).label }}
|
||
</text>
|
||
<up-icon name="arrow-down"></up-icon>
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx">
|
||
<view>
|
||
发票类型
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view class="flex-acsb" @click="show1True">
|
||
<text :style="{ color: !dataFrom.invoiceType ? '#808080' : '' }">
|
||
{{ !dataFrom.invoiceType ? '请选择' : columns1[0].find((val) => val.id == dataFrom.invoiceType).label }}
|
||
</text>
|
||
<up-icon name="arrow-down"></up-icon>
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx">
|
||
<view>
|
||
发票抬头
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.invoiceTitle" placeholder="请输入发票抬头" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.subjectType == 1">
|
||
<view>
|
||
发票税号
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.taxNumber" placeholder="请输入发票税号" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
|
||
<view>
|
||
公司地址
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.registrationAddress" placeholder="请输入公司地址" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
|
||
<view>
|
||
公司电话
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.registrationPhone" placeholder="请输入公司电话" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
|
||
<view>
|
||
开户行名称
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.bankName" placeholder="请输入开户行名称" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx" v-if="dataFrom.invoiceType == 2">
|
||
<view>
|
||
开户行账号
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.bankAccount" placeholder="请输入开户行账号" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view style="height: 30rpx"></view>
|
||
<view style="padding: 30rpx; font-size: 28rpx; background-color: #fff">
|
||
<view class="flex-acsb" style="height: 80rpx">
|
||
<view>
|
||
收票人姓名
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.name" placeholder="请输入收票人姓名" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx">
|
||
<view>
|
||
收票人手机
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.phone" type="number" placeholder="请输入收票人手机" style="text-align: right" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx">
|
||
<view>
|
||
收票人地址
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.address" placeholder="请输入收票人地址" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
<view class="flex-acsb" style="height: 80rpx">
|
||
<view>
|
||
收票人邮箱
|
||
<text style="color: #f56c6c">*</text>
|
||
</view>
|
||
<view>
|
||
<input v-model="dataFrom.email" placeholder="请输入收票人邮箱" style="text-align: right" type="text" />
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view style="height: 30rpx"></view>
|
||
<view class="p30">
|
||
<view style="font-weight: bold; font-size: 30rpx">发票备注:改内容会打印在发票上</view>
|
||
<up-textarea v-model="dataFrom.invoiceRemark" placeholder="请输入内容"></up-textarea>
|
||
</view>
|
||
<view style="height: 150rpx"></view>
|
||
<view
|
||
style="
|
||
position: fixed;
|
||
bottom: 0;
|
||
left: 0;
|
||
width: 750rpx;
|
||
padding: 20rpx 50rpx;
|
||
background-color: #fff;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
"
|
||
>
|
||
<view style="display: flex; align-items: center; font-size: 28rpx">
|
||
<text>合计</text>
|
||
<text style="font-size: 36rpx; font-weight: bold; margin: 0 15rpx">14.05</text>
|
||
<text>元</text>
|
||
</view>
|
||
<view style="width: 230rpx">
|
||
<up-button @click="applyCon" :customStyle="{ height: '80rpx', width: '230rpx' }" color="#4879e6" text="确认开票" shape="circle"></up-button>
|
||
</view>
|
||
</view>
|
||
<up-picker @confirm="aaa1" keyName="label" :show="show1" @cancel="show1 = false" :columns="columns1"></up-picker>
|
||
<up-picker @confirm="aaa2" keyName="label" :show="show2" @cancel="show2 = false" :columns="columns2"></up-picker>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, reactive } from 'vue';
|
||
import { apply } from '@/api/api.js';
|
||
import { onLoad } from '@dcloudio/uni-app';
|
||
|
||
let checkboxValue1 = ref([]);
|
||
let dataFrom = ref({
|
||
invoiceType: null,
|
||
subjectType: null,
|
||
ordersIds: []
|
||
});
|
||
let show1 = ref(false);
|
||
let show2 = ref(false);
|
||
|
||
onLoad(async (options) => {
|
||
console.log(options);
|
||
console.log(JSON.parse(decodeURIComponent(options.list)));
|
||
dataFrom.value.ordersIds = JSON.parse(decodeURIComponent(options.list));
|
||
});
|
||
|
||
const applyCon = async () => {
|
||
if (!dataFrom.value.subjectType) return uni.showToast({ title: '请选择发票主体', icon: 'none' });
|
||
if (!dataFrom.value.invoiceType) return uni.showToast({ title: '请选择发票类型', icon: 'none' });
|
||
if (!dataFrom.value.invoiceType == 1 && !dataFrom.value.taxNumber) return uni.showToast({ title: '请输入发票税号', icon: 'none' });
|
||
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.registrationPhone) return uni.showToast({ title: '请输入发票税号', icon: 'none' });
|
||
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.taxNumber) return uni.showToast({ title: '请输入发票税号', icon: 'none' });
|
||
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.registrationAddress)
|
||
return uni.showToast({ title: '请输入公司地址', icon: 'none' });
|
||
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.registrationPhone) return uni.showToast({ title: '请输入公司电话', icon: 'none' });
|
||
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.bankName) return uni.showToast({ title: '请输入开户行名称', icon: 'none' });
|
||
if (!dataFrom.value.subjectType == 1 && !dataFrom.value.invoiceType == 2 && !dataFrom.value.bankAccount) return uni.showToast({ title: '请输入开户行账户', icon: 'none' });
|
||
if (!dataFrom.value.name) return uni.showToast({ title: '请输入收票人姓名', icon: 'none' });
|
||
if (!dataFrom.value.address) return uni.showToast({ title: '请输入收票人地址', icon: 'none' });
|
||
if (!dataFrom.value.phone) return uni.showToast({ title: '请输入收票人电话', icon: 'none' });
|
||
if (!dataFrom.value.email) return uni.showToast({ title: '请输入收票人邮箱', icon: 'none' });
|
||
|
||
let _res = await apply(dataFrom.value);
|
||
uni.navigateBack({
|
||
delta: 3
|
||
});
|
||
};
|
||
|
||
const aaa1 = (ee) => {
|
||
dataFrom.value.invoiceType = ee.value[0].id;
|
||
show1.value = false;
|
||
console.log(dataFrom.value.invoiceType);
|
||
};
|
||
|
||
const aaa2 = (ee) => {
|
||
dataFrom.value.subjectType = ee.value[0].id;
|
||
show2.value = false;
|
||
if (ee.value[0].id == 2) {
|
||
dataFrom.value.invoiceType = 1;
|
||
}
|
||
};
|
||
|
||
const show1True = () => {
|
||
if (dataFrom.value.subjectType == 2) {
|
||
return;
|
||
}
|
||
show1.value = true;
|
||
};
|
||
|
||
const columns1 = reactive([
|
||
[
|
||
{
|
||
label: '增值税普通发票',
|
||
id: 1
|
||
},
|
||
{
|
||
label: '增值税专用发票',
|
||
id: 2
|
||
}
|
||
]
|
||
]);
|
||
const columns2 = reactive([
|
||
[
|
||
{
|
||
label: '企业',
|
||
id: 1
|
||
},
|
||
{
|
||
label: '个人',
|
||
id: 2
|
||
}
|
||
]
|
||
]);
|
||
|
||
const checkboxChange = (e) => {
|
||
console.log(e);
|
||
};
|
||
</script>
|
||
|
||
<style>
|
||
page {
|
||
background-color: #f5f5f5;
|
||
}
|
||
</style>
|
||
|
||
<style scoped lang="scss">
|
||
.invoice {
|
||
&_tip {
|
||
padding: 20rpx;
|
||
font-size: 24rpx;
|
||
color: #3c9cff;
|
||
background-color: rgba(60, 156, 255, 0.2);
|
||
view {
|
||
line-height: 40rpx;
|
||
}
|
||
}
|
||
&_list {
|
||
padding: 15rpx 30rpx;
|
||
background-color: #fff;
|
||
&_view {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
font-size: 28rpx;
|
||
margin-bottom: 25rpx;
|
||
&_left {
|
||
color: #646368;
|
||
}
|
||
&_right {
|
||
color: #262626;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</style>
|