|
|
@ -1,16 +1,10 @@ |
|
|
|
<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=""> |
|
|
|
<div class="g-page" v-show="pageType == 'info'"> |
|
|
|
<div class="g-left"> |
|
|
|
<el-card> |
|
|
|
<h3>项目详情</h3> |
|
|
|
|
|
|
|
<div class="btn-close" @click="handleClose"> |
|
|
|
<img src="@/assets/img/shuju/people/close.png" /> |
|
|
|
</div> |
|
|
|
<div class="m-top"> |
|
|
|
<div class="m-info"> |
|
|
|
<div class="info-prop"> |
|
|
|
<span>项目标题:</span> |
|
|
@ -34,7 +28,7 @@ |
|
|
|
</div> |
|
|
|
<div class="info-prop" v-if="projectCate.length > 0"> |
|
|
|
<span>分类:</span> |
|
|
|
<fold-text :row="3"> |
|
|
|
<fold-text style="width: 300px" :row="3"> |
|
|
|
<div :key="item.name" v-for="item in projectCate"> |
|
|
|
{{ item.name }} |
|
|
|
</div> |
|
|
@ -42,7 +36,7 @@ |
|
|
|
</div> |
|
|
|
<div class="info-prop" v-if="projectTag.length > 0"> |
|
|
|
<span>标签:</span> |
|
|
|
<fold-text :row="3"> |
|
|
|
<fold-text style="width: 300px" :row="3"> |
|
|
|
<div :key="item.name" v-for="item in projectTag"> |
|
|
|
{{ item.name }} |
|
|
|
</div> |
|
|
@ -50,8 +44,49 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="m-process" v-if="projectProcess.length > 0"> |
|
|
|
<div class="process-title">处理进展</div> |
|
|
|
<div class="m-btns" v-if="type == 'info'"> |
|
|
|
<el-button size="" style="margin-right: 50px" @click="handleClose" |
|
|
|
>关闭</el-button |
|
|
|
> |
|
|
|
<el-button size="" type="danger" @click="handleClose" |
|
|
|
>确定</el-button |
|
|
|
> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
<el-card v-if="type == 'edit'"> |
|
|
|
<h3>处理</h3> |
|
|
|
<div class="m-fm"> |
|
|
|
<el-form |
|
|
|
:inline="true" |
|
|
|
: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="3">处理/响应</el-radio> |
|
|
|
<el-radio :label="6">结案</el-radio> |
|
|
|
<el-radio :label="9">转其他机关/科室</el-radio> |
|
|
|
<el-radio :label="9">退回</el-radio> |
|
|
|
</el-radio-group> |
|
|
|
</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="handleClose" |
|
|
|
>确定</el-button |
|
|
|
> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
</div> |
|
|
|
<div class="g-right"> |
|
|
|
<el-card class="m-card" v-if="projectProcess.length > 0"> |
|
|
|
<h3>处理进展</h3> |
|
|
|
<div class="m-process"> |
|
|
|
<div class="list"> |
|
|
|
<div |
|
|
|
class="item" |
|
|
@ -106,64 +141,12 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div v-if="projectInfo.origin !== 'agency'" 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" /> |
|
|
|
</el-card> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="m-case" v-if="projectInfo.origin !== 'agency'"> |
|
|
|
<div class="m-yanpan" v-if="groupIndex == 0"> |
|
|
|
<div v-if="projectId || true"> |
|
|
|
<screen-loading v-if="!yanPan.loading">加载中</screen-loading> |
|
|
|
<analyse |
|
|
|
v-else-if="yanPan.singleTitle" |
|
|
|
:singleTitle="yanPan.singleTitle" |
|
|
|
:moreTitle="yanPan.moreTitle" |
|
|
|
:userList="yanPan.homeUserList" |
|
|
|
:userName="yanPan.icUserName" |
|
|
|
:singleList="yanPan.singleList" |
|
|
|
:hasEvent="yanPan.hasEvent" |
|
|
|
:moreList="yanPan.moreList" |
|
|
|
@user="toUserInfo" |
|
|
|
@project="toProjectInfo" |
|
|
|
/> |
|
|
|
<div v-else class="m-hint"> |
|
|
|
<img |
|
|
|
src="@/assets/img/modules/visual/noData.png" |
|
|
|
class="no-data-img" |
|
|
|
/> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div v-if="groupIndex == 1"> |
|
|
|
<div |
|
|
|
class="m-row" |
|
|
|
v-if="projectInfo.originId && projectInfo.origin !== 'work_event'" |
|
|
|
> |
|
|
|
<div class="g-page" v-show="pageType == 'issue-info'"> |
|
|
|
<div class="g-left"> |
|
|
|
<div v-if="projectInfo.origin === 'issue'" class="m-info"> |
|
|
|
<div class="info-prop"> |
|
|
|
<span>议题标题:</span> |
|
|
@ -193,95 +176,25 @@ |
|
|
|
<span>{{ issueInfo.shiftIssueTime }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div v-if="projectInfo.origin === 'resi_event'" 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 class="info-title-2">提交时间:</span> |
|
|
|
<span>{{ info.eventTime }}</span> |
|
|
|
</div> |
|
|
|
<div class="info-prop"> |
|
|
|
<span class="info-title-2">报事人:</span> |
|
|
|
<span>{{ info.eventPeopleName }}</span> |
|
|
|
</div> |
|
|
|
<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> |
|
|
|
<div> |
|
|
|
<div>{{ info.eventPersonShow }}</div> |
|
|
|
<div>{{ info.eventOrgShow }}</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- <span>{{ info.eventPerson.join("、") || "--" }}</span> --> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div v-if="projectInfo.origin === 'issue'" class="m-line"> |
|
|
|
<div class="stat"> |
|
|
|
<div class="stat-item"> |
|
|
|
<div> |
|
|
|
{{ issueTrend.realityVoteCount }}/{{ |
|
|
|
issueTrend.shouldVoteCount |
|
|
|
}} |
|
|
|
</div> |
|
|
|
<div class="z-weak">已表决/应表决</div> |
|
|
|
</div> |
|
|
|
<div class="stat-item"> |
|
|
|
<div>{{ issueTrend.supportAmount }}</div> |
|
|
|
<div class="z-weak">支持</div> |
|
|
|
</div> |
|
|
|
<div class="stat-item"> |
|
|
|
<div>{{ issueTrend.oppositionAmount }}</div> |
|
|
|
<div class="z-weak">反对</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<line-chart |
|
|
|
v-if="issueChartData.length > 0" |
|
|
|
:list="issueChartData" |
|
|
|
/> |
|
|
|
</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 lineChart from "@/views/modules/visual/cpts/line-chart"; |
|
|
|
import analyse from "@/views/modules/visual/cpts/analyse"; |
|
|
|
import foldText from "@/views/components/foldText"; |
|
|
|
import dateFormat from "dai-js/tools/dateFormat"; |
|
|
|
|
|
|
|
function iniData() { |
|
|
|
return { |
|
|
|
pageType: "info", |
|
|
|
|
|
|
|
projectIdCopy: this.projectId, |
|
|
|
groupList: [{ label: "研判分析" }, { label: "项目来源" }], |
|
|
|
groupIndex: 0, |
|
|
|
startGroupIndex: 0, |
|
|
|
|
|
|
|
fmData: { |
|
|
|
operateType: "", |
|
|
|
}, |
|
|
|
|
|
|
|
projectProcess: [], |
|
|
|
|
|
|
@ -346,66 +259,37 @@ function iniData() { |
|
|
|
|
|
|
|
projectCate: [], |
|
|
|
projectTag: [], |
|
|
|
|
|
|
|
yanPan: { |
|
|
|
loading: false, |
|
|
|
|
|
|
|
icResiUserId: "", |
|
|
|
houseId: "", |
|
|
|
icUserName: "", |
|
|
|
|
|
|
|
homeUserList: [ |
|
|
|
// { |
|
|
|
// homeId: '', |
|
|
|
// icUserId: '', |
|
|
|
// icUserName: '', |
|
|
|
// } |
|
|
|
], |
|
|
|
projectData: [ |
|
|
|
// { |
|
|
|
// firstCategoryCode: '', |
|
|
|
// firstCategoryName: '', |
|
|
|
// projectList: [], |
|
|
|
// } |
|
|
|
], |
|
|
|
hasEvent: false, |
|
|
|
singleTitle: "", |
|
|
|
moreTitle: "", |
|
|
|
singleList: [], //楼院小组 |
|
|
|
moreList: [], // |
|
|
|
}, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
export default { |
|
|
|
name: "demandInfo", |
|
|
|
name: "projectInfo", |
|
|
|
props: { |
|
|
|
projectId: { |
|
|
|
type: String, |
|
|
|
default: "", |
|
|
|
default: "64502a8f1048a7240295527a9b32e513", |
|
|
|
}, |
|
|
|
userId: { |
|
|
|
type: { |
|
|
|
type: String, |
|
|
|
default: "", |
|
|
|
}, |
|
|
|
categoryCodes: { |
|
|
|
type: Array, |
|
|
|
default: [], |
|
|
|
default: "info", |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
components: { |
|
|
|
cptCard, |
|
|
|
cptTb, |
|
|
|
analyse, |
|
|
|
screenLoading, |
|
|
|
lineChart, |
|
|
|
foldText, |
|
|
|
}, |
|
|
|
|
|
|
|
data: iniData, |
|
|
|
|
|
|
|
computed: {}, |
|
|
|
computed: { |
|
|
|
dataRule() { |
|
|
|
return { |
|
|
|
operateType: [ |
|
|
|
{ required: true, message: "处理方式不能为空", trigger: "blur" }, |
|
|
|
], |
|
|
|
}; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
watch: { |
|
|
|
projectId() { |
|
|
@ -430,22 +314,6 @@ export default { |
|
|
|
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"); |
|
|
|
}, |
|
|
@ -460,9 +328,6 @@ export default { |
|
|
|
} else if (this.projectInfo.origin === "resi_event") { |
|
|
|
this.getEventInfo(); |
|
|
|
} |
|
|
|
if (this.projectInfo.origin !== "agency") { |
|
|
|
await this.getYanPan(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
//加载组织数据 |
|
|
@ -585,98 +450,6 @@ export default { |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
//加载组织数据 |
|
|
|
async getYanPan() { |
|
|
|
const url = "/data/aggregator/project/projectanalysis"; |
|
|
|
|
|
|
|
if (!this.userId) return (this.yanPan.loading = true); |
|
|
|
|
|
|
|
const { data, code, msg } = await requestPost(url, { |
|
|
|
categoryCodeList: this.categoryCodes, |
|
|
|
userId: this.userId, |
|
|
|
projectId: this.projectIdCopy, |
|
|
|
}); |
|
|
|
|
|
|
|
if (code === 0) { |
|
|
|
data.icResiUserId = data.icUserId; |
|
|
|
data.homeUserList.forEach((item) => { |
|
|
|
item.icResiUserId = item.icUserId; |
|
|
|
}); |
|
|
|
|
|
|
|
let array1 = []; |
|
|
|
let array2 = []; |
|
|
|
|
|
|
|
//楼院小组、居民上报都存在是,研判分析显示两个分支 |
|
|
|
if ( |
|
|
|
data.groupProjectList && |
|
|
|
data.groupProjectList.length > 0 && |
|
|
|
data.eventProjectList && |
|
|
|
data.eventProjectList.length > 0 |
|
|
|
) { |
|
|
|
this.yanPan.hasEvent = true; |
|
|
|
this.yanPan.singleTitle = "楼院小组"; |
|
|
|
this.yanPan.moreTitle = "事件上报"; |
|
|
|
array1 = [...data.groupProjectList]; |
|
|
|
array2 = [...data.eventProjectList]; |
|
|
|
} else { |
|
|
|
this.yanPan.hasEvent = false; |
|
|
|
if (data.groupProjectList && data.groupProjectList.length > 0) { |
|
|
|
array1 = [...data.groupProjectList]; |
|
|
|
this.yanPan.singleTitle = "楼院小组"; |
|
|
|
} else if ( |
|
|
|
data.eventProjectList && |
|
|
|
data.eventProjectList.length > 0 |
|
|
|
) { |
|
|
|
array1 = [...data.eventProjectList]; |
|
|
|
this.yanPan.singleTitle = "事件上报"; |
|
|
|
} else { |
|
|
|
array1 = []; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (array1.length > 0) { |
|
|
|
data.singleList = array1.map((item) => { |
|
|
|
return { |
|
|
|
categoryCode: item.categoryCode, |
|
|
|
categoryName: item.categoryName, |
|
|
|
showItem: true, |
|
|
|
projectList: item.projectList.map((subItem) => { |
|
|
|
return { |
|
|
|
title: subItem.title, |
|
|
|
status: subItem.status, |
|
|
|
statusName: subItem.status == "pending" ? "待处理" : "结案", |
|
|
|
projectId: subItem.projectId, |
|
|
|
}; |
|
|
|
}), |
|
|
|
}; |
|
|
|
}); |
|
|
|
} |
|
|
|
if (array2.length > 0) { |
|
|
|
data.moreList = array2.map((item) => { |
|
|
|
return { |
|
|
|
categoryCode: item.categoryCode, |
|
|
|
categoryName: item.categoryName, |
|
|
|
showItem: true, |
|
|
|
projectList: item.projectList.map((subItem) => { |
|
|
|
return { |
|
|
|
title: subItem.title, |
|
|
|
status: subItem.status, |
|
|
|
statusName: subItem.status == "pending" ? "待处理" : "结案", |
|
|
|
projectId: subItem.projectId, |
|
|
|
}; |
|
|
|
}), |
|
|
|
}; |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
this.yanPan = { ...this.yanPan, ...data }; |
|
|
|
console.log(this.yanPan); |
|
|
|
this.yanPan.loading = true; |
|
|
|
} else { |
|
|
|
this.$message.error(msg); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
toUserInfo(item) { |
|
|
|
this.$router.push({ |
|
|
|
path: `/main-shuju/visual-basicinfo-people/${item.icResiUserId}`, |
|
|
@ -698,6 +471,6 @@ export default { |
|
|
|
|
|
|
|
<style |
|
|
|
lang="scss" |
|
|
|
src="@/assets/scss/modules/visual/incident-info.scss" |
|
|
|
src="@/assets/scss/modules/shequzhili/project-info.scss" |
|
|
|
scoped |
|
|
|
></style> |
|
|
|