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

187 lines
8.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" class="mt20" show-summary>
<el-table-column align="center" header-align="center" label="序号" type="index"></el-table-column>
<el-table-column label="单位名称" prop="unitName" align="center" header-align="center">
<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 label="主办提案" align="center" header-align="center">
<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" label="提案数量" prop="slaveTotalCount"
sortable
header-align="center"></el-table-column>
<el-table-column align="center" label="已答复" prop="slaveHasReplyCount"
header-align="center" sortable></el-table-column>
<el-table-column align="center" label="未答复" prop="slaveNotReplyCount"
header-align="center" sortable></el-table-column>
<el-table-column align="center" label="已结案" prop="slaveFinishCount"
header-align="center" 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>
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
}
},
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 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()
}
})
</script>
<!--#
}
#-->