Browse Source

Merge remote-tracking branch 'origin/dev_shequzhili' into dev

test
jianjun 3 years ago
parent
commit
f3575cbb93
  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; margin: 10px 0;
display: flex; display: flex;
padding-left: 15px; padding-left: 15px;
.line{
text-decoration:underline;
color: #3e8ef7;
}
.line:hover{
cursor:pointer
}
.info-title-2 { .info-title-2 {
width: 70px; width: 100px;
flex: 0 0 1; flex: 0 0 1;
font-size: 14px; font-size: 14px;
} }
@ -215,9 +223,6 @@
} }
} }
.m-process { .m-process {
margin-top: 30px; margin-top: 30px;
margin-left: 15px; margin-left: 15px;
@ -367,3 +372,19 @@
.m-chart { .m-chart {
min-height: 200px; 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); // retData = Vue.$afterRequestHook(retData);
// } // }
if (res.data.code > 8000 && res.data.code < 10000) { 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) { if (res.code == 10005 || res.code == 10006 || res.code == 10007) {
// 10005 token为空 10006登陆超时 10007别处登录 // 10005 token为空 10006登陆超时 10007别处登录

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

@ -426,13 +426,28 @@ export default {
}, },
handleComfirmSelPerson () { 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 () { async handleChangeGrid () {
const url = "/epmetuser/icresiuser/demandusers" const url = "/epmetuser/icresiuser/demandusers"
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/epidemicPrevention/page" // const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/epidemicPrevention/page"
let params = { let params = {

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

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

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

@ -220,6 +220,12 @@
:show-overflow-tooltip="true" :show-overflow-tooltip="true"
label="上报时间"> label="上报时间">
</el-table-column> </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" <el-table-column prop="status"
align="center" align="center"
@ -239,26 +245,23 @@
align="center" align="center"
width="100"> width="100">
<template slot-scope="scope"> <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' " <el-button v-if="scope.row.status==='processing' "
@click="handleDispose(scope.row)" @click="handleDispose(scope.row)"
type="text" type="text"
size="small" size="small"
class="div-table-button--edit">处理</el-button> class="div-table-button--edit">处理</el-button>
<!-- <el-button @click="handleDispose(scope.row)"
type="text" <el-button v-else-if="scope.row.status==='closed_case' && !scope.row.satisfactionName && user.id===scope.row.createdUserId"
size="small" @click="handleSatisfy(scope.row)"
class="div-table-button--edit">处理</el-button> -->
<el-button v-if="scope.row.status==='closed_case' && !scope.row.satisfactionName"
@click="handleDispose(scope.row)"
type="text" type="text"
size="small" size="small"
class="div-table-button--edit">评价</el-button> 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> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -286,6 +289,43 @@
@handleOk="handleOk" @handleOk="handleOk"
@dialogOk="handleEditSuccess" /> @dialogOk="handleEditSuccess" />
</div> </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> </div>
</template> </template>
@ -317,6 +357,7 @@ export default {
return { return {
pageType: "list", // list add dispose info pageType: "list", // list add dispose info
user: {},
agencyId: '', agencyId: '',
gridList: [],//list-- gridList: [],//list--
tableData: [], tableData: [],
@ -378,6 +419,18 @@ export default {
eventDetailData: {}, 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: { computed: {
@ -390,13 +443,18 @@ export default {
}, },
watch: { watch: {
"formData.endTime": function (val) { "formData.endTime": function (val) {
let arrayTemp = val.split(' ') if (val && val != '') {
this.formData.endTime = arrayTemp[0] + ' 23:59:59' let arrayTemp = val.split(' ')
this.formData.endTime = arrayTemp[0] + ' 23:59:59'
}
}, },
}, },
mounted () { mounted () {
const { user } = this.$store.state console.log(this.$store.state)
this.agencyId = user.agencyId this.user = this.$store.state.user
this.agencyId = this.user.agencyId
this.loadGrid(); this.loadGrid();
this.getTableData(); this.getTableData();
}, },
@ -466,10 +524,24 @@ export default {
this.pageType = "add"; this.pageType = "add";
}, },
async handleWatch (rowIndex) { async handleWatch (row) {
let item = this.tableData[rowIndex]; 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 () { handleClose () {
@ -526,7 +650,7 @@ export default {
this.$message.success("删除成功!"); this.$message.success("删除成功!");
this.getTableData(); this.getTableData();
} else { } else {
this.$message.success("操作失败!"); this.$message.error("操作失败!");
} }
}, },
@ -547,6 +671,19 @@ export default {
return item; 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 { } else {
} }
}, },
@ -586,4 +723,5 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss"; @import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss"; @import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
</style> </style>

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

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

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

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

Loading…
Cancel
Save