first commit
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-row type="flex">
|
||||
<el-col>
|
||||
<span>教代会:</span>
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
style="width: 80%;margin-right: 20px" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col>
|
||||
<span>承办单位:</span>
|
||||
<el-select @change="pageData()" clearable
|
||||
filterable
|
||||
placeholder="请选择承办单位" style="width: 80%" v-model="pageForm.undertakeId">
|
||||
<el-option
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in undertakeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-table :data="tableData" class="mt20" show-summary>
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="单位名称" prop="unitName">
|
||||
<template scope="{row}">
|
||||
<el-link @click="selectProposalByUnit(row)" type="primary">{{ row.unitName }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="提案总数" prop="totalCount" sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="主办提案">
|
||||
<el-table-column align="center" header-align="center" label="提案数量"
|
||||
prop="masterTotalCount"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="已答复"
|
||||
prop="masterHasReplyCount" sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="未答复"
|
||||
prop="masterNotReplyCount" sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="已结案"
|
||||
prop="masterFinishCount" sortable></el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="协办提案" v-if="showSlaveTableColumn">
|
||||
<el-table-column align="center" header-align="center" label="提案数量"
|
||||
prop="slaveTotalCount"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="已答复"
|
||||
prop="slaveHasReplyCount" sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="未答复"
|
||||
prop="slaveNotReplyCount" sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="已结案"
|
||||
prop="slaveFinishCount" sortable></el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-dialog :title="dialogTitle" :visible.sync="undertakeVisible" width="70%">
|
||||
<el-table :data="undertakeTableData" :size="tableSize" align="center" header-align="center">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{ row.proposalName }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
dialogTitle: '',
|
||||
undertakeVisible: false,
|
||||
undertakeOptions: [],
|
||||
meetingOptions: [],
|
||||
undertakeTableData: [],
|
||||
pageForm: {},
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}],
|
||||
showSlaveTableColumn: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
async meetingChange() {
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
await this.pageData()
|
||||
},
|
||||
async selectProposalByUnit(row) {
|
||||
const resp = await $.get(loc() + '/selectProposalByUnit', {
|
||||
meetingId: this.pageForm.meetingId,
|
||||
underTakeId: row.id
|
||||
})
|
||||
this.dialogTitle = row.unitName + '所承办提案'
|
||||
this.undertakeVisible = true
|
||||
if (resp.code === 0) {
|
||||
this.undertakeTableData = resp.data
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
this.undertakeVisible = false
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar()
|
||||
this.tableLoading = true
|
||||
const resp = await $.post(loc() + "/pageData", this.pageForm)
|
||||
sublime.closeLoadingbar()
|
||||
this.tableLoading = false
|
||||
if (resp.code === 0) {
|
||||
resp.data.forEach(v => {
|
||||
v.satisfiedRate = isNaN((v.satisfied / v.total) * 100) ? 0 : ((v.satisfied / v.total) * 100).toFixed(1)
|
||||
})
|
||||
this.tableData = resp.data
|
||||
} else {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}
|
||||
},
|
||||
async initTableSlaveColumns() {
|
||||
const config = await proposal.getProposalConfig()
|
||||
this.showSlaveTableColumn = config.slaveUnitConfig && config.slaveUnitConfig.isNeedReply
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
await this.pageData()
|
||||
this.initTableSlaveColumns()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,388 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.tr {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.tl {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.top_block {
|
||||
background-color: rgb(240, 240, 240);
|
||||
}
|
||||
|
||||
.top_card {
|
||||
border: none;
|
||||
border-top: 5px solid;
|
||||
cursor: pointer;
|
||||
min-width: 200px;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.top_title {
|
||||
color: rgb(120, 120, 120);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.top_num {
|
||||
font-size: 32px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.v-tab .el-card__header {
|
||||
padding: 10px 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.v-tab .el-table-containe {
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
|
||||
.chart-card .el-card__header {
|
||||
border: none;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-select @change="getNumData();changeType('all');drawChat()" placeholder="请选择教代会"
|
||||
style="width: 100%;font-weight:bold;" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in allJdhOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-card>
|
||||
|
||||
<div class="top_block mt10 mb10" v-loading="topBlockLoading">
|
||||
<el-row :gutter="20" style="flex-wrap: wrap" type="flex">
|
||||
<template v-for="item in types">
|
||||
<el-col :span="4">
|
||||
<el-card :style="'border-color:'+ item.color" class="top_card" shadow="hover">
|
||||
<div @click="changeType(item.key)" style="width: 100%;height: 100%">
|
||||
<div class="top_title">
|
||||
<span :style="'color:'+ item.color">
|
||||
<i :class="pageForm.type===item.key?'fa fa-flag':'fa fa-flag-o'"></i>
|
||||
</span>
|
||||
{{item.name}}
|
||||
<el-popover trigger="hover">
|
||||
<ul style="list-style-type: none;padding: 0;margin: 0">
|
||||
<li :style="{color:pageForm.type===litem.key?'red':''}"
|
||||
@click="childClick(item,litem)"
|
||||
style="border-bottom: 1px solid #f0f0f0;cursor: pointer;padding: 5px 0"
|
||||
v-for="(litem,lindex) in item.list">
|
||||
{{litem.name}}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<i class="el-icon-s-operation text-primary"
|
||||
slot="reference"
|
||||
v-if="item.list"
|
||||
></i>
|
||||
</el-popover>
|
||||
|
||||
</div>
|
||||
<div class="top_num">{{numData[item.key]?numData[item.key]:'--'}}</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</template>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<el-card shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
align="center" header-align="center"
|
||||
ref="multipleTable">
|
||||
|
||||
<el-table-column type="expand">
|
||||
<template scope="scope">
|
||||
<el-card shadow="never">
|
||||
<el-table :data="scope.row.replyInfo" header-align="center" size="mini">
|
||||
<el-table-column label="承办单位" prop="unitName" width="200"></el-table-column>
|
||||
<el-table-column label="承办类型" prop="unitName" width="100">
|
||||
<template scope="{row}">
|
||||
<span style="color: #106898" v-if="row.underTakeType===1">主办</span>
|
||||
<span style="color: #156c20" v-else>协办</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="答复次数" prop="replyNumber" width="100"></el-table-column>
|
||||
<el-table-column label="负责人" prop="fzrxx" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="答复情况" prop="isReply" width="100">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isReply">已答复</span>
|
||||
<span class="text-danger" v-else>未答复</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="分管领导" prop="xldxx"></el-table-column>
|
||||
<el-table-column label="审批情况" prop="isLeaderAudit" width="100px">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isLeaderAudit">已审批</span>
|
||||
<span class="text-danger" v-else>未审批</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:align="column.align?column.align:'center'"
|
||||
:label="column.label"
|
||||
:min-width="column.width"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.proposalName}}</el-link>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span v-if="![proposal.CASE].includes(row.stateCode)">已审核</span>
|
||||
<span v-else>待审核</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='resultName'">
|
||||
<el-link type="primary">
|
||||
{{row.resultName ? row.resultName:'暂未审核'}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
<!-- <el-row class="chart-card" v-loading="chatLoading">-->
|
||||
<!-- <el-card shadow="never">-->
|
||||
<!-- <div slot="header" class="clearfix">-->
|
||||
<!-- <span style="font-weight: bold">提案类型统计</span><br>-->
|
||||
<!-- <span style="font-size: 12px">单位(个)</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div id="chart" style="width: 100%;height: 400px;"></div>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-row>-->
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let chart
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
types: [{
|
||||
key: 'all',
|
||||
name: '提案总数',
|
||||
color: '#409EFF'
|
||||
}, {
|
||||
key: 'delegation',
|
||||
name: '待团长审核(附议完成)',
|
||||
color: '#00a2ae'
|
||||
}, {
|
||||
key: 'case',
|
||||
name: '待立案审核',
|
||||
color: '#F56C6C'
|
||||
}, {
|
||||
key: 'determine',
|
||||
name: '确定立案',
|
||||
color: '#67C23A'
|
||||
}, {
|
||||
key: 'opinion',
|
||||
name: '作为意见',
|
||||
color: '#E6A23C'
|
||||
}, {
|
||||
key: 'notGive',
|
||||
name: '不予立案',
|
||||
color: '#7265e6'
|
||||
}, {
|
||||
key: 'waitUnitReply',
|
||||
name: '待承办单位答复',
|
||||
color: '#F56C6C',
|
||||
list: [
|
||||
{
|
||||
key: 'waitUnitReply',
|
||||
name: '待承办单位答复',
|
||||
color: '#F56C6C',
|
||||
},
|
||||
{
|
||||
key: 'unitReplyFinish',
|
||||
name: '承办单位已答复',
|
||||
color: '#00a854',
|
||||
}
|
||||
]
|
||||
}, {
|
||||
key: 'awaitLeaderAuditReply',
|
||||
name: '待校领导审批答复',
|
||||
color: '#F56C6C',
|
||||
list: [
|
||||
{
|
||||
key: 'awaitLeaderAuditReply',
|
||||
name: '待校领导审批答复',
|
||||
color: '#F56C6C',
|
||||
},
|
||||
{
|
||||
key: 'LeaderAuditReplyFinish',
|
||||
name: '校领导已审批答复',
|
||||
color: '#00a854',
|
||||
}
|
||||
]
|
||||
}, {
|
||||
key: 'feedback',
|
||||
name: '待反馈评分',
|
||||
color: '#ffbf00'
|
||||
}, {
|
||||
key: 'caseCheck',
|
||||
name: '待提案委员会审查',
|
||||
color: '#ffbf00'
|
||||
}, {
|
||||
key: 'finish',
|
||||
name: '已完结',
|
||||
color: '#00a854'
|
||||
}, {
|
||||
key: 'other',
|
||||
name: '其它',
|
||||
color: '#00a854'
|
||||
}],
|
||||
chatLoading: true,
|
||||
topBlockLoading: true,
|
||||
tabLoading: false,
|
||||
allJdhOptions: [],
|
||||
tableData: [],
|
||||
numData: {},
|
||||
pageForm: {
|
||||
pageSize: 5,
|
||||
type: 'all',
|
||||
totalCount: 0
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true, checked: 0},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true, checked: 0},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'isConjoin', label: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
// {prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
replyPopVisible: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
changeType(type) {
|
||||
this.pageForm.type = type
|
||||
this.doSearch()
|
||||
},
|
||||
childClick(item, litem) {
|
||||
item.name = litem.name
|
||||
item.key = litem.key
|
||||
item.color = litem.color
|
||||
this.pageForm.type = item.key
|
||||
this.doSearch()
|
||||
},
|
||||
async getNumData() {
|
||||
this.topBlockLoading = true
|
||||
const resp = await $.post(loc() + "/numData", {meetingId: this.pageForm.meetingId})
|
||||
requestLaterFun(resp, () => {
|
||||
this.numData = resp.data
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.topBlockLoading = false
|
||||
})
|
||||
},
|
||||
async drawChat() {
|
||||
this.chatLoading = true
|
||||
const resp = await $.post(loc() + "/getChatData", {meetingId: this.pageForm.meetingId})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
const {data} = resp
|
||||
if (!chart) {
|
||||
chart = new G2Plot.Area('chart', {
|
||||
data,
|
||||
forceFit: true,
|
||||
xField: 'typeName',
|
||||
yField: 'num',
|
||||
seriesField: 'type',
|
||||
legend: {
|
||||
"position": "top-right",
|
||||
"flipPage": false
|
||||
}
|
||||
});
|
||||
chart.render();
|
||||
} else {
|
||||
chart.changeData(data)
|
||||
}
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.chatLoading = false
|
||||
})
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.allJdhOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.allJdhOptions.length ? this.allJdhOptions[0].id : ''
|
||||
await this.getNumData()
|
||||
this.pageData()
|
||||
// await this.drawChat()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,304 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.clearfix {
|
||||
font-weight: 600;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<el-select @change="initData" placeholder="请选择教代会" v-model="meetingId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in allJdhOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-card>
|
||||
|
||||
<el-row :gutter="20" style="margin: 15px 0">
|
||||
<el-col :span="12" v-loading="loading.satisfiedLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>提案满意度</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="satisfiedChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12" v-loading="loading.typeLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>提案类型</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="typeChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" style="margin: 15px 0">
|
||||
<el-col :span="12" v-loading="loading.resultLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>立案结果</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="resultChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12" v-loading="loading.stateLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>提案状态</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="stateChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const chart = {
|
||||
satisfiedChart: undefined,
|
||||
resultChart: undefined,
|
||||
typeChart: undefined,
|
||||
stateChart: undefined
|
||||
}
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
meetingId: '',
|
||||
allJdhOptions: [],
|
||||
tableData: [],
|
||||
chatLoading: true,
|
||||
topBlockLoading: true,
|
||||
tabLoading: false,
|
||||
loading: {
|
||||
satisfiedLoading: false,
|
||||
resultLoading: false,
|
||||
typeLoading: false,
|
||||
stateLoading: false
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 提案满意度
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async satisfiedData() {
|
||||
this.loading.satisfiedLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/satisfiedData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.satisfiedLoading = false
|
||||
|
||||
if (chart.satisfiedChart) {
|
||||
chart.satisfiedChart.changeData(data)
|
||||
return
|
||||
}
|
||||
|
||||
chart.satisfiedChart = new G2Plot.Pie('satisfiedChart', {
|
||||
data,
|
||||
appendPadding: 10,
|
||||
angleField: 'num',
|
||||
colorField: 'name',
|
||||
radius: 0.75,
|
||||
color: ['#9661BC', '#5B8FF9', '#61DDAA'],
|
||||
label: {
|
||||
type: 'spider',
|
||||
labelHeight: 28,
|
||||
content: '{name}\n{percentage}',
|
||||
},
|
||||
interactions: [{type: 'element-selected'}, {type: 'element-active'}],
|
||||
});
|
||||
|
||||
chart.satisfiedChart.render();
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 立案结果
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async resultData() {
|
||||
this.loading.resultLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/resultData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.resultLoading = false
|
||||
|
||||
if (chart.resultChart) {
|
||||
chart.resultChart.changeData(data)
|
||||
return
|
||||
}
|
||||
chart.resultChart = new G2Plot.Radar('resultChart', {
|
||||
data,
|
||||
xField: 'name',
|
||||
yField: 'num',
|
||||
seriesField: 'type',
|
||||
meta: {
|
||||
num: {
|
||||
alias: '数量',
|
||||
min: 0
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
type: 'line',
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
area: {},
|
||||
point: {
|
||||
size: 2,
|
||||
},
|
||||
});
|
||||
chart.resultChart.render();
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 提案类型
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async typeData() {
|
||||
this.loading.typeLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/typeData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.typeLoading = false
|
||||
|
||||
if (chart.typeChart) {
|
||||
chart.typeChart.changeData(data)
|
||||
return
|
||||
}
|
||||
chart.typeChart = new G2Plot.Column('typeChart', {
|
||||
data,
|
||||
xField: 'typeName',
|
||||
yField: 'num',
|
||||
meta: {
|
||||
type: {
|
||||
alias: '类别',
|
||||
},
|
||||
sales: {
|
||||
alias: '数量',
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
label: {
|
||||
autoRotate: true,
|
||||
autoHide: false,
|
||||
autoEllipsis: false,
|
||||
},
|
||||
}
|
||||
});
|
||||
chart.typeChart.render();
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 提案状态
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async stateData() {
|
||||
this.loading.stateLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/stateData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.stateLoading = false
|
||||
|
||||
if (chart.stateChart) {
|
||||
chart.stateChart.changeData(data)
|
||||
return
|
||||
}
|
||||
chart.stateChart = new G2Plot.Radar('stateChart', {
|
||||
data,
|
||||
xField: 'stateName',
|
||||
yField: 'num',
|
||||
xAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
type: 'line',
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
point: {
|
||||
size: 2,
|
||||
},
|
||||
});
|
||||
chart.stateChart.render();
|
||||
})
|
||||
},
|
||||
async initData() {
|
||||
await this.satisfiedData()
|
||||
await this.resultData()
|
||||
await this.typeData()
|
||||
await this.stateData()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.allJdhOptions = await getAllJdh()
|
||||
this.meetingId = this.allJdhOptions.length ? this.allJdhOptions[0].id : ''
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,134 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.chart-card .el-card__header {
|
||||
border: none;
|
||||
/*padding: 20px;*/
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-row class="chart-card" v-loading="chartOneLoading">
|
||||
<el-card class="box-card" shadow="never">
|
||||
<div class="clearfix" slot="header">
|
||||
<div style="float:left">
|
||||
<span style="font-weight: bold">提案综合统计</span><br>
|
||||
<span style="font-size: 12px">单位(个)</span>
|
||||
</div>
|
||||
<div style="float: right;z-index: 999">
|
||||
<span style="margin-right: 50px" v-if="searchForm.switchType === 'delegation'">
|
||||
<el-select @change="getData" filterable placeholder="请选择教代会" style="width: 400px"
|
||||
v-model="searchForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</span>
|
||||
<span style="margin-right: 50px">
|
||||
<el-radio-group @change="getData" v-model="searchForm.switchType">
|
||||
<el-radio-button label="type">提案类型</el-radio-button>
|
||||
<el-radio-button label="union">工会</el-radio-button>
|
||||
<el-radio-button label="unit">单位</el-radio-button>
|
||||
<el-radio-button label="delegation">代表团</el-radio-button>
|
||||
</el-radio-group>
|
||||
</span>
|
||||
<span>
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
@change="getData()"
|
||||
class="year"
|
||||
placeholder="选择年" style="width: 120px;"
|
||||
type="year"
|
||||
v-model="searchForm.startYear"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
至
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
@change="getData()"
|
||||
class="year"
|
||||
placeholder="选择年" style="width: 120px;"
|
||||
type="year"
|
||||
v-model="searchForm.endYear"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="chart" style="width: 100%;height: 600px"></div>
|
||||
</el-card>
|
||||
</el-row>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let chart
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data: () => {
|
||||
return {
|
||||
meetingOptions: [],
|
||||
chartOneLoading: false,
|
||||
searchForm: {
|
||||
switchType: 'type',
|
||||
startYear: new Date().getFullYear() - 3 + '',
|
||||
endYear: new Date().getFullYear() + '',
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
this.chartOneLoading = true
|
||||
const resp = await $.post(loc() + "/getData", this.searchForm)
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
if (!chart) {
|
||||
chart = new G2Plot.Area('chart', {
|
||||
data,
|
||||
xField: "name",
|
||||
yField: "num",
|
||||
seriesField: "type",
|
||||
forceFit: true,
|
||||
legend: {
|
||||
"position": "top-right",
|
||||
"flipPage": false
|
||||
},
|
||||
xAxis: {
|
||||
label: {
|
||||
autoRotate: true,
|
||||
autoHide: false,
|
||||
autoEllipsis: false,
|
||||
},
|
||||
}
|
||||
});
|
||||
chart.render();
|
||||
} else {
|
||||
chart.changeData(data)
|
||||
}
|
||||
this.chartOneLoading = false
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
});
|
||||
},
|
||||
async getMeetingByYear() {
|
||||
const {startYear, endYear} = this.searchForm
|
||||
const {data} = await $.post(loc() + "/getMeetingByYear", {startYear, endYear})
|
||||
return data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await this.getMeetingByYear()
|
||||
this.$set(this.searchForm, "meetingId", this.meetingOptions.length ? this.meetingOptions[0].id : '')
|
||||
this.getData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,171 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-row justify="center" type="flex">
|
||||
<el-select @change="corpsPageData()" filterable placeholder="请选择教代会"
|
||||
style="width: 100%" v-model="meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-table :data="corpsTableData" :summary-method="getSummaries" class="mt20" show-summary>
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="代表团名称" prop="dbtname">
|
||||
<template scope="{row}">
|
||||
<el-link @click="findProposal(row)" type="primary">{{ row.dbtname }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="提案总数" prop="total"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="立案数" prop="determine"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="作为意见" prop="opinion"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="不予立案" prop="notGive"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="立案率" prop="caseRate" sortable>
|
||||
<template scope="{row}">{{row.caseRate}}%</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="不予立案率" prop="withdrawRate" sortable>
|
||||
<template scope="{row}">{{row.withdrawRate}}%</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-dialog :title="dialogTitle" :visible.sync="delegationVisible" width="70%">
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
</proposal-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
meetingId: '',
|
||||
dialogTitle: '',
|
||||
delegationVisible: false,
|
||||
meetingOptions: [],
|
||||
corpsTableData: [],
|
||||
pageForm: {}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
findProposal(row) {
|
||||
this.pageForm.delegationId = row.id
|
||||
this.pageData()
|
||||
this.dialogTitle = row.dbtname + '所属提案'
|
||||
this.delegationVisible = true
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
this.delegationVisible = false
|
||||
},
|
||||
getSummaries(param) {
|
||||
const {columns, data} = param;
|
||||
const sums = [];
|
||||
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = this.corpsTableData.length + 1;
|
||||
return;
|
||||
} else if (index === 1) {
|
||||
sums[index] = '合计';
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return prev + curr;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
|
||||
|
||||
if (index === 6) {
|
||||
let a = ((sums[3] + sums[4]) / sums[2]) * 100
|
||||
sums[index] = isNaN(a) ? 0 + ' %' : (a).toFixed(1) + ' %';
|
||||
}
|
||||
|
||||
if (index === 7) {
|
||||
let b = (sums[5] / sums[2]) * 100
|
||||
sums[index] = isNaN(b) ? 0 + ' %' : (b).toFixed(1) + ' %';
|
||||
}
|
||||
} else {
|
||||
sums[index] += 'NaN';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
async corpsPageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const resp = await $.post(loc() + "/corpsPageData", {meetingId: this.meetingId})
|
||||
const {data, msg} = resp
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
data.forEach(v => {
|
||||
v.caseRate = ((v.determine + v.opinion) / v.total) * 100
|
||||
v.withdrawRate = (v.notGive / v.total) * 100
|
||||
v.caseRate = isNaN(v.caseRate) ? 0 : v.caseRate.toFixed(1)
|
||||
v.withdrawRate = isNaN(v.withdrawRate) ? 0 : v.withdrawRate.toFixed(1)
|
||||
})
|
||||
this.corpsTableData = data;
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: msg});
|
||||
}, () => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
await this.corpsPageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,186 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="12">
|
||||
<el-select @change="getData()" filterable placeholder="请选择教代会"
|
||||
style="width: 100%" v-model="meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="6" class="text-center">
|
||||
<el-radio-group v-model="analysisType">
|
||||
<el-radio-button :label="1">按征集分析</el-radio-button>
|
||||
<el-radio-button :label="2">按办理分析</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
<el-col :span="6" class="text-center">
|
||||
<el-radio-group @change="displayTypeChange" v-model="displayType">
|
||||
<el-radio-button :label="1">显示数量</el-radio-button>
|
||||
<el-radio-button :label="2">显示占比</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-card>
|
||||
<el-card class="mt20" shadow="never">
|
||||
<el-table :data="displayType===1?tableData:tableData2" show-summary v-loading="loading">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"
|
||||
width="50"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="提案类型" prop="typeName">
|
||||
<template scope="{row}">
|
||||
<el-link @click="selectProposalByType(row)" type="primary">{{ row.typeName }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="数量" prop="totalCount"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="占比" prop="proportion"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="立案情况" v-if="analysisType==2">
|
||||
<el-table-column align="center" header-align="center" label="立案" prop="laCount"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="重点提案" prop="zdCount"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="意见建议" prop="jyCount"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="不予立案" prop="caCount"></el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="代表反馈情况" v-if="analysisType===2">
|
||||
<el-table-column align="center" header-align="center" label="满意" prop="myCount"
|
||||
v-if="feedBackNames.includes('满意')"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="比较满意" prop="bjmyCount"
|
||||
v-if="feedBackNames.includes('比较满意')"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="基本满意" prop="jbmyCount"
|
||||
v-if="feedBackNames.includes('基本满意')"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="不满意" prop="bmyCount"
|
||||
v-if="feedBackNames.includes('不满意')"></el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :title="typeDialogTitle" :visible.sync="typeDialogVisible" width="70%">
|
||||
<el-table :data="typeTableData" :size="tableSize" align="center" header-align="center">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{ row.proposalName }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
meetingOptions: [],
|
||||
meetingId: '',
|
||||
tableData: [],
|
||||
tableData2: [],
|
||||
loading: false,
|
||||
analysisType: 1,
|
||||
displayType: 1,
|
||||
feedBackNames: [],
|
||||
typeDialogVisible: false,
|
||||
typeDialogTitle: null,
|
||||
typeTableData: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
this.loading = true
|
||||
const {data} = await $.post(loc() + '/getData', {teacherMeetingId: this.meetingId})
|
||||
this.tableData = data
|
||||
|
||||
const data2 = JSON.parse(JSON.stringify(data))
|
||||
|
||||
this.tableData2 = data2.map(v => {
|
||||
v.zdCount = (isNaN((v.zdCount / v.laCount * 100).toFixed(2)) ? '0.00' : (v.zdCount / v.laCount * 100).toFixed(2)) + "%"
|
||||
v.jyCount = (v.jyCount / v.totalCount * 100).toFixed(2) + "%"
|
||||
v.caCount = (v.caCount / v.totalCount * 100).toFixed(2) + "%"
|
||||
|
||||
v.laCount = (v.laCount / v.totalCount * 100).toFixed(2) + "%"
|
||||
return v
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
this.loading = false
|
||||
}, 200)
|
||||
},
|
||||
displayTypeChange(val) {
|
||||
|
||||
},
|
||||
async getFeedBackNames() {
|
||||
const data = await getDictOptions("proposal_feedback")
|
||||
this.feedBackNames = data.map(v => v.name)
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
this.typeDialogVisible = false
|
||||
},
|
||||
async selectProposalByType(row) {
|
||||
const resp = await $.get(loc() + '/selectProposalByType', {
|
||||
meetingId: this.meetingId,
|
||||
typeId: row.typeId
|
||||
})
|
||||
this.typeDialogTitle = '<' + row.typeName + '>类型提案'
|
||||
this.typeDialogVisible = true
|
||||
if (resp.code === 0) {
|
||||
this.typeTableData = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : null
|
||||
if (this.meetingId != null) {
|
||||
this.getData()
|
||||
}
|
||||
this.getFeedBackNames()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,294 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.zb_reply_card {
|
||||
border-top: 5px solid #106898;
|
||||
}
|
||||
|
||||
.xb_reply_card {
|
||||
border-top: 5px solid #156c20;
|
||||
}
|
||||
|
||||
.reply_card .el-form-item {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.reply_card .el-card__body {
|
||||
padding: 5px !important;
|
||||
}
|
||||
|
||||
.text-overflow {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.el-table .warning-row {
|
||||
background: oldlace;
|
||||
}
|
||||
|
||||
.el-table .success-row {
|
||||
background: #f0f9eb;
|
||||
}
|
||||
|
||||
.el-table .hover-row {
|
||||
background-color: unset !important;
|
||||
}
|
||||
|
||||
.searchCard .el-card__body {
|
||||
padding: 0 20px !important;
|
||||
}
|
||||
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @finished="searchFinished"
|
||||
@search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10 searchCard" shadow="never">
|
||||
<el-row class="query-row" type="flex">
|
||||
<el-col class="query-row-title">征集状态:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag :effect="pageForm.stateCnd.includes(item)?'dark':'plain'"
|
||||
@click="tagClick(item)"
|
||||
style="margin: 5px;min-width: 120px;text-align: center;cursor: pointer"
|
||||
v-for="item in searchCnd">
|
||||
{{item}}
|
||||
</el-tag>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案信息"></table-tool>
|
||||
<el-table :data="tableData" :row-class-name="tableRowClassName"
|
||||
:size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
header-align="center">
|
||||
<el-table-column type="expand">
|
||||
<template scope="scope">
|
||||
<el-card shadow="never">
|
||||
<el-table :data="scope.row.replyInfo" header-align="center" size="mini">
|
||||
<el-table-column label="承办单位" prop="unitName" width="200"></el-table-column>
|
||||
<el-table-column label="承办类型" prop="unitName" width="100">
|
||||
<template scope="{row}">
|
||||
<span style="color: #106898" v-if="row.underTakeType===1">主办</span>
|
||||
<span style="color: #156c20" v-else>协办</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="答复次数" prop="replyNumber" width="100"></el-table-column>
|
||||
<el-table-column label="负责人" prop="fzrxx" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="答复情况" prop="isReply" width="100">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isReply">已答复</span>
|
||||
<span class="text-danger" v-else>未答复</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="分管领导" prop="xldxx"></el-table-column>
|
||||
<el-table-column label="审批情况" prop="isLeaderAudit" width="100px">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isLeaderAudit">已审批</span>
|
||||
<span class="text-danger" v-else>未审批</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<!-- <el-row :gutter="20" justify="start" style="flex-wrap: wrap" type="flex"-->
|
||||
<!-- v-if="scope.row.replyInfo && scope.row.replyInfo.length>0">-->
|
||||
<!-- <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8"-->
|
||||
<!-- v-for="reply in scope.row.replyInfo">-->
|
||||
<!-- <el-card class="mb10 reply_card" shadow="hover"-->
|
||||
<!-- :class="reply.underTakeType===1?'zb_reply_card':'xb_reply_card'">-->
|
||||
<!-- <el-form label-width="80px">-->
|
||||
<!-- <el-form-item label="承办单位">{{reply.unitName}}</el-form-item>-->
|
||||
<!-- <el-form-item label="承办类型">-->
|
||||
<!-- <span v-if="reply.underTakeType===1" style="color: #106898">主办</span>-->
|
||||
<!-- <span v-else style="color: #156c20">协办</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="答复次数">-->
|
||||
<!-- {{reply.replyNumber}}-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="负责人">-->
|
||||
<!-- <el-popover-->
|
||||
<!-- placement="top-start"-->
|
||||
<!-- title="标题"-->
|
||||
<!-- width="200"-->
|
||||
<!-- trigger="hover">-->
|
||||
<!-- <div #content v-html="reply.fzrxx && reply.fzrxx.split(',').join('</br>')"></div>-->
|
||||
<!-- <div slot="reference" class="text-overflow">{{reply.fzrxx}}</div>-->
|
||||
<!-- </el-popover>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="答复情况">-->
|
||||
<!-- <span v-if="reply.isReply" class="text-success">已答复</span>-->
|
||||
<!-- <span v-else class="text-danger">未答复</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="分管领导">{{reply.xldxx}}</el-form-item>-->
|
||||
<!-- <el-form-item label="审批情况">-->
|
||||
<!-- <span v-if="reply.isLeaderAudit" class="text-success">已审批</span>-->
|
||||
<!-- <span v-else class="text-danger">未审批</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-form>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:align="column.align?column.align:'center'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="$refs.info.openView(row.id);$refs.guava.view()" type="primary">
|
||||
{{row.proposalName}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='resultName'">
|
||||
<el-link type="primary">
|
||||
{{row.resultName ? row.resultName:'暂未审核'}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column align="center" header-align="center" label="操作" fixed="right" width="200px">-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <el-button size="mini" @click="openView(row)">查看</el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'isConjoin', label: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
pageForm: {
|
||||
searchName: 'proposalName',
|
||||
meetingId: '',
|
||||
stateCnd: []
|
||||
},
|
||||
searchCnd: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
searchFinished() {
|
||||
this.pageData()
|
||||
},
|
||||
async pageData() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.stateCnd = JSON.stringify(pageForm.stateCnd)
|
||||
const resp = await $.post(loc() + '/pageData', pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
},
|
||||
tagClick(item) {
|
||||
const item_index = this.pageForm.stateCnd.findIndex(v => v === item)
|
||||
if (item_index > -1) {
|
||||
this.pageForm.stateCnd.splice(item_index, 1)
|
||||
} else {
|
||||
this.pageForm.stateCnd.push(item)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
async initSearchCnd() {
|
||||
this.searchCnd = ['主办已答复', '主办未答复', '主办领导已审批', '主办领导未审批']
|
||||
const config = await proposal.getProposalConfig()
|
||||
if (config.slaveUnitConfig && config.slaveUnitConfig.isNeedReply) {
|
||||
this.searchCnd = this.searchCnd.concat(['协办已答复', '协办未答复', '协办领导已审批', '协办领导未审批',])
|
||||
}
|
||||
},
|
||||
tableRowClassName({rowIndex}) {
|
||||
if (rowIndex % 2 === 0) {
|
||||
return 'warning-row';
|
||||
} else {
|
||||
return 'success-row';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initSearchCnd()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,457 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row .el-col {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.search-card .el-card__body {
|
||||
padding: 5px 20px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card class="search-card" shadow="never">
|
||||
<el-row align="middle" class="query-row" style="justify-content: center" type="flex">
|
||||
<el-col style="width: 130px">
|
||||
请输入搜索内容
|
||||
</el-col>
|
||||
<el-col :span="8" style="display: flex">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="可选择查询条件,输入关键字查询,多个关键字请使用空格分隔"
|
||||
v-model="pageForm.searchKeyword">
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="2" class="text-center">
|
||||
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row align="middle" class="query-row" justify="center" type="flex">
|
||||
<el-col class="query-row-title">提案要素:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag :effect="pageForm.searchNames.includes(item.key)?'dark':'plain'"
|
||||
:key="item.key"
|
||||
:type="item.typeName"
|
||||
@click="clickSearchNames(item.key)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in searchNames">
|
||||
{{item.label}}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="pageForm.searchNames=[];doSearch()"
|
||||
type="danger" v-if="pageForm.searchNames.length">清空
|
||||
</el-link>
|
||||
<!-- <el-checkbox-group style="width: 350px" v-model="pageForm.searchNames">-->
|
||||
<!-- <el-checkbox-button :key="item.key" :label="item.key" v-for="item in searchNames">-->
|
||||
<!-- {{item.label}}-->
|
||||
<!-- </el-checkbox-button>-->
|
||||
<!-- </el-checkbox-group>-->
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">提案类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalTypes.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="checkProposalType(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in typeOptions">
|
||||
{{ item.typeName }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalTypes=[];doSearch()"
|
||||
type="danger" v-if="typeOptions.length&&pageForm.proposalTypes.length">清空
|
||||
</el-link>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">立案结果:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalResult.includes(item.code)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="checkProposalResult(item.code)"
|
||||
style="margin-right: 10px;cursor: pointer;"
|
||||
v-for="item in resultOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalResult=[];doSearch()"
|
||||
type="danger"
|
||||
v-if="resultOptions.length&&pageForm.proposalResult.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex"
|
||||
v-if="pageForm.proposalResult.includes('determine')">
|
||||
<el-col class="query-row-title">是否重点:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalDetermineTypes.includes(item.code)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="tagToggle('proposalDetermineTypes',item.code)"
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in determineTypeOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalDetermineTypes=[];doSearch()"
|
||||
type="danger"
|
||||
v-if="determineTypeOptions.length&&pageForm.proposalDetermineTypes.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">教 代 会:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag :effect="pageForm.meetingIds.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="clickMeetingIds(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in meetingOptions">
|
||||
{{item.jdhallname}}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="pageForm.meetingIds=[];doSearch()"
|
||||
type="danger" v-if="pageForm.meetingIds.length">清空
|
||||
</el-link>
|
||||
|
||||
<!-- <el-row type="flex">-->
|
||||
<!-- <el-col>-->
|
||||
<!-- <el-select @change="meetingChange" clearable filterable-->
|
||||
<!-- placeholder="请选择教代会"-->
|
||||
<!-- style="width: 80%" v-model="pageForm.meetingId">-->
|
||||
<!-- <el-option-->
|
||||
<!-- :label="item.jdhallname"-->
|
||||
<!-- :value="item.id"-->
|
||||
<!-- v-for="item in meetingOptions">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">代 表 团:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="8"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('tamanage')||@shiro.hasRole('jdhdbt01')}">
|
||||
<!-- <span>代表团:</span>-->
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="所属代表团"
|
||||
style="width: 350px" v-model="pageForm.delegationName">
|
||||
<el-option :key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.name"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>承办单位:</span>
|
||||
<el-select @change="doSearch()" clearable filterable
|
||||
placeholder="" style="width: 350px" v-model="pageForm.underTakeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in underTakeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <span>所属工会:</span>-->
|
||||
<!-- <el-select @change="unionChange" clearable filterable-->
|
||||
<!-- placeholder="请选择所属工会" style="width: 350px" v-model="pageForm.unionId">-->
|
||||
<!-- <el-option-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.unionname"-->
|
||||
<!-- :value="item.id"-->
|
||||
<!-- v-for="item in unionOptions">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <span>所属单位:</span>-->
|
||||
<!-- <el-select @change="doSearch" clearable filterable-->
|
||||
<!-- placeholder="请选择所属单位会" style="width: 350px" v-model="pageForm.unitId">-->
|
||||
<!-- <el-option-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.name"-->
|
||||
<!-- :value="item.id"-->
|
||||
<!-- v-for="item in unitOptions">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-col>-->
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
|
||||
<!-- <el-card shadow="never" class="search-card">-->
|
||||
|
||||
<!-- </el-card>-->
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center">
|
||||
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{ row.proposalName }}</el-link>
|
||||
</template>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop=='resultName'">
|
||||
<span>{{ resultName?resultName:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
determineTypeOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
underTakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "",
|
||||
stateCode: '',
|
||||
meetingIds: [],
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
searchNames: ['info.proposalName'],
|
||||
delegationName: '',
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
searchNames: [
|
||||
{label: '标题', key: 'info.proposalName'},
|
||||
{label: '案由', key: 'info.brief'},
|
||||
{label: '答复内容', key: 'zbpr.replyContent'},
|
||||
{label: '提案人', key: 'su.username'}]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
underTakeChange(val) {
|
||||
|
||||
},
|
||||
clickMeetingIds(val) {
|
||||
const idx = this.pageForm.meetingIds.indexOf(val)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.meetingIds.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.meetingIds.push(val)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
|
||||
clickSearchNames(val) {
|
||||
const idx = this.pageForm.searchNames.indexOf(val)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.searchNames.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.searchNames.push(val)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
// this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.searchNames = JSON.stringify(pageForm.searchNames)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.meetingIds = JSON.stringify(pageForm.meetingIds)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
// this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
// this.delegationOptions = await proposal.getDelegation(this.pageForm.meetingId)
|
||||
|
||||
this.delegationOptions = await getDictOptions("dbtmc")
|
||||
|
||||
this.underTakeOptions = await proposal.getProposalUndertake()
|
||||
|
||||
// this.unionOptions = await getUnions(null)
|
||||
// this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,236 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row .el-col {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<!--# include("/platform/proposal/include/searchCnd.html"){}#-->
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{ row.proposalName }}</el-link>
|
||||
</template>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop=='resultName'">
|
||||
<span>{{ resultName?resultName:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{feedBackResultName}}" v-else-if="column.prop==='feedBackResultName'">
|
||||
<span>{{ feedBackResultName?feedBackResultName:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'mannerName', label: '提交方式', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true, checked: 0},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'feedBackResultName', label: '反馈意见', sortable: true, checked: 0},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
determineTypeOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
this.delegationOptions = await proposal.getDelegation(this.pageForm.meetingId)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,394 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<!-- <el-row type="flex" justify="center">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
style="width: 50%" @keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 110px;">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-row>-->
|
||||
|
||||
<el-row align="middle" class="query-row" justify="center" type="flex">
|
||||
<el-col :span="8">
|
||||
<span>教代会:</span>
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
style="width: 80%" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword2">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
|
||||
v-model="pageForm.searchName2">
|
||||
<el-option label="提案人" value="su.username"></el-option>
|
||||
<!-- <el-option label="附议人" value="seconded.username"></el-option>-->
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">提案状态:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-select @change="doSearch()" clearable filterable placeholder="请选择提案状态"
|
||||
style="width: 400px" v-model="pageForm.stateCode">
|
||||
<el-option :key="item.stateCode"
|
||||
:label="item.stateName"
|
||||
:value="item.stateCode"
|
||||
v-for="item in stateOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">提案类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalTypes.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="checkProposalType(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in typeOptions">
|
||||
{{ item.typeName }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalTypes=[];doSearch()"
|
||||
type="danger" v-if="typeOptions.length&&pageForm.proposalTypes.length">清空
|
||||
</el-link>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
|
||||
<el-col class="query-row-title">代 表 团:</el-col>
|
||||
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="8"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('tamanage')||@shiro.hasRole('jdhdbt01')}">
|
||||
<!-- <span>代表团:</span>-->
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="所属代表团"
|
||||
style="width: 350px" v-model="pageForm.delegationId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.dbtname"
|
||||
:value="item.id"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属工会:</span>
|
||||
<el-select @change="unionChange" clearable filterable
|
||||
placeholder="请选择所属工会" style="width: 350px" v-model="pageForm.unionId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id"
|
||||
v-for="item in unionOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属单位:</span>
|
||||
<el-select @change="doSearch" clearable filterable
|
||||
placeholder="请选择所属单位会" style="width: 350px" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row" type="flex">
|
||||
<el-col class="query-row-title">征集状态:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.levyStates.includes(item.value)?'dark':'plain'"
|
||||
:key="item.value"
|
||||
:type="item.label"
|
||||
@click="checkLevyState(item.value)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in levyAuditOptions">
|
||||
{{ item.label }}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="pageForm.levyStates=[];doSearch()"
|
||||
type="danger" v-if="levyAuditOptions.length&&pageForm.levyStates.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
<template #func>
|
||||
<el-button :disabled="!pageForm.meetingId" @click="manualRemind" size="small" type="primary">
|
||||
一键提醒
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" align="center"
|
||||
header-align="center"
|
||||
row-key="id"
|
||||
>
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.proposalName}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
levyStates: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'mobile', label: '联系方式', disabled: true},
|
||||
{prop: 'unitname', label: '单位', disabled: true},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
// {prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
// {prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提交方式', sortable: true},
|
||||
{prop: 'secondedNum', label: '附议人数量', sortable: true},
|
||||
{prop: 'secondedAgreeNum', label: '已附议', sortable: true},
|
||||
{prop: 'delegationAudit', label: '团长审核', sortable: true},
|
||||
],
|
||||
levyAuditOptions: [
|
||||
{label: '未提交', value: 0},
|
||||
{label: '未附议', value: 1},
|
||||
{label: '附议中', value: 2},
|
||||
{label: '待团长审核', value: 3},
|
||||
{label: '团长已审核', value: 4},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
async manualRemind() {
|
||||
const confirm = await this.$confirm('请确认是否一键提醒?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/remindProposalCreator', {teacherMeetingId: this.pageForm.meetingId})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await getDelegation(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkLevyState(type) {
|
||||
this.pageForm.levyStates = [type]
|
||||
|
||||
// let idx = this.pageForm.levyStates.indexOf(type)
|
||||
// if (idx !== -1) {
|
||||
// this.pageForm.levyStates.splice(idx, 1)
|
||||
// } else {
|
||||
// this.pageForm.levyStates.push(type)
|
||||
// }
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.levyStates = JSON.stringify(pageForm.levyStates)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await getOpenProposalState()
|
||||
this.typeOptions = await getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
|
||||
this.delegationOptions = await getDelegation(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,232 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-table {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-row justify="space-between" type="flex">
|
||||
<el-col>
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-select @change="pageData()" clearable filterable placeholder="请选择代表团"
|
||||
v-model="pageForm.delegationId">
|
||||
<el-option :key="item.id" :label="item.dbtname" :value="item.id"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-select @change="pageData()" clearable filterable
|
||||
placeholder="请选择承办单位" v-model="pageForm.undertakeId">
|
||||
<el-option
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in undertakeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-select @change="pageData()" clearable filterable placeholder="请选择提案类型"
|
||||
v-model="pageForm.typeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id"
|
||||
v-for="item in typeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-select @change="pageData()" clearable filterable placeholder="请选择提案状态"
|
||||
v-model="pageForm.stateCode">
|
||||
<el-option :key="item.stateCode"
|
||||
:label="item.stateName"
|
||||
:value="item.stateCode"
|
||||
v-for="item in stateOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
<template #func>
|
||||
<el-button :disabled="!pageForm.meetingId" @click="sessionExport" icon="el-icon-printer"
|
||||
size="medium"
|
||||
type="primary">
|
||||
按条件导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :row-key="()=>{new Date().getTime()}" :size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table" style="width: 100%;margin-bottom: 20px" v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="$refs.info.openView(row.id);$refs.guava.view()" type="primary">
|
||||
{{row.proposalName}}
|
||||
</el-link>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='stateId'">
|
||||
<span :style="'color:'+row.stateColor"
|
||||
v-if="(!row.isReplyPass||!row.isCommitteePass)&&row.isAudit&&!row.isMake&&!row.isReply">退回修改</span>
|
||||
<vi-table-state :state="row" v-else></vi-table-state>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" size="mini" type="primary">
|
||||
导出
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
stateOptions: [],
|
||||
undertakeOptions: [],
|
||||
meetingOptions: [],
|
||||
delegationOptions: [],
|
||||
typeOptions: [],
|
||||
proposalIds: [],
|
||||
pageForm: {
|
||||
delegationId: "",
|
||||
stateCode: "",
|
||||
typeId: ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号'},
|
||||
{prop: 'proposalName', label: '提案名称'},
|
||||
{prop: 'username', label: '提案人'},
|
||||
{prop: 'createTime', label: '提案时间'},
|
||||
{prop: 'typeName', label: '提案类型'},
|
||||
{prop: 'meetingName', label: '教代会届次'},
|
||||
{prop: 'delegationName', label: '所属代表团'},
|
||||
{prop: 'stateId', label: '提案状态'},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'undertake') {
|
||||
this.undertakeExport()
|
||||
} else if (type === 'session') {
|
||||
this.sessionExport()
|
||||
} else if (type === 'proposal') {
|
||||
this.proposalExport(data.id)
|
||||
} else if (type === 'info') {
|
||||
this.oneProposalExport(data.id)
|
||||
}
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
|
||||
/**
|
||||
* 按届次导出提案
|
||||
*/
|
||||
sessionExport() {
|
||||
const {meetingId, undertakeId, stateCode, delegationId} = this.pageForm
|
||||
let props = {}
|
||||
this.tableColumns.forEach(v => {
|
||||
props[v.prop] = v.label
|
||||
})
|
||||
if (meetingId) {
|
||||
window.location.href = loc() + "/sessionExport?meetingId=" + meetingId + "&stateCode=" + stateCode + "&delegationId=" + delegationId + "&props=" + JSON.stringify(props)
|
||||
}
|
||||
/* if (undertakeId && meetingId) {
|
||||
window.location.href = loc() + "/undertakeExport?meetingId=" + meetingId + "&undertakeId=" + undertakeId
|
||||
}
|
||||
*/
|
||||
},
|
||||
/**
|
||||
* 按承办单位导出
|
||||
*/
|
||||
undertakeExport() {
|
||||
const {meetingId, undertakeId} = this.pageForm
|
||||
if (!undertakeId) {
|
||||
this.$notify.warning({title: '警告', message: '请选择承办单位'});
|
||||
return
|
||||
}
|
||||
window.location.href = loc() + "/undertakeExport?meetingId=" + meetingId + "&undertakeId=" + undertakeId
|
||||
},
|
||||
/**
|
||||
* 按提案导出承办
|
||||
*/
|
||||
proposalExport(id) {
|
||||
window.location.href = loc() + "/proposalExport?proposalId=" + id
|
||||
},
|
||||
/**
|
||||
* 导出单个提案信息
|
||||
*/
|
||||
oneProposalExport(id) {
|
||||
window.location.href = loc() + "/oneProposalExport?proposalId=" + id
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.delegationOptions = await proposal.getDelegation(this.pageForm.meetingId)
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,224 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-row type="flex">
|
||||
<el-col>
|
||||
<span>教代会:</span>
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
style="width: 80%;margin-right: 20px" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col>
|
||||
<span>承办单位:</span>
|
||||
<el-select @change="pageData()" clearable filterable
|
||||
placeholder="请选择承办单位" style="width: 80%" v-model="pageForm.undertakeId">
|
||||
<el-option
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in undertakeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-table :data="tableData" :summary-method="getSummaries" class="mt10" show-summary>
|
||||
<el-table-column header-align="center" label="序号" type="index"></el-table-column>
|
||||
<el-table-column header-align="center" label="单位名称" prop="unitName">
|
||||
<template scope="{row}">
|
||||
<el-link @click="selectProposalByUnit(row)" type="primary">{{ row.unitName }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="提案总数" prop="totalCount" sortable></el-table-column>
|
||||
<el-table-column header-align="center" label="主办提案数"
|
||||
prop="masterCount" sortable></el-table-column>
|
||||
<el-table-column header-align="center" label="协办提案数" prop="slaveCount" sortable></el-table-column>
|
||||
<el-table-column
|
||||
header-align="center" label="满意" prop="satisfiedCount"
|
||||
sortable v-if="feedBackNames.includes('满意')"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
header-align="center" label="比较满意" prop="quiteSatisfiedCount"
|
||||
sortable v-if="feedBackNames.includes('比较满意')"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
header-align="center" label="基本满意" prop="basicallySatisfiedCount"
|
||||
sortable v-if="feedBackNames.includes('基本满意')"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
header-align="center" label="不满意" prop="notSatisfiedCount"
|
||||
sortable v-if="feedBackNames.includes('不满意')"></el-table-column>
|
||||
<el-table-column header-align="center" label="满意度" prop="satisfiedRate"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-dialog :title="dialogTitle" :visible.sync="undertakeVisible" width="70%">
|
||||
<el-table :data="undertakeTableData" :size="tableSize" align="center" header-align="center">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{ row.proposalName }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
dialogTitle: '',
|
||||
undertakeVisible: false,
|
||||
undertakeOptions: [],
|
||||
meetingOptions: [],
|
||||
undertakeTableData: [],
|
||||
pageForm: {},
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}],
|
||||
showSlaveTableColumn: false,
|
||||
feedBackNames: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
async meetingChange() {
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
await this.pageData()
|
||||
},
|
||||
async selectProposalByUnit(row) {
|
||||
const resp = await $.get(loc() + '/selectProposalByUnit', {
|
||||
meetingId: this.pageForm.meetingId,
|
||||
underTakeId: row.id
|
||||
})
|
||||
this.dialogTitle = row.unitName + '所承办提案'
|
||||
this.undertakeVisible = true
|
||||
if (resp.code === 0) {
|
||||
this.undertakeTableData = resp.data
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
this.undertakeVisible = false
|
||||
},
|
||||
getSummaries(param) {
|
||||
const {columns, data} = param;
|
||||
const sums = [];
|
||||
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '合计'
|
||||
return;
|
||||
} else if (index === 1) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return prev + curr;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
} else if (index === 9) {
|
||||
sums[index] = ((sums[5] + sums[6] + sums[7]) / sums[2]).toFixed(2) * 100 + '%'
|
||||
} else {
|
||||
sums[index] += 'NaN';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar()
|
||||
this.tableLoading = true
|
||||
const resp = await $.post(loc() + "/pageData", this.pageForm)
|
||||
sublime.closeLoadingbar()
|
||||
this.tableLoading = false
|
||||
if (resp.code === 0) {
|
||||
resp.data.forEach(v => {
|
||||
// v.satisfiedRate = isNaN((v.satisfied / v.total) * 100) ? 0 : ((v.satisfied / v.total) * 100).toFixed(1)
|
||||
v.satisfiedRate = ((v.satisfiedCount + v.quiteSatisfiedCount + v.basicallySatisfiedCount) / v.totalCount).toFixed(2) * 100 + '%'
|
||||
})
|
||||
this.tableData = resp.data
|
||||
} else {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}
|
||||
},
|
||||
async initTableSlaveColumns() {
|
||||
const config = await proposal.getProposalConfig()
|
||||
this.showSlaveTableColumn = config.slaveUnitConfig && config.slaveUnitConfig.isNeedReply
|
||||
},
|
||||
async getFeedBackNames() {
|
||||
const data = await getDictOptions("proposal_feedback")
|
||||
this.feedBackNames = data.map(v => v.name)
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
await this.pageData()
|
||||
this.initTableSlaveColumns()
|
||||
this.getFeedBackNames()
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,317 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">届次:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="meetingChange"
|
||||
placeholder="请选择教代会届次" style="width: 300px" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in allJdhOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">承办单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable filterable
|
||||
placeholder="请选择承办单位" style="width: 300px" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search">
|
||||
<div class="search-item" style="width: 100%;margin-top: 15px;">
|
||||
<div class="search-item-label">快捷查询:</div>
|
||||
<div class="search-item-option">
|
||||
<el-tag :effect="clickTags.includes(item.name)?'dark':''"
|
||||
@click="filterData(item)"
|
||||
class="mr5"
|
||||
style="cursor: pointer"
|
||||
v-for="item in searchTags">
|
||||
{{item.name}}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="clickTags=[];pageData()"
|
||||
type="danger" v-if="clickTags.length>0">清空
|
||||
</el-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
<template #func>
|
||||
<!-- <el-button type="primary" icon="el-icon-download" size="small"
|
||||
@click="doExport">
|
||||
导出提案承办汇总表
|
||||
</el-button>-->
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
row-key="id" style="width: 100%;margin-bottom: 20px" v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="$refs.info.openView(row.id);$refs.guava.view()" type="primary">
|
||||
{{row.proposalName}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='pruMaster'">
|
||||
<template v-if="row.pruMaster">
|
||||
<el-popover
|
||||
@show="getUnitLeader([row.pruMasterId])"
|
||||
placement="right"
|
||||
trigger="click"
|
||||
width="400">
|
||||
<div v-html="unitLeaderInfo"></div>
|
||||
<span slot="reference" style="cursor: pointer">
|
||||
{{row.pruMaster}}<i class="el-icon-phone" style="color: #67c23a"></i>
|
||||
</span>
|
||||
</el-popover>
|
||||
</template>
|
||||
<span v-else>
|
||||
暂无
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='pruSlaveReply'">
|
||||
<template v-if="row.pruSlaveReply">
|
||||
<el-popover
|
||||
@show="getUnitLeader(row.pruSlaveId.split(','))"
|
||||
placement="right"
|
||||
trigger="click"
|
||||
width="400">
|
||||
<div v-html="unitLeaderInfo"></div>
|
||||
<span slot="reference" style="cursor: pointer">
|
||||
{{row.pruSlaveReply}}<i class="el-icon-phone" style="color: #67c23a"></i>
|
||||
</span>
|
||||
</el-popover>
|
||||
</template>
|
||||
<span v-else>
|
||||
暂无
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='stateCode'">
|
||||
<vi-table-state :state="row"></vi-table-state>
|
||||
</template>
|
||||
<template scope="{row:{feedback}}" v-else-if="column.prop=='feedback'">
|
||||
<el-tag size="medium" type="success" v-if="feedback">已反馈</el-tag>
|
||||
<el-tag size="medium" type="danger" v-else>未反馈</el-tag>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='urgeNum'">
|
||||
<el-link @click="findUrgeRecord(row.id)" type="primary">{{row.urgeNum}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<!-- :disabled="row.isAllReply"-->
|
||||
<el-button :loading="submitDisabled" @click="doUrge(row)" disabled
|
||||
size="mini"
|
||||
type="primary">催办
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :visible.sync="urgeDialog" title="催办记录">
|
||||
<el-table :data="urgeRecordList">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办人姓名"
|
||||
property="urgeUserName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办人工号"
|
||||
property="urgeLoginName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办时间" property="operateTime"></el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let chart
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
urgeDialog: false,
|
||||
submitDisabled: false,
|
||||
urgeRecordList: [],
|
||||
allJdhOptions: [],
|
||||
tableData: [],
|
||||
fullTableData: [],
|
||||
unitOptions: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'resultName', label: '立案结果', disabled: true, sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterReply', label: '主办单位答复', sortable: true},
|
||||
{prop: 'pruSlaveReply', label: '协办单位'},
|
||||
{prop: 'pruMasterLeader', label: '分管校领导'},
|
||||
{prop: 'pruMasterLeaderIsAudit', label: '审批答复'},
|
||||
{prop: 'feedback', label: '反馈意见'},
|
||||
{prop: 'stateCode', label: '状态'},
|
||||
{prop: 'urgeNum', label: '催办次数'},
|
||||
],
|
||||
unitLeaderInfo: null,
|
||||
searchTags: [
|
||||
{name: '主办已答复', cnd: {key: 'pruMasterReply', value: '已答复'}},
|
||||
{name: '主办未答复', cnd: {key: 'pruMasterReply', value: '未答复'}},
|
||||
{name: '协办已答复', cnd: {key: 'pruSlaveReply', value: '已答复'}},
|
||||
{name: '协办未答复', cnd: {key: 'pruSlaveReply', value: '未答复'}},
|
||||
{name: '领导已审批', cnd: {key: 'pruMasterLeaderIsAudit', value: '已审批'}},
|
||||
{name: '领导未审批', cnd: {key: 'pruMasterLeaderIsAudit', value: '未审批'}},
|
||||
],
|
||||
clickTags: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
filterData(tag) {
|
||||
const {name, cnd} = tag
|
||||
if (this.clickTags.indexOf(name) > -1) {
|
||||
this.clickTags.splice(this.clickTags.indexOf(name), 1)
|
||||
} else {
|
||||
this.clickTags.push(name)
|
||||
}
|
||||
const choseTags = this.searchTags.filter(v => this.clickTags.includes(v.name))
|
||||
let tempTableData = this.fullTableData
|
||||
choseTags.forEach(v => {
|
||||
tempTableData = tempTableData.filter(t => t[v.cnd.key] && t[v.cnd.key].indexOf(v.cnd.value) > -1)
|
||||
})
|
||||
this.tableData = tempTableData
|
||||
if (choseTags.length === 0) {
|
||||
this.tableData = this.fullTableData
|
||||
}
|
||||
},
|
||||
async findUrgeRecord(proposalId) {
|
||||
this.urgeDialog = true
|
||||
const resp = await $.post("/platform/proposal/senior/urge/findUrgeRecord", {proposalId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.urgeRecordList = data
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
doExport() {
|
||||
location.href = loc() + '/export?meetingId=' + (this.pageForm.meetingId ? this.pageForm.meetingId : '') + '&unitId=' + (this.pageForm.unitId ? this.pageForm.unitId : '')
|
||||
},
|
||||
async doUrge(row) {
|
||||
this.submitDisabled = true
|
||||
this.$confirm('确定催办吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post("/platform/proposal/senior/urge/doUrge", {proposalId: row.id})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}).catch(() => {
|
||||
this.submitDisabled = false
|
||||
});
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar()
|
||||
this.tableLoading = true
|
||||
const resp = await $.post(loc() + "/data", this.pageForm)
|
||||
sublime.closeLoadingbar()
|
||||
this.tableLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.fullTableData = resp.data
|
||||
this.tableData = resp.data
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.unitOptions = await proposal.getUndertakeByMeeting(val)
|
||||
},
|
||||
async getUnitLeader(unitIds) {
|
||||
const resp = await $.get(loc() + '/getUnitLeader', {unitIds: JSON.stringify(unitIds)})
|
||||
this.unitLeaderInfo = resp.data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.allJdhOptions = await getAllJdh()
|
||||
this.$set(this.pageForm, 'meetingId', this.allJdhOptions.length ? this.allJdhOptions[0].id : '')
|
||||
this.pageData()
|
||||
this.unitOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
if (proposal.enableState.some(v => v.stateCode === 800)) {
|
||||
this.tableColumns.splice(9, 0, {prop: 'caseCheckAudit', label: '提案委员会审查'},)
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,280 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-table {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row .el-col {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<!--# include("/platform/proposal/include/searchCnd.html"){}#-->
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
<template #func>
|
||||
<el-button :disabled="meetingOptions.findIndex(v=>v.id==pageForm.meetingId)===0" @click="doExport"
|
||||
type="primary">导出提案报告
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @selection-change="handleSelectionChange"
|
||||
@sort-change="pageOrder"
|
||||
align="center" header-align="center" ref="multipleTable"
|
||||
row-key="id">
|
||||
<el-table-column
|
||||
reserve-selection
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm.pageNumber - 1) * pageForm.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:align="column.align?column.align:'center'"
|
||||
:label="column.label"
|
||||
:min-width="column.width"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.proposalName}}</el-link>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span v-if="![proposal.CASE].includes(row.stateCode)">已审核</span>
|
||||
<span v-else>待审核</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='resultName'">
|
||||
<el-link type="primary">
|
||||
{{row.resultName ? row.resultName:'暂未审核'}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<!-- <proposal-table :data="tableData" :loading="tableLoading" :page="pageForm" @order="pageOrder"-->
|
||||
<!-- @selection="handleSelectionChange"-->
|
||||
<!-- @view="openView"-->
|
||||
<!-- selection>-->
|
||||
|
||||
<!-- </proposal-table>-->
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
meetingOptions: [],
|
||||
tableData: [],
|
||||
loading: false,
|
||||
tableLoading: false,
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
selectProposal: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true, checked: 0},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true, checked: 0},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'isConjoin', label: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
determineTypeOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.selectProposal = val
|
||||
},
|
||||
doExport() {
|
||||
|
||||
if (this.selectProposal.length === 0) {
|
||||
this.notifyWarning('请先选择提案后再导出提案报告')
|
||||
return
|
||||
}
|
||||
|
||||
const params = {
|
||||
meetingId: this.pageForm.meetingId,
|
||||
proposalIds: this.selectProposal.map(v => v.id)
|
||||
}
|
||||
|
||||
|
||||
window.location.href = loc() + '/doExport' + "?data=" + JSON.stringify(params)
|
||||
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
const resp = await $.post(loc() + "/pageData", pageForm)
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(resp.msg);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : null
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
this.delegationOptions = await proposal.getDelegation(this.pageForm.meetingId)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
if (this.pageForm.meetingId != null) {
|
||||
this.pageData()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Reference in New Issue
Block a user