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

186 lines
8.5 KiB
HTML

<!--#
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>
var 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: '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 proposal.getAllMeeting()
this.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : null
if (this.meetingId != null) {
this.getData()
}
this.getFeedBackNames()
}
})
</script>
<!--#
}
#-->