Browse Source

新增和修改页面

v1.1
战立标 2 years ago
parent
commit
a611e5d6d4
  1. 1474
      src/assets/scss/dataBoard/renfang/index.scss
  2. 60
      src/router/index.js
  3. 14
      src/views/dataBoard/overview/components/Bmysxxq.vue
  4. 2
      src/views/dataBoard/overview/components/DemandSwiperList.vue
  5. 25
      src/views/dataBoard/overview/components/RequirementList.vue
  6. 31
      src/views/dataBoard/overview/components/ServiceDetails.vue
  7. 2
      src/views/dataBoard/overview/components/jdtphx.vue
  8. 2
      src/views/dataBoard/overview/components/rfsjtj.vue
  9. 4
      src/views/dataBoard/overview/index.vue
  10. 51
      src/views/dataBoard/renfang/cpts/fwPieOption.js
  11. 982
      src/views/dataBoard/renfang/cpts/fwgl.vue
  12. 171
      src/views/dataBoard/renfang/cpts/jmPieOption.js
  13. 906
      src/views/dataBoard/renfang/cpts/jmgl.vue
  14. 890
      src/views/dataBoard/renfang/cpts/rkfx.vue
  15. 24
      src/views/dataBoard/renfang/cpts/rkfxPieOption.js
  16. 494
      src/views/dataBoard/renfang/index.vue
  17. 141
      src/views/dataBoard/satisfactionEval/Problem/tddtlxsj/detail.vue
  18. 196
      src/views/dataBoard/satisfactionEval/Problem/tddtlxsj/list.vue
  19. 141
      src/views/dataBoard/satisfactionEval/Problem/tyqybtlx/detail.vue
  20. 239
      src/views/dataBoard/satisfactionEval/Problem/tyqybtlx/list.vue
  21. 140
      src/views/dataBoard/satisfactionEval/Problem/tyry/detail.vue
  22. 195
      src/views/dataBoard/satisfactionEval/Problem/tyry/list.vue
  23. 9
      src/views/dataBoard/satisfactionEval/dissatisfieReason/index.vue
  24. 14
      src/views/dataBoard/satisfactionEval/modules/DissatisfiedReason/index.vue
  25. 8
      src/views/dataBoard/satisfactionEval/modules/eventAnalysis/index.vue

1474
src/assets/scss/dataBoard/renfang/index.scss

File diff suppressed because it is too large

60
src/router/index.js

@ -654,6 +654,66 @@ export const dataBoardRoutes = {
isTab: false, isTab: false,
}, },
}, },
{
path: "satisfactionEval/Problem/tddtlxsj",
props: true,
component: () => import("@/views/dataBoard/satisfactionEval/Problem/tddtlxsj/list"),
name: "dataBoard-satisfactionEval-Problem-tddtlxsj-list",
meta: {
title: "同地点同类型重复投诉问题列表",
isTab: false,
},
},
{
path: "satisfactionEval/Problem/tddtlxsj/detail",
props: true,
component: () => import("@/views/dataBoard/satisfactionEval/Problem/tddtlxsj/detail"),
name: "dataBoard-satisfactionEval-Problem-tddtlxsj-detail",
meta: {
title: "同地点同类型重复投诉问题详情",
isTab: false,
},
},
{
path: "satisfactionEval/Problem/tyqybtlx",
props: true,
component: () => import("@/views/dataBoard/satisfactionEval/Problem/tyqybtlx/list"),
name: "dataBoard-satisfactionEval-Problem-tyqybtlx-list",
meta: {
title: "同一区域不同类型重复投诉问题列表",
isTab: false,
},
},
{
path: "satisfactionEval/Problem/tyqybtlx/detail",
props: true,
component: () => import("@/views/dataBoard/satisfactionEval/Problem/tyqybtlx/detail"),
name: "dataBoard-satisfactionEval-Problem-tyqybtlx-detail",
meta: {
title: "同一区域不同类型重复投诉问题详情",
isTab: false,
},
},
{
path: "satisfactionEval/Problem/tyry",
props: true,
component: () => import("@/views/dataBoard/satisfactionEval/Problem/tyry/list"),
name: "dataBoard-satisfactionEval-Problem-tyry-list",
meta: {
title: "同一人员重复投诉问题列表",
isTab: false,
},
},
{
path: "satisfactionEval/Problem/tyry/detail",
props: true,
component: () => import("@/views/dataBoard/satisfactionEval/Problem/tyry/detail"),
name: "dataBoard-satisfactionEval-Problem-xqwmz-detail",
meta: {
title: "同一人员重复投诉问题详情",
isTab: false,
},
},
{ {
path: "organizational/index", path: "organizational/index",
props: true, props: true,

14
src/views/dataBoard/overview/components/Bmysxxq.vue

@ -19,21 +19,20 @@
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">需求类别</div> <div class="label">需求类别</div>
<div class="value">教育讲座类-健康知识专业讲座</div> <div class="value">{{detail.commonServiceTypeName}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">需求标题</div> <div class="label">需求标题</div>
<div class="value">教育讲座类共性需求</div> <div class="value">{{detail.title}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<div class="items"> <div class="items">
<div class="label">详细说明</div> <div class="label">详细说明</div>
<div class="value"> <div class="value">
健康生活方式是指有益于健康的习惯化的行为方式主要表现为生活有规律没有不良嗜好讲求个人卫生环境卫生饮食卫生讲科学不迷 {{detail.content}}
平时注意保健生病及时就医积极参加健康有益的文体活动和社会活动等等
</div> </div>
</div> </div>
</el-col> </el-col>
@ -120,7 +119,8 @@ export default {
form: { form: {
roles: "", roles: "",
user: "", user: "",
} },
detail: {}
}; };
}, },
methods: { methods: {
@ -132,7 +132,9 @@ export default {
this.getDetail(id); this.getDetail(id);
}, },
getDetail(id) { getDetail(id) {
this.$http.get('/governance/commonDemand/detail/'+id,{}).then(({data:{data}}) => {
this.detail = data
});
}, },
handleDispatch() { handleDispatch() {
this.$refs.ResourceScheduling.open() this.$refs.ResourceScheduling.open()

2
src/views/dataBoard/overview/components/DemandSwiperList.vue

@ -51,7 +51,7 @@ export default {
}, },
methods: { methods: {
handleView(item) { handleView(item) {
this.$emit('showDetail', item.id) this.$emit('showDetail', item)
} }
} }
} }

25
src/views/dataBoard/overview/components/RequirementList.vue

@ -4,9 +4,9 @@
<Tabs :list="tab" :value="tabval" @changeVal="(val) => tabval = val"/> <Tabs :list="tab" :value="tabval" @changeVal="(val) => tabval = val"/>
</div> </div>
<DemandSwiperList v-if="tabval === 1" :list="userDemandList" @showDetail="showDetail"> <DemandSwiperList v-if="tabval === 1" :list="userDemandList" @showDetail="showDetail">
<template slot-scope="item"> <template slot-scope="{data}">
<span>{{ item.demandUser }}</span> <span>{{ data.demandUserName }}</span>
<span>{{ item.content }}</span> <span>{{ data.content }}</span>
</template> </template>
</DemandSwiperList> </DemandSwiperList>
@ -15,9 +15,9 @@
<Tabs :list="tab2" :value="tabval2" @changeVal="(val) => tabval2 = val"/> <Tabs :list="tab2" :value="tabval2" @changeVal="(val) => tabval2 = val"/>
</div> </div>
<DemandSwiperList v-if="tabval2 === 1" :list="commonDemandList" @showDetail="showDetail2"> <DemandSwiperList v-if="tabval2 === 1" :list="commonDemandList" @showDetail="showDetail2">
<template slot-scope="item"> <template slot-scope="{data}">
<span>{{ item.createdTime }}</span> <span>{{ data.createdTime }}</span>
<span>{{ item.title }}</span> <span>{{ data.title }}</span>
</template> </template>
</DemandSwiperList> </DemandSwiperList>
<DemandCharts v-else/> <DemandCharts v-else/>
@ -69,20 +69,21 @@ export default {
this.getCommonDemandList() this.getCommonDemandList()
}, },
methods: { methods: {
showDetail() { showDetail({demandRecId}) {
this.$refs.ServiceDetails.open(); this.$refs.ServiceDetails.open(demandRecId);
}, },
showDetail2() { showDetail2() {
this.$refs.Bmysxxq.open(); this.$refs.Bmysxxq.open();
}, },
getUserDemandList() { getUserDemandList() {
this.$http.post('/governance/userdemand/pagelist').then(({data}) => { this.$http.post('/governance/userdemand/pagelist', {status: "pending", pageSize: 20}).then(({data: {data}}) => {
this.userDemandList = data.list || [] console.log(data.list, 'data.list ', data)
this.userDemandList = data ? data.list : []
}) })
}, },
getCommonDemandList() { getCommonDemandList() {
this.$http.get('/governance/commonDemand/list?assignFlag=0').then(({data}) => { this.$http.get('/governance/commonDemand/list?assignFlag=0&pageSize=20').then(({data: {data}}) => {
this.commonDemandList = data.list || [] this.commonDemandList = data ? data.list : []
}) })
} }
} }

31
src/views/dataBoard/overview/components/ServiceDetails.vue

@ -20,38 +20,38 @@
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">所属网格</div> <div class="label">所属网格</div>
<div class="value">xxxx社区第一网格</div> <div class="value">{{detail.gridName}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">需求类型</div> <div class="label">需求类型</div>
<div class="value">公益事业类-社会困难群体生活帮扶</div> <div class="value">缺字段</div>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">上报类型</div> <div class="label">上报类型</div>
<div class="value">社区帮办</div> <div class="value">{{detail.reportTypeName}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">上报人</div> <div class="label">上报人</div>
<div class="value">张俊男</div> <div class="value">{{detail.reportUserName}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">上报人联系电话</div> <div class="label">上报人联系电话</div>
<div class="value">182****8989</div> <div class="value">{{detail.reportUserMobile}}</div>
<CallPhone icon="el-icon-phone"/> <CallPhone icon="el-icon-phone"/>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">上报时间</div> <div class="label">上报时间</div>
<div class="value">2023-08-22 15:20:20</div> <div class="value">{{detail.reportTime}}</div>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -60,27 +60,27 @@
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">需求人</div> <div class="label">需求人</div>
<div class="value">李兵</div> <div class="value">{{detail.demandUserName}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">需求人联系电话</div> <div class="label">需求人联系电话</div>
<div class="value">133****5656</div> <div class="value">{{detail.demandUserMobile}}</div>
<CallPhone icon="el-icon-phone"/> <CallPhone icon="el-icon-phone"/>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">服务时间</div> <div class="label">服务时间</div>
<div class="value">2023-08-23 14:20:30</div> <div class="value">{{detail.serviceStartTime}}-{{detail.serviceEndTime}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<div class="items"> <div class="items">
<div class="label">需求内容</div> <div class="label">需求内容</div>
<div class="value"> <div class="value">
一直失业在家没有生活来源生活比较困难希望社区能给与帮助找一份稳定的工作维持生活开销 {{detail.content}}
</div> </div>
</div> </div>
</el-col> </el-col>
@ -90,13 +90,13 @@
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">服务方</div> <div class="label">服务方</div>
<div class="value">志愿者-王佳俊</div> <div class="value">{{detail.serviceShowName}}</div>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<div class="items"> <div class="items">
<div class="label">服务方联系电话</div> <div class="label">服务方联系电话</div>
<div class="value">156****5656</div> <div class="value">缺字段</div>
<CallPhone icon="el-icon-phone"/> <CallPhone icon="el-icon-phone"/>
</div> </div>
</el-col> </el-col>
@ -150,7 +150,8 @@ export default {
form: { form: {
roles: "", roles: "",
user: "", user: "",
} },
detail: {}
}; };
}, },
methods: { methods: {
@ -162,7 +163,9 @@ export default {
this.getDetail(id); this.getDetail(id);
}, },
getDetail(id) { getDetail(id) {
this.$http.post('/governance/userdemand/demandDetail', {demandRecId: id}).then(({data: {data}}) => {
this.detail = data
})
}, },
handleDispatch() { handleDispatch() {
this.$refs.ResourceScheduling.open() this.$refs.ResourceScheduling.open()

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

@ -1,5 +1,5 @@
<template> <template>
<div class="m-subbox m-jdhx"> <div class=" m-jdhx">
<div class="m-jdhx-top"> <div class="m-jdhx-top">
<div class="m-jdhx-card"> <div class="m-jdhx-card">
<div class="m-jdhx-card-title"> <div class="m-jdhx-card-title">

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

@ -1,5 +1,5 @@
<template> <template>
<div class="m-subbox m-rfsjtj"> <div class=" m-rfsjtj">
<div class="m-rfsjtj-item"> <div class="m-rfsjtj-item">
<div class="m-rfsjtj-item-des">采集房屋数</div> <div class="m-rfsjtj-item-des">采集房屋数</div>
<div class="m-rfsjtj-item-jian"> <div class="m-rfsjtj-item-jian">

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

@ -648,5 +648,7 @@ export default {
} }
} }
.m-map {
height: 1050px;
}
</style> </style>

51
src/views/dataBoard/renfang/cpts/fwPieOption.js

@ -2,23 +2,21 @@ import * as echarts from 'echarts'
export function pieOption() { export function pieOption() {
const center = ["50%", "170px"]; const center = ["50%", "170px"];
return { return {
color: ["#1A95FF","#FFAA00","#04C790"],
title: { title: {
text: "0", text: "",
top: 45, subtext: '总数',
left: "center", left: '45%',
top: '35%',
textAlign :'center',
textStyle: { textStyle: {
width: "100%", color: '#7FCEFF',
fontSize: 24, fontSize: 18,
color: "#FFFFFF", },
fontWeight: 400, subtextStyle: {
fontSize: 12,
color: '#A3B9DA'
}, },
itemGap: 5,
// subtext: "总数",
// subtextStyle: {
// fontSize: 20,
// color: "#fff",
// fontWeight: 400,
// },
}, },
tooltip: { tooltip: {
show: false, show: false,
@ -57,31 +55,6 @@ export function pieOption() {
}, },
itemStyle: { itemStyle: {
normal: { normal: {
color: (list) => {
// 注意 !!!!! 这里的数组一定要和实际的类目长度相等或大于,不然会缺少颜色报错
var colorList = [
{
colorStart:'#00023A',
colorEnd:'#6FDEFF'
},
{
colorStart:'#00023A',
colorEnd:'#FFAA00'
},
{
colorStart:'#00023A',
colorEnd:'#1A95FF'
},
]
return new echarts.graphic.LinearGradient(1, 0, 0, 0, [{ //左、下、右、上
offset: 0,
color: colorList[list.dataIndex]['colorStart']
}, {
offset: 1,
color: colorList[list.dataIndex]['colorEnd']
}])
}
} }
}, },

982
src/views/dataBoard/renfang/cpts/fwgl.vue

File diff suppressed because it is too large

171
src/views/dataBoard/renfang/cpts/jmPieOption.js

@ -1,90 +1,95 @@
import * as echarts from 'echarts' import * as echarts from 'echarts'
export function pieOption() {
const center = ["50%", "170px"];
return {
title: {
text: "0",
top: 45,
left: "center",
textStyle: {
width: "100%",
fontSize: 24,
color: "#FFFFFF",
fontWeight: 400,
},
itemGap: 5,
// subtext: "总数",
// subtextStyle: {
// fontSize: 20,
// color: "#fff",
// fontWeight: 400,
// },
},
tooltip: {
show: false,
},
// legend: {
// top: 350,
// bottom: 0,
// itemWidth: 20,
// itemHeight: 10,
// textStyle: {
// color: '#D2E7FF',
// fontSize: 16,
// lineHeight: 20,
// },
// }, export function pieOption() {
series: [ const center = ["50%", "170px"];
{ return {
name: 'Access From', color: ["#1A95FF", "#FFAA00", "#04C790"],
type: 'pie', /* title: {
radius: ['60%', '90%'], text: "0",
avoidLabelOverlap: false, top: 45,
label: { left: "center",
show: false, textStyle: {
position: 'center' width: "100%",
fontSize: 24,
color: "#FFFFFF",
fontWeight: 400,
},
itemGap: 5,
// subtext: "总数",
// subtextStyle: {
// fontSize: 20,
// color: "#fff",
// fontWeight: 400,
// },
},*/
tooltip: {
show: false,
}, },
// emphasis: { // legend: {
// label: { // top: 350,
// show: true, // bottom: 0,
// fontSize: 40, // itemWidth: 20,
// fontWeight: 'bold' // itemHeight: 10,
// } // textStyle: {
// color: '#D2E7FF',
// fontSize: 16,
// lineHeight: 20,
// }, // },
labelLine: {
show: false
},
itemStyle: {
normal: {
color: (list) => {
// 注意 !!!!! 这里的数组一定要和实际的类目长度相等或大于,不然会缺少颜色报错
var colorList = [
{
colorStart:'#00023A',
colorEnd:'#6FDEFF'
},
{
colorStart:'#00023A',
colorEnd:'#FFAA00'
},
]
return new echarts.graphic.LinearGradient(1, 0, 0, 0, [{ //左、下、右、上
offset: 0,
color: colorList[list.dataIndex]['colorStart']
}, {
offset: 1,
color: colorList[list.dataIndex]['colorEnd']
}])
}
}
},
data: [ // },
series: [
{
name: 'Access From',
type: 'pie',
radius: ['60%', '90%'],
avoidLabelOverlap: false,
labelLine: {
show: false
},
data: [],
label: {
show: false,
position: 'center',
formatter: data => {
console.log(data.color)
return `{c_style|${data.percent.toFixed(0)}%}\n{b_style|${data.name}}`
// '{c_style|{d}%}\n{b_style|{b}}'
},
rich: {
b_style: {
fontSize: 12,
fontWeight: 400,
color: '#A3B9DA'
},
c_style: {
padding: [0, 0, 5, 0],
fontSize: 24,
fontWeight: 'bold',
color: '#fff'
}
}
},
emphasis: {
label: {
show: true,
fontSize: '14',
fontWeight: 'normal'
}
},
/* label: {
show: false,
position: 'center'
},
emphasis: {
label: {
show: true,
fontSize: 40,
fontWeight: 'bold'
}
},*/
}
] ]
} };
]
};
} }

906
src/views/dataBoard/renfang/cpts/jmgl.vue

@ -1,484 +1,486 @@
<template> <template>
<div> <div>
<div class="m-jmgl"> <div class="m-jmgl">
<div class="m-pie"> <div class="m-pie">
<div class="pie-left"> <div class="pie-left">
<screen-echarts-frame <screen-echarts-frame
class="" v-if="pandectData.totalResidents"
@myChartMethod="pieInitOk" ref="pieChart"
ref="pieChart" class=""
v-if="pandectData.totalResidents" @myChartMethod="pieInitOk"
></screen-echarts-frame> ></screen-echarts-frame>
</div> </div>
<div class="pie-legend">
<div class="item"> <div class="pie-right">
<div class="item-logo logo1"></div> <div class="new-number">
<div class="item-name">常住人口</div> <!-- <div class="row-item" @click="toListPage">
</div> <div class="item-one">
<div class="item"> <img
<div class="item-logo logo2"></div> class="img"
<div class="item-name">流动人口</div> src="@/assets/images/shuju/renfang/jm-logo.png"
</div> alt
</div> />
<div class="pie-right"> <div class="title">居民总数</div>
<div class="right-row"> </div>
<div class="row-item" @click="toListPage"> <div class="item-two">
<div class="item-one"> <div class="num">{{ pandectData.totalResidents }}</div>
<img <div class="unit"></div>
class="img" </div>
src="@/assets/images/shuju/renfang/jm-logo.png" </div>-->
alt <div class="new-number-item" @click="toListPage('permanent', '常住人口')">
/> <div class="title">常住人口</div>
<div class="title">居民总数</div> <div class="numbers">
</div> <div class="num color1">
<div class="item-two"> {{ pandectData.permanentResiCount }}
<div class="num">{{ pandectData.totalResidents }}</div> </div>
<div class="unit"></div> <div class="unit"></div>
</div> </div>
</div> </div>
<div class="new-number-item" @click="toListPage('float', '流动人口')">
<div <div class="title">流动人口</div>
class="row-item marginleft10" <div class="numbers color2">
@click="toListPage('permanent', '常住人口')" <div class="num">{{ pandectData.floatingResiCount }}</div>
> <div class="unit"></div>
<div class="item-one"> </div>
<img </div>
class="img" </div>
src="@/assets/images/shuju/renfang/jm-logo.png" </div>
alt </div>
/> </div>
<div class="title">常住人口</div> </div>
</div>
<div class="item-two">
<div class="num">
{{ pandectData.permanentResiCount }}
</div>
<div class="unit"></div>
</div>
</div>
</div>
<div class="right-row margintop18">
<div
class="row-item"
@click="toListPage('float', '流动人口')"
>
<div class="item-one">
<img
class="img"
src="@/assets/images/shuju/renfang/jm-logo.png"
alt
/>
<div class="title">流动人口</div>
</div>
<div class="item-two">
<div class="num">{{ pandectData.floatingResiCount }}</div>
<div class="unit"></div>
</div>
</div>
</div>
</div>
</div>
<div class="m-bar">
<div class="bar-title">
<img
class="title_img"
src="@/assets/images/index/list-logo.png"
alt
/>
<div class="tip_title">近一年人口流动变化趋势图</div>
<div class="title_line"></div>
</div>
<div class="bar-legend">
<div class="item-logo logo1"></div>
<div class="item-name">常住人口</div>
<div class="item-logo logo2 marginleft10"></div>
<div class="item-name">流动人口</div>
</div>
<div class="bar-main">
<screen-echarts-frame
class=""
@myChartMethod="barInitOk"
ref="barChart"
></screen-echarts-frame>
</div>
</div>
<!-- <screen-nodata class="nodata"
v-if="showNoData"></screen-nodata> -->
</div>
</div>
</template> </template>
<script> <script>
import screenEchartsFrame from "@/views/dataBoard/cpts/screen-echarts-frame/index"; import screenEchartsFrame from "@/views/dataBoard/cpts/screen-echarts-frame/index";
import { pieOption } from "./jmPieOption.js"; import {pieOption} from "./jmPieOption.js";
import { barOption } from "./jmBarOption.js"; import {barOption} from "./jmBarOption.js";
import { requestPostBi } from "@/js/dai/request-bipass"; import {requestPostBi} from "@/js/dai/request-bipass";
export default { export default {
props: { props: {
orgId: { orgId: {
type: String, type: String,
default: "", default: "",
}, },
}, },
components: { components: {
screenEchartsFrame, screenEchartsFrame,
}, },
// mixins: [animate] // mixins: [animate]
beforeDestroy() { beforeDestroy() {
this.timer && clearInterval(this.timer); this.timer && clearInterval(this.timer);
}, },
data() { data() {
return { return {
showNoData: false, showNoData: false,
timer: null, timer: null,
barChart: "", barChart: "",
pieChart: "", pieChart: "",
pieOption: {}, pieOption: {},
barOption: {}, barOption: {},
pieInitState: false, pieInitState: false,
barInitState: false, barInitState: false,
pieData: [], pieData: [],
info: { info: {
resident_count: 0, resident_count: 0,
inhabitant_count: 0, inhabitant_count: 0,
floating_count: 0, floating_count: 0,
}, },
pandectData:{} pandectData: {}
}; };
}, },
watch: { watch: {
orgId() { orgId() {
this.getData(); this.getData();
}, },
}, },
mounted() { mounted() {
this.$nextTick(()=>{ this.$nextTick(() => {
this.getData(); this.getData();
}) })
}, },
methods: { methods: {
toListPage(type = "", type_name = "") { toListPage(type = "", type_name = "") {
this.$router.push({ this.$router.push({
path: "/dataBoard/renfang/resi-list", path: "/dataBoard/renfang/resi-list",
query: { query: {
org_id: this.orgId, org_id: this.orgId,
type, type,
type_name, type_name,
}, },
}); });
}, },
pieInitOk() { pieInitOk() {
this.pieInitState = true; this.pieInitState = true;
}, },
barInitOk() { barInitOk() {
this.barInitState = true; this.barInitState = true;
}, },
async getData() { async getData() {
await this.getInfo(); await this.getInfo();
this.getBar(); this.getBar();
this.getPie(); this.getPie();
}, },
getBar() { getBar() {
if (this.barInitState) { if (this.barInitState) {
this.getBarData(); this.getBarData();
} else { } else {
setTimeout(() => { setTimeout(() => {
this.getBar(); this.getBar();
}, 500); }, 500);
} }
}, },
getPie() { getPie() {
if (this.pieInitState) { if (this.pieInitState) {
this.iniPieChart(); this.iniPieChart();
} else { } else {
setTimeout(() => { setTimeout(() => {
this.getPie(); this.getPie();
}, 500); }, 500);
} }
}, },
// //
async getInfo() { async getInfo() {
const url = "resident_view"; const url = "resident_view";
const { data, code, msg } = await requestPostBi( const {data, code, msg} = await requestPostBi(
url, url,
{ {
queryParam: { queryParam: {
org_id: this.orgId, org_id: this.orgId,
}, },
}, },
{ {
// mockId: 60029804, // mockId: 60029804,
} }
); );
if (code === 0) { if (code === 0) {
if (data && Array.isArray(data) && data.length > 0) { if (data && Array.isArray(data) && data.length > 0) {
let info = data[0]; let info = data[0];
this.info = { ...this.info, ...info }; this.info = {...this.info, ...info};
} else { } else {
this.info = { this.info = {
resident_count: 0, resident_count: 0,
inhabitant_count: 0, inhabitant_count: 0,
floating_count: 0, floating_count: 0,
}; };
} }
} else { } else {
this.$message.error(msg); this.$message.error(msg);
} }
}, },
// //
async iniPieChart() { async iniPieChart() {
this.$refs.pieChart.clear(); this.$refs.pieChart.clear();
// this.$refs.pieChart.showLoading() this.pieOption = pieOption();
// pieChart const {pandectData} = this;
this.pieOption = pieOption(); this.pieData = [
const { pandectData } = this; {value: pandectData.permanentResiCount, name: "常住人口"},
// {value: pandectData.floatingResiCount, name: "流动人口"},
this.pieOption.title.text = ];
(pandectData.totalResidents != 0 this.pieOption.series[0].data = this.pieData;
? parseInt( this.$refs.pieChart.setOption(this.pieOption);
(100 * pandectData.permanentResiCount) / pandectData.totalResidents this.$refs.pieChart.myChart.setOption(this.pieOption);
) this.$refs.pieChart.myChart.on('mouseover', (params) => {
: "--") + "%"; var oldIndex = currentIndex;
this.pieData = [ var currentIndex = params.dataIndex;
{ value: pandectData.permanentResiCount, name: "常住人口" }, this.highlightPie(currentIndex, oldIndex);
{ value: pandectData.floatingResiCount, name: "流动人口" }, })
];
this.pieOption.series[0].data = this.pieData; setTimeout(() => {
this.$refs.pieChart.setOption(this.pieOption); this.highlightPie(0, 1);
// this.$refs.pieChart.hideLoading() }, 50)
},
// highlightPie(currentIndex, oldIndex) {
this.$refs.pieChart.myChart.on("selectchanged", (params) => { this.$refs.pieChart.myChart.dispatchAction({
console.log(params); type: 'downplay',
const { seriesIndex: 1,
fromActionPayload: { dataIndexInside }, dataIndex: oldIndex
} = params; })
this.pieOption.title.text = this.$refs.pieChart.myChart.dispatchAction({
(pandectData.totalResidents != 0 type: 'highlight',
? parseInt( seriesIndex: 1,
(100 * dataIndex: currentIndex
[ })
pandectData.permanentResiCount, },
pandectData.floatingResiCount, //
][dataIndexInside]) / async getBarData() {
pandectData.totalResidents const url = "resident_trend";
)
: "--") + "%"; this.$refs.barChart.showLoading();
this.$refs.pieChart.myChart.setOption(this.pieOption); const {data, code, msg} = await requestPostBi(
}); url,
}, {
queryParam: {
// org_id: this.orgId,
async getBarData() { },
const url = "resident_trend"; },
{
this.$refs.barChart.showLoading(); // mockId: 60389779,
const { data, code, msg } = await requestPostBi( }
url, );
{
queryParam: { if (code === 0) {
org_id: this.orgId, if (data && Array.isArray(data)) {
}, let xaxis = [];
}, let series = [{data: []}, {data: []}];
{ for (const {
// mockId: 60389779, month,
} inhabitant_count,
); floating_count,
} of data) {
if (code === 0) { xaxis.push(month);
if (data && Array.isArray(data)) { series[0].data.push(inhabitant_count);
let xaxis = []; series[1].data.push(floating_count);
let series = [{ data: [] }, { data: [] }]; }
for (const { this.iniBarChart(xaxis, series);
month, this.$refs.barChart.hideLoading();
inhabitant_count, }
floating_count, } else {
} of data) { this.$message.error(msg);
xaxis.push(month); }
series[0].data.push(inhabitant_count); },
series[1].data.push(floating_count);
} //
this.iniBarChart(xaxis, series); async iniBarChart(xaxis, series) {
this.$refs.barChart.hideLoading(); this.showNoData = false;
} this.$refs.barChart.clear();
} else { this.barOption = barOption();
this.$message.error(msg); this.$refs.barChart.setOption(this.barOption, true);
} this.$refs.barChart.setOption(
}, {
xAxis: {data: xaxis},
// series,
async iniBarChart(xaxis, series) { },
this.showNoData = false; true
this.$refs.barChart.clear(); );
this.barOption = barOption(); },
this.$refs.barChart.setOption(this.barOption, true); },
this.$refs.barChart.setOption(
{
xAxis: { data: xaxis },
series,
},
true
);
},
},
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.m-jmgl { .m-jmgl {
height: 100%; width: 100%;
width: 100%; height: 100%;
.m-pie { .m-pie {
margin-top: 24px; display: flex;
display: flex; justify-content: space-around;
justify-content: space-around; margin-top: 24px;
align-items: center;
.pie-left {
height: 120px; .pie-left {
flex: 0 0 120px; flex: 0 0 120px;
} height: 120px;
}
.pie-legend {
.item { .pie-legend {
display: flex; .item {
margin-bottom: 12px; display: flex;
} margin-bottom: 12px;
} }
.pie-right { }
.right-row {
display: flex; .pie-right {
// justify-content: space-between; .right-row {
display: flex;
.row-item { // justify-content: space-between;
flex: 0 0 100px;
cursor: pointer; .row-item {
flex: 0 0 100px;
.item-one { cursor: pointer;
display: flex;
.img { .item-one {
width: 15px; display: flex;
height: 15px;
} .img {
.title { width: 15px;
margin-left: 9px; height: 15px;
font-size: 14px; }
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400; .title {
color: rgba(255, 255, 255, 0.65); font-family: PingFangSC-Regular, PingFang SC;
} font-size: 14px;
} font-weight: 400;
margin-left: 9px;
.item-two { color: rgba(255, 255, 255, 0.65);
margin-top: 8px; }
display: flex; }
align-items: flex-end;
margin-left: 23px; .item-two {
display: flex;
.num { align-items: flex-end;
font-size: 24px; margin-top: 8px;
font-family: PingFangSC-Medium, PingFang SC; margin-left: 23px;
font-weight: 500;
color: #ffffff; .num {
} font-family: PingFangSC-Medium, PingFang SC;
font-size: 24px;
.unit { font-weight: 500;
margin-left: 9px; color: #ffffff;
font-size: 14px; }
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500; .unit {
color: #ffffff; font-family: PingFangSC-Medium, PingFang SC;
} font-size: 14px;
} font-weight: 500;
} margin-left: 9px;
} color: #ffffff;
} }
} }
}
.m-bar { }
position: relative; }
margin-top: 14px; }
.bar-title { .m-bar {
display: flex; position: relative;
align-items: center; margin-top: 14px;
// margin-left: 24px;
.bar-title {
.title_img { display: flex;
width: 17px; align-items: center;
height: 17px; // margin-left: 24px;
}
.tip_title { .title_img {
margin-left: 8px; width: 17px;
font-size: 16px; height: 17px;
font-family: PingFangSC-Medium, PingFang SC; }
font-weight: 500;
color: #ffffff; .tip_title {
line-height: 22px; font-family: PingFangSC-Medium, PingFang SC;
} font-size: 16px;
font-weight: 500;
.title_line { line-height: 22px;
margin-left: 8px; margin-left: 8px;
width: 244px; color: #ffffff;
height: 1px; }
background: linear-gradient(
270deg, .title_line {
rgba(55, 198, 255, 0.1) 0%, width: 244px;
#1995ff 100% height: 1px;
); margin-left: 8px;
} background: linear-gradient(
} 270deg,
rgba(55, 198, 255, 0.1) 0%,
.bar-legend { #1995ff 100%
position: absolute; );
top: 37px; }
right: 20px; }
display: flex;
} .bar-legend {
position: absolute;
.bar-main { top: 37px;
margin-top: 10px; right: 20px;
height: 225px; display: flex;
} }
}
.bar-main {
height: 225px;
margin-top: 10px;
}
}
} }
.item-name { .item-name {
margin-left: 8px; font-family: PingFangSC-Regular, PingFang SC;
font-size: 12px; font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC; font-weight: 400;
font-weight: 400; margin-left: 8px;
color: #8c8c8c; color: #8c8c8c;
} }
.item-logo { .item-logo {
margin-top: 2px; width: 8px;
width: 8px; height: 8px;
height: 8px; margin-top: 2px;
} }
.logo1 { .logo1 {
background: #6fdeff; background: #6fdeff;
} }
.logo2 { .logo2 {
background: #ffaa00; background: #ffaa00;
} }
.logo3 { .logo3 {
background: #1a95ff; background: #1a95ff;
}
.color1 {
color: #1A95FF;
}
.color2 {
color: #ffaa00;
} }
.color3 {
color: #04C790;
}
.marginleft10 { .marginleft10 {
margin-left: 10px; margin-left: 10px;
} }
.margintop18 { .margintop18 {
margin-top: 18px; margin-top: 18px;
}
.pie-right {
width: calc(100% - 200px);
}
.new-number {
display: flex;
flex-wrap: wrap;
.new-number-item:nth-of-type(odd) {
margin-right: 20px;
}
.new-number-item:nth-of-type(3) {
margin-top: 23px;
}
.new-number-item {
flex: 0 0 calc(50% - 10px);
.title {
font-size: 16px;
font-weight: 400;
margin-bottom: 10px;
color: #FFFFFF;
}
.numbers {
display: flex;
align-items: flex-end;
.num {
font-size: 30px;
font-weight: bold;
font-style: italic;
}
.unit {
font-size: 14px;
font-weight: 500;
position: relative;
top: -5px;
margin-left: 5px;
color: #A3B9DA;
}
}
}
} }
</style> </style>

890
src/views/dataBoard/renfang/cpts/rkfx.vue

@ -1,453 +1,493 @@
<template> <template>
<div class="m-rkyj"> <div class="m-rkyj">
<div class="list"> <!-- <div class="list">
<div v-for="item in tabList" :key="item" :class="['item', { 'item-sel': currentTab == item }]" <div v-for="item in tabList" :key="item" :class="['item', { 'item-sel': currentTab == item }]"
@click="currentTab = item"> @click="currentTab = item">
{{ item }} {{ item }}
</div> </div>
</div> </div>-->
<div class="pie-main"> <Tabs :list="tabList" :value="currentTab" @changeVal="(val) => currentTab = val"/>
<div class="legend cur"> <div class="pie-main">
<div class="legend-row" :key="'pie' + item.name" v-for="item in pieData" @click="handleClickItem(item)"> <div class="pie">
<div class="name">{{ item.name }}</div> <screen-echarts-frame
<div class="content"> ref="pieChart"
<div class="num">{{ item.value }}</div> @handelClickMyPei="handelClickMyPei"
<div class="unit"></div> @myChartMethod="pieInitOk"
</div> />
</div> </div>
</div> <div class="legend cur">
<div class="pie"> <div v-for="item in pieData" :key="'pie' + item.name" class="legend-row" @click="handleClickItem(item)">
<screen-echarts-frame @myChartMethod="pieInitOk" @handelClickMyPei="handelClickMyPei" ref="pieChart"></screen-echarts-frame> <div class="name">{{ item.name }}</div>
</div> <div class="content">
</div> <div class="num">{{ item.value }}</div>
</div> <div class="unit"></div>
</div>
</div>
</div>
</div>
</div>
</template> </template>
<script> <script>
import screenEchartsFrame from "@/views/dataBoard/cpts/screen-echarts-frame/index"; import screenEchartsFrame from "@/views/dataBoard/cpts/screen-echarts-frame/index";
import { import {
pieOption pieOption
} from "./rkfxPieOption.js"; } from "./rkfxPieOption.js";
import { import {
requestPostBi requestPostBi
} from "@/js/dai/request-bipass"; } from "@/js/dai/request-bipass";
export default { import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue";
props: {
orgId: { export default {
type: String, components: {
default: "", screenEchartsFrame, Tabs
}, },
}, props: {
data() { orgId: {
return { type: String,
showNoData: false, default: "",
timer: null, },
pieChart: "", },
pieOption: {}, data() {
pieInitState: false, return {
pieData: [], showNoData: false,
tabList: ["性别", "户籍", "人户状况", "年龄", "志愿者类别", "党员文化程度", timer: null,
pieChart: "",
pieOption: {},
pieInitState: false,
pieData: [],
/* tabList: ["", "", "", "", "", "",
// "", // "",
], ],*/
currentTab: "性别", tabList: [
info: { {
male_count: 0, label: "性别",
female_count: 0, value: "性别"
resi_y_house_y_count: 0, }, {
resi_y_house_n_count: 0, label: "户籍",
resi_n_house_y_count: 0, value: "户籍"
primary_count: 0, }, {
junior_high_count: 0, label: "人户状况",
second_speci_count: 0, value: "人户状况"
high_school_count: 0, }, {
junior_college_count: 0, label: "年龄",
undergrad_count: 0, value: "年龄"
master_count: 0, }, {
doctor_count: 0, label: "志愿者类别",
local_count: 0, value: "志愿者类别"
field_count: 0, }, {
age50_count: 0, label: "党员文化程度",
age5059_count: 0, value: "党员文化程度"
age6069_count: 0, }
age7079_count: 0, ],
age80_count: 0, currentTab: "性别",
culture_count: 0, info: {
committee_count: 0, male_count: 0,
capable_count: 0, female_count: 0,
friend_count: 0, resi_y_house_y_count: 0,
agent_count: 0, resi_y_house_n_count: 0,
mediator_count: 0, resi_n_house_y_count: 0,
collector_count: 0, primary_count: 0,
security_count: 0, junior_high_count: 0,
party_mem_count: 0, second_speci_count: 0,
}, high_school_count: 0,
}; junior_college_count: 0,
}, undergrad_count: 0,
components: { master_count: 0,
screenEchartsFrame, doctor_count: 0,
}, local_count: 0,
mounted() { field_count: 0,
this.init(); age50_count: 0,
}, age5059_count: 0,
watch: { age6069_count: 0,
currentTab() { age7079_count: 0,
this.setPieData(); age80_count: 0,
}, culture_count: 0,
orgId() { committee_count: 0,
this.init(); capable_count: 0,
}, friend_count: 0,
}, agent_count: 0,
methods: { mediator_count: 0,
async init() { collector_count: 0,
await this.getInfo(); security_count: 0,
this.getPie(); party_mem_count: 0,
}, },
handleClickItem(item) { };
const { },
type,
name mounted() {
} = item.data; this.init();
this.$router.push({ },
path: "/dataBoard/renfang/resi-analyze", watch: {
query: { currentTab() {
org_id: this.orgId, this.setPieData();
type, },
type_category: this.currentTab, orgId() {
type_name: name, this.init();
}, },
}); },
}, methods: {
// async init() {
async getInfo() { await this.getInfo();
const url = "resident_analyze"; this.getPie();
this.$refs.pieChart.showLoading(); },
const { handleClickItem(item) {
data, const {
code, type,
msg name
} = await requestPostBi(url, { } = item.data;
queryParam: { this.$router.push({
org_id: this.orgId, path: "/dataBoard/renfang/resi-analyze",
}, query: {
}, { org_id: this.orgId,
// mockId: 60041615, type,
}); type_category: this.currentTab,
this.$refs.pieChart.hideLoading(); type_name: name,
if (code === 0) { },
if (data && Array.isArray(data) && data.length > 0) { });
let info = data[0]; },
this.info = { //
...this.info, async getInfo() {
...info const url = "resident_analyze";
}; this.$refs.pieChart.showLoading();
} const {
} else { data,
this.$message.error(msg); code,
} msg
}, } = await requestPostBi(url, {
selItem(selItem, selIndex) { queryParam: {
this.tabList.forEach((element, index) => { org_id: this.orgId,
if (index === selIndex) { },
element.sel = true; }, {
} else { // mockId: 60041615,
element.sel = false; });
} this.$refs.pieChart.hideLoading();
}); if (code === 0) {
}, if (data && Array.isArray(data) && data.length > 0) {
pieInitOk() { let info = data[0];
this.pieInitState = true; this.info = {
}, ...this.info,
getPie() { ...info
if (this.pieInitState) { };
this.setPieData(); }
} else { } else {
setTimeout(() => { this.$message.error(msg);
this.getPie(); }
}, 500); },
} selItem(selItem, selIndex) {
}, this.tabList.forEach((element, index) => {
setPieData() { if (index === selIndex) {
const { element.sel = true;
currentTab, } else {
info element.sel = false;
} = this; }
if (currentTab == "性别") { });
this.pieData = [{ },
value: info.male_count || 0, pieInitOk() {
type: "male_count", this.pieInitState = true;
name: "男性", },
}, { getPie() {
value: info.female_count || 0, if (this.pieInitState) {
type: "female_count", this.setPieData();
name: "女性", } else {
}, ]; setTimeout(() => {
} else if (currentTab == "户籍") { this.getPie();
this.pieData = [{ }, 500);
value: info.local_count || 0, }
type: "local_count", },
name: "本地户籍", setPieData() {
}, { const {
value: info.field_count || 0, currentTab,
type: "field_count", info
name: "外地户籍", } = this;
}, ]; if (currentTab == "性别") {
} else if (currentTab == "人户状况") { this.pieData = [{
this.pieData = [{ value: info.male_count || 0,
value: info.resi_y_house_y_count || 0, type: "male_count",
type: "resi_y_house_y_count", name: "男性",
name: "人户一致", }, {
}, { value: info.female_count || 0,
value: info.resi_y_house_n_count || 0, type: "female_count",
type: "resi_y_house_n_count", name: "女性",
name: "人在户不在", },];
}, { } else if (currentTab == "户籍") {
value: info.resi_n_house_y_count || 0, this.pieData = [{
type: "resi_n_house_y_count", value: info.local_count || 0,
name: "户在人不在", type: "local_count",
}, ]; name: "本地户籍",
} else if (currentTab == "年龄") { }, {
this.pieData = [{ value: info.field_count || 0,
value: info.age50_count || 0, type: "field_count",
type: "age50_count", name: "外地户籍",
name: "50岁以下", },];
}, { } else if (currentTab == "人户状况") {
value: info.age5059_count || 0, this.pieData = [{
type: "age5059_count", value: info.resi_y_house_y_count || 0,
name: "50-59岁", type: "resi_y_house_y_count",
}, { name: "人户一致",
value: info.age6069_count || 0, }, {
type: "age6069_count", value: info.resi_y_house_n_count || 0,
name: "60-69岁", type: "resi_y_house_n_count",
}, { name: "人在户不在",
value: info.age7079_count || 0, }, {
type: "age7079_count", value: info.resi_n_house_y_count || 0,
name: "70-79岁", type: "resi_n_house_y_count",
}, { name: "户在人不在",
value: info.age80_count || 0, },];
type: "age80_count", } else if (currentTab == "年龄") {
name: "80岁以上", this.pieData = [{
}, ]; value: info.age50_count || 0,
} else if (currentTab == "志愿者类别") { type: "age50_count",
this.pieData = [{ name: "50岁以下",
value: info.culture_count || 0, }, {
type: "culture_count", value: info.age5059_count || 0,
name: "文化队伍", type: "age5059_count",
}, { name: "50-59岁",
value: info.committee_count || 0, }, {
type: "committee_count", value: info.age6069_count || 0,
name: "楼委会", type: "age6069_count",
}, { name: "60-69岁",
value: info.capable_count || 0, }, {
type: "capable_count", value: info.age7079_count || 0,
name: "能人达人", type: "age7079_count",
}, { name: "70-79岁",
value: info.friend_count || 0, }, {
type: "friend_count", value: info.age80_count || 0,
name: "老友俱乐部", type: "age80_count",
}, { name: "80岁以上",
value: info.agent_count || 0, },];
type: "agent_count", } else if (currentTab == "志愿者类别") {
name: "代办员", this.pieData = [{
}, { value: info.culture_count || 0,
value: info.mediator_count || 0, type: "culture_count",
type: "mediator_count", name: "文化队伍",
name: "调解员", }, {
}, { value: info.committee_count || 0,
value: info.collector_count || 0, type: "committee_count",
type: "collector_count", name: "楼委会",
name: "采集员", }, {
}, { value: info.capable_count || 0,
value: info.security_count || 0, type: "capable_count",
type: "security_count", name: "能人达人",
name: "治安巡逻员", }, {
}, { value: info.friend_count || 0,
value: info.party_mem_count || 0, type: "friend_count",
type: "party_mem_count", name: "老友俱乐部",
name: "党员中心户", }, {
}, ]; value: info.agent_count || 0,
} else if (currentTab == "党员文化程度") { type: "agent_count",
this.pieData = [{ name: "代办员",
value: info.primary_count || 0, }, {
type: "primary_count", value: info.mediator_count || 0,
name: "小学及文盲", type: "mediator_count",
}, { name: "调解员",
value: info.junior_high_count || 0, }, {
type: "junior_high_count", value: info.collector_count || 0,
name: "初中", type: "collector_count",
}, { name: "采集员",
value: info.second_speci_count || 0, }, {
type: "second_speci_count", value: info.security_count || 0,
name: "中专", type: "security_count",
}, { name: "治安巡逻员",
value: info.high_school_count || 0, }, {
type: "high_school_count", value: info.party_mem_count || 0,
name: "高中", type: "party_mem_count",
}, { name: "党员中心户",
value: info.junior_college_count || 0, },];
type: "junior_college_count", } else if (currentTab == "党员文化程度") {
name: "大专", this.pieData = [{
}, { value: info.primary_count || 0,
value: info.undergrad_count || 0, type: "primary_count",
type: "undergrad_count", name: "小学及文盲",
name: "本科", }, {
}, { value: info.junior_high_count || 0,
value: info.master_count || 0, type: "junior_high_count",
type: "master_count", name: "初中",
name: "硕士", }, {
}, { value: info.second_speci_count || 0,
value: info.doctor_count || 0, type: "second_speci_count",
type: "doctor_count", name: "中专",
name: "博士", }, {
}, ]; value: info.high_school_count || 0,
} else if (currentTab == "下级人口分布") { type: "high_school_count",
this.pieData = []; name: "高中",
} }, {
this.iniPieChart(); value: info.junior_college_count || 0,
}, type: "junior_college_count",
// name: "大专",
async iniPieChart() { }, {
this.$refs.pieChart.clear(); value: info.undergrad_count || 0,
// pieChart type: "undergrad_count",
this.pieOption = pieOption(); name: "本科",
this.pieOption.series[0].name = this.currentTab; }, {
this.pieOption.series[0].data = this.pieData; value: info.master_count || 0,
this.$refs.pieChart.setOption(this.pieOption); type: "master_count",
}, name: "硕士",
handelClickMyPei(item){ }, {
this.handleClickItem(item) value: info.doctor_count || 0,
} type: "doctor_count",
}, name: "博士",
}; },];
} else if (currentTab == "下级人口分布") {
this.pieData = [];
}
this.iniPieChart();
},
//
async iniPieChart() {
this.$refs.pieChart.clear();
// pieChart
this.pieOption = pieOption();
this.pieOption.series[0].name = this.currentTab;
this.pieOption.series[0].data = this.pieData;
this.$refs.pieChart.setOption(this.pieOption);
},
handelClickMyPei(item) {
this.handleClickItem(item)
}
},
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.cur{cursor: pointer;} /deep/ .tabs .tab {
.m-rkyj { min-width: 0 !important;
.list { }
margin-top: 8px;
display: flex; .cur {
flex-wrap: wrap; cursor: pointer;
}
.m-rkyj {
padding: 10px;
.list {
display: flex;
flex-wrap: wrap;
margin-top: 8px;
.item {
font-family: PingFangSC-Medium, PingFang SC;
font-size: 14px;
font-weight: 500;
line-height: 32px;
align-items: center;
flex: 0 0 117px;
height: 32px;
margin-top: 8px;
margin-right: 2px;
cursor: pointer;
text-align: center;
color: #ffffff;
background-image: url(../../../../assets/images/shuju/renfang/rkfx-bg.png);
background-size: cover;
}
.item { .item-sel {
margin-top: 8px; background-image: url(../../../../assets/images/shuju/renfang/rkfx-bg-sel.png);
background-image: url(../../../../assets/images/shuju/renfang/rkfx-bg.png); background-size: cover;
background-size: cover; }
flex: 0 0 117px; }
height: 32px;
margin-right: 2px;
text-align: center;
align-items: center;
font-size: 14px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #ffffff;
line-height: 32px;
cursor: pointer;
}
.item-sel { .pie-main {
background-image: url(../../../../assets/images/shuju/renfang/rkfx-bg-sel.png); display: flex;
background-size: cover; justify-content: space-between;
} align-items: center;
} margin-left: 25px;
.pie-main { .legend {
display: flex; // flex: 0 0 140px;
justify-content: space-between; margin-top: 40px;
margin-left: 25px;
.legend { .legend-row {
// flex: 0 0 140px; display: flex;
margin-top: 40px; align-items: center;
justify-content: space-between;
margin-top: 15px;
.legend-row { &:nth-child(1) .name::before {
margin-top: 15px; background: #1a95ff;
display: flex; }
justify-content: space-between;
align-items: center;
&:nth-child(1) .name::before { &:nth-child(2) .name::before {
background: #1a95ff; background: #ff6138;
} }
&:nth-child(2) .name::before { &:nth-child(3) .name::before {
background: #ff6138; background: #2adcea;
} }
&:nth-child(3) .name::before { &:nth-child(4) .name::before {
background: #2adcea; background: #2cc4ad;
} }
&:nth-child(4) .name::before { &:nth-child(5) .name::before {
background: #2cc4ad; background: #7377f5;
} }
&:nth-child(5) .name::before { &:nth-child(6) .name::before {
background: #7377f5; background: #32de66;
} }
&:nth-child(6) .name::before { &:nth-child(7) .name::before {
background: #32de66; background: #8155d4;
} }
&:nth-child(7) .name::before { &:nth-child(8) .name::before {
background: #8155d4; background: #c7ea48;
} }
&:nth-child(8) .name::before { &:nth-child(9) .name::before {
background: #c7ea48; background: #ef47c2;
} }
&:nth-child(9) .name::before { &:nth-child(10) .name::before {
background: #ef47c2; background: #d43349;
} }
&:nth-child(10) .name::before { .name {
background: #d43349; font-family: PingFangSC-Regular, PingFang SC;
} font-size: 12px;
font-weight: 400;
line-height: 17px;
position: relative;
margin-left: 5px;
color: rgba(255, 255, 255, 0.65);
.name { &::before {
position: relative; position: absolute;
margin-left: 5px; top: 4px;
font-size: 12px; left: -15px;
font-family: PingFangSC-Regular, PingFang SC; width: 8px;
font-weight: 400; height: 8px;
color: rgba(255, 255, 255, 0.65); content: "";
line-height: 17px; }
}
&::before { .content {
content: ""; font-family: PingFangSC-Medium, PingFang SC;
position: absolute; font-weight: 500;
top: 4px; display: flex;
left: -15px; align-items: flex-end;
width: 8px; margin-left: 24px;
height: 8px; color: #ffffff;
} }
}
.content { .num {
margin-left: 24px; font-size: 20px;
display: flex; }
align-items: flex-end;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #ffffff;
}
.num { .unit {
font-size: 20px; font-size: 14px;
} margin-left: 5px;
}
}
}
.unit { .pie {
margin-left: 5px; flex: 0 0 280px;
font-size: 14px; height: 146px;
} margin-top: 32px;
} }
} }
}
.pie {
margin-top: 32px;
flex: 0 0 280px;
height: 270px;
}
}
}
</style> </style>

24
src/views/dataBoard/renfang/cpts/rkfxPieOption.js

@ -21,23 +21,35 @@ export function pieOption() {
{ {
name: "", name: "",
type: "pie", type: "pie",
radius: [40, 130], radius: ["50%", "100%"],
center: ["50%", "50%"], center: ["50%", "50%"],
roseType: "area", roseType: "area",
itemStyle: { itemStyle: {
borderRadius: 1, borderRadius: 1,
}, },
avoidLabelOverlap: false, avoidLabelOverlap: true,
labelLine: { labelLine: {
show: false, show: true,
}, },
label: { label: {
normal: { normal: {
position: "inner",
show: true, show: true,
formatter: "{d}%",
fontSize: 24,
color: "#FFFFFF", color: "#FFFFFF",
formatter: '{name|{b}}\n{rate|{d}%}',
minMargin: 5,
edgeDistance: 1,
lineHeight: 15,
fontSize: 14,
// distanceToLabelLine: -60,
rich: {
name: {
padding: [0, 0, 10, 0],
},
rate: {
padding: [10, 0, 0, 0],
}
}
}, },
}, },
emphasis: { emphasis: {

494
src/views/dataBoard/renfang/index.vue

@ -1,38 +1,24 @@
<template> <template>
<div> <div>
<cpt-bread <cpt-bread
@tap="clickBreadItem" v-if="breadList.length > 1"
v-if="breadList.length > 1" :bread-list="breadList"
:bread-list="breadList" @tap="clickBreadItem"
/> />
<div class="g-row"> <div class="g-row">
<div class="g-left"> <div class="g-left">
<div class="m-box"> <div class="bgImg">
<div class="box-title"> <Title text="房屋概览"/>
<img <fwgl ref="fwgl" :orgId="orgData.org_id"></fwgl>
src="~@/assets/images/shuju/main/card-title-bg-480.png"
class="box-title-bg"
/>
<div class="box-title-txt">房屋概览</div>
</div>
<div class="m-subbox">
<fwgl ref="fwgl" :orgId="orgData.org_id"></fwgl>
</div>
</div> </div>
<div class="m-box"> <div class="bgImg">
<div class="box-title"> <Title text="居民概览"/>
<img <jmgl ref="jmgl" :orgId="orgData.org_id"></jmgl>
src="~@/assets/images/shuju/main/card-title-bg-480.png" </div>
class="box-title-bg" <div class="bgImg">
/> <Title text="图谱画像"/>
<div class="box-title-txt">居民概览</div> <jdtphx :id="orgData.org_id" />
</div>
<div class="m-subbox">
<jmgl :orgId="orgData.org_id" ref="jmgl"></jmgl>
</div>
</div> </div>
</div> </div>
@ -43,7 +29,7 @@
<div class="item-info"> <div class="item-info">
<div> <div>
<img <img
src="~@/assets/images/shuju/renfang/index/per/lnr.png" src="~@/assets/images/shuju/renfang/index/per/lnr.png"
/> />
</div> </div>
<div> <div>
@ -56,7 +42,7 @@
<div class="item-info"> <div class="item-info">
<div> <div>
<img <img
src="~@/assets/images/shuju/renfang/index/per/qsn.png" src="~@/assets/images/shuju/renfang/index/per/qsn.png"
/> />
</div> </div>
<div> <div>
@ -70,7 +56,7 @@
<div class="item-info"> <div class="item-info">
<div> <div>
<img <img
src="~@/assets/images/shuju/renfang/index/per/syry.png" src="~@/assets/images/shuju/renfang/index/per/syry.png"
/> />
</div> </div>
<div> <div>
@ -120,27 +106,27 @@
</div> </div>
</div> </div>
<!-- <div class="item"> <!-- <div class="item">
<div class="item-info"> <div class="item-info">
<div> <div>
<img <img
src="~@/assets/images/shuju/renfang/index/per/ygxl.png" src="~@/assets/images/shuju/renfang/index/per/ygxl.png"
/> />
月更新率 月更新率
</div> </div>
<div> <div>
<b>{{ perInfo.month_update_ratio }}</b> <b>{{ perInfo.month_update_ratio }}</b>
% %
</div> </div>
</div> </div>
</div>--> </div>-->
</div> </div>
<grid-map <grid-map
ref="map" ref="map"
@clickAgency="clickAgencyItem" :srcGridData="orgData"
:srcGridData="orgData" @clickAgency="clickAgencyItem"
@clickDotBtn="handleClickDotBtn" @clickDotBtn="handleClickDotBtn"
/> />
<mapRight/> <mapRight/>
</div> </div>
@ -148,154 +134,158 @@
<div class="m-search"> <div class="m-search">
<div class="btn" @click="searchModule.displayedCard = true"> <div class="btn" @click="searchModule.displayedCard = true">
<img <img
src="~@/assets/images/shuju/renfang/index/search/btn-bg.png" class="btn-bg"
class="btn-bg" src="~@/assets/images/shuju/renfang/index/search/btn-bg.png"
/> />
<img <img
src="~@/assets/images/shuju/renfang/index/search/btn-bg-hover.png" class="btn-bg-hover"
class="btn-bg-hover" src="~@/assets/images/shuju/renfang/index/search/btn-bg-hover.png"
/> />
<span>点击搜索</span> <span>点击搜索</span>
</div> </div>
<div class="card" v-show="searchModule.displayedCard"> <div v-show="searchModule.displayedCard" class="card">
<div class="card-input"> <div class="card-input">
<div class="card-btn" @click="handleSearch"> <div class="card-btn" @click="handleSearch">
<img <img
src="~@/assets/images/shuju/renfang/index/search/search.png" src="~@/assets/images/shuju/renfang/index/search/search.png"
/> />
</div> </div>
<input <input
type="text" v-model="searchModule.keyword"
placeholder="搜索本组织及下级的居民、小区、楼栋、房屋" placeholder="搜索本组织及下级的居民、小区、楼栋、房屋"
@keyup.enter="handleSearch" type="text"
v-model="searchModule.keyword" @keyup.enter="handleSearch"
/> />
<div class="i-div"></div> <div class="i-div"></div>
<div class="card-btn" @click="searchModule.displayedCard = false"> <div class="card-btn" @click="searchModule.displayedCard = false">
<img <img
src="~@/assets/images/shuju/renfang/index/search/close.png" src="~@/assets/images/shuju/renfang/index/search/close.png"
/> />
</div> </div>
</div> </div>
<div class="card-show"> <div class="card-show">
<div class="card-tabs"> <div class="card-tabs">
<div <div
:class="{ :class="{
'z-on': searchModule.resultTab == '0', 'z-on': searchModule.resultTab == '0',
}" }"
@click="searchModule.resultTab = '0'" @click="searchModule.resultTab = '0'"
> >
全部 全部
</div> </div>
<div <div
:class="{ :class="{
'z-on': searchModule.resultTab == '1', 'z-on': searchModule.resultTab == '1',
}" }"
@click="searchModule.resultTab = '1'" @click="searchModule.resultTab = '1'"
> >
居民 居民
</div> </div>
<div <div
:class="{ :class="{
'z-on': searchModule.resultTab == '2', 'z-on': searchModule.resultTab == '2',
}" }"
@click="searchModule.resultTab = '2'" @click="searchModule.resultTab = '2'"
> >
小区 小区
</div> </div>
<div <div
:class="{ :class="{
'z-on': searchModule.resultTab == '3', 'z-on': searchModule.resultTab == '3',
}" }"
@click="searchModule.resultTab = '3'" @click="searchModule.resultTab = '3'"
> >
楼栋 楼栋
</div> </div>
<div <div
:class="{ :class="{
'z-on': searchModule.resultTab == '4', 'z-on': searchModule.resultTab == '4',
}" }"
@click="searchModule.resultTab = '4'" @click="searchModule.resultTab = '4'"
> >
房屋 房屋
</div> </div>
</div> </div>
<div class="card-list" v-if="searchModule.result.length > 0"> <div v-if="searchModule.result.length > 0" class="card-list">
<div <div
class="card-item" v-for="(item, index) in searchModule.result"
:key="item.title + index" :key="item.title + index"
@click="handleClickSearchItem(item)" class="card-item"
v-for="(item, index) in searchModule.result" @click="handleClickSearchItem(item)"
> >
<span>{{ item.title }}</span> <span>{{ item.title }}</span>
<img <img
src="~@/assets/images/shuju/renfang/index/search/arrow.png" class="i-arrow"
class="i-arrow" src="~@/assets/images/shuju/renfang/index/search/arrow.png"
/> />
<img <img
src="~@/assets/images/shuju/renfang/index/search/arrow-on.png" class="i-arrow z-on"
class="i-arrow z-on" src="~@/assets/images/shuju/renfang/index/search/arrow-on.png"
/> />
</div> </div>
</div> </div>
<div class="card-empty" v-else> <div v-else class="card-empty">
<img src="~@/assets/images/shuju/renfang/index/empty.png" /> <img src="~@/assets/images/shuju/renfang/index/empty.png"/>
<span>没有找到搜索结果</span> <span>没有找到搜索结果</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="m-box m-cate"> <div class="bgImg m-box m-cate">
<div class="box-title"> <div class="box-title">
<img <!-- <img
src="~@/assets/images/shuju/main/card-title-bg-800.png" class="box-title-bg"
class="box-title-bg" src="~@/assets/images/shuju/main/card-title-bg-800.png"
/> />
<div class="box-title-txt" v-if="!displayedForecast"> <div v-if="!displayedForecast" class="box-title-txt">
居民分类统计 居民分类统计
</div> </div>
<div class="box-title-txt" v-else>居民分类统计-智能预测</div> <div v-else class="box-title-txt">居民分类统计-智能预测</div>
-->
<div <Title v-if="!displayedForecast" text="居民概览">
class="box-title-btn" <template>
<div
v-if="!displayedForecast" v-if="!displayedForecast"
class="box-title-btn"
@click="displayedForecast = true" @click="displayedForecast = true"
> >
<img src="~@/assets/images/shuju/renfang/index/znyc.png" /> <img src="~@/assets/images/shuju/renfang/index/znyc.png"/>
<span>智能预测</span> <span>智能预测</span>
<el-tooltip placement="top"> <el-tooltip placement="top">
<div slot="content"> <div slot="content">
根据智能分类设置规则预测来年育龄妇女老年人空巢老人独居老人分别有多少人 根据智能分类设置规则预测来年育龄妇女老年人空巢老人独居老人分别有多少人
</div> </div>
<img src="~@/assets/images/shuju/renfang/index/i-hint.png" /> <img src="~@/assets/images/shuju/renfang/index/i-hint.png"/>
</el-tooltip> </el-tooltip>
</div> </div>
</template>
</Title>
<Title v-else text="居民分类统计-智能预测"/>
<div <div
class="box-title-btn" v-else
v-else class="box-title-btn"
@click="displayedForecast = false" @click="displayedForecast = false"
> >
<img src="~@/assets/images/shuju/main/back-on.png" /> <img src="~@/assets/images/shuju/main/back-on.png"/>
<span style="color: #fff">返回</span> <span style="color: #fff">返回</span>
</div> </div>
</div> </div>
<div v-if="!displayedForecast"> <div v-if="!displayedForecast">
<div class="list" v-if="resiCategoryData.length > 0"> <div v-if="resiCategoryData.length > 0" class="list">
<div <div
class="item" v-for="(item, index) in resiCategoryData"
@click="toResiClassPage('normal', item.code, item.name)" :key="item.code + index"
:key="item.code + index" class="item"
v-for="(item, index) in resiCategoryData" @click="toResiClassPage('normal', item.code, item.name)"
> >
<div>{{ ("0" + (index + 1)).substr(-2) }}.</div> <div>{{ ("0" + (index + 1)).substr(-2) }}.</div>
<div class="item-name">{{ item.name }}</div> <div class="item-name">{{ item.name }}</div>
@ -308,12 +298,12 @@
<div class="item-per"> <div class="item-per">
<span>较上月</span> <span>较上月</span>
<img <img
v-if="item.growth >= 0" v-if="item.growth >= 0"
src="~@/assets/images/shuju/renfang/index/up.png" src="~@/assets/images/shuju/renfang/index/up.png"
/> />
<img <img
v-else v-else
src="~@/assets/images/shuju/renfang/index/down.png" src="~@/assets/images/shuju/renfang/index/down.png"
/> />
<b>{{ item.growthAbs }}</b> <b>{{ item.growthAbs }}</b>
<span></span> <span></span>
@ -321,17 +311,17 @@
</div> </div>
</div> </div>
<div class="empty" v-else> <div v-else class="empty">
<img src="~@/assets/images/shuju/renfang/index/empty.png" /> <img src="~@/assets/images/shuju/renfang/index/empty.png"/>
</div> </div>
</div> </div>
<div v-else> <div v-else>
<div class="list" v-if="resiCategoryForecastData.length > 0"> <div v-if="resiCategoryForecastData.length > 0" class="list">
<div <div
@click="toResiClassPage('ai', item.code, item.name)" v-for="(item, index) in resiCategoryForecastData"
class="item" :key="item.code + index"
:key="item.code + index" class="item"
v-for="(item, index) in resiCategoryForecastData" @click="toResiClassPage('ai', item.code, item.name)"
> >
<div>{{ ("0" + (index + 1)).substr(-2) }}.</div> <div>{{ ("0" + (index + 1)).substr(-2) }}.</div>
<div class="item-name">{{ item.name }}</div> <div class="item-name">{{ item.name }}</div>
@ -345,12 +335,12 @@
<div class="item-per"> <div class="item-per">
<span>较上一年</span> <span>较上一年</span>
<img <img
v-if="item.growth >= 0" v-if="item.growth >= 0"
src="~@/assets/images/shuju/renfang/index/up.png" src="~@/assets/images/shuju/renfang/index/up.png"
/> />
<img <img
v-else v-else
src="~@/assets/images/shuju/renfang/index/down.png" src="~@/assets/images/shuju/renfang/index/down.png"
/> />
<b>{{ item.growthAbs }}</b> <b>{{ item.growthAbs }}</b>
<span></span> <span></span>
@ -358,85 +348,70 @@
</div> </div>
</div> </div>
<div class="empty" v-else> <div v-else class="empty">
<img src="~@/assets/images/shuju/renfang/index/empty.png" /> <img src="~@/assets/images/shuju/renfang/index/empty.png"/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="g-right"> <div class="g-right">
<div <!-- <div
class="m-box" v-if="
v-if=" orgLevel == 'district' || orgLevel == 'street' || orgLevel == 'city'
orgLevel == 'district' || orgLevel == 'street' || orgLevel == 'city' "
" class="m-box"
> >
<div class="box-title"> <div class="box-title">
<img <img
src="~@/assets/images/shuju/main/card-title-bg-480.png" class="box-title-bg"
class="box-title-bg" src="~@/assets/images/shuju/main/card-title-bg-480.png"
/> />
<div class="box-title-txt">数字社区</div> <div class="box-title-txt">数字社区</div>
</div> </div>
<div class="m-subbox m-szsq"> <div class="m-subbox m-szsq">
<szsq :orgId="orgData.org_id"></szsq> <szsq :orgId="orgData.org_id"></szsq>
</div> </div>
</div>-->
<div class="bgImg">
<Title text="信息采集统计"></Title>
<rfsjtj :currentLevelData="{orgId: orgData.org_id}"/>
</div> </div>
<div class="bgImg">
<div class="m-box"> <Title text="人口预警"></Title>
<div class="box-title">
<img
src="~@/assets/images/shuju/main/card-title-bg-480.png"
class="box-title-bg"
/>
<div class="box-title-txt">人口预警</div>
</div>
<div <div
class="m-subbox m-rkyj" :class="{
:class="{
'z-shrink': 'z-shrink':
orgLevel == 'district' || orgLevel == 'district' ||
orgLevel == 'street' || orgLevel == 'street' ||
orgLevel == 'city', orgLevel == 'city',
}" }"
class="m-subbox m-rkyj"
> >
<rkyj :orgId="orgData.org_id"></rkyj> <rkyj :orgId="orgData.org_id"/>
</div> </div>
</div> </div>
<div class="m-box"> <div class="bgImg">
<div class="box-title"> <Title text="人口分析"></Title>
<img <rkfx :orgId="orgData.org_id" @handelClickRkfxPei="handelClickRkfxPei"/>
src="~@/assets/images/shuju/main/card-title-bg-480.png"
class="box-title-bg"
/>
<div class="box-title-txt">人口分析</div>
</div>
<div class="m-subbox">
<rkfx
:orgId="orgData.org_id"
@handelClickRkfxPei="handelClickRkfxPei"
></rkfx>
</div>
</div> </div>
</div> </div>
<cpt-loading v-show="false" /> <cpt-loading v-show="false"/>
</div> </div>
<resi-details <resi-details
@close="displayedResiId = ''" v-if="displayedResiId"
:resi-id="displayedResiId" :resi-id="displayedResiId"
v-if="displayedResiId" @close="displayedResiId = ''"
/> />
<house-details <house-details
@close="displayedHouseId = ''" v-if="displayedHouseId"
:house-id="displayedHouseId" :house-id="displayedHouseId"
v-if="displayedHouseId" @close="displayedHouseId = ''"
/> />
</div> </div>
</template> </template>
@ -453,11 +428,14 @@ import cptBread from "@/views/dataBoard/renfang/cpts/bread";
import cptLoading from "@/views/dataBoard/cpts/loading"; import cptLoading from "@/views/dataBoard/cpts/loading";
import houseDetails from "@/views/dataBoard/cpts/house-details"; import houseDetails from "@/views/dataBoard/cpts/house-details";
import resiDetails from "@/views/dataBoard/cpts/resi-details"; import resiDetails from "@/views/dataBoard/cpts/resi-details";
import { requestPostBi } from "@/js/dai/request-bipass"; import {requestPostBi} from "@/js/dai/request-bipass";
import { requestPost } from "@/js/dai/request"; import {requestPost} from "@/js/dai/request";
import getQueryPara from "dai-js/modules/getQueryPara"; import getQueryPara from "dai-js/modules/getQueryPara";
import {requestGet} from "@/js/dai/request"; import {requestGet} from "@/js/dai/request";
import resiCategoryMap from "@/views/business/resi-category-map.js"; import resiCategoryMap from "@/views/business/resi-category-map.js";
import Title from "@/views/dataBoard/satisfactionEval/components/Title/index.vue";
import rfsjtj from "@/views/dataBoard/overview/components/rfsjtj.vue";
import jdtphx from "@/views/dataBoard/overview/components/jdtphx.vue";
function iniGetPerInfo() { function iniGetPerInfo() {
return { return {
@ -474,6 +452,7 @@ export default {
name: "renfang", name: "renfang",
components: { components: {
Title,
gridMap, gridMap,
fwgl, fwgl,
jmgl, jmgl,
@ -484,7 +463,9 @@ export default {
cptBread, cptBread,
houseDetails, houseDetails,
resiDetails, resiDetails,
mapRight mapRight,
rfsjtj,
jdtphx
}, },
data() { data() {
@ -501,7 +482,7 @@ export default {
{ {
orgId: "", orgId: "",
orgLevel: "", orgLevel: "",
meta: { title: "人房总览" }, meta: {title: "人房总览"},
}, },
], ],
@ -559,8 +540,8 @@ export default {
this.getPandectData() this.getPandectData()
this.loading = true; this.loading = true;
}, },
// //
async getPandectData() { async getPandectData() {
const url = "/actual/base/residentHouseMerge/communityOverview"; const url = "/actual/base/residentHouseMerge/communityOverview";
let params = { let params = {
// orgId: "", // orgId: "",
@ -570,10 +551,10 @@ export default {
const {data, code, msg} = await requestGet(url, params); const {data, code, msg} = await requestGet(url, params);
if (code === 0) { if (code === 0) {
if (data) { if (data) {
this.$nextTick(()=>{ this.$nextTick(() => {
this.$refs['fwgl'].pandectData = data this.$refs['fwgl'].pandectData = data
this.$refs['jmgl'].pandectData = data this.$refs['jmgl'].pandectData = data
} }
) )
} }
} else { } else {
@ -615,7 +596,7 @@ export default {
} }
}, },
clickBreadItem({ item }) { clickBreadItem({item}) {
this.toBread(item); this.toBread(item);
}, },
@ -623,13 +604,13 @@ export default {
this.toBread({ this.toBread({
orgId: item.id, orgId: item.id,
orgLevel: item.level, orgLevel: item.level,
meta: { title: item.name }, meta: {title: item.name},
}); });
}, },
toBread(item) { toBread(item) {
const { orgId } = item; const {orgId} = item;
const { breadList } = this; const {breadList} = this;
let index = breadList.findIndex((val) => val.orgId === orgId); let index = breadList.findIndex((val) => val.orgId === orgId);
if (index >= 0) { if (index >= 0) {
this.breadList = breadList.slice(0, index + 1); this.breadList = breadList.slice(0, index + 1);
@ -654,7 +635,7 @@ export default {
// //
async handleSearch() { async handleSearch() {
this.searchModule.result = []; this.searchModule.result = [];
const { searchModule } = this; const {searchModule} = this;
const url = [ const url = [
"search_all", "search_all",
@ -664,18 +645,18 @@ export default {
"search_house", "search_house",
][searchModule.resultTab]; ][searchModule.resultTab];
const { data, code, msg } = await requestPostBi( const {data, code, msg} = await requestPostBi(
url, url,
{ {
queryParam: { queryParam: {
org_id: this.orgId, org_id: this.orgId,
name: this.searchModule.keyword, name: this.searchModule.keyword,
},
}, },
}, {
{ // mockId: 60044224,
// mockId: 60044224, // mockId: 60048067,
// mockId: 60048067, }
}
); );
if (code === 0) { if (code === 0) {
@ -717,16 +698,16 @@ export default {
async getPerInfo() { async getPerInfo() {
const url = "resident_ratio"; const url = "resident_ratio";
const { data, code, msg } = await requestPostBi( const {data, code, msg} = await requestPostBi(
url, url,
{ {
queryParam: { queryParam: {
org_id: this.orgId, org_id: this.orgId,
},
}, },
}, {
{ // mockId: 61167746,
// mockId: 61167746, }
}
); );
if (code === 0) { if (code === 0) {
@ -746,7 +727,7 @@ export default {
// id: this.orgData.id, // id: this.orgData.id,
// level: "agency", // level: "agency",
}; };
const { data, code, msg } = await requestGet(url, params); const {data, code, msg} = await requestGet(url, params);
if (code === 0) { if (code === 0) {
if (data) { if (data) {
this.resiCategoryData = data.categoryList.map((item) => { this.resiCategoryData = data.categoryList.map((item) => {
@ -768,24 +749,23 @@ export default {
// //
async getResiCategoryForecastData() { async getResiCategoryForecastData() {
const url = "/actual/base/resiCategory/intelligentPredictioncategoryCountList"; const url = "/actual/base/resiCategory/intelligentPredictioncategoryCountList";
let params = { let params = {};
};
const {data, code, msg} = await requestGet(url, params); const {data, code, msg} = await requestGet(url, params);
if (code === 0) { if (code === 0) {
this.resiCategoryForecastData = data.categoryList.map((item) => { this.resiCategoryForecastData = data.categoryList.map((item) => {
return { return {
code: item.categoryName, code: item.categoryName,
name: resiCategoryMap[item.categoryName] || "", name: resiCategoryMap[item.categoryName] || "",
count: item.categoryCountNext, count: item.categoryCountNext,
// name:item.categoryCountName, // name:item.categoryCountName,
per: parseInt( per: parseInt(
(100 * item.categoryCount) / data.resiCount (100 * item.categoryCount) / data.resiCount
), ),
// per: item.change_ratio, // per: item.change_ratio,
growth: item.change_ratio, growth: item.change_ratio,
growthAbs: Math.abs(item.categoryCountNext - item.categoryCount) growthAbs: Math.abs(item.categoryCountNext - item.categoryCount)
}; };
}); });
} else { } else {
this.$message.error(msg); this.$message.error(msg);
} }
@ -795,16 +775,16 @@ export default {
async getMapData() { async getMapData() {
const url = "org_map"; const url = "org_map";
const { data, code, msg } = await requestPostBi( const {data, code, msg} = await requestPostBi(
url, url,
{ {
queryParam: { queryParam: {
org_id: this.orgId, org_id: this.orgId,
},
}, },
}, {
{ // mockId: 60810589,
// mockId: 60810589, }
}
); );
if (code === 0) { if (code === 0) {
@ -829,20 +809,20 @@ export default {
async getSubMapData() { async getSubMapData() {
const url = "sub_org_map"; const url = "sub_org_map";
const { data, code, msg } = await requestPostBi( const {data, code, msg} = await requestPostBi(
url, url,
{ {
queryParam: { queryParam: {
org_id: this.orgId, org_id: this.orgId,
},
}, },
}, {
{ // mockId: 61831860,
// mockId: 61831860, }
}
); );
if (code === 0) { if (code === 0) {
const { orgData } = this; const {orgData} = this;
orgData.children = data.map((item) => { orgData.children = data.map((item) => {
return { return {
...item, ...item,
@ -853,7 +833,7 @@ export default {
coordinates: item.coordinates || "", coordinates: item.coordinates || "",
}; };
}); });
this.orgData = { ...orgData }; this.orgData = {...orgData};
} else { } else {
this.$message.error(msg); this.$message.error(msg);
} }
@ -867,7 +847,7 @@ export default {
level: this.orgLevel, level: this.orgLevel,
}; };
const { data, code, msg } = await requestPost(url, params); const {data, code, msg} = await requestPost(url, params);
if (code === 0) { if (code === 0) {
this.orgData = data; this.orgData = data;
@ -883,9 +863,15 @@ export default {
}, },
}; };
</script> </script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/renfang/index.scss";
<style .bgImg {
lang="scss" margin-top: 5px;
src="@/assets/scss/dataBoard/renfang/index.scss" background: url('@/assets/images/shuju/overview/box-bg.png') no-repeat;
scoped background-size: 100% 100%;
></style> }
.m-box {
height: 320px;
}
</style>

141
src/views/dataBoard/satisfactionEval/Problem/tddtlxsj/detail.vue

@ -0,0 +1,141 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="table">
<el-table
v-loading="loading"
:data="list"
element-loading-background="rgba(0,0,0,0.5)"
element-loading-spinner="el-icon-loading"
element-loading-text="加载中..."
>
<el-table-column label="序号" type="index" width="80"/>
<el-table-column label="地点" prop="key"/>
<el-table-column label="工单号" prop="key"/>
<el-table-column label="所属社区" prop="key"></el-table-column>
<el-table-column label="事件分类" prop="key"></el-table-column>
<el-table-column label="投诉内容" prop="key"></el-table-column>
<el-table-column label="接收时间" prop="key"></el-table-column>
<el-table-column label="联系人" prop="key"></el-table-column>
<el-table-column label="联系电话" prop="key"></el-table-column>
<el-table-column label="状态" prop="key"></el-table-column>
<el-table-column align="center" label="详情">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<EventDetails :id="rowId" :showDialog="showDialog" @close="showDialog = false"/>
<Pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNo" :total="total"
@pagination="getList"/>
</div>
</template>
<script>
import Breadcrumb from "@/views/dataBoard/satisfactionEval/components/Breadcrumb";
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
import EventDetails from "@/views/dataBoard/overview/components/EventDetail.vue";
export default {
name: "TddtlxsjDetail",
components: {Breadcrumb, Pagination, Title, EventDetails},
data() {
return {
showDialog: false,
rowId: "",
queryParams: {
pageNo: 1,
pageSize: 10,
},
total: 0,
orgOptions: [],
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "/dataBoard/satisfactionEval/Problem/tddtlxsj",
name: "同地点同类型重复投诉问题列表",
},
{
path: "",
name: "详情",
},
],
list: [{}, {}, {}],
title: "",
loading: false,
};
},
activated() {
this.title = this.$route.query.title;
let searchParams = JSON.parse(this.$route.query.searchParams);
this.queryParams = {
...this.queryParams,
...searchParams,
};
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true;
let params = {
...this.queryParams,
}
this.$http.get("?" + this.$paramsFormat(params)).then(({data: {data}}) => {
this.total = data.total;
this.list = data.list;
this.loading = false;
});
},
handleView({id}) {
this.showDialog = true;
this.rowId = id;
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table.scss";
.screen {
margin: 25px 0 40px;
.el-select,
.el-input {
width: 150px;
margin-right: 4px;
border: 1px solid #126ac5;
border-radius: 2px;
/deep/ .el-input__inner {
color: #fff;
border: none;
background: none;
}
}
.btn {
height: 32px;
margin-left: 46px;
}
}
.main-title {
margin: 25px 0 32px;
}
.table {
margin-top: 32px;
}
</style>

196
src/views/dataBoard/satisfactionEval/Problem/tddtlxsj/list.vue

@ -0,0 +1,196 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-select
v-model="typeCondition"
class="select"
placeholder="请选择"
popper-class="selectPopClass"
size="small"
@change="timeChange"
>
<el-option
v-for="item in typeConditionList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button class="btn" size="small" type="primary" @click="search">查询</el-button>
</el-form>
</div>
<div class="table">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0,0,0,0.5)"
element-loading-spinner="el-icon-loading" element-loading-text="加载中...">
<el-table-column label="序号" type="index"/>
<el-table-column label="地点" prop="key"/>
<el-table-column label="类型" prop="gridName"/>
<el-table-column label="投诉次数" prop="restName"></el-table-column>
<el-table-column align="center" label="详情">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<Pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNo" :total="total"
@pagination="getList"/>
</div>
</template>
<script>
import Breadcrumb from "@/views/dataBoard/satisfactionEval/components/Breadcrumb";
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "tddtlxsjList",
components: {Breadcrumb, Pagination, Title},
data() {
return {
queryParams: {
month: "",
agencyId: "",
pageNo: 1,
pageSize: 10,
},
typeCondition: 5,
typeConditionList: [
{
label: "本月",
value: 1,
},
{
label: "上月",
value: 2,
},
{
label: "近三月",
value: 3,
},
{
label: "近半年",
value: 4,
},
{
label: "近一年",
value: 5,
},
],
total: 0,
orgOptions: [],
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "",
name: "同地点同类型重复投诉问题列表 ",
},
],
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: index - 0 + 1 + "月", value: index - 0 + 1};
}),
list: [{}, {}, {}],
title: "",
loading: false,
};
},
activated() {
this.title = this.$route.query.title;
let searchParams = JSON.parse(this.$route.query.searchParams);
this.queryParams = {
...this.queryParams,
...searchParams,
};
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true;
let params = {
...this.queryParams,
...this.timeChange(this.typeCondition)
}
this.$http.get("?" + this.$paramsFormat(params)).then(({data: {data}}) => {
this.total = data.total;
this.list = data.list;
this.loading = false;
});
},
timeChange(type) {
let startTime = "",
endTime = "";
if (type == 1) {
startTime = this.$moment().startOf("month").format("YYYY-MM-DD");
}
if (type == 2) {
startTime = this.$moment().subtract(1, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 3) {
startTime = this.$moment().subtract(2, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 4) {
startTime = this.$moment().subtract(5, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 5) {
startTime = this.$moment().subtract(11, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 2) {
endTime = this.$moment().subtract(1, "months").endOf("month").format("YYYY-MM-DD");
} else {
endTime = this.$moment().endOf("month").format("YYYY-MM-DD");
}
return {startTime, endTime};
},
handleView(id) {
this.id = id;
this.$router.push('/dataBoard/satisfactionEval/Problem/tddtlxsj/detail?id='+id)
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table.scss";
.screen {
margin: 25px 0 40px;
.el-select,
.el-input {
width: 150px;
margin-right: 4px;
border: 1px solid #126ac5;
border-radius: 2px;
/deep/ .el-input__inner {
color: #fff;
border: none;
background: none;
}
}
.btn {
height: 32px;
margin-left: 46px;
}
}
.main-title {
margin: 25px 0 32px;
}
.table {
margin-top: 32px;
}
</style>

141
src/views/dataBoard/satisfactionEval/Problem/tyqybtlx/detail.vue

@ -0,0 +1,141 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="table">
<el-table
v-loading="loading"
:data="list"
element-loading-background="rgba(0,0,0,0.5)"
element-loading-spinner="el-icon-loading"
element-loading-text="加载中..."
>
<el-table-column label="序号" type="index" width="80"/>
<el-table-column label="地点" prop="key"/>
<el-table-column label="工单号" prop="key"/>
<el-table-column label="所属社区" prop="key"></el-table-column>
<el-table-column label="事件分类" prop="key"></el-table-column>
<el-table-column label="投诉内容" prop="key"></el-table-column>
<el-table-column label="接收时间" prop="key"></el-table-column>
<el-table-column label="联系人" prop="key"></el-table-column>
<el-table-column label="联系电话" prop="key"></el-table-column>
<el-table-column label="状态" prop="key"></el-table-column>
<el-table-column align="center" label="详情">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<EventDetails :id="rowId" :showDialog="showDialog" @close="showDialog = false"/>
<Pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNo" :total="total"
@pagination="getList"/>
</div>
</template>
<script>
import Breadcrumb from "@/views/dataBoard/satisfactionEval/components/Breadcrumb";
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
import EventDetails from "@/views/dataBoard/overview/components/EventDetail.vue";
export default {
name: "tyrydetail",
components: {Breadcrumb, Pagination, Title, EventDetails},
data() {
return {
showDialog: false,
rowId: "",
queryParams: {
pageNo: 1,
pageSize: 10,
},
total: 0,
orgOptions: [],
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "/dataBoard/satisfactionEval/Problem/tyqybtlx",
name: "同一区域不同类型重复投诉问题列表",
},
{
path: "",
name: "详情",
},
],
list: [{}, {}, {}],
title: "",
loading: false,
};
},
activated() {
this.title = this.$route.query.title;
let searchParams = JSON.parse(this.$route.query.searchParams);
this.queryParams = {
...this.queryParams,
...searchParams,
};
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true;
let params = {
...this.queryParams,
}
this.$http.get("?" + this.$paramsFormat(params)).then(({data: {data}}) => {
this.total = data.total;
this.list = data.list;
this.loading = false;
});
},
handleView({id}) {
this.showDialog = true;
this.rowId = id;
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table.scss";
.screen {
margin: 25px 0 40px;
.el-select,
.el-input {
width: 150px;
margin-right: 4px;
border: 1px solid #126ac5;
border-radius: 2px;
/deep/ .el-input__inner {
color: #fff;
border: none;
background: none;
}
}
.btn {
height: 32px;
margin-left: 46px;
}
}
.main-title {
margin: 25px 0 32px;
}
.table {
margin-top: 32px;
}
</style>

239
src/views/dataBoard/satisfactionEval/Problem/tyqybtlx/list.vue

@ -0,0 +1,239 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-select
v-model="typeCondition"
class="select"
placeholder="请选择"
popper-class="selectPopClass"
size="small"
@change="timeChange"
>
<el-option
v-for="item in typeConditionList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button class="btn" size="small" type="primary" @click="search">查询</el-button>
</el-form>
</div>
<div class="table">
<el-table
v-loading="loading"
:data="data"
:span-method="objectSpanMethod"
element-loading-background="rgba(0,0,0,0.5)"
element-loading-spinner="el-icon-loading"
element-loading-text="加载中..."
>
<el-table-column label="序号" prop="number" width="80"/>
<el-table-column label="地点" prop="column1"/>
<el-table-column label="类型" prop="column3"/>
<el-table-column label="投诉次数" prop="column2"/>
<el-table-column align="center" label="详情">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<Pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNo" :total="total"
@pagination="getList"/>
</div>
</template>
<script>
import Breadcrumb from "@/views/dataBoard/satisfactionEval/components/Breadcrumb";
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "tyryList",
components: {Breadcrumb, Pagination, Title},
data() {
return {
queryParams: {
month: "",
agencyId: "",
pageNo: 1,
pageSize: 10,
},
typeCondition: 5,
typeConditionList: [
{
label: "本月",
value: 1,
},
{
label: "上月",
value: 2,
},
{
label: "近三月",
value: 3,
},
{
label: "近半年",
value: 4,
},
{
label: "近一年",
value: 5,
},
],
total: 0,
orgOptions: [],
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "",
name: "同一区域不同类型重复投诉问题列表 ",
},
],
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: index - 0 + 1 + "月", value: index - 0 + 1};
}),
data: [
{number: 1, column1: '市北区清江路100号', column2: '10', column3: '100'},
{number: 2, column1: '市北区清江路100号', column2: '10', column3: '100'},
{number: 3, column1: '市北区清江路100号', column2: '10', column3: '100'},
{number: 4, column1: '市北区清江路**号', column2: '10', column3: '100'},
{number: 5, column1: '市北区清江路**号', column2: '10', column3: '100'},
],
data1: [
"number",
"column1",
"column2",
"column3"
],
title: "",
loading: false,
};
},
activated() {
this.title = this.$route.query.title;
let searchParams = JSON.parse(this.$route.query.searchParams);
this.queryParams = {
...this.queryParams,
...searchParams,
};
this.getList();
},
methods: {
objectSpanMethod({row, column, rowIndex, columnIndex}) {
if (columnIndex === 1 || columnIndex === 0 || columnIndex === 4) {
if (rowIndex > 0 && row.column1 === this.data[rowIndex - 1].column1) {
return {
rowspan: 0,
colspan: 0,
};
} else {
let rowspan = 1;
for (let i = rowIndex + 1; i < this.data.length; i++) {
if (row.column1 === this.data[i].column1) {
rowspan++;
} else {
//else "Name" 退
break;
}
}
// { rowspan, colspan: 1 } rowspan colspan: 1
return {
rowspan,
colspan: 1,
};
}
}
},
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true;
let params = {
...this.queryParams,
...this.timeChange(this.typeCondition)
}
this.$http.get("?" + this.$paramsFormat(params)).then(({data: {data}}) => {
this.total = data.total;
this.list = data.list;
this.loading = false;
});
},
timeChange(type) {
let startTime = "",
endTime = "";
if (type == 1) {
startTime = this.$moment().startOf("month").format("YYYY-MM-DD");
}
if (type == 2) {
startTime = this.$moment().subtract(1, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 3) {
startTime = this.$moment().subtract(2, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 4) {
startTime = this.$moment().subtract(5, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 5) {
startTime = this.$moment().subtract(11, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 2) {
endTime = this.$moment().subtract(1, "months").endOf("month").format("YYYY-MM-DD");
} else {
endTime = this.$moment().endOf("month").format("YYYY-MM-DD");
}
return {startTime, endTime};
},
handleView(id) {
this.id = id;
this.$router.push('/dataBoard/satisfactionEval/Problem/tyqybtlx/detail?id=' + id)
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table-border.scss";
.screen {
margin: 25px 0 40px;
.el-select,
.el-input {
width: 150px;
margin-right: 4px;
border: 1px solid #126ac5;
border-radius: 2px;
/deep/ .el-input__inner {
color: #fff;
border: none;
background: none;
}
}
.btn {
height: 32px;
margin-left: 46px;
}
}
.main-title {
margin: 25px 0 32px;
}
.table {
margin-top: 32px;
}
</style>

140
src/views/dataBoard/satisfactionEval/Problem/tyry/detail.vue

@ -0,0 +1,140 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="table">
<el-table
v-loading="loading"
:data="list"
element-loading-background="rgba(0,0,0,0.5)"
element-loading-spinner="el-icon-loading"
element-loading-text="加载中..."
>
<el-table-column label="序号" type="index" width="80"/>
<el-table-column label="工单号" prop="key"/>
<el-table-column label="所属社区" prop="key"></el-table-column>
<el-table-column label="事件分类" prop="key"></el-table-column>
<el-table-column label="投诉内容" prop="key"></el-table-column>
<el-table-column label="接收时间" prop="key"></el-table-column>
<el-table-column label="联系人" prop="key"></el-table-column>
<el-table-column label="联系电话" prop="key"></el-table-column>
<el-table-column label="状态" prop="key"></el-table-column>
<el-table-column align="center" label="详情">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<EventDetails :id="rowId" :showDialog="showDialog" @close="showDialog = false"/>
<Pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNo" :total="total"
@pagination="getList"/>
</div>
</template>
<script>
import Breadcrumb from "@/views/dataBoard/satisfactionEval/components/Breadcrumb";
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
import EventDetails from "@/views/dataBoard/overview/components/EventDetail.vue";
export default {
name: "tyrydetail",
components: {Breadcrumb, Pagination, Title, EventDetails},
data() {
return {
showDialog: false,
rowId: "",
queryParams: {
pageNo: 1,
pageSize: 10,
},
total: 0,
orgOptions: [],
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "/dataBoard/satisfactionEval/Problem/tyry",
name: "同一人员重复投诉问题列表",
},
{
path: "",
name: "详情",
},
],
list: [{}, {}, {}],
title: "",
loading: false,
};
},
activated() {
this.title = this.$route.query.title;
let searchParams = JSON.parse(this.$route.query.searchParams);
this.queryParams = {
...this.queryParams,
...searchParams,
};
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true;
let params = {
...this.queryParams,
}
this.$http.get("?" + this.$paramsFormat(params)).then(({data: {data}}) => {
this.total = data.total;
this.list = data.list;
this.loading = false;
});
},
handleView({id}) {
this.showDialog = true;
this.rowId = id;
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table.scss";
.screen {
margin: 25px 0 40px;
.el-select,
.el-input {
width: 150px;
margin-right: 4px;
border: 1px solid #126ac5;
border-radius: 2px;
/deep/ .el-input__inner {
color: #fff;
border: none;
background: none;
}
}
.btn {
height: 32px;
margin-left: 46px;
}
}
.main-title {
margin: 25px 0 32px;
}
.table {
margin-top: 32px;
}
</style>

195
src/views/dataBoard/satisfactionEval/Problem/tyry/list.vue

@ -0,0 +1,195 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-select
v-model="typeCondition"
class="select"
placeholder="请选择"
popper-class="selectPopClass"
size="small"
@change="timeChange"
>
<el-option
v-for="item in typeConditionList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button class="btn" size="small" type="primary" @click="search">查询</el-button>
</el-form>
</div>
<div class="table">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0,0,0,0.5)"
element-loading-spinner="el-icon-loading" element-loading-text="加载中...">
<el-table-column label="序号" type="index"/>
<el-table-column label="联系方式" prop="key"/>
<el-table-column label="投诉次数" prop="restName"></el-table-column>
<el-table-column align="center" label="详情">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<Pagination v-show="total > 0" :limit.sync="queryParams.pageSize" :page.sync="queryParams.pageNo" :total="total"
@pagination="getList"/>
</div>
</template>
<script>
import Breadcrumb from "@/views/dataBoard/satisfactionEval/components/Breadcrumb";
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "tyryList",
components: {Breadcrumb, Pagination, Title},
data() {
return {
queryParams: {
month: "",
agencyId: "",
pageNo: 1,
pageSize: 10,
},
typeCondition: 5,
typeConditionList: [
{
label: "本月",
value: 1,
},
{
label: "上月",
value: 2,
},
{
label: "近三月",
value: 3,
},
{
label: "近半年",
value: 4,
},
{
label: "近一年",
value: 5,
},
],
total: 0,
orgOptions: [],
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "",
name: "同一人员重复投诉问题列表 ",
},
],
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: index - 0 + 1 + "月", value: index - 0 + 1};
}),
list: [{}, {}, {}],
title: "",
loading: false,
};
},
activated() {
this.title = this.$route.query.title;
let searchParams = JSON.parse(this.$route.query.searchParams);
this.queryParams = {
...this.queryParams,
...searchParams,
};
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true;
let params = {
...this.queryParams,
...this.timeChange(this.typeCondition)
}
this.$http.get("?" + this.$paramsFormat(params)).then(({data: {data}}) => {
this.total = data.total;
this.list = data.list;
this.loading = false;
});
},
timeChange(type) {
let startTime = "",
endTime = "";
if (type == 1) {
startTime = this.$moment().startOf("month").format("YYYY-MM-DD");
}
if (type == 2) {
startTime = this.$moment().subtract(1, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 3) {
startTime = this.$moment().subtract(2, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 4) {
startTime = this.$moment().subtract(5, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 5) {
startTime = this.$moment().subtract(11, "months").startOf("month").format("YYYY-MM-DD");
}
if (type == 2) {
endTime = this.$moment().subtract(1, "months").endOf("month").format("YYYY-MM-DD");
} else {
endTime = this.$moment().endOf("month").format("YYYY-MM-DD");
}
return {startTime, endTime};
},
handleView(id) {
this.id = id;
this.$router.push('/dataBoard/satisfactionEval/Problem/tyry/detail?id='+id)
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table.scss";
.screen {
margin: 25px 0 40px;
.el-select,
.el-input {
width: 150px;
margin-right: 4px;
border: 1px solid #126ac5;
border-radius: 2px;
/deep/ .el-input__inner {
color: #fff;
border: none;
background: none;
}
}
.btn {
height: 32px;
margin-left: 46px;
}
}
.main-title {
margin: 25px 0 32px;
}
.table {
margin-top: 32px;
}
</style>

9
src/views/dataBoard/satisfactionEval/dissatisfieReason/index.vue

@ -40,7 +40,7 @@
<el-table-column label="姓名" prop="restName"></el-table-column> <el-table-column label="姓名" prop="restName"></el-table-column>
<el-table-column label="连写电话" prop="mobile"> <el-table-column label="联系电话" prop="mobile">
<template slot-scope="scope"> <template slot-scope="scope">
{{ $sensitive(scope.row.mobile, 3, 7) }} {{ $sensitive(scope.row.mobile, 3, 7) }}
</template> </template>
@ -106,16 +106,17 @@ export default {
}), }),
list: [{},{},{}], list: [{},{},{}],
title: "", title: "",
loading: false, loading: true,
}; };
}, },
activated() { activated() {
this.title = this.$route.query.title; this.title = this.$route.query.title;
let searchParams = JSON.parse(this.$route.query.searchParams); let searchParams = this.$route.query.searchParams?JSON.parse(this.$route.query.searchParams):{};
this.queryParams = { this.queryParams = {
...this.queryParams, ...this.queryParams,
...searchParams, ...searchParams,
}; };
this.getOrg();
this.getList(); this.getList();
}, },
methods: { methods: {
@ -125,7 +126,7 @@ export default {
}, },
getList() { getList() {
this.loading = true; this.loading = true;
this.$http.get("?" + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => { this.$http.get("/governance/satisfaction/communitySelfInsp/inspResult/list?" + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.total = data.total; this.total = data.total;
this.list = data.list; this.list = data.list;
this.loading = false; this.loading = false;

14
src/views/dataBoard/satisfactionEval/modules/DissatisfiedReason/index.vue

@ -17,21 +17,22 @@ export default {
} }
}, },
data() { data() {
return { return {}
}
}, },
mounted() { mounted() {
this.initChart(); this.$http("/governance/satisfaction/communitySelfInsp/stats/dissatisfactionReason/classification", {}).then(({data: {data}}) => {
this.initChart(data);
})
}, },
methods: { methods: {
timeChange() { timeChange() {
}, },
initChart() { initChart(data) {
let div = document.getElementById('DissatisfiedReason'); let div = document.getElementById('DissatisfiedReason');
this.myChart = echarts.init(div); this.myChart = echarts.init(div);
var getname = ['社区工作不了解', '宣传力度小', '对社区工作不满意', '其他']; // var getname = data.map(item => item.dissatisfactionReasonName); //
var getNum = [8, 9, 16, 21]; var getNum = data.map(item => item.qty);
var data = []; var data = [];
for (var i = 0; i < getname.length; i++) { for (var i = 0; i < getname.length; i++) {
@ -133,6 +134,7 @@ export default {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: 32px; padding: 32px;
#DissatisfiedReason { #DissatisfiedReason {
flex: calc(100% - 100px); flex: calc(100% - 100px);
width: calc(100% - 100px); width: calc(100% - 100px);

8
src/views/dataBoard/satisfactionEval/modules/eventAnalysis/index.vue

@ -9,7 +9,7 @@
</el-select> </el-select>
</template> </template>
<template v-slot:info> <template v-slot:info>
<span class="infoColor">更多></span> <span class="infoColor" @click="$router.push('/dataBoard/satisfactionEval/Problem/tddtlxsj')">更多></span>
</template> </template>
</title-small> </title-small>
<div class="t-list f-hflex"> <div class="t-list f-hflex">
@ -39,8 +39,8 @@
:value="item.value"></el-option> :value="item.value"></el-option>
</el-select> </el-select>
</template> </template>
<template v-slot:info> <template v-slot:info>tyqybtlx
<span class="infoColor">更多></span> <span class="infoColor" @click="$router.push('/dataBoard/satisfactionEval/Problem/tyry')">更多></span>
</template> </template>
</title-small> </title-small>
<div class="t-list f-hflex"> <div class="t-list f-hflex">
@ -69,7 +69,7 @@
</el-select> </el-select>
</template> </template>
<template v-slot:info> <template v-slot:info>
<span class="infoColor">更多></span> <span class="infoColor" @click="$router.push('/dataBoard/satisfactionEval/Problem/tyqybtlx')">更多></span>
</template> </template>
</title-small> </title-small>
<div class="table"> <div class="table">

Loading…
Cancel
Save