保后新需求

master
e 3 years ago
parent 5f64757dab
commit 3258ccaf6d
  1. 1
      README.md
  2. 22
      babel.config.js
  3. 6
      package-lock.json
  4. 738
      src/assets/css/common.css
  5. 1
      src/assets/css/common.min.css
  6. 3
      src/assets/css/common.scss
  7. 12
      src/assets/css/main.css
  8. 736
      src/components/common/afterInsurance.vue
  9. 1
      src/components/common/bus.js
  10. 28
      src/components/common/businessApplyDepartment.vue
  11. 4
      src/components/common/flowPathMoudle.vue
  12. 66
      src/components/common/left-sidebar.vue
  13. 2
      src/components/common/messageDepartment.vue
  14. 6
      src/components/page/Customer.vue
  15. 2
      src/components/page/Workbench-Client.vue
  16. 1493
      src/components/page/afterLoan/afterInsurance.vue
  17. 101
      src/components/page/afterLoan/afterLoan.vue
  18. 75
      src/components/page/afterLoan/collection.vue
  19. 450
      src/components/page/afterLoan/complete.vue
  20. 206
      src/components/page/afterLoan/progress.vue
  21. 1
      src/components/page/background-Manpower.vue
  22. 16
      src/main.js
  23. 23
      src/router/index.js
  24. 6
      src/store/modules/guarantee.js
  25. 28
      src/store/modules/loan.js
  26. 25
      src/utils/api.js
  27. 18
      src/utils/http.js
  28. 10
      vue.config.js

@ -1,3 +1,2 @@
# dq_webcode
大庆智慧金融前端代码PC端---2021

@ -3,18 +3,18 @@ module.exports = {
'@vue/app'
],
"plugins": [
["import", {
["import",
{
"libraryName": "view-design",
"libraryDirectory": "src/components",
}],
// ,// 按需引入ant
// ["import", {
// "libraryName":"ant-design-vue",
// style:true
// }]
}
],
["import",
{
"libraryName":"ant-design-vue",
"libraryDirectory": "es",
"style":true
},"ant-design-vue"
]
]
}

6
package-lock.json generated

@ -2936,9 +2936,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001148",
"resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001148.tgz",
"integrity": "sha1-3JfH7ZGKszv4cG3dXjhyh+AV1jc=",
"version": "1.0.30001251",
"resolved": "https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001251.tgz?cache=0&sync_timestamp=1628744299971&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcaniuse-lite%2Fdownload%2Fcaniuse-lite-1.0.30001251.tgz",
"integrity": "sha1-aFOmBuxQiTEV22YPgsCU0Y8JbYU=",
"dev": true
},
"case-sensitive-paths-webpack-plugin": {

@ -0,0 +1,738 @@
@charset "UTF-8";
/* 公共样式文件 */
.bgw {
background: #fff;
}
.bg-yellow {
background: #FFA56A;
}
.bg-refuse {
background: #FF9784;
}
.bg-green {
background: #46C435;
}
.c-white {
color: #fff;
}
.c-black {
color: #666666;
}
.c-gray {
color: #cccccc;
}
.c-blue {
color: #52b1ff !important;
}
.c-red {
color: #ff8738;
}
.c-yellow {
color: #FFC76E;
}
.c-green {
color: #46C435;
}
.c-refuse {
color: #FF9784;
}
.font-blue {
color: #00b9ff;
}
.bgred {
background: #ff8738;
}
.container_bg {
width: 86%;
margin: auto;
}
.text-color {
color: #9b9b9b;
}
.cursor {
cursor: pointer;
}
.wd100 {
width: 100% !important;
}
.wd95 {
width: 95%;
}
.wd90 {
width: 90%;
}
.wd80 {
width: 80%;
}
.wd85 {
width: 85%;
}
.wd70 {
width: 70% !important;
}
.wd60 {
width: 60%;
}
.wd50 {
width: 50%;
}
.wd48 {
width: 48%;
}
.wd45 {
width: 45%;
}
.wd40 {
width: 40%;
}
.wd30 {
width: 30%;
}
.wd35 {
width: 35%;
}
.wd23 {
width: 23%;
}
.wd25 {
width: 25%;
}
.wd20 {
width: 20%;
}
.wd15 {
width: 15%;
}
.wd10 {
width: 10%;
}
.wd5 {
width: 5%;
}
.wd0 {
width: 0;
}
.ht100 {
height: 100%;
}
.ht40 {
height: 35px !important;
}
.ht50 {
height: 50px;
}
.pd0 {
padding: 0 !important;
}
.pdlr20 {
padding-left: 10px;
padding-right: 10px;
}
.pdl0 {
padding-left: 0;
}
.pdl10 {
padding-left: 10px !important;
}
.pdl15 {
padding-left: 15px !important;
}
.pdl20 {
padding-left: 20px !important;
}
.pdl30 {
padding-left: 30px !important;
}
.pdr0 {
padding-right: 0;
}
.pdr10 {
padding-right: 10px !important;
}
.pdr15 {
padding-right: 15px !important;
}
.pdr20 {
padding-right: 20px !important;
}
.pdr30 {
padding-right: 30px !important;
}
.pdt20 {
padding-top: 20px;
}
.pdt30 {
padding-top: 30px;
}
.pdt40 {
padding-top: 40px;
}
.pdt50 {
padding-top: 50px;
}
.pdt60 {
padding-top: 60px;
}
.pdb30 {
padding-bottom: 30px;
}
.pdb40 {
padding-bottom: 40px;
}
.pdb20 {
padding-bottom: 20px;
}
.pdb10 {
padding-bottom: 10px;
}
.pdt10 {
padding-top: 10px !important;
}
.pdtb10 {
padding-top: 10px;
padding-bottom: 10px;
}
.pdtb20 {
padding-top: 20px;
padding-bottom: 20px;
}
.pdtb30 {
padding-top: 30px;
padding-bottom: 30px;
}
.pdtb40 {
padding-top: 40px;
padding-bottom: 40px;
}
.pdtb50 {
padding-top: 50px;
padding-bottom: 50px;
}
.border-b {
border-bottom: 2px solid #f2f2f2;
}
.border-t {
border-top: 2px solid #f2f2f2;
}
.mga {
margin: auto;
}
.mg20 {
margin: 20px;
}
.mgtb0 {
margin-top: 0;
margin-bottom: 0;
}
.mgtb10 {
margin: 10px 0;
}
.mgtb20 {
margin: 20px 0;
}
.mgtb30 {
margin: 30px 0;
}
.mgtb40 {
margin: 40px 0;
}
.mgtb50 {
margin: 50px 0;
}
.mglr0 {
margin-left: 0;
margin-right: 0;
}
.mglr10 {
margin-left: 10px;
margin-right: 10px;
}
.mglr20 {
margin-left: 20px;
margin-right: 20px;
}
.mglr30 {
margin-left: 30px;
margin-right: 30px;
}
.mglr40 {
margin-left: 40px;
margin-right: 40px;
}
.mglr50 {
margin-left: 50px;
margin-right: 50px;
}
.mgl0 {
margin-left: 0 !important;
}
.mgl10 {
margin-left: 10px;
}
.mgl20 {
margin-left: 20px;
}
.mgl25 {
margin-left: 25px;
}
.mgl30 {
margin-left: 30px;
}
.mgl35 {
margin-left: 35px;
}
.mgl40 {
margin-left: 40px;
}
.mgl50 {
margin-left: 50px;
}
.mgl80 {
margin-left: 80px;
}
.mgl90 {
margin-left: 90px;
}
.mgl100 {
margin-left: 100px;
}
.mgr10 {
margin-right: 10px;
}
.mgr20 {
margin-right: 20px;
}
.mgr30 {
margin-right: 30px;
}
.mgr33 {
margin-right: 33px;
}
.mgr35 {
margin-right: 35px;
}
.mgt34 {
margin-top: 34px;
}
.mgr40 {
margin-right: 40px;
}
.mgr50 {
margin-right: 50px;
}
.mgr60 {
margin-right: 60px;
}
.mgr70 {
margin-right: 70px;
}
.mgr80 {
margin-right: 80px;
}
.mgr90 {
margin-right: 90px;
}
.mgr100 {
margin-right: 100px;
}
.mgt10 {
margin-top: 10px;
}
.mgt15 {
margin-top: 15px;
}
.mgt20 {
margin-top: 20px !important;
}
.mgt30 {
margin-top: 30px !important;
}
.mgt40 {
margin-top: 40px !important;
}
.mgt50 {
margin-top: 50px !important;
}
.mgt60 {
margin-top: 60px !important;
}
.mgt70 {
margin-top: 70px !important;
}
.mgt80 {
margin-top: 80px !important;
}
.mgt90 {
margin-top: 90px !important;
}
.mgt100 {
margin-top: 100px;
}
.mrb30 {
margin-bottom: 30px;
}
.mg0 {
margin: 0;
}
.mgb0 {
margin-bottom: 0;
}
.mgb10 {
margin-bottom: 10px;
}
.mgb20 {
margin-bottom: 20px;
}
.mgb30 {
margin-bottom: 30px;
}
.mgb40 {
margin-bottom: 40px !important;
}
.mgb50 {
margin-bottom: 50px !important;
}
.mgb60 {
margin-bottom: 60px !important;
}
.mgb70 {
margin-bottom: 70px !important;
}
.mgb80 {
margin-bottom: 80px !important;
}
.bd0 {
border: 0;
}
.tx-center {
text-align: center;
}
.fz-14 {
font-size: 14px !important;
}
.fz-16 {
font-size: 16px !important;
}
.fz-18 {
font-size: 18px !important;
}
.fz-20 {
font-size: 20px !important;
}
.df {
display: flex;
}
.df-ac {
display: flex;
align-items: center;
}
.dn {
display: none !important;
}
.flex-align-center {
display: flex;
align-items: center;
}
.flex-wrap {
flex-wrap: wrap;
}
.fj-center {
display: flex;
align-items: center;
justify-content: center;
}
.fj-end {
justify-content: flex-end;
}
.flex1 {
flex: 1;
}
.df-between {
display: flex;
align-items: center;
justify-content: space-between;
}
.df-jc {
justify-content: center;
}
.not-zoom {
display: flex;
flex-shrink: 0;
}
.btns {
position: absolute;
bottom: 20px;
left: 50%;
transform: translate(-50%, 0);
}
.self {
position: relative;
}
.position-a {
position: absolute;
}
.dib {
display: inline-block;
font-size: 16px;
}
.df-column {
display: flex;
flex-direction: column;
}
.icon-size {
width: 20px;
}
.manpower-icon {
width: 35px;
height: 35px;
}
.radius10 {
border-radius: 10px;
}
.radius-round {
border-radius: 50%;
}
.shadow {
border: 1px solid #EBEEF5;
transition: .3s;
}
.shadow:hover {
box-shadow: 0 0.125rem 0.75rem 0 rgba(0, 0, 0, 0.1);
}
.head-icon {
width: 100px;
height: 100px;
border-radius: 50%;
}
.black-all {
background: black;
opacity: 0.5;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
.display-none {
display: none;
}
.left-border {
border-left: 10px solid #00b9ff;
line-height: 27px;
}
.icon {
width: 1.5em;
height: 1.5em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
.text-icon {
width: 16px;
height: 16px;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
.box-sizing {
box-sizing: border-box;
}
.white-btn {
border: 1px solid #00b9ff;
}
.btn-wh {
width: 120px;
height: 35px;
}
.top-module-icon {
width: 26px;
height: 26px;
}
.btn-pdt {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.search-box {
height: 60px;
}
.delete {
text-align: center;
}
.delete img {
width: 140px;
height: 188px;
}
.nowrap {
white-space: nowrap;
}

File diff suppressed because one or more lines are too long

@ -573,3 +573,6 @@ margin-right: 50px;
width: 140px;
height: 188px;
}
.nowrap{
white-space: nowrap;
}

@ -133,9 +133,12 @@ img{
/* 输入框 */
#app .el-input__inner{
border-radius: 23px!important;
padding: 0 20px!important;
padding: 0 30px!important;
border-color: #ccc;
}
#app .el-input__icon{
line-height: 36px;
}
/* 系统管理覆盖样式 */
#app .system .el-input__inner{
width: 90%;
@ -154,14 +157,14 @@ img{
background: #fff!important;
} */
/* 单选按钮 */
#app .el-radio-group{
#app .round-radio.el-radio-group{
border: 1px solid #ccc!important;
border-radius: 20px!important;
}
#app .el-radio-button:first-child .el-radio-button__inner{
#app .round-radio .el-radio-button:first-child .el-radio-button__inner{
border-radius: 20px!important;
}
#app .el-radio-button__inner{
#app .round-radio .el-radio-button__inner{
border: none!important;
border-radius: 20px!important;
}
@ -259,6 +262,7 @@ img{
#app .el-form-item__label{
font-size: 14px;
color: #00B9FF;
white-space: nowrap;
}
.el-time-panel__content::after,

@ -1,736 +0,0 @@
<template>
<div>
<div v-show="loanStatus == 1">
<div class="mgt20 left-border fz-16"><p class="c-black mgl10">保后管理</p></div>
<div class="mgt20 pdb20">
<div class="flex-between mgtb20">
<div class="flex-center">
<p class="fz-16 mgr10 font-blue mgl20">状态</p>
<el-select v-model="paymentStatus" placeholder="请选择" clearable @change="search">
<el-option v-for="item in logTypeList" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
</div>
<div class="flex-center">
<el-input
placeholder="搜索业务编号/客户名称"
class="mgr20"
v-model="keyword"
clearable
></el-input>
<el-button v-preventReClick type="primary" size="small" round @click="search">查询</el-button>
<el-button v-preventReClick type="primary" plain size="small" round icon="el-icon-upload2" @click="insExport">导出</el-button>
</div>
</div>
<div class="shadow radius10 pdt20">
<div class="flex-between mab20 mgl10">
<div class="flex-center">
<p class="hr_tag"></p>
<span class="hr_text">担保列表</span>
</div>
</div>
<el-table :data="insuranceData" stripe header-align="center" class="mat20" @selection-change="insSelectionChange" :row-key="getRowKeys" :key="1">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="100" label="序号" align="center"></el-table-column>
<el-table-column prop="businessCode" label="业务编号" align="center"></el-table-column>
<el-table-column prop="customerName" label="客户名称" align="center"></el-table-column>
<el-table-column prop="phone" label="联系电话" align="center"></el-table-column>
<el-table-column prop="businessType" label="业务类型" align="center"></el-table-column>
<el-table-column prop="guaranteeAmount" label="担保额度(元)" align="center"></el-table-column>
<el-table-column prop="guaranteeTime" label="担保期限" align="center"></el-table-column>
<el-table-column prop="applyTime" label="申请日期" align="center"></el-table-column>
<el-table-column prop="repaymentAmount" label="还款额度(元)" align="center"></el-table-column>
<el-table-column prop="remainAmount" label="剩余额度(元)" align="center"></el-table-column>
<el-table-column prop="repaymentTime" label="还款期数" align="center"></el-table-column>
<el-table-column prop="department" label="所属部门" align="center"></el-table-column>
<el-table-column prop="paymentStatus" label="还款状态" align="center"></el-table-column>
<el-table-column label="操作" width="200" align="center">
<template slot-scope="scope">
<el-button v-if="$router.currentRoute.meta.btn.includes('办理结项') && scope.row.paymentStatus == '已还清'" type="text" @click="conclusion(scope.row)">办理结项</el-button>
<el-button v-if="$router.currentRoute.meta.btn.includes('还款录入') && scope.row.paymentStatus != '已结项'" type="text" @click="edit(scope.row)">还款录入</el-button>
<el-button v-if="$router.currentRoute.meta.btn.includes('保后还款记录')" type="text" @click="history(scope.row)">还款记录</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background @current-change="currentChange" layout="total, prev, pager, next" :current-page="pageNo" :total="totals">
</el-pagination>
</div>
</div>
</div>
</div>
<!-- 还款表单提交 -->
<div v-show="loanStatus == 2">
<el-row :gutter="10">
<el-col :span="24">
<el-card shadow="hover" class="mgb20 mat20">
<div>
<div class="mgb20 left-border fz-16"><p class="c-black mgl10">担保信息</p></div>
<div>
<el-form label-width="100px" class="flex-start-around">
<el-col :span="12" style="margin-right: 120px;">
<el-form-item label="业务编号:">
<span>{{guaranteeForm.businessCode}}</span>
</el-form-item>
<el-form-item label="业务类别:">
<span>{{guaranteeForm.businessType}}</span>
</el-form-item>
<el-form-item label="担保额度(元):">
<span>{{guaranteeForm.guaranteeAmount}}</span>
</el-form-item>
<el-form-item label="贷款银行:">
<span>{{guaranteeForm.bank}}</span>
</el-form-item>
</el-col>
<el-col :span="12" style="margin-left: 120px;">
<el-form-item label="客户名称:">
<span>{{guaranteeForm.customerName}}</span>
</el-form-item>
<el-form-item label="担保期限:">
<span>{{guaranteeForm.guaranteeTime}}</span>
</el-form-item>
<el-form-item label="贷款用途:">
<span>{{guaranteeForm.amountWide}}</span>
</el-form-item>
</el-col>
</el-form>
</div>
</div>
</el-card>
</el-col>
<el-col :span="24">
<el-card shadow="hover" class="mgb20 mat20">
<div>
<div class="mgb20 left-border fz-16"><p class="c-black mgl10">还款信息</p></div>
<div>
<el-form :model="repaymentForm" :rules="rules" ref="repaymentForm" label-width="120px" class="flex-start-around" :disabled="this.loanbackStatus == '查看'">
<el-col :span="12" style="margin-right: 120px;">
<el-form-item label="应还款日" prop="repaymentDate" class="date">
<el-date-picker v-model="repaymentForm.repaymentDate" placeholder="请选择应还款日"
type="date" style="width: 100%;" value-format="yyyy-MM-dd" @change="overdueChange"></el-date-picker>
</el-form-item>
<el-form-item label="逾期天数">
<el-input disabled v-model="overdueDays" placeholder="请输入逾期天数"></el-input>
</el-form-item>
<el-form-item label="本次还款(元)" prop="currentRepayment">
<el-input v-model="repaymentForm.currentRepayment" placeholder="请输入本次还款金额"
type="text" oninput="value=value.replace(/[^\d.]/g,'')"></el-input>
</el-form-item>
<el-form-item label="其他费用(元)">
<el-input v-model="repaymentForm.otherExpenses" placeholder="请输入其他费用"
type="text" oninput="value=value.replace(/[^\d.]/g,'')"></el-input>
</el-form-item>
<el-form-item label="还款备注">
<el-input v-model="repaymentForm.repaymentNotes" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入还款备注"></el-input>
</el-form-item>
</el-col>
<el-col :span="12" style="margin-left: 120px;">
<el-form-item label="实际还款日" class="date">
<!-- <el-date-picker v-model="repaymentForm.actualRepaymentDate" placeholder="请选择实际还款日"
type="date" style="width: 100%;" value-format="yyyy-MM-dd"></el-date-picker> -->
<el-date-picker v-model="repaymentForm.actualRepaymentDate" type="date" style="width: 100%;" placeholder="请选择实际还款日"
:picker-options="endTimeOptions" @focus="clickEndTime" format="yyyy-MM-dd" value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="还款总额(元)">
<el-input disabled v-model="totalRepayment" placeholder="还款总额" maxlength="10"></el-input>
</el-form-item>
<el-form-item label="利息(元)" prop="interest">
<el-input v-model="repaymentForm.interest" placeholder="请输入利息"
type="text" oninput="value=value.replace(/[^\d.]/g,'')"></el-input>
</el-form-item>
<el-form-item label="减免金额(元)">
<el-input v-model="repaymentForm.deductionAmount" placeholder="请输入减免金额"></el-input>
</el-form-item>
</el-col>
</el-form>
</div>
</div>
</el-card>
</el-col>
</el-row>
<div class="mab20 flex-start-around" v-if="this.loanbackStatus != '查看'">
<el-button v-preventReClick type="primary" round class="mag" @click="saveAdd('repaymentForm')">提交</el-button>
<el-button type="primary" plain round class="mag" @click="cancel">取消</el-button>
</div>
</div>
<!-- 还款记录 -->
<div v-show="loanStatus == 3">
<el-row :gutter="10">
<el-col :span="24">
<el-card shadow="hover" class="mgb20 mat20">
<div>
<div class="mgb20 left-border fz-16"><p class="c-black mgl10">还款信息</p></div>
<div>
<el-form label-width="100px" class="flex-start-around">
<el-col :span="8">
<el-form-item label="还款期数:">
<span>{{StatisticsData.repaymentSum}}</span>
</el-form-item>
<el-form-item label="逾期额度(元):">
<span>{{StatisticsData.currentSum}}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="逾期期数:">
<span>{{StatisticsData.overdueSum}}</span>
</el-form-item>
<el-form-item label="还款额度(元):">
<span>{{StatisticsData.alreadyPaymentSum}}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="逾期利息(元):">
<span>{{StatisticsData.overdueInterest}}</span>
</el-form-item>
<el-form-item label="剩余额度(元):">
<span>{{StatisticsData.remainSum}}</span>
</el-form-item>
</el-col>
</el-form>
</div>
</div>
</el-card>
</el-col>
</el-row>
<div class="mgt20 pdb20">
<div class="flex-between search-box">
<div class="flex-center">
<div class="df-ac">
<p class="fz-16 mgr10 font-blue mgl20">应还款日</p>
<div class="date">
<el-date-picker v-model="hisSearchForm.actualRepaymentDate"
placeholder="请选择日期"
unlink-panels align="right" type="date" value-format="yyyy-MM-dd" clearable></el-date-picker>
</div>
</div>
<div class="flex-center">
<p class="fz-16 mgr10 font-blue mgl20">状态</p>
<el-select v-model="hisSearchForm.hisType" placeholder="请选择" clearable>
<el-option v-for="item in TypeList" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
</div>
<el-button v-preventReClick class="ht40 btn-pdt mgl10" type="primary" round @click="statisticsSearch">查询</el-button>
</div>
<div class="mgr10 df" v-if="hispaymentStatus != '已结项'">
<!-- <el-button class="ht40 btn-pdt mgl10" type="primary" round>查询</el-button> -->
<el-button v-preventReClick class="ht40 btn-pdt mgl10 font-blue" round @click="hisExport">导出</el-button>
<el-button v-if="$router.currentRoute.meta.btn.includes('保后新增')" class="ht40 btn-pdt mgl10" type="primary" round @click="addRepayment">新增</el-button>
<el-button v-if="$router.currentRoute.meta.btn.includes('保后批量删除')" class="ht40 btn-pdt mgl10" type="danger" round @click="delAllHis">批量删除</el-button>
</div>
</div>
<div class="shadow radius10 pdt20">
<div class="flex-between mab20 mgl10">
<div class="flex-center">
<p class="hr_tag"></p>
<span class="hr_text">还款记录列表</span>
</div>
</div>
<el-table :data="repaymentData" stripe header-align="center" class="mat20" @selection-change="hisSelectionChange" :row-key="getRowKeys" :key="1">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="100" label="序号" align="center"></el-table-column>
<el-table-column prop="repaymentDate" label="应还款日" align="center"></el-table-column>
<el-table-column prop="actualRepaymentDate" label="实际还款日" align="center"></el-table-column>
<el-table-column prop="guaranteeAmount" label="担保额度(元)" align="center"></el-table-column>
<el-table-column prop="currentRepayment" label="本次还款(元)" align="center"></el-table-column>
<el-table-column prop="interest" label="本次利息(元)" align="center"></el-table-column>
<el-table-column prop="otherExpenses" label="其他费用(元)" align="center"></el-table-column>
<el-table-column prop="totalRepayment" label="还款总额(元)" align="center"></el-table-column>
<el-table-column prop="deductionAmount" label="减免金额(元)" align="center"></el-table-column>
<el-table-column prop="overdueDays" label="逾期天数" align="center"></el-table-column>
<el-table-column prop="repaymentStatus" label="状态" align="center"></el-table-column>
<el-table-column prop="submitterName" label="提交人" align="center"></el-table-column>
<el-table-column prop="createTime" label="提交时间" align="center"></el-table-column>
<el-table-column prop="repaymentNotes" label="还款备注" align="center"></el-table-column>
<el-table-column label="操作" width="200" align="center">
<template slot-scope="scope">
<el-button v-if="$router.currentRoute.meta.btn.includes('保后查看')" type="text" @click="goRepaymentDetail(scope.row,'查看')">查看</el-button>
<el-button v-if="$router.currentRoute.meta.btn.includes('保后编辑') && hispaymentStatus != '已结项'" type="text" @click="goRepaymentDetail(scope.row,'编辑')">编辑</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background @current-change="hiscurrentChange" layout="total, prev, pager, next" :current-page="hisPage" :total="histotals">
</el-pagination>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { insuranceList, insuranceDetail, repaymentEntry, repaymentList, repaymentStatistics, excelHis, delRepayment, repaymentDetail, excelInsurance, updateInsurance, updateRepayment } from '../../utils/api';
export default {
data() {
return {
keyword: '',
paymentStatus: '',
pageNo: 1,
pageNumber: 10,
totals: 1,
insuranceData: [],
insMultipleSelection: [],
loanStatus: 1,
id: '',
guaranteeForm: {},
repaymentForm: {
currentRepayment: '',
interest: '',
otherExpenses: '',
overdueDays: 0
},
rules: {
repaymentDate: [
{ required: true, message: '请选择应还款日', trigger: 'blur' }
],
currentRepayment: [
{ required: true, message: '请输入本次还款金额', trigger: 'blur' },
{ pattern: /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/, message: '请输入正确金额格式,可保留两位小数' }
],
interest: [
{ required: true, message: '请输入利息', trigger: 'blur' },
{ pattern: /^(([1-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/, message: '请输入正确金额格式,可保留两位小数' }
]
},
logTypeList: [{
label: '还款中',
id: 1
},
{
label: '已逾期',
id: 2
},
{
label: '已还清',
id: 3
},
{
label: '已结项',
id: 4
}],
//
hisidId: '',
guaranteeAmount: '',
hisPage: 1,
histotals: 1,
repaymentData: [],
StatisticsData: {},
TypeList: [{
label: '待还款',
id: 1
},
{
label: '已还款',
id: 2
},
{
label: '已逾期',
id: 3
},
{
label: '未到期',
id: 4
}],
hisSearchForm: {
actualRepaymentDate: '',
hisType: ''
},
hisMultipleSelection: [],
repaymentDetailForm: {},
RepaymentId: '',
loanbackStatus: '',
endTimeOptions: {},
hispaymentStatus: ''
};
},
computed:{
totalRepayment(){
if(isNaN(parseFloat(this.repaymentForm.otherExpenses)) || this.repaymentForm.otherExpenses == ''){
if (isNaN(parseFloat(this.repaymentForm.currentRepayment) + parseFloat(this.repaymentForm.interest))) {
return ''
} else {
return (parseFloat(this.repaymentForm.currentRepayment)*100 + parseFloat(this.repaymentForm.interest)*100)/100
}
}else{
if (isNaN(parseFloat(this.repaymentForm.currentRepayment) + parseFloat(this.repaymentForm.interest) + parseFloat(this.repaymentForm.otherExpenses))) {
return ''
} else {
return (parseFloat(this.repaymentForm.currentRepayment)*100 + parseFloat(this.repaymentForm.interest)*100 + parseFloat(this.repaymentForm.otherExpenses)*100)/100
}
}
},
overdueDays(){
if(this.repaymentForm.repaymentDate && !this.repaymentForm.actualRepaymentDate){
//date1
let date1 = new Date(this.repaymentForm.repaymentDate);
//date2
let date2 = new Date();
if(date1.getTime() < date2.getTime()){
date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
const diff = date2.getTime() - date1.getTime(); //
const diffDate = diff / (24 * 60 * 60 * 1000); //
return diffDate
}else{
return 0
}
}else{
if(this.repaymentForm.repaymentDate && this.repaymentForm.actualRepaymentDate){
//date1
let date1 = new Date(this.repaymentForm.repaymentDate);
//date2
let date2 = new Date(this.repaymentForm.actualRepaymentDate);
if(date1.getTime() < date2.getTime()){
date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
const diff = date2.getTime() - date1.getTime(); //
const diffDate = diff / (24 * 60 * 60 * 1000); //
return diffDate
}else{
return 0
}
}else{
return 0
}
}
}
},
watch: {
"$store.state.loan.loanStatus":function(val){
this.loanStatus = val
if(val == 1){
this.insuranceData = []
this.getData()
}
if(val == 2){
this.id = this.$store.state.loan.id
this.RepaymentId = this.$store.state.loan.RepaymentId
this.loanbackStatus = this.$store.state.loan.loanbackStatus
this.guaranteeForm = {}
this.repaymentForm = {
currentRepayment: '',
interest: '',
otherExpenses: '',
overdueDays: 0
}
this.getDetail()
if(this.loanbackStatus == '查看' || this.loanbackStatus == '编辑'){
this.getRepaymentDetail()
}
}
if(val == 3){
this.hisidId = this.$store.state.loan.hisidId
this.guaranteeAmount = this.$store.state.loan.guaranteeAmount
this.statistics()
this.repaymentList()
}
this.$store.commit("loanStatusData", { loanStatus: this.loanStatus });
}
},
created(){
this.loanStatus = this.$store.state.loan.loanStatus
if(this.loanStatus == 1){
this.getData()
}
if(this.loanStatus == 2){
this.id = this.$store.state.loan.id
this.RepaymentId = this.$store.state.loan.RepaymentId
this.loanbackStatus = this.$store.state.loan.loanbackStatus
this.guaranteeForm = {}
this.repaymentForm = {
currentRepayment: '',
interest: '',
otherExpenses: '',
overdueDays: 0
}
this.getDetail()
if(this.loanbackStatus == '查看' || this.loanbackStatus == '编辑'){
this.getRepaymentDetail()
}
}
if(this.loanStatus == 3){
this.hisidId = this.$store.state.loan.hisidId
this.guaranteeAmount = this.$store.state.loan.guaranteeAmount
this.statistics()
this.repaymentList()
}
},
methods:{
//
async getData() {
let res = await insuranceList({
page: this.pageNo,
size: this.pageNumber,
CustomerNumberOrName: this.keyword,
paymentStatus: this.paymentStatus
});
res.data.list.map(e =>{
e.paymentStatus = this.core.paymentStatus(e.paymentStatus)
})
this.insuranceData = res.data.list;
this.totals = res.data.totalCount;
},
search() {
this.pageNo = 1;
this.getData();
},
currentChange(val) {
this.pageNo = val;
this.getData();
},
getSize(val){
this.pageNo = 1
this.pageNumber = val
this.getData()
},
insSelectionChange(val){
this.insMultipleSelection = val;
},
//
insExport(){
// if(this.insMultipleSelection.length != ''){
let exportIds = this.insMultipleSelection.map(e => e.id).join()
let url = `${excelInsurance}?ids=${exportIds}`
window.location.href = url
// }else{
// this.$message.error(' ');
// }
},
//
edit(row){
this.loanStatus = 2
this.$store.commit("loanStatusData", { loanStatus: 2 });
this.id = row.id
this.$store.commit("idData", { id: row.id });
this.RepaymentId = ''
this.$store.commit("RepaymentIdData", { RepaymentId: '' });
this.loanbackStatus = '录入'
this.$store.commit("loanbackStatusData", { loanbackStatus: '录入' });
},
//
history(row){
this.loanStatus = 3
this.$store.commit("loanStatusData", { loanStatus: 3 });
this.hisId = row.id
this.$store.commit("hisidIdData", { hisidId: row.id, guaranteeAmount: row.guaranteeAmount });
this.hispaymentStatus = row.paymentStatus
this.$store.commit("hispaymentStatusData", { hispaymentStatus: row.paymentStatus });
},
//
conclusion(row){
this.$confirm('此还款确定要办理结项吗?', '提示', {
type: 'warning'
})
.then(() => {
updateInsurance({id: row.id}).then(res=>{
this.$message.success('结项成功');
this.getData()
}).catch(err=>{
})
}).catch(() => {});
},
//*******
//
async getDetail(){
let res = await insuranceDetail({
id: this.id
});
this.guaranteeForm = res.data
},
//
overdueChange(val){
if(val){
//date1
let date1 = new Date(val);
//date2
let date2 = new Date();
if(date1.getTime() < date2.getTime()){
date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
const diff = date2.getTime() - date1.getTime(); //
const diffDate = diff / (24 * 60 * 60 * 1000); //
this.repaymentForm.overdueDays = diffDate
}else{
this.repaymentForm.overdueDays = 0
}
}else{
this.repaymentForm.overdueDays = 0
}
},
//
saveAdd(repaymentForm){
this.$refs[repaymentForm].validate((valid) => {
if (valid) {
if(this.RepaymentId == ''){
this.repaymentForm.insuranceId = this.id
this.repaymentForm.totalRepayment = this.totalRepayment
this.repaymentForm.overdueDays = this.overdueDays
repaymentEntry(this.repaymentForm).then(res=>{
this.$message.success("录入成功!");
this.loanStatus = 1
this.$store.commit("loanStatusData", { loanStatus: 1 });
}).catch(err=>{
})
}else{
this.repaymentForm.totalRepayment = this.totalRepayment
this.repaymentForm.overdueDays = this.overdueDays
updateRepayment(this.repaymentForm).then(res=>{
this.$message.success("编辑成功!");
this.loanStatus = 3
this.$store.commit("loanStatusData", { loanStatus: 3 });
}).catch(err=>{
})
}
}
})
},
//
cancel(){
this.loanStatus = 1
this.$store.commit("loanStatusData", { loanStatus: 1 });
},
//
clickEndTime(){
this.endTimeOptions.disabledDate = time => {
if (new Date()) {
if (time.getTime() > new Date().getTime()) {
return true
}
} else {
if (time.getTime() < Date.now() - 8.64e7) {
return true
}
}
}
},
//*******
//
async statistics(){
let res = await repaymentStatistics({
insuranceId: this.hisidId,
guaranteeAmount: this.guaranteeAmount
});
this.StatisticsData = res.data
},
//
async repaymentList(){
let res = await repaymentList({
page: this.hisPage,
size: this.pageNumber,
insuranceId: this.hisidId,
CustomerNumberOrName: this.hisSearchForm.actualRepaymentDate,
status: this.hisSearchForm.hisType
});
res.data.list.map(e =>{
e.repaymentStatus = this.core.stcStatus(e.repaymentStatus)
})
this.repaymentData = res.data.list
this.histotals = res.data.totalCount
},
//
statisticsSearch(){
this.hisPage = 1;
this.repaymentList()
},
hiscurrentChange(val){
this.hisPage = val;
this.repaymentList()
},
getRowKeys(row) {
return row.id;
},
hisSelectionChange(val) {
this.hisMultipleSelection = val;
},
//
hisExport(){
this.hisId
// if(this.hisMultipleSelection.length != ''){
let exportIds = this.hisMultipleSelection.map(e => e.id).join()
let url = `${excelHis}?ids=${exportIds}&insuranceId=`+this.hisId
window.location.href = url
// }else{
// this.$message.error(' ');
// }
},
//
delAllHis(){
if(this.hisMultipleSelection.length != ''){
let delIds = this.hisMultipleSelection.map(e => e.id)
this.$confirm('确定要删除选中数据吗?', '提示', {
type: 'warning'
})
.then(() => {
delRepayment(delIds).then(res=>{
this.hisMultipleSelection = [];
this.$message.success('删除成功');
this.statisticsSearch()
}).catch(err=>{
})
}).catch(() => {});
}else{
this.$message.error('请先选择还款记录列表数据 !');
}
},
//
addRepayment(){
this.loanStatus = 2
this.$store.commit("loanStatusData", { loanStatus: 2 });
this.RepaymentId = ''
this.$store.commit("RepaymentIdData", { RepaymentId: '' });
this.loanbackStatus = '新增'
this.$store.commit("loanbackStatusData", { loanbackStatus: '新增' });
},
goRepaymentDetail(row,type){
this.loanStatus = 2
this.$store.commit("loanStatusData", { loanStatus: 2 });
this.RepaymentId = row.id
this.$store.commit("RepaymentIdData", { RepaymentId: row.id });
this.id = row.insuranceId
this.$store.commit("idData", { id: row.insuranceId });
this.loanbackStatus = type
this.$store.commit("loanbackStatusData", { loanbackStatus: type });
},
async getRepaymentDetail(){
let res = await repaymentDetail({
id: this.RepaymentId
});
// this.totalRepayment = res.data.totalRepayment
// this.overdueDays = res.data.overdueDays
this.repaymentForm = res.data
},
}
}
</script>

@ -4,3 +4,4 @@ import Vue from 'vue';
const bus = new Vue();
export default bus;
// 没啥用,有vuex还用bus,搭项目的太菜

@ -349,13 +349,8 @@
v-model="mainbank"
:fetch-suggestions="querySearchAsync"
:placeholder="fromData[21]&&fromData[21].prompt?fromData[21].prompt:'请输入银行名称'"
@select="handleSelect"
></el-autocomplete>
<p class="mgl10">-</p>
<!-- <el-select @focus="setMinWidth" class="wd50" v-model="businessApply.bank" placeholder="选择银行">
<el-option :style="{ 'min-width': minWidth + 2 + 'px' }" v-for="item in bankOption" :key="item.id" :label="item.bankName" :value="item.bankName"></el-option>
</el-select> -->
<!-- 对应银行的分行直接输入应该是可填可不填 -->
<el-input :disabled="disable" @change="bankgroup($event,'else')" v-model="elsebank" class="wd45 mgl10 dib" placeholder="分行名称" clearable></el-input>
</div>
</el-form-item>
@ -1001,8 +996,6 @@ export default {
assetAssignDisabel:false,//
informationAudit:false,//-------
bankSelect:[],
showAffiliated: false, //
addEnterprise: false, //
auditDis:false,//
@ -1018,10 +1011,22 @@ export default {
sendShow:false,//
}
},
created(){
computed:{
bankSelect:function(){
return this.$store.state.guarantee.bankData
}
},
async created(){
if(sessionStorage.getItem('message-data')){
let data = JSON.parse(sessionStorage.getItem('message-data'))
}
if(this.bankSelect.length===0){
let res = await allBankName(),
arr = res.data.map(item=>{
return {value:item.bankName}
});
this.$store.commit('getBanks',arr)
}
this.designFrom()//
},
mounted(){
@ -1048,7 +1053,6 @@ mounted(){
this.businessDisabel = true
this.nowBtnis = 'businessWatch'
}else{//
//
this.loans = this.$store.state.guarantee.loans
//
@ -1082,12 +1086,8 @@ mounted(){
this.loans = false
this.disposeFileList()
this.disable = false;
}
}
},
filters:{
linkmanFilter(val){
@ -1880,8 +1880,6 @@ methods:{
var results = queryString ? this.bankSelect.filter(this.createStateFilter(queryString)) : this.bankSelect;
cb(results);
},
handleSelect(item) {
},
//
seeImg(url){
let len = url.length,

@ -38,7 +38,7 @@
<div class="flex-center mgt20">
<p class="font-blue fz-16 mgr10 not-zoom">流程状态</p>
<!-- 流程状态旁边的字写定死的值根据返回的数组某个id进行show以及切换显示 -->
<el-radio-group class="flow" v-model="parameter.flowStatus" @change="efficiencyChart">
<el-radio-group class="flow round-radio" v-model="parameter.flowStatus" @change="efficiencyChart">
<!-- span再根据某数据变更即可 -->
<!--
2021-5-28 去掉括号内容
@ -96,7 +96,7 @@
<div class="flex-center mgt20">
<p class="font-blue fz-16 mgr10 not-zoom">流程状态</p>
<!-- 流程状态旁边的字写定死的值根据返回的数组某个id进行show以及切换显示 -->
<el-radio-group class="flow" v-model="listParameter.operatingStatus" @change="personalEfficiencyList">
<el-radio-group class="flow round-radio" v-model="listParameter.operatingStatus" @change="personalEfficiencyList">
<el-radio-button label="">不限</el-radio-button>
<el-radio-button :label="0">我发起&nbsp;&nbsp;<span >({{initiateNum}})</span></el-radio-button>
<el-radio-button :label="1">待处理&nbsp;&nbsp;<span >({{pendingNum}})</span></el-radio-button>

@ -2,8 +2,9 @@
<!-- 侧边栏组件传一个title数组父级定义positionrelative达到高度100% -->
<!-- 取参数进行切换组件定义getSidebarVal接受参数 -->
<div class="left-sidebar not-zoom shadow">
<el-menu :default-active="pitchOn" class="wd100 bd0">
<el-menu mode="vertical" :default-active="pitchOn" class="wd100 bd0" :default-openeds="['0']" >
<el-menu-item
v-if="title.length>0"
v-for="item in title"
:key="item.index"
:index="item.index"
@ -12,24 +13,70 @@
>
<span slot="title" class="fz-16">&nbsp;&nbsp;{{ item.name }}</span>
</el-menu-item>
<!-- 含折叠 -->
<el-submenu v-if="menus.head.length>0" v-for="(item, index) in menus.head" :key="5+index" index="0">
<template slot="title">{{item}}</template>
<el-menu-item
v-for="(i,ind) in menus.body[item]"
:key="ind"
:index="i.index"
background-color="#F3F3F3"
@click="setIndex(i.index)"
>
<span slot="title" class="fz-14">&nbsp;&nbsp;{{ i.name }}</span>
</el-menu-item>
</el-submenu>
</el-menu>
</div>
</template>
<script>
export default {
props: {
title: { type: Array },
title: {
type: Array,
default:function(){
return []
}
},
/*
menus:{
head:['name1','name2'],
body:{
name1:[{name:xxx,index:1},...]
}
}
*/
menus:{
type:Object,
default:function(){
return {
head:[]
}
}
},
pitchOn:String,//
},
data() {
return {};
},
created(){
console.log(this.menus,'this.menus',this.title);
},
methods:{
//
setIndex(index) {
this.$emit('getSidebarVal',index)
},
/*
head:['',''],
body:{
head[0]:[],
}
*/
}
};
</script>
@ -39,8 +86,7 @@ export default {
border-radius: 10px;
height: 100%;
width: 160px;
overflow: hidden;
/deep/ .el-menu {
border-radius: 10px;
}
@ -61,4 +107,14 @@ export default {
padding: 0 !important;
text-align: center;
}
/deep/ .el-submenu .el-menu-item{
min-width: 0;
font-size: 14px;
}
/deep/ .el-submenu__title{
font-size: 16px;
}
/deep/ .el-submenu__icon-arrow{
right: 10px;
}
</style>

@ -26,7 +26,7 @@
</el-table-column>
<el-table-column prop="createTime" label="申请日期" min-width="80"></el-table-column>
<el-table-column prop="businessType" label="审批状态" min-width="80">
<template slot-scope="scope">
<template slot-scope="scope">·
<p v-show="scope.row.status == 0" class="c-refuse">待指派</p>
<p v-show="scope.row.status == 1" class="c-refuse">审核中</p>
<p v-show="scope.row.status == 2" class="c-green">已审核</p>

@ -13,7 +13,7 @@
<div class="flex-between mgtb20">
<div class="df-ac">
<div class=" not-zoom mgr20 font-blue">创建时间</div>
<el-radio-group v-model="searchForm.month" @change="itemRadio">
<el-radio-group class="round-radio" v-model="searchForm.month" @change="itemRadio">
<el-radio-button class="btn-group" v-for="(item, index) in dateList" :key="index" :label="item.id">{{item.name}}</el-radio-button>
</el-radio-group>
</div>
@ -123,10 +123,6 @@
</el-upload>
</div>
<p class="download_tips">tips: 请先下载模板再进行导入文件</p>
<!-- <span slot="footer" class="dialog-footer">
<el-button round @click="importVisible = false"> </el-button>
<el-button round type="primary" @click="uploadSure"> </el-button>
</span> -->
</el-dialog>
</el-col>
</el-row>

@ -17,7 +17,7 @@
<div class="flex-center">
<p class="font-blue fz-16 mgr30 not-zoom">创建时间</p>
<div>
<el-radio-group v-model="listSeach.createTime" @change="itemRadio">
<el-radio-group class="round-radio" v-model="listSeach.createTime" @change="itemRadio">
<el-radio-button class="btn-group" v-for="(item,index) in dateList" :key="index" :label="item.id">{{item.name}}</el-radio-button>
</el-radio-group>
</div>

File diff suppressed because it is too large Load Diff

@ -2,38 +2,46 @@
<div class="container_bg">
<div class="border-b flex-between ht50">
<div class="flex-center">
<img src="../../assets/img/icon-guarantee.png" class="manpower-icon mgr10" />
<p class="fz-18 c-black">保后管理系统</p>
<img src="../../../assets/img/icon-guarantee.png" class="manpower-icon mgr10" />
<p class="fz-18 c-black">保后业务管理系统</p>
</div>
<!-- 这是一个后退按钮组件 -->
<back @click.native="backTo()"></back>
</div>
<div class="self main mgt20 df">
<!-- 侧边栏 -->
<leftSidebar :title="leftDate" @getSidebarVal="getIndex" :pitchOn="showValue"></leftSidebar>
<leftSidebar :menus="menus" :title="title" @getSidebarVal="getIndex" :pitchOn="showValue"></leftSidebar>
<div class="main-right mgl20 self shadow radius10">
<div v-if="showValue == '0'">
<afterInsurance ref="afterInsuranceRef"></afterInsurance>
</div>
<div v-if="showValue == '1'">
<collection ref="systemLogRef"></collection>
</div>
<!-- 保后管理 -->
<afterInsurance v-if="showValue == '0'" ref="afterInsuranceRef"></afterInsurance>
<!-- 催收管理 -->
<collection v-if="showValue == '1'" ref="systemLogRef"></collection>
<!-- 清收完成统计 -->
<liquidateComplete v-if="showValue ==='2'" ref="complete"></liquidateComplete>
<!-- 请收进度查询 -->
<liquidateProgress v-if="showValue==='3'"></liquidateProgress>
</div>
</div>
</div>
</template>
<script>
import leftSidebar from '../common/left-sidebar';
import leftSidebar from '../../common/left-sidebar';
import liquidateComplete from './complete.vue'
import afterInsurance from './afterInsurance.vue'
import collection from './collection.vue'
import liquidateProgress from './progress.vue'
import axios from 'axios';
import {processManageList , updateProcessManage , designateEmpTrees , updateUserVisual,processVisualList} from '../../utils/api'
import {processManageList , updateProcessManage , designateEmpTrees , updateUserVisual,processVisualList} from '../../../utils/api'
export default {
components: {
leftSidebar,
leftSidebar,liquidateComplete,liquidateProgress,afterInsurance,collection
},
data() {
return {
leftDate:[],
title:[],
menus:{},
showValue: '0', //
loanStatusHome: 1,
logStatusHome: 1,
@ -42,7 +50,6 @@ export default {
};
},
watch: {
//
"$store.state.loan.loanStatus":function(val){
this.loanStatusHome = val
this.$store.commit("loanStatusData", { loanStatus: this.loanStatusHome });
@ -51,7 +58,6 @@ export default {
this.loanbackStatusHome = val
this.$store.commit("loanbackStatusData", { loanbackStatus: this.loanbackStatusHome });
},
//
"$store.state.loan.logStatus":function(val){
this.logStatusHome = val
this.$store.commit("logStatusData", { logStatus: this.logStatusHome });
@ -63,28 +69,51 @@ export default {
},
created(){
if(this.$router.currentRoute.meta.btn.includes('保后管理')){
this.leftDate.push({ name: '保后管理', index: '0' })
this.title.push({ name: '保后管理', index: '0' })
}
if(this.$router.currentRoute.meta.btn.includes('催收管理')){
this.leftDate.push({ name: '催收管理', index: '1' })
this.title.push({ name: '催收管理', index: '1' })
}
this.menus = {
head:['数据统计与查询'],
body:{
'数据统计与查询':[{name: '清收完成统计', index: '2'},{name: '清收进度查询', index: '3'}]
}
}
/* // 判断权限--
//
if(this.$router.currentRoute.meta.btn.includes('数据统计与查询')){
this.titlehead.push('数据统计与查询')
if(this.$router.currentRoute.meta.btn.includes('清收完成统计')){
this.title.body['数据统计与查询'].push({ name: '清收完成统计', index: '0' })
}
if(this.$router.currentRoute.meta.btn.includes('清收进度查询')){
this.title.body['数据统计与查询'].push({ name: '清收进度查询', index: '1' })
}
} */
this.showValue = this.$store.state.loan.leftStatus
this.loanStatusHome = this.$store.state.loan.loanStatus
this.logStatusHome = this.$store.state.loan.logStatus
this.logbackStatusHome = this.$store.state.loan.logbackStatus
this.loanbackStatusHome = this.$store.state.loan.loanbackStatus
},
computed: {
liquidate(){
return this.$store.state.loan.liquidate
}
},
methods:{
goto(path) {
this.$router.push('/' + path);
},
backTo(){
if(this.showValue == '0'){
switch (this.showValue) {
case '0':
switch (this.loanStatusHome) {
case 1:
this.goto('workbench')
break;
case 2: //
case 2:
if(this.loanbackStatusHome == '录入'){
this.$refs.afterInsuranceRef.loanStatus = 1
this.$store.commit("loanStatusData", { loanStatus: 1 });
@ -100,8 +129,9 @@ export default {
default:
break;
}
}else{
if(this.showValue == '1'){
break;
case '1':
switch (this.logStatusHome) {
case 1:
this.goto('workbench')
@ -130,8 +160,31 @@ export default {
default:
break;
}
break;
case '2':
switch (this.liquidate) {
case '1':
this.goto('workbench')
break;
case '2':
this.$store.commit('liquidate','1')
break;
default:
break;
}
break;
case '3':
break;
default:
break;
}
if(this.showValue == '0'){
}else if(this.showValue == '1'){
}
},
//
getIndex(index) {
@ -143,6 +196,12 @@ export default {
case '1':
this.$store.commit("logStatusData", { logStatus: 1 });
break;
case '2':
this.$store.commit("liquidate", '1');
break;
case '3':
// this.$store.commit("logStatusData", { logStatus: 1 });
break;
default:
break;
}

@ -30,7 +30,7 @@
</div>
</div>
<el-table :data="systemData" stripe header-align="center" class="mat20" @selection-change="insSelectionChange" :row-key="getRowKeys" :key="1">
<el-table v-loading='systemDataLoading' :data="systemData" stripe header-align="center" class="mat20" @selection-change="insSelectionChange" :row-key="getRowKeys" :key="1">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="100" label="序号" align="center"></el-table-column>
<el-table-column prop="code" label="业务编号" align="center"></el-table-column>
@ -41,7 +41,7 @@
<el-table-column prop="overduePeriods" label="逾期期数" align="center"></el-table-column>
<el-table-column prop="overdueAmount" label="逾期额度(元)" align="center"></el-table-column>
<el-table-column prop="overdueInterest" label="逾期利息(元)" align="center"></el-table-column>
<el-table-column prop="department" label="所属部门" align="center"></el-table-column>
<!-- <el-table-column prop="department" label="所属部门" align="center"></el-table-column> -->
<el-table-column prop="numberOfCollection" label="催收次数" align="center"></el-table-column>
<el-table-column prop="status" label="还款状态" align="center"></el-table-column>
<el-table-column label="操作" width="200" align="center">
@ -327,8 +327,9 @@
<el-table-column prop="repaymentDate" label="应还款日" align="center"></el-table-column>
<el-table-column prop="actualRepaymentDate" label="实际还款日" align="center"></el-table-column>
<el-table-column prop="guaranteeAmount" label="担保额度(元)" align="center"></el-table-column>
<el-table-column prop="guaranteeAmount" label="剩余额度(元)" align="center"></el-table-column>
<el-table-column prop="currentRepayment" label="本次还款(元)" align="center"></el-table-column>
<el-table-column prop="interest" label="本次利息(元)" align="center"></el-table-column>
<el-table-column prop="interest" label="利息(元)" align="center"></el-table-column>
<el-table-column prop="otherExpenses" label="其他费用(元)" align="center"></el-table-column>
<el-table-column prop="totalRepayment" label="还款总额(元)" align="center"></el-table-column>
<el-table-column prop="deductionAmount" label="减免金额(元)" align="center"></el-table-column>
@ -349,16 +350,26 @@
<span class="hr_text">催收办理</span>
</div>
</div>
<el-form :model="collectionHandle" :rules="handleRules" ref="collectionHandle" label-width="100px" :disabled="logbackStatus == '查看'">
<el-form-item label="催收方式">
<el-form :model="collectionHandle" :rules="handleRules" ref="collectionHandle" label-width="140px" :disabled="logbackStatus == '查看'">
<el-form-item label="催收方式" prop="collectionMethod">
<el-radio v-model="collectionHandle.collectionMethod" label="1" border>电话催收</el-radio>
<el-radio v-model="collectionHandle.collectionMethod" label="2" border>上门/外访</el-radio>
<el-radio v-model="collectionHandle.collectionMethod" label="3" border>其他</el-radio>
<el-input :disabled="collectionHandle.collectionMethod!=='3'" v-model="collectionHandle.other" class="radioInput" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="催收时间" prop="collectionTime" class="date">
<el-date-picker v-model="collectionHandle.collectionTime" :picker-options="endTimeOptions" @focus="clickEndTime" placeholder="请选择催收时间日期" type="date" value-format="yyyy-MM-dd"></el-date-picker>
</el-form-item>
<el-form-item label="拜访人" prop="visitor" class="date">
<el-input v-model="collectionHandle.visitor" placeholder="拜访人名称" maxlength="10" style="width:220px"></el-input>
</el-form-item>
<el-form-item label="催收状况说明" prop="situationDescription" style="width:50%">
<el-input v-model="collectionHandle.situationDescription" type="textarea" :autosize="{ minRows: 4 }" placeholder="请输入2000字以内"></el-input>
</el-form-item>
<el-form-item label="催收反馈" prop="collectionFeedback" style="width:50%">
<el-input v-model="collectionHandle.collectionFeedback" type="textarea" :autosize="{ minRows: 4 }" placeholder="请填写借款人的应答信息,真实反馈不得违背客观事实"></el-input>
</el-form-item>
@ -438,7 +449,7 @@
<el-table-column prop="overdueAmount" label="逾期本金(元)" align="center"></el-table-column>
<el-table-column prop="overdueInterest" label="逾期利息(元)" align="center"></el-table-column>
<el-table-column prop="otherExpenses" label="逾期费用(元)" align="center"></el-table-column>
<el-table-column prop="overduePeriods" label="逾期期" align="center"></el-table-column>
<el-table-column prop="overduePeriods" label="逾期期" align="center"></el-table-column>
<el-table-column prop="collectionTime" label="催收日期" align="center"></el-table-column>
<el-table-column prop="collectionUserName" label="催收人" align="center"></el-table-column>
<el-table-column prop="collectionMethod" label="催收方式" align="center"></el-table-column>
@ -461,12 +472,13 @@
</template>
<script>
import { collectionList, collectionListDetail, collectionHisList, excelCollectionHis, collection, collectionHisListDetail, insuranceDetail, repaymentEntry, repaymentList, repaymentStatistics, repaymentDetail, excelCollection, updateInsurance } from '../../utils/api';
import { collectionList, collectionListDetail, collectionHisList, excelCollectionHis, collection, collectionHisListDetail, insuranceDetail, repaymentEntry, repaymentList, repaymentStatistics, repaymentDetail, excelCollection, updateInsurance } from '../../../utils/api';
import axios from 'axios';
export default {
data() {
return {
systemDataLoading:false,//
keyword: '',
paymentStatus: '',
pageNo: 1,
@ -548,7 +560,16 @@
},
handleRules: {
collectionTime: [
{ required: true, message: '请选择催收时间日期', trigger: 'blur' }
{ required: true, message: '请选择催收时间日期', trigger: 'change' }
],
visitor: [
{ required: true, message: '请输入拜访人姓名', trigger: 'blur' }
],
situationDescription: [
{ required: true, message: '请输入催收状况说明', trigger: 'blur' }
],
collectionMethod:[
{ required: true, message: '请选择催收方式', trigger: 'change' }
],
collectionFeedback: [
{ required: true, message: '请输入催收反馈', trigger: 'blur' }
@ -664,17 +685,23 @@
methods:{
//
async getData() {
this.systemDataLoading = true
try {
let res = await collectionList({
page: this.pageNo,
size: this.pageNumber,
codeOrName: this.keyword,
status: this.paymentStatus
});
this.systemDataLoading = false
res.data.list.map(e =>{
e.status = this.core.paymentStatus(e.status)
})
this.systemData = res.data.list;
this.totals = res.data.totalCount;
} catch (error) {
this.systemDataLoading = false
}
},
search() {
this.pageNo = 1;
@ -835,6 +862,11 @@
);
},
uploadSuccess(response, file, fileList) {
console.log(response,file,'file')
if(response.code==99999){
fileList.splice(0,1)
return this.$message.error(`上传失败,请重新上传!错误码${response.code}`)
}
this.uploadList.push({ name: file.name, url: response.data[0] });
// this.collectionHandle.enclosureFiles = response.data[0]
},
@ -878,9 +910,12 @@
},
//
collectionSave(collectionHandle){
if(this.collectionHandle.collectionMethod!=='3') this.$set(this.collectionHandle,"other",'')
this.$refs[collectionHandle].validate((valid) => {
if (valid) {
if(this.uploadList.length == 0) return this.$message.error("请先上传附件文件!");
console.log(this.collectionHandle,'this.uploadList')
if(this.collectionHandle.collectionMethod=='3'&&!this.collectionHandle.other) return this.$message.error("请输入其他催收方式说明!");
// if(this.uploadList.length == 0) return this.$message.error("");
this.collectionHandle.enclosureFiles = this.uploadList.map(e => e.url)
this.collectionHandle.insuranceId = this.logId
collection(this.collectionHandle).then(res=>{
@ -956,12 +991,18 @@
let res = await collectionHisListDetail({
id: this.logbackId
});
let data = res.data
this.collectionHandle = {
collectionMethod: String(res.data.collectionMethod),
collectionTime: res.data.collectionTime,
visitor:data.visitor,
situationDescription:data.situationDescription,
collectionFeedback: res.data.collectionFeedback,
enclosureFiles: res.data.enclosureFiles
}
this.uploadList = []
console.log(res.data.enclosureFiles,'res.data.enclosureFiles')
if(res.data.enclosureFiles.length>0&&res.data.enclosureFiles[0]){
const newArr = res.data.enclosureFiles.map(item => ({name: item,url:item}))
newArr.map(item => {
let str = item.name.split('/')
@ -969,6 +1010,7 @@
item.name = str[len-1]
})
this.uploadList = newArr
}
this.collectionForm = res.data
res.data.alRepaymentEntryList.map(e =>{
e.repaymentStatus = this.core.stcStatus(e.repaymentStatus)
@ -979,4 +1021,19 @@
}
}
</script>
<style lang="scss" scoped>
/deep/ .el-radio__inner{
width: 16px;
height: 16px;
}
/deep/ .el-radio.is-bordered{
padding-top: 0.58rem;
}
.radioInput{
display: inline-block;
border:0;
outline: none;
width: 20rem;
}
</style>

@ -0,0 +1,450 @@
//
<template>
<div>
<!-- 清收工作完成统计 -->
<div v-if="liquidate === '1'">
<div class="mgt20 left-border fz-16"><p class="c-black mgl10">清收工作完成情况统计</p></div>
<div class="mgt20 pdb20">
<div class="mgtb20">
<div class="flex-center">
<el-button v-preventReClick type="primary" round @click="createList('new')">生成年度统计表</el-button>
</div>
</div>
<div class="shadow radius10 pdt20">
<el-table :data="data" stripe header-align="center" class="mat20">
<el-table-column type="index" width="200" label="序号" align="center"></el-table-column>
<el-table-column prop="businessCode" label="年度" align="center"></el-table-column>
<el-table-column label="操作" width="300" align="center">
<template slot-scope="scope">
<el-button type="text" @click="createList(scope.row)">人员选择</el-button>
<el-button type="text" @click="[(liquidate = '2'), edit(scope.row, 'watch')]">查看</el-button>
<el-button type="text" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" @click="del(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@current-change="currentChange"
layout="total, prev, pager, next"
:current-page="pageNo"
:total="totals"
>
</el-pagination>
</div>
</div>
</div>
</div>
<!-- 查看详细数据 -->
<div v-if="liquidate === '2'">
<div class="mgt20 left-border fz-16"><p class="c-black mgl10">条件筛选</p></div>
<div class="mgt20 pdb20">
<div class="flex-between mgtb20">
<div class="flex-center">
<p class="fz-16 mgr10 font-blue mgl20 nowrap">清收组</p>
<el-select v-model="searchStr.liquidate" placeholder="请选择" clearable @change="search">
<el-option v-for="item in liquidateSelectArr" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
<p class="fz-16 mgr10 font-blue mgl20 nowrap">完成比例</p>
<el-select v-model="searchStr.paymentStatus" placeholder="请选择" clearable @change="search">
<el-option v-for="item in proportion" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
<el-input
placeholder="请输入整数"
class="wd20 mglr10"
style="min-width: 200px"
v-model="keyword"
clearable
></el-input>
<p>%</p>
<p class="fz-16 mgr10 font-blue mgl20 nowrap">已清收总额</p>
<el-input placeholder="搜索业务编号/客户名称" style="min-width: 200px" v-model="keyword" clearable></el-input>
</div>
<div class="flex-center">
<!-- <el-input
placeholder="搜索业务编号/客户名称"
class="mgr20"
v-model="keyword"
clearable
></el-input> -->
<el-button v-preventReClick type="primary" size="small" round @click="clearOption">清空选项</el-button>
<!-- <el-button v-preventReClick type="primary" size="small" round @click="edit()">新建</el-button> -->
</div>
</div>
<div class="shadow radius10 pdt20">
<div class="flex-between mab20 mgl10">
<div class="flex-center">
<p class="hr_tag"></p>
<span class="hr_text">2021年度清收工作完成情况统计表</span>
</div>
</div>
<div class="flex-between">
<div class="flex-center">
<el-button class="mgl20" v-preventReClick type="primary" size="small" round @click="search">导出列表</el-button>
<el-radio-group v-model="radio" class="mgl30" @change="radioChange">
<el-radio-button class="ht40" label="依据公司排名"></el-radio-button>
<el-radio-button class="ht40" label="依据小组排名"></el-radio-button>
</el-radio-group>
</div>
<div class="df">
<el-input
style="min-width: 250px"
class="ht40 mgl10 mgr10"
@keyup.enter.native="getBusinessApply('search')"
v-model="searchStr.jobNum"
placeholder="工号/清收负责人/清收企业"
clearable
></el-input>
</div>
</div>
<el-table
:data="statisticsData"
stripe
header-align="center"
class="mat20"
@selection-change="statisticsSelection"
:row-key="getRowKeys"
:key="1"
>
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column prop="companyRanks" label="公司排名" align="center" width="150px"></el-table-column>
<el-table-column prop="TeamRanks" label="小组排名" align="center" width="150px"></el-table-column>
<el-table-column prop="liquidate" label="清收组" align="center"></el-table-column>
<el-table-column prop="principal" label="清收负责人" align="center" width="150px"></el-table-column>
<el-table-column prop="jobNumber" label="工号" align="center"></el-table-column>
<el-table-column prop="enterprise" label="清收企业" align="center" width="150px">
<template slot-scope="scope">
<div class="multi-box" v-for="(item, index) in scope.row.enterprise" :key="index">
{{ item }}
</div>
</template>
</el-table-column>
<el-table-column prop="cash" label="清收现金(万元)" align="center" width="150px">
<template slot-scope="scope">
<div class="multi-box" v-for="(item, index) in scope.row.cash" :key="index">
{{ item }}
</div>
</template>
</el-table-column>
<el-table-column prop="asset" label="清收资产(万元)" align="center" width="150px">
<template slot-scope="scope">
<div class="multi-box" v-for="(item, index) in scope.row.asset" :key="index">
{{ item }}
</div>
</template>
</el-table-column>
<el-table-column prop="backTime" label="回款时间" align="center" width="200px">
<template slot-scope="scope">
<div class="backTime" v-for="(item, index) in scope.row.backTime" :key="index">
<el-date-picker
style="width:180px"
v-model="item.time"
type="date"
value-format="yyyy-MM-dd"
:disabled="!scope.row.edit"
>
</el-date-picker>
</div>
</template>
</el-table-column>
<el-table-column prop="repaymentTime" label="已清收总额(元)" align="center" width="150px">
<template slot-scope="scope" >
<div class="multi-box" >
{{ scope.row.repaymentTime }}
</div>
</template>
</el-table-column>
<el-table-column prop="ratio" label="完成比例" align="center" width="150px">
<template slot-scope="scope">
<div class="ratio">
<div class="top">{{scope.row.repaymentTime}}</div>
<el-input :disabled="!scope.row.edit" v-model="scope.row.ratio"></el-input>
</div>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" width="200px">
<template slot-scope="scope">
<div class="backTime" v-for="(item, index) in scope.row.remark" :key="index">
<el-input :disabled="!scope.row.edit" v-model="item.remark"></el-input>
</div>
</template>
</el-table-column>
<!-- 判断是否为查看或者编辑 -->
<el-table-column label="操作" width="300" align="center">
<template slot-scope="scope">
<el-button type="text" @click="yearEdit(scope.row)">{{scope.row.editStr}}</el-button>
<el-button type="text" @click="history(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@current-change="currentChange"
layout="total, prev, pager, next"
:current-page="pageNo"
:total="totals"
>
</el-pagination>
</div>
</div>
</div>
</div>
<!-- 弹框--生成年度统计表 -->
<el-dialog title="请选择" width="40%" :visible.sync="showRank" center>
<div class="ranking">
<div class="top">
<div class="left-border fz-16"><p class="c-black mgl10">年份</p></div>
<el-date-picker
class="mgt10 mgl80"
v-model="chooisYear"
:picker-options="pickerOptions"
type="year"
placeholder="选择年"
>
</el-date-picker>
</div>
<div class="tree">
<div class="left-border fz-16 mgt20"><p class="c-black mgl10">参与本年度清收排名的人员</p></div>
<div class="mgl80 mgt20 mgr80" style="border: 1px solid #e6e6e6; border-radius: 15px; overflow: auto; padding: 15px">
<el-tree
:data="tree"
show-checkbox
default-expand-all
node-key="id"
ref="tree"
highlight-current
:props="defaultProps"
>
</el-tree>
</div>
</div>
<div class="flex-center fj-center mgt20">
<el-button type="primary" round class="mgr20">确定</el-button>
<el-button type="primary" round class="mgl20">取消</el-button>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: '',
props: {},
data() {
return {
showRank: false, //
defaultProps: {
children: 'children',
label: 'label'
},
data: [{}],
tree: [
{
id: 1,
label: '一级 1',
children: [
{
id: 4,
label: '二级 1-1',
children: [
{
id: 9,
label: '三级 1-1-1'
},
{
id: 10,
label: '三级 1-1-2'
}
]
}
]
},
{
id: 2,
label: '一级 2',
children: [
{
id: 5,
label: '二级 2-1'
},
{
id: 6,
label: '二级 2-2'
}
]
},
{
id: 3,
label: '一级 3',
children: [
{
id: 7,
label: '二级 3-1'
},
{
id: 8,
label: '二级 3-2'
}
]
}
],
chooisYear: '',
pageNo: 0,
totals: 0,
liquidateSelectArr: [{ label: '不限', id: '' }],
proportion: [
//
{ label: '不限', id: '0' },
{ label: '>', id: '1' },
{ label: '<', id: '2' },
{ label: '>=', id: '3' },
{ label: '<=', id: '4' },
{ label: '=', id: '5' }
],
searchStr: {
//
liquidate: '', //
ratio: '', //
percent: '', //
paymentStatus: '' //
},
radio: '依据公司排名',
liquidateSelect: '0', //
statisticsData: [//
{
selection: '1',
companyRanks: '1',
TeamRanks: '1',
liquidate: '1',
principal: '1',
jobNumber: '1',
enterprise: [//
'蒙牛',
'腾讯',
'腾讯',
],
cash: [123456, 2345678,96354],
asset: [123, 456, 23],
backTime: [
{ time: '2021-12-11' },
{ time: '2021-12-12' },
{ time: '2021-12-12' },
],
repaymentTime:12321342315621789,
ratio: '25525225',
remark: [
{ remark: '我是备注1' },
{ remark: '我是备注2' },
{ remark: '我是备注2' }
],
edit:false,
editStr:'编辑'
}
],
keyword: '', //
pickerOptions: {
disabledDate(time) {
//
let date = new Date();
let year = date.getFullYear();
return time.getFullYear() > year;
}
}
};
},
computed: {
liquidate:{
get(){
return this.$store.state.loan.liquidate
},set(){}
},
},
methods: {
createList(val) {
//
this.showRank = true;
if (val === 'new') {
//
} else {
//
// idid
}
},
currentChange(val) {
//
},
radioChange(val) {
//
console.log(val, 'val');
},
clearOption() {
//
this.searchStr = {};
},
search() {
//
},
getRowKeys(row) {
// Key
return row.Id;
},
statisticsSelection(val) {
//
console.log(val,'勾选')
},
edit(row, val) {
//
this.liquidate ='2';
this.$store.commit('liquidate','2')
},
yearEdit(row, val){//
if(row.edit != false){
row.edit = false
row.editStr = '编辑'
}else{
row.editStr = '保存'
row.edit = true
//
}
}
}
};
</script>
<style lang='scss' scoped>
/deep/ .el-radio-button__inner {
padding-top: 9px;
padding-bottom: 9px;
}
.multi-box {
border: 1px solid #e6e6e6;
min-height: 50px;
text-align: center;
line-height: 50px;
&:nth-child(2n) {
background: #e6e6e6;
}
}
.backTime{
min-height: 50px;
line-height: 50px;
}
.ratio{
.top{
border-bottom: 1px solid;
height: 40px;
line-height: 40px;
margin-bottom: 15px;
}
}
</style>

@ -0,0 +1,206 @@
// -
<template>
<div>
<div class="mgt20 left-border fz-16"><p class="c-black mgl10">条件筛选</p></div>
<div class="mgt20 pdb20">
<div class="flex-between mgtb20">
<p class="fz-16 mgr10 font-blue mgl20 nowrap">所在区域</p>
<el-select v-model="searchStr.liquidate" placeholder="请选择" clearable @change="search">
<el-option v-for="item in area" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<p class="fz-16 mgr10 font-blue mgl20 nowrap">经营情况</p>
<el-select v-model="searchStr.liquidate" placeholder="请选择" clearable @change="search">
<el-option v-for="item in circumstance" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<p class="fz-16 mgr10 font-blue mgl20 nowrap">贷款银行</p>
<el-select v-model="searchStr.liquidate" placeholder="请选择" clearable @change="search">
<el-option v-for="(item,index) in bankData" :key="item.index" :label="item.value" :value="item.value"></el-option>
</el-select>
<p class="fz-16 mgr10 font-blue mgl20 nowrap">代偿金额</p>
<el-select v-model="searchStr.paymentStatus" placeholder="请选择" clearable @change="search">
<el-option v-for="item in proportion" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
<el-input
placeholder="请输入金额(万)"
class="wd20 mglr10"
style="max-width: 200px"
v-model="keyword"
clearable
></el-input>
</div>
<div class="flex-between mgtb20">
<div class="flex-center">
<p class="fz-16 mgr10 font-blue mgl20 nowrap">代偿余额</p>
<el-select v-model="searchStr.paymentStatus" placeholder="请选择" clearable @change="search">
<el-option v-for="item in proportion" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
<el-input
placeholder="请输入整数"
class="wd20 mglr10"
style="min-width: 200px"
v-model="keyword"
clearable
></el-input>
<p class="fz-16 mgr10 font-blue mgl20 nowrap">代偿时间</p>
<!-- <el-date-picker
style="width:180px"
v-model="searchStr.time"
type="date"
value-format="yyyy-MM-dd"
>
</el-date-picker> -->
<el-date-picker
class="ht40 mgl10"
v-model="searchStr.time"
@change="getDates($event,parameter.startTime,parameter.endTime,'flowTeam')"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="yyyy-MM-dd"
value-format="timestamp"
>
</el-date-picker>
</div>
<div class="flex-center mgr10">
<el-button v-preventReClick type="primary" round @click="clearOption">清空选项</el-button>
</div>
</div>
<div class="shadow radius10 pdt20">
<div class="flex-between mab20 mgl10">
<div class="flex-center">
<p class="hr_tag"></p>
<span class="hr_text">清收工作进度表</span>
</div>
</div>
<div class="flex-between">
<div class="flex-center">
<el-button class="mgl20" v-preventReClick type="primary" size="small" round @click="search">导出列表</el-button>
</div>
<div class="df">
<el-input
style="min-width: 250px"
class="ht40 mgl10 mgr10"
@keyup.enter.native="getBusinessApply('search')"
v-model="searchStr.jobNum"
placeholder="企业名称/清收负责人/业务编号"
clearable
></el-input>
</div>
</div>
<el-table
:data="statisticsData"
v-loading="loading"
stripe
header-align="center"
class="mat20"
@selection-change="statisticsSelection"
:row-key="getRowKeys"
:key="1"
>
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
<el-table-column prop="companyRanks" label="业务编号" align="center" min-width="100px"></el-table-column>
<el-table-column prop="TeamRanks" label="企业名称" align="center" min-width="100px"></el-table-column>
<el-table-column prop="liquidate" label="法定代表人" align="center"></el-table-column>
<el-table-column prop="principal" label="联系电话" align="center" min-width="100px"></el-table-column>
<el-table-column prop="jobNumber" label="贷款银行" align="center"></el-table-column>
<el-table-column prop="enterprise" label="贷款金额(元)" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="贷款期限" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="代偿时间" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="代偿金额(元)" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="代偿余额(元)" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="抵押情况" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="诉讼情况" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="经营情况" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="所在区域" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="清偿方式" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="清收负责人" align="center" min-width="100px"></el-table-column>
<el-table-column prop="enterprise" label="备注" align="center" min-width="100px"></el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@current-change="currentChange"
layout="total, prev, pager, next"
:current-page="pageNo"
:total="totals"
>
</el-pagination>
</div>
</div>
</div>
</div>
</template>
<script>
export default{
name:'',
props:{},
data(){
return{
loading:false,
statisticsData:[],
searchStr:{},
pageNo:1,
totals:0,
proportion: [
//
{ label: '不限', id: '0' },
{ label: '>', id: '1' },
{ label: '<', id: '2' },
{ label: '>=', id: '3' },
{ label: '<=', id: '4' },
{ label: '=', id: '5' }
],
area:[//
{name:'萨尔图区',id:0},
{name:'高新区',id:1},
{name:'龙凤区',id:2},
{name:'让胡同路区',id:3},
{name:'大同区',id:4},
{name:'肇县区',id:5},
],
circumstance:[//
{name:'停产',id:'停产'},
{name:'已破产',id:'已破产'},
{name:'经营中',id:'经营中'},
{name:'未正常经营',id:'未正常经营'},
],
}
},
created() {
console.clear()
console.log('初始化')
console.log(this.bankData)
},
computed: {
bankData(){
return this.$store.state.guarantee.bankData
}
},
methods:{
search(){
},
clearOption(){
this.searchStr = {}
},
currentChange(val){
this.pageNo = val
},
},
}
</script>
<style lang='scss' scoped>
/deep/ .el-date-editor .el-range-separator{
min-width: 30px;
}
</style>

@ -323,7 +323,6 @@
<el-col :span="2"></el-col>
<el-col :span="16">
<p class="fz-14 c-gray mgl35">
<!-- 导入会覆盖原有员工信息如需更新已存在的员工请先导出通讯录在导出的表格里进行修改 -->
导入需要下载模板根据模板内容提示进行新增
</p>
</el-col>

@ -21,11 +21,11 @@ import core from './utils/core.js'
import echarts from 'echarts'
import 'view-design/dist/styles/iview.css'
import './assets/css/common.scss'
import { Tree } from 'view-design';
import { Tree } from 'view-design';// --系统管理-权限管理的树状结构需要,element的会导致一个无法解决的bug:已勾选值,重新渲染为上一次点击的勾选
import preventReClick from './utils/preventReClick.js' // 三秒内禁止再次点击
import roleBtn from '../src/util/buttonRole.js' // 验证按钮权限
import {Popover,Icon} from 'ant-design-vue' // ant流程图插件--系统管理-权限管理的树状结构需要,element的会导致一个无法解决的bug:已勾选值,重新渲染为上一次点击的勾选
import 'ant-design-vue/lib/popover/style';
import {Popover,Icon} from 'ant-design-vue' // ant流程图插件
// import 'ant-design-vue/lib/popover/style';
// import 'ant-design-vue/lib/icon/style';
// import { AntdComponent } from 'ant-design-vue/types/component';
// import 'ant-design-vue/dist/antd.css';// ant的css
@ -39,6 +39,16 @@ Vue.use(ElementUI);
// Vue.use(has);
Vue.use(Popover);
Vue.use(Icon);
// `v-focus`使input出现时自动聚焦
Vue.directive('focus', {
inserted: function (el, binding) {
console.log(el.disabled,'当前的input');
if (el.disabled === false) {
el.focus()
}
}
})
// [Popover,Icon].forEach(AntdComponent=> vue.use(AntdComponent))
const i18n = new VueI18n({
locale: 'zh',

@ -3,8 +3,22 @@ import Router from 'vue-router';
import axios from 'axios'
import {getPermission} from '../utils/api'
//解决编程式路由往同一地址跳转时会报错的情况
const originalPush = Router.prototype.push;
const originalReplace = Router.prototype.replace;
//push
Router.prototype.push = function push(location, onResolve, onReject) {
if (onResolve || onReject)
return originalPush.call(this, location, onResolve, onReject);
return originalPush.call(this, location).catch(err => err);
};
//replace
Router.prototype.replace = function push(location, onResolve, onReject) {
if (onResolve || onReject)
return originalReplace.call(this, location, onResolve, onReject);
return originalReplace.call(this, location).catch(err => err);
};
// 自述文件
const Home = () => import('../components/common/Home.vue')
// 首页
const HomePage = () => import('../components/page/HomePage.vue')
@ -35,7 +49,7 @@ const backgroundGuarantee = () => import('../components/page/background-Guarante
const SystemManagement = () => import('../components/page/SystemManagement.vue')
//担保贷后管理系统
const afterLoan = () => import('../components/page/afterLoan.vue')
const afterLoan = () => import('../components/page/afterLoan/afterLoan.vue')
// 业务申请-表单设计
const applyDesign = () => import('../components/common/applyDesign.vue')
@ -237,15 +251,14 @@ router.beforeEach(function(to,from,next){
}
// if(sessionStorage.getItem('getRouter')&&sessionStorage.getItem('token')) return
if(sessionStorage.getItem('token')){//判断是否登录,是否以及处理过路由
// if(!sessionStorage.getItem('routerData')){ // 用session判断是否处理过路由--待完善,使用session还原的情况下,取不到本地组件component,
// 如果要完善,需要优化:文件名称和路由path对应,循环把本地文件匹配上去,得改本地文件的名称,需要时间,不做修改。
// 如果要完善,需要优化:文件名称和路由path对应,循环把本地文件匹配上去,得改本地文件的名称,需要时间。
getPermission().then(res=>{// 路由接口获取路由
if(res.success){
sessionStorage.setItem('getRouter','true')
let permissions = {
path: '/',
component: Home,
meta: { title: '自述文件' },
meta: { title: '' },
children: [
{
path: '/homePage',

@ -14,7 +14,6 @@ const state = {
file: '',//会议纪要
loanTern: '',//担保期限
auditOpinion: '',//审核意见
// 上面伟哥定义的
id:'',//行内rowID
status:'',//行内状态
@ -22,6 +21,7 @@ const state = {
handleStatus:'',//操作状态
roleId:'',//角色id
},
bankData:[],
isFgJl: '',
fileList: [],
imgListT: [],
@ -80,7 +80,9 @@ const mutations = {
imgListTData (state, payload) {
state.imgListT = payload.imgListT
},
getBanks(state,arr){
state.bankData = arr
}
}
const actions = {

@ -2,11 +2,12 @@
const state = {
// 还款
loanStatus: 1,
loanStatus: 1,// 切换展示状态
id: '',
hisidId: '',
guaranteeAmount: '',
hispaymentStatus: '',
newOrOld:'',// 判断是否手动新增保后业务
// 催收
logStatus: 1,
logId: '',
@ -20,7 +21,12 @@ const state = {
logRepaymentId: '',
insuranceId: '',
leftStatus: '0'//侧边栏
leftStatus: '0',//侧边栏
discernEdit:false,// 是否可编辑保后业务
entering:false,// 是否为录入业务
disabledAll:false,//禁用全部
liquidate:'1',// 控制清收统计页面切换
}
const getters = {
@ -72,7 +78,23 @@ const mutations = {
},
loginsuranceIdData (state, payload) {
state.insuranceId = payload.insuranceId
}
},
setNewOrOld(state,val){
state.newOrOld = val
},
discernEdit(state,val){
state.discernEdit = val
},
entering(state,val){
state.entering = val
},
disabledAll(state,val){
state.disabledAll = val
},
liquidate(state,val){
state.liquidate = val
},
}
const actions = {

@ -1,8 +1,7 @@
import { get, post, put, del } from './http';
import { get, post, put, del,Url } from './http';
// let host = 'http://192.168.31.137:8080';//陈赓
// let host = 'https://test.feifanhitech.com';// 测试服
let host = 'https://www.feifanhitech.com/api'//正式服
let host = Url;
export const login = p => post('/apiHrmsAuth/hrms/auth/userlogin/login', p); //登录
export const phoneCode = p => get('/apiHrmsAuth/hrms/auth/userlogin/sendCode', p); //找回密码验证码
@ -118,8 +117,10 @@ export const insuranceList = p => get('/api-guarantee/al-insurance-list/insuranc
export const insuranceDetail = p => get('/api-guarantee/al-insurance-list/insuranceDetail', p);
//办理结项
export const updateInsurance = p => get('/api-guarantee/al-insurance-list/updateStatus', p);
//还款录入
export const repaymentEntry = p => post('/api-guarantee/al-repayment-entry/repaymentEntry', p);
//还款记录列表
export const repaymentList = p => get('/api-guarantee/al-repayment-entry/repaymentList', p);
//还款记录统计
@ -131,6 +132,24 @@ export const repaymentDetail = p => get('/api-guarantee/al-repayment-entry/repay
// 编辑还款录入
export const updateRepayment = p => post('/api-guarantee/al-repayment-entry/updateRepayment', p);
// 添加保后业务
export const saveInsurance = p => post('/api-guarantee/al-insurance-list/saveInsurance', p);
// 删除保后业务
export const deleteInsurance = p => post('/api-guarantee/al-insurance-list/deleteInsurance?insuranceId='+p);
// 更新保后业务
export const editInsurance = p => post('/api-guarantee/al-insurance-list/updateInsurance', p);
// 清收组列表
export const liquidateList = p => get('/api-guarantee/al-collection-group/list', p);
// 清收组添加或修改
export const liquidateEdit = p => post('/api-guarantee/al-collection-group/saveOrUpdate', p);
// 清收组删除
export const liquidateDel = p => post('/api-guarantee/al-collection-group/delete?id='+p);
// 取得代偿金额
export const compensationSituation = p => get(`/api-guarantee/al-insurance-list/compensationSituation?date=${p.data}&insuranceId=${p.insuranceId}`);
// 催收
export const collection = p => post('/api-guarantee/al-collection/collection', p);
// 催收列表

@ -4,18 +4,10 @@ import axios from 'axios';
import { Message } from 'element-ui'
import router from '../router/index'
// 环境的切换
// if (process.env.NODE_ENV == 'development') {
// axios.defaults.baseURL = 'http://192.168.31.137:8080';//陈赓
// axios.defaults.baseURL = 'https://test.feifanhitech.com';// 测试服务器地址
axios.defaults.baseURL = 'https://www.feifanhitech.com/api';// 非凡
// } else if (process.env.NODE_ENV == 'debug') {
// axios.defaults.baseURL = 'http://dq.huorantech.cn';
// } else if (process.env.NODE_ENV == 'production') {
// axios.defaults.baseURL = 'http://dq.huorantech.cn';
// }
// export const Url = 'https://test.feifanhitech.com'// 测试服务器地址
export const Url = 'https://www.feifanhitech.com';// 非凡
// export const Url = 'http://192.168.31.137:8080';//陈赓
axios.defaults.baseURL = Url;
// 请求超时时间
axios.defaults.timeout = 30000;
@ -130,7 +122,7 @@ axios.interceptors.response.use(
}
);
/** get方法,对应get请求 **/
/** get方法,对应get请求---sb封装,本身axios就是封装的promis **/
export function get(url, params){
return new Promise((resolve, reject) =>{
axios.get(url, {

@ -6,8 +6,6 @@ const postcss = px2rem({
// 基准大小 baseSize,需要和rem.js中相同
remUnit: 16
})
//
// 使用等比适配插件
module.exports = {
@ -26,6 +24,7 @@ module.exports = {
}
},
publicPath: './',
  outputDir: 'dist',
  assetsDir: 'static',
@ -49,13 +48,8 @@ module.exports = {
.use("babel")
.loader("babel-loader")
.end();
// config // 可视化打包大小,上线可删除
// 可视化打包大小
// .plugin('webpack-bundle-analyzer')
// .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
},
// plugins: [ // dll分包---待处理,未完成
// new webpack.DllReferencePlugin({
// manifest: require('./src/util/library')
// }),
// ]
}
Loading…
Cancel
Save