You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
561 lines
15 KiB
561 lines
15 KiB
<template>
|
|
<div class="m-pop">
|
|
<div class="wrap">
|
|
<cpt-card>
|
|
<div class="title">
|
|
<img src="@/assets/img/shuju/title-tip.png" />
|
|
<span>事件详情</span>
|
|
</div>
|
|
|
|
<div class="btn-close" @click="handleClose">
|
|
<img src="@/assets/img/shuju/people/close.png" />
|
|
</div>
|
|
|
|
<div class="m-info">
|
|
<div class="info-title">事件内容</div>
|
|
<div class="info-content">{{ info.eventContent }}</div>
|
|
<div class="info-pics">
|
|
<img
|
|
:src="src"
|
|
:key="src"
|
|
v-for="src in info.eventImgs"
|
|
@click="watchImg(src)"
|
|
/>
|
|
</div>
|
|
<div class="info-prop">
|
|
<span>提交时间:</span>
|
|
<span>{{ info.eventTime }}</span>
|
|
</div>
|
|
<div class="info-prop">
|
|
<span>报事人:</span>
|
|
<span>{{ info.eventPeopleName }}</span>
|
|
</div>
|
|
<div class="info-prop">
|
|
<span>所属网格:</span>
|
|
<span>{{ info.gridName }}</span>
|
|
</div>
|
|
<div class="info-prop">
|
|
<span>提报给:</span>
|
|
<div>
|
|
<div :key="item" v-for="item in info.eventOrg">{{ item }}</div>
|
|
<div :key="item" v-for="item in info.eventPerson">{{ item }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="tabs">
|
|
<div
|
|
class="tab-btn"
|
|
@click="subStartGroupIndex"
|
|
v-if="groupList.length > 9"
|
|
>
|
|
<img src="@/assets/img/shuju/people/arrow-double-left.png" />
|
|
</div>
|
|
<div
|
|
v-show="index >= startGroupIndex && index < startGroupIndex + 9"
|
|
class="tab"
|
|
:class="groupIndex % groupList.length == index ? 'z-on' : ''"
|
|
:key="'tab' + index"
|
|
@click="groupIndex = index"
|
|
v-for="(item, index) in groupList"
|
|
>
|
|
{{ item.label }}
|
|
</div>
|
|
<div
|
|
class="tab-btn"
|
|
@click="addStartGroupIndex"
|
|
v-if="groupList.length > 9"
|
|
>
|
|
<img src="@/assets/img/shuju/people/arrow-double-right.png" />
|
|
</div>
|
|
</div>
|
|
|
|
<div class="m-case">
|
|
<div class="m-yanpan" v-if="groupIndex == 0">
|
|
<div v-if="info.projectId">
|
|
<analyse
|
|
v-if="yanPan.loading"
|
|
singleTitle="智能随手拍"
|
|
:userList="yanPan.houseUserList"
|
|
:userName="yanPan.icUserName"
|
|
:singleList="yanPan.categoryList"
|
|
@user="toUserInfo"
|
|
@project="toProjectInfo"
|
|
/>
|
|
<screen-loading v-else>加载中</screen-loading>
|
|
</div>
|
|
<div v-else class="m-hint">
|
|
<img
|
|
src="@/assets/img/modules/visual/noData.png"
|
|
class="no-data-img"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="m-tb" v-if="groupIndex == 1">
|
|
<cpt-tb
|
|
:col-list="comment.colList"
|
|
:loading="comment.loading"
|
|
:header="comment.header"
|
|
:list="comment.list"
|
|
></cpt-tb>
|
|
</div>
|
|
|
|
<div v-if="groupIndex == 2">
|
|
<div class="m-row" v-if="info.projectId">
|
|
<div class="m-info">
|
|
<div class="info-prop">
|
|
<span>项目标题:</span>
|
|
<span>{{ projectInfo.projectTitle }}</span>
|
|
</div>
|
|
<div class="info-prop">
|
|
<span>项目方案:</span>
|
|
<span>{{ projectInfo.backGround }}</span>
|
|
</div>
|
|
<div class="info-prop">
|
|
<span>内部备注:</span>
|
|
<span>{{ projectInfo.internalRemark || "--" }}</span>
|
|
</div>
|
|
<div class="info-prop">
|
|
<span>当前处理部门:</span>
|
|
<span>{{ projectInfo.departmentNameList.join("、") }}</span>
|
|
</div>
|
|
<div class="info-prop" v-if="projectCate.length > 0">
|
|
<span>分类:</span>
|
|
<fold-text :row="3">
|
|
<div :key="item.name" v-for="item in projectCate">
|
|
{{ item.name }}
|
|
</div>
|
|
</fold-text>
|
|
</div>
|
|
<div class="info-prop" v-if="projectTag.length > 0">
|
|
<span>标签:</span>
|
|
<fold-text :row="3">
|
|
<div :key="item.name" v-for="item in projectTag">
|
|
{{ item.name }}
|
|
</div>
|
|
</fold-text>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="m-process" v-if="projectProcess.length > 0">
|
|
<div class="process-title">处理进展</div>
|
|
<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 class="detail">
|
|
<div class="detail-field">处理部门:</div>
|
|
<div class="detail-value">{{ item.departmentName }}</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 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>
|
|
</div>
|
|
<div v-else class="m-hint">
|
|
<img
|
|
src="@/assets/img/modules/visual/noData.png"
|
|
class="no-data-img"
|
|
/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</cpt-card>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import cptCard from "@/views/modules/visual/cpts/card";
|
|
import screenLoading from "@/views/modules/visual/cpts/loading";
|
|
import { requestPost } from "@/js/dai/request";
|
|
import cptTb from "@/views/modules/visual/cpts/tb";
|
|
import analyse from "@/views/modules/visual/cpts/analyse";
|
|
import foldText from "@/views/components/foldText";
|
|
import dateFormat from "dai-js/tools/dateFormat";
|
|
|
|
function iniData() {
|
|
return {
|
|
groupList: [
|
|
{ label: "研判分析" },
|
|
{ label: "查看回复" },
|
|
{ label: "查看项目" },
|
|
],
|
|
groupIndex: 0,
|
|
startGroupIndex: 0,
|
|
|
|
info: {
|
|
eventTime: "",
|
|
eventContent: "",
|
|
eventAddress: "",
|
|
gridName: "",
|
|
isClosed: true,
|
|
isResolve: true,
|
|
isRollback: true,
|
|
eventImgs: [],
|
|
eventPerson: [],
|
|
eventOrg: [],
|
|
eventPeopleName: "",
|
|
projectInfo: {
|
|
projectId: "",
|
|
operationName: "",
|
|
operationTime: "",
|
|
projectDeclare: "",
|
|
},
|
|
},
|
|
|
|
comment: {
|
|
loading: true,
|
|
colList: [
|
|
{
|
|
align: "center",
|
|
width: "20%",
|
|
},
|
|
{
|
|
align: "center",
|
|
width: "30%",
|
|
},
|
|
{
|
|
align: "left",
|
|
width: "50%",
|
|
},
|
|
],
|
|
header: ["回复者", "回复时间", "回复内容"],
|
|
list: [],
|
|
},
|
|
|
|
projectProcess: [],
|
|
|
|
projectInfo: {
|
|
backGround: "",
|
|
departmentList: [
|
|
// { departmentName: "南宁社区-南宁第二网格", staffList: ["周相成"] },
|
|
],
|
|
departmentNameList: [],
|
|
internalRemark: "",
|
|
isSend: false,
|
|
locateAddress: "",
|
|
locateDimension: "",
|
|
locateLongitude: "",
|
|
origin: "",
|
|
originId: "",
|
|
platformIds: [],
|
|
processable: false,
|
|
projectId: "",
|
|
projectStatus: "pending",
|
|
projectTitle: "",
|
|
publicReply: "",
|
|
returnable: false,
|
|
},
|
|
|
|
projectCate: [],
|
|
projectTag: [],
|
|
|
|
yanPan: {
|
|
loading: false,
|
|
|
|
icResiUserId: "",
|
|
houseId: "",
|
|
icUserName: "",
|
|
epmetUserIdList: [],
|
|
houseUserList: [
|
|
// {
|
|
// icResiUserId: '',
|
|
// icUserName: '',
|
|
// }
|
|
],
|
|
categoryList: [],
|
|
projectData: [
|
|
// {
|
|
// firstCategoryCode: '',
|
|
// firstCategoryName: '',
|
|
// projectList: [],
|
|
// }
|
|
],
|
|
},
|
|
};
|
|
}
|
|
|
|
export default {
|
|
name: "demandInfo",
|
|
props: {
|
|
resiEventId: {
|
|
type: String,
|
|
default: "",
|
|
},
|
|
epmetUserIdList: {
|
|
type: Array,
|
|
default: [],
|
|
},
|
|
icResiUserId: {
|
|
type: String,
|
|
default: "",
|
|
},
|
|
},
|
|
|
|
components: {
|
|
cptCard,
|
|
cptTb,
|
|
analyse,
|
|
screenLoading,
|
|
foldText,
|
|
},
|
|
|
|
data: iniData,
|
|
|
|
computed: {},
|
|
|
|
watch: {
|
|
resiEventId() {
|
|
let data = iniData();
|
|
Object.keys(data).forEach((k) => {
|
|
this[k] = data[k];
|
|
});
|
|
this.getApiData();
|
|
},
|
|
},
|
|
|
|
mounted() {
|
|
this.getApiData();
|
|
},
|
|
|
|
methods: {
|
|
watchImg(src) {
|
|
window.open(src);
|
|
},
|
|
|
|
addStartGroupIndex() {
|
|
const { startGroupIndex, groupList } = this;
|
|
if (startGroupIndex < groupList.length - 9) {
|
|
this.startGroupIndex = startGroupIndex + 1;
|
|
} else {
|
|
this.startGroupIndex = groupList.length - 9;
|
|
}
|
|
},
|
|
subStartGroupIndex() {
|
|
const { startGroupIndex, groupList } = this;
|
|
if (startGroupIndex > 0) {
|
|
this.startGroupIndex = startGroupIndex - 1;
|
|
} else {
|
|
this.startGroupIndex = 0;
|
|
}
|
|
},
|
|
handleClose() {
|
|
this.$emit("close");
|
|
},
|
|
|
|
async getApiData() {
|
|
this.getComment();
|
|
await this.getInfo();
|
|
this.getProjectProcess();
|
|
this.getProjectInfo();
|
|
this.getProjectCate();
|
|
this.getYanPan();
|
|
},
|
|
|
|
//加载组织数据
|
|
async getInfo() {
|
|
let url = "/gov/project/icEvent/icevent-eventdetail-icdata";
|
|
// 市北沿用旧接口
|
|
if (
|
|
this.$store.state.user.customerId == "b09527201c4409e19d1dbc5e3c3429a1"
|
|
) {
|
|
url = "/gov/project/resievent/eventdetail-icdata";
|
|
}
|
|
|
|
const { data, code, msg } = await requestPost(url, {
|
|
resiEventId: this.resiEventId,
|
|
});
|
|
|
|
if (code === 0) {
|
|
this.info = data;
|
|
} else {
|
|
this.$message.error(msg);
|
|
}
|
|
},
|
|
|
|
//加载组织数据
|
|
async getComment() {
|
|
let url = "/gov/project/icEvent/icevent-list";
|
|
if (
|
|
this.$store.state.user.customerId == "b09527201c4409e19d1dbc5e3c3429a1"
|
|
) {
|
|
url = "/gov/project/resieventreply/list";
|
|
}
|
|
|
|
const { data, code, msg } = await requestPost(url, {
|
|
resiEventId: this.resiEventId,
|
|
});
|
|
this.comment.loading = false;
|
|
|
|
if (code === 0) {
|
|
this.comment.list = data.map((item) => {
|
|
return [item.replyName, item.replyTime, item.replyContent];
|
|
});
|
|
} else {
|
|
this.$message.error(msg);
|
|
}
|
|
},
|
|
|
|
//加载组织数据
|
|
async getProjectProcess() {
|
|
const {
|
|
info: { projectInfo },
|
|
} = this;
|
|
if (!projectInfo || !projectInfo.projectId) return;
|
|
const url = "/gov/project/trace/processlist-v2";
|
|
|
|
const { data, code, msg } = await requestPost(url, {
|
|
projectId: projectInfo.projectId,
|
|
});
|
|
|
|
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);
|
|
}
|
|
},
|
|
|
|
//加载组织数据
|
|
async getProjectInfo() {
|
|
const {
|
|
info: { projectInfo },
|
|
} = this;
|
|
if (!projectInfo || !projectInfo.projectId) return;
|
|
const url = "/gov/project/trace/projectdetail";
|
|
|
|
const { data, code, msg } = await requestPost(url, {
|
|
projectId: projectInfo.projectId,
|
|
});
|
|
|
|
if (code === 0) {
|
|
this.projectInfo = data;
|
|
} else {
|
|
this.$message.error(msg);
|
|
}
|
|
},
|
|
|
|
async getProjectCate() {
|
|
const {
|
|
info: { projectInfo },
|
|
} = this;
|
|
if (!projectInfo || !projectInfo.projectId) return;
|
|
const url = "/gov/project/projectcategory/categorytaglist";
|
|
|
|
const { data, code, msg } = await requestPost(url, {
|
|
projectId: projectInfo.projectId,
|
|
});
|
|
|
|
if (code === 0) {
|
|
this.projectCate = data.categoryList;
|
|
this.projectTag = data.tagList;
|
|
} else {
|
|
this.$message.error(msg);
|
|
}
|
|
},
|
|
|
|
//加载组织数据
|
|
async getYanPan() {
|
|
const url = "/gov/project/resievent/research-analysis";
|
|
|
|
const { data, code, msg } = await requestPost(url, {
|
|
resiEventId: this.resiEventId,
|
|
epmetUserIdList: this.epmetUserIdList,
|
|
icResiUserId: this.icResiUserId,
|
|
projectId: this.info.projectId,
|
|
});
|
|
|
|
if (code === 0) {
|
|
data.categoryList = data.projectData.map((item) => {
|
|
return {
|
|
categoryCode: item.firstCategoryCode,
|
|
categoryName: item.firstCategoryName,
|
|
showItem: true,
|
|
projectList: item.projectList.map((subItem) => {
|
|
return {
|
|
title: subItem.projectTitle,
|
|
status: subItem.projectStatus,
|
|
statusName:
|
|
subItem.projectStatus == "pending" ? "待处理" : "结案",
|
|
projectId: subItem.projectId,
|
|
resiEventId: subItem.resiEventId,
|
|
};
|
|
}),
|
|
};
|
|
});
|
|
this.yanPan = { ...this.yanPan, ...data };
|
|
this.yanPan.loading = true;
|
|
} else {
|
|
this.$message.error(msg);
|
|
}
|
|
},
|
|
|
|
toUserInfo(item) {
|
|
this.$router.push({
|
|
path: `/main-shuju/visual-basicinfo-people/${item.icResiUserId}`,
|
|
});
|
|
},
|
|
|
|
toProjectInfo(item) {
|
|
console.log(item);
|
|
this.resiEventId = item.resiEventId;
|
|
},
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style
|
|
lang="scss"
|
|
src="@/assets/scss/modules/visual/incident-info.scss"
|
|
scoped
|
|
></style>
|
|
|