南京理工提案优化整改: 提案查询和导出新增字段,导出前确认搜索条件;

This commit is contained in:
2026-10-09 09:41:24 +08:00
parent b2fc1979fe
commit d6961ebf19
10 changed files with 535 additions and 84 deletions
@@ -32,7 +32,8 @@ layout("/layouts/platform.html"){
<table-tool label="提案信息" :app="this">
<template #func>
<el-button @click="exportAllProposal" type="primary" size="small">导出立案汇总表</el-button>
<el-button @click="exportCompleteData" type="primary" size="small">按条件导出完整数据</el-button>
<el-button @click="exportAllProposal" type="success" size="small">导出原立案汇总表</el-button>
</template>
</table-tool>
@@ -121,6 +122,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
showStateSearch: true,
resultOptions: [],
determineTypeOptions: [],
typeOptions: [],
@@ -138,6 +140,7 @@ layout("/layouts/platform.html"){
meetingId: '',
unionId: '',
unitId: '',
undertakeId: '',
delegationId: '',
proposalResult: [],
proposalTypes: [],
@@ -166,42 +169,50 @@ layout("/layouts/platform.html"){
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
},
methods: {
exportCompleteData() {
proposal.exportCompleteData(this, {title: '立案提案完整数据', caseOnly: true})
},
exportAllProposal() {
const proposalTypes = JSON.stringify(this.pageForm.proposalTypes)
const proposalResult = JSON.stringify(this.pageForm.proposalResult)
const searchName2 = this.pageForm.searchName2
const searchKeyword2 = this.pageForm.searchKeyword2
const stateCode = this.pageForm.stateCode
const searchKeyword = this.pageForm.searchKeyword
const searchName = this.pageForm.searchName
const delegationId = this.pageForm.delegationId
const unionId = this.pageForm.unionId
const unitId = this.pageForm.unitId
const meetingId = this.pageForm.meetingId
const {exportCondition, exportFileCondition} = proposal.buildExportCondition(this)
let props = {}
this.tableColumns.forEach(v => {
props[v.prop] = v.label
})
window.open(loc() + "/exportAllProposal?proposalTypes=" + proposalTypes +
"&proposalResult=" + proposalResult +
"&searchName2=" + searchName2 +
"&searchKeyword2=" + searchKeyword2 +
"&stateCode=" + stateCode +
"&searchKeyword=" + searchKeyword +
"&searchName=" + searchName +
"&delegationId=" + delegationId +
"&unionId=" + unionId +
"&unitId=" + unitId +
"&meetingId=" + meetingId +
"&props=" + JSON.stringify(props))
this.$confirm('将按当前条件导出全部 ' + (this.pageForm.totalCount || 0)
+ ' 条立案汇总数据,不受当前分页影响。查询条件:' + exportCondition, '导出确认', {
confirmButtonText: '确认导出',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const exportForm = $('<form method="post" target="_blank"></form>')
exportForm.attr('action', loc() + '/exportAllProposal')
const params = Object.assign({}, this.pageForm, {
proposalTypes: JSON.stringify(this.pageForm.proposalTypes),
proposalResult: JSON.stringify(this.pageForm.proposalResult),
determineTypeOptions: JSON.stringify(this.pageForm.proposalDetermineTypes),
props: JSON.stringify(props),
exportCondition,
exportFileCondition
})
Object.keys(params).forEach(key => {
if (!Array.isArray(params[key])) {
exportForm.append($('<input type="hidden">').attr('name', key).val(params[key] || ''))
}
})
$('body').append(exportForm)
exportForm.submit()
exportForm.remove()
}).catch(() => {})
},
oneProposalExport(id) {
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
},
async meetingChange(val) {
this.pageForm.delegationId = ''
this.delegationOptions = await proposal.getDelegation(val)
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
this.pageForm.undertakeId = ''
this.delegationOptions = val ? await proposal.getDelegation(val) : []
this.undertakeOptions = val ? await proposal.getUndertakeByMeeting(val)
: await proposal.getAllProposalUndertake()
this.doSearch()
},
async delegationChange(val) {
@@ -271,8 +282,9 @@ layout("/layouts/platform.html"){
async created() {
this.meetingOptions = await getAllJdh()
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
this.meetingOptions.unshift({id: '', jdhallname: '全部届次'})
this.stateOptions = await proposal.getOpenProposalState()
this.stateOptions = await proposal.getProposalState()
this.typeOptions = await proposal.getProposalType()
this.resultOptions = await getDictOptions("proposal_result")
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
@@ -287,4 +299,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -31,7 +31,6 @@ layout("/layouts/platform.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"
@@ -91,7 +90,9 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
showStateSearch: true,
resultOptions: [],
determineTypeOptions: [],
typeOptions: [],
meetingOptions: [],
stateOptions: [],
@@ -106,6 +107,9 @@ layout("/layouts/platform.html"){
stateCode: '',
meetingId: '',
delegationId: '',
unionId: '',
unitId: '',
undertakeId: '',
proposalResult: [],
proposalTypes: [],
proposalDetermineTypes: []
@@ -138,8 +142,10 @@ layout("/layouts/platform.html"){
},
async meetingChange(val) {
this.pageForm.delegationId = null
this.delegationOptions = await proposal.getDelegation(val)
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
this.pageForm.undertakeId = ''
this.delegationOptions = val ? await proposal.getDelegation(val) : []
this.undertakeOptions = val ? await proposal.getUndertakeByMeeting(val)
: await proposal.getAllProposalUndertake()
this.doSearch()
},
async delegationChange(val) {
@@ -207,8 +213,9 @@ layout("/layouts/platform.html"){
async created() {
this.meetingOptions = await getAllJdh()
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
this.meetingOptions.unshift({id: '', jdhallname: '全部届次'})
this.stateOptions = await proposal.getOpenProposalState()
this.stateOptions = await proposal.getProposalState()
this.typeOptions = await proposal.getProposalType()
this.resultOptions = await getDictOptions("proposal_result")
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
@@ -223,4 +230,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -121,7 +121,9 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
showStateSearch: true,
resultOptions: [],
determineTypeOptions: [],
typeOptions: [],
meetingOptions: [],
stateOptions: [],
@@ -136,6 +138,9 @@ layout("/layouts/platform.html"){
stateCode: '',
meetingId: '',
delegationId: '',
unionId: '',
unitId: '',
undertakeId: '',
proposalResult: [],
proposalTypes: [],
proposalDetermineTypes: []
@@ -161,6 +166,37 @@ layout("/layouts/platform.html"){
{prop: 'feedbackCodeByUnderTake', label: '对承办单位办理态度评价'},
{prop: 'feedbackResult', label: '对办理结果评价'},
],
exportColumns: [
{prop: 'proposalCode', label: '提案编号'},
{prop: 'username', label: '提案人'},
{prop: 'loginname', label: '提案人工号'},
{prop: 'seconderNames', label: '附议人'},
{prop: 'creatorUnitName', label: '所属单位'},
{prop: 'proposalName', label: '提案标题'},
{prop: 'brief', label: '案由'},
{prop: 'measures', label: '建议措施'},
{prop: 'createTime', label: '提案时间'},
{prop: 'meetingName', label: '届次'},
{prop: 'delegationName', label: '代表团'},
{prop: 'typeName', label: '提案类型'},
{prop: 'mannerName', label: '提案方式'},
{prop: 'resultName', label: '立案结果'},
{prop: 'stateName', label: '办理进度'},
{prop: 'pruMaster', label: '主办单位'},
{prop: 'pruSlave', label: '协办单位'},
{prop: 'replyStatus', label: '答复状态'},
{prop: 'replyTime', label: '答复时间'},
{prop: 'replyContent', label: '答复内容'},
{prop: 'handleOpinion', label: '处理意见'},
{prop: 'implementState', label: '落实情况'},
{prop: 'leaderCheckTime', label: '分管领导审批时间'},
{prop: 'leaderCheckOpinion', label: '分管领导审批意见'},
{prop: 'feedbackCodeByUnderTake', label: '对承办单位办理态度评价'},
{prop: 'feedbackResult', label: '对办理结果评价'},
{prop: 'feedbackOpinion', label: '反馈意见'},
{prop: 'feedbackTime', label: '反馈时间'},
{prop: 'auditRecords', label: '审核记录及时间'},
],
}
},
components: {
@@ -169,8 +205,102 @@ layout("/layouts/platform.html"){
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
},
methods: {
getOptionLabel(options, value, valueKey, labelKey) {
const option = options.find(item => item[valueKey] === value)
return option ? option[labelKey] : value
},
getExportCondition() {
const conditions = []
const {meetingId, stateCode, proposalTypes, proposalResult, proposalDetermineTypes,
delegationId, unionId, unitId, undertakeId, searchKeyword, searchKeyword2} = this.pageForm
if (meetingId) {
conditions.push('届次:' + this.getOptionLabel(this.meetingOptions, meetingId, 'id', 'jdhallname'))
}
if (stateCode) {
conditions.push('提案状态:' + this.getOptionLabel(this.stateOptions, stateCode, 'stateCode', 'stateName'))
}
if (proposalTypes.length) {
conditions.push('提案类型:' + proposalTypes.map(value =>
this.getOptionLabel(this.typeOptions, value, 'id', 'typeName')).join('、'))
}
if (proposalResult.length) {
conditions.push('立案结果:' + proposalResult.map(value =>
this.getOptionLabel(this.resultOptions, value, 'code', 'name')).join('、'))
}
if (proposalResult.includes('determine') && proposalDetermineTypes.length) {
conditions.push('是否重点:' + proposalDetermineTypes.map(value =>
this.getOptionLabel(this.determineTypeOptions, value, 'code', 'name')).join('、'))
}
if (delegationId) {
conditions.push('代表团:' + this.getOptionLabel(this.delegationOptions, delegationId, 'id', 'dbtname'))
}
if (unionId) {
conditions.push('所属工会:' + this.getOptionLabel(this.unionOptions, unionId, 'id', 'unionname'))
}
if (unitId) {
conditions.push('所属单位:' + this.getOptionLabel(this.unitOptions, unitId, 'id', 'name'))
}
if (undertakeId) {
conditions.push('承办单位:' + this.getOptionLabel(this.undertakeOptions, undertakeId, 'id', 'unitName'))
}
if (searchKeyword) {
conditions.push((this.pageForm.searchName === 'proposalCode' ? '提案编号:' : '提案名称:') + searchKeyword)
}
if (searchKeyword2) {
conditions.push('提案人:' + searchKeyword2)
}
return conditions.length ? conditions.join(';') : '无'
},
getExportFileCondition() {
const conditions = []
const {meetingId, stateCode, proposalTypes, proposalResult, undertakeId,
searchKeyword, searchKeyword2} = this.pageForm
if (meetingId) {
conditions.push(this.getOptionLabel(this.meetingOptions, meetingId, 'id', 'jdhallname'))
}
if (stateCode) {
conditions.push(this.getOptionLabel(this.stateOptions, stateCode, 'stateCode', 'stateName'))
}
if (proposalTypes.length) {
conditions.push(proposalTypes.map(value =>
this.getOptionLabel(this.typeOptions, value, 'id', 'typeName')).join('、'))
}
if (proposalResult.length) {
conditions.push(proposalResult.map(value =>
this.getOptionLabel(this.resultOptions, value, 'code', 'name')).join('、'))
}
if (undertakeId) {
conditions.push(this.getOptionLabel(this.undertakeOptions, undertakeId, 'id', 'unitName'))
}
if (searchKeyword) {
conditions.push(searchKeyword)
}
if (searchKeyword2) {
conditions.push(searchKeyword2)
}
return conditions.join('_')
},
exportByCnd() {
window.open(loc() + '/exportByCnd?cnd=' + JSON.stringify(this.pageForm) + '&tableColumns=' + JSON.stringify(this.tableColumns))
const exportCondition = this.getExportCondition()
const totalCount = this.pageForm.totalCount || 0
this.$confirm('将导出当前筛选条件下的全部 ' + totalCount + ' 条提案,不受当前分页影响。查询条件:' + exportCondition,
'导出确认', {
confirmButtonText: '确认导出',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const exportForm = clone(this.pageForm)
exportForm.exportCondition = exportCondition
exportForm.exportFileCondition = this.getExportFileCondition()
const form = $('<form method="post" target="_blank"></form>')
form.attr('action', loc() + '/exportByCnd')
form.append($('<input type="hidden" name="cnd">').val(JSON.stringify(exportForm)))
form.append($('<input type="hidden" name="tableColumns">').val(JSON.stringify(this.exportColumns)))
$('body').append(form)
form.submit()
form.remove()
}).catch(() => {})
},
oneProposalExport(id) {
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
@@ -247,7 +377,7 @@ layout("/layouts/platform.html"){
this.meetingOptions = await getAllJdh()
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
this.stateOptions = await proposal.getOpenProposalState()
this.stateOptions = await proposal.getProposalState()
this.typeOptions = await proposal.getProposalType()
this.resultOptions = await getDictOptions("proposal_result")
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
@@ -262,4 +392,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -93,7 +93,9 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
showStateSearch: true,
resultOptions: [],
determineTypeOptions: [],
typeOptions: [],
meetingOptions: [],
stateOptions: [],
@@ -110,6 +112,7 @@ layout("/layouts/platform.html"){
stateCode: '',
meetingId: '',
delegationId: '',
undertakeId: '',
proposalResult: [],
proposalTypes: [],
proposalDetermineTypes: []
@@ -138,36 +141,39 @@ layout("/layouts/platform.html"){
},
methods: {
exportAllProposal() {
const proposalTypes = JSON.stringify(this.pageForm.proposalTypes)
const proposalResult = JSON.stringify(this.pageForm.proposalResult)
const searchName2 = this.pageForm.searchName2
const searchKeyword2 = this.pageForm.searchKeyword2
const stateCode = this.pageForm.stateCode
const searchKeyword = this.pageForm.searchKeyword
const searchName = this.pageForm.searchName
const delegationId = this.pageForm.delegationId
const unionId = this.pageForm.unionId
const unitId = this.pageForm.unitId
const meetingId = this.pageForm.meetingId
window.location.href = loc() + "/exportAllProposal?proposalTypes=" + proposalTypes +
"&proposalResult=" + proposalResult +
"&searchName2=" + searchName2 +
"&searchKeyword2=" + searchKeyword2 +
"&stateCode=" + stateCode +
"&searchKeyword=" + searchKeyword +
"&searchName=" + searchName +
"&delegationId=" + delegationId +
"&unionId=" + unionId +
"&unitId=" + unitId +
"&meetingId=" + meetingId
const {exportCondition, exportFileCondition} = proposal.buildExportCondition(this)
this.$confirm('将按当前筛选条件导出全部 ' + (this.pageForm.totalCount || 0)
+ ' 件提案,不受当前分页影响。查询条件:' + exportCondition, '导出确认', {
confirmButtonText: '确认导出',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const exportForm = $('<form method="post" target="_blank"></form>')
exportForm.attr('action', loc() + '/exportAllProposal')
const params = Object.assign({}, this.pageForm, {
proposalTypes: JSON.stringify(this.pageForm.proposalTypes),
proposalResult: JSON.stringify(this.pageForm.proposalResult),
exportFileCondition
})
Object.keys(params).forEach(key => {
if (!Array.isArray(params[key])) {
exportForm.append($('<input type="hidden">').attr('name', key).val(params[key] || ''))
}
})
$('body').append(exportForm)
exportForm.submit()
exportForm.remove()
}).catch(() => {})
},
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.undertakeOptions = await proposal.getUndertakeByMeeting(val)
this.pageForm.undertakeId = ''
this.delegationOptions = val ? await proposal.getDelegation(val) : []
this.undertakeOptions = val ? await proposal.getUndertakeByMeeting(val)
: await proposal.getAllProposalUndertake()
this.doSearch()
},
async delegationChange(val) {
@@ -235,13 +241,14 @@ layout("/layouts/platform.html"){
async created() {
this.meetingOptions = await getAllJdh()
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
this.meetingOptions.unshift({id: '', jdhallname: '全部届次'})
this.stateOptions = await getOpenProposalState()
this.stateOptions = await proposal.getProposalState()
this.typeOptions = await getProposalType()
this.resultOptions = await getDictOptions("proposal_result")
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
this.delegationOptions = await getDelegation(this.pageForm.meetingId)
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)
@@ -251,4 +258,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->
@@ -146,15 +146,28 @@
<el-row class="query-row" type="flex">
<el-col class="query-row-title">承办单位:</el-col>
<el-col class="query-row-content">
<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-row>
<el-col :span="8">
<el-select @change="pageData()" clearable filterable
placeholder="请选择承办单位" style="width: 350px" v-model="pageForm.undertakeId">
<el-option
:label="item.unitName"
:value="item.id"
v-for="item in undertakeOptions">
</el-option>
</el-select>
</el-col>
<el-col :span="8" v-if="$data.showStateSearch">
<span>提案状态:</span>
<el-select @change="doSearch" clearable filterable placeholder="请选择提案状态"
style="width: 350px" 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-col>
</el-row>
</el-card>
</el-card>
@@ -190,6 +190,17 @@ layout("/layouts/platform.html"){
</el-option>
</el-select>
</el-col>
<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: 350px" 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-col :span="8">-->
<!-- <span>所属工会:</span>-->
<!-- <el-select @change="unionChange" clearable filterable-->
@@ -433,7 +444,7 @@ layout("/layouts/platform.html"){
this.meetingOptions = await getAllJdh()
// this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
this.stateOptions = await proposal.getOpenProposalState()
this.stateOptions = await proposal.getProposalState()
this.typeOptions = await proposal.getProposalType()
this.resultOptions = await getDictOptions("proposal_result")
@@ -453,4 +464,4 @@ layout("/layouts/platform.html"){
</script>
<!--#
}
#-->
#-->