Browse Source

对接概览

V1.0
战立标 2 years ago
parent
commit
cb7dad2089
  1. BIN
      src/assets/images/gailan/tag_blue.png
  2. BIN
      src/assets/images/gailan/tag_orange.png
  3. BIN
      src/assets/images/gailan/yuan_bg.png
  4. BIN
      src/assets/images/gailan/zq_bg.png
  5. 6
      src/assets/scss/dataBoard/overview/index.scss
  6. 22
      src/views/dataBoard/cpts/map/index.vue
  7. 148
      src/views/dataBoard/overview/components/CommunityResult.vue
  8. 103
      src/views/dataBoard/overview/components/DynamicHumanRoomData.vue
  9. 194
      src/views/dataBoard/overview/components/EventAndFollowUp.vue
  10. 99
      src/views/dataBoard/overview/components/RankingGridData.vue
  11. 45
      src/views/dataBoard/overview/components/jdjs.vue
  12. 114
      src/views/dataBoard/overview/components/jdtphx.vue
  13. 4
      src/views/dataBoard/overview/components/map-top.vue
  14. 78
      src/views/dataBoard/overview/components/rfsjtj.vue
  15. 89
      src/views/dataBoard/overview/components/sq12345.vue
  16. 89
      src/views/dataBoard/overview/components/sqrfph.vue
  17. 269
      src/views/dataBoard/overview/index.vue
  18. 5
      src/views/dataBoard/satisfactionEval/components/Tabs/index.vue
  19. 2
      src/views/dataBoard/satisfactionEval/dissatisfied/detail.vue

BIN
src/assets/images/gailan/tag_blue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

BIN
src/assets/images/gailan/tag_orange.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

BIN
src/assets/images/gailan/yuan_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/assets/images/gailan/zq_bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

6
src/assets/scss/dataBoard/overview/index.scss

@ -494,7 +494,6 @@
height: 40px;
line-height: 40px;
font-size: 14px;
font-family: PingFang SC;
font-weight: 400;
color: #A3B9DA;
}
@ -508,11 +507,12 @@
height: 40px;
line-height: 40px;
width: 110px;
height: 14px;
overflow: hidden;
font-size: 14px;
font-family: PingFang SC;
font-weight: 400;
color: #FFFFFF;
text-overflow: ellipsis;
white-space: nowrap;
// padding: 0 8px;
// overflow: hidden;
// white-space: nowrap;

22
src/views/dataBoard/cpts/map/index.vue

@ -67,22 +67,26 @@ export default {
style: "amap://styles/blue",
polygonColor: [
// "rgba(255, 100, 60, 0.5)",
"rgba(43, 231, 253, 0.35)",
// "rgba(43, 231, 253, 0.35)",
"rgba(0, 127, 241, .3)",
// "rgba(255, 255, 50, 0.35)",
],
lineColor: [
// "rgba(255, 180, 150, 0.9)",
"rgba(43, 231, 253, 0.7)",
// "rgba(43, 231, 253, 0.7)",
"rgba(0, 127, 241, .6)",
// "rgba(255, 255, 50, 0.7)",
],
circleColor: [
// "rgba(255, 180, 150, 0.99)",
"rgba(43, 231, 253, 0.99)",
// "rgba(43, 231, 253, 0.99)",
"rgba(0, 127, 241, 0.99)",
// "rgba(255, 255, 50, 0.99)",
],
textColor: [
// "rgba(255, 100, 60, 0.99)",
"rgba(43, 231, 253, 0.99)",
// "rgba(43, 231, 253, 0.99)",
"rgba(126, 187, 255, 1)",
// "rgba(255, 255, 50, 0.99)",
],
textStrokeColor: "#fff",
@ -146,15 +150,9 @@ export default {
default: () => ({}),
},
},
computed: {},
components: {
cptPopup,
},
watch: {},
async mounted() {
//
window._AMapSecurityConfig = {
@ -327,12 +325,14 @@ export default {
if (mapType != "qq") {
myMap = new Map({
center: iniCenter,
mapStyle: 'amap://styles/darkblue',
zoom: 18,
});
} else {
myMap = new GaodeMap({
// pitch: this.pitch,
style: styleConfig.style,
mapStyle: 'amap://styles/darkblue',
// style: styleConfig.style,
center: iniCenter,
token: "fc14b42e0ca18387866d68ebd4f150c1",
zoom: 18,

148
src/views/dataBoard/overview/components/CommunityResult.vue

@ -0,0 +1,148 @@
<template>
<div class="result">
<div class="score">
<div class="tit">当前得分</div>
<div class="branch">
<span>{{synthesisScore?synthesisScore:'0'}}</span>
</div>
</div>
<div class="submit-num">
<div class="tit">总提交人数</div>
<div class="data">
<div class="people">
<span>{{sumNum?sumNum:'0'}}</span>
</div>
<div>
<div class="today day"><span>今日</span> +{{todayNum?todayNum:0}}</div>
<div class="yesterday day"><span>昨日</span> +{{lastDayNum?lastDayNum:0}}</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "CommunityResult",
props: {
date: {
type: String,
default: ''
}
},
data() {
return {
org: this.$store.state.chooseArea.chooseName,
lastDayNum: 0,
sumNum: 0,
synthesisScore: 0,
todayNum: 0,
};
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData()
}
},
date() {
this.getData()
}
},
mounted() {
if (this.org.orgId) {
this.getData()
}
},
methods: {
getData() {
this.$http.get('/actual/base/streetOverview/satisfactionCommunitySelfGroup?month='+this.date+'&level='+this.$store.state.chooseArea.chooseName.level+'&orgId='+this.$store.state.chooseArea.chooseName.orgId).then(({data: {data}}) => {
this.lastDayNum = data.lastDayNum
this.sumNum = data.sumNum
this.synthesisScore = data.synthesisScore
this.todayNum = data.todayNum
})
}
}
}
</script>
<style scoped lang="scss">
.result {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 30px 30px;
.tit {
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
}
.score {
.branch {
font-size: 14px;
font-weight: 500;
color: #A3B9DA;
margin-top: 20px;
span {
font-size: 36px;
font-weight: bold;
font-style: italic;
color: #08EBAE;
}
}
}
.submit-num {
.data {
display: flex;
align-items: flex-end;
.people {
font-size: 14px;
font-weight: 500;
color: #A3B9DA;
margin-right: 21px;
span {
font-size: 36px;
font-weight: bold;
font-style: italic;
color: #7FCEFF;
}
}
.day {
display: flex;
align-items: center;
margin-top: 8px;
font-size: 18px;
font-weight: bold;
font-style: italic;
color: #00D6D9;
span {
display: block;
text-align: center;
font-style: normal;
font-size: 12px;
font-weight: 500;
color: #FFFFFF;
width: 36px;
height: 18px;
line-height: 18px;
}
&.today span {
background: url("@/assets/images/gailan/tag_blue.png") no-repeat;
}
&.yesterday span {
background: url("@/assets/images/gailan/tag_orange.png") no-repeat;
}
}
}
}
}
</style>

103
src/views/dataBoard/overview/components/DynamicHumanRoomData.vue

@ -0,0 +1,103 @@
<template>
<div class="dhrd">
<div class="dhrd-list">
<!-- <div class="dhrd-item">
<div class="time blue">
刚刚
</div>
<div class="title ">XX社区第一网格</div>
<div class="name ">杨波</div>
<div class="address ">
修改了新苑小区**的居民信息的居民信息的居民信息
</div>
</div>-->
<div class="dhrd-item" v-for="(item,index) in list" :key="index">
<div class="time">
{{$moment(item.changeTime).format('HH:mm')}}
</div>
<div class="title">{{item.orgName}}</div>
<!-- <div class="name">{{item.orgName}}</div>-->
<div class="address">{{item.content}}</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "DynamicHumanRoomData",
data() {
return {
org: this.$store.state.chooseArea.chooseName,
list: []
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getList()
}
},
},
mounted() {
if (this.org.orgId) {
this.getList()
}
},
methods: {
getList() {
this.$http.get('/actual/base/streetOverview/residentHouseUpdateRecord?level='+this.$store.state.chooseArea.chooseName.level+'&orgId='+this.$store.state.chooseArea.chooseName.orgId).then(({data: {data}}) => {
this.list = data
})
}
}
}
</script>
<style scoped lang="scss">
@import "@/assets/scss/dataBoard/c/common.scss";
.dhrd {
padding: 20px 16px;
}
.dhrd-list {
height: 200px;
overflow-y: auto;
@include scrollBar
.dhrd-item {
display: flex;
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
height: 40px;
align-items: center;
padding: 0 16px;
&:nth-of-type(odd) {
background: rgba(14, 56, 115, 0.4);
}
.time {
flex: 1;
}
.title {
flex: 2;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.name {
flex: 1;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.address {
flex: 3;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
.blue {
color: #0DEEEF;
}
</style>

194
src/views/dataBoard/overview/components/EventAndFollowUp.vue

@ -0,0 +1,194 @@
<template>
<div class="event">
<div class="tabs">
<Tabs v-model="type" :list="typeList" @changeVal="typeChange"/>
</div>
<div class="content">
<div class="total">
<div class="tit">事件总数</div>
<div class="num orange">{{sumNum?sumNum:0}}</div>
<div class="desc"><span>较上月</span>-{{lastSumNum?lastSumNum:0}}</div>
</div>
<div class="processing">
<div class="bg">
<div class="bg-1">
</div>
<div class="num">
{{processNum?processNum:0}}
</div>
<div class="name">处理中</div>
</div>
</div>
<div class="total">
<div class="tit">已办结</div>
<div class="num blue">{{closedNum?closedNum:0}}</div>
<div class="desc white"><span>办结率</span>{{closedRatio?closedRatio:0}}%</div>
</div>
</div>
</div>
</template>
<script>
import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue";
export default {
name: "EventAndFollowUp",
components: {Tabs},
props: {
date: {
type: String,
default: ''
}
},
data() {
return {
org: this.$store.state.chooseArea.chooseName,
typeList: [{
label: '12345事件',
value: '12345'
}, {
label: '事件回访',
value: 'follow'
}],
type: '12345',
sumNum: 0,
lastSumNum: 0,
processNum: 0,
closedNum: 0,
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData()
}
},
date() {
this.getData()
}
},
mounted() {
if (this.org.orgId) {
this.getData()
}
},
methods: {
getData() {
this.$http.get('/actual/base/streetOverview/eventAndFollowGroup?month=' + this.date + '&level=' + this.$store.state.chooseArea.chooseName.level + '&orgId=' + this.$store.state.chooseArea.chooseName.orgId + '&queryType=' + this.type).then(({data: {data}}) => {
this.sumNum = data.sumNum
this.lastSumNum = data.lastSumNum
this.processNum = data.processNum
this.closedNum = data.closedNum
this.closedRatio = data.closedRatio
})
},
typeChange(val) {
console.log(val,'val')
this.type = val
this.getData()
}
}
}
</script>
<style scoped lang="scss">
.event {
padding: 10px 16px;
}
.tabs {
margin: 10px 0;
}
.content {
background: linear-gradient(90deg, rgba(1, 94, 234, 0.1) 0%, rgba(16, 50, 103, 0) 50%, rgba(1, 94, 234, 0.1) 100%);
padding: 20px 19px;
display: flex;
justify-content: space-between;
align-items: center;
}
.total {
.tit {
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
}
.num {
height: 24px;
font-size: 32px;
font-weight: bold;
font-style: italic;
margin: 20px 0 15px;
}
.orange {
color: #FF7845;
}
.blue {
color: #76C0EF;
}
.desc {
font-size: 18px;
font-weight: bold;
font-style: italic;
color: #00D6D9;
span {
font-style: normal;
font-size: 14px;
font-weight: 500;
color: #A3B9DA;
}
}
.white {
color: #fff;
}
}
.processing {
.bg {
background: url("@/assets/images/gailan/yuan_bg.png") no-repeat center;
flex: 0 0 150px;
width: 150px;
height: 150px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
.bg-1 {
background: url("@/assets/images/gailan/zq_bg.png") no-repeat center;
width: 146px;
height: 136px;
position: absolute;
left: 9px;
top: 9px;
}
.num {
font-size: 32px;
font-weight: bold;
font-style: italic;
color: #64C1FF;
}
.name {
position: absolute;
bottom: 10px;
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
}
}
}
</style>

99
src/views/dataBoard/overview/components/RankingGridData.vue

@ -0,0 +1,99 @@
<template>
<div class="m-subbox m-sqrfph">
<div class="rank">
<div class="tit">{{ self.orgName }}</div>
<div class="num"><span>{{ self.rank }}</span></div>
</div>
<div class="table">
<div class="tr">
<div class="th">排名</div>
<div class="th">网格</div>
<div class="th">房屋更新数</div>
<div class="th">人口更新数</div>
<div class="th">人房更新总数</div>
</div>
<div class="tr" v-for="item in pmList" :key="item.rank">
<div :class="item.rank < 4 ? `td tdbg${item.rank}` : 'td'">
{{ item.rank }}
</div>
<div class="td">{{ item.orgName }}</div>
<div class="td">{{ item.houseNum }}</div>
<div class="td">{{ item.residentNum }}</div>
<div class="td">{{ item.sumNum }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "RankingGridData",
props: {
date: {
type: String,
default: ''
}
},
data() {
return {
org: this.$store.state.chooseArea.chooseName,
pmList: [],
self: {}
};
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getList()
}
},
date() {
this.getList()
}
},
mounted() {
if (this.org.orgId) {
this.getList()
}
},
methods: {
getList() {
this.$http.get('/actual/base/streetOverview/residentHouseUpdateGroupByGrid?month=' + this.date + '&level=' + this.$store.state.chooseArea.chooseName.level + '&orgId=' + this.$store.state.chooseArea.chooseName.orgId).then(({data: {data}}) => {
if (data) {
data = data.map((item, index) => {
return {
...item,
rank: index - 0 + 1
}
})
this.pmList = data.filter(item => !item.self)
this.self = data.filter(item => item.self)[0]
}
})
}
}
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/overview/index.scss" scoped/>
<style scoped lang="scss">
.rank {
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
padding: 0 15px 20px;
.num {
font-size: 14px;
font-weight: 500;
color: #A3B9DA;
margin-top: 20px;
span {
font-size: 36px;
font-weight: bold;
font-style: italic;
color: #FFB73C;
}
}
}
</style>

45
src/views/dataBoard/overview/components/jdjs.vue

@ -5,8 +5,7 @@
<img src="../linshi/jiedaotu.jpg" />
</div>
<div class="m-jdjs-js-txt">
XX街道现有房屋4600间 住房屋3800间出租房屋600
置房屋200现有居民4000户 8400
{{overview}}
</div>
</div>
<div class="m-jdjs-bg">
@ -17,8 +16,7 @@
<div class="m-jdjs-bg-title-txt">总结报告</div>
</div>
<div class="m-jdjs-bg-txt">
根据数据分析结果建议重点关注租户党员保障房人员三类
群体开展相关的社区服务和活动
{{report}}
</div>
</div>
</div>
@ -26,12 +24,39 @@
<script>
export default {
name: "jdjs",
data() {},
data() {
return {
orgId: this.$store.state.chooseArea.chooseName,
report: "",
overview: ""
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
console.log(val,'val')
console.log(123)
if(val.orgId) {
this.getReport(val)
}
}
},
mounted() {
console.log(this.orgId.orgId)
if(this.orgId.orgId) {
this.getReport(this.orgId)
}
},
methods: {
getReport({orgId,level}) {
this.$http.get('/actual/base/streetOverview/communityOverview?orgId='+orgId+'&level='+level).then(({data: {data}}) => {
this.overview = data
})
this.$http.get('/actual/base/streetOverview/summaryReport?orgId='+orgId+'&level='+level).then(({data: {data}}) => {
this.report = data
})
}
}
};
</script>
<style
lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
></style>
<style lang="scss" src="@/assets/scss/dataBoard/overview/index.scss" scoped/>

114
src/views/dataBoard/overview/components/jdtphx.vue

@ -5,23 +5,15 @@
<div class="m-jdhx-card-title">
<div class="m-jdhx-card-title-icon">
<img
src="../../../../assets/images/shuju/overview/jumin-icon.png"
src="@/assets/images/shuju/overview/jumin-icon.png"
/>
</div>
<div class="m-jdhx-card-title-txt">主要居民类型</div>
</div>
<div class="m-jdhx-card-content">
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">老年人</div>
<div class="m-jdhx-card-content-item-value">21%</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">租户</div>
<div class="m-jdhx-card-content-item-value">17%</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">低保人员</div>
<div class="m-jdhx-card-content-item-value">9%</div>
<div class="m-jdhx-card-content-item" v-for="(item,index) in categoryList" :key="index">
<div class="m-jdhx-card-content-item-lable">{{item.categoryName}}</div>
<div class="m-jdhx-card-content-item-value">{{item.categoryRatio?item.categoryRatio:'0%'}}</div>
</div>
</div>
</div>
@ -29,27 +21,15 @@
<div class="m-jdhx-card-title">
<div class="m-jdhx-card-title-icon">
<img
src="../../../../assets/images/shuju/overview/fangwu-icon.png"
src="@/assets/images/shuju/overview/fangwu-icon.png"
/>
</div>
<div class="m-jdhx-card-title-txt">房屋性质/用途</div>
</div>
<div class="m-jdhx-card-content">
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">自助</div>
<div class="m-jdhx-card-content-item-value">60%</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">出租</div>
<div class="m-jdhx-card-content-item-value">18%</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">办公</div>
<div class="m-jdhx-card-content-item-value">10%</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">仓储</div>
<div class="m-jdhx-card-content-item-value">12%</div>
<div class="m-jdhx-card-content-item" v-for="(item,index) in houseList" :key="index">
<div class="m-jdhx-card-content-item-lable">{{item.name}}</div>
<div class="m-jdhx-card-content-item-value">{{item.num}}</div>
</div>
</div>
</div>
@ -61,7 +41,7 @@
<div class="m-jdhx-center-content-item-jumin">
<div class="m-jdhx-center-content-item-jumin-icon">
<img
src="../../../../assets/images/shuju/overview/renkou-icon.png"
src="@/assets/images/shuju/overview/renkou-icon.png"
/>
</div>
<div class="m-jdhx-center-content-item-jumin-txt">人口</div>
@ -69,7 +49,7 @@
<div class="m-jdhx-center-content-item-fangwu">
<div class="m-jdhx-center-content-item-fangwu-icon">
<img
src="../../../../assets/images/shuju/overview/fangwu2-icon.png"
src="@/assets/images/shuju/overview/fangwu2-icon.png"
/>
</div>
<div class="m-jdhx-center-content-item-fangwu-txt">房屋</div>
@ -79,7 +59,7 @@
<div class="m-jdhx-center-content-item-manyi">
<div class="m-jdhx-center-content-item-manyi-icon">
<img
src="../../../../assets/images/shuju/overview/manyidu-icon.png"
src="@/assets/images/shuju/overview/manyidu-icon.png"
/>
</div>
<div class="m-jdhx-center-content-item-manyi-txt">满意度</div>
@ -87,7 +67,7 @@
<div class="m-jdhx-center-content-item-fengxian">
<div class="m-jdhx-center-content-item-fengxian-icon">
<img
src="../../../../assets/images/shuju/overview/fengxianry-icon.png"
src="@/assets/images/shuju/overview/fengxianry-icon.png"
/>
</div>
<div class="m-jdhx-center-content-item-fengxian-txt">风险人员</div>
@ -101,23 +81,15 @@
<div class="m-jdhx-card-title">
<div class="m-jdhx-card-title-icon">
<img
src="../../../../assets/images/shuju/overview/manyi-icon.png"
src="@/assets/images/shuju/overview/manyi-icon.png"
/>
</div>
<div class="m-jdhx-card-title-txt">主要不满意事项</div>
</div>
<div class="m-jdhx-card-content">
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">楼院卫生</div>
<div class="m-jdhx-card-content-item-value">67%</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">医护人员态度</div>
<div class="m-jdhx-card-content-item-value">13%</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">基础教育便利</div>
<div class="m-jdhx-card-content-item-value">20%</div>
<div class="m-jdhx-card-content-item" v-for="(item,index) in notSatisfactionList" :key="index">
<div class="m-jdhx-card-content-item-lable">{{item.name}}</div>
<div class="m-jdhx-card-content-item-value">{{item.ratio?item.ratio:'0%'}}</div>
</div>
</div>
</div>
@ -125,23 +97,15 @@
<div class="m-jdhx-card-title">
<div class="m-jdhx-card-title-icon">
<img
src="../../../../assets/images/shuju/overview/fengxian-icon.png"
src="@/assets/images/shuju/overview/fengxian-icon.png"
/>
</div>
<div class="m-jdhx-card-title-txt">风险人员</div>
</div>
<div class="m-jdhx-card-content">
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">12345</div>
<div class="m-jdhx-card-content-item-value">78</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">生意满意度</div>
<div class="m-jdhx-card-content-item-value">96</div>
</div>
<div class="m-jdhx-card-content-item">
<div class="m-jdhx-card-content-item-lable">社区满意度自查</div>
<div class="m-jdhx-card-content-item-value">122</div>
<div class="m-jdhx-card-content-item" v-for="(item,index) in riskList" :key="index">
<div class="m-jdhx-card-content-item-lable">{{item.riskName}}</div>
<div class="m-jdhx-card-content-item-value">{{item.riskNum}}</div>
</div>
</div>
</div>
@ -152,11 +116,41 @@
<script>
export default {
name: "jdtphx",
data() {},
data() {
return {
org: this.$store.state.chooseArea.chooseName,
categoryList: [],
houseList: [],
notSatisfactionList: [],
riskList: [],
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if(val.orgId) {
this.getData(this.$store.state.chooseArea.chooseName)
}
}
},
mounted() {
if (this.org.orgId) {
this.getData(this.org)
}
},
methods: {
getData({orgId, level}) {
this.$http.get('/actual/base/streetOverview/overviewPortrait?orgId=' + orgId + '&level=' + level).then(({data: {data}}) => {
this.categoryList = data.categoryList
this.houseList = data.houseList
this.notSatisfactionList = data.notSatisfactionList
this.riskList = data.riskList
})
}
}
};
</script>
<style
lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
></style>

4
src/views/dataBoard/overview/components/map-top.vue

@ -72,7 +72,9 @@
<script>
export default {
name: "map-top",
data() {},
data() {
return {}
},
};
</script>

78
src/views/dataBoard/overview/components/rfsjtj.vue

@ -3,33 +3,74 @@
<div class="m-rfsjtj-item">
<div class="m-rfsjtj-item-des">采集房屋数</div>
<div class="m-rfsjtj-item-jian">
<span>{{ numFormat(2317) }}</span>
<span>{{ numFormat(house.sumNum) }}</span>
</div>
<div class="m-rfsjtj-item-change">
<div class="m-rfsjtj-item-change-today">今日</div>
<div class="m-rfsjtj-item-change-new">新增<span>31</span></div>
<div class="m-rfsjtj-item-change-update">更新<span>217</span></div>
<div class="m-rfsjtj-item-change-new">新增<span>{{ house.dayAddNum }}</span></div>
<div class="m-rfsjtj-item-change-update">更新<span>{{ house.dayUpdateNum }}</span></div>
</div>
</div>
<div class="m-rfsjtj-item">
<div class="m-rfsjtj-item-des">采集人口数</div>
<div class="m-rfsjtj-item-ren">
<span>{{ numFormat(6302) }}</span>
<span>{{ numFormat(resident.sumNum) }}</span>
</div>
<div class="m-rfsjtj-item-change">
<div class="m-rfsjtj-item-change-today">今日</div>
<div class="m-rfsjtj-item-change-new">新增<span>24</span></div>
<div class="m-rfsjtj-item-change-update">更新<span>466</span></div>
<div class="m-rfsjtj-item-change-new">新增<span>{{ resident.dayAddNum }}</span></div>
<div class="m-rfsjtj-item-change-update">更新<span>{{ resident.dayUpdateNum }}</span></div>
</div>
</div>
</div>
</template>
<script>
var timer
export default {
name: "rfsjtj",
data() {},
data() {
return {
org: this.$store.state.chooseArea.chooseName,
house: {
dayAddNum: 0,
dayUpdateNum: 0,
sumNum: 0,
},
resident: {
dayAddNum: 0,
dayUpdateNum: 0,
sumNum: 0,
},
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData(this.$store.state.chooseArea.chooseName)
}
}
},
mounted() {
if (this.org.orgId) {
this.getData(this.org)
}
},
activated() {
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getData(this.$store.state.chooseArea.chooseName)
}
},
destroyed() {
clearInterval(timer)
console.log('xiaohui')
},
deactivated() {
clearInterval(timer)
console.log('xiaohui1')
},
methods: {
numFormat(num) {
num = num.toString().split("."); //
@ -50,12 +91,29 @@ export default {
}
return res;
},
getData({orgId, level}) {
clearInterval(timer)
this.$http.get('/actual/base/streetOverview/residentHouseGroup?orgId=' + orgId + '&level=' + level).then(({data: {data}}) => {
data.forEach(item => {
if (item.type === 'house') {
this.house = item
}
if (item.type === 'resident') {
this.resident = item
}
});
})
timer = setInterval(() => {
this.getData({orgId, level})
},1000 * 60)
}
},
};
</script>
<style
lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
></style>

89
src/views/dataBoard/overview/components/sq12345.vue

@ -8,14 +8,14 @@
<div class="th">处理中</div>
<div class="th">已办结</div>
</div>
<div class="tr" v-for="item in pmList" :key="item.num">
<div :class="item.num < 4 ? `td tdbg${item.num}` : 'td'">
{{ item.num }}
<div class="tr" v-for="(item,index) in pmList" :key="index">
<div :class="index - 0 + 1 < 4 ? `td tdbg${index-0+1}` : 'td'">
{{ index - 0 + 1 }}
</div>
<div class="td">{{ item.shequ }}</div>
<div class="td">{{ item.fwgxs }}</div>
<div class="td td-or">{{ item.rkgxs }}</div>
<div class="td td-gr">{{ item.rfgxzs }}</div>
<div class="td">{{ item.orgName }}</div>
<div class="td">{{ item.sumNum }}</div>
<div class="td td-or">{{ item.processNum }}</div>
<div class="td td-gr">{{ item.closedNum }}</div>
</div>
</div>
</div>
@ -23,55 +23,40 @@
<script>
export default {
name: "sq12345",
props: {
date: {
type: String,
default: ''
}
},
data() {
return {
value2: "2023-02",
pmList: [
{
num: "1",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "12",
rfgxzs: "410",
},
{
num: "2",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "12",
rfgxzs: "410",
},
{
num: "3",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "12",
rfgxzs: "410",
},
{
num: "4",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "12",
rfgxzs: "410",
},
{
num: "5",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "12",
rfgxzs: "410",
},
{
num: "6",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "12",
rfgxzs: "410",
},
],
org: this.$store.state.chooseArea.chooseName,
pmList: [],
};
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getList()
}
},
date() {
this.getList()
}
},
mounted() {
if (this.org.orgId) {
this.getList()
}
},
methods: {
getList() {
this.$http.get('/actual/base/streetOverview/eventAgencyGroup?month='+this.date+'&level='+this.$store.state.chooseArea.chooseName.level+'&orgId='+this.$store.state.chooseArea.chooseName.orgId).then(({data: {data}}) => {
this.pmList = data
})
}
}
};
</script>

89
src/views/dataBoard/overview/components/sqrfph.vue

@ -8,14 +8,14 @@
<div class="th">人口更新数</div>
<div class="th">人房更新总数</div>
</div>
<div class="tr" v-for="item in pmList" :key="item.num">
<div :class="item.num < 4 ? `td tdbg${item.num}` : 'td'">
{{ item.num }}
<div class="tr" v-for="(item,index) in pmList" :key="index">
<div :class="index - 0 + 1 < 4 ? `td tdbg${index-0+1}` : 'td'">
{{ index - 0 + 1 }}
</div>
<div class="td">{{ item.shequ }}</div>
<div class="td">{{ item.fwgxs }}</div>
<div class="td">{{ item.rkgxs }}</div>
<div class="td">{{ item.rfgxzs }}</div>
<div class="td">{{ item.orgName }}</div>
<div class="td">{{ item.houseNum }}</div>
<div class="td">{{ item.residentNum }}</div>
<div class="td">{{ item.sumNum }}</div>
</div>
</div>
</div>
@ -23,55 +23,40 @@
<script>
export default {
name: "sqrfph",
props: {
date: {
type: String,
default: ''
}
},
data() {
return {
value2: "2023-02",
pmList: [
{
num: "1",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "1720",
rfgxzs: "2070",
},
{
num: "2",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "1720",
rfgxzs: "2070",
},
{
num: "3",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "1720",
rfgxzs: "2070",
},
{
num: "4",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "1720",
rfgxzs: "2070",
},
{
num: "5",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "1720",
rfgxzs: "2070",
},
{
num: "6",
shequ: "XX社区",
fwgxs: "350",
rkgxs: "1720",
rfgxzs: "2070",
},
],
org: this.$store.state.chooseArea.chooseName,
pmList: [],
};
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getList()
}
},
date() {
this.getList()
}
},
mounted() {
if (this.org.orgId) {
this.getList()
}
},
methods: {
getList() {
this.$http.get('/actual/base/streetOverview/residentHouseUpdateGroup?month='+this.date+'&level='+this.$store.state.chooseArea.chooseName.level+'&orgId='+this.$store.state.chooseArea.chooseName.orgId).then(({data: {data}}) => {
this.pmList = data
})
}
}
};
</script>

269
src/views/dataBoard/overview/index.vue

@ -1,83 +1,147 @@
<template>
<div>
<cpt-bread
@tap="clickBreadItem"
v-if="breadList.length > 1"
:bread-list="breadList"
@tap="clickBreadItem"
v-if="breadList.length > 1"
:bread-list="breadList"
/>
<div class="g-row">
<div class="g-left">
<div class="m-box">
<title-box text="街道介绍" />
<jdjs />
<title-box :text="`${
currentLevel === 'district'?'区':
currentLevel === 'street'?'街道':
currentLevel === 'community'?'社区':
currentLevel === 'grid'?'网格':''
}介绍`"/>
<jdjs/>
</div>
<div class="m-box">vervie
<title-box text="街道图谱画像" />
<jdtphx />
<div class="m-box">
<title-box :text="`${
currentLevel === 'district'?'区':
currentLevel === 'street'?'街道':
currentLevel === 'community'?'社区':
currentLevel === 'grid'?'网格':''
}图谱画像`"/>
<jdtphx :id="orgId"/>
</div>
</div>
<div class="g-center">
<div class="m-map">
<map-top />
<map-top/>
<grid-map
ref="map"
@clickAgency="clickAgencyItem"
:srcGridData="orgData"
@clickDotBtn="handleClickDotBtn"
ref="map"
@clickAgency="clickAgencyItem"
:srcGridData="orgData"
@clickDotBtn="handleClickDotBtn"
/>
</div>
<div class="m-box m-rybox">
<title-box text="XX街道网格员" />
<jdwgy />
<title-box text="XX街道网格员"/>
<jdwgy/>
</div>
</div>
<div class="g-right">
<div class="m-box">
<title-box text="人房数据统计" />
<rfsjtj />
<title-box text="人房数据统计"/>
<rfsjtj/>
</div>
<div class="m-box">
<!-- 街道概览 -->
<div v-if="currentLevel === 'street' || currentLevel === 'district'" class="m-box">
<title-box text="各社区人房数据更新排行">
<span class="date-span">
<el-date-picker
v-model="rfphDate"
format="yyyy-MM"
value-format="yyyy-MM"
@change="changeDate"
type="month"
:clearable="false"
placeholder="选择月"
v-model="rfphDate"
format="yyyy-MM"
value-format="yyyy-MM"
@change="changeDate"
type="month"
:clearable="false"
placeholder="选择月"
>
</el-date-picker>
</span>
</title-box>
<sqrfph />
<sqrfph :date="rfphDate"/>
</div>
<div class="m-box">
<div v-if="currentLevel === 'street' || currentLevel === 'district'" class="m-box">
<title-box text="各社区12345投诉事件统计">
<span class="date-span">
<el-date-picker
v-model="rfphDate"
format="yyyy-MM"
value-format="yyyy-MM"
@change="changeDate"
type="month"
:clearable="false"
placeholder="选择月"
>
</el-date-picker>
v-model="sq12345Date"
format="yyyy-MM"
value-format="yyyy-MM"
type="month"
:clearable="false"
placeholder="选择月"
/>
</span>
</title-box>
<sq12345 />
<sq12345 :date="sq12345Date"/>
</div>
</div>
<cpt-loading v-show="false" />
<!-- 社区&网格-->
<div v-if="currentLevel === 'community' || currentLevel === 'grid'" class="m-box">
<title-box text="人房数据动态更新"/>
<DynamicHumanRoomData/>
</div>
<!-- 社区概览-->
<div v-if="currentLevel === 'community'" class="m-box">
<title-box text="社区满意度自查结果">
<span class="date-span">
<el-date-picker
v-model="sqzcDate"
format="yyyy-MM"
value-format="yyyy-MM"
type="month"
:clearable="false"
placeholder="选择月"
/>
</span>
</title-box>
<CommunityResult :date="sqzcDate"/>
</div>
<div v-if="currentLevel === 'community'" class="m-box">
<title-box text="事件&回访">
<span class="date-span">
<el-date-picker
v-model="sjhfDate"
format="yyyy-MM"
value-format="yyyy-MM"
@change="changeDate"
type="month"
:clearable="false"
placeholder="选择月"
/>
</span>
</title-box>
<EventAndFollowUp :date="sjhfDate"/>
</div>
<!-- 网格 -->
<div v-if="currentLevel === 'grid'" class="m-box">
<title-box text="社区网格数据更新情况排行">
<span class="date-span">
<el-date-picker
v-model="sqwggxDate"
format="yyyy-MM"
value-format="yyyy-MM"
@change="changeDate"
type="month"
:clearable="false"
placeholder="选择月"
/>
</span>
</title-box>
<RankingGridData :date="sqwggxDate"/>
</div>
</div>
</div>
<cpt-loading v-show="false"/>
</div>
</template>
@ -93,8 +157,15 @@ import jdwgy from "@/views/dataBoard/overview/components/jdwgy.vue";
import rfsjtj from "@/views/dataBoard/overview/components/rfsjtj.vue";
import sqrfph from "@/views/dataBoard/overview/components/sqrfph.vue";
import sq12345 from "@/views/dataBoard/overview/components/sq12345.vue";
import { requestPostBi } from "@/js/dai/request-bipass";
import { requestPost } from "@/js/dai/request";
import DynamicHumanRoomData from "@/views/dataBoard/overview/components/DynamicHumanRoomData.vue";
import CommunityResult from "@/views/dataBoard/overview/components/CommunityResult.vue";
import EventAndFollowUp from "@/views/dataBoard/overview/components/EventAndFollowUp.vue";
import RankingGridData from "@/views/dataBoard/overview/components/RankingGridData.vue";
import {requestPostBi} from "@/js/dai/request-bipass";
import {requestPost} from "@/js/dai/request";
import getQueryPara from "dai-js/modules/getQueryPara";
export default {
@ -112,22 +183,31 @@ export default {
rfsjtj,
sqrfph,
sq12345,
DynamicHumanRoomData,
CommunityResult,
EventAndFollowUp,
RankingGridData
},
data() {
return {
loading: false,
rfphDate: "2023-03",
rfphDate: this.$moment().format('YYYY-MM'),
sq12345Date: this.$moment().format('YYYY-MM'),
sqzcDate: this.$moment().format('YYYY-MM'),
sjhfDate: this.$moment().format('YYYY-MM'),
sqwggxDate: this.$moment().format('YYYY-MM'),
orgData: {
children: [],
}, //
orgId: "",
orgLevel: "",
currentLevel: "",
breadList: [
{
orgId: "",
orgLevel: "",
meta: { title: "人房总览" },
meta: {title: "人房总览"},
},
],
@ -137,12 +217,19 @@ export default {
},
mounted() {
const queryOrgId = getQueryPara("orgId");
const queryOrgLevel = getQueryPara("orgLevel");
this.init(queryOrgId, queryOrgLevel);
// const queryOrgId = getQueryPara("orgId");
// const queryOrgLevel = getQueryPara("orgLevel");
// this.init(queryOrgId, queryOrgLevel);
if(this.$store.state.chooseArea.chooseName.orgId) {
this.getMapData()
}
},
watch: {},
watch: {
"$store.state.chooseArea.chooseName"(val){
this.getMapData()
}
},
methods: {
async init(queryOrgId, queryOrgLevel) {
@ -157,12 +244,12 @@ export default {
//
this.loading = false;
await this.getMapData();
await this.getSubMapData();
// await this.getSubMapData();
this.loading = true;
},
changeDate(e){
this.rfphDate=e;
changeDate(e) {
this.rfphDate = e;
},
handleClickDotBtn(type, info) {
console.log("handleClickDotBtn", type, info);
@ -173,21 +260,23 @@ export default {
}
},
clickBreadItem({ item }) {
clickBreadItem({item}) {
this.toBread(item);
},
clickAgencyItem(item) {
console.log(item, 'item')
this.toBread({
orgId: item.id,
orgLevel: item.level,
meta: { title: item.name },
meta: {title: item.name},
});
this.getMapData(item.id,item.level)
},
toBread(item) {
const { orgId } = item;
const { breadList } = this;
const {orgId} = item;
const {breadList} = this;
let index = breadList.findIndex((val) => val.orgId === orgId);
// return console.log(item, breadList, index);
if (index >= 0) {
@ -212,39 +301,17 @@ export default {
},
//
async getMapData() {
async getMapData(orgId=this.$store.state.chooseArea.chooseName.orgId,level=this.$store.state.chooseArea.chooseName.level) {
console.log("=========================getMapData");
const url = "org_map";
const { data, code, msg } = await requestPostBi(
url,
{
queryParam: {
org_id: this.orgId,
},
},
{
// mockId: 60810589,
}
);
if (code === 0) {
console.log("data::", data);
let info = data[0];
this.orgData = {
...info,
id: info.org_id,
name: info.org_name,
latitude: parseFloat(info.latitude),
longitude: parseFloat(info.longitude),
coordinates: info.coordinates || "",
children: [],
};
this.$http.post(`/gov/org/agency/maporg`, {orgId, level}).then(({data: {data}}) => {
console.log(data,'datadatadata')
this.orgData = data;
this.orgId = this.orgData.org_id;
this.orgLevel = this.orgData.level;
} else {
this.$message.error(msg);
}
this.currentLevel = this.orgData.agencyLevel;
console.log(this.orgData, 'orgData')
})
},
//
@ -252,20 +319,20 @@ export default {
console.log("=========================getSubMapData");
const url = "sub_org_map";
const { data, code, msg } = await requestPostBi(
url,
{
queryParam: {
org_id: this.orgId,
const {data, code, msg} = await requestPostBi(
url,
{
queryParam: {
org_id: this.orgId,
},
},
},
{
// mockId: 61831860,
}
{
// mockId: 61831860,
}
);
if (code === 0) {
const { orgData } = this;
const {orgData} = this;
orgData.children = data.map((item) => {
return {
...item,
@ -276,10 +343,10 @@ export default {
coordinates: item.coordinates || "",
};
});
this.orgData = { ...orgData };
this.orgData = {...orgData};
console.log(
"==========================getSubMapData:result",
this.orgData
"==========================getSubMapData:result",
this.orgData
);
} else {
this.$message.error(msg);
@ -294,7 +361,7 @@ export default {
level: this.orgLevel,
};
const { data, code, msg } = await requestPost(url, params);
const {data, code, msg} = await requestPost(url, params);
if (code === 0) {
this.orgData = data;
this.orgId = this.orgId;
@ -311,7 +378,7 @@ export default {
</script>
<style
lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
lang="scss"
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
></style>

5
src/views/dataBoard/satisfactionEval/components/Tabs/index.vue

@ -1,6 +1,7 @@
<template>
<div class="tabs">
<div class="tab" :class="value2 === item.value?'cur':''" v-for="(item,index) in list" @click="tabClick(index)" :key="index">
<div class="tab" :class="value2 === item.value?'cur':''"
v-for="(item,index) in list" @click="tabClick(index)" :key="index">
{{item.label}}
</div>
</div>
@ -30,7 +31,7 @@ export default {
methods: {
tabClick(index) {
this.value2 = this.list[index].value
this.$emit('changeVal',this.value)
this.$emit('changeVal',this.value2)
this.$emit('changeLabel',this.list[index].label)
}
}

2
src/views/dataBoard/satisfactionEval/dissatisfied/detail.vue

@ -1,8 +1,8 @@
<template>
<el-dialog
append-to-body
class="dissatisfied-detail"
title=""
:modal="false"
:visible.sync="dialogVisible"
width="1118px"
:before-close="handleClose">

Loading…
Cancel
Save