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
42a0a540
Commit
42a0a540
authored
Mar 20, 2025
by
沈翠玲
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
数据大屏
parent
57fb2cd3
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
59 additions
and
59 deletions
+59
-59
dataScreen.js
src/api/dataScreen.js
+4
-0
HotPlateChart.vue
src/views/data-screen/components/HotPlateChart.vue
+1
-1
OverNext30Chart.vue
src/views/data-screen/components/OverNext30Chart.vue
+10
-9
index.scss
src/views/data-screen/index.scss
+17
-0
index.vue
src/views/data-screen/index.vue
+25
-17
addModel.vue
src/views/infoGather/constant/components/addModel.vue
+0
-15
index.vue
src/views/infoGather/constant/index.vue
+2
-17
No files found.
src/api/dataScreen.js
View file @
42a0a540
...
@@ -15,3 +15,7 @@ export const getReturnRateByPlatform = (params) => {
...
@@ -15,3 +15,7 @@ export const getReturnRateByPlatform = (params) => {
export
const
getReturn
=
(
params
)
=>
{
export
const
getReturn
=
(
params
)
=>
{
return
request
.
get
(
'/Loan/getReturn'
,
params
);
return
request
.
get
(
'/Loan/getReturn'
,
params
);
};
};
// 回款金额 总金额
export
const
getLoanKanBanTotal
=
(
params
)
=>
{
return
request
.
get
(
'Loan/getLoanKanBanTotal'
,
params
);
};
\ No newline at end of file
src/views/data-screen/components/HotPlateChart.vue
View file @
42a0a540
...
@@ -19,7 +19,7 @@ getReturnRateByPlatform().then(res => {
...
@@ -19,7 +19,7 @@ getReturnRateByPlatform().then(res => {
const
arr
=
res
.
result
const
arr
=
res
.
result
arr
.
sort
((
a
,
b
)
=>
a
.
rate
-
b
.
rate
)
arr
.
sort
((
a
,
b
)
=>
a
.
rate
-
b
.
rate
)
salvProName
.
value
=
arr
.
map
(
v
=>
v
.
loanPlatform
)
salvProName
.
value
=
arr
.
map
(
v
=>
v
.
loanPlatform
)
salvProValue
.
value
=
arr
.
map
(
v
=>
v
.
rate
)
salvProValue
.
value
=
arr
.
map
(
v
=>
v
.
rate
?.
toFixed
(
2
)
)
}
}
})
})
...
...
src/views/data-screen/components/OverNext30Chart.vue
View file @
42a0a540
...
@@ -5,13 +5,14 @@
...
@@ -5,13 +5,14 @@
</div>
</div>
</
template
>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
setup
>
import
dayjs
from
"dayjs"
;
import
dayjs
from
"dayjs"
;
import
ECharts
from
"@/components/ECharts/index.vue"
;
import
ECharts
from
"@/components/ECharts/index.vue"
;
import
{
ECOption
}
from
"@/components/ECharts/config"
;
const
props
=
defineProps
({
dayActiveName
:
String
const
initDate
=
():
string
[]
=>
{
});
const
dateList
:
string
[]
=
[];
const
initDate
=
()
=>
{
const
dateList
=
[];
let
startDate
=
dayjs
();
let
startDate
=
dayjs
();
const
endDate
=
startDate
.
add
(
30
,
"day"
);
const
endDate
=
startDate
.
add
(
30
,
"day"
);
while
(
startDate
.
isBefore
(
endDate
))
{
while
(
startDate
.
isBefore
(
endDate
))
{
...
@@ -31,12 +32,12 @@ const data = {
...
@@ -31,12 +32,12 @@ const data = {
})
})
};
};
const
option
:
ECOption
=
{
const
option
=
{
tooltip
:
{
tooltip
:
{
trigger
:
"axis"
,
trigger
:
"axis"
,
confine
:
true
,
confine
:
true
,
formatter
:
params
=>
{
formatter
:
params
=>
{
let
tipData
=
(
params
as
{
name
:
string
;
value
:
string
}[])
[
0
];
let
tipData
=
params
[
0
];
let
html
=
`<div class="line-chart-bg">
let
html
=
`<div class="line-chart-bg">
<span style="">
${
tipData
.
name
}
<i >
${
tipData
.
value
}
</i> 人次拨打</span>
<span style="">
${
tipData
.
name
}
<i >
${
tipData
.
value
}
</i> 人次拨打</span>
</div>`
;
</div>`
;
...
@@ -80,7 +81,7 @@ const option: ECOption = {
...
@@ -80,7 +81,7 @@ const option: ECOption = {
data
:
initDate
()
data
:
initDate
()
}
}
],
],
yAxis
:
data
.
unit
.
map
((
_val
:
string
,
index
:
number
)
=>
{
yAxis
:
data
.
unit
.
map
((
_val
,
index
)
=>
{
return
{
return
{
name
:
"(每天拨打记录总额)"
,
name
:
"(每天拨打记录总额)"
,
nameTextStyle
:
{
nameTextStyle
:
{
...
@@ -105,7 +106,7 @@ const option: ECOption = {
...
@@ -105,7 +106,7 @@ const option: ECOption = {
show
:
true
,
show
:
true
,
color
:
"#7ec7ff"
,
color
:
"#7ec7ff"
,
padding
:
0
,
padding
:
0
,
formatter
:
function
(
value
:
string
)
{
formatter
:
function
(
value
)
{
if
(
Number
(
value
)
>=
10000
)
{
if
(
Number
(
value
)
>=
10000
)
{
value
=
Number
(
value
)
/
10000
+
"w"
;
value
=
Number
(
value
)
/
10000
+
"w"
;
}
}
...
...
src/views/data-screen/index.scss
View file @
42a0a540
...
@@ -148,6 +148,23 @@
...
@@ -148,6 +148,23 @@
height
:
252px
;
height
:
252px
;
background
:
#100c47
6b
;
background
:
#100c47
6b
;
padding-top
:
54px
;
padding-top
:
54px
;
.tabs
{
border-radius
:
5px
;
position
:
absolute
;
border
:
1px
solid
#0350e9
;
right
:
3px
;
top
:
3px
;
color
:
#fff
;
cursor
:
pointer
;;
overflow
:
hidden
;
.tab-item
{
padding
:
2px
20px
;
border
:
1px
solid
#0350e9
;
&
.active
{
background
:
#0350e9
;
}
}
}
}
}
.dataScreen-map-title
{
.dataScreen-map-title
{
position
:
absolute
;
position
:
absolute
;
...
...
src/views/data-screen/index.vue
View file @
42a0a540
...
@@ -16,23 +16,23 @@
...
@@ -16,23 +16,23 @@
</div>
</div>
<div
class=
"dataScreen-Number flex justify-between"
>
<div
class=
"dataScreen-Number flex justify-between"
>
<div
class=
"number-box"
>
<div
class=
"number-box"
>
<p
class=
"number-value text-white"
>
1222
</p>
<p
class=
"number-value text-white"
>
{{
staticNumber
.
caseNum
}}
</p>
<p
class=
"number-title text-lg"
>
案件总数
</p>
<p
class=
"number-title text-lg"
>
案件总数
</p>
</div>
</div>
<div
class=
"number-box"
>
<div
class=
"number-box"
>
<p
class=
"number-value text-white"
>
1222
</p>
<p
class=
"number-value text-white"
>
{{
staticNumber
.
borrowerNum
}}
</p>
<p
class=
"number-title text-lg"
>
案件人数
</p>
<p
class=
"number-title text-lg"
>
案件人数
</p>
</div>
</div>
<div
class=
"number-box"
>
<div
class=
"number-box"
>
<p
class=
"number-value text-white"
>
122002
</p>
<p
class=
"number-value text-white"
>
{{
staticNumber
.
amount
}}
</p>
<p
class=
"number-title text-lg"
>
案件总额
</p>
<p
class=
"number-title text-lg"
>
案件总额
</p>
</div>
</div>
<div
class=
"number-box"
>
<div
class=
"number-box"
>
<p
class=
"number-value text-white"
>
422002
</p>
<p
class=
"number-value text-white"
>
{{
staticNumber
.
sumRepayTotal
}}
</p>
<p
class=
"number-title text-lg"
>
回款金额
</p>
<p
class=
"number-title text-lg"
>
回款金额
</p>
</div>
</div>
<div
class=
"number-box"
>
<div
class=
"number-box"
>
<p
class=
"number-value text-white"
>
78
%
</p>
<p
class=
"number-value text-white"
>
{{
staticNumber
.
rate
?.
toFixed
(
2
)
}}
%
</p>
<p
class=
"number-title text-lg"
>
回款率
</p>
<p
class=
"number-title text-lg"
>
回款率
</p>
</div>
</div>
</div>
</div>
...
@@ -66,21 +66,22 @@
...
@@ -66,21 +66,22 @@
</div>
</div>
</div>
</div>
<div
class=
"dataScreen-cb"
>
<div
class=
"dataScreen-cb"
>
<div
class=
"flex justify-between"
>
<div
class=
"dataScreen-main-title"
style=
"width: auto;"
>
<div
class=
"dataScreen-main-title"
>
作业量趋势分析
作业量趋势分析
</div>
</div>
<div
class=
"tabs flex"
>
<div
class=
"tab-item"
@
click=
"dayActiveName = '日'"
:class=
"
{active: dayActiveName === '日'}">日
</div>
<div
class=
"tab-item"
@
click=
"dayActiveName = '月'"
:class=
"
{active: dayActiveName === '月'}">月
</div>
</div>
</div>
<div
class=
"dataScreen-main-chart"
>
<div
class=
"dataScreen-main-chart"
>
<OverNext30Chart
/>
<OverNext30Chart
:dayActiveName=
"dayActiveName"
/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
setup
lang=
"ts"
name=
"dataScreen"
>
<
script
setup
name=
"dataScreen"
>
import
{
ref
,
onMounted
,
onBeforeUnmount
}
from
"vue"
;
import
{
ref
,
onMounted
,
onBeforeUnmount
}
from
"vue"
;
import
{
HOME_URL
}
from
"@/config"
;
import
{
HOME_URL
}
from
"@/config"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useRouter
}
from
"vue-router"
;
...
@@ -93,9 +94,12 @@ import OverNext30Chart from "./components/OverNext30Chart.vue";
...
@@ -93,9 +94,12 @@ import OverNext30Chart from "./components/OverNext30Chart.vue";
import
PlatformSourceChart
from
"./components/PlatformSourceChart.vue"
;
import
PlatformSourceChart
from
"./components/PlatformSourceChart.vue"
;
import
RealTimeAccessChart
from
"./components/RealTimeAccessChart.vue"
;
import
RealTimeAccessChart
from
"./components/RealTimeAccessChart.vue"
;
import
dayjs
from
"dayjs"
;
import
dayjs
from
"dayjs"
;
import
{
getLoanKanBanTotal
}
from
'@/api/dataScreen'
;
const
router
=
useRouter
();
const
router
=
useRouter
();
const
dataScreenRef
=
ref
<
HTMLElement
|
null
>
(
null
);
const
dataScreenRef
=
ref
(
null
);
const
staticNumber
=
ref
({});
const
dayActiveName
=
ref
(
'日'
);
onMounted
(()
=>
{
onMounted
(()
=>
{
if
(
dataScreenRef
.
value
)
{
if
(
dataScreenRef
.
value
)
{
...
@@ -112,7 +116,11 @@ const resize = () => {
...
@@ -112,7 +116,11 @@ const resize = () => {
dataScreenRef
.
value
.
style
.
transform
=
`scale(
${
getScale
()}
) translate(-50%, -50%)`
;
dataScreenRef
.
value
.
style
.
transform
=
`scale(
${
getScale
()}
) translate(-50%, -50%)`
;
}
}
};
};
getLoanKanBanTotal
().
then
(
res
=>
{
if
(
res
.
success
)
{
staticNumber
.
value
=
res
.
result
}
})
// 根据浏览器大小推断缩放比例
// 根据浏览器大小推断缩放比例
const
getScale
=
(
width
=
1920
,
height
=
1080
)
=>
{
const
getScale
=
(
width
=
1920
,
height
=
1080
)
=>
{
let
ww
=
window
.
innerWidth
/
width
;
let
ww
=
window
.
innerWidth
/
width
;
...
@@ -121,15 +129,15 @@ const getScale = (width = 1920, height = 1080) => {
...
@@ -121,15 +129,15 @@ const getScale = (width = 1920, height = 1080) => {
};
};
// 获取当前时间
// 获取当前时间
let
timer
:
NodeJS
.
Timer
|
null
=
null
;
let
timer
=
null
;
let
time
=
ref
<
string
>
(
dayjs
().
format
(
"YYYY年MM月DD HH:mm:ss"
));
let
time
=
ref
(
dayjs
().
format
(
"YYYY年MM月DD HH:mm:ss"
));
timer
=
setInterval
(()
=>
{
timer
=
setInterval
(()
=>
{
time
.
value
=
dayjs
().
format
(
"YYYY年MM月DD HH:mm:ss"
);
time
.
value
=
dayjs
().
format
(
"YYYY年MM月DD HH:mm:ss"
);
},
1000
);
},
1000
);
onBeforeUnmount
(()
=>
{
onBeforeUnmount
(()
=>
{
window
.
removeEventListener
(
"resize"
,
resize
);
window
.
removeEventListener
(
"resize"
,
resize
);
clearInterval
(
timer
as
unknown
as
number
);
clearInterval
(
timer
);
});
});
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
...
src/views/infoGather/constant/components/addModel.vue
View file @
42a0a540
...
@@ -31,21 +31,6 @@
...
@@ -31,21 +31,6 @@
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</
template
>
<
template
v-if=
"form.legalFlowStatus"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"法务审核意见:"
prop=
"name"
>
{{
form
.
legalRepairOpinion
}}
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"法务审核状态:"
prop=
"name"
>
{{
form
.
legalFlowStatus
?
FlowStatus
?.
find
((
v
)
=>
v
.
value
===
form
.
legalFlowStatus
)?.
label
:
''
}}
</el-form-item>
</el-col>
</
template
>
</
template
>
<el-col
:span=
"12"
>
<el-col
:span=
"12"
>
<el-form-item
label=
"合同编号:"
prop=
"name"
>
<el-form-item
label=
"合同编号:"
prop=
"name"
>
...
...
src/views/infoGather/constant/index.vue
View file @
42a0a540
...
@@ -244,7 +244,7 @@
...
@@ -244,7 +244,7 @@
labelWidth
:
85
,
labelWidth
:
85
,
props
:
{
type
:
'daterange'
,
valueFormat
:
'YYYY-MM-DD'
},
props
:
{
type
:
'daterange'
,
valueFormat
:
'YYYY-MM-DD'
},
},
},
},
},
{
field
:
'
createBy'
,
title
:
'创建人'
},
{
field
:
'
user.username'
,
width
:
90
,
title
:
'创建人'
},
{
field
:
'contractStatus'
,
title
:
'合同状态'
,
showOverflow
:
'tooltip'
,
{
field
:
'contractStatus'
,
title
:
'合同状态'
,
showOverflow
:
'tooltip'
,
width
:
80
,
width
:
80
,
enum
:
ContractStatus
,
enum
:
ContractStatus
,
...
@@ -275,27 +275,12 @@
...
@@ -275,27 +275,12 @@
);
);
},
},
},
},
},
},
{
field
:
'legalFlowStatus'
,
title
:
'法务审核状态'
,
showOverflow
:
'tooltip'
,
width
:
80
,
enum
:
FlowStatus
,
fieldNames
:
{
label
:
'label'
,
value
:
'value'
},
slots
:
{
default
:
({
row
})
=>
{
return
(
<>
{
row
.
legalFlowStatus
?
FlowStatus
.
value
?.
find
((
v
)
=>
v
.
value
===
row
.
legalFlowStatus
)?.
label
:
''
}
<
/
>
);
},
},
},
{
field
:
'remark'
,
title
:
'操作'
,
fixed
:
'right'
,
width
:
160
,
visible
:
activeName
.
value
!==
'completed'
,
{
field
:
'remark'
,
title
:
'操作'
,
fixed
:
'right'
,
width
:
160
,
visible
:
activeName
.
value
!==
'completed'
,
slots
:
{
slots
:
{
default
({
row
})
{
default
({
row
})
{
return
(
return
(
<>
<>
<
ElButton
type
=
"primary"
link
onClick
=
{()
=>
addConstant
(
row
,
true
)}
v
-
show
=
{
row
.
createBy
===
userStore
.
userInfo
.
id
}
disabled
=
{
row
.
legal
FlowStatus
===
'pass'
}
>
<
ElButton
type
=
"primary"
link
onClick
=
{()
=>
addConstant
(
row
,
true
)}
v
-
show
=
{
row
.
createBy
===
userStore
.
userInfo
.
id
}
disabled
=
{
row
.
finance
FlowStatus
===
'pass'
}
>
修改
修改
<
/ElButton
>
<
/ElButton
>
<
ElButton
type
=
"primary"
link
onClick
=
{()
=>
apply
(
row
,
'finance'
)}
v
-
show
=
{
authButtonListGet
.
includes
(
'finance_apply'
)}
disabled
=
{
row
.
legalFlowStatus
||
row
.
financeFlowStatus
===
'pass'
}
>
<
ElButton
type
=
"primary"
link
onClick
=
{()
=>
apply
(
row
,
'finance'
)}
v
-
show
=
{
authButtonListGet
.
includes
(
'finance_apply'
)}
disabled
=
{
row
.
legalFlowStatus
||
row
.
financeFlowStatus
===
'pass'
}
>
...
...
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