Browse Source

Merge branch 'jw_feature_dev' into jw_feature_zhangruochen

V1.0
张若晨 2 years ago
parent
commit
a9191fa37c
  1. 3
      src/assets/scss/dataBoard/overview/index.scss
  2. 19
      src/components/JwTree/nodeWrap.vue
  3. 18
      src/components/Tree/nodeWrap.vue
  4. 4
      src/utils/jwTool.js
  5. 1
      src/views/dataBoard/organizational/dangTree/index.vue
  6. 6
      src/views/dataBoard/organizational/microgrid/components/popDetails.vue
  7. 15
      src/views/dataBoard/organizational/microgrid/components/reportAnEvent.vue
  8. 8
      src/views/dataBoard/organizational/microgrid/index.vue
  9. 15
      src/views/dataBoard/organizational/personalPage/index.vue
  10. 4
      src/views/dataBoard/overview/components/DynamicHumanRoomData.vue
  11. 5
      src/views/dataBoard/overview/components/EventAndFollowUp.vue
  12. 166
      src/views/dataBoard/overview/components/FollowUp.vue
  13. 70
      src/views/dataBoard/overview/components/GridUpdateRanking.vue
  14. 4
      src/views/dataBoard/overview/components/jdtphx.vue
  15. 61
      src/views/dataBoard/overview/index.vue
  16. 71
      src/views/dataBoard/satisfactionEval/dissatisfied/detail.vue
  17. 197
      src/views/dataBoard/satisfactionEval/dissatisfied/index.vue
  18. 40
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/detail.vue
  19. 110
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/index.vue
  20. 150
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/BusinessRecords.vue
  21. 188
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/EnjoyService.vue
  22. 76
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/Family.vue
  23. 93
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/MatterDetails.vue
  24. 51
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/PointsRecord.vue
  25. 4
      src/views/dataBoard/satisfactionEval/modules/EventSituation/index.vue
  26. 53
      src/views/dataBoard/satisfactionEval/modules/PersonnelPortrait/index.vue
  27. 6
      src/views/dataBoard/satisfactionEval/modules/PotentialPeople/index.vue
  28. 2
      src/views/dataBoard/satisfactionEval/modules/SelfTrend/index.vue
  29. 4
      src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue
  30. 98
      src/views/dataBoard/satisfactionEval/potentialPeople/index.vue
  31. 101
      src/views/dataBoard/satisfactionEval/potentialPeople/sjwjj.vue
  32. 102
      src/views/dataBoard/satisfactionEval/potentialPeople/xqwmz.vue
  33. 104
      src/views/dataBoard/satisfactionEval/potentialPeople/yxwxfw.vue

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

@ -569,7 +569,6 @@
height: 40px;
line-height: 40px;
font-size: 14px;
font-family: PingFang SC;
font-weight: 400;
color: #A3B9DA;
}
@ -583,10 +582,10 @@
height: 40px;
line-height: 40px;
width: 110px;
overflow: hidden;
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

19
src/components/JwTree/nodeWrap.vue

@ -5,7 +5,7 @@
<div class="node-box-after">
<div class="nodeBoxTop">
<div :title="getAllName(nodeConfig.organizationName)">{{ spliceNameFun(nodeConfig.organizationName, 8) }}</div>
<div @click="gotoPersonnel" :title="getAllName(nodeConfig.name)">{{ spliceNameFun(nodeConfig.name, 12) }}</div>
<div @click="gotoPersonnel(nodeConfig.resiId)" :title="getAllName(nodeConfig.name)">{{ spliceNameFun(nodeConfig.name, 12) }}</div>
</div>
</div>
</div>
@ -20,17 +20,17 @@
<div v-if="getOnerSixLevelFlag(item)">
<div class="wgdzb">
<div :title="getAllName(item.organizationName)">{{ spliceNameFun(item.organizationName, 8) }}</div>
<div @click="gotoPersonnel" :title="getAllName(item.name)">{{ spliceNameFun(item.name, 12) }}</div>
<div class="gotoDesc" @click="gotoPersonnel(item.resiId)" :title="getAllName(item.name)">{{ spliceNameFun(item.name, 12) }}</div>
</div>
</div>
<div v-if="item.level === 'building_chief'">
<div class="lydxz">
<div :title="getAllName(item.organizationName)">{{ spliceNameFun(item.organizationName, 8) }}</div>
<div @click="gotoPersonnel" :title="getAllName(item.name)">{{ spliceNameFun(item.name, 12) }}</div>
<div class="gotoDesc" @click="gotoPersonnel(item.resiId)" :title="getAllName(item.name)">{{ spliceNameFun(item.name, 12) }}</div>
</div>
</div>
<div v-if="item.level === 'unit_chief' || item.level === 'public_welfare_post'">
<div @click="gotoPersonnel" class="dyzxh" :title="item.name">
<div @click="gotoPersonnel(item.resiId)" class="dyzxh gotoDesc" :title="item.name">
{{ spliceNameFun(item.name, 3) }}
</div>
</div>
@ -79,8 +79,15 @@ export default {
return this.sixLevelArr.includes(item.level);
},
gotoPersonnel() {
this.$router.push("/organizational/orgPersonnel");
gotoPersonnel(id) {
if (id) {
this.$router.push("/organizational/orgPersonnel");
} else {
this.$message({
message: "无法跳转",
type: "error",
});
}
},
},
};

18
src/components/Tree/nodeWrap.vue

@ -6,7 +6,7 @@
<!-- {{ spliceNameFun(nodeConfig, 18) }} -->
<div class="nodeBoxTop">
<div :title="getAllName(nodeConfig.partyOrgName)">{{ spliceNameFun(nodeConfig.partyOrgName, 8) }}</div>
<div @click="gotoPersonnel" :title="getAllName(nodeConfig.principalName)">{{ spliceNameFun(nodeConfig.principalName, 12) }}</div>
<div @click="gotoPersonnel(nodeConfig.resiId)" :title="getAllName(nodeConfig.principalName)">{{ spliceNameFun(nodeConfig.principalName, 12) }}</div>
</div>
</div>
</div>
@ -21,19 +21,19 @@
<div v-if="item.laneLevel >= 2 && item.laneLevel <= 7 && item.partyOrgLevel < 8">
<div class="wgdzb">
<div :title="getAllName(item.partyOrgName)">{{ spliceNameFun(item.partyOrgName, 8) }}</div>
<div class="gotoDesc" @click="gotoPersonnel" :title="getAllName(item.principalName)">{{ spliceNameFun(item.principalName, 12) }}</div>
<div class="gotoDesc" @click="gotoPersonnel(item.resiId)" :title="getAllName(item.principalName)">{{ spliceNameFun(item.principalName, 12) }}</div>
</div>
</div>
<div v-if="item.partyOrgLevel === 8">
<div class="lydxz">
<div :title="getAllName(item.partyOrgName)">{{ spliceNameFun(item.partyOrgName, 8) }}</div>
<div class="gotoDesc" @click="gotoPersonnel" :title="getAllName(item.principalName)">{{ spliceNameFun(item.principalName, 12) }}</div>
<div class="gotoDesc" @click="gotoPersonnel(item.resiId)" :title="getAllName(item.principalName)">{{ spliceNameFun(item.principalName, 12) }}</div>
</div>
</div>
<div v-if="item.partyOrgLevel === 9">
<div class="dyzxh">
<!-- <div :title="getAllName(item.partyOrgName)">{{ spliceNameFun(item.partyOrgName, 3) }}</div> -->
<div class="gotoDesc" @click="gotoPersonnel" :title="getAllName(item.principalName)">{{ spliceNameFun(item.principalName, 3) }}</div>
<div class="gotoDesc" @click="gotoPersonnel(item.resiId)" :title="getAllName(item.principalName)">{{ spliceNameFun(item.principalName, 3) }}</div>
</div>
</div>
<div class="lxjtWrap" v-if="item.partyOrgLevel === 10">
@ -53,7 +53,7 @@
<span>空巢老人</span>
</div> -->
</div>
<div @click="gotoPersonnel" @mouseover="getHomeTypes(item.id)" slot="reference" class="lxjt gotoDesc" :title="item.principalName">
<div @click="gotoPersonnel(item.resiId)" @mouseover="getHomeTypes(item.id)" slot="reference" class="lxjt gotoDesc" :title="item.principalName">
{{ spliceNameFun(item.principalName, 3) }}
<img src="@/assets/images/home/cjr.png" alt="" />
</div>
@ -145,8 +145,12 @@ export default {
});
},
gotoPersonnel() {
this.$router.push("/organizational/orgPersonnel");
gotoPersonnel(id) {
if (id) {
this.$router.push({ path: "/organizational/orgPersonnel", query: { user_id: id } });
} else {
this.$message.error("无法跳转!");
}
},
},
};

4
src/utils/jwTool.js

@ -3,7 +3,9 @@ import Vue from "vue";
const paramsFormat = function (params) {
let strArray = []
for(let key in params) {
strArray.push(key+'='+params[key])
if(params[key]) {
strArray.push(key+'='+params[key])
}
}
return strArray.join('&')
}

1
src/views/dataBoard/organizational/dangTree/index.vue

@ -46,7 +46,6 @@ export default {
if (orgId) {
this.getTreeData();
}
this.getTextMap();
},
methods: {
getLevelArrNum(myArray) {

6
src/views/dataBoard/organizational/microgrid/components/popDetails.vue

@ -707,12 +707,13 @@ export default {
}
},
async getInfo() {
async getInfo(val) {
const url = "resident_info";
this.loading = true;
const { data, code, msg } = await requestPostBi(url, {
queryParam: {
resident_id: 1001001,
resident_id: val,
// 1001001
},
});
if (code === 0) {
@ -809,7 +810,6 @@ export default {
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}

15
src/views/dataBoard/organizational/microgrid/components/reportAnEvent.vue

@ -1,9 +1,9 @@
<template>
<Dialog title="事件详情" @close="handleClose">
<template>
<div class="eventWrap" v-loading="loading" element-loading-text="加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 21, 64, 0.3)">
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="13" style="padding-left: 40px">
<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.3)">
<div class="leftEvent">
<div class="eventDetails">事件详情</div>
<div class="eventItem">
@ -54,7 +54,7 @@
</div>
</div>
</el-col>
<el-col :span="11">
<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">办理进展</div>
<!-- <el-timeline class="timeline" :reverse="true">
@ -157,6 +157,7 @@ export default {
return {
item: {},
loading: false,
loading1: false,
activities: [],
};
},
@ -195,6 +196,7 @@ export default {
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
this.loading = false;
} else {
this.loading = false;
this.$message.error(msg);
@ -207,16 +209,13 @@ export default {
const { code, data, msg } = res.data;
if (code === 0) {
this.activities = data;
this.loading = false;
this.loading1 = false;
} else {
this.loading = false;
this.loading1 = false;
this.$message.error(msg);
}
});
},
// /governance/icEvent/detail
// /governance/icEvent/process
},
};
</script>

8
src/views/dataBoard/organizational/microgrid/index.vue

@ -146,10 +146,10 @@ export default {
getList() {
this.loading = true;
const getUrl = new Map([
["sbsj", `/gov/org/organizational/neighborhood/getBuildingUnitLevelEvent?unitId=1634090229723381761`],
["jmxq", `/gov/org/organizational/neighborhood/getBuildingUnitLevelUserDemand?unitId=1565599676446027778`],
["tzrq", `/gov/org/organizational/neighborhood/getBuildingUnitLevelCtp?unitId=1483661223332417537`],
["aqyh", `/gov/org/organizational/neighborhood/getEnterprisePatrolRecord?unitId=f896b59f3cddf1f54280546d79803652`],
["sbsj", `/gov/org/organizational/neighborhood/getBuildingUnitLevelEvent?unitId=${this.paramsData.id}`],
["jmxq", `/gov/org/organizational/neighborhood/getBuildingUnitLevelUserDemand?unitId=${this.paramsData.id}`],
["tzrq", `/gov/org/organizational/neighborhood/getBuildingUnitLevelCtp?unitId=${this.paramsData.id}`],
["aqyh", `/gov/org/organizational/neighborhood/getEnterprisePatrolRecord?unitId=${this.paramsData.id}`],
]);
const url = getUrl.get(this.otherTabel);
// unitId=${this.paramsData.id}

15
src/views/dataBoard/organizational/personalPage/index.vue

@ -1,7 +1,7 @@
<template>
<div class="personalWrap">
<div class="bread">
<bread-crumb />
<bread-crumb :list="list" />
</div>
<div class="wrap-content">
<personnel-person />
@ -19,7 +19,18 @@ export default {
PersonnelPerson,
},
data() {
return {};
return {
list: [
{
path: "/organizational/dangTree",
name: "党组织架构",
},
{
path: "",
name: "人员信息",
},
],
};
},
};
</script>

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

@ -57,10 +57,10 @@ export default {
<style scoped lang="scss">
@import "@/assets/scss/dataBoard/c/common.scss";
.dhrd {
padding: 20px 16px;
padding: 0 16px 20px;
}
.dhrd-list {
height: 200px;
height: 140px;
overflow-y: auto;
@include scrollBar
.dhrd-item {

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

@ -1,8 +1,8 @@
<template>
<div class="event">
<div class="tabs">
<!-- <div class="tabs">
<Tabs v-model="type" :list="typeList" @changeVal="typeChange"/>
</div>
</div>-->
<div class="content">
<div class="total">
<div class="tit">事件总数</div>
@ -55,6 +55,7 @@ export default {
lastSumNum: 0,
processNum: 0,
closedNum: 0,
closedRatio: 0,
}
},
watch: {

166
src/views/dataBoard/overview/components/FollowUp.vue

@ -0,0 +1,166 @@
<template>
<div class="follow-up">
<div class="content">
<div class="left">
<div class="total">
<div class="tit">回访总数</div>
<div class="num"><span>{{ sumNum ? sumNum : 0 }}</span></div>
</div>
<div class="left-item">
<div class="tit">电话回访</div>
<div class="num"><span>{{ mobileNum ? mobileNum : 0 }}</span></div>
</div>
<div class="left-item">
<div class="tit">上门回访</div>
<div class="num"><span>{{ visitNum ? visitNum : 0 }}</span></div>
</div>
</div>
<div class="xc">
<div class="tit">回访消除 <br/> 风险人数</div>
<div class="num blue">{{ notRiskyNum ? notRiskyNum : 0 }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "FollowUp",
props: {
date: {
type: String,
default: ''
}
},
data() {
return {
org: this.$store.state.chooseArea.chooseName,
typeList: [{
label: '12345事件',
value: '12345'
}, {
label: '事件回访',
value: 'follow'
}],
type: 'follow',
sumNum: 0,
mobileNum: 0,
visitNum: 0,
notRiskyNum: 0,
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData()
}
},
date() {
this.getData()
}
},
mounted() {
if (this.org.orgId) {
this.getData()
}
},
methods: {
getData() {
this.$http.get('/actual/base/streetOverview/eventAndFollowGroup?month=' + this.date + '&level=' + this.$store.state.chooseArea.chooseName.level + '&orgId=' + this.$store.state.chooseArea.chooseName.orgId + '&queryType=' + this.type).then(({data: {data}}) => {
this.sumNum = data.sumNum
this.mobileNum = data.mobileNum
this.visitNum = data.visitNum
this.notRiskyNum = data.notRiskyNum
})
},
typeChange(val) {
console.log(val,'val')
this.type = val
this.getData()
}
}
}
</script>
<style scoped lang="scss">
.follow-up {
padding: 10px 16px;
}
.content {
background: linear-gradient(90deg, rgba(1, 94, 234, 0.1) 0%, rgba(16, 50, 103, 0) 50%, rgba(1, 94, 234, 0.1) 100%);
padding: 40px 19px;
display: flex;
justify-content: space-between;
align-items: center;
}
.left {
border-right: 1px solid #96B1CE;
padding-right: 35px;
display: flex;
align-items: center;
justify-content: space-between;
.total {
.tit {
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
margin-bottom: 20px;
}
.num {
font-size: 14px;
font-weight: 500;
color: #A3B9DA;
span {
font-size: 36px;
font-weight: bold;
font-style: italic;
color: #08EBAE;
}
}
}
.left-item {
margin-left: 24px;
.tit {
font-size: 14px;
font-weight: 400;
color: #A3B9DA;
line-height: 24px;
margin-bottom: 24px;
}
.num {
font-size: 14px;
font-weight: 500;
color: #A3B9DA;
span {
font-size: 30px;
font-weight: bold;
font-style: italic;
color: #78C4F3;
}
}
}
}
.xc {
.tit {
font-size: 16px;
font-weight: 400;
color: #FFFFFF;
line-height: 24px;
margin-bottom: 10px;
}
.num {
font-size: 32px;
font-weight: bold;
font-style: italic;
color: #FFB73C;
}
}
</style>

70
src/views/dataBoard/overview/components/GridUpdateRanking.vue

@ -0,0 +1,70 @@
<template>
<div class="m-subbox m-sqrfph">
<div class="table">
<div class="tr">
<div class="th">排名</div>
<div class="th">社区</div>
<div class="th">房屋更新数</div>
<div class="th">人口更新数</div>
<div class="th">人房更新总数</div>
</div>
<div class="tr" v-for="(item,index) in pmList" :key="index">
<div :class="index - 0 + 1 < 4 ? `td tdbg${index-0+1}` : 'td'">
{{ index - 0 + 1 }}
</div>
<div class="td">{{ item.orgName }}</div>
<div class="td">{{ item.houseNum }}</div>
<div class="td">{{ item.residentNum }}</div>
<div class="td">{{ item.sumNum }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "GridUpdateRanking",
props: {
date: {
type: String,
default: ''
}
},
data() {
return {
org: this.$store.state.chooseArea.chooseName,
pmList: [],
};
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getList()
}
},
date() {
this.getList()
}
},
mounted() {
if (this.org.orgId) {
this.getList()
}
},
methods: {
getList() {
this.$http.get('/actual/base/streetOverview/residentHouseUpdateGroup?level=' + this.$store.state.chooseArea.chooseName.level + '&orgId=' + this.$store.state.chooseArea.chooseName.orgId).then(({data: {data}}) => {
this.pmList = data
})
}
}
};
</script>
<style lang="scss" src="@/assets/scss/dataBoard/overview/index.scss" scoped/>
<style lang="scss" scoped>
.m-sqrfph {
padding-top: 0 !important;
height: 160px !important;
}
</style>

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

@ -29,7 +29,7 @@
<div class="m-jdhx-card-content">
<div class="m-jdhx-card-content-item" v-for="(item,index) in houseList" :key="index">
<div class="m-jdhx-card-content-item-lable">{{item.name}}</div>
<div class="m-jdhx-card-content-item-value">{{item.num}}</div>
<div class="m-jdhx-card-content-item-value">{{item.ratio}}</div>
</div>
</div>
</div>
@ -105,7 +105,7 @@
<div class="m-jdhx-card-content">
<div class="m-jdhx-card-content-item" v-for="(item,index) in riskList" :key="index">
<div class="m-jdhx-card-content-item-lable">{{item.riskName}}</div>
<div class="m-jdhx-card-content-item-value">{{item.riskNum}}</div>
<div class="m-jdhx-card-content-item-value">{{item.riskNum}}</div>
</div>
</div>
</div>

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

@ -107,12 +107,16 @@
</div>
<!-- 社区&网格-->
<div
v-if="currentLevel === 'community' || currentLevel === 'grid'"
class="m-box"
>
<title-box text="人房数据动态更新" />
<DynamicHumanRoomData />
<div v-if="currentLevel === 'community' || currentLevel === 'grid'" class="m-box">
<title-box text="人房数据动态更新"/>
<Tabs
v-model="dynamicType"
:list="dynamicTypeList"
v-if="currentLevel === 'community'"
@changeVal="dynamicTypeChange"
/>
<DynamicHumanRoomData v-if="dynamicType === 1"/>
<GridUpdateRanking v-if="dynamicType === 2"/>
</div>
<!-- 社区概览-->
<div v-if="currentLevel === 'community'" class="m-box">
@ -144,7 +148,9 @@
/>
</span>
</title-box>
<EventAndFollowUp :date="sjhfDate" />
<Tabs v-model="eventType" :list="eventTypeList" @changeVal="eventTypeChange"/>
<EventAndFollowUp :date="sjhfDate" v-if="eventType === 1"/>
<FollowUp :date="sjhfDate" v-if="eventType === 2"/>
</div>
<!-- 网格 -->
<div v-if="currentLevel === 'grid'" class="m-box">
@ -184,9 +190,12 @@ import sqrfph from "@/views/dataBoard/overview/components/sqrfph.vue";
import sq12345 from "@/views/dataBoard/overview/components/sq12345.vue";
import DynamicHumanRoomData from "@/views/dataBoard/overview/components/DynamicHumanRoomData.vue";
import GridUpdateRanking from "@/views/dataBoard/overview/components/GridUpdateRanking.vue";
import CommunityResult from "@/views/dataBoard/overview/components/CommunityResult.vue";
import EventAndFollowUp from "@/views/dataBoard/overview/components/EventAndFollowUp.vue";
import RankingGridData from "@/views/dataBoard/overview/components/RankingGridData.vue";
import FollowUp from "@/views/dataBoard/overview/components/FollowUp.vue";
import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue";
import { requestPostBi } from "@/js/dai/request-bipass";
import { requestPost } from "@/js/dai/request";
@ -210,6 +219,9 @@ export default {
CommunityResult,
EventAndFollowUp,
RankingGridData,
GridUpdateRanking,
FollowUp,
Tabs
},
data() {
@ -238,6 +250,22 @@ export default {
displayedResiId: "",
displayedHouseId: "",
dynamicType: 1,
dynamicTypeList: [{
value: 1,
label: '更新动态'
}, {
value: 2,
label: '网格更新排行'
}],
eventType: 1,
eventTypeList: [{
value: 1,
label: '12345事件'
}, {
value: 2,
label: '事件回访'
}]
};
},
@ -259,6 +287,12 @@ export default {
},
methods: {
dynamicTypeChange(val) {
this.dynamicType = val
},
eventTypeChange(val) {
this.eventType = val
},
async init(queryOrgId, queryOrgLevel) {
if (queryOrgId) {
this.orgId = queryOrgId;
@ -311,7 +345,7 @@ export default {
breadList.push({ ...item, id: item.orgId, level: item.orgLevel });
this.breadList = breadList;
}
this.getMapData(item.orgId, item.orgLevel);
this.getMapData(item.orgId, item.orgLevel)
},
//
@ -326,10 +360,7 @@ export default {
},
//
async getMapData(
orgId = this.$store.state.chooseArea.chooseName.orgId,
level = this.$store.state.chooseArea.chooseName.level
) {
async getMapData(orgId = this.$store.state.chooseArea.chooseName.orgId, level = this.$store.state.chooseArea.chooseName.level) {
const url = "org_map";
this.$http
.post(`/gov/org/agency/maporg`, { orgId, level })
@ -419,3 +450,9 @@ export default {
src="@/assets/scss/dataBoard/overview/index.scss"
scoped
></style>
<style lang="scss" scoped>
.tabs {
padding: 16px;
}
</style>

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

@ -15,15 +15,15 @@
<div class="sub-title">事项详情</div>
<div class="detail">
<p>
小区垃圾急需要处理垃圾桶旁边垃圾堆积严重现在已经影响居民的日常生活和出行望有关部门能够重视
{{unsatisfiedMattersModel.reason}}
</p>
<ul>
<li><span>事项来源</span>省满意度调查</li>
<li><span>事项类型</span>生态环境</li>
<li><span>所属月份</span>2023-09</li>
<li><span>所属社区</span>XXX社区</li>
<li><span>提交人</span>**</li>
<li><span>提交人电话</span>133</li>
<li><span>事项来源</span>{{unsatisfiedMattersModel.satisfactionSource}}</li>
<li><span>事项类型</span>{{unsatisfiedMattersModel.satisfactionCategoryName}}</li>
<li><span>所属月份</span>{{unsatisfiedMattersModel.satisfactionCategoryName}}</li>
<li><span>所属社区</span>{{unsatisfiedMattersModel.organizationName}}</li>
<li><span>提交人</span>{{unsatisfiedMattersModel.name}}</li>
<li><span>提交人电话</span>{{unsatisfiedMattersModel.mobile}}</li>
</ul>
</div>
</el-col>
@ -33,31 +33,31 @@
<div class="number-item">
<div class="text">12345投诉</div>
<div class="num">
<span class="orange">39</span>
<span class="orange">{{unsatisfiedHisCount.satisfaction_12345}}</span>
</div>
</div>
<div class="number-item">
<div class="text">省满意度调查</div>
<div class="num">
<span class="green">102</span>
<span class="green">{{unsatisfiedHisCount.satisfaction_province}}</span>
</div>
</div>
<div class="number-item">
<div class="text">社区满意度自评</div>
<div class="num">
<span class="light">273</span>
<span class="light">{{unsatisfiedHisCount.satisfaction_community}}</span>
</div>
</div>
</div>
<div class="sub-title">回访记录</div>
<div class="log">
<div class="log-item" v-for="(item,index) in 3">
<div class="name">杨建国网格长</div>
<div>2023-08-17</div>
<div>上门回访 <i class="el-icon-arrow-right"></i></div>
<div class="log-item" v-for="(item,index) in followUpRecordDetails">
<div class="name">{{item.followUpUser}}{{item.roleName}}</div>
<div>{{item.followUpDate}}</div>
<div>{{item.followUpWay}} <i class="el-icon-arrow-right"></i></div>
</div>
</div>
@ -75,15 +75,42 @@ export default {
components: {Title},
data() {
return {
dialogVisible: false
dialogVisible: false,
unsatisfiedMattersModel: '',
unsatisfiedHisCount: '',
followUpRecordDetails: '',
satisfactionSourceOptions: [{
value: 'satisfaction_12345',
label: '12345投诉',
color: '#FFB73C',
}, {
value: 'satisfaction_province',
label: '省满意度调查',
color: '#64C1FF'
}, {
value: 'satisfaction_community',
label: '社区满意度自查',
color: '#08EBAE'
}]
};
},
methods: {
handleClose(done) {
this.dialogVisible = false
},
open() {
open(id) {
this.dialogVisible = true
this.getDetail(id)
},
getDetail(id) {
this.$http.post('/governance/satisfactionDetailList/getUnsatisfiedMattersDetailInfo', id).then(({data: {data}}) => {
this.unsatisfiedMattersModel = data.unsatisfiedMattersModel
this.unsatisfiedHisCount = data.unsatisfiedHisCount
this.followUpRecordDetails = data.followUpRecordDetails
if(this.unsatisfiedMattersModel.satisfactionSource) {
this.unsatisfiedMattersModel.satisfactionSource = satisfactionSourceOptions.filter(item => item.value === this.unsatisfiedMattersModel.satisfactionSource)[0].label
}
})
}
}
}
@ -137,14 +164,17 @@ export default {
line-height: 32px;
margin: 0 0 10px;
}
ul {
margin: 0;
padding: 0;
list-style-type: none;
}
li {
color: #FFFFFF;
line-height: 28px;
span {
color: #9CB4D3
}
@ -156,16 +186,19 @@ export default {
display: flex;
justify-content: space-between;
margin-bottom: 30px;
.text {
font-size: 14px;
font-weight: 400;
color: #A3B9DA;
margin-bottom: 17px;
}
.num {
font-size: 14px;
font-weight: 400;
color: #A3B9DA;
span {
font-size: 32px;
font-weight: bold;
@ -173,17 +206,22 @@ export default {
}
}
}
.orange {
color: #FFB73C;
}
.green {
color: #08EBAE;
}
.light {
color: #7FCEFF;
}
.log {
padding-left: 26px;
.log-item {
display: flex;
justify-content: space-between;
@ -191,6 +229,7 @@ export default {
color: #fff;
background: url("@/assets/images/manyidu/hf_line.png") bottom center no-repeat;
padding: 9px 0;
.name {
flex: 0 0 33.33333%;
}

197
src/views/dataBoard/satisfactionEval/dissatisfied/index.vue

@ -3,45 +3,57 @@
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-date-picker
size="small"
popper-class="selectPopClass"
v-model="queryParams.month"
type="month"
value-format="yyyy-MM"
placeholder="按月度">
</el-date-picker>
<el-select popper-class="selectPopClass" v-model="queryParams.month" size="small" placeholder="按月度">
<el-select popper-class="selectPopClass" v-model="queryParams.agencyId" size="small" placeholder="按组织">
<el-option
v-for="item in monthOptions"
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.org" size="small" placeholder="按组织">
<el-select
popper-class="selectPopClass"
clearable
v-model="queryParams.satisfactionSource"
size="small"
placeholder="按不满意事项来源"
@change="getSatisfactionCategoryOptions"
>
<el-option
v-for="item in monthOptions"
v-for="item in satisfactionSourceOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select popper-class="selectPopClass" v-model="queryParams.matterSource" size="small" placeholder="按不满意事项来源">
<el-select
popper-class="selectPopClass"
clearable
v-model="queryParams.satisfactionCategory"
size="small"
placeholder="按不满意事项类型"
>
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select popper-class="selectPopClass" v-model="queryParams.matterType" size="small" placeholder="按不满意事项类型">
<el-option
v-for="item in monthOptions"
v-for="item in satisfactionCategoryOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input v-model="queryParams.name" size="small" placeholder="按人员姓名"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按人员电话"></el-input>
<el-button size="small" class="btn" type="primary">查询</el-button>
<el-input v-model="queryParams.mobile" size="small" placeholder="按人员电话"></el-input>
<el-button size="small" class="btn" type="primary" @click="search">查询</el-button>
</el-form>
</div>
@ -53,71 +65,90 @@
width="80"/>
<el-table-column
prop="name"
prop="month"
label="月度"
width="114"/>
<el-table-column
prop="address"
prop="organizationName"
width="118"
label="所属社区"/>
<el-table-column
prop="address"
prop="satisfactionSource"
width="168"
label="事项来源">
<template slot-scope="data"></template>
<template slot-scope="{row}">
<span :style="{color: satisfactionSourceFormat(row.satisfactionSource).color}">
{{ satisfactionSourceFormat(row.satisfactionSource).label }}
</span>
</template>
</el-table-column>
<el-table-column
prop="address"
width="118"
prop="satisfactionCategoryName"
width="150"
label="事项类型"/>
<el-table-column
prop="address"
prop="reason"
show-overflow-tooltip
label="事项描述"/>
<el-table-column
prop="address"
prop="createTime"
width="197"
label="提交时间"/>
<el-table-column
prop="address"
prop="name"
width="119"
label="姓名"/>
<el-table-column
prop="address"
prop="mobile"
width="153"
label="电话"/>
<el-table-column
prop="address"
prop="completeFlag"
width="118px"
label="是否完成">
<template slot-scope="data"></template>
<template slot-scope="{row}">
<span :class="row.completeFlag==='是'?'light':'red'">
{{ row.completeFlag }}
</span>
</template>
</el-table-column>
<el-table-column
prop="address"
prop="followUpStatus"
width="118px"
label="是否回访">
<template slot-scope="data"></template>
<template slot-scope="{row}">
<span :class="row.followUpStatus==='是'?'light':'red'">
{{ row.followUpStatus }}
</span>
</template>
</el-table-column>
<el-table-column
prop="address"
prop="dangerFlag"
width="118px"
label="消除风险">
<template slot-scope="data"></template>
<template slot-scope="{row}">
<span :class="row.dangerFlag==='是'?'light':'red'">
{{ row.dangerFlag }}
</span>
</template>
</el-table-column>
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button>
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
@ -127,11 +158,11 @@
<Pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<DissatisfiedDetail ref="detail"/>
<DissatisfiedDetail ref="detail" :id="id"/>
</div>
</template>
@ -146,15 +177,16 @@ export default {
data() {
return {
queryParams: {
month: '',
org: '',
matterSource: '',
matterType: '',
name: '',
tel: '',
pageNum: 1,
month: this.$moment().format('YYYY-MM'),
agencyId: "",
satisfactionSource: "",
satisfactionCategory: "",
name: "",
mobile: "",
pageNo: 1,
pageSize: 10,
},
id: {},
total: 0,
breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index',
@ -163,18 +195,80 @@ export default {
path: '',
name: '不满意事项列表'
}],
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}),
list: [{}, {}, {}]
orgOptions: [],
satisfactionCategoryOptions: [],
list: [],
satisfactionSourceOptions: [{
value: 'satisfaction_12345',
label: '12345投诉',
color: '#FFB73C',
}, {
value: 'satisfaction_province',
label: '省满意度调查',
color: '#64C1FF'
}, {
value: 'satisfaction_community',
label: '社区满意度自查',
color: '#08EBAE'
}]
}
},
mounted() {
this.getOrg()
},
methods: {
getSatisfactionCategoryOptions() {
this.queryParams.satisfactionCategory = ''
if(!this.queryParams.satisfactionSource) {
this.satisfactionCategoryOptions = []
return
}
this.$http.get('/governance/satisfactionDetailList/getUnsatisfiedCategory?satisfactionSource=' + this.queryParams.satisfactionSource).then(({data: {data}}) => {
this.satisfactionCategoryOptions = data.map(item => {
return {
label: item.categoryName,
value: item.categoryCode
}
})
})
},
satisfactionSourceFormat(val) {
let satisfactionSource = this.satisfactionSourceOptions.filter(item => item.value === val)[0]
return satisfactionSource ? satisfactionSource : ''
},
search() {
this.queryParams.pageNo = 1
this.getList();
},
getList() {
this.$http.get('/governance/satisfactionDetailList/getUnsatisfiedMattersList?' + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.total = data.total
this.list = data.list
})
},
getOrg() {
let params = {
orgId: this.$store.state.chooseArea.chooseName.orgId,
level: this.$store.state.chooseArea.chooseName.level
}
this.$http.post(`/gov/org/agency/maporg`, params).then(async ({data: {data}}) => {
this.queryParams.agencyId = this.$store.state.chooseArea.chooseName.orgId
let parent = {value: data.id, label: data.name}
this.orgOptions = [parent, ...data.children.map(item => {
return {
value: item.id,
label: item.name
}
})]
this.getList()
})
},
handleView() {
this.$refs.detail.open()
handleView(id) {
console.log(id)
this.id = id
this.$refs.detail.open(id)
}
}
}
@ -204,18 +298,23 @@ export default {
height: 32px;
}
}
.orange {
color: #FFB73C;
}
.blue {
color: #64C1FF;
}
.green {
color: #08EBAE;
}
.light {
color: #3CF5FF;
}
.red {
color: #F95619;
}

40
src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/detail.vue

@ -3,50 +3,18 @@
<div class="breadcrumb">
<Breadcrumb :list="breadcrumbList"/>
</div>
<el-row>
<el-col :span="10">
<div class="sub-title">事项详情</div>
<MatterDetails/>
<div class="sub-title">家庭关系</div>
<Family/>
</el-col>
<el-col :span="13" :offset="1">
<div class="sub-title">居民各项业务记录</div>
<BusinessRecords/>
<el-row>
<el-col :span="12">
<div class="sub-title">享受服务次数统计</div>
<EnjoyService/>
</el-col>
<el-col :span="11" :offset="1">
<div class="sub-title">积分记录</div>
<PointsRecord/>
</el-col>
</el-row>
</el-col>
</el-row>
<Personnel/>
</div>
</template>
<script>
import Breadcrumb from '@/views/dataBoard/satisfactionEval/components/Breadcrumb'
import MatterDetails from "./modules/MatterDetails"
import Family from "./modules/Family"
import BusinessRecords from "./modules/BusinessRecords"
import EnjoyService from "./modules/EnjoyService"
import PointsRecord from "./modules/PointsRecord"
import Personnel from '@/views/dataBoard/cpts/personnel'
export default {
name: "dissatisfiedPersonnelDetail",
components: {
Breadcrumb,
MatterDetails,
Family,
BusinessRecords,
EnjoyService,
PointsRecord
Personnel
},
data() {
return {
@ -63,8 +31,6 @@ export default {
}
},
mounted() {
console.log(this.breadcrumbList, this.$route)
this.$set(this.breadcrumbList[2], 'name', this.$route.query.name)
this.breadcrumbList[2].name = this.$route.query.name
}

110
src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/index.vue

@ -1,9 +1,9 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="main-title">
<Title text="“基础教育”画像匹配同类不满意人员" noBg/>
</div>
<!-- <div class="main-title">
<Title :text="`“${title}”画像匹配同类不满意人员`" noBg/>
</div>-->
<div class="table">
<el-table :data="list">
<el-table-column
@ -12,71 +12,52 @@
width="80"/>
<el-table-column
prop="name"
label="月度"
width="114"/>
<el-table-column
prop="address"
prop="gridName"
width="118"
label="所属社区"/>
label="所属组织"/>
<el-table-column
prop="address"
width="168"
label="事项来源">
prop="restName"
label="姓名">
<template slot-scope="data"></template>
</el-table-column>
<el-table-column
prop="address"
width="118"
label="事项类型"/>
prop="mobile"
label="电话"/>
<el-table-column
prop="address"
show-overflow-tooltip
label="事项描述"/>
<el-table-column
prop="address"
width="197"
label="提交时间"/>
prop="categoryNames"
label="人员性质"/>
<el-table-column
prop="address"
width="119"
label="姓名"/>
prop="gender"
label="性别">
<template slot-scope="{row}">
{{row.gender === '1'?'男':row.gender === '2'?'女':row.gender === '0'?'未知':''}}
</template>
</el-table-column>
<el-table-column
prop="address"
width="153"
label="电话"/>
prop="age"
label="年龄"/>
<el-table-column
prop="address"
width="118px"
label="是否完成">
<template slot-scope="data"></template>
</el-table-column>
prop="cultureLevel"
label="学历"/>
<el-table-column
prop="address"
width="118px"
label="是否回访">
<template slot-scope="data"></template>
</el-table-column>
prop="marriageName"
label="婚姻"/>
<el-table-column
prop="address"
width="118px"
label="消除风险">
<template slot-scope="data"></template>
</el-table-column>
prop="monthIncomeLevel"
label="月收入"/>
<el-table-column label="操作" width="90" align="center">
<el-table-column label="详情" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button>
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
@ -86,7 +67,7 @@
<Pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
@ -101,17 +82,11 @@ import Title from "@/views/dataBoard/satisfactionEval/components/Title"
export default {
name: "dissatisfied",
components: {Breadcrumb, Pagination,Title},
components: {Breadcrumb, Pagination, Title},
data() {
return {
queryParams: {
month: '',
org: '',
matterSource: '',
matterType: '',
name: '',
tel: '',
pageNum: 1,
pageNo: 1,
pageSize: 10,
},
total: 0,
@ -125,14 +100,29 @@ export default {
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}),
list: [{}, {}, {}]
list: [],
title: ''
}
},
activated() {
this.title = this.$route.query.title
let searchParams = JSON.parse(this.$route.query.searchParams)
console.log(searchParams)
this.queryParams = {
...this.queryParams,
...searchParams
}
this.getList()
},
methods: {
getList() {
this.$http.get('/governance/satisfactionOverview/satisfactionCrowdList?' + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.list = data.list
this.total = data.total
})
},
handleView({name,id}) {
handleView({restName,restId}) {
this.$router.push('/dataBoard/satisfactionEval/dissatisfiedPersonnel/detail?name='+restName+'&user_id='+restId)
}
}
}
@ -162,7 +152,11 @@ export default {
height: 32px;
}
}
.main-title {
margin: 25px 0 32px;
}
.table {
margin-top: 32px;
}
</style>

150
src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/BusinessRecords.vue

@ -1,150 +0,0 @@
<template>
<div class="business-records">
<Tabs v-model="type" :list="typeList" @changeVal="typeChange"/>
<div class="table">
<el-table :data="list">
<el-table-column
label="序号"
type="index"
width="80"/>
<el-table-column
label="评价周期"
prop="key"
width=""/>
<el-table-column
label="姓名"
prop="key"
width=""/>
<el-table-column
label="电话"
prop="key"
width=""/>
<el-table-column
label="不满意类型"
prop="key"
width=""/>
<el-table-column
label="不满意原因"
prop="key"
width=""/>
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button>
</template>
</el-table-column>
</el-table>
<Pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</div>
</template>
<script>
import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue";
export default {
name: "BusinessRecords",
components: {Tabs},
data() {
return {
total: 10,
queryParams: {
pageNum: 0,
pageSize: 10,
},
type: 1,
typeList: [{
label: ' 12345投诉',
value: 1
}, {
label: '省满意度调查',
value: 2
}, {
label: '社区满意度自查',
value: 3
}, {
label: '事件',
value: 4
}, {
label: '需求',
value: 5
}, {
label: '服务',
value: 6
}, {
label: '回访记录',
value: 7
}],
list: [{},{},{},{},{}]
}
},
methods: {
typeChange() {
},
getList() {
}
}
}
</script>
<style scoped lang="scss">
.business-records {
margin-bottom: 25px;
}
.table {
/deep/ .el-table td, /deep/ .el-table th, /deep/ .el-table tr {
padding: 14px !important;
border:none!important;
min-height: 52px;
}
/deep/ .el-table td, /deep/ .el-table th {
background: none!important;
}
/deep/ .el-table td {
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
text-shadow: 1px 2px 4px rgba(10,32,60,0.51);
}
/deep/ .el-table tr {
background: none;
&:hover {
background-color: rgba(26, 149, 255, 0.3) !important;
}
}
/deep/ .el-table__body-wrapper tr:nth-of-type(odd) {
background: rgba(14, 56, 115, 0.4);
}
/deep/ .el-table {
background: none !important;
&:before {
background: none;
}
}
/deep/ .el-table__header-wrapper tr {
color: #A3B9DA !important;
font-size: 14px;
font-weight: 400;
opacity: 0.76;
background: none;
&:hover {
background: none!important;
}
}
/deep/ .el-table__header-wrapper {
background: none!important;
}
}
</style>

188
src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/EnjoyService.vue

@ -1,188 +0,0 @@
<template>
<div className="event-statistics">
<div id="enjoyServiceChart" style="height: 360px;"></div>
</div>
</template>
<script>
import * as echarts from "echarts";
export default {
name: "EnjoyService",
data() {
return {}
},
mounted() {
this.initCharts()
},
methods: {
initCharts() {
let div = document.getElementById('enjoyServiceChart');
this.myChart = echarts.init(div);
let xData = ['岗位找人', '技能找人', '温暖找人', '服务找人'];
let tq = [300, 90, 48, 39];
const max = Math.max(...tq)
let barArray = new Array(xData.length).fill((parseInt(max / 100) + 1) * 100)
var option = {
title: {
show: false,
text: '',
x: 'center',
top: '15px',
textStyle: {
color: '#333333',
fontWeight: 500,
fontSize: 18,
},
},
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(13, 64, 71, 0.50)',
borderColor: 'rgba(143, 225, 252, 0.60)',
padding: 8,
textStyle: {
color: '#fff',
},
formatter: function (params) {
console.log(params)
var res = ''
for (var i = 0; i < params.length; i++) {
if (params[i].seriesName != "") {
res += '<p>' + params[0].name + ':' + params[i].data + '</p>'
}
}
return res;
},
},
grid: {
top: '0',
left: '1%',
right: '2%',
bottom: '0',
containLabel: true
},
yAxis: [
{
type: 'category',
axisTick: {
show: false,
},
splitLine: {
show: false,
},
axisLine: {
lineStyle: {
color: '#323c41'
}
},
axisLabel: {
align: 'right',
textStyle: {
fontSize: 12,
color: '#A3B9DA'
}
},
boundaryGap: true,
data: xData,
}, {
type: 'category',
data: xData,
axisTick: {
show: false,
},
axisLine: {show: false},
axisLabel: {
show: false,
},
boundaryGap: true,
}
],
xAxis: [
{
type: 'value',
splitLine: {
show: true,
lineStyle: {
color: 'rgba(4,187,255,0.18)',
type: 'dashed'
},
},
nameTextStyle: {
color: '#A3B9DA',
textStyle: {
fontSize: 12
},
align: 'center'
},
axisLabel: {
show: true,
color: '#A3B9DA',
textStyle: {
fontSize: 12
}
},
axisTick: {
show: false
}
}
],
series: [
{
type: 'bar',
barWidth: 16,
itemStyle: {
// lenged
opacity: 1, //
color: new echarts.graphic.LinearGradient(
1,
0,
0,
0,
[
{
offset: 0,
color: '#6EDDFE' // 0%
},
{
offset: 1,
color: '#0B1F57' // 100%
}
],
false
)
},
data: tq, //data.values
},
{
name: '',
type: 'bar',
barWidth: 66,
barGap: '-60%',
data: barArray,
itemStyle: {
normal: {
color: 'rgba(89,130,194,0.12)'
}
},
zlevel: -1,
yAxisIndex: 1,
}
],
};
this.myChart.setOption(option);
window.addEventListener("resize", () => this.myChart.resize());
},
}
}
</script>
<style scoped lang="scss">
.event-statistics {
padding: 16px 16px;
}
</style>

76
src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/Family.vue

@ -1,76 +0,0 @@
<template>
<div class="family">
<div class="tag">
<div>张三(户主)</div>
<div>入户状态入户一致</div>
<div>居民分类老年人</div>
</div>
<div class="tag">
<div>张三(户主)</div>
<div>入户状态入户一致</div>
<div>居民分类老年人</div>
</div>
<div class="tag">
<div>张三(户主)</div>
<div>入户状态入户一致</div>
</div>
<div class="tag">
<div>张三(户主)</div>
<div>入户状态入户一致</div>
</div>
</div>
</template>
<script>
export default {
name: "Family"
}
</script>
<style scoped lang="scss">
.family {
width: 464px;
height: 340px;
background: url('@/assets/images/manyidu/gx_bg.png') no-repeat center;
position: relative;
margin: 40px auto;
}
.tag {
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
line-height: 22px;
padding: 18px 24px;
box-sizing: border-box;
position: absolute;
&:nth-of-type(1),
&:nth-of-type(2) {
background: url("@/assets/images/manyidu/gx_big.png") no-repeat center;
width: 180px;
height: 100px;
}
&:nth-of-type(3),
&:nth-of-type(4) {
background: url("@/assets/images/manyidu/gx_small.png") no-repeat center;
width: 180px;
height: 70px;
padding: 15px 24px;
}
&:nth-of-type(1) {
left: -98px;
top: 34px;
}
&:nth-of-type(2) {
right: -68px;
top: 34px;
}
&:nth-of-type(3) {
left: -91px;
bottom: 41px;
}
&:nth-of-type(4) {
right: -44px;
bottom: 41px;
}
}
</style>

93
src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/MatterDetails.vue

@ -1,93 +0,0 @@
<template>
<div class="matter-details">
<div class="user-img">
<img src="@/assets/images/manyidu/dn_bg1.png" alt="">
</div>
<div class="tags">
<div class="tag red">满意度风险人员</div>
<div class="tag small">与子女同住</div>
<div class="tag">第三网格</div>
<div class="tag small">入户一致</div>
<div class="tag">13343999999</div>
<div class="tag">四季景园1号楼1单元101</div>
</div>
</div>
</template>
<script>
export default {
name: "MatterDetails"
}
</script>
<style scoped lang="scss">
.matter-details {
width: 607px;
height: 372px;
background: url("@/assets/images/manyidu/dn_bg2.png") no-repeat center bottom;
position: relative;
margin: 12px auto 60px;
}
.user-img {
position: absolute;
left: calc(50% - 87px);
top: calc(50% - 37px);
}
.tag {
position: absolute;
background: url("@/assets/images/manyidu/dn_big.png") center no-repeat;
width: 108px;
height: 107px;
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
line-height: 16px;
box-sizing: border-box;
padding: 24px;
text-align: center;
word-break: break-all;
&.small {
width: 89px;
height: 89px;
background: url("@/assets/images/manyidu/dn_small.png") center no-repeat;
padding: 16px;
}
&.red {
background: url("@/assets/images/manyidu/dn_red.png") center no-repeat;
color: #FE0000;
}
&:nth-of-type(1) {
left: 0;
bottom: 15px;
}
&:nth-of-type(2) {
left: 42px;
bottom: 185px;
}
&:nth-of-type(3) {
left: 194px;
bottom: 245px;
}
&:nth-of-type(4) {
left: 384px;
bottom: 240px;
}
&:nth-of-type(5) {
left: 499px;
bottom: 157px;
}
&:nth-of-type(6) {
left: 453px;
bottom: 10px;
}
}
</style>

51
src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/modules/PointsRecord.vue

@ -1,51 +0,0 @@
<template>
<div>
<div class="enjoy-service">
<div class="enjoy-service-item" v-for="(item,index) in 5">
<div class="num">+10</div>
<div class="info">
<div class="title">便民服务-配餐服务</div>
<div class="time">2023-07-15 15:30:30</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "PointsRecord"
}
</script>
<style scoped lang="scss">
.enjoy-service {
padding-left: 26px;
}
.enjoy-service-item {
color: #FFFFFF;
display: flex;
padding: 14px 16px 14px;
margin-bottom: 8px;
background: #07266B;
.num {
font-size: 24px;
font-weight: 500;
line-height: 22px;
}
.info {
font-size: 14px;
margin-left: 40px;
.title {
font-weight: 500;
margin-bottom: 10px;
}
.time {
font-weight: 400;
color: #A3B9DA;
}
}
}
</style>

4
src/views/dataBoard/satisfactionEval/modules/EventSituation/index.vue

@ -113,7 +113,6 @@ export default {
.cur-month-item {
margin-left: 71px;
.txt {
font-size: 16px;
font-weight: 400;
@ -150,7 +149,8 @@ export default {
.his-month-item {
flex: 1;
position: relative;
padding-left: 25px;
//padding-left: 25px;
text-align: center;
&:after {
content: '';

53
src/views/dataBoard/satisfactionEval/modules/PersonnelPortrait/index.vue

@ -3,42 +3,42 @@
<Tabs v-model="resultType" :list="resultTypeList" @changeVal="resultTypeChange"/>
<div class="screen">
<div class="txt">不满意人员画像</div>
<el-select v-model="typeCondition" @change="getData" placeholder="请选择" class="select" popper-class="selectPopClass">
<el-option
v-for="item in typeConditionList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<!-- <el-select v-model="typeCondition" @change="getData" placeholder="请选择" class="select" popper-class="selectPopClass">
<el-option
v-for="item in typeConditionList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>-->
</div>
<div class="portrait">
<div class="tag yellow">
<div class="tag yellow" v-if="gridName">
<div class="text">{{ gridName }}</div>
</div>
<div class="tag blue">
<div class="tag blue" v-if="ageClassification">
<div class="text">{{ ageClassification }}</div>
</div>
<div class="tag red">
<div class="tag red" v-if="residentTagName">
<div class="text">{{ residentTagName }}</div>
</div>
<div class="tag light">
<div class="tag light" v-if="monthIncomeLevel">
<div class="text">{{ monthIncomeLevel }}</div>
</div>
<div class="tag green">
<div class="tag green" v-if="cultureLevel">
<div class="text">{{ cultureLevel }}</div>
</div>
<div class="tag orange">
<div class="tag orange" v-if="marriageName">
<div class="text">{{ marriageName }}</div>
</div>
<div class="tag purple">
<div class="text">{{ gender==='1'?'男':gender==='2'?'女':gender==='0'?'未知':'' }}</div>
<div class="tag purple" v-if="gender">
<div class="text">{{ gender === '1' ? '男' : gender === '2' ? '女' : gender === '0' ? '未知' : '' }}</div>
</div>
</div>
<div class="btn" @click="$router.push('/dataBoard/satisfactionEval/dissatisfiedPersonnel')">
<div>按画像匹配到同类<span> <b>{{matchPeopleNum?matchPeopleNum:0}}</b></span></div>
<div class="btn" @click="gotopage">
<div>按画像匹配到同类<span> <b>{{ matchPeopleNum ? matchPeopleNum : 0 }}</b></span></div>
<i class="el-icon-arrow-right"></i>
</div>
</div>
@ -61,7 +61,7 @@ export default {
label: '按12345热线投诉结果',
value: '12345'
}],
typeCondition: 1,
typeCondition: '',
typeConditionList: [],
gender: "",
marriageName: "",
@ -70,19 +70,22 @@ export default {
gridName: "",
monthIncomeLevel: "",
residentTagName: "",
matchPeopleNum: 0
matchPeopleNum: 0,
searchParams: ''
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getDisKey()
// this.getDisKey()
this.getData();
}
}
},
mounted() {
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getDisKey()
// this.getDisKey()
this.getData();
}
},
methods: {
@ -90,11 +93,13 @@ export default {
this.resultType = val
this.getData()
},
gotopage() {
this.$router.push('/dataBoard/satisfactionEval/dissatisfiedPersonnel?searchParams=' + this.searchParams)
},
getDisKey() {
this.$http.post('/sys/dict/data/dictlist', {'dictType': 'satisfaction_category'}).then(({data: {data}}) => {
this.typeCondition = data[0].value
this.typeConditionList = data
this.getData();
})
},
getData() {
@ -113,6 +118,8 @@ export default {
this.monthIncomeLevel = data.monthIncomeLevel;
this.residentTagName = data.residentTagName;
this.matchPeopleNum = data.matchPeopleNum;
this.searchParams = JSON.stringify({...data, ...params})
})
}
}

6
src/views/dataBoard/satisfactionEval/modules/PotentialPeople/index.vue

@ -1,6 +1,6 @@
<template>
<div class="potential-people">
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/sjwjj')">
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople')">
<div class="icon">
<img src="@/assets/images/manyidu/qz_wjj.png" alt="">
</div>
@ -10,7 +10,7 @@
</div>
<div class="num"><span class="orange">{{ unSolvedNum ? unSolvedNum : 0 }}</span></div>
</div>
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/xqwmz')">
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople')">
<div class="icon">
<img src="@/assets/images/manyidu/qz_wmz.png" alt="">
</div>
@ -20,7 +20,7 @@
</div>
<div class="num"><span class="green">{{ unFinishNum ? unFinishNum : 0 }}</span></div>
</div>
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/yxwxfw')">
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople')">
<div class="icon">
<img src="@/assets/images/manyidu/qz_wx.png" alt="">
</div>

2
src/views/dataBoard/satisfactionEval/modules/SelfTrend/index.vue

@ -187,7 +187,7 @@ export default {
yAxis: [
{
type: 'value',
name: '单位:人',
name: '单位:' + (this.trendType === 1 ? '人' : '得分'),
nameLocation: 'end',
splitLine: {
show: true,

4
src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue

@ -138,7 +138,7 @@ export default {
}
let legendName = ['省满意度调查\n各项不满意人数', '社区满意度自查\n各项不满意人数']
let series = [{
name: "省满意度调查\n各项不满意人数",
name: this.resultType === 2?'12345热线\n事件上报人数':"省满意度调查\n各项不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 7,
@ -161,7 +161,7 @@ export default {
data: [datavaule]
}]
if (this.resultType === 2) {
legendName = ['省满意度调查\n各项不满意人数']
legendName = ['12345热线\n事件上报人数']
} else {
series.push({
name: "社区满意度自查\n各项不满意人数",

98
src/views/dataBoard/satisfactionEval/potentialPeople/index.vue

@ -3,26 +3,17 @@
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-select popper-class="selectPopClass" v-model="queryParams.org" size="small" placeholder="按组织">
<el-select popper-class="selectPopClass" v-model="queryParams.agencyId" size="small" placeholder="按组织">
<el-option
v-for="item in monthOptions"
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.matterType" size="small" placeholder="按不满意类型">
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input v-model="queryParams.name" size="small" placeholder="按姓名"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按电话"></el-input>
<el-button size="small" class="btn" type="primary">查询</el-button>
<el-input v-model="queryParams.name" clearable size="small" placeholder="按姓名"></el-input>
<el-input v-model="queryParams.mobile" clearable size="small" placeholder="按电话"></el-input>
<el-button size="small" class="btn" type="primary" @click="search">查询</el-button>
</el-form>
</div>
@ -38,41 +29,56 @@
label="上报人"/>
<el-table-column
prop="key"
prop="mobile"
label="上报人电话"/>
<el-table-column
prop="key"
prop="agencyName"
label="所属组织">
</el-table-column>
<el-table-column
prop="key"
prop="eventCount"
sortable
label="事件未解决数"/>
label="事件未解决数">
<template slot-scope="{row}">
<el-button type="text" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/sjwjj?reportUserId='+row.reportUserId)">{{ row.eventCount }}</el-button>
</template>
</el-table-column>
<el-table-column
prop="key"
prop="demandCount"
sortable
label="需求未满足数"/>
label="需求未满足数">
<template slot-scope="{row}">
<el-button type="text" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/xqwmz?reportUserId='+row.reportUserId)">{{ row.demandCount }}</el-button>
</template>
</el-table-column>
<el-table-column
prop="key"
prop="serviceCount"
sortable
label="应享未享数"/>
label="应享未享数">
<template slot-scope="{row}">
<el-button type="text" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/yxwxfw?reportUserId='+row.reportUserId)">{{ row.serviceCount }}</el-button>
</template>
</el-table-column>
<el-table-column
prop="key"
prop="countAll"
sortable
label="总数"/>
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.pageNum"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
@ -87,7 +93,7 @@ import Title from "@/views/dataBoard/satisfactionEval/components/Title"
export default {
name: "dissatisfied",
components: {Breadcrumb, Pagination,Title},
components: {Breadcrumb, Pagination, Title},
data() {
return {
queryParams: {
@ -97,9 +103,10 @@ export default {
matterType: '',
name: '',
tel: '',
pageNum: 1,
pageNo: 1,
pageSize: 10,
},
orgOptions: [],
total: 0,
breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index',
@ -111,14 +118,43 @@ export default {
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}),
list: [{}, {}, {}]
list: []
}
},
mounted() {
this.getOrg()
},
methods: {
search() {
this.queryParams.pageNo = 1
this.getList();
},
getOrg() {
let params = {
orgId: this.$store.state.chooseArea.chooseName.orgId,
level: this.$store.state.chooseArea.chooseName.level
}
this.$http.post(`/gov/org/agency/maporg`, params).then(async ({data: {data}}) => {
this.queryParams.agencyId = this.$store.state.chooseArea.chooseName.orgId
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.$http.get('/governance/satisfactionDetailList/getPotentialDissatisfiedCountDetail?' + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.list = data.list;
this.total = data.total;
})
},
handleView({name,id}) {
handleView(id) {
}
}
}

101
src/views/dataBoard/satisfactionEval/potentialPeople/sjwjj.vue

@ -1,32 +1,6 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-select popper-class="selectPopClass" v-model="queryParams.org" size="small" placeholder="按组织">
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select popper-class="selectPopClass" v-model="queryParams.matterSource" size="small" placeholder="按事件类型">
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input v-model="queryParams.name" size="small" placeholder="按上报人姓名"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按上报人电话"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按事件描述关键词"></el-input>
<el-button size="small" class="btn" type="primary">查询</el-button>
</el-form>
</div>
<div class="table">
<el-table :data="list">
<el-table-column
@ -39,40 +13,40 @@
label="上报人"/>
<el-table-column
prop="key"
prop="mobile"
label="上报人电话"/>
<el-table-column
prop="key"
prop="agencyName"
label="所属组织">
</el-table-column>
<el-table-column
prop="key"
prop="categoryName"
label="事件类型"/>
<el-table-column
prop="key"
prop="eventContent"
show-overflow-tooltip
label="事件描述"/>
<el-table-column
prop="key"
prop="latestProcessingStatus"
label="最新办理状态"/>
<el-table-column
prop="key"
prop="latestProcessingTime"
sortable
label="最近办理时间"/>
<el-table-column
prop="key"
prop="happenTime"
sortable
label="事件上报时间"/>
<el-table-column
sortable
label="详情">
<template>
<el-button type="text">查看</el-button>
<template slot-scope="{row}">
<el-button type="text" @click="handleView(row.id,row.name)">查看</el-button>
</template>
</el-table-column>
@ -82,7 +56,7 @@
<Pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
@ -101,32 +75,39 @@ export default {
data() {
return {
queryParams: {
month: '',
org: '',
matterSource: '',
matterType: '',
name: '',
tel: '',
pageNum: 1,
reportUserId: this.$route.query.reportUserId,
pageNo: 1,
pageSize: 10,
},
total: 0,
breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index',
name: '满意度评价'
}, {
path: '/dataBoard/satisfactionEval/potentialPeople',
name: '潜在不满意数'
}, {
path: '',
name: '事件未解决人数'
name: '事件未解决数'
}],
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}),
list: [{}, {}, {}]
list: []
}
},
activated() {
this.queryParams.reportUserId = this.$route.query.reportUserId
this.queryParams.pageNo = 1
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1
this.getList();
},
getList() {
this.$http.get('/governance/satisfactionDetailList/getEventUnSolvedByUserId?' + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.list = data.list;
this.total = data.total;
})
},
handleView({name,id}) {
}
@ -137,25 +118,7 @@ export default {
<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;
}
.table {
margin-top: 40px;
}
</style>

102
src/views/dataBoard/satisfactionEval/potentialPeople/xqwmz.vue

@ -1,33 +1,6 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-select popper-class="selectPopClass" v-model="queryParams.org" size="small" placeholder="按组织">
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select popper-class="selectPopClass" v-model="queryParams.matterSource" size="small" placeholder="按需求类型">
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input v-model="queryParams.name" size="small" placeholder="按需求人姓名"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按需求人电话"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按需求描述关键词"></el-input>
<el-button size="small" class="btn" type="primary">查询</el-button>
</el-form>
</div>
<div class="table">
<el-table :data="list">
@ -37,41 +10,41 @@
width="80"/>
<el-table-column
prop="name"
prop="demandUserName"
label="需求人"/>
<el-table-column
prop="key"
prop="demandUserMobile"
label="需求人电话"/>
<el-table-column
prop="key"
prop="agencyName"
label="所属组织">
</el-table-column>
<el-table-column
prop="key"
prop="content"
show-overflow-tooltip
label="需求描述"/>
<el-table-column
prop="key"
prop="latestProcessingStatus"
label="最新办理状态"/>
<el-table-column
prop="key"
prop="latestProcessingTime"
sortable
label="最近办理时间"/>
<el-table-column
prop="key"
prop="reportTime"
sortable
label="需求提交时间"/>
<el-table-column
sortable
label="详情">
<template>
<el-button type="text">查看</el-button>
<template slot-scope="{row}">
<el-button type="text" @click="handleView(row.id,row.name)">查看</el-button>
</template>
</el-table-column>
@ -81,7 +54,7 @@
<Pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
@ -100,32 +73,39 @@ export default {
data() {
return {
queryParams: {
month: '',
org: '',
matterSource: '',
matterType: '',
name: '',
tel: '',
pageNum: 1,
reportUserId: this.$route.query.reportUserId,
pageNo: 1,
pageSize: 10,
},
total: 0,
breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index',
name: '满意度评价'
}, {
path: '/dataBoard/satisfactionEval/potentialPeople',
name: '潜在不满意数'
}, {
path: '',
name: '需求未满足人数'
name: '需求未满足数'
}],
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}),
list: [{}, {}, {}]
list: []
}
},
activated() {
this.queryParams.reportUserId = this.$route.query.reportUserId
this.queryParams.pageNo = 1
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1
this.getList();
},
getList() {
this.$http.get('/governance/satisfactionDetailList/getUserDemandUnSolvedByUserId?' + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.list = data.list;
this.total = data.total;
})
},
handleView({name,id}) {
}
@ -136,25 +116,7 @@ export default {
<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;
}
.table {
margin-top: 40px;
}
</style>

104
src/views/dataBoard/satisfactionEval/potentialPeople/yxwxfw.vue

@ -1,32 +1,6 @@
<template>
<div>
<Breadcrumb :list="breadcrumbList"/>
<div class="screen">
<el-form :model="queryParams" inline>
<el-select popper-class="selectPopClass" v-model="queryParams.org" size="small" placeholder="按组织">
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select popper-class="selectPopClass" v-model="queryParams.matterSource" size="small" placeholder="按服务类型">
<el-option
v-for="item in monthOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-input v-model="queryParams.name" size="small" placeholder="按服务对象姓名"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按服务对象电话"></el-input>
<el-input v-model="queryParams.tel" size="small" placeholder="按服务描述关键词"></el-input>
<el-button size="small" class="btn" type="primary">查询</el-button>
</el-form>
</div>
<div class="table">
<el-table :data="list">
<el-table-column
@ -39,40 +13,35 @@
label="服务对象姓名"/>
<el-table-column
prop="key"
prop="mobile"
label="服务对象电话"/>
<el-table-column
prop="key"
prop="organizationName"
label="所属组织">
</el-table-column>
<el-table-column
prop="key"
prop="serviceCategoryName"
label="服务类型"/>
<el-table-column
prop="key"
prop="remark"
show-overflow-tooltip
label="服务描述"/>
<el-table-column
prop="key"
label="是否符合政策条件"/>
<el-table-column
prop="key"
prop="serviceStatus"
sortable
label="是否已完成服务"/>
<el-table-column
prop="key"
prop="serviceTimeStart"
sortable
label="服务发起时间"/>
<el-table-column
sortable
label="详情">
<template>
<el-button type="text">查看</el-button>
<template slot-scope="{row}">
<el-button type="text" @click="handleView(row.id,row.name)">查看</el-button>
</template>
</el-table-column>
@ -82,7 +51,7 @@
<Pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
@ -101,32 +70,39 @@ export default {
data() {
return {
queryParams: {
month: '',
org: '',
matterSource: '',
matterType: '',
name: '',
tel: '',
pageNum: 1,
pageNo: 1,
pageSize: 10,
},
total: 0,
breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index',
name: '满意度评价'
}, {
path: '/dataBoard/satisfactionEval/potentialPeople',
name: '潜在不满意数'
}, {
path: '',
name: '应享未享服务人数'
name: '应享未享服务数'
}],
monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}),
list: [{}, {}, {}]
list: []
}
},
activated() {
this.queryParams.reportUserId = this.$route.query.reportUserId
this.queryParams.pageNo = 1
this.getList();
},
methods: {
search() {
this.queryParams.pageNo = 1
this.getList();
},
getList() {
this.$http.get('/governance/satisfactionDetailList/getServiceNotEnjoyedByUserId?' + this.$paramsFormat(this.queryParams)).then(({data: {data}}) => {
this.list = data.list;
this.total = data.total;
})
},
handleView({name,id}) {
}
@ -137,25 +113,7 @@ export default {
<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;
}
.table {
margin-top: 40px;
}
</style>
Loading…
Cancel
Save