修改bug

This commit is contained in:
liuxi 2025-01-20 11:08:25 +08:00
parent 5c121b6653
commit 5f4a1d3155
10 changed files with 16 additions and 2447 deletions

View File

@ -68,7 +68,7 @@ import api from "@/services/caseManagement";
//
this.fileType = 'image'
}
if(this.$util.getFileType(url) === 'video') {
else if(this.$util.getFileType(url) === 'video') {
//
this.fileType = 'video'
}

View File

@ -78,8 +78,13 @@ import api from "@/services/caseManagement";
}
})
},
handleCaseShow(scope){
this.fileDialog = {showfile:{url:scope.row.proofUrl},filelist:[]}
async handleCaseShow(scope){
let previewUrl = await this.getProofFile(scope.row.proofUrl)
this.fileDialog = {showfile:{url:previewUrl},filelist:[]}
},
async getProofFile(url){
let previewUrl = await this.$fetchApi.viewFullFile({path: url})
return previewUrl
},
handleClose() {
this.$emit('update:eventTraDialog', null)

View File

@ -1,90 +0,0 @@
<template>
<div>
<!-- table -->
<div class="pt-8">
<div class="height-56 flex-row align-items-center justify-content-between">
<div class="f18 color-text-primary">电话呼叫列表</div>
<div class="flex-row">
</div>
</div>
<div class="case-table">
<el-table :data="tableData" height="370" >
<el-table-column type="index" label="序号" width="55"></el-table-column>
<el-table-column prop="pkgName" label="外呼/呼入类型" show-overflow-tooltip ></el-table-column>
<el-table-column prop="planStartTime" label="外呼/呼入时间" show-overflow-tooltip >
<template slot-scope="scope">
<span >{{ scope.row.planStartTime | formaDate("yyyy-MM-dd hh:mm:ss") }}</span>
</template>
</el-table-column>
<el-table-column prop="entrustingAgencyName" 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="channel" 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 >
<template slot-scope="scope">
<span >{{ scope.row.planStartTime | formaDate("yyyy-MM-dd hh:mm:ss") }}</span>
</template>
</el-table-column>
<el-table-column prop="channel" label="录音文件" show-overflow-tooltip ></el-table-column>
</el-table>
</div>
<div class="text-center pt-16">
<el-pagination
@size-change="getCaseInfoList"
@current-change="getCaseInfoList"
:current-page="queryParam.current"
:page-size="queryParam.size"
layout="total, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
</div>
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
queryParam:{},
tableData:[],
total:0,
};
},
mounted () {
console.log(this.eventTraDialog,'eventTraDialog')
},
methods: {
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-trace{
padding: 16px 20px;
max-height:500px
}
</style>

View File

@ -1,179 +0,0 @@
<template>
<div>
<el-dialog :visible="true" width="1300px" class="dialog-case-record" append-to-body :close-on-click-modal="false"
@close="handleClose()">
<div class="dialog-content dialog-case-trace">
<el-tabs class="zd-el-tabs-custom zd-el-tabs-custom__left_padding" v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane name="1">
<span slot="label"><span>短信发送记录</span></span>
</el-tab-pane>
<el-tab-pane name="2">
<span slot="label"><span>电话呼叫记录</span></span>
</el-tab-pane>
<el-tab-pane name="3">
<span slot="label"><span>视频调解记录</span></span>
</el-tab-pane>
<el-tab-pane name="4">
<span slot="label"><span>文书生成记录</span></span>
</el-tab-pane>
<el-tab-pane name="5">
<span slot="label"><span>文书签字记录</span></span>
</el-tab-pane>
<el-tab-pane name="6">
<span slot="label"><span>文书送达记录</span></span>
</el-tab-pane>
<el-tab-pane name="7">
<span slot="label"><span>还款计划</span></span>
</el-tab-pane>
<el-tab-pane name="8">
<span slot="label"><span>还款凭证</span></span>
</el-tab-pane>
</el-tabs>
<div class=" case-trace-cont">
<!-- 短信发送追踪明细 -->
<smsDialogDetail v-if="activeName == '1'" :DialogDetail="eventTraDialog" />
<!-- 呼叫记录 -->
<CalllogDialog v-if="activeName == '2'" :eventTraDialog.sync="eventTraDialog" />
<!-- 视频调解追踪 -->
<voideDialog v-if="activeName == '3'" :eventTraDialog="eventTraDialog" />
<!-- 文书生成追踪明细 -->
<officeDialogDetail v-if="activeName == '4'" :DialogDetail="eventTraDialog" />
<!-- 文书签字追踪明细 -->
<officeWDialogDetail v-if="activeName == '5'" :DialogDetail="eventTraDialog" />
<!-- 文书送达追踪明细 -->
<officeDeliveryDialogDetail v-if="activeName == '6'" :DialogDetail="eventTraDialog" />
<!-- 还款计划 -->
<!-- <RepaymentDialog v-if="activeName == '7'" :eventTraDialog.sync="repaymentDialog" /> -->
<!-- eventDialog:{caseId:this.$route.query.caseId}, -->
<RepaymentSchedule v-if="activeName == '7'" :eventDialog.sync="eventTraDialog" class="mt-16" />
<!-- 还款凭证 -->
<RepaymentRecordDialog v-if="activeName == '8'" :eventTraDialog.sync="eventTraDialog" />
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">关闭</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
eventTracingDialog: () => import('../../event-tracing/index.vue'),//
RepaymentSchedule: () => import('../../mediation-page/components/RepaymentSchedule.vue'),//
RepaymentRecordDialog: () => import('./RepaymentRecordDialog.vue'),//
smsDialogDetail: () => import('../../event-tracing/dtraceDetail/smsDialogDetail.vue'),//
CalllogDialog: () => import('./CalllogDialog.vue'),//
voideDialog: () => import('../../event-tracing/components/voideDialog.vue'),//
smsDialogDetail: () => import('../../event-tracing/dtraceDetail/smsDialogDetail.vue'),//
officeDeliveryDialogDetail: () => import('../../event-tracing/dtraceDetail/officeDeliveryDialogDetail.vue'),//
officeDialogDetail: () => import('../../event-tracing/dtraceDetail/officeDialogDetail.vue'),//
officeWDialogDetail: () => import('../../event-tracing/dtraceDetail/officeWDialogDetail.vue'),//
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
calllogDialog:null,//
activeName:'1',
queryParam:{},
tableData:[],
total:0,
};
},
mounted () {
this.activeName = this.eventTraDialog.activeName
},
methods: {
// tab
handleTabClick(tab){
if(tab.name == '1'){
eventTraDialog = {caseNo:'123'}
}else if(tab.name == '2'){
calllogDialog = {title:'电话呼叫记录',caseNo:'123'}
}else if(tab.name == '3'){
eventTraDialog = {title:'视频调解记录',caseNo:'123'}
}else if(tab.name == '4'){
eventTraDialog = {title:'文书生成记录',caseNo:'123'}
}else if(tab.name == '5'){
eventTraDialog = {title:'文书签字记录',caseNo:'123'}
}else if(tab.name == '6'){
eventTraDialog = {title:'文书送达记录',caseNo:'123'}
}else if(tab.name == '7'){
repaymentDialog = {title:'还款计划',caseNo:'123'}
}else if(tab.name == '8'){
eventTraDialog = {title:'还款凭证',caseNo:'123'}
}else {
}
// this.getCaseInfoList(1)
},
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-case-record{
.el-dialog .el-dialog__header{background-color: #C66A5B;}
.el-dialog__header{background-color: #C66A5B;}
}
.dialog-case-trace{
padding: 16px 20px;
min-height:500px
}
.dialog-case-trace .zd-el-tabs-custom{
margin-top: -61px ;
margin-right: 25px;
}
.dialog-case-trace .zd-el-tabs-custom span{
font-size: 16px;
font-weight: 400;
}
.dialog-case-trace .case-trace-cont
{
min-height: 500px;
}
</style>
<style lang="scss">
.dialog-case-record{
.el-dialog .el-dialog__header {
background-color: #C66A5B;
height: 43px !important;
line-height: 50px !important;
}
.el-tabs__item{color: #FFFFFFB2;}
.zd-el-tabs-custom .el-tabs__item.is-active {
color: #fff !important;
}
.zd-el-tabs-custom .el-tabs__active-bar{
background-color: #fff !important;
}
.el-tabs__nav-wrap::after {
background-color: #fff;
}
.el-dialog__headerbtn .el-dialog__close{
color: #fff !important;
}
}
</style>

View File

@ -1,93 +0,0 @@
<template>
<div>
<!-- table -->
<div class="pt-8">
<div class="height-56 flex-row align-items-center justify-content-between">
<div class="f18 color-text-primary">还款凭证列表</div>
<div class="flex-row">
</div>
</div>
<div class="case-table">
<el-table :data="tableData" height="390" >
<el-table-column prop="amount" label="凭证金额" show-overflow-tooltip >
<template slot-scope="scope">
<span >{{ scope.row.amount }}</span>
</template>
</el-table-column>
<el-table-column prop="paybackTime" label="还款日期" show-overflow-tooltip ></el-table-column>
<el-table-column prop="remark" 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 >
<template slot-scope="scope">
<span >{{ scope.row.createAt | formaDate("yyyy-MM-dd hh:mm:ss") }}</span>
</template>
</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>
<el-button size="mini" @click="handleBackCase(scope)">效验</el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<!-- 文件预览 -->
<showFile v-if="fileDialog" :fileDialog.sync="fileDialog" />
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
showFile: () => import('../../../components/showFile.vue'),//
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
fileDialog:null,
queryParam:{},
tableData:[],
total:0,
};
},
mounted () {
console.log(this.eventTraDialog,'this.eventTraDialog')
this.getProofList()
},
methods: {
getProofList(){
api.gettraceProof_list({caseId:this.eventTraDialog.caseId}).then(res => {
if(!res.code){
this.tableData = res
}
})
},
handleCaseShow(scope){
this.fileDialog = {showfile:{url:scope.row.proofUrl},filelist:[]}
},
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-trace{
padding: 16px 20px;
max-height:500px
}
</style>

View File

@ -1,750 +0,0 @@
<template>
<div>
<el-dialog
:title="addCaseDialog.title"
:visible="true"
width="880px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<div >
<el-steps :active="presentStep" align-center>
<el-step v-for="(item,inx) in transferStep" :key="inx" :title="item.title" :description="item.description"></el-step>
</el-steps>
<!-- 基本信息 -->
<div v-if="presentStep === 1">
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">基本信息</div>
<div class="p-h-24">
<el-form ref="ruleFormBase"
:model="baseInfo"
:rules="rulesClient"
label-width="150px"
class="demo-ruleForm">
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="金融机构名称" prop="financialOrgName">
<el-input
v-model.trim="baseInfo.financialOrgName"
placeholder="请输入金融机构名称"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社会统一信用代码" prop="financialOrgCode">
<el-input
v-model.trim="baseInfo.financialOrgCode"
placeholder="请输入社会统一信用代码"
clearable
maxlength="18"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="案件名称" prop="caseName">
<el-input
clearable
placeholder="请输入案件名称"
v-model="baseInfo.caseName">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="案件编号" prop="caseNo">
<el-input
clearable
placeholder="请输入案件编号"
v-model="baseInfo.caseNo">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="金融产品类型" prop="productTypeId">
<el-select v-model="baseInfo.productTypeId"
clearable placeholder="请选择金融产品类型"
class="width100">
<el-option
v-for="item in financialProductsTypeOptions"
:key="item.code"
:label="item.codeName"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标的金额" prop="moneyAmount">
<el-input
clearable
placeholder="请输入内容"
v-model="baseInfo.moneyAmount">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="逾期次数" prop="overdueTimes">
<!-- <el-select v-model="baseInfo.overdueTimes"
clearable placeholder="请选择逾期次数"
class="width100">
<el-option
v-for="item in operateMethodOptions"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select> -->
<el-input-number v-model="baseInfo.overdueTimes" :min="0" :max="100" class="width100"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="案件描述" prop="caseDescr">
<el-input
clearable
placeholder="请输入内容"
v-model="baseInfo.caseDescr">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</div>
<!-- 当事人信息 -->
<div v-else-if="presentStep === 2">
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">案件当事人</div>
<div class="p-h-24">
<div class="border-solid-lighter-1 p-h-24 mb-16">
<div class="flex-row justify-content-between height-48 line-height-48 f14 border-b-solid-lighter-1 mb-16">
<div class="color-000">债权人</div>
<div class="color-text-regular cursor-pointer" @click="handleReset">清空<i class="el-icon-close"></i></div>
</div>
<el-form ref="ruleFormCreditor"
:model="creditorInfo"
:rules="rulesClientCreditor"
label-width="150px"
class="demo-ruleForm">
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="债权人" prop="creditorName">
<el-input
v-model.trim="creditorInfo.creditorName"
placeholder="请输入债权人"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社会统一信用代码" prop="creditorOrgCode">
<el-input
v-model.trim="creditorInfo.creditorOrgCode"
placeholder="请输入社会统一信用代码"
clearable
maxlength="18"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="法人姓名" prop="creditorLegal">
<el-input
clearable
placeholder="请输入法人姓名"
v-model="creditorInfo.creditorLegal">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="法人身份证号" prop="creditorIdcard">
<el-input
clearable
placeholder="请输入法人身份证号"
v-model="creditorInfo.creditorIdcard"
maxlength="18">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="法人手机号" prop="creditorPhone">
<el-input
clearable
placeholder="请输入法人手机号"
v-model="creditorInfo.creditorPhone"
maxlength="11"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="公司地址" prop="creditorAddr">
<el-input
clearable
placeholder="请输入公司地址"
v-model="creditorInfo.creditorAddr">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="邮编" prop="creditorMail">
<el-input
clearable
placeholder="请输入邮编"
v-model="creditorInfo.creditorMail"
maxlength="6"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="代理人" prop="creditorAgent">
<el-input
clearable
placeholder="请输入代理人"
v-model="creditorInfo.creditorAgent">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="border-solid-lighter-1 p-h-24">
<div class="flex-row justify-content-between f14 border-b-solid-lighter-1 mb-8 p-v-8 align-items-center">
<div class="color-000">债务人</div>
<el-button size="small" type="primary" @click="handleAdd">新增债务人<i class="el-icon-plus"></i></el-button>
</div>
<div>
<el-form ref="ruleFormObligor"
:model="obligorInfoForm"
label-width="150px"
class="demo-ruleForm">
<div v-for="(item,inx) in obligorInfoForm.debtorEntityList" :key="inx">
<div class="flex-row justify-content-between align-items-center height-40 f14 mb-16">
<div class="color-text-primary">债务人{{inx+1}}</div>
<div class="color-text-regular cursor-pointer" @click="handleRemoveDomain(item)">删除<i class="el-icon-close"></i></div>
</div>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="债务人姓名" :prop="'debtorEntityList.' + inx + '.name'" :rules="{required: true, message: '请输入债权人姓名', trigger: 'blur'}">
<el-input
v-model.trim="obligorInfoForm.debtorEntityList[inx].name"
placeholder="请输入债务人姓名"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="证件类型" :prop="'debtorEntityList.' + inx + '.cardTypeId'" :rules="{required: true, message: '请选择证件类型', trigger: 'blur'}">
<el-select v-model="obligorInfoForm.debtorEntityList[inx].cardTypeId"
clearable placeholder="请选择证件类型"
class="width100">
<el-option
v-for="item in idTypeOptions"
:key="item.code"
:label="item.codeName"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="证件号码" :prop="'debtorEntityList.' + inx + '.cardNo'"
:rules=" [
{ required: true, message: '请输入证件号', trigger: 'change',},
{ pattern: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/, message: '请输入正确的身份证号', trigger: ['blur', 'change']}
]">
<el-input
clearable
placeholder="请输入证件号码"
v-model="obligorInfoForm.debtorEntityList[inx].cardNo"
maxlength="18"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" :prop="'debtorEntityList.' + inx + '.phone'" :rules="[
{ required: true, message: '请输入法人手机号', trigger: 'change',},
{ pattern: /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})|(19[0-9]{9})$/, message: '请输入正确的手机号码', trigger: ['blur', 'change']}
]">
<el-input
clearable
placeholder="请输入手机号码"
v-model="obligorInfoForm.debtorEntityList[inx].phone"
maxlength="11"
>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="地址" :prop="'debtorEntityList.' + inx + '.addr'" :rules="{ required: true, message: '请输入地址', trigger: 'change',}">
<el-input
clearable
placeholder="请输入地址"
v-model="obligorInfoForm.debtorEntityList[inx].addr">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮编" :prop="'debtorEntityList.' + inx + '.mail'" :rules="{ required: true, message: '请输入邮编', trigger: 'change',}">
<el-input
clearable
placeholder="请输入邮编"
v-model="obligorInfoForm.debtorEntityList[inx].mail"
maxlength="6">
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
</div>
</div>
</div>
</div>
</div>
<!-- 模板选择 -->
<div v-else-if="presentStep === 3">
<el-form ref="ruleFormTemplate"
:model="queryParam"
:rules="rulesClientTemplate"
label-width="150px"
class="demo-ruleForm">
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">模板话术</div>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="话术模板" prop="tpSpeechcraftId">
<el-select v-model="queryParam.tpSpeechcraftId"
clearable placeholder="请选择模板话术"
class="width100">
<el-option
v-for="item in speechcraftTemplateOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">调解模板</div>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="调解模板" prop="tpMediateId">
<el-select v-model="queryParam.tpMediateId"
clearable placeholder="请选择调解模板"
class="width100">
<el-option
v-for="item in mediationTemplateOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
</div>
<!-- 材料上传 -->
<div v-else-if="presentStep === 4">
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">证据材料</div>
<div class="p-h-24">
<upload-file-name :file-list="fileList" :max-count="20"
:show-file-name="true"
@handleUploadFile="handleUploadFile">
</upload-file-name>
</div>
</div>
<!-- 完成 -->
<div v-else-if="presentStep === 5">
<el-result icon="success" title="案件创建完成" subTitle="案件创建完成,继续处理其他案件">
<template slot="extra">
<el-button type="primary" size="medium" @click="handleClose">好的</el-button>
</template>
</el-result>
</div>
</div>
<span slot="footer" class="dialog-footer" v-if="presentStep<5">
<el-button @click="handleClose">取消</el-button>
<el-button
v-if="presentStep > 1 "
type="primary"
@click="presentStep--">上一步</el-button>
<el-button
type="primary"
v-show="presentStep<4"
@click="handleNextStep">下一步</el-button>
<el-button
type="primary"
v-show="presentStep === 4"
@click="handleSubmit">确认
</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
uploadFileName: () => import('@/components/uploadFileName.vue'),//
},
props: {
addCaseDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
const moneyAmountValidate = (rule,value,callback)=>{
if (!value){
callback(new Error('请输入标的金额'));
}else if (!/^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/.test(value)){
callback(new Error('只能输入两位小数的金额!'));
}else if(!(0<parseInt(value)&&parseInt(value)<100000000)){
callback(new Error('只能输入大于1小于1亿的金额!'));
}else{
callback()
}
};
return {
transferStep:[
{id:1,title:'基本信息',description:'录入案件基本信息'},
{id:2,title:'当事人信息',description:'录入当事人信息'},
{id:3,title:'模板选择',description:'选择模板'},
{id:4,title:'材料上传',description:'上传案件材料'},
{id:5,title:'完成',description:'完成案件创建'},
],
presentStep:1,
//------------------------------------------------------
baseInfo:{
financialOrgName:'',//
financialOrgCode:'',//
caseName:'',//
caseNo:'',//
productTypeId:'',//
moneyAmount:'',//
overdueTimes:0,//
caseDescr:'',//
},
rulesClient: {
financialOrgName: [
{ required: true, message: '请输入机构名称', trigger: 'change',},
],
financialOrgCode: [
{ required: true, message: '请输入社会统一信用代码', trigger: 'change',},
],
caseName: [
{ required: true, message: '请输入案件名称', trigger: 'change',},
],
caseNo: [
{ required: true, message: '请输入案件编号', trigger: 'change',},
],
productTypeId: [
{ required: true, message: '请选择金融产品类型', trigger: 'change',},
],
moneyAmount: [
{ required: true, validator: moneyAmountValidate, trigger: 'change',},
],
caseDescr:[
{ required: true, message: '请输入案件描述', trigger: 'change',},
]
},
financialProductsTypeOptions:[],//
//-----------------------------------------------
//
creditorInfo:{
creditorName:'',//
creditorOrgCode:'',//
creditorLegal:'',//
creditorIdcard:'',//
creditorPhone:'',//
creditorAddr:'',//
creditorMail:'',//
creditorAgent:'',//
},
rulesClientCreditor: {
creditorName: [
{ required: true, message: '请输入债权人', trigger: 'change',},
],
creditorOrgCode: [
{ required: true, message: '请输入债权人机构代码', trigger: 'change',},
],
creditorLegal: [
{ required: true, message: '请输入法人', trigger: 'change',},
],
creditorIdcard: [
{ required: true, message: '请输入法人身份证号', trigger: 'change',},
{ pattern: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/, message: '请输入正确的身份证号', trigger: ['blur', 'change']}
],
creditorPhone: [
{ required: true, message: '请输入法人手机号', trigger: 'change',},
{ pattern: /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})|(19[0-9]{9})$/, message: '请输入正确的手机号码', trigger: ['blur', 'change']}
],
creditorAddr: [
{ required: true, message: '请输入公司地址', trigger: 'change',},
],
// creditorAgent: [
// { required: true, message: '', trigger: 'change',},
// ],
},
//
idTypeOptions:[],
obligorInfoForm:{
debtorEntityList:[
{
name:'',//
phone:'',//
cardTypeId:'',//
addr:'',//
cardNo:'',//
mail:'',//
}
],
},
obligorRulesClient:{
name: [
{ required: true, message: '请输入债务人姓名', trigger: 'change',},
],
phone: [
{ required: true, message: '请输入法人手机号', trigger: 'change',},
{ pattern: /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})|(19[0-9]{9})$/, message: '请输入正确的手机号码', trigger: ['blur', 'change']}
],
cardTypeId: [
{ required: true, message: '请选择证件类型', trigger: 'change',},
],
addr: [
{ required: true, message: '请输入地址', trigger: 'change',},
],
cardNo: [
{ required: true, message: '请输入证件号', trigger: 'change',},
{ pattern: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/, message: '请输入正确的身份证号', trigger: ['blur', 'change']}
],
mail: [
{ required: true, message: '请输入邮编', trigger: 'change',},
{ pattern: /^\d{6}$/, message: '请输入正确的邮编', trigger: ['blur', 'change']}
],
},
//------------------------------------------------------------
queryParam:{
tpMediateId:'',//id
tpSpeechcraftId:'',//
},
rulesClientTemplate:{
tpMediateId: [
{ required: true, message: '请选择调解模板', trigger: 'change',},
],
tpSpeechcraftId: [
{ required: true, message: '请选择话术模板', trigger: 'change',},
],
},
fileList:[],//
speechcraftTemplateOptions:[],//
mediationTemplateOptions:[],//
};
},
mounted () {
this.getDict();//
this.getDictIdType();
this.getSpeechcraftTemplateList(),//
this.getTemplateList();//
},
methods: {
//
getDict(){
let data = {
type:'financial'
}
api.getDict(data).then(res => {
if (!res.code) {
this.financialProductsTypeOptions = res;
}
})
},
//
getDictIdType(){
let data = {
type:'certificates'
}
api.getDict(data).then(res => {
if (!res.code) {
this.idTypeOptions = res;
}
})
},
//
handleAdd(){
this.obligorInfoForm.debtorEntityList.push({
name:'',//
phone:'',//
cardTypeId:'',//
addr:'',//
cardNo:'',//
mail:'',//
});
},
//
handleRemoveDomain(item) {
var index = this.obligorInfoForm.debtorEntityList.indexOf(item)
if (index !== -1) {
this.obligorInfoForm.debtorEntityList.splice(index, 1)
}
},
//
handleReset(){
for (let key in this.creditorInfo) {
this.creditorInfo[key] = ''
}
},
//
getSpeechcraftTemplateList(){
let data = {
current: 1,
name: "",
size: 300,
type: 2,
}
api.getTemplateList(data).then(res => {
if (!res.code) {
this.speechcraftTemplateOptions = res.records;
}
})
},
//
getTemplateList(){
let data = {
current: 1,
name: "",
size: 300,
type: 1,
}
api.getTemplateList(data).then(res => {
if (!res.code) {
this.mediationTemplateOptions = res.records;
}
})
},
//
handleNextStep(){
if(this.presentStep === 1){
this.$refs.ruleFormBase.validate((valid) => {
if (valid){this.presentStep++}
})
}else if(this.presentStep === 2){
this.$refs.ruleFormCreditor.validate((valid) => {
if (valid){
this.$refs.ruleFormObligor.validate((valid) => {
if (valid){this.presentStep++}
})
}
})
}else if(this.presentStep === 3){
this.$refs.ruleFormTemplate.validate((valid) => {
if (valid){this.presentStep++}
})
}else{
this.presentStep++
}
},
handleSubmit(){
if(!this.$clickThrottle()) { return }//
let data = {
...this.baseInfo,//
...this.creditorInfo,//
...this.obligorInfoForm,//
...this.queryParam,//
caseFileEntityList:this.fileList//
}
console.log('获取传给后台的信息',data)
api.addCaseInfo(data).then(res => {
this.presentStep++
this.$parent.getCaseInfoList(1)
this.$parent.getCaseCount()
})
},
//
handleUploadFile(fileList){
console.log('获取上传文件信息',fileList)
fileList = JSON.parse(JSON.stringify(fileList))
this.fileList = fileList.map((item,i) => {
return {
url: item.url,
fileName:item.fileName,
name:item.fileName
}
})
},
handleClose() {
this.$emit('update:addCaseDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-content{
padding: 16px 24px;
// max-height:500px
}
</style>

View File

@ -1,393 +0,0 @@
<template>
<div>
<el-dialog
:title="caseAllocationDialog.title"
:visible="true"
width="880px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<div class="dialog-content">
<div class="pb-16">
<el-row :gutter="20" type="flex" align="middle">
<el-col :span="24">
<div class="flex-row align-items-center">
<div class="mr-8 flex-shrink-0">区域</div>
<div class="width100">
<el-select v-model="deptId"
size="medium"
clearable placeholder="请选择区域"
@change="handleChangeDept"
class="width100">
<el-option
v-for="item in departmentOptions"
:key="item.id"
:label="item.name"
:value="item.id"
class="width100"
>
</el-option>
</el-select>
</div>
</div>
</el-col>
</el-row>
</div>
<el-scrollbar class="bor bg-color-light min-height350">
<div class="department-wrap">
<div v-for="(item,inx) in peopleList" :key="inx" class="department-wrap-list">
<div class="department-dept">
<el-checkbox v-model="checkedAll" :label="item.deptId" @change="handleCheckChange(1,inx,item,item.deptId,$event)">{{item.name}}({{item.count}})</el-checkbox>
</div>
<div class="flex-row justify-content-start flex-flow-wrap ">
<div v-for="(v,i) in item.values" :key="i" class="pt-16" style="flex:0 0 25%">
<el-checkbox v-model="checkedAll" :label="v.id" @change="handleCheckChange(2,inx,v,item.deptId,$event)">{{v.realName}}</el-checkbox>
</div>
</div>
</div>
</div>
</el-scrollbar>
<div class="p-v-24">
<el-form ref="ruleForm"
:model="queryParam"
:rules="rulesClient"
label-width="120px"
class="demo-ruleForm">
<el-row :gutter="20" type="flex" align="middle">
<el-col :span="24">
<el-form-item label="分配方式" prop="dispatchType" label-width="80px">
<template>
<el-radio v-model="queryParam.dispatchType" :label="1">平均分配</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="2">调解中案件量最少</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="3">当天分案量最少</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="4">当月分案量最少</el-radio>
<el-radio v-model="queryParam.dispatchType" :label="5">同案由调解成功率最高</el-radio>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button>
<el-button type="primary" @click="handleSubmit()">确认</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import api from "@/services/caseManagement";
import apipack from "@/services/casePackageManagement";
export default {
components: {
},
props: {
caseAllocationDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
deptId:[],//id
queryParam:{
id:'',//ID
dispatchType:1,//12345
},
userList:[],
rulesClient: {
dispatchType: [
{ required: true, message: '请选择分案方式', trigger: 'change',},
],
},
peopleList:[
{deptId:1,name:'调解一部',count:10,
values:[
{id:1,deptId:1,realName:'张三' },
{id:2,deptId:1,realName:'张三' },
{id:3,deptId:1,realName:'张三' },
{id:4,deptId:1,realName:'张三' },
{id:5,deptId:1,realName:'里面' },
]
}
],
departmentOptions:[],//
checkedAll:[],
chooseChecked:[],
};
},
mounted () {
// console.log(this.caseAllocationDialog.choosecaseIds,'choosecaseIds')
this.getDeptList();//
},
methods: {
//
getDeptList(){
let data = {
companyId: this.$store.state.userinfo.companyId,
current: 1,
size: 500,
pid:0
}
api.getDeptList(data).then(res => {
if (!res.code) {
this.departmentOptions = res.records;
this.deptId = this.departmentOptions[0].id
this.getByDeptList()
}
})
},
handleChangeDept(e){
this.checkedAll=[]
this.chooseChecked=[]
this.getByDeptList()
this.peopleList=[]
},
// id
getByDeptList(){
api.getDeptList({companyId:this.$store.state.userinfo.companyId,current:1,size:500,pid:this.deptId}).then(res => {
if (!res.code)
{
let deptList = []
res.records.forEach(item =>{
let userlist = []
api.getUserByDeptList({ids:[item.id]}).then(res => {
res.forEach(item =>{
userlist.push({
id:item.id,
realName:item.realName,
checked:false
})
})
})
deptList.push({
deptId:item.id,
name:item.name,
count:item.count,
checked:false,
values:userlist
})
})
this.peopleList = deptList
}
})
},
handleCheckChange(type,a=0,chooseItem,deptId,event){
// console.log(chooseItem,event,a,'this.peopleList')
let self = this
if(type==2){//
let index = 0;
self.peopleList[a].values.map((item)=>{
if(self.checkedAll.indexOf(item.id)>-1){
index+=1
}
})
if(index>0){
if(self.checkedAll.indexOf(self.peopleList[a].deptId)<0){
self.checkedAll.push(self.peopleList[a].deptId)
}
}else{
if(self.checkedAll.indexOf(self.peopleList[a].deptId)>0){
self.checkedAll.splice(self.checkedAll.indexOf(self.peopleList[a].deptId),1)
}
}
if(event)
{
if(this.chooseChecked.length==0){self.chooseChecked.push({deptId:deptId,child:[]})}
this.chooseChecked.forEach((item,index) => {
let haveDeptId = self.chooseChecked.find(citem=>{
return citem.deptId===deptId
})
if(haveDeptId != undefined)
{
if(item.deptId==deptId)
{
item.child.push({deptId:deptId,id:chooseItem.id,realName:chooseItem.realName})
}
}
else
{
self.chooseChecked.push({deptId:deptId,child:[{deptId:deptId,id:chooseItem.id,realName:chooseItem.realName}]})
}
});
}
else
{
this.chooseChecked.forEach((item,index) => {
item.child.forEach((itemchild,index) => {
if(itemchild.id==chooseItem.id)
{
item.child.splice(index,1)
}
});
});
}
let childnum = this.chooseChecked.find(item=>{
return item.deptId === deptId
}).child.length;
let allchildnum = this.peopleList.find(item=>{
return item.deptId === deptId
}).values.length;
if(childnum != allchildnum)
{
if(self.checkedAll.indexOf(deptId)>-1){
self.checkedAll.splice(self.checkedAll.indexOf(deptId),1)
}
}
else
{
if(self.checkedAll.indexOf(deptId)<0){
self.checkedAll.push(deptId)
}
}
}else{
if(self.checkedAll.indexOf(self.peopleList[a].deptId)>-1){
self.peopleList[a].values.map((item)=>{
if(self.checkedAll.findIndex((n)=> n==item.id)<0){
self.checkedAll.push(item.id)
// self.checkedAll.push({id:item.id,realName:item.realName,deptId:self.peopleList[a].deptId})
}
})
}else{
self.peopleList[a].values.map((item)=>{
if(self.checkedAll.findIndex((n)=> n==item.id)>-1){
self.checkedAll.splice(self.checkedAll.findIndex((n)=> n==item.id),1)
}
})
}
let haveDeptId=self.chooseChecked.find(citem=>{
return citem.deptId === deptId
})
if(event)
{
if(haveDeptId == undefined)
{
let addchild=[]
self.peopleList.forEach((item,index) => {
if(item.deptId==deptId)
{
item.values.forEach((item,index) => {
addchild.push({deptId:deptId,id:item.id,realName:item.realName})
});
}
});
self.chooseChecked.push({deptId:deptId,child:addchild})
}
}
else
{
if(haveDeptId != undefined)
{
self.chooseChecked.forEach((item,index) => {
if(item.deptId==deptId)
{
self.chooseChecked.splice(index,1)
}
});
}
}
}
// console.log(this.checkedAll,self.chooseChecked,'checkedAll')
},
handleSubmit(){
if(!this.$clickThrottle()) { return }//
let chooseUser=[]
this.chooseChecked.forEach((item,index) => {
item.child.forEach((item,index) => {
chooseUser.push({deptId:item.deptId,id:item.id,realName:item.realName})
});
});
if(chooseUser.length == 0)
{
this.$message({
showClose: true,
message: '请先选择调解员!',
type: 'warning'
});
return false
}
this.$refs.ruleForm.validate((valid) => {
if(valid) {
let data = {
id:this.caseAllocationDialog.ObjectInfo.id,
dispatchType:this.queryParam.dispatchType,
userList:chooseUser
}
apipack.postpkgdispatchCase(data).then(res => {
this.$message({
showClose: true,
message: '调解案件分配成功!',
type: 'success'
});
this.$parent.getCaseInfoList()
this.handleClose()
})
}
})
},
handleSearch(){
},
handleChangeDate(){
let planStart = new Date(this.queryParam.planStartTime);
let planEnd = new Date(this.queryParam.planEndTime);
if (planEnd < planStart) {
this.$message({
showClose: true,
message: '开始日期不能大于结束日期!',
type: 'warning'
});
this.queryParam.planEndTime=''
}
},
handleClose() {
this.$emit('update:caseAllocationDialog', 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

@ -1,836 +0,0 @@
<template>
<el-drawer
:title="editCaseDrawer.title"
:visible="true"
direction="rtl"
size="50%"
:before-close="handleClose"
>
<div class="">
<el-tabs v-model="activeName" @tab-click="handleClick" class="zd-el-tabs-custom zd-el-tabs-custom__left_padding">
<el-tab-pane label="基本信息" name="baseInfo">
<el-scrollbar class="bor">
<div class="" :style="{'height': `${drawerContentHeight}px`}">
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">基本信息</div>
<div class="p-h-24">
<el-form ref="ruleFormBase"
:model="baseInfo"
:rules="rulesClient"
label-width="150px"
class="demo-ruleForm">
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="金融机构名称" prop="financialOrgName">
<el-input
v-model.trim="baseInfo.financialOrgName"
placeholder="请输入金融机构名称"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社会统一信用代码" prop="financialOrgCode">
<el-input
v-model.trim="baseInfo.financialOrgCode"
placeholder="请输入社会统一信用代码"
clearable
maxlength="18"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="案件名称" prop="caseName">
<el-input
clearable
placeholder="请输入案件名称"
v-model="baseInfo.caseName" :disabled="caseStatus != 0">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="案件编号" prop="caseNo">
<el-input
clearable
placeholder="请输入案件编号"
:disabled="caseStatus != 0"
v-model="baseInfo.caseNo">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="金融产品类型" prop="productTypeId">
<el-select v-model="baseInfo.productTypeId"
clearable placeholder="请选择金融产品类型"
class="width100">
<el-option
v-for="item in financialProductsTypeOptions"
:key="item.code"
:label="item.codeName"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标的金额" prop="moneyAmount">
<el-input
clearable
placeholder="请输入内容"
v-model="baseInfo.moneyAmount">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="逾期次数" prop="overdueTimes">
<!-- <el-select v-model="baseInfo.overdueTimes"
clearable placeholder="请选择逾期次数"
class="width100">
<el-option
v-for="item in operateMethodOptions"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select> -->
<el-input-number v-model="baseInfo.overdueTimes" :min="0" :max="100" class="width100"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="案件描述" prop="caseDescr">
<el-input
clearable
placeholder="请输入内容"
v-model="baseInfo.caseDescr">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</div>
</el-scrollbar>
</el-tab-pane>
<el-tab-pane label="案件当事人" name="caseParty">
<el-scrollbar class="bor">
<div :style="{'height': `${drawerContentHeight}px`}">
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">案件当事人</div>
<div class="p-h-24">
<div class="border-solid-lighter-1 p-h-24 mb-16">
<div class="flex-row justify-content-between height-48 line-height-48 f14 border-b-solid-lighter-1 mb-16">
<div class="color-000">债权人</div>
<div class="color-text-regular cursor-pointer" @click="handleReset">清空<i class="el-icon-close"></i></div>
</div>
<el-form ref="ruleFormCreditor"
:model="creditorInfo"
:rules="rulesClientCreditor"
label-width="150px"
class="demo-ruleForm">
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="债权人" prop="creditorName">
<el-input
v-model.trim="creditorInfo.creditorName"
placeholder="请输入债权人"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社会统一信用代码" prop="creditorOrgCode">
<el-input
v-model.trim="creditorInfo.creditorOrgCode"
placeholder="请输入社会统一信用代码"
clearable
maxlength="18"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="法人姓名" prop="creditorLegal">
<el-input
clearable
placeholder="请输入法人姓名"
v-model="creditorInfo.creditorLegal">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="法人身份证号" prop="creditorIdcard">
<el-input
clearable
placeholder="请输入法人身份证号"
v-model="creditorInfo.creditorIdcard"
maxlength="18">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="法人手机号" prop="creditorPhone">
<el-input
clearable
placeholder="请输入法人手机号"
v-model="creditorInfo.creditorPhone"
maxlength="11"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="公司地址" prop="creditorAddr">
<el-input
clearable
placeholder="请输入公司地址"
v-model="creditorInfo.creditorAddr">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="邮编" prop="creditorMail">
<el-input
clearable
placeholder="请输入邮编"
v-model="creditorInfo.creditorMail"
maxlength="6"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="代理人" prop="creditorAgent">
<el-input
clearable
placeholder="请输入代理人"
v-model="creditorInfo.creditorAgent">
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="border-solid-lighter-1 p-h-24">
<div class="flex-row justify-content-between f14 border-b-solid-lighter-1 mb-8 p-v-8 align-items-center">
<div class="color-000">债务人</div>
<el-button size="small" type="primary" @click="handleAdd">新增债务人<i class="el-icon-plus"></i></el-button>
</div>
<div>
<el-form ref="ruleFormObligor"
:model="obligorInfoForm"
label-width="150px"
class="demo-ruleForm">
<div v-for="(item,inx) in obligorInfoForm.debtorEntityList" :key="inx">
<div class="flex-row justify-content-between align-items-center height-40 f14 mb-16">
<div class="color-text-primary">债务人{{inx+1}}</div>
<div class="color-text-regular cursor-pointer" @click="handleRemoveDomain(item)">删除<i class="el-icon-close"></i></div>
</div>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="债务人姓名" :prop="'debtorEntityList.' + inx + '.name'" :rules="{required: true, message: '请输入债权人姓名', trigger: 'blur'}">
<el-input
v-model.trim="obligorInfoForm.debtorEntityList[inx].name"
placeholder="请输入债务人姓名"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="证件类型" :prop="'debtorEntityList.' + inx + '.cardTypeId'" :rules="{required: true, message: '请选择证件类型', trigger: 'change'}">
<el-select v-model="obligorInfoForm.debtorEntityList[inx].cardTypeId"
clearable placeholder="请选择证件类型"
class="width100">
<el-option
v-for="item in idTypeOptions"
:key="item.code"
:label="item.codeName"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="证件号码" :prop="'debtorEntityList.' + inx + '.cardNo'"
:rules=" [
{ required: true, message: '请输入证件号', trigger: 'change',},
{ pattern: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/, message: '请输入正确的证件号', trigger: ['blur', 'change']}
]">
<el-input
clearable
placeholder="请输入证件号码"
v-model="obligorInfoForm.debtorEntityList[inx].cardNo"
maxlength="18"
>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" :prop="'debtorEntityList.' + inx + '.phone'" :rules="[
{ required: true, message: '请输入法人手机号', trigger: 'change',},
{ pattern: /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})|(19[0-9]{9})$/, message: '请输入正确的手机号码', trigger: ['blur', 'change']}
]">
<el-input
clearable
placeholder="请输入手机号码"
v-model="obligorInfoForm.debtorEntityList[inx].phone"
maxlength="11"
>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="地址" :prop="'debtorEntityList.' + inx + '.addr'" :rules="{ required: true, message: '请输入地址', trigger: 'change',}">
<el-input
clearable
placeholder="请输入地址"
v-model="obligorInfoForm.debtorEntityList[inx].addr">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="邮编" :prop="'debtorEntityList.' + inx + '.mail'" :rules="{ required: true, message: '请输入邮编', trigger: 'change',}">
<el-input
clearable
placeholder="请输入邮编"
v-model="obligorInfoForm.debtorEntityList[inx].mail"
maxlength="6">
</el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
</div>
</div>
</div>
</div>
</div>
</el-scrollbar>
</el-tab-pane>
<el-tab-pane label="模板选择" name="templateSelection">
<div :style="{'height': `${drawerContentHeight}px`}">
<el-form ref="ruleFormTemplate"
:model="queryParam"
:rules="rulesClientTemplate"
label-width="150px"
class="demo-ruleForm">
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">模板话术</div>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="话术模板" prop="tpSpeechcraftId">
<el-select v-model="queryParam.tpSpeechcraftId"
clearable placeholder="请选择模板话术"
class="width100">
<el-option
v-for="item in speechcraftTemplateOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
<div>
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">调解模板</div>
<el-row type="flex" align="middle">
<el-col :span="12">
<el-form-item label="调解模板" prop="tpMediateId">
<el-select v-model="queryParam.tpMediateId"
clearable placeholder="请选择调解模板"
class="width100">
<el-option
v-for="item in mediationTemplateOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
</div>
</el-tab-pane>
<el-tab-pane label="材料上传" name="materialUpload">
<div :style="{'height': `${drawerContentHeight}px`}">
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">证据材料</div>
<div class="p-h-24">
<upload-file-name :file-list="fileList" :max-count="20"
:show-file-name="true"
@handleUploadFile="handleUploadFile">
</upload-file-name>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="调解记录" name="mediationRecord">
<el-scrollbar class="bor">
<div :style="{'height': `${drawerContentHeight}px`}">
<div class="height-48 line-height-48 f18 color-000 m-v-16 p-h-24">调解记录</div>
<div class="p-h-24">
<div v-if="mediationRecord.length>0">
<div class="bg-color-light border-radius-4 p-24 mb-16" v-for="(item,inx) in mediationRecord" :key="inx">
<div class="f16 color-text-primary">{{item.createAt}}</div>
<div class="m-v-16" v-if="item.type==1">
{{item.content}}
</div>
<div class="audio_wrap m-v-16" v-else>
<audio :src="item.content.url" controls="controls" class="audio"></audio>
</div>
<!-- <div class="color-text-primary f14"><span class="color-text-regular">备注</span>继任人</div> -->
</div>
</div>
<el-empty description="暂无调解记录" v-else></el-empty>
</div>
</div>
</el-scrollbar>
</el-tab-pane>
</el-tabs>
<div class="flex-row justify-content-end p-16 border-t-solid-lighter-1">
<div>
<el-button @click="handleClose"> </el-button>
<el-button type="primary" @click="handleSubmit">保存</el-button>
</div>
</div>
</div>
</el-drawer>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
uploadFileName: () => import('@/components/uploadFileName.vue'),//
},
props: {
editCaseDrawer: {
type: Object,
default: () => {
return {}
},
},
},
data() {
const moneyAmountValidate = (rule,value,callback)=>{
if (!value){
callback(new Error('请输入标的金额'));
}else if (!/^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/.test(value)){
callback(new Error('只能输入两位小数的金额!'));
}else if(!(0<parseInt(value)&&parseInt(value)<100000000)){
callback(new Error('只能输入大于1小于1亿的金额!'));
}else{
callback()
}
};
return {
caseStatus:0,
activeName:'baseInfo',
//------------------------------------------------------
baseInfo:{
financialOrgName:'',//
financialOrgCode:'',//
caseName:'',//
caseNo:'',//
productTypeId:'',//
moneyAmount:'',//
overdueTimes:0,//
caseDescr:'',//
},
rulesClient: {
financialOrgName: [
{ required: true, message: '请输入机构名称', trigger: 'change',},
],
financialOrgCode: [
{ required: true, message: '请输入社会统一信用代码', trigger: 'change',},
],
caseName: [
{ required: true, message: '请输入案件名称', trigger: 'change',},
],
caseNo: [
{ required: true, message: '请输入案件编号', trigger: 'change',},
],
productTypeId: [
{ required: true, message: '请选择金融产品类型', trigger: 'change',},
],
moneyAmount: [
{ required: true, validator: moneyAmountValidate, trigger: 'change',},
],
caseDescr:[
{ required: true, message: '请输入案件描述', trigger: 'change',},
]
},
financialProductsTypeOptions:[],//
//-----------------------------------------------
//
creditorInfo:{
creditorName:'',//
creditorOrgCode:'',//
creditorLegal:'',//
creditorIdcard:'',//
creditorPhone:'',//
creditorAddr:'',//
creditorMail:'',//
creditorAgent:'',//
},
rulesClientCreditor: {
creditorName: [
{ required: true, message: '请输入债权人', trigger: 'change',},
],
creditorOrgCode: [
{ required: true, message: '请输入债权人机构代码', trigger: 'change',},
],
creditorLegal: [
{ required: true, message: '请输入法人', trigger: 'change',},
],
creditorIdcard: [
{ required: true, message: '请输入法人身份证号', trigger: 'change',},
{ pattern: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/, message: '请输入正确的身份证号', trigger: ['blur', 'change']}
],
creditorPhone: [
{ required: true, message: '请输入法人手机号', trigger: 'change',},
{ pattern: /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})|(19[0-9]{9})$/, message: '请输入正确的手机号码', trigger: ['blur', 'change']}
],
creditorAddr: [
{ required: true, message: '请输入公司地址', trigger: 'change',},
],
// creditorAgent: [
// { required: true, message: '', trigger: 'change',},
// ],
},
//
idTypeOptions:[],
obligorInfoForm:{
debtorEntityList:[
{
name:'',//
phone:'',//
cardTypeId:'',//
addr:'',//
cardNo:'',//
mail:'',//
}
],
},
obligorRulesClient:{
name: [
{ required: true, message: '请输入债务人姓名', trigger: 'change',},
],
phone: [
{ required: true, message: '请输入法人手机号', trigger: 'change',},
{ pattern: /^(13[0-9]{9})|(18[0-9]{9})|(14[0-9]{9})|(17[0-9]{9})|(15[0-9]{9})|(19[0-9]{9})$/, message: '请输入正确的手机号码', trigger: ['blur', 'change']}
],
cardTypeId: [
{ required: true, message: '请选择证件类型', trigger: 'change',},
],
addr: [
{ required: true, message: '请输入地址', trigger: 'change',},
],
cardNo: [
{ required: true, message: '请输入证件号', trigger: 'change',},
{ pattern: /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/, message: '请输入正确的身份证号', trigger: ['blur', 'change']}
],
mail: [
{ required: true, message: '请输入邮编', trigger: 'change',},
{ pattern: /^\d{6}$/, message: '请输入正确的邮编', trigger: ['blur', 'change']}
],
},
fileList:[],//
//------------------------------------------------------
speechcraftTemplateOptions:[],//
mediationTemplateOptions:[],//
queryParam:{
tpMediateId:'',//id
tpSpeechcraftId:'',//
},
rulesClientTemplate:{
tpMediateId: [
{ required: true, message: '请选择调解模板', trigger: 'change',},
],
tpSpeechcraftId: [
{ required: true, message: '请选择话术模板', trigger: 'change',},
],
},
caseId:'',//id
mediationRecord:[],//
currentPage:'',//
};
},
async created() {
this.getDict();//
this.getDictIdType();//
this.getTemplateList();//
this.getSpeechcraftTemplateList(),//
this.currentPage = this.editCaseDrawer.currentPage
console.log('父级页面当前页数',this.currentPage)
this.caseId = this.editCaseDrawer.data.id
this.getCaseInfoById();//
console.log('获取基本信息',this.baseInfo)
},
computed:{
// drawer
drawerContentHeight(){
let oh = document.documentElement.clientHeight;
return oh-200
}
},
methods: {
//
getDict(){
let data = {
type:'financial'
}
api.getDict(data).then(res => {
if (!res.code) {
this.financialProductsTypeOptions = res;
}
})
},
//
getDictIdType(){
let data = {
type:'certificates'
}
api.getDict(data).then(res => {
if (!res.code) {
this.idTypeOptions = res;
}
})
},
//
handleAdd(){
this.obligorInfoForm.debtorEntityList.push({
name:'',//
phone:'',//
cardTypeId:'',//
addr:'',//
cardNo:'',//
mail:'',//
});
},
//
handleRemoveDomain(item) {
var index = this.obligorInfoForm.debtorEntityList.indexOf(item)
if (index !== -1) {
this.obligorInfoForm.debtorEntityList.splice(index, 1)
}
},
//
handleReset(){
for (let key in this.creditorInfo) {
this.creditorInfo[key] = ''
}
},
// tab
handleClick(tab, event) {
// console.log(tab, event);
//
// if(tab.name ==='mediationRecord'){
// this.showButton = false
// }else{
// this.showButton = true
// }
},
//
getSpeechcraftTemplateList(){
let data = {
current: 1,
name: "",
size: 300,
type: 2,
}
api.getTemplateList(data).then(res => {
if (!res.code) {
this.speechcraftTemplateOptions = res.records;
}
})
},
//
getTemplateList(){
let data = {
current: 1,
name: "",
size: 300,
type: 1,
}
api.getTemplateList(data).then(res => {
if (!res.code) {
this.mediationTemplateOptions = res.records;
// console.log('1111',this.mediationTemplateOptions)
}
})
},
submitFormData(type){
},
handleUploadFile(fileList){
fileList = JSON.parse(JSON.stringify(fileList))
this.fileList = fileList.map((item,i) => {
return {
url: item.url,
fileName:item.fileName,
name:item.fileName
}
})
// console.log('',this.fileList)
},
//
getCaseInfoById(){
let _that = this
api.getCaseInfoById(this.caseId).then(res => {
if(!res.code){
_that.caseStatus=res.caseStatus
//
_that.baseInfo = {
financialOrgName:res.financialOrgName,//
financialOrgCode:res.financialOrgCode,//
caseName:res.caseName,//
caseNo:res.caseNo,//
productTypeId:res.productTypeId,//
moneyAmount:res.moneyAmount,//
overdueTimes:res.overdueTimes,//
caseDescr:res.caseDescr,//
};
console.log('基本信息',_that.baseInfo)
//
//
_that.obligorInfoForm ={
debtorEntityList:res.debtorEntityList
}
// this.obligorInfo = res.debtorEntityList
console.log('债务人',_that.obligorInfoForm)
//
_that.creditorInfo = {
creditorName:res.creditorName,//
creditorOrgCode:res.creditorOrgCode,//
creditorLegal:res.creditorLegal,//
creditorIdcard:res.creditorIdcard,//
creditorPhone:res.creditorPhone,//
creditorAddr:res.creditorAddr,//
creditorMail:res.creditorMail,//
creditorAgent:res.creditorAgent,//
};
//
this.mediationRecord = res.logEntityList
//
_that.queryParam = {
tpMediateId:String(res.tpMediateId),//id
tpSpeechcraftId:String(res.tpSpeechcraftId),//
};
//
// console.log('',res.caseFileEntityList)
let caseFileEntityList = []
res.caseFileEntityList.forEach((item)=>{
caseFileEntityList.push({name:item.name,fileName:item.name,url:item.url})
})
_that.fileList = caseFileEntityList
}
})
},
//
handleSubmit(){
let data = {
id:this.caseId,
...this.baseInfo,//
...this.creditorInfo,//
...this.obligorInfoForm,//
...this.queryParam,//
caseFileEntityList:this.fileList//
}
let formValidates = [
this.$refs["ruleFormBase"].validate(),
this.$refs["ruleFormCreditor"].validate(),
this.$refs["ruleFormObligor"].validate(),
this.$refs["ruleFormTemplate"].validate(),
]
if(!this.$clickThrottle()) { return }//
Promise.all(formValidates).then(()=>{
api.updateCaseInfoById(data).then(res => {
this.$message.success("编辑成功");
this.$parent.getCaseInfoList(this.currentPage)
this.handleClose()
})
}).catch(()=>{
this.$message({ message: '请检查必填项是否填完', type: "warning",customClass:'messageZindex'});
// console.log('')
})
},
checkForm(formName) {
return new Promise((resolve, reject) => {
this.$refs[formName].validate(valid => {
if (valid) {
resolve();
} else reject();
});
});
},
handleClose() {
this.$emit('update:editCaseDrawer', null)
},
}
};
</script>
<style scoped lang="scss">
.audio_wrap{
width: 330px;
height: 40px;
.audio{
width: 100%;
height: 100%;
}
}
</style>

View File

@ -1,101 +0,0 @@
<template>
<div>
<el-dialog
:title="importCaseDialog.title"
:visible="true"
width="480px"
append-to-body
:close-on-click-modal="false"
@close="handleClose"
>
<div class="dialog-content">
<upload-import :file-list="fileList" :max-count="1"
:show-file-name="true"
accept=".xls,.xlsx"
@handleUploadFile="handleUploadFile"
@handleImport="handleImport">
</upload-import>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose()">取消</el-button>
<el-button @click="handleDownload()">下载</el-button>
<el-button type="primary" @click="handleSubmit()">确认</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import api from "@/services/caseManagement";
export default {
components: {
uploadImport:() => import('@/components/uploadImport.vue'),//
},
props: {
importCaseDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
fileList:[],
};
},
mounted () {
},
methods: {
handleUploadFile(fileList){
console.log('获取上传文件信息',fileList)
fileList = JSON.parse(JSON.stringify(fileList))
this.fileList = fileList.map((item,i) => {
let time = this.$util.getTimestamp()
let fileType = this.$util.getFileExtension(item.url)
let fileName = `${time}.${fileType}`
return {
url: item.url,
fileName:fileName,
}
})
},
handleImport(file){
let formdata = new FormData();
formdata.append("file", file)
console.log(formdata)
api.getImportCase(formdata).then(res => {
this.$parent.getCaseInfoList(1)
this.$message.success("导入成功");
})
},
handleSubmit(){
if(!this.$clickThrottle()) { return }//
this.handleClose()
},
//
handleDownload(){
if(!this.$clickThrottle()) { return }//
api.getExportTemplate({}).then(res => {
this.$util.downloadFileByBlob(res.data, '案件.xlsx')
})
},
handleClose() {
this.$emit('update:importCaseDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-content{
padding: 16px 64px;
max-height:500px
}
</style>

View File

@ -251,9 +251,15 @@ import smapi from "@/services/systemManage";
jumpUrl (url) {
this.$router.push(url);
},
handleCaseShow(scope){
this.fileDialog = {showfile:{url:scope.row.proofUrl},filelist:[]}
async handleCaseShow(scope){
let previewUrl = await this.getProofFile(scope.row.proofUrl)
this.fileDialog = {showfile:{url:previewUrl},filelist:[]}
},
async getProofFile(url){
let previewUrl = await this.$fetchApi.viewFullFile({path: url})
return previewUrl
},
UpdateClick(scope){
this.UpdateDialog = scope.row
this.UpdateDialog.paybackTime = scope.row.actualPayDate