Files
UNION_NJUST/target/classes/views/platform/proposal/transact/replyImplementation.html
T
2026-09-23 09:38:39 +08:00

411 lines
21 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-select {
width: 100%;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<proposal-search :page="pageForm" @search="doSearch" title="答复"></proposal-search>
<el-card shadow="never" class="mt20">
<table-tool label="答复列表" :app="this">
<template #tips>
<!-- <span>温馨提醒:协</span>-->
</template>
<template #func>
<el-button @click="HandlingRemindDialog = true" size="small" type="primary"
v-if="${@shiro.hasRole('T01') || @shiro.hasRole('sysadmin')}"
:disabled="proTableSelection.length===0">办理提醒
</el-button>
</template>
</table-tool>
<el-table ref="proTable"
:data="tableData" align="center" header-align="center" row-key="replyId"
:tree-props="{children: 'children'}"
@selection-change="handleSelectionChange"
:size="tableSize" @sort-change="pageOrder">
<el-table-column
v-if="${@shiro.hasRole('T01') || @shiro.hasRole('sysadmin')}"
:selectable="(row)=>{return !row.isImplementState}"
reserve-selection
type="selection"
width="55">
</el-table-column>
<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
:align="column.align?column.align:'center'"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:width="column.width"
:sortable="column.sortable"
>
<template v-if="column.prop=='proposalName'" scope="{row}">
<el-link type="primary" @click="openView(row)">{{ row.proposalName }}</el-link>
</template>
<template scope="{row}" v-else-if="column.prop=='isImplementState'">
<span class="text-success" v-if="row.isImplementState">已答复</span>
<span v-else class="text-danger">未答复</span>
</template>
<template v-else-if="column.prop=='determineTypeCode'" scope="{row}">
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'?
'普通':'否'}}
</template>
<template v-else-if="column.prop=='isConjoin'" scope="{row}">
{{row.isConjoin?'是':'否'}}
</template>
<template v-else-if="column.prop==='isForward'" scope="{row}">
<span v-if="row.isForward" class="text-primary">是({{row.proxyReplyUserName}})</span>
<span v-else>否</span>
</template>
</el-table-column>
<el-table-column :width="200" align="center" fixed="right"
header-align="center"
label="操作">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="!row.isImplementState" type="primary" @click="openAudit(row)" size="mini">答复
</el-button>
<!-- <el-button-->
<!-- v-if="row.isReply && ([proposal.LEADERAUDIT, proposal.UNITREPLY].includes(row.stateCode)) && row.leaderId == null"-->
<!-- type="danger" @click="doRollBack(row)"-->
<!-- size="mini">撤回-->
<!-- </el-button>-->
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #edit_func>
<!-- <el-button :disabled="submitDisabled" @click="doReply(true)" type="primary">保 存</el-button>-->
<el-button :disabled="submitDisabled" @click="doReply(false)" type="primary">提 交</el-button>
</template>
<template #edit>
<proposal-info ref="audit" label="落实信息" handle>
<template #handle>
<el-form :model="formData" ref="auditForm" :rules="formRules" label-width="120px">
<vi-title :title="proTableData.length > 1 ? '并案信息' : '提案信息'"></vi-title>
<el-form-item>
<el-table :data="proTableData" tooltip-effect="dark"
style="width: 100%">
<el-table-column align="left" header-align="left" prop="proposalCode"
label="提案编号"></el-table-column>
<el-table-column align="left" header-align="left" prop="username"
label="提案人"
show-overflow-tooltip></el-table-column>
<el-table-column align="left" header-align="left" prop="proposalName" label="提案名称"
show-overflow-tooltip>
<template slot-scope="{row}">
<span @click="openView(row)"
style="color: #236eb4; cursor: pointer; text-decoration: underline">{{row.proposalName}}</span>
</template>
</el-table-column>
</el-table>
</el-form-item>
<vi-title title="答复信息"></vi-title>
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="答复人">
<el-input v-model="formData.username" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="replyTime" label="答复时间">
<el-input v-model="formData.replyTime" readonly></el-input>
</el-form-item>
</el-col>
<!-- <el-col :span="24">-->
<!-- <el-form-item prop="replyResult" label="答复结果">-->
<!-- <el-radio-group v-model="formData.replyResult">-->
<!-- <el-radio :label="o.name" border v-for="o in implementStates">{{o.name}}-->
<!-- </el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="24">-->
<!-- <el-form-item prop="implementState" label="办理结果">-->
<!-- <el-radio-group v-model="formData.implementState">-->
<!-- <el-radio :label="o.name" border v-for="o in implementStates">{{o.name}}-->
<!-- </el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
</el-row>
<el-form-item prop="implementState" label="落实情况" class="is-required">
<div id="implementStateEditor"></div>
</el-form-item>
<!-- <el-form-item prop="files" label="附件上传">-->
<!-- <file-upload :files.sync="formData.replyFiles" card></file-upload>-->
<!-- </el-form-item>-->
<el-form-item v-if="isSign()" prop="replySign" label="签&emsp;&emsp;字">
<sign prefix="proposal" :qz.sync="formData.replySign"></sign>
</el-form-item>
<el-row style="margin: 40px 0;text-align: right">
<!-- <el-button :disabled="submitDisabled" @click="doReply(true)" type="primary">保 存</el-button>-->
<el-button :disabled="submitDisabled" @click="doReply(false)" type="primary">提 交
</el-button>
</el-row>
</el-form>
</template>
</proposal-info>
</template>
<template #view>
<proposal-info ref="info"></proposal-info>
</template>
</guava>
<el-dialog :visible.sync="HandlingRemindDialog" title="办理提醒" width="60%" :close-on-click-modal="false"
top="50px">
<vi-title title="已选提案"></vi-title>
<el-table :data="proTableSelection" max-height="350">
<el-table-column prop="proposalCode" label="提案编号"></el-table-column>
<el-table-column prop="proposalName" label="提案名称"></el-table-column>
<el-table-column prop="underTakeName" label="承办单位"></el-table-column>
<el-table-column prop="undertakeType" label="承办类型"></el-table-column>
</el-table>
<el-row type="flex" justify="end" class="mt20">
<el-button @click="HandlingRemindDialog = false">取消</el-button>
<el-button @click="confirmHandlingRemind" type="primary">确定</el-button>
</el-row>
</el-dialog>
</div>
<script>
<!--#include("/platform/proposal/include/proposal_include.js"){}#-->
let E = window.wangEditor
let implementStateEditor = null
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
},
data() {
let replyContentBrief = (rule, value, callback) => {
if (!this.formData.implementState || !dd3s.html2txt(this.formData.implementState)) {
callback(new Error('请填写落实情况'));
} else {
callback();
}
};
return {
implementStates: [],
proTableData: [],
isSign: () => {
return proposal.needSignState.map(v => v.stateCode).includes(500)
},
conJoinProposalName: "",
conJoinProposal: [],
tableColumns: [
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
{prop: 'username', label: '提案人', disabled: true},
{prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
{prop: 'typeName', label: '提案类型', sortable: true, checked: 0},
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
{prop: 'mannerName', label: '提案方式', sortable: true, checked: 0},
{prop: 'meetingName', label: '届次', sortable: true, checked: 0},
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
{prop: 'delegationName', label: '代表团', sortable: true, checked: 0},
{prop: 'resultName', label: '立案结果', sortable: true},
{prop: 'isConjoin', label: '是否并案'},
{prop: 'determineTypeCode', label: '是否重点'},
{prop: 'underTakeName', label: '承办单位', sortable: false},
{prop: 'undertakeType', label: '承办类型', sortable: false},
{prop: 'replyNumber', label: '答复次数', width: "80", sortable: false},
{prop: 'stateName', label: '提案状态', sortable: true},
// {prop: 'isForward', label: '转交答复', sortable: true},
// {prop: 'proxyReplyUserName', label: '转交答复人', sortable: true},
{prop: 'isImplementState', label: '答复状态', sortable: false},
],
submitDisabled: false,
pageForm: {searchName: 'proposalName', isAudit: false},
formData: {
username: "${@shiro.getPrincipalProperty('username')}",
replyTime: moment().format('YYYY-MM-DD'),
implementState: '',
replySign: '',
proposalName: '',
proposalCode: '',
createUser: ''
},
formRules: {
implementState: [{validator: replyContentBrief, trigger: ['blur', 'change']}],
replySign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
},
proTableSelection: [],
HandlingRemindDialog: false,
}
},
methods: {
async confirmHandlingRemind() {
const params = this.proTableSelection.map(v => {
return {replyId: v.replyId, proposalId: v.id, replyUnitId: v.replyUnitId,proposalName:v.proposalName}
})
const resp = await $.get(loc() + '/confirmHandlingRemind', {data: JSON.stringify(params)})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.HandlingRemindDialog = false
this.$refs.proTable.clearSelection()
}
},
handleSelectionChange(val) {
this.proTableSelection = val
},
async findSameUnitUser(val) {
const resp = await $.get(loc() + '/findSameUnitUser/' + val)
if (resp.code === 0) {
this.forwardUserList = resp.data
// const d = resp.data.filter(x => {
// return !this.forwardUserList.map(v => v.id).includes(x.id)
// })
// this.forwardUserList = this.forwardUserList.concat(d)
}
},
rollBack(row) {
if (row.isReply && ([proposal.LEADERAUDIT, proposal.UNITREPLY].includes(row.stateCode)) && row.leaderId == null) {
return true
}
},
// async doRollBack(row) {
// const confirm = await this.$confirm('正在撤回该提案的答复信息,请确认?', '提示', {
// confirmButtonText: '确定',
// cancelButtonText: '取消',
// type: 'warning'
// })
// if (confirm) {
// const resp = await $.post(loc() + "/doRollBack", {proposalId: row.id, replyUnitId: row.replyUnitId})
// if (resp.code === 0) {
// this.notifySuccess(resp.msg)
// this.doSearch()
// }
// }
// },
openView(row) {
this.$refs.guava.view()
this.$refs.info.openView(row.id)
},
async openAudit(row) {
const {id, replyNumber, replyId, replyUnitId, implementState} = row
const res = await $.get('/platform/proposal/common/findConjoinProposal', {proposalId: row.id})
this.proTableData = res.data.filter(o => {
return o.id !== row.id
})
this.proTableData.unshift(row)
const {data} = await $.post(loc() + "/getConJoinInfoList", {proposalId: id})
this.conJoinProposalName = data.map(v => v.proposalName).toString()
this.conJoinProposal = data
this.formData.proposalId = id
this.formData.id = replyId
this.formData.implementState = implementState
this.formData.replyUnitId = replyUnitId
this.formData.proposalName = row.proposalName
this.formData.createUser = row.username
this.formData.proposalCode = row.proposalCode
this.$nextTick(() => {
$("#implementStateEditor").html("")
implementStateEditor = new wangEditor("#implementStateEditor")
implementStateEditor.config.onchange = (html) => {
this.formData.implementState = html
if (this.$refs.auditForm) {
this.$refs.auditForm.validate()
}
}
implementStateEditor.create()
if (implementState) {
implementStateEditor.txt.html(implementState)
}
})
this.$refs.guava.edit()
this.$refs.audit.openView(row.id)
},
async doReply(isSave) {
try {
const valid = await this.$refs["auditForm"].validate()
if (!valid) {
return
}
const msg = this.conJoinProposal.length > 1 ? '提案' + this.conJoinProposalName + '已并案您只需答复一次,请确认?' : '您是否提交该提案的答复内容,请确认?'
const confirm = await this.$confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if ('confirm' !== confirm) {
return
}
this.submitDisabled = true
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
})
const params = clone(this.formData)
const resp = await $.post(loc() + "/audit", {
data: JSON.stringify(this.formData),
replySign: this.formData.replySign
})
if (resp.code === 0) {
this.$notify.success({title: '成功', message: resp.msg});
this.pageData()
this.$refs.guava.index()
} else {
this.$notify.error({title: '失败', message: resp.msg});
}
loading.close()
this.submitDisabled = false
} catch (e) {
console.log(e)
}
}
},
async created() {
this.implementStates = await getDictByCode("proposal_implementState")
this.implementStates = await getDictByCode("proposal_reply_result")
await proposal.initData(this)
}
})
</script>
<!--#
}
#-->