This commit is contained in:
liuxi 2024-12-17 16:40:57 +08:00
parent cb54b45446
commit b7caade18c
8 changed files with 624 additions and 7 deletions

View File

@ -64,7 +64,7 @@
<el-table-column prop="pkgName" label="案件包名称" show-overflow-tooltip ></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="channel" label="发送失败" show-overflow-tooltip ></el-table-column>

View File

@ -64,7 +64,7 @@
<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="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>

View File

@ -0,0 +1,115 @@
<template>
<div>
<el-dialog title="批量发送短信" :visible="true" width="600px" append-to-body :close-on-click-modal="false"
@close="handleClose">
<div class="dialog-content dialog-case-batch">
<div class="pt-8">
<div class="flex-row align-items-center justify-content-between mb-24 case-batch-num">
<span>选中<a>{{eventTraDialog.caseids.length}}</a>个案件系统将对您选择中案件进行批量发送短信</span>
</div>
<el-collapse-transition>
<el-row :gutter="56">
<el-col :span="24">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">短信模板</span>
<el-select v-model="ObjectInfo.methodId"
placeholder="请选择还款方式"
class="width100" @change="smsChange">
<el-option
v-for="item in smsOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
</el-col>
<el-col :span="24">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">短信接收方</span>
<el-input v-model.trim="ObjectInfo.users"
clearable placeholder="请输入" disabled>
</el-input>
</div>
</el-col>
<el-col :span="24">
<div class="flex-row-center align-items-center mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">模板内容</span>
<el-input class="mt-8" type="textarea" v-model="ObjectInfo.content" :rows="4" disabled></el-input>
</div>
</el-col>
</el-row>
</el-collapse-transition>
</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";
export default {
components: {
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
smsOptions:[{label:'案件受理通知',value:'1',users:'由被申请方接收',content:'【${signName}】您与${applyName}的${issueType}已由我中心受理调解,后续我方将组织双方共同进行调解,请您关注后续电话或者短信通知'},
{label:'还款计划通知',value:'2',users:'由被申请方接收',content:'【${signName}】您与${applyName}的${issueType}经调解已经达成初步的方案及还款计划,您可以通过如下链接查看${smallProLink}。或者您也可以直接通过搜索微信小程序“保融通调解”进入“还款记录登记”模块进行查看。'}],
ObjectInfo:{
methodId:'',
users:'',
content:''
},
tableData:[],
total:0,
};
},
mounted () {
},
methods: {
smsChange(){
let jsonData = this.smsOptions.find(item=>{
return this.ObjectInfo.methodId == item.value
})
this.ObjectInfo.users = jsonData.users
this.ObjectInfo.content = jsonData.content
},
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-case-batch{
padding: 16px 30px;
max-height:500px;
.tabs__search-criteria-title{
width: 100px;
}
.case-batch-num{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 15px 20px;
border-radius: 4px;
a{font-size: 16px;font-weight: 500;color: #C66A5B;}
}
}
</style>

View File

@ -0,0 +1,107 @@
<template>
<div>
<el-dialog title="批量文书送达" :visible="true" width="600px" append-to-body :close-on-click-modal="false"
@close="handleClose">
<div class="dialog-content dialog-office-batch">
<div class="pt-8">
<div class="flex-row align-items-center justify-content-between mb-16 case-batch-num">
<span>选中<a>{{eventTraDialog.caseids.length}}</a>个案件系统将对您选择的案件进行批量电子短信送达</span>
</div>
<el-collapse-transition>
<el-row :gutter="56">
<el-col :span="24">
<div class="flex-row-center align-items-center height-40 mb-8">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16 f18">选择文书类型多选</span>
</div>
</el-col>
<el-col :span="24">
<div class="mb-24 officelist">
<el-checkbox-group v-model="ObjectInfo.methodIds">
<el-checkbox border v-for="(item,index) in officeOptions" :label="item.label" :key="index" ></el-checkbox>
</el-checkbox-group>
</div>
</el-col>
</el-row>
</el-collapse-transition>
</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";
export default {
components: {
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
officeOptions:[{label:'调解告知书',value:'1'},{label:'调解申请书',value:'2'},
{label:'送达地址确认书',value:'3'},{label:'调解笔录',value:'4'},{label:'调解协议',value:'5'}],
ObjectInfo:{
methodIds:['调解告知书','调解申请书','送达地址确认书','调解笔录','调解协议'],
users:'',
content:''
},
tableData:[],
total:0,
};
},
mounted () {
},
methods: {
smsChange(){
let jsonData = this.smsOptions.find(item=>{
return this.ObjectInfo.methodId == item.value
})
this.ObjectInfo.users = jsonData.users
this.ObjectInfo.content = jsonData.content
},
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-office-batch{
padding: 16px 30px;
max-height:500px;
.tabs__search-criteria-title{
width: 100%;
}
.case-batch-num{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 15px 20px;
border-radius: 4px;
a{font-size: 16px;font-weight: 500;color: #C66A5B;}
}
.officelist{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 20px 20px;
.el-checkbox
{
width: 230px;
margin: 10px;
}
}
}
</style>

View File

@ -0,0 +1,109 @@
<template>
<div>
<el-dialog title="批量文书生成" :visible="true" width="600px" append-to-body :close-on-click-modal="false"
@close="handleClose">
<div class="dialog-content dialog-office-batch">
<div class="pt-8">
<div class="flex-row align-items-center justify-content-between mb-16 case-batch-num">
<span>选中<a>{{eventTraDialog.caseids.length}}</a>个案件数据量大时生成文书需要较长时间请您耐心等待</span>
</div>
<el-collapse-transition>
<el-row :gutter="56">
<el-col :span="24">
<div class="flex-row-center align-items-center height-40 mb-8">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16 f18">选择文书生成模板多选</span>
</div>
</el-col>
<el-col :span="24">
<div class="mb-24 officelist">
<el-checkbox-group v-model="ObjectInfo.methodIds">
<el-checkbox border v-for="(item,index) in officeOptions" :label="item.label" :key="index" ></el-checkbox>
</el-checkbox-group>
</div>
</el-col>
</el-row>
</el-collapse-transition>
</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";
export default {
components: {
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
officeOptions:[{label:'调解告知书',value:'1'},{label:'调解申请书',value:'2'},
{label:'送达地址确认书',value:'3'},{label:'调解笔录',value:'4'},{label:'调解协议',value:'5'}],
ObjectInfo:{
methodIds:['调解告知书','调解申请书','送达地址确认书'],
users:'',
content:''
},
tableData:[],
total:0,
};
},
mounted () {
},
methods: {
smsChange(){
let jsonData = this.smsOptions.find(item=>{
return this.ObjectInfo.methodId == item.value
})
this.ObjectInfo.users = jsonData.users
this.ObjectInfo.content = jsonData.content
},
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-office-batch{
padding: 16px 30px;
max-height:500px;
.tabs__search-criteria-title{
width: 100%;
}
.case-batch-num{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 15px 20px;
border-radius: 4px;
a{font-size: 16px;font-weight: 500;color: #C66A5B;}
}
.officelist{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 20px 20px;
.el-checkbox
{
width: 230px;
margin: 10px;
}
}
}
</style>

View File

@ -0,0 +1,110 @@
<template>
<div>
<el-dialog title="批量文书签章" :visible="true" width="600px" append-to-body :close-on-click-modal="false"
@close="handleClose">
<div class="dialog-content dialog-office-batch">
<div class="pt-8">
<div class="flex-row align-items-center justify-content-between mb-16 case-batch-num">
<span>选中<a>{{eventTraDialog.caseids.length}}</a>个案件系统将对您选择的案件中符合签字条件已经完成在线签字的调解协议文书发起批量电子签章</span>
</div>
<el-collapse-transition>
<el-row :gutter="56">
<el-col :span="24">
<div class="flex-row-center align-items-center height-40 mb-8">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16 f18">设置是否进行文书的自动送达</span>
</div>
</el-col>
<el-col :span="24">
<div class="mb-24 officelist">
<el-radio-group v-model="ObjectInfo.delivery">
<el-radio label="1" border>自动送达</el-radio>
<el-radio label="2" border>不自动送达可单独发起送达</el-radio>
</el-radio-group>
</div>
</el-col>
</el-row>
</el-collapse-transition>
</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";
export default {
components: {
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
officeOptions:[{label:'调解告知书',value:'1'},{label:'调解申请书',value:'2'},
{label:'送达地址确认书',value:'3'},{label:'调解笔录',value:'4'},{label:'调解协议',value:'5'}],
ObjectInfo:{
methodIds:['调解告知书','调解申请书','送达地址确认书'],
users:'',
content:''
},
tableData:[],
total:0,
};
},
mounted () {
},
methods: {
smsChange(){
let jsonData = this.smsOptions.find(item=>{
return this.ObjectInfo.methodId == item.value
})
this.ObjectInfo.users = jsonData.users
this.ObjectInfo.content = jsonData.content
},
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-office-batch{
padding: 16px 30px;
max-height:500px;
.tabs__search-criteria-title{
width: 100%;
}
.case-batch-num{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 15px 20px;
border-radius: 4px;
a{font-size: 16px;font-weight: 500;color: #C66A5B;}
}
.officelist{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 20px 20px;
.el-radio
{
width: 230px;
margin: 10px;
}
}
}
</style>

View File

@ -0,0 +1,122 @@
<template>
<div>
<el-dialog title="批量文书签字" :visible="true" width="600px" append-to-body :close-on-click-modal="false"
@close="handleClose">
<div class="dialog-content dialog-office-batch">
<div class="pt-8">
<div class="flex-row align-items-center justify-content-between mb-16 case-batch-num">
<span>选中<a>{{eventTraDialog.caseids.length}}</a>个案件系统将对您选择的案件中符合签字条件已经完成文书生成的文书发起批量电子签字</span>
</div>
<el-collapse-transition>
<el-row :gutter="56">
<el-col :span="24">
<div class="flex-row-center align-items-center height-40 mb-8">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16 f18">选择文书类型多选</span>
</div>
</el-col>
<el-col :span="24">
<div class="mb-24 officelist">
<el-checkbox-group v-model="ObjectInfo.methodIds">
<el-checkbox border v-for="(item,index) in officeOptions" :label="item.label" :key="index" ></el-checkbox>
</el-checkbox-group>
</div>
</el-col>
<el-col :span="24">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16" style="width:100px">签字有效时间</span>
<el-select v-model="ObjectInfo.methodId"
placeholder="请选择签字有效期限" class="width100">
<el-option label="1天" value="1"></el-option>
<el-option label="2天" value="2"></el-option>
<el-option label="3天" value="3"></el-option>
<el-option label="4天" value="4"></el-option>
<el-option label="5天" value="5"></el-option>
</el-select>
</div>
</el-col>
</el-row>
</el-collapse-transition>
</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";
export default {
components: {
},
props: {
eventTraDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
officeOptions:[{label:'调解告知书',value:'1'},{label:'调解申请书',value:'2'},
{label:'送达地址确认书',value:'3'},{label:'调解笔录',value:'4'},{label:'调解协议',value:'5'}],
ObjectInfo:{
methodIds:['调解告知书','调解申请书','送达地址确认书'],
users:'',
content:''
},
tableData:[],
total:0,
};
},
mounted () {
},
methods: {
smsChange(){
let jsonData = this.smsOptions.find(item=>{
return this.ObjectInfo.methodId == item.value
})
this.ObjectInfo.users = jsonData.users
this.ObjectInfo.content = jsonData.content
},
handleClose() {
this.$emit('update:eventTraDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-office-batch{
padding: 16px 30px;
max-height:500px;
.tabs__search-criteria-title{
width: 100%;
}
.case-batch-num{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 15px 20px;
border-radius: 4px;
a{font-size: 16px;font-weight: 500;color: #C66A5B;}
}
.officelist{
background-color: rgba(236, 238, 241, 0.8196078431);
padding: 20px 20px;
.el-checkbox
{
width: 230px;
margin: 10px;
}
}
}
</style>

View File

@ -182,6 +182,22 @@
</el-input>
</div>
</el-col>
<el-col :span="6">
<div class="flex-row-center align-items-center height-40 mb-24">
<span class="tabs__search-criteria-title flex-shrink-0 pr-16">跟进状态</span>
<el-select v-model="queryParam.FollowStatus"
clearable placeholder="请选择跟进状态"
@keydown.enter.native="handleSearch"
class="width100">
<el-option
v-for="item in FollowStatusEnum"
:key="item.label"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
</el-col>
</el-row>
<el-row :gutter="56">
<el-col :span="18">
@ -219,12 +235,12 @@
<div class="f22 color-text-primary">案件列表</div>
<div class="flex-row">
<el-button size="small" @click="handleAddForm">案件办结</el-button>
<el-button size="small" @click="handleAddForm">发送短信</el-button>
<el-button size="small" @click="handleSMSSend">发送短信</el-button>
<el-button size="small" @click="handleAddForm">智能外呼</el-button>
<el-button size="small" @click="handleAddForm">文书生成</el-button>
<el-button size="small" @click="handleAddForm">发起签字</el-button>
<el-button size="small" @click="handleAddForm">发起签章</el-button>
<el-button size="small" @click="handleAddForm">文书送达</el-button>
<el-button size="small" @click="handleOffice">文书生成</el-button>
<el-button size="small" @click="handleOfficeWrite">发起签字</el-button>
<el-button size="small" @click="handleOfficeSeal">发起签章</el-button>
<el-button size="small" @click="handleOfficeDelivery">文书送达</el-button>
<el-button size="small" @click="handleCaseAllocation">案件下载</el-button>
</div>
</div>
@ -358,6 +374,16 @@
<!-- 各种案件追踪记录 -->
<CaseTraceDialog v-if="CaseTraceDialog" :eventTraDialog.sync="CaseTraceDialog" />
<!-- 批量发送短信 -->
<batchSMSDialog v-if="smsIdsDialog" :eventTraDialog.sync="smsIdsDialog" />
<!-- 批量文书生成 -->
<batchofficeDialog v-if="officeIdsDialog" :eventTraDialog.sync="officeIdsDialog" />
<!-- 批量文书签字 -->
<batchofficeWDialog v-if="officeWriteIdsDialog" :eventTraDialog.sync="officeWriteIdsDialog" />
<!-- 批量文书签章 -->
<batchofficeSealDialog v-if="officeSealIdsDialog" :eventTraDialog.sync="officeSealIdsDialog" />
<!-- 批量文书签章 -->
<batchofficeDeliveryDialog v-if="officeDeliveryIdsDialog" :eventTraDialog.sync="officeDeliveryIdsDialog" />
</div>
</template>
<script>
@ -368,9 +394,19 @@ import { values } from "lodash";
// addCaseDialog: () => import('./components/addCaseDialog'),//
// editCaseDrawer: () => import('./components/editCaseDrawer'),//
CaseTraceDialog: () => import('../case-management/components/CaseTraceDialog.vue'),//
batchSMSDialog: () => import('./components/batchSMSDialog'),//
batchofficeDialog: () => import('./components/batchofficeDialog'),//
batchofficeWDialog: () => import('./components/batchofficeWDialog'),//
batchofficeSealDialog: () => import('./components/batchofficeSealDialog'),//
batchofficeDeliveryDialog: () => import('./components/batchofficeDeliveryDialog'),//
},
data() {
return {
officeDeliveryIdsDialog:null,//
officeSealIdsDialog:null,//
officeWriteIdsDialog:null,//
smsIdsDialog:null,//
officeIdsDialog:null,//
isCheck: false,//
indeterminate: false,//selectionDatalength 0 < selectionData.length < enabledDataList.length true
selectionData: [],//
@ -389,6 +425,8 @@ import { values } from "lodash";
//
MediateStatusEnum:[{label:'未触达',value:0},{label:'调解中',value:1},{label:'已达成方案',value:2},
{label:'已签署协议',value:3},{label:'调解失败',value:4},{label:'调解成功',value:5}],
FollowStatusEnum:[{label:'今日待跟进案件',value:1},{label:'超3天未跟进案件',value:3},{label:'超5天未跟进案件',value:5},
{label:'新案未跟进案件',value:0}],
showSearch: true,
queryDate: '',
activeUsage: '',
@ -468,6 +506,21 @@ import { values } from "lodash";
}
},
methods: {
handleOfficeDelivery(){
this.officeDeliveryIdsDialog={titile:'批量文书送达',caseids:this.selectionData}
},
handleOfficeSeal(){
this.officeSealIdsDialog={titile:'批量文书签章',caseids:this.selectionData}
},
handleOfficeWrite(){
this.officeWriteIdsDialog={titile:'批量文书签字',caseids:this.selectionData}
},
handleOffice(){
this.officeIdsDialog={titile:'批量文书生成',caseids:this.selectionData}
},
handleSMSSend(){
this.smsIdsDialog={titile:'批量发送短信',caseids:this.selectionData}
},
// tab
handleTabClick(tab){
if(tab.name == 'mediate'){
@ -493,6 +546,7 @@ import { values } from "lodash";
this.selectionData = value ? this.enabledDataList.map(el=>el.id) : [];
this.indeterminate = false;
console.log(this.selectionData,'his.selectionData')
},
//