Browse Source

对接满意度子页面列表

feature
战立标 2 years ago
parent
commit
0722ed252d
  1. 4
      src/utils/jwTool.js
  2. 71
      src/views/dataBoard/satisfactionEval/dissatisfied/detail.vue
  3. 197
      src/views/dataBoard/satisfactionEval/dissatisfied/index.vue
  4. 103
      src/views/dataBoard/satisfactionEval/dissatisfiedPersonnel/index.vue
  5. 12
      src/views/dataBoard/satisfactionEval/modules/PersonnelPortrait/index.vue
  6. 6
      src/views/dataBoard/satisfactionEval/modules/PotentialPeople/index.vue
  7. 98
      src/views/dataBoard/satisfactionEval/potentialPeople/index.vue
  8. 101
      src/views/dataBoard/satisfactionEval/potentialPeople/sjwjj.vue
  9. 102
      src/views/dataBoard/satisfactionEval/potentialPeople/xqwmz.vue
  10. 104
      src/views/dataBoard/satisfactionEval/potentialPeople/yxwxfw.vue

4
src/utils/jwTool.js

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

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

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

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

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

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

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

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

@ -37,7 +37,7 @@
</div> </div>
</div> </div>
<div class="btn" @click="$router.push('/dataBoard/satisfactionEval/dissatisfiedPersonnel')"> <div class="btn" @click="gotopage">
<div>按画像匹配到同类<span> <b>{{matchPeopleNum?matchPeopleNum:0}}</b></span></div> <div>按画像匹配到同类<span> <b>{{matchPeopleNum?matchPeopleNum:0}}</b></span></div>
<i class="el-icon-arrow-right"></i> <i class="el-icon-arrow-right"></i>
</div> </div>
@ -61,7 +61,7 @@ export default {
label: '按12345热线投诉结果', label: '按12345热线投诉结果',
value: '12345' value: '12345'
}], }],
typeCondition: 1, typeCondition: '',
typeConditionList: [], typeConditionList: [],
gender: "", gender: "",
marriageName: "", marriageName: "",
@ -70,7 +70,8 @@ export default {
gridName: "", gridName: "",
monthIncomeLevel: "", monthIncomeLevel: "",
residentTagName: "", residentTagName: "",
matchPeopleNum: 0 matchPeopleNum: 0,
searchParams: ''
} }
}, },
watch: { watch: {
@ -90,6 +91,9 @@ export default {
this.resultType = val this.resultType = val
this.getData() this.getData()
}, },
gotopage() {
this.$router.push('/dataBoard/satisfactionEval/dissatisfiedPersonnel?searchParams='+this.searchParams+'&title='+this.typeConditionList.filter(item=>item.value === this.typeCondition)[0].label)
},
getDisKey() { getDisKey() {
this.$http.post('/sys/dict/data/dictlist', {'dictType': 'satisfaction_category'}).then(({data: {data}}) => { this.$http.post('/sys/dict/data/dictlist', {'dictType': 'satisfaction_category'}).then(({data: {data}}) => {
this.typeCondition = data[0].value this.typeCondition = data[0].value
@ -113,6 +117,8 @@ export default {
this.monthIncomeLevel = data.monthIncomeLevel; this.monthIncomeLevel = data.monthIncomeLevel;
this.residentTagName = data.residentTagName; this.residentTagName = data.residentTagName;
this.matchPeopleNum = data.matchPeopleNum; this.matchPeopleNum = data.matchPeopleNum;
this.searchParams = JSON.stringify({...data,...params})
}) })
} }
} }

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

@ -1,6 +1,6 @@
<template> <template>
<div class="potential-people"> <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"> <div class="icon">
<img src="@/assets/images/manyidu/qz_wjj.png" alt=""> <img src="@/assets/images/manyidu/qz_wjj.png" alt="">
</div> </div>
@ -10,7 +10,7 @@
</div> </div>
<div class="num"><span class="orange">{{ unSolvedNum ? unSolvedNum : 0 }}</span></div> <div class="num"><span class="orange">{{ unSolvedNum ? unSolvedNum : 0 }}</span></div>
</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"> <div class="icon">
<img src="@/assets/images/manyidu/qz_wmz.png" alt=""> <img src="@/assets/images/manyidu/qz_wmz.png" alt="">
</div> </div>
@ -20,7 +20,7 @@
</div> </div>
<div class="num"><span class="green">{{ unFinishNum ? unFinishNum : 0 }}</span></div> <div class="num"><span class="green">{{ unFinishNum ? unFinishNum : 0 }}</span></div>
</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"> <div class="icon">
<img src="@/assets/images/manyidu/qz_wx.png" alt=""> <img src="@/assets/images/manyidu/qz_wx.png" alt="">
</div> </div>

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

@ -3,26 +3,17 @@
<Breadcrumb :list="breadcrumbList"/> <Breadcrumb :list="breadcrumbList"/>
<div class="screen"> <div class="screen">
<el-form :model="queryParams" inline> <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 <el-option
v-for="item in monthOptions" v-for="item in orgOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value"> :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
<el-input v-model="queryParams.name" clearable size="small" placeholder="按姓名"></el-input>
<el-select popper-class="selectPopClass" v-model="queryParams.matterType" size="small" placeholder="按不满意类型"> <el-input v-model="queryParams.mobile" clearable size="small" placeholder="按电话"></el-input>
<el-option <el-button size="small" class="btn" type="primary" @click="search">查询</el-button>
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-form> </el-form>
</div> </div>
@ -38,41 +29,56 @@
label="上报人"/> label="上报人"/>
<el-table-column <el-table-column
prop="key" prop="mobile"
label="上报人电话"/> label="上报人电话"/>
<el-table-column <el-table-column
prop="key" prop="agencyName"
label="所属组织"> label="所属组织">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="key" prop="eventCount"
sortable 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 <el-table-column
prop="key" prop="demandCount"
sortable 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 <el-table-column
prop="key" prop="serviceCount"
sortable 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 <el-table-column
prop="key" prop="countAll"
sortable sortable
label="总数"/> label="总数">
<template slot-scope="{row}">{{ row.countAll }}
<!-- <el-button type="text"></el-button>-->
</template>
</el-table-column>
</el-table> </el-table>
</div> </div>
<Pagination <Pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
@ -87,7 +93,7 @@ import Title from "@/views/dataBoard/satisfactionEval/components/Title"
export default { export default {
name: "dissatisfied", name: "dissatisfied",
components: {Breadcrumb, Pagination,Title}, components: {Breadcrumb, Pagination, Title},
data() { data() {
return { return {
queryParams: { queryParams: {
@ -97,9 +103,10 @@ export default {
matterType: '', matterType: '',
name: '', name: '',
tel: '', tel: '',
pageNum: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
}, },
orgOptions: [],
total: 0, total: 0,
breadcrumbList: [{ breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index', path: '/dataBoard/satisfactionEval/index',
@ -111,14 +118,43 @@ export default {
monthOptions: new Array(12).fill(0).map((_, index) => { monthOptions: new Array(12).fill(0).map((_, index) => {
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)} return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}), }),
list: [{}, {}, {}] list: []
} }
}, },
mounted() {
this.getOrg()
},
methods: { 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() { 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> <template>
<div> <div>
<Breadcrumb :list="breadcrumbList"/> <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"> <div class="table">
<el-table :data="list"> <el-table :data="list">
<el-table-column <el-table-column
@ -39,40 +13,40 @@
label="上报人"/> label="上报人"/>
<el-table-column <el-table-column
prop="key" prop="mobile"
label="上报人电话"/> label="上报人电话"/>
<el-table-column <el-table-column
prop="key" prop="agencyName"
label="所属组织"> label="所属组织">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="key" prop="categoryName"
label="事件类型"/> label="事件类型"/>
<el-table-column <el-table-column
prop="key" prop="eventContent"
show-overflow-tooltip show-overflow-tooltip
label="事件描述"/> label="事件描述"/>
<el-table-column <el-table-column
prop="key" prop="latestProcessingStatus"
label="最新办理状态"/> label="最新办理状态"/>
<el-table-column <el-table-column
prop="key" prop="latestProcessingTime"
sortable sortable
label="最近办理时间"/> label="最近办理时间"/>
<el-table-column <el-table-column
prop="key" prop="happenTime"
sortable sortable
label="事件上报时间"/> label="事件上报时间"/>
<el-table-column <el-table-column
sortable sortable
label="详情"> label="详情">
<template> <template slot-scope="{row}">
<el-button type="text">查看</el-button> <el-button type="text" @click="handleView(row.id,row.name)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -82,7 +56,7 @@
<Pagination <Pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
@ -101,32 +75,39 @@ export default {
data() { data() {
return { return {
queryParams: { queryParams: {
month: '', reportUserId: this.$route.query.reportUserId,
org: '', pageNo: 1,
matterSource: '',
matterType: '',
name: '',
tel: '',
pageNum: 1,
pageSize: 10, pageSize: 10,
}, },
total: 0, total: 0,
breadcrumbList: [{ breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index', path: '/dataBoard/satisfactionEval/index',
name: '满意度评价' name: '满意度评价'
}, {
path: '/dataBoard/satisfactionEval/potentialPeople',
name: '潜在不满意数'
}, { }, {
path: '', path: '',
name: '事件未解决人数' name: '事件未解决数'
}], }],
monthOptions: new Array(12).fill(0).map((_, index) => { list: []
return {label: (index - 0 + 1) + '月', value: (index - 0 + 1)}
}),
list: [{}, {}, {}]
} }
}, },
activated() {
this.queryParams.reportUserId = this.$route.query.reportUserId
this.queryParams.pageNo = 1
this.getList();
},
methods: { methods: {
search() {
this.queryParams.pageNo = 1
this.getList();
},
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}) { handleView({name,id}) {
} }
@ -137,25 +118,7 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/scss/dataBoard/table.scss"; @import "@/assets/scss/dataBoard/table.scss";
.screen { .table {
margin: 25px 0 40px; margin-top: 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> </style>

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

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

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

@ -1,32 +1,6 @@
<template> <template>
<div> <div>
<Breadcrumb :list="breadcrumbList"/> <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"> <div class="table">
<el-table :data="list"> <el-table :data="list">
<el-table-column <el-table-column
@ -39,40 +13,35 @@
label="服务对象姓名"/> label="服务对象姓名"/>
<el-table-column <el-table-column
prop="key" prop="mobile"
label="服务对象电话"/> label="服务对象电话"/>
<el-table-column <el-table-column
prop="key" prop="organizationName"
label="所属组织"> label="所属组织">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="key" prop="serviceCategoryName"
label="服务类型"/> label="服务类型"/>
<el-table-column <el-table-column
prop="key" prop="remark"
show-overflow-tooltip show-overflow-tooltip
label="服务描述"/> label="服务描述"/>
<el-table-column <el-table-column
prop="key" prop="serviceStatus"
label="是否符合政策条件"/>
<el-table-column
prop="key"
sortable sortable
label="是否已完成服务"/> label="是否已完成服务"/>
<el-table-column <el-table-column
prop="key" prop="serviceTimeStart"
sortable sortable
label="服务发起时间"/> label="服务发起时间"/>
<el-table-column <el-table-column
sortable sortable
label="详情"> label="详情">
<template> <template slot-scope="{row}">
<el-button type="text">查看</el-button> <el-button type="text" @click="handleView(row.id,row.name)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -82,7 +51,7 @@
<Pagination <Pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getList" @pagination="getList"
/> />
@ -101,32 +70,39 @@ export default {
data() { data() {
return { return {
queryParams: { queryParams: {
month: '', pageNo: 1,
org: '',
matterSource: '',
matterType: '',
name: '',
tel: '',
pageNum: 1,
pageSize: 10, pageSize: 10,
}, },
total: 0, total: 0,
breadcrumbList: [{ breadcrumbList: [{
path: '/dataBoard/satisfactionEval/index', path: '/dataBoard/satisfactionEval/index',
name: '满意度评价' name: '满意度评价'
}, {
path: '/dataBoard/satisfactionEval/potentialPeople',
name: '潜在不满意数'
}, { }, {
path: '', 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: { methods: {
search() {
this.queryParams.pageNo = 1
this.getList();
},
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}) { handleView({name,id}) {
} }
@ -137,25 +113,7 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/assets/scss/dataBoard/table.scss"; @import "@/assets/scss/dataBoard/table.scss";
.screen { .table {
margin: 25px 0 40px; margin-top: 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> </style>
Loading…
Cancel
Save