Browse Source

修改事件回复,增加指派功能,移除项目、议题和服务

V1.0
luyan 2 years ago
parent
commit
cd040031b8
  1. 1146
      src/views/modules/shequzhili/event/cpts/add.vue
  2. 791
      src/views/modules/shequzhili/event/cpts/event-detail.vue
  3. 1161
      src/views/modules/shequzhili/event/cpts/event-info.vue
  4. 90
      src/views/modules/shequzhili/event/cpts/myCascader.vue
  5. 243
      src/views/modules/shequzhili/event/cpts/process-form-designate.vue
  6. 188
      src/views/modules/shequzhili/event/cpts/process-form-replay-end.vue
  7. 400
      src/views/modules/shequzhili/event/cpts/process-form-replay.vue
  8. 398
      src/views/modules/shequzhili/event/cpts/process-form.vue
  9. 1461
      src/views/modules/shequzhili/event/eventList.vue
  10. 804
      src/views/modules/shequzhili/issue/issueAuditList.vue

1146
src/views/modules/shequzhili/event/cpts/add.vue

File diff suppressed because it is too large

791
src/views/modules/shequzhili/event/cpts/event-detail.vue

@ -1,269 +1,143 @@
<template>
<div class="">
<el-card
:style="containerStyle"
:class="{ 'box-card': source === 'visiual' }"
v-if="showType == ''"
>
<h3 v-if="source === 'manage'" class="h3-title">
<img
src="../../../../../assets/images/index/title-icon-sqzl.png"
width="30px"
height="30px"
alt=""
/>
事件详情
</h3>
<div class="m-detail-main">
<div class="m-info">
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">所属网格</span>
<span>{{ info.gridName }}</span>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">上报时间</span>
<span>{{ info.happenTime }}</span>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">事件内容</span>
<span>{{ info.eventContent }}</span>
</div>
<div
v-if="info.imageList && info.imageList.length > 0"
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">图片</span>
<img
:src="src"
:key="src"
style="width: 150px; height: 150px; padding-right: 10px"
v-for="src in info.imageList"
@click="watchImg(src)"
/>
</div>
<div
v-if="info.voiceList && info.voiceList.length > 0"
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">语音</span>
<audio controls>
<source
:src="item.url"
type=""
:key="item.url"
v-for="item in info.voiceList"
/>
</audio>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">反映渠道</span>
<span>{{ info.sourceTypeName }}</span>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">地址</span>
<span>{{ info.address }}</span>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">上报人</span>
<span>{{ info.name }}</span>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">联系电话</span>
<span>{{ info.mobile }}</span>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">证件号</span>
<span>{{ info.idCard ? info.idCard : "--" }}</span>
</div>
<div
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">标记</span>
<span>{{ info.markTypeName || "--" }}</span>
</div>
<div
v-if="info.operationType === '1'"
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">已立项</span>
<div class="line" @click="handleToProject"><i class="el-icon-view"></i> 查看项目</div>
</div>
<div
v-if="info.operationType === '2'"
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">已转需求</span>
<div class="line" @click="handleToDemand"><i class="el-icon-view"></i>查看需求</div>
</div>
<div
v-if="info.operationType === '3'"
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">已转议题</span>
<div class="line" @click="handleToIssue">
<i class="el-icon-view"></i> 查看议题
<div class="">
<el-card :style="containerStyle" :class="{ 'box-card': source === 'visiual' }" v-if="showType == ''">
<h3 v-if="source === 'manage'" class="h3-title">
<img src="../../../../../assets/images/index/title-icon-sqzl.png" width="30px" height="30px" alt="" />
事件详情
</h3>
<div class="m-detail-main">
<div class="m-info">
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">所属组织</span>
<span>{{ info.gridName }}</span>
</div>
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">接收时间</span>
<span>{{ info.happenTime }}</span>
</div>
<div :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">事件内容</span>
<span>{{ info.eventContent }}</span>
</div>
<div v-if="info.imageList && info.imageList.length > 0" :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">图片</span>
<img :src="src" :key="src" style="width: 150px; height: 150px; padding-right: 10px"
v-for="src in info.imageList" @click="watchImg(src)" />
</div>
<div v-if="info.voiceList && info.voiceList.length > 0" :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">语音</span>
<audio controls>
<source :src="item.url" type="" :key="item.url" v-for="item in info.voiceList" />
</audio>
</div>
<div :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">上报渠道</span>
<span>{{ info.sourceTypeName }}</span>
</div>
<div :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">详细地址</span>
<span>{{ info.address }}</span>
</div>
<div :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">联系人</span>
<span>{{ info.name }}</span>
</div>
<div :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">联系电话</span>
<span>{{ info.mobile }}</span>
</div>
<div :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">标记</span>
<span>{{ info.markTypeName || "--" }}</span>
</div>
<div v-if="info.satisfactionName" :class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]">
<span class="u-info-title-2">满意度</span>
<div>{{ info.satisfactionName }}</div>
</div>
</div>
</div>
</div>
<div
v-if="info.satisfactionName"
:class="[
'm-info-prop',
{ 'm-info-prop-vis': source === 'visiual' },
]"
>
<span class="u-info-title-2">满意度</span>
<div>{{ info.satisfactionName }}</div>
</div>
</div>
</div>
<!--
<!--
显示关闭
1状态=完成 (已评价)||(没评价&&不是本人)
2状态=未完成 有操作id -->
<div
v-if="
(info.status === 'processing' && info.operationId) ||
(info.status === 'closed_case' &&
(info.satisfactionName ||
(!info.satisfactionName && user.id != info.createdUserId)))
"
class="div-btn-info"
>
<el-button size="small" @click="handleCloseEvent">关闭</el-button>
</div>
</el-card>
<el-card
:class="{ 'box-card': source === 'visiual' }"
v-if="
info.status === 'closed_case' &&
!info.satisfactionName &&
user.id === info.createdUserId
"
>
<h3>满意度评价</h3>
<div class="m-detail-main">
<div class="m-info">
<div class="div-satisfy">
<div>
<img
:src="selBad ? badurl_light : badurl"
@click="clickSatisfy('bad')"
/>
<div class="tip-satisfy">不满意</div>
<div v-if="(info.status === 'processing' && info.operationId) ||
(info.status === 'closed_case' &&
(info.satisfactionName ||
(!info.satisfactionName && user.id != info.createdUserId)))
" class="div-btn-info">
<el-button size="small" @click="handleCloseEvent">关闭</el-button>
</div>
<div>
<img
:src="selGood ? goodurl_light : goodurl"
@click="clickSatisfy('good')"
/>
<div class="tip-satisfy">满意</div>
</el-card>
<el-card :class="{ 'box-card': source === 'visiual' }" v-if="info.status === 'closed_case' &&
!info.satisfactionName &&
user.id === info.createdUserId
">
<h3>满意度评价</h3>
<div class="m-detail-main">
<div class="m-info">
<div class="div-satisfy">
<div>
<img :src="selBad ? badurl_light : badurl" @click="clickSatisfy('bad')" />
<div class="tip-satisfy">不满意</div>
</div>
<div>
<img :src="selGood ? goodurl_light : goodurl" @click="clickSatisfy('good')" />
<div class="tip-satisfy">满意</div>
</div>
<div>
<img :src="selPerfect ? perfecturl_light : perfecturl" @click="clickSatisfy('perfect')" />
<div class="tip-satisfy">非常满意</div>
</div>
</div>
</div>
</div>
<div>
<img
:src="selPerfect ? perfecturl_light : perfecturl"
@click="clickSatisfy('perfect')"
/>
<div class="tip-satisfy">非常满意</div>
<div class="div-btn">
<el-button size="small" @click="handleCloseEvent">关闭</el-button>
<el-button style="margin-left: 20px" type="primary" size="small"
@click="handleComfirmSatisfy">确定</el-button>
</div>
</el-card>
<el-dialog :visible.sync="showSatisfy" :close-on-click-modal="false" :close-on-press-escape="false" title="满意度评价"
width="550px" top="15vh" class="dialog-h" @closed="showSatisfy = false">
<div class="div-btn">
<el-button size="small" @click="showSatisfy = false">关闭</el-button>
<el-button style="margin-left: 20px" type="primary" size="small"
@click="handleComfirmSatisfy">确定</el-button>
</div>
</div>
</div>
</div>
<div class="div-btn">
<el-button size="small" @click="handleCloseEvent">关闭</el-button>
<el-button
style="margin-left: 20px"
type="primary"
size="small"
@click="handleComfirmSatisfy"
>确定</el-button
>
</div>
</el-card>
<el-dialog
:visible.sync="showSatisfy"
:close-on-click-modal="false"
:close-on-press-escape="false"
title="满意度评价"
width="550px"
top="15vh"
class="dialog-h"
@closed="showSatisfy = false"
>
<div class="div-btn">
<el-button size="small" @click="showSatisfy = false">关闭</el-button>
<el-button
style="margin-left: 20px"
type="primary"
size="small"
@click="handleComfirmSatisfy"
>确定</el-button
>
</div>
</el-dialog>
</div>
</el-dialog>
</div>
</template>
<script>
@ -273,224 +147,227 @@ import projectInfo from "../../xiangmu/cpts/project-info";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
user: {},
projectPageType: "info",
info: {},
eventDetailCopy: {},
showType: "",
projectId: "",
demandForm: {
gridId: "",
categoryCode: "",
parentCode: "",
content: "",
reportType: "",
reportUserName: "",
reportUserMobile: "",
reportTime: "",
wantServiceTime: "",
demandUserId: "",
demandUserName: "",
demandUserMobile: "",
},
//
showSatisfy: false,
selBad: false,
selGood: false,
selPerfect: false,
badurl: require("@/assets/img/satisfy-images/face1.png"),
badurl_light: require("@/assets/img/satisfy-images/face1_light.png"),
goodurl: require("@/assets/img/satisfy-images/face2.png"),
goodurl_light: require("@/assets/img/satisfy-images/face2_light.png"),
perfecturl: require("@/assets/img/satisfy-images/face3.png"),
perfecturl_light: require("@/assets/img/satisfy-images/face3_light.png"),
};
return {
user: {},
projectPageType: "info",
info: {},
eventDetailCopy: {},
showType: "",
projectId: "",
demandForm: {
gridId: "",
categoryCode: "",
parentCode: "",
content: "",
reportType: "",
reportUserName: "",
reportUserMobile: "",
reportTime: "",
wantServiceTime: "",
demandUserId: "",
demandUserName: "",
demandUserMobile: "",
},
//
showSatisfy: false,
selBad: false,
selGood: false,
selPerfect: false,
badurl: require("@/assets/img/satisfy-images/face1.png"),
badurl_light: require("@/assets/img/satisfy-images/face1_light.png"),
goodurl: require("@/assets/img/satisfy-images/face2.png"),
goodurl_light: require("@/assets/img/satisfy-images/face2_light.png"),
perfecturl: require("@/assets/img/satisfy-images/face3.png"),
perfecturl_light: require("@/assets/img/satisfy-images/face3_light.png"),
};
}
export default {
name: "issueInfo",
props: {
eventId: {
type: String,
default: "",
},
type: {
type: String,
default: "info",
name: "issueInfo",
props: {
eventId: {
type: String,
default: "",
},
type: {
type: String,
default: "info",
},
eventDetailData: {
type: Object,
default() {
return {};
},
},
source: {
//manage visiual
type: String,
default: "manage",
},
},
eventDetailData: {
type: Object,
default() {
return {};
},
},
source: {
//manage visiual
type: String,
default: "manage",
components: {
foldText,
projectInfo,
},
},
components: {
foldText,
projectInfo,
},
data: iniData,
watch: {},
created() {},
computed: {
containerStyle() {
if (this.type === 'info') {
return {
minHeight: 'calc(88vh - 50px)',
overflow: 'auto',
position: 'relative'
}
} else {
return {}
}
}
},
mounted() {
this.user = this.$store.state.user;
if (this.eventId) {
this.info = JSON.parse(JSON.stringify(this.eventDetailData));
//
// if (this.info.status === 'closed_case' && this.info.satisfactionName) {
// this.changeSatisfyType(this.info.satisfaction)
// }
}
// this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.showType = "";
},
handleCloseEvent() {
this.$emit("handleClose");
},
async getApiData() {},
handleToProject() {
this.$emit("handleToProject");
// if (this.info.status === 'processing') {
// this.projectPageType = 'edit'
// } else {
// this.projectPageType = 'info'
// }
// this.showType = 'project'
},
handleToDemand() {
this.$emit("handleToDemand");
},
handleToIssue() {
this.$emit("handleToIssue");
},
//
handleSatisfy() {
this.showSatisfy = true;
},
clickSatisfy(type) {
if (this.info.satisfactionName) {
return false;
}
this.changeSatisfyType(type);
data: iniData,
watch: {},
created() { },
computed: {
containerStyle() {
if (this.type === 'info') {
return {
minHeight: 'calc(88vh - 50px)',
overflow: 'auto',
position: 'relative'
}
} else {
return {}
}
}
},
changeSatisfyType(type) {
if (type === "bad") {
this.selGood = false;
this.selPerfect = false;
this.selBad = true;
} else if (type === "good") {
this.selGood = true;
this.selPerfect = false;
this.selBad = false;
} else if (type === "perfect") {
this.selGood = false;
this.selPerfect = true;
this.selBad = false;
}
mounted() {
this.user = this.$store.state.user;
if (this.eventId) {
this.info = JSON.parse(JSON.stringify(this.eventDetailData));
//
// if (this.info.status === 'closed_case' && this.info.satisfactionName) {
// this.changeSatisfyType(this.info.satisfaction)
// }
}
// this.getApiData();
},
async handleComfirmSatisfy() {
let satisfyLevel = "";
if (!this.selBad && !this.selGood && !this.selPerfect) {
this.$message.info("请选择评价级别");
} else {
if (this.selBad) {
satisfyLevel = "bad";
} else if (this.selGood) {
satisfyLevel = "good";
} else if (this.selPerfect) {
satisfyLevel = "perfect";
}
}
const url = "/governance/icEvent/comment";
let params = {
icEventId: this.eventId,
satisfaction: satisfyLevel,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.$message.success("评价成功");
this.info.satisfactionName =
satisfyLevel == "bad"
? "不满意"
: satisfyLevel == "good"
? "满意"
: "非常满意";
this.showSatisfy = false;
} else {
this.$message.error(msg);
}
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.showType = "";
},
handleCloseEvent() {
this.$emit("handleClose");
},
async getApiData() { },
handleToProject() {
this.$emit("handleToProject");
// if (this.info.status === 'processing') {
// this.projectPageType = 'edit'
// } else {
// this.projectPageType = 'info'
// }
// this.showType = 'project'
},
handleToDemand() {
this.$emit("handleToDemand");
},
handleToIssue() {
this.$emit("handleToIssue");
},
//
handleSatisfy() {
this.showSatisfy = true;
},
clickSatisfy(type) {
if (this.info.satisfactionName) {
return false;
}
this.changeSatisfyType(type);
},
changeSatisfyType(type) {
if (type === "bad") {
this.selGood = false;
this.selPerfect = false;
this.selBad = true;
} else if (type === "good") {
this.selGood = true;
this.selPerfect = false;
this.selBad = false;
} else if (type === "perfect") {
this.selGood = false;
this.selPerfect = true;
this.selBad = false;
}
},
async handleComfirmSatisfy() {
let satisfyLevel = "";
if (!this.selBad && !this.selGood && !this.selPerfect) {
this.$message.info("请选择评价级别");
} else {
if (this.selBad) {
satisfyLevel = "bad";
} else if (this.selGood) {
satisfyLevel = "good";
} else if (this.selPerfect) {
satisfyLevel = "perfect";
}
}
const url = "/governance/icEvent/comment";
let params = {
icEventId: this.eventId,
satisfaction: satisfyLevel,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.$message.success("评价成功");
this.info.satisfactionName =
satisfyLevel == "bad"
? "不满意"
: satisfyLevel == "good"
? "满意"
: "非常满意";
this.showSatisfy = false;
} else {
this.$message.error(msg);
}
},
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.m-info {
padding-left: 0px !important;
padding-left: 0px !important;
}
.m-info-prop {
margin: 25px 0 !important;
padding-left: 0px !important;
&::before {
content: "";
display: block;
position: absolute;
top: 9px;
left: 0;
width: 7px;
height: 7px;
background: none !important;
border-radius: 3px;
margin-right: 10px;
}
margin: 25px 0 !important;
padding-left: 0px !important;
&::before {
content: "";
display: block;
position: absolute;
top: 9px;
left: 0;
width: 7px;
height: 7px;
background: none !important;
border-radius: 3px;
margin-right: 10px;
}
}
</style>

1161
src/views/modules/shequzhili/event/cpts/event-info.vue

File diff suppressed because it is too large

90
src/views/modules/shequzhili/event/cpts/myCascader.vue

@ -1,62 +1,54 @@
<template>
<div>
<el-form :model="form" >
<div>
<el-form :model="form">
<el-form-item>
<el-cascader class="cell-width-2"
ref="myCascader"
v-model="form.selCategoryArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
clearable
@change="handleChangeCate"></el-cascader>
<el-cascader class="cell-width-2" ref="myCascader" v-model="form.selCategoryArray" :key="iscascaderShow"
:options="casOptions" :props="optionProps" :show-all-levels="false" clearable
@change="handleChangeCate"></el-cascader>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
export default {
data() {
return {
form:{
selCategoryArray:{}
data() {
return {
form: {
selCategoryArray: {}
},
selCateObj: {},
iscascaderShow: 0
};
},
props: {
casOptions: {
type: Array,
default: () => []
},
selCateObj:{},
iscascaderShow:0
};
},
props:{
casOptions:{
type:Array,
default:()=>[]
optionProps: {
type: Object,
default: () => { }
}
},
optionProps:{
type:Object,
default:()=>{}
}
},
created() {},
methods: {
handleChangeCate(){
if(this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0]){
this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0].data
}else{
this.selCateObj = {}
created() { },
methods: {
handleChangeCate() {
if (this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0]) {
this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0].data
} else {
this.selCateObj = {}
}
this.$emit('handleChangeCate', this.selCateObj)
}
this.$emit('handleChangeCate',this.selCateObj)
}
},
mounted(){
++this.iscascaderShow;
},
components: {},
computed: {},
watch: {},
},
mounted() {
++this.iscascaderShow;
},
components: {},
computed: {},
watch: {},
};
</script>
<style lang="scss" scoped>
</style>>
<style lang="scss" scoped></style>>

243
src/views/modules/shequzhili/event/cpts/process-form-designate.vue

@ -0,0 +1,243 @@
<!--
* @Author: yanLu xgktv007@163.com
* @Date: 2023-09-05 10:21:34
* @LastEditors: yanLu xgktv007@163.com
* @LastEditTime: 2023-09-05 10:21:34
* @Description: 事件转办表单
*
-->
<template>
<div class="search">
<el-form ref="ref_form1" :inline="false" :model="formData" :rules="dataRule">
<el-form-item label="事件分类" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
prop="categoryList">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-cascader class="cell-width-2" ref="myCascader" v-model="selCategoryArray" :key="iscascaderShow"
:options="casOptions" :props="optionProps" :show-all-levels="false"
@change="handleChangeCate"></el-cascader>
</div>
</el-form-item>
<el-form-item label="处理部门" prop="agencyId" label-width="150px" :class="{ 'form-item': source === 'visiual' }">
<el-cascader class="cell-width-2" ref="myCascader" v-model="agencyIdArray" :options="orgOptions"
:props="orgOptionProps" :show-all-levels="false" @change="handleChangeAgency"></el-cascader>
</el-form-item>
<el-form-item label="转办意见" prop="content" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
style="display: block">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-input class="cell-width-area" type="textarea" maxlength="500" show-word-limit :rows="5"
placeholder="请输入转办意见,不超过500字" v-model="formData.content"></el-input>
</div>
</el-form-item>
<el-form-item label="办结时限" prop="timeLimit" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
style="display: block">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-date-picker v-model="formData.timeLimit" class="cell-width-1" type="datetime" placeholder="办结时限"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</div>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
let loading; //
export default {
data() {
return {
btnDisable: false,
formData: {
operationType: "5", //[0: 5 6]
content: "",//
timeLimit: "",//
categoryList: [],//
agencyId: "" //
},
orgOptions: [],
orgOptionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
agencyIdArray: [],
status: false,
okflag: false,
eventDetailCopy: {},
selCategoryArray: [],
casOptions: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: "id",
label: "name",
children: "subCategory",
},
dataRule: {
content: [
{ required: true, message: "回复内容不能为空", trigger: "blur" },
],
categoryList: [
{ required: true, message: "事件分类不能为空", trigger: "blur" },
],
agencyId: [
{ required: true, message: "处理部门不能为空", trigger: "blur" },
],
timeLimit: [
{ required: true, message: "办结时限不能为空", trigger: "blur" },
]
}
};
},
components: {},
computed: {},
props: {
eventId: {
type: String,
default: "",
},
eventDetailData: {
type: Object,
default() {
return {};
},
},
source: {
//manage visiual
type: String,
default: "manage",
},
},
created() {
},
async mounted() {
const { user } = this.$store.state;
this.agencyId = user.agencyId;
this.getOrgTreeList();
this.getCategoryList();
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
// eventDetailCopy
if (
this.eventDetailCopy.parentCategoryId &&
this.eventDetailCopy.categoryId
) {
this.selCategoryArray.push(this.eventDetailCopy.parentCategoryId, this.eventDetailCopy.categoryId)
}
}
},
methods: {
//
async getOrgTreeList() {
const url = "/gov/org/customeragency/agencygridtree"
let params = {
agencyId: this.agencyId,
purpose: "query"
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.orgOptions = []
this.orgOptions.push(data)
} else {
this.$message.error(msg)
}
},
async getCategoryList() {
const url = "/governance/issueprojectcategorydict/list";
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
let treeDataNew = this.filterTree(data);
//
++this.iscascaderShow;
this.casOptions = [];
this.casOptions = treeDataNew;
} else {
this.$message.error(msg);
}
},
handleChangeAgency(val) {
let obj = this.$refs["myCascader"].getCheckedNodes()[0].data
if (obj) {
this.formData.orgType = obj.level === 'grid' ? 'grid' : 'agency'
this.formData.orgId = obj.agencyId
} else {
this.form.orgType = ''
this.form.orgId = ''
}
},
handleChangeCate() {
if (this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0]) {
this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0].data
} else {
this.selCateObj = {}
}
},
//
filterTree(arr) {
let childs = arr;
for (let i = childs.length; i--; i > 0) {
if (childs[i].subCategory) {
if (childs[i].subCategory.length) {
this.filterTree(childs[i].subCategory);
} else {
delete childs[i].subCategory;
}
}
}
return arr;
},
async getReplayInfo() {
this.okflag = false;
this.$refs["ref_form1"].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
} else {
if (!this.selCateObj || !this.selCateObj.id) {
this.$message.error("请选择事件分类");
return false;
}
this.formData.status = "processing";
this.formData.categoryId = this.selCateObj.id;
this.formData.categoryList = [];
this.formData.categoryList.push(this.selCateObj);
this.okflag = true;
}
});
},
resetData() {
this.agencyIdArray = []
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
};
</script>
<style lang='scss' scoped>
@import "@/assets/scss/modules/visual/a_customize.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

188
src/views/modules/shequzhili/event/cpts/process-form-replay-end.vue

@ -0,0 +1,188 @@
<!--
* @Author: yanLu xgktv007@163.com
* @Date: 2023-09-05 10:21:34
* @LastEditors: yanLu xgktv007@163.com
* @LastEditTime: 2023-09-05 10:21:34
* @Description: 事件回复
*
*
-->
<template>
<div class="search">
<el-form ref="ref_form2" :inline="false" :model="formData" :rules="dataRule">
<el-form-item label="事件分类" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
prop="categoryList">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-cascader class="cell-width-2" ref="myCascader" v-model="selCategoryArray" :key="iscascaderShow"
:options="casOptions" :props="optionProps" :show-all-levels="false"
@change="handleChangeCate"></el-cascader>
</div>
</el-form-item>
<el-form-item label="回复内容" prop="content" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
style="display: block">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-input class="cell-width-area" type="textarea" maxlength="500" show-word-limit :rows="5"
placeholder="请输入回复内容,不超过500字" v-model="formData.content"></el-input>
</div>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
let loading; //
export default {
data() {
return {
btnDisable: false,
formData: {
operationType: '6', //[0: 5 6]
content: '',
status: 'closed_case',
categoryList: [],
},
status: false,
okflag: false,
eventDetailCopy: {},
selCategoryArray: [],
casOptions: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: 'id',
label: 'name',
children: 'subCategory',
},
dataRule: {
content: [
{ required: true, message: '回复内容不能为空', trigger: 'blur' },
],
categoryList: [
// { required: true, message: '', trigger: 'blur' },
]
}
};
},
components: {},
computed: {},
props: {
eventId: {
type: String,
default: '',
},
eventDetailData: {
type: Object,
default() {
return {};
},
},
source: {
//manage visiual
type: String,
default: 'manage',
},
},
watch: {},
created() {},
async mounted() {
this.getCategoryList();
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
// eventDetailCopy
if (this.eventDetailCopy.parentCategoryId && this.eventDetailCopy.categoryId) {
this.formData.categoryId = this.eventDetailCopy.categoryId
this.selCategoryArray.push(this.eventDetailCopy.parentCategoryId, this.eventDetailCopy.categoryId)
}
}
},
methods: {
async getCategoryList() {
const url = '/governance/issueprojectcategorydict/list';
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
let treeDataNew = this.filterTree(data);
//
++this.iscascaderShow;
this.casOptions = [];
this.casOptions = treeDataNew;
} else {
this.$message.error(msg);
}
},
handleChangeCate() {
if (this.selCateObj = this.$refs['myCascader'].getCheckedNodes()[0]) {
this.selCateObj = this.$refs['myCascader'].getCheckedNodes()[0].data
} else {
this.selCateObj = {}
}
},
//
filterTree(arr) {
let childs = arr;
for (let i = childs.length; i--; i > 0) {
if (childs[i].subCategory) {
if (childs[i].subCategory.length) {
this.filterTree(childs[i].subCategory);
} else {
delete childs[i].subCategory;
}
}
}
return arr;
},
async getReplayInfo() {
this.okflag = false;
this.$refs['ref_form2'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
} else {
if (this.status) {
if (!this.selCateObj || !this.selCateObj.id) {
this.$message.error('请选择事件分类');
return false;
}
}
if (!this.formData.categoryId) {
this.formData.categoryId = this.selCateObj.id;
}
this.formData.categoryList = [];
this.formData.categoryList.push(this.selCateObj);
this.okflag = true;
}
});
},
resetData() { },
//
startLoading() {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)', //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
};
</script>
<style lang='scss' scoped>
@import '@/assets/scss/modules/visual/a_customize.scss';
@import '@/assets/scss/modules/shequzhili/event-info.scss';
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

400
src/views/modules/shequzhili/event/cpts/process-form-replay.vue

@ -1,262 +1,204 @@
<!--
* @Author: mk 2403457699@qq.com
* @Date: 2023-07-26 16:23:24
* @LastEditors: mk 2403457699@qq.com
* @LastEditTime: 2023-08-09 10:21:34
* @Description: 事件分类回填
* @Author: yanLu xgktv007@163.com
* @Date: 2023-09-05 10:21:34
* @LastEditors: yanLu xgktv007@163.com
* @LastEditTime: 2023-09-05 10:21:34
* @Description: 事件回复
*
*
-->
<template>
<div class="search">
<el-form
ref="ref_form1"
:inline="false"
:model="formData"
:rules="dataRule"
>
<el-form-item
label="事件分类"
label-width="150px"
:class="{ 'form-item': source === 'visiual' }"
prop="categoryList"
>
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-cascader class="cell-width-2"
ref="myCascader"
v-model="selCategoryArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeCate"></el-cascader>
</div>
</el-form-item>
<el-form-item
label="回复内容"
prop="content"
label-width="150px"
:class="{ 'form-item': source === 'visiual' }"
style="display: block"
>
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-input
class="cell-width-area"
type="textarea"
maxlength="500"
show-word-limit
:rows="5"
placeholder="请输入回复内容,不超过500字"
v-model="formData.content"
></el-input>
</div>
</el-form-item>
<el-form-item
label=""
label-width="150px"
:class="{ 'form-item': source === 'visiual' }"
style="display: block"
>
<el-checkbox
:class="{ 'form-item': source === 'visiual' }"
v-model="status"
@change="handleChangeStatus"
>已完成</el-checkbox
>
</el-form-item>
</el-form>
</div>
<div class="search">
<el-form ref="ref_form1" :inline="false" :model="formData" :rules="dataRule">
<el-form-item label="事件分类" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
prop="categoryList">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-cascader class="cell-width-2" ref="myCascader" v-model="selCategoryArray" :key="iscascaderShow"
:options="casOptions" :props="optionProps" :show-all-levels="false"
@change="handleChangeCate"></el-cascader>
</div>
</el-form-item>
<el-form-item label="回复内容" prop="content" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
style="display: block">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-input class="cell-width-area" type="textarea" maxlength="500" show-word-limit :rows="5"
placeholder="请输入回复内容,不超过500字" v-model="formData.content"></el-input>
</div>
</el-form-item>
<el-form-item label="办结时限" prop="timeLimit" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
style="display: block">
<div :class="{ 'visiual-form': source === 'visiual' }">
<el-date-picker v-model="formData.timeLimit" class="cell-width-1" type="datetime" placeholder="办结时限"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</div>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
import formVltHelper from "dai-js/tools/formVltHelper";
import { isCard } from "@/utils/validate";
let loading; //
export default {
data() {
return {
btnDisable: false,
formData: {
operationType: "0", //[0: 1: 2:]
content: "",
status: "",
categoryList: [],
},
status: false,
okflag: false,
eventDetailCopy: {},
selCategoryArray:[],
casOptions: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: "id",
label: "name",
children: "subCategory",
},
dataRule:{
content: [
{ required: true, message: "回复内容不能为空", trigger: "blur" },
],
categoryList: [
// { required: true, message: "", trigger: "blur" },
],
}
};
},
components: { },
computed: {},
props: {
eventId: {
type: String,
default: "",
},
eventDetailData: {
type: Object,
default() {
return {};
},
data() {
return {
btnDisable: false,
formData: {
operationType: '0', //[0: 5 6]
content: '',
status: 'processing',
timeLimit: '',//
categoryList: [],
},
status: false,
okflag: false,
eventDetailCopy: {},
selCategoryArray: [],
casOptions: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: 'id',
label: 'name',
children: 'subCategory',
},
dataRule: {
content: [
{ required: true, message: '回复内容不能为空', trigger: 'blur' },
],
categoryList: [
// { required: true, message: '', trigger: 'blur' },
],
timeLimit: [
{ required: true, message: "办结时限不能为空", trigger: "blur" },
]
}
};
},
source: {
//manage visiual
type: String,
default: "manage",
components: {},
computed: {},
props: {
eventId: {
type: String,
default: '',
},
eventDetailData: {
type: Object,
default() {
return {};
},
},
source: {
//manage visiual
type: String,
default: 'manage',
},
},
},
watch: {},
created() {
console.log(this.source);
},
async mounted() {
this.getCategoryList();
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
// eventDetailCopy
if (
this.eventDetailCopy.parentCategoryId &&
this.eventDetailCopy.categoryId
) {
this.selCategoryArray.push( this.eventDetailCopy.parentCategoryId,this.eventDetailCopy.categoryId)
}
watch: {
}
},
methods: {
async getCategoryList() {
const url = "/governance/issueprojectcategorydict/list";
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
let treeDataNew = this.filterTree(data);
},
//
++this.iscascaderShow;
this.casOptions = [];
created() {
this.casOptions = treeDataNew;
} else {
this.$message.error(msg);
}
},
handleChangeCate() {
if(this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0]){
this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0].data
}else{
this.selCateObj = {}
async mounted() {
this.getCategoryList();
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
// eventDetailCopy
if (this.eventDetailCopy.parentCategoryId && this.eventDetailCopy.categoryId) {
this.formData.categoryId = this.eventDetailCopy.categoryId
this.selCategoryArray.push(this.eventDetailCopy.parentCategoryId, this.eventDetailCopy.categoryId)
}
}
console.log(this.selCateObj);
},
//
filterTree(arr) {
let childs = arr;
for (let i = childs.length; i--; i > 0) {
if (childs[i].subCategory) {
if (childs[i].subCategory.length) {
this.filterTree(childs[i].subCategory);
} else {
delete childs[i].subCategory;
}
}
}
return arr;
},
async getReplayInfo() {
this.okflag = false;
this.$refs["ref_form1"].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
} else {
if (this.status) {
console.log(this.selCateObj);
if (!this.selCateObj || !this.selCateObj.id) {
this.$message.error("请选择事件分类");
return false;
methods: {
async getCategoryList() {
const url = '/governance/issueprojectcategorydict/list';
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
let treeDataNew = this.filterTree(data);
//
++this.iscascaderShow;
this.casOptions = [];
this.casOptions = treeDataNew;
} else {
this.$message.error(msg);
}
this.formData.status = "closed_case";
} else {
this.formData.status = "processing";
}
this.formData.categoryId = this.selCateObj.id;
this.formData.categoryList = [];
this.formData.categoryList.push(this.selCateObj);
this.okflag = true;
}
});
},
handleChangeStatus(val){
console.log(val);
if(!val){
this.$set(this.dataRule,'categoryList',[])
}else{
this.$set(this.dataRule,'categoryList',[{ required: true, message: "事件分类不能为空", trigger: "blur" }])
}
console.log(this.dataRule);
},
resetData() {},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
handleChangeCate() {
if (this.selCateObj = this.$refs['myCascader'].getCheckedNodes()[0]) {
this.selCateObj = this.$refs['myCascader'].getCheckedNodes()[0].data
} else {
this.selCateObj = {}
}
},
//
filterTree(arr) {
let childs = arr;
for (let i = childs.length; i--; i > 0) {
if (childs[i].subCategory) {
if (childs[i].subCategory.length) {
this.filterTree(childs[i].subCategory);
} else {
delete childs[i].subCategory;
}
}
}
return arr;
},
async getReplayInfo() {
this.okflag = false;
this.$refs['ref_form1'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
} else {
if (this.status) {
if (!this.selCateObj || !this.selCateObj.id) {
this.$message.error('请选择事件分类');
return false;
}
}
if (!this.formData.categoryId) {
this.formData.categoryId = this.selCateObj.id;
}
this.formData.categoryList = [];
this.formData.categoryList.push(this.selCateObj);
this.okflag = true;
}
});
},
resetData() { },
//
startLoading() {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)', //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
},
};
</script>
<style lang='scss' scoped>
@import "@/assets/scss/modules/visual/a_customize.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
</style>
@import '@/assets/scss/modules/visual/a_customize.scss';
@import '@/assets/scss/modules/shequzhili/event-info.scss';
<style scoped>
.el-dialog__body {
padding: 0 10px 20px !important;
padding: 0 10px 20px !important;
}
</style>

398
src/views/modules/shequzhili/event/cpts/process-form.vue

@ -1,281 +1,193 @@
<template>
<div class="">
<div>
<el-form ref="ref_form1"
:inline="false"
:rules="dataRule"
class="form">
<el-form-item label="处理方式"
label-width="150px"
:class="{'form-item':source==='visiual'}"
prop="operationType">
<el-radio-group :class="{'form-item':source==='visiual'}"
v-model="operationType"
@change="handleChangeOperationType">
<el-radio v-if="!eventId"
label="4">暂不处理</el-radio>
<el-radio label="0">回复</el-radio>
<el-radio label="1">立项</el-radio>
<el-radio label="2">转服务</el-radio>
<el-radio label="3">转议题</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div v-if="operationType==='0'">
<process-form-replay ref="ref_process_form_replay"
:source="source"
:eventDetailData="eventDetailData"
:eventId="eventId"></process-form-replay>
</div>
<div v-if="operationType==='1'">
<process-form-project ref="ref_process_form_project"
:source="source"
:eventDetailData="eventDetailData"
:gridId="gridId"
:eventId="eventId"></process-form-project>
</div>
<div v-if="operationType==='2'">
<process-form-demand ref="ref_process_form_demond"
:source="source"
:eventId="eventId"
:transferObj="transferObj"
:demandUserId="demandUserId"
:demandUserName="demandUserName"
:demandUserMobile="demandUserMobile"
:eventDetailData="eventDetailData"></process-form-demand>
</div>
<div v-if="operationType==='3'">
<process-form-issue ref="ref_process_form_issue"
:source="source"
:eventDetailData="eventDetailData"
:eventId="eventId"></process-form-issue>
</div>
<div class="">
<div>
<el-form ref="ref_form1" :inline="false" :rules="dataRule" class="form">
<el-form-item label="处理方式" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
prop="operationType">
<el-radio-group :class="{ 'form-item': source === 'visiual' }" v-model="operationType"
@change="handleChangeOperationType">
<el-radio v-if="!eventId" label="4">暂不处理</el-radio>
<el-radio label="0">回复</el-radio>
<el-radio label="5">指派</el-radio>
<el-radio label="6">完成并回复</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div v-if="operationType === '0'">
<process-form-replay ref="ref_process_form_replay" :source="source" :eventDetailData="eventDetailData"
:eventId="eventId"></process-form-replay>
</div>
<div v-if="operationType === '6'">
<process-form-replay-end ref="ref_process_form_replay_end" :source="source"
:eventDetailData="eventDetailData" :eventId="eventId"></process-form-replay-end>
</div>
<div v-if="operationType === '5'">
<process-form-designate ref="ref_process_form_designate" :source="source" :eventDetailData="eventDetailData"
:eventId="eventId"></process-form-designate>
</div>
</div>
</div>
</div>
</template>
<script>
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
import processFormReplay from "./process-form-replay";
import processFormReplayEnd from "./process-form-replay-end";
import processFormProject from "./process-form-project";
import processFormDemand from "./process-form-demand";
import processFormIssue from "./process-form-issue";
import processFormDesignate from "./process-form-designate";
let loading; //
export default {
data () {
return {
casOptions: [],
iscascaderShow: 0,
selCategoryArray: [],
selCateObj: {},
optionProps: {
multiple: false,
value: 'id',
label: 'name',
children: 'subCategory',
},
operationType: '',
replayInfo: {},
demand: {},
project: {},
issueInfo: {},
okflag: false,
eventDetailCopy: {},
transferObj:{
latitude :"",
longitude :""
}
};
},
components: {
processFormReplay,
processFormProject,
processFormDemand,
processFormIssue
},
computed: {
dataRule () {
return {
operationType: [
{ required: true, message: "处理方式不能为空", trigger: "blur" },
],
};
},
},
props: {
demandUserId: {
type: String,
default: "",
data() {
return {
casOptions: [],
iscascaderShow: 0,
selCategoryArray: [],
selCateObj: {},
optionProps: {
multiple: false,
value: 'id',
label: 'name',
children: 'subCategory',
},
operationType: '',
replayInfo: {},
demand: {},
project: {},
issueInfo: {},
okflag: false,
eventDetailCopy: {},
transferObj: {
latitude: "",
longitude: ""
}
};
},
demandUserName: {
type: String,
default: "",
components: {
processFormReplay,
processFormProject,
processFormDemand,
processFormIssue,
processFormDesignate,
processFormReplayEnd
},
demandUserMobile: {
type: String,
default: "",
},
gridId: {
type: String,
default: "",
},
eventId: {
type: String,
default: "",
},
eventDetailData: {
type: Object,
default () {
return {}
}
},
source: {//manage visiual
type: String,
default: 'manage'
}
},
watch: {
},
created () {
console.log(this.source)
},
async mounted () {
const { user } = this.$store.state
this.agencyId = user.agencyId
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
}
if(this.eventDetailData.operationType){
this.operationType = this.eventDetailCopy.operationType
// this.getProcessInfo()
}
this.$EventBus.$on('map',(val)=>{
this.transferObj.latitude = val.lat
this.transferObj.longitude = val.lng
})
},
methods: {
handleChangeOperationType (val) {
computed: {
dataRule() {
return {
operationType: [
{ required: true, message: "处理方式不能为空", trigger: "blur" },
],
};
},
},
async getProcessInfo () {
this.okflag = false
if (this.operationType === '0') {
this.$refs.ref_process_form_replay.getReplayInfo()
if (this.$refs.ref_process_form_replay.okflag) {
this.replayInfo = this.$refs.ref_process_form_replay.formData
this.okflag = true
} else {
return false
props: {
demandUserId: {
type: String,
default: "",
},
demandUserName: {
type: String,
default: "",
},
demandUserMobile: {
type: String,
default: "",
},
gridId: {
type: String,
default: "",
},
eventId: {
type: String,
default: "",
},
eventDetailData: {
type: Object,
default() {
return {}
}
},
source: {//manage visiual
type: String,
default: 'manage'
}
},
} else if (this.operationType === '1') {
this.$refs.ref_process_form_project.getProjectInfo()
if (this.$refs.ref_process_form_project.okflag) {
this.project = this.$refs.ref_process_form_project.formData
watch: {},
//
this.okflag = true
created() {},
} else {
return false
async mounted() {
const { user } = this.$store.state
this.agencyId = user.agencyId
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
}
} else if (this.operationType === '2') {
this.$refs.ref_process_form_demond.getDemandInfo()
if (this.$refs.ref_process_form_demond.okflag) {
this.demand = this.$refs.ref_process_form_demond.formData
this.okflag = true
} else {
return false
if (this.eventDetailData.operationType) {
this.operationType = this.eventDetailCopy.operationType
}
} else if (this.operationType === '3') {
this.$refs.ref_process_form_issue.getIssueInfo()
if (this.$refs.ref_process_form_issue.okflag) {
this.issueInfo = this.$refs.ref_process_form_issue.formData
this.okflag = true
} else {
return false
}
}
this.$EventBus.$on('map', (val) => {
this.transferObj.latitude = val.lat
this.transferObj.longitude = val.lng
})
},
handleCancle () {
this.resetData();
methods: {
handleChangeOperationType(val) {
this.operationType = val;
},
async getProcessInfo() {
this.okflag = false
debugger
if (this.operationType === '0') {
this.$refs.ref_process_form_replay.getReplayInfo()
if (this.$refs.ref_process_form_replay.okflag) {
this.replayInfo = this.$refs.ref_process_form_replay.formData;
this.okflag = true;
}
} else if (this.operationType === '6') {
this.$refs.ref_process_form_replay_end.getReplayInfo()
this.replayInfo = this.$refs.ref_process_form_replay_end.formData
if (this.$refs.ref_process_form_replay_end.okflag) {
this.replayInfo = this.$refs.ref_process_form_replay_end.formData
this.okflag = true
}
}
},
handleCancle() {
this.resetData();
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
resetData() {
},
//
endLoading() {
if (loading) {
loading.close();
}
},
},
resetData () {
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
</style>
<style scoped>
.el-dialog__body {
padding: 0 10px 20px !important;
padding: 0 10px 20px !important;
}
</style>

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

File diff suppressed because it is too large

804
src/views/modules/shequzhili/issue/issueAuditList.vue

@ -1,195 +1,115 @@
<template>
<div class="g-main">
<div v-show="pageType == 'list'">
<div class="m-search">
<el-form :inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'100px'">
<div>
<el-form-item label="所属组织"
prop="orgId">
<el-cascader class="u-item-width-normal"
ref="myCascader"
size="small"
v-model="agencyIdArray"
:options="orgOptions"
:props="orgOptionProps"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</el-form-item>
<el-form-item label="议题标题"
prop="issueTitle">
<el-input v-model="formData.issueTitle"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="转议题时间"
prop="startTime">
<el-date-picker v-model="formData.startTime"
:picker-options="startPickerOptions"
class="u-item-width-daterange"
size="small"
type="date"
value-format="yyyyMMdd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker v-model="formData.endTime"
:picker-options="endPickerOptions"
class="u-item-width-daterange u-data-tag"
size="small"
type="date"
value-format="yyyyMMdd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="状态"
prop="applyStatus">
<el-select class="u-item-width-normal"
v-model="formData.applyStatus"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-row>
<el-col :span="24" align="right">
<el-button style="margin-left:30px"
size="small"
type="primary"
@click="handleSearch">查询</el-button>
<el-button style="margin-left:10px"
size="small"
class="diy-button--white"
@click="resetSearch">重置</el-button>
</el-col>
</el-row>
</div>
</el-form>
</div>
<div class="m-table">
<div class="div_btn">
<el-button @click="handleExport"
type="primary"
size="small">导出</el-button>
</div>
<div class="g-main">
<div v-show="pageType == 'list'">
<div class="m-search">
<el-form :inline="true" :model="formData" ref="ref_searchform" :label-width="'100px'">
<div>
<el-form-item label="所属组织" prop="orgId">
<el-cascader class="u-item-width-normal" ref="myCascader" size="small" v-model="agencyIdArray"
:options="orgOptions" :props="orgOptionProps" :show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</el-form-item>
<el-form-item label="议题标题" prop="issueTitle">
<el-input v-model="formData.issueTitle" class="u-item-width-normal" size="small" clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="转议题时间" prop="startTime">
<el-date-picker v-model="formData.startTime" :picker-options="startPickerOptions"
class="u-item-width-daterange" size="small" type="date" value-format="yyyyMMdd"
value="yyyy-MM-dd" placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker v-model="formData.endTime" :picker-options="endPickerOptions"
class="u-item-width-daterange u-data-tag" size="small" type="date" value-format="yyyyMMdd"
value="yyyy-MM-dd" placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="状态" prop="applyStatus">
<el-select class="u-item-width-normal" v-model="formData.applyStatus" placeholder="全部"
size="small" clearable>
<el-option v-for="item in statusArray" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-row>
<el-col :span="24" align="right">
<el-button style="margin-left:30px" size="small" type="primary"
@click="handleSearch">查询</el-button>
<el-button style="margin-left:10px" size="small" class="diy-button--white"
@click="resetSearch">重置</el-button>
</el-col>
</el-row>
</div>
</el-form>
</div>
<div class="m-table">
<div class="div_btn">
<el-button @click="handleExport" type="primary" size="small">导出</el-button>
</div>
<el-table :data="tableData" border class="m-table-item" style="width: 100%" :height="maxTableHeight">
<el-table-column label="" fixed="left" type="selection" align="center" width="50" />
<el-table-column label="序号" fixed="left" type="index" align="center" width="50" />
<el-table-column prop="gridName" align="center" label="所属网格" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="issueTitle" label="议题标题" min-width="150" align="center"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="suggestion" align="center" min-width="150" label="处理建议"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="applyTime" align="center" width="180" :show-overflow-tooltip="true"
label="提交审核时间">
</el-table-column>
<el-table-column prop="applyStatusName" align="center" label="状态" width="80"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="100">
<template slot-scope="scope">
<el-button v-if="scope.row.applyStatus === 'under_auditing'" @click="handleAudit(scope.row)"
type="text" size="small">审核</el-button>
<el-button @click="handleWatch(scope.row)" type="text" size="small">查看</el-button>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page.sync="pageNo" :page-sizes="[20, 50, 100, 200]" :page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total" :total="total">
</el-pagination>
</div>
</div>
<el-table :data="tableData"
border
class="m-table-item"
style="width: 100%"
:height="maxTableHeight">
<el-table-column label=""
fixed="left"
type="selection"
align="center"
width="50" />
<el-table-column label="序号"
fixed="left"
type="index"
align="center"
width="50" />
<el-table-column prop="gridName"
align="center"
label="所属网格"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="issueTitle"
label="议题标题"
min-width="150"
align="center"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="suggestion"
align="center"
min-width="150"
label="处理建议"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="applyTime"
align="center"
width="180"
:show-overflow-tooltip="true"
label="提交审核时间">
</el-table-column>
<el-table-column prop="applyStatusName"
align="center"
label="状态"
width="80"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"
width="100">
<template slot-scope="scope">
<el-button v-if="scope.row.applyStatus==='under_auditing'"
@click="handleAudit(scope.row)"
type="text"
size="small"
>审核</el-button>
<el-button @click="handleWatch(scope.row)"
type="text"
size="small">查看</el-button>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total"
:total="total">
</el-pagination>
</div>
</div>
<div v-if="pageType == 'dispose' || pageType == 'info'">
<issue-info ref="eleEditForm" :pageType="pageType" :issueId="issueId" :issueDetailData="issueDetailData"
@handleClose="handleClose" @handleOk="handleOk" @dialogOk="handleEditSuccess" />
</div>
</div>
<div v-if="pageType == 'dispose' || pageType == 'info'">
<issue-info ref="eleEditForm"
:pageType="pageType"
:issueId="issueId"
:issueDetailData="issueDetailData"
@handleClose="handleClose"
@handleOk="handleOk"
@dialogOk="handleEditSuccess" />
</div>
</div>
</template>
<script>
@ -200,312 +120,312 @@ import issueInfo from "./cptsAudit/issue-info";
import axios from "axios";
export default {
components: { issueInfo },
data () {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.startTime) {
let startTime = new Date(this.formData.startTime)
return time.getTime() > nowData || time.getTime() < startTime || time.getTime() === startTime
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
pageType: "list", // list add dispose info
user: {},
agencyId: '',
gridList: [],//list--
tableData: [],
statusArray: [
{
value: "under_auditing",
label: "待审核",
},
{
value: "rejected",
label: "驳回",
components: { issueInfo },
data() {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.startTime) {
let startTime = new Date(this.formData.startTime)
return time.getTime() > nowData || time.getTime() < startTime || time.getTime() === startTime
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
pageType: "list", // list add dispose info
user: {},
agencyId: '',
gridList: [],//list--
tableData: [],
statusArray: [
{
value: "under_auditing",
label: "待审核",
},
{
value: "rejected",
label: "驳回",
},
],
formData: {
orgId: '',
orgType: '',
issueTitle: '',
startTime: '',
endTime: '',
applyStatus: '',
},
orgOptions: [],
orgOptionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
agencyIdArray: [],
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
issueId: '',
issueDetailData: {},
};
},
computed: {
maxTableHeight() {
return this.$store.state.inIframe
? this.clientHeight - 400 + this.iframeHeigh
: this.clientHeight - 400;
},
],
formData: {
orgId: '',
orgType: '',
issueTitle: '',
startTime: '',
endTime: '',
applyStatus: '',
},
orgOptions: [],
orgOptionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
agencyIdArray: [],
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
issueId: '',
issueDetailData: {},
};
},
computed: {
maxTableHeight () {
return this.$store.state.inIframe
? this.clientHeight - 400 + this.iframeHeigh
: this.clientHeight - 400;
...mapGetters(["clientHeight", "iframeHeight"]),
},
...mapGetters(["clientHeight", "iframeHeight"]),
},
watch: {
"formData.endTime": function (val) {
if (val && val != '') {
let arrayTemp = val.split(' ')
this.formData.endTime = arrayTemp[0] + ' 23:59:59'
}
watch: {
"formData.endTime": function (val) {
if (val && val != '') {
let arrayTemp = val.split(' ')
this.formData.endTime = arrayTemp[0] + ' 23:59:59'
}
},
},
},
mounted () {
console.log(this.$store.state)
this.user = this.$store.state.user
this.agencyId = this.user.agencyId
this.getOrgTreeList();
this.getTableData();
},
methods: {
handleSearch (val) {
console.log(this.formData);
this.pageNo = 1;
this.getTableData();
mounted() {
console.log(this.$store.state)
this.user = this.$store.state.user
this.agencyId = this.user.agencyId
this.getOrgTreeList();
this.getTableData();
},
methods: {
handleChangeAgency (val) {
let obj = this.$refs["myCascader"].getCheckedNodes()[0].data
handleSearch(val) {
console.log(this.formData);
this.pageNo = 1;
this.getTableData();
},
if (obj) {
this.formData.orgType = obj.level === 'grid' ? 'grid' : 'agency'
this.formData.orgId = obj.agencyId
handleChangeAgency(val) {
let obj = this.$refs["myCascader"].getCheckedNodes()[0].data
} else {
this.form.orgType = ''
this.form.orgId = ''
}
if (obj) {
this.formData.orgType = obj.level === 'grid' ? 'grid' : 'agency'
this.formData.orgId = obj.agencyId
} else {
this.form.orgType = ''
this.form.orgId = ''
}
},
async getOrgTreeList () {
const url = "/gov/org/customeragency/agencygridtree"
},
let params = {
agencyId: this.agencyId,
purpose: "query"
}
async getOrgTreeList() {
const url = "/gov/org/customeragency/agencygridtree"
const { data, code, msg } = await requestPost(url, params)
let params = {
agencyId: this.agencyId,
purpose: "query"
}
if (code === 0) {
this.orgOptions = []
this.orgOptions.push(data)
const { data, code, msg } = await requestPost(url, params)
} else {
this.$message.error(msg)
}
if (code === 0) {
this.orgOptions = []
this.orgOptions.push(data)
},
} else {
this.$message.error(msg)
}
async handleExport () {
const url = "/governance/issueaudit/auditListExport";
const { pageSize, pageNo, formData } = this;
axios({
url: window.SITE_CONFIG["apiURL"] + url,
method: "post",
data: {
// pageSize,
// pageNo,
...formData,
},
responseType: "blob",
})
.then((res) => {
let fileName = window.decodeURI(
res.headers["content-disposition"].split(";")[1].split("=")[1]
);
console.log("filename", fileName);
let blob = new Blob([res.data], { type: "application/vnd.ms-excel" });
var url = window.URL.createObjectURL(blob);
var aLink = document.createElement("a");
aLink.style.display = "none";
aLink.href = url;
aLink.setAttribute("download", fileName);
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink); //
window.URL.revokeObjectURL(url); //blob
})
.catch((err) => {
console.log("获取导出情失败", err);
return this.$message.error("网络错误");
});
},
async handleWatch (row) {
this.issueId = row.issueApplicationId
async handleExport() {
const url = "/governance/issueaudit/auditListExport";
const { pageSize, pageNo, formData } = this;
axios({
url: window.SITE_CONFIG["apiURL"] + url,
method: "post",
data: {
// pageSize,
// pageNo,
...formData,
},
responseType: "blob",
})
.then((res) => {
let fileName = window.decodeURI(
res.headers["content-disposition"].split(";")[1].split("=")[1]
);
console.log("filename", fileName);
let blob = new Blob([res.data], { type: "application/vnd.ms-excel" });
var url = window.URL.createObjectURL(blob);
var aLink = document.createElement("a");
aLink.style.display = "none";
aLink.href = url;
aLink.setAttribute("download", fileName);
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink); //
window.URL.revokeObjectURL(url); //blob
})
.catch((err) => {
console.log("获取导出情失败", err);
return this.$message.error("网络错误");
});
},
const url = "/governance/issueaudit/applicationdetail";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/detail";
async handleWatch(row) {
this.issueId = row.issueApplicationId
const { data, code, msg } = await requestPost(url, {
issueApplicationId: this.issueId,
});
const url = "/governance/issueaudit/applicationdetail";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/detail";
if (code === 0) {
const { data, code, msg } = await requestPost(url, {
issueApplicationId: this.issueId,
});
this.issueDetailData = { ...data };
this.pageType = "info";
} else {
this.$message.error(msg);
}
},
if (code === 0) {
//
async handleAudit (row) {
this.issueId = row.issueApplicationId
this.issueDetailData = { ...data };
this.pageType = "info";
} else {
this.$message.error(msg);
}
},
const url = "/governance/issueaudit/applicationdetail";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/detail";
//
async handleAudit(row) {
this.issueId = row.issueApplicationId
const { data, code, msg } = await requestPost(url, {
issueApplicationId: this.issueId,
});
const url = "/governance/issueaudit/applicationdetail";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/detail";
if (code === 0) {
const { data, code, msg } = await requestPost(url, {
issueApplicationId: this.issueId,
});
this.issueDetailData = { ...data };
this.pageType = "dispose";
} else {
this.$message.error(msg);
}
},
if (code === 0) {
handleClose () {
this.pageType = "list";
this.issueId = ""
this.getTableData()
this.issueDetailData = { ...data };
this.pageType = "dispose";
} else {
this.$message.error(msg);
}
},
},
handleOk () {
this.pageType = "list";
this.issueId = ""
this.pageNo = 1
this.getTableData()
handleClose() {
this.pageType = "list";
this.issueId = ""
this.getTableData()
},
},
handleOk() {
this.pageType = "list";
this.issueId = ""
this.pageNo = 1
this.getTableData()
handleEditSuccess () {
this.handleClose();
this.getTableData();
},
},
handleEditSuccess() {
this.handleClose();
this.getTableData();
},
async getTableData () {
const url = "/governance/issueaudit/auditList";
async getTableData() {
const url = "/governance/issueaudit/auditList";
const { pageSize, pageNo, formData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...formData,
});
if (code === 0) {
const { pageSize, pageNo, formData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...formData,
});
if (code === 0) {
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
: [];
} else {
this.$message.error(msg);
}
},
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
: [];
} else {
this.$message.error(msg);
}
},
handleSizeChange (val) {
handleSizeChange(val) {
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange(val) {
this.pageNo = val;
this.getTableData();
},
this.pageNo = val;
this.getTableData();
},
resetSearch () {
this.agencyIdArray = []
this.formData = {
orgId: '',
orgType: '',
issueTitle: '',
startTime: '',
endTime: '',
applyStatus: '',
resetSearch() {
this.agencyIdArray = []
this.formData = {
orgId: '',
orgType: '',
issueTitle: '',
startTime: '',
endTime: '',
applyStatus: '',
}
}
this.pageNo = 1
this.getTableData();
this.pageNo = 1
this.getTableData();
},
deepTree(arr, child) {
if (Array.isArray(arr) && arr.length > 0) {
return arr.map(item => {
// if (child === 'subAgencyList') item.value = item.orgType + '-' + item.orgId
return {
...item,
[child]: item[child] && item[child].length > 0 && this.deepTree(item[child], child) || null
}
})
}
}
},
deepTree (arr, child) {
if (Array.isArray(arr) && arr.length > 0) {
return arr.map(item => {
// if (child === 'subAgencyList') item.value = item.orgType + '-' + item.orgId
return {
...item,
[child]: item[child] && item[child].length > 0 && this.deepTree(item[child], child) || null
}
})
}
}
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/management/list-main.scss";
.m-search {
.u-item-width-normal {
width: 200px;
}
.u-item-width-normal {
width: 200px;
}
}
</style>

Loading…
Cancel
Save