提交 faa1d637 authored 作者: lihuihui's avatar lihuihui

update

上级 7a794983
......@@ -12,3 +12,11 @@ export function createInvoice(data) {
export function invoiceHistory(params) {
return httpRequest.get('/api/finance/v1/invoices/history', { params })
}
// 获取云抬头
export function getEnterpriseInfo(params) {
return httpRequest.get('/api/finance/v1/invoices/enterprise-info', { params })
}
// 开具发票
export function handleDeleteInvoice(data) {
return httpRequest.post('/api/finance/v1/invoices/cancel', data)
}
......@@ -7,29 +7,154 @@
</van-tabs>
<van-form :show-error="false" ref="vanForm" @submit="fetchCreateInvoice">
<div class="form-group">
<div class="search-pop" v-if="searchShow">
<div class="scroll">
<div class="li" @click="selectEnterprise(item)" v-for="(item, index) in enterprise" :key="index">
{{ item.enterpriseName }}
</div>
</div>
</div>
<h5>发票信息</h5>
<van-field readonly clickable name="picker" :value="invoice_type_label" label="发票类型" placeholder="请选择发票类型" @click="showPicker = true" :rules="[{ required: true, message: '请选择发票类型', trigger: 'onChange' }]" required />
<van-field v-model="form.taxpayer_name" name="pattern" label="纳税人名称" placeholder="请输入纳税人名称" :rules="[{ required: true, message: '请输入纳税人名称' }]" required right-icon="apps-o" @click-right-icon="handleHistory"/>
<van-field v-if="form.taxpayer_type === '2'" v-model="form.taxpayer_identifier" name="pattern" label="纳税人识别号" placeholder="请输入纳税人识别号" :rules="[{ required: form.taxpayer_type === '2', message: '请输入纳税人识别号' }, { validator: invoiceValidator, message: '输入格式错误' }]" :required="form.taxpayer_type === '2'"/>
<van-field
v-if="!isProject"
readonly
clickable
name="picker"
:value="invoice_type_label"
label="发票类型"
placeholder="请选择发票类型"
@click="showPicker = true"
:rules="[{ required: true, message: '请选择发票类型', trigger: 'onChange' }]"
required
/>
<van-field
v-else
:disabled="isProject"
readonly
clickable
name="picker"
:value="invoice_type_label"
label="发票类型"
placeholder="请选择发票类型"
:rules="[{ required: true, message: '请选择发票类型', trigger: 'onChange' }]"
required
/>
<van-field
@input="getEnterpriseInfo"
v-model="form.taxpayer_name"
name="pattern"
label="纳税人名称"
placeholder="请输入纳税人名称"
:rules="[{ required: true, message: '请输入纳税人名称' }]"
required
right-icon="apps-o"
@click-right-icon="handleHistory"
/>
<van-field
v-if="form.taxpayer_type === '2'"
v-model="form.taxpayer_identifier"
name="pattern"
label="纳税人识别号"
placeholder="请输入纳税人识别号"
:rules="[
{ required: form.taxpayer_type === '2', message: '请输入纳税人识别号' },
{ validator: invoiceValidator, message: '输入格式错误' }
]"
:required="form.taxpayer_type === '2'"
/>
<template v-if="form.invoice_type === '3'">
<van-field v-model="form.taxpayer_address" name="pattern" label="地址" placeholder="请输入地址" :rules="[{ required: true, message: '请输入地址' }]" required/>
<van-field v-model="form.taxpayer_mobile" type="tel" name="pattern" label="电话" placeholder="请输入电话" :rules="[{ required: true, message: '请输入电话' }, { validator: phoneValidator, message: '输入格式错误' }]" required/>
<van-field v-model="form.taxpayer_bank_name" name="pattern" label="开户行" placeholder="请输入开户行" :rules="[{ required: true, message: '请输入开户行' }]" required/>
<van-field v-model="form.taxpayer_bank_account" name="pattern" label="银行账号" placeholder="请输入银行账号" :rules="[{ required: true, message: '请输入银行账号' }]" required/>
<van-field
v-model="form.taxpayer_address"
name="pattern"
label="地址"
placeholder="请输入地址"
:rules="[{ required: true, message: '请输入地址' }]"
required
/>
<van-field
v-model="form.taxpayer_mobile"
type="tel"
name="pattern"
label="电话"
placeholder="请输入电话"
:rules="[
{ required: true, message: '请输入电话' },
{ validator: phoneValidator, message: '输入格式错误' }
]"
required
/>
<van-field
v-model="form.taxpayer_bank_name"
name="pattern"
label="开户行"
placeholder="请输入开户行"
:rules="[{ required: true, message: '请输入开户行' }]"
required
/>
<van-field
v-model="form.taxpayer_bank_account"
name="pattern"
label="银行账号"
placeholder="请输入银行账号"
:rules="[{ required: true, message: '请输入银行账号' }]"
required
/>
</template>
<van-field v-model="form.invoice_remark" name="pattern" label="备注" placeholder="请输入备注" disabled/>
<van-field v-model="form.invoice_remark" name="pattern" label="备注" placeholder="请输入备注" disabled />
</div>
<div class="form-group">
<h5>收票信息</h5>
<van-field v-if="form.invoice_type === '2'" v-model="form.recipient_email" name="pattern" label="邮箱地址" placeholder="请输入邮箱地址" :rules="[{ required: true, message: '请输入邮箱地址' }, { validator: emailValidator, message: '输入格式错误' }]" required/>
<van-field
v-if="form.invoice_type === '2'"
v-model="form.recipient_email"
name="pattern"
label="邮箱地址"
placeholder="请输入邮箱地址"
:rules="[
{ required: true, message: '请输入邮箱地址' },
{ validator: emailValidator, message: '输入格式错误' }
]"
required
/>
<template v-else>
<van-field v-model="form.recipient_address" name="pattern" label="邮寄地址" placeholder="请输入邮寄地址" :rules="[{ required: true, message: '请输入邮寄地址' }]" required/>
<van-field v-model="form.recipient_name" name="pattern" label="收件人名称" placeholder="请输入收件人名称" :rules="[{ required: true, message: '请输入收件人名称' }]" required/>
<van-field v-model="form.recipient_mobile" type="tel" name="pattern" label="收件人手机号" placeholder="请输入收件人手机号" :rules="[{ required: true, message: '请输入收件人手机号' }, { validator: phoneValidator, message: '输入格式错误' }]" required/>
<van-field v-model="form.sales_rep_user_id_name" name="pattern" label="票据跟进人" placeholder="请输入票据跟进人" disabled/>
<van-field
v-model="form.recipient_address"
name="pattern"
label="邮寄地址"
placeholder="请输入邮寄地址"
:rules="[{ required: true, message: '请输入邮寄地址' }]"
required
/>
<van-field
v-model="form.recipient_name"
name="pattern"
label="收件人名称"
placeholder="请输入收件人名称"
:rules="[{ required: true, message: '请输入收件人名称' }]"
required
/>
<van-field
v-model="form.recipient_mobile"
type="tel"
name="pattern"
label="收件人手机号"
placeholder="请输入收件人手机号"
:rules="[
{ required: true, message: '请输入收件人手机号' },
{ validator: phoneValidator, message: '输入格式错误' }
]"
required
/>
<van-field
v-model="form.sales_rep_user_id_name"
name="pattern"
label="票据跟进人"
placeholder="请输入票据跟进人"
disabled
/>
</template>
</div>
<div style="margin: 16px;">
<div style="margin: 16px">
<van-button round block type="info" native-type="submit" size="small">确认提交</van-button>
</div>
</van-form>
......@@ -43,15 +168,17 @@
/>
</van-popup>
<van-popup v-model="showPopup" position="bottom" :style="{ height: '60%' }">
<p class="popup-title van-hairline--bottom"><span>选择历史开票信息</span><van-icon name="cross" @click="showPopup = false" /></p>
<history-invoice-list v-if="showPopup" @select="handleSelect"/>
<p class="popup-title van-hairline--bottom">
<span>选择历史开票信息</span><van-icon name="cross" @click="showPopup = false" />
</p>
<history-invoice-list v-if="showPopup" @select="handleSelect" />
</van-popup>
</div>
</template>
<script>
import HistoryInvoiceList from '../../components/HistoryInvoiceList.vue'
import { createInvoice } from '../../api'
import { createInvoice, getEnterpriseInfo } from '../../api'
import { Toast } from 'vant'
const defaultForm = {
invoice_type: '',
......@@ -72,6 +199,7 @@ export default {
components: { HistoryInvoiceList },
data() {
return {
searchShow: false,
invoice_type_label: '',
form: {},
showPicker: false,
......@@ -79,6 +207,9 @@ export default {
}
},
computed: {
isProject() {
return this.$route.query.project_id === '5005' && this.$route.query.type === '60'
},
invoiceTypeList() {
const list = [
// { label: '普通发票(纸质)', value: '1' },
......@@ -100,9 +231,28 @@ export default {
created() {
defaultForm.invoice_remark = this.query.remark || ''
defaultForm.sales_rep_user_id_name = this.query.name || ''
defaultForm.invoice_type = this.isProject ? '2' : ''
this.invoice_type_label = this.isProject ? '普通发票(电子)' : ''
this.form = Object.assign({ taxpayer_type: '2' }, defaultForm)
},
methods: {
selectEnterprise(item) {
this.form.taxpayer_identifier = item.enterpriseCode
this.form.taxpayer_name = item.enterpriseName
this.searchShow = false
},
getEnterpriseInfo() {
this.form.taxpayer_identifier = ''
getEnterpriseInfo({ name: this.form.taxpayer_name }).then(res => {
if (res.data.list.length) {
this.enterprise = res.data.list
this.searchShow = true
} else {
this.searchShow = false
}
})
},
phoneValidator(val) {
if (val === '') return true
return /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/.test(val)
......@@ -127,9 +277,9 @@ export default {
setInvoiceType(val) {
const item = this.invoiceTypeList.find(item => item.value === val)
if (item) {
this.invoice_type_label = item.label
this.invoice_type_label = this.isProject ? '普通发票(电子)' : item.label
} else {
this.invoice_type_label = ''
this.invoice_type_label = this.isProject ? '普通发票(电子)' : ''
window.setTimeout(() => {
this.$refs.vanForm.resetValidation()
}, 1)
......@@ -152,11 +302,13 @@ export default {
fetchCreateInvoice() {
const params = Object.assign({}, this.form)
params.payment_id = this.id
createInvoice(params).then(res => {
createInvoice(params)
.then(res => {
// Toast.success('提交成功')
const type = this.form.invoice_type === '2' ? '1' : '2'
this.$router.push({ path: '/h5/payment/invoice-success', query: { type } })
}).catch(err => {
})
.catch(err => {
Toast.fail((err.data && err.data.message) || '提交失败')
})
}
......@@ -164,32 +316,55 @@ export default {
}
</script>
<style scoped>
.invoice-container{
padding-top:20px;
<style scoped lang="scss">
.invoice-container {
padding-top: 20px;
position: relative;
}
.form-group{
margin:10px 15px 0;
.search-pop {
width: -webkit-fill-available;
position: absolute;
top: 123px;
left: 0;
padding: 10px;
background: #fff;
z-index: 999;
box-shadow: 0px 10px 15px rgba(0, 0, 0, 0.2);
border-radius: 3px;
.li {
padding: 10px;
font-size: 14px;
color: #646566;
border-bottom: 1px solid #ebedf0;
}
.scroll {
max-height: 200px;
overflow-y: scroll;
}
}
.form-group {
position: relative;
margin: 10px 15px 0;
}
.form-group h5{
font-size:16px;
line-height:36px;
font-weight:normal;
color:#aaa;
.form-group h5 {
font-size: 16px;
line-height: 36px;
font-weight: normal;
color: #aaa;
}
.popup-title{
font-size:16px;
display:flex;
.popup-title {
font-size: 16px;
display: flex;
height: 44px;
line-height:44px;
line-height: 44px;
}
.popup-title span{
flex:1;
text-indent:20px;
.popup-title span {
flex: 1;
text-indent: 20px;
}
.popup-title i{
height:44px;
line-height:44px;
padding:0 14px;
.popup-title i {
height: 44px;
line-height: 44px;
padding: 0 14px;
}
</style>
......@@ -17,7 +17,13 @@
<div class="right">
<p><span></span>{{parseFloat(item.amount_received) + parseFloat(item.service_charge) | toFixed}}</p>
</div>
<template v-if="item.project_id == '5005' && item.type == '60'">
<van-button v-if="item.real_invoice_status === 1" class="invoice-btn" plain round type="primary" size="mini" color="#C01540" @click.stop="handleInvoice(item)">{{ item.invoice_status == 6 ? '重开发票' : '开具发票' }}</van-button>
<van-button v-if="item.invoice_status == 4" class="invoice-btn" plain round type="primary" size="mini" color="#C01540" @click.stop="handleDeleteInvoice(item)">重开发票</van-button>
</template>
<template v-else>
<van-button v-if="item.real_invoice_status === 1" class="invoice-btn" plain round type="primary" size="mini" color="#C01540" @click.stop="handleInvoice(item)">开具发票</van-button>
</template>
</div>
<template slot="finished">{{list.length > 8 ? '没有更多了': ''}}</template>
</van-list>
......@@ -27,7 +33,7 @@
</template>
<script>
import { getPayList } from '../../api'
import { getPayList, handleDeleteInvoice } from '../../api'
const statusMap = {
1: '不可开具',
2: '未开具',
......@@ -59,8 +65,13 @@ export default {
}
},
methods: {
handleDeleteInvoice(row) {
handleDeleteInvoice({ payment_id: row.id }).then(res => {
this.$router.go(0)
})
},
handleInvoice(val) {
this.$router.push({ path: '/h5/payment/invoice', query: { id: val.id, name: val.sales_rep_user_id_name, remark: val.payer_name } })
this.$router.push({ path: '/h5/payment/invoice', query: { id: val.id, name: val.sales_rep_user_id_name, remark: val.payer_name, project_id: val.project_id, type: val.type } })
},
handleDetials(val) {
window.localStorage.setItem('invoiceDetails', JSON.stringify(val))
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论