回款凭证

This commit is contained in:
liuxi 2024-12-25 16:47:17 +08:00
parent b19630bc7a
commit 9438f32682
8 changed files with 395 additions and 803 deletions

View File

@ -0,0 +1,136 @@
<template>
<div>
<el-dialog
title="效验"
:visible="true"
width="480px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<div class="dialog-content">
<el-form ref="ruleFormEffect"
:model="Effectobj"
:rules="rulesClientRepayment"
label-width="130px">
<el-form-item label="凭证金额" prop="amount" style="margin-bottom: 10px;">
<el-input class="inputpaddingtop2"
size="small"
placeholder="请输入凭证金额"
v-model="Effectobj.amount">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item label="还款日期" prop="paybackTime" style="margin-bottom: 10px;">
<el-date-picker class="width100" size="small"
v-model="Effectobj.paybackTime"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
<el-form-item label="备注说明" prop="remark" style="margin-bottom: 10px;">
<el-input
size="small"
clearable
placeholder="请输入备注说明"
v-model="Effectobj.remark">
</el-input>
</el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button>
<el-button type="primary" @click="handleSubmitEffect()">确认效验</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
},
props: {
EffectDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
Effectobj:{
mediaPath:[]
},
rulesClientRepayment:{
amount: [
{ required: true, message: '请输入还款金额', trigger: 'change',},
{ pattern: /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/, message: '请输入2位小数金额', trigger: ['blur', 'change']}
],
paybackTime: [
{ required: true, message: '请选择还款日期', trigger: 'change',},
],
mediaPath: [
{ required: true, message: '请上传文件', trigger: 'change',},
],
},
};
},
mounted () {
this.Effectobj = JSON.parse(JSON.stringify(this.EffectDialog))
},
methods: {
//
handleSubmitEffect(){
this.$refs.ruleFormEffect.validate((valid) => {
if (valid){
this.Effectobj.createAt =undefined
this.Effectobj.createBy =undefined
this.Effectobj.delFlag =undefined
this.Effectobj.planId =undefined
this.Effectobj.status =undefined
this.Effectobj.updateAt =undefined
this.Effectobj.updateBy =undefined
this.Effectobj.uploaderName =undefined
this.Effectobj.caseId =undefined
this.Effectobj.proofUrl =undefined
api.gettraceProof_valid(this.Effectobj).then(res => {
if(!res.code){
this.$parent.getProofList(1)
}
})
}
})
},
handleClose() {
this.$emit('update:EffectDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-content{
padding: 16px 24px;
max-height:500px
}
.department-wrap{
padding: 16px 24px;
max-height: 250px;
.department-wrap-list{
margin-bottom:32px;
}
.department-wrap-list:last-child{
margin-bottom:0;
}
}
.min-height350{min-height: 350px;}
.department-dept ::v-deep .el-checkbox__label {color: $color-000000}
</style>

View File

@ -28,7 +28,7 @@
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" @click="handleCaseShow(scope)">查看凭证</el-button>
<el-button size="mini" @click="handleBackCase(scope)">效验</el-button>
<el-button size="mini" v-if="scope.row.status.code == 1" @click="EffectDialog = scope.row">效验</el-button>
</div>
</template>
</el-table-column>
@ -38,13 +38,16 @@
</div>
<!-- 文件预览 -->
<showFile v-if="fileDialog" :fileDialog.sync="fileDialog" />
<!-- 效验 -->
<RepaymentEffectDialog v-if="EffectDialog" :EffectDialog.sync="EffectDialog" />
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
showFile: () => import('../../../components/showFile.vue'),//
showFile: () => import('../../../components/showFile.vue'),//
RepaymentEffectDialog: () => import('./RepaymentEffectDialog.vue'),//
},
props: {
eventTraDialog: {
@ -56,6 +59,7 @@ import api from "@/services/caseManagement";
},
data() {
return {
EffectDialog:null,
fileDialog:null,
queryParam:{},
tableData:[],
@ -64,7 +68,6 @@ import api from "@/services/caseManagement";
};
},
mounted () {
console.log(this.eventTraDialog,'this.eventTraDialog')
this.getProofList()
},
methods: {

View File

@ -0,0 +1,158 @@
<template>
<div>
<el-dialog
title="编辑凭证"
:visible="true"
width="480px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<div class="dialog-content">
<el-form ref="ruleFormEffect"
:model="Effectobj"
:rules="rulesClientRepayment"
label-width="130px">
<el-form-item label="凭证金额" prop="amount" style="margin-bottom: 10px;">
<el-input class="inputpaddingtop2"
size="small"
placeholder="请输入凭证金额"
v-model="Effectobj.amount">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item label="还款日期" prop="paybackTime" style="margin-bottom: 10px;">
<el-date-picker class="width100" size="small"
v-model="Effectobj.paybackTime"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
<el-form-item label="备注说明" prop="remark" style="margin-bottom: 10px;">
<el-input
size="small"
clearable
placeholder="请输入备注说明"
v-model="Effectobj.remark">
</el-input>
</el-form-item>
<el-form-item label="凭证" prop="mediaPath">
<upload-file :file-list="fileList" :max-count="1"
:show-file-name="false"
uploadName="支持图片大小不超过10M"
accept=".jpg,.png,.jpeg"
:span="6"
:fileSize="10"
@handleUploadFile="handleUploadFile">
</upload-file>
</el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button>
<el-button type="primary" @click="handleSubmitEffect()">确认效验</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
uploadFile: () => import('@/components/uploadFile.vue'),//
},
props: {
EffectDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
Effectobj:{
mediaPath:[]
},
rulesClientRepayment:{
amount: [
{ required: true, message: '请输入还款金额', trigger: 'change',},
{ pattern: /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/, message: '请输入2位小数金额', trigger: ['blur', 'change']}
],
paybackTime: [
{ required: true, message: '请选择还款日期', trigger: 'change',},
],
mediaPath: [
{ required: true, message: '请上传文件', trigger: 'change',},
],
},
fileList:[]
};
},
mounted () {
this.Effectobj = JSON.parse(JSON.stringify(this.EffectDialog))
this.fileList = [{url: this.Effectobj.proofUrl,fileName:'上传'}]
},
methods: {
//
handleSubmitEffect(){
this.$refs.ruleFormEffect.validate((valid) => {
if (valid){
this.Effectobj.createAt =undefined
this.Effectobj.createBy =undefined
this.Effectobj.delFlag =undefined
this.Effectobj.planId =undefined
this.Effectobj.status =undefined
this.Effectobj.updateAt =undefined
this.Effectobj.updateBy =undefined
this.Effectobj.uploaderName =undefined
api.gettraceProof_edit(this.Effectobj).then(res => {
if(!res.code){
this.$parent.getProofList(1)
}
})
}
})
},
handleUploadFile(fileList){
// console.log('',fileList)
fileList = JSON.parse(JSON.stringify(fileList))
this.fileList = fileList.map((item,i) => {
return {
url: item.url,
fileName:'上传',
previewUrl:item.previewUrl
}
})
this.Effectobj.mediaPath = this.fileList.map((item) => item.url);
},
handleClose() {
this.$emit('update:EffectDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-content{
padding: 16px 24px;
max-height:500px
}
.department-wrap{
padding: 16px 24px;
max-height: 250px;
.department-wrap-list{
margin-bottom:32px;
}
.department-wrap-list:last-child{
margin-bottom:0;
}
}
.min-height350{min-height: 350px;}
.department-dept ::v-deep .el-checkbox__label {color: $color-000000}
</style>

View File

@ -69,19 +69,19 @@
<el-table-column prop="payableAmount" label="应还金额" show-overflow-tooltip ></el-table-column>
<el-table-column prop="actualPayDate" label="实际还款日期" show-overflow-tooltip ></el-table-column>
<el-table-column prop="amount" label="实际还款金额" show-overflow-tooltip ></el-table-column>
<el-table-column prop="channel" label="状态" show-overflow-tooltip ></el-table-column>
<el-table-column prop="channel" label="操作人" show-overflow-tooltip ></el-table-column>
<el-table-column prop="planStartTime" label="操作时间" show-overflow-tooltip >
<el-table-column prop="status" label="状态" show-overflow-tooltip ></el-table-column>
<el-table-column prop="createAt" label="操作时间" show-overflow-tooltip >
<template slot-scope="scope">
<span >{{ scope.row.planStartTime | formaDate("yyyy-MM-dd hh:mm:ss") }}</span>
<span >{{ scope.row.createAt | formaDate("yyyy-MM-dd hh:mm:ss") }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="150">
<el-table-column label="操作" width="240">
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" @click="handleBackCase(scope)">效验</el-button>
<el-button size="mini" @click="handleBackCase(scope)">取消</el-button>
<el-button size="mini" @click="handleCaseShow(scope)">查看凭证</el-button>
<el-button size="mini" @click="EffectDialog = scope.row">效验</el-button>
<el-button size="mini" @click="handEffectCancel(scope.row)">取消</el-button>
</div>
</template>
</el-table-column>
@ -90,8 +90,8 @@
<div class="text-center pt-16">
<el-pagination
@size-change="getList"
@current-change="getList"
@size-change="getProofList"
@current-change="getProofList"
:current-page="queryParam.current"
:page-size="queryParam.size"
layout="total, prev, pager, next, jumper"
@ -100,14 +100,20 @@
</div>
</div>
</div>
<!-- 文件预览 -->
<showFile v-if="fileDialog" :fileDialog.sync="fileDialog" />
<!-- 效验 -->
<RepaymentEffectDialog v-if="EffectDialog" :EffectDialog.sync="EffectDialog" />
</div>
</template>
<script>
import api from "@/services/eventTracingApi";
import caseapi from "@/services/caseManagement";
export default {
components: {
showFile: () => import('../../../components/showFile.vue'),//
RepaymentEffectDialog: () => import('../../case-management/components/RepaymentEffectDialog.vue'),//
},
props: {
eventTraDialog: {
@ -119,6 +125,8 @@ import api from "@/services/eventTracingApi";
},
data() {
return {
fileDialog:null,
EffectDialog:null,
DialogDetail:null,
queryDate: '',
queryParam:{
@ -133,7 +141,7 @@ import api from "@/services/eventTracingApi";
},
mounted () {
this.queryParam.caseNo = this.eventTraDialog.caseNo
this.getList(1)
this.getProofList(1)
},
methods: {
handleChangeDate() {
@ -156,10 +164,10 @@ import api from "@/services/eventTracingApi";
handleSearch() {
this.queryParam.size = 10;
this.queryParam.current = 1;
this.getList(1)
this.getProofList(1)
},
//
getList(val){
getProofList(val){
this.queryParam.planBegin = this.queryParam.beginTime
this.queryParam.planEnd = this.queryParam.endTime
this.queryParam.current = val
@ -170,6 +178,29 @@ import api from "@/services/eventTracingApi";
}
})
},
//
handEffectCancel(proofitem){
console.log(proofitem,'proofitem')
this.$confirm("请确定是否取消效验这些数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(!this.$clickThrottle()) { return }//
let data = {
id:proofitem.id
}
caseapi.gettraceProof_cancel(data).then((res) => {
this.$message.success("取消成功");
this.getProofList(1)
});
}).catch(() => {});
},
handleCaseShow(scope){
this.fileDialog = {showfile:{url:scope.row.proofUrl},filelist:[]}
},
}
};
</script>

View File

@ -209,24 +209,6 @@ import api from "@/services/caseManagement";
},
ProofList:[],
fileList:[],
gridData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}]
};
},
@ -271,6 +253,16 @@ import api from "@/services/caseManagement";
handleSubmitEffect(proofitem,formName){
this.$refs[formName][0].validate((valid) => {
if (valid){
proofitem.createAt =undefined
proofitem.createBy =undefined
proofitem.delFlag =undefined
proofitem.planId =undefined
proofitem.status =undefined
proofitem.updateAt =undefined
proofitem.updateBy =undefined
proofitem.uploaderName =undefined
proofitem.caseId =undefined
proofitem.proofUrl =undefined
api.gettraceProof_valid(proofitem).then(res => {
if(!res.code){
this.getProofList()
@ -297,12 +289,19 @@ import api from "@/services/caseManagement";
});
}).catch(() => {});
},
handleSubmitUpdate(){
this.$refs.ruleFormRepaymentUpdate[0].validate((valid) => {
if (valid){
api.gettraceProof_create(this.repaymentObj).then(res => {
this.repaymentObj.createAt =undefined
this.repaymentObj.createBy =undefined
this.repaymentObj.delFlag =undefined
this.repaymentObj.planId =undefined
this.repaymentObj.status =undefined
this.repaymentObj.updateAt =undefined
this.repaymentObj.updateBy =undefined
this.repaymentObj.uploaderName =undefined
api.gettraceProof_edit(this.repaymentObj).then(res => {
if(!res.code){
this.updateRow = -1
this.fileList = []

View File

@ -1,610 +0,0 @@
<template>
<div class="layout-content-wrap case-detail">
<div class="navigation-bar flex-row mb-16">
<img src="../../../assets/image/Link.png" height="22" alt="">
<a>/</a>
<a>案件包列表</a><a>/</a>
<a>案件列表</a><a>/</a>
<a>案件详情</a>
</div>
<div class="layout-tabs-content-box case-detail-nav flex-row background-color-fff border-radius-4 mb-16 flex-row-center">
<span :class="navactive == 1 ?'active':''" @click="navactive=1">案件信息</span>
<span :class="navactive == 2 ?'active':''" @click="navactive=2">案件材料</span>
<span :class="navactive == 3 ?'active':''" @click="navactive=3">案件日志</span>
</div>
<div v-if="navactive == 1 " class="layout-tabs-content-box flex-row padding-0 f14">
<div class="pt-8 border-b-solid-lighter-1 background-color-fff border-radius-4 p-16" style="width: calc(100% - 370px);">
<div class="case-detail-title f18">被申请人<a v-for="(item,index) in baseInfo.debtorEntityList" :key="index">{{index == 0 ?'':','}}{{item.name}}</a></div>
<div class="flex-column">
<div class="case-detail-label f-weight500 f16">基本信息</div>
<div class="case-detail-des">
<span><a>案件包名称</a><a>河北幸福消费金融股份有限公司012341</a></span>
<span><a>委案机构</a><a>{{baseInfo.financialOrgName}}</a></span>
<span><a>委案开始日期</a><a>{{baseInfo.planStartTime}}</a></span>
<span><a>委案到期日期</a><a>{{baseInfo.planStartTime}}</a></span>
<span><a>债务人姓名</a><a v-for="(item,index) in baseInfo.debtorEntityList" :key="index">{{index == 0 ?'':','}}{{item.name}}</a></span>
<span><a>债务人手机号码</a><a>{{ debtorEntityCardNo(baseInfo.debtorEntityList,25).phone }} {{ baseInfo.debtorEntityList.length > 25 ? '...':'' }}</a></span>
<span><a>委案期限</a><a></a></span>
<span><a>委案渠道</a><a></a></span>
<span><a>身份证号</a><a> {{ debtorEntityCardNo(baseInfo.debtorEntityList,25).cardNo }} {{ baseInfo.debtorEntityList.length > 25 ? '...':'' }}</a></span>
<span><a>户籍地址</a><a v-for="(item,index) in baseInfo.debtorEntityList" :key="index">{{index == 0 ?'':','}}{{item.name}}</a></span>
<span><a>案件编号</a><a>{{baseInfo.caseNo}}</a></span>
</div>
<div class="case-detail-label f-weight500 f16">债务信息</div>
<div class="case-detail-des">
<!-- <span><a>委托机构</a><a>{{baseInfo.financialOrgName}}</a></span> -->
<span><a>合同编号</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>业务流水号</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>金融产品名称</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>金融机构名称</a><a>{{baseInfo.financialOrgName}}</a></span>
<span><a>合同名称</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>委托时逾期天数</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>借款合同签署时间</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>贷款笔数</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>当前逾期金额</a><a>{{baseInfo.moneyAmount}}</a></span>
<span><a>最低还款额(减免底线)</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>账龄</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>放款金额/借款本金</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>欠款本金</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>总分期数</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>逾期期数</a><a>{{baseInfo.overdueTimes}}</a></span>
<span><a>未结清期数</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>逾期开始时间</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>还款日</a><a>{{baseInfo.AAAAAAAAA}}</a></span>
<span><a>备注</a><a>{{baseInfo.caseDescr}}</a></span>
</div>
<div class="case-detail-label f-weight500 f16">联系人信息</div>
<div class="case-detail-des flex-column">
<div>
<span><a>联系人</a><a>李新华</a></span>
<span><a>与债务人关系</a><a>本人</a></span>
<span><a>联系人手机</a><a>15138026046</a></span>
</div>
<div>
<span><a>联系人</a><a>秦大伟</a></span>
<span><a>与债务人关系</a><a>其他</a></span>
<span><a>联系人手机</a><a>15939186663</a></span>
</div>
</div>
<div class="case-detail-label f-weight500 f16">案件办理信息</div>
<div>
<el-tabs type="border-card">
<el-tab-pane>
<span slot="label">调解记录</span>
<el-table :data="tableData" :height="300" >
<el-table-column type="index" label="序号" width="55"></el-table-column>
<el-table-column prop="H" label="调解类型" show-overflow-tooltip ></el-table-column>
<el-table-column prop="A" label="跟进情况" show-overflow-tooltip ></el-table-column>
<el-table-column prop="B" label="调解进度" show-overflow-tooltip ></el-table-column>
<el-table-column prop="C" label="沟通对象" show-overflow-tooltip ></el-table-column>
<el-table-column prop="D" label="备注" show-overflow-tooltip ></el-table-column>
<el-table-column prop="E" label="预约回款情况" show-overflow-tooltip ></el-table-column>
<el-table-column prop="F" label="添加时间" show-overflow-tooltip ></el-table-column>
<el-table-column prop="G" label="添加人" show-overflow-tooltip ></el-table-column>
<el-table-column label="操作" width="170">
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" @click="handleCaseAllocation(scope)">查看录音</el-button>
</div>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><i v-if="repaymentObj.type != undefined" class="el-icon-s-flag"></i> 还款计划</span>
<div class="case-repayment-des flex-column mb-16 p-16 border-radius-8" style="min-height: 200px;">
<div v-if="repaymentObj.type != undefined" class="flex-column justify-content-between">
<el-form ref="ruleFormRepayment"
label-width="130px">
<el-form-item label="还款方式" prop="type">
<el-select v-model="repaymentObj.type" class="width100" disabled
placeholder="请选择还款方式" size="small">
<el-option
v-for="(item,index) in RepaymentOptions"
:key="index"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="还款金额" prop="totalAmount">
<el-input class="inputpaddingtop2" disabled
size="small"
placeholder="请输入还款金额"
v-model="repaymentObj.totalAmount"
@input="inputChange($event)">
<template slot="append"></template>
</el-input>
</el-form-item>
<!-- 枚举备注: ALL :一次性全部回款 STAGES :全部分期 MIX :混合部分先还加分期 OTHER :其他 -->
<el-form-item v-if="repaymentObj.type == 'MIX'" label="分期前偿还金额" prop="partAmount">
<el-input class="inputpaddingtop2" disabled
size="small"
placeholder="请输入分期前偿还金额"
v-model="repaymentObj.partAmount"
@input="inputChange($event)">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item v-if="repaymentObj.type == 'MIX'" label="先还日期" prop="partDate">
<el-date-picker class="width100" size="small" disabled
v-model="repaymentObj.partDate"
type="date"
placeholder="选择先还日期"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
<el-form-item v-if="repaymentObj.type == 'MIX'" label="分期部分金额" prop="productTypeId">
<el-input class="inputpaddingtop2"
size="small"
disabled
placeholder="分期部分金额"
v-model="repaymentObj.moneyAmount">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="分期期数" prop="stagesNum">
<el-input
size="small" disabled
placeholder="请输入分期期数"
v-model="repaymentObj.stagesNum"
@input="inputChange($event)">
</el-input>
</el-form-item>
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="每期还款金额" prop="stagesAmount">
<el-input class="inputpaddingtop2"
size="small"
disabled
placeholder="每期还款金额"
v-model="repaymentObj.stagesAmount">
<template slot="append"></template>
</el-input>
</el-form-item>
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="每期还款日期" prop="stagesDay">
<el-select v-model="repaymentObj.stagesDay" class="width100" disabled
placeholder="请选择每期还款日期" size="small">
<el-option
v-for="(item, index) in 31"
:key="index"
:label="(index+1)+'日'"
:value="(index+1)">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="repaymentObj.type == 'ALL' || repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="还款截止日期" prop="paybackDate">
<el-date-picker class="width100" size="small" disabled
v-model="repaymentObj.paybackDate"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
<el-form-item label="备注说明" prop="remark">
<el-input disabled
size="small"
clearable
placeholder="请输入备注说明"
v-model="repaymentObj.remark">
</el-input>
</el-form-item>
</el-form>
</div>
</div>
</el-tab-pane>
<el-tab-pane>
<span slot="label"><i v-if="ProofList.length > 0" class="el-icon-s-flag"></i> 回款凭证</span>
<span class="f16">总计待还金额{{ProofStatistics.total}}总计已还金额{{ProofStatistics.payback}}</span>
<el-table :data="ProofList" :height="300" >
<el-table-column type="index" label="序号" width="55"></el-table-column>
<el-table-column prop="paybackTime" label="凭证时间" show-overflow-tooltip ></el-table-column>
<el-table-column prop="amount" label="凭证金额" show-overflow-tooltip ></el-table-column>
<el-table-column prop="uploaderName" label="上传者" show-overflow-tooltip ></el-table-column>
<el-table-column prop="createAt" label="上传时间" show-overflow-tooltip ></el-table-column>
<el-table-column prop="remark" label="备注信息" show-overflow-tooltip ></el-table-column>
<el-table-column label="操作" width="170">
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" @click="handleCaseShow(scope)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
</div>
</div>
</div>
<!-- table -->
<div class="flex-column" style="width: 350px; margin-left: 20px;">
<div class="background-color-fff border-radius-4 p-16 flex-column">
<div class="case-detail-right-label f-weight500 f16">备注</div>
<div class="case-detail-right-des">
<span>孟利于2024-12-04 10:04:04备注</span>
<el-input class="mt-8" type="textarea" v-model="Qualitydesc" :rows="4"></el-input>
</div>
<div class="case-detail-label f-weight500 f16">质检评语</div>
<div class="case-detail-right-des">
<span>孟利于2024-12-04 10:04:04评语</span>
<el-input class="mt-8" type="textarea" v-model="Qualitydesc" :rows="4"></el-input>
</div>
</div>
<div class="background-color-fff border-radius-4 p-16 flex-column mt-16">
<div class="flex-column item-trace">
<div class="flex-row justify-content-between case-pk-title">
<span>案件事项追踪</span>
</div>
<div class="case-pk-cont">
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'1',title:'短信发送记录',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>短信发送追踪</span><span></span>
</div>
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'2',title:'电话呼叫记录',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>电话呼叫追踪</span><span></span>
</div>
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'3',title:'视频调解记录',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>视频调解追踪</span><span></span>
</div>
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'4',title:'文书生成记录',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>文书生成追踪</span><span></span>
</div>
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'5',title:'文书签字记录',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>文书签字追踪</span><span></span>
</div>
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'6',title:'文书送达记录',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>文书送达追踪</span><span></span>
</div>
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'7',title:'还款计划',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>还款计划追踪</span><span></span>
</div>
<div class="flex-row justify-content-between cursor-pointer" @click="CaseTraceDialog = {activeName:'8',title:'还款凭证',caseNo:baseInfo.caseNo,caseId:baseInfo.id}">
<span>还款凭证追踪</span><span></span>
</div>
</div>
</div>
</div>
</div>
</div>
<div v-if="navactive == 2 " class="layout-tabs-content-box flex-row padding-0 f14">
<div class="pt-8 border-b-solid-lighter-1 background-color-fff border-radius-4 p-16 width100" >
<div class="flex-column">
<div class="case-detail-label f-weight500 f16">案件材料<a><i class="el-icon-plus"></i>上传材料</a></div>
<div class="case-detail-des">
<el-table :data="fileList" :height="300" >
<el-table-column type="index" label="序号" width="55"></el-table-column>
<el-table-column label="材料类型" width="170">
<template slot-scope="scope">
<div class="flex-row align-items-center">
{{ getfileType(scope.row) }}
</div>
</template>
</el-table-column>
<el-table-column prop="name" label="文件名称" show-overflow-tooltip ></el-table-column>
<el-table-column prop="createAt" label="上传时间" show-overflow-tooltip ></el-table-column>
<!-- <el-table-column prop="url" label="上传人" show-overflow-tooltip ></el-table-column> -->
<el-table-column label="操作" width="170">
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" @click="handleCaseAllocation(scope)">删除</el-button>
<el-button size="mini" @click="handleCaseShow(scope,fileList)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
<div class="case-detail-label f-weight500 f16">案件文书</div>
<div class="case-detail-des">
<el-table :data="tableData" :height="300" >
<el-table-column type="index" label="序号" width="55"></el-table-column>
<el-table-column prop="A" label="文书类型" show-overflow-tooltip ></el-table-column>
<el-table-column prop="B" label="文书名称" show-overflow-tooltip ></el-table-column>
<el-table-column prop="B" label="是否签章" show-overflow-tooltip ></el-table-column>
<el-table-column prop="B" label="是否完成签字" show-overflow-tooltip ></el-table-column>
<el-table-column prop="B" label="签字人" show-overflow-tooltip ></el-table-column>
<el-table-column prop="F" label="生成时间" show-overflow-tooltip ></el-table-column>
<el-table-column prop="G" label="操作人" show-overflow-tooltip ></el-table-column>
<el-table-column label="操作" width="230">
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" @click="handleCaseAllocation(scope)">查看</el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</div>
<div v-if="navactive == 3 " class="layout-tabs-content-box flex-row padding-0 f14">
<div class="pt-8 border-b-solid-lighter-1 background-color-fff border-radius-4 p-32 width100" >
<el-timeline>
<el-timeline-item timestamp="2018/4/12" placement="top">
<el-card>
<p>王小虎 提交于 2018/4/12 20:46</p>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="2018/4/3" placement="top">
<el-card>
<p>王小虎 提交于 2018/4/3 20:46</p>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="2018/4/2" placement="top">
<el-card>
<p>王小虎 提交于 2018/4/2 20:46</p>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div>
<!-- 各种案件追踪记录 -->
<CaseTraceDialog v-if="CaseTraceDialog" :eventTraDialog.sync="CaseTraceDialog" />
<!-- 文件预览 -->
<showFile v-if="fileDialog" :fileDialog.sync="fileDialog" />
</div>
</template>
<script>
import api from "@/services/caseManagement";
import { stubString } from "lodash";
import { subtract } from "lodash";
export default {
components: {
showFile: () => import('../../../components/showFile.vue'),//
CaseTraceDialog: () => import('../components/CaseTraceDialog.vue'),//
},
data() {
return {
CaseTraceDialog:null,
fileDialog:null,
eventTraDialog:null,
navactive:1,
Qualitydesc:'结清应还金额16776.74逾期未还费用2486.88',
tableData:[{H:'电话调解',A:'一次性全部还款',B:'承诺账户',C:'钟华丽-本人-188****2929',D:'CS',E:'回款金额:14289.86,回款时间:2024-12-05',F:'2024-12-05 09:13:29',G:'孟利'}],
tableData1:[{A:'一次性全部回款',B:'14,289.86元',C:'2024-12-05',D:'无',E:'',F:'',G:'',H:''}],
tableData2:[{A:'2024-12-05 00:00:00',B:'14,289.86元',C:'孟利',D:'2024-12-05 14:13:56',E:'',F:'',G:'',H:''}],
caseId:'',
baseInfo:{},
fileList:[],
fileType:[{label:'身份证件',value:1},{label:'金融许可证',value:2},{label:'营业执照',value:3},{label:'法定代表人身份证明',value:4},
{label:'起诉状',value:5},{label:'证据清单',value:6},{label:'合约',value:7},{label:'申领表',value:8},{label:'交易明细',value:9}
,{label:'其他证据',value:10}],
//
repaymentObj:{},
RepaymentOptions:[{label:'一次性还款',value:'ALL'},{label:'全部分期',value:'STAGES'},{label:'部分先还加分期',value:'MIX'},{label:'其他',value:'OTHER'}],
//
ProofList:[],
}
},
computed:{
// drawer
drawerContentHeight(){
let oh = document.documentElement.clientHeight;
return oh-200
}
},
async created() {
if (this.$route.query.caseId != undefined) {
this.caseId = this.$route.query.caseId;
this.getCaseInfoById();//
}
},
methods: {
getfileType(row){
let item = this.fileType.find(item =>{
return item.code === row.materialType
})
if(item != undefined) return item.label
return '-'
},
handleCaseShow(scope,filelist){
if(filelist == undefined){
this.fileDialog = {showfile:{url:scope.row.proofUrl},filelist:[]}
}
else
{
this.fileDialog = {showfile:scope.row,filelist:filelist}
}
},
debtorEntityCardNo(datalist,len){
let datacardno=''
let dataphone=''
datalist.forEach((item,index) =>{
if(index == 0){
datacardno = item.cardNo
dataphone = item.phone
}
else{
datacardno += ','+item.cardNo
dataphone += ','+item.phone
}
})
return {cardNo:datacardno.substring(0,len),phone:dataphone.substring(0,len)};
},
//
getCaseInfoById(){
let _that = this
api.getCaseInfoById(this.caseId).then(res => {
console.log(res,'res')
if(!res.code){
this.baseInfo=res
//
// console.log('',res.caseFileEntityList)
// let caseFileEntityList = []
// res.caseFileEntityList.forEach((item)=>{
// caseFileEntityList.push({name:item.name,fileName:item.name,url:item.url})
// })
_that.fileList = res.caseFileEntityList
}
})
this.getplanlist()
this.getProofList()
},
//
getplanlist(){
console.log(111,{caseId:this.caseId})
api.getcase_payback_planlist({caseId:this.caseId}).then(res => {
if(!res.code){
if(res.length > 0 ){this.repaymentObj = res[0]}
}
})
},
//
getProofList(){
api.gettraceProof_list({caseId:this.caseId}).then(res => {
if(!res.code){
this.ProofList = res
}
})
api.gettraceProof_statistics({caseId:this.caseId}).then(res => {
if(!res.code){
this.ProofStatistics = res
}
})
},
//
inputChange(){
if(this.repaymentObj.type == 'STAGES')
{
if(this.repaymentObj.totalAmount !='' &&this.repaymentObj.stagesNum !='' && this.repaymentObj.totalAmount !=undefined &&this.repaymentObj.stagesNum !=undefined)
{
this.repaymentObj.stagesAmount = ((this.repaymentObj.totalAmount*1)/(this.repaymentObj.stagesNum*1)).toFixed(2)
}
}
if(this.repaymentObj.type == 'MIX')
{
if(this.repaymentObj.totalAmount !='' &&this.repaymentObj.stagesNum !='' && this.repaymentObj.totalAmount !=undefined &&this.repaymentObj.stagesNum !=undefined)
{
this.repaymentObj.stagesAmount = ((this.repaymentObj.totalAmount*1 - this.repaymentObj.partAmount*1)/(this.repaymentObj.stagesNum*1)).toFixed(2)
}
}
},
}
}
</script>
<style scoped lang="scss">
.case-detail{
.case-detail-nav{
span{ width: 100px;font-size: 18px; color: #86909C;cursor: pointer;}
span:hover{ color: #C66A5B;}
span.active{ color: #C66A5B;}
}
.case-detail-title{
border-bottom: solid 2px #C66A5B99;
}
.case-detail-label{
margin: 15px 0;
a{
font-size: 14px;
color: #C66A5B;
font-weight: 400;
cursor: pointer;
margin-left: 20px;
}
}
.case-detail-des{
background-color: #F7F8FA;
padding: 10px 15px;
color:#86909C;
span{
width: 25%;
display: inline-block;
margin: 5px 0;
}
span a:first-child{width: 160px;display: inline-block;}
span a:last-child{color:#1D2129;}
.el-form-item{ margin-bottom: 2px;}
.inputpaddingtop2{padding-top:3px}
}
.case-repayment-des{
padding: 10px 15px;
color:#86909C;
.el-form-item{ margin-bottom: 2px;}
.inputpaddingtop2{padding-top:3px}
}
.case-detail-right-label{margin: 0px 0 15px 0;}
.case-detail-right-des{background-color: #F7F8FA;padding:10px;}
.item-trace{
border-radius: 8px;
.case-pk-title{
span:first-child{
font-size: 18px;
color:#1D2129;
font-weight: 500;
}
}
.case-pk-cont{
padding: 10px 0 0px 0;
position: relative;
.resultplan{
font-size: 32px;
position: absolute;
left: 115px;
top: 130px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 165px;
text-align: center;
}
div{
margin-top:5px;
margin-bottom:10px;
color: #4E5969;
background-color:#F7F8FA ;
padding: 12px;
border-radius: 2px;
a{
font-weight: 600;
}
a:first-child{
color: #E8535A;
}
}
}
}
}
.el-badge{
top: 3px;
}
</style>
<style lang="scss">
.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
color: #C66A5B;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item:hover{
color: #C66A5B !important;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item i{
color:red !important;
}
</style>

View File

@ -124,10 +124,7 @@
<div class="height-56 flex-row align-items-center justify-content-between">
<div class="f22 color-text-primary">凭证列表</div>
<div class="flex-row">
<!-- <el-button size="small" @click="handleImport">导入</el-button>
<el-button size="small" @click="handleBatchDelete">删除</el-button>-->
<el-button size="small" @click="handleAddForm">案件办结</el-button>
<el-button size="small" type="primary" @click="handleCaseAllocation">案件分配</el-button>
</div>
</div>
<div class="case-table">
@ -142,12 +139,12 @@
<el-table-column prop="pkgName" label="回款时间" show-overflow-tooltip ></el-table-column>
<el-table-column prop="pkgName" label="上传回款凭证时间" show-overflow-tooltip ></el-table-column>
<el-table-column prop="pkgName" label="所属调解员" show-overflow-tooltip ></el-table-column>
<el-table-column prop="pkgName" label="操作" width="240" >
<el-table-column prop="pkgName" label="操作" width="200" >
<template slot-scope="scope">
<div class="flex-row align-items-center">
<el-button size="mini" class="case-btn" @click="handleEdit(scope)">查看凭证</el-button>
<el-button size="mini" v-if="scope.row.status == 1" class="case-btn" @click="handleDelete(scope)">效验</el-button>
<el-button size="mini" class="case-btn" @click="handleDelete(scope)">修改</el-button>
<el-button size="mini" class="case-btn" @click="handleCaseShow(scope)">查看凭证</el-button>
<!-- <el-button size="mini" v-if="scope.row.status == 1" class="case-btn" @click="EffectDialog = scope.row">效验</el-button> -->
<el-button size="mini" class="case-btn" @click="UpdateDialog = scope.row">修改</el-button>
</div>
</template>
@ -168,55 +165,28 @@
</div>
</div>
<!-- 导入 -->
<!-- <importCaseDialog v-if="importCaseDialog" :importCaseDialog.sync="importCaseDialog" /> -->
<!-- 新增 -->
<!-- <addCaseDialog v-if="addCaseDialog" :addCaseDialog.sync="addCaseDialog" /> -->
<!-- 编辑 -->
<!-- <editCaseDrawer v-if="editCaseDrawer" :editCaseDrawer.sync="editCaseDrawer"/> -->
<!-- 案件分配-->
<caseAllocationDialog v-if="caseAllocationDialog" :caseAllocationDialog.sync="caseAllocationDialog" />
<!-- 各种案件追踪记录 -->
<CaseTraceDialog v-if="CaseTraceDialog" :eventTraDialog.sync="CaseTraceDialog" />
<!-- 文件预览 -->
<showFile v-if="fileDialog" :fileDialog.sync="fileDialog" />
<!-- 效验 -->
<RepaymentEffectDialog v-if="EffectDialog" :EffectDialog.sync="EffectDialog" />
<!-- 修改 -->
<RepaymentUpdateDialog v-if="UpdateDialog" :EffectDialog.sync="UpdateDialog" />
</div>
</template>
<script>
import api from "@/services/caseManagement";
import { values } from "lodash";
export default {
components: {
// importCaseDialog: () => import('./components/importCaseDialog'),//
// addCaseDialog: () => import('./components/addCaseDialog'),//
// editCaseDrawer: () => import('./components/editCaseDrawer'),//
CaseTraceDialog: () => import('./components/CaseTraceDialog.vue'),//
caseAllocationDialog: () => import('./components/caseAllocationDialog'),//
showFile: () => import('../../components/showFile.vue'),//
RepaymentEffectDialog: () => import('../case-management/components/RepaymentEffectDialog.vue'),//
RepaymentUpdateDialog: () => import('../case-management/components/RepaymentUpdateDialog.vue'),//
},
data() {
return {
CaseTraceDialog:null,//
isCheck: false,//
indeterminate: false,//selectionDatalength 0 < selectionData.length < enabledDataList.length true
selectionData: [],//
enabledDataList: [],//
//
CaseStatusEnum:[{label:'在办',value:1},{label:'办结',value:2}],
//
PartCaseStatusEnum:[{label:'待分案',value:false},{label:'已分案',value:true}],
//
MediateProgEnum:[{label:'承诺账户',value:'承诺账户'},{label:'重点账户',value:'重点账户'},{label:'已结清客户',value:'已结清客户'},
{label:'疑难账户',value:'疑难账户'},{label:'失联账户',value:'失联账户'},{label:'半失联账户',value:'半失联账户'},{label:'部分还款账户',value:'部分还款账户'},
{label:'适诉案件',value:'适诉案件'},{label:'可联账户',value:'可联账户'},{label:'投诉倾向客户',value:'投诉倾向客户'},{label:'分期客户',value:'分期客户'},
{label:'其他/无标签',value:'其他/无标签'}
],
//
MediateStatusEnum:[{label:'未触达',value:0},{label:'调解中',value:1},{label:'已达成方案',value:2},
{label:'已签署协议',value:3},{label:'调解失败',value:4},{label:'调解成功',value:5}],
fileDialog:null,
EffectDialog:null,
UpdateDialog:null,
showSearch: true,
queryDate: '',
activeUsage: '',
@ -247,27 +217,13 @@ import { values } from "lodash";
usageOption: ['今日','昨日', '近一周', '近一月', '近半年', '近一年'],
tableData: [],
total:0,
uniqueSelection:[],
caseAllocationDialog:null,//
importCaseDialog:null,//
addCaseDialog:null,//
editCaseDrawer:null,//
caseStatusData:[],
}
},
watch: {
//
selectionData: {
handler(v) {
if (this.enabledDataList.length) {
let checkedCount = v.length;
this.isCheck = checkedCount === this.enabledDataList.length;
this.indeterminate = checkedCount > 0 && checkedCount < this.enabledDataList.length;
}
},
immediate: true
}
},
created() {
@ -292,93 +248,12 @@ import { values } from "lodash";
jumpUrl (url) {
this.$router.push(url);
},
//
handleCheckAllChange(value){
this.selectionData = value ? this.enabledDataList.map(el=>el.id) : [];
this.indeterminate = false;
handleCaseShow(scope){
this.fileDialog = {showfile:{url:scope.row.proofUrl},filelist:[]}
},
handleUpdate(){},
//
handleImport(){
this.importCaseDialog={
title:'导入案件',
}
},
//
handleBatchDelete(){
if(this.uniqueSelection.length==0){
this.$message.warning("请先选择你要删除的列表数据");
return
}
this.$confirm("请确定是否删除这些数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(!this.$clickThrottle()) { return }//
let data = {
ids:this.uniqueSelection
}
api.deleteCaseBatch(data).then((res) => {
this.$message.success("成功");
this.getCaseInfoList(1)
});
}).catch(() => {});
},
//
handleDelete(scope){
this.$confirm("请确定是否删除此条数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(!this.$clickThrottle()) { return }//
api.deleteCaseInfoById(scope.row.id).then((res) => {
this.$message.success("成功");
this.getCaseInfoList(1)
});
}).catch(() => {});
},
//
handleAddForm(){
this.addCaseDialog={
title:'新增案件',
}
},
//
handleCaseAllocation(){
if(this.selectionData.length > 0){
this.caseAllocationDialog={
title:'案件分配',
choosecaseIds:this.selectionData
}
}
else
{
this.$message({
showClose: true,
message: '请选择需要分案的案件!',
type: 'warning'
});
return false
}
},
//
handleEdit(scope){
this.editCaseDrawer={
title:'编辑案件',
data:scope.row,
currentPage:this.queryParam.current
}
},
//
getCaseInfoList(val){
this.queryParam.current = val
@ -467,15 +342,6 @@ import { values } from "lodash";
},
handleSelectionChange(val){
console.log('获取val',val)
this.uniqueSelection = []
val.forEach((row)=>{
this.uniqueSelection.push(row.id)
})
console.log('uniqueSelection',this.uniqueSelection)
},
}
}
</script>

View File

@ -124,10 +124,19 @@ const caseManagementApi = {
gettraceProof_valid: data => {
return service.service.post(`${apiAdmin}api/trace/traceProof/valid`, data)
},
// 修改
gettraceProof_edit: data => {
return service.service.post(`${apiAdmin}api/trace/traceProof/edit`, data)
},
// 删除
gettraceProof_delete: data => {
return service.service.post(`${apiAdmin}api/trace/traceProof/delete`, data)
},
// 取消效验
gettraceProof_cancel: data => {
return service.service.post(`${apiAdmin}api/trace/traceProof/cancel`, data)
},