Browse Source

对接数据统计接口

jw-featrue-zhanlibiao
战立标 3 years ago
parent
commit
4cef35cb89
  1. 12
      components/Head/index.wxml
  2. 4
      components/Head/index.wxss
  3. 2
      components/Tabs/index.js
  4. 47
      pages/statistics/modules/CrowdPortrait/CrowdPortrait.js
  5. 34
      pages/statistics/modules/CrowdPortrait/CrowdPortrait.wxml
  6. 22
      pages/statistics/modules/EventPrediction/EventPrediction.js
  7. 12
      pages/statistics/modules/EventPrediction/EventPrediction.wxml
  8. 189
      pages/statistics/modules/HotlineComplaints/HotlineComplaints.js
  9. 305
      pages/statistics/modules/SmyddcSqmydzc/SmyddcSqmydzc.js
  10. 278
      pages/statistics/modules/Trend/Trend.js
  11. 8
      pages/statistics/statistics.wxml
  12. 44
      subpages/statistics/pages/crowdPortrait/crowdPortrait.js
  13. 9
      subpages/statistics/pages/crowdPortrait/crowdPortrait.wxml
  14. 21
      subpages/statistics/pages/dissatisfied/detial/detail.js
  15. 24
      subpages/statistics/pages/dissatisfied/detial/detail.wxml
  16. 138
      subpages/statistics/pages/dissatisfied/list/list.js
  17. 117
      subpages/statistics/pages/dissatisfied/list/list.wxml
  18. 16
      subpages/statistics/pages/dissatisfied/list/list.wxss
  19. 67
      subpages/statistics/pages/qzbmy/qzbmy.js
  20. 58
      subpages/statistics/pages/qzbmy/qzbmy.wxml
  21. 117
      subpages/statistics/pages/residentPortrait/residentPortrait.js
  22. 65
      subpages/statistics/pages/residentPortrait/residentPortrait.wxml
  23. 3
      subpages/statistics/pages/residentPortrait/residentPortrait.wxss
  24. 38
      subpages/statistics/pages/sjwjj/sjwjj.js
  25. 16
      subpages/statistics/pages/sjwjj/sjwjj.wxml
  26. 40
      subpages/statistics/pages/xqwmz/xqwmz.js
  27. 17
      subpages/statistics/pages/xqwmz/xqwmz.wxml
  28. 94
      subpages/statistics/pages/yxwxfw/yxwxfw.js
  29. 15
      subpages/statistics/pages/yxwxfw/yxwxfw.wxml
  30. 3
      utils/config.js
  31. 122
      utils/statisticsApi.js

12
components/Head/index.wxml

@ -2,7 +2,7 @@
<image class="header-bg" src="../../images/statistics/nav_bg.jpg"/>
<view class="navigation" mode="widthFix" style="height: {{navigationHeight}}px; padding-top: {{statusHeight}}px;">
<image class="nav-bg" mode="widthFix" src="../../images/statistics/nav_bg.jpg"/>
<view class="back-nav" wx-if="isBack">
<view class="back-nav" wx:if="{{isBack}}">
<view class="con" style="width: {{leftWidth}}px">
<view style="width: {{iconWidth}}px">
<image class="icon" bind:tap="back" src="../../images/statistics/icon-back.png" mode="widthFix"/>
@ -12,12 +12,10 @@
</view>
</view>
</view>
<template wx-else>
<view class="con">
<image class="icon" src="../../images/statistics/icon-home.png" mode="widthFix"/>
{{agencyName}}
</view>
</template>
<view class="con index-nav" wx:else>
<image class="icon" src="../../images/statistics/icon-home.png" mode="widthFix"/>
{{agencyName}}
</view>
</view>
</view>
<view style="height: {{navigationHeight + statusHeight}}px"></view>

4
components/Head/index.wxss

@ -57,3 +57,7 @@
left: 0;
z-index: -1;
}
.index-nav {
display: flex;
align-items: center;
}

2
components/Tabs/index.js

@ -13,7 +13,7 @@ Component({
this.setData({
cur: index
})
this.triggerEvent("tabChange",{index})
this.triggerEvent("tabChange",index)
}
}
});

47
pages/statistics/modules/CrowdPortrait/CrowdPortrait.js

@ -1,24 +1,59 @@
import {satisfactionCrowdPortrait} from "../../../../utils/statisticsApi";
Component({
properties: {},
data: {
tabList: [{
label: "按省及社区满意度\n调查结果",
value: 1
value: 'provinceAndSelf'
}, {
label: '按12345热线\n投诉结果',
value: 2
value: '12345'
}],
tabValue: ''
tabValue: 'provinceAndSelf',
gender: '',
marriageName: '',
ageClassification: '',
cultureLevel: '',
gridName: '',
monthIncomeLevel: '',
residentTagName: '',
matchPeopleNum: '',
searchParams: '',
},
lifetimes: {
ready() {
this.getData()
}
},
methods: {
tabChange(index) {
tabChange({detail}) {
this.setData({
tabValue: this.tabList[index].value
tabValue: this.data.tabList[detail].value
})
this.getData()
},
gotopage() {
wx.navigateTo({
url: '/subpages/statistics/pages/crowdPortrait/crowdPortrait'
url: '/subpages/statistics/pages/crowdPortrait/crowdPortrait?data='+this.data.searchParams
})
},
getData() {
let params = {
queryType: this.data.tabValue
}
satisfactionCrowdPortrait(params).then(({data}) => {
this.setData({
gender: data.gender,
marriageName: data.marriageName,
ageClassification: data.ageClassification,
cultureLevel: data.cultureLevel,
gridName: data.gridName,
monthIncomeLevel: data.monthIncomeLevel,
residentTagName: data.residentTagName,
matchPeopleNum: data.matchPeopleNum,
searchParams: JSON.stringify({...data, ...params})
})
})
}
}

34
pages/statistics/modules/CrowdPortrait/CrowdPortrait.wxml

@ -3,42 +3,42 @@
<image src="../../../../images/statistics/sub-tit.png" mode="widthFix"/>
<text>不满意人员画像</text>
</view>
<picker>
<!--<picker>
<view class="picker">
基础教育
<image src="../../../../images/statistics/arrow_down.png" mode="widthFix" style="width:20rpx;height:12rpx;"></image>
</view>
</picker>
</picker>-->
<view class="portrait">
<view class="bg">
<image src="../../../../images/statistics/hx_bg.png" mode="widthFix"/>
</view>
<view class="tags">
<view class="tag">
<view class="text">第一网格</view>
<view class="tag" wx-if="{{gridName}}">
<view class="text">{{gridName}}</view>
</view>
<view class="tag">
<view class="text">30-40岁</view>
<view class="tag" wx-if="{{ageClassification}}">
<view class="text">{{ageClassification}}</view>
</view>
<view class="tag">
<view class="text">流动人员</view>
<view class="tag" wx-if="{{residentTagName}}">
<view class="text">{{residentTagName}}</view>
</view>
<view class="tag">
<view class="text">月收入5000以下</view>
<view class="tag" wx-if="{{monthIncomeLevel}}">
<view class="text">{{monthIncomeLevel}}</view>
</view>
<view class="tag">
<view class="text">专科</view>
<view class="tag" wx-if="{{cultureLevel}}">
<view class="text">{{cultureLevel}}</view>
</view>
<view class="tag">
<view class="text">已婚</view>
<view class="tag" wx-if="{{marriageName}}">
<view class="text">{{marriageName}}</view>
</view>
<view class="tag">
<view class="text">男</view>
<view class="tag" wx-if="{{gender}}">
<view class="text">{{ gender === '1' ? '' : gender === '2' ? '女' : gender === '0' ? '未知' : '' }}</view>
</view>
</view>
</view>
<view class="btn" bind:tap="gotopage">
<text>按画像匹配到同类:570人</text>
<text>按画像匹配到同类:{{ matchPeopleNum ? matchPeopleNum : 0 }}人</text>
<image src="../../../../images/statistics/btn_right.png" mode="widthFix"/>
</view>

22
pages/statistics/modules/EventPrediction/EventPrediction.js

@ -1,10 +1,30 @@
import {potentialSatisfactionGroup} from "../../../../utils/statisticsApi";
Component({
properties: {},
data: {},
data: {
unSolvedNum: 0,
unFinishNum: 0,
noServiceNum: 0,
},
lifetimes: {
ready() {
this.getData()
}
},
methods: {
gotopage({currentTarget: {dataset}}) {
const {url} = dataset;
wx.navigateTo({url})
},
getData() {
potentialSatisfactionGroup().then(({data}) => {
this.setData({
unSolvedNum: data.unSolvedNum,
unFinishNum: data.unFinishNum,
noServiceNum: data.noServiceNum,
})
})
}
}
});

12
pages/statistics/modules/EventPrediction/EventPrediction.wxml

@ -1,23 +1,23 @@
<view class="num-list">
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/sjwjj/sjwjj">
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/qzbmy/qzbmy">
<view class="txt">
<text>事件未解决
的人数</text>
</view>
<view class="num">76</view>
<view class="num">{{unSolvedNum}}</view>
</view>
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/xqwmz/xqwmz">
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/qzbmy/qzbmy">
<view class="txt">
<text>需求未满足
的人数</text>
</view>
<view class="num">24</view>
<view class="num">{{unFinishNum}}</view>
</view>
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/yxwxfw/yxwxfw">
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/qzbmy/qzbmy">
<view class="txt">
<text>应享未享服务
的人数</text>
</view>
<view class="num">13</view>
<view class="num">{{noServiceNum}}</view>
</view>
</view>

189
pages/statistics/modules/HotlineComplaints/HotlineComplaints.js

@ -1,77 +1,41 @@
import * as echarts from '../../../../ec-canvas/echarts';
import {event12345Group} from "../../../../utils/statisticsApi";
var chart;
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // 像素比
});
canvas.setChart(chart);
let data = [
{value: 120, name: '市容环境'},
{value: 150, name: '停车管理'},
{value: 210, name: '物业服务'},
{value: 177, name: '城市低保'},
{value: 194, name: '违章建房'},
];
let color = ["#4F94FF","#A182FB","#27D1A7","#FCBF06","#FF7108"]
var option = {
color,
tooltip: {
show: true,
textStyle: {
color: '#fff',
fontSize: 14
},
backgroundColor: "#04229a",
// extraCssText: "box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.3);",
formatter(params) {
// console.log(params)
if (params.name === '') {
return '';
}
return `${params.name} : ${params.percent}%`;
},
},
series: [
{
name: '',
type: 'pie',
radius: ['40%', '70%'],
center: ['50%', '50%'], // 修改为居中
avoidLabelOverlap: true,
label: {
color: '#333333',
alignTo: 'labelLine',
formatter: '{num|{c}}\n{name|{b}}',
minMargin: 5,
edgeDistance: 10,
lineHeight: 15,
rich: {
num: {
fontSize: 17,
color: '#333333'
},
zb: {
fontSize: 14,
color: '#333333'
}
}
},
labelLine: {
length: 15,
length2: 0,
maxSurfaceAngle: 80
},
data: data
}
]
};
chart.setOption(option);
return chart;
}
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
return [year, month, day].map(formatNumber).join('-')
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
Component({
properties: {},
properties: {
typeCondition: {
type: Number,
value: 0,
observer(val) {
console.log(val, 11)
this.getData()
}
}
},
data: {
ec: {
onInit: initChart
@ -79,17 +43,114 @@ Component({
tabList: [{
label: "问题突出类别",
value: 1
},{
}, {
label: '行业领域分析',
value: 2
}],
tabValue: ''
},
lifetimes: {
ready() {
this.getData()
}
},
methods: {
tabChange(index) {
this.setData({
tabValue: this.tabList[index].value
})
this.getData()
},
getData() {
let params = {
startTime: '',
endTime: ''
}
let now = new Date();
if (this.data.typeCondition === 0) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth(), 1))
}
if (this.data.typeCondition === 1) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 1));
}
if (this.data.typeCondition === 2) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 2));
}
if (this.data.typeCondition === 3) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 5));
}
if (this.data.typeCondition === 4) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 11));
}
if (this.data.typeCondition === 1) {
params.endTime = formatTime(new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59))
} else {
params.endTime = formatTime(new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59))
}
event12345Group(params).then(({data}) => {
data = data.map(item => {
return {
name: item.name,
value: item.blueNum
}
});
let color = ["#4F94FF", "#A182FB", "#27D1A7", "#FCBF06", "#FF7108"]
var option = {
color,
tooltip: {
show: true,
textStyle: {
color: '#fff',
fontSize: 14
},
backgroundColor: "#04229a",
formatter(params) {
// console.log(params)
if (params.name === '') {
return '';
}
return `${params.name} : ${params.percent}%`;
},
},
series: [
{
name: '',
type: 'pie',
radius: ['40%', '70%'],
center: ['50%', '50%'], // 修改为居中
avoidLabelOverlap: true,
label: {
color: '#333333',
alignTo: 'labelLine',
formatter: '{num|{c}}\n{name|{b}}',
minMargin: 5,
edgeDistance: 10,
lineHeight: 15,
rich: {
num: {
fontSize: 17,
color: '#333333'
},
zb: {
fontSize: 14,
color: '#333333'
}
}
},
labelLine: {
length: 15,
length2: 0,
maxSurfaceAngle: 80
},
data: data
}
]
};
chart.setOption(option);
})
}
}
});

305
pages/statistics/modules/SmyddcSqmydzc/SmyddcSqmydzc.js

@ -1,141 +1,202 @@
import * as echarts from '../../../../ec-canvas/echarts';
import {satisfactionGroup} from "../../../../utils/statisticsApi";
var chart;
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // 像素比
});
canvas.setChart(chart);
var dataname = ['老有所养', '社会治安', '生态环境', '体育设施', '社会救助', '文化设施', '基础教育', '病有所医']
var datamax = [20, 20, 20, 20, 20, 20, 20, 20]
var datavaule = [10, 16, 18, 15, 12, 18, 18, 18]
var datavaule2 = [12, 17, 20, 16, 13, 19, 19, 19]
var indicator = []
for (var i = 0; i < dataname.length; i++) {
indicator.push({
name: dataname[i],
max: datamax[i],
})
}
var option = {
tooltip: {
show: false,
trigger: "item",
},
legend: {
show: true,
textStyle: {
color: '#999999',
rich: {
name: {
fontSize: 14,
lineHeight: 19,
padding: [20, 0, 0, 0]
},
}
},
itemWidth: 6,
itemHeight: 6,
y: 'bottom',
x: 'center',
formatter: name => {
return `{name|${name}}`
},
data: ['省满意度调查\n各项不满意人数', '社区满意度自查\n各项不满意人数'],
},
radar: {
center: ["50%", "40%"],
radius: "50%",
startAngle: 90,
splitNumber: 5,
splitArea: {
areaStyle: {
color: 'transparent'
}
},
axisLabel: {
show: false,
},
axisLine: {
show: true,
lineStyle: {
color: "rgba(226,226,226,0.28)"
}
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(226,226,226,0.61)"
}
},
name: {
textStyle: {
color: '#333333',
fontSize: 14,
borderRadius: 3,
}
},
indicator: indicator
},
series: [{
name: "省满意度调查\n各项不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 0,
areaStyle: {
normal: {
color: 'rgba(58,128,231,0.36)',
}
},
itemStyle: {
color: '#3A80E7',
borderColor: '#3AB7FF',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#3AB7FF",
width: 2
}
},
data: [datavaule]
}, {
name: "社区满意度自查\n各项不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 0,
areaStyle: {
normal: {
color: 'rgba(170, 216, 255, 0)',
}
},
itemStyle: {
color: '#EB8E16',
borderColor: '#EF9700',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#EF9700",
width: 2
}
},
data: [datavaule2]
}]
};
chart.setOption(option);
return chart;
}
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
return [year, month, day].map(formatNumber).join('-')
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
Component({
properties: {},
properties: {
typeCondition: {
type: Number,
value: 0,
observer (val) {
console.log(val,11)
this.getData()
}
}
},
data: {
ec: {
onInit: initChart
}
},
lifetimes: {
ready() {
this.getData()
}
},
methods: {
getData() {
let params = {
startTime: '',
endTime: ''
}
let now = new Date();
if (this.data.typeCondition === 0) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth(), 1))
}
if (this.data.typeCondition === 1) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 1));
}
if (this.data.typeCondition === 2) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 2));
}
if (this.data.typeCondition === 3) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 5));
}
if (this.data.typeCondition === 4) {
params.startTime = formatTime(new Date(now.getFullYear(), now.getMonth() - 11));
}
if (this.data.typeCondition === 1) {
params.endTime = formatTime(new Date(now.getFullYear(), now.getMonth(), 0, 23, 59, 59))
} else {
params.endTime = formatTime(new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59))
}
console.log(params)
satisfactionGroup(params).then(({data}) => {
var dataname = data.map(item => item.name)
var datavaule = data.map(item => item.blueNum ? item.blueNum : 0)
var datavaule2 = data.map(item => item.yellowNum ? item.yellowNum : 0)
var indicator = []
let max = Math.max(...datavaule, ...datavaule2)
console.log(max)
var datamax = new Array(datavaule.length).fill(max)
for (var i = 0; i < dataname.length; i++) {
indicator.push({
name: dataname[i],
max: datamax[i],
})
}
let legendName = ['省满意度调查各项\n不满意人数', '社区满意度自查各项\n不满意人数']
let series = [{
name: "省满意度调查各项\n不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 0,
areaStyle: {
normal: {
color: 'rgba(58,128,231,0.36)',
}
},
itemStyle: {
color: '#3A80E7',
borderColor: '#3AB7FF',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#3AB7FF",
width: 2
}
},
data: [datavaule]
}, {
name: "社区满意度自查各项\n不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 0,
areaStyle: {
normal: {
color: 'rgba(170, 216, 255, 0)',
}
},
itemStyle: {
color: '#EB8E16',
borderColor: '#EF9700',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#EF9700",
width: 2
}
},
data: [datavaule2]
}]
var option = {
tooltip: {
show: false,
trigger: "item",
},
legend: {
show: true,
textStyle: {
color: '#999999',
rich: {
name: {
fontSize: 14,
lineHeight: 19,
padding: [20, 0, 0, 0]
},
}
},
itemWidth: 6,
itemHeight: 6,
y: 'bottom',
x: 'center',
formatter: name => {
return `{name|${name}}`
},
data: legendName,
},
radar: {
center: ["50%", "40%"],
radius: "50%",
startAngle: 90,
splitNumber: 5,
splitArea: {
areaStyle: {
color: 'transparent'
}
},
axisLabel: {
show: false,
},
axisLine: {
show: true,
lineStyle: {
color: "rgba(226,226,226,0.28)"
}
},
splitLine: {
show: true,
lineStyle: {
color: "rgba(226,226,226,0.61)"
}
},
name: {
textStyle: {
color: '#333333',
fontSize: 14,
borderRadius: 3,
}
},
indicator: indicator
},
series
};
chart.setOption(option,true);
})
}
}
});

278
pages/statistics/modules/Trend/Trend.js

@ -1,166 +1,16 @@
import * as echarts from '../../../../ec-canvas/echarts';
import {notSatisfactionTrend} from "../../../../utils/statisticsApi";
var chart = null;
function initChart(canvas, width, height, dpr) {
const chart = echarts.init(canvas, null, {
chart = echarts.init(canvas, null, {
width: width,
height: height,
devicePixelRatio: dpr // 像素比
});
canvas.setChart(chart);
let xData = ['10月', '11月', '12月', '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月'];
let tq1 = [12, 20, 30, 60, 49, 18, 90, 48, 39, 30, 27, 40, 48, 39, 27, 49];
let tq2 = [10, 50, 50, 27, 49, 58, 80, 80, 19, 60, 30, 30, 49, 18, 90, 20];
let tq3 = [300, 90, 48, 39, 30, 27, 49, 18, 90, 39, 27, 49, 30, 100, 49, 100];
var option = {
title: {
show: false,
text: '',
x: 'center',
top: '15px',
textStyle: {
color: '#333333',
fontWeight: 500,
fontSize: 18,
},
},
legend: {
// icon: 'circle',
data: ['12345投诉事件数', '省调查不满意数', '社区自查不满意数'],
itemGap: 12,
itemWidth: 12,
itemHeight: 5,
x: 'left',
top: '0%',
textStyle: {
color: '#999999',
fontSize: 10,
// padding:[0, 10, 0, 10],
}
},
grid: {
top: '18%',
left: '2%',
right: '4%',
bottom: '8%',
containLabel: true
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
splitLine: {
show: false,
},
axisLine: {
lineStyle: {
color: '#323c41'
}
},
axisLabel: {
interval: 0,
align: 'center',
textStyle: {
fontSize: 11,
color: '#C1C1C1'
}
},
boundaryGap: true,
data: xData,
},
],
yAxis: [
{
type: 'value',
splitLine: {
show: false
},
axisLabel: {
show: true,
color: '#999999',
textStyle: {
fontSize: 11
}
},
axisTick: {
show: false
}
}
],
series: [
{
name: '12345投诉事件数',
type: 'line',
showAllSymbol: true,
symbol: 'circle',
symbolSize: 0,
lineStyle: {
normal: {
color: '#3A80E7',
},
},
label: {
show: false,
},
itemStyle: {
show: false,
color: '#FFF',
borderColor: '#3A80E7',
borderWidth: 1,
},
data: tq1,
},
{
name: '省调查不满意数',
type: 'line',
showAllSymbol: true,
symbol: 'circle',
symbolSize: 0,
lineStyle: {
normal: {
color: '#EB8E16',
},
},
label: {
show: false,
},
itemStyle: {
color: '#fff',
borderColor: '#EB8E16',
borderWidth: 1,
},
data: tq2, //data.values
},
{
name: '社区自查不满意数',
type: 'line',
yIndex: 0,
showAllSymbol: true,
symbol: 'circle',
symbolSize: 0,
lineStyle: {
normal: {
color: '#10B2A5',
},
},
label: {
show: false,
},
itemStyle: {
color: '#fff',
borderColor: '#10B2A5',
borderWidth: 1,
},
data: tq3, //data.values
}
],
};
chart.setOption(option);
return chart;
}
@ -171,6 +21,126 @@ Component({
onInit: initChart
}
},
lifetimes: {
ready() {
this.getData()
}
},
methods: {
getData() {
notSatisfactionTrend().then(({data}) => {
let xData = data.monthTimes.map(item => (item.split('-')[1] - 0) + '月');
let series = []
let color = ['#3A80E7', '#EB8E16', '#10B2A5',]
data.series.forEach((item,index) => {
series.push({
name:item.name,
type: 'line',
showAllSymbol: true,
symbol: 'circle',
symbolSize: 0,
lineStyle: {
normal: {
color: color[index],
},
},
label: {
show: false,
},
itemStyle: {
show: false,
color: '#FFF',
borderColor: color[index],
borderWidth: 1,
},
data: item.data,
},)
})
var option = {
title: {
show: false,
text: '',
x: 'center',
top: '15px',
textStyle: {
color: '#333333',
fontWeight: 500,
fontSize: 18,
},
},
legend: {
// icon: 'circle',
data: data.series.map(item => item.name),
itemGap: 12,
itemWidth: 12,
itemHeight: 5,
x: 'left',
top: '0%',
textStyle: {
color: '#999999',
fontSize: 10,
// padding:[0, 10, 0, 10],
}
},
grid: {
top: '18%',
left: '2%',
right: '4%',
bottom: '8%',
containLabel: true
},
xAxis: [
{
type: 'category',
axisTick: {
show: false,
},
splitLine: {
show: false,
},
axisLine: {
lineStyle: {
color: '#323c41'
}
},
axisLabel: {
interval: 0,
align: 'center',
textStyle: {
fontSize: 11,
color: '#C1C1C1'
}
},
boundaryGap: true,
data: xData,
},
],
yAxis: [
{
type: 'value',
splitLine: {
show: false
},
axisLabel: {
show: true,
color: '#999999',
textStyle: {
fontSize: 11
}
},
axisTick: {
show: false
}
}
],
series,
};
chart.setOption(option);
})
}
}
});

8
pages/statistics/statistics.wxml

@ -29,14 +29,14 @@
<text>省满意度调查&社区满意度自查</text>
</view>
<SmyddcSqmydzc/>
<SmyddcSqmydzc typeCondition="{{monthIndex}}"/>
<view class="sub-tit">
<image src="../../images/statistics/sub-tit.png" mode="widthFix" />
<text>12345热线投诉</text>
</view>
<HotlineComplaints />
<HotlineComplaints typeCondition="{{monthIndex}}" />
</view>
@ -44,9 +44,9 @@
<view class="card">
<view class="title">
<text>潜在不满意人员及事项预测</text>
<view class="view" bind:tap="gotopage" data-url="/subpages/statistics/pages/qzbmy/qzbmy">
<!-- <view class="view" bind:tap="gotopage" data-url="/subpages/statistics/pages/qzbmy/qzbmy">
查看 <image mode="widthFix" src="../../images/right.png"></image>
</view>
</view>-->
</view>
<EventPrediction/>
</view>

44
subpages/statistics/pages/crowdPortrait/crowdPortrait.js

@ -1,13 +1,49 @@
import {satisfactionCrowdList} from "../../../../utils/statisticsApi";
Page({
data: {
list: [],
total: 0,
params: {},
pageNo: 1,
pageSize: 10
},
onLoad(options) {
let params = {}
let data = JSON.parse(decodeURIComponent(options.data))
for (let key in data) {
if (data[key]) {
params[key] = data[key]
}
}
this.setData({
params
})
this.getList()
},
gotopage() {
gotopage(e) {
wx.navigateTo({
url: "/subpages/statistics/pages/residentPortrait/residentPortrait"
url: "/subpages/statistics/pages/residentPortrait/residentPortrait?id="+e.currentTarget.dataset.id
})
},
getList() {
satisfactionCrowdList({
...this.data.params,
pageNo: this.data.pageNo,
pageSize: this.data.pageSize
}).then(({data}) => {
this.setData({
list: this.data.list.concat(data.list),
total: data.total
})
})
},
onReachBottom() {
if (this.data.list.length < this.data.total) {
this.setData({
pageNo: this.data.pageNo+1
})
this.getList()
}
}
})

9
subpages/statistics/pages/crowdPortrait/crowdPortrait.wxml

@ -4,15 +4,16 @@
<view class="card">
<view class="title">
<text class="bold">“基础教育” </text>潜在不满意人员: <text class="blue">378</text> 人
<!-- <text class="bold">“基础教育” </text>-->
潜在不满意人员: <text class="blue">{{total}}</text> 人
</view>
<view class="log-list">
<view class="log-item" wx:for="{{2}}" bind:tap="gotopage">
<view class="log-item" wx:for="{{list}}" wx:key="{{index}}" bind:tap="gotopage" data-id="{{item.restId}}">
<view>
<view class="user">
<view class="name">刘萍 13362021000</view>
<view class="name">{{item.restName}} {{item.mobile}}</view>
</view>
<view class="address">地址:阳光城小区3号楼2单元202户</view>
<view class="address">地址:{{item.houseAddress}}</view>
</view>
<image src="../../../images/right.png" mode="widthFix" class="icon"/>
</view>

21
subpages/statistics/pages/dissatisfied/detial/detail.js

@ -1,8 +1,25 @@
import {getUnsatisfiedMattersDetailInfo} from "../../../../../utils/statisticsApi";
Page({
data: {
detail: {},
unsatisfiedHisCount: {},
followUpRecordDetails: {},
id: {}
},
onLoad(options) {
this.setData({
id: JSON.parse(decodeURIComponent(options.id))
})
this.getData()
},
getData() {
getUnsatisfiedMattersDetailInfo(this.data.id).then(({data}) =>{
this.setData({
detail: data.unsatisfiedMattersModel,
unsatisfiedHisCount: data.unsatisfiedHisCount,
followUpRecordDetails: data.followUpRecordDetails
})
})
}
})

24
subpages/statistics/pages/dissatisfied/detial/detail.wxml

@ -2,15 +2,15 @@
<view class="statistics-container">
<view class="user-info">
<view class="name">
<text>王阳 15620233333</text>
<view class="tag red">风险</view>
<text>{{detail.name}} {{detail.mobile}}</text>
<view class="tag red" wx-if="{{detail.dangerFlag}}">风险</view>
</view>
<view class="address">亿星社区第一网格 金色海岸小区1号楼2单元201</view>
<view class="address">{{detail.organizationName}}</view>
<view class="describe">
<view class="text">
不满意原因:附近适龄入学儿童多,幼儿园一共就 有2-3个,一个班要有40多个孩子,报名困难。
不满意原因: {{detail.reason}}
</view>
<view class="time">2023-08-20 17:40:23</view>
<view class="time">{{detail.createTime}}</view>
</view>
</view>
@ -21,19 +21,19 @@
<view class="txt">
<text>12345投诉</text>
</view>
<view class="num">76</view>
<view class="num">{{unsatisfiedHisCount.satisfaction_12345}}</view>
</view>
<view class="num-item">
<view class="txt">
<text>省满意度调查</text>
</view>
<view class="num">24</view>
<view class="num">{{unsatisfiedHisCount.satisfaction_province}}</view>
</view>
<view class="num-item">
<view class="txt">
<text>社区满意度自查</text>
</view>
<view class="num">13</view>
<view class="num">{{unsatisfiedHisCount.satisfaction_community}}</view>
</view>
</view>
</view>
@ -41,13 +41,13 @@
<view class="card">
<view class="title">回访记录</view>
<view class="log-list">
<view class="log-item" wx:for="{{2}}">
<view class="log-item" wx:for="{{followUpRecordDetails}}" wx:key="{{index}}">
<view>
<view class="user">
<view class="tag blue">电话回访</view>
<view class="name">杨平(网格长)</view>
<view class="tag blue">{{item.followUpWay}}</view>
<view class="name">{{item.followUpUser}}({{item.roleName}})</view>
</view>
<view class="date">2023-08-23</view>
<view class="date">{{item.followUpDate}}</view>
</view>
<image src="../../../images/right.png" mode="widthFix" class="icon"/>
</view>

138
subpages/statistics/pages/dissatisfied/list/list.js

@ -1,18 +1,148 @@
import {
getUnsatisfiedCategory,
getUnsatisfiedMattersList,
satisfactionMonthGroupForResident
} from "../../../../../utils/statisticsApi";
const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
return [year, month].map(formatNumber).join('-')
}
const formatTime2 = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
return [year, month,day].map(formatNumber).join('-')
}
const formatNumber = n => {
n = n.toString()
return n[1] ? n : '0' + n
}
Page({
data: {
month:'',
month: '',
typeIndex: -1,
typeList: []
typeList: [],
satisfactionSourceIndex: -1,
satisfactionSourceOptions: [{
value: 'satisfaction_12345',
label: '12345投诉',
color: '#FFB73C',
}, {
value: 'satisfaction_province',
label: '省满意度调查',
color: '#64C1FF'
}, {
value: 'satisfaction_community',
label: '社区满意度自查',
color: '#08EBAE'
}],
satisfactionCategory: -1,
satisfactionCategoryOptions: [],
list: {},
total: 0,
pageNo: 1,
pageSize: 20,
},
onLoad(options) {
this.setData({
month: formatTime(new Date())
})
this.getList()
},
nextMonth() {
console.log('next');
if (this.data.list[this.data.month].data.length < this.data.list[this.data.month].total) {
this.setData({
pageNo: this.data.pageNo + 1
})
this.getList()
return
}
let now = new Date(this.data.month)
this.setData({
pageNo: 1,
month: formatTime(new Date(now.getFullYear(), now.getMonth() - 1))
})
this.getList()
},
onConfirm() {
prevMonth() {
console.log('prev');
/* let now = new Date(this.data.month)
let now2 = new Date()
if (now.getMonth() < now2) {
this.setData({
month: formatTime(new Date(now.getFullYear(), now.getMonth() + 1))
})
this.getList()
}*/
},
sourceChange(e) {
console.log(e)
this.getSatisfactionCategoryOptions()
},
getSatisfactionCategoryOptions() {
this.setData({
satisfactionCategory: -1,
satisfactionCategoryOptions: []
})
getUnsatisfiedCategory({
satisfactionSource: this.data.satisfactionSourceOptions[this.data.satisfactionSourceIndex].value
}).then(({data}) => {
this.setData({
satisfactionCategoryOptions: data.map(item => {
return {
label: item.categoryName,
value: item.categoryCode
}
})
})
})
},
onConfirm() {
this.setData({
list: {},
})
this.getList();
},
getList() {
let params = {
pageNo: this.data.pageNo,
pageSize: this.data.pageSize,
month: this.data.month,
satisfactionSource: this.data.satisfactionSourceIndex >= 0 ? this.data.satisfactionSourceOptions[this.data.satisfactionSourceIndex].value : '',
satisfactionCategory: this.data.satisfactionCategory >= 0 ? this.data.satisfactionCategoryOptions[this.data.satisfactionCategory].value : '',
}
let list = this.data.list
getUnsatisfiedMattersList(params).then(({data}) => {
list[params.month] = {
data: this.data.list[params.month]?this.data.list[params.month].data.concat(data.list):data.list,
total: data.total,
month: params.month.split('-')[1],
}
this.setData({
list
})
this.getCount(params);
})
},
getCount({month}) {
let now = new Date(month);
var startTime = formatTime2(new Date(now.getFullYear(), now.getMonth(), 1));
var endTime = formatTime2(new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59));
satisfactionMonthGroupForResident({
startTime,endTime
}).then(({data}) => {
this.setData(JSON.parse(`{"list.${month}.sumNumber": "${data.sumNumber}","list.${month}.sumPeople": "${data.sumPeople}"}`))
})
},
gotopage(e) {
wx.navigateTo({
url: '/subpages/statistics/pages/dissatisfied/detial/detail?id='+e.currentTarget.dataset.id
url: '/subpages/statistics/pages/dissatisfied/detial/detail?id=' + JSON.stringify(e.currentTarget.dataset.id)
})
}
})

117
subpages/statistics/pages/dissatisfied/list/list.wxml

@ -12,110 +12,65 @@
</picker>
<picker
model:value="{{ typeIndex }}"
bind:change="onConfirm"
range="{{satisfactionSourceOptions}}"
range-key="label"
model:value="{{ satisfactionSourceIndex }}"
bind:change="sourceChange"
>
<view class="picker-type">
<text>{{ typeIndex >= 0 ? typeList[typeIndex].label : '按类型' }}</text>
<text>{{ satisfactionSourceIndex >= 0 ? satisfactionSourceOptions[satisfactionSourceIndex].label : '按来源'
}}</text>
<image src="../../../images/down2.png" mode="widthFix"/>
</view>
</picker>
<view class="btn">筛选</view>
</view>
<view class="statistics-container">
<view class="card-list">
<view class="head">
<view class="month">8<text>月</text>
</view>
<view class="head-right">
<view class="txt">不满意事项: 132项</view>
<view class="txt">不满意人数: 110人</view>
</view>
</view>
<view class="content">
<view class="item" bind:tap="gotopage" data-id="1">
<view class="user-info">
<view class="name">
杨萍 133****9000
</view>
<view class="tag blue">12345投诉</view>
</view>
<view class="date">
<view class="time">2023-08-12 15:30:20</view>
<view class="type">违章建筑</view>
</view>
<view class="describe">
村前的老宅有个饭店,想要扩建二层,周边村民都 不同意,该居民想自行加高,对此不满,要求停止
建设,希望责任部门尽快落实该信息·
</view>
</view>
<view class="item" bind:tap="gotopage" data-id="2">
<view class="user-info">
<view class="name">
杨萍 133****9000
<view class="tag red">风险</view>
</view>
<view class="tag orange">省满意度调查</view>
</view>
<view class="date">
<view class="time">2023-08-12 15:30:20</view>
<view class="type">违章建筑</view>
</view>
<view class="describe">
村前的老宅有个饭店,想要扩建二层,周边村民都 不同意,该居民想自行加高,对此不满,要求停止
建设,希望责任部门尽快落实该信息·
</view>
</view>
<picker
range="{{satisfactionCategoryOptions}}"
range-key="label"
model:value="{{ satisfactionCategory }}"
>
<view class="picker-type">
<text>{{ satisfactionCategory >= 0 ? satisfactionCategoryOptions[satisfactionCategory].label : '按类型'
}}</text>
<image src="../../../images/down2.png" mode="widthFix"/>
</view>
</picker>
<view class="btn" bindtap="onConfirm">
筛选
</view>
<view class="card-list">
</view>
<!-- bind:scrolltoupper="prevMonth"-->
<scroll-view scroll-y style="height: calc(90vh - 46rpx)" bind:scrolltolower="nextMonth"
class="statistics-container">
<view class="card-list" wx:for="{{list}}" wx:key="{{index}}">
<view class="head">
<view class="month">7<text>月</text>
<view class="month">{{item.month - 0}}<text>月</text>
</view>
<view class="head-right">
<view class="txt">不满意事项: 132项</view>
<view class="txt">不满意人数: 110人</view>
<view class="txt">不满意事项: {{item.sumNumber}}项</view>
<view class="txt">不满意人数: {{item.sumPeople}}人</view>
</view>
</view>
<view class="content">
<view class="item">
<view class="item" bind:tap="gotopage" data-id="{{item2}}" wx:for="{{item.data}}" wx:key="index2" wx:for-index="index2" wx:for-item="item2">
<view class="user-info">
<view class="name">
杨萍 133****9000
{{item2.name}} {{item.mobile}}
<view class="tag red" wx-if="{{item2.dangerFlag}}">风险</view>
</view>
<view class="tag blue" wx-if="{{item2.satisfactionSource === 'satisfaction_12345'}}">12345投诉</view>
<view class="tag orange" wx-if="{{item2.satisfactionSource === 'satisfaction_province'}}">省满意度调查</view>
<view class="tag green" wx-if="{{item2.satisfactionSource === 'satisfaction_community'}}">社区满意度自查</view>
<view class="tag blue">12345投诉</view>
</view>
<view class="date">
<view class="time">2023-08-12 15:30:20</view>
<view class="type">违章建筑</view>
<view class="time">{{item.createdTime}}</view>
<view class="type">{{item2.satisfactionCategoryName}}</view>
</view>
<view class="describe">
村前的老宅有个饭店,想要扩建二层,周边村民都 不同意,该居民想自行加高,对此不满,要求停止
建设,希望责任部门尽快落实该信息·
</view>
</view>
<view class="item">
<view class="user-info">
<view class="name">
杨萍 133****9000
</view>
<view class="tag green">社区满意度自查</view>
</view>
<view class="date">
<view class="time">2023-08-12 15:30:20</view>
<view class="type">违章建筑</view>
</view>
<view class="describe">
村前的老宅有个饭店,想要扩建二层,周边村民都 不同意,该居民想自行加高,对此不满,要求停止
建设,希望责任部门尽快落实该信息·
{{item2.reason}}
</view>
</view>
</view>
</view>
</view>
</scroll-view>

16
subpages/statistics/pages/dissatisfied/list/list.wxss

@ -10,7 +10,8 @@ page {
}
.picker {
width: 241rpx;
width: 200rpx;
margin-right: 10rpx;
height: 56rpx;
background: rgba(58, 128, 231, 0.16);
border: 1px solid #3A80E7;
@ -22,8 +23,9 @@ page {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 30rpx;
padding: 0 20rpx;
box-sizing: border-box;
white-space: nowrap;
}
.picker-type image,
@ -32,13 +34,20 @@ page {
height: 24rpx;
}
.picker-type text {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
width: calc(100% - 24rpx);
}
.picker-type {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 30rpx;
margin-right: 10rpx;
box-sizing: border-box;
width: 301rpx;
width: 180rpx;
height: 56rpx;
background: rgba(193, 193, 193, 0.16);
border: 1px solid #DBDBDB;
@ -48,6 +57,7 @@ page {
color: #C1C1C1;
line-height: 56rpx;
text-align: center;
}
.btn {

67
subpages/statistics/pages/qzbmy/qzbmy.js

@ -1,22 +1,67 @@
// subpages/statistics/pages/qzbmy/qzbmy.js
Page({
import {getPotentialDissatisfiedCountDetail, maporg} from "../../../../utils/statisticsApi";
/**
* 页面的初始数据
*/
Page({
data: {
org: [],
orgIndex: -1,
orgList: [],
orgIndex: 0,
pageNo: 1,
pageSize: 10,
list: [],
total: 0,
mobile: "",
name: ""
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getOrg()
},
getOrg() {
maporg().then(async ({data}) => {
let parent = {value: data.id, label: data.name}
this.setData({
orgList: [
parent, ...data.children.map(item => {
return {
value: item.id,
label: item.name
}
})
]
})
this.getList()
})
},
gotopage({currentTarget:{dataset}}) {
gotopage({currentTarget: {dataset}}) {
const {url} = dataset;
wx.navigateTo({url})
},
setVal(e) {
this.setData({
[e.currentTarget.dataset.key]: e.detail.value
})
},
getList() {
getPotentialDissatisfiedCountDetail({
pageNo: this.data.pageNo,
pageSize: this.data.pageSize,
agencyId: this.data.orgList[this.data.orgIndex].value,
name: this.data.name,
mobile: this.data.mobile,
}).then(({data}) => {
this.setData({
list: this.data.list.concat(data.list),
total: data.total
})
});
},
onReachBottom() {
if (this.data.list.length < this.data.total) {
this.setData({
pageNo: this.data.pageNo + 1
})
this.getList()
}
}
})

58
subpages/statistics/pages/qzbmy/qzbmy.wxml

@ -1,43 +1,49 @@
<view class="screen">
<picker model:value="{{ orgIndex }}" bind:change="onConfirm">
<picker
model:value="{{ orgIndex }}"
range="{{orgList}}"
range-key="label"
data-key="orgIndex"
bindchange="setVal"
>
<view class="picker">
<text>{{ orgIndex>0 ? orgList[orgIndex].label : '按组织' }}</text>
<text>{{ orgIndex >= 0 ? orgList[orgIndex].label : '按组织' }}</text>
<image src="../../images/down.png" mode="widthFix"/>
</view>
</picker>
<input placeholder="按姓名" class="picker-type"/>
<input placeholder="按电话" class="picker-type"/>
<input placeholder="按姓名" bind:input="setVal" data-key="name" class="picker-type"/>
<input placeholder="按电话" bind:input="setVal" data-key="mobile" class="picker-type"/>
<view class="btn">筛选</view>
</view>
<view class="qz-container">
<view class="qz-list">
<view class="qz-item" wx:for="{{10}}">
<view class="user-info">
<view class="name">刘萍 133****1000</view>
<view class="address">XXX社区第一网格</view>
</view>
<view class="num-list">
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/sjwjj/sjwjj">
<view class="txt">
<text>事件未解决数</text>
</view>
<view class="num">76</view>
<view class="qz-list">
<view class="qz-item" wx:for="{{list}}" wx:key="{{index}}">
<view class="user-info">
<view class="name">{{item.name}} {{item.mobile}}</view>
<view class="address">{{item.agencyName}}</view>
</view>
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/xqwmz/xqwmz">
<view class="txt">
<text>需求未满足数</text>
<view class="num-list">
<view class="num-item" bind:tap="gotopage" data-url="{{'/subpages/statistics/pages/sjwjj/sjwjj?id='+item.reportUserId+'&name='+item.name+'&mobile='+item.mobile+'&agencyName='+item.agencyName}}">
<view class="txt">
<text>事件未解决数</text>
</view>
<view class="num">{{item.eventCount}}</view>
</view>
<view class="num">24</view>
</view>
<view class="num-item" bind:tap="gotopage" data-url="/subpages/statistics/pages/yxwxfw/yxwxfw">
<view class="txt">
<text>应享未享服务数</text>
<view class="num-item" bind:tap="gotopage" data-url="{{'/subpages/statistics/pages/xqwmz/xqwmz?id='+item.reportUserId+'&name='+item.name+'&mobile='+item.mobile+'&agencyName='+item.agencyName}}">
<view class="txt">
<text>需求未满足数</text>
</view>
<view class="num">{{item.demandCount}}</view>
</view>
<view class="num-item" bind:tap="gotopage" data-url="{{'/subpages/statistics/pages/yxwxfw/yxwxfw?id='+item.reportUserId+'&name='+item.name+'&mobile='+item.mobile+'&agencyName='+item.agencyName}}">
<view class="txt">
<text>应享未享服务数</text>
</view>
<view class="num">{{item.serviceCount}}</view>
</view>
<view class="num">13</view>
</view>
</view>
</view>
</view>
</view>

117
subpages/statistics/pages/residentPortrait/residentPortrait.js

@ -1,66 +1,71 @@
// subpages/statistics/pages/residentPortrait/residentPortrait.js
Page({
import {
getFamilyRelationshipList, getPersonalFeature,
getPersonalFile, potentialSatisfactionForResident, queryResidentFollowRecord
} from "../../../../utils/statisticsApi";
/**
* 页面的初始数据
*/
Page({
data: {
id: 0,
userInfo: {},
relationship: {},
unSolvedNum: 0,
unFinishNum: 0,
noServiceNum: 0,
event12345Num: 0,
provinceSatisfactionNum: 0,
selfInspectNum: 0,
logList: [],
tags: {}
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
this.setData({
id: options.id
})
this.getUser()
this.getNum()
this.getlog()
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
getUser() {
getPersonalFile({resid: this.data.id}).then(({data}) => {
this.setData({
userInfo: data
})
})
getFamilyRelationshipList({resid: this.data.id, type: 0}).then(({data}) => {
this.setData({
relationship: data
})
})
getPersonalFeature({resid: this.data.id}).then(({data}) => {
this.setData({
tags: data
})
})
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
getNum() {
let params = {
resiId: this.data.id,
};
potentialSatisfactionForResident(params).then(({data}) => {
this.setData({
unSolvedNum: data.unSolvedNum,
unFinishNum: data.unFinishNum,
noServiceNum: data.noServiceNum,
event12345Num: data.event12345Num,
provinceSatisfactionNum: data.provinceSatisfactionNum,
selfInspectNum: data.selfInspectNum
})
});
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
getlog() {
let params = {
resiId: this.data.id,
};
queryResidentFollowRecord(params).then(({data}) => {
this.setData({
logList: data
})
})
}
})

65
subpages/statistics/pages/residentPortrait/residentPortrait.wxml

@ -3,10 +3,10 @@
<view class="title">居民基本信息</view>
<view class="user-info">
<view class="name">
刘萍 13362021000
<text class="tag red">风险</text>
{{userInfo.name}} {{userInfo.mobile}}
<text class="tag red" wx-if="{{userInfo.riskyFlag == 1}}">风险</text>
</view>
<view class="address">XX社区第一网格 四季景苑小区2号楼1单元201</view>
<view class="address">{{userInfo.gridName}} {{userInfo.fullName}}</view>
</view>
<view class="table">
<view class="tr">
@ -15,11 +15,11 @@
<view class="th">性别</view>
<view class="th">年龄</view>
</view>
<view class="tr" wx:for="{{5}}">
<view class="td">王军</view>
<view class="td" style="flex:2">本人</view>
<view class="td">男</view>
<view class="td">18 <image mode="widthFix" class="table-right-icon" src="../../images/right2.png" /></view>
<view class="tr" wx:for="{{relationship}}" wx:key="{{index}}">
<view class="td">{{item.name}}</view>
<view class="td" style="flex:2">{{item.houseHolderRel ? item.houseHolderRel : ''}}</view>
<view class="td">{{item.gender == 2?'':item.gender == 1?'女':item.gender === '0'?'未知':''}}</view>
<view class="td">{{item.age}} <image mode="widthFix" class="table-right-icon" src="../../images/right2.png" /></view>
</view>
</view>
@ -32,27 +32,28 @@
<view class="bg">
<image src="../../images/jmhx_center.png" mode="widthFix"/>
</view>
<view class="tags">
<view class="tag">
<view class="text">35岁</view>
<view class="tag" wx-if="{{tags.age}}">
<view class="text">{{tags.age}}岁</view>
</view>
<view class="tag">
<view class="text">失业 人员</view>
<view class="tag" wx-if="{{tags.category1}}">
<view class="text">{{tags.category1}}</view>
</view>
<view class="tag">
<view class="text">流动 人员</view>
<view class="tag" wx-if="{{tags.category2}}">
<view class="text">{{tags.category2}}</view>
</view>
<view class="tag">
<view class="text">月收入5000以下</view>
<view class="tag" wx-if="{{tags.monthIncomeLevel}}">
<view class="text">{{tags.monthIncomeLevel}}</view>
</view>
<view class="tag">
<view class="text">专科</view>
<view class="tag" wx-if="{{tags.cultureLevel}}">
<view class="text">{{tags.cultureLevel}}</view>
</view>
<view class="tag">
<view class="text">已婚</view>
<view class="tag" wx-if="{{tags.marriage}}">
<view class="text">{{tags.marriage}}</view>
</view>
<view class="tag">
<view class="text">男</view>
<view class="tag" wx-if="{{tags.gender || tags.gender === '0'}}">
<view class="text">{{tags.gender == 2?'':tags.gender == 1?'女':tags.gender === '0'?'未知':''}}</view>
</view>
</view>
</view>
@ -64,53 +65,53 @@
<view class="txt">
<text>12345投诉</text>
</view>
<view class="num">76</view>
<view class="num">{{event12345Num}}</view>
</view>
<view class="num-item">
<view class="txt">
<text>省满意度调查</text>
</view>
<view class="num">24</view>
<view class="num">{{provinceSatisfactionNum}}</view>
</view>
<view class="num-item">
<view class="txt">
<text>社区满意度自查</text>
</view>
<view class="num">13</view>
<view class="num">{{selfInspectNum}}</view>
</view>
<view class="num-item">
<view class="txt">
<text>事件未解决
的次数</text>
</view>
<view class="num">3</view>
<view class="num">{{unSolvedNum}}</view>
</view>
<view class="num-item">
<view class="txt">
<text>需求未满足
的次数</text>
</view>
<view class="num">0</view>
<view class="num">{{unFinishNum}}</view>
</view>
<view class="num-item">
<view class="txt">
<text>应享未享服务
的次数</text>
</view>
<view class="num">0</view>
<view class="num">{{noServiceNum}}</view>
</view>
</view>
</view>
<view class="card">
<view class="title">回访记录</view>
<view class="log-list">
<view class="log-item" wx:for="{{2}}">
<view class="log-item" wx:for="{{logList}}" wx:key="{{index}}">
<view>
<view class="user">
<view class="tag blue">电话回访</view>
<view class="name">杨平(网格长)</view>
<view class="tag blue">{{item.followUpWay}}</view>
<view class="name">{{item.followPersonName}}({{item.roleNames}})</view>
</view>
<view class="date">2023-08-23</view>
<view class="date">{{item.followTime}}</view>
</view>
<image src="../../../images/right.png" mode="widthFix" class="icon"/>
</view>

3
subpages/statistics/pages/residentPortrait/residentPortrait.wxss

@ -186,6 +186,7 @@ page {
.num-list .num-item {
flex: 0 0 33.333333%;
position: relative;
margin-bottom: 20rpx;
}
.num-list .num-item:after {
@ -212,7 +213,7 @@ page {
font-size: 28rpx;
font-weight: 500;
color: #999999;
margin-bottom: 30rpx;
margin-bottom: 10rpx;
}
.num-list .num-item .num {

38
subpages/statistics/pages/sjwjj/sjwjj.js

@ -1,8 +1,44 @@
import {getEventUnSolvedByUserId} from "../../../../utils/statisticsApi";
Page({
data: {
pageNo: 1,
pageSize: 10,
list: [],
total: 0,
id: 0,
name: '',
mobile: '',
agencyName: '',
},
onLoad(options) {
this.setData({
id: options.id,
name: options.name,
mobile: options.mobile,
agencyName: options.agencyName,
})
this.getList()
},
getList() {
getEventUnSolvedByUserId({
pageNo: this.data.pageNo,
pageSize: this.data.pageSize,
reportUserId: this.data.id
}).then(({data}) => {
this.setData({
list: this.data.list.concat(data.list),
total: data.total
})
});
},
onReachBottom() {
if (this.data.list.length < this.data.total) {
this.setData({
pageNo: this.data.pageNo + 1
})
this.getList()
}
}
})

16
subpages/statistics/pages/sjwjj/sjwjj.wxml

@ -1,20 +1,20 @@
<view class="user-info">
<view class="name">刘萍 133****1000</view>
<view class="address">XXX社区第一网格</view>
<view class="name">{{name}} {{mobile}}</view>
<view class="address">{{agencyName}}</view>
</view>
<view class="qz-container">
<view class="list">
<view class="item" wx:for="{{10}}">
<view class="item" wx:for="{{list}}" wx:key="{{index}}">
<view class="title">
<view class="blue">城市管理-生态环境</view>
<view class="time">2023-08-12 15:30</view>
<view class="blue">{{item.categoryName}}</view>
<view class="time">{{item.happenTime}}</view>
</view>
<view class="content">
有几颗高大的树木因为雷雨天气被折断,影响小区居民出行。
{{item.eventContent}}
</view>
<view class="status">
<text>2023-08-12 18:20</text>
<text>已指派 [XXX社区第一网格] 办理</text>
<text>{{item.latestProcessingTime}}</text>
<text>{{item.latestProcessingStatus}}</text>
</view>
</view>
</view>

40
subpages/statistics/pages/xqwmz/xqwmz.js

@ -1,10 +1,44 @@
Page({
import {getUserDemandUnSolvedByUserId} from "../../../../utils/statisticsApi";
Page({
data: {
pageNo: 1,
pageSize: 10,
list: [],
total: 0,
id: 0,
name: '',
mobile: '',
agencyName: '',
},
onLoad(options) {
this.setData({
id: options.id,
name: options.name,
mobile: options.mobile,
agencyName: options.agencyName,
})
this.getList()
},
getList() {
getUserDemandUnSolvedByUserId({
pageNo: this.data.pageNo,
pageSize: this.data.pageSize,
reportUserId: this.data.id
}).then(({data}) => {
this.setData({
list: this.data.list.concat(data.list),
total: data.total
})
});
},
onReachBottom() {
if (this.data.list.length < this.data.total) {
this.setData({
pageNo: this.data.pageNo + 1
})
this.getList()
}
}
})

17
subpages/statistics/pages/xqwmz/xqwmz.wxml

@ -1,21 +1,20 @@
<view class="user-info">
<view class="name">刘萍 133****1000</view>
<view class="address">XXX社区第一网格</view>
<view class="name">{{name}} {{mobile}}</view>
<view class="address">{{agencyName}}</view>
</view>
<view class="qz-container">
<view class="list">
<view class="item" wx:for="{{10}}">
<view class="item" wx:for="{{list}}" wx:key="{{index}}">
<view class="title">
<view class="blue">社区养老</view>
<view class="time">2023-08-12 15:30</view>
<view class="blue">{{item.categoryName}}</view>
<view class="time">{{item.reportTime}}</view>
</view>
<view class="content">
社区很多高龄老人已经行动不便,常年没办法下楼
梯,希望社区能提供上门体检业务。
{{item.content}}
</view>
<view class="status">
<text>2023-08-12 18:20</text>
<text>已指派 [XXX社区第一网格] 办理</text>
<text>{{item.latestProcessingTime}}</text>
<text>{{item.latestProcessingStatus}}</text>
</view>
</view>
</view>

94
subpages/statistics/pages/yxwxfw/yxwxfw.js

@ -1,66 +1,44 @@
// subpages/statistics/pages/yxwxfw/yxwxfw.js
Page({
import {getServiceNotEnjoyedByUserId} from "../../../../utils/statisticsApi";
/**
* 页面的初始数据
*/
Page({
data: {
pageNo: 1,
pageSize: 10,
list: [],
total: 0,
id: 0,
name: '',
mobile: '',
agencyName: '',
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.setData({
id: options.id,
name: options.name,
mobile: options.mobile,
agencyName: options.agencyName,
})
this.getList()
},
getList() {
getServiceNotEnjoyedByUserId({
pageNo: this.data.pageNo,
pageSize: this.data.pageSize,
reportUserId: this.data.id
}).then(({data}) => {
this.setData({
list: this.data.list.concat(data.list),
total: data.total
})
});
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
if (this.data.list.length < this.data.total) {
this.setData({
pageNo: this.data.pageNo + 1
})
this.getList()
}
}
})

15
subpages/statistics/pages/yxwxfw/yxwxfw.wxml

@ -1,21 +1,20 @@
<view class="user-info">
<view class="name">刘萍 133****1000</view>
<view class="address">XXX社区第一网格</view>
<view class="name">{{name}} {{mobile}}</view>
<view class="address">{{agencyName}}</view>
</view>
<view class="qz-container">
<view class="list">
<view class="item" wx:for="{{10}}">
<view class="item" wx:for="{{list}}" wx:key="{{index}}">
<view class="title">
<view class="blue">社区养老</view>
<view class="time">2023-08-12 15:30</view>
<view class="blue">{{item.serviceCategoryName}}</view>
<view class="time">{{item.serviceTimeStart}}</view>
</view>
<view class="content">
社区很多高龄老人已经行动不便,常年没办法下楼
梯,希望社区能提供上门体检业务。
{{item.remark}}
</view>
<view class="status">
<text>是否已完成服务:</text>
<text class="orange"></text>
<text class="orange">{{item.serviceStatus}}</text>
</view>
</view>
</view>

3
utils/config.js

@ -7,7 +7,8 @@ module.exports = {
function BASEURL() {
// return 'https://epdc-shibei.elinkservice.cn/epdc-api/api/' // 正式环境
return 'https://epmet-preview.elinkservice.cn/api/' // 演示环境
// return 'https://epmet-preview.elinkservice.cn/api/' // 演示环境
return 'http://localhost:8080/api/' // 演示环境
// return 'http://192.168.1.144/api/' //测试环境
}

122
utils/statisticsApi.js

@ -0,0 +1,122 @@
var request = require('./request.js')
const paramsFormat = function (params) {
let strArray = []
for(let key in params) {
if(params[key] || params[key] == 0 || params[key] == '0') {
strArray.push(key+'='+params[key])
}
}
return strArray.join('&')
}
// 不满意事项类型分析
export function satisfactionGroup(params) {
return request.get(`governance/satisfactionOverview/satisfactionGroup`, params)
}
// 按12345热线投诉结果
export function event12345Group(params) {
return request.get('governance/satisfactionOverview/event12345Group', params)
}
// 不满意事项月份走势图
export function notSatisfactionTrend(params) {
return request.get('governance/satisfactionOverview/notSatisfactionTrend', params)
}
// 社区自查走势图
export function selfInspectMonthTrend(params) {
return request.get('governance/satisfactionOverview/selfInspectMonthTrend', params)
}
// 12345政务热线事件办理情况
export function do12345MonthGroup(params) {
return request.get('governance/satisfactionOverview/do12345MonthGroup', params)
}
// 不满意风险人员统计及回访情况
export function satisfactionFollowGroup(params) {
return request.get('governance/satisfactionOverview/satisfactionFollowGroup', params)
}
// 下级不满意事项
export function childSatisfactionGroup(params) {
return request.get('governance/satisfactionOverview/childSatisfactionGroup', params)
}
// 潜在不满意人数统计
export function potentialSatisfactionGroup(params) {
return request.get('governance/satisfactionOverview/potentialSatisfactionGroup', params)
}
// 不满意人员画像
export function satisfactionCrowdPortrait(params) {
return request.get('governance/satisfactionOverview/satisfactionCrowdPortrait', params)
}
// 不满意人员画像列表
export function satisfactionCrowdList(params) {
return request.get('governance/satisfactionOverview/satisfactionCrowdList', params)
}
// 家庭关系
export function getFamilyRelationshipList(params) {
console.log(params,'params')
return request.post('actual/base/peopleRoomOverview/getFamilyRelationshipList?'+paramsFormat(params), params)
}
// 个人档案
export function getPersonalFile(params) {
return request.post('actual/base/peopleRoomOverview/getPersonalFile?'+paramsFormat(params), params)
}
// 社区服务
export function getUnsatisfiedMattersList(params) {
return request.get('governance/satisfactionDetailList/getUnsatisfiedMattersList', params)
}
// 获取类型
export function getUnsatisfiedCategory(params) {
return request.get('governance/satisfactionDetailList/getUnsatisfiedCategory', params)
}
// 获取类型
export function getUnsatisfiedMattersDetailInfo(params) {
return request.post('governance/satisfactionDetailList/getUnsatisfiedMattersDetailInfo', params)
}
// 潜在不满意人数汇总
export function getPotentialDissatisfiedCountDetail(params) {
return request.get('governance/satisfactionDetailList/getPotentialDissatisfiedCountDetail', params)
}
// 满意度评价-事件未解决数详情
export function getEventUnSolvedByUserId(params) {
return request.get('governance/satisfactionDetailList/getEventUnSolvedByUserId', params)
}
// 满意度评价-应享未享服务数详情
export function getServiceNotEnjoyedByUserId(params) {
return request.get('governance/satisfactionDetailList/getServiceNotEnjoyedByUserId', params)
}
// 满意度评价-需求未满足数详情
export function getUserDemandUnSolvedByUserId(params) {
return request.get('governance/satisfactionDetailList/getUserDemandUnSolvedByUserId', params)
}
// 获取组织
export function maporg(params) {
return request.post('gov/org/agency/maporg', params)
}
// 居民的历史及潜在不满意事项
export function potentialSatisfactionForResident(params) {
return request.get('governance/satisfactionOverview/potentialSatisfactionForResident', params)
}
// 居民被回访记录
export function queryResidentFollowRecord(params) {
return request.get('governance/satisfactionOverview/queryResidentFollowRecord', params)
}
// 不满意时间汇总--工作端
export function satisfactionMonthGroupForResident(params) {
return request.get('governance/satisfactionOverview/satisfactionMonthGroupForResident', params)
}
// 居民特征
export function getPersonalFeature(params) {
return request.post('actual/base/peopleRoomOverview/getPersonalFeature?'+paramsFormat(params), params)
}
Loading…
Cancel
Save