224 lines
9.9 KiB
HTML
224 lines
9.9 KiB
HTML
<!--#
|
|
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" placeholder="请选择教代会" v-model="pageForm.meetingId"
|
|
filterable style="width: 80%;margin-right: 20px">
|
|
<el-option
|
|
v-for="item in meetingOptions"
|
|
:label="item.jdhallname"
|
|
:value="item.id">
|
|
</el-option>
|
|
</el-select>
|
|
</el-col>
|
|
|
|
<el-col>
|
|
<span>承办单位:</span>
|
|
<el-select @change="pageData()" placeholder="请选择承办单位" v-model="pageForm.undertakeId"
|
|
filterable clearable style="width: 80%">
|
|
<el-option
|
|
v-for="item in undertakeOptions"
|
|
:label="item.unitName"
|
|
:value="item.id">
|
|
</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="veryGoodCount"
|
|
sortable v-if="feedBackNames.includes('很好')"></el-table-column>
|
|
|
|
<el-table-column
|
|
header-align="center" label="比较好" prop="quiteGoodCount"
|
|
sortable v-if="feedBackNames.includes('比较好')"></el-table-column>
|
|
|
|
<el-table-column
|
|
header-align="center" label="一般" prop="commonlyCount"
|
|
sortable v-if="feedBackNames.includes('一般')"></el-table-column>
|
|
|
|
<el-table-column
|
|
header-align="center" label="较差" prop="poorCount"
|
|
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>
|
|
var 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.veryGoodCount + v.quiteGoodCount + v.commonlyCount) / 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_underTake")
|
|
this.feedBackNames = data.map(v => v.name)
|
|
}
|
|
},
|
|
async created() {
|
|
this.meetingOptions = await proposal.getAllMeeting()
|
|
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>
|
|
<!--#
|
|
}
|
|
#--> |