修复bug,未完成

master
e 3 years ago
parent ec66896d26
commit c6226c908b
  1. 71
      package-lock.json
  2. 1
      package.json
  3. 8
      src/assets/css/main.css
  4. 1
      src/components/common/BindPhone.vue
  5. 2
      src/components/common/applyDesign.vue
  6. 1
      src/components/common/back.vue
  7. 1
      src/components/common/background-list.vue
  8. 1
      src/components/common/businessApplyDepartment.vue
  9. 2
      src/components/common/cancel_btn.vue
  10. 2
      src/components/common/close.vue
  11. 2
      src/components/common/complianceDesign.vue
  12. 80
      src/components/common/directives.js
  13. 40
      src/components/common/left-sidebar.vue
  14. 7
      src/components/page/Workbench-Guarantee.vue
  15. 1932
      src/components/page/afterLoan/afterInsurance.vue
  16. 32
      src/components/page/afterLoan/afterLoan.vue
  17. 10
      src/components/page/afterLoan/collection.vue
  18. 122
      src/components/page/afterLoan/complete.vue
  19. 25
      src/components/page/afterLoan/progress.vue
  20. 12
      src/main.js
  21. 12
      src/router/index.js
  22. 2
      src/router/permission.js
  23. 2
      src/router/resetRouter.js
  24. 36
      src/store/modules/guarantee.js
  25. 6
      src/store/modules/loan.js
  26. 2
      src/util/buttonRole.js
  27. 1
      src/util/wxLogin.js
  28. 8
      src/utils/api.js
  29. 33
      src/utils/core.js
  30. 3
      src/utils/http.js

71
package-lock.json generated

@ -3412,6 +3412,11 @@
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"dev": true
},
"complex.js": {
"version": "2.0.15",
"resolved": "https://registry.nlark.com/complex.js/download/complex.js-2.0.15.tgz",
"integrity": "sha1-et1oSLTB0SqpJi99+SXr56UadAY="
},
"component-classes": {
"version": "1.2.6",
"resolved": "https://registry.npm.taobao.org/component-classes/download/component-classes-1.2.6.tgz",
@ -4448,6 +4453,11 @@
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
"dev": true
},
"decimal.js": {
"version": "10.3.1",
"resolved": "https://registry.nlark.com/decimal.js/download/decimal.js-10.3.1.tgz",
"integrity": "sha1-2MOkRKnGd0umDKatcmHDqU/V54M="
},
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npm.taobao.org/decode-uri-component/download/decode-uri-component-0.2.0.tgz",
@ -5134,6 +5144,11 @@
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
"dev": true
},
"escape-latex": {
"version": "1.2.0",
"resolved": "https://registry.nlark.com/escape-latex/download/escape-latex-1.2.0.tgz",
"integrity": "sha1-B8A4GM99rCUMzlF/T9obAB7yvKE="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
@ -5680,6 +5695,11 @@
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
"dev": true
},
"fraction.js": {
"version": "4.1.1",
"resolved": "https://registry.nlark.com/fraction.js/download/fraction.js-4.1.1.tgz",
"integrity": "sha1-rE5SBHPa5nAS1hiquR7aCby0AP8="
},
"fragment-cache": {
"version": "0.2.1",
"resolved": "https://registry.npm.taobao.org/fragment-cache/download/fragment-cache-0.2.1.tgz",
@ -6958,6 +6978,11 @@
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"dev": true
},
"javascript-natural-sort": {
"version": "0.7.1",
"resolved": "https://registry.npm.taobao.org/javascript-natural-sort/download/javascript-natural-sort-0.7.1.tgz",
"integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k="
},
"javascript-stringify": {
"version": "1.6.0",
"resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-1.6.0.tgz",
@ -7464,6 +7489,37 @@
"object-visit": "^1.0.0"
}
},
"mathjs": {
"version": "9.4.4",
"resolved": "https://registry.nlark.com/mathjs/download/mathjs-9.4.4.tgz",
"integrity": "sha1-KazWdWPB5yCRAhMGKCTD+vYbyFg=",
"requires": {
"@babel/runtime": "^7.14.6",
"complex.js": "^2.0.15",
"decimal.js": "^10.3.1",
"escape-latex": "^1.2.0",
"fraction.js": "^4.1.1",
"javascript-natural-sort": "^0.7.1",
"seedrandom": "^3.0.5",
"tiny-emitter": "^2.1.0",
"typed-function": "^2.0.0"
},
"dependencies": {
"@babel/runtime": {
"version": "7.15.4",
"resolved": "https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.15.4.tgz?cache=0&sync_timestamp=1630618785994&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.15.4.tgz",
"integrity": "sha1-/RfRa/34eObdAtGXU6OfqKjZyEo=",
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"regenerator-runtime": {
"version": "0.13.9",
"resolved": "https://registry.nlark.com/regenerator-runtime/download/regenerator-runtime-0.13.9.tgz?cache=0&sync_timestamp=1626993001371&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.9.tgz",
"integrity": "sha1-iSV0Kpj/2QgUmI11Zq0wyjsmO1I="
}
}
},
"mavon-editor": {
"version": "2.9.0",
"resolved": "https://registry.npm.taobao.org/mavon-editor/download/mavon-editor-2.9.0.tgz",
@ -12317,6 +12373,11 @@
}
}
},
"seedrandom": {
"version": "3.0.5",
"resolved": "https://registry.npm.taobao.org/seedrandom/download/seedrandom-3.0.5.tgz",
"integrity": "sha1-VO3IXJUiJSWwx6b2s1Q9jgs6oKc="
},
"select-hose": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/select-hose/download/select-hose-2.0.0.tgz",
@ -13564,6 +13625,11 @@
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=",
"dev": true
},
"tiny-emitter": {
"version": "2.1.0",
"resolved": "https://registry.nlark.com/tiny-emitter/download/tiny-emitter-2.1.0.tgz",
"integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM="
},
"tinycolor2": {
"version": "1.4.2",
"resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.2.tgz",
@ -13721,6 +13787,11 @@
"mime-types": "~2.1.24"
}
},
"typed-function": {
"version": "2.0.0",
"resolved": "https://registry.npm.taobao.org/typed-function/download/typed-function-2.0.0.tgz",
"integrity": "sha1-Fas4JYRROKixETvYnmDNakNXOeg="
},
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",

@ -15,6 +15,7 @@
"default-passive-events": "^2.0.0",
"echarts": "^4.8.0",
"element-ui": "^2.13.0",
"mathjs": "^9.4.4",
"mavon-editor": "^2.6.17",
"moment": "^2.21.0",
"postcss-px2rem": "^0.3.0",

@ -136,6 +136,14 @@ img{
padding: 0 30px!important;
border-color: #ccc;
}
/* 保后-清收完成统计输入框样式 */
#app .static .el-input__inner{
border-radius: 0!important;
border: 0;
/* padding: 0 30px!important; */
border-color: #ccc;
}
#app .el-input__icon{
line-height: 36px;
}

@ -1,4 +1,5 @@
<template>
<!-- 绑定手机 -->
<div>
<div class="Login_view bindphone_view">
<div class="flex-between login_title">

@ -1,5 +1,5 @@
//
<template>
<!-- 业务申请的设计表单文件带Design的都属于表单设计文件 -->
<div class="container_bg">
<div class="border-b flex-between ht50 self">
<div></div>

@ -1,4 +1,5 @@
<template>
<!-- < 返回 -->
<div class="flex-center cursor">
<svg class="icon text-color" aria-hidden="true">
<use xlink:href="#icon-fanhui"></use>

@ -1,4 +1,5 @@
<template>
<!-- 组件列表 -->
<div class="pdlr20 wrap self">
<el-table :row-key="rowkey" ref="multipleTable" :data="tableData" stripe tooltip-effect="dark" style="width: 100%" @selection-change="getCheck" header-align="center">
<el-table-column v-if="check" type="selection" width="40" class="flex-center"></el-table-column>

@ -1,4 +1,5 @@
<template>
<!-- 担保业务-业务申请 -->
<div>
<div v-show="loans" class="mgt20 bgw shadow radius10 list-box mgb20">
<div class="flex-between search-box">

@ -1,4 +1,4 @@
//
// --
//<Cancel_btn></Cancel_btn>
<template>
<el-button round class="cancel">取消</el-button>

@ -1,4 +1,4 @@
// X
// X--
<template>
<button>
<img src="../../assets/img/close.png" alt="">

@ -1,5 +1,5 @@
//
<template>
<!-- 合规调查的设计表单 -->
<div class="container_bg">
<div class="border-b flex-between ht50 self">
<div></div>

@ -1,80 +0,0 @@
import Vue from 'vue';
// v-dialogDrag: 弹窗拖拽属性
Vue.directive('dialogDrag', {
bind(el, binding, vnode, oldVnode) {
const dialogHeaderEl = el.querySelector('.el-dialog__header');
const dragDom = el.querySelector('.el-dialog');
dialogHeaderEl.style.cssText += ';cursor:move;'
dragDom.style.cssText += ';top:0px;'
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
const sty = (() => {
if (window.document.currentStyle) {
return (dom, attr) => dom.currentStyle[attr];
} else {
return (dom, attr) => getComputedStyle(dom, false)[attr];
}
})()
dialogHeaderEl.onmousedown = (e) => {
// 鼠标按下,计算当前元素距离可视区的距离
const disX = e.clientX - dialogHeaderEl.offsetLeft;
const disY = e.clientY - dialogHeaderEl.offsetTop;
const screenWidth = document.body.clientWidth; // body当前宽度
const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取)
const dragDomWidth = dragDom.offsetWidth; // 对话框宽度
const dragDomheight = dragDom.offsetHeight; // 对话框高度
const minDragDomLeft = dragDom.offsetLeft;
const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
const minDragDomTop = dragDom.offsetTop;
const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
// 获取到的值带px 正则匹配替换
let styL = sty(dragDom, 'left');
let styT = sty(dragDom, 'top');
// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
if (styL.includes('%')) {
styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100);
styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100);
} else {
styL = +styL.replace(/\px/g, '');
styT = +styT.replace(/\px/g, '');
};
document.onmousemove = function (e) {
// 通过事件委托,计算移动的距离
let left = e.clientX - disX;
let top = e.clientY - disY;
// 边界处理
if (-(left) > minDragDomLeft) {
left = -(minDragDomLeft);
} else if (left > maxDragDomLeft) {
left = maxDragDomLeft;
}
if (-(top) > minDragDomTop) {
top = -(minDragDomTop);
} else if (top > maxDragDomTop) {
top = maxDragDomTop;
}
// 移动当前元素
dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
};
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
}
})

@ -2,12 +2,13 @@
<!-- 侧边栏组件传一个title数组父级定义positionrelative达到高度100% -->
<!-- 取参数进行切换组件定义getSidebarVal接受参数 -->
<div class="left-sidebar not-zoom shadow">
<el-menu mode="vertical" :default-active="pitchOn" class="wd100 bd0" :default-openeds="['0']" >
<el-menu mode="vertical" @open="open" :default-active="path" 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"
text-color="#fff"
background-color="#F3F3F3"
@click="setIndex(item.index)"
>
@ -21,7 +22,9 @@
v-for="(i,ind) in menus.body[item]"
:key="ind"
:index="i.index"
background-color="#F3F3F3"
background-color="#545c64"
active-text-color="#ffd04b"
text-color="#fff"
@click="setIndex(i.index)"
>
<span slot="title" class="fz-14">&nbsp;&nbsp;{{ i.name }}</span>
@ -50,9 +53,22 @@ export default {
pitchOn:String,//
},
data() {
return {};
return {
path:'',
};
},
watch:{
pitchOn(val,old){
console.log(val)
this.path = old
if(val){
this.path = val
}
}
},
created(){
console.log(this.pitchOn,'p')
this.path = this.pitchOn
},
methods:{
@ -60,14 +76,12 @@ export default {
setIndex(index) {
this.$emit('getSidebarVal',index)
},
/*
head:['',''],
body:{
head[0]:[],
open(){
console.log('展开',this.menus.body)
// for (let key,value in this.menus.body) {
// console.log(this.menus.body[key][0],'old',key)
// }
}
*/
}
};
</script>
@ -90,6 +104,7 @@ export default {
border-right: 10px solid transparent;
height: 40px;
line-height: 40px;
font-weight: 500;
margin: 20px 0;
}
/deep/ .el-menu-item.is-active {
@ -100,10 +115,13 @@ export default {
}
/deep/ .el-submenu .el-menu-item{
min-width: 0;
font-size: 14px;
font-size: 8px;
font-weight: normal;
}
/deep/ .el-submenu__title{
font-size: 16px;
font-weight: 500;
}
/deep/ .el-submenu__icon-arrow{
right: 10px;

@ -326,7 +326,12 @@ export default {
this.removeSession();
next();
},
destroyed(){}
beforeDestroy() {
this.topSidebarVal = '1'
this.$store.commit('messageData',{messageData:{modelId:'1'}})
},
destroyed(){
}
};
</script>
<style lang='scss' scoped>

File diff suppressed because it is too large Load Diff

@ -16,7 +16,7 @@
<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>
@ -85,11 +85,11 @@ export default {
// }
// }
// console.log(this.$router.currentRoute,'')
if(meta.includes('清收完成统计')||meta.includes('清收进度查询')){
if(meta.includes('清收年度统计')||meta.includes('清收进度查询')){
this.menus.head.push('数据统计与查询')
this.menus.body['数据统计与查询'] = []
if(meta.includes('清收完成统计')){
this.menus.body['数据统计与查询'].push({ name: '清收完成统计', index: '2' })
if(meta.includes('清收年度统计')||meta.includes('清收完成统计')){
this.menus.body['数据统计与查询'].push({ name: '清收年度统计', index: '2' })
}
if(meta.includes('清收进度查询')){
this.menus.body['数据统计与查询'].push({ name: '清收进度查询', index: '3' })
@ -105,15 +105,18 @@ export default {
computed: {
liquidate(){
return this.$store.state.loan.liquidate
},
schedule(){
return this.$store.state.loan.schedule
}
},
methods:{
goto(path) {
this.$router.push('/' + path);
},
backTo(){
backTo(){// 退
switch (this.showValue) {
case '0':
case '0'://
switch (this.loanStatusHome) {
case 1:
this.goto('workbench')
@ -136,7 +139,7 @@ export default {
}
break;
case '1':
case '1'://
switch (this.logStatusHome) {
case 1:
this.goto('workbench')
@ -166,7 +169,7 @@ export default {
break;
}
break;
case '2':
case '2'://
switch (this.liquidate) {
case '1':
this.goto('workbench')
@ -178,10 +181,14 @@ export default {
break;
}
break;
case '3':
break;
default:
case '3'://
switch (this.schedule) {
case '1':
this.goto('workbench')
break;
default:
break;
}
break;
}
if(this.showValue == '0'){
@ -190,6 +197,7 @@ export default {
}
},
//
getIndex(index) {

@ -942,7 +942,12 @@
endTime: this.collectionHisEndTime
});
res.data.list.map(e =>{
e.collectionMethod = e.collectionMethod == '1' ? '电话催收' : '上门/外访'
let obj ={
"1":'电话催收',
"2":'上门/外访',
"3":"其他"
}
e.collectionMethod = obj[e.collectionMethod]||'未知状态'
})
this.collectionHisData = res.data.list
this.collectionHisTotals = res.data.totalCount
@ -1000,7 +1005,8 @@
visitor:data.visitor,
situationDescription:data.situationDescription,
collectionFeedback: res.data.collectionFeedback,
enclosureFiles: res.data.enclosureFiles
enclosureFiles: res.data.enclosureFiles,
other:res.data.other
}
this.uploadList = []
if(res.data.enclosureFiles.length>0&&res.data.enclosureFiles[0]){

@ -1,9 +1,9 @@
//
//
<template>
<div>
<!-- 清收工作完成统计 -->
<div v-if="liquidate === '1'">
<div class="mgt20 left-border fz-16"><p class="c-black mgl10">清收工作完成情况统计</p></div>
<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">
@ -22,7 +22,7 @@
<template slot-scope="scope">
<el-button type="text" v-if="$router.currentRoute.meta.btn.includes('人员选择')" @click="createList(scope.row)">人员选择</el-button>
<el-button type="text" v-if="$router.currentRoute.meta.btn.includes('统计查看')" @click="[(liquidate = '2'), edit(scope.row, 'watch')]">查看</el-button>
<el-button type="text" v-if="$router.currentRoute.meta.btn.includes('统计编辑')" @click="edit(scope.row)">编辑</el-button>
<el-button type="text" v-if="$router.currentRoute.meta.btn.includes('统计编辑')" @click="edit(scope.row)">管理</el-button>
<el-button type="text" v-if="$router.currentRoute.meta.btn.includes('统计删除')" @click="del(scope.row)">删除</el-button>
</template>
</el-table-column>
@ -46,7 +46,7 @@
<el-option v-for="item in proportion" :key="item.id" :label="item.label" :value="item.id"></el-option>
</el-select>
<el-input
placeholder="请输入整数"
placeholder="请输入金额(元)"
class="wd20 mglr10"
style="min-width: 200px"
:disabled="!searchStr.proportionSymbol"
@ -58,7 +58,7 @@
<el-select v-model="searchStr.allAoumntSymbol" 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 :disabled="!searchStr.allAoumntSymbol" class="wd20 mglr10" placeholder="清收总额" style="min-width: 200px" v-model="searchStr.allAoumnt" clearable></el-input>
<el-input :disabled="!searchStr.allAoumntSymbol" class="wd20 mglr10" placeholder="请输入金额(元)" style="min-width: 200px" v-model="searchStr.allAoumnt" clearable></el-input>
</div>
<div class="flex-center">
<el-button v-preventReClick type="primary" size="small" round @click="clearOption">清空选项</el-button>
@ -75,7 +75,7 @@
<div class="flex-between">
<div class="flex-center">
<el-button class="mgl20" v-if="$router.currentRoute.meta.btn.includes('统计导出')" v-preventReClick type="primary" size="small" round @click="statisticsSelection">导出列表</el-button>
<el-button class="mgl20" v-if="$router.currentRoute.meta.btn.includes('统计导出列表')" v-preventReClick type="primary" size="small" round @click="statisticsSelection">导出列表</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>
@ -87,7 +87,7 @@
class="ht40 mgl10 mgr10"
@keyup.enter.native="annualStatisticsList('search')"
v-model="searchStr.queryCondition"
placeholder="工号/清收负责人/清收企业"
placeholder="工号/清收负责人"
clearable
></el-input>
</div>
@ -119,23 +119,23 @@
</div>
</template>
</el-table-column>
<el-table-column prop="cash" label="清收现金(元)" align="center" width="150px">
<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.cash }}
</div>
</template>
</el-table-column>
<el-table-column prop="asset" label="清收资产(元)" align="center" width="150px">
<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.assets" :key="index">
{{ item.asset }}
{{ item.assets }}
</div>
</template>
</el-table-column>
<el-table-column prop="collectionTime" label="回款时间" align="center" width="200px">
<template slot-scope="scope">
<div class="backTime" v-for="(item, index) in scope.row.collectionTime" :key="index">
<div class="backTime static multi-box" v-for="(item, index) in scope.row.collectionTime" :key="index">
<el-date-picker
style="width:180px"
v-model="item.collectionTime"
@ -158,7 +158,7 @@
<template slot-scope="scope">
<div class="ratio" v-show="scope.row.edit">
<div class="top">{{scope.row.totalAmount}}</div>
<el-input :disabled="!scope.row.edit" v-model="scope.row.proportion"></el-input>
<el-input :disabled="!scope.row.edit" placeholder="输入年度金额指标" v-model="scope.row.proportion"></el-input>
</div>
<div v-if="!scope.row.edit">
{{scope.row.percent}}%
@ -167,7 +167,7 @@
</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.description" :key="index">
<div class="backTime static multi-box" v-for="(item, index) in scope.row.description" :key="index">
<el-input :disabled="!scope.row.edit" v-model="item.description"></el-input>
</div>
</template>
@ -176,6 +176,7 @@
<el-table-column v-if="!liquidWatch" 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" v-show="scope.row.edit" @click="[scope.row.edit = false,annualStatisticsList()]">取消</el-button>
<!-- <el-button type="text" @click="history(scope.row)">查看</el-button> -->
</template>
</el-table-column>
@ -193,7 +194,7 @@
<div class="left-border fz-16"><p class="c-black mgl10">年份</p></div>
<el-date-picker
:disabled="changeStaffDisabled"
class="mgt10 mgl80"
class="mgt10 mgl80 year"
v-model="chooisYear"
value-format="yyyy"
:picker-options="pickerOptions"
@ -205,6 +206,7 @@
<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-checkbox @change="allCheck" v-model="checked" class="mgl20" style="margin-left:23px">全选</el-checkbox>
<el-tree
:data="tree"
show-checkbox
@ -288,6 +290,7 @@ export default {
recordArr:[],// ,
changeStaffYear:'',
changeStaffDisabled:false,
checked:false,
};
},
watch: {
@ -296,6 +299,15 @@ export default {
this.getTree()
}
},
liquidate(val){
if(val==2){
console.log('判断为2')
this.liquidateList()
this.annualStatisticsList()
}else{
this.annualList()
}
}
},
computed: {
liquidate:{
@ -323,10 +335,8 @@ export default {
created() {
this.searchStr = this.$store.state.loan.liquidateSearch
this.annualList()
console.log(this.liquidate,'li')
console.log(this.liquidate,this.searchStr,'li')
if(this.liquidate=='2'){
console.log('判断为2')
this.liquidateList()
this.annualStatisticsList()
}
},
@ -376,6 +386,9 @@ export default {
this.loading = false
})
},
/* TODO
*
*/
annualStatisticsList(){
if(this.searchStr.proportionSymbol&&!this.searchStr.proportion) return this.$message('请输入完成比例整数!')
if(this.searchStr.allAoumntSymbol&&!this.searchStr.allAoumnt) return this.$message('请输入已清收总额!')
@ -399,19 +412,22 @@ export default {
if(arr.has(e.jobNumber)){
let obj = arr.get(e.jobNumber)
obj.enterprise.push({enterprise:e.enterprise,id:e.id})
obj.totalAmount += ((+e.cash||0)+(+e.assets))
obj.cash.push({cash:e.cash,id:e.id})
obj.assets.push({assets:e.assets,id:e.id})
obj.collectionTime.push({collectionTime:e.collectionTime,id:e.id})
obj.description.push({description:e.description,id:e.id})
obj.totalAmount += e.totalAmount
arr.set(e.jobNumber,obj)
// console.log(e.totalAmount,`${e.personLiable}`)
}else{
e.enterprise = [{enterprise:e.enterprise,id:e.id}]
e.totalAmount = (+e.cash||0)+(+e.assets)
e.cash = [{cash:e.cash,id:e.id}]
e.assets = [{assets:e.assets,id:e.id}]
e.collectionTime = [{collectionTime:e.collectionTime,id:e.id}]
e.description = [{description:e.description,id:e.id}]
e.totalAmount += e.totalAmount
// console.log(e.totalAmount,`${e.personLiable}`)
arr.set(e.jobNumber,e)
}
})
@ -421,7 +437,7 @@ export default {
if(value.totalAmount&&value.proportion){
value.percent = ((value.totalAmount/value.proportion)*100).toFixed(2)
}else{
value.percent = '未填写任务额度'
value.percent = '未填写年度指标'
}
this.originalData.push(value)
}
@ -439,7 +455,7 @@ export default {
case ">":
if(this.searchStr.proportion){
this.statisticsData = this.statisticsData.filter(e=>{
if(e.percent!=='未填写任务额度')
if(e.percent!=='未填写年度指标')
return +e.percent > this.searchStr.proportion
})
}
@ -447,7 +463,7 @@ export default {
case "<":
if(this.searchStr.proportion){
this.statisticsData = this.statisticsData.filter(e=>{
if(e.percent!=='未填写任务额度')
if(e.percent!=='未填写年度指标')
return +e.percent < this.searchStr.proportion
})
}
@ -455,7 +471,7 @@ export default {
case ">=":
if(this.searchStr.proportion){
this.statisticsData = this.statisticsData.filter(e=>{
if(e.percent!=='未填写任务额度')
if(e.percent!=='未填写年度指标')
return +e.percent >= this.searchStr.proportion
})
}
@ -463,7 +479,7 @@ export default {
case "<=":
if(this.searchStr.proportion){
this.statisticsData = this.statisticsData.filter(e=>{
if(e.percent!=='未填写任务额度')
if(e.percent!=='未填写年度指标')
return +e.percent <= this.searchStr.proportion
})
}
@ -471,7 +487,7 @@ export default {
case "=":
if(this.searchStr.proportion){
this.statisticsData = this.statisticsData.filter(e=>{
if(e.percent!=='未填写任务额度')
if(e.percent!=='未填写年度指标')
return +e.percent == this.searchStr.proportion
})
}
@ -685,7 +701,7 @@ export default {
//
this.$store.commit('liquidWatch',val)
console.log(val,this.liquidWatch,'liquidWatch')
this.annualStatisticsList()
// this.annualStatisticsList()
},
yearEdit(row, val){//
if(row.edit != false){
@ -716,6 +732,7 @@ export default {
personnelSelection(val){//
return personnelSelection({year:val}).then(res=>{
this.treeIds = res.data.list
console.log(this.treeIds,'treeids')
this.ids = res.data.list
})
},
@ -726,6 +743,30 @@ export default {
})
})
},
allCheck(val){
console.log(this.tree,'tree')
if(this.tree.length==0) return
let that = this
function recursion(arr){
if(arr&&arr.length>0){
arr.forEach(e=>{
that.treeIds.push(e.id)
if(e.personnel&&e.personnel.length>0){
recursion(e.personnel)
}
})
}
}
if(val){
recursion(this.tree)
// this.ids = this.treeIds
}else{
this.treeIds = []
}
this.$refs.tree.setCheckedKeys([this.treeIds]);
// console.log(this.treeIds,'ids')
// this.$forceUpdate();
}
}
};
@ -736,12 +777,15 @@ export default {
padding-bottom: 9px;
}
.multi-box {
border: 1px solid #e6e6e6;
// border: 1px solid #e6e6e6;
min-height: 50px;
text-align: center;
line-height: 50px;
&:nth-child(2n) {
background: #e6e6e6;
border-left: 1px solid #fff;
border-right: 1px solid #fff;
}
}
.backTime{
@ -761,8 +805,8 @@ export default {
}
}
.dataList{
height: 550px;
overflow: auto;
min-height: 550px;
// overflow: auto;
position: relative;
}
/deep/ .el-table::before{
@ -777,4 +821,24 @@ export default {
/deep/ .el-input.is-disabled .el-input__inner{
text-align: center;
}
/deep/ .el-table--enable-row-transition .el-table__body td{
border: 0.0625rem solid #e6e6e6;
border-top: 0;
}
/deep/ .el-table .cell{
padding-left: 0;
padding-right: 0;
}
/deep/ .el-date-editor.el-input{
width: 100%!important;
background: transparent;
}
/deep/ .top .el-date-editor.el-input{
width: 180px!important;
background: transparent;
}
/deep/ .el-input.is-disabled .el-input__inner{
color:#606266;
background: transparent;
}
</style>

@ -5,41 +5,41 @@
<div class="mgt20 pdb20">
<div class="flex-between mgtb20">
<p class="fz-16 mgr10 font-blue mgl20 nowrap">所在区域</p>
<el-select v-model="searchStr.area" placeholder="请选择" clearable @change="search">
<el-select style="width:200px" v-model="searchStr.area" 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.operation" placeholder="请选择" clearable @change="search">
<el-select style="width:200px" v-model="searchStr.operation" 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.bank" placeholder="请选择" clearable @change="search">
<el-select style="width:200px" v-model="searchStr.bank" 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.amountSymbol" placeholder="请选择" clearable @change="search">
<el-select style="width:200px" v-model="searchStr.amountSymbol" 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
:disabled="!searchStr.amountSymbol"
placeholder="请输入金额(万)"
class="wd20 mglr10"
style="max-width: 200px"
style="width: 200px"
v-model="searchStr.compensationAmount"
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.balanceSymbol" placeholder="请选择" clearable @change="search">
<p style="margin-right:15px" class="fz-16 font-blue mgl20 nowrap">代偿余额</p>
<el-select style="width:200px;margin-right:15px" v-model="searchStr.balanceSymbol" 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
:disabled="!searchStr.balanceSymbol"
placeholder="请输入整数"
class="wd20 mglr10"
style="min-width: 200px"
placeholder="请输入金额(万)"
class="mglr10"
style="width:200px"
v-model="searchStr.compensatoryBalance"
clearable
></el-input>
@ -59,7 +59,7 @@
</div>
<div class="flex-center mgr10">
<el-button v-preventReClick type="primary" round @click="clearOption">清空选项</el-button>
<el-button v-preventReClick type="" round @click="clearOption">清空选项</el-button>
<el-button v-preventReClick type="primary" round @click="quryCollectionProgress">搜索</el-button>
</div>
</div>
@ -84,6 +84,7 @@
placeholder="企业名称/清收负责人/业务编号"
clearable
></el-input>
<el-button v-preventReClick type="primary" round @click="quryCollectionProgress">搜索</el-button>
</div>
</div>
@ -104,7 +105,7 @@
<el-table-column prop="phone" label="联系电话" align="center" min-width="100px"></el-table-column>
<el-table-column prop="bank" label="贷款银行" align="center"></el-table-column>
<el-table-column prop="guaranteeAmount" label="贷款金额(元)" align="center" min-width="100px"></el-table-column>
<el-table-column prop="guaranteeTime" label="贷款期限" align="center" min-width="100px"></el-table-column>
<el-table-column prop="guaranteeTime" label="贷款期限(月)" align="center" min-width="100px"></el-table-column>
<el-table-column prop="compensatoryTime" label="代偿时间" align="center" min-width="100px"></el-table-column>
<el-table-column prop="compensationAmount" label="代偿金额(元)" align="center" min-width="100px"></el-table-column>
<el-table-column prop="compensatoryBalance" label="代偿余额(元)" align="center" min-width="100px"></el-table-column>

@ -12,8 +12,7 @@ import '../theme/index.css'
import './assets/css/icon.css';
import './assets/icon/iconfont.css';
import './assets/css/font_iiho0e2wbc/iconfont.css'
import './components/common/directives';
import './components/common/global.js';
import './components/common/global.js';// 批量注册全局组件
import 'babel-polyfill';
import './util/rem'
import store from './store'
@ -25,6 +24,15 @@ import { Tree } from 'view-design';// --系统管理-权限管理的树状结构
import preventReClick from './utils/preventReClick.js' // 三秒内禁止再次点击
import roleBtn from '../src/util/buttonRole.js' // 验证按钮权限
import {Popover,Icon} from 'ant-design-vue' // ant流程图插件
// 使用轻量级的、仅限数字的函数实现
/**
* this.$math.adda,b
* this.$math.subtract(a,b)
* this.$math.multiplya,b
* this.$math.dividea,b
* a和b需要使用this.$math.bignumber();格式化一下数据类型
*/
// import 'ant-design-vue/lib/popover/style';
// import 'ant-design-vue/lib/icon/style';
// import { AntdComponent } from 'ant-design-vue/types/component';

@ -109,6 +109,7 @@ router.addRoutes(constantRouterMap)
function createdRouter(item,val) {// 处理成路由接受对象的方法
if(item.menuOrNot===1){
let len,com,obj
// 匹配路由名称对应的component
switch (item.name) {
case '待办事项': com = Dashboard
break;
@ -139,16 +140,18 @@ function createdRouter(item,val) {// 处理成路由接受对象的方法
default:console.log('未匹配到文件地址');
break;
}
// 每个路由对应的数据形式
obj = {
path:item.menuUrl,
component:com,
meta:{title:item.name,btn:[]},
children:[]
}
// 判断是否为主路由文件,进行递归匹配
if(item.children&&item.children.length!==0){
len = item.children.length
for(let i=0;i<len;i++){
obj.meta.btn.push(item.children[i].name)// 权限判断
obj.meta.btn.push(item.children[i].name)// 权限判断,把非主路由name作为鉴权信息
if(item.children[i].menuOrNot!==0){
// 是页面的话,生成新的obj,赛进父级
obj.children.push(createdRouter(item.children[i]))
@ -248,7 +251,7 @@ router.beforeEach(function(to,from,next){
sessionStorage.removeItem('token')
}
if(sessionStorage.getItem('token')){
if(!sessionStorage.getItem('success')){
if(!sessionStorage.getItem('success')){// 记录路由是否处理过
getPermission().then(res=>{
if(res.success){
sessionStorage.setItem('getRouter','true')
@ -284,6 +287,8 @@ router.beforeEach(function(to,from,next){
len = res.data.length,
homeMenu = []
// console.log(res.data,'路由处理,工作台和非工作台路由匹配')
// 此处为主路由页面的操作,通过对应的 createdRouter 函数进行路由数据处理,文件地址分配
for(let i=0;i<len;i++){
//匹配非工作台的路由
if(res.data[i].name!=='客户资源管理系统'&&res.data[i].name!=='担保业务管理系统'&&res.data[i].name!=='保后业务管理系统'){
@ -294,6 +299,7 @@ router.beforeEach(function(to,from,next){
permissions.children[1].children.push(createdRouter(res.data[i]))
}
}
// 记录主页顶部大按钮的值(路由主页面权限)
router.app.$options.store.commit("homeMenuData", { homeMenu: homeMenu });
let errPage = [
{
@ -309,7 +315,7 @@ router.beforeEach(function(to,from,next){
router.addRoutes([permissions])
router.addRoutes(errPage)
sessionStorage.setItem('routerData',JSON.stringify([permissions]))
// 测试处理过路由否
// 处理过路由否
sessionStorage.setItem('success',true)
}
}).catch(err=>{

@ -11,12 +11,10 @@ export default function(){
}else{
e.component = () => import(`@/pages/${e.path}.vue`)
}
e.children && e.children.forEach(n => {
n.path && (n.component = () => import(`@/pages/${n.path}.vue`))
})
})
routes.push({
path: '*',
redirect: '404'

@ -2,7 +2,7 @@ import Vue from 'vue';
import Router from 'vue-router';
import router from './index'
Vue.use(Router);
/* 重置路由 */
const staticRouter = [
{
path: '/',

@ -35,26 +35,26 @@ const state = {
}
const getters = {
// clear(state){
// return state.letterValue ={
// businessId: '',//业务id
// bank: '',//银行
// name: '',//客户名称
// passingTime: '',//贷审会日期
// loanMoney: '',//担保金额
// guaranteeMoney: '',//担保金额转格式
// file: '',//会议纪要
// loanTern: '',//担保期限
// auditOpinion: '',//审核意见
// // 上面伟哥定义的
clear(state){
return state.letterValue ={
businessId: '',//业务id
bank: '',//银行
name: '',//客户名称
passingTime: '',//贷审会日期
loanMoney: '',//担保金额
guaranteeMoney: '',//担保金额转格式
file: '',//会议纪要
loanTern: '',//担保期限
auditOpinion: '',//审核意见
// 上面伟哥定义的
// id:'',//行内rowID
// status:'',//行内状态
id:'',//行内rowID
status:'',//行内状态
// }
// ,state.headerImg =''
// ,state.headerImg =''
// }
}
,state.headerImg =''
,state.headerImg =''
}
}
const mutations = {

@ -27,9 +27,10 @@ const state = {
entering:false,// 是否为录入业务
disabledAll:false,//禁用全部
liquidate:'1',// 控制清收统计页面切换
schedule:'1',// 控制清收进度查询后退
liquidateSearch:{},
liquidWatch:false,// 清收统计是否进入查看界面
source:'',// 判断是否为系统流转,且需要判断是否已编辑
}
const getters = {
@ -106,6 +107,9 @@ const mutations = {
liquidWatch(s,val){
s.liquidWatch = val==='watch'
},
source(s,val){
s.source = val
},
}

@ -1,7 +1,7 @@
import Vue from 'vue'
/**
* 权限指令--与行内指令V-IF有冲突不要同时用
* 使用v-roleBtn = "'角色值'"
* 使用v-roleBtn = "'角色值'"详情前往担保业务查看
**/
const roleBtn = Vue.directive('roleBtn', {
inserted: function (el, binding, vnode) {

@ -1,3 +1,4 @@
/* 微信扫码登录 */
!(function(a, b, c) {
function d(a) {
var c = 'default';

@ -1,10 +1,4 @@
import {
get,
post,
put,
del,
Url
} from './http';
import {get,post,put,del,Url} from './http';
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);

@ -297,7 +297,38 @@ export default {
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
}
},
/**
* @description 格式化金额
* @param number要格式化的数字
* @param decimals保留几位小数 默认0位
* @param decPoint小数点符号 默认.
* @param thousandsSep千分位符号 默认为,
*/
formatMoney: (number, decimals = 0, decPoint = '.', thousandsSep = ',') => {
number = (number + '').replace(/[^0-9+-Ee.]/g, '')
let n = !isFinite(+number) ? 0 : +number
let prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)
let sep = (typeof thousandsSep === 'undefined') ? ',' : thousandsSep
let dec = (typeof decPoint === 'undefined') ? '.' : decPoint
let s = ''
let toFixedFix = function (n, prec) {
let k = Math.pow(10, prec)
return '' + Math.ceil(n * k) / k
}
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.')
let re = /(-?\d+)(\d{3})/
while (re.test(s[0])) {
s[0] = s[0].replace(re, '$1' + sep + '$2')
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || ''
s[1] += new Array(prec - s[1].length + 1).join('0')
}
return s.join(dec)
},
};

@ -4,8 +4,9 @@ import axios from 'axios';
import { Message } from 'element-ui'
import router from '../router/index'
// 服务器的切换
export const Url = 'https://test.feifanhitech.com'// 测试服务器地址
// export const Url = 'https://www.feifanhitech.com';// 非凡
// export const Url = 'https://www.feifanhitech.com';// 非凡(正式服)
// export const Url = 'http://192.168.31.137:8080';//陈赓
axios.defaults.baseURL = Url;
const baseurl = Url

Loading…
Cancel
Save