文件材料相关

This commit is contained in:
liuxi 2024-12-31 15:57:12 +08:00
parent 096334862b
commit 29d6b89210
9 changed files with 674 additions and 40 deletions

View File

@ -57,7 +57,6 @@ import api from "@/services/caseManagement";
},
methods: {
getShowFileType(url){
console.log(this.$util.getFileType(url),'v')
if(this.$util.getFileType(url) === 'image') {
//
this.fileType = 'image'

View File

@ -292,25 +292,18 @@
<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-label f-weight500 f16">案件材料<a @click="caseFileVisible={caseId:caseId}"><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="materialType" label="材料类型" show-overflow-tooltip></el-table-column>
<el-table-column prop="name" label="文件名称" show-overflow-tooltip></el-table-column>
<el-table-column prop="createBy" 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="handleCaseDelete(scope)">删除</el-button>
<el-button size="mini" @click="handleCaseShow(scope,fileList)">查看</el-button>
</div>
</template>
@ -366,21 +359,29 @@
<CaseTraceDialog v-if="CaseTraceDialog" :eventTraDialog.sync="CaseTraceDialog"/>
<!-- 文件预览 -->
<showFile v-if="fileDialog" :fileDialog.sync="fileDialog"/>
<!-- 案件材料上传 -->
<caseFileDialog v-if="caseFileVisible" :eventDialog.sync="caseFileVisible"/>
</div>
</template>
<script>
import api from "@/services/caseManagement";
import contactPerson from "@/services/contactPerson";
import {stubString} from "lodash";
import {subtract} from "lodash";
import cmapi from "@/services/caseMaterial";
// import {stubString} from "lodash";
// import {subtract} from "lodash";
export default {
components: {
showFile: () => import('../../../components/showFile.vue'),//
CaseTraceDialog: () => import('../components/CaseTraceDialog.vue'),//
caseFileDialog: () => import('../../mediation-page/components/caseFileDialog'),//
},
data() {
return {
caseFileVisible:null,
CaseTraceDialog: null,
fileDialog: null,
eventTraDialog: null,
@ -458,27 +459,51 @@ export default {
if (item != undefined) return item.label
return '-'
},
//
handleCaseDelete(scope){
this.$confirm("请确定是否删除这些数据?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(!this.$clickThrottle()) { return }//
cmapi.deleteCaseFileById({id:scope.row.id}).then((res) => {
this.$message.success("成功");
this.getFileCaseList()
});
}).catch(() => {});
},
handleCaseShow(scope, filelist) {
if (filelist == undefined) {
this.fileDialog = {showfile: {url: scope.row.proofUrl}, filelist: []}
} else {
// this.fileDialog = {showfile: {url: scope.row.url}, filelist: []}
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
}
})
if(datalist!=undefined)
{
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)};
return {cardNo: datacardno.substring(0, len), phone: dataphone.substring(0, len)};
}
else
{
return ''
}
},
//
getCaseInfoById() {
@ -487,22 +512,25 @@ export default {
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.getFileCaseList()
this.getLitigantByCaseId()
this.getplanlist()
this.getProofList()
},
//
getFileCaseList() {
cmapi.getCaseFileList({caseId:this.caseId}).then(res => {
if (!res.code) {
this.fileList = res.records
_that.fileList = res.caseFileEntityList
}
})
},
getLitigantByCaseId() {
let dataJson = {
size: 9999,

View File

@ -0,0 +1,238 @@
<template>
<div>
<el-dialog
:title="importCaseDialog.title"
:visible="true"
width="580px"
append-to-body
:close-on-click-modal="false"
@close="handleClose">
<!-- 基本信息 -->
<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" class="mt-16">
<el-col :span="24">
<el-form-item label="案件包名" prop="pkgName">
<el-select v-model="baseInfo.pkgid" placeholder="请选择案件包"
class="width100" @change="pkgChange">
<el-option
v-for="item in CasepackageList"
:key="item.id"
:label="item.pkgName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="委案机构" prop="entrustingAgencyName">
<el-input
v-model.trim="baseInfo.entrustingAgencyName"
placeholder="请输入委案机构"
disabled
maxlength="25"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="委案渠道" prop="channel">
<el-input
v-model.trim="baseInfo.channel"
placeholder="请输入委案渠道"
maxlength="25"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="委案日期" prop="planStartTime">
<el-date-picker class="width100"
disabled
v-model="baseInfo.planStartTime"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择委案日期">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="委案期限(月)" prop="months">
<el-input-number v-model="baseInfo.months" disabled :min="0" :max="100" class="width100"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" align="middle">
<el-col :span="24">
<el-form-item label="上传文件" prop="fileInfo">
<upload-import :file-list="fileList" :max-count="1"
:show-file-name="true"
accept=".xls,.xlsx"
@handleUploadFile="handleUploadFile">
</upload-import>
</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 apipk from "@/services/casePackageManagement";
export default {
components: {
uploadImport:() => import('@/components/uploadImportPackage.vue'),//
},
props: {
importCaseDialog: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
baseInfo:{
pkgid:'',
pkgName:'',//
entrustingAgencyName:'',//
planStartTime:'',//
months:1,//
fileInfo:null,
channel:'',
},
rulesClient: {
pkgName: [
{ required: true, message: '请输入案件包名', trigger: 'change',},
],
planStartTime: [
{ required: true, message: '请输入委案时间', trigger: 'change',},
],
months: [
{ required: true, message: '请输入委案期限', trigger: 'change',},
],
channel: [
{ required: true, message: '请输入委案渠道', trigger: 'change',},
],
fileInfo: [
{ required: true, message: '请上传文件', trigger: 'change',},
],
},
financialProductsTypeOptions:[],//
fileList:[],//
CasepackageList:[]
};
},
mounted () {
this.getCasepkgList()
},
methods: {
pkgChange(){
let packitem = this.CasepackageList.find(item =>{
return this.baseInfo.pkgid == item.id
})
this.baseInfo.pkgName = packitem.pkgName
this.baseInfo.entrustingAgencyName = packitem.entrustingAgencyName
this.baseInfo.planStartTime = packitem.planStartTime
this.baseInfo.channel = packitem.channel
this.baseInfo.months = this.monthDifference(new Date(packitem.planStartTime),new Date(packitem.planEndTime))
},
monthDifference(date1,date2) {
let months;
months = (date2.getFullYear() - date1.getFullYear()) * 12;
months -= date1.getMonth();
months += date2.getMonth();
return months <= 0 ? 0 : months;
},
//
getCasepkgList(){
apipk.getCasePkgQuery({current:1,size:500}).then(res => {
if (!res.code) {
this.CasepackageList = res.records;
}
})
},
handleSubmit(){
if(!this.$clickThrottle()) { return }//
this.$refs.ruleFormBase.validate((valid) => {
if (valid){
let data = {
...this.baseInfo,//
}
apipk.CasePkgimport(data).then(res => {
this.handleClose()
this.$parent.getCaseInfoList(1)
})
}
})
},
//
handleUploadFile(JsonData){
console.log('获取上传文件信息',JsonData.uploadFileRes)
let fileitem = JSON.parse(JSON.stringify(JsonData.fileList))
this.fileList = fileitem.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,
}
})
if(fileitem.length == 0 ){
this.baseInfo.fileInfo = null
}
else
{
this.baseInfo.fileInfo = JsonData.uploadFileRes
}
},
handleClose() {
this.$emit('update:importCaseDialog', null)
},
}
};
</script>
<style scoped lang="scss">
.dialog-content{
padding: 16px 24px;
// max-height:500px
}
</style>

View File

@ -0,0 +1,363 @@
<template>
<div class="layout-content-wrap">
<div class="navigation-bar flex-row mb-16">
<img src="../../assets/image/Link.png" height="22" alt="">
<a>/</a>
<a>案件错误修复</a>
</div>
<div class="layout-tabs-content-box background-color-fff border-radius-4">
<div class="pt-8 border-b-solid-lighter-1">
<div class="height-30 flex-row align-items-center justify-content-between mb-24">
<div class="f22 color-text-primary">筛选</div>
</div>
<el-collapse-transition>
<div v-show="showSearch">
<el-row :gutter="56">
<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.pkgName" placeholder="请选择案件包"
class="width100" >
<el-option
v-for="item in CasepackageList"
:key="item.id"
:label="item.pkgName"
:value="item.id">
</el-option>
</el-select>
</div>
</el-col>
<el-col :span="14">
<div class="flex-row align-items-center justify-content-end">
&nbsp;
</div>
</el-col>
<el-col :span="4" >
<div class="flex-row align-items-center justify-content-end">
<el-button @click="hanldeReset">重置</el-button>
<el-button type="primary" @click="handleSearch">搜索</el-button>
</div>
</el-col>
</el-row>
<el-row :gutter="56">
</el-row>
</div>
</el-collapse-transition>
</div>
<!-- table -->
<div class="pt-8">
<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" type="primary" @click="handleImport">导入案件</el-button>
<el-button size="small" @click="handleAddForm">导出错误案件</el-button>
<el-button size="small" @click="handleDelete">清空错误案件</el-button>
</div>
</div>
<div >
<el-table :data="tableData" :height="`${contentHeight}`"
@selection-change="handleSelectionChange">
<el-table-column type="index" label="序号" width="55"></el-table-column>
<!-- <el-table-column type="selection" width="55" ></el-table-column> -->
<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="months" label="身份证号码" show-overflow-tooltip ></el-table-column>
<el-table-column prop="caseTotal" label="金融产品名称" show-overflow-tooltip ></el-table-column>
<el-table-column prop="assignTotal" label="合同名称" show-overflow-tooltip ></el-table-column>
<el-table-column prop="assignTotal" label="委托时逾期天数" show-overflow-tooltip ></el-table-column>
<!-- <el-table-column prop="assignTotal" label="合同名称" show-overflow-tooltip ></el-table-column> -->
<el-table-column prop="assignTotal" 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>
<!-- 导入 -->
<importPackageDialog v-if="importCaseDialog" :importCaseDialog.sync="importCaseDialog" />
</div>
</template>
<script>
import cpkapi from "@/services/casePackageManagement";
import api from "@/services/casePackageManagement";
export default {
components: {
importPackageDialog: () => import('./components/importPackageDialog'),//
},
data() {
return {
activeName:'all',
showSearch: true,
queryDate: '',
activeUsage: '',
mediateStatusData:[],//
financialProductsTypeOptions:[],//
departmentOptions:[],//
queryParam: {
pkgName:'',//
entrustingAgencyName: '',//
endTime: '',//
beginTime:'',//
willEnd:'',
current:1,
size:10,
},
usageOption: ['今日','昨日', '近一周', '近一月', '近半年', '近一年'],
tableData: [],
total:0,
uniqueSelection:[],
caseAllocationDialog:null,//
importCaseDialog:null,//
addCaseDialog:null,//
editCaseDrawer:null,//
CasepackageList:[],
}
},
created() {
this.getCasepkgList()
this.getCaseInfoList(1)
},
computed:{
// drawer
contentHeight(){
let oh = document.documentElement.clientHeight;
if(this.showSearch){
return oh-56-48-366-32
}else{
return oh-56-48-175-32
}
}
},
methods: {
jumpUrl (url) {
this.$router.push(url);
},
//
getCasepkgList(){
cpkapi.getCasePkgQuery({current:1,size:500}).then(res => {
if (!res.code) {
this.CasepackageList = res.records;
}
})
},
//
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.CasePkgdeleteById({id:scope.row.id}).then((res) => {
// this.$message.success("");
// this.getCaseInfoList(1)
// });
}).catch(() => {});
},
//
handleBackCase(scope){
this.$confirm("请确定是否撤回分案?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
if(!this.$clickThrottle()) { return }//
api.postpkgquash({id:scope.row.id}).then((res) => {
this.$message.success("撤回分案成功");
this.getCaseInfoList(1)
});
}).catch(() => {});
},
//
handleAddForm(){
this.addCaseDialog={
title:'新增案件',
}
},
//
handleCaseAllocation(scope){
if((scope.row.caseTotal - scope.row.assignTotal) <= 0)
{
this.$message({
showClose: true,
message: '该案件包没有待分配的案件!',
type: 'warning'
});
return false
}
this.caseAllocationDialog={
title:'案件分配',
ObjectInfo:scope.row
}
},
//
handleEdit(scope){
this.editCaseDrawer={
title:'编辑案件',
data:scope.row,
currentPage:this.queryParam.current
}
},
//
getCaseInfoList(val){
this.queryParam.planBegin = this.queryParam.beginTime
this.queryParam.planEnd = this.queryParam.endTime
this.queryParam.current = val
api.getCasePkgQuery(this.queryParam).then(res => {
if (!res.code) {
this.tableData = res.records;
this.total = res.total;
}
})
},
handleToggleSearch() {
this.showSearch = !this.showSearch
},
//
hanldeReset() {
for (let key in this.queryParam) {
this.queryParam[key] = ''
}
this.queryParam.current = 1
this.queryParam.size = 10
},
handleSearch() {
this.queryParam.size = 10;
this.queryParam.current = 1;
this.getCaseInfoList(1)
},
handleClickUsage(item) {
this.activeUsage = item
this.setDateFast()
},
handleChangeDate() {
this.activeUsage = ''
if(this.queryDate === null) {
this.setDateFast()
}else {
this.queryParam.beginTime = this.$util.getDayStart(this.queryDate[0])
this.queryParam.endTime = this.$util.getDayEnd(this.queryDate[1])
}
},
setDateFast() {
switch (this.activeUsage) {
case "今日":
let todayObj = this.$util.getToday()
this.queryParam.beginTime = todayObj.todayStart
this.queryParam.endTime = todayObj.todayEnd
break
case "昨日":
let yesterdayObj = this.$util.getYesterday()
this.queryParam.beginTime = yesterdayObj.beginTime
this.queryParam.endTime = yesterdayObj.endTime
break
case "近一周":
let rangeWeek = this.$util.getRecentWeeks()
this.queryParam.beginTime = rangeWeek.recentWeekStart
this.queryParam.endTime = rangeWeek.todayEnd
break
case "近一月":
let rangeMonth = this.$util.getRecentMonths()
this.queryParam.beginTime = rangeMonth.recentMonthStart
this.queryParam.endTime = rangeMonth.todayEnd
break
case "近半年":
let rangeMonths = this.$util.getRecentMonths(6)
console.log('近半年:', rangeMonths)
this.queryParam.beginTime = rangeMonths.recentMonthStart
this.queryParam.endTime = rangeMonths.todayEnd
break
case "近一年":
let rangeYear = this.$util.getRecentYears()
this.queryParam.beginTime = rangeYear.recentYearStart
this.queryParam.endTime = rangeYear.todayEnd
break
default:
this.queryParam.beginTime = ''
this.queryParam.endTime = ''
this.queryDate = ''
break
}
if(this.queryParam.beginTime && this.queryParam.endTime) {
this.queryDate = [this.queryParam.beginTime, this.queryParam.endTime]
}
},
handleSelectionChange(val){
console.log('获取val',val)
this.uniqueSelection = []
val.forEach((row)=>{
this.uniqueSelection.push(row.id)
})
console.log('uniqueSelection',this.uniqueSelection)
},
}
}
</script>
<style scoped>
.el-badge{
top: 3px;
}
</style>

View File

@ -97,7 +97,7 @@
<div class="flex-row">
<el-button size="small" type="primary" @click="handleImport">批量导入案件</el-button>
<el-button size="small" @click="handleAddForm">添加案件</el-button>
<el-button size="small" @click="handleBatchDelete">错误修复</el-button>
<el-button size="small" @click="jumpUrl(`/case-mistake`)">错误修复</el-button>
</div>
</div>

View File

@ -40,7 +40,7 @@
</div>
<div class="flex-row justify-content-between align-items-center border-t-solid-lighter-1 p-16 cursor-pointer" @click="handleChangePersonal">
<div class="f16 color-text-regular">个人信息</div>
<div class="f16 color-text-secondary">查看<i class="el-icon-arrow-right"></i></div>
<div class="f16 color-text-secondary">查看信息<i class="el-icon-arrow-right"></i></div>
</div>
<div class="border-t-solid-lighter-1 p-16 f16 color-1960F4 text-center cursor-pointer" @click="handleLoginOut()">退出登录</div>
</div>
@ -413,7 +413,7 @@
.show-info-wrap{
position: absolute;
width: 320px;
height: 248px;
// height: 248px;
background-color: $color-white;
top:8px;
right: 16px;

View File

@ -121,7 +121,7 @@ export default {
if (valid) {
this.repaymentObj.caseId = this.eventDialog.caseId;
caseMaterial.addCaseFile(this.repaymentObj).then(res => {
this.$parent.getList()
this.$parent.getFileCaseList()
this.handleClose()
this.$message.success("操作成功");
})

View File

@ -69,7 +69,7 @@ export default {
},
},
async created() {
await this.getList();
await this.getFileCaseList();
},
methods:{
reg_img(item) {
@ -96,7 +96,7 @@ export default {
}
},
//
getList() {
getFileCaseList() {
let dataJson = {
size: 9999,
current: 1,
@ -137,7 +137,7 @@ export default {
let data = {id: item.id}
caseMaterial.deleteCaseFileById(data).then((res) => {
this.$message.success("成功");
this.getList()
this.getFileCaseList()
});
}).catch(() => {});
},

View File

@ -37,6 +37,12 @@ const routes = [
component: () => import("@/pages/case-package"),
meta: { title: "案件包管理", icon: 'menu-case-management' },
},
{
path: "/case-mistake",
name: "/case-mistake",
component: () => import("@/pages/case-mistake"),
meta: { title: "错误修复", icon: 'menu-case-management' },
},
{
path: "/case-management",
name: "/case-management",