还款凭证和还款计划
This commit is contained in:
parent
7152372dca
commit
514d5ed605
@ -173,6 +173,19 @@ html{
|
||||
.padding-0{
|
||||
padding: 0 !important;
|
||||
}
|
||||
.pt-6{
|
||||
padding-top: 6px;
|
||||
}
|
||||
.pb-6{
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
.pr-6{
|
||||
padding-right: 6px;
|
||||
}
|
||||
.pl-6{
|
||||
padding-left: 6px;
|
||||
}
|
||||
|
||||
.pt-8{
|
||||
padding-top: $size8;
|
||||
}
|
||||
@ -474,6 +487,10 @@ html{
|
||||
height: $height138;
|
||||
}
|
||||
|
||||
.line-height-20{
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
.line-height-30{
|
||||
line-height: $height30;
|
||||
}
|
||||
|
||||
69
src/components/dialogPreview.vue
Normal file
69
src/components/dialogPreview.vue
Normal file
@ -0,0 +1,69 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog title="预览"
|
||||
:visible="true"
|
||||
width="1050px"
|
||||
append-to-body
|
||||
@close="handleClose" >
|
||||
<div slot="title">
|
||||
<TitleBar title="预览"></TitleBar>
|
||||
</div>
|
||||
<div style="min-height:600px; " class="c-flex-center">
|
||||
<!-- svg -->
|
||||
<svgViewer :src="previewUrl" v-if="isSvg"></svgViewer>
|
||||
<!-- 其他图片 -->
|
||||
<el-image :src="previewUrl" fit="scale-down" v-else></el-image>
|
||||
</div>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="handleClose">关闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
components: {
|
||||
svgViewer: () => import('./svg-viewer'),
|
||||
},
|
||||
props: {
|
||||
previewUrl: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return ''
|
||||
},
|
||||
},
|
||||
isSvg:{
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
},
|
||||
computed:{
|
||||
|
||||
},
|
||||
async created() {
|
||||
|
||||
},
|
||||
mounted(){
|
||||
|
||||
},
|
||||
beforeDestroy() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
handleClose() {
|
||||
this.$emit('update:visible', false)
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
|
||||
</style>
|
||||
64
src/components/pdfPreview.vue
Normal file
64
src/components/pdfPreview.vue
Normal file
@ -0,0 +1,64 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog
|
||||
title="查看pdf文件"
|
||||
:visible="true"
|
||||
width="1100px"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
@close="handleClose" >
|
||||
|
||||
<div class="addContract p-16">
|
||||
<el-scrollbar class="bor" :style="'height:'+`${contentHeight}`+'px'">
|
||||
<iframe :src="previewUrl" width="100%" :height="`${contentHeight-5}`+'px'"></iframe>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="handleClose">关闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
previewUrl: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return ''
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
};
|
||||
},
|
||||
computed:{
|
||||
// 获取抽屉drawer的内容高度
|
||||
contentHeight(){
|
||||
let oh = document.documentElement.clientHeight;
|
||||
return oh-180
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
|
||||
},
|
||||
mounted(){
|
||||
|
||||
},
|
||||
beforeDestroy() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
handleClose() {
|
||||
// this.$emit('update:editSealFlag', false)
|
||||
this.$emit('update:visible', false)
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
44
src/components/svg-viewer.vue
Normal file
44
src/components/svg-viewer.vue
Normal file
@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<div v-html="svgContent" :id="id"></div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "svg-viewer",
|
||||
props: {
|
||||
id: {
|
||||
type: String,
|
||||
default: 'id',
|
||||
},
|
||||
src: {
|
||||
type: String,
|
||||
default() {
|
||||
return ''
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
src: {
|
||||
immediate: true,
|
||||
handler(val) {
|
||||
if (!val) {
|
||||
this.svgContent = ''
|
||||
return;
|
||||
}
|
||||
fetch(val)
|
||||
.then(res => res.text())
|
||||
.then(ctx => this.svgContent = ctx)
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
svgContent: ''
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
330
src/components/uploadFile copy.vue
Normal file
330
src/components/uploadFile copy.vue
Normal file
@ -0,0 +1,330 @@
|
||||
<template>
|
||||
<div class="upload-file-wrap">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="span" v-if="isInCount">
|
||||
<div class="el-col-ctn-box">
|
||||
<div class="el-col-upload-box">
|
||||
<el-upload
|
||||
class="el-upload-box"
|
||||
ref="upload"
|
||||
action=""
|
||||
:accept="accept"
|
||||
:show-file-list="false"
|
||||
:http-request="httpRequest"
|
||||
>
|
||||
<div class="upload-file">
|
||||
<i class="el-icon-plus uploader-file-icon"></i>
|
||||
<div class="f14 color-text-secondary text-center">上传</div>
|
||||
</div>
|
||||
</el-upload>
|
||||
<div class="f12 text-center color-text-regular line-height-20">{{uploadName}}</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-col>
|
||||
<!--上传的图片预览-->
|
||||
<el-col :span="span" v-for="(item,i) in lists" :key="i" >
|
||||
<div class="el-col-ctn-box "
|
||||
@click="handlePreview(item)">
|
||||
<div class="el-col-upload-box">
|
||||
<div class="upload-preview-box">
|
||||
<img v-if="item.deletable && !readOnly"
|
||||
class="upload-delete-icon" src="../assets/image/icon_close.png" alt=""
|
||||
@click.stop.prevent="handleDelete(item, i)">
|
||||
<div class="upload-file">
|
||||
<el-image class="el-image-upload" :src="item.iconFrontSrc" fit="scale-down"></el-image>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="f12 text-center color-text-regular line-height-20">
|
||||
{{showFileName ? item.fileName : uploadName}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<!-- 大图预览 -->
|
||||
<dialogPreview v-if="editImgFlag" :visible.sync="editImgFlag" :previewUrl="previewPath" :isSvg="isSvg" />
|
||||
<pdfPreview v-if="editPdfFlag" :visible.sync="editPdfFlag" :previewUrl="previewPath"/>
|
||||
<videoPreview v-if="editMp4Flag" :visible.sync="editMp4Flag" :previewUrl="previewPath"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import projectConfig from "../services/projectConfig";
|
||||
export default {
|
||||
name: "uploadFile",
|
||||
components: {
|
||||
svgViewer: () => import('./svg-viewer'),
|
||||
dialogPreview: () => import('./dialogPreview'),
|
||||
pdfPreview: () => import('./pdfPreview.vue'),//查看PDF文件
|
||||
videoPreview: () => import('./videoPreview.vue'),//查看视频文件
|
||||
},
|
||||
props: {
|
||||
span: {
|
||||
// layout组件参数,每排排列几个
|
||||
type: Number,
|
||||
default: 5
|
||||
},
|
||||
accept: {
|
||||
type: String,
|
||||
default: '*',
|
||||
},
|
||||
imageHeight: {
|
||||
// 图片、上传框的高度
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
imageMode: {
|
||||
// 图片裁剪、缩放的模式,具体参考uni image
|
||||
type: String,
|
||||
default: 'aspectFit'
|
||||
},
|
||||
readOnly: {
|
||||
// 只读,true-是,false-否
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
|
||||
fileList: {
|
||||
// 已上传的文件列表
|
||||
type: [Array, Object],
|
||||
default: () => {
|
||||
return [
|
||||
//{ url:文件地址, fileName: 文件名}
|
||||
]
|
||||
}
|
||||
},
|
||||
uploadName: {
|
||||
// 要上传的文件昵称
|
||||
type: String,
|
||||
default: '上传'
|
||||
},
|
||||
maxCount: {
|
||||
// 允许上传文件的最大总数
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
selectCount: {
|
||||
// 每次上传时,允许用户选择的文件数量
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
customUpload: {
|
||||
// 自定义上传按钮的样式
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
autoUpload: {
|
||||
// 是否自动上传
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showFileName: {
|
||||
// 是否显示文件名
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
splitFileTitle: {
|
||||
// 是否在显示效果上分割文件、文件名
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
lists: [
|
||||
//{url: 文件地址, fileName: 文件名, deletable: 是否可删除, readStatus: 是否显示阅读状态, iconFrontSrc: 图标样式}
|
||||
],
|
||||
srcList: [],
|
||||
dialogVisible: false,
|
||||
isSvg: true,
|
||||
editPdfFlag:false,
|
||||
editMp4Flag:false,
|
||||
editImgFlag: false,
|
||||
previewPath:'',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isInCount() {
|
||||
return (this.lists.length < this.maxCount) && !this.readOnly
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
// 监听文件列表的变化,重新整理内部数据
|
||||
fileList: {
|
||||
immediate: true,
|
||||
handler() {
|
||||
this.formatFileList()
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
methods: {
|
||||
formatFileList() {
|
||||
let fileList = this.fileList || []
|
||||
this.srcList = []
|
||||
fileList = JSON.parse(JSON.stringify(fileList))
|
||||
// console.log('upload===========formatFileList()方法==========fileList:', fileList)
|
||||
const lists = fileList.map(item => {
|
||||
let obj = Object.assign(item)
|
||||
obj.deletable = typeof(obj.deletable) === 'boolean' ? obj.deletable : true
|
||||
let text = obj.url || obj.fileName
|
||||
obj.fileType = this.$util.getFileExtension(text)
|
||||
// 统一显示文件对应的图标(前端图片地址)
|
||||
obj.iconFrontSrc = this.$util.getIcon(obj)
|
||||
|
||||
// let previewUrl = `${projectConfig.fileHost}${obj.url}`
|
||||
let previewUrl = `/manage-center/minio/preview/${obj.url}`
|
||||
if(obj.url.includes('http')){
|
||||
previewUrl = obj.url
|
||||
}
|
||||
obj.previewUrl = previewUrl
|
||||
if(this.$util.getFileType(text) === 'image') {
|
||||
// 如果是图片,直接显示图片
|
||||
obj.iconFrontSrc = obj.previewUrl
|
||||
}
|
||||
this.srcList.push(obj.iconFrontSrc)
|
||||
return obj
|
||||
});
|
||||
this.lists = lists
|
||||
// console.log('uploadFile----:', this.lists)
|
||||
// this.isInCount = (lists.length < this.maxCount) && !this.readOnly
|
||||
},
|
||||
async httpRequest(param) {
|
||||
// console.log('httpRequest上传文件:',param)
|
||||
let fileType = this.$util.getFileExtension(param.file.name)
|
||||
if(this.accept !== '*' && this.accept.indexOf(fileType) === -1) {
|
||||
this.$message.warning(`不能上传${fileType}格式的文件`)
|
||||
return
|
||||
}
|
||||
|
||||
try{
|
||||
let formData = new FormData()
|
||||
formData.append('file', param.file)
|
||||
// let uploadFileRes = await fetchApi.uploadFile(formData);
|
||||
let uploadFileRes = await this.$fetchApi.uploadFile(formData);
|
||||
// console.log(uploadFileRes)
|
||||
let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
fileList.push({
|
||||
url: uploadFileRes.url,
|
||||
fileSize: uploadFileRes.size
|
||||
})
|
||||
this.$emit('handleUploadFile', fileList)
|
||||
|
||||
}catch (e) {
|
||||
this.$message.error(e.msg)
|
||||
}
|
||||
},
|
||||
async handlePreview(item) {
|
||||
// try {
|
||||
// let res = await this.$fetchApi.getMinioToken({objectName: item.url})
|
||||
// window.open(`${item.previewUrl}?token=${res}`, '_target')
|
||||
// }catch (e) {
|
||||
// this.$message.error(e.msg || e)
|
||||
// }
|
||||
if (!this.isImg) {return}
|
||||
this.isSvg = false;
|
||||
let analysisType = this.$util.getFileType(item.fileType);
|
||||
console.log(analysisType,'analysisType')
|
||||
if (item.fileType === 'svg'){
|
||||
this.previewPath = item.iconFrontSrc
|
||||
this.isSvg = true;
|
||||
this.editImgFlag = true;
|
||||
}else if (analysisType === 'image'){
|
||||
if (item.previewUrl) {
|
||||
this.previewPath = item.previewUrl
|
||||
}else {
|
||||
this.previewPath = await commonFun.viewFile2({url: item.url})
|
||||
}
|
||||
this.editImgFlag = true;
|
||||
}else if(analysisType.toLowerCase() === 'mp4' || analysisType.toLowerCase() === 'video'){
|
||||
if (item.previewUrl) {
|
||||
this.previewPath = item.previewUrl
|
||||
}else {
|
||||
this.previewPath = await commonFun.viewFile2({url: item.url})
|
||||
}
|
||||
this.editMp4Flag = true;
|
||||
}else if(analysisType.toLowerCase() === 'pdf'){
|
||||
if (item.previewUrl) {
|
||||
this.previewPath = item.previewUrl
|
||||
}else {
|
||||
this.previewPath = await commonFun.viewFile2({url: item.url})
|
||||
}
|
||||
this.editPdfFlag = true;
|
||||
}else {
|
||||
let res = await commonFun.viewFile2({url: item.url})
|
||||
window.open(`${res}`, '_target')
|
||||
}
|
||||
},
|
||||
handleDelete(item, i) {
|
||||
this.lists.splice(i, 1)
|
||||
let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
fileList.splice(i, 1)
|
||||
this.$emit('handleUploadFile', fileList)
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-col-ctn-box{
|
||||
width: 100%;
|
||||
height: 160px;
|
||||
}
|
||||
.el-col-upload-box{
|
||||
width: 120px;
|
||||
height: 160px;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.el-upload-box{
|
||||
width: 100%;
|
||||
height: 120px;
|
||||
background: #F5F7FA;
|
||||
border: 1px dashed #EBEEF5;
|
||||
}
|
||||
.el-col-ctn-box .el-upload,
|
||||
.el-col-ctn-box .upload-file{
|
||||
width: 100% !important;
|
||||
}
|
||||
.el-col-ctn-box .upload-preview-box{
|
||||
position: relative;
|
||||
height: 120px;
|
||||
border: 1px dashed #EBEEF5;
|
||||
}
|
||||
.el-col-ctn-box .upload-delete-icon{
|
||||
width: 30px;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
cursor: pointer;
|
||||
z-index: 11111;
|
||||
}
|
||||
.el-col-ctn-box .upload-file{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 120px;
|
||||
}
|
||||
.el-col-ctn-box .uploader-file-icon{
|
||||
font-size: 32px;
|
||||
color: $color-text-secondary;
|
||||
}
|
||||
.el-col-ctn-box .el-image-upload{
|
||||
border-radius: 4px;
|
||||
padding: 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.el-col-ctn-box .txt-center{
|
||||
height: 40px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.line-height-30{
|
||||
line-height: 30px;
|
||||
}
|
||||
</style>
|
||||
@ -1,253 +1,354 @@
|
||||
<template>
|
||||
<div class="upload-file-wrap">
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="span" v-if="isInCount">
|
||||
<div class="el-col-ctn-box">
|
||||
<div class="el-col-upload-box">
|
||||
<el-upload
|
||||
class="el-upload-box"
|
||||
ref="upload"
|
||||
action=""
|
||||
:accept="accept"
|
||||
:show-file-list="false"
|
||||
:http-request="httpRequest"
|
||||
>
|
||||
<div class="upload-file">
|
||||
<i class="el-icon-plus uploader-file-icon"></i>
|
||||
<div class="f14 color-text-secondary text-center">上传材料</div>
|
||||
</div>
|
||||
</el-upload>
|
||||
<div class="f14 text-center color-text-regular line-height-30">{{uploadName}}</div>
|
||||
</div>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="span" v-if="isInCount">
|
||||
<div class="el-col-ctn-box">
|
||||
<div class="el-col-upload-box">
|
||||
<el-upload
|
||||
class="el-upload-box"
|
||||
ref="upload"
|
||||
action=""
|
||||
:accept="accept"
|
||||
:show-file-list="false"
|
||||
:http-request="httpRequest"
|
||||
>
|
||||
<div class="upload-file">
|
||||
<i class="el-icon-plus uploader-file-icon"></i>
|
||||
<!-- <div class="font-size-12 color-BCDFFD text-center">上传材料</div> -->
|
||||
</div>
|
||||
</el-col>
|
||||
<!--上传的图片预览-->
|
||||
<el-col :span="span" v-for="(item,i) in lists" :key="i" >
|
||||
<div class="el-col-ctn-box "
|
||||
@click="handlePreview(item)">
|
||||
<div class="el-col-upload-box">
|
||||
<div class="upload-preview-box">
|
||||
<img v-if="item.deletable && !readOnly"
|
||||
class="upload-delete-icon" src="../assets/image/icon_close.png" alt=""
|
||||
@click.stop.prevent="handleDelete(item, i)">
|
||||
<div class="upload-file">
|
||||
<el-image class="el-image-upload" :src="item.iconFrontSrc" fit="scale-down"></el-image>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="f14 text-center color-text-regular line-height-30">
|
||||
{{showFileName ? item.fileName : uploadName}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-upload>
|
||||
<div class="font-size-12 color-a9a9a9 text-center line-height-20">{{ uploadName }}</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-col>
|
||||
<!--上传的图片预览-->
|
||||
<el-col :span="span" v-for="(item,i) in lists" :key="i">
|
||||
<div class="el-col-ctn-box "
|
||||
@click="handlePreview(item)">
|
||||
<div class="el-col-upload-box">
|
||||
<div class="upload-preview-box">
|
||||
<img v-if="item.deletable && !readOnly"
|
||||
class="upload-delete-icon" src="../assets/image/icon_close.png" alt=""
|
||||
@click.stop.prevent="handleDelete(item, i)">
|
||||
<div class="upload-file">
|
||||
<!-- svg展示 -->
|
||||
<svgViewer :src="item.iconFrontSrc" class="el-image-upload" v-if="item.fileType==='svg'"> </svgViewer>
|
||||
<!-- 其他展示 -->
|
||||
<el-image class="el-image-upload" :src="item.iconFrontSrc" fit="scale-down" v-else></el-image>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<div v-if="!showFileName" class="font-size-12 color-a9a9a9 text-center line-height-20">
|
||||
{{ showFileName ? item.fileName : maxCount === 1 ? uploadName : '' }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 大图预览 -->
|
||||
<dialogPreview v-if="editImgFlag" :visible.sync="editImgFlag" :previewUrl="previewPath" :isSvg="isSvg" />
|
||||
<pdfPreview v-if="editPdfFlag" :visible.sync="editPdfFlag" :previewUrl="previewPath"/>
|
||||
<videoPreview v-if="editMp4Flag" :visible.sync="editMp4Flag" :previewUrl="previewPath"/>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import commonFun from "../services/projectConfig";
|
||||
|
||||
export default {
|
||||
name: "uploadFile",
|
||||
components: {
|
||||
svgViewer: () => import('./svg-viewer'),
|
||||
dialogPreview: () => import('./dialogPreview'),
|
||||
pdfPreview: () => import('./pdfPreview.vue'),//查看PDF文件
|
||||
videoPreview: () => import('./videoPreview.vue'),//查看视频文件
|
||||
},
|
||||
props: {
|
||||
span: {
|
||||
// layout组件参数,每排排列几个
|
||||
type: Number,
|
||||
default: 5
|
||||
},
|
||||
accept: {
|
||||
type: String,
|
||||
default: '*',
|
||||
},
|
||||
imageHeight: {
|
||||
// 图片、上传框的高度
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
imageMode: {
|
||||
// 图片裁剪、缩放的模式,具体参考uni image
|
||||
type: String,
|
||||
default: 'aspectFit'
|
||||
},
|
||||
readOnly: {
|
||||
// 只读,true-是,false-否
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
|
||||
fileList: {
|
||||
// 已上传的文件列表
|
||||
type: [Array, Object],
|
||||
default: () => {
|
||||
return [
|
||||
//{ url:文件地址, fileName: 文件名}
|
||||
]
|
||||
}
|
||||
},
|
||||
uploadName: {
|
||||
// 要上传的文件昵称
|
||||
type: String,
|
||||
default: '上传'
|
||||
},
|
||||
maxCount: {
|
||||
// 允许上传文件的最大总数
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
selectCount: {
|
||||
// 每次上传时,允许用户选择的文件数量
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
customUpload: {
|
||||
// 自定义上传按钮的样式
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
autoUpload: {
|
||||
// 是否自动上传
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showFileName: {
|
||||
// 是否显示文件名
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
splitFileTitle: {
|
||||
// 是否在显示效果上分割文件、文件名
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
isImg: {
|
||||
// 是否在显示图片预览
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
fileSize: {
|
||||
// 上传文件大小-单位M
|
||||
type: Number,
|
||||
default: 10
|
||||
},
|
||||
serveType: {
|
||||
// 服务类型 1线下 2线上
|
||||
type: Number,
|
||||
default: 1
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
lists: [
|
||||
//{url: 文件地址, fileName: 文件名, deletable: 是否可删除, readStatus: 是否显示阅读状态, iconFrontSrc: 图标样式}
|
||||
],
|
||||
dialogVisible: false,
|
||||
isSvg: true,
|
||||
editPdfFlag:false,
|
||||
editMp4Flag:false,
|
||||
editImgFlag: false,
|
||||
previewPath:'',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isInCount() {
|
||||
return (this.lists.length < this.maxCount) && !this.readOnly
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
// 监听文件列表的变化,重新整理内部数据
|
||||
fileList: {
|
||||
immediate: true,
|
||||
handler() {
|
||||
this.formatFileList()
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
methods: {
|
||||
formatFileList() {
|
||||
let fileList = this.fileList || []
|
||||
fileList = JSON.parse(JSON.stringify(fileList))
|
||||
// console.log('upload===========formatFileList()方法==========fileList:', fileList)
|
||||
const lists = fileList.map(item => {
|
||||
let obj = Object.assign(item)
|
||||
obj.deletable = typeof (obj.deletable) === 'boolean' ? obj.deletable : true
|
||||
let text = obj.url || obj.fileName
|
||||
obj.fileType = this.$util.getFileExtension(text)
|
||||
obj.iconFrontSrc = this.$util.getIcon(obj)
|
||||
|
||||
<script>
|
||||
import projectConfig from "../services/projectConfig";
|
||||
export default {
|
||||
name: "uploadFile",
|
||||
props: {
|
||||
span: {
|
||||
// layout组件参数,每排排列几个
|
||||
type: Number,
|
||||
default: 5
|
||||
},
|
||||
accept: {
|
||||
type: String,
|
||||
default: '*',
|
||||
},
|
||||
imageHeight: {
|
||||
// 图片、上传框的高度
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
imageMode: {
|
||||
// 图片裁剪、缩放的模式,具体参考uni image
|
||||
type: String,
|
||||
default: 'aspectFit'
|
||||
},
|
||||
readOnly: {
|
||||
// 只读,true-是,false-否
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
|
||||
fileList: {
|
||||
// 已上传的文件列表
|
||||
type: [Array, Object],
|
||||
default: () => {
|
||||
return [
|
||||
//{ url:文件地址, fileName: 文件名}
|
||||
]
|
||||
}
|
||||
},
|
||||
uploadName: {
|
||||
// 要上传的文件昵称
|
||||
type: String,
|
||||
default: '上传'
|
||||
},
|
||||
maxCount: {
|
||||
// 允许上传文件的最大总数
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
selectCount: {
|
||||
// 每次上传时,允许用户选择的文件数量
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
customUpload: {
|
||||
// 自定义上传按钮的样式
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
autoUpload: {
|
||||
// 是否自动上传
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
showFileName: {
|
||||
// 是否显示文件名
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
splitFileTitle: {
|
||||
// 是否在显示效果上分割文件、文件名
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
lists: [
|
||||
//{url: 文件地址, fileName: 文件名, deletable: 是否可删除, readStatus: 是否显示阅读状态, iconFrontSrc: 图标样式}
|
||||
],
|
||||
srcList: [],
|
||||
// let previewUrl = `${projectConfig.fileHost}${obj.url}`
|
||||
let previewUrl = `/manage-center/minio/preview/${obj.url}`
|
||||
if(obj.url.includes('http')){
|
||||
previewUrl = obj.url
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
isInCount() {
|
||||
return (this.lists.length < this.maxCount) && !this.readOnly
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
// 监听文件列表的变化,重新整理内部数据
|
||||
fileList: {
|
||||
immediate: true,
|
||||
handler() {
|
||||
this.formatFileList()
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
methods: {
|
||||
formatFileList() {
|
||||
let fileList = this.fileList || []
|
||||
this.srcList = []
|
||||
fileList = JSON.parse(JSON.stringify(fileList))
|
||||
// console.log('upload===========formatFileList()方法==========fileList:', fileList)
|
||||
const lists = fileList.map(item => {
|
||||
let obj = Object.assign(item)
|
||||
obj.deletable = typeof(obj.deletable) === 'boolean' ? obj.deletable : true
|
||||
let text = obj.url || obj.fileName
|
||||
obj.fileType = this.$util.getFileExtension(text)
|
||||
// 统一显示文件对应的图标(前端图片地址)
|
||||
obj.iconFrontSrc = this.$util.getIcon(obj)
|
||||
|
||||
// let previewUrl = `${projectConfig.fileHost}${obj.url}`
|
||||
let previewUrl = `/manage-center/minio/preview/${obj.url}`
|
||||
if(obj.url.includes('http')){
|
||||
previewUrl = obj.url
|
||||
}
|
||||
obj.previewUrl = previewUrl
|
||||
if(this.$util.getFileType(text) === 'image') {
|
||||
// 如果是图片,直接显示图片
|
||||
obj.iconFrontSrc = obj.previewUrl
|
||||
}
|
||||
this.srcList.push(obj.iconFrontSrc)
|
||||
return obj
|
||||
});
|
||||
this.lists = lists
|
||||
// console.log('uploadFile----:', this.lists)
|
||||
// this.isInCount = (lists.length < this.maxCount) && !this.readOnly
|
||||
},
|
||||
async httpRequest(param) {
|
||||
// console.log('httpRequest上传文件:',param)
|
||||
let fileType = this.$util.getFileExtension(param.file.name)
|
||||
if(this.accept !== '*' && this.accept.indexOf(fileType) === -1) {
|
||||
this.$message.warning(`不能上传${fileType}格式的文件`)
|
||||
return
|
||||
}
|
||||
|
||||
try{
|
||||
let formData = new FormData()
|
||||
formData.append('file', param.file)
|
||||
// let uploadFileRes = await fetchApi.uploadFile(formData);
|
||||
let uploadFileRes = await this.$fetchApi.uploadFile(formData);
|
||||
// console.log(uploadFileRes)
|
||||
let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
fileList.push({
|
||||
url: uploadFileRes.url,
|
||||
fileSize: uploadFileRes.size
|
||||
})
|
||||
this.$emit('handleUploadFile', fileList)
|
||||
|
||||
}catch (e) {
|
||||
this.$message.error(e.msg)
|
||||
}
|
||||
},
|
||||
async handlePreview(item) {
|
||||
// console.log(item,111111)
|
||||
try {
|
||||
let res = await this.$fetchApi.getMinioToken({objectName: item.url})
|
||||
// console.log(res)
|
||||
window.open(`${item.previewUrl}?token=${res}`, '_target')
|
||||
}catch (e) {
|
||||
this.$message.error(e.msg || e)
|
||||
}
|
||||
},
|
||||
handleDelete(item, i) {
|
||||
this.lists.splice(i, 1)
|
||||
let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
fileList.splice(i, 1)
|
||||
this.$emit('handleUploadFile', fileList)
|
||||
obj.previewUrl = previewUrl
|
||||
if(this.$util.getFileType(text) === 'image') {
|
||||
// 如果是图片,直接显示图片
|
||||
obj.iconFrontSrc = obj.previewUrl
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-col-ctn-box{
|
||||
return obj
|
||||
});
|
||||
this.lists = lists
|
||||
// console.log('uploadFile----:', this.lists)
|
||||
},
|
||||
async httpRequest(param) {
|
||||
console.log(this.accept,'httpRequest上传文件:', param)
|
||||
let fileType = this.$util.getFileExtension(param.file.name)
|
||||
// 上传图片类型:png,jpg,bmp
|
||||
if (this.accept !== '*' && this.accept.indexOf(fileType) === -1) {
|
||||
this.$message({message: `不能上传${fileType}格式的文件`, type: 'warning'});
|
||||
return
|
||||
}
|
||||
// 上传大小 100M
|
||||
const uploadfileSize = param.file.size
|
||||
if (uploadfileSize.toFixed(2) > (this.fileSize * 1024 * 1024)) {
|
||||
this.$message({message: `请上传大小需在${this.fileSize}MB以内的文件`, type: 'warning'});
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
// let formData = new FormData()
|
||||
// formData.append('file', param.file)
|
||||
// if (this.serveType === 1){
|
||||
// let uploadFileRes = await commonFun.uploadFile(formData);
|
||||
// let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
// fileList.push({
|
||||
// url: uploadFileRes.minioUrl,
|
||||
// previewUrl: uploadFileRes.preSignDownload,
|
||||
// fileType: this.$util.getFileExtension(uploadFileRes.minioUrl)
|
||||
// })
|
||||
// this.$emit('handleUploadFile', fileList)
|
||||
// }else {
|
||||
// let uploadFileRes = await commonFun.uploadFile2(formData);
|
||||
// let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
// fileList.push({
|
||||
// url: uploadFileRes.url,
|
||||
// previewUrl: uploadFileRes.fullUrl,
|
||||
// fileType: this.$util.getFileExtension(uploadFileRes.url),
|
||||
// fileName: uploadFileRes.objectName
|
||||
// })
|
||||
// this.$emit('handleUploadFile', fileList)
|
||||
// }
|
||||
let formData = new FormData()
|
||||
formData.append('file', param.file)
|
||||
let uploadFileRes = await this.$fetchApi.uploadFile(formData);
|
||||
let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
fileList.push({
|
||||
url: uploadFileRes.url,
|
||||
fileSize: uploadFileRes.size,
|
||||
fileType: this.$util.getFileExtension(uploadFileRes.url),
|
||||
fileName: uploadFileRes.objectName
|
||||
})
|
||||
this.$emit('handleUploadFile', fileList)
|
||||
|
||||
} catch (e) {
|
||||
this.$message.error(e.msg)
|
||||
}
|
||||
},
|
||||
async handlePreview(item) {
|
||||
|
||||
// try {
|
||||
// let res = await this.$fetchApi.getMinioToken({objectName: item.url})
|
||||
// window.open(`${item.previewUrl}?token=${res}`, '_target')
|
||||
// }catch (e) {
|
||||
// this.$message.error(e.msg || e)
|
||||
// }
|
||||
|
||||
if (!this.isImg) {return}
|
||||
this.isSvg = false;
|
||||
let analysisType = this.$util.getFileType(item.fileType);
|
||||
if (item.fileType === 'svg'){
|
||||
this.previewPath = item.iconFrontSrc
|
||||
this.isSvg = true;
|
||||
this.editImgFlag = true;
|
||||
}else if (analysisType === 'image'){
|
||||
if (item.previewUrl) {
|
||||
this.previewPath = item.previewUrl
|
||||
}else {
|
||||
this.previewPath = await commonFun.viewFile2({url: item.url})
|
||||
}
|
||||
this.editImgFlag = true;
|
||||
}else if(analysisType.toLowerCase() === 'mp4' || analysisType.toLowerCase() === 'video'){
|
||||
if (item.previewUrl) {
|
||||
this.previewPath = item.previewUrl
|
||||
}else {
|
||||
this.previewPath = await commonFun.viewFile2({url: item.url})
|
||||
}
|
||||
this.editMp4Flag = true;
|
||||
}else if(analysisType.toLowerCase() === 'pdf'){
|
||||
if (item.previewUrl) {
|
||||
this.previewPath = item.previewUrl
|
||||
}else {
|
||||
this.previewPath = await commonFun.viewFile2({url: item.url})
|
||||
}
|
||||
this.editPdfFlag = true;
|
||||
}else {
|
||||
let res = await commonFun.viewFile2({url: item.url})
|
||||
window.open(`${res}`, '_target')
|
||||
}
|
||||
},
|
||||
handleDelete(item, i) {
|
||||
this.lists.splice(i, 1)
|
||||
let fileList = JSON.parse(JSON.stringify(this.fileList))
|
||||
fileList.splice(i, 1)
|
||||
this.$emit('handleUploadFile', fileList)
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.el-col-ctn-box {
|
||||
width: 100%;
|
||||
height: 160px;
|
||||
}
|
||||
.el-col-upload-box{
|
||||
// height: 154px;
|
||||
}
|
||||
|
||||
.el-col-upload-box {
|
||||
width: 120px;
|
||||
height: 160px;
|
||||
// height: 154px;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.el-upload-box{
|
||||
// overflow: hidden;
|
||||
}
|
||||
|
||||
.el-upload-box {
|
||||
width: 100%;
|
||||
height: 120px;
|
||||
background: #F5F7FA;
|
||||
border: 1px dashed #EBEEF5;
|
||||
}
|
||||
.el-col-ctn-box .el-upload,
|
||||
.el-col-ctn-box .upload-file{
|
||||
background: #eeeeee;
|
||||
border: 1px dashed #dcdcdc;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.el-col-ctn-box .el-upload,
|
||||
.el-col-ctn-box .upload-file {
|
||||
width: 100% !important;
|
||||
}
|
||||
.el-col-ctn-box .upload-preview-box{
|
||||
}
|
||||
|
||||
.el-col-ctn-box .upload-preview-box {
|
||||
position: relative;
|
||||
height: 120px;
|
||||
border: 1px dashed #EBEEF5;
|
||||
}
|
||||
.el-col-ctn-box .upload-delete-icon{
|
||||
border: 1px solid rgba(151, 168, 177, 0.2);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.el-col-ctn-box .upload-delete-icon {
|
||||
width: 30px;
|
||||
height: auto;
|
||||
position: absolute;
|
||||
@ -255,29 +356,39 @@
|
||||
top: 0;
|
||||
cursor: pointer;
|
||||
z-index: 11111;
|
||||
}
|
||||
.el-col-ctn-box .upload-file{
|
||||
}
|
||||
|
||||
.el-col-ctn-box .upload-file {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 120px;
|
||||
}
|
||||
.el-col-ctn-box .uploader-file-icon{
|
||||
}
|
||||
|
||||
.el-col-ctn-box .uploader-file-icon {
|
||||
font-size: 32px;
|
||||
color: $color-text-secondary;
|
||||
}
|
||||
.el-col-ctn-box .el-image-upload{
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.el-col-ctn-box .el-image-upload {
|
||||
border-radius: 4px;
|
||||
padding: 5px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.el-col-ctn-box .txt-center{
|
||||
|
||||
svg {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
}
|
||||
}
|
||||
|
||||
.el-col-ctn-box .txt-center {
|
||||
height: 40px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.line-height-30{
|
||||
}
|
||||
|
||||
.line-height-30 {
|
||||
line-height: 30px;
|
||||
}
|
||||
</style>
|
||||
}
|
||||
</style>
|
||||
62
src/components/videoPreview.vue
Normal file
62
src/components/videoPreview.vue
Normal file
@ -0,0 +1,62 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog
|
||||
title="查看视频文件"
|
||||
:visible="true"
|
||||
width="1100px"
|
||||
append-to-body
|
||||
:close-on-click-modal="false"
|
||||
@close="handleClose">
|
||||
|
||||
<div class="addContract">
|
||||
<video id="video" width="100%" :height="contentHeight" :src="previewUrl" preload="auto" autoplay="autoplay"
|
||||
controls="" controlsList="nodownload noremote footbar"></video>
|
||||
</div>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="handleClose">关闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
previewUrl: {
|
||||
type: String,
|
||||
default: () => {
|
||||
return ''
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {};
|
||||
},
|
||||
computed: {
|
||||
// 获取抽屉drawer的内容高度
|
||||
contentHeight() {
|
||||
let oh = document.documentElement.clientHeight;
|
||||
return oh - 330
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
beforeDestroy() {
|
||||
|
||||
},
|
||||
methods: {
|
||||
handleClose() {
|
||||
// this.$emit('update:editSealFlag', false)
|
||||
this.$emit('update:visible', false)
|
||||
},
|
||||
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@ -49,7 +49,7 @@
|
||||
</div>
|
||||
|
||||
<div class="case-table">
|
||||
<el-table :data="tableData" :height="`${contentHeight}`" >
|
||||
<el-table :data="tableData" height="330" >
|
||||
<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>
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="channel" label="发起方式" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="documentType" label="文书送达范围" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="status" label="送达状态" show-overflow-tooltip ></el-table-column>
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="documentType" label="文书类型" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="documentNum" label="生成文书数" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="status" label="生成状态" show-overflow-tooltip ></el-table-column>
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="280" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="documentType" label="文书类型" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="status" label="签章状态" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="failureReason" label="失败原因" show-overflow-tooltip ></el-table-column>
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="documentType" label="文书类型" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="signatureFileCount" label="签字文书数" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="planStartTime" label="签字截止时间" show-overflow-tooltip >
|
||||
|
||||
@ -58,17 +58,17 @@
|
||||
</div>
|
||||
|
||||
<div class="case-table">
|
||||
<el-table :data="tableData" :height="`${contentHeight}`" >
|
||||
<el-table :data="tableData" height="330" >
|
||||
<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="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="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="respondent" label="被申请人" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="planType" label="还款方案" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="deadline" label="还款截止日期" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="payableAmount" label="应还金额" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="actualPayDate" label="实际还款日期" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="amount" label="实际还款金额" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="channel" label="状态" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="channel" label="操作人" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="planStartTime" label="操作时间" show-overflow-tooltip >
|
||||
@ -77,7 +77,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="120">
|
||||
<el-table-column label="操作" width="150">
|
||||
<template slot-scope="scope">
|
||||
<div class="flex-row align-items-center">
|
||||
<el-button size="mini" @click="handleBackCase(scope)">效验</el-button>
|
||||
@ -90,8 +90,8 @@
|
||||
|
||||
<div class="text-center pt-16">
|
||||
<el-pagination
|
||||
@size-change="getCaseInfoList"
|
||||
@current-change="getCaseInfoList"
|
||||
@size-change="getList"
|
||||
@current-change="getList"
|
||||
:current-page="queryParam.current"
|
||||
:page-size="queryParam.size"
|
||||
layout="total, prev, pager, next, jumper"
|
||||
@ -122,7 +122,10 @@ import api from "@/services/eventTracingApi";
|
||||
DialogDetail:null,
|
||||
queryDate: '',
|
||||
queryParam:{
|
||||
caseNo:''
|
||||
caseNo:'',
|
||||
pkgName:'',
|
||||
size:10,
|
||||
current:1
|
||||
},
|
||||
tableData:[],
|
||||
total:0,
|
||||
@ -130,6 +133,7 @@ import api from "@/services/eventTracingApi";
|
||||
},
|
||||
mounted () {
|
||||
this.queryParam.caseNo = this.eventTraDialog.caseNo
|
||||
this.getList(1)
|
||||
},
|
||||
methods: {
|
||||
handleChangeDate() {
|
||||
@ -152,23 +156,20 @@ import api from "@/services/eventTracingApi";
|
||||
handleSearch() {
|
||||
this.queryParam.size = 10;
|
||||
this.queryParam.current = 1;
|
||||
// this.getList(1)
|
||||
this.getList(1)
|
||||
},
|
||||
// 列表数据
|
||||
getList(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;
|
||||
// }
|
||||
// })
|
||||
api.posttrace_proof(this.queryParam).then(res => {
|
||||
if (!res.code) {
|
||||
this.tableData = res.records;
|
||||
this.total = res.total;
|
||||
}
|
||||
})
|
||||
},
|
||||
handleDetail(scope){
|
||||
this.DialogDetail = scope.row
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -62,7 +62,7 @@
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="templateId" label="短信模板" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="sendObjectType" label="短信接收对象" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="countInit" label="记录数量" show-overflow-tooltip ></el-table-column>
|
||||
|
||||
@ -61,7 +61,7 @@
|
||||
<el-table :data="tableData" height="330" >
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="bookingTime" label="预约开始时间" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="bookingEndTime" label="预约结束时间" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="status" label="状态" show-overflow-tooltip ></el-table-column>
|
||||
@ -132,7 +132,7 @@ import api from "@/services/eventTracingApi";
|
||||
},
|
||||
mounted () {
|
||||
this.queryParam.caseNo = this.eventTraDialog.caseNo
|
||||
this.getList
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
handleChangeDate() {
|
||||
|
||||
@ -48,10 +48,10 @@
|
||||
</div>
|
||||
|
||||
<div class="case-table">
|
||||
<el-table :data="tableData" :height="`${contentHeight}`" >
|
||||
<el-table :data="tableData" height="330" >
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="channel" label="文书接收人" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="documentType" label="文书类型" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="status" label="送达状态" show-overflow-tooltip ></el-table-column>
|
||||
@ -61,14 +61,14 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="failureReason" label="未送达原因" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column label="操作" width="120">
|
||||
<!-- <el-table-column label="操作" width="140">
|
||||
<template slot-scope="scope">
|
||||
<div class="flex-row align-items-center">
|
||||
<el-button size="mini" @click="handleDelete(scope)">重试</el-button>
|
||||
<el-button size="mini" @click="handleBackCase(scope)">取消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column> -->
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
|
||||
@ -60,7 +60,7 @@
|
||||
<el-table :data="tableData" height="340" >
|
||||
<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="caseNo" label="案件编号" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="caseNo" label="案件编号" width="200" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="channel" label="短信模板" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="receiver" label="短信接收人" show-overflow-tooltip ></el-table-column>
|
||||
<el-table-column prop="phone" label="电话号码" show-overflow-tooltip ></el-table-column>
|
||||
|
||||
@ -33,27 +33,27 @@
|
||||
<img src="../../../assets/image/mediate/m-info-robot.png" />
|
||||
</span>
|
||||
<span class="separation"></span>
|
||||
<span class="left-img-info flex-column" :class="leftActive == 1 ?'active':''" @click="leftActive = 1">
|
||||
<span class="left-img-info flex-column" :class="leftActive == 1 ?'active':''" @mouseenter="leftActive = 1">
|
||||
<img src="../../../assets/image/mediate/m-info1.png" />
|
||||
<a>案件信息</a>
|
||||
</span>
|
||||
<span class="left-img-info flex-column" :class="leftActive == 2 ?'active':''" @click="leftActive = 2">
|
||||
<span class="left-img-info flex-column" :class="leftActive == 2 ?'active':''" @mouseenter="leftActive = 2">
|
||||
<img src="../../../assets/image/mediate/m-info2.png" />
|
||||
<a>联系人</a>
|
||||
</span>
|
||||
<span class="left-img-info flex-column" :class="leftActive == 3 ?'active':''" @click="leftActive = 3">
|
||||
<span class="left-img-info flex-column" :class="leftActive == 3 ?'active':''" @mouseenter="leftActive = 3">
|
||||
<img src="../../../assets/image/mediate/m-info3.png" />
|
||||
<a>案件材料</a>
|
||||
</span>
|
||||
<span class="left-img-info flex-column" :class="leftActive == 4 ?'active':''" @click="leftActive = 4">
|
||||
<span class="left-img-info flex-column" :class="leftActive == 4 ?'active':''" @mouseenter="leftActive = 4">
|
||||
<img src="../../../assets/image/mediate/m-info4.png" />
|
||||
<a>还款方案</a>
|
||||
<a>案件文书</a>
|
||||
</span>
|
||||
<span class="left-img-info flex-column" :class="leftActive == 5 ?'active':''" @click="leftActive = 5">
|
||||
<span class="left-img-info flex-column" :class="leftActive == 5 ?'active':''" @mouseenter="leftActive = 5">
|
||||
<img src="../../../assets/image/mediate/m-info5.png" />
|
||||
<a>还款计划</a>
|
||||
</span>
|
||||
<span class="left-img-info flex-column" :class="leftActive == 6 ?'active':''" @click="leftActive = 6">
|
||||
<span class="left-img-info flex-column" :class="leftActive == 6 ?'active':''" @mouseenter="leftActive = 6">
|
||||
<img src="../../../assets/image/mediate/m-info6.png" />
|
||||
<a>还款凭证</a>
|
||||
</span>
|
||||
@ -61,7 +61,7 @@
|
||||
<div class="layout-center-left2-wrap">
|
||||
<el-scrollbar :style="'height:'+`${leftContentHeight}`+'px'">
|
||||
<!-- 债务信息 -->
|
||||
<div class="case-debt-info">
|
||||
<div v-if="leftActive == 1" class="case-debt-info">
|
||||
<!-- <div>债务信息</div> -->
|
||||
<div class="case-detail-label f-weight500 f18 mb-8">基本信息</div>
|
||||
<div class="case-detail-des flex-column">
|
||||
@ -104,8 +104,103 @@
|
||||
</div>
|
||||
|
||||
<!-- 联系人信息 -->
|
||||
<div v-if="leftActive == 2" class="case-contact-person">
|
||||
<div class="mb-16 flex-row justify-content-between">
|
||||
<span class="f-weight500 f18">联系人信息</span>
|
||||
<span class="cursor-pointer" @click="contactAddFlag = true"><i class="el-icon-plus"></i> 添加联系人</span>
|
||||
</div>
|
||||
<div v-if="contactAddFlag" class="case-detail-des flex-column mb-16">
|
||||
<div class="flex-row justify-content-between">
|
||||
<div class="flex-row mb-8">
|
||||
<a class="f16" style="width: 130px;">
|
||||
<el-input v-model.trim="contactAddObj.Name"
|
||||
clearable placeholder="请输入姓名" size="small">
|
||||
</el-input>
|
||||
</a>
|
||||
<a style="width: 140px;margin-left: 5px">
|
||||
<el-select v-model="contactAddObj.relation"
|
||||
placeholder="与债务人关系" size="small"
|
||||
class="width100">
|
||||
<el-option
|
||||
v-for="(item,index) in relationOptions"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-row">
|
||||
<a class="cursor-pointer pt-6">添加</a>
|
||||
<a class="cursor-pointer ml-8 pt-6" @click="contactAddFlag = false;contactAddObj = {}">取消</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row">
|
||||
<a style="width: 180px;">
|
||||
<el-input v-model.trim="contactAddObj.Phone" size="small"
|
||||
clearable placeholder="请输入手机号码" maxlength="11">
|
||||
</el-input>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="case-detail-des flex-column mb-16">
|
||||
<div class="flex-row justify-content-between">
|
||||
<div v-if="!contactUpdate" class="flex-row mb-8">
|
||||
<a class="f16">张三</a>
|
||||
<div class="case-lable">
|
||||
<a class="case-status0">本人</a>
|
||||
<a class="case-status1">空号</a>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="contactUpdate" class="flex-row mb-8">
|
||||
<a class="f16" style="width: 130px;">
|
||||
<el-input v-model.trim="contactObj.Name"
|
||||
clearable placeholder="请输入姓名" size="small">
|
||||
</el-input>
|
||||
</a>
|
||||
<a style="width: 140px;margin-left: 5px">
|
||||
<el-select v-model="contactObj.relation"
|
||||
placeholder="请选择与债务人关系" size="small"
|
||||
class="width100">
|
||||
<el-option
|
||||
v-for="(item,index) in relationOptions"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</a>
|
||||
</div>
|
||||
<div class="flex-row">
|
||||
<a v-if="contactUpdate" class="cursor-pointer pt-6">保存</a>
|
||||
<a v-if="contactUpdate" @click="contactUpdate = false" class="cursor-pointer ml-8 pt-6">取消</a>
|
||||
<a v-if="!contactUpdate" @click="contactUpdate = true" class="cursor-pointer">编辑</a>
|
||||
<a v-if="!contactUpdate" class="cursor-pointer ml-8">删除</a>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!contactUpdate">
|
||||
<a>手机号码:</a><a class="ml-8">13333333333</a>
|
||||
</div>
|
||||
<div v-if="contactUpdate" class="flex-row">
|
||||
<a style="width: 180px;">
|
||||
<el-input v-model.trim="contactObj.Phone" size="small"
|
||||
clearable placeholder="请输入手机号码" maxlength="11">
|
||||
</el-input>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 还款计划 -->
|
||||
<div v-if="leftActive == 5" class="case-repayment-schedule">
|
||||
<RepaymentSchedule :eventDialog.sync="eventDialog" />
|
||||
</div>
|
||||
<!-- 还款凭证 -->
|
||||
<div v-if="leftActive == 6" class="case-repayment-certificate">
|
||||
<RepaymentCertificate :eventDialog.sync="eventDialog" />
|
||||
</div>
|
||||
|
||||
<!-- 债务信息 -->
|
||||
</el-scrollbar>
|
||||
|
||||
</div>
|
||||
@ -271,9 +366,12 @@ import api from "@/services/caseManagement";
|
||||
export default {
|
||||
components: {
|
||||
uploadFile: () => import('@/components/uploadFile.vue'),//上传
|
||||
RepaymentSchedule: () => import('./RepaymentSchedule.vue'),//还款计划
|
||||
RepaymentCertificate: () => import('./RepaymentCertificate.vue'),//还款凭证
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
eventDialog:{caseId:this.$route.query.caseId},
|
||||
leftActive:1,
|
||||
rightActive:1,
|
||||
fileList:[],
|
||||
@ -281,6 +379,46 @@ import api from "@/services/caseManagement";
|
||||
baseInfo:{},//基本信息
|
||||
obligorInfo:[],//债务人信息
|
||||
caseId:'',//案件id
|
||||
// 联系人
|
||||
contactAddObj:{},
|
||||
contactAddFlag:false,
|
||||
contactObj:{},
|
||||
contactUpdate:false,
|
||||
relationOptions:[{label:'本人',value:'本人'},{label:'父母',value:'父母'},{label:'配偶',value:'配偶'},
|
||||
{label:'子女',value:'子女'},{label:'其他',value:'其他'},{label:'朋友',value:'朋友'},{label:'兄弟',value:'兄弟'},
|
||||
{label:'同事',value:'同事'},{label:'同学',value:'同学'}],
|
||||
// 还款计划
|
||||
repaymentObj:{
|
||||
type:'ALL'
|
||||
},
|
||||
RepaymentOptions:[{label:'一次性还款',value:'ALL'},{label:'全部分期',value:'STAGES'},{label:'部分先还加分期',value:'MIX'},{label:'其他',value:'OTHER'}],
|
||||
rulesClientRepayment:{
|
||||
type: [
|
||||
{ required: true, message: '请选择还款方式', trigger: 'change',},
|
||||
],
|
||||
totalAmount: [
|
||||
{ required: true, message: '请输入还款金额', trigger: 'change',},
|
||||
{ pattern: /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/, message: '请输入2位小数金额', trigger: ['blur', 'change']}
|
||||
],
|
||||
paybackDate: [
|
||||
{ required: true, message: '请选择还款截止日期', trigger: 'change',},
|
||||
],
|
||||
stagesDay: [
|
||||
{ required: true, message: '请选择每期还款日期', trigger: 'change',},
|
||||
],
|
||||
partAmount: [
|
||||
{ required: true, message: '请输入分期前偿还金额 ', trigger: 'change',},
|
||||
{ pattern: /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/, message: '请输入2位小数金额', trigger: ['blur', 'change']}
|
||||
],
|
||||
partDate: [
|
||||
{ required: true, message: '请选择分期前偿还日期', trigger: 'change',},
|
||||
],
|
||||
stagesNum: [
|
||||
{ required: true, message: '请输入分期期数', trigger: 'change',},
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: ['blur', 'change']}
|
||||
],
|
||||
},
|
||||
|
||||
};
|
||||
},
|
||||
computed:{
|
||||
@ -399,6 +537,14 @@ import api from "@/services/caseManagement";
|
||||
this.$message.error(e.msg || e)
|
||||
}
|
||||
},
|
||||
handleSubmitRepayment(){
|
||||
this.$refs.ruleFormRepayment.validate((valid) => {
|
||||
if (valid){
|
||||
console.log(1111)
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
handleBack(){
|
||||
// this.$route.query.sourcePage == 'mediationManagement'
|
||||
this.$router.push('/mediation-management')
|
||||
@ -569,9 +715,7 @@ import api from "@/services/caseManagement";
|
||||
}
|
||||
|
||||
}
|
||||
.case-detail-des{
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
238
src/pages/mediation-page/components/RepaymentCertificate.vue
Normal file
238
src/pages/mediation-page/components/RepaymentCertificate.vue
Normal file
@ -0,0 +1,238 @@
|
||||
<template>
|
||||
<div class="case-repayment-certificate">
|
||||
<div class="mb-16 flex-row justify-content-between">
|
||||
<span class="f-weight500 f18">还款凭证</span>
|
||||
<span class="cursor-pointer" @click="AddFlag = true"><i class="el-icon-plus"></i> 添加还款凭证</span>
|
||||
</div>
|
||||
<div v-if="AddFlag" class="case-detail-des flex-column mb-16 p-16 border-radius-8">
|
||||
<div class="flex-column justify-content-between">
|
||||
<el-form ref="ruleFormRepayment"
|
||||
:model="repaymentObj"
|
||||
:rules="rulesClientRepayment"
|
||||
label-width="130px">
|
||||
<el-form-item label="凭证金额" prop="amount">
|
||||
<el-input class="inputpaddingtop2"
|
||||
size="small"
|
||||
placeholder="请输入凭证金额"
|
||||
v-model="repaymentObj.amount">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="还款日期" prop="paybackTime">
|
||||
<el-date-picker class="width100" size="small"
|
||||
v-model="repaymentObj.paybackTime"
|
||||
type="date"
|
||||
placeholder="选择日期"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注说明" prop="remark">
|
||||
<el-input
|
||||
size="small"
|
||||
clearable
|
||||
placeholder="请输入备注说明"
|
||||
v-model="repaymentObj.remark">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="凭证" prop="mediaPath">
|
||||
<upload-file :file-list="fileList" :max-count="1"
|
||||
:show-file-name="false"
|
||||
uploadName="支持图片大小不超过10M"
|
||||
accept=".jpg,.png,.jpeg"
|
||||
:span="6"
|
||||
:fileSize="10"
|
||||
@handleUploadFile="handleUploadFile">
|
||||
</upload-file>
|
||||
</el-form-item>
|
||||
<el-form-item label="">
|
||||
<el-button @click="AddFlag = false" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmitRepayment()" size="small">保存</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="case-detail-des flex-column mb-16 p-16 border-radius-8" v-for="(proofitem,index) in ProofList" :key="index">
|
||||
<div class="flex-column justify-content-between">
|
||||
<el-form ref="ruleFormRepaymentUpdate"
|
||||
:model="proofitem"
|
||||
:rules="rulesClientRepayment"
|
||||
label-width="130px">
|
||||
<div class="flex-row justify-content-between mb-8">
|
||||
<div class="pt-8 flex-column">
|
||||
<span class="color-86909C">上传者:<a></a></span>
|
||||
<span class="color-86909C">上传时间:<a>{{ proofitem.createAt }}</a></span>
|
||||
</div>
|
||||
<div>
|
||||
<el-button type="primary" size="small">效验</el-button>
|
||||
<el-button size="small" @click="updateRow = index">编辑</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-form-item label="凭证金额" prop="amount">
|
||||
<el-input class="inputpaddingtop2" disabled
|
||||
size="small"
|
||||
placeholder="请输入凭证金额"
|
||||
v-model="proofitem.amount">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="还款日期" prop="paybackTime">
|
||||
<el-date-picker class="width100" size="small" disabled
|
||||
v-model="proofitem.paybackTime"
|
||||
type="date"
|
||||
placeholder="选择日期"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注说明" prop="remark">
|
||||
<el-input disabled
|
||||
size="small"
|
||||
clearable
|
||||
placeholder="请输入备注说明"
|
||||
v-model="proofitem.remark">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="凭证" prop="mediaPath">
|
||||
<upload-file :file-list="[{url: proofitem.proofUrl}]" :max-count="1"
|
||||
:readOnly="true"
|
||||
:show-file-name="true"
|
||||
uploadName="支持图片大小不超过10M"
|
||||
accept=".jpg,.png,.jpeg"
|
||||
:span="6"
|
||||
:fileSize="10"
|
||||
@handleUploadFile="handleUploadFile">
|
||||
</upload-file>
|
||||
</el-form-item>
|
||||
<el-form-item label="" v-if="updateRow > 0 && index == updateRow">
|
||||
<el-button @click="updateRow = 0" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmitUpdate()" size="small">保存</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import api from "@/services/caseManagement";
|
||||
export default {
|
||||
components: {
|
||||
uploadFile: () => import('@/components/uploadFile.vue'),//上传
|
||||
},
|
||||
props: {
|
||||
eventDialog: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
AddFlag:false,
|
||||
updateRow:0,
|
||||
repaymentObj:{
|
||||
mediaPath:[]
|
||||
},
|
||||
RepaymentOptions:[{label:'一次性还款',value:'ALL'},{label:'全部分期',value:'STAGES'},{label:'部分先还加分期',value:'MIX'},{label:'其他',value:'OTHER'}],
|
||||
rulesClientRepayment:{
|
||||
amount: [
|
||||
{ required: true, message: '请输入还款金额', trigger: 'change',},
|
||||
{ pattern: /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/, message: '请输入2位小数金额', trigger: ['blur', 'change']}
|
||||
],
|
||||
paybackTime: [
|
||||
{ required: true, message: '请选择还款日期', trigger: 'change',},
|
||||
],
|
||||
mediaPath: [
|
||||
{ required: true, message: '请上传文件', trigger: 'change',},
|
||||
],
|
||||
|
||||
|
||||
},
|
||||
ProofList:[],
|
||||
fileList:[]
|
||||
|
||||
|
||||
};
|
||||
},
|
||||
mounted () {
|
||||
this.getProofList()
|
||||
},
|
||||
methods: {
|
||||
handleSubmitUpdate(){
|
||||
this.$refs.ruleFormRepayment.validate((valid) => {
|
||||
if (valid){
|
||||
this.repaymentObj.caseId = this.eventDialog.caseId
|
||||
this.repaymentObj.proofUrl = this.repaymentObj.mediaPath[0]
|
||||
|
||||
api.gettraceProof_create(this.repaymentObj).then(res => {
|
||||
if(!res.code){
|
||||
this.updateRow = 0
|
||||
this.getProofList()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
handleSubmitRepayment(){
|
||||
this.$refs.ruleFormRepayment.validate((valid) => {
|
||||
if (valid){
|
||||
this.repaymentObj.caseId = this.eventDialog.caseId
|
||||
this.repaymentObj.proofUrl = this.repaymentObj.mediaPath[0]
|
||||
|
||||
api.gettraceProof_create(this.repaymentObj).then(res => {
|
||||
if(!res.code){
|
||||
this.AddFlag = false
|
||||
this.getProofList()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
getProofList(){
|
||||
api.gettraceProof_list({caseId:this.eventDialog.caseId}).then(res => {
|
||||
if(!res.code){
|
||||
this.ProofList = res
|
||||
this.ProofList.forEach(item =>{
|
||||
this.fileList.push({
|
||||
url: item.proofUrl,
|
||||
})
|
||||
item.mediaPath = [item.proofUrl]
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
handleUploadFile(fileList){
|
||||
// console.log('获取上传文件信息',fileList)
|
||||
fileList = JSON.parse(JSON.stringify(fileList))
|
||||
this.fileList = fileList.map((item,i) => {
|
||||
return {
|
||||
url: item.url,
|
||||
fileName:'上传',
|
||||
previewUrl:item.previewUrl
|
||||
}
|
||||
})
|
||||
this.repaymentObj.mediaPath = this.fileList.map((item) => item.url);
|
||||
},
|
||||
|
||||
|
||||
//
|
||||
handleClose() {
|
||||
this.$emit('update:eventTraDialog', null)
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.case-repayment-certificate{
|
||||
.case-detail-des{
|
||||
border:solid 1px #E5E6EB;
|
||||
.el-form-item{margin-bottom: 13px;}
|
||||
.inputpaddingtop2{padding-top:3px}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
328
src/pages/mediation-page/components/RepaymentSchedule.vue
Normal file
328
src/pages/mediation-page/components/RepaymentSchedule.vue
Normal file
@ -0,0 +1,328 @@
|
||||
<template>
|
||||
<div class="case-repayment-certificate">
|
||||
<div class="mb-16 flex-row justify-content-between">
|
||||
<span class="f-weight500 f18">还款计划</span>
|
||||
<span class="cursor-pointer" v-if="planList.length == 0" @click="updateFlag = true"><i class="el-icon-plus"></i> 添加还款计划</span>
|
||||
<span class="cursor-pointer" v-else @click="updateFlag = true"><i class="el-icon-plus"></i> 编辑还款计划</span>
|
||||
</div>
|
||||
<div v-if="planList.length >0 && !updateFlag" class="case-detail-des flex-column mb-16 p-16 border-radius-8">
|
||||
<div class="flex-column justify-content-between">
|
||||
<el-form ref="ruleFormRepayment"
|
||||
:model="repaymentObj"
|
||||
:rules="rulesClientRepayment"
|
||||
label-width="130px">
|
||||
<el-form-item label="还款方式" prop="type">
|
||||
<el-select v-model="repaymentObj.type" class="width100" disabled
|
||||
placeholder="请选择还款方式" size="small">
|
||||
<el-option
|
||||
v-for="(item,index) in RepaymentOptions"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="还款金额" prop="totalAmount">
|
||||
<el-input class="inputpaddingtop2" disabled
|
||||
size="small"
|
||||
placeholder="请输入还款金额"
|
||||
v-model="repaymentObj.totalAmount"
|
||||
@input="inputChange($event)">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<!-- 枚举备注: ALL :一次性全部回款 STAGES :全部分期 MIX :混合,部分先还加分期 OTHER :其他 -->
|
||||
<el-form-item v-if="repaymentObj.type == 'MIX'" label="分期前偿还金额" prop="partAmount">
|
||||
<el-input class="inputpaddingtop2" disabled
|
||||
size="small"
|
||||
placeholder="请输入分期前偿还金额"
|
||||
v-model="repaymentObj.partAmount"
|
||||
@input="inputChange($event)">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'MIX'" label="先还日期" prop="partDate">
|
||||
<el-date-picker class="width100" size="small" disabled
|
||||
v-model="repaymentObj.partDate"
|
||||
type="date"
|
||||
placeholder="选择先还日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'MIX'" label="分期部分金额" prop="productTypeId">
|
||||
<el-input class="inputpaddingtop2"
|
||||
size="small"
|
||||
disabled
|
||||
placeholder="分期部分金额"
|
||||
v-model="repaymentObj.moneyAmount">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="分期期数" prop="stagesNum">
|
||||
<el-input
|
||||
size="small" disabled
|
||||
placeholder="请输入分期期数"
|
||||
v-model="repaymentObj.stagesNum"
|
||||
@input="inputChange($event)">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="每期还款金额" prop="stagesAmount">
|
||||
<el-input class="inputpaddingtop2"
|
||||
size="small"
|
||||
disabled
|
||||
placeholder="每期还款金额"
|
||||
v-model="repaymentObj.stagesAmount">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="每期还款日期" prop="stagesDay">
|
||||
<el-select v-model="repaymentObj.stagesDay" class="width100" disabled
|
||||
placeholder="请选择每期还款日期" size="small">
|
||||
<el-option
|
||||
v-for="(item, index) in 31"
|
||||
:key="index"
|
||||
:label="(index+1)+'日'"
|
||||
:value="(index+1)">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'ALL' || repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="还款截止日期" prop="paybackDate">
|
||||
<el-date-picker class="width100" size="small" disabled
|
||||
v-model="repaymentObj.paybackDate"
|
||||
type="date"
|
||||
placeholder="选择日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注说明" prop="remark">
|
||||
<el-input disabled
|
||||
size="small"
|
||||
clearable
|
||||
placeholder="请输入备注说明"
|
||||
v-model="repaymentObj.remark">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="updateFlag" class="case-detail-des flex-column mb-16 p-16 border-radius-8">
|
||||
<div class="flex-column justify-content-between">
|
||||
<el-form ref="ruleFormRepayment"
|
||||
:model="repaymentObj"
|
||||
:rules="rulesClientRepayment"
|
||||
label-width="130px">
|
||||
|
||||
<el-form-item label="还款方式" prop="type">
|
||||
<el-select v-model="repaymentObj.type" class="width100"
|
||||
placeholder="请选择还款方式" size="small">
|
||||
<el-option
|
||||
v-for="(item,index) in RepaymentOptions"
|
||||
:key="index"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="还款金额" prop="totalAmount">
|
||||
<el-input class="inputpaddingtop2"
|
||||
size="small"
|
||||
placeholder="请输入还款金额"
|
||||
v-model="repaymentObj.totalAmount"
|
||||
@input="inputChange($event)">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<!-- 枚举备注: ALL :一次性全部回款 STAGES :全部分期 MIX :混合,部分先还加分期 OTHER :其他 -->
|
||||
<el-form-item v-if="repaymentObj.type == 'MIX'" label="分期前偿还金额" prop="partAmount">
|
||||
<el-input class="inputpaddingtop2"
|
||||
size="small"
|
||||
placeholder="请输入分期前偿还金额"
|
||||
v-model="repaymentObj.partAmount"
|
||||
@input="inputChange($event)">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'MIX'" label="先还日期" prop="partDate">
|
||||
<el-date-picker class="width100" size="small"
|
||||
v-model="repaymentObj.partDate"
|
||||
type="date"
|
||||
placeholder="选择先还日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'MIX'" label="分期部分金额" prop="productTypeId">
|
||||
<el-input class="inputpaddingtop2"
|
||||
size="small"
|
||||
disabled
|
||||
placeholder="分期部分金额"
|
||||
v-model="repaymentObj.moneyAmount">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="分期期数" prop="stagesNum">
|
||||
<el-input
|
||||
size="small"
|
||||
placeholder="请输入分期期数"
|
||||
v-model="repaymentObj.stagesNum"
|
||||
@input="inputChange($event)">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="每期还款金额" prop="stagesAmount">
|
||||
<el-input class="inputpaddingtop2"
|
||||
size="small"
|
||||
disabled
|
||||
placeholder="每期还款金额"
|
||||
v-model="repaymentObj.stagesAmount">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="每期还款日期" prop="stagesDay">
|
||||
<el-select v-model="repaymentObj.stagesDay" class="width100"
|
||||
placeholder="请选择每期还款日期" size="small">
|
||||
<el-option
|
||||
v-for="(item, index) in 31"
|
||||
:key="index"
|
||||
:label="(index+1)+'日'"
|
||||
:value="(index+1)">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item v-if="repaymentObj.type == 'ALL' || repaymentObj.type == 'STAGES' || repaymentObj.type == 'MIX'" label="还款截止日期" prop="paybackDate">
|
||||
<el-date-picker class="width100" size="small"
|
||||
v-model="repaymentObj.paybackDate"
|
||||
type="date"
|
||||
placeholder="选择日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注说明" prop="remark">
|
||||
<el-input
|
||||
size="small"
|
||||
clearable
|
||||
placeholder="请输入备注说明"
|
||||
v-model="repaymentObj.remark">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="">
|
||||
<el-button @click="updateFlag = false" size="small">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmitRepayment()" size="small">保存</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import api from "@/services/caseManagement";
|
||||
export default {
|
||||
components: {
|
||||
},
|
||||
props: {
|
||||
eventDialog: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {}
|
||||
},
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
updateFlag:false,
|
||||
repaymentObj:{type:'ALL'},
|
||||
RepaymentOptions:[{label:'一次性还款',value:'ALL'},{label:'全部分期',value:'STAGES'},{label:'部分先还加分期',value:'MIX'},{label:'其他',value:'OTHER'}],
|
||||
rulesClientRepayment:{
|
||||
type: [
|
||||
{ required: true, message: '请选择还款方式', trigger: 'change',},
|
||||
],
|
||||
totalAmount: [
|
||||
{ required: true, message: '请输入还款金额', trigger: 'change',},
|
||||
{ pattern: /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/, message: '请输入2位小数金额', trigger: ['blur', 'change']}
|
||||
],
|
||||
paybackDate: [
|
||||
{ required: true, message: '请选择还款截止日期', trigger: 'change',},
|
||||
],
|
||||
stagesDay: [
|
||||
{ required: true, message: '请选择每期还款日期', trigger: 'change',},
|
||||
],
|
||||
partAmount: [
|
||||
{ required: true, message: '请输入分期前偿还金额 ', trigger: 'change',},
|
||||
{ pattern: /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0.\d{1,2}$/, message: '请输入2位小数金额', trigger: ['blur', 'change']}
|
||||
],
|
||||
partDate: [
|
||||
{ required: true, message: '请选择分期前偿还日期', trigger: 'change',},
|
||||
],
|
||||
stagesNum: [
|
||||
{ required: true, message: '请输入分期期数', trigger: 'change',},
|
||||
{ pattern: /^[1-9]\d*$/, message: '只能输入正整数', trigger: ['blur', 'change']}
|
||||
],
|
||||
},
|
||||
planList:[]
|
||||
|
||||
};
|
||||
},
|
||||
mounted () {
|
||||
this.getplanlist()
|
||||
},
|
||||
methods: {
|
||||
handleSubmitRepayment(){
|
||||
this.$refs.ruleFormRepayment.validate((valid) => {
|
||||
if (valid){
|
||||
this.repaymentObj.caseId = this.eventDialog.caseId
|
||||
api.getcase_payback_save(this.repaymentObj).then(res => {
|
||||
if(!res.code){
|
||||
this.updateFlag = false
|
||||
this.getplanlist()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
getplanlist(){
|
||||
api.getcase_payback_planlist({caseId:this.eventDialog.caseId}).then(res => {
|
||||
if(!res.code){
|
||||
this.planList = res
|
||||
if(this.planList.length > 0 ){this.repaymentObj = this.planList[0]}
|
||||
}
|
||||
})
|
||||
},
|
||||
// 输入还款金额 输入分期期数
|
||||
inputChange(){
|
||||
if(this.repaymentObj.type == 'STAGES')
|
||||
{
|
||||
if(this.repaymentObj.totalAmount !='' &&this.repaymentObj.stagesNum !='' && this.repaymentObj.totalAmount !=undefined &&this.repaymentObj.stagesNum !=undefined)
|
||||
{
|
||||
this.repaymentObj.stagesAmount = ((this.repaymentObj.totalAmount*1)/(this.repaymentObj.stagesNum*1)).toFixed(2)
|
||||
}
|
||||
}
|
||||
|
||||
if(this.repaymentObj.type == 'MIX')
|
||||
{
|
||||
if(this.repaymentObj.totalAmount !='' &&this.repaymentObj.stagesNum !='' && this.repaymentObj.totalAmount !=undefined &&this.repaymentObj.stagesNum !=undefined)
|
||||
{
|
||||
this.repaymentObj.stagesAmount = ((this.repaymentObj.totalAmount*1 - this.repaymentObj.partAmount*1)/(this.repaymentObj.stagesNum*1)).toFixed(2)
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
|
||||
//
|
||||
handleClose() {
|
||||
this.$emit('update:eventTraDialog', null)
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.case-repayment-certificate{
|
||||
.case-detail-des{
|
||||
border:solid 1px #E5E6EB;
|
||||
.el-form-item{ margin-bottom: 12px;}
|
||||
.inputpaddingtop2{padding-top:3px}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -82,39 +82,41 @@
|
||||
|
||||
</div>
|
||||
<div class="case-pk-cont flex-column">
|
||||
<div v-for="(item,index) in tableData" :key="index" class="case-pk-list">
|
||||
<div class="flex-row justify-content-between mb-8">
|
||||
<span class="f20 f-weight500">{{item.pkgName}}</span>
|
||||
<span class="cursor-pointer" @click="jumpUrl(`/case-management?dataKey=casepack&pkgId=${item.id}`)">查看详情 ></span>
|
||||
<el-scrollbar :style="'height:'+`${leftContentHeight}`+'px'">
|
||||
<div v-for="(item,index) in tableData" :key="index" class="case-pk-list">
|
||||
<div class="flex-row justify-content-between mb-8">
|
||||
<span class="f20 f-weight500">{{item.pkgName}}</span>
|
||||
<span class="cursor-pointer" @click="jumpUrl(`/case-management?dataKey=casepack&pkgId=${item.id}`)">查看详情 ></span>
|
||||
</div>
|
||||
<div class="flex-row mb-16">
|
||||
<span>{{item.entrustingAgencyName}}</span>
|
||||
<span class="ml-16">委案日期:{{item.planStartTime | formaDate('yyyy-MM-dd')}}</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between case-pk-num mb-16">
|
||||
<span>
|
||||
<p><a>{{item.caseTotal}}</a>件</p>
|
||||
案件总量
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.assignTotal}}</a>件</p>
|
||||
已分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.caseTotal - item.assignTotal}}</a>件</p>
|
||||
待分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.months}}</a>个月</p>
|
||||
委案期限
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-end mb-8">
|
||||
<el-button size="mini" type="primary" @click="handleCaseAllocation(item)">案件分配</el-button>
|
||||
<!-- <el-button size="mini" @click="handleEdit(scope)">预设还款方案</el-button> -->
|
||||
<el-button size="mini" @click="handleDelete(item)">删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row mb-16">
|
||||
<span>{{item.entrustingAgencyName}}</span>
|
||||
<span class="ml-16">委案日期:{{item.planStartTime | formaDate('yyyy-MM-dd')}}</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between case-pk-num mb-16">
|
||||
<span>
|
||||
<p><a>{{item.caseTotal}}</a>件</p>
|
||||
案件总量
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.assignTotal}}</a>件</p>
|
||||
已分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.caseTotal - item.assignTotal}}</a>件</p>
|
||||
待分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.months}}</a>个月</p>
|
||||
委案期限
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-end mb-8">
|
||||
<el-button size="mini" type="primary" @click="handleCaseAllocation(item)">案件分配</el-button>
|
||||
<!-- <el-button size="mini" @click="handleEdit(scope)">预设还款方案</el-button> -->
|
||||
<el-button size="mini" @click="handleDelete(item)">删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-radius-4 flex-column casework3">
|
||||
@ -156,28 +158,28 @@
|
||||
</div>
|
||||
<div class="case-pk-cont">
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:0,title:'短信发送追踪'}">
|
||||
<span>短信发送追踪</span><span><a>1</a>/<a>{{traceData.smsTrackingCount}}</a></span>
|
||||
<span>短信发送追踪</span><span><a>{{traceData.smsTrackingCount.failed}}</a>/<a>{{traceData.smsTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:1,title:'外呼事项追踪'}">
|
||||
<span>外呼事项追踪</span><span><a>1</a>/<a>{{traceData.intelligentCallTrackingCount}}</a></span>
|
||||
<span>外呼事项追踪</span><span><a>{{traceData.intelligentCallTrackingCount.failed}}</a>/<a>{{traceData.intelligentCallTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:2,title:'视频调解追踪'}">
|
||||
<span>视频调解追踪</span><span><a>1</a>/<a>{{traceData.videoAppointmentTrackingCount}}</a></span>
|
||||
<span>视频调解追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:3,title:'文书生成追踪'}">
|
||||
<span>文书生成追踪</span><span><a>1</a>/<a>{{traceData.documentGenerationTrackingCount}}</a></span>
|
||||
<span>文书生成追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:4,title:'文书签字追踪'}">
|
||||
<span>文书签字追踪</span><span><a>1</a>/<a>{{traceData.documentSignatureTrackingCount}}</a></span>
|
||||
<span>文书签字追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:5,title:'文书签章追踪'}">
|
||||
<span>文书签章追踪</span><span><a>1</a>/<a>{{traceData.electronicSealTrackingCount}}</a></span>
|
||||
<span>文书签章追踪</span><span><a>{{traceData.electronicSealTrackingCount.failed}}</a>/<a>{{traceData.electronicSealTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:6,title:'文书送达追踪'}">
|
||||
<span>文书送达追踪</span><span><a>1</a>/<a>{{traceData.documentDeliveryTrackingCount}}</a></span>
|
||||
<span>文书送达追踪</span><span><a>{{traceData.documentDeliveryTrackingCount.failed}}</a>/<a>{{traceData.documentDeliveryTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:7,title:'还款凭证登记'}">
|
||||
<span>还款凭证登记</span><span><a>1</a>/<a>{{traceData.repaymentRecordTrackingCount}}</a></span>
|
||||
<span>还款凭证登记</span><span><a>{{traceData.repaymentRecordTrackingCount.failed}}</a>/<a>{{traceData.repaymentRecordTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -225,7 +227,40 @@
|
||||
importCaseDialog:null,//导入
|
||||
|
||||
myEcharts: null,
|
||||
traceData:{},
|
||||
traceData:{
|
||||
"smsTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"intelligentCallTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"repaymentRecordTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"documentSignatureTrackingCount": {
|
||||
"total": 1,
|
||||
"failed": 0
|
||||
},
|
||||
"documentDeliveryTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"electronicSealTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"documentGenerationTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"videoAppointmentTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
}
|
||||
},
|
||||
|
||||
};
|
||||
},
|
||||
@ -238,6 +273,12 @@
|
||||
let oh = document.documentElement.clientHeight;
|
||||
return oh-66
|
||||
|
||||
},
|
||||
// 获取抽屉drawer的内容高度
|
||||
leftContentHeight(){
|
||||
let oh = document.documentElement.clientHeight;
|
||||
return oh-256
|
||||
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
|
||||
@ -82,39 +82,41 @@
|
||||
|
||||
</div>
|
||||
<div class="case-pk-cont flex-column">
|
||||
<div v-for="(item,index) in tableData" :key="index" class="case-pk-list">
|
||||
<div class="flex-row justify-content-between mb-8">
|
||||
<span class="f20 f-weight500">{{item.pkgName}}</span>
|
||||
<span class="cursor-pointer" @click="jumpUrl(`/case-management?dataKey=casepack&pkgId=${item.id}`)">查看详情 ></span>
|
||||
<el-scrollbar :style="'height:'+`${leftContentHeight}`+'px'">
|
||||
<div v-for="(item,index) in tableData" :key="index" class="case-pk-list">
|
||||
<div class="flex-row justify-content-between mb-8">
|
||||
<span class="f20 f-weight500">{{item.pkgName}}</span>
|
||||
<span class="cursor-pointer" @click="jumpUrl(`/case-management?dataKey=casepack&pkgId=${item.id}`)">查看详情 ></span>
|
||||
</div>
|
||||
<div class="flex-row mb-16">
|
||||
<span>{{item.entrustingAgencyName}}</span>
|
||||
<span class="ml-16">委案日期:{{item.planStartTime | formaDate('yyyy-MM-dd')}}</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between case-pk-num mb-16">
|
||||
<span>
|
||||
<p><a>{{item.caseTotal}}</a>件</p>
|
||||
案件总量
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.assignTotal}}</a>件</p>
|
||||
已分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.caseTotal - item.assignTotal}}</a>件</p>
|
||||
待分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.months}}</a>个月</p>
|
||||
委案期限
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-end mb-8">
|
||||
<el-button size="mini" type="primary" @click="handleCaseAllocation(item)">案件分配</el-button>
|
||||
<!-- <el-button size="mini" @click="handleEdit(scope)">预设还款方案</el-button> -->
|
||||
<el-button size="mini" @click="handleDelete(item)">删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex-row mb-16">
|
||||
<span>{{item.entrustingAgencyName}}</span>
|
||||
<span class="ml-16">委案日期:{{item.planStartTime | formaDate('yyyy-MM-dd')}}</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between case-pk-num mb-16">
|
||||
<span>
|
||||
<p><a>{{item.caseTotal}}</a>件</p>
|
||||
案件总量
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.assignTotal}}</a>件</p>
|
||||
已分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.caseTotal - item.assignTotal}}</a>件</p>
|
||||
待分案件数
|
||||
</span>
|
||||
<span>
|
||||
<p><a>{{item.months}}</a>个月</p>
|
||||
委案期限
|
||||
</span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-end mb-8">
|
||||
<el-button size="mini" type="primary" @click="handleCaseAllocation(item)">案件分配</el-button>
|
||||
<!-- <el-button size="mini" @click="handleEdit(scope)">预设还款方案</el-button> -->
|
||||
<el-button size="mini" @click="handleDelete(item)">删除</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-radius-4 flex-column casework3">
|
||||
@ -156,28 +158,28 @@
|
||||
</div>
|
||||
<div class="case-pk-cont">
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:0,title:'短信发送追踪'}">
|
||||
<span>短信发送追踪</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>短信发送追踪</span><span><a>{{traceData.smsTrackingCount.failed}}</a>/<a>{{traceData.smsTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:1,title:'外呼事项追踪'}">
|
||||
<span>外呼事项追踪</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>外呼事项追踪</span><span><a>{{traceData.intelligentCallTrackingCount.failed}}</a>/<a>{{traceData.intelligentCallTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:2,title:'视频调解追踪'}">
|
||||
<span>视频调解追踪</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>视频调解追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:3,title:'文书生成追踪'}">
|
||||
<span>文书生成追踪</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>文书生成追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:4,title:'文书签字追踪'}">
|
||||
<span>文书签字追踪</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>文书签字追踪</span><span><a>{{traceData.videoAppointmentTrackingCount.failed}}</a>/<a>{{traceData.videoAppointmentTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:5,title:'文书签章追踪'}">
|
||||
<span>文书签章追踪</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>文书签章追踪</span><span><a>{{traceData.electronicSealTrackingCount.failed}}</a>/<a>{{traceData.electronicSealTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:6,title:'文书送达追踪'}">
|
||||
<span>文书送达追踪</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>文书送达追踪</span><span><a>{{traceData.documentDeliveryTrackingCount.failed}}</a>/<a>{{traceData.documentDeliveryTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
<div class="flex-row justify-content-between cursor-pointer" @click="eventTraDialog={traceType:7,title:'还款凭证登记'}">
|
||||
<span>还款凭证登记</span><span><a>1</a>/<a>2</a></span>
|
||||
<span>还款凭证登记</span><span><a>{{traceData.repaymentRecordTrackingCount.failed}}</a>/<a>{{traceData.repaymentRecordTrackingCount.total}}</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -225,6 +227,40 @@
|
||||
importCaseDialog:null,//导入
|
||||
|
||||
myEcharts: null,
|
||||
traceData:{
|
||||
"smsTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"intelligentCallTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"repaymentRecordTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"documentSignatureTrackingCount": {
|
||||
"total": 1,
|
||||
"failed": 0
|
||||
},
|
||||
"documentDeliveryTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"electronicSealTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"documentGenerationTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
},
|
||||
"videoAppointmentTrackingCount": {
|
||||
"total": 0,
|
||||
"failed": 0
|
||||
}
|
||||
},
|
||||
|
||||
};
|
||||
},
|
||||
@ -237,7 +273,13 @@
|
||||
let oh = document.documentElement.clientHeight;
|
||||
return oh-66
|
||||
|
||||
}
|
||||
},
|
||||
// 获取抽屉drawer的内容高度
|
||||
leftContentHeight(){
|
||||
let oh = document.documentElement.clientHeight;
|
||||
return oh-256
|
||||
|
||||
}
|
||||
},
|
||||
mounted(){
|
||||
this.getCaseapkList()
|
||||
@ -282,7 +324,7 @@
|
||||
getstatistic_trace(){
|
||||
workApi.statistic_trace({current:1,size:100}).then(res => {
|
||||
if (!res.code) {
|
||||
this.tableData = res.records;
|
||||
this.traceData = res;
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
@ -100,6 +100,24 @@ const caseManagementApi = {
|
||||
return service.service.post(`${apiMediate}cases/caseInfo/getNextCaseById`, data)
|
||||
},
|
||||
|
||||
// 回款计划列表,没有分页
|
||||
getcase_payback_planlist: data => {
|
||||
return service.service.post(`${apiMediate}api/case_payback_plan/list`, data)
|
||||
},
|
||||
// 新增回款计划
|
||||
getcase_payback_save: data => {
|
||||
return service.service.post(`${apiMediate}api/case_payback_plan/save`, data)
|
||||
},
|
||||
|
||||
// 还款凭证列表
|
||||
gettraceProof_list: data => {
|
||||
return service.service.post(`${apiMediate}api/trace/traceProof/list`, data)
|
||||
},
|
||||
// 上传还款凭证
|
||||
gettraceProof_create: data => {
|
||||
return service.service.post(`${apiMediate}api/trace/traceProof/create`, data)
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user