Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
Y
yishuju-ui
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
何远江
yishuju-ui
Commits
4b2f2732
Commit
4b2f2732
authored
Feb 22, 2025
by
沈翠玲
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加统计
parent
653ee653
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
437 additions
and
145 deletions
+437
-145
allcation.js
src/api/allcation.js
+12
-0
property.js
src/api/property.js
+21
-1
main.css
src/styles/main.css
+1
-1
index.vue
src/views/business-approval/audit-apply/index.vue
+1
-1
index.vue
src/views/business-approval/by-stages-apply/index.vue
+62
-3
index.vue
src/views/business-approval/reduction-apply/index.vue
+62
-4
index.vue
src/views/business-approval/repair-approve/index.vue
+62
-3
index.vue
src/views/business-approval/repayment-approve/index.vue
+57
-4
index.vue
src/views/property/audit-manage/index.vue
+22
-53
index.vue
src/views/property/case-back/index.vue
+7
-7
index.vue
src/views/property/case-return/index.vue
+92
-6
index.vue
src/views/workplace/audit/index.vue
+38
-62
No files found.
src/api/allcation.js
View file @
4b2f2732
...
...
@@ -50,4 +50,16 @@ export const stayLoan = (params) => {
// 根据调节中心获取不同角色用户
export
const
getTenantUsers
=
(
params
)
=>
{
return
request
.
get
(
'/tenant/getTenantUsers'
,
params
);
};
// 获取回收的资产统计
export
const
getLoanBack
=
(
params
)
=>
{
return
request
.
get
(
'/LoanBack/totalLoan'
,
params
);
};
// 案件管理统计
export
const
getLoanBacktotal
=
(
params
)
=>
{
return
request
.
get
(
'/LoanBack/total'
,
params
);
};
// 资产列表
export
const
getLoanBackpage
=
(
params
)
=>
{
return
request
.
get
(
'/LoanBack/page'
,
params
);
};
\ No newline at end of file
src/api/property.js
View file @
4b2f2732
...
...
@@ -45,6 +45,9 @@ export const saveRepayRecord = (data) => {
export
const
getRepayRecordPage
=
(
params
)
=>
{
return
request
.
get
(
'/repayRecord/page'
,
params
);
};
export
const
getRepayRecordTotal
=
(
params
)
=>
{
return
request
.
get
(
'/repayRecord/flowStatusTotal'
,
params
);
};
// 还款申请批量
export
const
repayRecordFlowStatusByIds
=
(
params
)
=>
{
return
request
.
get
(
'/repayRecord/flowStatusByIds'
,
params
);
...
...
@@ -58,6 +61,9 @@ export const saveReduce = (data) => {
export
const
getReducePage
=
(
params
)
=>
{
return
request
.
get
(
'/reduce/page'
,
params
);
};
export
const
getReduceTotal
=
(
params
)
=>
{
return
request
.
get
(
'/reduce/flowStatusTotal'
,
params
);
};
// 减免申请批量
export
const
flowStatusByIds
=
(
params
)
=>
{
return
request
.
get
(
'/reduce/flowStatusByIds'
,
params
);
...
...
@@ -75,6 +81,10 @@ export const changeAmount = (data) => {
export
const
getByStagesPage
=
(
params
)
=>
{
return
request
.
get
(
'/byStages/page'
,
params
);
};
// 分期申请列表
export
const
getByStagesTotal
=
(
params
)
=>
{
return
request
.
get
(
'/byStages/flowStatusTotal'
,
params
);
};
// 分期申请批量审核
export
const
byStagesflowStatusByIds
=
(
params
)
=>
{
return
request
.
get
(
'/byStages/flowStatusByIds'
,
params
);
...
...
@@ -88,7 +98,14 @@ export const saveTrackRecord = (data) => {
export
const
getTrackRecord
=
(
params
)
=>
{
return
request
.
get
(
'/TrackRecord/page'
,
params
);
};
// 案件跟踪记录列表
export
const
getTrackRecordTotal
=
(
params
)
=>
{
return
request
.
get
(
'/TrackRecord/flowStatusTotal'
,
params
);
};
// 案件跟踪记录统计
export
const
getTrackRecordAuditTotal
=
(
params
)
=>
{
return
request
.
get
(
'/TrackRecord/auditStatusTotal'
,
params
);
};
// 联络人修复申请
export
const
saveRepairRecord
=
(
data
)
=>
{
return
request
.
post
(
'/RepairRecord/save'
,
data
);
...
...
@@ -97,6 +114,9 @@ export const saveRepairRecord = (data) => {
export
const
getRepairRecord
=
(
params
)
=>
{
return
request
.
get
(
'/RepairRecord/page'
,
params
);
};
export
const
getRepairRecordTotal
=
(
params
)
=>
{
return
request
.
get
(
'/RepairRecord/flowStatusTotal'
,
params
);
};
export
const
importExcel
=
(
params
)
=>
{
return
request
.
get
(
'/RepairRecord/importExcel'
,
params
);
};
...
...
src/styles/main.css
View file @
4b2f2732
...
...
@@ -26,7 +26,7 @@ body,
line-height
:
28px
!important
;
}
.el-form-item
{
margin-bottom
:
1
0
px
!important
;
margin-bottom
:
1
5
px
!important
;
}
.el-tabs__item
{
font-size
:
13px
!important
;
...
...
src/views/business-approval/audit-apply/index.vue
View file @
4b2f2732
...
...
@@ -15,7 +15,7 @@
<
script
setup
name=
"systemLog"
lang=
"jsx"
>
import
{
computed
}
from
'vue'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
getTrackRecord
}
from
'@/api/property'
;
import
{
getTrackRecord
,
getTrackRecordTotal
}
from
'@/api/property'
;
import
{
onMounted
}
from
'vue'
;
import
{
getAppEnvConfig
}
from
'@/utils/env'
;
import
{
ElMessageBox
,
ElMessage
,
ElButton
,
ElTag
}
from
'element-plus'
;
...
...
src/views/business-approval/by-stages-apply/index.vue
View file @
4b2f2732
<
template
>
<div
class=
"table-box"
>
<ProTable
:config=
"config"
ref=
"ProTableRef"
:api=
"getByStagesPage"
:selectdList=
"selectdList"
>
<div
class=
" bg-white pt-2 pl-2"
>
<el-tabs
v-model=
"activeName"
class=
"demo-tabs"
@
tab-click=
"handleClick"
>
<el-tab-pane
:label=
"item.label"
:name=
"item.value"
v-for=
"(item, index) in tabs"
:key=
"index"
>
<template
#
label
>
<div>
{{
item
.
label
}}
<span
style=
"font-size: 20px; font-weight: bold;"
>
{{
item
.
msg
}}
</span>
</div>
</
template
>
</el-tab-pane>
</el-tabs>
</div>
<ProTable
:config=
"config"
ref=
"ProTableRef"
:api=
"getByStagesPage"
:selectdList=
"selectdList"
:paramCallback=
"paramCallback"
>
<
template
#
left_buttons
>
<!--
<el-button
type=
"primary"
>
下载申请
</el-button>
-->
<el-button
...
...
@@ -142,7 +159,7 @@
import
{
computed
}
from
'vue'
;
import
{
inject
}
from
'vue'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
getByStagesPage
,
byStagesflowStatusByIds
}
from
'@/api/property'
;
import
{
getByStagesPage
,
getByStagesTotal
,
byStagesflowStatusByIds
}
from
'@/api/property'
;
import
{
onMounted
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
,
ElButton
}
from
'element-plus'
;
import
{
Download
}
from
'@element-plus/icons-vue'
;
...
...
@@ -154,6 +171,8 @@
const
RefImage
=
ref
(
false
);
const
{
PhoneResultStatus
,
ReduceType
,
FlowStatus
,
FollowStatus
,
CaseStatus
}
=
useDict
(
"PhoneResultStatus"
,
"ReduceType"
,
"FlowStatus"
,
"FollowStatus"
,
"CaseStatus"
);
const
downloadfile
=
inject
(
'download'
);
const
activeName
=
ref
(
'pending'
);
const
tabs
=
ref
([]);
const
ProTableRef
=
ref
();
const
showModal
=
ref
(
false
);
...
...
@@ -162,6 +181,46 @@
console
.
log
(
'row'
,
row
);
selectdList
.
value
=
row
.
records
;
};
const
paramCallback
=
(
param
)
=>
{
const
obj
=
JSON
.
parse
(
JSON
.
stringify
(
param
));
obj
[
'flowStatus'
]
=
activeName
.
value
;
if
(
obj
[
'trackTime'
])
{
if
(
obj
[
'trackTime'
][
0
])
obj
[
'trackTimeBegin'
]
=
obj
[
'trackTime'
][
0
];
if
(
obj
[
'trackTime'
][
1
])
obj
[
'trackTimeEnd'
]
=
obj
[
'trackTime'
][
1
];
delete
obj
[
'trackTime'
];
}
if
(
obj
[
'nextTime'
])
{
if
(
obj
[
'nextTime'
][
0
])
obj
[
'nextTrackTimeBegin'
]
=
obj
[
'nextTime'
][
0
];
if
(
obj
[
'nextTime'
][
1
])
obj
[
'nextTrackTimeEnd'
]
=
obj
[
'nextTime'
][
1
];
delete
obj
[
'nextTime'
];
}
setTimeout
(()
=>
{
const
arr
=
JSON
.
parse
(
JSON
.
stringify
(
FlowStatus
.
value
))
getByStagesTotal
({...
obj
,
flowStatus
:
null
}).
then
(
res
=>
{
if
(
res
.
success
)
{
arr
.
forEach
(
item
=>
{
const
tt
=
res
.
result
.
find
(
v
=>
v
.
flowStatus
===
item
.
value
)
if
(
tt
)
{
item
[
'msg'
]
=
tt
.
number
}
else
{
item
[
'msg'
]
=
0
}
})
tabs
.
value
=
arr
}
else
{
tabs
.
value
=
arr
}
}).
catch
(
e
=>
{
tabs
.
value
=
arr
})
},
500
)
return
obj
;
};
const
handleClick
=
()
=>
{
setTimeout
(()
=>
{
query
();
},
300
);
};
const
download
=
(
item
)
=>
{
const
name
=
item
.
slice
(
item
.
lastIndexOf
(
'/'
)
+
1
,
item
.
length
);
downloadfile
(
'/sys/static/'
+
item
,
{},
name
);
...
...
@@ -396,7 +455,7 @@
showOverflow
:
'tooltip'
,
width
:
80
,
enum
:
FlowStatus
,
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
span
:
1
,
labelWidth
:
90
},
//
search: { el: 'select', props: { filterable: true }, span: 1, labelWidth: 90 },
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
src/views/business-approval/reduction-apply/index.vue
View file @
4b2f2732
<
template
>
<div
class=
"table-box"
>
<ProTable
:config=
"config"
ref=
"ProTableRef"
:api=
"getReducePage"
:selectdList=
"selectdList"
>
<div
class=
" bg-white pt-2 pl-2"
>
<el-tabs
v-model=
"activeName"
class=
"demo-tabs"
@
tab-click=
"handleClick"
>
<el-tab-pane
:label=
"item.label"
:name=
"item.value"
v-for=
"(item, index) in tabs"
:key=
"index"
>
<template
#
label
>
<div>
{{
item
.
label
}}
<span
style=
"font-size: 20px; font-weight: bold;"
>
{{
item
.
msg
}}
</span>
</div>
</
template
>
</el-tab-pane>
</el-tabs>
</div>
<ProTable
:config=
"config"
ref=
"ProTableRef"
:api=
"getReducePage"
:selectdList=
"selectdList"
:paramCallback=
"paramCallback"
>
<
template
#
left_buttons
>
<!--
<el-button
type=
"primary"
>
下载申请
</el-button>
-->
<el-button
...
...
@@ -116,7 +133,7 @@
<
script
setup
name=
"systemLog"
lang=
"jsx"
>
import
{
computed
}
from
'vue'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
getReducePage
,
flowStatusByIds
}
from
'@/api/property'
;
import
{
getReducePage
,
getReduceTotal
,
flowStatusByIds
}
from
'@/api/property'
;
import
{
onMounted
}
from
'vue'
;
import
{
inject
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
,
ElButton
}
from
'element-plus'
;
...
...
@@ -130,17 +147,53 @@
const
downloadfile
=
inject
(
'download'
);
const
ProTableRef
=
ref
();
const
showModal
=
ref
(
false
);
const
tabs
=
ref
([]);
const
srcList
=
ref
([]);
const
activeName
=
ref
(
'pending'
);
const
RefImage
=
ref
(
false
);
const
selectdList
=
ref
([]);
const
onCheckboxChange
=
(
row
)
=>
{
console
.
log
(
'row'
,
row
);
selectdList
.
value
=
row
.
records
;
};
const
download
=
(
item
)
=>
{
const
name
=
item
.
slice
(
item
.
lastIndexOf
(
'/'
)
+
1
,
item
.
length
);
downloadfile
(
'/sys/static/'
+
item
,
{},
name
);
};
const
paramCallback
=
(
param
)
=>
{
const
obj
=
JSON
.
parse
(
JSON
.
stringify
(
param
));
obj
[
'flowStatus'
]
=
activeName
.
value
;
if
(
obj
[
'trackTime'
])
{
if
(
obj
[
'trackTime'
][
0
])
obj
[
'trackTimeBegin'
]
=
obj
[
'trackTime'
][
0
];
if
(
obj
[
'trackTime'
][
1
])
obj
[
'trackTimeEnd'
]
=
obj
[
'trackTime'
][
1
];
delete
obj
[
'trackTime'
];
}
if
(
obj
[
'nextTime'
])
{
if
(
obj
[
'nextTime'
][
0
])
obj
[
'nextTrackTimeBegin'
]
=
obj
[
'nextTime'
][
0
];
if
(
obj
[
'nextTime'
][
1
])
obj
[
'nextTrackTimeEnd'
]
=
obj
[
'nextTime'
][
1
];
delete
obj
[
'nextTime'
];
}
setTimeout
(()
=>
{
const
arr
=
JSON
.
parse
(
JSON
.
stringify
(
FlowStatus
.
value
))
getReduceTotal
({...
obj
,
flowStatus
:
null
}).
then
(
res
=>
{
if
(
res
.
success
)
{
arr
.
forEach
(
item
=>
{
const
tt
=
res
.
result
.
find
(
v
=>
v
.
flowStatus
===
item
.
value
)
if
(
tt
)
{
item
[
'msg'
]
=
tt
.
number
}
else
{
item
[
'msg'
]
=
0
}
})
tabs
.
value
=
arr
}
else
{
tabs
.
value
=
arr
}
}).
catch
(
e
=>
{
tabs
.
value
=
arr
})
},
500
)
return
obj
;
};
const
onCheckboxAll
=
(
flag
)
=>
{
if
(
flag
.
checked
)
{
selectdList
.
value
=
flag
.
records
;
...
...
@@ -151,6 +204,11 @@
const
changeStatus
=
async
()
=>
{
showModal
.
value
=
true
;
};
const
handleClick
=
()
=>
{
setTimeout
(()
=>
{
query
();
},
300
);
};
const
preview
=
(
item
,
type
)
=>
{
const
list
=
[];
item
[
type
].
forEach
((
v
)
=>
{
...
...
@@ -296,7 +354,7 @@
showOverflow
:
'tooltip'
,
width
:
80
,
enum
:
FlowStatus
,
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
span
:
1
,
labelWidth
:
90
},
//
search: { el: 'select', props: { filterable: true }, span: 1, labelWidth: 90 },
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
src/views/business-approval/repair-approve/index.vue
View file @
4b2f2732
<
template
>
<div
class=
"table-box"
>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getRepairRecord"
:selectdList=
"selectdList"
>
<div
class=
" bg-white pt-2 pl-2"
>
<el-tabs
v-model=
"activeName"
class=
"demo-tabs"
@
tab-click=
"handleClick"
>
<el-tab-pane
:label=
"item.label"
:name=
"item.value"
v-for=
"(item, index) in tabs"
:key=
"index"
>
<template
#
label
>
<div>
{{
item
.
label
}}
<span
style=
"font-size: 20px; font-weight: bold;"
>
{{
item
.
msg
}}
</span>
</div>
</
template
>
</el-tab-pane>
</el-tabs>
</div>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getRepairRecord"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<
template
#
left_buttons
>
<!--
<el-button
type=
"primary"
>
下载申请
</el-button>
-->
<el-button
...
...
@@ -38,7 +55,7 @@
import
{
computed
}
from
'vue'
;
import
{
onMounted
}
from
'vue'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
getRepairRecord
,
RepairRecordStatusByIds
}
from
'@/api/property'
;
import
{
getRepairRecord
,
getRepairRecordTotal
,
RepairRecordStatusByIds
}
from
'@/api/property'
;
import
{
ElMessageBox
,
ElMessage
,
ElButton
}
from
'element-plus'
;
import
{
getTenantPage
}
from
'@/api/tenant'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
...
...
@@ -46,6 +63,8 @@
const
tabledata
=
ref
([]);
const
showModal
=
ref
(
false
);
const
tabs
=
ref
([]);
const
activeName
=
ref
(
'pending'
);
const
caseLRef
=
ref
();
const
selectdList
=
ref
([]);
const
onCheckboxChange
=
(
row
)
=>
{
...
...
@@ -59,6 +78,46 @@
selectdList
.
value
=
[];
}
};
const
handleClick
=
()
=>
{
setTimeout
(()
=>
{
query
();
},
300
);
};
const
paramCallback
=
(
param
)
=>
{
const
obj
=
JSON
.
parse
(
JSON
.
stringify
(
param
));
obj
[
'flowStatus'
]
=
activeName
.
value
;
if
(
obj
[
'trackTime'
])
{
if
(
obj
[
'trackTime'
][
0
])
obj
[
'trackTimeBegin'
]
=
obj
[
'trackTime'
][
0
];
if
(
obj
[
'trackTime'
][
1
])
obj
[
'trackTimeEnd'
]
=
obj
[
'trackTime'
][
1
];
delete
obj
[
'trackTime'
];
}
if
(
obj
[
'nextTime'
])
{
if
(
obj
[
'nextTime'
][
0
])
obj
[
'nextTrackTimeBegin'
]
=
obj
[
'nextTime'
][
0
];
if
(
obj
[
'nextTime'
][
1
])
obj
[
'nextTrackTimeEnd'
]
=
obj
[
'nextTime'
][
1
];
delete
obj
[
'nextTime'
];
}
setTimeout
(()
=>
{
const
arr
=
JSON
.
parse
(
JSON
.
stringify
(
FlowStatus
.
value
))
getRepairRecordTotal
({...
obj
,
flowStatus
:
null
}).
then
(
res
=>
{
if
(
res
.
success
)
{
arr
.
forEach
(
item
=>
{
const
tt
=
res
.
result
.
find
(
v
=>
v
.
flowStatus
===
item
.
value
)
if
(
tt
)
{
item
[
'msg'
]
=
tt
.
number
}
else
{
item
[
'msg'
]
=
0
}
})
tabs
.
value
=
arr
}
else
{
tabs
.
value
=
arr
}
}).
catch
(
e
=>
{
tabs
.
value
=
arr
})
},
500
)
return
obj
;
};
const
changeStatus
=
async
()
=>
{
showModal
.
value
=
true
;
};
...
...
@@ -201,7 +260,7 @@
title
:
'审核状态'
,
width
:
95
,
enum
:
FlowStatus
,
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
labelWidth
:
105
},
//
search: { el: 'select', props: { filterable: true }, labelWidth: 105 },
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
src/views/business-approval/repayment-approve/index.vue
View file @
4b2f2732
<
template
>
<div
class=
"table-box"
>
<ProTable
:config=
"config"
ref=
"ProTableRef"
:api=
"getRepayRecordPage"
:selectdList=
"selectdList"
>
<div
class=
" bg-white pt-2 pl-2"
>
<el-tabs
v-model=
"activeName"
class=
"demo-tabs"
@
tab-click=
"handleClick"
>
<el-tab-pane
:label=
"item.label"
:name=
"item.value"
v-for=
"(item, index) in tabs"
:key=
"index"
>
<template
#
label
>
<div>
{{
item
.
label
}}
<span
style=
"font-size: 20px; font-weight: bold;"
>
{{
item
.
msg
}}
</span>
</div>
</
template
>
</el-tab-pane>
</el-tabs>
</div>
<ProTable
:config=
"config"
ref=
"ProTableRef"
:api=
"getRepayRecordPage"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<
template
#
left_buttons
>
<!--
<el-button
type=
"primary"
>
下载申请
</el-button>
-->
<el-button
...
...
@@ -37,7 +54,7 @@
<
script
setup
name=
"repaymentApprove"
lang=
"jsx"
>
import
{
computed
}
from
'vue'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
getRepayRecordPage
,
repayRecordFlowStatusByIds
}
from
'@/api/property'
;
import
{
getRepayRecordPage
,
getRepayRecordTotal
,
repayRecordFlowStatusByIds
}
from
'@/api/property'
;
import
{
onMounted
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
,
ElButton
}
from
'element-plus'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
...
...
@@ -45,6 +62,8 @@
const
{
RepayType
,
FlowStatus
}
=
useDict
(
"RepayType"
,
"FlowStatus"
);
const
ProTableRef
=
ref
();
const
showModal
=
ref
(
false
);
const
activeName
=
ref
(
'pending'
);
const
tabs
=
ref
([]);
const
selectdList
=
ref
([]);
const
onCheckboxChange
=
(
row
)
=>
{
console
.
log
(
'row'
,
row
);
...
...
@@ -57,7 +76,41 @@
selectdList
.
value
=
[];
}
};
const
paramCallback
=
(
param
)
=>
{
const
obj
=
JSON
.
parse
(
JSON
.
stringify
(
param
));
obj
[
'flowStatus'
]
=
activeName
.
value
;
if
(
obj
[
'trackTime'
])
{
if
(
obj
[
'trackTime'
][
0
])
obj
[
'trackTimeBegin'
]
=
obj
[
'trackTime'
][
0
];
if
(
obj
[
'trackTime'
][
1
])
obj
[
'trackTimeEnd'
]
=
obj
[
'trackTime'
][
1
];
delete
obj
[
'trackTime'
];
}
if
(
obj
[
'nextTime'
])
{
if
(
obj
[
'nextTime'
][
0
])
obj
[
'nextTrackTimeBegin'
]
=
obj
[
'nextTime'
][
0
];
if
(
obj
[
'nextTime'
][
1
])
obj
[
'nextTrackTimeEnd'
]
=
obj
[
'nextTime'
][
1
];
delete
obj
[
'nextTime'
];
}
setTimeout
(()
=>
{
const
arr
=
JSON
.
parse
(
JSON
.
stringify
(
FlowStatus
.
value
))
getRepayRecordTotal
({...
obj
,
flowStatus
:
null
}).
then
(
res
=>
{
if
(
res
.
success
)
{
arr
.
forEach
(
item
=>
{
const
tt
=
res
.
result
.
find
(
v
=>
v
.
flowStatus
===
item
.
value
)
if
(
tt
)
{
item
[
'msg'
]
=
tt
.
number
}
else
{
item
[
'msg'
]
=
0
}
})
tabs
.
value
=
arr
}
else
{
tabs
.
value
=
arr
}
}).
catch
(
e
=>
{
tabs
.
value
=
arr
})
},
500
)
return
obj
;
};
const
changeStatus
=
async
()
=>
{
showModal
.
value
=
true
;
};
...
...
@@ -218,7 +271,7 @@
showOverflow
:
'tooltip'
,
width
:
80
,
enum
:
FlowStatus
,
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
span
:
1
,
labelWidth
:
90
},
//
search: { el: 'select', props: { filterable: true }, span: 1, labelWidth: 90 },
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
src/views/property/audit-manage/index.vue
View file @
4b2f2732
...
...
@@ -23,7 +23,6 @@
ref=
"caseLRef"
:api=
"getTrackRecord"
:selectdList=
"selectdList"
:dataCallback=
"dataCallback"
:paramCallback=
"paramCallback"
>
<!-- 表格 header 按钮 -->
...
...
@@ -51,12 +50,11 @@
import
{
ElMessageBox
,
ElMessage
,
ElButton
,
ElTag
}
from
'element-plus'
;
import
{
onMounted
}
from
'vue'
;
import
{
getAppEnvConfig
}
from
'@/utils/env'
;
import
{
getTrackRecord
}
from
'@/api/property'
;
import
{
getTrackRecord
,
getTrackRecordAuditTotal
}
from
'@/api/property'
;
import
{
batchSave
}
from
'@/api/audit'
;
import
{
useUserStore
}
from
'@/stores/modules/user'
;
import
{
getTenantPage
}
from
'@/api/tenant'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
import
{
watch
}
from
'vue'
;
const
{
PhoneResultStatus
,
ReduceType
,
FlowStatus
,
FollowStatus
,
AuditStatus
,
CaseStatus
}
=
useDict
(
"PhoneResultStatus"
,
"ReduceType"
,
"FlowStatus"
,
"FollowStatus"
,
"AuditStatus"
,
"CaseStatus"
);
const
envs
=
getAppEnvConfig
();
const
{
userInfo
}
=
useUserStore
();
...
...
@@ -74,52 +72,6 @@
const
onCheckboxChange
=
(
row
)
=>
{
selectdList
.
value
=
row
.
records
;
};
watch
(
()
=>
AuditStatus
.
value
,
(
newValue
,
oldValue
)
=>
{
const
list
=
[]
if
(
AuditStatus
&&
AuditStatus
.
value
&&
AuditStatus
.
value
.
length
)
{
AuditStatus
.
value
.
forEach
(
async
e
=>
{
const
param
=
{
current
:
1
,
size
:
1
,
auditStatus
:
e
.
value
,
followStatus
:
[
'progress'
,
'pass_on'
,
'no_pass'
,
'Claims_unrelated_to_creditors'
,
'Claiming_not_to_be_myself'
,
]
}
const
t
=
e
.
value
if
(
userInfo
.
id
)
{
param
[
'createBy'
]
=
userInfo
.
id
;
}
let
result
=
new
Promise
((
resolve
,
reject
)
=>
{
getTrackRecord
(
param
).
then
(
res
=>
{
const
obj
=
{}
obj
[
e
.
value
]
=
res
resolve
(
obj
)
})
});
list
.
push
(
result
)
})
}
Promise
.
all
(
list
).
then
(
res
=>
{
console
.
log
(
res
)
let
tttt
=
{}
res
.
forEach
(
e
=>
{
tttt
=
{...
tttt
,
...
e
}
})
AuditStatus
.
value
.
forEach
(
e
=>
{
const
obj
=
JSON
.
parse
(
JSON
.
stringify
(
e
))
obj
[
'msg'
]
=
tttt
[
e
.
value
].
result
.
page
.
totalElements
tabs
.
value
.
push
(
obj
)
})
})
}
);
const
activeName
=
ref
(
'un_audit'
);
const
callMode
=
ref
(
''
);
...
...
@@ -139,15 +91,33 @@
if
(
obj
[
'nextTime'
][
1
])
obj
[
'nextTrackTimeEnd'
]
=
obj
[
'nextTime'
][
1
];
delete
obj
[
'nextTime'
];
}
setTimeout
(()
=>
{
const
arr
=
JSON
.
parse
(
JSON
.
stringify
(
AuditStatus
.
value
))
getTrackRecordAuditTotal
({...
obj
,
auditStatus
:
null
}).
then
(
res
=>
{
if
(
res
.
success
)
{
arr
.
forEach
(
item
=>
{
const
tt
=
res
.
result
.
find
(
v
=>
v
.
auditStatus
===
item
.
value
)
if
(
tt
)
{
item
[
'msg'
]
=
tt
.
number
}
else
{
item
[
'msg'
]
=
0
}
})
tabs
.
value
=
arr
}
else
{
tabs
.
value
=
arr
}
}).
catch
(
e
=>
{
tabs
.
value
=
arr
})
},
500
)
// obj['voices'] = 'Y'
// obj['images'] = 'Y'
// obj['notes'] = 'Y'
// obj['others'] = 'Y'
return
obj
;
};
const
dataCallback
=
(
data
)
=>
{
console
.
log
(
'data'
,
data
)
}
const
callTelephone
=
(
row
,
type
)
=>
{
callMode
.
value
=
type
;
callDrawerRef
.
value
.
openModal
(
JSON
.
parse
(
JSON
.
stringify
(
row
)));
...
...
@@ -489,7 +459,6 @@
};
const
query
=
()
=>
{
caseLRef
.
value
?.
search
()
tabs
.
value
};
onMounted
(()
=>
{
...
...
src/views/property/case-back/index.vue
View file @
4b2f2732
<
template
>
<div
class=
"table-box"
>
<div>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getLoanpage"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getLoan
Back
page"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<template
#
table_top
>
<div
class=
"style-lable"
style=
"width: 100%"
>
<div
class=
"item_warp"
style=
"width: 19%"
>
...
...
@@ -37,7 +37,7 @@
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
待还金额
</div>
<div
class=
"item items1"
>
¥
{{
statisis
.
a
mount
}}
</div>
<div
class=
"item items1"
>
¥
{{
statisis
.
unA
mount
}}
</div>
</div>
</div>
</div>
...
...
@@ -81,7 +81,7 @@
</div>
<div
class=
"number-right"
>
<p>
收回客户数量
</p>
<p>
{{ statisis.unCustomerNum }}
</p>
<p>
{{ statisis
1
.unCustomerNum }}
</p>
</div>
</div>
<div
class=
"number-box"
>
...
...
@@ -92,7 +92,7 @@
</div>
<div
class=
"number-right"
>
<p>
收回案件数
</p>
<p>
{{ statisis.unCaseNum }}
</p>
<p>
{{ statisis
1
.unCaseNum }}
</p>
</div>
</div>
<div
class=
"number-box"
>
...
...
@@ -122,7 +122,7 @@
</template>
<
script
setup
name=
"case-allocation"
lang=
"jsx"
>
import
{
getLoan
total
,
getLoanpage
,
getLoanDistribute
,
back
,
fullBack
}
from
'@/api/allcation'
;
import
{
getLoan
Backtotal
,
getLoanBackpage
,
getLoanBack
,
back
,
fullBack
}
from
'@/api/allcation'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
}
from
'element-plus'
;
import
{
VxeTextEllipsis
,
VxeTooltip
}
from
'vxe-pc-ui'
;
...
...
@@ -157,7 +157,7 @@
const
statisis
=
ref
({});
const
statisis1
=
ref
({});
const
getStatisis
=
(
params
)
=>
{
getLoantotal
(
params
).
then
((
res
)
=>
{
getLoan
Back
total
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
statisis
.
value
=
res
.
result
;
}
...
...
@@ -170,7 +170,7 @@
}
delete
p
[
'current'
];
delete
p
[
'size'
];
getLoan
Distribute
(
p
).
then
((
res
)
=>
{
getLoan
Back
(
p
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
statisis1
.
value
=
res
.
result
;
}
...
...
src/views/property/case-return/index.vue
View file @
4b2f2732
<
template
>
<div
class=
"table-box"
>
<div>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getLoanpage"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getLoan
Back
page"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<template
#
table_top
>
<div
class=
"style-lable"
style=
"width: 100%"
>
<div
class=
"item_warp"
style=
"width: 19%"
>
...
...
@@ -67,12 +67,47 @@
resize
v-model=
"showModal"
title=
"提示"
height=
"
2
42"
width=
"
45
0"
height=
"
3
42"
width=
"
56
0"
show-footer
esc-closable
>
<div
class=
"w-full px-3 h-full overflow-auto flex-col flex mytable"
>
<div
class=
"top"
>
<div
class=
"number-box"
>
<div
class=
"number-left"
>
<div
class=
"icon-wrapper"
>
<img
src=
"@/assets/images/userlist.svg"
/>
</div>
</div>
<div
class=
"number-right"
>
<p>
收回客户数量
</p>
<p>
{{ statisis1.unCustomerNum }}
</p>
</div>
</div>
<div
class=
"number-box"
>
<div
class=
"number-left"
>
<div
class=
"icon-wrapper"
>
<img
src=
"@/assets/images/caselist.svg"
/>
</div>
</div>
<div
class=
"number-right"
>
<p>
收回案件数
</p>
<p>
{{ statisis1.unCaseNum }}
</p>
</div>
</div>
<div
class=
"number-box"
>
<div
class=
"number-left"
>
<div
class=
"icon-wrapper"
>
<img
src=
"@/assets/images/money.svg"
/>
</div>
</div>
<div
class=
"number-right"
>
<p>
预计收回金额
</p>
<p>
¥{{ statisis.unAmount }}
</p>
</div>
</div>
</div>
<div
class=
"w-full px-3 mt-3 overflow-auto flex-col flex mytable"
>
⚠️撤案处理后不可重新分派
<br
/>
撤案:只撤案未留案的案件
<br
/>
强制撤案:所有案件都会撤案,留案案件会被强制撤案
<br
/>
...
...
@@ -87,7 +122,7 @@
</template>
<
script
setup
name=
"case-allocation"
lang=
"jsx"
>
import
{
getLoan
total
,
getLoanpage
,
backDistribute
,
fullWithdraw
}
from
'@/api/allcation'
;
import
{
getLoan
Backtotal
,
getLoanBackpage
,
getLoanBack
,
back
,
fullBack
}
from
'@/api/allcation'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
}
from
'element-plus'
;
import
citydata
from
'../../../assets/citydata'
;
...
...
@@ -120,8 +155,9 @@
selectdList
.
value
=
row
.
records
;
};
const
statisis
=
ref
({});
const
statisis1
=
ref
({});
const
getStatisis
=
(
params
)
=>
{
getLoantotal
(
params
).
then
((
res
)
=>
{
getLoan
Back
total
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
statisis
.
value
=
res
.
result
;
}
...
...
@@ -178,6 +214,19 @@
getStatisis
(
obj
);
return
obj
;
};
const
getStatisis1
=
(
params
,
id
)
=>
{
const
p
=
JSON
.
parse
(
JSON
.
stringify
(
params
));
if
(
id
)
{
p
[
'tenantId'
]
=
id
;
}
delete
p
[
'current'
];
delete
p
[
'size'
];
getLoanBack
(
p
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
statisis1
.
value
=
res
.
result
;
}
});
};
const
backCase
=
async
()
=>
{
if
(
dataValue
.
value
===
'对选中项操作'
&&
(
!
selectdList
.
value
||
!
selectdList
.
value
.
length
))
{
return
ElMessage
.
warning
({
...
...
@@ -185,6 +234,13 @@
plain
:
true
,
});
}
let
p
=
{}
if
(
dataValue
.
value
===
'对选中项操作'
)
{
p
[
'loanIds'
]
=
selectdList
.
value
.
map
((
v
)
=>
v
.
id
);
}
else
{
p
=
curParam
.
value
;
}
getStatisis1
(
p
);
showModal
.
value
=
true
;
};
const
onCheckboxAll
=
(
flag
)
=>
{
...
...
@@ -578,3 +634,33 @@
query
();
});
</
script
>
<
style
lang=
"scss"
scoped
>
.top
{
display
:
flex
;
.number-box
{
font-size
:
15px
;
width
:
235px
;
padding
:
5px
0
5px
15px
;
border
:
1px
solid
rgba
(
0
,
0
,
0
,
0
.1
);
height
:
50px
;
display
:
flex
;
margin-right
:
10px
;
margin-top
:
10px
;
}
.icon-wrapper
{
width
:
40px
;
height
:
40px
;
text-align
:
center
;
line-height
:
40px
;
color
:
#bbc3ca
;
margin-right
:
10px
;
font-size
:
37px
;
}
}
.number-right
{
p
:nth-child
(
1
)
{
color
:
#aaa
;
font-size
:
13px
;
}
}
</
style
>
\ No newline at end of file
src/views/workplace/audit/index.vue
View file @
4b2f2732
...
...
@@ -22,8 +22,8 @@
:config=
"config"
ref=
"caseLRef"
:api=
"getTrackRecord"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
:paramCallback=
"paramCallback"
>
<!-- 表格 header 按钮 -->
<
template
#
left_buttons
>
...
...
@@ -50,12 +50,11 @@
import
{
ElMessageBox
,
ElMessage
,
ElButton
,
ElTag
}
from
'element-plus'
;
import
{
onMounted
}
from
'vue'
;
import
{
getAppEnvConfig
}
from
'@/utils/env'
;
import
{
getTrackRecord
}
from
'@/api/property'
;
import
{
getTrackRecord
,
getTrackRecordAuditTotal
}
from
'@/api/property'
;
import
{
batchSave
}
from
'@/api/audit'
;
import
{
useUserStore
}
from
'@/stores/modules/user'
;
import
{
getTenantPage
}
from
'@/api/tenant'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
import
{
watch
}
from
'vue'
;
const
{
PhoneResultStatus
,
ReduceType
,
FlowStatus
,
FollowStatus
,
AuditStatus
,
CaseStatus
}
=
useDict
(
"PhoneResultStatus"
,
"ReduceType"
,
"FlowStatus"
,
"FollowStatus"
,
"AuditStatus"
,
"CaseStatus"
);
const
envs
=
getAppEnvConfig
();
const
{
userInfo
}
=
useUserStore
();
...
...
@@ -73,52 +72,6 @@
const
onCheckboxChange
=
(
row
)
=>
{
selectdList
.
value
=
row
.
records
;
};
watch
(
()
=>
AuditStatus
.
value
,
(
newValue
,
oldValue
)
=>
{
const
list
=
[]
if
(
AuditStatus
&&
AuditStatus
.
value
&&
AuditStatus
.
value
.
length
)
{
AuditStatus
.
value
.
forEach
(
async
e
=>
{
const
param
=
{
current
:
1
,
size
:
1
,
auditStatus
:
e
.
value
,
followStatus
:
[
'progress'
,
'pass_on'
,
'no_pass'
,
'Claims_unrelated_to_creditors'
,
'Claiming_not_to_be_myself'
,
]
}
const
t
=
e
.
value
if
(
userInfo
.
id
)
{
param
[
'createBy'
]
=
userInfo
.
id
;
}
let
result
=
new
Promise
((
resolve
,
reject
)
=>
{
getTrackRecord
(
param
).
then
(
res
=>
{
const
obj
=
{}
obj
[
e
.
value
]
=
res
resolve
(
obj
)
})
});
list
.
push
(
result
)
})
}
Promise
.
all
(
list
).
then
(
res
=>
{
console
.
log
(
res
)
let
tttt
=
{}
res
.
forEach
(
e
=>
{
tttt
=
{...
tttt
,
...
e
}
})
AuditStatus
.
value
.
forEach
(
e
=>
{
const
obj
=
JSON
.
parse
(
JSON
.
stringify
(
e
))
obj
[
'msg'
]
=
tttt
[
e
.
value
].
result
.
page
.
totalElements
tabs
.
value
.
push
(
obj
)
})
})
}
);
const
activeName
=
ref
(
'un_audit'
);
const
callMode
=
ref
(
''
);
...
...
@@ -138,6 +91,27 @@
if
(
obj
[
'nextTime'
][
1
])
obj
[
'nextTrackTimeEnd'
]
=
obj
[
'nextTime'
][
1
];
delete
obj
[
'nextTime'
];
}
setTimeout
(()
=>
{
const
arr
=
JSON
.
parse
(
JSON
.
stringify
(
AuditStatus
.
value
))
getTrackRecordAuditTotal
({...
obj
,
auditStatus
:
null
}).
then
(
res
=>
{
if
(
res
.
success
)
{
arr
.
forEach
(
item
=>
{
const
tt
=
res
.
result
.
find
(
v
=>
v
.
auditStatus
===
item
.
value
)
if
(
tt
)
{
item
[
'msg'
]
=
tt
.
number
}
else
{
item
[
'msg'
]
=
0
}
})
tabs
.
value
=
arr
}
else
{
tabs
.
value
=
arr
}
}).
catch
(
e
=>
{
tabs
.
value
=
arr
})
},
500
)
// obj['voices'] = 'Y'
// obj['images'] = 'Y'
// obj['notes'] = 'Y'
...
...
@@ -177,7 +151,7 @@
title
:
'案件ID'
,
showOverflow
:
'tooltip'
,
width
:
80
,
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
labelWidth
:
9
5
},
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
labelWidth
:
10
5
},
slots
:
{
default
:
({
row
})
=>
{
return
<>
{
Array
.
from
(
new
Set
(
row
.
loans
.
map
((
v
)
=>
v
.
caseId
))).
join
(
','
)}
<
/>
;
...
...
@@ -192,7 +166,7 @@
search
:
{
el
:
'date-picker'
,
props
:
{
type
:
'daterange'
,
valueFormat
:
'YYYY-MM-DD'
},
labelWidth
:
9
5
,
labelWidth
:
10
5
,
},
},
{
...
...
@@ -206,7 +180,7 @@
);
},
},
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
key
:
'cpeName'
,
labelWidth
:
9
5
},
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
key
:
'cpeName'
,
labelWidth
:
10
5
},
},
{
showOverflow
:
'tooltip'
,
...
...
@@ -218,7 +192,7 @@
},
},
enum
:
()
=>
getTenantPage
({
current
:
1
,
size
:
999999999
,
status
:
'enable'
}),
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
key
:
'tenantId'
,
labelWidth
:
9
5
},
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
key
:
'tenantId'
,
labelWidth
:
10
5
},
fieldNames
:
{
label
:
'name'
,
value
:
'id'
},
title
:
'调解中心'
,
width
:
100
,
...
...
@@ -231,7 +205,7 @@
search
:
{
el
:
'date-picker'
,
props
:
{
type
:
'daterange'
,
valueFormat
:
'YYYY-MM-DD'
},
labelWidth
:
9
5
,
labelWidth
:
10
5
,
},
},
{
...
...
@@ -239,7 +213,7 @@
title
:
'联系人姓名'
,
showOverflow
:
'tooltip'
,
width
:
110
,
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
key
:
'guarantorName'
,
labelWidth
:
9
5
},
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
key
:
'guarantorName'
,
labelWidth
:
10
5
},
},
{
field
:
'guarantor.phone'
,
...
...
@@ -250,9 +224,9 @@
el
:
'input'
,
props
:
{
clearable
:
true
},
key
:
'guarantorPhone'
,
labelWidth
:
9
5
,
labelWidth
:
10
5
,
},
labelWidth
:
9
5
,
labelWidth
:
10
5
,
},
{
field
:
'followStatus'
,
...
...
@@ -263,7 +237,7 @@
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
,
multiple
:
true
,
'collapse-tags'
:
true
},
labelWidth
:
9
5
,
labelWidth
:
10
5
,
defaultValue
:
[
'progress'
,
'pass_on'
,
...
...
@@ -291,7 +265,7 @@
showOverflow
:
'tooltip'
,
width
:
120
,
enum
:
PhoneResultStatus
,
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
labelWidth
:
9
5
},
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
labelWidth
:
10
5
},
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
@@ -327,7 +301,7 @@
title
:
'备注'
,
showOverflow
:
'tooltip'
,
width
:
80
,
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
labelWidth
:
9
5
},
search
:
{
el
:
'input'
,
props
:
{
clearable
:
true
},
labelWidth
:
10
5
},
},
{
field
:
'voices'
,
...
...
@@ -376,7 +350,7 @@
title
:
'超时状态'
,
width
:
100
,
showOverflow
:
'tooltip'
,
// search: { el: 'select', props: { clearable: true }, labelWidth:
9
5 },
// search: { el: 'select', props: { clearable: true }, labelWidth:
10
5 },
slots
:
{
default
:
({
row
})
=>
{
return
(
...
...
@@ -483,7 +457,9 @@
});
query
();
};
const
query
=
()
=>
caseLRef
.
value
?.
search
();
const
query
=
()
=>
{
caseLRef
.
value
?.
search
()
};
onMounted
(()
=>
{
query
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment