Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
H
housing-estate
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
物业总平台
housing-estate
Commits
95941b7b
提交
95941b7b
authored
6月 20, 2023
作者:
何忠建
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
工作台
上级
c2ca1828
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
379 行增加
和
111 行删除
+379
-111
api.js
src/api/api.js
+3
-0
Analysis.vue
src/views/dashboard/Analysis.vue
+376
-111
没有找到文件。
src/api/api.js
浏览文件 @
95941b7b
...
...
@@ -3,6 +3,8 @@ import Vue from 'vue'
import
{
UI_CACHE_DB_DICT_DATA
}
from
"@/store/mutation-types"
// 首页统计
const
homeDataStatistics
=
(
params
)
=>
getAction
(
"/community/homepage/dataStatistics"
,
params
);
const
companyNoticeList
=
(
params
)
=>
getAction
(
"/property-company/notice/companyNotice/list"
,
params
);
//角色管理
const
addRole
=
(
params
)
=>
postAction
(
"/sys/role/add"
,
params
);
const
editRole
=
(
params
)
=>
putAction
(
"/sys/role/edit"
,
params
);
...
...
@@ -132,6 +134,7 @@ export const transitRESTful = {
export
{
homeDataStatistics
,
companyNoticeList
,
addRole
,
editRole
,
checkRoleCode
,
...
...
src/views/dashboard/Analysis.vue
浏览文件 @
95941b7b
...
...
@@ -3,7 +3,8 @@
<a-row
:gutter=
"24"
>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"6"
:style=
"
{ marginBottom: '24px' }">
<div
class=
"statistics"
>
<img
class=
"icon"
src=
"~@/assets/guaz.png"
alt=
""
>
<div
class=
"icon"
style=
"background-color:#1890ff;"
><a-icon
type=
"team"
/></div>
<!--
<img
class=
"icon"
src=
"~@/assets/guaz.png"
alt=
""
>
-->
<div>
<p
style=
"color:#666;margin-bottom:5px;"
>
住户总数量
</p>
<p
style=
"margin-bottom:0;color:#333;font-size:28px;line-height:1;"
>
{{
pageForm
.
ownerNum
}}
</p>
...
...
@@ -12,7 +13,7 @@
</a-col>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"6"
:style=
"
{ marginBottom: '24px' }">
<div
class=
"statistics"
>
<
img
class=
"icon"
src=
"~@/assets/guaz.png"
alt=
""
>
<
div
class=
"icon"
style=
"background-color:#7262fd;"
><a-icon
type=
"home"
/></div
>
<div>
<p
style=
"color:#666;margin-bottom:5px;"
>
房屋总数量
</p>
<p
style=
"margin-bottom:0;color:#333;font-size:28px;line-height:1;"
>
{{
pageForm
.
roomNum
}}
</p>
...
...
@@ -21,7 +22,7 @@
</a-col>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"6"
:style=
"
{ marginBottom: '24px' }">
<div
class=
"statistics"
>
<
img
class=
"icon"
src=
"~@/assets/guaz.png"
alt=
""
>
<
div
class=
"icon"
style=
"background-color:#ffaa00;"
><a-icon
type=
"bank"
/></div
>
<div>
<p
style=
"color:#666;margin-bottom:5px;"
>
楼栋总数量
</p>
<p
style=
"margin-bottom:0;color:#333;font-size:28px;line-height:1;"
>
{{
pageForm
.
buildingNum
}}
</p>
...
...
@@ -30,7 +31,7 @@
</a-col>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"6"
:style=
"
{ marginBottom: '24px' }">
<div
class=
"statistics"
>
<
img
class=
"icon"
src=
"~@/assets/guaz.png"
alt=
""
>
<
div
class=
"icon"
style=
"background-color:#52c41a;"
><a-icon
type=
"pay-circle"
/></div
>
<div>
<p
style=
"color:#666;margin-bottom:5px;"
>
年度累计已缴物业费
</p>
<p
style=
"margin-bottom:0;color:#333;font-size:28px;line-height:1;"
>
{{
pageForm
.
propertyYearFee
}}
</p>
...
...
@@ -41,145 +42,314 @@
<a-row
:gutter=
"24"
>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"12"
:style=
"
{ marginBottom: '24px' }">
<pie
title=
"缴费率"
:dataSource=
"pieData"
/>
<div
class=
"to-do t-box"
>
<h3
class=
"box-title"
>
待办事项
</h3>
<div
class=
"todo-list"
>
<div
class=
"item"
>
<p>
入驻业主待审核
</p>
<p>
{{
pageForm
.
waitAuditOwnerNum
}}
家
</p><a-button
type=
"primary"
size=
"small"
@
click=
"toOperation(1)"
:disabled=
"pageForm.waitAuditOwnerNum == 0"
>
去处理
</a-button>
</div>
<div
class=
"item"
>
<p>
租户物业费催缴
</p>
<p>
{{
pageForm
.
waitCallPropertyFee
}}
家
</p><a-button
type=
"primary"
size=
"small"
@
click=
"toOperation(2)"
:disabled=
"pageForm.waitCallPropertyFee == 0"
>
去处理
</a-button>
</div>
<div
class=
"item"
>
<p>
业主投诉待处理
</p>
<p>
{{
pageForm
.
waitHandle
}}
家
</p><a-button
type=
"primary"
size=
"small"
@
click=
"toOperation(3)"
:disabled=
"pageForm.waitHandle == 0"
>
去处理
</a-button>
</div>
<div
class=
"item"
>
<p>
业主报修待处理
</p>
<p>
{{
pageForm
.
waitDispatch
}}
家
</p><a-button
type=
"primary"
size=
"small"
@
click=
"toOperation(4)"
:disabled=
"pageForm.waitDispatch == 0"
>
去处理
</a-button>
</div>
</div>
</div>
</a-col>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"12"
:style=
"
{ marginBottom: '24px' }">
<div>
<h5>
园区公告
</h5>
<div
class=
"announcement t-box"
>
<div
class=
"title"
>
<h3
class=
"box-title"
>
最新公告
</h3><a-button
size=
"small"
@
click=
"toMore()"
>
查看更多
</a-button>
<a-button
size=
"small"
@
click=
"toMore()"
>
发布公告
</a-button>
</div>
<ul>
<li>
清明节放假通知,213231312313
</li>
<li>
5月1日停电通知,因1233233 园区公告 清明节放假通知,21323131231323233
</li>
<li
v-for=
"(item, index) in noticeList"
:key=
"index"
><a
@
click=
"toDetails(item)"
>
{{
item
.
noticeTitle
}}
</a>
<p>
{{
item
.
createTime
.
slice
(
0
,
10
)
}}
</p>
</li>
</ul>
</div>
</a-col>
</a-row>
<a-card
:loading=
"loading"
:bordered=
"false"
:body-style=
"
{padding: '0'}">
<div
class=
"salesCard"
>
<div
class=
"extra-type"
>
<a>
物业
</a>
<a>
水费
</a>
<a>
电费
</a>
<a>
燃气费
</a>
<a-row
:gutter=
"24"
>
<a-col
:sm=
"24"
:md=
"24"
:xl=
"24"
:style=
"
{ marginBottom: '24px' }">
<div
class=
"quick t-box"
>
<h3
class=
"box-title"
>
快速新建
</h3>
<div
class=
"todo-list"
>
<div
class=
"item"
@
click=
"toQuick(1)"
><a-icon
type=
"bank"
/>
<p>
新建楼宇
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(2)"
><a-icon
type=
"user-add"
/>
<p>
新建业主
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(3)"
><a-icon
type=
"home"
/>
<p>
新建房屋
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(4)"
><a-icon
type=
"user"
/>
<p>
雇员管理
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(5)"
><a-icon
type=
"pay-circle"
/>
<p>
物业费查询
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(6)"
><a-icon
type=
"money-collect"
/>
<p>
生活费查询
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(7)"
><a-icon
type=
"tool"
/>
<p>
报修处理
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(8)"
><a-icon
type=
"question-circle"
/>
<p>
投诉处理
</p>
</div>
<div
class=
"item"
@
click=
"toQuick(9)"
><a-icon
type=
"form"
/>
<p>
发布公告
</p>
</div>
</div>
</div>
<div>
<bar
:dataSource=
"barData"
/>
</a-col>
</a-row>
<a-row
:gutter=
"24"
>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"12"
:style=
"
{ marginBottom: '24px' }">
<div
class=
"salesCard t-box"
>
<h3
class=
"box-title"
>
缴费统计
</h3>
<div
class=
"extra-type"
>
<a-radio-group
@
change=
"handleSizeChange"
:value=
"typeCode"
>
<a-radio-button
value=
"SFLX00001"
>
物业费
</a-radio-button>
<a-radio-button
value=
"SFLX00002"
>
水费
</a-radio-button>
<a-radio-button
value=
"SFLX00003"
>
电费
</a-radio-button>
<a-radio-button
value=
"SFLX00004"
>
燃气费
</a-radio-button>
<a-radio-button
value=
"SFLX00005"
>
暖气费
</a-radio-button>
</a-radio-group>
</div>
<div>
<bar
:dataSource=
"barData"
style=
"padding: 0;"
/>
</div>
</div>
</div>
</a-card>
</a-col>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"12"
:style=
"
{ marginBottom: '24px' }">
<div
class=
"pay-cost t-box"
>
<h3
class=
"box-title"
>
缴费率
</h3>
<pie
:dataSource=
"payData"
style=
"margin-top: 40px;"
/>
</div>
</a-col>
</a-row>
<a-row
:gutter=
"24"
>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"12"
:style=
"
{ marginBottom: '24px' }">
<pie
title=
"报修统计"
:dataSource=
"pieData"
/>
<div
class=
"pay-cost t-box"
>
<h3
class=
"box-title"
>
报修统计
</h3>
<pie
:dataSource=
"repairData"
/>
<div
class=
"number"
>
<p>
全部报修
{{
pageForm
.
repairTotal
}}
</p>
<p
v-for=
"(item, index) in repairData"
:key=
"index"
>
{{
item
.
item
}}
{{
item
.
count
}}
</p>
</div>
</div>
</a-col>
<a-col
:sm=
"24"
:md=
"12"
:xl=
"12"
:style=
"
{ marginBottom: '24px' }">
<pie
title=
"投诉统计"
:dataSource=
"pieData"
/>
<div
class=
"pay-cost t-box"
>
<h3
class=
"box-title"
>
投诉统计
</h3>
<pie
:dataSource=
"complaintsData"
/>
<div
class=
"number"
>
<p>
全部投诉
{{
pageForm
.
complaintTotal
}}
</p>
<p
v-for=
"(item, index) in complaintsData"
:key=
"index"
>
{{
item
.
item
}}
{{
item
.
count
}}
</p>
</div>
</div>
</a-col>
</a-row>
<a-modal
:title=
"noticeTitle"
:visible=
"visible"
@
cancel=
"handleCancel"
:footer=
"null"
width=
"40%"
>
<p
v-html=
"noticeContent "
></p>
</a-modal>
</div>
</
template
>
<
script
>
import
Bar
from
'@/components/chart/Bar'
import
Pie
from
'@/components/chart/Pie'
import
{
homeDataStatistics
}
from
"@/api/api"
import
Bar
from
'@/components/chart/Bar'
import
Pie
from
'@/components/chart/Pie'
import
{
homeDataStatistics
,
companyNoticeList
}
from
'@/api/api'
const
barData
=
[]
for
(
let
i
=
0
;
i
<
12
;
i
+=
1
)
{
barData
.
push
({
x
:
`
${
i
+
1
}
月`
,
y
:
Math
.
floor
(
Math
.
random
()
*
1000
)
+
200
})
}
export
default
{
name
:
"Analysis"
,
components
:
{
Bar
,
Pie
// const barData = []
// for (let i = 0; i
<
12
;
i
+=
1
)
{
// barData.push({
// x: `${i + 1}月`,
// y: 1000,
// })
// }
export
default
{
name
:
'Analysis'
,
components
:
{
Bar
,
Pie
,
},
data
()
{
return
{
pageForm
:
{},
loading
:
true
,
payData
:
[],
noticeList
:
[],
typeCode
:
'SFLX00001'
,
repairData
:
[],
complaintsData
:
[],
barData
:
[],
noticeTitle
:
''
,
noticeContent
:
''
,
visible
:
false
,
}
},
created
()
{
this
.
onDetail
()
this
.
companyNotice
()
},
methods
:
{
async
onDetail
(
typeCode
)
{
let
{
result
}
=
await
homeDataStatistics
({
typeCode
:
typeCode
})
this
.
pageForm
=
{
...
result
}
this
.
payData
=
[
{
item
:
'物业费'
,
count
:
result
.
propertyFeeRate
||
0
},
{
item
:
'水费'
,
count
:
result
.
waterRate
||
0
},
{
item
:
'电费'
,
count
:
result
.
electricRate
||
0
},
{
item
:
'燃气费'
,
count
:
result
.
gasFeeRate
||
0
},
{
item
:
'暖气费'
,
count
:
result
.
heatFeeRate
||
0
},
]
this
.
barData
=
result
.
monthlyStatistics
.
map
((
item
)
=>
{
return
{
x
:
item
.
monthNum
+
'月'
,
y
:
item
.
totalMoney
,
}
})
this
.
repairData
=
[
// { item: '全部报修', count: result.repairTotal || 0 },
{
item
:
'待派单'
,
count
:
result
.
waitDispatch
||
0
},
{
item
:
'维修中'
,
count
:
result
.
inRepair
||
0
},
{
item
:
'已完成'
,
count
:
result
.
repairOver
||
0
},
]
this
.
complaintsData
=
[
// { item: '全部投诉', count: result.complaintTotal || 0 },
{
item
:
'待处理'
,
count
:
result
.
waitHandle
||
0
},
{
item
:
'已完成'
,
count
:
result
.
complaintOver
||
0
},
]
this
.
loading
=
!
this
.
loading
},
data
()
{
return
{
pageForm
:
{},
loading
:
true
,
barData
,
pieData
:
[
{
item
:
'物业费'
,
count
:
40
},
{
item
:
'水费'
,
count
:
21
},
{
item
:
'电费'
,
count
:
17
},
{
item
:
'燃气费'
,
count
:
13
},
{
item
:
'停车费'
,
count
:
9
}
]
}
async
companyNotice
()
{
let
{
result
}
=
await
companyNoticeList
({
pageNo
:
1
,
pageSize
:
5
,
order
:
'desc'
,
column
:
'createTime'
})
this
.
noticeList
=
result
.
records
},
created
()
{
this
.
onDetail
()
toOperation
(
type
)
{
if
(
type
==
1
)
{
this
.
$router
.
push
({
path
:
'/information/owner'
,
})
}
else
if
(
type
==
2
)
{
this
.
$router
.
push
({
path
:
'/property/living'
,
})
}
else
if
(
type
==
3
)
{
this
.
$router
.
push
({
path
:
'/property/complaint'
,
})
}
else
if
(
type
==
4
)
{
this
.
$router
.
push
({
path
:
'/property/maintenance'
,
})
}
},
methods
:
{
async
onDetail
()
{
let
{
result
}
=
await
homeDataStatistics
()
this
.
pageForm
=
{...
result
}
this
.
loading
=
!
this
.
loading
//当前小区业主数量
// private Integer ownerNum;
// //当前小区房屋数量
// private Integer roomNum;
// //当前小区楼栋数量
// private Integer buildingNum;
// //当前小区累积缴纳物业费
// private BigDecimal propertyYearFee;
// //物业费占比
// private BigDecimal propertyFeeRate;
// //水费占比
// private BigDecimal waterRate;
// //电费占比
// private BigDecimal electricRate;
// //燃气费占比
// private BigDecimal gasFeeRate;
// //按月统计费用
// private List
<
MonthlyStatisticsVo
>
monthlyStatistics
;
// //报修总数
// private Integer repairTotal;
// //报修待派单数量
// private Integer waitDispatch;
// //报修维修中数量
// private Integer inRepair;
// //报修完成数量
// private Integer repairOver;
// //全部投诉数量
// private Integer complaintTotal;
// //投诉待处理数量
// private Integer waitHandle;
// //投诉已处理数量
// private Integer complaintOver;
// //当前小区待审核业主数量
// private Integer waitAuditOwnerNum;
// //当前小区物业费待催缴业主数量
// private Integer waitCallPropertyFee;
toQuick
(
type
)
{
if
(
type
==
1
)
{
this
.
$router
.
push
({
path
:
'/information/building'
,
})
}
else
if
(
type
==
2
)
{
this
.
$router
.
push
({
path
:
'/information/owner'
,
})
}
else
if
(
type
==
3
)
{
this
.
$router
.
push
({
path
:
'/information/house'
,
})
}
else
if
(
type
==
4
)
{
this
.
$router
.
push
({
path
:
'/information/worker'
,
})
}
else
if
(
type
==
5
)
{
this
.
$router
.
push
({
path
:
'/property/living'
,
})
}
else
if
(
type
==
6
)
{
this
.
$router
.
push
({
path
:
'/property/living'
,
})
}
else
if
(
type
==
7
)
{
this
.
$router
.
push
({
path
:
'/property/maintenance'
,
})
}
else
if
(
type
==
8
)
{
this
.
$router
.
push
({
path
:
'/property/complaint'
,
})
}
else
if
(
type
==
9
)
{
this
.
$router
.
push
({
path
:
'/property/advertisement'
,
})
}
}
}
},
toMore
()
{
this
.
$router
.
push
({
path
:
'/property/advertisement'
,
})
},
toDetails
(
item
)
{
this
.
noticeTitle
=
item
.
noticeTitle
this
.
noticeContent
=
item
.
noticeContent
this
.
visible
=
true
},
handleCancel
(
e
)
{
this
.
visible
=
false
},
handleSizeChange
(
e
)
{
let
that
=
this
this
.
typeCode
=
e
.
target
.
value
that
.
onDetail
(
this
.
typeCode
)
},
},
}
</
script
>
<
style
lang=
"less"
scoped
>
.hone-content-box {
background-color: #fff;
padding: 16px;
padding: 10px;
.statistics {
// flex: none;
width: 100%;
height: 90px;
box-sizing: border-box;
border: 1px solid #e0dfdf;
// flex: none;
background: #fff;
width: 100%;
height: 90px;
box-sizing: border-box;
border: 1px solid #e0dfdf;
display: flex;
align-items: center;
padding-left: 20px;
.icon {
width: 60px;
height: 60px;
border-radius: 60px;
margin-right: 12px;
display: flex;
text-align: center;
align-items: center;
padding-left: 20px;
.icon {
width: 64px;
height: 64px;
margin-right: 12px;
justify-content: center;
.anticon {
font-size: 32px;
color: #ffffff;
}
}
}
.pay-box {
display: flex;
.left-box {
...
...
@@ -188,4 +358,98 @@
}
}
}
.t-box {
background: #fff;
padding: 15px;
border: 1px solid #e0dfdf;
}
.box-title {
font-weight: bold;
margin-bottom: 15px;
display: inline-block;
padding-left: 10px;
border-left: 3px solid #1890ff;
height: 20px;
line-height: 20px;
}
.pay-cost {
height: 380px;
}
.announcement {
height: 220px;
.title {
.ant-btn {
float: right;
margin-left: 10px;
}
}
ul {
padding-left: 5px;
li {
list-style-type: none;
height: 30px;
line-height: 30px;
display: flex;
justify-content: space-between;
a {
color: #666;
width: 80%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
}
.salesCard {
height: 380px;
}
.extra-type {
a {
margin-right: 20px;
}
}
.number {
width: 80%;
margin: 0 10%;
display: flex;
justify-content: space-evenly;
p {
font-size: 14px;
margin: 0;
}
}
.to-do {
height: 220px;
.todo-list {
padding: 0 10px;
margin-top: 15px;
.item {
display: flex;
justify-content: space-between;
}
}
}
.quick {
height: 165px;
.todo-list {
display: flex;
justify-content: space-evenly;
margin-top: 20px;
.item {
margin: 0 10px;
display: flex;
flex-direction: column;
text-align: center;
cursor: pointer;
.anticon {
font-size: 40px;
color: #007dff;
}
p {
margin-top: 8px;
}
}
}
}
</
style
>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论