Browse Source

事件管理

shibei_master
jiangyy 3 years ago
parent
commit
9529fd9027
  1. BIN
      src/assets/img/satisfy-images/face1.png
  2. BIN
      src/assets/img/satisfy-images/face1_light.png
  3. BIN
      src/assets/img/satisfy-images/face2.png
  4. BIN
      src/assets/img/satisfy-images/face2_light.png
  5. BIN
      src/assets/img/satisfy-images/face3.png
  6. BIN
      src/assets/img/satisfy-images/face3_light.png
  7. 29
      src/assets/scss/modules/shequzhili/event-info.scss
  8. 2
      src/js/dai/request.js
  9. 17
      src/views/modules/shequzhili/event/cpts/add.vue
  10. 184
      src/views/modules/shequzhili/event/cpts/event-detail.vue
  11. 489
      src/views/modules/shequzhili/event/cpts/event-info copy.vue
  12. 70
      src/views/modules/shequzhili/event/cpts/event-info.vue
  13. 176
      src/views/modules/shequzhili/event/eventList.vue
  14. 578
      src/views/modules/shequzhili/xiangmu/cpts/project-info.vue
  15. 44
      src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi.vue

BIN
src/assets/img/satisfy-images/face1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/assets/img/satisfy-images/face1_light.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
src/assets/img/satisfy-images/face2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/assets/img/satisfy-images/face2_light.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
src/assets/img/satisfy-images/face3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
src/assets/img/satisfy-images/face3_light.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

29
src/assets/scss/modules/shequzhili/event-info.scss

@ -134,8 +134,16 @@
margin: 10px 0;
display: flex;
padding-left: 15px;
.line{
text-decoration:underline;
color: #3e8ef7;
}
.line:hover{
cursor:pointer
}
.info-title-2 {
width: 70px;
width: 100px;
flex: 0 0 1;
font-size: 14px;
}
@ -215,9 +223,6 @@
}
}
.m-process {
margin-top: 30px;
margin-left: 15px;
@ -367,3 +372,19 @@
.m-chart {
min-height: 200px;
}
.div-satisfy{
padding:50px;
display:flex ;
justify-content: space-around;
text-align: center;
img{
width:100px;
height:100px;
}
.tip-satisfy{
text-align: center;
margin-top:20px
}
}

2
src/js/dai/request.js

@ -36,7 +36,7 @@ const request = curry(
// retData = Vue.$afterRequestHook(retData);
// }
if (res.data.code > 8000 && res.data.code < 10000) {
// Message.error(res.data.msg);
Message.error(res.data.msg);
}
if (res.code == 10005 || res.code == 10006 || res.code == 10007) {
// 10005 token为空 10006登陆超时 10007别处登录

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

@ -426,13 +426,28 @@ export default {
},
handleComfirmSelPerson () {
this.personTableShow = true;
if (this.selPersonIndex === 0 || this.selPersonIndex) {
let selPerson = this.demandUserList[this.selPersonIndex]
this.formData.name = selPerson.demandUserName
this.formData.mobile = selPerson.demandUserMobile
this.formData.reportUserId = selPerson.demandUserId
this.formData.idCard = selPerson.idCard
console.log(selPerson)
this.personTableShow = false;
} else {
this.$message.info("请选择人员");
}
},
async handleChangeGrid () {
const url = "/epmetuser/icresiuser/demandusers"
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/epidemicPrevention/page"
let params = {

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

@ -1,63 +1,91 @@
<template>
<div class="">
<el-card v-if="showType==''">
<h3>事件详情</h3>
<div class="m-row">
<div class="m-info">
<div class="info-prop">
<span class="info-title-2">所属网格</span>
<span>{{ info.gridName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">上报时间</span>
<span>{{ info.createdTime }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">事件内容</span>
<span>{{ info.eventContent }}</span>
</div>
<div class="info-prop">
<span class="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="info-prop">
<span class="info-title-2">语音</span>
<audio controls>
<source :src="item.url"
type=""
:key="item.url"
v-for="item in info.voiceList" />
</audio>
</div>
<div class="info-prop">
<span class="info-title-2">反映渠道</span>
<span>{{ info.sourceTypeName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">地址</span>
<span>{{ info.address }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">报事人</span>
<span>{{ info.name }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">手机号</span>
<span>{{ info.mobile }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">身份证号</span>
<span>{{ info.idCard?info.idCard:'--' }}</span>
</div>
<div v-if="info.operationType==='1'"
class="info-prop">
<span class="info-title-2">已立项</span>
<div class="line"
@click="handleToProject">查看项目</div>
</div>
<div v-if="info.operationType==='2'"
class="info-prop">
<span class="info-title-2">已转需求</span>
<div class="line"
@click="handleToDemand">查看需求</div>
</div>
<div class="m-row">
<div class="m-info">
<div class="info-prop">
<span class="info-title-2">所属网格</span>
<span>{{ info.gridName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">上报时间</span>
<span>{{ info.createdTime }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">事件内容</span>
<span>{{ info.eventContent }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">图片</span>
<img :src="src"
:key="src"
v-for="src in info.imageList"
@click="watchImg(src)" />
</div>
<div v-if="info.voiceList&&info.voiceList.length>0"
class="info-prop">
<span class="info-title-2">语音</span>
<audio controls>
<source :src="item.url"
type=""
:key="item.url"
v-for="item in info.voiceList" />
</audio>
</div>
<div class="info-prop">
<span class="info-title-2">反映渠道</span>
<span>{{ info.sourceTypeName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">地址</span>
<span>{{ info.address }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">报事人</span>
<span>{{ info.name }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">手机号</span>
<span>{{ info.mobile }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">身份证号</span>
<span>{{ info.idCard?info.idCard:'--' }}</span>
</div>
</div>
<div v-if="type==='info'"
class="div-btn ">
<el-button size="small"
@click="handleCloseEvent">关闭</el-button>
</div>
</div>
</el-card>
<!-- <div v-if="showType=='project'">
<project-info ref="eleEditForm"
:type="projectPageType"
:projectId="info.operationId"
@close="handleClose"
@afterEdit="handleClose" />
</div> -->
</div>
</template>
@ -65,14 +93,34 @@
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import projectInfo from "../../xiangmu/cpts/project-info";
import dateFormat from "dai-js/tools/dateFormat";
function iniData () {
return {
pageType: "info",
projectPageType: 'info',
info: {},
eventDetailCopy: {}
eventDetailCopy: {},
showType: '',
projectId: '',
demandForm: {
gridId: "",
categoryCode: "",
parentCode: "",
content: "",
reportType: "",
reportUserName: "",
reportUserMobile: "",
reportTime: "",
wantServiceTime: "",
demandUserId: "",
demandUserName: "",
demandUserMobile: "",
},
};
}
@ -97,7 +145,7 @@ export default {
},
components: {
foldText,
foldText, projectInfo
},
data: iniData,
@ -122,13 +170,33 @@ export default {
},
handleClose () {
this.$emit("close");
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 () {
},
},
};
</script>

489
src/views/modules/shequzhili/event/cpts/event-info copy.vue

@ -0,0 +1,489 @@
<template>
<div class="">
<div v-if="pageType == 'add'">
<el-card>
<h3>新增事件</h3>
<event-add ref="ref_add"
@changeName="changeName"
@changeMobile="changeMobile"
@changeUserId="changeUserId"></event-add>
</el-card>
<div class="process-form">
<el-card>
<h3>处理</h3>
<process-form ref="ref_processinfo_add"
:demandUserId="demandUserId"
:demandUserName="demandUserName"
:demandUserMobile="demandUserMobile"></process-form>
<div class="div-btn ">
<el-button size="small"
@click="handleClose">关闭</el-button>
<el-button style="margin-left:20px"
type="primary"
size="small"
@click="handleComfirm">确定</el-button>
</div>
</el-card>
</div>
</div>
<div v-if="pageType == 'dispose'||pageType == 'info'"
class="g-page">
<div class="g-left">
<event-detail ref="ref_detail"
:eventId="eventId"
:eventDetailData="eventDetailData"
@handleClose="handleClose"></event-detail>
<div v-if="!eventDetailData.operationId"
class="process-form">
<el-card>
<h3>处理</h3>
<process-form ref="ref_processinfo_dispose"
:eventId="eventId"
:eventDetailData="eventDetailData"></process-form>
<div class="div-btn ">
<el-button size="small"
@click="handleClose">关闭</el-button>
<el-button style="margin-left:20px"
type="primary"
size="small"
@click="handleComfirm">确定</el-button>
</div>
</el-card>
</div>
</div>
<div class="g-right">
<el-card class="m-card"
style="max-height: 90vh; overflow: auto">
<h3>处理进展</h3>
<div class="m-process"
v-if="projectProcess.length>0">
<div class="list">
<div class="item"
:class="index === 0 ? 'z-on' : ''"
:key="item.processId"
v-for="(item, index) in projectProcess">
<div class="item-row">
<div class="name">{{ item.processName }}</div>
<div class="date">
{{ item.processTime }}
</div>
</div>
<div v-if="item.type==='event'">
<div class="detail">
<div class="detail-field">回复人</div>
<div class="detail-value">{{ item.publicReply }}</div>
</div>
<div class="detail">
<div class="detail-field">回复内容</div>
<div class="detail-value">{{ item.departmentName }}</div>
</div>
</div>
<div v-if="item.type==='project'">
<div v-if="item.processName==='回复'">
<div class="detail">
<div class="detail-field">回复人</div>
<div class="detail-value">{{ item.publicReply }}</div>
</div>
<div class="detail">
<div class="detail-field">回复内容</div>
<div class="detail-value">{{ item.departmentName }}</div>
</div>
</div>
<div v-else>
<div class="detail">
<div class="detail-field">处理部门</div>
<div class="detail-value">{{ item.departmentName }}</div>
</div>
<div class="detail"
v-if="item.processName == '处理响应' && item.assistanceUnitName">
<div class="detail-field"> </div>
<div class="detail-value">
<fold-text :row="3">{{ item.assistanceUnitName }}</fold-text>
</div>
</div>
<div class="detail"
v-if="item.processName != '转项目' && item.publicReply">
<div class="detail-field"> </div>
<div class="detail-value">
<fold-text :row="3">{{ item.publicReply }}</fold-text>
</div>
</div>
<div class="detail"
v-if="item.processName != '转项目' && item.internalRemark">
<div class="detail-field">内部备注</div>
<div class="detail-value">
<fold-text :row="3">{{ item.internalRemark }}</fold-text>
</div>
</div>
<div v-if="item.internalFile&&item.internalFile.length>0"
class="detail">
<div class="attachement-list">
<a :href="att.url"
target="_blank"
:key="att.url"
v-for="att in item.internalFile">
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
</div>
</div>
</div>
</div>
<div v-if="item.type==='demand'">
<div v-if="item.processName==='回复'">
<div class="detail">
<div class="detail-field">回复人</div>
<div class="detail-value">{{ item.publicReply }}</div>
</div>
<div class="detail">
<div class="detail-field">回复内容</div>
<div class="detail-value">{{ item.departmentName }}</div>
</div>
</div>
<div v-if="item.processName==='需求完成'">
<div class="detail">
<div class="detail-field">服务方</div>
<div class="detail-value">{{ item.serviceParty }}</div>
</div>
<div class="detail">
<div class="detail-field">实际服务时间</div>
<div class="detail-value">{{ item.actualServiceTime }}</div>
</div>
</div>
<div v-if="item.processName==='转服务'">
<div class="detail">
<div class="detail-field">服务时间</div>
<div class="detail-value">{{ item.serviceTime }}</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div v-else>暂无处理进展</div>
</el-card>
</div>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import eventInfo from "./event-info1";
import dateFormat from "dai-js/tools/dateFormat";
import eventAdd from "./add";
import eventDetail from "./event-detail";
import processForm from "./process-form";
function iniData () {
return {
formData: {
operationType: '',
},
eventInfoData: {},
replayInfo: {},
demand: {},
project: {},
//
demandUserId: '',
demandUserName: '',
demandUserMobile: '',
eventDetailCopy: {},
projectProcess: [],
};
}
export default {
name: "projectInfo",
props: {
eventId: {
type: String,
default: "",
},
pageType: {
type: String,
default: "",
},
eventDetailData: {
type: Object,
default () {
return {}
}
},
},
components: {
foldText,
eventInfo,
eventAdd,
eventDetail,
processForm,
},
data: iniData,
computed: {},
watch: {
eventId () {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
});
this.getApiData();
},
},
mounted () {
if (this.pageType === 'dispose') {
this.getProjectProcess()
}
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
}
},
methods: {
changeName (val) {
this.demandUserName = val
},
changeMobile (val) {
this.demandUserMobile = val
},
changeUserId (val) {
this.demandUserId = val
},
//
async getProjectProcess () {
const url = "/gov/project/icEvent/process";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/process";
const { data, code, msg } = await requestPost(url, {
icEventId: this.eventId,
});
if (code === 0) {
this.projectProcess = data.map((item) => {
item.processTime = dateFormat(
new Date(item.processTime * 1000),
"yyyy-MM-dd hh:mm"
);
return item;
});
} else {
this.$message.error(msg);
}
},
getEventInfo () {
this.$refs.ref_add.getEventInfo()
if (this.$refs.ref_add.okflag) {
this.eventInfoData = this.$refs.ref_add.formData
} else {
return false
}
console.log('eventInfo', this.eventInfoData)
},
handleComfirm () {
if (this.pageType === 'add') {
this.handelAdd()
}
if (this.pageType === 'dispose') {
this.handelDispose()
}
},
handelAdd () {
if (this.pageType === 'add') {
this.$refs.ref_add.getEventInfo()
if (this.$refs.ref_add.okflag) {
this.eventInfoData = this.$refs.ref_add.formData
} else {
return false
}
console.log('eventInfo', this.eventInfoData)
}
this.$refs.ref_processinfo_add.getProcessInfo()
if (this.$refs.ref_processinfo_add.okflag) {
this.formData.operationType = this.$refs.ref_processinfo_add.operationType
this.eventInfoData.operationType = this.$refs.ref_processinfo_add.operationType
this.eventInfoData.categoryList = this.$refs.ref_processinfo_add.categoryList
if (this.formData.operationType === '0') {
this.project = {}
this.demand = {}
this.replayInfo = this.$refs.ref_processinfo_add.replayInfo
console.log('replayInfo', this.replayInfo)
//
this.eventInfoData.content = this.replayInfo.content
this.eventInfoData.status = this.replayInfo.status
} else if (this.formData.operationType === '1') {
this.replayInfo = {}
this.demand = {}
this.project = this.$refs.ref_processinfo_add.project
//
this.project.gridId = this.eventInfoData.gridId
console.log('projectInfo', this.project)
} else if (this.formData.operationType === '2') {
this.replayInfo = {}
this.project = {}
this.demand = this.$refs.ref_processinfo_add.demand
//
this.demand.gridId = this.eventInfoData.gridId
this.demand.reportUserName = this.eventInfoData.name//
this.demand.reportUserMobile = this.eventInfoData.mobile//
this.demand.reportTime = this.eventInfoData.happenTime//
console.log('demond', this.demand)
}
} else {
return false
}
this.formData = {
...this.eventInfoData,
// replayInfo: this.replayInfo,
project: this.project,
demand: this.demand
}
console.log('this.formData', this.formData)
this.submit()
},
async submit () {
const url = "/gov/project/icEvent/add";
const { formData } = this;
const { data, code, msg } = await requestPost(url, {
...formData,
});
if (code === 0) {
this.$message.success("操作成功!");
if (this.pageType === 'add') {
this.eventInfo = this.$refs.ref_add.resetData()
}
this.$emit("handleOk");
} else {
}
},
handelDispose () {
this.$refs.ref_processinfo_dispose.getProcessInfo()
if (this.$refs.ref_processinfo_dispose.okflag) {
this.formData.operationType = this.$refs.ref_processinfo_dispose.operationType
if (this.formData.operationType === '0') {
this.project = {}
this.demand = {}
this.replayInfo = this.$refs.ref_processinfo_dispose.replayInfo
this.replayInfo.icEventId = this.eventId
console.log('replayInfo', this.replayInfo)
//
let url = '/gov/project/icEvent/reply'
this.submitDispose(url, this.replayInfo)
} else if (this.formData.operationType === '1') {
this.replayInfo = {}
this.demand = {}
this.project = this.$refs.ref_processinfo_dispose.project
//
this.project.icEventId = this.eventId
console.log('projectInfo', this.project)
let url = '/gov/project/icEvent/icEventToProject'
this.submitDispose(url, this.project)
} else if (this.formData.operationType === '2') {
this.replayInfo = {}
this.project = {}
this.demand = this.$refs.ref_processinfo_dispose.demand
//
this.demand.icEventId = this.eventId
console.log('demond', this.demand)
let url = '/gov/project/icEvent/icEventToDemand'
this.submitDispose(url, this.demand)
}
} else {
return false
}
},
async submitDispose (url, params) {
const { data, code, msg } = await requestPost(url, {
...params,
});
if (code === 0) {
this.$message.success("操作成功!");
this.$emit("handleOk");
} else {
}
},
handleClose () {
if (this.pageType === 'add') {
this.eventInfo = this.$refs.ref_add.resetData()
}
this.$emit("handleClose");
}
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/event-info.scss"
scoped
></style>

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

@ -1,6 +1,6 @@
<template>
<div class="">
<div v-if="pageType == 'add'">
<div v-if="pageTypeCopy == 'add'">
<el-card>
<h3>新增事件</h3>
<event-add ref="ref_add"
@ -29,23 +29,18 @@
</div>
</div>
<div v-if="pageType == 'dispose'||pageType == 'info'"
<div v-if="pageTypeCopy == 'dispose'||pageTypeCopy == 'info'"
class="g-page">
<div class="g-left">
<el-card>
<h3>事件详情</h3>
<event-detail ref="ref_detail"
:eventId="eventId"
:eventDetailData="eventDetailData"></event-detail>
<div v-if="eventDetailData.operationId"
class="div-btn ">
<el-button size="small"
@click="handleClose">关闭</el-button>
</div>
</el-card>
<event-detail ref="ref_detail"
:type="pageType"
:eventId="eventId"
:eventDetailData="eventDetailData"
@handleToProject="handleToProject"
@handleClose="handleClose"></event-detail>
<div v-if="!eventDetailData.operationId"
<div v-if="!eventDetailData.operationId &&pageTypeCopy == 'dispose' "
class="process-form">
<el-card>
<h3>处理</h3>
@ -64,10 +59,11 @@
</el-card>
</div>
</div>
<div class="g-right">
<el-card class="m-card"
style="max-height: 90vh; overflow: auto">
<h3>处理进展</h3>
<h3>事件处理进展</h3>
<div class="m-process"
v-if="projectProcess.length>0">
<div class="list">
@ -186,13 +182,21 @@
</div>
<div v-if="pageTypeCopy == 'project'">
<project-info-origin ref="eleEditForm"
:type="projectPageType"
:projectId="eventDetailCopy.operationId"
@close="handleCloseProject"
@afterEdit="handleCloseProject" />
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import projectInfoOrigin from "../../xiangmu/cpts/project-info";
import eventInfo from "./event-info1";
import dateFormat from "dai-js/tools/dateFormat";
@ -220,6 +224,8 @@ function iniData () {
eventDetailCopy: {},
projectProcess: [],
projectPageType: 'info',
pageTypeCopy: ''
};
}
@ -249,6 +255,7 @@ export default {
eventAdd,
eventDetail,
processForm,
projectInfoOrigin
},
data: iniData,
@ -266,7 +273,8 @@ export default {
},
mounted () {
if (this.pageType === 'dispose') {
this.pageTypeCopy = this.pageType
if (this.pageTypeCopy === 'dispose') {
this.getProjectProcess()
}
@ -325,16 +333,16 @@ export default {
},
handleComfirm () {
if (this.pageType === 'add') {
if (this.pageTypeCopy === 'add') {
this.handelAdd()
}
if (this.pageType === 'dispose') {
if (this.pageTypeCopy === 'dispose') {
this.handelDispose()
}
},
handelAdd () {
if (this.pageType === 'add') {
if (this.pageTypeCopy === 'add') {
this.$refs.ref_add.getEventInfo()
if (this.$refs.ref_add.okflag) {
@ -409,7 +417,7 @@ export default {
if (code === 0) {
this.$message.success("操作成功!");
if (this.pageType === 'add') {
if (this.pageTypeCopy === 'add') {
this.eventInfo = this.$refs.ref_add.resetData()
}
@ -463,7 +471,6 @@ export default {
},
async submitDispose (url, params) {
const { data, code, msg } = await requestPost(url, {
...params,
@ -478,13 +485,26 @@ export default {
},
handleClose () {
if (this.pageType === 'add') {
if (this.pageTypeCopy === 'add') {
this.eventInfo = this.$refs.ref_add.resetData()
}
this.$emit("handleClose");
}
},
handleToProject () {
if (this.eventDetailCopy.status === 'processing') {
this.projectPageType = 'edit'
} else {
this.projectPageType = 'info'
}
this.pageTypeCopy = 'project'
},
handleCloseProject () {
this.pageTypeCopy = 'info'
},
},
};
</script>

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

@ -220,6 +220,12 @@
:show-overflow-tooltip="true"
label="上报时间">
</el-table-column>
<el-table-column prop="operationTypeShow"
align="center"
width="100"
:show-overflow-tooltip="true"
label="结点">
</el-table-column>
<el-table-column prop="status"
align="center"
@ -239,26 +245,23 @@
align="center"
width="100">
<template slot-scope="scope">
<el-button v-if="scope.row.status==='closed_case' && scope.row.satisfactionName"
@click="handleWatch(scope.row)"
type="text"
size="small">查看</el-button>
<el-button v-if="scope.row.status==='processing' "
@click="handleDispose(scope.row)"
type="text"
size="small"
class="div-table-button--edit">处理</el-button>
<!-- <el-button @click="handleDispose(scope.row)"
type="text"
size="small"
class="div-table-button--edit">处理</el-button> -->
<el-button v-if="scope.row.status==='closed_case' && !scope.row.satisfactionName"
@click="handleDispose(scope.row)"
<el-button v-else-if="scope.row.status==='closed_case' && !scope.row.satisfactionName && user.id===scope.row.createdUserId"
@click="handleSatisfy(scope.row)"
type="text"
size="small"
class="div-table-button--edit">评价</el-button>
<el-button v-else
@click="handleWatch(scope.row)"
type="text"
size="small">查看</el-button>
<!-- ="scope.row.status==='closed_case' && scope.row.satisfactionName" -->
</template>
</el-table-column>
</el-table>
@ -286,6 +289,43 @@
@handleOk="handleOk"
@dialogOk="handleEditSuccess" />
</div>
<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-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 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>
</template>
@ -317,6 +357,7 @@ export default {
return {
pageType: "list", // list add dispose info
user: {},
agencyId: '',
gridList: [],//list--
tableData: [],
@ -378,6 +419,18 @@ export default {
eventDetailData: {},
//
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'),
};
},
computed: {
@ -390,13 +443,18 @@ export default {
},
watch: {
"formData.endTime": function (val) {
let arrayTemp = val.split(' ')
this.formData.endTime = arrayTemp[0] + ' 23:59:59'
if (val && val != '') {
let arrayTemp = val.split(' ')
this.formData.endTime = arrayTemp[0] + ' 23:59:59'
}
},
},
mounted () {
const { user } = this.$store.state
this.agencyId = user.agencyId
console.log(this.$store.state)
this.user = this.$store.state.user
this.agencyId = this.user.agencyId
this.loadGrid();
this.getTableData();
},
@ -466,10 +524,24 @@ export default {
this.pageType = "add";
},
async handleWatch (rowIndex) {
let item = this.tableData[rowIndex];
async handleWatch (row) {
this.eventId = row.icEventId
this.eventId = row.icEventId
const url = "/gov/project/icEvent/detail";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/detail";
const { data, code, msg } = await requestPost(url, {
icEventId: this.eventId,
});
this.pageType = "info";
if (code === 0) {
this.eventDetailData = { ...data };
this.pageType = "info";
} else {
this.$message.error(msg);
}
},
//
@ -491,6 +563,58 @@ export default {
}
},
//
handleSatisfy (row) {
this.eventId = row.icEventId
this.showSatisfy = true
},
clickSatisfy (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 = "/gov/project/icEvent/comment"
let params = {
icEventId: this.eventId,
satisfaction: satisfyLevel
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.$message.success("评价成功");
this.showSatisfy = false
this.getTableData()
} else {
this.$message.error(msg)
}
},
handleClose () {
@ -526,7 +650,7 @@ export default {
this.$message.success("删除成功!");
this.getTableData();
} else {
this.$message.success("操作失败!");
this.$message.error("操作失败!");
}
},
@ -547,6 +671,19 @@ export default {
return item;
})
: [];
this.tableData.forEach(item => {
if (item.operationType === '2') {
item.operationTypeShow = '已转需求'
}
if (item.operationType === '1') {
item.operationTypeShow = '已立项'
}
if (item.operationType === '0') {
item.operationTypeShow = '已回复'
}
});
} else {
}
},
@ -586,4 +723,5 @@ export default {
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
</style>

578
src/views/modules/shequzhili/xiangmu/cpts/project-info.vue

@ -1,6 +1,7 @@
<template>
<div class="">
<div class="g-page" v-show="pageType == 'info'">
<div class="g-page"
v-show="pageType == 'info'">
<div class="g-left">
<el-card style="overflow: auto">
<h3>项目详情</h3>
@ -23,368 +24,295 @@
<span>{{ projectInfo.internalRemark || "--" }}</span>
</div>
<div
class="info-prop"
v-if="projectInfo.departmentNameList.length > 0"
>
<div class="info-prop"
v-if="projectInfo.departmentNameList.length > 0">
<span>当前处理部门</span>
<span>{{ projectInfo.departmentNameList.join("、") }}</span>
</div>
<div
class="info-prop"
v-if="
<div class="info-prop"
v-if="
projectInfo.origin == 'issue' ||
projectInfo.origin == 'resi_event'
"
>
">
<span>项目来源</span>
<a style="cursor: pointer" @click="handleWatchOrigin"
>查看项目来源</a
>
<a style="cursor: pointer"
@click="handleWatchOrigin">查看项目来源</a>
</div>
<div class="info-prop">
<span>项目评价</span>
<a style="cursor: pointer" @click="showedEvaluation = true"
>查看项目评价</a
>
<a style="cursor: pointer"
@click="showedEvaluation = true">查看项目评价</a>
</div>
<div class="info-prop">
<span>分类</span>
<fold-text
v-if="projectCate.length > 0"
style="width: 250px"
:row="3"
>
<div :key="item.name" v-for="item in projectCate">
<fold-text v-if="projectCate.length > 0"
style="width: 250px"
:row="3">
<div :key="item.name"
v-for="item in projectCate">
{{ item.name }}
</div>
</fold-text>
<span style="width: 250px" v-else>--</span>
<el-popover
v-if="projectInfo.projectStatus == 'pending'"
placement="bottom"
width="400"
height="400"
v-model="visibleCatePanel"
>
<div class="f" style="min-height: 120px">
<span style="width: 250px"
v-else>--</span>
<el-popover v-if="projectInfo.projectStatus == 'pending'"
placement="bottom"
width="400"
height="400"
v-model="visibleCatePanel">
<div class="f"
style="min-height: 120px">
<h2>更改分类</h2>
<el-cascader
v-model="selectedCateData"
:options="cateOptions"
:props="{
<el-cascader v-model="selectedCateData"
:options="cateOptions"
:props="{
multiple: true,
label: 'name',
value: 'id',
children: 'subCategory',
}"
clearable
></el-cascader>
<el-button
style="margin-left: 10px"
size="small"
type="danger"
@click="updateProjectCate"
>确定</el-button
>
clearable></el-cascader>
<el-button style="margin-left: 10px"
size="small"
type="danger"
@click="updateProjectCate">确定</el-button>
</div>
<div slot="reference">
<el-button size="small" type="">更改</el-button>
<el-button size="small"
type="">更改</el-button>
</div>
</el-popover>
</div>
<div class="info-prop">
<span>标签</span>
<fold-text
v-if="projectTag.length > 0"
style="width: 250px"
:row="3"
>
<div :key="item.name" v-for="item in projectTag">
<fold-text v-if="projectTag.length > 0"
style="width: 250px"
:row="3">
<div :key="item.name"
v-for="item in projectTag">
{{ item.name }}
</div>
</fold-text>
<span style="width: 250px" v-else>--</span>
<el-popover
v-if="projectInfo.projectStatus == 'pending'"
placement="bottom"
width="400"
height="400"
v-model="visibleTagPanel"
>
<div class="f" style="min-height: 120px">
<span style="width: 250px"
v-else>--</span>
<el-popover v-if="projectInfo.projectStatus == 'pending'"
placement="bottom"
width="400"
height="400"
v-model="visibleTagPanel">
<div class="f"
style="min-height: 120px">
<h2>更改标签</h2>
<el-select
v-model="selectedTagData"
multiple
allow-create
filterable
placeholder="请选择"
@change="handleTagChange"
>
<el-select v-model="selectedTagData"
multiple
allow-create
filterable
placeholder="请选择"
@change="handleTagChange">
<el-option-group label="自定义标签">
<el-option
v-for="item in tagOptions.customized"
:key="item.id"
:label="item.name"
:value="item.id"
>
<el-option v-for="item in tagOptions.customized"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-option-group>
<el-option-group label="常用标签">
<el-option
v-for="item in tagOptions.defaulted"
:key="item.id"
:label="item.name"
:value="item.id"
>
<el-option v-for="item in tagOptions.defaulted"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-option-group>
</el-select>
<el-button
style="margin-left: 10px"
size="small"
type="danger"
@click="updateProjectTag"
>确定</el-button
>
<el-button style="margin-left: 10px"
size="small"
type="danger"
@click="updateProjectTag">确定</el-button>
</div>
<div slot="reference">
<el-button size="small" type="">更改</el-button>
<el-button size="small"
type="">更改</el-button>
</div>
</el-popover>
</div>
</div>
<div
class="m-btns"
v-if="type == 'info' || projectInfo.projectStatus != 'pending'"
>
<el-button size="" @click="handleClose">关闭</el-button>
<div class="m-btns"
v-if="type == 'info' || projectInfo.projectStatus != 'pending'">
<el-button size=""
@click="handleClose">关闭</el-button>
</div>
</el-card>
<el-card
style="overflow: auto"
v-if="type == 'edit' && projectInfo.projectStatus == 'pending'"
>
<el-card style="overflow: auto"
v-if="type == 'edit' && projectInfo.projectStatus == 'pending'">
<h3>处理</h3>
<div class="m-fm">
<el-form
ref="fm"
:inline="false"
:model="fmData"
:rules="dataRule"
label-position="left"
label-width="100px"
>
<el-form-item label="处理方式:" prop="operateType">
<el-form ref="fm"
:inline="false"
:model="fmData"
:rules="dataRule"
label-position="left"
label-width="100px">
<el-form-item label="处理方式:"
prop="operateType">
<el-radio-group v-model="fmData.operateType">
<el-radio label="dispose">处理/响应</el-radio>
<el-radio label="close">结案</el-radio>
<el-radio label="turn">转其他机关/科室</el-radio>
<el-radio label="back" v-if="projectInfo.returnable"
>退回</el-radio
>
<el-radio label="back"
v-if="projectInfo.returnable">退回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="您的身份:" prop="projectStaffId">
<el-select
v-model.trim="fmData.projectStaffId"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="item in myDepartmentList"
:key="item.projectStaffId"
:label="item.departmentName"
:value="item.projectStaffId"
>
<el-form-item label="您的身份:"
prop="projectStaffId">
<el-select v-model.trim="fmData.projectStaffId"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in myDepartmentList"
:key="item.projectStaffId"
:label="item.departmentName"
:value="item.projectStaffId">
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType == 'turn'"
label="处理部门:"
prop="publicReply"
>
<el-popover
placement="bottom"
width="400"
height="400"
v-model="visibleStaffPanel"
>
<el-form-item v-if="fmData.operateType == 'turn'"
label="处理部门:"
prop="publicReply">
<el-popover placement="bottom"
width="400"
height="400"
v-model="visibleStaffPanel">
<div class="f">
<select-staff
@confirm="(ret) => (fmData.staffList = ret)"
@close="visibleStaffPanel = false"
/>
<select-staff @confirm="(ret) => (fmData.staffList = ret)"
@close="visibleStaffPanel = false" />
</div>
<div slot="reference">
<a
v-if="fmData.staffList.length == 0"
style="cursor: pointer"
>点击选择</a
>
<a v-else style="cursor: pointer"
>已选 {{ fmData.staffList.length }} </a
>
<a v-if="fmData.staffList.length == 0"
style="cursor: pointer">点击选择</a>
<a v-else
style="cursor: pointer">已选 {{ fmData.staffList.length }} </a>
</div>
</el-popover>
</el-form-item>
<el-form-item
v-if="fmData.operateType != 'back'"
label="协办单位:"
prop="assistanceUnitIndex"
>
<el-select
v-model.trim="fmData.assistanceUnitIndex"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="(item, index) in assistanceUnitList"
:key="item.assistanceUnitId"
:label="item.assistanceUnitName"
:value="index"
>
<el-form-item v-if="fmData.operateType != 'back'"
label="协办单位:"
prop="assistanceUnitIndex">
<el-select v-model.trim="fmData.assistanceUnitIndex"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="(item, index) in assistanceUnitList"
:key="item.assistanceUnitId"
:label="item.assistanceUnitName"
:value="index">
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType == 'back'"
label="退回到:"
prop="projectProcessId"
>
<el-select
v-model.trim="fmData.projectProcessId"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="item in returnableList"
:key="item.projectProcessId"
:label="item.processor"
:value="item.projectProcessId"
>
<el-form-item v-if="fmData.operateType == 'back'"
label="退回到:"
prop="projectProcessId">
<el-select v-model.trim="fmData.projectProcessId"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in returnableList"
:key="item.projectProcessId"
:label="item.processor"
:value="item.projectProcessId">
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType == 'close'"
label="结案状态:"
prop="closedStatus"
>
<el-select
v-model.trim="fmData.closedStatus"
placeholder="请选择"
class="resi-cell-select"
>
<el-option
v-for="item in resolveTypeList"
:key="item.closedStatus"
:label="item.name"
:value="item.value"
>
<el-form-item v-if="fmData.operateType == 'close'"
label="结案状态:"
prop="closedStatus">
<el-select v-model.trim="fmData.closedStatus"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in resolveTypeList"
:key="item.closedStatus"
:label="item.name"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-if="fmData.operateType == 'close'"
label="结案说明:"
prop="publicReply"
>
<el-input
type="textarea"
:rows="2"
placeholder="您输入的结案说明会向居民公开展示"
v-model="fmData.publicReply"
>
<el-form-item v-if="fmData.operateType == 'close'"
label="结案说明:"
prop="publicReply">
<el-input type="textarea"
:rows="2"
placeholder="您输入的结案说明会向居民公开展示"
v-model="fmData.publicReply">
</el-input>
</el-form-item>
<el-form-item label="内部备注:" prop="internalRemark">
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.internalRemark"
>
<el-form-item label="内部备注:"
prop="internalRemark">
<el-input type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.internalRemark">
</el-input>
</el-form-item>
<el-form-item
v-if="fmData.operateType != 'close'"
label="图片/附件:"
prop="internalFile"
>
<el-upload
class="avatar-uploader"
:action="uploadUlr"
:data="{ customerId: customerId }"
:show-file-list="true"
:on-success="handleImgSuccess"
:on-remove="handleImgRemove"
:before-upload="beforeImgUpload"
>
<el-form-item v-if="fmData.operateType != 'close'"
label="图片/附件:"
prop="internalFile">
<el-upload class="avatar-uploader"
:action="uploadUlr"
:data="{ customerId: customerId }"
:show-file-list="true"
:on-success="handleImgSuccess"
:on-remove="handleImgRemove"
:before-upload="beforeImgUpload">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item
v-if="fmData.operateType != 'close'"
label="公开回复:"
prop="publicReply"
>
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.publicReply"
>
<el-form-item v-if="fmData.operateType != 'close'"
label="公开回复:"
prop="publicReply">
<el-input type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.publicReply">
</el-input>
</el-form-item>
</el-form>
</div>
<div class="m-btns">
<el-button size="" style="margin-right: 50px" @click="handleClose"
>关闭</el-button
>
<el-button size="" type="danger" @click="handleSubmit"
>确定</el-button
>
<el-button size=""
style="margin-right: 50px"
@click="handleClose">关闭</el-button>
<el-button size=""
type="danger"
@click="handleSubmit">确定</el-button>
</div>
</el-card>
</div>
<div class="g-right">
<el-card
class="m-card"
:style="styleFullHeight"
style="overflow: auto"
v-if="projectProcess.length > 0"
>
<el-card class="m-card"
:style="styleFullHeight"
style="overflow: auto"
v-if="projectProcess.length > 0">
<h3>处理进展</h3>
<div class="m-process">
<div class="list">
<div
class="item"
:class="index === 0 ? 'z-on' : ''"
:key="item.processId"
v-for="(item, index) in projectProcess"
>
<div class="item"
:class="index === 0 ? 'z-on' : ''"
:key="item.processId"
v-for="(item, index) in projectProcess">
<div class="item-row">
<div class="name">{{ item.processName }}</div>
<div class="date">
@ -397,25 +325,22 @@
<div class="detail-value">{{ item.departmentName }}</div>
</div>
<div class="detail" v-if="item.assistanceUnitName">
<div class="detail"
v-if="item.assistanceUnitName">
<div class="detail-field">协办单位</div>
<div class="detail-value">{{ item.assistanceUnitName }}</div>
</div>
<div
class="detail"
v-if="item.processName != '转项目' && item.publicReply"
>
<div class="detail"
v-if="item.processName != '转项目' && item.publicReply">
<div class="detail-field"> </div>
<div class="detail-value">
<fold-text :row="3">{{ item.publicReply }}</fold-text>
</div>
</div>
<div
class="detail"
v-if="item.processName != '转项目' && item.internalRemark"
>
<div class="detail"
v-if="item.processName != '转项目' && item.internalRemark">
<div class="detail-field">内部备注</div>
<div class="detail-value">
<fold-text :row="3">{{ item.internalRemark }}</fold-text>
@ -423,12 +348,10 @@
</div>
<div class="detail">
<div class="attachement-list">
<a
:href="att.url"
target="_blank"
:key="att.url"
v-for="att in item.internalFile"
>
<a :href="att.url"
target="_blank"
:key="att.url"
v-for="att in item.internalFile">
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
@ -442,30 +365,24 @@
</div>
<div v-if="pageType == 'origin-info'">
<issue-info
v-if="projectInfo.origin == 'issue'"
@close="handleBackInfo"
:issue-id="projectInfo.originId"
/>
<event-info
v-if="projectInfo.origin == 'resi_event'"
@close="handleBackInfo"
:event-id="projectInfo.originId"
/>
<issue-info v-if="projectInfo.origin == 'issue'"
@close="handleBackInfo"
:issue-id="projectInfo.originId" />
<event-info v-if="projectInfo.origin == 'resi_event'"
@close="handleBackInfo"
:event-id="projectInfo.originId" />
</div>
<!-- 修改弹出框 -->
<el-dialog
v-if="showedEvaluation"
:visible.sync="showedEvaluation"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="formTitle"
width="850px"
top="5vh"
class="dialog-h"
@closed="showedEvaluation = false"
>
<el-dialog v-if="showedEvaluation"
:visible.sync="showedEvaluation"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="formTitle"
width="850px"
top="5vh"
class="dialog-h"
@closed="showedEvaluation = false">
<project-evaluation :projectId="projectIdCopy"></project-evaluation>
</el-dialog>
</div>
@ -480,7 +397,7 @@ import eventInfo from "./event-info";
import projectEvaluation from "./project-evaluation";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
function iniData () {
return {
pageType: "info",
uploadUlr: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadqrcodeV2",
@ -623,7 +540,7 @@ export default {
data: iniData,
computed: {
dataRule() {
dataRule () {
const {
fmData: { operateType },
} = this;
@ -666,13 +583,13 @@ export default {
return obj;
},
styleFullHeight() {
styleFullHeight () {
return {
maxHeight: "calc(100vh - 120px)",
};
},
styleHalfHeight() {
styleHalfHeight () {
return {
maxHeight: "calc((100vh - 140px) / 2)",
};
@ -680,7 +597,7 @@ export default {
},
watch: {
projectId() {
projectId () {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
@ -707,7 +624,7 @@ export default {
)["departmentName"];
}
},
selectedCateData(val) {
selectedCateData (val) {
const { cateOptions } = this;
this.projectCate = val
.filter((arr) => arr.length > 0)
@ -720,7 +637,7 @@ export default {
};
});
},
async selectedTagData(val) {
async selectedTagData (val) {
const { tagOptions } = this;
this.projectTag = await Promise.all(
val.map(async (id) => {
@ -749,13 +666,14 @@ export default {
},
},
mounted() {
mounted () {
console.log(this.projectIdCopy);
this.getApiData();
},
methods: {
beforeImgUpload(file) {
beforeImgUpload (file) {
const isLt1M = file.size / 1024 / 1024 < 10;
if (!isLt1M) {
@ -764,7 +682,7 @@ export default {
return isLt1M;
},
handleImgSuccess(res, file, fileList) {
handleImgSuccess (res, file, fileList) {
console.log("res.data.url", file);
if (res.code === 0 && res.msg === "success") {
console.log("res.data.url", res.data.url);
@ -781,7 +699,7 @@ export default {
}
},
handleImgRemove(file) {
handleImgRemove (file) {
let index = this.fmData.internalFile.findIndex(
(item) => item.url == file.response.data.url
);
@ -789,15 +707,15 @@ export default {
console.log(this.fmData.internalFile);
},
watchImg(src) {
watchImg (src) {
window.open(src);
},
handleClose() {
handleClose () {
this.$emit("close");
},
handleSubmit() {
handleSubmit () {
this.$refs["fm"].validate((valid, messageObj) => {
if (valid) {
this.beforeSubmit();
@ -806,7 +724,7 @@ export default {
});
},
beforeSubmit() {
beforeSubmit () {
const {
fmData: { operateType },
} = this;
@ -823,15 +741,15 @@ export default {
}
},
handleWatchOrigin() {
handleWatchOrigin () {
this.pageType = "origin-info";
},
handleBackInfo() {
handleBackInfo () {
this.pageType = "info";
},
//
async submitBack() {
async submitBack () {
const url = "/gov/project/trace/return-v2";
const { fmData } = this;
@ -862,7 +780,7 @@ export default {
},
//
async submitClose() {
async submitClose () {
const url = "/gov/project/trace/closeproject-v2";
const { fmData } = this;
@ -893,7 +811,7 @@ export default {
},
//
async submitTurn() {
async submitTurn () {
const url = "/gov/project/trace/transfer-v2";
const { fmData } = this;
@ -925,7 +843,7 @@ export default {
},
//
async submitDispose() {
async submitDispose () {
const url = "/gov/project/trace/response-v2";
const { fmData } = this;
@ -956,14 +874,14 @@ export default {
}
},
async getApiData() {
async getApiData () {
await this.getProjectInfo();
this.getProjectCate();
this.getProjectProcess();
},
//
async getProjectInfo() {
async getProjectInfo () {
const url = "/gov/project/trace/projectdetail";
const { data, code, msg } = await requestPost(url, {
@ -985,7 +903,7 @@ export default {
},
//
async getReturnableList() {
async getReturnableList () {
const url = "/gov/project/trace/returnablelist";
const { data, code, msg } = await requestPost(url, {
@ -1000,7 +918,7 @@ export default {
},
//
async getMyDepartmentList() {
async getMyDepartmentList () {
const url = "/gov/project/trace/mydepartmentlist";
const { data, code, msg } = await requestPost(url, {
@ -1015,7 +933,7 @@ export default {
},
//
async getAssistanceUnitList() {
async getAssistanceUnitList () {
const url = "/heart/icpartyunit/assistanceUnitList";
const { data, code, msg } = await requestPost(url, {
@ -1030,7 +948,7 @@ export default {
},
//
async getIssueInfo() {
async getIssueInfo () {
const url = "/resi/hall/issue/detail";
const { data, code, msg } = await requestPost(url, {
@ -1045,7 +963,7 @@ export default {
},
//
async getIssueTrend() {
async getIssueTrend () {
const url = "/resi/hall/issue/votingtrend";
const { data, code, msg } = await requestPost(url, {
@ -1078,7 +996,7 @@ export default {
},
//
async getEventInfo() {
async getEventInfo () {
const url = "/gov/project/resievent/eventdetail-icdata";
const { data, code, msg } = await requestPost(url, {
@ -1099,7 +1017,7 @@ export default {
},
//
async getProjectProcess() {
async getProjectProcess () {
const url = "/gov/project/trace/processlist-v2";
const { data, code, msg } = await requestPost(url, {
@ -1119,7 +1037,7 @@ export default {
}
},
async getProjectCate() {
async getProjectCate () {
const url = "/gov/project/projectcategory/categorytaglist";
const { data, code, msg } = await requestPost(url, {
@ -1138,7 +1056,7 @@ export default {
}
},
async getCateOptions() {
async getCateOptions () {
const url = "/gov/issue/issueprojectcategorydict/list";
const { data, code, msg } = await requestPost(url, {});
@ -1155,7 +1073,7 @@ export default {
}
},
async updateProjectCate() {
async updateProjectCate () {
const url = "/gov/project/projectcategory/save";
const { projectCate } = this;
if (projectCate.length == 0) {
@ -1176,11 +1094,11 @@ export default {
}
},
handleTagChange(val) {
handleTagChange (val) {
console.log(val);
},
async createTag(tagName) {
async createTag (tagName) {
const url = "/gov/issue/issuetags/add";
const { data, code, msg } = await requestPost(url, {
@ -1197,7 +1115,7 @@ export default {
}
},
async getTagOptions() {
async getTagOptions () {
const url = "/gov/issue/issueprojecttagdict/list";
const { data, code, msg } = await requestPost(url, {
@ -1215,7 +1133,7 @@ export default {
}
},
async updateProjectTag() {
async updateProjectTag () {
const url = "/gov/project/projecttags/save";
const { projectTag } = this;
@ -1232,13 +1150,13 @@ export default {
}
},
toUserInfo(item) {
toUserInfo (item) {
this.$router.push({
path: `/main-shuju/visual-basicinfo-people/${item.icResiUserId}`,
});
},
toProjectInfo(item) {
toProjectInfo (item) {
console.log(item);
this.projectIdCopy = item.projectId;
// let data = iniData();

44
src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi.vue

@ -19,7 +19,7 @@
<el-select v-model="dataType"
:popper-append-to-body="false"
placeholder="请选择">
<el-option v-for="(item,index) in dateArray"
<el-option v-for="(item) in dateArray"
:key="item.value"
:label="item.label"
:value="item.value"
@ -315,8 +315,8 @@ export default {
let end = new Date();
let start = new Date();
if (index === '1') {//
start.setFullYear(start.getFullYear() -1);
console.log(start.getDate())
start.setFullYear(start.getFullYear() - 1);
console.log(start.getDate())
} else if (index === '2') {//
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
@ -327,10 +327,10 @@ export default {
start.setTime(start.getTime() - 3600 * 1000 * 24 * 183);
}
if (index != '0') {
this.queryStartTime = dateFormat(start,'yyyy-MM-dd')+" 00:00:00"
this.queryEndTime = dateFormat(end,'yyyy-MM-dd')+" 23:59:59"
this.queryStartTime = dateFormat(start, 'yyyy-MM-dd') + " 00:00:00"
this.queryEndTime = dateFormat(end, 'yyyy-MM-dd') + " 23:59:59"
}
if (index !== '0'){
if (index !== '0') {
await this.getApiData()
this.assignPieChart()
}
@ -345,8 +345,8 @@ export default {
handleSelectChange (value) {
console.log(value)
this.queryStartTime = value[0]+" 00:00:00"
this.queryEndTime = value[1]+" 23:59:59"
this.queryStartTime = value[0] + " 00:00:00"
this.queryEndTime = value[1] + " 23:59:59"
this.getApiData();
},
@ -420,11 +420,11 @@ export default {
{
name: "已完成",
value: data.closedRatio*100
value: data.closedRatio * 100
},
{
name: "处理中",
value: data.processingRatio*100
value: data.processingRatio * 100
},
]
@ -640,19 +640,29 @@ export default {
this.$refs.pieChart.setOption(this.pieOption)
},
handleChangeAgency (value) {
handleChangeAgency () {
let obj = this.$refs["myCascader"].getCheckedNodes()[0].data
if (obj) {
this.orgId = obj.level === 'grid' ? 'grid' : 'agency'
this.orgId = obj.this.orgId = orgArray[0]
let orgArray = []
let key = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : ''
if (key) {
orgArray = key.split('-')
this.orgId = orgArray[0]
this.orgType = orgArray[1] === 'grid' ? 'grid' : 'agency'
} else {
this.orgId = ''
this.orgType = ''
}
// let orgArray = []
// let key = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : ''
// if (key) {
// debugger
// orgArray = key.split('-')
// this.orgId = orgArray[0]
// this.orgType = orgArray[1] === 'grid' ? 'grid' : 'agency'
// } else {
// this.orgId = ''
// this.orgType = ''
// }
this.getApiData()
},

Loading…
Cancel
Save