Files
2026-09-08 19:49:21 +08:00

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>
<!--#
}
#-->