Commit 9a74ec80 authored by 郭铭瑶's avatar 郭铭瑶 🤘

对接部分接口

parent 58a757aa
...@@ -20,11 +20,14 @@ switch (process.env.NODE_ENV) { ...@@ -20,11 +20,14 @@ switch (process.env.NODE_ENV) {
export default { export default {
BASE_URL, BASE_URL,
SOURCE_URL, SOURCE_URL,
TEST: '/service-basicdatasync-ddd/communities',
GET_COMMUNITY_DETAIL: '/service-basicdatasync-ddd/communities',
GET_BUILDING: '/service-basicdatasync-ddd/building', // 门牌幢列表 GET_BUILDING: '/service-basicdatasync-ddd/building', // 门牌幢列表
GET_INDUSTRY_AUTHORITY: '/service-basicdatasync-ddd/indCous', // 业委会列表 GET_INDUSTRY_AUTHORITY: '/service-basicdatasync-ddd/indCous', // 业委会列表
GET_COMMITTEE: '/service-basicdatasync-ddd/residentsCommittees', // 居委会列表 GET_COMMITTEE: '/service-basicdatasync-ddd/residentsCommittees', // 居委会列表
GET_COMPANY: '/service-basicdatasync-ddd/propCompanies', // 物业列表 GET_COMPANY: '/service-basicdatasync-ddd/propCompanies', // 物业列表
GET_CASE: '/service-special-nandong/compairs', // 案件汇总列表 GET_CASE: '/service-special-nandong/compairs', // 案件汇总列表
GET_CASE_DETAIL: '/service-special-nandong/compair', // 案件详情
GET_PUBLICSAFE_RIGHT_GATE: '/service-special-nandong/ironGate/statistical', // 公共安全-右侧-门岗分布 GET_PUBLICSAFE_RIGHT_GATE: '/service-special-nandong/ironGate/statistical', // 公共安全-右侧-门岗分布
GET_PUBLICSAFE_RIGHT_SAFEMAP: '/service-special-nandong/peaceMaps', // 公共安全-右侧-平安地图 GET_PUBLICSAFE_RIGHT_SAFEMAP: '/service-special-nandong/peaceMaps', // 公共安全-右侧-平安地图
GET_PUBLICSAFE_TRUE_PEOPLE: '/service-special-nandong/personnel/statistical', // 公共安全-右侧-实有人口 GET_PUBLICSAFE_TRUE_PEOPLE: '/service-special-nandong/personnel/statistical', // 公共安全-右侧-实有人口
...@@ -78,11 +81,15 @@ export default { ...@@ -78,11 +81,15 @@ export default {
GET_TRACKEVENT: '/service-special-nandong/compairs', // 有求必应-事件跟踪 GET_TRACKEVENT: '/service-special-nandong/compairs', // 有求必应-事件跟踪
GET_CASE_CLASSIFICATION_RANK: '/service-special-nandong/compair/analysis', // 案件分析-分类排行 GET_CASE_CLASSIFICATION_RANK: '/service-special-nandong/compair/analysis', // 案件分析-分类排行
GET_MOREHAPPEN_ADDR: '/service-special-nandong/compair/analysis/addr', // 案件分析-多发地点 GET_MOREHAPPEN_ADDR: '/service-special-nandong/compair/analysis/addr', // 案件分析-多发地点
GET_RESPONSIVITY: '/service-special-nandong/compair/responsivity', // 响应度
GET_ENTRY: '/service-special-nandong/inputUrl', // 业务入口
/** 公共服务 */ /** 公共服务 */
GET_ECOLOGY_LIST: '/service-basicdatasync-ddd/nonResident/ecological', // 生态-衣食住行 GET_ECOLOGY_LIST: '/service-basicdatasync-ddd/nonResident/ecological', // 生态-衣食住行
GET_ECOLOGY_POINTS: '/service-basicdatasync-ddd/nonResidents', // 获取衣食住行撒点
GET_ECOLOGY_CONVENIENT: '/service-special-nandong/convenient/ecological', // 生态-便民设施 GET_ECOLOGY_CONVENIENT: '/service-special-nandong/convenient/ecological', // 生态-便民设施
GET_ECOLOGY_PHOTO: '/service-special-nandong/buildingPhotos', // 生态 - 商业综合体、文保、历保照片 GET_ECOLOGY_PHOTO: '/service-special-nandong/buildingPhotos', // 生态 - 商业综合体、文保、历保照片
GET_ELEV_COUNT: '/service-special-nandong/elevatorAdd/statistical', // 美丽家园-电梯加装统计数字 GET_ELEV_COUNT: '/service-special-nandong/elevatorAdd/statistical', // 美丽家园-电梯加装统计数字
GET_ELEV_LIST: '/service-special-nandong/elevatorAdds', // 美丽家园 - 根据名称查询列表 GET_ELEV_LIST: '/service-special-nandong/elevatorAdds', // 美丽家园 - 根据名称查询列表
GET_TOILET: '/service-special-nandong/toilet/renovation', // 马桶改造
} }
...@@ -8,7 +8,13 @@ ...@@ -8,7 +8,13 @@
draggable="false" draggable="false"
@click="closeDrawer" @click="closeDrawer"
/> />
<div class="content"><slot /></div> <div class="wrap">
<img class="dot" src="@/assets/images/dot2.png" />
<img class="dot" src="@/assets/images/dot2.png" />
<img class="dot" src="@/assets/images/dot2.png" />
<img class="dot" src="@/assets/images/dot2.png" />
<div class="content"><slot /></div>
</div>
</div> </div>
</MyAnimate> </MyAnimate>
</teleport> </teleport>
...@@ -55,14 +61,12 @@ export default defineComponent({ ...@@ -55,14 +61,12 @@ export default defineComponent({
<style lang="stylus" scoped> <style lang="stylus" scoped>
@import '../main.styl' @import '../main.styl'
.my-drawer .my-drawer
background url('@/assets/images/drawer-bg.png') 100% / 100% 100% no-repeat
background-color $table-title-bg background-color $table-title-bg
position fixed position fixed
top .45rem top .45rem
right .05rem right .05rem
bottom @right bottom @right
z-index 9999 z-index 9999
padding .15rem .25rem
$blur() $blur()
color #fff color #fff
.close-btn .close-btn
...@@ -76,4 +80,29 @@ export default defineComponent({ ...@@ -76,4 +80,29 @@ export default defineComponent({
transition transform .3s ease transition transform .3s ease
&:hover &:hover
transform scale(1.2) transform scale(1.2)
.wrap
position relative
border .01rem dotted rgba(47,134,238, .6)
margin .06rem
padding .06rem
.dot
position absolute
width .1rem
height @width
&:nth-of-type(1)
left 0
top 0
transform translate(-50%, -50%)
&:nth-of-type(2)
right 0
top 0
transform translate(50%, -50%)
&:nth-of-type(3)
left 0
bottom 0
transform translate(-50%, 50%)
&:nth-of-type(4)
right 0
bottom 0
transform translate(50%, 50%)
</style> </style>
...@@ -105,7 +105,7 @@ export default defineComponent({ ...@@ -105,7 +105,7 @@ export default defineComponent({
if (formatter && key.match(/>(\w*)[#\*:]?/)) { if (formatter && key.match(/>(\w*)[#\*:]?/)) {
return formatter[RegExp.$1](data[dataKey]) return formatter[RegExp.$1](data[dataKey])
} }
return data[dataKey] || '' return data[dataKey] || ''
} }
const calcAlign = (key: string): string => { const calcAlign = (key: string): string => {
......
...@@ -15,13 +15,8 @@ ...@@ -15,13 +15,8 @@
class="my-modal" class="my-modal"
:style="`width:${width};transform: translateX(${offset}) translateY(${translateY})`" :style="`width:${width};transform: translateX(${offset}) translateY(${translateY})`"
> >
<span class="edge left-top" />
<span class="edge right-top" />
<span class="edge left-bottom" />
<span class="edge right-bottom" />
<div class="inner"> <div class="inner">
<head> <head>
<img draggable="false" src="@/assets/images/modal-head-tri.png" />
<p>{{ title }}</p> <p>{{ title }}</p>
<img <img
draggable="false" draggable="false"
...@@ -29,8 +24,14 @@ ...@@ -29,8 +24,14 @@
@click.prevent="closeModal" @click.prevent="closeModal"
/> />
</head> </head>
<div class="content"> <div class="wrap">
<slot /> <img class="dot" src="@/assets/images/dot2.png" />
<img class="dot" src="@/assets/images/dot2.png" />
<img class="dot" src="@/assets/images/dot2.png" />
<img class="dot" src="@/assets/images/dot2.png" />
<div class="content">
<slot />
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -78,7 +79,7 @@ export default defineComponent({ ...@@ -78,7 +79,7 @@ export default defineComponent({
}, },
maskClosable: { maskClosable: {
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: true, default: false,
}, },
}, },
emits: ['update:modelValue', 'close'], emits: ['update:modelValue', 'close'],
...@@ -108,70 +109,77 @@ export default defineComponent({ ...@@ -108,70 +109,77 @@ export default defineComponent({
.my-modal .my-modal
color #fff color #fff
z-index 99999 z-index 99999
padding 0.04rem padding 0.06rem
background transparent background transparent
position relative position relative
box-sizing border-box
$blur(0.01rem) $blur(0.01rem)
.edge
display block
position absolute
width 0.1rem
height @width
border 0.01rem solid $secondary-color
&.left-top
top 0
left 0
border-right none
border-bottom none
&.right-top
top 0
right 0
border-left none
border-bottom none
&.left-bottom
bottom 0
left 0
border-right none
border-top none
&.right-bottom
bottom 0
right 0
border-left none
border-top none
.inner .inner
$blur() $blur()
background rgba(6, 34, 67, 0.8) background rgba(29, 42, 65, 0.9)
border 0.01rem solid rgba(91, 213, 255, 0.3) padding-bottom .02rem
box-sizing border-box
head head
height 0.28rem min-height .24rem
background url('@/assets/images/modal-head-bg.png') 100% / 100% 100% no-repeat box-sizing border-box
display flex display flex
align-items center align-items center
justify-content space-between
background linear-gradient(to right, rgba(59,85,102,.8), transparent)
position relative position relative
border-bottom .01rem solid rgba(105,110,114,.3)
margin-bottom .05rem
padding 0 .1rem
box-sizing border-box
&:before
content ''
display block
position absolute
left 0
width .02rem
height 60%
background #FADB71
>p >p
font-size 0.14rem font-size 0.14rem
font-family $font-zcool font-family $font-zcool
text-indent 0.14rem
line-height 1.5 line-height 1.5
>img >img
width 0.14rem width 0.1rem
height @width height @width
cursor pointer
transition transform 0.3s ease-in-out
&:hover
transform rotate(180deg)
.wrap
position relative
border .01rem dotted rgba(47,134,238, .6)
margin .06rem
padding .06rem
.dot
position absolute position absolute
width .1rem
height @width
&:nth-of-type(1) &:nth-of-type(1)
width 0.24rem left 0
height @width top 0
left -0.095rem transform translate(-50%, -50%)
&:nth-of-type(2) &:nth-of-type(2)
right 0.05rem right 0
cursor pointer top 0
transition transform 0.3s ease-in-out transform translate(50%, -50%)
&:hover &:nth-of-type(3)
transform rotate(180deg) left 0
.content bottom 0
min-height 30vh transform translate(-50%, 50%)
max-height 80vh &:nth-of-type(4)
padding 0.1rem right 0
overflow-y auto bottom 0
overflow-x hidden transform translate(50%, 50%)
font-size 0.1rem .content
// min-height 30vh
max-height 80vh
overflow-y auto
overflow-x hidden
font-size 0.1rem
box-sizing border-box
</style> </style>
...@@ -8,21 +8,28 @@ ...@@ -8,21 +8,28 @@
<span v-if="addition.unit">{{ addition.unit }}</span> <span v-if="addition.unit">{{ addition.unit }}</span>
<img src="@/assets/images/title-dec.png" /> <img src="@/assets/images/title-dec.png" />
</div> </div>
<input <div v-if="searchAble" class="search-container">
v-if="searchAble" <input
v-model="inputValue" v-model="inputValue"
:class="{ open: isOpened }" :class="{ open: isOpened }"
class="search-bar" class="search-bar"
type="text" type="text"
@keypress.enter="handleSearch" @keypress.enter="handleSearch"
/> />
<img <img
v-if="searchAble" v-show="isOpened"
class="search-btn" class="close-btn"
src="@/assets/images/search.png" src="@/assets/images/close-btn2.png"
draggable="false" draggable="false"
@click.prevent="handleOpenSearchBar" @click.prevent="handleClose"
/> />
<img
class="search-btn"
src="@/assets/images/search.png"
draggable="false"
@click.prevent="handleOpenSearchBar"
/>
</div>
</div> </div>
<!-- <img src="@/assets/images/sub-dot.png" draggable="false" /> --> <!-- <img src="@/assets/images/sub-dot.png" draggable="false" /> -->
<span class="dot" /> <span class="dot" />
...@@ -52,13 +59,17 @@ export default defineComponent({ ...@@ -52,13 +59,17 @@ export default defineComponent({
default: false, default: false,
}, },
}, },
emits: ['search'], emits: ['search', 'close'],
setup(props, ctx) { setup(_, ctx) {
const isOpened = ref(false) const isOpened = ref(false)
const inputValue = ref('') const inputValue = ref('')
const handleSearch = () => { const handleSearch = () => {
ctx.emit('search', inputValue.value.trim()) ctx.emit('search', inputValue.value.trim())
} }
const handleClose = () => {
inputValue.value = ''
ctx.emit('close')
}
const handleOpenSearchBar = () => { const handleOpenSearchBar = () => {
if (!isOpened.value) { if (!isOpened.value) {
isOpened.value = true isOpened.value = true
...@@ -74,6 +85,7 @@ export default defineComponent({ ...@@ -74,6 +85,7 @@ export default defineComponent({
isOpened, isOpened,
inputValue, inputValue,
handleSearch, handleSearch,
handleClose,
handleOpenSearchBar, handleOpenSearchBar,
} }
}, },
...@@ -110,34 +122,45 @@ export default defineComponent({ ...@@ -110,34 +122,45 @@ export default defineComponent({
img img
width .3rem width .3rem
margin-left .1rem margin-left .1rem
.search-bar .search-container
display block display flex
width 0 align-items center
height .16rem position relative
background rgba(0,0,0,0.1) .search-bar
border-radius .02rem display block
outline none width 0
margin 0 .05rem height .16rem
padding 0 background rgba(0,0,0,0.1)
box-sizing border-box border-radius .02rem
font-family $font-din outline none
font-size .1rem margin 0 .05rem
transition all .3s ease-in-out padding 0
opacity 0 box-sizing border-box
&.open font-family $font-din
width 1rem font-size .1rem
padding .02rem .05rem transition all .3s ease-in-out
border .01rem solid $blue opacity 0
opacity 1 &.open
.search-btn width 1.6rem
width .14rem padding .02rem .16rem .02rem .05rem
height @width border .01rem solid $blue
cursor pointer opacity 1
transition transform .3s ease-in-out .search-btn
&:hover width .14rem
transform scale(1.3) rotate(360deg) height @width
// >img cursor pointer
// width .6rem transition transform .2s ease-in-out
&:hover
transform scale(1.3) rotate(360deg)
.close-btn
width .08rem
height @width
cursor pointer
position absolute
right .24rem
transition transform .2s ease-in-out
&:hover
transform scale(1.3) rotate(360deg)
>.dot >.dot
display inline-block display inline-block
width 0 width 0
......
<template> <template>
<div class="my-table"> <div class="my-table" :class="{ stripe: stripe }">
<div class="table-title"> <div class="table-title">
<div <div
v-for="(title, index) in layout.header" v-for="(title, index) in layout.header"
...@@ -77,6 +77,10 @@ export default defineComponent({ ...@@ -77,6 +77,10 @@ export default defineComponent({
type: Boolean as PropType<boolean>, type: Boolean as PropType<boolean>,
default: false, default: false,
}, },
stripe: {
type: Boolean as PropType<boolean>,
default: false,
},
}, },
emits: ['select'], emits: ['select'],
setup(props, ctx) { setup(props, ctx) {
...@@ -154,6 +158,21 @@ export default defineComponent({ ...@@ -154,6 +158,21 @@ export default defineComponent({
<style lang="stylus" scoped> <style lang="stylus" scoped>
@import '../main.styl' @import '../main.styl'
.my-table .my-table
position relative
&.stripe
.table-title
background $table-title-bg
color $blue
box-shadow none
border-radius 0
.table-content
>div
background $table-content-bg
box-shadow none
border-radius 0
margin-top 0
&:nth-child(odd)
background transparent
$full() $full()
p p
padding .05rem padding .05rem
...@@ -161,21 +180,27 @@ export default defineComponent({ ...@@ -161,21 +180,27 @@ export default defineComponent({
flex 1 flex 1
box-sizing border-box box-sizing border-box
.table-title .table-title
$blur(0.1rem)
display flex display flex
background $table-title-bg background rgba(114,123,132, .5)
color $blue box-shadow 0 0 .04rem 0 rgba(44,51,70,.65), inset 0 .01rem .02rem 0 rgba(204,204,204,.2)
border-radius .04rem
font-weight bold font-weight bold
font-size .12rem
box-sizing inherit box-sizing inherit
position sticky
top 0
>div >div
box-sizing inherit box-sizing inherit
.table-content .table-content
>div >div
display flex display flex
align-items center align-items center
background $table-content-bg
box-sizing inherit box-sizing inherit
&:nth-child(odd) background rgba(70,83,97,.45)
background transparent box-shadow 0 0 .04rem 0 rgba(44,51,70,.65)
margin-top .06rem
border-radius .04rem
&.selectable &.selectable
cursor pointer cursor pointer
&:hover &:hover
......
...@@ -37,8 +37,8 @@ $card-title-color = #fff ...@@ -37,8 +37,8 @@ $card-title-color = #fff
$card-title-size = .14rem $card-title-size = .14rem
$card-border = .01rem solid $primary-border $card-border = .01rem solid $primary-border
$table-title-bg =rgba(2,27,53,.5) $table-title-bg =rgba(2,27,53,.8)
$table-content-bg = rgba(2,27,53,.2) $table-content-bg = rgba(2,27,53,.6)
$table-content-hover-color = $primary-color $table-content-hover-color = $primary-color
$table-content-hover-bg = $primary-bg $table-content-hover-bg = $primary-bg
......
...@@ -19,7 +19,7 @@ export default { ...@@ -19,7 +19,7 @@ export default {
bxmaintainType: '1', bxmaintainType: '1',
status_in: '待派遣,已派单', status_in: '待派遣,已派单',
acceptTime_gte: today, acceptTime_gte: today,
pageSize: 1000, pageSize: 100,
}) })
dispatch('GET_TODAYCASE') dispatch('GET_TODAYCASE')
dispatch('GET_STAGECASE') dispatch('GET_STAGECASE')
...@@ -27,7 +27,7 @@ export default { ...@@ -27,7 +27,7 @@ export default {
dispatch('GET_TRACKEVENT', { dispatch('GET_TRACKEVENT', {
status_in: '待处置,已签收', status_in: '待处置,已签收',
acceptTime_gte: today, acceptTime_gte: today,
pageSize: 1000, pageSize: 100,
}) })
dispatch('GET_CASE_CLASSIFICATION_RANK', { dispatch('GET_CASE_CLASSIFICATION_RANK', {
managementType: '综合', managementType: '综合',
...@@ -35,6 +35,8 @@ export default { ...@@ -35,6 +35,8 @@ export default {
dispatch('GET_MOREHAPPEN_ADDR', { dispatch('GET_MOREHAPPEN_ADDR', {
managementType: '综合', managementType: '综合',
}) })
dispatch('GET_RESPONSIVITY')
dispatch('GET_ENTRY')
dispatch('GET_PUBLICSAFE_SOS_MATERIAL') dispatch('GET_PUBLICSAFE_SOS_MATERIAL')
dispatch('GET_PUBLICSAFE_OUTHOUSEWALL') dispatch('GET_PUBLICSAFE_OUTHOUSEWALL')
dispatch('GET_PUBLICSAFE_BUILDINGS') dispatch('GET_PUBLICSAFE_BUILDINGS')
...@@ -66,9 +68,15 @@ export default { ...@@ -66,9 +68,15 @@ export default {
}, },
// 案件汇总列表 // 案件汇总列表
async getCaseList({ commit }: { commit: Commit }): Promise<void> { async getCaseList(
{ commit }: { commit: Commit },
address = null
): Promise<void> {
const { content } = ( const { content } = (
await ajax.get({ url: api.GET_CASE, params: { pageSize: 100 } }) await ajax.get({
url: api.GET_CASE,
params: { pageSize: 200, address_l: address },
})
).data ).data
commit('SET_CASE_LIST', content) commit('SET_CASE_LIST', content)
}, },
...@@ -161,7 +169,7 @@ export default { ...@@ -161,7 +169,7 @@ export default {
commit('SET_PUBLICSAFE_GATESENTRY_ZHIGUANGONGFANG', publicHouse) commit('SET_PUBLICSAFE_GATESENTRY_ZHIGUANGONGFANG', publicHouse)
}, },
// 公共服务 - 门岗值守 - 平安地图 // 公共安全 - 门岗值守 - 平安地图
async GET_PUBLICSAFE_RIGHT_SAFEMAP({ async GET_PUBLICSAFE_RIGHT_SAFEMAP({
commit, commit,
}: { }: {
...@@ -263,7 +271,7 @@ export default { ...@@ -263,7 +271,7 @@ export default {
commit('SET_PUBLICSAFE_OUTHOUSEWALL', content) commit('SET_PUBLICSAFE_OUTHOUSEWALL', content)
}, },
// 公共服务 - 重点关注楼宇 // 公共安全 - 重点关注楼宇
async GET_PUBLICSAFE_BUILDINGS({ async GET_PUBLICSAFE_BUILDINGS({
commit, commit,
}: { }: {
...@@ -291,6 +299,18 @@ export default { ...@@ -291,6 +299,18 @@ export default {
const { content } = (await ajax.get({ url: api.GET_ECOLOGY_LIST })).data const { content } = (await ajax.get({ url: api.GET_ECOLOGY_LIST })).data
commit('SET_ECOLOGY_LIST', content) commit('SET_ECOLOGY_LIST', content)
}, },
async getEcologyPoints(
{ commit }: { commit: Commit },
name: string
): Promise<void> {
const { content } = (
await ajax.get({
url: api.GET_ECOLOGY_POINTS,
params: { labelName: name },
})
).data
commit('SET_ECOLOGY_POINTS', content)
},
async getEcologyConvenient({ commit }: { commit: Commit }): Promise<void> { async getEcologyConvenient({ commit }: { commit: Commit }): Promise<void> {
const { content } = ( const { content } = (
await ajax.get({ url: api.GET_ECOLOGY_CONVENIENT }) await ajax.get({ url: api.GET_ECOLOGY_CONVENIENT })
...@@ -401,7 +421,7 @@ export default { ...@@ -401,7 +421,7 @@ export default {
const { content } = ( const { content } = (
await ajax.get({ await ajax.get({
url: api.GET_COMBINE_LIST, url: api.GET_COMBINE_LIST,
params: { bigscreenCommunityId: id, pageSize: 1000 }, params: { bigscreenCommunityId: id, pageSize: 200 },
}) })
).data ).data
commit('SET_COMBINE_DATA', content) commit('SET_COMBINE_DATA', content)
...@@ -528,6 +548,12 @@ export default { ...@@ -528,6 +548,12 @@ export default {
}, },
/** 公共管理 */ /** 公共管理 */
// 业务入口
async GET_ENTRY({ commit }: { commit: Commit }): Promise<void> {
const { content } = (await ajax.get({ url: api.GET_ENTRY })).data
commit('SET_ENTRY', content)
},
async GET_YOUSUBIDA_RANK({ commit }: { commit: Commit }): Promise<void> { async GET_YOUSUBIDA_RANK({ commit }: { commit: Commit }): Promise<void> {
// 有诉必答 - 占比 // 有诉必答 - 占比
const { content } = (await ajax.get({ url: api.GET_YOUSUBIDA_RANK })).data const { content } = (await ajax.get({ url: api.GET_YOUSUBIDA_RANK })).data
...@@ -684,4 +710,14 @@ export default { ...@@ -684,4 +710,14 @@ export default {
).data ).data
commit('SET_MOREHAPPEN_ADDR', content) commit('SET_MOREHAPPEN_ADDR', content)
}, },
//响应度
async GET_RESPONSIVITY({ commit }: { commit: Commit }): Promise<void> {
const { content } = (
await ajax.get({
url: api.GET_RESPONSIVITY,
})
).data
commit('SET_RESPONSIVITY', content)
},
} }
...@@ -82,6 +82,19 @@ export interface ElevCountProp { ...@@ -82,6 +82,19 @@ export interface ElevCountProp {
num: number num: number
} }
export interface ResponsivityProp {
date: string
statistical: {
totalNum: number
reachNum: number
}
}
export interface EntryProp {
inputName: string
url: string
}
export interface GlobalStateProps { export interface GlobalStateProps {
showLoading: boolean showLoading: boolean
curView: ViewType curView: ViewType
...@@ -142,11 +155,14 @@ export interface GlobalStateProps { ...@@ -142,11 +155,14 @@ export interface GlobalStateProps {
analysisRank: Partial<DutyDataProp> analysisRank: Partial<DutyDataProp>
moreHappenAddr: Partial<DutyDataProp> moreHappenAddr: Partial<DutyDataProp>
ecologyList: EcologyListProp[] ecologyList: EcologyListProp[]
ecologyPoints: any[]
ecologyConvenient: EcologyListProp[] ecologyConvenient: EcologyListProp[]
ecologyPhoto: EcologyPhotoProp[] ecologyPhoto: EcologyPhotoProp[]
oldService: ForOldProp[] oldService: ForOldProp[]
lifeConvenient: EcologyListProp[] lifeConvenient: EcologyListProp[]
elevCount: ElevCountProp[] elevCount: ElevCountProp[]
responsivity: ResponsivityProp[]
entry: EntryProp[]
} }
export default createStore<GlobalStateProps>({ export default createStore<GlobalStateProps>({
......
...@@ -12,6 +12,8 @@ import { ...@@ -12,6 +12,8 @@ import {
EcologyPhotoProp, EcologyPhotoProp,
ForOldProp, ForOldProp,
ElevCountProp, ElevCountProp,
ResponsivityProp,
EntryProp,
} from './index' } from './index'
export default { export default {
...@@ -203,6 +205,9 @@ export default { ...@@ -203,6 +205,9 @@ export default {
}, },
/** 公共管理 */ /** 公共管理 */
SET_ENTRY(state: GlobalStateProps, data: EntryProp[]): void {
state.entry = data
},
// 有诉必答-占比 // 有诉必答-占比
SET_YOUSUBIDA_RANK(state: GlobalStateProps, data: YousubidaRankProp): void { SET_YOUSUBIDA_RANK(state: GlobalStateProps, data: YousubidaRankProp): void {
state.yousubidaRank = data state.yousubidaRank = data
...@@ -257,11 +262,18 @@ export default { ...@@ -257,11 +262,18 @@ export default {
SET_MOREHAPPEN_ADDR(state: GlobalStateProps, data: DutyDataProp): void { SET_MOREHAPPEN_ADDR(state: GlobalStateProps, data: DutyDataProp): void {
state.moreHappenAddr = data state.moreHappenAddr = data
}, },
// 响应度
SET_RESPONSIVITY(state: GlobalStateProps, data: ResponsivityProp[]): void {
state.responsivity = data
},
/** 公共服务 - 生态 */ /** 公共服务 - 生态 */
SET_ECOLOGY_LIST(state: GlobalStateProps, data: EcologyListProp[]): void { SET_ECOLOGY_LIST(state: GlobalStateProps, data: EcologyListProp[]): void {
state.ecologyList = data state.ecologyList = data
}, },
SET_ECOLOGY_POINTS(state: GlobalStateProps, data: any[]): void {
state.ecologyPoints = data
},
SET_ECOLOGY_CONVENIENT( SET_ECOLOGY_CONVENIENT(
state: GlobalStateProps, state: GlobalStateProps,
data: EcologyListProp[] data: EcologyListProp[]
......
...@@ -220,9 +220,12 @@ export default { ...@@ -220,9 +220,12 @@ export default {
analysisRank: { day: [], week: [], month: [] }, analysisRank: { day: [], week: [], month: [] },
moreHappenAddr: { day: [], week: [], month: [] }, moreHappenAddr: { day: [], week: [], month: [] },
ecologyList: [], ecologyList: [],
ecologyPoints: [],
ecologyConvenient: [], ecologyConvenient: [],
ecologyPhoto: [], ecologyPhoto: [],
oldService: [], oldService: [],
lifeConvenient: [], lifeConvenient: [],
elevCount: [], elevCount: [],
responsivity: [],
entry: [],
} as GlobalStateProps } as GlobalStateProps
...@@ -165,6 +165,8 @@ export default defineComponent({ ...@@ -165,6 +165,8 @@ export default defineComponent({
} }
const map = ref<any>(null) const map = ref<any>(null)
onMounted(async () => { onMounted(async () => {
console.log('route', route)
curId.value = route.query.id || communityOptions.value[0].type curId.value = route.query.id || communityOptions.value[0].type
initData(curId.value) initData(curId.value)
store.commit( store.commit(
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
</a-tooltip> </a-tooltip>
</template> </template>
</div> </div>
<m-modal v-model="searchModal" title="搜索" width="30%" offset="-70%"> <m-modal v-model="searchModal" title="搜索" width="20%" offset="-70%">
<div id="modal-search-bar"> <div id="modal-search-bar">
<span class="edge left-top" /> <span class="edge left-top" />
<span class="edge right-top" /> <span class="edge right-top" />
...@@ -29,30 +29,35 @@ ...@@ -29,30 +29,35 @@
<a-select v-model:value="searchType"> <a-select v-model:value="searchType">
<a-select-option value="case">案件</a-select-option> <a-select-option value="case">案件</a-select-option>
<a-select-option value="population">人口</a-select-option> <a-select-option value="population">人口</a-select-option>
<a-select-option value="house">房屋</a-select-option>
</a-select> </a-select>
<a-input v-model:value="searchKey" placeholder="请输入搜索关键词" /> <a-input
v-model:value="searchKey"
placeholder="请输入搜索关键词"
@pressEnter="handleSearch"
/>
</a-input-group> </a-input-group>
<div class="search-btn">搜索</div> <div class="search-btn" @click="handleSearch">搜索</div>
</div> </div>
<div class="modal-case-content"> <div class="modal-case-content">
<div <template v-if="caseList.length > 0">
v-for="(item, i) in caseList" <div v-for="(item, i) in caseList" :key="i" @click="handleSelect(item)">
:key="i" <span :class="getStyle(item.managementType)">{{
:class="{ done: item.status === 1 }" item.managementType
> }}</span>
<div> <p>{{ item.address }}</p>
<p>
<span>{{ item.troubleType }}</span>
{{ item.address }}
</p>
<p>{{ item.acceptTime }} ~ {{ item.backTime }}</p>
</div> </div>
<div>{{ item.reportContent }}</div> </template>
<div v-if="item.status === '已结'" class="flag">已结案</div> <m-empty v-else />
<div v-else class="flag">处置中</div>
</div>
</div> </div>
</m-modal> </m-modal>
<m-drawer v-model="caseModal">
<CaseDrawer
:community-info="communityInfo"
:property-info="propertyInfo"
:case-info="caseInfo"
/>
</m-drawer>
</template> </template>
<script lang="ts"> <script lang="ts">
...@@ -68,10 +73,13 @@ import d2 from '@/assets/images/2d.png' ...@@ -68,10 +73,13 @@ import d2 from '@/assets/images/2d.png'
import d3 from '@/assets/images/3d.png' import d3 from '@/assets/images/3d.png'
import zoomIn from '@/assets/images/zoom-in.png' import zoomIn from '@/assets/images/zoom-in.png'
import zoomOut from '@/assets/images/zoom-out.png' import zoomOut from '@/assets/images/zoom-out.png'
import CaseDrawer from '@/view/drawers/case-drawer.vue'
import store from '@/store' import store from '@/store'
import { ajax, api } from '@/ajax'
export default defineComponent({ export default defineComponent({
name: 'MapBtns', name: 'MapBtns',
components: { CaseDrawer },
emits: ['full', 'change', 'zoom'], emits: ['full', 'change', 'zoom'],
setup(_, ctx) { setup(_, ctx) {
const curViewType = computed(() => store.state.curView.type) const curViewType = computed(() => store.state.curView.type)
...@@ -81,7 +89,7 @@ export default defineComponent({ ...@@ -81,7 +89,7 @@ export default defineComponent({
? { key: '3D', icon: d3, title: '开启3D地图' } ? { key: '3D', icon: d3, title: '开启3D地图' }
: { key: '2D', icon: d2, title: '开启2D地图' } : { key: '2D', icon: d2, title: '开启2D地图' }
const list = [ const list = [
// { key: 'search', icon: btn1 }, { key: 'search', icon: btn1 },
{ key: 'in', icon: zoomIn, title: '放大地图' }, { key: 'in', icon: zoomIn, title: '放大地图' },
{ key: 'out', icon: zoomOut, title: '缩小地图' }, { key: 'out', icon: zoomOut, title: '缩小地图' },
{ key: 'full', icon: btn2, title: '全屏' }, { key: 'full', icon: btn2, title: '全屏' },
...@@ -98,6 +106,8 @@ export default defineComponent({ ...@@ -98,6 +106,8 @@ export default defineComponent({
}) })
const fullScreen = ref(false) const fullScreen = ref(false)
const searchModal = ref(false) const searchModal = ref(false)
const searchType = ref('case')
const searchKey = ref('')
const handleClick = (key: string) => { const handleClick = (key: string) => {
switch (key) { switch (key) {
case '3D': case '3D':
...@@ -112,6 +122,9 @@ export default defineComponent({ ...@@ -112,6 +122,9 @@ export default defineComponent({
break break
case 'search': case 'search':
searchModal.value = true searchModal.value = true
searchKey.value = ''
searchType.value = 'case'
store.dispatch('getCaseList')
break break
case 'in': case 'in':
case 'out': case 'out':
...@@ -127,8 +140,6 @@ export default defineComponent({ ...@@ -127,8 +140,6 @@ export default defineComponent({
break break
} }
} }
const searchType = ref('case')
const searchKey = ref('')
const caseList = computed(() => store.state.caseList) const caseList = computed(() => store.state.caseList)
const options = computed(() => { const options = computed(() => {
if (curViewType.value === 'street') { if (curViewType.value === 'street') {
...@@ -151,6 +162,45 @@ export default defineComponent({ ...@@ -151,6 +162,45 @@ export default defineComponent({
[() => curViewType.value, () => store.state.curMapType], [() => curViewType.value, () => store.state.curMapType],
() => (checkboxValues.value = []) () => (checkboxValues.value = [])
) )
const handleSearch = () => {
const address = searchKey.value
store.dispatch('getCaseList', address)
}
const getStyle = (type: string): string => {
switch (type) {
case '小区':
return 'green'
case '街面':
return 'yellow'
case '综合':
return 'blue'
default:
return ''
}
}
const caseModal = ref(false)
const communityInfo = ref(null)
const propertyInfo = ref(null)
const caseInfo = ref(null)
const handleSelect = async (item: any) => {
const { content } = (
await ajax.get({ url: `${api.GET_CASE_DETAIL}/${item.id}` })
).data
propertyInfo.value = content
if (item.communityId) {
const { content } = (
await ajax.get({
url: api.GET_COMMUNITY_DETAIL,
params: { sectId: item.communityId },
})
).data
communityInfo.value = content && content[0]
}
caseModal.value = true
}
return { return {
btns, btns,
fullScreen, fullScreen,
...@@ -163,6 +213,13 @@ export default defineComponent({ ...@@ -163,6 +213,13 @@ export default defineComponent({
checkboxValues, checkboxValues,
handleChange, handleChange,
curViewType, curViewType,
handleSearch,
getStyle,
handleSelect,
caseModal,
communityInfo,
propertyInfo,
caseInfo,
} }
}, },
}) })
...@@ -252,48 +309,37 @@ $bg = rgba(6,34,67,.4) ...@@ -252,48 +309,37 @@ $bg = rgba(6,34,67,.4)
font-weight bold font-weight bold
text-decoration underline text-decoration underline
.modal-case-content .modal-case-content
max-height 60vh
overflow-y auto
overflow-x hidden
>div >div
position relative display flex
padding .1rem align-items center
border $border background $table-content-bg
border-left .02rem solid $secondary-color padding .04rem
margin-bottom .1rem box-sizing border-box
overflow hidden cursor pointer
&.done &:nth-of-type(odd)
border-left-color #27C5A2 background transparent
.flag &:hover
background #27C5A2 background $table-content-title
>div color $secondary-color
&:nth-of-type(1) >span
border-bottom $border display inline-block
padding-bottom .1rem border .01rem solid #fff
margin-bottom .1rem border-radius .02rem
p font-size .08rem
span padding 0 .02rem
display inline-block margin-right .1rem
color orange &.yellow
border .01rem solid orange color $yellow
border-radius .02rem border-color @color
margin-right .1rem &.green
padding 0 .03rem color $green
font-size .08rem border-color @color
&:last-child &.blue
color #aaa color $blue
font-size .08rem border-color @color
margin-top .05rem
.flag
background $secondary-color
position absolute
top -0.08rem
right -0.28rem
transform rotate(45deg)
height .4rem
width .8rem
display flex
align-items flex-end
justify-content center
font-weight bold
padding-bottom .02rem
</style> </style>
<style lang="stylus" scoped> <style lang="stylus" scoped>
.map-btns .map-btns
......
<template> <template>
<div class="sub-title"> <div class="sub-title">
<p><slot /></p> <p><slot /></p>
<span /> <img src="@/assets/images/title-dec.png" />
<p @click="clickSecTitle"><slot name="secTitle" /></p> <p @click="clickSecTitle"><slot name="secTitle" /></p>
</div> </div>
</template> </template>
...@@ -31,12 +31,9 @@ export default defineComponent({ ...@@ -31,12 +31,9 @@ export default defineComponent({
align-items center align-items center
margin 0.04rem 0 margin 0.04rem 0
p p
color $secondary-color font-size .12rem
margin-right 0.1rem font-family $font-zcool
font-weight bold img
span width .26rem
flex 1 margin-left .1rem
display block
height 0.01rem
background $primary-border
</style> </style>
<template> <template>
<div class="case-drawer"> <div class="case-drawer">
<m-card title="房屋档案"> <m-card title="相关案件">
<SubTitle>小区信息</SubTitle> <SubTitle>小区信息</SubTitle>
<m-form <m-form
:template="[ :template="[
'name:小区名称', 'stNameFrst:小区名称',
'address:小区地址', 'address:小区地址',
'belong:所属居委会', 'cmtName:所属居委会',
'buildingNum:总门牌幢数', 'totUnits:总门牌幢数',
'roomNum:总户数', 'totHous:总户数',
'buidlingArea:总建筑面积', 'stCnstArea:总建筑面积',
'area:占地面积', 'landArea:占地面积',
'rang:小区四至范围', 'range:小区四至范围',
'excludeRang:小区四至范围不包括', 'stNotcsparea:小区四至范围不包括',
]" ]"
:data="formData" :data="communityData"
label-width="1.4rem" label-width="1.4rem"
/> />
<SubTitle>物业信息</SubTitle> <SubTitle>物业信息</SubTitle>
<m-form <m-form
:template="[ :template="[
'name:小区名称', 'cspName:物业企业名称',
'address:小区地址', 'hpbName:注册区县',
'belong:所属居委会', 'registerAddress:注册地址',
'buildingNum:总门牌幢数', 'orgCode:组织机构代码',
'roomNum:总户数', 'legalRepName:法人代表',
'buidlingArea:总建筑面积', 'cspContacter:企业联系人',
'area:占地面积', 'cspTel:企业联系人电话',
'rang:小区四至范围', 'cspFax:企业联系人传真',
'excludeRang:小区四至范围不包括', 'bizLicenseValidDate:营业执照有效期',
'bizLicenseCode:营业执照号',
]" ]"
:data="formData" :data="propertyData"
label-width="1.4rem" label-width="1.4rem"
/> />
</m-card> </m-card>
...@@ -56,7 +57,7 @@ ...@@ -56,7 +57,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref } from 'vue' import { computed, defineComponent, PropType, ref } from 'vue'
import SubTitle from '../components/sub-title.vue' import SubTitle from '../components/sub-title.vue'
import detail1 from '@/assets/images/case-detail1.png' import detail1 from '@/assets/images/case-detail1.png'
import detail2 from '@/assets/images/case-detail2.png' import detail2 from '@/assets/images/case-detail2.png'
...@@ -64,7 +65,45 @@ import detail2 from '@/assets/images/case-detail2.png' ...@@ -64,7 +65,45 @@ import detail2 from '@/assets/images/case-detail2.png'
export default defineComponent({ export default defineComponent({
name: 'CaseDrawer', name: 'CaseDrawer',
components: { SubTitle }, components: { SubTitle },
setup() { props: {
communityInfo: {
type: Object as PropType<{ [key: string]: any }>,
required: true,
},
propertyInfo: {
type: Object as PropType<{ [key: string]: any }>,
required: true,
},
caseInfo: {
type: Object as PropType<{ [key: string]: any }>,
required: true,
},
},
setup(props) {
const communityData = computed(() => {
const { communityInfo, propertyInfo } = props
const keys = [
{ name: '北', key: 'stCspNorth' },
{ name: '南', key: 'stCspSouth' },
{ name: '西', key: 'getStCspWest' },
{ name: '东', key: 'stCspEast' },
]
const range = keys.map((item) =>
communityInfo && communityInfo[item.key]
? item.name + communityInfo[item.key]
: ''
)
return {
...communityInfo,
address: propertyInfo.address,
range: range.join(','),
}
})
const propertyData = computed(() => {
console.log(props.propertyInfo)
return props.propertyInfo
})
const formData = ref({ const formData = ref({
name: '测试文字', name: '测试文字',
address: '测试文字', address: '测试文字',
...@@ -106,6 +145,8 @@ export default defineComponent({ ...@@ -106,6 +145,8 @@ export default defineComponent({
}, },
]) ])
return { return {
communityData,
propertyData,
formData, formData,
details, details,
} }
......
...@@ -24,16 +24,27 @@ ...@@ -24,16 +24,27 @@
<m-sub2>马桶改造</m-sub2> <m-sub2>马桶改造</m-sub2>
<Brief :list="toiletSituation" color="#fff" /> <Brief :list="toiletSituation" color="#fff" />
<m-progress <m-progress
:value="80" :value="
Math.round(
(toiletSituation[0].value / toiletSituation[1].value) * 100
)
"
:color="['rgba(253,211,116,.15)', '#F7933E']" :color="['rgba(253,211,116,.15)', '#F7933E']"
:msg="{ value: 80, unit: '%', name: '改造进度', color: '#fff' }" :msg="{
value: Math.round(
(toiletSituation[0].value / toiletSituation[1].value) * 100
),
unit: '%',
name: '改造进度',
color: '#fff',
}"
/> />
</div> </div>
</m-card> </m-card>
</template> </template>
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, ref } from 'vue' import { computed, defineComponent, onMounted, ref } from 'vue'
import Brief, { BriefProp } from '../components/brief.vue' import Brief, { BriefProp } from '../components/brief.vue'
import store from '@/store' import store from '@/store'
import icon31 from '@/assets/images/icon31.png' import icon31 from '@/assets/images/icon31.png'
...@@ -74,9 +85,14 @@ export default defineComponent({ ...@@ -74,9 +85,14 @@ export default defineComponent({
console.log(`美丽街区-加装电梯-${name}区域电梯列表`, content) console.log(`美丽街区-加装电梯-${name}区域电梯列表`, content)
} }
const toiletSituation = ref<BriefProp[]>([ const toiletSituation = ref<BriefProp[]>([
{ name: '已完成改造', value: 26, icon: icon35 }, { name: '已完成改造', value: 0, icon: icon35 },
{ name: '应改造', value: 64, icon: icon36 }, { name: '应改造', value: 0, icon: icon36 },
]) ])
onMounted(async () => {
const { content } = (await ajax.get({ url: api.GET_TOILET })).data
toiletSituation.value[0].value = content.completeNum
toiletSituation.value[1].value = content.totalNum
})
const workStationProjects = ref([ const workStationProjects = ref([
{ name: '架空线梳理', value: 16 }, { name: '架空线梳理', value: 16 },
{ name: '店招店牌美化', value: 26 }, { name: '店招店牌美化', value: 26 },
......
<template> <template>
<m-card title="业务入口" :mode="mode"> <m-card title="业务入口" :mode="mode">
<div class="content"> <div class="content">
<div <div v-for="entry in entrys" :key="entry.url" @click="routeTo(entry.url)">
v-for="entry in entrys" {{ entry.inputName }}
:key="entry.type"
@click="routeTo(entry.type)"
>
{{ entry.name }}
</div> </div>
</div> </div>
</m-card> </m-card>
...@@ -25,15 +21,14 @@ export default defineComponent({ ...@@ -25,15 +21,14 @@ export default defineComponent({
}, },
}, },
setup() { setup() {
const entrys = computed(() => store.state.communityOptions) const entrys = computed(() => store.state.entry)
const router = useRouter() const router = useRouter()
const routeTo = (id: string) => { const routeTo = (url: string) => {
router.push({ if (url.includes('http')) {
name: 'community', window.open(url, '_blank')
query: { } else {
id, router.push(url)
}, }
})
} }
return { return {
entrys, entrys,
......
...@@ -62,6 +62,7 @@ export default defineComponent({ ...@@ -62,6 +62,7 @@ export default defineComponent({
rate: +Math.ceil((item.num / total) * 100).toFixed(0), rate: +Math.ceil((item.num / total) * 100).toFixed(0),
value: item.num, value: item.num,
})) }))
// return [c, a, b]
}) })
const placeList = computed(() => { const placeList = computed(() => {
......
...@@ -87,13 +87,6 @@ export default defineComponent({ ...@@ -87,13 +87,6 @@ export default defineComponent({
communityNum = 0, communityNum = 0,
} = rank.value } = rank.value
return [ return [
{
name: '街面管理',
value: streetDispatchNum,
percent: streetNum
? Math.floor((streetDispatchNum / streetNum) * 100)
: 0,
},
{ {
name: '综合管理', name: '综合管理',
value: communityNum, value: communityNum,
...@@ -101,6 +94,13 @@ export default defineComponent({ ...@@ -101,6 +94,13 @@ export default defineComponent({
? Math.floor(comprehensiveDispatchNum / comprehensiveNum) * 100 ? Math.floor(comprehensiveDispatchNum / comprehensiveNum) * 100
: 0, : 0,
}, },
{
name: '街面管理',
value: streetDispatchNum,
percent: streetNum
? Math.floor((streetDispatchNum / streetNum) * 100)
: 0,
},
{ {
name: '小区管理', name: '小区管理',
value: communityDispatchNum, value: communityDispatchNum,
...@@ -111,67 +111,67 @@ export default defineComponent({ ...@@ -111,67 +111,67 @@ export default defineComponent({
] ]
}) })
const classChartData = ref({ const classChartData = computed(() => {
dimensions: [ const data = classificationRank.value
{ name: 'class1', displayName: '分类1', max: 100 }, if (!data || data.length === 0) return { dimensions: null, source: null }
{ name: 'class2', displayName: '分类2', max: 100 }, const source: any = [
{ name: 'class3', displayName: '分类3', max: 100 },
],
source: [
{ {
seriesName: '分类排行', seriesName: '分类排行',
class1: 0, class1: 0,
class2: 0, class2: 0,
class3: 0, class3: 0,
}, },
], ]
}) const [a, b, c] = data.map((item, index) => {
const name = `class${index + 1}`
// 监听年份切花更改检查楼数 隐患点数 危险点数 source[0][name] = item.num
watch( return {
() => classificationRank.value, name,
(data) => { displayName: item.managementType,
if (!data || data.length === 0) return max: 150,
const source: any = [
{
seriesName: '分类排行',
class1: 0,
class2: 0,
class3: 0,
},
]
const dimensions = data.map((item, index) => {
const name = `class${index + 1}`
source[0][name] = item.num
return {
name,
displayName: item.managementType,
max: 150,
}
})
classChartData.value = {
dimensions,
source,
} }
}, })
{ immediate: true } const dimensions = [c, a, b]
) return {
dimensions,
source,
}
})
const responseChartData = ref({ // const responseChartData = ref({
dimensions: [ // dimensions: [
// { name: 'name', displayName: '坐标名' },
// { name: 'data1', displayName: '今日新增及存量' },
// { name: 'data2', displayName: '今日派单处置' },
// ],
// source: [
// { name: '09-10', data1: 100, data2: 10 },
// { name: '20-11', data1: 110, data2: 20 },
// { name: '11-12', data1: 120, data2: 30 },
// { name: '12-13', data1: 130, data2: 40 },
// { name: '13-14', data1: 140, data2: 50 },
// { name: '14-15', data1: 150, data2: 60 },
// { name: '15-16', data1: 150, data2: 100 },
// ],
// })
const responseChartData = computed(() => {
const data = store.state.responsivity
const dimensions = [
{ name: 'name', displayName: '坐标名' }, { name: 'name', displayName: '坐标名' },
{ name: 'data1', displayName: '今日新增及存量' }, { name: 'data1', displayName: '总数' },
{ name: 'data2', displayName: '今日派单处置' }, { name: 'data2', displayName: '派遣数' },
], ]
source: [ if (!data || data.length === 0) return { dimensions, source: [] }
{ name: '09-10', data1: 100, data2: 10 }, const source = data.reverse().map((item: any) => {
{ name: '20-11', data1: 110, data2: 20 }, const date = item.date && item.date.split('-')
{ name: '11-12', data1: 120, data2: 30 }, const { totalNum = 0, reachNum = 0 } = item.statistical || {}
{ name: '12-13', data1: 130, data2: 40 }, return {
{ name: '13-14', data1: 140, data2: 50 }, name: `${date[1]}-${date[2]}`,
{ name: '14-15', data1: 150, data2: 60 }, data1: totalNum,
{ name: '15-16', data1: 150, data2: 100 }, data2: reachNum,
], }
})
return { dimensions, source }
}) })
const chartOption = ref<ChartTypes.ECOption>({ const chartOption = ref<ChartTypes.ECOption>({
color: ['#6BE1B2', '#FFCE34'], color: ['#6BE1B2', '#FFCE34'],
...@@ -180,6 +180,11 @@ export default defineComponent({ ...@@ -180,6 +180,11 @@ export default defineComponent({
itemWidth: fontSize.value, itemWidth: fontSize.value,
itemHeight: fontSize.value * 0.8, itemHeight: fontSize.value * 0.8,
}, },
xAxis: {
axisLabel: {
interval: 0,
},
},
}) })
const chartOption2 = ref({ const chartOption2 = ref({
...@@ -240,17 +245,18 @@ export default defineComponent({ ...@@ -240,17 +245,18 @@ export default defineComponent({
&.wrapper &.wrapper
display flex display flex
>div >div
width 50% width 46%
height 100% height 100%
&:first-child &:first-child
$center() $center()
flex-direction column flex-direction column
font-size .12rem
p p
width 60% width 50%
margin 0 auto margin 0 auto
.count .count
font-family $font-barlow font-family $font-barlow
font-size .12rem font-size .16rem
margin-left .1rem margin-left .1rem
.emergency .emergency
height 1.22rem height 1.22rem
......
...@@ -33,7 +33,13 @@ ...@@ -33,7 +33,13 @@
</div> </div>
</div> </div>
<div class="case-follow"> <div class="case-follow">
<m-sub2>事件跟踪</m-sub2> <m-sub2
search-able
@search="searchKey = $event"
@close="searchKey = null"
>
跟踪
</m-sub2>
<m-empty <m-empty
v-if="!trackEvent || trackEvent.length === 0" v-if="!trackEvent || trackEvent.length === 0"
style="height: 1.8rem" style="height: 1.8rem"
...@@ -75,7 +81,14 @@ export default defineComponent({ ...@@ -75,7 +81,14 @@ export default defineComponent({
const stageCase = computed(() => store.state.stageCase) const stageCase = computed(() => store.state.stageCase)
const workstationKind = computed(() => store.state.workstationKind) const workstationKind = computed(() => store.state.workstationKind)
const pieDatamodel = computed(() => store.state.workstationKindPiEData) const pieDatamodel = computed(() => store.state.workstationKindPiEData)
const trackEvent = computed(() => store.state.trackEvent)
const searchKey = ref('')
const trackEvent = computed(() => {
const data = store.state.trackEvent
return searchKey.value
? data.filter((item: any) => item.address.includes(searchKey.value))
: data
})
const fontSize = computed(() => Math.floor((screen.height * 1.6) / 100)) const fontSize = computed(() => Math.floor((screen.height * 1.6) / 100))
const showChart = computed(() => store.state.curTheme === 'manage') const showChart = computed(() => store.state.curTheme === 'manage')
...@@ -230,9 +243,6 @@ export default defineComponent({ ...@@ -230,9 +243,6 @@ export default defineComponent({
] ]
}) })
const steps = ref(['发现', '立案', '派遣', '处置', '核查', '结案']) const steps = ref(['发现', '立案', '派遣', '处置', '核查', '结案'])
const searchCase = (key: string) => {
console.log('searck key: ', key)
}
return { return {
summary, summary,
...@@ -242,9 +252,8 @@ export default defineComponent({ ...@@ -242,9 +252,8 @@ export default defineComponent({
barOption, barOption,
pieData, pieData,
steps, steps,
// caseList,
searchCase,
todayCase, todayCase,
searchKey,
trackEvent, trackEvent,
workstationKind, workstationKind,
} }
......
<template> <template>
<m-card title="生态"> <m-card title="生态">
<div class="detail"> <div class="detail">
<div v-for="item in ecologyList" :key="item.labelName"> <div
v-for="item in ecologyList"
:key="item.labelName"
@click="getPoints(item.labelName)"
>
<m-count class="count orange-count" :value="item.num" /> <m-count class="count orange-count" :value="item.num" />
<p>{{ item.labelName }}</p> <p>{{ item.labelName }}</p>
</div> </div>
...@@ -134,12 +138,14 @@ export default defineComponent({ ...@@ -134,12 +138,14 @@ export default defineComponent({
const photos2 = computed(() => const photos2 = computed(() =>
photosList.value.filter((e) => e.buildingType.includes('文保')) photosList.value.filter((e) => e.buildingType.includes('文保'))
) )
const getPoints = (name: string) => store.dispatch('getEcologyPoints', name)
return { return {
ecologyList, ecologyList,
sumList, sumList,
businessPhotos, businessPhotos,
photos1, photos1,
photos2, photos2,
getPoints,
} }
}, },
}) })
...@@ -155,6 +161,10 @@ export default defineComponent({ ...@@ -155,6 +161,10 @@ export default defineComponent({
>div >div
$center() $center()
width 25% width 25%
cursor pointer
&:hover
color #FF8635
font-weight bold
.count .count
font-size .14rem font-size .14rem
font-family $font-barlow font-family $font-barlow
...@@ -165,7 +175,7 @@ export default defineComponent({ ...@@ -165,7 +175,7 @@ export default defineComponent({
>div >div
display flex display flex
align-items center align-items center
width 33.3% width 25%
margin .02rem 0 margin .02rem 0
img img
width .26rem width .26rem
......
...@@ -71,10 +71,8 @@ ...@@ -71,10 +71,8 @@
</m-card> </m-card>
<m-modal <m-modal
v-model="listModal" v-model="listModal"
enter="fadeInRight"
leave="fadeOutRight"
offset="65%"
width="40%" width="40%"
offset="60%"
title="重点关注楼宇清单" title="重点关注楼宇清单"
:mask-closable="false" :mask-closable="false"
> >
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
offset="-50%" offset="-50%"
enter="fadeInUp" enter="fadeInUp"
leave="fadeOutDown" leave="fadeOutDown"
translate-y="84%" translate-y="100%"
:mask-closable="false" :mask-closable="false"
:title="`${streetData.cmtName}2021年1季度得分`" :title="`${streetData.cmtName}2021年1季度得分`"
> >
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment