Commit 60c1b033 authored by 许珑标's avatar 许珑标

失败明细重新支付

parent ef36c567
......@@ -52,7 +52,6 @@ export function delPayOrder(id) {
})
}
// 查看支付明细凭证
export function detailVoucherView(id) {
return request({
......@@ -60,3 +59,12 @@ export function detailVoucherView(id) {
method: 'get'
})
}
// 重新支付
export function doRepay(data) {
return request({
url: '/business/payOrder/repay',
method: 'post',
data: data
})
}
<template>
<div class="app-container">
<el-descriptions class="margin-top" title="批量订单信息" :column="6" size="18px">
<el-descriptions-item>
<template slot="label">
批量支付名称
</template>
{{ batchInfo.batchName }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
批量流水号
</template>
{{ batchInfo.batchNo }}
</el-descriptions-item>
</el-descriptions>
<el-table v-loading="loading" :data="payDetailList" height="600px" :key="formTableKey"
:summary-method="getSummaries" show-summary>
<el-table-column label="明细流水号" align="center" prop="bizNo" />
<el-table-column label="收款账户" align="center">
<el-table-column label="户名" align="center" prop="payeeAccName" width="200">
<template slot-scope="scope">
<el-input size="small" style="width: 170px" v-model="scope.row.payeeAccName">
</el-input>
</template>
</el-table-column>
<el-table-column label="账户" align="center" prop="payeeAccNo" width="200">
<template slot-scope="scope">
<el-input size="small" style="width: 170px" v-model="scope.row.payeeAccNo">
</el-input>
</template>
</el-table-column>
<el-table-column label="类型" align="center" prop="payeeAccType" width="200">
<template slot-scope="scope">
<el-row>
<el-col :span="12">
<dict-tag :options="dict.type.payee_acc_type" :value="scope.row.payeeAccType"/>
</el-col>
<el-col :span="12">
<el-tag v-if="scope.row.isPrivateAcc && scope.row.isPrivateAcc === 1">对私账户</el-tag>
<el-tag v-if="scope.row.isPrivateAcc && scope.row.isPrivateAcc === 2">对公账户</el-tag>
</el-col>
</el-row>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="交易金额" align="center" prop="amount" width="200">
<template slot-scope="scope">
<el-input-number size="small" style="width: 170px" :step="1" :min="0.01"
@change="calculation(scope.row)" v-model="scope.row.amount">
</el-input-number>
</template>
</el-table-column>
<el-table-column label="支付类型" align="center" prop="payTitle" />
<el-table-column label="支付状态" align="center" prop="payStatus" >
<template slot-scope="scope">
<dict-tag :options="dict.type.pay_status" :value="scope.row.payStatus" />
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="payRemark" />
<el-table-column label="失败原因" align="center" prop="failReason" :show-overflow-tooltip="true"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.$index, 'delRow')"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<el-row :gutter="10" class="mb8" style="margin-top: 15px">
<el-col :span="1.5" style="float: right">
<span v-if="this.payDetailList">明细条数: {{ this.payDetailList.length }} 条</span>
<el-button style="margin-left: 100px" type="primary" icon="el-icon-s-promotion" size="mini" @click="confirmPay">确认支付</el-button>
</el-col>
</el-row>
</div>
</template>
<script>
import { listPayDetail } from "@/api/business/payDetail";
import { doRepay } from '@/api/business/payOrder'
export default {
name: "rePay",
props: {
value: [String, Object, Array],
batchInfo: {
type: Object,
default: {
batchName: '',
batchNo: '',
batchId: 0
}
}
},
dicts: ['pay_status', 'pay_type_title', 'payee_acc_type'],
data() {
return {
formTableKey: 1,
// 根路径
baseURL: process.env.VUE_APP_BASE_API,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 批量支付明细表格数据
payDetailList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 1000,
payStatus: 4,
},
};
},
mounted() {
this.queryParams.orderId = this.batchInfo.batchId
this.getList();
},
methods: {
/** 查询 批量支付明细列表 */
getList() {
this.loading = true;
listPayDetail(this.queryParams).then(response => {
this.payDetailList = response.rows;
this.total = response.total;
this.loading = false;
this.formTableKey += 1
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
handleDelete(index, pStr) {
this.$confirm('确定执行删除操作吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if (pStr && pStr === 'delRow') {
this.payDetailList.splice(index, 1)
} else if (this.indexList && this.indexList.length > 0) {
let transMap = new Map();
this.payDetailList.forEach((item, _index) => {
transMap.set(_index, item)
})
this.indexList.forEach(item => {
transMap.delete(item)
})
this.payDetailList = [...transMap.values()]
this.indexList = [];
}
this.formTableKey += 1
}).catch(() => {});
},
getSummaries(param) {
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
} else if (index === 4) {
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] += ' 元';
} else {
sums[index] = 'N/A';
}
}
});
return sums;
},
confirmPay() {
this.$confirm('确定提交支付吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
doRepay({
batchId: this.batchInfo.batchId,
batchNo: this.batchInfo.batchNo,
orders: this.payDetailList
}).then(resp => {
if (200 === resp.code) {
this.$modal.msgSuccess("操作成功");
this.$emit('closeRePayPanel', 'child')
}
})
}).catch(() => {});
},
calculation() {
this.formTableKey += 1
}
}
};
</script>
......@@ -249,6 +249,9 @@ export default {
},
// 新增明细
handleAdd() {
if (this.transList && this.transList >= 1000) {
return this.$modal.msgWarning("单次支付不能超过1000条")
}
this.addPanelOpen = true
this.form = {
amount: 0,
......@@ -363,6 +366,8 @@ export default {
confirmPay() {
if (!this.transList) {
return this.$modal.msgWarning("支付明细列表不能为空!");
} else if (this.transList >= 1000) {
return this.$modal.msgWarning("单次支付不能超过1000条")
}
this.$refs["batchForm"].validate(valid => {
if (valid) {
......
......@@ -114,6 +114,12 @@
icon="el-icon-s-order"
@click="viewDetail(scope.row)"
>查看明细</el-button>
<el-button v-if="scope.row.payStatus && scope.row.payStatus === 4 || scope.row.payStatus === 5"
size="mini"
type="text"
icon="el-icon-s-promotion"
@click="doRepay(scope.row)"
>失败补发</el-button>
</template>
</el-table-column>
</el-table>
......@@ -126,17 +132,27 @@
@pagination="getList"
/>
<el-dialog title="失败补发" :visible.sync="rePayPanel" width="90%" append-to-body class="dialogIp">
<RePay ref="rePay" :batch-info="rePayObj" @closeRePayPanel="closeRePayPanel"/>
<div slot="footer" class="dialog-footer">
<el-button @click="closeRePayPanel">关 闭</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listPayOrder } from "@/api/business/payOrder";
import RePay from '@/views/business/payDetail/rePay.vue'
export default {
name: "PayOrder",
components: { RePay },
dicts: ['pay_status', 'pay_type_title'],
data() {
return {
rePayObj: {},
rePayPanel: false,
// 根路径
baseURL: process.env.VUE_APP_BASE_API,
// 遮罩层
......@@ -215,7 +231,30 @@ export default {
},
viewDetail(row) {
this.$router.push({ path: "/business/payDetails", query: {orderId : row.id} });
},
doRepay(row) {
if (row.id) {
this.rePayObj = {
batchName: row.batchPayName,
batchNo: row.batchNo,
batchId: row.id
}
this.rePayPanel = true
}
},
closeRePayPanel(child) {
this.rePayPanel = false
if (child && child === 'child') {
this.getList()
}
}
}
};
</script>
<style scoped lang="scss">
.dialogIp ::v-deep{
.el-dialog__body {
padding: 0 !important;
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment