提交 681bf916 authored 作者: lihuihui's avatar lihuihui
......@@ -37,7 +37,7 @@ export function updateTableTitle(data) {
}
// 开具发票
export function createNewTicket(data) {
return httpRequest.get('/api/finance/v1/invoices/create', data)
return httpRequest.post('/api/finance/v1/invoices/create', data)
}
// 作废发票
export function cancelTicket(data) {
......
<!-- 支付详情-渠道信息 -->
<template>
<table border="1" width="1500px" cellspacing="0" class="table">
<table border="1" cellspacing="0" class="table">
<tr>
<th>不含税销售金额</th>
<td>{{ dealList.sales_amount_excluding_tax }}</td>
......@@ -46,6 +46,7 @@ export default {
<style scoped>
.table {
border: 1px solid #000;
width: 100%;
}
th {
width: 120px;
......
<!-- 支付详情-收款信息 -->
<template>
<table border="1" width="1500px" cellspacing="0" class="table">
<table border="1" cellspacing="0" class="table">
<tr>
<th>应缴金额</th>
<td>{{ dealList.bill_total }}</td>
......@@ -40,6 +40,7 @@ export default {
<style scoped>
.table {
border: 1px solid #000;
width: 100%;
}
th {
width: 120px;
......
......@@ -3,10 +3,8 @@
<app-card>
<app-list v-bind="tableOptions" ref="list">
<template v-slot:table-x="{ row }">
<router-link :to="{ name: 'paydetail', params: { id: row.id } }">
<el-button>查看</el-button>
</router-link>
<el-button @click="cancelReceive(row)" style="margin-top: 5px">取消到账</el-button>
<el-button @click="toPayDetail(row)">查看</el-button>
<el-button @click="cancelReceive(row)">取消到账</el-button>
</template>
</app-list>
</app-card>
......@@ -15,14 +13,13 @@
// 组件
import AppList from '@/components/base/AppList.vue'
import AppCard from '@/components/base/AppCard.vue'
import { payDetail, payCancel } from '../api'
import { payCancel } from '../api'
const payStatusMap = { 20: '支付待确认', 30: '部分到账', 70: '足额支付待确认', 80: '足额支付' }
// 接口
export default {
props: {
id: {
type: String,
default: ''
dealList: {
type: Object
}
},
components: { AppCard, AppList },
......@@ -33,20 +30,16 @@ export default {
// 列表配置
tableOptions() {
return {
remote: {
httpRequest: payDetail, // 获取订单列表
params: { id: this.id },
beforeRequest: this.beforeRequest
},
data: this.dealList.confirmed_details,
columns: [
{ label: '#', type: 'index', minWidth: '50px', fixed: 'left' },
{ label: '支付凭证', prop: 'payment_voucher_filename', minWidth: 100 },
{ label: '支付人姓名', prop: 'name', align: 'center', minWidth: 120 },
{ label: '支付凭证', prop: 'id', minWidth: 100 },
{ label: '支付人姓名', prop: 'name', align: 'center', minWidth: 100 },
{ label: '支付金额', prop: 'amount', align: 'center', minWidth: 100 },
{ label: '支付时间', prop: 'payment_time', align: 'center', minWidth: 100 },
{ label: '支付方式', prop: 'payment_method', align: 'center', minWidth: 100 },
{ label: '其他支付方式', prop: 'payment_method_others', align: 'center', minWidth: 150 },
{ label: '交易流水号', prop: 'txn_id', align: 'center', minWidth: 150 },
{ label: '其他支付方式', prop: 'payment_method_others', align: 'center', minWidth: 100 },
{ label: '交易流水号', prop: 'txn_id', align: 'center', minWidth: 100 },
{
label: '支付状态',
prop: 'payment_status',
......@@ -64,11 +57,21 @@ export default {
},
methods: {
// 取消到账
cancelReceive() {
const params = { id: this.id }
cancelReceive(row) {
const params = { id: row.id }
payCancel(params).then(res => {
if (res.code === 0) {
this.$parent.fetchTicketDetail()
this.$parent.$parent.fetchTicketDetail()
}
})
},
// 查看
toPayDetail(row) {
this.$router.push({
name: 'paydetail',
params: {
row: row,
dealList: this.dealList
}
})
}
......
<!-- 更多筛选 -->
<template>
<el-form ref="ruleForm" :model="form" :rules="rules">
<el-form-item label="跟进人" prop="follow">
<el-select v-model="form.follow">
<el-option v-for="(item,index) in followList" :key="index" :label="item.label" :value="item.value">
{{item.label}}
</el-option>
</el-select>
</el-form-item>
<el-form-item label="发票类型" prop="ticketType">
<el-select v-model="form.ticketType">
<el-option v-for="(item,index) in TicketTypeList" :key="index" :label="item.label" :value="item.value">
{{item.label}}
</el-option>
</el-select>
</el-form-item>
<el-form-item label="允许开具发票" prop="status">
<el-radio-group v-model="form.status">
<el-radio>开启</el-radio>
<el-radio>关闭</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="首次缴费时间" prop="firstDate">
<el-date-picker
v-model="form.firstDate"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-form-item label="末次缴费时间" prop="lastDate">
<el-date-picker
v-model="form.lastDate"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
size='small'
style="width:360px;">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button @click="$emit('moreSelectVisible')">取消</el-button>
<el-button type="primary" @click="onSubmit">确认</el-button>
</el-form-item>
</el-form>
</template>
<script>
export default {
data() {
return {
form: {
follow: '',
ticketType: '',
status: '',
firstDate: '',
lastDate: ''
},
rules: [
{},
{}
]
}
},
methods: {
onSubmit() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
this.$emit('createTicket', this.form)
}
})
}
}
}
</script>
<style></style>
<!-- 支付详情-订单信息 -->
<template>
<div>
<table border="1" width="1500px" cellspacing="0" class="table">
<table border="1" cellspacing="0" class="table">
<tr>
<th>订单用户名称</th>
<td>{{ dealList.name }}</td>
<td>订单编号</td>
<td>{{ dealList.id }}</td>
<td>支付状态</td>
<td>{{ dealList.payment_status }}</td>
<td>{{ getStatus(val) }}</td>
</tr>
<tr>
<th>备注</th>
......@@ -26,12 +26,26 @@ export default {
default: () => {}
}
},
mounted() {}
methods: {
getStatus(val) {
val = this.dealList.payment_status
if (val === '20') {
return '支付待确认'
} else if (val === '30') {
return '部分到账'
} else if (val === '70') {
return '足额待支付'
} else if (val === '80') {
return '足额支付'
}
}
}
}
</script>
<style scoped>
.table {
width: 100%;
border: 1px solid #000;
}
th {
......
<!-- 支付详情-学员信息 -->
<template>
<div>
<div v-bind="$attrs">
<table border="1" width="1500px" cellspacing="0" class="table">
<tr>
<th>学员姓名</th>
......@@ -36,6 +36,7 @@ export default {
<style scoped>
.table {
border: 1px solid #000;
width: 100%;
}
th {
width: 120px;
......
......@@ -85,13 +85,6 @@ export default {
},
data() {
return {
// list: [
// { id: 'sdada', age: 'dnjscf' },
// { id: 'sdada', age: 'dnjscf' },
// { id: 'sdada', age: 'dnjscf' },
// { id: 'sdada', age: 'dnjscf' }
// ]
invioceList: []
}
},
......@@ -103,6 +96,7 @@ export default {
<style scoped>
.table {
width: 100%;
border: 1px solid #000;
margin-bottom: 40px;
}
......
......@@ -5,35 +5,35 @@
<table border="1" width="860px" cellspacing="0" class="table">
<tr>
<th>客户姓名</th>
<td>{{ detailList.name }}</td>
<td>{{ row.payer_name }}</td>
<th>客户编号</th>
<td>{{ detailList.customer_id }}</td>
<td>{{ row.customer_id }}</td>
<th>订单编号</th>
<td>{{ detailList.id }}</td>
<td>{{ row.id }}</td>
</tr>
<tr>
<th>支付状态</th>
<td>{{ detailList.payment_status }}</td>
<td>{{ getStatus(val) }}</td>
<th>报名项目</th>
<td>{{ detailList.project_id }}</td>
<td>{{ row.project }}</td>
<th>应缴金额</th>
<td>{{ detailList.bill_total }}</td>
<td>{{ row.bill_total }}</td>
</tr>
<tr>
<th>实缴金额</th>
<td>{{ detailList.amount_need_to_pay }}</td>
<td>{{ row.amount_need_to_pay }}</td>
<th>交易流水号</th>
<td>{{ detailList.txn_id_list }}</td>
<td>{{ row.txn_id_list }}</td>
<th>缴费时间</th>
<td>{{ detailList.final_payment_time }}</td>
<td>{{ row.final_payment_time }}</td>
</tr>
</table>
<el-form label-width="120px" ref="ruleForm" :model="form" :rules="rules">
<div class="type" style="border: 1px solid #ccc; margin-bottom: 10px">
<el-form-item label="开票类型" prop="invoice_color_type">
<el-radio-group v-model="form.invoice_color_type">
<el-radio :label="1">红字发票</el-radio>
<el-radio :label="2" checked>蓝字发票</el-radio>
<el-radio :label="1" disabled>红字发票</el-radio>
<el-radio :label="2">蓝字发票</el-radio>
</el-radio-group>
</el-form-item>
</div>
......@@ -41,9 +41,9 @@
<el-form-item label="抬头类型" prop="taxpayer_type">
<!-- change事件 -->
<el-radio-group v-model="form.taxpayer_type">
<el-radio :label="1">企业</el-radio>
<el-radio :label="2">非营利单位</el-radio>
<el-radio :label="3">个人</el-radio>
<el-radio :label="1">个人</el-radio>
<el-radio :label="2">企业</el-radio>
<el-radio :label="3">非营利单位</el-radio>
</el-radio-group>
</el-form-item>
</div>
......@@ -57,18 +57,18 @@
<el-option label="普通纸质发票" :value="1"></el-option>
<el-option label="普通电子发票" :value="2"></el-option>
<!-- 纸质专票企业可以开 -->
<el-option label="专用纸质发票" :value="3" v-show="form.people_type === 1"></el-option>
<el-option label="专用纸质发票" :value="3" v-show="form.taxpayer_type === 2"></el-option>
</el-select>
</el-form-item>
<el-form-item label="纳税人名称" prop="taxpayer_name">
<el-input v-model="form.taxpayer_name"></el-input>
</el-form-item>
<!-- 企业发票显示税号 -->
<el-form-item label="纳税人识别号" prop="taxpayer_identifier" v-show="form.people_type === 1">
<el-form-item label="纳税人识别号" prop="taxpayer_identifier" v-show="form.taxpayer_type === 2">
<el-input v-model="form.taxpayer_identifier"></el-input>
</el-form-item>
<!-- 企业纸质显示 -->
<div v-show="form.people_type === 1 && form.invioce_type === 3">
<div v-show="form.taxpayer_type === 2 && form.invioce_type === '3'">
<el-form-item label="地址" prop="taxpayer_address">
<el-input v-model="form.taxpayer_address"></el-input>
</el-form-item>
......@@ -89,7 +89,7 @@
<span>请填写邮箱地址,方便接收电子发票</span>
</el-form-item>
<!-- 电子发票显示邮箱 -->
<el-form-item label="邮寄地址" prop="recipient_address" v-show="form.invioce_type === 2">
<el-form-item label="邮寄地址" prop="recipient_address" v-show="form.invioce_type === '2'">
<el-input v-model="form.recipient_address"></el-input>
</el-form-item>
<el-form-item label="收件人名称" prop="recipient_name">
......@@ -121,43 +121,47 @@ export default {
id: {
type: String,
default: ''
},
row: {
type: Object,
default: () => {}
}
},
data() {
return {
detailList: {},
form: {
toticket_type: 2,
people_type: 1,
ticket_type: '',
invoice_color_type: 2,
taxpayer_type: '',
invoice_type: '',
taxpayer_name: '',
taxpayer_identifier: '',
taxpayer_num: '',
address: '',
phone: '',
bank: '',
account: '',
mail_address: '',
taxpayer_address: '',
taxpayer_mobile: '',
taxpayer_bank_name: '',
taxpayer_bank_account: '',
taxpayer_remark: '',
recipient_address: '',
recipient_name: '',
recipient_phone: '',
follow: ''
recipient_mobile: '',
sales_rep_user_id_name: ''
},
rules: {
toticket_type: [{ required: true, message: '请选择开票类型', trigger: 'change' }],
people_type: [{ required: true, message: '请选择抬头类型', trigger: 'change' }],
invioce_type: [{ required: true, message: '请选择发票类型', trigger: 'change' }],
taxpayer_name: [{ required: true, message: '请输入纳税人名称', trigger: 'blur' }],
taxpayer_identifier: [{ required: true, message: '请输入纳税人识别号', trigger: 'blur' }],
address: [{ required: true, message: '请输入地址', trigger: 'blur' }],
taxpayer_address: [{ required: true, message: '请输入地址', trigger: 'blur' }],
taxpayer_mobile: [{ required: true, message: '请输入电话', trigger: 'blur' }],
taxpayer_bank_name: [{ required: true, message: '请输入开户行', trigger: 'blur' }],
taxpayer_bank_account: [{ required: true, message: '请输入银行账号', trigger: 'blur' }],
account: [{ required: true, message: '请输入活动名称', trigger: 'blur' }],
mail_address: [{ required: true, message: '请输入邮箱地址', trigger: 'blur' }],
recipient_name: [{ required: true, message: '请输入收件人名称', trigger: 'blur' }],
recipient_phone: [{ required: true, message: '请输入收件人手机号', trigger: 'blur' }],
follow: [{ required: true, message: '请输入跟进人', trigger: 'blur' }]
invioce_type: [{ message: '请选择发票类型', trigger: 'change' }],
taxpayer_name: [{ message: '请输入纳税人名称', trigger: 'blur' }],
taxpayer_identifier: [
{ message: '请输入纳税人识别号', trigger: 'blur' },
{ min: 19, max: 19, message: '长度在 19 个字符', trigger: 'blur' }
],
taxpayer_address: [{ message: '请输入纳税人地址', trigger: 'blur' }],
taxpayer_mobile: [{ message: '请输入电话', trigger: 'blur' }],
taxpayer_bank_name: [{ message: '请输入开户行', trigger: 'blur' }],
taxpayer_bank_account: [{ message: '请输入银行账号', trigger: 'blur' }],
taxpayer_remark: [{ message: '请输入备注', trigger: 'blur' }],
recipient_address: [{ message: '请输入邮箱地址', trigger: 'blur' }],
recipient_name: [{ message: '请输入收件人名称', trigger: 'blur' }],
recipient_mobile: [{ message: '请输入收件人手机号', trigger: 'blur' }],
sales_rep_user_id_name: [{ message: '请输入跟进人', trigger: 'blur' }]
}
}
},
......@@ -167,11 +171,13 @@ export default {
methods: {
getPayDetail() {
const params = { id: this.id }
payDetail(params).then(res => {
if (res.code === 0) {
payDetail(params)
.then(res => {
this.detailList = res.data.list[0]
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 提交开票信息
onSubmit() {
......@@ -180,10 +186,22 @@ export default {
this.$emit('createTicket', this.form)
}
})
},
getStatus(val) {
val = this.row.payment_status
if (val === '20') {
return '支付待确认'
} else if (val === '30') {
return '部分到账'
} else if (val === '70') {
return '足额待支付'
} else if (val === '80') {
return '足额支付'
}
}
},
watch: {
'form.people_type': function (oldVal, val) {
'form.taxpayer_type': function (oldVal, val) {
if (val !== oldVal) {
this.form.invioce_type = ''
}
......@@ -196,6 +214,7 @@ export default {
.table {
border: 1px solid #000;
margin-bottom: 20px;
width: 100%;
}
th {
width: 50px;
......
......@@ -3,9 +3,7 @@
<app-card>
<app-list v-bind="tableOptions" ref="list">
<template v-slot:table-x="{ row }">
<router-link :to="{ name: 'deal', params: { id: row.id } }">
<el-button>处理</el-button>
</router-link>
<el-button @click="toDeal(row)">处理</el-button>
</template>
</app-list>
</app-card>
......@@ -15,24 +13,18 @@
import AppList from '@/components/base/AppList.vue'
import AppCard from '@/components/base/AppCard.vue'
// 接口
import { payDetail } from '../api'
export default {
// props: {
// id: {
// type: String,
// default: ''
// }
// },
components: { AppCard, AppList },
props: {
dealList: {
type: Object
}
},
computed: {
// 列表配置
tableOptions() {
return {
remote: {
httpRequest: payDetail, // 获取订单列表
params: {},
beforeRequest: this.beforeRequest
},
data: this.dealList.waiting_for_confirm_details,
columns: [
{ label: '#', type: 'index', minWidth: '50px', fixed: 'left' },
{ label: '支付凭证', prop: 'id', minWidth: 100 },
......@@ -48,6 +40,18 @@ export default {
]
}
}
},
methods: {
toDeal(row) {
// console.log(row)
this.$router.push({
name: 'deal',
params: {
dealList: this.dealList,
row: row
}
})
}
}
}
</script>
<template>
<div>
<app-card title="支付明细信息" v-if="id">
<table border="1" width="1200px" cellspacing="0">
<app-card title="支付明细信息">
<table border="1" width="100%" cellspacing="0">
<tr>
<th>支付人姓名</th>
<td>{{ confirmDetail.name }}</td>
<td>{{ row.payer_name }}</td>
<th>费用类型</th>
<td>{{ confirmDetail.type }}</td>
<td>{{ row.type }}</td>
<th>支付金额</th>
<td>{{ confirmDetail.amount }}</td>
<td>{{ row.amount }}</td>
<th>支付状态</th>
<td>{{ confirmDetail.payment_status }}</td>
<td>{{ row.payment_status }}</td>
</tr>
<tr>
<th>支付方式</th>
<td>{{ confirmDetail.payment_method }}</td>
<td>{{ row.payment_method }}</td>
<th>其他支付方式</th>
<td>{{ confirmDetail.payment_method_others }}</td>
<td>{{ row.payment_method_others }}</td>
<th>支付时间</th>
<td colspan="3">{{ confirmDetail.payment_time }}</td>
<td colspan="3">{{ row.payment_time }}</td>
</tr>
<tr>
<td></td>
<td colspan="7">
<img :src="confirmDetail.payment_voucher_filename" alt="" />
<img :src="row.payment_voucher_filename" alt="" />
</td>
</tr>
<tr>
<th>项目</th>
<td>{{ project.project_id }}</td>
<td>{{ dealList.project_id }}</td>
<th>销售</th>
<td>{{ project.sales_rep_user_id_name }}</td>
<td>{{ dealList.sales_rep_user_id_name }}</td>
<th>渠道</th>
<td colspan="3">{{ project.channel_id }}</td>
<td colspan="3">{{ dealList.channel_id }}</td>
</tr>
<tr>
<th>备注</th>
<td colspan="7">{{ confirmDetail.comment }}</td>
<td colspan="7">{{ row.comment }}</td>
</tr>
<tr>
<th>创建时间</th>
<td colspan="3">{{ confirmDetail.created_time }}</td>
<td colspan="3">{{ row.created_time }}</td>
<th>更新时间</th>
<td colspan="3">{{ confirmDetail.updated_time }}</td>
<td colspan="3">{{ row.updated_time }}</td>
</tr>
</table>
</app-card>
......@@ -93,14 +93,14 @@
<script>
import AppCard from '@/components/base/AppCard.vue'
import { payConfirm, payDetail } from '../api'
import { payConfirm } from '../api'
export default {
props: { id: { type: String } },
components: { AppCard },
data() {
return {
confirmDetail: {},
row: [],
dealList: [],
form: {
service_charge: '',
payment_status: '',
......@@ -118,22 +118,14 @@ export default {
}
},
mounted() {
this.id && this.getPayDetail()
this.row = this.$route.params.row
this.dealList = this.$route.params.dealList
console.log(this.dealList)
},
methods: {
handleChange(file, fileList) {
this.form.receiving_voucher_filename = fileList
},
// 获取支付信息
getPayDetail() {
payDetail({ id: this.id }).then(res => {
if (res.code === 0) {
const [first = {}] = res.data.list
this.project = first
this.confirmDetail = first.confirmed_details[0]
}
})
},
// 确认支付
dealPay() {
this.$refs.formRef.validate().then(() => {
......
......@@ -44,10 +44,10 @@
<Channel :dealList="dealList" />
</app-card>
<app-card title="支付待确认记录">
<Toconfirm :dealList="dealList" :id="this.id" />
<Toconfirm :dealList="dealList" />
</app-card>
<app-card title="支付确认记录">
<Confirmed :dealList="dealList" :id="this.id" />
<Confirmed :dealList="dealList" />
</app-card>
</div>
</template>
......@@ -99,11 +99,13 @@ export default {
methods: {
fetchTicketDetail() {
const params = { id: this.id }
payDetail(params).then(res => {
if (res.code === 0) {
payDetail(params)
.then(res => {
this.dealList = res.data.list[0]
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 确认
fetchConfirmTicketDetail(val) {
......@@ -112,11 +114,13 @@ export default {
confirm_type: val,
id: this.id
}
confirmPayDetail(params).then(res => {
if (res.code === 0) {
confirmPayDetail(params)
.then(res => {
this.fetchTicketDetail()
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 取消
fetchCancelTicketDetail(val) {
......@@ -124,11 +128,13 @@ export default {
confirm_type: val,
id: this.id
}
cancelPayDetail(params).then(res => {
if (res.code === 0) {
cancelPayDetail(params)
.then(res => {
this.fetchTicketDetail()
}
})
})
.catch(error => {
this.$message.error(error.message)
})
}
}
}
......
......@@ -2,16 +2,16 @@
<app-card>
<app-list v-bind="tableOptions" ref="list" @selection-change="handleSelectionChange">
<!-- 允许开具发票 -->
<template v-slot:ticket_type="{ params }">
<template v-slot:can_add_invoice="{ params }">
<el-radio-group v-model="params.can_add_invoice">
<el-radio label="1">开启</el-radio>
<el-radio label="2">关闭</el-radio>
<el-radio :label="1">开启</el-radio>
<el-radio :label="2">关闭</el-radio>
</el-radio-group>
</template>
<!-- 首次缴费时间 -->
<template v-slot:firstDate="{ params }">
<el-date-picker
v-model="params.firstDate"
v-model="params.first_payment_time"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
......@@ -25,7 +25,7 @@
<!-- 末次缴费时间 -->
<template v-slot:lastDate="{ params }">
<el-date-picker
v-model="params.lastDate"
v-model="params.final_payment_time"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
......@@ -67,7 +67,7 @@
</app-list>
<!-- 开具发票 -->
<el-dialog title="开具发票" :visible.sync="ticketVisible" width="900px" append-to-body :destroy-on-close="true">
<TicketForm :id="id" @close="ticketVisible = false" @createTicket="handleCreateTicket" />
<TicketForm :id="id" @close="ticketVisible = false" @createTicket="handleCreateTicket" :row="row" />
</el-dialog>
<!-- 开票二维码 -->
<ShareQrcode :visible.sync="codeVisible" :value="shareUrl" />
......@@ -87,6 +87,7 @@ export default {
components: { AppCard, AppList, TicketForm, ShareQrcode },
data() {
return {
row: {},
id: '',
shareUrl: '',
conditionList: {
......@@ -228,12 +229,12 @@ export default {
},
{
label: '首次缴费时间',
prop: 'firstDate',
prop: 'first_payment_time',
slots: 'firstDate'
},
{
label: '末次缴费时间',
prop: 'lastDate',
prop: 'final_payment_time',
slots: 'lastDate'
}
],
......@@ -298,8 +299,20 @@ export default {
this.fetchCondition() // 获取过滤条件
},
methods: {
beforeRequest(params, isReset) {
if (params.first_payment_time) {
const [firstTimeFrom, firstTimeTo] = params.first_payment_time
params.first_payment_time_from = firstTimeFrom
params.first_payment_time_to = firstTimeTo
}
if (params.final_payment_time) {
const [finalTimeFrom, finalTimeTo] = params.final_payment_time
params.final_payment_time_from = finalTimeFrom
params.final_payment_time_to = finalTimeTo
}
return params
},
callback(data) {
// eslint-disable-next-line array-callback-return
data.forEach(item => {
item.project = this.findName(this.conditionList.project_id, item.project_id, 'project_id', 'name')
item.paymentStatuView = this.findName(this.conditionList.payment_status, item.payment_status, 'key', 'value')
......@@ -310,12 +323,14 @@ export default {
},
// 开具发票
createPop(row) {
console.log(row)
this.row = row
this.id = row.id
this.ticketVisible = true
},
// 作废发票
disabledTicket(row) {
this.$confirm('确定要作废此发票吗?作废后不可恢复', '提示', {
this.$confirm('确定要作废此发票吗?作废后不可恢复,注意:开具的纸质发票需要您登录税控服务器上作废', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
......@@ -325,11 +340,14 @@ export default {
},
// 作废发票
fetchDisabled(row) {
cancelTicket(row.id).then(res => {
if (res.code === 0) {
const params = { payment_id: row.id }
cancelTicket(params)
.then(res => {
this.$refs.list.refetch()
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
qrCode(row) {
this.shareUrl = `${import.meta.env.VITE_SHARE_URL}/h5/payment/invoice?id=${row.id}`
......@@ -337,11 +355,13 @@ export default {
},
// 获取过滤条件
fetchCondition() {
getCondition().then(res => {
if (res.code === 0) {
getCondition()
.then(res => {
this.conditionList = res.data
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 选中
handleSelectionChange(val) {
......@@ -349,51 +369,54 @@ export default {
},
// 开具发票
handleCreateTicket(val) {
createNewTicket(val).then(res => {
if (res.code === 0) {
const params = Object.assign({ payment_id: this.id }, this.form)
createNewTicket(params)
.then(res => {
this.$message.success('开票成功')
this.ticketVisible = false
this.$refs.list.refetch() // 刷新订单列表
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 是否允许开具发票
handleStatus(row) {
const params = { id: row.id, can_add_invoice: row.can_add_invoice }
allowCreate(params).then(res => {
if (res.code === 0) {
allowCreate(params)
.then(res => {
this.$message.success('更新状态成功')
this.$refs.list.refetch() // 刷新订单列表
} else {
this.$message.error('更新状态失败')
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 确认作废
confirmDisabledTicket() {
cancelTicket().then(res => {
if (res.code === 0) {
cancelTicket()
.then(res => {
this.disabledTicketVisible = false
this.$message.success('发票已作废')
this.$refs.list.refetch() // 刷新订单列表
} else {
this.$message.error('该发票无作废失败')
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 退费
backTicket(row) {
// 改变退费状态
const params = { id: row.id }
drawBack(params).then(res => {
if (res.code === 0) {
drawBack(params)
.then(res => {
this.$refs.list.refetch() // 刷新订单列表
this.$message.success('退费成功')
} else {
this.$message.error('退费失败')
}
})
})
.catch(error => {
this.$message.error(error.message)
})
},
// 导出
exportSelect() {
......@@ -416,7 +439,6 @@ export default {
})
const ws = XLSX.utils.aoa_to_sheet(excelList)
ws['!cols'] = [
{ wpx: 200 },
{ wpx: 200 },
{ wpx: 200 },
{ wpx: 200 },
......
<template>
<el-card>
<table border="1" width="1200px" cellspacing="0">
<tr>
<th>支付人姓名</th>
<td>{{confirmDetail.name}}</td>
<th>费用类型</th>
<td>{{confirmDetail.type}}</td>
<th>支付金额</th>
<td>{{confirmDetail.amount}}</td>
<th>支付状态</th>
<td>{{confirmDetail.payment_status}}</td>
</tr>
<tr>
<th>项目</th>
<td>{{project.project_id}}</td>
<th>销售</th>
<td>{{project.sales_rep_user_id_name}}</td>
<th>渠道</th>
<td colspan="3">{{project.channel_id}}</td>
</tr>
<tr>
<th>支付方式</th>
<td>{{confirmDetail.payment_method}}</td>
<th>其他支付方式</th>
<td>{{confirmDetail.payment_method_others}} </td>
<th>支付时间</th>
<td colspan="3">{{confirmDetail.payment_time}}</td>
</tr>
<tr>
<th>到账金额</th>
<td>{{confirmDetail.amount_received}}</td>
<th>手续费</th>
<td>{{confirmDetail.service_charge}}</td>
<th>到账时间</th>
<td colspan="3">{{confirmDetail.receiving_time}}</td>
</tr>
<tr>
<th>支付凭证</th>
<td colspan="7">
<img :src="confirmDetail.payment_voucher_filename" alt="">
</td>
</tr>
<tr>
<th>到账凭证</th>
<td colspan="7">
<img :src="confirmDetail.receiving_voucher_filename" alt="">
</td>
</tr>
<tr>
<th>备注</th>
<td colspan="7">{{confirmDetail.taxpayer_remark}}</td>
</tr>
<tr>
<th>创建时间</th>
<td colspan="3">{{confirmDetail.created_time}}</td>
<th>更新时间</th>
<td colspan="3">{{confirmDetail.updated_time}}</td>
<el-card>
<table border="1" width="100%" cellspacing="0">
<tr>
<th>支付人姓名</th>
<td>{{ row.payer_name }}</td>
<th>费用类型</th>
<td>{{ getPayType(val) }}</td>
<th>支付金额</th>
<td>{{ row.amount }}</td>
<th>支付状态</th>
<td>{{ row.payment_status }}</td>
</tr>
</table>
</el-card>
<tr>
<th>项目</th>
<td>{{ dealList.project_id }}</td>
<th>销售</th>
<td>{{ dealList.sales_rep_user_id_name }}</td>
<th>渠道</th>
<td colspan="3">{{ dealList.channel_id }}</td>
</tr>
<tr>
<th>支付方式</th>
<td>{{ row.payment_method }}</td>
<th>其他支付方式</th>
<td>{{ row.payment_method_others }}</td>
<th>支付时间</th>
<td colspan="3">{{ row.payment_time }}</td>
</tr>
<tr>
<th>到账金额</th>
<td>{{ dealList.amount_received }}</td>
<th>手续费</th>
<td>{{ dealList.service_charge }}</td>
<th>到账时间</th>
<td colspan="3">{{ row.payment_time }}</td>
</tr>
<tr>
<th>支付凭证</th>
<td colspan="7">
<img :src="row.payment_voucher_filename" alt="" />
</td>
</tr>
<tr>
<th>到账凭证</th>
<td colspan="7">
<img :src="row.receiving_voucher_filename" alt="" />
</td>
</tr>
<tr>
<th>备注</th>
<td colspan="7">{{ row.comment }}</td>
</tr>
<tr>
<th>创建时间</th>
<td colspan="3">{{ row.created_time }}</td>
<th>更新时间</th>
<td colspan="3">{{ row.updated_time }}</td>
</tr>
</table>
</el-card>
</template>
<script>
import { payDetail } from '../api'
export default {
data() {
return {
confirmDetail: {},
project: {},
id: ''
row: {},
dealList: {}
}
},
mounted() {
this.id = this.$route.params.id
this.getPayDetail()
this.row = this.$route.params.row
this.dealList = this.$route.params.dealList
},
methods: {
getPayDetail() {
const params = { id: this.id }
payDetail(params).then(res => {
if (res.code === 0) {
this.project = res.data.list[0]
this.confirmDetail = res.data.list[0].confirmed_details[0]
}
})
getPayType(val) {
val = this.row.type
if (val === '20') {
return '支付待确认'
} else if (val === '30') {
return '部分到账'
} else if (val === '70') {
return '足额待支付'
} else if (val === '80') {
return '足额支付'
}
}
}
}
</script>
<style>
<style scoped>
.table {
border: 1px solid rgb(235, 232, 232);
}
th {
width: 120px;
text-align: center;
font-size: 20px;
color: rgb(10, 1, 1);
font-weight: normal;
}
td {
width: 120px;
text-align: center;
}
</style>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论