Browse Source

新增追加内容投诉

v1.1
战立标 2 years ago
parent
commit
799f0ae1a6
  1. 98
      src/views/modules/goverhotline/addComplainList.vue
  2. 126
      src/views/modules/goverhotline/index.vue
  3. 80
      src/views/modules/shequzhili/event/cpts/awoList.vue
  4. 52
      src/views/modules/shequzhili/event/eventList.vue

98
src/views/modules/goverhotline/addComplainList.vue

@ -0,0 +1,98 @@
<template>
<div style="margin-top:10px">
<el-table :data="tableData" :span-method="objectSpanMethod" border class="m-table-item" height="600" style="width: 100%">
<el-table-column align="center" fixed="left" label="序号" type="index" width="50"/>
<el-table-column :show-overflow-tooltip="true" align="center" label="类型" prop="categoryName"/>
<el-table-column :show-overflow-tooltip="true" align="center" label="追加内容次数" prop="awoNum"/>
<el-table-column :show-overflow-tooltip="true" align="center" label="投诉内容" prop="eventContent"/>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="scope">
<el-button @click="handelSearchAreaSameEvent(scope.row)" type="text" size="small">查看</el-button>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination
:current-page.sync="pageNo"
:page-size="pageSize"
:page-sizes="[10, 20, 50]"
:total="total"
layout="sizes, prev, pager, next, total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"/>
</div>
</div>
</template>
<script>
import {requestPost, requestGet} from "@/js/dai/request";
import {completeList} from "@/js/columns/constants";
export default {
//
data() {
return {
formData: {
startTime: "",
endTime: "",
awoFlag: 1
},
pageNo: 0,
pageSize: window.localStorage.getItem('pageSize') || 20,
total: 0,
tableData: [],
mergeObj: {},
mergeArr: ['address'],
};
},
//
created() {
},
async mounted() {
await this.getTableData()
},
//
methods: {
handelSearchAreaSameEvent(row) {
this.$emit('clickAwoFlagData',row)
},
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.pageSize = val;
this.getTableData();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.pageNo = val;
this.getTableData();
},
async getTableData() {
try {
const url = "/governance/dwdEvent/list";
const {pageSize, pageNo, formData} = this;
const {data, code, msg} = await requestPost(url, {
pageSize,
pageNo,
...formData,
});
if (code == 0) {
this.tableData = data.list;
this.total = data.total;
} else {
console.log(err);
}
} catch (err) {
console.log(err);
}
},
},
//
components: {},
//
computed: {},
//
watch: {},
}
</script>
<style lang="scss"></style>

126
src/views/modules/goverhotline/index.vue

@ -8,7 +8,7 @@
<el-date-picker v-model="formData.queryDateStart" type="date" value-format="yyyy-MM-dd" placeholder="开始时间"
style="width: 202px" clearable>
</el-date-picker>
<el-date-picker v-model="formData.queryDateEnd" type="date" value-format="yyyy-MM-dd" placeholder="结束时间"
style="width: 202px" clearable>
</el-date-picker>
@ -51,12 +51,12 @@
<div class="no-data" v-else>
暂无数据
</div>
</div>
<div>
<h1 style="font-size: 24px; font-weight: bold;"> 工单情况分析 </h1>
<div v-if="agencyLevel!='community' && communityCountShow">
<h2 style="font-size: 20px; font-weight: bold;"> 地域统计分析 </h2>
<p style="font-size: 16px; line-height: 1.5; margin-top: 10px; text-indent: 2em;">
@ -72,7 +72,7 @@
</div> -->
<div v-if="agencyLevel!='community' && departCountShow">
<h2 style="font-size: 20px; font-weight: bold;"> 科室热线分布分析 </h2>
<p style="font-size: 16px; line-height: 1.5; margin-top: 10px; text-indent: 2em;">
{{ report.geoStatis }}
@ -158,12 +158,31 @@
</el-table>
<el-button @click="handelMoreAddressMobileData" type="text" size="small">查看更多</el-button>
<div>
<h2 style="font-size: 20px; font-weight: bold;"> 同一工单追加内容投诉</h2>
</div>
<el-table
:data="addComplainData"
border
class="m-table-item"
style="width: 100%"
@row-click="clickAwoFlagData"
>
<el-table-column label="序号" fixed="left" type="index" align="center" width="50" />
<el-table-column prop="categoryName" align="center" label="类型" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="awoNum" align="center" label="追加内容次数" :show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="content" align="center" label="投诉内容" :show-overflow-tooltip="true"></el-table-column>
</el-table>
<el-button @click="handelMoreAddComplainData" type="text" size="small">查看更多</el-button>
</div>
</div>
<el-dialog
v-if="showFormList"
:visible.sync="showFormList"
@ -184,6 +203,7 @@
:departId="departId"
:address="address"
:mobile="mobile"
:awo_flag="awo_flag"
@handelClickDetail="handelClickDetail"
></form-list>
<el-dialog
@ -256,7 +276,25 @@
@clickAddressMobileData="clickAddressMobileData"
></area-no-same-list>
</el-dialog>
<el-dialog
v-if="showAddEventList"
:visible.sync="showAddEventList"
:close-on-click-modal="false"
:close-on-press-escape="false"
title="同一工单追加内容投诉"
:modal-append-to-body="false"
width="60%"
top="5vh"
class="dialog-h"
@closed="showAddEventList = false"
>
<add-complain-list
ref="ref_area_no_same_list"
@clickAwoFlagData="clickAwoFlagData"
></add-complain-list>
</el-dialog>
<awoList ref="awoList" />
</div>
</template>
<script>
@ -269,18 +307,20 @@ import * as echarts from "echarts";
import formList from "./formList";
import areaSameList from "./areaSameList";
import areaNoSameList from "./areaNoSameList";
import addComplainList from "./addComplainList";
import mobileList from "./mobileList";
import util from "@js/util.js";
import followDetail from "./followDetail";
import eventInfo from "../shequzhili/event/cpts/event-info";
import awoList from "@/views/modules/shequzhili/event/cpts/awoList.vue"
export default {
components: {formList, followDetail,eventInfo,areaSameList,mobileList,areaNoSameList},
components: {formList, followDetail,eventInfo,areaSameList,mobileList,areaNoSameList,addComplainList,awoList},
data() {
return {
searchH: 20,
formData: {
queryDateStart: "",
queryDateEnd: "",
@ -305,6 +345,8 @@ export default {
addressData:[],
mobileData:[],
addressMobileData:[],
addComplainData:[],
eventCategorys:[],
categoryPie: {},
@ -322,6 +364,7 @@ export default {
showAreaSameEventList: false,
showMobileEventList: false,
showAreaNoSameEventList: false,
showAddEventList: false,
recId: "",
departId:"",
@ -329,14 +372,14 @@ export default {
eventId: "",
eventDetailData: {},
pageType: "info",
pageType: "info",
mergeObj: {},
mergeArr: ['address'],
categoryPieOption:{
tooltip: {
trigger: 'item'
@ -351,7 +394,7 @@ export default {
type: 'pie',
radius: '80%',
data: [
],
emphasis: {
itemStyle: {
@ -363,7 +406,7 @@ export default {
}
]
},
communityOption : {
color: ['#5470C6', '#91CC75'],
tooltip: {
@ -516,9 +559,9 @@ export default {
itemStyle: {
normal: {
//
color: function(params) {
var colorList = ['#00BFFF', '#800080', '#008080', '#FF8C00', '#FF3333', '#6600CC', '#00FF00', '#4682B4', '#282828', '#FF4500'];
return colorList[params.dataIndex]
color: function(params) {
var colorList = ['#00BFFF', '#800080', '#008080', '#FF8C00', '#FF3333', '#6600CC', '#00FF00', '#4682B4', '#282828', '#FF4500'];
return colorList[params.dataIndex]
}
},
},
@ -614,7 +657,7 @@ export default {
},
methods: {
initEcharts() {
if(this.categoryCountShow){
this.categoryPie= echarts.init(document.getElementById("categoryPie"));
this.categoryPie.setOption(this.categoryPieOption);
@ -632,7 +675,7 @@ export default {
than.handelClickCommunityChart(params);
});
}
if(this.departCountShow && this.agencyLevel!='community'){
this.departChart= echarts.init(document.getElementById("departChart"));
this.departChart.setOption(this.departOption);
@ -733,7 +776,7 @@ export default {
this.handleClose();
this.getTableData();
},
//
async getOrgData() {
@ -751,7 +794,7 @@ export default {
this.$message.error(msg);
}
},
//
async handleSearch(val) {
console.log(this.formData);
@ -767,6 +810,7 @@ export default {
this.addressData=[]
this.mobileData=[]
this.addressMobileData=[]
this.addComplainData=[]
this.eventCategorys=[]
@ -800,7 +844,7 @@ export default {
if (code != 0) {
this.$message.info(internalMsg);
return;
}
}
if (!data) {
return;
}
@ -827,7 +871,7 @@ export default {
const community = this.report.communityCount[key];
this.communityOption.xAxis[0].data.push(community.name);
const recObject = {
id: community.id,
value: community.count
@ -849,7 +893,7 @@ export default {
};
this.departOption.series[0].data.push(recObject);
this.departOption.series[1].data.push(depart.count);
});
@ -883,6 +927,11 @@ export default {
return item;
})
: [];
this.addComplainData = this.report.awoEvents
? this.report.awoEvents.map(item => {
return item;
})
: [];
this.eventCategorys = this.report.eventCategorys
? this.report.eventCategorys.map(item => {
@ -900,7 +949,7 @@ export default {
if (this.report && this.report.communityCount && Object.keys(this.report.communityCount).length > 0) {
this.communityCountShow = true;
}
if (this.report && this.report.departCount && Object.keys(this.report.departCount).length > 0) {
this.departCountShow = true;
}
@ -938,6 +987,11 @@ export default {
this.cleanSearchForm();
this.showAreaNoSameEventList = true;
},
handelMoreAddComplainData(){
this.hiddenAllDialog();
this.cleanSearchForm();
this.showAddEventList = true;
},
clickMobileData(row, column){
this.hiddenAllDialog();
@ -952,6 +1006,10 @@ export default {
this.cleanSearchForm();
this.address = row.address;
},
clickAwoFlagData(row, column){
this.hiddenAllDialog();
this.$refs.awoList.open(row)
},
cleanSearchForm(){
this.departId ='';
@ -959,6 +1017,7 @@ export default {
this.recId ='';
this.address ='';
this.mobile ='';
this.awo_flag ='';
},
hiddenAllDialog(){
@ -967,6 +1026,7 @@ export default {
this.showAreaSameEventList = false;
this.showMobileEventList = false;
this.showAreaNoSameEventList = false;
this.showAddEventList = false;
},
getSpanArr(data) {
@ -976,15 +1036,15 @@ export default {
data.forEach((item, index) => {
// index == 0 push 1
if(index === 0) {
this.mergeObj[key].push(1);
this.mergeObj[key].push(1);
} else {
// count +1 push 0
if(item[key] === data[index - 1][key]) {
if(item[key] === data[index - 1][key]) {
this.mergeObj[key][count] += 1;
this.mergeObj[key].push(0);
} else {
//
count = index; //
//
count = index; //
this.mergeObj[key].push(1); // push 1
}
}
@ -994,13 +1054,13 @@ export default {
// { , , , }
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
//
if(this.mergeArr.indexOf(column.property) !== -1) {
// 0
if(this.mergeObj[column.property][rowIndex]) {
if(this.mergeArr.indexOf(column.property) !== -1) {
// 0
if(this.mergeObj[column.property][rowIndex]) {
return [this.mergeObj[column.property][rowIndex], 1]
} else {
// 0
return [0, 0];
return [0, 0];
}
}
}

80
src/views/modules/shequzhili/event/cpts/awoList.vue

@ -0,0 +1,80 @@
<template>
<el-dialog
:destroy-on-close="true"
:modal="true"
:visible.sync="showDialog"
width="60%"
top="5vh"
@close="handleClose"
title="追加内容投诉"
>
<el-table :data="tableData" :height="500" border class="m-table-item" style="width: 100%">
<el-table-column align="center" label="序号" type="index" width="50"/>
<el-table-column prop="workOrderId" label="工单号" width="200"/>
<el-table-column prop="addtionalContent" label="追加内容" show-overflow-tooltip/>
<el-table-column prop="senderName" label="发送人"/>
<el-table-column prop="senderTime" label="发送时间"/>
<el-table-column prop="subOrgName" label="下级单位" show-overflow-tooltip/>
</el-table>
<div>
<el-pagination
:current-page.sync="pageNo"
:page-size="parseInt(pageSize)"
:page-sizes="[20, 50, 100, 200]"
:total="total"
layout="sizes, prev, pager, next, total"
@size-change="handleSizeChange" @current-change="handleCurrentChange"
>
</el-pagination>
</div>
</el-dialog>
</template>
<script>
export default {
name: "awoList",
data() {
return {
tableData: [],
showDialog: false,
pageSize: 20,
pageNo: 1,
total: 0
}
},
methods: {
open({icEventId,eventId}) {
this.id = icEventId || eventId
this.showDialog = true
this.getList()
},
handleClose() {
this.showDialog = false
},
handleSizeChange(val) {
this.pageSize = val;
this.getList();
},
handleCurrentChange(val) {
this.pageNo = val;
this.getList();
},
getList() {
let params = {
icEventId: this.id,
pageSize: this.pageSize,
pageNo: this.pageNo
}
this.$http.get('/governance/icEventAwo/page?' + this.$paramsFormat(params)).then((res) => {
this.tableData = res.data.data.list
this.total = res.data.data.total
})
}
}
}
</script>
<style scoped>
</style>

52
src/views/modules/shequzhili/event/eventList.vue

@ -107,13 +107,26 @@
<div class="div_btn">
<el-button size="small" type="primary" @click="handleAdd">新增</el-button>
<el-button class="diy-button--white" size="small" @click="handleExportModule('room')">下载模板</el-button>
<el-upload :headers="$getElUploadHeaders()" ref="upload" class="upload-btn" action="uploadUlr"
:limit="1" :accept="'.xls,.xlsx'" :with-credentials="true" :show-file-list="false"
:auto-upload="true" :on-progress="handleProgress" :on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload" :http-request="uploadHttpRequest"
style="display: inline-block;margin:0px 10px">
<el-button size="small" class="diy-button--white" :loading="importLoading">导入</el-button>
</el-upload>
<el-dropdown size="small" split-button type="primary" style="margin: 0 10px; height: 30px"
@command="(command) => importTypeChange(command)">
导入
<el-dropdown-menu slot="dropdown">
<el-upload :headers="$getElUploadHeaders()" ref="upload" class="upload-btn" action="uploadUlr"
:limit="1" :accept="'.xls,.xlsx'" :with-credentials="true" :show-file-list="false"
:auto-upload="true" :on-progress="handleProgress" :on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload" :http-request="uploadHttpRequest">
<el-dropdown-item command="1">普通工单</el-dropdown-item>
</el-upload>
<el-upload :headers="$getElUploadHeaders()" ref="upload" class="upload-btn" action="uploadUlr"
:limit="1" :accept="'.xls,.xlsx'" :with-credentials="true" :show-file-list="false"
:auto-upload="true" :on-progress="handleProgress" :on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload" :http-request="uploadHttpRequest">
<el-dropdown-item command="2">追加工单</el-dropdown-item>
</el-upload>
</el-dropdown-menu>
</el-dropdown>
<!-- <el-button size="small" class="diy-button&#45;&#45;white" :loading="importLoading">导入</el-button>-->
<el-button @click="handleExport" class="diy-button--white" size="small">导出</el-button>
<el-dropdown size="small" split-button type="primary" style="margin: 0 10px; height: 30px"
@command="(command) => handleMarkDiffcult(command)">
@ -147,6 +160,11 @@
label="接收时间" />
<el-table-column prop="eventContent" label="问题描述" width="140" align="center"
:show-overflow-tooltip="true" />
<el-table-column prop="eventContent" label="追加" width="80" align="center">
<template slot-scope="{row}">
<a @click="showAwoList(row)">{{row.awoNum}}</a>
</template>
</el-table-column>
<!-- <el-table-column prop="imageList" align="center" width="80" label="图片">
<template slot-scope="scope">
<el-image v-if="scope.row.imageList && scope.row.imageList.length > 0"
@ -239,6 +257,7 @@
<el-button size="small" @click="showVoice = false">取消</el-button>
</div>
</el-dialog>
<awoList ref="awoList"/>
</div>
</template>
@ -247,10 +266,11 @@ import { requestPost } from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick";
import { mapGetters } from "vuex";
import eventInfo from "./cpts/event-info";
import awoList from "./cpts/awoList.vue";
import axios from "axios";
export default {
components: { eventInfo },
components: { eventInfo,awoList },
data() {
// let endDisabledDate = (time) => {
@ -360,7 +380,8 @@ export default {
showVoice: false,
selVoiceUrl: "",
multipleSelection: [],
importLoading: false
importLoading: false,
importType: "1"
};
},
computed: {
@ -593,6 +614,9 @@ export default {
}
return fileType && isLt1M;
},
importTypeChange(val) {
this.importType = val
},
async uploadHttpRequest(file) {
this.importLoading = true;
this.importBtnTitle = '正在上传中...';
@ -609,8 +633,13 @@ export default {
const formData = new FormData(); //FormDataappend('key', value)
formData.append('file', file.file); //
formData.append('code', ''); //
let url = '/governance/icEvent/importEvent'
if (this.importType == 2) {
url = '/governance/icEvent/importAwo'
}
console.log(url)
await this.$http
.post('/governance/icEvent/importEvent', formData)
.post(url, formData)
.then(res => {
if (res.data.code == 0 && res.data.msg == 'success') {
const data = res.data.data;
@ -836,6 +865,9 @@ export default {
});
}
},
showAwoList(row) {
this.$refs.awoList.open(row)
}
},
};
</script>

Loading…
Cancel
Save