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
809357e7
Commit
809357e7
authored
Feb 22, 2025
by
沈翠玲
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
页面优化
parent
7e8f80c0
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
368 additions
and
50 deletions
+368
-50
file.svg
src/assets/images/file.svg
+1
-0
tocrash.svg
src/assets/images/tocrash.svg
+1
-0
index.vue
src/components/ProTable/index.vue
+0
-1
index.vue
src/views/business-approval/by-stages-apply/index.vue
+12
-5
index.vue
src/views/business-approval/reduction-apply/index.vue
+12
-6
index.vue
src/views/property/audit-manage/index.vue
+8
-1
index.vue
src/views/property/case-allocation/index.vue
+1
-1
index.vue
src/views/property/case-back/index.vue
+132
-6
callDrawer.vue
src/views/property/case-detail/components/callDrawer.vue
+8
-3
reduceDrawer.vue
src/views/property/case-detail/components/reduceDrawer.vue
+64
-6
splitDrawer.vue
src/views/property/case-detail/components/splitDrawer.vue
+63
-6
index.vue
src/views/property/case-detail/index.vue
+10
-10
index.vue
src/views/property/case-return/index.vue
+42
-2
index.vue
src/views/property/import/index.vue
+14
-3
No files found.
src/assets/images/file.svg
0 → 100644
View file @
809357e7
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1740191286370"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"1538"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><path
d=
"M815.104 69.632q27.648 25.6 44.032 42.496t25.088 28.672 10.752 19.968 2.048 14.336l0 16.384-151.552 0q-10.24 0-17.92-7.68t-12.8-17.92-7.68-20.992-2.56-16.896l0-126.976 3.072 0q8.192 0 16.896 2.56t19.968 9.728 28.16 20.48 42.496 35.84zM640 129.024q0 20.48 6.144 42.496t19.456 40.96 33.792 31.232 48.128 12.288l149.504 0 0 577.536q0 29.696-11.776 53.248t-31.232 39.936-43.008 25.6-46.08 9.216l-503.808 0q-19.456 0-42.496-11.264t-43.008-29.696-33.28-41.984-13.312-49.152l0-696.32q0-21.504 9.728-44.544t26.624-42.496 38.4-32.256 45.056-12.8l391.168 0 0 128zM704.512 768q26.624 0 45.056-18.944t18.432-45.568-18.432-45.056-45.056-18.432l-384 0q-26.624 0-45.056 18.432t-18.432 45.056 18.432 45.568 45.056 18.944l384 0zM768 448.512q0-26.624-18.432-45.568t-45.056-18.944l-384 0q-26.624 0-45.056 18.944t-18.432 45.568 18.432 45.056 45.056 18.432l384 0q26.624 0 45.056-18.432t18.432-45.056z"
p-id=
"1539"
></path></svg>
\ No newline at end of file
src/assets/images/tocrash.svg
0 → 100644
View file @
809357e7
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1740041986415"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"40801"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><path
d=
"M522.666667 761.6c27.733333 0 41.6-11.733333 41.6-46.933333v-48c0-3.2 3.2-5.333333 6.4-5.333334h64c28.8 0 43.733333-23.466667 43.733333-39.466666s-14.933333-39.466667-43.733333-39.466667h-64c-3.2 0-6.4-2.133333-6.4-5.333333v-26.666667c0-3.2 3.2-5.333333 6.4-5.333333h64c28.8 0 43.733333-23.466667 43.733333-39.466667s-14.933333-39.466667-43.733333-39.466667h-28.8c-5.333333 0-7.466667-4.266667-5.333334-8.533333l53.333334-68.266667c5.333333-7.466667 9.6-13.866667 12.8-19.2 2.133333-3.2 3.2-6.4 3.2-10.666666 1.066667-9.6-2.133333-20.266667-11.733334-26.666667-6.4-4.266667-13.866667-6.4-23.466666-6.4-7.466667 0-13.866667 1.066667-19.2 3.2-5.333333 2.133333-9.6 5.333333-12.8 9.6-3.2 3.2-7.466667 8.533333-10.666667 13.866667-4.266667 5.333333-7.466667 10.666667-10.666667 14.933333L526.933333 437.333333c-2.133333 3.2-8.533333 3.2-10.666666 0l-64-74.666666c-8.533333-11.733333-16-20.266667-22.4-25.6-6.4-5.333333-14.933333-8.533333-25.6-8.533334s-19.2 3.2-25.6 8.533334c-6.4 5.333333-9.6 12.8-9.6 21.333333 0 5.333333 1.066667 9.6 3.2 13.866667 2.133333 4.266667 7.466667 10.666667 14.933333 20.266666l56.533333 66.133334c3.2 3.2 0 8.533333-5.333333 8.533333h-27.733333c-29.866667 0-44.8 23.466667-44.8 39.466667s14.933333 39.466667 44.8 39.466666h64c3.2 0 6.4 2.133333 6.4 5.333334v26.666666c0 3.2-3.2 5.333333-6.4 5.333334h-64c-29.866667 0-44.8 23.466667-44.8 39.466666s14.933333 39.466667 44.8 39.466667h64c3.2 0 6.4 2.133333 6.4 5.333333V714.666667c-1.066667 35.2 13.866667 46.933333 41.6 46.933333z"
fill=
"#234ca3"
p-id=
"40802"
></path><path
d=
"M512 86.4c-70.4 0-138.666667 17.066667-200.533333 50.133333L289.066667 96c-8.533333-17.066667-33.066667-14.933333-39.466667 3.2l-65.066667 132.266667c-3.2 9.6 2.133333 21.333333 12.8 24.533333l149.333334 24.533333c18.133333 6.4 34.133333-12.8 25.6-29.866666L352 212.266667c49.066667-26.666667 103.466667-40.533333 160-40.533334 187.733333 0 341.333333 153.6 341.333333 341.333334s-153.6 341.333333-341.333333 341.333333-341.333333-153.6-341.333333-341.333333c0-21.333333 2.133333-42.666667 5.333333-62.933334 4.266667-23.466667-10.666667-45.866667-34.133333-50.133333-23.466667-4.266667-45.866667 10.666667-50.133334 34.133333-4.266667 25.6-6.4 52.266667-6.4 78.933334 0 235.733333 190.933333 426.666667 426.666667 426.666666s426.666667-190.933333 426.666667-426.666666-190.933333-426.666667-426.666667-426.666667z"
fill=
"#234ca3"
p-id=
"40803"
></path></svg>
\ No newline at end of file
src/components/ProTable/index.vue
View file @
809357e7
...
...
@@ -186,7 +186,6 @@
if
(
props
.
config
.
onCheckboxAll
)
{
props
.
config
.
onCheckboxAll
({
checked
:
false
,
records
:
[]})
}
emit
(
'search'
,
totalParam
.
value
);
};
const
_reset
=
()
=>
{
...
...
src/views/business-approval/by-stages-apply/index.vue
View file @
809357e7
...
...
@@ -140,10 +140,12 @@
<
script
setup
name=
"systemLog"
lang=
"jsx"
>
import
splitDrawer
from
'./components/splitDrawer.vue'
;
import
{
computed
}
from
'vue'
;
import
{
inject
}
from
'vue'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
getByStagesPage
,
byStagesflowStatusByIds
}
from
'@/api/property'
;
import
{
onMounted
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
,
ElButton
}
from
'element-plus'
;
import
{
Download
}
from
'@element-plus/icons-vue'
;
import
{
getTenantPage
}
from
'@/api/tenant'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
import
{
getAppEnvConfig
}
from
'@/utils/env'
;
...
...
@@ -151,6 +153,7 @@
const
srcList
=
ref
([]);
const
RefImage
=
ref
(
false
);
const
{
PhoneResultStatus
,
ReduceType
,
FlowStatus
,
FollowStatus
,
CaseStatus
}
=
useDict
(
"PhoneResultStatus"
,
"ReduceType"
,
"FlowStatus"
,
"FollowStatus"
,
"CaseStatus"
);
const
downloadfile
=
inject
(
'download'
);
const
ProTableRef
=
ref
();
const
showModal
=
ref
(
false
);
...
...
@@ -159,6 +162,10 @@
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
splitDrawerRef
=
ref
();
const
onCheckboxAll
=
(
flag
)
=>
{
if
(
flag
.
checked
)
{
...
...
@@ -372,11 +379,11 @@
if
(
row
.
images
&&
row
.
images
.
length
>
0
)
{
return
(
<>
<
div
className
=
"flex justify-center"
>
<
ElButton
onClick
=
{()
=>
preview
(
row
,
'images'
)}
link
type
=
"primary"
>
查看
<
/
ElButt
on
>
<
/div
>
{
row
.
images
.
map
((
item
,
index
)
=>
(
<
el
-
icon
>
<
Download
onClick
=
{()
=>
download
(
item
)}
/
>
<
/
el-ic
on
>
))}
<
/
>
);
}
...
...
src/views/business-approval/reduction-apply/index.vue
View file @
809357e7
...
...
@@ -118,14 +118,16 @@
import
{
reactive
,
ref
}
from
'vue'
;
import
{
getReducePage
,
flowStatusByIds
}
from
'@/api/property'
;
import
{
onMounted
}
from
'vue'
;
import
{
inject
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
,
ElButton
}
from
'element-plus'
;
import
{
getTenantPage
}
from
'@/api/tenant'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
import
{
Download
}
from
'@element-plus/icons-vue'
;
import
{
getAppEnvConfig
}
from
'@/utils/env'
;
const
envs
=
getAppEnvConfig
();
const
{
PhoneResultStatus
,
ReduceType
,
FlowStatus
,
FollowStatus
,
CaseStatus
}
=
useDict
(
"PhoneResultStatus"
,
"ReduceType"
,
"FlowStatus"
,
"FollowStatus"
,
"CaseStatus"
);
const
downloadfile
=
inject
(
'download'
);
const
ProTableRef
=
ref
();
const
showModal
=
ref
(
false
);
const
srcList
=
ref
([]);
...
...
@@ -135,6 +137,10 @@
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
onCheckboxAll
=
(
flag
)
=>
{
if
(
flag
.
checked
)
{
selectdList
.
value
=
flag
.
records
;
...
...
@@ -273,11 +279,11 @@
if
(
row
.
images
&&
row
.
images
.
length
>
0
)
{
return
(
<>
<
div
className
=
"flex justify-center"
>
<
ElButton
onClick
=
{()
=>
preview
(
row
,
'images'
)}
link
type
=
"primary"
>
查看
<
/
ElButt
on
>
<
/div
>
{
row
.
images
.
map
((
item
,
index
)
=>
(
<
el
-
icon
>
<
Download
onClick
=
{()
=>
download
(
item
)}
/
>
<
/
el-ic
on
>
))}
<
/
>
);
}
...
...
src/views/property/audit-manage/index.vue
View file @
809357e7
...
...
@@ -23,6 +23,7 @@
ref=
"caseLRef"
:api=
"getTrackRecord"
:selectdList=
"selectdList"
:dataCallback=
"dataCallback"
:paramCallback=
"paramCallback"
>
<!-- 表格 header 按钮 -->
...
...
@@ -144,6 +145,9 @@
// 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
)));
...
...
@@ -483,7 +487,10 @@
});
query
();
};
const
query
=
()
=>
caseLRef
.
value
?.
search
();
const
query
=
()
=>
{
caseLRef
.
value
?.
search
()
tabs
.
value
};
onMounted
(()
=>
{
query
();
...
...
src/views/property/case-allocation/index.vue
View file @
809357e7
...
...
@@ -381,7 +381,7 @@
showOverflow
:
'tooltip'
,
width
:
80
,
enum
:
CaseStatus
,
// search: { el: 'select', props: { filterable: true }, labelWidth: 90
},
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
labelWidth
:
105
},
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
src/views/property/case-back/index.vue
View file @
809357e7
...
...
@@ -2,6 +2,46 @@
<div
class=
"table-box"
>
<div>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getLoanpage"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<template
#
table_top
>
<div
class=
"style-lable"
style=
"width: 100%"
>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/caselist.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
在派案件数量
</div>
<div
class=
"item items1"
>
{{
statisis
.
caseNum
}}
</div>
</div>
</div>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/userlist.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
在派案人人数
</div>
<div
class=
"item items1"
>
{{
statisis
.
cpeNum
}}
</div>
</div>
</div>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/money.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
在派委案金额
</div>
<div
class=
"item items1"
>
¥
{{
statisis
.
amount
}}
</div>
</div>
</div>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/tocrash.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
待还金额
</div>
<div
class=
"item items1"
>
¥
{{
statisis
.
amount
}}
</div>
</div>
</div>
</div>
</
template
>
<!-- 表格 header 按钮 -->
<
template
#
left_buttons
>
<div
class=
"flex rounded w-full h-11 items-center pl-2 btn-grp mb-1"
>
...
...
@@ -27,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>
{{ statisis.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>
{{ statisis.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
/>
...
...
@@ -47,7 +122,7 @@
</template>
<
script
setup
name=
"case-allocation"
lang=
"jsx"
>
import
{
getLoantotal
,
getLoanpage
,
back
,
fullBack
}
from
'@/api/allcation'
;
import
{
getLoantotal
,
getLoanpage
,
getLoanDistribute
,
back
,
fullBack
}
from
'@/api/allcation'
;
import
{
reactive
,
ref
}
from
'vue'
;
import
{
ElMessageBox
,
ElMessage
}
from
'element-plus'
;
import
{
VxeTextEllipsis
,
VxeTooltip
}
from
'vxe-pc-ui'
;
...
...
@@ -80,6 +155,7 @@
selectdList
.
value
=
row
.
records
;
};
const
statisis
=
ref
({});
const
statisis1
=
ref
({});
const
getStatisis
=
(
params
)
=>
{
getLoantotal
(
params
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
...
...
@@ -87,6 +163,19 @@
}
});
};
const
getStatisis1
=
(
params
,
id
)
=>
{
const
p
=
JSON
.
parse
(
JSON
.
stringify
(
params
));
if
(
id
)
{
p
[
'tenantId'
]
=
id
;
}
delete
p
[
'current'
];
delete
p
[
'size'
];
getLoanDistribute
(
p
).
then
((
res
)
=>
{
if
(
res
.
success
)
{
statisis1
.
value
=
res
.
result
;
}
});
};
const
backCase
=
async
()
=>
{
if
(
dataValue
.
value
===
'对选中项操作'
&&
(
!
selectdList
.
value
||
!
selectdList
.
value
.
length
))
{
return
ElMessage
.
warning
({
...
...
@@ -94,6 +183,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
submitForm
=
async
(
type
)
=>
{
...
...
@@ -144,7 +240,7 @@
delete
obj
[
'tenantTime'
];
}
curParam
.
value
=
obj
;
//
getStatisis(obj);
getStatisis
(
obj
);
return
obj
;
};
const
onCheckboxAll
=
(
flag
)
=>
{
...
...
@@ -372,7 +468,7 @@
showOverflow
:
'tooltip'
,
width
:
80
,
enum
:
CaseStatus
,
// search: { el: 'select', props: { filterable: true }, labelWidth: 90
},
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
labelWidth
:
105
},
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
@@ -539,3 +635,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/property/case-detail/components/callDrawer.vue
View file @
809357e7
...
...
@@ -60,7 +60,7 @@
>
<el-row>
<el-col
:span=
"24"
>
<el-form-item
class=
"w-full"
label=
"跟进时间:"
prop=
"
na
me"
>
<el-form-item
class=
"w-full"
label=
"跟进时间:"
prop=
"
trackTi
me"
>
<el-date-picker
v-model=
"form.trackTime"
class=
"w-full"
...
...
@@ -97,6 +97,7 @@
class=
"w-full"
style=
"display: block"
label=
"跟进结果:"
required
prop=
"name"
label-position=
"top"
>
...
...
@@ -121,7 +122,7 @@
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
class=
"w-full"
style=
"display: block"
label=
"跟进状态:"
prop=
"code"
>
<el-form-item
class=
"w-full"
style=
"display: block"
label=
"跟进状态:"
prop=
"code"
required
>
<el-button
size=
"small"
style=
"margin-left: 0"
...
...
@@ -136,7 +137,7 @@
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
class=
"w-full"
label=
"跟进备注:"
prop=
"
code
"
style=
"display: block"
>
<el-form-item
class=
"w-full"
label=
"跟进备注:"
prop=
"
remark
"
style=
"display: block"
>
<el-input
v-model=
"form.remark"
class=
"w-full"
...
...
@@ -261,6 +262,10 @@
const
props
=
defineProps
({
mergerCase
:
String
,
});
const
rules
=
ref
({
trackTime
:
{
required
:
true
,
message
:
'请选择跟进时间'
,
trigger
:
'blur'
},
remark
:
{
required
:
true
,
message
:
'请输入跟进备注'
,
trigger
:
'blur'
}
});
const
tabObj
=
[
{
label
:
'本人可联'
,
...
...
src/views/property/case-detail/components/reduceDrawer.vue
View file @
809357e7
...
...
@@ -51,6 +51,7 @@
:action=
"url"
:headers=
"
{timeout:180000}"
list-type="picture-card"
v-model:file-list="form.images"
ref="mypictureRef"
class="mypicture"
:on-preview="handlePictureCardPreview"
...
...
@@ -61,6 +62,32 @@
<el-icon><Plus
/></el-icon>
<div>
附件
</div>
</div>
<template
#
file=
"
{ file }">
<img
class=
"el-upload-list__item-thumbnail"
:src=
"updataIf(file) ? getImageUrl() :file.url"
alt=
""
>
<span
class=
"el-upload-list__item-actions"
>
<span
class=
"el-upload-list__item-delete"
>
<el-icon
@
click=
"handleRemove1(file)"
>
<Delete
/>
</el-icon>
</span>
<span
class=
"el-upload-list__item-preview"
>
<el-icon
v-if=
"updataIf(file)"
@
click=
"download(file.response.message)"
>
<Download
/>
</el-icon>
<el-icon
v-else
@
click=
"handlePictureCardPreview(file)"
>
<ZoomIn
/>
</el-icon>
</span>
</span>
</
template
>
</el-upload>
</el-form-item>
</el-col>
...
...
@@ -99,11 +126,13 @@
import
{
reactive
,
ref
}
from
'vue'
;
import
{
saveReduce
}
from
'@/api/property'
;
import
{
ElMessage
}
from
'element-plus'
;
import
{
Download
,
ZoomIn
}
from
'@element-plus/icons-vue'
;
import
{
onMounted
}
from
'vue'
;
import
{
watch
}
from
'vue'
;
import
Decimal
from
'decimal.js'
;
import
{
getAppEnvConfig
}
from
'@/utils/env'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
import
{
inject
}
from
'vue'
;
const
envs
=
getAppEnvConfig
();
const
{
PhoneResultStatus
,
ReduceType
,
FlowStatus
,
FollowStatus
,
AuditStatus
,
CaseStatus
}
=
useDict
(
"PhoneResultStatus"
,
"ReduceType"
,
"FlowStatus"
,
"FollowStatus"
,
"AuditStatus"
,
"CaseStatus"
);
const
emits
=
defineEmits
([
'success'
]);
...
...
@@ -114,6 +143,7 @@
const
mypictureRef
=
ref
();
const
dialogImageUrl
=
ref
(
''
);
const
dialogVisible
=
ref
(
false
);
const
downloadfile
=
inject
(
'download'
);
const
form
=
reactive
({
totalReduceAmount
:
0
,
totalNumber
:
''
,
...
...
@@ -144,16 +174,40 @@
dialogImageUrl
.
value
=
uploadFile
.
url
;
dialogVisible
.
value
=
true
;
};
const
handleRemove1
=
(
uploadFile
,
uploadFiles
)
=>
{
// 判断文件类型,图片预览,文件下载
const
updataIf
=
(
e
)
=>
{
console
.
log
(
'eeee'
,
e
)
if
(
e
.
fileName
)
{
if
(
e
.
fileName
.
split
(
'.'
)[
1
]
===
'png'
||
e
.
fileName
.
split
(
'.'
)[
1
]
===
'jpeg'
||
e
.
fileName
.
split
(
'.'
)[
1
]
===
'jpg'
)
{
return
false
}
else
{
return
true
}
}
else
{
if
(
e
.
name
.
split
(
'.'
)[
1
]
===
'png'
||
e
.
name
.
split
(
'.'
)[
1
]
===
'jpeg'
||
e
.
name
.
split
(
'.'
)[
1
]
===
'jpg'
)
{
return
false
}
else
{
return
true
}
}
}
const
handleRemove1
=
(
uploadFile
)
=>
{
const
index
=
form
.
images
.
findIndex
((
v
)
=>
v
.
name
===
uploadFile
.
name
);
form
.
images
.
splice
(
index
,
1
);
};
const
download
=
(
item
)
=>
{
const
name
=
item
.
slice
(
item
.
lastIndexOf
(
'/'
)
+
1
,
item
.
length
);
downloadfile
(
'/sys/static/'
+
item
,
{},
name
);
};
const
handleFileSuccess1
=
(
response
,
file
,
fileList
)
=>
{
form
.
images
.
push
(
{
url
:
response
.
message
,
name
:
file
.
name
,
}
);
if
(
file
.
uid
)
{
const
item
=
form
.
images
.
find
((
v
)
=>
v
.
uid
===
file
.
uid
);
item
.
url
=
envs
.
VITE_GLOB_API_URL_PREFIX
+
'/sys/static/'
+
response
.
message
;
}
};
const
getImageUrl
=
()
=>
{
return
new
URL
(
`@/assets/images/file.svg`
,
import
.
meta
.
url
).
href
;
}
const
onCheckboxAll
=
(
flag
)
=>
{
if
(
flag
.
checked
)
{
selectdList
.
value
=
flag
.
records
;
...
...
@@ -299,12 +353,16 @@
list
.
forEach
((
item
)
=>
{
delete
item
.
payAmount
;
});
let
images
=
form
.
images
.
map
((
v
)
=>
v
.
url
)
images
=
images
.
map
((
v
)
=>
{
return
v
.
replace
(
envs
.
VITE_GLOB_API_URL_PREFIX
+
'/sys/static/'
,
''
);
});
const
params
=
{
borrower
:
currentDetail
.
value
.
borrower
,
askForStatus
:
'Pending'
,
flowStatus
:
'pending'
,
...
form
,
images
:
form
.
images
.
map
((
v
)
=>
v
.
url
)?.
length
>
0
?
form
.
images
.
map
((
v
)
=>
v
.
url
)
:
null
,
images
:
images
.
length
>
0
?
images
:
null
,
reduceRecords
:
list
,
};
console
.
log
(
'sadas'
,
params
);
...
...
src/views/property/case-detail/components/splitDrawer.vue
View file @
809357e7
...
...
@@ -99,6 +99,7 @@
:action=
"url"
:headers=
"{timeout:180000}"
list-type=
"picture-card"
v-model:file-list=
"form.images"
ref=
"mypictureRef"
class=
"mypicture"
:on-preview=
"handlePictureCardPreview"
...
...
@@ -109,6 +110,32 @@
<el-icon><Plus
/></el-icon>
<div>
附件
</div>
</div>
<
template
#
file=
"{ file }"
>
<img
class=
"el-upload-list__item-thumbnail"
:src=
"updataIf(file) ? getImageUrl() :file.url"
alt=
""
>
<span
class=
"el-upload-list__item-actions"
>
<span
class=
"el-upload-list__item-delete"
>
<el-icon
@
click=
"handleRemove1(file)"
>
<Delete
/>
</el-icon>
</span>
<span
class=
"el-upload-list__item-preview"
>
<el-icon
v-if=
"updataIf(file)"
@
click=
"download(file.response.message)"
>
<Download
/>
</el-icon>
<el-icon
v-else
@
click=
"handlePictureCardPreview(file)"
>
<ZoomIn
/>
</el-icon>
</span>
</span>
</
template
>
</el-upload>
</el-form-item>
</el-col>
...
...
@@ -155,8 +182,10 @@
import
{
savebyStages
}
from
'@/api/property'
;
import
{
getByIdPlatforms
}
from
'@/api/platform'
;
import
{
getAppEnvConfig
}
from
'@/utils/env'
;
import
{
Download
,
ZoomIn
,
Delete
}
from
'@element-plus/icons-vue'
;
import
Decimal
from
'decimal.js'
;
import
{
useDict
}
from
'@/hooks/useDict'
;
import
{
inject
}
from
'vue'
;
const
{
PhoneResultStatus
,
RepayStatus
,
FlowStatus
,
FollowStatus
,
AuditStatus
,
CaseStatus
}
=
useDict
(
"PhoneResultStatus"
,
"RepayStatus"
,
"FlowStatus"
,
"FollowStatus"
,
"AuditStatus"
,
"CaseStatus"
);
const
envs
=
getAppEnvConfig
();
const
url
=
envs
.
VITE_GLOB_API_URL_PREFIX
+
'/sys/upload'
;
...
...
@@ -168,6 +197,7 @@
const
splitdata
=
ref
([]);
const
dialogImageUrl
=
ref
(
''
);
const
dialogVisible
=
ref
(
false
);
const
downloadfile
=
inject
(
'download'
);
const
form
=
reactive
({
remainingAmount
:
0
,
images
:
[],
...
...
@@ -185,7 +215,29 @@
const
onHide
=
(
done
)
=>
{
done
();
};
const
download
=
(
item
)
=>
{
const
name
=
item
.
slice
(
item
.
lastIndexOf
(
'/'
)
+
1
,
item
.
length
);
downloadfile
(
'/sys/static/'
+
item
,
{},
name
);
};
const
getImageUrl
=
()
=>
{
return
new
URL
(
`@/assets/images/file.svg`
,
import
.
meta
.
url
).
href
;
}
const
updataIf
=
(
e
)
=>
{
console
.
log
(
'eeee'
,
e
)
if
(
e
.
fileName
)
{
if
(
e
.
fileName
.
split
(
'.'
)[
1
]
===
'png'
||
e
.
fileName
.
split
(
'.'
)[
1
]
===
'jpeg'
||
e
.
fileName
.
split
(
'.'
)[
1
]
===
'jpg'
)
{
return
false
}
else
{
return
true
}
}
else
{
if
(
e
.
name
.
split
(
'.'
)[
1
]
===
'png'
||
e
.
name
.
split
(
'.'
)[
1
]
===
'jpeg'
||
e
.
name
.
split
(
'.'
)[
1
]
===
'jpg'
)
{
return
false
}
else
{
return
true
}
}
}
const
editOrConfirm
=
()
=>
{
if
(
editFirst
.
value
)
{
if
(
!
splitdata
.
value
[
0
].
applyAmount
||
isNaN
(
Number
(
splitdata
.
value
[
0
].
applyAmount
)))
...
...
@@ -228,12 +280,13 @@
editFirst
.
value
=
!
editFirst
.
value
;
};
const
handleFileSuccess1
=
(
response
,
file
,
fileList
)
=>
{
form
.
images
.
push
(
{
url
:
response
.
message
,
name
:
file
.
name
,
}
);
if
(
file
.
uid
)
{
const
item
=
form
.
images
.
find
((
v
)
=>
v
.
uid
===
file
.
uid
);
item
.
url
=
envs
.
VITE_GLOB_API_URL_PREFIX
+
'/sys/static/'
+
response
.
message
;
}
};
const
handleRemove1
=
(
uploadFile
,
uploadFiles
)
=>
{
console
.
log
(
'uploadFile'
,
uploadFile
)
const
index
=
form
.
images
.
findIndex
((
v
)
=>
v
.
name
===
uploadFile
.
name
);
form
.
images
.
splice
(
index
,
1
);
};
...
...
@@ -463,10 +516,14 @@
message
:
'分期金额要大于借款平台的分期最低金额'
,
plain
:
true
,
});
let
images
=
form
.
images
.
map
((
v
)
=>
v
.
url
)
images
=
images
.
map
((
v
)
=>
{
return
v
.
replace
(
envs
.
VITE_GLOB_API_URL_PREFIX
+
'/sys/static/'
,
''
);
});
const
params
=
{
...
currentDetail
.
value
,
...
form
,
images
:
form
.
images
.
map
((
v
)
=>
v
.
url
)?.
length
>
0
?
form
.
images
.
map
((
v
)
=>
v
.
url
)
:
null
,
images
:
images
.
length
>
0
?
images
:
null
,
byStagesRecords
:
splitdata
.
value
,
loans
:
selectdList
.
value
,
flowStatus
:
'pending'
,
...
...
src/views/property/case-detail/index.vue
View file @
809357e7
...
...
@@ -1083,11 +1083,11 @@
if
(
row
.
images
&&
row
.
images
.
length
>
0
)
{
return
(
<>
<
div
className
=
"flex justify-center"
>
<
ElButton
onClick
=
{()
=>
preview
(
row
,
'images'
)}
link
type
=
"primary"
>
查看
<
/
ElButt
on
>
<
/div
>
{
row
.
images
.
map
((
item
,
index
)
=>
(
<
el
-
icon
>
<
Download
onClick
=
{()
=>
download
(
item
)}
/
>
<
/
el-ic
on
>
))}
<
/
>
);
}
...
...
@@ -1276,11 +1276,11 @@
if
(
row
.
images
&&
row
.
images
.
length
>
0
)
{
return
(
<>
<
div
className
=
"flex justify-center"
>
<
ElButton
onClick
=
{()
=>
preview
(
row
,
'images'
)}
link
type
=
"primary"
>
查看
<
/
ElButt
on
>
<
/div
>
{
row
.
images
.
map
((
item
,
index
)
=>
(
<
el
-
icon
>
<
Download
onClick
=
{()
=>
download
(
item
)}
/
>
<
/
el-ic
on
>
))}
<
/
>
);
}
...
...
src/views/property/case-return/index.vue
View file @
809357e7
...
...
@@ -2,6 +2,46 @@
<div
class=
"table-box"
>
<div>
<ProTable
:config=
"config"
ref=
"caseLRef"
:api=
"getLoanpage"
:paramCallback=
"paramCallback"
:selectdList=
"selectdList"
>
<template
#
table_top
>
<div
class=
"style-lable"
style=
"width: 100%"
>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/caselist.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
在派案件数量
</div>
<div
class=
"item items1"
>
{{
statisis
.
caseNum
}}
</div>
</div>
</div>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/userlist.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
在派案人人数
</div>
<div
class=
"item items1"
>
{{
statisis
.
cpeNum
}}
</div>
</div>
</div>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/money.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
在派委案金额
</div>
<div
class=
"item items1"
>
¥
{{
statisis
.
amount
}}
</div>
</div>
</div>
<div
class=
"item_warp"
style=
"width: 19%"
>
<div
class=
"img_warp"
>
<img
src=
"@/assets/images/tocrash.svg"
/>
</div>
<div
class=
"title_warp"
>
<div
class=
"items"
>
待还金额
</div>
<div
class=
"item items1"
>
¥
{{
statisis
.
amount
}}
</div>
</div>
</div>
</div>
</
template
>
<!-- 表格 header 按钮 -->
<
template
#
left_buttons
>
<div
class=
"flex rounded w-full h-11 items-center pl-2 btn-grp mb-1"
>
...
...
@@ -135,7 +175,7 @@
delete
obj
[
'tenantTime'
];
}
curParam
.
value
=
obj
;
//
getStatisis(obj);
getStatisis
(
obj
);
return
obj
;
};
const
backCase
=
async
()
=>
{
...
...
@@ -371,7 +411,7 @@
showOverflow
:
'tooltip'
,
width
:
80
,
enum
:
CaseStatus
,
// search: { el: 'select', props: { filterable: true }, labelWidth: 90
},
search
:
{
el
:
'select'
,
props
:
{
filterable
:
true
},
labelWidth
:
105
},
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
...
...
src/views/property/import/index.vue
View file @
809357e7
...
...
@@ -24,7 +24,7 @@
:auto-upload="true"
:on-progress="uploadVideoProcess"
>
<el-button
type=
"primary"
plain
:icon=
"Upload"
>
上传文件
</el-button>
<el-button
type=
"primary"
plain
:icon=
"Upload"
:loading=
"upload.isUploading"
>
上传文件
</el-button>
</el-upload>
<!-- 进度条 -->
<!--
<el-progress
v-if=
"progressFlag"
:percentage=
"loadProgress"
/>
-->
...
...
@@ -46,7 +46,7 @@
<div
class=
"w-full flex items-center justify-center pt-5"
>
<div>
<div
class=
"flex items-center"
>
<el-button
type=
"danger"
@
click=
"checkData"
:disabled=
"!form.path"
>
检查
</el-button>
<el-button
type=
"danger"
@
click=
"checkData"
:disabled=
"!form.path"
:loading=
"checkObj.checkloading"
>
检查
</el-button>
</div>
<div
class=
"text-sm mt-2"
>
<span
class=
"mr-2 text-gray-400"
>
通过
{{
checkObj
?.
result
?.
success
||
0
}}
条
</span>
...
...
@@ -107,6 +107,7 @@
<el-button
type=
"primary"
@
click=
"submitData"
:loading=
"checkObj.submitloading"
:disabled=
"!form.path || !checkObj.checksuccess"
>
上传
</el-button
>
...
...
@@ -183,6 +184,8 @@
const
uploadRef
=
ref
();
const
isFold
=
ref
(
true
);
const
checkObj
=
reactive
({
submitloading
:
false
,
checkloading
:
false
,
check
:
false
,
checksuccess
:
false
,
result
:
{
...
...
@@ -331,6 +334,7 @@
downloadfile
(
'/LoanExcel/downloadTemplate'
,
{},
'模版.xls'
);
};
const
checkData
=
()
=>
{
checkObj
.
checkloading
=
true
checkLoanExcel
({
fileUrl
:
form
.
path
,
}).
then
((
res
)
=>
{
...
...
@@ -343,6 +347,9 @@
checkObj
.
result
.
loanErrors
=
res
.
result
.
loanErrors
;
checkObj
.
check
=
true
;
}
checkObj
.
checkloading
=
false
}).
catch
(
e
=>
{
checkObj
.
checkloading
=
false
});
};
...
...
@@ -383,6 +390,7 @@
message
:
'分期最大期数必填'
,
plain
:
true
,
});
checkObj
.
submitloading
=
true
// if (!form.minAmount) return ElMessage.warning({
// message: '最低分期金额必填',
// plain: true,
...
...
@@ -409,8 +417,11 @@
form
[
'minAmount'
]
=
''
;
form
[
'mergerCase'
]
=
'N'
;
form
[
'discount'
]
=
''
;
checkObj
.
submitloading
=
false
});
}
catch
{}
}
catch
{
checkObj
.
submitloading
=
false
}
};
onMounted
(()
=>
{
formRef
.
value
.
clearValidate
();
...
...
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