Browse Source

加油 还有百分之九十

shibei_master
dai 3 years ago
parent
commit
14c2e4b31a
  1. 321
      src/views/modules/shequzhili/xiangmu/cpts/event-info.vue
  2. 288
      src/views/modules/shequzhili/xiangmu/cpts/issue-info.vue
  3. 83
      src/views/modules/shequzhili/xiangmu/cpts/project-info.vue
  4. 8
      src/views/modules/shequzhili/xiangmu/index.vue

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

@ -0,0 +1,321 @@
<template>
<div class="">
<div class="g-page" v-show="pageType == 'info'">
<div class="g-left">
<el-card>
<h3>议题详情</h3>
<div class="m-row">
<div 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 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 class="m-btns" v-if="type == 'info'">
<el-button size="" @click="handleClose">关闭</el-button>
</div>
</el-card>
</div>
<div class="g-right">
<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>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
return {
pageType: "info",
issueProcess: [],
issueInfo: {
attitude: "",
belongsGridName: "",
issueIdea: "",
issueInitiator: "",
issueStatus: "",
issueSuggestion: "",
issueTitle: "",
joinVote: true,
projectId: "",
projectStatus: false,
publishIdeaFlag: false,
},
issueTrend: {},
issueChartData: [],
};
}
export default {
name: "issueInfo",
props: {
issueId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
type: {
type: String,
default: "info",
},
},
components: {
foldText,
},
data: iniData,
computed: {},
watch: {},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
handleSubmit() {
this.$emit("afterEdit");
},
async getApiData() {
this.getIssueInfo();
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() {
const url = "/gov/issue/manage/progress";
const { data, code, msg } = await requestPost(url, {
issueId: this.issueId,
});
if (code === 0) {
this.issueProcess = data.map((item) => {
item.processTime = dateFormat(
new Date(item.processTime * 1000),
"yyyy-MM-dd hh:mm"
);
return item;
});
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

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

@ -0,0 +1,288 @@
<template>
<div class="">
<div class="g-page" v-show="pageType == 'info'">
<div class="g-left">
<el-card>
<h3>议题详情</h3>
<div class="m-row">
<div 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 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>
<div v-if="issueChartData.length > 0">
<line-chart :list="issueChartData" />
</div>
</div>
</div>
<div class="m-btns" v-if="type == 'info'">
<el-button size="" @click="handleClose">关闭</el-button>
</div>
</el-card>
</div>
<div class="g-right">
<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>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import dateFormat from "dai-js/tools/dateFormat";
import lineChart from "@/views/modules/visual/cpts/line-chart";
function iniData() {
return {
pageType: "info",
issueProcess: [],
issueInfo: {
attitude: "",
belongsGridName: "",
issueIdea: "",
issueInitiator: "",
issueStatus: "",
issueSuggestion: "",
issueTitle: "",
joinVote: true,
projectId: "",
projectStatus: false,
publishIdeaFlag: false,
},
issueTrend: {},
issueChartData: [],
};
}
export default {
name: "issueInfo",
props: {
issueId: {
type: String,
default: "64502a8f1048a7240295527a9b32e513",
},
type: {
type: String,
default: "info",
},
},
components: {
foldText,
lineChart,
},
data: iniData,
computed: {},
watch: {},
mounted() {
this.getApiData();
},
methods: {
watchImg(src) {
window.open(src);
},
handleClose() {
this.$emit("close");
},
handleSubmit() {
this.$emit("afterEdit");
},
async getApiData() {
this.getIssueInfo();
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() {
const url = "/gov/issue/manage/progress";
const { data, code, msg } = await requestPost(url, {
issueId: this.issueId,
});
if (code === 0) {
this.issueProcess = data.map((item) => {
item.processTime = dateFormat(
new Date(item.processTime * 1000),
"yyyy-MM-dd hh:mm"
);
return item;
});
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>

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

@ -12,7 +12,7 @@
</div>
<div class="info-prop">
<span>项目背景</span>
<span>{{ projectInfo.backGround }}</span>
<span>{{ projectInfo.backGround || "--" }}</span>
</div>
<div class="info-prop">
<span>项目方案</span>
@ -22,10 +22,14 @@
<span>内部备注</span>
<span>{{ projectInfo.internalRemark || "--" }}</span>
</div>
<div class="info-prop">
<div class="info-prop" v-if="projectInfo.departmentNameList.length>0">
<span>当前处理部门</span>
<span>{{ projectInfo.departmentNameList.join("、") }}</span>
</div>
<div class="info-prop">
<span>项目来源</span>
<a @click="handleWatchOrigin">查看项目来源</a>
</div>
<div class="info-prop" v-if="projectCate.length > 0">
<span>分类</span>
<fold-text style="width: 300px" :row="3">
@ -45,12 +49,7 @@
</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
>
<el-button size="" @click="handleClose">关闭</el-button>
</div>
</el-card>
<el-card v-if="type == 'edit'">
@ -68,7 +67,7 @@
<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 :label="10">退回</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
@ -77,7 +76,7 @@
<el-button size="" style="margin-right: 50px" @click="handleClose"
>关闭</el-button
>
<el-button size="" type="danger" @click="handleClose"
<el-button size="" type="danger" @click="handleSubmit"
>确定</el-button
>
</div>
@ -145,38 +144,17 @@
</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 v-show="pageType == 'origin-info'">
<issue-info
v-if="projectInfo.origin == 'issue'"
@close="handleBackInfo"
:issue-id="projectInfo.originId"
/>
<event-info
v-if="projectInfo.origin == 'event'"
@close="handleBackInfo"
:event-id="projectInfo.originId"
/>
</div>
</div>
</template>
@ -184,6 +162,8 @@
<script>
import { requestPost } from "@/js/dai/request";
import foldText from "@/views/components/foldText";
import issueInfo from "./issue-info";
import eventInfo from "./event-info";
import dateFormat from "dai-js/tools/dateFormat";
function iniData() {
@ -277,6 +257,8 @@ export default {
components: {
foldText,
issueInfo,
eventInfo,
},
data: iniData,
@ -318,16 +300,21 @@ export default {
this.$emit("close");
},
handleSubmit() {
this.$emit("afterEdit");
},
handleWatchOrigin() {
this.pageType = 'origin-info';
},
handleBackInfo() {
this.pageType = 'info';
},
async getApiData() {
await this.getProjectInfo();
this.getProjectCate();
this.getProjectProcess();
if (this.projectInfo.origin === "issue") {
this.getIssueInfo();
this.getIssueTrend();
} else if (this.projectInfo.origin === "resi_event") {
this.getEventInfo();
}
},
//

8
src/views/modules/shequzhili/xiangmu/index.vue

@ -189,11 +189,11 @@
fixed="right"
label="操作"
align="center"
width="160"
width="100"
>
<template slot-scope="scope">
<el-button
v-if="scope.status == 'pending'"
v-if="scope.row.status == 'pending'"
@click="handleEdit(scope.$index)"
type="text"
size="small"
@ -552,8 +552,8 @@ export default {
},
async getTableData() {
// const url = "/epmetuser/icBirthRecord/page";
const url = "/gov/project/project/project-list";
const url = "http://yapi.elinkservice.cn/mock/245/gov/project/project/project-list";
// const url = "/gov/project/project/project-list";
const { pageSize, pageNo, fmData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,

Loading…
Cancel
Save