Browse Source

修改bug对接不满意风险人员列表

feature
战立标 2 years ago
parent
commit
5842a09fd1
  1. 41
      src/router/index.js
  2. 6
      src/views/dataBoard/cpts/sjkb-map/index.vue
  3. 21
      src/views/dataBoard/overview/components/jdjs.vue
  4. 20
      src/views/dataBoard/overview/index.vue
  5. 345
      src/views/dataBoard/overview/potentialPeople/details/sjwjj.vue
  6. 332
      src/views/dataBoard/overview/potentialPeople/details/xqwmz.vue
  7. 221
      src/views/dataBoard/overview/potentialPeople/details/yxwxfw.vue
  8. 274
      src/views/dataBoard/overview/potentialPeople/index.vue
  9. 116
      src/views/dataBoard/overview/potentialPeople/sjwjj.vue
  10. 142
      src/views/dataBoard/overview/potentialPeople/xqwmz.vue
  11. 115
      src/views/dataBoard/overview/potentialPeople/yxwxfw.vue

41
src/router/index.js

@ -654,6 +654,47 @@ export const dataBoardRoutes = {
isTab: false,
},
},
{
path: "overview/potentialPeople",
props: true,
component: () => import("@/views/dataBoard/overview/potentialPeople/index"),
name: "dataBoard-overview-potentialPeople-index",
meta: {
title: "潜在不满意人数",
isTab: false,
},
},
{
path: "overview/potentialPeople/yxwxfw",
props: true,
component: () => import("@/views/dataBoard/overview/potentialPeople/yxwxfw"),
name: "dataBoard-overview-potentialPeople-yxwxfw",
meta: {
title: "应享未享服务人数",
isTab: false,
},
},
{
path: "overview/potentialPeople/sjwjj",
props: true,
component: () => import("@/views/dataBoard/overview/potentialPeople/sjwjj"),
name: "dataBoard-overview-potentialPeople-sjwjj",
meta: {
title: "事件未解决上报人数",
isTab: false,
},
},
{
path: "overview/potentialPeople/xqwmz",
props: true,
component: () => import("@/views/dataBoard/overview/potentialPeople/xqwmz"),
name: "dataBoard-overview-potentialPeople-xqwmz",
meta: {
title: "需求未满足人数",
isTab: false,
},
},
{
path: "satisfactionEval/Problem/tddtlxsj",
props: true,

6
src/views/dataBoard/cpts/sjkb-map/index.vue

@ -921,8 +921,8 @@ export default {
},*/
setNumpoint(data) {
this.clearMarkert();
if (!scene.hasImage('rsources')) {
scene.addImage('rsources', require('@/assets/images/overview/map_num_green.png'));
if (!scene.hasImage('resources')) {
scene.addImage('resources', require('@/assets/images/overview/map_num_green.png'));
scene.addImage('services', require('@/assets/images/overview/map_num_red.png'));
scene.addImage('events', require('@/assets/images/overview/map_num_blue.png'));
scene.addImage('problems', require('@/assets/images/overview/map_num_orange.png'));
@ -1234,7 +1234,7 @@ export default {
color: #FFFFFF;
background-repeat: no-repeat;
&.rsources {
&.resources {
background-image: url("@/assets/images/overview/map_num_green.png");
}

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

@ -29,7 +29,7 @@
<div class="f-flex white f-mean">
<div class="f-hflex" @click="
$router.push(
'/dataBoard/satisfactionEval/potentialPeople?type=shuji&countType=service&satisfactionSource=satisfaction_12345'
`/dataBoard/overview/potentialPeople?orgId=${currentLevelData.orgId}&level=${currentLevelData.orgLevel}&satisfactionSource=satisfaction_12345`
)
">
<div><span class="f-pingfang">12345热线投诉人数</span></div>
@ -37,7 +37,7 @@
</div>
<div class="f-hflex" @click="
$router.push(
'/dataBoard/satisfactionEval/potentialPeople?type=shuji&countType=service&satisfactionSource=satisfaction_province'
`/dataBoard/overview/potentialPeople?orgId=${currentLevelData.orgId}&level=${currentLevelData.orgLevel}&satisfactionSource=satisfaction_province`
)
">
<div><span class="f-pingfang">满意度调查不满意人数</span></div>
@ -45,7 +45,7 @@
</div>
<div class="f-hflex" @click="
$router.push(
'/dataBoard/satisfactionEval/potentialPeople?type=shuji&countType=service&satisfactionSource=satisfaction_community'
`/dataBoard/overview/potentialPeople?orgId=${currentLevelData.orgId}&level=${currentLevelData.orgLevel}&satisfactionSource=satisfaction_community`
)
">
<div><span class="f-pingfang">社区自评不满意人数</span></div>
@ -110,14 +110,17 @@ export default {
currentLevelData(val) {
if (val.orgId) {
this.getReport(val);
// this.getChartData();
this.getData();
this.getChartData();
}
},
},
mounted() {
this.getReport(this.currentLevelData);
this.getChartData();
this.getData()
if (this.currentLevelData.orgId) {
this.getReport(this.currentLevelData);
this.getChartData();
this.getData()
}
},
components: {
titleSmall,
@ -329,8 +332,8 @@ export default {
this.loading = true;
let {startTime,endTime } = this
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId,
level: this.currentLevelData.orgLevel,
orgId: this.currentLevelData.orgId,
startTime,
endTime,
};

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

@ -467,8 +467,8 @@ export default {
});
},
showMapDialog(data) {
if (data.type === "rsources") {
this.setRsourcesPoint()
if (data.type === "resources") {
this.setResourcesPoint()
} else {
// -- njjwtqk =
// -- bmysxqk =
@ -488,7 +488,7 @@ export default {
})
}
},
setRsourcesPoint() {
setResourcesPoint() {
},
getMapCount() {
@ -523,27 +523,29 @@ export default {
item3.latitude = centerLngLat.lat
item3.longitude = centerLngLat.lng
}
if (item3.hasOwnProperty("rsources")) {
item3.type = 'rsources'
item3.num = item3.rsources;
// item3.offsets = [-50, 50];
if (item3.hasOwnProperty("resources")) {
item3.type = 'resources'
item3.num = item3.resources;
item3.offsets = [-50, 50];
item3.latitude = centerLngLat.lat + 0.0012
item3.longitude = centerLngLat.lng
}
if (item3.hasOwnProperty("problems")) {
item3.type = 'problems'
item3.num = item3.problems;
// item3.offsets = [50, -50];
item3.offsets = [50, -50];
item3.latitude = centerLngLat.lat
item3.longitude = centerLngLat.lng + .0012
}
if (item3.hasOwnProperty("events")) {
item3.type = 'events'
item3.num = item3.events;
// item3.offsets = [-50, -50];
item3.offsets = [-50, -50];
item3.latitude = centerLngLat.lat + .0012
item3.longitude = centerLngLat.lng + .0012
}
// item3.latitude = item3.lat * 1
// item3.longitude = item3.lon * 1
item3.id = item.agencyId + item3.type
item3.agencyId = item.agencyId

345
src/views/dataBoard/overview/potentialPeople/details/sjwjj.vue

@ -0,0 +1,345 @@
<template>
<el-dialog
width="1118px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
<title-box text="事件详情" />
</el-col>
<el-col
:span="13"
style="padding-left: 40px"
v-loading="loading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0"
>
<div class="leftEvent">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.gridName }}</span>
</div>
<div class="eventItem">
<span>上报渠道</span>
<span>{{ item.sourceTypeName }}</span>
</div>
<div class="eventItem">
<span>事件类型</span>
<span>{{ item.categoryName }}</span>
</div>
<div class="eventItem">
<span>上报时间</span>
<span>{{ item.createdTime }}</span>
</div>
<div class="eventItem">
<div>问题描述</div>
<div style="margin-top: 20px">{{ item.eventContent }}</div>
</div>
<div class="eventItem">
<div>图片/附件</div>
<div style="margin-top: 20px; display: flex">
<img
style="width: 100px; height: 100px; margin-right: 5px"
v-for="src in item.imageList"
:key="src"
:src="src"
alt="/"
@click="openImg(src)"
/>
</div>
</div>
<div class="eventItem">
<span>详细地址</span>
<span>{{ item.address }}</span>
</div>
<div class="eventItem">
<span>上报人</span>
<span>{{ item.name }}</span>
</div>
<div class="eventItem">
<span>联系电话</span>
<span>{{ item.mobile }}</span>
</div>
</div>
</el-col>
<el-col
:span="11"
v-loading="loading1"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0.3)"
>
<div class="rightEvent m-info">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<!-- <el-timeline class="timeline" :reverse="true">
<el-timeline-item v-for="(item, index) in activities" :key="index" :class="index == activities.length - 1 ? 'sucess' : ''">
<div class="status-box">
<div class="status1" v-if="index == activities.length - 1">回复</div>
<div class="status2" v-else>完成并回复</div>
<div class="timestamp">{{ item.timeLimit ? $moment(item.timeLimit).format("YYYY-MM-DD hh:mm:ss") : "" }}</div>
</div>
<div class="content">
<div class="field">回复人</div>
<div class="value">{{ item.departmentName }}</div>
</div>
<div class="content">
<div class="field">回复内容</div>
<div class="value">{{ item.publicReply }}</div>
</div>
</el-timeline-item>
</el-timeline> -->
<div v-if="activities.length > 0">
<!-- <el-card :class="{ 'box-card': source === 'visiual' }" style="min-height: calc(88vh - 50px); overflow: auto"> -->
<div class="m-process">
<div class="list">
<div
class="item"
:class="[index === 0 ? 'z-on' : '']"
:key="item.processId"
v-for="(item, index) in activities"
>
<div class="item-row">
<template v-if="item.agencyId">
<div class="name">指派</div>
</template>
<template v-if="!item.timeLimit">
<div class="name">完成并回复</div>
</template>
<template v-if="!item.agencyId && item.timeLimit">
<div class="name">{{ item.processName }}</div>
</template>
<div class="date">
{{
item.processTime ? getTrueTime(item.processTime) : ""
}}
</div>
</div>
<div v-if="item.type === 'event'">
<template v-if="item.agencyId">
<div class="detail">
<div class="detail-field">指派人</div>
<div class="detail-value">
{{ item.departmentName }}
</div>
</div>
<div class="detail">
<div class="detail-field">指派部门</div>
<div class="detail-value">
{{ item.agencyName }}
</div>
</div>
<div class="detail">
<div class="detail-field">转办意见</div>
<div class="detail-value">
{{ item.publicReply }}
</div>
</div>
<div class="detail">
<div class="detail-field">办结时限</div>
<div class="detail-value">
{{ item.timeLimit}}
</div>
</div>
</template>
<template v-else>
<div class="detail">
<div class="detail-field">回复人</div>
<div class="detail-value">
{{ item.departmentName }}
</div>
</div>
<div class="detail">
<div class="detail-field">回复内容</div>
<div class="detail-value">
{{ item.publicReply }}
</div>
</div>
<div class="detail" v-if="item.timeLimit">
<div class="detail-field">办结时限</div>
<div class="detail-value">
{{ getTrueTime(item.timeLimit) }}
</div>
</div>
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
import titleBox from "@/views/dataBoard/satisfactionEval/components/Title"
export default {
name: "ReportAnEvent",
components: {
titleBox,
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {},
loading: false,
loading1: false,
activities: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
this.getProcessData(this.id);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getDetailsData(id) {
this.loading = true;
this.$http
.post("/governance/icEvent/detail", { icEventId: id })
.then((res) => {
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
this.loading = false;
} else {
this.loading = false;
this.$message.error(msg);
}
});
},
getProcessData(id) {
this.$http
.post("/governance/icEvent/process", { icEventId: id })
.then((res) => {
const { code, data, msg } = res.data;
if (code === 0) {
this.activities = data;
this.loading1 = false;
} else {
this.loading1 = false;
this.$message.error(msg);
}
});
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
@import "@/assets/scss/dataBoard/dialog.scss";
@mixin fontStyle {
color: #fff !important;
font-size: 14px !important;
}
.eventWrap {
//width: 1094px;
//height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
color: #ffffff;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.name {
@include fontStyle;
}
.date {
@include fontStyle;
}
.detail {
@include fontStyle;
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

332
src/views/dataBoard/overview/potentialPeople/details/xqwmz.vue

@ -0,0 +1,332 @@
<template>
<el-dialog
width="1118px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
<title-box text="事件详情"/>
</el-col>
<el-col
:span="13"
style="padding-left: 40px"
v-loading="loading"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0"
>
<div class="leftEvent">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.agencyName }}</span>
</div>
<div class="eventItem">
<span>上报渠道</span>
<span>{{ item.reportType }}</span>
</div>
<div class="eventItem">
<span>需求类型</span>
<span>{{ item.categoryName }}</span>
</div>
<div class="eventItem">
<span>上报时间</span>
<span>{{ item.reportTime }}</span>
</div>
<div class="eventItem">
<div>需求描述</div>
<div style="margin-top: 20px">{{ item.content }}</div>
</div>
<div class="eventItem">
<span>需求人</span>
<span>{{ item.demandUserName }}</span>
</div>
<div class="eventItem">
<span>需求人电话</span>
<span>{{ item.demandUserMobile }}</span>
</div>
<div class="eventItem">
<span>需求人住址</span>
<span>{{ item.reportUserName }}</span>
</div>
<div class="eventItem">
<span>上报人</span>
<span>{{ item.reportUserName }}</span>
</div>
</div>
</el-col>
<el-col
:span="11"
v-loading="loading1"
element-loading-text="加载中"
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0, 21, 64, 0.3)"
>
<div class="rightEvent m-info">
<div class="eventDetails">
<img
:width="18"
:height="18"
src="@/assets/images/manyidu/tc-title-icon.png"
/>
</div>
<div v-if="logList.length > 0">
<!-- <el-card :class="{ 'box-card': source === 'visiual' }" style="min-height: calc(88vh - 50px); overflow: auto"> -->
<div class="m-process">
<div class="list">
<div
class="item"
:class="[index === 0 ? 'z-on' : '']"
:key="item.processId"
v-for="(item, index) in logList"
>
<div class="item-row">
<template>
<div class="name">
{{
item.actionCode === 'create' ? '创建需求' :
item.actionCode === 'update' ? '更新需求' :
item.actionCode === 'cancel' ? '撤销需求' :
item.actionCode === 'assign' ? '指派' :
item.actionCode === 'take_order' ? '接单' :
item.actionCode === 'finish' ? '完成' :
item.actionCode === 'evaluate' ? '评价' : ''
}}
</div>
</template>
<div class="date">
{{
item.oprateTime
}}
</div>
</div>
<div>
<template v-if="item.actionCode === 'create'">
<div class="detail">
<div class="detail-field">上报人</div>
<div class="detail-value">
{{ item.reportUserName }} {{ item.roleName }}
</div>
</div>
</template>
<template v-if="item.actionCode === 'assign'">
<div class="detail">
<div class="detail-field">办理人</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>
<div class="detail">
<div class="detail-field">指派给服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === 'volunteer' ? '志愿者' :
item.serviceType === 'social_org' ? '社会组织' :
item.serviceType === 'community_org' ? '社区自组织' :
item.serviceType === 'party_unit' ? '区域党建单位' :
item.serviceType === 'enterprise' ? '企业,商家' : ''
}}
</div>
</div>
</template>
<template v-if="item.actionCode === 'finish'">
<div class="detail">
<div class="detail-field">服务方</div>
<div class="detail-value">
{{ item.serverName }} {{
item.serviceType === 'volunteer' ? '志愿者' :
item.serviceType === 'social_org' ? '社会组织' :
item.serviceType === 'community_org' ? '社区自组织' :
item.serviceType === 'party_unit' ? '区域党建单位' :
item.serviceType === 'enterprise' ? '企业,商家' : ''
}}
</div>
</div>
<!-- <div class="detail">
<div class="detail-field">完成时间</div>
<div class="detail-value">
{{ item.assignUser }}
</div>
</div>-->
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
import titleBox from "@/views/dataBoard/satisfactionEval/components/Title"
export default {
name: "ReportAnEvent",
components: {
titleBox,
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {
},
logList: [],
loading: false,
loading1: false,
activities: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {
},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getDetailsData(id) {
this.loading = true;
this.$http
.get("/governance/satisfactionDetailList/getUserDemandUnSolvedDetail?id=" + id)
.then((res) => {
const {code, data, msg} = res.data;
if (code === 0) {
this.item = data;
this.logList = data.logList;
this.loading = false;
} else {
this.loading = false;
this.$message.error(msg);
}
});
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
@import "@/assets/scss/dataBoard/dialog.scss";
@mixin fontStyle {
color: #fff !important;
font-size: 14px !important;
}
.eventWrap {
width: 1094px;
//height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
color: #ffffff;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.name {
@include fontStyle;
}
.date {
@include fontStyle;
}
.detail {
@include fontStyle;
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

221
src/views/dataBoard/overview/potentialPeople/details/yxwxfw.vue

@ -0,0 +1,221 @@
<template>
<el-dialog width="1118px" :modal="true" :modal-append-to-body="false" :destroy-on-close="true" :visible="showDialog" @close="handleClose">
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
<title-box text="事件详情" />
</el-col>
<el-col :span="13" style="padding-left: 40px" v-loading="loading" element-loading-text="加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 21, 64, 0">
<div class="leftEvent">
<div class="eventDetails"><img :width="18" :height="18" src="@/assets/images/manyidu/tc-title-icon.png" />事项详情</div>
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.organizationName }}</span>
</div>
<div class="eventItem">
<span>服务类型</span>
<span>{{ item.serviceCategoryName }}</span>
</div>
<div class="eventItem">
<span>服务事项</span>
<span>{{ item.serviceName }}</span>
</div>
<div class="eventItem">
<span>服务时间</span>
<span>{{ item.serviceTimeStart }} ~ {{ item.serviceTimeEnd }}</span>
</div>
<div class="eventItem">
<div>服务内容</div>
<div style="margin-top: 20px">{{ item.remark }}</div>
</div>
<div class="eventItem">
<span>经办人</span>
<span>{{ item.principalName }}</span>
</div>
<div class="eventItem">
<span>联系电话</span>
<span> {{ $sensitive(item.principalContact, 3, 7) }}</span>
</div>
<div class="eventItem">
<span>服务方</span>
<span>{{ item.serviceOrgName }}</span>
</div>
<div class="eventItem">
<span>政策依据</span>
<span>{{ item.title }}</span>
</div>
</div>
</el-col>
<el-col :span="11" v-loading="loading1" element-loading-text="加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 21, 64, 0.3)">
<div class="rightEvent m-info">
<div class="eventDetails"><img :width="18" :height="18" src="@/assets/images/manyidu/tc-title-icon.png" />办理进展</div>
<div v-if="logList.length > 0">
<div class="m-process">
<div class="list">
<div class="item" :class="[index === 0 ? 'z-on' : '']" v-for="(item, index) in logList">
<div class="item-row">
<div class="name">{{ item.serviceStatus }}</div>
<div class="date">
{{ item.createdTime }}
</div>
</div>
<div>
<template v-if="item.serviceStatus === '创建服务'">
<div class="detail">
<div class="detail-field">创建人</div>
<div class="detail-value">{{ item.createdBy }} {{ item.agencyName }}</div>
</div>
</template>
<template v-else>
<div class="detail">
<div class="detail-field">服务方</div>
<div class="detail-value">
{{ item.serviceOrgName }}
</div>
</div>
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
import titleBox from "@/views/dataBoard/satisfactionEval/components/Title";
export default {
name: "ReportAnEvent",
components: {
titleBox,
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {},
logList: [],
loading: false,
loading1: false,
activities: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getDetailsData(id) {
this.loading = true;
this.$http.get("/governance/satisfactionDetailList/getServiceNotEnjoyedDetailById?id=" + id).then((res) => {
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
this.logList = data.logList;
this.loading = false;
} else {
this.loading = false;
this.$message.error(msg);
}
});
},
},
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
@import "@/assets/scss/dataBoard/dialog.scss";
@mixin fontStyle {
color: #fff !important;
font-size: 14px !important;
}
.eventWrap {
width: 1094px;
//height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
color: #ffffff;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.name {
@include fontStyle;
}
.date {
@include fontStyle;
}
.detail {
@include fontStyle;
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

274
src/views/dataBoard/overview/potentialPeople/index.vue

@ -0,0 +1,274 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList" />
<div class="screen">
<el-form :model="queryParams" inline>
<el-select
popper-class="selectPopClass"
v-model="queryParams.agencyId"
size="small"
placeholder="按组织"
v-if="this.$route.query.type != 'shuji'"
>
<el-option
v-for="item in orgOptions"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<el-select
popper-class="selectPopClass"
v-model="queryParams.satisfactionSource"
size="small"
placeholder="按类型"
v-else
>
<el-option
v-for="item in orgOptionsC"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<el-input
v-model.trim="queryParams.name"
clearable
size="small"
placeholder="按姓名"
></el-input>
<el-input
v-model.trim="queryParams.mobile"
clearable
size="small"
placeholder="按电话"
></el-input>
<el-button size="small" class="btn" type="primary" @click="search"
>查询</el-button
>
</el-form>
</div>
<div class="table">
<el-table
:data="list"
v-loading="loading"
element-loading-text="加载中..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0,0,0,0.5)"
>
<el-table-column label="序号" type="index" width="80" />
<el-table-column prop="name" label="上报人" />
<el-table-column prop="mobile" label="上报人电话">
<template slot-scope="scope">
{{ $sensitive(scope.row.mobile, 3, 7) }}
</template>
</el-table-column>
<!-- <el-table-column prop="agencyName" label="所属组织"></el-table-column>-->
<el-table-column prop="eventCount" sortable label="12345热线投诉">
<template slot-scope="{ row }">
<el-button
type="text"
@click="
$router.push(
'/dataBoard/overview/potentialPeople/sjwjj?reportUserId=' +
row.reportUserId
)
"
>
{{ row.eventCount }}
</el-button>
</template>
</el-table-column>
<el-table-column prop="demandCount" sortable label="上级满意度调查不满意数">
<template slot-scope="{ row }">
<el-button
type="text"
@click="
$router.push(
'/dataBoard/overview/potentialPeople/xqwmz?reportUserId=' +
row.reportUserId
)
"
>
{{ row.provinceCount }}
</el-button>
</template>
</el-table-column>
<el-table-column prop="serviceCount" sortable label="社区满意度自查不满意数">
<template slot-scope="{ row }">
<el-button
type="text"
@click="
$router.push(
'/dataBoard/overview/potentialPeople/yxwxfw?reportUserId=' +
row.reportUserId
)
"
>
{{ row.inspCount }}
</el-button>
</template>
</el-table-column>
<el-table-column prop="countAll" sortable label="总数">
<template slot-scope="{ row }"
>{{ row.countAll }}
<!-- <el-button type="text"></el-button>-->
</template>
</el-table-column>
</el-table>
</div>
<Pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@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: "dissatisfied",
components: { Breadcrumb, Pagination, Title },
data() {
return {
loading: true,
queryParams: {
month: "",
org: "",
matterSource: "",
matterType: "",
name: "",
tel: "",
pageNo: 1,
pageSize: 10,
satisfactionSource:""
},
orgOptions: [],
total: 0,
breadcrumbList: [
{
path: "/dataBoard/overview/index",
name: "书记看板",
},
{
path: "",
name: "不满意风险人员",
}
],
orgOptionsC:[
{
label:'12345政务热线',
value:'satisfaction_12345'
},
{
label:'上级满意度调查',
value:'satisfaction_province'
},
{
label:'社区满意度调查',
value:'satisfaction_community'
}
],
monthOptions: new Array(12).fill(0).map((_, index) => {
return { label: index - 0 + 1 + "月", value: index - 0 + 1 };
}),
list: [],
};
},
activated() {
this.queryParams.agencyId = this.$route.query.orgId;
this.getOrg();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getOrg() {
let params = {
orgId: '',
level: '',
};
this.$http
.post(`/gov/org/agency/maporg`, params)
.then(async ({ data: { data } }) => {
let parent = { value: data.id, label: data.name };
this.orgOptions = [
parent,
...data.children.map((item) => {
return {
value: item.id,
label: item.name,
};
}),
];
this.getList();
});
},
getList() {
this.loading = true;
console.log(this.queryParams);
let params = {
...this.queryParams,
countType: this.$route.query.countType,
};
console.log(params);
this.$http
.get(
"/governance/satisfactionDetailList/getDissatisfiedCountDetail?" +
this.$paramsFormat(params)
)
.then(({ data: { data } }) => {
this.list = data.list;
this.total = data.total;
this.loading = false;
});
},
handleView(id) {},
},
};
</script>
<style scoped lang="scss">
@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 {
background: none;
border: none;
color: #fff;
}
}
.btn {
margin-left: 46px;
height: 32px;
}
}
</style>

116
src/views/dataBoard/overview/potentialPeople/sjwjj.vue

@ -0,0 +1,116 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList" />
<div class="table">
<el-table :data="list"
v-loading="loading"
element-loading-text="加载中..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0,0,0,0.5)"
>
<el-table-column label="序号" type="index" width="80" />
<el-table-column prop="name" label="上报人" />
<el-table-column prop="mobile" label="上报人电话">
<template slot-scope="scope">
{{ $sensitive(scope.row.mobile, 3, 7) }}
</template>
</el-table-column>
<el-table-column prop="agencyName" label="所属组织"> </el-table-column>
<el-table-column prop="categoryName" label="事件类型" />
<el-table-column prop="eventContent" show-overflow-tooltip label="事件描述" />
<el-table-column prop="latestProcessingStatus" label="最新办理状态" />
<el-table-column prop="latestProcessingTime" sortable label="最近办理时间" />
<el-table-column prop="happenTime" sortable label="事件上报时间" />
<el-table-column sortable label="详情">
<template slot-scope="{ row }">
<el-button type="text" @click="handleView(row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<Pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" @pagination="getList" />
<sjwjj :showDialog="showDialog" :id="rowId" @close="close" />
</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 sjwjj from "@/views/dataBoard/satisfactionEval/potentialPeople/details/sjwjj.vue";
export default {
name: "dissatisfied",
components: { Breadcrumb, Pagination, Title, sjwjj },
data() {
return {
queryParams: {
reportUserId: this.$route.query.reportUserId,
pageNo: 1,
pageSize: 10,
},
total: 0,
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "/dataBoard/satisfactionEval/potentialPeople",
name: "潜在不满意数",
},
{
path: "",
name: "事件未解决数",
},
],
list: [],
showDialog: false,
rowId: "",
loading: true
};
},
activated() {
this.queryParams.reportUserId = this.$route.query.reportUserId;
this.queryParams.pageNo = 1;
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true
this.$http.get("/governance/satisfactionDetailList/getEventUnSolvedByUserId?" + this.$paramsFormat(this.queryParams)).then(({ data: { data } }) => {
this.list = data.list;
this.total = data.total;
this.loading = false
});
},
handleView({ id }) {
this.showDialog = true;
this.rowId = id;
},
close() {
this.showDialog = false;
},
},
};
</script>
<style scoped lang="scss">
@import "@/assets/scss/dataBoard/table.scss";
.table {
margin-top: 40px;
}
</style>

142
src/views/dataBoard/overview/potentialPeople/xqwmz.vue

@ -0,0 +1,142 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="table">
<el-table :data="list"
v-loading="loading"
element-loading-text="加载中..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0,0,0,0.5)"
>
<el-table-column
label="序号"
type="index"
width="80"/>
<el-table-column
prop="demandUserName"
label="需求人"/>
<el-table-column
prop="demandUserMobile"
label="需求人电话">
<template slot-scope="scope">
{{ $sensitive(scope.row.demandUserMobile, 3, 7) }}
</template>
</el-table-column>
<el-table-column
prop="agencyName"
label="所属组织">
</el-table-column>
<el-table-column
prop="content"
show-overflow-tooltip
label="需求描述"/>
<el-table-column
prop="latestProcessingStatus"
label="最新办理状态"/>
<el-table-column
prop="latestProcessingTime"
sortable
label="最近办理时间"/>
<el-table-column
prop="reportTime"
sortable
label="需求提交时间"/>
<el-table-column
sortable
label="详情">
<template slot-scope="{row}">
<el-button type="text" @click="handleView(row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<Pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<xqwmz :showDialog="showDialog" :id="rowId" @close="close"/>
</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 xqwmz from "@/views/dataBoard/satisfactionEval/potentialPeople/details/xqwmz.vue"
export default {
name: "dissatisfied",
components: {Breadcrumb, Pagination, Title, xqwmz},
data() {
return {
queryParams: {
reportUserId: this.$route.query.reportUserId,
pageNo: 1,
pageSize: 10,
},
total: 0,
breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index',
name: '满意度评价'
}, {
path: '/dataBoard/satisfactionEval/potentialPeople',
name: '潜在不满意数'
}, {
path: '',
name: '需求未满足数'
}],
list: [],
showDialog: false,
rowId: '',
loading: true
}
},
activated() {
this.queryParams.reportUserId = this.$route.query.reportUserId
this.queryParams.pageNo = 1
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1
this.getList();
},
getList() {
this.loading = true
this.$http.get('/governance/satisfactionDetailList/getUserDemandUnSolvedByUserId?' + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.list = data.list;
this.total = data.total;
this.loading = false
})
},
handleView({name, id}) {
this.showDialog = true
this.rowId = id
},
close() {
this.showDialog = false
}
}
}
</script>
<style scoped lang="scss">
@import "@/assets/scss/dataBoard/table.scss";
.table {
margin-top: 40px;
}
</style>

115
src/views/dataBoard/overview/potentialPeople/yxwxfw.vue

@ -0,0 +1,115 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="table">
<el-table :data="list"
v-loading="loading"
element-loading-text="加载中..."
element-loading-spinner="el-icon-loading"
element-loading-background="rgba(0,0,0,0.5)"
>
<el-table-column label="序号" type="index" width="80"/>
<el-table-column prop="name" label="服务对象姓名"/>
<el-table-column prop="mobile" label="服务对象电话">
<template slot-scope="scope">
{{ $sensitive(scope.row.mobile, 3, 7) }}
</template>
</el-table-column>
<el-table-column prop="organizationName" label="所属组织"></el-table-column>
<el-table-column prop="serviceCategoryName" label="服务类型"/>
<el-table-column prop="remark" show-overflow-tooltip label="服务描述"/>
<el-table-column prop="serviceStatus" sortable label="是否已完成服务"/>
<el-table-column prop="serviceTimeStart" sortable label="服务发起时间"/>
<el-table-column sortable label="详情">
<template slot-scope="{ row }">
<el-button type="text" @click="handleView(row)">查看</el-button>
</template>
</el-table-column>
</el-table>
</div>
<Pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
<yxwxfw :showDialog="showDialog" :id="rowId" @close="close"/>
</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 yxwxfw from "@/views/dataBoard/satisfactionEval/potentialPeople/details/yxwxfw.vue";
export default {
name: "dissatisfied",
components: {Breadcrumb, Pagination, Title, yxwxfw},
data() {
return {
queryParams: {
pageNo: 1,
pageSize: 10,
},
total: 0,
breadcrumbList: [
{
path: "/dataBoard/satisfactionEval/index",
name: "满意度评价",
},
{
path: "/dataBoard/satisfactionEval/potentialPeople",
name: "潜在不满意数",
},
{
path: "",
name: "应享未享服务数",
},
],
list: [],
showDialog: false,
rowId: "",
loading: true
};
},
activated() {
this.queryParams.reportUserId = this.$route.query.reportUserId;
this.queryParams.pageNo = 1;
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1;
this.getList();
},
getList() {
this.loading = true
this.$http.get("/governance/satisfactionDetailList/getServiceNotEnjoyedByUserId?" + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.list = data.list;
this.total = data.total;
this.loading = false
});
},
handleView({id}) {
this.showDialog = true;
this.rowId = id;
},
close() {
this.showDialog = false;
},
},
};
</script>
<style scoped lang="scss">
@import "@/assets/scss/dataBoard/table.scss";
.table {
margin-top: 40px;
}
</style>
Loading…
Cancel
Save