Browse Source

333

shibei_master
dai 3 years ago
parent
commit
eaf70e7e3f
  1. 7
      src/assets/scss/modules/shequzhili/project-info.scss
  2. 275
      src/views/modules/shequzhili/xiangmu/cpts/event-info.vue
  3. 2
      src/views/modules/shequzhili/xiangmu/cpts/issue-info.vue
  4. 154
      src/views/modules/shequzhili/xiangmu/cpts/issue-suggest.vue
  5. 154
      src/views/modules/shequzhili/xiangmu/cpts/project-evaluation.vue
  6. 44
      src/views/modules/shequzhili/xiangmu/cpts/project-info.vue
  7. 6
      src/views/modules/visual/cpts/line-chart.vue

7
src/assets/scss/modules/shequzhili/project-info.scss

@ -19,8 +19,7 @@
overflow-x: auto; overflow-x: auto;
} }
.m-fm{ .m-fm {
} }
.m-btns { .m-btns {
@ -322,3 +321,7 @@
.m-top { .m-top {
display: flex; display: flex;
} }
.m-chart {
min-height: 200px;
}

275
src/views/modules/shequzhili/xiangmu/cpts/event-info.vue

@ -3,63 +3,41 @@
<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> <el-card>
<h3>议题详情</h3> <h3>事件详情</h3>
<div class="m-row"> <div class="m-row">
<div class="m-info"> <div class="m-info">
<div class="info-prop"> <div class="info-title">事件内容</div>
<span>议题标题</span> <div class="info-content">{{ info.eventContent }}</div>
<span>{{ issueInfo.issueTitle }}</span> <div class="info-pics">
<img
:src="src"
:key="src"
v-for="src in info.eventImgs"
@click="watchImg(src)"
/>
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>议题建议</span> <span class="info-title-2">提交时间</span>
<span>{{ issueInfo.issueSuggestion }}</span> <span>{{ info.eventTime }}</span>
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>所属网格</span> <span class="info-title-2">报事人</span>
<span>{{ issueInfo.belongsGridName || "--" }}</span> <span>{{ info.eventPeopleName }}</span>
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>议题发起人</span> <span class="info-title-2">所属网格</span>
<span>{{ issueInfo.issueInitiator }}</span> <span>{{ info.gridName }}</span>
</div>
<div
v-if="issueInfo.topicInfo && issueInfo.topicInfo.groupName"
class="info-prop"
>
<span>议题来源</span>
<span>{{ issueInfo.topicInfo.groupName }}</span>
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>转议题时间</span> <span class="info-title-2">提报给</span>
<span>{{ issueInfo.shiftIssueTime }}</span> <div>
</div> <div>{{ info.eventPersonShow }}</div>
</div> <div>{{ info.eventOrgShow }}</div>
<div 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>
<div class="stat-item">
<div>{{ issueTrend.oppositionAmount }}</div>
<div class="z-weak">反对</div>
</div>
</div>
<line-chart <!-- <span>{{ info.eventPerson.join("、") || "--" }}</span> -->
v-if="issueChartData.length > 0" </div>
:list="issueChartData"
/>
</div> </div>
</div> </div>
@ -68,100 +46,7 @@
</div> </div>
</el-card> </el-card>
</div> </div>
<div class="g-right"> <div class="g-right"></div>
<el-card class="m-card" v-if="issueProcess.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 issueProcess"
>
<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>
</el-card>
</div>
</div>
<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>
<span>{{ issueInfo.issueTitle }}</span>
</div>
<div class="info-prop">
<span>议题建议</span>
<span>{{ issueInfo.issueSuggestion }}</span>
</div>
<div class="info-prop">
<span>所属网格</span>
<span>{{ issueInfo.belongsGridName || "--" }}</span>
</div>
<div class="info-prop">
<span>议题发起人</span>
<span>{{ issueInfo.issueInitiator }}</span>
</div>
<div
v-if="issueInfo.topicInfo && issueInfo.topicInfo.groupName"
class="info-prop"
>
<span>议题来源</span>
<span>{{ issueInfo.topicInfo.groupName }}</span>
</div>
<div class="info-prop">
<span>转议题时间</span>
<span>{{ issueInfo.shiftIssueTime }}</span>
</div>
</div>
</div>
</div> </div>
</div> </div>
</template> </template>
@ -175,31 +60,32 @@ function iniData() {
return { return {
pageType: "info", pageType: "info",
issueProcess: [], eventInfo: {
eventTime: "",
issueInfo: { eventContent: "",
attitude: "", eventAddress: "",
belongsGridName: "", gridName: "",
issueIdea: "", isClosed: true,
issueInitiator: "", isResolve: true,
issueStatus: "", isRollback: true,
issueSuggestion: "", eventImgs: [],
issueTitle: "", eventPerson: [],
joinVote: true, eventOrg: [],
projectId: "", eventPeopleName: "",
projectStatus: false, projectInfo: {
publishIdeaFlag: false, projectId: "",
operationName: "",
operationTime: "",
projectDeclare: "",
},
}, },
issueTrend: {},
issueChartData: [],
}; };
} }
export default { export default {
name: "issueInfo", name: "issueInfo",
props: { props: {
issueId: { eventId: {
type: String, type: String,
default: "64502a8f1048a7240295527a9b32e513", default: "64502a8f1048a7240295527a9b32e513",
}, },
@ -232,80 +118,25 @@ export default {
this.$emit("close"); this.$emit("close");
}, },
handleSubmit() {
this.$emit("afterEdit");
},
async getApiData() { async getApiData() {
this.getIssueInfo(); this.getEventInfo();
this.getIssueTrend();
this.getIssueProcess();
}, },
//
async getIssueInfo() {
const url = "/resi/hall/issue/detail";
const { data, code, msg } = await requestPost(url, {
issueId: this.issueId,
});
if (code === 0) {
this.issueInfo = data;
} else {
this.$message.error(msg);
}
},
//
async getIssueTrend() {
const url = "/resi/hall/issue/votingtrend";
const { data, code, msg } = await requestPost(url, {
issueId: this.issueId,
});
if (code === 0) {
this.issueTrend = data;
let chartData = [];
data.polyLine.forEach((item) => {
let date = dateFormat(new Date(item.voteDate * 1000), "yyyy-MM-dd");
// console.log("date:" + date);
chartData.push(
{
date,
value: item.supportIncrement,
type: "支持",
},
{
date,
value: item.oppositionIncrement,
type: "反对",
}
);
});
this.issueChartData = chartData;
} else {
this.$message.error(msg);
}
},
// //
async getIssueProcess() { async getEventInfo() {
const url = "/gov/issue/manage/progress"; const url = "/gov/project/resievent/eventdetail-icdata";
const { data, code, msg } = await requestPost(url, { const { data, code, msg } = await requestPost(url, {
issueId: this.issueId, resiEventId: this.projectInfo.originId,
}); });
if (code === 0) { if (code === 0) {
this.issueProcess = data.map((item) => { if (data.eventOrg && data.eventOrg.length > 0) {
item.processTime = dateFormat( data.eventOrgShow = data.eventOrg.join("、");
new Date(item.processTime * 1000), }
"yyyy-MM-dd hh:mm" if (data.eventPerson && data.eventPerson.length > 0) {
); data.eventPersonShow = data.eventPerson.join("、");
return item; }
}); this.info = { ...data };
} else { } else {
this.$message.error(msg); this.$message.error(msg);
} }

2
src/views/modules/shequzhili/xiangmu/cpts/issue-info.vue

@ -56,7 +56,7 @@
</div> </div>
</div> </div>
<div v-if="issueChartData.length > 0"> <div v-if="issueChartData.length > 0" class="m-chart">
<line-chart :list="issueChartData" /> <line-chart :list="issueChartData" />
</div> </div>
</div> </div>

154
src/views/modules/shequzhili/xiangmu/cpts/issue-suggest.vue

@ -0,0 +1,154 @@
<template>
<div class="" style="padding: 0 20px 10px">
<h2>项目评价</h2>
<el-table
:data="tableData"
border
style="width: 100%"
class="resi-table"
:height="maxTableHeight"
>
<el-table-column
label="序号"
fixed="left"
type="index"
align="center"
width="50"
/>
<el-table-column
prop="evaluationUser"
align="center"
label="评价人"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="time"
label="评价时间"
align="center"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="content"
align="center"
label="评价内容 "
:show-overflow-tooltip="true"
>
</el-table-column>
</el-table>
<div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total"
:total="total"
>
</el-pagination>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
tableData: [],
};
}
export default {
name: "projectEvaluation",
props: {
projectId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
},
components: {},
data: iniData,
computed: {},
watch: {
projectId() {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
});
this.getApiData();
},
},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.pageNo = val;
this.getTableData();
},
async getApiData() {
await this.getTableData();
},
async getTableData() {
// const url = "/gov/project/project/satisfaction-evaluation-list";
const url =
"http://yapi.elinkservice.cn/mock/245/gov/project/project/satisfaction-evaluation-list";
const { pageSize, pageNo, fmData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...fmData,
});
if (code === 0) {
console.log("列表请求成功!!!!!!!!!!!!!!");
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
: [];
} else {
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

154
src/views/modules/shequzhili/xiangmu/cpts/project-evaluation.vue

@ -0,0 +1,154 @@
<template>
<div class="" style="padding: 0 20px 10px">
<h2>项目评价</h2>
<el-table
:data="tableData"
border
style="width: 100%"
class="resi-table"
:height="maxTableHeight"
>
<el-table-column
label="序号"
fixed="left"
type="index"
align="center"
width="50"
/>
<el-table-column
prop="evaluationUser"
align="center"
label="评价人"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="time"
label="评价时间"
align="center"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="content"
align="center"
label="评价内容 "
:show-overflow-tooltip="true"
>
</el-table-column>
</el-table>
<div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total"
:total="total"
>
</el-pagination>
</div>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
tableData: [],
};
}
export default {
name: "projectEvaluation",
props: {
projectId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
},
components: {},
data: iniData,
computed: {},
watch: {
projectId() {
let data = iniData();
Object.keys(data).forEach((k) => {
this[k] = data[k];
});
this.getApiData();
},
},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.pageNo = val;
this.getTableData();
},
async getApiData() {
await this.getTableData();
},
async getTableData() {
// const url = "/gov/project/project/satisfaction-evaluation-list";
const url =
"http://yapi.elinkservice.cn/mock/245/gov/project/project/satisfaction-evaluation-list";
const { pageSize, pageNo, fmData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...fmData,
});
if (code === 0) {
console.log("列表请求成功!!!!!!!!!!!!!!");
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
: [];
} else {
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

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

@ -12,7 +12,7 @@
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>项目背景</span> <span>项目背景</span>
<span>{{ projectInfo.backGround || "--" }}</span> <span>{{ projectInfo.backGround || "--" }}</span>
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>项目方案</span> <span>项目方案</span>
@ -22,13 +22,24 @@
<span>内部备注</span> <span>内部备注</span>
<span>{{ projectInfo.internalRemark || "--" }}</span> <span>{{ projectInfo.internalRemark || "--" }}</span>
</div> </div>
<div class="info-prop" v-if="projectInfo.departmentNameList.length>0"> <div
class="info-prop"
v-if="projectInfo.departmentNameList.length > 0"
>
<span>当前处理部门</span> <span>当前处理部门</span>
<span>{{ projectInfo.departmentNameList.join("、") }}</span> <span>{{ projectInfo.departmentNameList.join("、") }}</span>
</div> </div>
<div class="info-prop"> <div class="info-prop">
<span>项目来源</span> <span>项目来源</span>
<a @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
>
</div> </div>
<div class="info-prop" v-if="projectCate.length > 0"> <div class="info-prop" v-if="projectCate.length > 0">
<span>分类</span> <span>分类</span>
@ -144,18 +155,33 @@
</div> </div>
</div> </div>
<div v-show="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 <event-info
v-if="projectInfo.origin == 'event'" v-if="projectInfo.origin == 'resi_event'"
@close="handleBackInfo" @close="handleBackInfo"
:event-id="projectInfo.originId" :event-id="projectInfo.originId"
/> />
</div> </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"
>
<project-evaluation :projectId="projectIdCopy"></project-evaluation>
</el-dialog>
</div> </div>
</template> </template>
@ -164,12 +190,15 @@ import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText"; import foldText from "@/views/components/foldText";
import issueInfo from "./issue-info"; import issueInfo from "./issue-info";
import eventInfo from "./event-info"; import eventInfo from "./event-info";
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",
showedEvaluation: false,
projectIdCopy: this.projectId, projectIdCopy: this.projectId,
fmData: { fmData: {
@ -259,6 +288,7 @@ export default {
foldText, foldText,
issueInfo, issueInfo,
eventInfo, eventInfo,
projectEvaluation,
}, },
data: iniData, data: iniData,
@ -305,10 +335,10 @@ export default {
}, },
handleWatchOrigin() { handleWatchOrigin() {
this.pageType = 'origin-info'; this.pageType = "origin-info";
}, },
handleBackInfo() { handleBackInfo() {
this.pageType = 'info'; this.pageType = "info";
}, },
async getApiData() { async getApiData() {

6
src/views/modules/visual/cpts/line-chart.vue

@ -1,6 +1,6 @@
<template> <template>
<div class="m-chart"> <div class="m-chart">
<canvas id="myChart" :width="width" :height="height" /> <canvas :id="id" :width="width" :height="height" />
</div> </div>
</template> </template>
@ -12,6 +12,7 @@ import F2 from "@antv/f2/lib/index-all";
const fontFamily = "PingFang SC"; const fontFamily = "PingFang SC";
const fontSize = 14; const fontSize = 14;
let id = "myChart" + new Date().getDate();
let chart; let chart;
let srcData = []; let srcData = [];
@ -69,7 +70,7 @@ const addTextShape = () => {
const iniChart = function (config, srcData) { const iniChart = function (config, srcData) {
chart = new F2.Chart({ chart = new F2.Chart({
id: "myChart", id,
...config, ...config,
}); });
@ -203,6 +204,7 @@ export default {
data() { data() {
return { return {
iniLoading: false, iniLoading: false,
id,
}; };
}, },
watch: { watch: {

Loading…
Cancel
Save