Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
E
east-nanjing-new
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
郭铭瑶
east-nanjing-new
Commits
829acf34
Commit
829acf34
authored
Nov 24, 2021
by
郭铭瑶
🤘
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
接入电梯视频及发现统计数据
parent
432b0f00
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
308 additions
and
149 deletions
+308
-149
api.ts
src/ajax/api.ts
+15
-2
video-component.vue
src/view/components/video-component.vue
+22
-10
command.vue
src/view/left/command.vue
+2
-2
community-video.vue
src/view/new-community/community-video.vue
+137
-77
warning-statistics.vue
src/view/new-community/warning-statistics.vue
+82
-22
key-task.vue
src/view/right/key-task.vue
+50
-36
No files found.
src/ajax/api.ts
View file @
829acf34
...
@@ -51,7 +51,7 @@ export default {
...
@@ -51,7 +51,7 @@ export default {
GET_PUBLICSAFE_TRUE_COMPANY
:
GET_PUBLICSAFE_TRUE_COMPANY
:
'/service-special-nandong/public/company/statistical'
,
// 公共安全-右侧-实有单位
'/service-special-nandong/public/company/statistical'
,
// 公共安全-右侧-实有单位
GET_PUBLICSAFE_SOS_MATERIAL
:
GET_PUBLICSAFE_SOS_MATERIAL
:
'/service-special-nandong/public/emergencySupplies'
,
// 公共安全-右侧-应急物资储备
'/service-special-nandong/public/emergencySupplies
/1
'
,
// 公共安全-右侧-应急物资储备
GET_PUBLICSAFE_OUTHOUSEWALL
:
GET_PUBLICSAFE_OUTHOUSEWALL
:
'/service-special-nandong/public/inspection/statistical'
,
// 公共安全-右侧-房屋外立面
'/service-special-nandong/public/inspection/statistical'
,
// 公共安全-右侧-房屋外立面
GET_PUBLICSAFE_BUILDINGS
:
'/service-special-nandong/public/inspections'
,
// 公共安全-右侧-重点关注楼宇
GET_PUBLICSAFE_BUILDINGS
:
'/service-special-nandong/public/inspections'
,
// 公共安全-右侧-重点关注楼宇
...
@@ -65,7 +65,7 @@ export default {
...
@@ -65,7 +65,7 @@ export default {
GET_PUBLICSAFE_STREETPOWER
:
'/service-special-nandong/public/workstations'
,
// 网格工作站(原名街道力量)
GET_PUBLICSAFE_STREETPOWER
:
'/service-special-nandong/public/workstations'
,
// 网格工作站(原名街道力量)
GET_GRIDPOWER
:
'/service-special-nandong/public/workstationDepartments'
,
// 网格力量
GET_GRIDPOWER
:
'/service-special-nandong/public/workstationDepartments'
,
// 网格力量
GET_PUBLICSAFE_PARTY
:
'/service-special-nandong/public/partyConstruction/1'
,
// 党建
GET_PUBLICSAFE_PARTY
:
'/service-special-nandong/public/partyConstruction/1'
,
// 党建
GET_PUBLICSAFE_ECONOMIC
:
'/service-special-nandong/public/economic'
,
// 经济
GET_PUBLICSAFE_ECONOMIC
:
'/service-special-nandong/public/economic
/1
'
,
// 经济
/** 小区屏 */
/** 小区屏 */
GET_COMMUNITY_IDS
:
'/service-special-nandong/public/getSectIdList'
,
// 获取小区id列表
GET_COMMUNITY_IDS
:
'/service-special-nandong/public/getSectIdList'
,
// 获取小区id列表
...
@@ -127,4 +127,17 @@ export default {
...
@@ -127,4 +127,17 @@ export default {
'/service-special-nandong/public/beautifulHome/threeYearStatistics'
,
// 美丽家园项目实施情况
'/service-special-nandong/public/beautifulHome/threeYearStatistics'
,
// 美丽家园项目实施情况
GET_EVENTS
:
'/service-special-nandong/public/compairs'
,
// 事件
GET_EVENTS
:
'/service-special-nandong/public/compairs'
,
// 事件
GET_WISDOM_OLD
:
'/service-special-nandong/public/wisdom/0'
,
// 智慧养老
GET_WISDOM_OLD
:
'/service-special-nandong/public/wisdom/0'
,
// 智慧养老
GET_FOCUS_WORK
:
'/service-special-nandong/public/focusWorks'
,
// 重点工作
/** 新版小区屏 */
GET_MONITOR
:
'http://yapi.omniview.pro/mock/377/service-special-nandong/public/equipments/0'
,
// 获取监控设备
GET_VIDEO_URL
:
'http://yapi.omniview.pro/mock/377/service-special-nandong/public/video/{id}'
,
// 根据设备id获取视频流
GET_DISCOVER_SUM
:
'http://yapi.omniview.pro/mock/377/service-special-nandong/public/discover/method/count'
,
// 发现方式统计
GET_DISCOVER_STATISTICS
:
'http://yapi.omniview.pro/mock/377/service-special-nandong/public/discover/category/count'
,
// 发现数据
GET_DISCOVER_COUNT
:
'http://yapi.omniview.pro/mock/377/service-special-nandong/public/discover/count'
,
// 今日及历史发现数
}
}
src/view/components/video-component.vue
View file @
829acf34
<
template
>
<
template
>
<div
class=
"video-component"
>
<div
class=
"video-component"
>
<video
v-if=
"isM3U8"
ref=
"videoRef"
class=
"video"
:controls=
"controls"
>
您的浏览器不支持播放此视频。
</video>
<video
<video
v-if=
"isM3U8"
v-else-if=
"isMP4"
ref=
"videoRef"
class=
"video"
class=
"video"
autoplay=
"autoplay"
:
autoplay=
"autoplay"
controls
:controls=
"controls"
>
>
您的浏览器不支持播放此视频。
</video>
<video
v-else-if=
"isMP4"
class=
"video"
autoplay=
"autoplay"
controls
>
<source
:src=
"videoSrc"
type=
"video/mp4"
/>
<source
:src=
"videoSrc"
type=
"video/mp4"
/>
</video>
</video>
<iframe
v-else
class=
"video"
:src=
"videoSrc"
frameborder=
"0"
/>
<iframe
v-else
class=
"video"
:src=
"videoSrc"
frameborder=
"0"
/>
...
@@ -34,6 +33,14 @@ export default defineComponent({
...
@@ -34,6 +33,14 @@ export default defineComponent({
type
:
String
as
PropType
<
string
>
,
type
:
String
as
PropType
<
string
>
,
required
:
true
,
required
:
true
,
},
},
autoplay
:
{
type
:
String
as
PropType
<
string
>
,
default
:
'autoplay'
,
},
controls
:
{
type
:
Boolean
as
PropType
<
boolean
>
,
default
:
true
,
},
},
},
setup
(
props
)
{
setup
(
props
)
{
const
videoRef
=
ref
<
any
|
null
>
(
null
)
const
videoRef
=
ref
<
any
|
null
>
(
null
)
...
@@ -54,12 +61,16 @@ export default defineComponent({
...
@@ -54,12 +61,16 @@ export default defineComponent({
hls
.
loadSource
(
props
.
videoSrc
)
hls
.
loadSource
(
props
.
videoSrc
)
hls
.
attachMedia
(
videoRef
.
value
)
hls
.
attachMedia
(
videoRef
.
value
)
hls
.
on
(
Hls
.
Events
.
MANIFEST_PARSED
,
()
=>
{
hls
.
on
(
Hls
.
Events
.
MANIFEST_PARSED
,
()
=>
{
videoRef
.
value
.
play
()
if
(
props
.
autoplay
===
'autoplay'
)
{
videoRef
.
value
.
play
()
}
})
})
}
else
if
(
videoRef
.
value
.
canPlayType
(
'application/vnd.apple.mpegurl'
))
{
}
else
if
(
videoRef
.
value
.
canPlayType
(
'application/vnd.apple.mpegurl'
))
{
videoRef
.
value
.
src
=
props
.
videoSrc
videoRef
.
value
.
src
=
props
.
videoSrc
videoRef
.
value
.
addEventListener
(
'canplay'
,
()
=>
{
videoRef
.
value
.
addEventListener
(
'canplay'
,
()
=>
{
videoRef
.
value
.
play
()
if
(
props
.
autoplay
===
'autoplay'
)
{
videoRef
.
value
.
play
()
}
})
})
}
}
}
}
...
@@ -79,7 +90,8 @@ export default defineComponent({
...
@@ -79,7 +90,8 @@ export default defineComponent({
<
style
lang=
"stylus"
scoped
>
<
style
lang=
"stylus"
scoped
>
.video-component
.video-component
.video
width 100%
width 100%
height 100%
height 100%
.video
width 100%
</
style
>
</
style
>
src/view/left/command.vue
View file @
829acf34
...
@@ -219,11 +219,11 @@ export default defineComponent({
...
@@ -219,11 +219,11 @@ export default defineComponent({
return
[
return
[
{
{
name
:
'商办空置率'
,
name
:
'商办空置率'
,
value
:
economic
.
value
.
vacancyRate
.
split
(
'%'
)[
0
]
||
0
,
value
:
economic
.
value
.
vacancyRate
||
0
,
},
},
{
{
name
:
'综合商业体使用率'
,
name
:
'综合商业体使用率'
,
value
:
economic
.
value
.
useRate
.
split
(
'%'
)[
0
]
||
0
,
value
:
economic
.
value
.
useRate
||
0
,
},
},
]
]
})
})
...
...
src/view/new-community/community-video.vue
View file @
829acf34
<
template
>
<
template
>
<m-card
class=
"card"
title=
"场景监控视频"
>
<m-card
class=
"card"
title=
"场景监控视频"
>
<div
class=
"nav"
>
<div
class=
"nav"
>
<a-select
<
!--
<
a-select
v-model:value=
"curScene"
v-model:value=
"curScene"
dropdown-class-name=
"community-video-selector-drop-down"
dropdown-class-name=
"community-video-selector-drop-down"
>
>
...
@@ -12,14 +12,14 @@
...
@@ -12,14 +12,14 @@
>
>
{{
option
.
name
}}
{{
option
.
name
}}
</a-select-option>
</a-select-option>
</a-select>
</a-select>
-->
<a-select
<a-select
v-model:value=
"curAddress"
v-model:value=
"curAddress"
dropdown-class-name=
"community-video-selector-drop-down"
dropdown-class-name=
"community-video-selector-drop-down"
>
>
<a-select-option
<a-select-option
v-for=
"
option
in addresses"
v-for=
"
(option, i)
in addresses"
:key=
"option.value"
:key=
"
i + '-' +
option.value"
:value=
"option.value"
:value=
"option.value"
>
>
{{
option
.
name
}}
{{
option
.
name
}}
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
</a-select>
</a-select>
</div>
</div>
<div
class=
"community-video"
>
<div
class=
"community-video"
>
<div
<
!--
<
div
v-for=
"item in list"
v-for=
"item in list"
:key=
"item.name"
:key=
"item.name"
:style=
"`background:url($
{
:style=
"`background:url($
{
...
@@ -42,7 +42,26 @@
...
@@ -42,7 +42,26 @@
<div
class=
"mask"
>
<div
class=
"mask"
>
<img
src=
"@/assets/images/play.png"
/>
<img
src=
"@/assets/images/play.png"
/>
</div>
</div>
</div>
</div>
-->
<template
v-if=
"videoList.length > 0"
>
<div
v-for=
"item in videoList.slice(0, 3)"
:key=
"item.name"
@
click=
"handleClick(item.video)"
>
<VideoComponent
v-if=
"item.video"
:video-src=
"item.video"
autoplay=
"none"
:controls=
"false"
/>
<p>
{{
item
.
name
}}
</p>
<div
class=
"mask"
>
<img
src=
"@/assets/images/play.png"
/>
</div>
</div>
</
template
>
<m-empty
v-else
/>
</div>
</div>
</m-card>
</m-card>
<m-modal
v-model=
"showModal"
title=
"视频"
width=
"30%"
offset=
"-70%"
>
<m-modal
v-model=
"showModal"
title=
"视频"
width=
"30%"
offset=
"-70%"
>
...
@@ -51,7 +70,7 @@
...
@@ -51,7 +70,7 @@
</template>
</template>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
>
import
{
computed
,
defineComponent
,
ref
}
from
'vue'
import
{
computed
,
defineComponent
,
ref
,
watch
}
from
'vue'
// import photo1 from '@/assets/images/community1.png'
// import photo1 from '@/assets/images/community1.png'
// import photo2 from '@/assets/images/community2.png'
// import photo2 from '@/assets/images/community2.png'
// import photo3 from '@/assets/images/community3.png'
// import photo3 from '@/assets/images/community3.png'
...
@@ -59,7 +78,7 @@ import { computed, defineComponent, ref } from 'vue'
...
@@ -59,7 +78,7 @@ import { computed, defineComponent, ref } from 'vue'
import
VideoComponent
from
'../components/video-component.vue'
import
VideoComponent
from
'../components/video-component.vue'
import
store
from
'@/store'
import
store
from
'@/store'
import
{
useRoute
}
from
'vue-router'
import
{
useRoute
}
from
'vue-router'
import
{
api
}
from
'@/ajax'
import
{
a
jax
,
a
pi
}
from
'@/ajax'
export
default
defineComponent
({
export
default
defineComponent
({
name
:
'CommunityPhoto'
,
name
:
'CommunityPhoto'
,
...
@@ -86,64 +105,111 @@ export default defineComponent({
...
@@ -86,64 +105,111 @@ export default defineComponent({
const
curId
=
computed
(
const
curId
=
computed
(
()
=>
(
route
&&
route
.
query
.
id
)
||
store
.
state
.
communityOptions
[
0
].
type
()
=>
(
route
&&
route
.
query
.
id
)
||
store
.
state
.
communityOptions
[
0
].
type
)
)
const
list
=
computed
(()
=>
{
const
list
=
ref
<
any
[]
>
([])
if
(
curId
.
value
===
'527635870583459840'
)
{
ajax
// 振兴小区
.
get
({
return
[
url
:
api
.
GET_MONITOR
,
{
params
:
{
name
:
'重庆北路后门'
,
communityId
:
curId
.
value
||
undefined
,
photo
:
pageSize
:
9000
,
'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AXyAIUKZAAIFC2qNmKI384.jpg'
,
video
:
'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB9PlmAH8-oAEmHxWhriqw954.mov'
,
},
{
name
:
'大沽路大门'
,
photo
:
'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AYmAT-A1AAMElShNriM149.jpg'
,
video
:
'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB9QE6AckoPAEM3swvgmFQ182.mov'
,
},
{
name
:
'重庆北路177弄64号'
,
photo
:
'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AQCAEc3pAASC2UqtXWs052.jpg'
,
video
:
'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AVyAanZkApsdVDHEGc0527.mp4'
,
},
]
}
return
[
{
name
:
'62弄朝北'
,
photo
:
'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB5GdOAW6qQAAvNhxSqO-g179.jpg'
,
video
:
'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9OkmAFxVMAS7MAmRH2Xc004.mp4'
,
},
},
{
})
name
:
'62弄朝东'
,
.
then
((
res
)
=>
{
photo
:
list
.
value
=
(
res
?.
data
?.
content
||
[]).
map
((
item
:
any
)
=>
({
'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB5Kj-AX3OMAAwPqHZi_Kg064.jpg'
,
name
:
item
.
buildingAddr
,
video
:
...
item
,
'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9QIiAaz9fAS3gvWsrxYQ927.mp4'
,
}))
},
addresses
.
value
.
push
(
{
...
list
.
value
.
map
((
item
:
any
)
=>
({
name
:
'62弄朝南'
,
name
:
item
.
buildingAddr
,
photo
:
value
:
item
.
buildingAddr
,
'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB5KrOAVcluAAnbZjB7fNA165.jpg'
,
}))
video
:
)
'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB9P1mALYigATKoQQw6Y8k841.mp4'
,
Promise
.
all
(
},
list
.
value
.
map
((
item
)
=>
]
ajax
.
get
({
})
url
:
api
.
GET_VIDEO_URL
.
replace
(
'{id}'
,
item
.
id
),
})
)
).
then
((
res
)
=>
{
const
urls
=
res
.
map
((
item
)
=>
item
?.
data
?.
content
||
null
)
list
.
value
.
forEach
((
item
,
i
)
=>
{
item
.
video
=
urls
[
i
]
})
videoList
.
value
=
[...
list
.
value
]
})
})
// const list = computed(() => {
// if (curId.value === '527635870583459840') {
// // 振兴小区
// return [
// {
// name: '重庆北路后门',
// photo:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AXyAIUKZAAIFC2qNmKI384.jpg',
// video:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB9PlmAH8-oAEmHxWhriqw954.mov',
// },
// {
// name: '大沽路大门',
// photo:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AYmAT-A1AAMElShNriM149.jpg',
// video:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB9QE6AckoPAEM3swvgmFQ182.mov',
// },
// {
// name: '重庆北路177弄64号',
// photo:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AQCAEc3pAASC2UqtXWs052.jpg',
// video:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9AVyAanZkApsdVDHEGc0527.mp4',
// },
// ]
// }
// return [
// {
// name: '62弄朝北',
// photo:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB5GdOAW6qQAAvNhxSqO-g179.jpg',
// video:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9OkmAFxVMAS7MAmRH2Xc004.mp4',
// },
// {
// name: '62弄朝东',
// photo:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB5Kj-AX3OMAAwPqHZi_Kg064.jpg',
// video:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/30/CgAG5WB9QIiAaz9fAS3gvWsrxYQ927.mp4',
// },
// {
// name: '62弄朝南',
// photo:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB5KrOAVcluAAnbZjB7fNA165.jpg',
// video:
// 'http://zhongbang.omniview.pro/file/group1/M00/00/1A/CgAG5GB9P1mALYigATKoQQw6Y8k841.mp4',
// },
// ]
// })
const
curScene
=
ref
(
'all'
)
const
curScene
=
ref
(
'all'
)
const
curAddress
=
ref
(
'all'
)
const
curAddress
=
ref
(
'all'
)
const
scenes
=
[{
name
:
'全部场景'
,
value
:
'all'
}]
const
scenes
=
[{
name
:
'全部场景'
,
value
:
'all'
}]
const
addresses
=
[{
name
:
'全部地址'
,
value
:
'all'
}]
const
addresses
=
ref
([{
name
:
'全部地址'
,
value
:
'all'
}])
const
videoList
=
ref
<
any
[]
>
([])
watch
(
()
=>
curAddress
.
value
,
(
address
:
string
)
=>
{
if
(
address
===
'all'
)
{
videoList
.
value
=
list
.
value
}
else
{
videoList
.
value
=
list
.
value
.
filter
(
(
item
)
=>
item
.
buildingAddr
===
address
)
}
}
)
return
{
return
{
prefix
,
prefix
,
l
ist
,
videoL
ist
,
handleClick
,
handleClick
,
showModal
,
showModal
,
src
,
src
,
...
@@ -159,33 +225,27 @@ export default defineComponent({
...
@@ -159,33 +225,27 @@ export default defineComponent({
<
style
lang=
"stylus"
scoped
>
<
style
lang=
"stylus"
scoped
>
@import '../../components/MyComponent/main.styl'
@import '../../components/MyComponent/main.styl'
.card
:deep(.card-content)
display flex
flex-direction column
justify-content space-between
overflow hidden
.nav
.nav
display flex
justify-content space-between
margin .04rem 0
margin .04rem 0
padding 0 .06rem
padding 0 .06rem
>div
>div
width
48
%
width
100
%
.community-video
.community-video
flex 1
display flex
flex-direction column
justify-content space-between
padding .05rem
padding .05rem
box-sizing border-box
overflow hidden
>div
>div
height 32%
height 1.68rem
// width 100%
position relative
position relative
cursor pointer
cursor pointer
margin-bottom .05rem
overflow hidden
.mask
.mask
$center()
$center()
display flex
position absolute
position absolute
top 0
left 0
width 100%
width 100%
height 100%
height 100%
opacity 0.8
opacity 0.8
...
@@ -203,8 +263,8 @@ export default defineComponent({
...
@@ -203,8 +263,8 @@ export default defineComponent({
transform scale(1.2) rotate(360deg)
transform scale(1.2) rotate(360deg)
>p
>p
position absolute
position absolute
bottom
.05rem
top
.05rem
right @bottom
left @top
padding .04rem .1rem
padding .04rem .1rem
border-radius .14rem
border-radius .14rem
color #fff
color #fff
...
...
src/view/new-community/warning-statistics.vue
View file @
829acf34
...
@@ -62,38 +62,98 @@
...
@@ -62,38 +62,98 @@
</
template
>
</
template
>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
setup
>
import
{
ref
}
from
'vue'
import
{
ajax
,
api
}
from
'@/ajax'
import
c1
from
'@/assets/images/c1.png'
import
c1
from
'@/assets/images/c1.png'
import
c2
from
'@/assets/images/c2.png'
import
c2
from
'@/assets/images/c2.png'
const
sum
=
[
const
sum
=
ref
(
[
{
{
name
:
'今日预警数量'
,
name
:
'今日预警数量'
,
value
:
3
,
value
:
0
,
},
},
{
{
name
:
'历史预警数量'
,
name
:
'历史预警数量'
,
value
:
41
,
value
:
0
,
},
},
{
{
name
:
'预警类型'
,
name
:
'预警类型'
,
value
:
5
,
value
:
0
,
},
},
]
])
const
sub
=
[
ajax
{
name
:
'视频识别'
,
value
:
2
},
.
get
({
{
name
:
'物联感知'
,
value
:
2
},
url
:
api
.
GET_DISCOVER_COUNT
,
{
name
:
'数据关联分析'
,
value
:
2
},
})
{
name
:
'数据统计预警'
,
value
:
1
},
.
then
((
res
)
=>
{
]
const
{
year
=
0
,
today
=
0
}
=
res
?.
data
?.
content
||
{}
const
list
=
[
sum
.
value
=
[
{
name
:
'电瓶车入库'
,
value
:
38
},
{
{
name
:
'垃圾暴露'
,
value
:
5
},
name
:
'今日预警数量'
,
{
name
:
'占用消防通道'
,
value
:
2
},
value
:
today
,
{
name
:
'垃圾满溢'
,
value
:
28
},
},
{
name
:
'高叠隐患'
,
value
:
2
},
{
{
name
:
'易积水预警'
,
value
:
19
},
name
:
'历史预警数量'
,
{
name
:
'群租'
,
value
:
16
},
value
:
year
,
]
},
{
name
:
'预警类型'
,
value
:
0
,
},
]
})
const
sub
=
ref
([
{
name
:
'视频识别'
,
value
:
0
},
{
name
:
'物联感知'
,
value
:
0
},
{
name
:
'数据关联分析'
,
value
:
0
},
{
name
:
'人为发现'
,
value
:
0
},
])
ajax
.
get
({
url
:
api
.
GET_DISCOVER_SUM
,
})
.
then
((
res
)
=>
{
const
{
person
=
0
,
//人为发现
iot
=
0
,
//物联感知
video
=
0
,
//视频识别
analyze
=
0
,
//数据分析
}
=
res
?.
data
?.
content
||
{}
sub
.
value
=
[
{
name
:
'视频识别'
,
value
:
video
},
{
name
:
'物联感知'
,
value
:
iot
},
{
name
:
'数据关联分析'
,
value
:
analyze
},
{
name
:
'人为发现'
,
value
:
person
},
]
})
const
list
=
ref
([
{
name
:
'电瓶车入梯'
,
value
:
0
},
{
name
:
'垃圾暴露'
,
value
:
0
},
{
name
:
'占用消防通道'
,
value
:
0
},
{
name
:
'垃圾满溢'
,
value
:
0
},
{
name
:
'高叠隐患'
,
value
:
0
},
// { name: '易积水预警', value: 0 },
{
name
:
'群租'
,
value
:
0
},
])
ajax
.
get
({
url
:
api
.
GET_DISCOVER_STATISTICS
,
})
.
then
((
res
)
=>
{
const
{
fire
=
0
,
//消防通道
batteryCar
=
0
,
//电瓶车入梯
overflowingGarbage
=
0
,
//垃圾满溢
groupRent
=
0
,
//群租
}
=
res
?.
data
?.
content
||
{}
list
.
value
=
[
{
name
:
'电瓶车入梯'
,
value
:
batteryCar
},
{
name
:
'垃圾暴露'
,
value
:
0
},
{
name
:
'占用消防通道'
,
value
:
fire
},
{
name
:
'垃圾满溢'
,
value
:
overflowingGarbage
},
{
name
:
'高叠隐患'
,
value
:
0
},
{
name
:
'群租'
,
value
:
groupRent
},
]
})
const
events
=
[
const
events
=
[
{
{
name
:
'占用消防通道'
,
name
:
'占用消防通道'
,
...
@@ -198,7 +258,7 @@ i.dot
...
@@ -198,7 +258,7 @@ i.dot
flex-direction column
flex-direction column
overflow hidden
overflow hidden
.events
.events
height 3.
4
rem
height 3.
7
rem
overflow hidden
overflow hidden
.event-item
.event-item
height .74rem
height .74rem
...
...
src/view/right/key-task.vue
View file @
829acf34
...
@@ -12,11 +12,12 @@ import {
...
@@ -12,11 +12,12 @@ import {
shallowRef
,
shallowRef
,
onMounted
,
onMounted
,
PropType
,
PropType
,
nextTick
,
onBeforeUnmount
,
onBeforeUnmount
,
ref
,
}
from
'vue'
}
from
'vue'
import
{
init
as
initChart
,
ECharts
}
from
'echarts/core'
import
{
init
as
initChart
,
ECharts
}
from
'echarts/core'
import
'echarts-wordcloud'
import
'echarts-wordcloud'
import
{
ajax
,
api
}
from
'@/ajax'
export
default
defineComponent
({
export
default
defineComponent
({
name
:
'KeyTask'
,
name
:
'KeyTask'
,
...
@@ -45,34 +46,34 @@ export default defineComponent({
...
@@ -45,34 +46,34 @@ export default defineComponent({
]
]
},
},
},
},
data
:
{
//
data: {
type
:
Array
as
PropType
<
{
name
:
string
;
value
:
number
}[]
>
,
//
type: Array as PropType
<
{
name
:
string
;
value
:
number
}[]
>
,
default
:
()
=>
{
//
default: () => {
return
[
//
return [
{
name
:
'明厨亮灶'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '明厨亮灶', value: 100 * Math.random() },
{
name
:
'民宿群租'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '民宿群租', value: 100 * Math.random() },
{
name
:
'垃圾分类'
,
value
:
120
},
//
{ name: '垃圾分类', value: 120 },
{
name
:
'小型工程纳管'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '小型工程纳管', value: 100 * Math.random() },
{
name
:
'非机动车停放'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '非机动车停放', value: 100 * Math.random() },
{
name
:
'马桶改造'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '马桶改造', value: 100 * Math.random() },
{
name
:
'电梯加装'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '电梯加装', value: 100 * Math.random() },
{
name
:
'居改非'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '居改非', value: 100 * Math.random() },
{
name
:
'无证无照整治'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '无证无照整治', value: 100 * Math.random() },
{
name
:
'楼道堆物'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '楼道堆物', value: 100 * Math.random() },
{
name
:
'党建联建'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '党建联建', value: 100 * Math.random() },
{
name
:
'动迁改造'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '动迁改造', value: 100 * Math.random() },
{
name
:
'文明城区创建'
,
value
:
120
},
//
{ name: '文明城区创建', value: 120 },
// { name: '重塑老城厢', value: 100 * Math.random() },
//
// { name: '重塑老城厢', value: 100 * Math.random() },
{
name
:
'推动商旅文联动'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '推动商旅文联动', value: 100 * Math.random() },
{
name
:
'水环境治理'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '水环境治理', value: 100 * Math.random() },
{
name
:
'供水防涝'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '供水防涝', value: 100 * Math.random() },
{
name
:
'美丽街区'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '美丽街区', value: 100 * Math.random() },
{
name
:
'美丽家园'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '美丽家园', value: 100 * Math.random() },
{
name
:
'非机动车安全管理'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '非机动车安全管理', value: 100 * Math.random() },
{
name
:
'房屋隐患排查'
,
value
:
100
*
Math
.
random
()
},
//
{ name: '房屋隐患排查', value: 100 * Math.random() },
]
//
]
},
//
},
},
//
},
show
:
{
show
:
{
type
:
Boolean
as
PropType
<
boolean
>
,
type
:
Boolean
as
PropType
<
boolean
>
,
default
:
false
,
default
:
false
,
...
@@ -86,6 +87,7 @@ export default defineComponent({
...
@@ -86,6 +87,7 @@ export default defineComponent({
const
sizeRate
=
computed
(()
=>
Math
.
floor
((
screen
.
height
*
1.6
)
/
100
))
const
sizeRate
=
computed
(()
=>
Math
.
floor
((
screen
.
height
*
1.6
)
/
100
))
const
cloudRef
=
shallowRef
<
HTMLElement
|
null
>
(
null
)
const
cloudRef
=
shallowRef
<
HTMLElement
|
null
>
(
null
)
const
myChart
=
shallowRef
<
ECharts
|
null
>
(
null
)
const
myChart
=
shallowRef
<
ECharts
|
null
>
(
null
)
const
data
=
ref
<
any
[]
>
([])
const
init
=
()
=>
{
const
init
=
()
=>
{
if
(
!
cloudRef
.
value
)
return
if
(
!
cloudRef
.
value
)
return
myChart
.
value
=
initChart
(
cloudRef
.
value
)
myChart
.
value
=
initChart
(
cloudRef
.
value
)
...
@@ -97,7 +99,7 @@ export default defineComponent({
...
@@ -97,7 +99,7 @@ export default defineComponent({
series
:
[
series
:
[
{
{
type
:
'wordCloud'
,
type
:
'wordCloud'
,
sizeRange
:
[
sizeRate
.
value
,
sizeRate
.
value
*
2
.2
],
sizeRange
:
[
sizeRate
.
value
,
sizeRate
.
value
*
2
],
rotationRange
:
[
0
,
90
],
rotationRange
:
[
0
,
90
],
rotationStep
:
45
,
rotationStep
:
45
,
gridSize
:
sizeRate
.
value
,
gridSize
:
sizeRate
.
value
,
...
@@ -105,14 +107,14 @@ export default defineComponent({
...
@@ -105,14 +107,14 @@ export default defineComponent({
width
:
'100%'
,
width
:
'100%'
,
height
:
'100%'
,
height
:
'100%'
,
textStyle
:
{
textStyle
:
{
color
:
function
(
{
data
}:
{
data
:
any
}
)
{
color
:
function
(
item
:
any
)
{
// const index = Math.floor(Math.random() * props.color.length)
// const index = Math.floor(Math.random() * props.color.length)
// return props.color[index]
// return props.color[index]
return
`rgba(255,255,255,
${
data
.
value
/
12
0
}
)`
return
`rgba(255,255,255,
${
(
item
?.
data
?.
value
||
0
)
/
10
0
})
`
},
},
fontWeight: 550,
fontWeight: 550,
},
},
data
:
props
.
data
,
data:
data.value
,
},
},
],
],
}
}
...
@@ -135,10 +137,22 @@ export default defineComponent({
...
@@ -135,10 +137,22 @@ export default defineComponent({
watch(
watch(
() => props.show,
() => props.show,
async
(
type
)
=>
{
(type) => {
if (!type) return
if (!type) return
await
nextTick
()
ajax
init
()
.get({
url: api.GET_FOCUS_WORK,
params: { pageSize: 9000 },
showLoading: false,
})
.then((res) => {
const { content = [] } = res?.data || {}
data.value = content.map((item: any) => ({
name: item.focusWorkName,
value: +item.showRate || 0,
}))
init()
})
},
},
{ immediate: true }
{ immediate: true }
)
)
...
...
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