shop-applet/components/addInvoicing/index.vue

599 lines
16 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view :style="viewColor">
<view class="add_invoicing" :class="invoice.invoice==true?'on':''">
<view class='title'>选择发票<text class='iconfont icon-guanbi' @tap='close'></text></view>
<form @submit="formSubmit" report-submit="true">
<view class="panel">
<view v-if="receipt_title_type == '1'" class="acea-row row-middle">
<view>发票类型</view>
<input name="receipt_type" :value="typeName" disabled="true" />
</view>
<view v-if="receipt_title_type == '2'" class="acea-row row-middle">
<view>发票类型</view>
<input name="receipt_type" :value="typeName" disabled="true" @click="callType" />
<text class="iconfont icon-xiangyou"></text>
</view>
<view class="acea-row row-middle">
<view>抬头类型</view>
<radio-group name="receipt_title_type" @change="changeHeader">
<label>
<radio value="1" :checked="receipt_title_type == '1' ? true : false" /><text>个人</text>
</label>
<label>
<radio value="2" :checked="receipt_title_type == '2' ? true : false" /><text>企业</text>
</label>
</radio-group>
</view>
<view class="acea-row row-middle">
<view>发票抬头</view>
<input v-if="receipt_title_type == 1" name="receipt_title" :value="receipt_title" :maxlength="20" placeholder="需要开具发票的姓名"/>
<input v-else name="receipt_title" :value="receipt_title" :maxlength="20" placeholder="需要开具发票的企业名称"/>
<text class="iconfont icon-xiangyou" @click="callTitle" ></text>
</view>
<view v-show="receipt_title_type == '2'" class="acea-row row-middle">
<view>税号</view>
<input name="duty_paragraph" :value="duty_paragraph" placeholder="纳税人识别号" />
</view>
<view class="acea-row row-middle">
<view>邮箱</view>
<input name="email" :value="email" placeholder="您的联系邮箱" />
</view>
</view>
<view v-show="receipt_title_type == '2' && receipt_type == '2'" class="panel">
<view class="acea-row row-middle">
<view>开户银行</view>
<input name="bank_name" :value="bank_name" placeholder="您的开户银行" />
</view>
<view class="acea-row row-middle">
<view>银行账号</view>
<input name="bank_code" :value="bank_code" placeholder="您的银行账号" />
</view>
<view class="acea-row row-middle">
<view>企业地址</view>
<input name="address" :value="address" placeholder="您所在的企业地址" />
</view>
<view class="acea-row row-middle">
<view>企业电话</view>
<input name="tel" :value="tel" placeholder="您的企业电话" />
</view>
</view>
<view class="btn-wrap">
<button class="button" form-type="submit">提交申请</button>
<button class="back" @tap="noInvoice">不开发票</button>
</view>
</form>
<view :class="{ mask: popupType || popupTitle }"></view>
<view class="popup" :class="{ on: popupType }">
<view class="title">发票类型选择<text class="iconfont icon-guanbi" @click="closeType"></text></view>
<scroll-view scroll-y="true">
<radio-group name="invoice-type" @change="changeType">
<label v-for="item in invoiceTypeList" :key="item.type" class="acea-row row-middle">
<view class="text">
<view>{{ item.name }}</view>
<view class="info">{{ item.info }}</view>
</view>
<radio :value="item.type" :checked="receipt_type == item.type ? true : false" />
</label>
</radio-group>
</scroll-view>
<button @tap="closeType">确定</button>
</view>
<view class="popup" :class="{ on: popupTitle }">
<view class="title">抬头选择<text class="iconfont icon-guanbi" @click="closeTitle"></text></view>
<scroll-view v-if="invoiceList.length > 0" scroll-y="true">
<radio-group name="invoice-title" @change="changeTitle">
<template v-for="item in invoiceList">
<label :key="item.user_receipt_id" class="acea-row row-middle">
<view class="text">
<view class="acea-row row-middle">
<view class="name">{{ item.receipt_title }}</view>
<view v-if="item.is_default" class="label">默认</view>
</view>
<view class="type" :class="{ special: item.receipt_type == '2'}">{{ item.receipt_type == 1 ? '普通发票' : '专用发票'}}</view>
</view>
<radio :value="item.user_receipt_id" :checked="item.user_receipt_id == invoice_id ? true : false" />
</label>
</template>
</radio-group>
</scroll-view>
<view v-else class="nothing">
<image src="../../static/images/noInvoice.png"></image>
<view class="nothing_text">您还没有添加发票信息哟~</view>
</view>
<button v-if="invoice.add" @tap="addTitle">添加新的抬头</button>
<button v-else @tap="close" class="btn-default">不开发票</button>
</view>
</view>
<view class='mask' catchtouchmove="true" :hidden='invoice.invoice==false' @tap='close'></view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2021 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
import { invoiceDefault, invoice, invoiceDetail } from '@/api/user.js';
import { mapGetters } from "vuex";
export default {
props: {
invoice: {
type: Object,
default: function() {
return {
invoice: false,
mer_id: 0,
};
}
}
},
computed: { ...mapGetters(['viewColor'])},
data() {
return {
id: '',
receipt_title_type: '1',
receipt_type: '1',
drawer_phone: '',
receipt_title: '',
duty_paragraph: '',
tel: '',
address: '',
bank_name: '',
bank_code: '',
is_default: 0,
email: '',
isDefault: [],
typeName: '增值税电子普通发票',
popupType: false,
popupTitle: false,
invoiceTypeList: [{
type: '1',
name: '增值税电子普通发票',
info: '默认发送至所提供的电子邮件'
},
{
type: '2',
name: '增值税专用发票',
info: '纸质发票开出后将以邮寄形式交付'
}
],
special_invoice: true,
invoice_func: true,
invoiceList: [],
invoice_checked: '',
invoice_id: '',
order_id: '',
news: '',
cartId: '',
pinkId: '',
couponId: '',
addressId: '',
invoiceData: {},
formvalidate: false
}
},
watch: {
},
onLoad(option) {
this.news = option.news;
this.cartId = option.cartId;
this.pinkId = option.pinkId;
this.couponId = option.couponId;
this.addressId = option.addressId;
if (option.special_invoice == 'false') {
this.$set(this, 'special_invoice', false);
}
},
onShow(){
this.getInvoiceDefault();
this.popupTitle = false;
},
methods: {
getInvoiceList() {
let params = {
// receipt_title_type: this.receipt_title_type,
// receipt_type: this.receipt_type
}
invoice().then(res => {
for (let i = 0; i < res.data.length; i++) {
res.data[i].user_receipt_id = res.data[i].user_receipt_id.toString();
if (res.data[i].is_default) {
this.invoice_id = res.data[i].user_receipt_id;
}
}
this.$set(this, 'invoiceList', res.data);
}).catch(err => {
this.$util.Tips({
title: err
});
});
},
getInvoiceDefault() {
let params = {
is_default: 1,
// receipt_title_type: this.receipt_title_type,
// receipt_type: this.receipt_type
}
invoice(params).then(res => {
let data = res.data[0];
this.typeName = data.receipt_type == '1' ? '增值税电子普通发票' : '增值税专用发票'
this.receipt_title_type = data.receipt_title_type;
this.receipt_type = data.receipt_type ;
this.receipt_title = data.receipt_title;
// this.drawer_phone = res.data.drawer_phone;
this.email = data.email;
this.duty_paragraph = data.duty_paragraph;
this.bank_name = data.bank_name;
this.bank_code = data.bank_code;
this.address = data.address;
this.tel = data.tel;
this.invoice_id = data.user_receipt_id.toString();
}).catch(err => {});
},
getInvoiceDetail(id){
invoiceDetail(id).then(res => {
uni.hideLoading();
this.receipt_title_type = res.data.receipt_title_type;
this.receipt_type = res.data.receipt_type;
this.typeName = this.receipt_type == '1' ? '增值税电子普通发票' : '增值税专用发票'
this.receipt_title = res.data.receipt_title;
this.email = res.data.email;
this.duty_paragraph = res.data.duty_paragraph;
this.bank_name = res.data.bank_name;
this.bank_code = res.data.bank_code;
this.address = res.data.address;
this.tel = res.data.tel;
this.is_default = res.data.is_default;
}).catch(err => {
uni.hideLoading();
this.$util.Tips({
title: err
});
});
},
close: function() {
if(this.formvalidate){
this.$emit('changeInvoiceClose',this.invoiceData)
}else{
this.$emit('changeInvoiceClose','');
}
},
noInvoice: function(){
uni.setStorage({
key:'invoice_Data',
data:{},
success: function(){}
})
this.$emit('changeInvoiceClose','');
},
callType() {
this.popupType = true;
},
changeType(e) {
this.receipt_type = e.detail.value;
this.typeName = this.invoiceTypeList.find(value => {
return value.type == this.receipt_type;
}).name;
},
closeType() {
this.popupType = false;
},
callTitle() {
this.popupTitle = true;
},
changeTitle(e) {
this.invoice_id = e.detail.value.toString();
this.getInvoiceDetail(e.detail.value)
this.popupTitle = false;
},
addTitle() {
this.popupType = false;
this.popupTitle = false;
uni.navigateTo({
url: '/pages/users/user_invoice_form/index?mer_id='+this.invoice.mer_id
});
},
closeTitle() {
this.popupTitle = false;
},
changeHeader(e) {
this.receipt_title_type = e.detail.value;
if(e.detail.value == 1){
this.receipt_type = 1;
this.typeName = '增值税电子普通发票'
}
this.receipt_type
},
changeDefault(e) {
this.is_default = e.detail.value.length ? 1 : 0;
},
// 提交发票数据
formSubmit(e) {
let that = this,
value = e.detail.value;
if (!value.receipt_title_type) return that.$util.Tips({
title: '请填写发票抬头'
});
if (!value.email) return that.$util.Tips({
title: '请填写邮箱'
});
if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value.email)) return that.$util.Tips({
title: '请输入正确的邮箱'
});
if(value.receipt_title_type == 2){
if (!value.duty_paragraph) return that.$util.Tips({
title: '请填写税号'
});
if(value.receipt_type == '增值税专用发票'){
if (!value.bank_name) return that.$util.Tips({
title: '请填写银行卡号'
});
if (!value.bank_code) return that.$util.Tips({
title: '请填写银行账号'
});
if (!value.address) return that.$util.Tips({
title: '请填写企业地址'
});
if (!value.tel) return that.$util.Tips({
title: '请填写企业电话'
});
if(!/^(\d{9}|\d{14}|\d{18})$/.test(value.bank_code)){
return this.$util.Tips({
title: '请输入正确的银行账号'
});
}
if(!/(^(\d{3,4})?\d{7,8})$|(13[0-9]{9})/.test(value.tel)){
return this.$util.Tips({
title: '请输入正确的电话号码'
});
}
}
}
that.formvalidate = true;
value.mer_id = that.invoice.mer_id;
value.receipt_type = that.receipt_type;
that.invoiceData = value
uni.setStorage({
key:'invoice_Data',
data: [that.invoiceData],
success: function(){
}
})
that.$emit('changeInvoiceClose',that.invoiceData)
}
}
}
</script>
<style lang="scss" scoped>
.add_invoicing{
position: fixed;
bottom: 0;
width: 100%;
left: 0;
background-color: #fff;
z-index: 77;
border-radius: 16rpx 16rpx 0 0;
padding-bottom: 20rpx;
transform: translate3d(0, 100%, 0);
transition: all .3s cubic-bezier(.25, .5, .5, .9);
}
.add_invoicing.on {
transform: translate3d(0, 0, 0);
}
.add_invoicing .title {
font-size: 32rpx;
font-weight: bold;
text-align: center;
height: 123rpx;
line-height: 123rpx;
position: relative;
}
.add_invoicing .title .iconfont {
position: absolute;
right: 30rpx;
color: #8a8a8a;
font-size: 35rpx;
}
form {
font-size: 28rpx;
color: #282828;
}
form input, form radio-group {
flex: 1;
text-align: right;
}
form input {
font-size: 26rpx;
}
form label {
margin-right: 50rpx;
}
form radio {
margin-right: 8rpx;
}
form checkbox-group {
height: 90rpx;
}
form checkbox {
margin-right: 20rpx;
}
/deep/radio .uni-radio-input.uni-radio-input-checked {
border: 1px solid var(--view-theme) !important;
background-color: var(--view-theme) !important
}
form button {
height: 76rpx;
border-radius: 38rpx;
margin: 16rpx 30rpx;
background-color: var(--view-theme);
font-size: 30rpx;
line-height: 76rpx;
color: #FFFFFF;
}
.panel {
padding-right: 30rpx;
padding-left: 30rpx;
background-color: #FFFFFF;
}
.panel~.panel {
margin-top: 14rpx;
}
.panel .acea-row {
height: 90rpx;
}
.panel .acea-row~.acea-row {
border-top: 1px solid #EEEEEE;
}
.input-placeholder {
font-size: 26rpx;
color: #BBBBBB;
}
.icon-xiangyou {
margin-left: 25rpx;
font-size: 18rpx;
color: #BFBFBF;
}
.btn-wrap {
width: 100%;
border-top: 1px solid #F5F5F5;
}
.btn-wrap .button{
height: 86rpx;
line-height: 86rpx;
border-radius: 50rpx;
}
.btn-wrap .back {
border-radius: 50rpx;
height: 86rpx;
line-height: 86rpx;
border: 1rpx solid var(--view-theme);
background: none;
color: var(--view-theme);
}
.popup {
position: fixed;
bottom: 0;
left: 0;
z-index: 99;
width: 100%;
padding-bottom: 100rpx;
border-top-left-radius: 16rpx;
border-top-right-radius: 16rpx;
background-color: #F5F5F5;
overflow: hidden;
transform: translateY(100%);
transition: 0.3s;
}
.popup.on {
transform: translateY(0);
}
.popup .title {
position: relative;
height: 137rpx;
font-size: 32rpx;
line-height: 137rpx;
text-align: center;
}
.popup scroll-view {
height: 466rpx;
padding-right: 30rpx;
padding-left: 30rpx;
box-sizing: border-box;
}
.popup label {
padding: 35rpx 30rpx;
border-radius: 16rpx;
margin-bottom: 20rpx;
background-color: #FFFFFF;
}
.popup .text {
flex: 1;
min-width: 0;
font-size: 28rpx;
color: #282828;
}
.popup .info {
margin-top: 10rpx;
font-size: 22rpx;
color: #909090;
}
.popup .icon-guanbi {
position: absolute;
top: 50%;
right: 30rpx;
z-index: 2;
transform: translateY(-50%);
font-size: 30rpx;
color: #707070;
cursor: pointer;
}
.popup button {
height: 86rpx;
border-radius: 43rpx;
margin-right: 30rpx;
margin-left: 30rpx;
background-color: var(--view-theme);
font-size: 30rpx;
line-height: 86rpx;
color: #FFFFFF;
}
button.btn-default{
background-color: transparent;
color: var(--view-theme);
border: 1px solid var(--view-theme);
}
.popup .text .acea-row {
display: inline-flex;
max-width: 100%;
}
.popup .name {
flex: 1;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-size: 30rpx;
}
.popup .label {
width: 70rpx;
height: 28rpx;
border: 1px solid #E93323;
margin-left: 18rpx;
font-size: 16rpx;
line-height: 26rpx;
text-align: center;
color: #E93323;
}
.popup .type {
width: 124rpx;
height: 42rpx;
margin-top: 14rpx;
background-color: #FCF0E0;
font-size: 24rpx;
line-height: 42rpx;
text-align: center;
color: #D67300;
}
.popup .type.special {
background-color: #FDE9E7;
color: #E93323;
}
.nothing {
margin: 50rpx 0;
text-align: center;
image, uni-image{
width: 400rpx;
height: 260rpx;
}
}
.nothing_text{
margin-top: 20rpx;
color: #999999;
}
</style>