first commit
This commit is contained in:
@@ -0,0 +1,352 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
.item-button {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.item-button .el-button {
|
||||
padding: 12px 25px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<div class="clearfix" slot="header">
|
||||
<h3 style="color: rgb(24, 103, 176);font-family: Microsoft YaHei;">提案配置</h3>
|
||||
</div>
|
||||
<el-form :model="formData" :rules="formRules" label-width="150px" ref="addForm">
|
||||
<el-form-item label="配置名称" prop="configName">
|
||||
<el-input placeholder="请输入配置名称" v-model="formData.configName"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="附议人数量" prop="seconderNum">
|
||||
<el-input maxlength="1" oninput="value=value.replace(/[^\d]/g,'')"
|
||||
placeholder="请输入附议人数量" v-model="formData.seconderNum"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="提交模式" prop="submitMode">
|
||||
<el-radio-group v-model="formData.submitMode">
|
||||
<el-radio-button :label="item.code"
|
||||
v-for="item in submitModeList">{{item.description}}
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="超时自动提交天数" prop="timeoutDays">
|
||||
<el-input maxlength="3" oninput="value=value.replace(/[^\d]/g,'')"
|
||||
placeholder="协办单位超时自动提交天数" v-model="formData.timeoutDays"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="提醒日期" prop="remindProposalCreatorDate">
|
||||
<el-date-picker
|
||||
:picker-options="remindProposalCreatorDatepickerOptions"
|
||||
placeholder="选择提醒日期"
|
||||
type="datetime"
|
||||
v-model="formData.remindProposalCreatorDate"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="办理提醒设置(多选)" prop="reminder">
|
||||
<el-checkbox-group v-model="formData.reminder">
|
||||
<el-checkbox-button :key="item.id" :label="item.code" v-for="item in reminderList">{{item.name}}
|
||||
</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="撰写提案方式(多选)" prop="manner">
|
||||
<el-checkbox-group v-model="formData.manner">
|
||||
<el-checkbox-button :key="item.id" :label="item.code" v-for="item in allMannerList">
|
||||
{{item.name}}
|
||||
</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item label="是否自动提交" prop="isAutoSubmit">-->
|
||||
<!-- <el-radio-group v-model="formData.isAutoSubmit">-->
|
||||
<!-- <el-radio-button :label="true">是</el-radio-button>-->
|
||||
<!-- <el-radio-button :label="false">否</el-radio-button>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<!-- <el-form-item label="个人是否看审核环节" prop="isSeeAudit">-->
|
||||
<!-- <el-radio-group v-model="formData.isSeeAudit">-->
|
||||
<!-- <el-radio-button :label="true">是</el-radio-button>-->
|
||||
<!-- <el-radio-button :label="false">否</el-radio-button>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<!-- <el-form-item label="团长审核方式" prop="headAuditMethod">-->
|
||||
<!-- <el-radio-group v-model="formData.headAuditMethod">-->
|
||||
<!-- <el-radio-button label="TRADITION">传统方式</el-radio-button>-->
|
||||
<!-- <el-radio-button label="UNITE">联合方式</el-radio-button>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item label="提案最少字数" prop="words">
|
||||
<el-input-number :max="5000" :min="1" :precision="0" :step="1"
|
||||
v-model="formData.words"></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="校领导单位代码" prop="schoolLeaderUnitCode">
|
||||
<el-input v-model="formData.schoolLeaderUnitCode"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="不予立案理由">
|
||||
<template v-for="(o,i) in formData.noFilingReason">
|
||||
<el-row style="margin-bottom: 10px" type="flex">
|
||||
<el-col :span="20">
|
||||
<el-input maxlength="100" v-model="formData.noFilingReason[i]">
|
||||
<template slot="prepend">{{i+1}}.</template>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="4" class="pl5">
|
||||
<el-button @click="deleteReasonRow(i)" icon="el-icon-delete"
|
||||
type="danger"></el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<el-button @click="formData.noFilingReason.push('')" type="primary">增加一条</el-button>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="二次答复需要校领导审批" prop="secondReplyAfterNeedLeaderAudit">
|
||||
<el-radio-group v-model="formData.secondReplyAfterNeedLeaderAudit">
|
||||
<el-radio-button :label="true">是</el-radio-button>
|
||||
<el-radio-button :label="false">否</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-row>
|
||||
<p style="width: 150px;text-align: right;padding-right: 12px">主办配置</p>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="需要答复" prop="masterUnitConfig.isNeedReply">
|
||||
<el-switch
|
||||
active-text="需要"
|
||||
inactive-text="不需要"
|
||||
v-model="formData.masterUnitConfig.isNeedReply">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="答复顺序" prop="masterUnitConfig.isFirstReply">
|
||||
<el-switch
|
||||
:disabled="!formData.masterUnitConfig.isNeedReply"
|
||||
active-text="首先答复"
|
||||
inactive-text="第二答复"
|
||||
v-model="formData.masterUnitConfig.isFirstReply">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="需要二次答复" prop="masterUnitConfig.isNeedSecondReply">
|
||||
<el-switch
|
||||
v-model="formData.masterUnitConfig.isNeedSecondReply"
|
||||
:disabled="!formData.masterUnitConfig.isFirstReply"
|
||||
active-text="需要"
|
||||
inactive-text="不需要">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<p style="width: 150px;text-align: right;padding-right: 12px">协办配置</p>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="需要答复" prop="slaveUnitConfig.isNeedReply">
|
||||
<el-switch
|
||||
active-text="需要"
|
||||
inactive-text="不需要"
|
||||
v-model="formData.slaveUnitConfig.isNeedReply">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="答复顺序" prop="slaveUnitConfig.isFirstReply">
|
||||
<el-switch
|
||||
:disabled="!formData.slaveUnitConfig.isNeedReply"
|
||||
active-text="首先答复"
|
||||
inactive-text="第二答复"
|
||||
v-model="formData.slaveUnitConfig.isFirstReply">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="需要二次答复" prop="slaveUnitConfig.isNeedSecondReply">
|
||||
<el-switch
|
||||
v-model="formData.slaveUnitConfig.isNeedSecondReply"
|
||||
:disabled="!formData.slaveUnitConfig.isFirstReply"
|
||||
active-text="需要"
|
||||
inactive-text="不需要">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="撰写须知" prop="writeRemind">
|
||||
<el-input
|
||||
:autosize="{ minRows: 5, maxRows: 10}"
|
||||
maxlength="800"
|
||||
placeholder="请输入撰写须知"
|
||||
type="textarea"
|
||||
v-model="formData.writeRemind">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item class="item-button">
|
||||
<el-button @click="resetForm" type="danger">重 置</el-button>
|
||||
<el-button :loading="subLoading" @click="operation" type="primary">提 交</el-button>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
subLoading: false,
|
||||
reminderList: [],
|
||||
allMannerList: [],
|
||||
openMannerList: [],
|
||||
submitModeList: [],
|
||||
formData: {
|
||||
configName: '智慧工会提案配置',
|
||||
seconderNum: '',
|
||||
reminder: ['SMS'],
|
||||
manner: ['W01'],
|
||||
isAutoSubmit: true,
|
||||
isSeeAudit: false,
|
||||
headAuditMethod: null,
|
||||
words: 1,
|
||||
noFilingReason: [],
|
||||
masterUnitConfig: {},
|
||||
slaveUnitConfig: {},
|
||||
submitMode: 'AMT'
|
||||
},
|
||||
formRules: {
|
||||
configName: [{required: true, message: '请填写配置名称', trigger: ['blur', 'change']}],
|
||||
seconderNum: [{required: true, message: '请填写附议人数量', trigger: ['blur', 'change']}],
|
||||
reminder: [{required: true, message: '请选择办理提醒设置', trigger: ['blur', 'change']}],
|
||||
manner: [{required: true, message: '请选择撰写提案方式', trigger: ['blur', 'change']}],
|
||||
isAutoSubmit: [{required: true, message: '请选择是否自动提交', trigger: ['blur', 'change']}],
|
||||
isSeeAudit: [{required: true, message: '请选择个人是否能看审核环节', trigger: ['blur', 'change']}],
|
||||
headAuditMethod: [{required: true, message: '请选择团长审核方式', trigger: ['blur', 'change']}],
|
||||
words: [{required: true, message: '请输入提案内容要求字数', trigger: ['blur', 'change']}],
|
||||
submitMode: [{required: true, message: '请选择提交模式', trigger: ['blur', 'change']}]
|
||||
},
|
||||
remindProposalCreatorDatepickerOptions: {
|
||||
disabledDate(time) {
|
||||
return time.getTime() < Date.now()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'formData.masterUnitConfig.isNeedReply'(val) {
|
||||
if (!val) {
|
||||
this.$set(this.formData.masterUnitConfig, 'isFirstReply', false)
|
||||
this.$set(this.formData.masterUnitConfig, 'isNeedSecondReply', false)
|
||||
}
|
||||
},
|
||||
'formData.masterUnitConfig.isFirstReply'(val) {
|
||||
if (!val) {
|
||||
this.$set(this.formData.masterUnitConfig, 'isNeedSecondReply', false)
|
||||
}
|
||||
},
|
||||
'formData.slaveUnitConfig.isNeedReply'(val) {
|
||||
if (!val) {
|
||||
this.$set(this.formData.slaveUnitConfig, 'isFirstReply', false)
|
||||
this.$set(this.formData.slaveUnitConfig, 'isNeedSecondReply', false)
|
||||
}
|
||||
},
|
||||
'formData.slaveUnitConfig.isFirstReply'(val) {
|
||||
if (!val) {
|
||||
this.$set(this.formData.slaveUnitConfig, 'isNeedSecondReply', false)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
deleteReasonRow(i) {
|
||||
if (i === 0) {
|
||||
return
|
||||
}
|
||||
this.formData.noFilingReason.splice(i, 1)
|
||||
},
|
||||
async getDictByCode() {
|
||||
const {data} = await $.get(loc() + "/getDictByCode", {code: "proposal_manner"})
|
||||
return data
|
||||
},
|
||||
async pageData() {
|
||||
const {data} = await $.get(loc() + "/findOne")
|
||||
if (data) {
|
||||
data.noFilingReason = data.noFilingReason ? data.noFilingReason : ['']
|
||||
if (!data.masterUnitConfig) {
|
||||
data.masterUnitConfig = {}
|
||||
}
|
||||
if (!data.slaveUnitConfig) {
|
||||
data.slaveUnitConfig = {}
|
||||
}
|
||||
this.formData = data
|
||||
}
|
||||
/*this.$set(this.formData, "manner", this.openMannerList.map(v => {
|
||||
return v.id
|
||||
}))*/
|
||||
},
|
||||
resetForm() {
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
const valid = await this.$refs["addForm"].validate()
|
||||
if (valid) {
|
||||
this.subLoading = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + method, {
|
||||
"data": JSON.stringify(this.formData),
|
||||
"mannerList": JSON.stringify(this.formData.manner)
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.pageData()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.subLoading = false
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.allMannerList = await this.getDictByCode("proposal_manner");
|
||||
this.reminderList = await getDictByCode("proposal_remind");
|
||||
this.openMannerList = await getDictByCode("proposal_manner");
|
||||
this.submitModeList = await getEnumOptions("ProposalSubmitMode")
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,314 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.dialog-footer .el-button {
|
||||
padding: 12px 30px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select slot="prepend" style="width: 80px;" v-model="pageForm.searchName">
|
||||
<el-option label="名称" value="stateName"></el-option>
|
||||
<el-option label="编码" value="stateCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-button @click="openAdd" icon="el-icon-plus" type="primary">添加状态</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" v-loading="tableLoading">
|
||||
<el-table-column type="expand">
|
||||
<template slot-scope="{row}">
|
||||
<el-form style="margin-left: 108px">
|
||||
<el-form-item label="关联角色">
|
||||
{{row.roleNames}}
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="序号" width="120px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="状态名称" prop="stateName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="状态编码" prop="stateCode"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="状态颜色" prop="stateColor">
|
||||
<template scope="{row}">
|
||||
<el-tag :color="row.stateColor" :key="row.stateCode"
|
||||
style="border-radius: 50%;height: 22px;"></el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="是否需要签字" prop="isSign">
|
||||
<template scope="{row}">
|
||||
<el-switch @change="switchChange(row)" active-color="#13ce66"
|
||||
inactive-color="#ff4949" v-model="row.isSign">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="是否开启" prop="stateColor">
|
||||
<template scope="{row}">
|
||||
<el-tag :key="row.isEnable" :type="row.isEnable?'':'danger'">
|
||||
{{row.isEnable?'已开启':'已关闭'}}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="关联菜单" prop="menuName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="关联角色" prop="roleNames"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="前置节点" prop="prevState"
|
||||
show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
{{row.prevState && row.prevState.stateName}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="后置节点" prop="nextState"
|
||||
show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
{{row.nextState && row.nextState.stateName}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
||||
width="120px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i><span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',data:row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<!-- <el-dropdown-item :command="{type:'delete',data:row}">
|
||||
删除
|
||||
</el-dropdown-item>-->
|
||||
<el-dropdown-item :command="{type:'enable',data:row}">
|
||||
{{row.isEnable?'关闭':'开启'}}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="dialogVisible" title="提案状态" width="50%">
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="addForm">
|
||||
<el-form-item label="状态编码" prop="stateCode">
|
||||
<el-input maxlength="4" oninput="value=value.replace(/[^\d]/g,'')"
|
||||
placeholder="请输入状态编码" v-model="formData.stateCode"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="状态名称" prop="stateName">
|
||||
<el-input placeholder="请输入状态名称" v-model="formData.stateName"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="状态颜色" prop="stateColor">
|
||||
<el-input placeholder="请输入状态颜色" v-model="formData.stateColor"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否需要签字" prop="isSign">
|
||||
<el-radio-group v-model="formData.isSign">
|
||||
<el-radio-button :label="true">是</el-radio-button>
|
||||
<el-radio-button :label="false">否</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否启用" prop="isEnable">
|
||||
<el-switch active-color="#13ce66" inactive-color="#ff4949" v-model="formData.isEnable"></el-switch>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="前置节点" prop="prevId">
|
||||
<el-select clearable placeholder="请选择前置节点" v-model="formData.prevId">
|
||||
<!-- :disabled="item.stateCode>=formData.stateCode"-->
|
||||
<el-option :key="item.id"
|
||||
:label="item.stateName"
|
||||
:value="item.id"
|
||||
v-for="item in allState"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="后置节点" prop="nextId">
|
||||
<el-select clearable placeholder="请选择前置节点" v-model="formData.nextId">
|
||||
<!-- :disabled="item.stateCode<=formData.stateCode"-->
|
||||
<el-option :key="item.id"
|
||||
:label="item.stateName"
|
||||
:value="item.id"
|
||||
v-for="item in allState"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="关联菜单" prop="menuId">
|
||||
<el-select placeholder="请选择前置节点" v-model="formData.menuId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in proposalMenu"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button :loading="subLoading" @click="operation" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
subLoading: false,
|
||||
dialogVisible: false,
|
||||
pageForm: {
|
||||
searchName: "stateName",
|
||||
pageSize: 20
|
||||
},
|
||||
formRules: {
|
||||
stateCode: [{required: true, message: '请填写状态编码', trigger: ['blur', 'change']}],
|
||||
stateName: [{required: true, message: '请填写状态名称', trigger: ['blur', 'change']}],
|
||||
stateColor: [{required: true, message: '请填写状态颜色', trigger: ['blur', 'change']}],
|
||||
isSign: [{required: true, message: '请选择是否需要签字', trigger: ['blur', 'change']}],
|
||||
isEnable: [{required: true, message: '请选择是否启用', trigger: ['blur', 'change']}],
|
||||
},
|
||||
allState: [],
|
||||
proposalMenu: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data.id)
|
||||
} else if (type === 'enable') {
|
||||
data.isEnable = !data.isEnable
|
||||
this.switchChange(data)
|
||||
}
|
||||
},
|
||||
openAdd() {
|
||||
this.formData = {}
|
||||
const newStateCode = this.tableData && this.tableData.length > 0 ? this.tableData[this.tableData.length - 1].stateCode + 100 : 100
|
||||
this.$set(this.formData, "stateCode", newStateCode)
|
||||
this.$set(this.formData, "stateColor", '#1D8CE0')
|
||||
this.$set(this.formData, "isSign", false)
|
||||
this.$set(this.formData, "isEnable", true)
|
||||
this.$set(this.formData, "prevId", null)
|
||||
this.$set(this.formData, "nextId", null)
|
||||
this.resetForm()
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = JSON.parse(JSON.stringify(data))
|
||||
this.resetForm()
|
||||
},
|
||||
resetForm() {
|
||||
this.dialogVisible = true
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async switchChange(data) {
|
||||
this.formData = data
|
||||
const resp = await $.post(loc() + "/doEdit", {"data": JSON.stringify(this.formData)})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
proposal.getProposalEnableStateCode()
|
||||
proposal.getProposalNeedSignStateCode()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.pageData()
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
const valid = this.$refs["addForm"].validate
|
||||
if (valid) {
|
||||
this.subLoading = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const cloneFormData = clone(this.formData)
|
||||
delete cloneFormData.prevState
|
||||
delete cloneFormData.nextState
|
||||
const resp = await $.post(loc() + '/doHandler', cloneFormData)
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.dialogVisible = false
|
||||
this.pageData()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
proposal.getProposalAllStateCode()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.subLoading = false
|
||||
})
|
||||
}
|
||||
},
|
||||
doDelete(id) {
|
||||
let self = this
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await $.post(loc() + "/doDelete", {id})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
self.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async listAll() {
|
||||
const resp = await $.post(loc() + "/listAll")
|
||||
if (resp.code === 0) {
|
||||
this.allState = resp.data
|
||||
}
|
||||
},
|
||||
async menuInProposal() {
|
||||
const resp = await $.post(loc() + "/menuInProposal")
|
||||
if (resp.code === 0) {
|
||||
this.proposalMenu = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData();
|
||||
this.listAll()
|
||||
this.menuInProposal()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,180 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.dialog-footer .el-button {
|
||||
padding: 12px 30px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 80px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="名称" value="typeName"></el-option>
|
||||
<el-option label="编码" value="typeCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-button @click="openAdd" icon="el-icon-plus" type="primary">添加类型</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt20" shadow="never">
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" style="width: 100%"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="120px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="类型编号"
|
||||
prop="typeCode"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="类型名称"
|
||||
prop="typeName"></el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
||||
width="120px">
|
||||
<template slot-scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',data:row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="DialogVisible" width="40%">
|
||||
<el-form :model="formData" :rules="formRules" label-width="100px"
|
||||
ref="addForm">
|
||||
<el-form-item label="类型编号" prop="typeCode">
|
||||
<el-input maxlength="50" placeholder="类型编号" type="text" v-model="formData.typeCode"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="类型名称" prop="typeName">
|
||||
<el-input maxlength="50" placeholder="请填写类型名称" type="text" v-model="formData.typeName"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="DialogVisible = false">取 消</el-button>
|
||||
<el-button :disabled="subDis" @click="operation" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
title: "",
|
||||
subDis: false,
|
||||
DialogVisible: false,
|
||||
tabLoading: false,
|
||||
pageForm: {
|
||||
searchName: "typeName",
|
||||
},
|
||||
formRules: {
|
||||
typeName: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
typeCode: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
openAdd() {
|
||||
this.title = "添加类型"
|
||||
this.formData = {}
|
||||
this.DialogVisible = true;
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
openEdit(data) {
|
||||
this.title = "编辑类型"
|
||||
this.formData = data
|
||||
this.DialogVisible = true;
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + method, {proposalType: JSON.stringify(this.formData)})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.DialogVisible = false;
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData();
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
async doDelete(id) {
|
||||
let self = this
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await $.get(loc() + "/doDelete", {id: id})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
self.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,453 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.dialog-footer .el-button {
|
||||
padding: 12px 30px;
|
||||
}
|
||||
|
||||
.el-tag {
|
||||
border-radius: 50%;
|
||||
height: 22px;
|
||||
}
|
||||
|
||||
.el-transfer {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.el-transfer-panel {
|
||||
text-align: left;
|
||||
width: 35%;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
.el-transfer-panel__list.is-filterable {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.v-box .el-card__header {
|
||||
padding: 5px 15px;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .custom-tree-node {
|
||||
width: 90%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree .v-node {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<tree-layout>
|
||||
<template #tree>
|
||||
<div style="padding: 15px;">
|
||||
<el-input placeholder="输入单位名称进行过滤" v-model="filterText"></el-input>
|
||||
</div>
|
||||
<el-tree :data="treeData" :filter-node-method="filterNode" :props="defaultProps"
|
||||
@node-click="handleNodeClick" accordion class="filter-tree"
|
||||
default-expand-all highlight-current ref="tree">
|
||||
<div class="custom-tree-node" slot-scope="{ node, data }">
|
||||
|
||||
<div class="v-node" style="font-size: 16px;" v-if="node.level==1">
|
||||
<i class="el-icon-office-building"></i> {{ data.unitName }}
|
||||
</div>
|
||||
|
||||
<div class="v-node" style="font-size: 14px" v-if="node.level==2">
|
||||
<i class="el-icon-s-help" v-if="checkData.unitName==data.unitName"></i>
|
||||
<i class="el-icon-help" v-else></i>
|
||||
 {{ data.unitName }}
|
||||
</div>
|
||||
</div>
|
||||
</el-tree>
|
||||
</template>
|
||||
|
||||
<template>
|
||||
<div style="width: 100%;" v-if="node.level==1">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="根据承办单位名称进行查询"
|
||||
v-model="pageForm.unitName">
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="doSearch()" icon="el-icon-search" slot="append"
|
||||
type="primary"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-button @click="openAdd" type="primary"><i class="ti-plus"></i>增补承办单位</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<el-table :data="tableData" height="722" highlight-current-row ref="underTakeTable">
|
||||
<el-table-column label="序号" width="60px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="承办单位编码" prop="unitCode"
|
||||
width="120px"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="承办单位名称" prop="unitName"
|
||||
width="200px"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="分管校领导及联系电话"
|
||||
prop="leader" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="负责人及联系电话"
|
||||
prop="principal" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="是否启用" prop="isEnable"
|
||||
width="100px">
|
||||
<template scope="{row}">
|
||||
<el-switch @change="switchChange(row)" active-color="#13ce66"
|
||||
inactive-color="#ff4949" v-model="row.isEnable">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
||||
width="120px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i><span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'leader',data:row}">设置分管校领导
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'principal',data:row}">设置负责人
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:row}">编辑</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:row}" v-if="!row.isEnable">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<div style="padding: 5px 10px" v-if="node.level==2">
|
||||
<el-tabs @tab-click="handleTabClick" type="card" v-model="activeName">
|
||||
<el-tab-pane label="分管校领导" name="one"></el-tab-pane>
|
||||
<el-tab-pane label="负责人" name="two"></el-tab-pane>
|
||||
</el-tabs>
|
||||
<el-table :data="adminTableData" highlight-current-row size="small" style="width: 100%;">
|
||||
<el-table-column label="序号" width="60px">
|
||||
<template scope="scope"><span>{{scope.$index+1}}</span></template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="职工号" prop="loginname"></el-table-column>
|
||||
<el-table-column align="center" label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column align="center" label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column align="center" label="联系方式" prop="mobile"></el-table-column>
|
||||
<el-table-column align="center" label="操作">
|
||||
<template scope="{row}">
|
||||
<el-button @click="removeAdmin(row)" circle icon="el-icon-delete" plain size="mini"
|
||||
type="danger">
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container" style="text-align: right;margin-top: 20px">
|
||||
<span style="color: red">{{butTitle}}</span>
|
||||
<el-button @click="openAdmin(adminPageForm,adminPageForm.flag)" circle size="medium"
|
||||
type="primary">
|
||||
<i class="el-icon-plus"></i>
|
||||
</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</tree-layout>
|
||||
</guava>
|
||||
|
||||
|
||||
<el-dialog :visible.sync="dialogVisible" title="增补承办单位" width="50%">
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="addForm">
|
||||
<el-form-item label="承办单位编码" prop="unitCode">
|
||||
<el-input placeholder="请输入承办单位编码" v-model="formData.unitCode"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="承办单位名称" prop="unitName">
|
||||
<el-input placeholder="请输入承办单位名称" v-model="formData.unitName"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否启用" prop="isEnable">
|
||||
<el-radio-group v-model="formData.isEnable">
|
||||
<el-radio-button :label="true">是</el-radio-button>
|
||||
<el-radio-button :label="false">否</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button :loading="subLoading" @click="operation" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :title="title" :visible.sync="adminDialogVisible" width="55%">
|
||||
<div style="width: 100%;">
|
||||
<el-transfer :data="adminData" :filter-method="adminFilterMethod"
|
||||
:props="{key: 'id',label: 'name'}"
|
||||
:titles="['单位成员', '管理员']"
|
||||
filterable
|
||||
v-model="adminFormData.adminValue">
|
||||
</el-transfer>
|
||||
</div>
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="adminDialogVisible = false">取 消</el-button>
|
||||
<el-button :loading="adminSubLoading" @click="doAdmin" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'tree-layout': httpVueLoader('/components/plugins/TreeLayout.vue')
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
title: '',
|
||||
butTitle: '添加分管校领导',
|
||||
filterText: '',
|
||||
activeName: 'one',
|
||||
subLoading: false,
|
||||
dialogVisible: false,
|
||||
treeData: [],
|
||||
node: {
|
||||
level: 1
|
||||
},
|
||||
formData: {
|
||||
isEnable: true
|
||||
},
|
||||
checkData: {},
|
||||
adminSubLoading: false,
|
||||
adminDialogVisible: false,
|
||||
adminFormData: {
|
||||
adminValue: [],
|
||||
flag: true
|
||||
},
|
||||
adminData: [],
|
||||
adminTableData: [],
|
||||
adminPageForm: {
|
||||
flag: true
|
||||
},
|
||||
defaultProps: {
|
||||
children: 'childrens',
|
||||
label: 'unitName',
|
||||
disabled: 'disabled'
|
||||
},
|
||||
formRules: {
|
||||
unitCode: [{required: true, message: '请输入承办单位编码', trigger: ['blur', 'change']}],
|
||||
unitName: [{required: true, message: '请输入承办单位名称', trigger: ['blur', 'change']}],
|
||||
isEnable: [{required: true, message: '请选择是否启用', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
filterText(val) {
|
||||
this.$refs.tree.filter(val);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'leader') {
|
||||
this.title = '设置分管校领导'
|
||||
this.openAdmin(data, true)
|
||||
} else if (type === 'principal') {
|
||||
this.title = '设置负责人'
|
||||
this.openAdmin(data, false)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
filterNode(value, data) {
|
||||
if (!value) return true;
|
||||
return data.unitName.indexOf(value) !== -1
|
||||
return false
|
||||
},
|
||||
adminFilterMethod(query, item) {
|
||||
return item.username.indexOf(query) > -1;
|
||||
},
|
||||
handleNodeClick(data, node) {
|
||||
this.node = node
|
||||
this.checkData = data
|
||||
this.adminPageForm.id = data.id
|
||||
this.adminPageForm.unitCode = data.unitCode
|
||||
this.adminPageForm.flag = this.activeName === 'one'
|
||||
this.adminPageData()
|
||||
},
|
||||
handleTabClick(tab) {
|
||||
this.butTitle = tab.name === 'one' ? '添加分管校领导' : '添加负责人'
|
||||
this.adminPageForm.flag = tab.name === 'one'
|
||||
this.adminPageData()
|
||||
},
|
||||
removeAdmin(row) {
|
||||
this.$confirm('确定要移除该管理员吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await $.post(loc() + "/removeAdmin", {
|
||||
unitId: this.adminPageForm.id,
|
||||
userId: row.id,
|
||||
roleId: row.roleid
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.adminPageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async adminPageData() {
|
||||
const resp = await $.post(loc() + "/adminPageData", this.adminPageForm)
|
||||
requestLaterFun(resp, () => {
|
||||
this.adminTableData = resp.data;
|
||||
}, () => {
|
||||
console.log(resp)
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
openAdd() {
|
||||
this.formData = {}
|
||||
this.$set(this.formData, "isEnable", true)
|
||||
this.resetForm()
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = data
|
||||
this.resetForm()
|
||||
},
|
||||
async openAdmin(row, flag) {
|
||||
const {id, unitCode} = row
|
||||
this.adminFormData.unitId = id
|
||||
this.adminFormData.flag = flag
|
||||
|
||||
const {data} = await $.get(loc() + "/findUserAndAdmin", {id, unitCode, flag})
|
||||
if (data) {
|
||||
this.adminData = data.data
|
||||
this.adminFormData.adminValue = data.value.map(v => {
|
||||
return v.id
|
||||
})
|
||||
}
|
||||
this.adminDialogVisible = true
|
||||
},
|
||||
async doAdmin() {
|
||||
this.adminSubLoading = true
|
||||
const data = clone(this.adminFormData)
|
||||
data.adminValue = JSON.stringify(data.adminValue)
|
||||
const resp = await $.post(loc() + "/setAdmin", data)
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.adminDialogVisible = false
|
||||
this.pageData()
|
||||
this.adminPageData()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.adminSubLoading = false
|
||||
})
|
||||
},
|
||||
resetForm() {
|
||||
this.dialogVisible = true
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async switchChange(data) {
|
||||
this.formData = data
|
||||
const resp = await $.post(loc() + "/doEdit", {"data": JSON.stringify(this.formData)})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.undertakeUnitTree()
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.subLoading = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + method, {"data": JSON.stringify(this.formData)})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.dialogVisible = false
|
||||
this.pageData()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.subLoading = false
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" == a) {
|
||||
const resp = await $.post(loc() + "/doDelete", {id})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.undertakeUnitTree()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async undertakeUnitTree() {
|
||||
const {data} = await $.get(loc() + "/undertakeUnitTree")
|
||||
this.treeData = [data]
|
||||
this.pageData()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.undertakeUnitTree()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,291 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<!--# include("/platform/proposal/include/searchCnd.html"){}#-->
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
|
||||
<table-tool :app="this" label="提案信息">
|
||||
<template #func>
|
||||
<el-button @click="exportAllProposal" size="small" type="primary">导出立案汇总表</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
|
||||
<el-table :data="tableData" :header-cell-style="{background:'#FAFAFA'}" @sort-change="pageOrder" border
|
||||
row-key="id" stripe style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
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>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop==='resultName'">
|
||||
{{resultName?resultName:'暂无' }}
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
{{pruMaster?pruMaster:'暂无' }}
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
{{pruSlave?pruSlave:'暂无' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
|
||||
<!-- <proposal-table :loading="tableLoading" :page="pageForm" :data="tableData" @order="pageOrder"
|
||||
@view="openView">
|
||||
<template #column>
|
||||
<el-table-column label="提案结果" prop="resultName" align="center" header-align="center"
|
||||
sortable>
|
||||
<template scope="{row:{resultName}}">
|
||||
<span>{{ resultName?resultName:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="主办单位" prop="pruMaster" align="center" header-align="center"
|
||||
sortable>
|
||||
<template scope="{row:{pruMaster}}">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="协办单位" prop="pruSlave" align="center" header-align="center"
|
||||
sortable>
|
||||
<template scope="{row:{pruSlave}}">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</template>
|
||||
</proposal-table>-->
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
determineTypeOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
// {prop: '1', label: '是否立案'},
|
||||
// {prop: '2', label: '重点提案', checked: 0},
|
||||
{prop: 'resultName', label: '立案结果'},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位'},
|
||||
{prop: 'pruSlave', label: '协办单位'},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
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
|
||||
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))
|
||||
},
|
||||
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.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
|
||||
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
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)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,204 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card class="mb20" shadow="never">
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容" v-model="pageForm.username">
|
||||
<template slot="prepend">提案人</template>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select @change="leaderChange" clearable filterable placeholder="请选择分管校领导"
|
||||
v-model="pageForm.leaderId">
|
||||
<el-option
|
||||
:key="i.id"
|
||||
:label="i.username"
|
||||
:value="i.id"
|
||||
v-for="i in leaderList"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button" style="margin-left: 10px">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
|
||||
<div style="position: absolute;right: 20px;top: 20px;">
|
||||
<el-button @click="oneProposalExport" type="primary">导出</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="提案信息" ref="tableTool">
|
||||
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :key="tableKey" :size="tableSize"
|
||||
:tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
row-key="id"
|
||||
v-loading="tableLoading">
|
||||
<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"
|
||||
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>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='underTakeTypeName'">
|
||||
<span>{{row.underTakeTypeName}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='secretary'">
|
||||
<span>{{row.secretaryUserName}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='secretaryAuditInfo'">
|
||||
<span class="text-primary" v-if="row.secretaryAuditInfo">已审批</span>
|
||||
<span class="text-danger" v-else>未审批</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='leaderUserName'">
|
||||
<span>{{row.leaderUserName}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isAuditByLeaderSpla'">
|
||||
<span class="text-primary" v-if="row.isAuditByLeaderSpla">已审批</span>
|
||||
<span class="text-danger" v-else>未审批</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isAuditByLeaderSpdf'">
|
||||
<template v-if="row.resultCode==='determine'">
|
||||
<span class="text-primary" v-if="row.isAuditByLeaderSpdf">已审批</span>
|
||||
<span class="text-danger" v-else>未审批</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span class="text-muted">无需审批</span>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
|
||||
<!-- <template scope="{row}" v-else-if="column.prop=='isBranchLeaderAuditCase'">-->
|
||||
<!-- <span :class="[row.branchLeaderReadUserName?'text-primary':'']">{{row.branchLeaderReadUserName?'已审批立案':'未审批立案'}}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- <template scope="{row}" v-else-if="column.prop=='isSecretaryAuditCase'">-->
|
||||
<!-- <span :class="[row.secretaryReadUserName?'text-primary':'']">{{row.secretaryReadUserName?'已审批立案':'未审批立案'}}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- <template scope="{row}" v-else-if="column.prop=='leaderId'">-->
|
||||
<!-- <span :class="[row.leaderId?'text-primary':'']">{{row.leaderId?'已审批答复':'未审批答复'}}</span>-->
|
||||
<!-- </template>-->
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
meetingOptions: [],
|
||||
tableLoading: false,
|
||||
leaderList: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
leaderId: '',
|
||||
username: ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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: 'unitName', label: '承办单位', sortable: true},
|
||||
{prop: 'underTakeTypeName', label: '承办类型', sortable: true},
|
||||
{prop: 'secretary', label: '校长、书记', sortable: true},
|
||||
{prop: 'secretaryAuditInfo', label: '校长、书记审批', sortable: true},
|
||||
{prop: 'leaderUserName', label: '分管校领导', sortable: true},
|
||||
{prop: 'isAuditByLeaderSpla', label: '审批立案', sortable: true},
|
||||
{prop: 'isAuditByLeaderSpdf', label: '审批答复', sortable: true}
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
meetingChange() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
leaderChange() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
oneProposalExport() {
|
||||
const {meetingId, searchKeyword, searchName, username, leaderId} = this.pageForm
|
||||
window.open(loc() + "/exportAllProposal?meetingId=" + meetingId
|
||||
+ "&searchKeyword=" + searchKeyword
|
||||
+ "&searchName=" + searchName
|
||||
+ "&username=" + username
|
||||
+ "&leaderId=" + leaderId
|
||||
)
|
||||
},
|
||||
async getLeaderList() {
|
||||
const resp_data = await $.post(loc() + '/getLeaderList', this.pageForm)
|
||||
this.leaderList = resp_data.data
|
||||
},
|
||||
async initTableColumns() {
|
||||
// if (await proposal.getProposalIsNodeState(proposal.BRANCHLEADERREAD)) {
|
||||
// this.tableColumns.splice(5, 0, {prop: 'branchLeaderReadUserName', label: '分管校领导', sortable: true},
|
||||
// {prop: 'isBranchLeaderAuditCase', label: '审批立案', sortable: true})
|
||||
// }
|
||||
// if (await proposal.getProposalIsNodeState(proposal.PRINCIPALREAD)) {
|
||||
// this.tableColumns.splice(5, 0, {prop: 'secretaryReadUserName', label: '校长、书记', sortable: true},
|
||||
// {prop: 'isSecretaryAuditCase', label: '审批立案', sortable: true},)
|
||||
// }
|
||||
// //动态增加列 调用子组件生成列的方法重新生成
|
||||
// this.$refs['tableTool'].getColumns()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
await this.getLeaderList()
|
||||
this.pageData()
|
||||
this.initTableColumns()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,227 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<!--# include("/platform/proposal/include/searchCnd.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"
|
||||
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>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop=='resultName'">
|
||||
<span>{{ resultName?resultName:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
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)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,260 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<!--# include("/platform/proposal/include/searchCnd.html"){}#-->
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
<template #func>
|
||||
<el-button @click="exportByCnd" type="primary">按条件导出</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-row>
|
||||
<el-table :data="tableData" :row-key="()=>{new Date().getTime()}"
|
||||
:size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table" style="width: 100%;margin-bottom: 20px" v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="$refs.info.openView(row.id);$refs.guava.view()" type="primary">
|
||||
{{row.proposalName}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop=='pruMaster'">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop=='pruSlave'">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='brief'">
|
||||
<span>{{removeHTMLTag(row.brief)}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='measures'">
|
||||
<span>{{removeHTMLTag(row.measures)}}</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
|
||||
<!-- <proposal-table :loading="tableLoading" :page="pageForm" :data="tableData" @order="pageOrder"-->
|
||||
<!-- @view="openView">-->
|
||||
<!-- <template #column>-->
|
||||
<!-- <el-table-column label="提案结果" prop="resultName" align="center" header-align="center"-->
|
||||
<!-- sortable>-->
|
||||
<!-- <template scope="{row:{resultName}}">-->
|
||||
<!-- <span>{{ resultName?resultName:'暂无' }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="主办单位" prop="pruMaster" align="center" header-align="center"-->
|
||||
<!-- sortable>-->
|
||||
<!-- <template scope="{row:{pruMaster}}">-->
|
||||
<!-- <span>{{ pruMaster?pruMaster:'暂无' }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="协办单位" prop="pruSlave" align="center" header-align="center"-->
|
||||
<!-- sortable>-->
|
||||
<!-- <template scope="{row:{pruSlave}}">-->
|
||||
<!-- <span>{{ pruSlave?pruSlave:'暂无' }}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column label="操作" header-align="center" label="操作"-->
|
||||
<!-- fixed="right" width="130px">-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <el-button size="mini" icon="el-icon-printer" type="primary"-->
|
||||
<!-- @click="oneProposalExport(row.id)">导出提案信息-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- </template>-->
|
||||
<!-- </proposal-table>-->
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{prop: 'proposalCode', label: '提案编号', sortable: true},
|
||||
{prop: 'proposalName', label: '提案名称'},
|
||||
{prop: 'username', label: '提案人'},
|
||||
{prop: 'typeCode', label: '提案类型编码', sortable: true},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'brief', label: '案由', checked: 0},
|
||||
{prop: 'measures', label: '建议措施', checked: 0},
|
||||
{prop: 'meetingName', label: '教代会届次'},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态'},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
exportByCnd() {
|
||||
window.open(loc() + '/exportByCnd?cnd=' + JSON.stringify(this.pageForm) + '&tableColumns=' + JSON.stringify(this.tableColumns))
|
||||
},
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
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)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,255 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<!--# include("/platform/proposal/include/searchCnd.html"){}#-->
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
|
||||
<table-tool :app="this" label="提案信息">
|
||||
<template #func>
|
||||
<el-button @click="exportAllProposal" type="primary">导出全部提案</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :header-cell-style="{background:'#FAFAFA'}"
|
||||
@sort-change="pageOrder" row-key="id" style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
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>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop==='resultName'">
|
||||
{{resultName?resultName:'暂无' }}
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
{{pruMaster?pruMaster:'暂未分配' }}
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
{{pruSlave?pruSlave:'暂未分配' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
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
|
||||
},
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = ''
|
||||
this.delegationOptions = await getDelegation(val)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await getOpenProposalState()
|
||||
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.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,12 @@
|
||||
const proposal_include = {
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号'},
|
||||
{prop: 'proposalName', label: '提案名称'},
|
||||
{prop: 'username', label: '提案人'},
|
||||
{prop: 'typeName', label: '提案类型'},
|
||||
{prop: 'meetingName', label: '届次'},
|
||||
{prop: 'delegationName', label: '所属代表团'},
|
||||
{prop: 'stateName', label: '提案状态'}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
<el-card shadow="never">
|
||||
<el-row align="middle" class="query-row" justify="center" type="flex">
|
||||
<el-col :span="8">
|
||||
<span>教代会:</span>
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
style="width: 80%" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword2">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
|
||||
v-model="pageForm.searchName2">
|
||||
<el-option label="提案人" value="su.username"></el-option>
|
||||
<!-- <el-option label="附议人" value="seconded.username"></el-option>-->
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">提案类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalTypes.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="checkProposalType(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in typeOptions">
|
||||
{{ item.typeName }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalTypes=[];doSearch()"
|
||||
type="danger" v-if="typeOptions.length&&pageForm.proposalTypes.length">清空
|
||||
</el-link>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">立案结果:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalResult.includes(item.code)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="checkProposalResult(item.code)"
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in resultOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalResult=[];doSearch()"
|
||||
type="danger"
|
||||
v-if="resultOptions.length&&pageForm.proposalResult.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex" v-if="pageForm.proposalResult.includes('determine')">
|
||||
<el-col class="query-row-title">是否重点:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalDetermineTypes.includes(item.code)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="tagToggle('proposalDetermineTypes',item.code)"
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in determineTypeOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalDetermineTypes=[];doSearch()"
|
||||
type="danger"
|
||||
v-if="determineTypeOptions.length&&pageForm.proposalDetermineTypes.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
|
||||
<el-col class="query-row-title">代 表 团:</el-col>
|
||||
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="8"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('tamanage')||@shiro.hasRole('jdhdbt01')}">
|
||||
<!-- <span>代表团:</span>-->
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="所属代表团"
|
||||
style="width: 350px" v-model="pageForm.delegationId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.dbtname"
|
||||
:value="item.id"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属工会:</span>
|
||||
<el-select @change="unionChange" clearable filterable
|
||||
placeholder="请选择所属工会" style="width: 350px" v-model="pageForm.unionId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id"
|
||||
v-for="item in unionOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属单位:</span>
|
||||
<el-select @change="doSearch" clearable filterable
|
||||
placeholder="请选择所属单位会" style="width: 350px" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<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-col>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
@@ -0,0 +1,214 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @finished="searchFinished"
|
||||
@search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案列表"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="replyId">
|
||||
<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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">修改
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="form">
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="代表姓名" prop="username">
|
||||
<el-input disabled type="text" v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案时间" prop="createTime">
|
||||
<el-input disabled type="text" v-model="formData.createTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案名称" prop="proposalName">
|
||||
<el-input maxlength="100" placeholder="提案名称"
|
||||
v-model="formData.proposalName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="撰写提案方式" prop="mannerName">
|
||||
<el-input disabled v-model="formData.mannerName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item class="is-required" label="案  由" prop="brief">
|
||||
<div id="briefEditor"></div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item class="is-required" label="建议措施" prop="measures">
|
||||
<div id="measuresEditor"></div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row justify="end" type="flex">
|
||||
<el-button @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button @click="doConfirm" type="primary">确定</el-button>
|
||||
</el-row>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let briefEditor, measuresEditor = null
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
|
||||
const validBrief = (rule, value, callback) => {
|
||||
if (!this.formData.brief || !removeHTMLTag(this.formData.brief)) {
|
||||
callback(new Error('请填写提案内容、案由和案据'));
|
||||
} else if (removeHTMLTag(this.formData.brief).length < this.config.words) {
|
||||
callback(new Error('提案内容至少需要' + this.config.words + '字'));
|
||||
// callback();
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
const validMeasures = (rule, value, callback) => {
|
||||
if (!this.formData.measures || !removeHTMLTag(this.formData.measures)) {
|
||||
callback(new Error('请填写提案实施的可行性建议'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
pageForm: {searchName: 'proposalName', meetingId: ''},
|
||||
formRules: {
|
||||
proposalName: [{required: true, message: '请填写提案名称', trigger: ['blur', 'change']}],
|
||||
brief: [{validator: validBrief, trigger: ['blur', 'change']}],
|
||||
measures: [{validator: validMeasures, trigger: ['blur', 'change']}],
|
||||
},
|
||||
formData: {},
|
||||
config: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
searchFinished() {
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openEdit(row) {
|
||||
this.formData = clone(row)
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
$("#briefEditor").html("")
|
||||
$("#measuresEditor").html("")
|
||||
|
||||
briefEditor = new wangEditor("#briefEditor")
|
||||
briefEditor.config.onchange = (html) => {
|
||||
this.formData.brief = html
|
||||
}
|
||||
measuresEditor = new wangEditor("#measuresEditor")
|
||||
measuresEditor.config.onchange = (html) => {
|
||||
this.formData.measures = html
|
||||
}
|
||||
briefEditor.create()
|
||||
measuresEditor.create()
|
||||
|
||||
briefEditor.txt.html(row.brief)
|
||||
measuresEditor.txt.html(row.measures)
|
||||
})
|
||||
},
|
||||
async doConfirm() {
|
||||
try {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (valid) {
|
||||
const param = {
|
||||
id: this.formData.id,
|
||||
proposalName: this.formData.proposalName,
|
||||
brief: this.formData.brief,
|
||||
measures: this.formData.measures
|
||||
}
|
||||
const resp = await $.post(loc() + '/updateBasicInfo', param)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.config = await proposal.getProposalConfig()
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,252 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="修改反馈评价"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="replyId">
|
||||
<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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">修改反馈评价
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="feedbackDialog" custom-class="ViewDialogClass"
|
||||
title="修改反馈评价" v-loading="true" width="70%">
|
||||
<el-table :data="feedbackData" max-height="300">
|
||||
<el-table-column label="反馈人" type="username">
|
||||
<template scope="{row}">
|
||||
{{row.username}}({{row.loginname}})
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="反馈时间" prop="feedbackTime"></el-table-column>
|
||||
<el-table-column label="反馈次数" prop="feedbackNumber"></el-table-column>
|
||||
<el-table-column label="反馈结果" prop="feedbackResult"></el-table-column>
|
||||
<el-table-column label="反馈意见" prop="proposalName" show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
<sapn v-html="row.feedbackOpinion"></sapn>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column label="操作">-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <el-button size="mini" @click="choiceFeedback(row)" type="primary">选择反馈</el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
</el-table>
|
||||
|
||||
<el-form :model="formData" :rules="formRules" class="mt20" label-width="120px" ref="addForm">
|
||||
<el-form-item label="承办满意度" prop="feedbackCode">
|
||||
<el-radio-group v-model="formData.feedbackCode">
|
||||
<el-radio :label="item.code" border v-for="item in feedbackOptions">{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item class="is-required" label="反馈意见" prop="feedbackOpinion">
|
||||
<div id="feedbackEditor"></div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
</el-form>
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="feedbackDialog=false">取 消</el-button>
|
||||
<el-button @click="doEdit" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
let E = window.wangEditor
|
||||
let feedbackEditor = null
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.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.feedbackOpinion || !dd3s.html2txt(this.formData.feedbackOpinion)) {
|
||||
callback(new Error('请填写反馈意见'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'feedBackResultName', label: '反馈结果', sortable: true},
|
||||
],
|
||||
feedbackOpinion: "",
|
||||
feedbackOptions: [],
|
||||
feedbackData: [],
|
||||
feedbackDialog: false,
|
||||
formData: {
|
||||
id: "",
|
||||
feedbackCode: ""
|
||||
},
|
||||
pageForm: {searchName: 'proposalName'},
|
||||
formRules: {
|
||||
feedbackOpinion: [{validator: replyContentBrief, trigger: ['blur', 'change']}],
|
||||
feedbackCode: [{required: true, message: '请选择承办满意度', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
choiceFeedback(row) {
|
||||
this.$set(this.formData, "feedbackCode", row.feedbackCode)
|
||||
this.$set(this.formData, "id", row.id)
|
||||
this.$set(this.formData, "proposalId", row.proposalId)
|
||||
feedbackEditor.txt.html(row.feedbackOpinion)
|
||||
},
|
||||
async openEdit(row) {
|
||||
const {data} = await $.post(loc() + "/getFeedbackData", {id: row.id})
|
||||
this.feedbackData = data
|
||||
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
|
||||
this.$nextTick(() => {
|
||||
$("#feedbackEditor").html("")
|
||||
feedbackEditor = new E("#feedbackEditor")
|
||||
feedbackEditor.config.onchange = (html) => {
|
||||
this.formData.feedbackOpinion = html
|
||||
}
|
||||
feedbackEditor.create()
|
||||
//自动选择最新一条的反馈记录并赋值
|
||||
if (this.feedbackData && this.feedbackData.length > 0) {
|
||||
this.choiceFeedback(this.feedbackData[0])
|
||||
}
|
||||
})
|
||||
this.feedbackDialog = true
|
||||
},
|
||||
async doEdit() {
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
if (this.formData.id == "") {
|
||||
this.$notify.warning({title: '警告', message: '请先选择需要修改的反馈评价'});
|
||||
return
|
||||
}
|
||||
|
||||
const confirm = await this.$confirm('您是否确定修改反馈评价?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/doEdit", {
|
||||
id: this.formData.id,
|
||||
feedbackCode: this.formData.feedbackCode,
|
||||
feedbackOpinion: this.formData.feedbackOpinion,
|
||||
})
|
||||
|
||||
requestLaterFun(resp, async () => {
|
||||
const {data} = await $.post(loc() + "/getFeedbackData", {id: this.formData.proposalId})
|
||||
this.feedbackData = data
|
||||
this.$refs['addForm'].resetFields()
|
||||
feedbackEditor.txt.clear()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.feedbackDialog = false
|
||||
this.pageData()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
setTimeout(() => {
|
||||
this.pageData()
|
||||
}, 1000)
|
||||
this.feedbackOptions = await getDictByCode("proposal_feedback")
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,170 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @finished="searchFinished"
|
||||
@search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案列表"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="replyId">
|
||||
<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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">修改
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="dialogVisible"
|
||||
title="修改提案状态"
|
||||
width="50%">
|
||||
<el-form>
|
||||
<vi-title title="修改状态"></vi-title>
|
||||
<el-form-item label="">
|
||||
<el-radio border label="100" v-model="stateCode">未提交</el-radio>
|
||||
<el-radio border label="150" v-model="stateCode">邀请附议人</el-radio>
|
||||
<el-radio border label="200" v-model="stateCode">待团长审核</el-radio>
|
||||
<el-radio border label="250" v-model="stateCode">预审核</el-radio>
|
||||
</el-form-item>
|
||||
<vi-title title="是否删除审核信息或附议人信息"></vi-title>
|
||||
<el-form-item label="">
|
||||
<el-radio border label="true" v-model="isDelete">是</el-radio>
|
||||
<el-radio border label="false" v-model="isDelete">否</el-radio>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button @click="doConfirm" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
id: "",
|
||||
stateCode: "",
|
||||
oldStateCode: "",
|
||||
isDelete: "false",
|
||||
dialogVisible: false,
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
pageForm: {searchName: 'proposalName', meetingId: ''},
|
||||
formData: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
searchFinished() {
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openEdit(row) {
|
||||
this.id = row.id
|
||||
this.stateCode = row.stateCode.toString()
|
||||
this.oldStateCode = row.stateCode.toString()
|
||||
this.dialogVisible = true
|
||||
},
|
||||
async doConfirm() {
|
||||
let aa = ""
|
||||
if (this.oldStateCode === this.stateCode && this.isDelete === "true") {
|
||||
aa = "您的提案状态并没有修改,确定只删除审核记录和附议人吗?"
|
||||
} else if (this.oldStateCode === this.stateCode) {
|
||||
aa = "您的提案状态并没有修改,确定要修改吗?"
|
||||
} else if (this.oldStateCode !== this.stateCode && this.isDelete === "true") {
|
||||
aa = "您确定要修改状态并删除审核记录和附议人吗?"
|
||||
} else {
|
||||
aa = "您确定要修改吗?"
|
||||
}
|
||||
const confirm = await this.$confirm(aa, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const param = {
|
||||
id: this.id,
|
||||
stateCode: this.stateCode,
|
||||
isDelete: this.isDelete,
|
||||
}
|
||||
const resp = await $.post(loc() + '/doConfirm', param)
|
||||
if (resp.code === 0) {
|
||||
this.isDelete = "false"
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
this.dialogVisible = false
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,177 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @finished="searchFinished"
|
||||
@search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案重新归类"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="replyId">
|
||||
<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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">修改类型
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="typeDialog" custom-class="ViewDialogClass"
|
||||
title="修改提案类型" v-loading="true" width="40%">
|
||||
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="addForm">
|
||||
<el-form-item label="原类型" prop="username">
|
||||
<el-input disabled type="text" v-model="formData.typeName"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="更改类型" prop="typeId">
|
||||
<el-select clearable filterable placeholder="提案类型" v-model="formData.typeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id"
|
||||
v-for="item in typeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="typeDialog=false">取 消</el-button>
|
||||
<el-button @click="doEdit" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
typeDialog: false,
|
||||
typeOptions: [],
|
||||
pageForm: {searchName: 'proposalName', meetingId: ''},
|
||||
formRules: {
|
||||
typeId: [{required: true, message: '请选择提案类型', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
}
|
||||
},
|
||||
typeChange(val) {
|
||||
this.formData.typeId = val
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openEdit(row) {
|
||||
this.formData.id = row.id
|
||||
this.formData.typeName = row.typeName
|
||||
this.typeDialog = true
|
||||
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doEdit() {
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/reType", this.formData)
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.typeDialog = false
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
searchFinished() {
|
||||
this.pageData()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,280 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="修改立案结果">
|
||||
<template #tips>
|
||||
<span class="text-primary ml10">
|
||||
(本次变更只针对于办理答复阶段的提案)
|
||||
</span>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="replyId">
|
||||
<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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">修改立案结果
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="resultCodeDialog " title="修改立案结果" width="40%">
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="addForm">
|
||||
<el-form-item label="立案结果" prop="resultCode">
|
||||
<el-radio-group @change="resultCodeChange" v-model="formData.resultCode">
|
||||
<el-radio :label="item.code" border v-for="item in resultOptions">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="立案类型" prop="determineTypeCode" v-if="formData.resultCode==='determine'">
|
||||
<el-radio-group v-model="formData.determineTypeCode">
|
||||
<el-radio :label="item.code" border v-for="item in determineType">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="理由列表" prop="noFilingReason" v-if="formData.resultCode==='notGive'">
|
||||
<el-select @change="(v)=>formData.opinion=v" clearable filterable placeholder="请选择理由列表"
|
||||
v-model="formData.noFilingReason">
|
||||
<el-option :key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
v-for="item in noFilingReason">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<div v-if="['determine','opinion'].includes(formData.resultCode)">
|
||||
<el-form-item label="主办单位" prop="hostUnit">
|
||||
<el-select clearable filterable placeholder="请选择主办单位" v-model="formData.hostUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="协办单位" prop="helpUnit">
|
||||
<el-select clearable filterable multiple placeholder="请选择协办单位"
|
||||
v-model="formData.helpUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="resultCodeDialog=false">取 消</el-button>
|
||||
<el-button @click="doEdit" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
],
|
||||
config: {},
|
||||
resultCodeDialog: false,
|
||||
noFilingReason: [],
|
||||
resultOptions: [],
|
||||
determineType: [],
|
||||
unitOptions: [],
|
||||
pageForm: {searchName: 'proposalName'},
|
||||
formRules: {
|
||||
resultCode: [{required: true, message: '请选择立案结果', trigger: ['blur', 'change']}],
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
hostUnit: [{required: true, message: '请选择主办单位', trigger: ['blur', 'change']}],
|
||||
determineTypeCode: [{required: true, message: '请选择', trigger: ['blur', 'change']}],
|
||||
},
|
||||
formData: {
|
||||
oldResultCode: '',
|
||||
resultCode: '',
|
||||
noFilingReason: '',
|
||||
determineTypeCode: '',
|
||||
opinion: '',
|
||||
hostUnit: '',
|
||||
helpUnit: []
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
resultCodeChange(val) {
|
||||
// this.formData.hostUnit = null
|
||||
// this.formData.helpUnit = []
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openEdit(row) {
|
||||
this.formData = {
|
||||
oldResultCode: '',
|
||||
resultCode: '',
|
||||
noFilingReason: '',
|
||||
determineTypeCode: '',
|
||||
opinion: '',
|
||||
hostUnit: '',
|
||||
helpUnit: []
|
||||
}
|
||||
this.formData.id = row.id
|
||||
this.formData.resultCode = row.resultCode
|
||||
this.formData.oldResultCode = row.resultCode
|
||||
this.formData.determineTypeCode = row.determineTypeCode
|
||||
this.resultCodeDialog = true
|
||||
},
|
||||
async doEdit() {
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
if (this.resultCode === this.formData.resultCode) {
|
||||
this.$notify.warning({title: '警告', message: '您修改的立案状态和原先的状态一致!请检查确认后提交'});
|
||||
return
|
||||
}
|
||||
|
||||
let msg = ''
|
||||
switch (this.formData.resultCode) {
|
||||
case 'notGive': {
|
||||
msg = '本提案立案结果修改为不予立案,系统自动完结,同时不在本列表中显示'
|
||||
break
|
||||
}
|
||||
default: {
|
||||
msg = '您是否确定修改立案结果,修改后将重新走流程'
|
||||
}
|
||||
}
|
||||
|
||||
const confirm = await this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doEdit", {
|
||||
id: this.formData.id,
|
||||
resultCode: this.formData.resultCode,
|
||||
determineTypeCode: this.formData.determineTypeCode,
|
||||
opinion: this.formData.opinion,
|
||||
hostUnit: this.formData.hostUnit,
|
||||
helpUnits: JSON.stringify(this.formData.helpUnit),
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.resultCodeDialog = false
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// this.pageData()
|
||||
console.log('父组件mounted执行了' + Date.now())
|
||||
},
|
||||
async created() {
|
||||
console.log('父组件created执行了' + Date.now())
|
||||
// this.pageData()
|
||||
setTimeout(() => {
|
||||
this.pageData()
|
||||
}, 1000)
|
||||
|
||||
this.resultOptions = await getDictByCode("proposal_result")
|
||||
this.determineType = await getDictByCode("proposal_determine_type")
|
||||
this.unitOptions = await proposal.getProposalUndertake()
|
||||
this.config = await proposal.getProposalConfig()
|
||||
this.noFilingReason = this.config.noFilingReason
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,232 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="变更承办单位">
|
||||
<template #tips>
|
||||
<span class="text-primary ml10">
|
||||
(本次变更只针对于办理答复阶段的提案)
|
||||
</span>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="replyId">
|
||||
<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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">修改承办
|
||||
</el-button>
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="undertakeDialog" custom-class="ViewDialogClass"
|
||||
title="修改承办单位" v-loading="true" width="40%">
|
||||
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="addForm">
|
||||
<el-form-item label="主办单位" prop="hostUnit">
|
||||
<el-select clearable filterable placeholder="请选择主办单位" v-model="formData.hostUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="协办单位" prop="helpUnits">
|
||||
<el-select @remove-tag="removeUnit" filterable multiple placeholder="请选择协办单位"
|
||||
v-model="formData.helpUnits">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="修改流程" prop="isChangeProcess">
|
||||
<el-radio :label="true" v-model="formData.isChangeProcess">修改</el-radio>
|
||||
<el-radio :label="false" v-model="formData.isChangeProcess">不修改</el-radio>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="undertakeDialog=false">取 消</el-button>
|
||||
<el-button @click="doEdit" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位'},
|
||||
{prop: 'pruSlave', label: '协办单位'},
|
||||
],
|
||||
undertakeDialog: false,
|
||||
unitOptions: [],
|
||||
deleteIds: [],
|
||||
formData: {
|
||||
hostUnit: '',
|
||||
helpUnits: [],
|
||||
isChangeProcess: true
|
||||
},
|
||||
pageForm: {searchName: 'proposalName'},
|
||||
formRules: {
|
||||
hostUnit: [{required: true, message: '请选择主办单位', trigger: ['blur', 'change']}],
|
||||
reCircuit: [{required: true, message: '请选择是否重新走流程', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
}
|
||||
},
|
||||
removeUnit(val) {
|
||||
this.deleteIds.push(val)
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openEdit(row) {
|
||||
this.formData = {
|
||||
hostUnit: '',
|
||||
helpUnits: [],
|
||||
isChangeProcess: false
|
||||
}
|
||||
this.formData.id = row.id
|
||||
this.$set(this.formData, "reCircuit", false)
|
||||
const data = await proposal.findOrganizer(row.id)
|
||||
if (data && data.length > 0) {
|
||||
this.formData.hostUnit = data.filter(v => v.undertakeType === 1).shift().replyUnitId
|
||||
data.forEach(v => {
|
||||
if (v.undertakeType === 2) {
|
||||
this.formData.helpUnits.push(v.replyUnitId)
|
||||
}
|
||||
})
|
||||
}
|
||||
this.undertakeDialog = true
|
||||
},
|
||||
async doEdit() {
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const exist = this.formData.helpUnits.find(v => {
|
||||
return v === this.formData.hostUnit
|
||||
})
|
||||
if (exist) {
|
||||
this.$notify.warning({title: '警告', message: '协办单位中存在您已选择的主办单位!请检查确认后提交'});
|
||||
return
|
||||
}
|
||||
|
||||
// this.deleteIds = this.deleteIds.filter(v => !this.formData.helpUnits.includes(v) || v === this.formData.hostUnit)
|
||||
|
||||
this.submitDisabled = true
|
||||
|
||||
const confirm = await this.$confirm('您是否确定修改承办单位,修改后将重新走流程', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post(loc() + "/doEdit", {
|
||||
id: this.formData.id,
|
||||
hostUnit: this.formData.hostUnit,
|
||||
helpUnits: JSON.stringify(this.formData.helpUnits),
|
||||
// deleteIds: JSON.stringify(this.deleteIds)
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.undertakeDialog = false
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
setTimeout(() => {
|
||||
|
||||
this.pageData()
|
||||
}, 500)
|
||||
this.unitOptions = await proposal.getProposalUndertake()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,217 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.box-card .primary {
|
||||
border-radius: 5px;
|
||||
border-left: 7px solid #409EFF;
|
||||
}
|
||||
|
||||
.item-tip {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.text {
|
||||
line-height: 25px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="审核状态">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.stateCode!=proposal.HAS_SECOND_REPLY">已审核</span>
|
||||
<span class="text-primary" v-if="row.stateCode==proposal.HAS_SECOND_REPLY">待审核</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'audit',data:row}"
|
||||
v-if="[proposal.HAS_SECOND_REPLY].includes(row.stateCode)">
|
||||
审核
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</proposal-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="二次答复审核" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="6" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="温馨提示">
|
||||
<el-card class="box-card primary">
|
||||
<div class="text item">
|
||||
<p><span class="item-tip">1.确认二次答复:</span>
|
||||
<span>确认二次答复后 需要整改的单位 再次走流程</span></p>
|
||||
|
||||
<p><span class="item-tip">2.重新评价</span>
|
||||
<span>:重新评价会让反馈人重新进行评价</span></p>
|
||||
|
||||
<p><span class="item-tip">3.特殊处理:</span>
|
||||
<span>特殊处理会使需要整改的单位对答复内容进行修改,不走审核流程,然后反馈人再次反馈</span></p>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(0)" type="primary">确认二次答复</el-button>
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(1)" type="primary">重新评价</el-button>
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(2)" type="danger">特殊处理</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isSign: false,
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: ''
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'audit') {
|
||||
this.openAudit(data.id)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openAudit(id) {
|
||||
this.formData.proposalId = id
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit(flag) {
|
||||
let title = flag === 0 ? '二次答复需要重新走流程,是否确认?' : flag === 1 ? '确认让反馈人重新评价吗?' : '确认进行特殊处理吗?'
|
||||
this.$refs["auditForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.submitDisabled = true
|
||||
this.$confirm(title, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(this.auditUrl + "/doAudit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
sign: this.formData.sign,
|
||||
flag: flag
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}).catch(() => {
|
||||
this.submitDisabled = false
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await initData(proposal.HAS_SECOND_REPLY, this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,402 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row .el-col {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<!-- <el-row type="flex" justify="center">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
style="width: 50%" @keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 110px;">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-row>-->
|
||||
|
||||
<el-row align="middle" class="query-row" justify="center" type="flex">
|
||||
<el-col class="query-row-title">教代会:</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<!-- <span>教代会:</span>-->
|
||||
<el-select @change="meetingChange" clearable filterable
|
||||
placeholder="请选择教代会" style="width: 80%" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword2">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
|
||||
v-model="pageForm.searchName2">
|
||||
<el-option label="提案人" value="su.username"></el-option>
|
||||
<el-option label="附议人" value="seconded.username"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
|
||||
<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: 400px" 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-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">提案类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalTypes.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="checkProposalType(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in typeOptions">
|
||||
{{ item.typeName }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalTypes=[];doSearch()"
|
||||
type="danger" v-if="typeOptions.length&&pageForm.proposalTypes.length">清空
|
||||
</el-link>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">立案结果:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalResult.includes(item.code)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="checkProposalResult(item.code)"
|
||||
style="margin-right: 10px;cursor: pointer;"
|
||||
v-for="item in resultOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalResult=[];doSearch()"
|
||||
type="danger"
|
||||
v-if="resultOptions.length&&pageForm.proposalResult.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
|
||||
<el-col class="query-row-title">代 表 团:</el-col>
|
||||
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="8"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('tamanage')||@shiro.hasRole('jdhdbt01')}">
|
||||
<!-- <span>代表团:</span>-->
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="所属代表团"
|
||||
style="width: 350px" v-model="pageForm.delegationId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.dbtname"
|
||||
:value="item.id"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属工会:</span>
|
||||
<el-select @change="unionChange" clearable filterable
|
||||
placeholder="请选择所属工会" style="width: 350px" v-model="pageForm.unionId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id"
|
||||
v-for="item in unionOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属单位:</span>
|
||||
<el-select @change="doSearch" clearable filterable
|
||||
placeholder="请选择所属单位会" style="width: 350px" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
<template #func>
|
||||
<el-button @click="doDelete" icon="el-icon-s-promotion" size="small"
|
||||
type="primary">批量删除
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize"
|
||||
@selection-change="(val)=>{batchSelection = val.map(v=>v.id)}"
|
||||
@sort-change="pageOrder" align="center"
|
||||
header-align="center">
|
||||
<el-table-column 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
|
||||
: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>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop=='resultName'">
|
||||
<span>{{ resultName?resultName:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{feedBackResultName}}" v-else-if="column.prop==='feedBackResultName'">
|
||||
<span>{{ feedBackResultName?feedBackResultName:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini"
|
||||
type="primary">查看
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
batchSelection: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'mannerName', label: '提交方式', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true, checked: 0},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'feedBackResultName', label: '反馈意见', sortable: true, checked: 0},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: []
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
async doDelete() {
|
||||
if (this.batchSelection.length === 0) {
|
||||
this.$notify.warning('请选择需要批量审核的记录')
|
||||
return
|
||||
}
|
||||
const confirm = await this.$confirm('是否要删除您选择的提案?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm) {
|
||||
const resp = await $.post(loc() + "/doBatchDelete", {proposalIds: JSON.stringify(this.batchSelection)})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
|
||||
})
|
||||
}
|
||||
},
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
|
||||
$.post("/platform/proposal/statistics/integrated/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
|
||||
this.delegationOptions = await proposal.getDelegation(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,138 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @search="doSearch">
|
||||
<template #column>
|
||||
<el-button :disabled="selectIds.length === 0" :loading="urgeLoading" @click="batchUrge"
|
||||
type="primary">批量催办
|
||||
</el-button>
|
||||
</template>
|
||||
</proposal-search>
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @selection="handleSelectionChange" @view="openView" selection>
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="催办次数">
|
||||
<template scope="{row}">
|
||||
<el-link @click="findUrgeRecord(row.id)" type="primary">{{row.urgeNum}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-button :disabled="row.isAllReply" :loading="row.submitDisabled" @click="doUrge(row)"
|
||||
size="mini" type="primary">催办
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</proposal-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :visible.sync="urgeDialog" title="催办记录">
|
||||
<el-table :data="urgeRecordList">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办人姓名"
|
||||
property="urgeUserName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办人工号"
|
||||
property="urgeLoginName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办时间" property="operateTime"></el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
urgeLoading: false,
|
||||
urgeDialog: false,
|
||||
pageForm: {searchName: 'proposalName'},
|
||||
urgeRecordList: [],
|
||||
selectIds: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleSelectionChange(val) {
|
||||
this.selectIds = val.map(v => {
|
||||
return v.id
|
||||
})
|
||||
},
|
||||
batchUrge() {
|
||||
this.urgeLoading = true
|
||||
this.$confirm('确定催办吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post(loc() + "/doBatchUrge", {ids: JSON.stringify(this.selectIds)})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.urgeLoading = false
|
||||
})
|
||||
}).catch(() => {
|
||||
this.urgeLoading = false
|
||||
});
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async findUrgeRecord(proposalId) {
|
||||
this.urgeDialog = true
|
||||
const resp = await $.post(loc() + "/findUrgeRecord", {proposalId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.urgeRecordList = data
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
async doUrge(row) {
|
||||
this.$set(row, "submitDisabled", true)
|
||||
|
||||
this.$confirm('确定催办吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post(loc() + "/doUrge", {proposalId: row.id})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.$set(row, "submitDisabled", false)
|
||||
})
|
||||
}).catch(() => {
|
||||
this.$set(row, "submitDisabled", false)
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await initData(null, this)
|
||||
this.unitOptions = await proposal.getProposalUndertake()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,187 @@
|
||||
<!--#
|
||||
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" filterable placeholder="请选择教代会"
|
||||
style="width: 80%;margin-right: 20px" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col>
|
||||
<span>承办单位:</span>
|
||||
<el-select @change="pageData()" clearable
|
||||
filterable
|
||||
placeholder="请选择承办单位" style="width: 80%" v-model="pageForm.undertakeId">
|
||||
<el-option
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in undertakeOptions">
|
||||
</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 align="center" 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 align="center" header-align="center" label="主办提案">
|
||||
<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" header-align="center" label="提案数量"
|
||||
prop="slaveTotalCount"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="已答复"
|
||||
prop="slaveHasReplyCount" sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="未答复"
|
||||
prop="slaveNotReplyCount" sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="已结案"
|
||||
prop="slaveFinishCount" 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>
|
||||
const 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 getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
await this.pageData()
|
||||
this.initTableSlaveColumns()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,388 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.tr {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.tl {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.top_block {
|
||||
background-color: rgb(240, 240, 240);
|
||||
}
|
||||
|
||||
.top_card {
|
||||
border: none;
|
||||
border-top: 5px solid;
|
||||
cursor: pointer;
|
||||
min-width: 200px;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.top_title {
|
||||
color: rgb(120, 120, 120);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.top_num {
|
||||
font-size: 32px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.v-tab .el-card__header {
|
||||
padding: 10px 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.v-tab .el-table-containe {
|
||||
padding-top: 0 !important;
|
||||
}
|
||||
|
||||
.chart-card .el-card__header {
|
||||
border: none;
|
||||
padding: 10px 15px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-select @change="getNumData();changeType('all');drawChat()" placeholder="请选择教代会"
|
||||
style="width: 100%;font-weight:bold;" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in allJdhOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-card>
|
||||
|
||||
<div class="top_block mt10 mb10" v-loading="topBlockLoading">
|
||||
<el-row :gutter="20" style="flex-wrap: wrap" type="flex">
|
||||
<template v-for="item in types">
|
||||
<el-col :span="4">
|
||||
<el-card :style="'border-color:'+ item.color" class="top_card" shadow="hover">
|
||||
<div @click="changeType(item.key)" style="width: 100%;height: 100%">
|
||||
<div class="top_title">
|
||||
<span :style="'color:'+ item.color">
|
||||
<i :class="pageForm.type===item.key?'fa fa-flag':'fa fa-flag-o'"></i>
|
||||
</span>
|
||||
{{item.name}}
|
||||
<el-popover trigger="hover">
|
||||
<ul style="list-style-type: none;padding: 0;margin: 0">
|
||||
<li :style="{color:pageForm.type===litem.key?'red':''}"
|
||||
@click="childClick(item,litem)"
|
||||
style="border-bottom: 1px solid #f0f0f0;cursor: pointer;padding: 5px 0"
|
||||
v-for="(litem,lindex) in item.list">
|
||||
{{litem.name}}
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<i class="el-icon-s-operation text-primary"
|
||||
slot="reference"
|
||||
v-if="item.list"
|
||||
></i>
|
||||
</el-popover>
|
||||
|
||||
</div>
|
||||
<div class="top_num">{{numData[item.key]?numData[item.key]:'--'}}</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</template>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<el-card shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
align="center" header-align="center"
|
||||
ref="multipleTable">
|
||||
|
||||
<el-table-column type="expand">
|
||||
<template scope="scope">
|
||||
<el-card shadow="never">
|
||||
<el-table :data="scope.row.replyInfo" header-align="center" size="mini">
|
||||
<el-table-column label="承办单位" prop="unitName" width="200"></el-table-column>
|
||||
<el-table-column label="承办类型" prop="unitName" width="100">
|
||||
<template scope="{row}">
|
||||
<span style="color: #106898" v-if="row.underTakeType===1">主办</span>
|
||||
<span style="color: #156c20" v-else>协办</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="答复次数" prop="replyNumber" width="100"></el-table-column>
|
||||
<el-table-column label="负责人" prop="fzrxx" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="答复情况" prop="isReply" width="100">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isReply">已答复</span>
|
||||
<span class="text-danger" v-else>未答复</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="分管领导" prop="xldxx"></el-table-column>
|
||||
<el-table-column label="审批情况" prop="isLeaderAudit" width="100px">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isLeaderAudit">已审批</span>
|
||||
<span class="text-danger" v-else>未审批</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
</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'"
|
||||
:label="column.label"
|
||||
:min-width="column.width"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
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>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span v-if="![proposal.CASE].includes(row.stateCode)">已审核</span>
|
||||
<span v-else>待审核</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='resultName'">
|
||||
<el-link type="primary">
|
||||
{{row.resultName ? row.resultName:'暂未审核'}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
<!-- <el-row class="chart-card" v-loading="chatLoading">-->
|
||||
<!-- <el-card shadow="never">-->
|
||||
<!-- <div slot="header" class="clearfix">-->
|
||||
<!-- <span style="font-weight: bold">提案类型统计</span><br>-->
|
||||
<!-- <span style="font-size: 12px">单位(个)</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div id="chart" style="width: 100%;height: 400px;"></div>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-row>-->
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let chart
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
types: [{
|
||||
key: 'all',
|
||||
name: '提案总数',
|
||||
color: '#409EFF'
|
||||
}, {
|
||||
key: 'delegation',
|
||||
name: '待团长审核(附议完成)',
|
||||
color: '#00a2ae'
|
||||
}, {
|
||||
key: 'case',
|
||||
name: '待立案审核',
|
||||
color: '#F56C6C'
|
||||
}, {
|
||||
key: 'determine',
|
||||
name: '确定立案',
|
||||
color: '#67C23A'
|
||||
}, {
|
||||
key: 'opinion',
|
||||
name: '作为意见',
|
||||
color: '#E6A23C'
|
||||
}, {
|
||||
key: 'notGive',
|
||||
name: '不予立案',
|
||||
color: '#7265e6'
|
||||
}, {
|
||||
key: 'waitUnitReply',
|
||||
name: '待承办单位答复',
|
||||
color: '#F56C6C',
|
||||
list: [
|
||||
{
|
||||
key: 'waitUnitReply',
|
||||
name: '待承办单位答复',
|
||||
color: '#F56C6C',
|
||||
},
|
||||
{
|
||||
key: 'unitReplyFinish',
|
||||
name: '承办单位已答复',
|
||||
color: '#00a854',
|
||||
}
|
||||
]
|
||||
}, {
|
||||
key: 'awaitLeaderAuditReply',
|
||||
name: '待校领导审批答复',
|
||||
color: '#F56C6C',
|
||||
list: [
|
||||
{
|
||||
key: 'awaitLeaderAuditReply',
|
||||
name: '待校领导审批答复',
|
||||
color: '#F56C6C',
|
||||
},
|
||||
{
|
||||
key: 'LeaderAuditReplyFinish',
|
||||
name: '校领导已审批答复',
|
||||
color: '#00a854',
|
||||
}
|
||||
]
|
||||
}, {
|
||||
key: 'feedback',
|
||||
name: '待反馈评分',
|
||||
color: '#ffbf00'
|
||||
}, {
|
||||
key: 'caseCheck',
|
||||
name: '待提案委员会审查',
|
||||
color: '#ffbf00'
|
||||
}, {
|
||||
key: 'finish',
|
||||
name: '已完结',
|
||||
color: '#00a854'
|
||||
}, {
|
||||
key: 'other',
|
||||
name: '其它',
|
||||
color: '#00a854'
|
||||
}],
|
||||
chatLoading: true,
|
||||
topBlockLoading: true,
|
||||
tabLoading: false,
|
||||
allJdhOptions: [],
|
||||
tableData: [],
|
||||
numData: {},
|
||||
pageForm: {
|
||||
pageSize: 5,
|
||||
type: 'all',
|
||||
totalCount: 0
|
||||
},
|
||||
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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
// {prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
replyPopVisible: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
changeType(type) {
|
||||
this.pageForm.type = type
|
||||
this.doSearch()
|
||||
},
|
||||
childClick(item, litem) {
|
||||
item.name = litem.name
|
||||
item.key = litem.key
|
||||
item.color = litem.color
|
||||
this.pageForm.type = item.key
|
||||
this.doSearch()
|
||||
},
|
||||
async getNumData() {
|
||||
this.topBlockLoading = true
|
||||
const resp = await $.post(loc() + "/numData", {meetingId: this.pageForm.meetingId})
|
||||
requestLaterFun(resp, () => {
|
||||
this.numData = resp.data
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.topBlockLoading = false
|
||||
})
|
||||
},
|
||||
async drawChat() {
|
||||
this.chatLoading = true
|
||||
const resp = await $.post(loc() + "/getChatData", {meetingId: this.pageForm.meetingId})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
const {data} = resp
|
||||
if (!chart) {
|
||||
chart = new G2Plot.Area('chart', {
|
||||
data,
|
||||
forceFit: true,
|
||||
xField: 'typeName',
|
||||
yField: 'num',
|
||||
seriesField: 'type',
|
||||
legend: {
|
||||
"position": "top-right",
|
||||
"flipPage": false
|
||||
}
|
||||
});
|
||||
chart.render();
|
||||
} else {
|
||||
chart.changeData(data)
|
||||
}
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.chatLoading = false
|
||||
})
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.allJdhOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.allJdhOptions.length ? this.allJdhOptions[0].id : ''
|
||||
await this.getNumData()
|
||||
this.pageData()
|
||||
// await this.drawChat()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,304 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.clearfix {
|
||||
font-weight: 600;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<el-select @change="initData" placeholder="请选择教代会" v-model="meetingId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in allJdhOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-card>
|
||||
|
||||
<el-row :gutter="20" style="margin: 15px 0">
|
||||
<el-col :span="12" v-loading="loading.satisfiedLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>提案满意度</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="satisfiedChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12" v-loading="loading.typeLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>提案类型</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="typeChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" style="margin: 15px 0">
|
||||
<el-col :span="12" v-loading="loading.resultLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>立案结果</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="resultChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12" v-loading="loading.stateLoading">
|
||||
<el-card class="box-card" shadow="hover">
|
||||
<div class="clearfix" slot="header">
|
||||
<span>提案状态</span>
|
||||
</div>
|
||||
<div class="text item">
|
||||
<div id="stateChart"></div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const chart = {
|
||||
satisfiedChart: undefined,
|
||||
resultChart: undefined,
|
||||
typeChart: undefined,
|
||||
stateChart: undefined
|
||||
}
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
meetingId: '',
|
||||
allJdhOptions: [],
|
||||
tableData: [],
|
||||
chatLoading: true,
|
||||
topBlockLoading: true,
|
||||
tabLoading: false,
|
||||
loading: {
|
||||
satisfiedLoading: false,
|
||||
resultLoading: false,
|
||||
typeLoading: false,
|
||||
stateLoading: false
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 提案满意度
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async satisfiedData() {
|
||||
this.loading.satisfiedLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/satisfiedData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.satisfiedLoading = false
|
||||
|
||||
if (chart.satisfiedChart) {
|
||||
chart.satisfiedChart.changeData(data)
|
||||
return
|
||||
}
|
||||
|
||||
chart.satisfiedChart = new G2Plot.Pie('satisfiedChart', {
|
||||
data,
|
||||
appendPadding: 10,
|
||||
angleField: 'num',
|
||||
colorField: 'name',
|
||||
radius: 0.75,
|
||||
color: ['#9661BC', '#5B8FF9', '#61DDAA'],
|
||||
label: {
|
||||
type: 'spider',
|
||||
labelHeight: 28,
|
||||
content: '{name}\n{percentage}',
|
||||
},
|
||||
interactions: [{type: 'element-selected'}, {type: 'element-active'}],
|
||||
});
|
||||
|
||||
chart.satisfiedChart.render();
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 立案结果
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async resultData() {
|
||||
this.loading.resultLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/resultData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.resultLoading = false
|
||||
|
||||
if (chart.resultChart) {
|
||||
chart.resultChart.changeData(data)
|
||||
return
|
||||
}
|
||||
chart.resultChart = new G2Plot.Radar('resultChart', {
|
||||
data,
|
||||
xField: 'name',
|
||||
yField: 'num',
|
||||
seriesField: 'type',
|
||||
meta: {
|
||||
num: {
|
||||
alias: '数量',
|
||||
min: 0
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
type: 'line',
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
area: {},
|
||||
point: {
|
||||
size: 2,
|
||||
},
|
||||
});
|
||||
chart.resultChart.render();
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 提案类型
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async typeData() {
|
||||
this.loading.typeLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/typeData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.typeLoading = false
|
||||
|
||||
if (chart.typeChart) {
|
||||
chart.typeChart.changeData(data)
|
||||
return
|
||||
}
|
||||
chart.typeChart = new G2Plot.Column('typeChart', {
|
||||
data,
|
||||
xField: 'typeName',
|
||||
yField: 'num',
|
||||
meta: {
|
||||
type: {
|
||||
alias: '类别',
|
||||
},
|
||||
sales: {
|
||||
alias: '数量',
|
||||
},
|
||||
},
|
||||
xAxis: {
|
||||
label: {
|
||||
autoRotate: true,
|
||||
autoHide: false,
|
||||
autoEllipsis: false,
|
||||
},
|
||||
}
|
||||
});
|
||||
chart.typeChart.render();
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 提案状态
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async stateData() {
|
||||
this.loading.stateLoading = true
|
||||
|
||||
const resp = await $.get(loc() + '/stateData', {meetingId: this.meetingId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.loading.stateLoading = false
|
||||
|
||||
if (chart.stateChart) {
|
||||
chart.stateChart.changeData(data)
|
||||
return
|
||||
}
|
||||
chart.stateChart = new G2Plot.Radar('stateChart', {
|
||||
data,
|
||||
xField: 'stateName',
|
||||
yField: 'num',
|
||||
xAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
line: null,
|
||||
tickLine: null,
|
||||
grid: {
|
||||
line: {
|
||||
type: 'line',
|
||||
style: {
|
||||
lineDash: null,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
point: {
|
||||
size: 2,
|
||||
},
|
||||
});
|
||||
chart.stateChart.render();
|
||||
})
|
||||
},
|
||||
async initData() {
|
||||
await this.satisfiedData()
|
||||
await this.resultData()
|
||||
await this.typeData()
|
||||
await this.stateData()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.allJdhOptions = await getAllJdh()
|
||||
this.meetingId = this.allJdhOptions.length ? this.allJdhOptions[0].id : ''
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,134 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.chart-card .el-card__header {
|
||||
border: none;
|
||||
/*padding: 20px;*/
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-row class="chart-card" v-loading="chartOneLoading">
|
||||
<el-card class="box-card" shadow="never">
|
||||
<div class="clearfix" slot="header">
|
||||
<div style="float:left">
|
||||
<span style="font-weight: bold">提案综合统计</span><br>
|
||||
<span style="font-size: 12px">单位(个)</span>
|
||||
</div>
|
||||
<div style="float: right;z-index: 999">
|
||||
<span style="margin-right: 50px" v-if="searchForm.switchType === 'delegation'">
|
||||
<el-select @change="getData" filterable placeholder="请选择教代会" style="width: 400px"
|
||||
v-model="searchForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</span>
|
||||
<span style="margin-right: 50px">
|
||||
<el-radio-group @change="getData" v-model="searchForm.switchType">
|
||||
<el-radio-button label="type">提案类型</el-radio-button>
|
||||
<el-radio-button label="union">工会</el-radio-button>
|
||||
<el-radio-button label="unit">单位</el-radio-button>
|
||||
<el-radio-button label="delegation">代表团</el-radio-button>
|
||||
</el-radio-group>
|
||||
</span>
|
||||
<span>
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
@change="getData()"
|
||||
class="year"
|
||||
placeholder="选择年" style="width: 120px;"
|
||||
type="year"
|
||||
v-model="searchForm.startYear"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
至
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
@change="getData()"
|
||||
class="year"
|
||||
placeholder="选择年" style="width: 120px;"
|
||||
type="year"
|
||||
v-model="searchForm.endYear"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="chart" style="width: 100%;height: 600px"></div>
|
||||
</el-card>
|
||||
</el-row>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let chart
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data: () => {
|
||||
return {
|
||||
meetingOptions: [],
|
||||
chartOneLoading: false,
|
||||
searchForm: {
|
||||
switchType: 'type',
|
||||
startYear: new Date().getFullYear() - 3 + '',
|
||||
endYear: new Date().getFullYear() + '',
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
this.chartOneLoading = true
|
||||
const resp = await $.post(loc() + "/getData", this.searchForm)
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
if (!chart) {
|
||||
chart = new G2Plot.Area('chart', {
|
||||
data,
|
||||
xField: "name",
|
||||
yField: "num",
|
||||
seriesField: "type",
|
||||
forceFit: true,
|
||||
legend: {
|
||||
"position": "top-right",
|
||||
"flipPage": false
|
||||
},
|
||||
xAxis: {
|
||||
label: {
|
||||
autoRotate: true,
|
||||
autoHide: false,
|
||||
autoEllipsis: false,
|
||||
},
|
||||
}
|
||||
});
|
||||
chart.render();
|
||||
} else {
|
||||
chart.changeData(data)
|
||||
}
|
||||
this.chartOneLoading = false
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
});
|
||||
},
|
||||
async getMeetingByYear() {
|
||||
const {startYear, endYear} = this.searchForm
|
||||
const {data} = await $.post(loc() + "/getMeetingByYear", {startYear, endYear})
|
||||
return data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await this.getMeetingByYear()
|
||||
this.$set(this.searchForm, "meetingId", this.meetingOptions.length ? this.meetingOptions[0].id : '')
|
||||
this.getData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,171 @@
|
||||
<!--#
|
||||
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 justify="center" type="flex">
|
||||
<el-select @change="corpsPageData()" 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-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-table :data="corpsTableData" :summary-method="getSummaries" class="mt20" show-summary>
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="代表团名称" prop="dbtname">
|
||||
<template scope="{row}">
|
||||
<el-link @click="findProposal(row)" type="primary">{{ row.dbtname }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="提案总数" prop="total"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="立案数" prop="determine"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="作为意见" prop="opinion"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="不予立案" prop="notGive"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="立案率" prop="caseRate" sortable>
|
||||
<template scope="{row}">{{row.caseRate}}%</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="不予立案率" prop="withdrawRate" sortable>
|
||||
<template scope="{row}">{{row.withdrawRate}}%</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-dialog :title="dialogTitle" :visible.sync="delegationVisible" width="70%">
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
</proposal-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
meetingId: '',
|
||||
dialogTitle: '',
|
||||
delegationVisible: false,
|
||||
meetingOptions: [],
|
||||
corpsTableData: [],
|
||||
pageForm: {}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
findProposal(row) {
|
||||
this.pageForm.delegationId = row.id
|
||||
this.pageData()
|
||||
this.dialogTitle = row.dbtname + '所属提案'
|
||||
this.delegationVisible = true
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
this.delegationVisible = false
|
||||
},
|
||||
getSummaries(param) {
|
||||
const {columns, data} = param;
|
||||
const sums = [];
|
||||
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = this.corpsTableData.length + 1;
|
||||
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);
|
||||
|
||||
|
||||
if (index === 6) {
|
||||
let a = ((sums[3] + sums[4]) / sums[2]) * 100
|
||||
sums[index] = isNaN(a) ? 0 + ' %' : (a).toFixed(1) + ' %';
|
||||
}
|
||||
|
||||
if (index === 7) {
|
||||
let b = (sums[5] / sums[2]) * 100
|
||||
sums[index] = isNaN(b) ? 0 + ' %' : (b).toFixed(1) + ' %';
|
||||
}
|
||||
} else {
|
||||
sums[index] += 'NaN';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
async corpsPageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const resp = await $.post(loc() + "/corpsPageData", {meetingId: this.meetingId})
|
||||
const {data, msg} = resp
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
data.forEach(v => {
|
||||
v.caseRate = ((v.determine + v.opinion) / v.total) * 100
|
||||
v.withdrawRate = (v.notGive / v.total) * 100
|
||||
v.caseRate = isNaN(v.caseRate) ? 0 : v.caseRate.toFixed(1)
|
||||
v.withdrawRate = isNaN(v.withdrawRate) ? 0 : v.withdrawRate.toFixed(1)
|
||||
})
|
||||
this.corpsTableData = data;
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: msg});
|
||||
}, () => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
await this.corpsPageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,186 @@
|
||||
<!--#
|
||||
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>
|
||||
const 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: 'oldProposalCode', label: '草案编号', width: "120", sortable: true, disabled: true},
|
||||
{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 getAllJdh()
|
||||
this.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : null
|
||||
if (this.meetingId != null) {
|
||||
this.getData()
|
||||
}
|
||||
this.getFeedBackNames()
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,294 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.zb_reply_card {
|
||||
border-top: 5px solid #106898;
|
||||
}
|
||||
|
||||
.xb_reply_card {
|
||||
border-top: 5px solid #156c20;
|
||||
}
|
||||
|
||||
.reply_card .el-form-item {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.reply_card .el-card__body {
|
||||
padding: 5px !important;
|
||||
}
|
||||
|
||||
.text-overflow {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.el-table .warning-row {
|
||||
background: oldlace;
|
||||
}
|
||||
|
||||
.el-table .success-row {
|
||||
background: #f0f9eb;
|
||||
}
|
||||
|
||||
.el-table .hover-row {
|
||||
background-color: unset !important;
|
||||
}
|
||||
|
||||
.searchCard .el-card__body {
|
||||
padding: 0 20px !important;
|
||||
}
|
||||
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @finished="searchFinished"
|
||||
@search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt10 searchCard" shadow="never">
|
||||
<el-row class="query-row" type="flex">
|
||||
<el-col class="query-row-title">征集状态:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag :effect="pageForm.stateCnd.includes(item)?'dark':'plain'"
|
||||
@click="tagClick(item)"
|
||||
style="margin: 5px;min-width: 120px;text-align: center;cursor: pointer"
|
||||
v-for="item in searchCnd">
|
||||
{{item}}
|
||||
</el-tag>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案信息"></table-tool>
|
||||
<el-table :data="tableData" :row-class-name="tableRowClassName"
|
||||
:size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
header-align="center">
|
||||
<el-table-column type="expand">
|
||||
<template scope="scope">
|
||||
<el-card shadow="never">
|
||||
<el-table :data="scope.row.replyInfo" header-align="center" size="mini">
|
||||
<el-table-column label="承办单位" prop="unitName" width="200"></el-table-column>
|
||||
<el-table-column label="承办类型" prop="unitName" width="100">
|
||||
<template scope="{row}">
|
||||
<span style="color: #106898" v-if="row.underTakeType===1">主办</span>
|
||||
<span style="color: #156c20" v-else>协办</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="答复次数" prop="replyNumber" width="100"></el-table-column>
|
||||
<el-table-column label="负责人" prop="fzrxx" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="答复情况" prop="isReply" width="100">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isReply">已答复</span>
|
||||
<span class="text-danger" v-else>未答复</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="分管领导" prop="xldxx"></el-table-column>
|
||||
<el-table-column label="审批情况" prop="isLeaderAudit" width="100px">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isLeaderAudit">已审批</span>
|
||||
<span class="text-danger" v-else>未审批</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<!-- <el-row :gutter="20" justify="start" style="flex-wrap: wrap" type="flex"-->
|
||||
<!-- v-if="scope.row.replyInfo && scope.row.replyInfo.length>0">-->
|
||||
<!-- <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="8"-->
|
||||
<!-- v-for="reply in scope.row.replyInfo">-->
|
||||
<!-- <el-card class="mb10 reply_card" shadow="hover"-->
|
||||
<!-- :class="reply.underTakeType===1?'zb_reply_card':'xb_reply_card'">-->
|
||||
<!-- <el-form label-width="80px">-->
|
||||
<!-- <el-form-item label="承办单位">{{reply.unitName}}</el-form-item>-->
|
||||
<!-- <el-form-item label="承办类型">-->
|
||||
<!-- <span v-if="reply.underTakeType===1" style="color: #106898">主办</span>-->
|
||||
<!-- <span v-else style="color: #156c20">协办</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="答复次数">-->
|
||||
<!-- {{reply.replyNumber}}-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="负责人">-->
|
||||
<!-- <el-popover-->
|
||||
<!-- placement="top-start"-->
|
||||
<!-- title="标题"-->
|
||||
<!-- width="200"-->
|
||||
<!-- trigger="hover">-->
|
||||
<!-- <div #content v-html="reply.fzrxx && reply.fzrxx.split(',').join('</br>')"></div>-->
|
||||
<!-- <div slot="reference" class="text-overflow">{{reply.fzrxx}}</div>-->
|
||||
<!-- </el-popover>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="答复情况">-->
|
||||
<!-- <span v-if="reply.isReply" class="text-success">已答复</span>-->
|
||||
<!-- <span v-else class="text-danger">未答复</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="分管领导">{{reply.xldxx}}</el-form-item>-->
|
||||
<!-- <el-form-item label="审批情况">-->
|
||||
<!-- <span v-if="reply.isLeaderAudit" class="text-success">已审批</span>-->
|
||||
<!-- <span v-else class="text-danger">未审批</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-form>-->
|
||||
<!-- </el-card>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
</template>
|
||||
</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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="$refs.info.openView(row.id);$refs.guava.view()" type="primary">
|
||||
{{row.proposalName}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='resultName'">
|
||||
<el-link type="primary">
|
||||
{{row.resultName ? row.resultName:'暂未审核'}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column align="center" header-align="center" label="操作" fixed="right" width="200px">-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <el-button size="mini" @click="openView(row)">查看</el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'isConjoin', label: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
pageForm: {
|
||||
searchName: 'proposalName',
|
||||
meetingId: '',
|
||||
stateCnd: []
|
||||
},
|
||||
searchCnd: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
searchFinished() {
|
||||
this.pageData()
|
||||
},
|
||||
async pageData() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.stateCnd = JSON.stringify(pageForm.stateCnd)
|
||||
const resp = await $.post(loc() + '/pageData', pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
},
|
||||
tagClick(item) {
|
||||
const item_index = this.pageForm.stateCnd.findIndex(v => v === item)
|
||||
if (item_index > -1) {
|
||||
this.pageForm.stateCnd.splice(item_index, 1)
|
||||
} else {
|
||||
this.pageForm.stateCnd.push(item)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
async initSearchCnd() {
|
||||
this.searchCnd = ['主办已答复', '主办未答复', '主办领导已审批', '主办领导未审批']
|
||||
const config = await proposal.getProposalConfig()
|
||||
if (config.slaveUnitConfig && config.slaveUnitConfig.isNeedReply) {
|
||||
this.searchCnd = this.searchCnd.concat(['协办已答复', '协办未答复', '协办领导已审批', '协办领导未审批',])
|
||||
}
|
||||
},
|
||||
tableRowClassName({rowIndex}) {
|
||||
if (rowIndex % 2 === 0) {
|
||||
return 'warning-row';
|
||||
} else {
|
||||
return 'success-row';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initSearchCnd()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,457 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row .el-col {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.search-card .el-card__body {
|
||||
padding: 5px 20px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card class="search-card" shadow="never">
|
||||
<el-row align="middle" class="query-row" style="justify-content: center" type="flex">
|
||||
<el-col style="width: 130px">
|
||||
请输入搜索内容
|
||||
</el-col>
|
||||
<el-col :span="8" style="display: flex">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="可选择查询条件,输入关键字查询,多个关键字请使用空格分隔"
|
||||
v-model="pageForm.searchKeyword">
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="2" class="text-center">
|
||||
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row align="middle" class="query-row" justify="center" type="flex">
|
||||
<el-col class="query-row-title">提案要素:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag :effect="pageForm.searchNames.includes(item.key)?'dark':'plain'"
|
||||
:key="item.key"
|
||||
:type="item.typeName"
|
||||
@click="clickSearchNames(item.key)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in searchNames">
|
||||
{{item.label}}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="pageForm.searchNames=[];doSearch()"
|
||||
type="danger" v-if="pageForm.searchNames.length">清空
|
||||
</el-link>
|
||||
<!-- <el-checkbox-group style="width: 350px" v-model="pageForm.searchNames">-->
|
||||
<!-- <el-checkbox-button :key="item.key" :label="item.key" v-for="item in searchNames">-->
|
||||
<!-- {{item.label}}-->
|
||||
<!-- </el-checkbox-button>-->
|
||||
<!-- </el-checkbox-group>-->
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">提案类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalTypes.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="checkProposalType(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in typeOptions">
|
||||
{{ item.typeName }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalTypes=[];doSearch()"
|
||||
type="danger" v-if="typeOptions.length&&pageForm.proposalTypes.length">清空
|
||||
</el-link>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">立案结果:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalResult.includes(item.code)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="checkProposalResult(item.code)"
|
||||
style="margin-right: 10px;cursor: pointer;"
|
||||
v-for="item in resultOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalResult=[];doSearch()"
|
||||
type="danger"
|
||||
v-if="resultOptions.length&&pageForm.proposalResult.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex"
|
||||
v-if="pageForm.proposalResult.includes('determine')">
|
||||
<el-col class="query-row-title">是否重点:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalDetermineTypes.includes(item.code)?'dark':'plain'"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
@click="tagToggle('proposalDetermineTypes',item.code)"
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in determineTypeOptions">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalDetermineTypes=[];doSearch()"
|
||||
type="danger"
|
||||
v-if="determineTypeOptions.length&&pageForm.proposalDetermineTypes.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">教 代 会:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag :effect="pageForm.meetingIds.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="clickMeetingIds(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in meetingOptions">
|
||||
{{item.jdhallname}}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="pageForm.meetingIds=[];doSearch()"
|
||||
type="danger" v-if="pageForm.meetingIds.length">清空
|
||||
</el-link>
|
||||
|
||||
<!-- <el-row type="flex">-->
|
||||
<!-- <el-col>-->
|
||||
<!-- <el-select @change="meetingChange" clearable filterable-->
|
||||
<!-- placeholder="请选择教代会"-->
|
||||
<!-- style="width: 80%" v-model="pageForm.meetingId">-->
|
||||
<!-- <el-option-->
|
||||
<!-- :label="item.jdhallname"-->
|
||||
<!-- :value="item.id"-->
|
||||
<!-- v-for="item in meetingOptions">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">代 表 团:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="8"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('tamanage')||@shiro.hasRole('jdhdbt01')}">
|
||||
<!-- <span>代表团:</span>-->
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="所属代表团"
|
||||
style="width: 350px" v-model="pageForm.delegationName">
|
||||
<el-option :key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.name"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>承办单位:</span>
|
||||
<el-select @change="doSearch()" clearable filterable
|
||||
placeholder="" style="width: 350px" v-model="pageForm.underTakeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in underTakeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <span>所属工会:</span>-->
|
||||
<!-- <el-select @change="unionChange" clearable filterable-->
|
||||
<!-- placeholder="请选择所属工会" style="width: 350px" v-model="pageForm.unionId">-->
|
||||
<!-- <el-option-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.unionname"-->
|
||||
<!-- :value="item.id"-->
|
||||
<!-- v-for="item in unionOptions">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="8">-->
|
||||
<!-- <span>所属单位:</span>-->
|
||||
<!-- <el-select @change="doSearch" clearable filterable-->
|
||||
<!-- placeholder="请选择所属单位会" style="width: 350px" v-model="pageForm.unitId">-->
|
||||
<!-- <el-option-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.name"-->
|
||||
<!-- :value="item.id"-->
|
||||
<!-- v-for="item in unitOptions">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-col>-->
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
|
||||
<!-- <el-card shadow="never" class="search-card">-->
|
||||
|
||||
<!-- </el-card>-->
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
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>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop=='resultName'">
|
||||
<span>{{ resultName?resultName:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
determineTypeOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
underTakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "",
|
||||
stateCode: '',
|
||||
meetingIds: [],
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
searchNames: ['info.proposalName'],
|
||||
delegationName: '',
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
searchNames: [
|
||||
{label: '标题', key: 'info.proposalName'},
|
||||
{label: '案由', key: 'info.brief'},
|
||||
{label: '答复内容', key: 'zbpr.replyContent'},
|
||||
{label: '提案人', key: 'su.username'}]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
underTakeChange(val) {
|
||||
|
||||
},
|
||||
clickMeetingIds(val) {
|
||||
const idx = this.pageForm.meetingIds.indexOf(val)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.meetingIds.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.meetingIds.push(val)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
|
||||
clickSearchNames(val) {
|
||||
const idx = this.pageForm.searchNames.indexOf(val)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.searchNames.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.searchNames.push(val)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
// this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.searchNames = JSON.stringify(pageForm.searchNames)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.meetingIds = JSON.stringify(pageForm.meetingIds)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
// this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
// this.delegationOptions = await proposal.getDelegation(this.pageForm.meetingId)
|
||||
|
||||
this.delegationOptions = await getDictOptions("dbtmc")
|
||||
|
||||
this.underTakeOptions = await proposal.getProposalUndertake()
|
||||
|
||||
// this.unionOptions = await getUnions(null)
|
||||
// this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,236 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row .el-col {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<!--# include("/platform/proposal/include/searchCnd.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"
|
||||
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>
|
||||
<template scope="{row:{resultName}}" v-else-if="column.prop=='resultName'">
|
||||
<span>{{ resultName?resultName:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruMaster}}" v-else-if="column.prop==='pruMaster'">
|
||||
<span>{{ pruMaster?pruMaster:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{pruSlave}}" v-else-if="column.prop==='pruSlave'">
|
||||
<span>{{ pruSlave?pruSlave:'暂无' }}</span>
|
||||
</template>
|
||||
<template scope="{row:{feedBackResultName}}" v-else-if="column.prop==='feedBackResultName'">
|
||||
<span>{{ feedBackResultName?feedBackResultName:'暂无' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
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},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'mannerName', label: '提交方式', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true, checked: 0},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'feedBackResultName', label: '反馈意见', sortable: true, checked: 0},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterCode', label: '主办单位编码', sortable: true, checked: 0},
|
||||
{prop: 'pruSlave', label: '协办单位', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
determineTypeOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
oneProposalExport(id) {
|
||||
window.location.href = "/platform/proposal/statistics/summary/oneProposalExport?proposalId=" + id
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
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)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,394 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<!-- <el-row type="flex" justify="center">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
style="width: 50%" @keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 110px;">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-row>-->
|
||||
|
||||
<el-row align="middle" class="query-row" justify="center" type="flex">
|
||||
<el-col :span="8">
|
||||
<span>教代会:</span>
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
style="width: 80%" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword2">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
|
||||
v-model="pageForm.searchName2">
|
||||
<el-option label="提案人" value="su.username"></el-option>
|
||||
<!-- <el-option label="附议人" value="seconded.username"></el-option>-->
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
|
||||
<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: 400px" 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-row align="middle" class="query-row" type="flex">
|
||||
<el-col class="query-row-title">提案类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.proposalTypes.includes(item.id)?'dark':'plain'"
|
||||
:key="item.id"
|
||||
:type="item.typeName"
|
||||
@click="checkProposalType(item.id)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in typeOptions">
|
||||
{{ item.typeName }}
|
||||
</el-tag>
|
||||
|
||||
<el-link :underline="false" @click="pageForm.proposalTypes=[];doSearch()"
|
||||
type="danger" v-if="typeOptions.length&&pageForm.proposalTypes.length">清空
|
||||
</el-link>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row align="middle" class="query-row" type="flex">
|
||||
|
||||
<el-col class="query-row-title">代 表 团:</el-col>
|
||||
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="8"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('tamanage')||@shiro.hasRole('jdhdbt01')}">
|
||||
<!-- <span>代表团:</span>-->
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="所属代表团"
|
||||
style="width: 350px" v-model="pageForm.delegationId">
|
||||
<el-option :key="item.id"
|
||||
:label="item.dbtname"
|
||||
:value="item.id"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属工会:</span>
|
||||
<el-select @change="unionChange" clearable filterable
|
||||
placeholder="请选择所属工会" style="width: 350px" v-model="pageForm.unionId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id"
|
||||
v-for="item in unionOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span>所属单位:</span>
|
||||
<el-select @change="doSearch" clearable filterable
|
||||
placeholder="请选择所属单位会" style="width: 350px" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="query-row" type="flex">
|
||||
<el-col class="query-row-title">征集状态:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
:effect="pageForm.levyStates.includes(item.value)?'dark':'plain'"
|
||||
:key="item.value"
|
||||
:type="item.label"
|
||||
@click="checkLevyState(item.value)"
|
||||
style="margin-right: 10px;cursor: pointer;margin-bottom: 5px;"
|
||||
v-for="item in levyAuditOptions">
|
||||
{{ item.label }}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="pageForm.levyStates=[];doSearch()"
|
||||
type="danger" v-if="levyAuditOptions.length&&pageForm.levyStates.length">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
<template #func>
|
||||
<el-button :disabled="!pageForm.meetingId" @click="manualRemind" size="small" type="primary">
|
||||
一键提醒
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" align="center"
|
||||
header-align="center"
|
||||
row-key="id"
|
||||
>
|
||||
<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-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
levyStates: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'mobile', label: '联系方式', disabled: true},
|
||||
{prop: 'unitname', label: '单位', disabled: true},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
// {prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
// {prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提交方式', sortable: true},
|
||||
{prop: 'secondedNum', label: '附议人数量', sortable: true},
|
||||
{prop: 'secondedAgreeNum', label: '已附议', sortable: true},
|
||||
{prop: 'delegationAudit', label: '团长审核', sortable: true},
|
||||
],
|
||||
levyAuditOptions: [
|
||||
{label: '未提交', value: 0},
|
||||
{label: '未附议', value: 1},
|
||||
{label: '附议中', value: 2},
|
||||
{label: '待团长审核', value: 3},
|
||||
{label: '团长已审核', value: 4},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
async manualRemind() {
|
||||
const confirm = await this.$confirm('请确认是否一键提醒?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/remindProposalCreator', {teacherMeetingId: this.pageForm.meetingId})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
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.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkLevyState(type) {
|
||||
this.pageForm.levyStates = [type]
|
||||
|
||||
// let idx = this.pageForm.levyStates.indexOf(type)
|
||||
// if (idx !== -1) {
|
||||
// this.pageForm.levyStates.splice(idx, 1)
|
||||
// } else {
|
||||
// this.pageForm.levyStates.push(type)
|
||||
// }
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.levyStates = JSON.stringify(pageForm.levyStates)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await getOpenProposalState()
|
||||
this.typeOptions = await getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
|
||||
this.delegationOptions = await getDelegation(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,232 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-table {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-row justify="space-between" type="flex">
|
||||
<el-col>
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-select @change="pageData()" clearable filterable placeholder="请选择代表团"
|
||||
v-model="pageForm.delegationId">
|
||||
<el-option :key="item.id" :label="item.dbtname" :value="item.id"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<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-select @change="pageData()" clearable filterable placeholder="请选择提案类型"
|
||||
v-model="pageForm.typeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id"
|
||||
v-for="item in typeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
|
||||
<el-select @change="pageData()" clearable filterable placeholder="请选择提案状态"
|
||||
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-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
<template #func>
|
||||
<el-button :disabled="!pageForm.meetingId" @click="sessionExport" icon="el-icon-printer"
|
||||
size="medium"
|
||||
type="primary">
|
||||
按条件导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :row-key="()=>{new Date().getTime()}" :size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table" style="width: 100%;margin-bottom: 20px" v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="$refs.info.openView(row.id);$refs.guava.view()" type="primary">
|
||||
{{row.proposalName}}
|
||||
</el-link>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='stateId'">
|
||||
<span :style="'color:'+row.stateColor"
|
||||
v-if="(!row.isReplyPass||!row.isCommitteePass)&&row.isAudit&&!row.isMake&&!row.isReply">退回修改</span>
|
||||
<vi-table-state :state="row" v-else></vi-table-state>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" size="mini" type="primary">
|
||||
导出
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
stateOptions: [],
|
||||
undertakeOptions: [],
|
||||
meetingOptions: [],
|
||||
delegationOptions: [],
|
||||
typeOptions: [],
|
||||
proposalIds: [],
|
||||
pageForm: {
|
||||
delegationId: "",
|
||||
stateCode: "",
|
||||
typeId: ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'proposalCode', label: '提案编号'},
|
||||
{prop: 'proposalName', label: '提案名称'},
|
||||
{prop: 'username', label: '提案人'},
|
||||
{prop: 'createTime', label: '提案时间'},
|
||||
{prop: 'typeName', label: '提案类型'},
|
||||
{prop: 'meetingName', label: '教代会届次'},
|
||||
{prop: 'delegationName', label: '所属代表团'},
|
||||
{prop: 'stateId', label: '提案状态'},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'undertake') {
|
||||
this.undertakeExport()
|
||||
} else if (type === 'session') {
|
||||
this.sessionExport()
|
||||
} else if (type === 'proposal') {
|
||||
this.proposalExport(data.id)
|
||||
} else if (type === 'info') {
|
||||
this.oneProposalExport(data.id)
|
||||
}
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
|
||||
/**
|
||||
* 按届次导出提案
|
||||
*/
|
||||
sessionExport() {
|
||||
const {meetingId, undertakeId, stateCode, delegationId} = this.pageForm
|
||||
let props = {}
|
||||
this.tableColumns.forEach(v => {
|
||||
props[v.prop] = v.label
|
||||
})
|
||||
if (meetingId) {
|
||||
window.location.href = loc() + "/sessionExport?meetingId=" + meetingId + "&stateCode=" + stateCode + "&delegationId=" + delegationId + "&props=" + JSON.stringify(props)
|
||||
}
|
||||
/* if (undertakeId && meetingId) {
|
||||
window.location.href = loc() + "/undertakeExport?meetingId=" + meetingId + "&undertakeId=" + undertakeId
|
||||
}
|
||||
*/
|
||||
},
|
||||
/**
|
||||
* 按承办单位导出
|
||||
*/
|
||||
undertakeExport() {
|
||||
const {meetingId, undertakeId} = this.pageForm
|
||||
if (!undertakeId) {
|
||||
this.$notify.warning({title: '警告', message: '请选择承办单位'});
|
||||
return
|
||||
}
|
||||
window.location.href = loc() + "/undertakeExport?meetingId=" + meetingId + "&undertakeId=" + undertakeId
|
||||
},
|
||||
/**
|
||||
* 按提案导出承办
|
||||
*/
|
||||
proposalExport(id) {
|
||||
window.location.href = loc() + "/proposalExport?proposalId=" + id
|
||||
},
|
||||
/**
|
||||
* 导出单个提案信息
|
||||
*/
|
||||
oneProposalExport(id) {
|
||||
window.location.href = loc() + "/oneProposalExport?proposalId=" + id
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.delegationOptions = await proposal.getDelegation(this.pageForm.meetingId)
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,224 @@
|
||||
<!--#
|
||||
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" filterable placeholder="请选择教代会"
|
||||
style="width: 80%;margin-right: 20px" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col>
|
||||
<span>承办单位:</span>
|
||||
<el-select @change="pageData()" clearable filterable
|
||||
placeholder="请选择承办单位" style="width: 80%" v-model="pageForm.undertakeId">
|
||||
<el-option
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in undertakeOptions">
|
||||
</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="satisfiedCount"
|
||||
sortable v-if="feedBackNames.includes('满意')"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
header-align="center" label="比较满意" prop="quiteSatisfiedCount"
|
||||
sortable v-if="feedBackNames.includes('比较满意')"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
header-align="center" label="基本满意" prop="basicallySatisfiedCount"
|
||||
sortable v-if="feedBackNames.includes('基本满意')"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
header-align="center" label="不满意" prop="notSatisfiedCount"
|
||||
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>
|
||||
const 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.satisfiedCount + v.quiteSatisfiedCount + v.basicallySatisfiedCount) / 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")
|
||||
this.feedBackNames = data.map(v => v.name)
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
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>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,317 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">届次:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="meetingChange"
|
||||
placeholder="请选择教代会届次" style="width: 300px" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in allJdhOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="提案编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">承办单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable filterable
|
||||
placeholder="请选择承办单位" style="width: 300px" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button @click="pageData" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search">
|
||||
<div class="search-item" style="width: 100%;margin-top: 15px;">
|
||||
<div class="search-item-label">快捷查询:</div>
|
||||
<div class="search-item-option">
|
||||
<el-tag :effect="clickTags.includes(item.name)?'dark':''"
|
||||
@click="filterData(item)"
|
||||
class="mr5"
|
||||
style="cursor: pointer"
|
||||
v-for="item in searchTags">
|
||||
{{item.name}}
|
||||
</el-tag>
|
||||
<el-link :underline="false" @click="clickTags=[];pageData()"
|
||||
type="danger" v-if="clickTags.length>0">清空
|
||||
</el-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
<template #func>
|
||||
<!-- <el-button type="primary" icon="el-icon-download" size="small"
|
||||
@click="doExport">
|
||||
导出提案承办汇总表
|
||||
</el-button>-->
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
row-key="id" style="width: 100%;margin-bottom: 20px" v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='proposalName'">
|
||||
<el-link @click="$refs.info.openView(row.id);$refs.guava.view()" type="primary">
|
||||
{{row.proposalName}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='pruMaster'">
|
||||
<template v-if="row.pruMaster">
|
||||
<el-popover
|
||||
@show="getUnitLeader([row.pruMasterId])"
|
||||
placement="right"
|
||||
trigger="click"
|
||||
width="400">
|
||||
<div v-html="unitLeaderInfo"></div>
|
||||
<span slot="reference" style="cursor: pointer">
|
||||
{{row.pruMaster}}<i class="el-icon-phone" style="color: #67c23a"></i>
|
||||
</span>
|
||||
</el-popover>
|
||||
</template>
|
||||
<span v-else>
|
||||
暂无
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='pruSlaveReply'">
|
||||
<template v-if="row.pruSlaveReply">
|
||||
<el-popover
|
||||
@show="getUnitLeader(row.pruSlaveId.split(','))"
|
||||
placement="right"
|
||||
trigger="click"
|
||||
width="400">
|
||||
<div v-html="unitLeaderInfo"></div>
|
||||
<span slot="reference" style="cursor: pointer">
|
||||
{{row.pruSlaveReply}}<i class="el-icon-phone" style="color: #67c23a"></i>
|
||||
</span>
|
||||
</el-popover>
|
||||
</template>
|
||||
<span v-else>
|
||||
暂无
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='stateCode'">
|
||||
<vi-table-state :state="row"></vi-table-state>
|
||||
</template>
|
||||
<template scope="{row:{feedback}}" v-else-if="column.prop=='feedback'">
|
||||
<el-tag size="medium" type="success" v-if="feedback">已反馈</el-tag>
|
||||
<el-tag size="medium" type="danger" v-else>未反馈</el-tag>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='urgeNum'">
|
||||
<el-link @click="findUrgeRecord(row.id)" type="primary">{{row.urgeNum}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<!-- :disabled="row.isAllReply"-->
|
||||
<el-button :loading="submitDisabled" @click="doUrge(row)" disabled
|
||||
size="mini"
|
||||
type="primary">催办
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :visible.sync="urgeDialog" title="催办记录">
|
||||
<el-table :data="urgeRecordList">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index" width="80"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办人姓名"
|
||||
property="urgeUserName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办人工号"
|
||||
property="urgeLoginName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="催办时间" property="operateTime"></el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let chart
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
urgeDialog: false,
|
||||
submitDisabled: false,
|
||||
urgeRecordList: [],
|
||||
allJdhOptions: [],
|
||||
tableData: [],
|
||||
fullTableData: [],
|
||||
unitOptions: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'resultName', label: '立案结果', disabled: true, sortable: true},
|
||||
{prop: 'pruMaster', label: '主办单位', sortable: true},
|
||||
{prop: 'pruMasterReply', label: '主办单位答复', sortable: true},
|
||||
{prop: 'pruSlaveReply', label: '协办单位'},
|
||||
{prop: 'pruMasterLeader', label: '分管校领导'},
|
||||
{prop: 'pruMasterLeaderIsAudit', label: '审批答复'},
|
||||
{prop: 'feedback', label: '反馈意见'},
|
||||
{prop: 'stateCode', label: '状态'},
|
||||
{prop: 'urgeNum', label: '催办次数'},
|
||||
],
|
||||
unitLeaderInfo: null,
|
||||
searchTags: [
|
||||
{name: '主办已答复', cnd: {key: 'pruMasterReply', value: '已答复'}},
|
||||
{name: '主办未答复', cnd: {key: 'pruMasterReply', value: '未答复'}},
|
||||
{name: '协办已答复', cnd: {key: 'pruSlaveReply', value: '已答复'}},
|
||||
{name: '协办未答复', cnd: {key: 'pruSlaveReply', value: '未答复'}},
|
||||
{name: '领导已审批', cnd: {key: 'pruMasterLeaderIsAudit', value: '已审批'}},
|
||||
{name: '领导未审批', cnd: {key: 'pruMasterLeaderIsAudit', value: '未审批'}},
|
||||
],
|
||||
clickTags: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
filterData(tag) {
|
||||
const {name, cnd} = tag
|
||||
if (this.clickTags.indexOf(name) > -1) {
|
||||
this.clickTags.splice(this.clickTags.indexOf(name), 1)
|
||||
} else {
|
||||
this.clickTags.push(name)
|
||||
}
|
||||
const choseTags = this.searchTags.filter(v => this.clickTags.includes(v.name))
|
||||
let tempTableData = this.fullTableData
|
||||
choseTags.forEach(v => {
|
||||
tempTableData = tempTableData.filter(t => t[v.cnd.key] && t[v.cnd.key].indexOf(v.cnd.value) > -1)
|
||||
})
|
||||
this.tableData = tempTableData
|
||||
if (choseTags.length === 0) {
|
||||
this.tableData = this.fullTableData
|
||||
}
|
||||
},
|
||||
async findUrgeRecord(proposalId) {
|
||||
this.urgeDialog = true
|
||||
const resp = await $.post("/platform/proposal/senior/urge/findUrgeRecord", {proposalId})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.urgeRecordList = data
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
doExport() {
|
||||
location.href = loc() + '/export?meetingId=' + (this.pageForm.meetingId ? this.pageForm.meetingId : '') + '&unitId=' + (this.pageForm.unitId ? this.pageForm.unitId : '')
|
||||
},
|
||||
async doUrge(row) {
|
||||
this.submitDisabled = true
|
||||
this.$confirm('确定催办吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post("/platform/proposal/senior/urge/doUrge", {proposalId: row.id})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}).catch(() => {
|
||||
this.submitDisabled = false
|
||||
});
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar()
|
||||
this.tableLoading = true
|
||||
const resp = await $.post(loc() + "/data", this.pageForm)
|
||||
sublime.closeLoadingbar()
|
||||
this.tableLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.fullTableData = resp.data
|
||||
this.tableData = resp.data
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.unitOptions = await proposal.getUndertakeByMeeting(val)
|
||||
},
|
||||
async getUnitLeader(unitIds) {
|
||||
const resp = await $.get(loc() + '/getUnitLeader', {unitIds: JSON.stringify(unitIds)})
|
||||
this.unitLeaderInfo = resp.data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.allJdhOptions = await getAllJdh()
|
||||
this.$set(this.pageForm, 'meetingId', this.allJdhOptions.length ? this.allJdhOptions[0].id : '')
|
||||
this.pageData()
|
||||
this.unitOptions = await proposal.getUndertakeByMeeting(this.pageForm.meetingId)
|
||||
if (proposal.enableState.some(v => v.stateCode === 800)) {
|
||||
this.tableColumns.splice(9, 0, {prop: 'caseCheckAudit', label: '提案委员会审查'},)
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,280 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-table {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row .el-col {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<!--# include("/platform/proposal/include/searchCnd.html"){}#-->
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="提案列表">
|
||||
<template #func>
|
||||
<el-button :disabled="meetingOptions.findIndex(v=>v.id==pageForm.meetingId)===0" @click="doExport"
|
||||
type="primary">导出提案报告
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @selection-change="handleSelectionChange"
|
||||
@sort-change="pageOrder"
|
||||
align="center" header-align="center" ref="multipleTable"
|
||||
row-key="id">
|
||||
<el-table-column
|
||||
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'"
|
||||
:label="column.label"
|
||||
:min-width="column.width"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
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>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span v-if="![proposal.CASE].includes(row.stateCode)">已审核</span>
|
||||
<span v-else>待审核</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='resultName'">
|
||||
<el-link type="primary">
|
||||
{{row.resultName ? row.resultName:'暂未审核'}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<!-- <proposal-table :data="tableData" :loading="tableLoading" :page="pageForm" @order="pageOrder"-->
|
||||
<!-- @selection="handleSelectionChange"-->
|
||||
<!-- @view="openView"-->
|
||||
<!-- selection>-->
|
||||
|
||||
<!-- </proposal-table>-->
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
meetingOptions: [],
|
||||
tableData: [],
|
||||
loading: false,
|
||||
tableLoading: false,
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
proposalDetermineTypes: []
|
||||
},
|
||||
selectProposal: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
determineTypeOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
undertakeOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
async meetingChange(val) {
|
||||
this.pageForm.delegationId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
this.undertakeOptions = await proposal.getUndertakeByMeeting(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
tagToggle(optionsName, result) {
|
||||
let idx = this.pageForm[optionsName].indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[optionsName].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[optionsName].push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.selectProposal = val
|
||||
},
|
||||
doExport() {
|
||||
|
||||
if (this.selectProposal.length === 0) {
|
||||
this.notifyWarning('请先选择提案后再导出提案报告')
|
||||
return
|
||||
}
|
||||
|
||||
const params = {
|
||||
meetingId: this.pageForm.meetingId,
|
||||
proposalIds: this.selectProposal.map(v => v.id)
|
||||
}
|
||||
|
||||
|
||||
window.location.href = loc() + '/doExport' + "?data=" + JSON.stringify(params)
|
||||
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.determineTypeOptions = JSON.stringify(pageForm.proposalDetermineTypes)
|
||||
const resp = await $.post(loc() + "/pageData", pageForm)
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(resp.msg);
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : null
|
||||
this.stateOptions = await proposal.getOpenProposalState()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
this.determineTypeOptions = await getDictOptions("proposal_determine_type")
|
||||
|
||||
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)
|
||||
if (this.pageForm.meetingId != null) {
|
||||
this.pageData()
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,278 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">教代会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
style="width: 80%" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword2">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
|
||||
v-model="pageForm.searchName2">
|
||||
<el-option label="提案人" value="su.username"></el-option>
|
||||
<!-- <el-option label="附议人" value="seconded.username"></el-option>-->
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" align="center"
|
||||
header-align="center"
|
||||
row-key="id"
|
||||
>
|
||||
<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>
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
{{row.determineTypeCode=='emphasis'?'是':'否'}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
{{row.isConjoin?'是':'否'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
levyStates: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: 'underTakeNames', label: '承办单位', sortable: true},
|
||||
{prop: 'isConjoin', label: '是否并案', sortable: true},
|
||||
{prop: 'determineTypeCode', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
levyAuditOptions: [
|
||||
{label: '未提交', value: 0},
|
||||
{label: '未附议', value: 1},
|
||||
{label: '附议中', value: 2},
|
||||
{label: '待团长审核', value: 3},
|
||||
{label: '团长已审核', value: 4},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
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.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkLevyState(type) {
|
||||
this.pageForm.levyStates = [type]
|
||||
|
||||
// let idx = this.pageForm.levyStates.indexOf(type)
|
||||
// if (idx !== -1) {
|
||||
// this.pageForm.levyStates.splice(idx, 1)
|
||||
// } else {
|
||||
// this.pageForm.levyStates.push(type)
|
||||
// }
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.levyStates = JSON.stringify(pageForm.levyStates)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await getOpenProposalState()
|
||||
this.typeOptions = await getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
|
||||
this.delegationOptions = await getDelegation(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,421 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style></style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="分管校领导审批立案">
|
||||
<template #func>
|
||||
<el-button @click="openSendMsg" icon="el-icon-message" size="small" type="primary"
|
||||
v-if="pageForm.isAudit==false && (${@shiro.hasRole('sysadmin')||@shiro.hasRole('tamange')})">
|
||||
发送消息
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="pblaId">
|
||||
<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>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'?
|
||||
'普通':'否'}}
|
||||
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
{{row.isConjoin?'是':'否'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button @click="openAudit(row)" size="mini"
|
||||
type="primary"
|
||||
v-if="!row.isAudit">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button @click="rollback(row)" size="mini"
|
||||
type="danger"
|
||||
v-if="canRollBack(row)">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
<template #edit>
|
||||
<proposal-info handle label="分管校领导审批立案" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title :title="proTableData && proTableData.length > 1 ? '并案信息' : '提案信息'"></vi-title>
|
||||
|
||||
<el-form-item>
|
||||
<el-table :data="proTableData" style="width: 100%"
|
||||
tooltip-effect="dark">
|
||||
<el-table-column align="left" header-align="left" label="提案编号"
|
||||
prop="proposalCode"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人"
|
||||
prop="username"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName"
|
||||
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>
|
||||
<div style="text-align: center;margin-top: -40px;"
|
||||
v-if="formData.auditUnderTakeList && formData.auditUnderTakeList.length>1">
|
||||
<span class="text-danger">温馨提醒:该提案的承办单位【{{formData.auditUnderTakeName}}】是由您来分管的,只需要审批一次即可。</span>
|
||||
</div>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal" ref="sign"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button @click="doAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<el-dialog :visible.syn="msgDialog" title="发送消息提醒">
|
||||
<el-table :data="receiverSmsUserList" max-height="600">
|
||||
<el-table-column label="序号" type="index"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column label="工号" prop="loginname"></el-table-column>
|
||||
<el-table-column label="手机号" prop="mobile"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-row class="mt20" justify="end" type="flex">
|
||||
<el-button @click="msgDialog=false">取消</el-button>
|
||||
<el-button :disabled="receiverSmsUserList.length===0" @click="doSend" type="primary">确定</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
<!--#include("/platform/proposal/include/proposal_include.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
proTableData: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true,},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: 'underTakeNameUser', label: '分管校领导'},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'underTakeNames', label: '承办单位', sortable: true},
|
||||
{prop: 'undertakeType', label: '承办类型', sortable: true},
|
||||
],
|
||||
// tableColumns: proposal_include.tableColumns.concat([{prop:'underTakeNames',label:'承办单位'}]),
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(320)
|
||||
},
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: '',
|
||||
other: 'ordinary',
|
||||
proposalName: '',
|
||||
proposalCode: '',
|
||||
createUser: ''
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
other: [{required: true, message: '请选择立案意见', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
},
|
||||
resultOptions: [],
|
||||
isNode: false,
|
||||
nextStateCode: null,
|
||||
msgDialog: false,
|
||||
receiverSmsUserList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async openSendMsg() {
|
||||
this.msgDialog = true
|
||||
const resp = await $.post(loc() + "/findReceiverSmsUserList", {meetingId: this.pageForm.meetingId})
|
||||
if (resp.code === 0) {
|
||||
this.msgDialog = true
|
||||
this.receiverSmsUserList = resp.data
|
||||
} else {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}
|
||||
},
|
||||
|
||||
async doSend() {
|
||||
const confirm = await this.$confirm('此操作将会给承办单位分管领导发送消息, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doSend", {meetingId: this.pageForm.meetingId})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.formData.proposalId = row.id
|
||||
this.formData.underTakeId = row.underTakeId
|
||||
this.formData.proposalName = row.proposalName
|
||||
this.formData.createUser = row.username
|
||||
this.formData.proposalCode = row.proposalCode
|
||||
const branchLeaderAuditList = await this.getBranchLeaderAuditList(row.underTakeId, row.id)
|
||||
const auditUnderTakeIdList = branchLeaderAuditList.map(v => v.underTakeId)
|
||||
const replyUnit = await proposal.findOrganizer(row.id)
|
||||
const auditUnderTakeList = replyUnit.filter(v => auditUnderTakeIdList.includes(v.replyUnitId))
|
||||
const auditUnderTakeName = auditUnderTakeList.map(v => v.unitName).join(",")
|
||||
this.$set(this.formData, "auditUnderTakeName", auditUnderTakeName)
|
||||
this.$set(this.formData, "auditUnderTakeList", auditUnderTakeList)
|
||||
// const opinion = await this.getUnderTakeOpinion(row.underTakeId)
|
||||
this.$set(this.formData, "opinion", "同意该提案,请" + auditUnderTakeName + "认真研究办理该提案!")
|
||||
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)
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
},
|
||||
async getBranchLeaderAuditList(replyUnitId, proposalId) {
|
||||
const {data} = await $.get(loc() + "/getBranchLeaderAuditList", {
|
||||
replyUnitId: replyUnitId,
|
||||
proposalId: proposalId
|
||||
})
|
||||
return data
|
||||
|
||||
},
|
||||
|
||||
async getUnderTakeOpinion(underTakeId) {
|
||||
const resp = await $.get(loc() + '/getUnderTakeName', {underTakeId})
|
||||
return "同意该提案,请" + resp.data + "认真研究办理该提案!"
|
||||
},
|
||||
async batchAudit() {
|
||||
if (this.batchSelection.length === 0) {
|
||||
this.$notify.warning('请选择需要批量审核的记录')
|
||||
return
|
||||
}
|
||||
this.formData.opinion = null
|
||||
this.batchDialog = true
|
||||
},
|
||||
async doAudit() {
|
||||
this.submitDisabled = true
|
||||
const valid = await this.$refs["auditForm"].validate()
|
||||
if (valid) {
|
||||
let a = this.formData.auditUnderTakeList.length > 1 ? '该提案的承办单位【' + this.formData.auditUnderTakeName + '】是由您来分管的,只需要审批一次即可' : '您是否提交审核意见?'
|
||||
const confirm = await this.$confirm(a, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/putSuggestion", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
sign: this.formData.sign,
|
||||
underTakeId: this.formData.underTakeId
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
async doBatchAudit() {
|
||||
const valid = await this.$refs["auditForm"].validate()
|
||||
if (valid) {
|
||||
|
||||
const confirm = await this.$confirm('您是否提交审核意见?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
})
|
||||
let proposalIds = []
|
||||
if (this.batchSelection && this.batchSelection.length > 0) {
|
||||
proposalIds = this.batchSelection.map(v => v.id)
|
||||
}
|
||||
const resp = await $.post(loc() + "/putSuggestion", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
proposalIds: JSON.stringify(proposalIds),
|
||||
sign: this.formData.sign,
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.batchDialog = false
|
||||
this.batchSelection = []
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
async rollback(row) {
|
||||
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/rollback', {proposalId: row.id, underTakeId: row.underTakeId})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
canRollBack(row) {
|
||||
if (this.isNode) {
|
||||
return row.isAudit && [this.nextStateCode, proposal.BRANCHLEADERREAD].includes(row.stateCode)
|
||||
} else {
|
||||
return row.isAudit && row.stateCode < proposal.CASEUNIT && row.resultCode !== 'notGive'
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.isNode = await proposal.getProposalIsNodeState(proposal.BRANCHLEADERREAD)
|
||||
this.nextStateCode = await proposal.getProposalNextNode(proposal.BRANCHLEADERREAD)
|
||||
await proposal.initData(this)
|
||||
this.resultOptions = await getDictByCode("proposal_result")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,745 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-dialog__body {
|
||||
padding: 20px 30px 1px 30px;
|
||||
}
|
||||
|
||||
.pro_table {
|
||||
padding-left: 65px;
|
||||
}
|
||||
|
||||
.el-table::before {
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.el-table__empty-block {
|
||||
background: none;
|
||||
min-height: 50px;
|
||||
}
|
||||
|
||||
.el-table__empty-text {
|
||||
position: inherit;
|
||||
}
|
||||
|
||||
.cell {
|
||||
width: 100% !important;
|
||||
font-size: 14px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava @vchange="vChange" ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="提案委员会立案审核">
|
||||
<template #func>
|
||||
<el-button :disabled="multipleSelection && multipleSelection.length >=2 ? false : true"
|
||||
@click="mergeAudit"
|
||||
size="mini" type="primary" v-if="!pageForm.isAudit">并案审核
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize"
|
||||
@selection-change="handleSelectionChange"
|
||||
@sort-change="pageOrder" align="center" header-align="center"
|
||||
ref="multipleTable">
|
||||
<el-table-column
|
||||
:selectable="(row) => { return [proposal.CASE].includes(row.stateCode) }" type="selection"
|
||||
v-if="!pageForm.isAudit"
|
||||
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'"
|
||||
:label="column.label"
|
||||
:min-width="column.width"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
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>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span v-if="![proposal.CASE].includes(row.stateCode)">已审核</span>
|
||||
<span v-else>待审核</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='resultName'">
|
||||
<el-link type="primary">
|
||||
{{row.resultName ? row.resultName:'暂未审核'}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="220px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="mergeIndex = 0; openView(row)" size="mini" type="primary">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button @click="mergeIndex = 0; openAudit(row.id,row)" size="mini"
|
||||
type="primary"
|
||||
v-if="[proposal.CASE].includes(row.stateCode)">
|
||||
审核
|
||||
</el-button>
|
||||
<!--<el-button type="primary" size="mini"
|
||||
v-if="row.resultCode=='notGive'"
|
||||
@click="doExport(row)">
|
||||
导出
|
||||
</el-button>-->
|
||||
<el-button @click="openEdit(row)" size="mini"
|
||||
type="primary"
|
||||
v-if="![proposal.CASE].includes(row.stateCode) && row.canEdit">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button @click="revoke(row)" size="mini"
|
||||
type="danger"
|
||||
v-if="![proposal.CASE].includes(row.stateCode) && row.canEdit">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="提案委员会立案审核" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="立案结果" prop="resultCode">
|
||||
<el-radio-group @change="resultCodeChange" v-model="formData.resultCode">
|
||||
<el-radio :label="item.code" border v-for="item in resultOptions">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="formData.resultCode === 'determine'">
|
||||
<el-radio label="emphasis" v-model="formData.determineTypeCode">重点</el-radio>
|
||||
<el-radio label="ordinary" v-model="formData.determineTypeCode">普通</el-radio>
|
||||
</template>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item prop="determineTypeCode" label=""-->
|
||||
<!-- v-if="formData.resultCode === 'determine'">-->
|
||||
<!-- <el-radio v-model="formData.determineTypeCode" label="emphasis">重点提案</el-radio>-->
|
||||
<!-- <el-radio v-model="formData.determineTypeCode" label="ordinary">普通提案</el-radio>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案类型" prop="typeId">
|
||||
<el-select clearable filterable placeholder="提案类型"
|
||||
v-model="formData.typeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id"
|
||||
v-for="item in typeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-form-item label="理由列表" prop="noFilingReason" v-if="formData.resultCode=='notGive'">
|
||||
<el-select
|
||||
@change="formData.opinion = '';formData.opinion='经提案委员会审理,该提案不予立案。'+formData.noFilingReason"
|
||||
clearable filterable placeholder="请选择理由列表"
|
||||
v-model="formData.noFilingReason">
|
||||
<el-option :key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
v-for="item in noFilingReason">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20" v-if="formData.resultCode!='notGive'">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="主办单位" prop="hostUnit">
|
||||
<el-select clearable filterable placeholder="请选择主办单位" v-model="formData.hostUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="主办单位领导" v-if="formData.hostUnit">
|
||||
<el-input readonly v-model="hostUnitLeader"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="20" v-if="formData.resultCode!='notGive'">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协办单位" prop="helpUnit">
|
||||
<el-select clearable filterable multiple placeholder="请选择协办单位"
|
||||
v-model="formData.helpUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协办单位领导" v-if="formData.helpUnit && formData.helpUnit.length>0">
|
||||
<el-input readonly v-model="helpUnitLeader"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!--<el-form-item v-if="isSign()" prop="sign" label="签  字">
|
||||
<sign prefix="proposal" :qz.sync="formData.sign"></sign>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(0)" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
:title="diatitle" :visible.sync="dialogVisible" @closed="diaClosed"
|
||||
ref="dialog"
|
||||
top="5.3vh" width="70%">
|
||||
|
||||
<!--并案信息-->
|
||||
<vi-title :title="proTableData.length > 1 ? '并案信息' : '提案信息'" style="margin-bottom: 16px !important;"></vi-title>
|
||||
|
||||
<el-table :data="proTableData" class="pro_table" size="small" style="width: 100%" tooltip-effect="dark">
|
||||
<el-table-column align="left" header-align="left" label="提案编号" prop="proposalCode"
|
||||
width="200"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人" prop="username" show-overflow-tooltip
|
||||
width="200"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName" show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span @click="openDialog(row)" style="color: #236eb4; cursor: pointer; text-decoration: underline">{{row.proposalName}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="delProposal(scope.row, scope.$index)" size="mini" type="danger"
|
||||
v-if="editRow.id !== scope.row.id">移除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--审核信息-->
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm" style="margin-top: 20px">
|
||||
<vi-title style="margin-bottom: 16px !important;" title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="立案结果" prop="resultCode">
|
||||
<el-radio-group @change="resultCodeChange" v-model="formData.resultCode">
|
||||
<el-radio :label="item.code" border v-for="item in resultOptions">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="formData.resultCode === 'determine'">
|
||||
<el-radio label="emphasis" v-model="formData.determineTypeCode">重点
|
||||
</el-radio>
|
||||
<el-radio label="ordinary" v-model="formData.determineTypeCode">普通
|
||||
</el-radio>
|
||||
</template>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item prop="determineTypeCode" label=""-->
|
||||
<!-- v-if="formData.resultCode === 'determine'">-->
|
||||
<!-- <el-radio v-model="formData.determineTypeCode" label="emphasis">重点提案</el-radio>-->
|
||||
<!-- <el-radio v-model="formData.determineTypeCode" label="ordinary">普通提案</el-radio>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案类型" prop="typeId">
|
||||
<el-select clearable filterable placeholder="提案类型"
|
||||
v-model="formData.typeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id"
|
||||
v-for="item in typeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-form-item label="理由列表" prop="noFilingReason" v-if="formData.resultCode=='notGive'">
|
||||
<el-select @change="formData.opinion = '';formData.opinion='经提案委员会审理,该提案不予立案。'+formData.noFilingReason"
|
||||
clearable filterable placeholder="请选择理由列表"
|
||||
v-model="formData.noFilingReason">
|
||||
<el-option :key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
v-for="item in noFilingReason">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20" v-if="formData.resultCode!='notGive'">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="主办单位" prop="hostUnit">
|
||||
<el-select clearable filterable placeholder="请选择主办单位" v-model="formData.hostUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="主办单位领导" v-if="formData.hostUnit">
|
||||
<el-input readonly="" v-model="hostUnitLeader"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="20" v-if="formData.resultCode!='notGive'">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协办单位" prop="helpUnit">
|
||||
<el-select clearable filterable multiple placeholder="请选择协办单位"
|
||||
v-model="formData.helpUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协办单位领导" v-if="formData.helpUnit && formData.helpUnit.length>0">
|
||||
<el-input readonly="" v-model="helpUnitLeader"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!--<el-form-item v-if="isSign()" prop="sign" label="签  字">
|
||||
<sign prefix="proposal" :qz.sync="formData.sign"></sign>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(1)" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
|
||||
},
|
||||
computed: {
|
||||
hostUnitLeader() {
|
||||
const hostUnit = this.unitOptions.find(v => v.id === this.formData.hostUnit)
|
||||
return hostUnit ? hostUnit.leader : '无'
|
||||
},
|
||||
helpUnitLeader() {
|
||||
const helpUnits = this.unitOptions.filter(v => this.formData.helpUnit.includes(v.id)).map(v => {
|
||||
return v.leader ? v.leader : '无'
|
||||
})
|
||||
return helpUnits && helpUnits.length > 0 ? helpUnits.toString() : '无'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
buttonIndex: 0,
|
||||
proTableData: [],
|
||||
diatitle: '',
|
||||
mergeIndex: 0,
|
||||
dialogVisible: false,
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(proposal.CASE)
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
typeOptions: [],
|
||||
noFilingReason: [],
|
||||
config: {},
|
||||
unitOptions: [],
|
||||
resultOptions: [],
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
flag: true,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
resultCode: 'determine',
|
||||
hostUnit: '',
|
||||
helpUnit: '',
|
||||
opinion: '经提案委员会审理,该提案确定立案。',
|
||||
typeId: '',
|
||||
determineTypeCode: 'ordinary'
|
||||
},
|
||||
formRules: {
|
||||
resultCode: [{required: true, message: '请选择立案结果', trigger: ['blur', 'change']}],
|
||||
hostUnit: [{required: true, message: '请选择主办单位', trigger: ['blur', 'change']}],
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
typeId: [{required: true, message: '请输入提案类型', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
},
|
||||
multipleSelection: [],
|
||||
editRow: {},
|
||||
conJoinProposal: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
diaClosed() {
|
||||
this.editRow = ''
|
||||
this.formData = {
|
||||
flag: true,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
resultCode: 'determine',
|
||||
hostUnit: '',
|
||||
helpUnit: '',
|
||||
opinion: '经提案委员会审理,该提案确定立案。',
|
||||
typeId: '',
|
||||
determineTypeCode: ''
|
||||
}
|
||||
},
|
||||
async delProposal(row, index) {
|
||||
if ([proposal.CASE].includes(row.stateCode)) {
|
||||
if (this.multipleSelection.length <= 2) {
|
||||
this.$notify.warning({title: '警告', message: '并案审核时提案个数最少为2个'});
|
||||
return
|
||||
}
|
||||
this.proTableData = this.multipleSelection.filter(o => o.id !== row.id)
|
||||
this.$refs.multipleTable.toggleRowSelection(row);
|
||||
} else {
|
||||
if (this.proTableData.length <= 2) {
|
||||
this.$notify.warning({title: '警告', message: '并案审核时提案个数最少为2个'});
|
||||
return
|
||||
}
|
||||
const confirm = await this.$confirm('是否把' + row.proposalName + '移除并案,请确认!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
this.proTableData = this.proTableData.filter(o => o.id !== row.id)
|
||||
}
|
||||
}
|
||||
},
|
||||
async openEdit(row) {
|
||||
this.diatitle = '编辑'
|
||||
this.buttonIndex = 2
|
||||
this.editRow = row
|
||||
|
||||
const resp = await $.get('/platform/proposal/common/findConjoinProposal', {proposalId: row.id})
|
||||
this.conJoinProposal = resp.data
|
||||
this.proTableData = resp.data.filter(o => {
|
||||
return o.id !== row.id
|
||||
})
|
||||
this.proTableData.unshift(row)
|
||||
|
||||
const re = await $.get(loc() + '/backShow', {proposalId: row.id})
|
||||
this.formData.hostUnit = re.data.hostUnitId
|
||||
this.formData.helpUnit = re.data.helpUnitIds
|
||||
this.formData.username = re.data.caseAuditRecord.username
|
||||
this.formData.auditTime = re.data.caseAuditRecord.auditTime
|
||||
if (re.data.caseAuditRecord.opinion) {
|
||||
this.formData.opinion = re.data.caseAuditRecord.opinion
|
||||
}
|
||||
this.formData.resultCode = re.data.basic_info.resultCode
|
||||
this.formData.determineTypeCode = re.data.basic_info.determineTypeCode
|
||||
this.formData.typeId = re.data.basic_info.typeId
|
||||
this.formData.typeId = re.data.basic_info.typeId
|
||||
|
||||
this.dialogVisible = true
|
||||
},
|
||||
async revoke(o) {
|
||||
const str = o.isConjoin === 0 ? '您确定要撤销吗?' : '此操作将撤销合并的提案,您确定要撤销吗?'
|
||||
const confirm = await this.$confirm(str, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/revoke', {proposalId: o.id})
|
||||
if (resp.code === 0) {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}
|
||||
}
|
||||
},
|
||||
vChange(value) {
|
||||
if (value.newValue === 'index' && this.multipleSelection.length > 0 && this.mergeIndex === 1) {
|
||||
this.dialogVisible = true
|
||||
}
|
||||
},
|
||||
openDialog(item) {
|
||||
this.openView(item)
|
||||
this.dialogVisible = false
|
||||
},
|
||||
mergeAudit() {
|
||||
this.diatitle = '并案审核'
|
||||
this.buttonIndex = 1
|
||||
if (this.multipleSelection && this.multipleSelection.length === 0) {
|
||||
this.$notify.warning({title: '警告', message: '并案审核需要先在多选框中选择提案'});
|
||||
return
|
||||
}
|
||||
this.mergeIndex = 1
|
||||
this.formData.typeId = this.multipleSelection[0].typeId
|
||||
this.proTableData = this.multipleSelection
|
||||
this.dialogVisible = true
|
||||
},
|
||||
handleSelectionChange(row) {
|
||||
this.multipleSelection = row;
|
||||
},
|
||||
resultCodeChange(code) {
|
||||
if (code === "opinion") {
|
||||
this.$set(this.formData, "opinion", "经提案委员会审理,该提案作为意见建议。")
|
||||
} else if (code === "notGive") {
|
||||
this.$set(this.formData, "opinion", "经提案委员会审理,该提案不予立案。")
|
||||
} else {
|
||||
this.$set(this.formData, "opinion", "经提案委员会审理,该提案确定立案。")
|
||||
}
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'audit') {
|
||||
this.openAudit(data.id, data)
|
||||
}
|
||||
},
|
||||
doExport(row) {
|
||||
window.open(loc() + "/doExport?proposalId=" + row.id)
|
||||
},
|
||||
async openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openAudit(id, pro_data) {
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
this.buttonIndex = 0
|
||||
this.formData.proposalId = id
|
||||
this.formData.typeId = pro_data.typeId
|
||||
this.$set(this.formData, "determineTypeCode", "ordinary")
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
|
||||
},
|
||||
async doAudit() {
|
||||
let formValid = true
|
||||
this.$refs["auditForm"].validate(async valid => formValid = valid)
|
||||
if (formValid) {
|
||||
const exist = this.formData.helpUnit.find(v => {
|
||||
return v === this.formData.hostUnit
|
||||
})
|
||||
if (exist) {
|
||||
this.$notify.warning({title: '警告', message: '协办单位中存在您已选择的主办单位!请检查确认后提交'});
|
||||
return
|
||||
}
|
||||
let msg = ''
|
||||
if (this.formData.resultCode === 'notGive') {
|
||||
msg = '该提案不予立案,提交后将完结,请确认!'
|
||||
} else {
|
||||
if (this.multipleSelection.length > 1) {
|
||||
msg = '将有(' + this.multipleSelection.length + ')个提案进行并案处理,请确认!'
|
||||
} else {
|
||||
msg = '请确认是否提交该提案!'
|
||||
}
|
||||
}
|
||||
|
||||
// switch (this.formData.resultCode) {
|
||||
// case "notGive": {
|
||||
// msg = '该提案不予立案,提交后将完结,请确认!'
|
||||
// break
|
||||
// }
|
||||
// default: {
|
||||
// msg = '将有(' + this.multipleSelection.length + ')个提案进行并案处理,请确认!'
|
||||
// }
|
||||
// }
|
||||
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.submitDisabled = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const url = loc() + (this.editRow.stateCode !== undefined && this.editRow.stateCode > 300 ? '/edit' : '/audit')
|
||||
|
||||
let proposalIds = ''
|
||||
let auditType = ''
|
||||
// 0 => 进行单个审核操作
|
||||
// 1 => 进行并案审核操作
|
||||
// 2 => 进行编辑操作
|
||||
if (this.buttonIndex === 0) {
|
||||
auditType = 'one'
|
||||
proposalIds = JSON.stringify([this.formData.proposalId])
|
||||
} else if (this.buttonIndex === 1) {
|
||||
auditType = 'many'
|
||||
proposalIds = JSON.stringify(this.multipleSelection.map(o => {
|
||||
return o.id
|
||||
}))
|
||||
} else {
|
||||
auditType = this.editRow.isConjoin === 0 ? 'one' : 'many'
|
||||
proposalIds = JSON.stringify(this.proTableData.map(o => o.id))
|
||||
}
|
||||
const resp = await $.post(url, {
|
||||
audit: JSON.stringify(this.formData),
|
||||
resultCode: this.formData.resultCode,
|
||||
typeId: this.formData.typeId,
|
||||
hostUnit: this.formData.hostUnit,
|
||||
helpUnit: JSON.stringify(this.formData.helpUnit),
|
||||
sign: this.formData.sign,
|
||||
determineTypeCode: this.formData.determineTypeCode,
|
||||
proposalIds: proposalIds,
|
||||
auditType: auditType,
|
||||
})
|
||||
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.dialogVisible = false
|
||||
this.submitDisabled = false
|
||||
}).catch()
|
||||
}
|
||||
},
|
||||
async getProposalUndertakeAndLeaderInfo() {
|
||||
const resp = await $.get(loc() + '/getUnderTakeAndLeader')
|
||||
return resp.code === 0 ? resp.data : []
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.resultOptions = await getDictByCode("proposal_result")
|
||||
this.unitOptions = await this.getProposalUndertakeAndLeaderInfo()
|
||||
// this.unitOptions = await proposal.getProposalUndertake()
|
||||
this.config = await proposal.getProposalConfig()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.noFilingReason = this.config.noFilingReason
|
||||
await proposal.initData(this)
|
||||
|
||||
},
|
||||
watch: {}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,263 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style></style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch" title="复核">
|
||||
</proposal-search>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="提案委员会审查">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
{{row.determineTypeCode=='emphasis'?'重点':'普通'}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
{{row.isConjoin?'是':'否'}}
|
||||
</template>
|
||||
<!-- <template scope="{row}" v-else-if="column.prop==='laLevelName'">
|
||||
{{row.laLevelName}}
|
||||
</template>-->
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openAudit(row)" size="mini" type="primary"
|
||||
v-if="row.stateCode===proposal.CASE_CHECK">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="提案委员会复核" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="150px" ref="auditForm">
|
||||
<vi-title :title="proTableData.length > 1 ? '并案信息' : '提案信息'"></vi-title>
|
||||
<el-form-item>
|
||||
<el-table :data="proTableData" style="width: 100%"
|
||||
tooltip-effect="dark">
|
||||
<el-table-column align="left" header-align="left" label="提案编号"
|
||||
prop="proposalCode"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人"
|
||||
prop="username"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName"
|
||||
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 label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="二次答复" prop="caseCheckNeedSecondReply">
|
||||
<el-radio-group v-model="formData.caseCheckNeedSecondReply">
|
||||
<el-radio :label="false" border>
|
||||
无需二次答复
|
||||
</el-radio>
|
||||
<el-radio :label="true" border>
|
||||
需要二次答复
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<span class="text-primary ml10" v-if="formData.caseCheckNeedSecondReply">
|
||||
(二次答复只需要主办单位答复)
|
||||
</span>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="领导二次审批" prop="caseCheckNeedSecondAudit"
|
||||
v-if="formData.caseCheckNeedSecondReply==true">
|
||||
<el-radio-group v-model="formData.caseCheckNeedSecondAudit">
|
||||
<el-radio :label="false" border>
|
||||
无需二次审批
|
||||
</el-radio>
|
||||
<el-radio :label="true" border>
|
||||
需要二次审批
|
||||
</el-radio>
|
||||
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button @click="doAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
proTableData: [],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(800)
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: 'underTakeNames', label: '承办单位', sortable: true},
|
||||
{prop: 'isConjoin', label: '是否并案', sortable: true},
|
||||
{prop: 'determineTypeCode', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
caseCheckNeedSecondReply: false,
|
||||
caseCheckNeedSecondAudit: null
|
||||
},
|
||||
formRules: {
|
||||
caseCheckNeedSecondReply: [{required: true, message: '请选择', trigger: ['blur', 'change']}],
|
||||
caseCheckNeedSecondAudit: [{required: true, message: '请选择', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openAudit(row) {
|
||||
const {id} = row
|
||||
this.formData.proposalId = id
|
||||
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)
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
},
|
||||
async doAudit() {
|
||||
let formValid = true
|
||||
this.$refs["auditForm"].validate(async valid => formValid = valid)
|
||||
if (formValid) {
|
||||
const confirm = await this.$confirm('您是否提交该提案的审查内容,请确认?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/audit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
caseCheckNeedSecondReply: this.formData.caseCheckNeedSecondReply,
|
||||
caseCheckNeedSecondAudit: this.formData.caseCheckNeedSecondAudit,
|
||||
sign: this.formData.sign
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$notify.success(resp.msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$notify.error(resp.msg)
|
||||
}
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,295 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style></style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="委员查阅提案">
|
||||
<template #func>
|
||||
<el-button @click="doSend()" icon="el-icon-message" size="small" type="primary"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('tamange')}">
|
||||
发送消息
|
||||
</el-button>
|
||||
<el-button @click="doExport()" icon="el-icon-message" size="small" type="primary"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('tamange')}">
|
||||
导出
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span class="text-success" v-if="row.stateCode!=proposal.DELEGATION">已审核</span>
|
||||
<span class="text-primary" v-if="row.stateCode==proposal.DELEGATION">待审核</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">
|
||||
查阅
|
||||
</el-button>
|
||||
<el-button @click="doRecall(row)" size="mini" type="primary" v-if="row.isOpinion">
|
||||
撤回
|
||||
</el-button>
|
||||
<el-button @click="openAudit(row.id)" size="mini"
|
||||
type="primary"
|
||||
v-if="row.isOpinion==0&&[proposal.CASE].includes(row.stateCode)">
|
||||
提出意见
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
<template #edit>
|
||||
<proposal-info handle label="委员会成员意见" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="成员意见"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="立案意见" prop="other">
|
||||
<el-radio-group v-model="formData.other">
|
||||
<el-radio :label="item.code" border v-for="item in resultOptions">{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="formData.other === 'determine'">
|
||||
<el-radio label="emphasis" v-model="formData.determineTypeCode">重点
|
||||
</el-radio>
|
||||
<el-radio label="ordinary" v-model="formData.determineTypeCode">普通
|
||||
</el-radio>
|
||||
</template>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item v-if="isSign()" prop="sign" label="签  字">
|
||||
<sign prefix="proposal" :qz.sync="formData.sign"></sign>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(false)" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
const that = this
|
||||
const isShow = (e) => {
|
||||
console.log(e)
|
||||
}
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'caseNum', label: '立案票数', sortable: true},
|
||||
{prop: 'emphasisNum', label: '重点提案票数', sortable: true},
|
||||
{prop: 'ordinaryNum', label: '普通提案票数', sortable: true},
|
||||
{prop: 'opinionNum', label: '意见建议票数', sortable: true},
|
||||
{prop: 'notGiveNum', label: '不予立案票数', sortable: true},
|
||||
|
||||
|
||||
],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(proposal.CASE)
|
||||
},
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: '',
|
||||
other: 'determine'
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: false, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
other: [{required: false, message: '请选择立案意见', trigger: ['blur', 'change']}]
|
||||
},
|
||||
resultOptions: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doRecall(row) {
|
||||
const confirm = await this.$confirm('此操作将会撤回您答复的内容, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doRecall", {id: row.id})
|
||||
requestLaterFun(resp, () => {
|
||||
this.pageData()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
},
|
||||
async doSend() {
|
||||
const confirm = await this.$confirm('此操作将会给提案委员会发送消息, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doSend", {meetingId: this.pageForm.meetingId})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
},
|
||||
doExport() {
|
||||
window.open(loc() + '/doExport/' + this.pageForm.meetingId + "/" + JSON.stringify(this.tableColumns))
|
||||
},
|
||||
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openAudit(id) {
|
||||
this.formData.proposalId = id
|
||||
this.$set(this.formData, "other", "determine")
|
||||
this.$set(this.formData, "determineTypeCode", "ordinary")
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit(flag) {
|
||||
this.submitDisabled = true
|
||||
this.$refs["auditForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/putSuggestion", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
sign: this.formData.sign,
|
||||
proposalId: this.formData.proposalId,
|
||||
flag: flag
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
this.resultOptions = await getDictByCode("proposal_result")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,479 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pro_table .cell {
|
||||
width: 100% !important;
|
||||
font-size: 14px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="提案委员会确认承办单位">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin === 1 ? 'color: #236eb4' : ''">{{row.isConjoin === 1 ? '是' : '否'}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='underTakeOpinion'">
|
||||
<template v-if="row.stateCode>proposal.CASEUNIT">
|
||||
<i class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
<template v-else>
|
||||
<i class="fa fa-circle text-danger ml5" v-if="row.canNotNum>0"></i>
|
||||
<i class="fa fa-circle text-success ml5" v-else></i>
|
||||
</template>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span v-if="row.stateCode!=proposal.CASEUNIT">已审核</span>
|
||||
<span v-if="row.stateCode==proposal.CASEUNIT">待审核</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{!row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openAudit(row)" size="mini" type="primary"
|
||||
v-if="[proposal.CASEUNIT].includes(row.stateCode)">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="提案委员会确认承办单位" ref="audit">
|
||||
<template #handle>
|
||||
|
||||
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<div style="margin-bottom: 20px" v-if="clickRow.isConjoin === 1">
|
||||
|
||||
<vi-title style="margin-bottom: 16px !important;" title="并案信息"></vi-title>
|
||||
<el-form-item>
|
||||
<el-table :data="proTableData"
|
||||
style="width: 100%">
|
||||
<el-table-column align="left" header-align="left" label="提案编号"
|
||||
prop="proposalCode"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人"
|
||||
prop="username"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span style="color: #236eb4;">{{row.proposalName}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="delProposal(scope.row, scope.$index)" size="mini"
|
||||
type="danger"
|
||||
v-if="clickRow.id !== scope.row.id">移除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</div>
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="立案结果" prop="resultCode">
|
||||
<el-radio-group @change="resultCodeChange" v-model="formData.resultCode">
|
||||
<el-radio :label="item.code" border v-for="item in resultOptions">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="formData.resultCode === 'determine'">
|
||||
<el-radio label="emphasis" v-model="formData.determineTypeCode">重点</el-radio>
|
||||
<el-radio label="ordinary" v-model="formData.determineTypeCode">普通</el-radio>
|
||||
</template>
|
||||
<!--<el-tag>
|
||||
{{resultName}}
|
||||
{{formData.determineTypeName?'('+formData.determineTypeName+')':''}}
|
||||
</el-tag>-->
|
||||
|
||||
<!-- <el-tag v-if="formData.determineTypeName">-->
|
||||
<!-- {{formData.determineTypeName}}-->
|
||||
<!-- </el-tag>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案类型" prop="typeId">
|
||||
<el-select clearable filterable placeholder="提案类型"
|
||||
v-model="formData.typeId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id"
|
||||
v-for="item in typeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row v-if="formData.resultCode!='notGive'">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="主办单位" prop="hostUnit">
|
||||
<el-select clearable filterable placeholder="请选择主办单位"
|
||||
v-model="formData.hostUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="主办单位领导" v-if="formData.hostUnit">
|
||||
<el-input readonly v-model="hostUnitLeader"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协办单位" prop="helpUnit">
|
||||
<el-select clearable filterable multiple placeholder="请选择协办单位"
|
||||
v-model="formData.helpUnit">
|
||||
<el-option :key="item.id"
|
||||
:label="item.unitName"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协办单位领导" v-if="formData.helpUnit && formData.helpUnit.length>0">
|
||||
<el-input readonly v-model="helpUnitLeader"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="理由列表" prop="noFilingReason" v-if="formData.resultCode=='notGive'">
|
||||
<el-select @change="formData.opinion = '';formData.opinion=formData.noFilingReason"
|
||||
clearable filterable placeholder="请选择理由列表"
|
||||
v-model="formData.noFilingReason">
|
||||
<el-option :key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
v-for="item in noFilingReason">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写工作会的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
computed: {
|
||||
resultName() {
|
||||
const result = this.resultOptions.find(v => v.code === this.formData.resultCode)
|
||||
return result ? result.name : ''
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
noFilingReason: [],
|
||||
typeOptions: [],
|
||||
clickRow: {},
|
||||
proTableData: [],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(400)
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: '是否并案', sortable: true},
|
||||
{prop: 'masterUnitName', label: '主办单位', sortable: true},
|
||||
{prop: 'masterLeaderUserName', label: '分管校领导', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'underTakeOpinion', label: '承办意见', sortable: false},
|
||||
{prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
resultOptions: [],
|
||||
unitOptions: [],
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
resultCode: 'determine',
|
||||
hostUnit: '',
|
||||
helpUnit: '',
|
||||
opinion: '',
|
||||
typeId: '',
|
||||
determineTypeCode: ''
|
||||
},
|
||||
formRules: {
|
||||
hostUnit: [{required: true, message: '请选择主办单位', trigger: ['blur', 'change']}],
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
hostUnitLeader() {
|
||||
const hostUnit = this.unitOptions.find(v => v.id === this.formData.hostUnit)
|
||||
return hostUnit ? hostUnit.leader : '无'
|
||||
},
|
||||
helpUnitLeader() {
|
||||
const helpUnits = this.unitOptions.filter(v => this.formData.helpUnit.includes(v.id)).map(v => {
|
||||
return v.leader ? v.leader : '无'
|
||||
})
|
||||
return helpUnits && helpUnits.length > 0 ? helpUnits.toString() : '无'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
resultCodeChange(code) {
|
||||
if (code === "opinion") {
|
||||
this.$set(this.formData, "opinion", "经提案委员会审理,该提案作为意见建议。")
|
||||
} else if (code === "notGive") {
|
||||
this.$set(this.formData, "opinion", "经提案委员会审理,该提案不予立案。")
|
||||
} else {
|
||||
this.$set(this.formData, "opinion", "经提案委员会审理,该提案确定立案。")
|
||||
}
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
switch (type) {
|
||||
case 'view':
|
||||
this.openView(data)
|
||||
break
|
||||
case 'audit':
|
||||
this.openAudit(data)
|
||||
break
|
||||
}
|
||||
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.clickRow = row
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
const {id, resultCode, typeId} = row
|
||||
this.formData.proposalId = id
|
||||
this.formData.resultCode = resultCode
|
||||
this.formData.determineTypeCode = row.determineTypeCode
|
||||
this.$set(this.formData, "typeId", typeId)
|
||||
if (row.laLevelName) {
|
||||
this.$set(this.formData, 'determineTypeName', row.laLevelName)
|
||||
}
|
||||
|
||||
|
||||
const underTakeRes = await $.get(loc() + '/queryUnderTakeByProposalId', {proposalId: id})
|
||||
const underTakes = underTakeRes.data
|
||||
|
||||
if (underTakes && underTakes.length > 0) {
|
||||
this.$set(this.formData, 'hostUnit', underTakes.find(v => v.undertakeType === 1).replyUnitId)
|
||||
this.$set(this.formData, 'helpUnit', underTakes.filter(v => v.undertakeType === 2).map(v => v.replyUnitId))
|
||||
}
|
||||
|
||||
this.resultCodeChange(row.resultCode)
|
||||
const resp = await $.get('/platform/proposal/common/findConjoinProposal', {proposalId: row.id})
|
||||
this.proTableData = resp.data.filter(o => {
|
||||
return o.id !== row.id
|
||||
})
|
||||
this.proTableData.unshift(row)
|
||||
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
},
|
||||
async delProposal(row, index) {
|
||||
if (this.proTableData.length <= 2) {
|
||||
this.$notify.warning({title: '警告', message: '并案审核时提案个数最少为2个'});
|
||||
return
|
||||
}
|
||||
const confirm = await this.$confirm('此操作将移除该提案的并案信息', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
this.proTableData = this.proTableData.filter(o => o.id !== row.id)
|
||||
}
|
||||
},
|
||||
async doAudit() {
|
||||
let formValid = true
|
||||
this.$refs["auditForm"].validate(valid => {
|
||||
formValid = valid
|
||||
})
|
||||
|
||||
if (formValid) {
|
||||
if (this.formData.resultCode !== 'notGive') {
|
||||
|
||||
|
||||
if (this.formData.helpUnit.some(v => v === this.formData.hostUnit)) {
|
||||
this.$alert('协办单位中存在您已选择的主办单位,请检查确认无误后再提交!', '提示', {
|
||||
confirmButtonText: '确定'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
const checkRes = await $.get(loc() + '/checkUnderTakeUser', {hostUnit: this.formData.hostUnit})
|
||||
if (!checkRes.data) {
|
||||
this.$alert('请先设置主办单位分管校领导或答复人后再进行提交!', '提示', {
|
||||
confirmButtonText: '确定'
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
let proposalIds = JSON.stringify(this.proTableData.map(o => o.id))
|
||||
this.$confirm('最终确定立案和承办单位,不可撤回请确认!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
|
||||
this.submitDisabled = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + '/audit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
resultCode: this.formData.resultCode,
|
||||
typeId: this.formData.typeId,
|
||||
hostUnit: this.formData.hostUnit,
|
||||
helpUnit: JSON.stringify(this.formData.helpUnit),
|
||||
sign: this.formData.sign,
|
||||
flag: this.formData.flag,
|
||||
determineTypeCode: this.formData.determineTypeCode,
|
||||
proposalIds: proposalIds
|
||||
})
|
||||
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()
|
||||
|
||||
}
|
||||
},
|
||||
async getProposalUndertakeAndLeaderInfo() {
|
||||
const resp = await $.get('/platform/proposal/transact/case/case/getUnderTakeAndLeader')
|
||||
return resp.code === 0 ? resp.data : []
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
this.resultOptions = await getDictByCode("proposal_result")
|
||||
// this.unitOptions = await proposal.getProposalUndertake()
|
||||
this.unitOptions = await this.getProposalUndertakeAndLeaderInfo()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.config = await proposal.getProposalConfig()
|
||||
this.noFilingReason = this.config.noFilingReason
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,206 @@
|
||||
<!--#
|
||||
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"></proposal-search>
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="审核状态" width="80px">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isAllPass">已审核</span>
|
||||
<span class="text-primary" v-else>待审核</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'audit',data:row}"
|
||||
v-if="!row.isAllPass">
|
||||
审核
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</proposal-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="提案委员会审核" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<template v-for="item in formData.organizers">
|
||||
<el-form-item :label="item.unitName">
|
||||
<el-radio-group v-model="item.isCommitteePass">
|
||||
<el-radio-button :label="true">审核通过</el-radio-button>
|
||||
<el-radio-button :label="false">返回修改</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="item.opinion"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit()" type="primary">提 交
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isSign: false,
|
||||
submitDisabled: false,
|
||||
organizerList: [],
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
organizers: [],
|
||||
sign: ''
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'audit') {
|
||||
this.openAudit(data)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.formData.proposalId = row.id
|
||||
let data = await proposal.findOrganizer(row.id)
|
||||
data.forEach(v => {
|
||||
v.isCommitteePass = true
|
||||
v.opinion = ''
|
||||
})
|
||||
this.formData.organizers = data
|
||||
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit() {
|
||||
this.$refs["auditForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
for (let i in this.formData.organizers) {
|
||||
if (!this.formData.organizers[i].opinion) {
|
||||
this.$notify.warning({title: '警告', message: '请填写审核意见'});
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
this.submitDisabled = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(this.auditUrl + "/doAudit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
organizers: JSON.stringify(this.formData.organizers),
|
||||
sign: this.formData.sign
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await initData(proposal.COMMITTEE_REVIEW, this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,802 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.item-button .el-button {
|
||||
padding: 12px 30px;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :has_add="false" :page="pageForm" @add="openAdd"
|
||||
@import="openImport" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="我的提案">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :loading="tableLoading" :size="tableSize" highlight-current-row
|
||||
style="width: 100%;">
|
||||
<el-table-column
|
||||
label="序号"
|
||||
type="index" width="50">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:sortable="column.sortable"
|
||||
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>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='stateId'">
|
||||
<vi-table-state :state="row"></vi-table-state>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="400px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openSeconded(row.id,row.proposalName)" size="mini" type="primary"
|
||||
v-if="[proposal.UNSUBMIT,proposal.INVIRTE,proposal.DELEGATION_BACK,].includes(row.stateCode)&&row.mannerCode=='W01'">
|
||||
邀请附议人
|
||||
</el-button>
|
||||
<el-button @click="doSubmit(row)" size="mini" type="primary"
|
||||
v-if="showSubmitBtn(row)">
|
||||
提交
|
||||
</el-button>
|
||||
<el-button @click="openView(row)" size="mini" type="primary">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button @click="openEdit(row.id)" size="mini" type="primary"
|
||||
v-if="[proposal.UNSUBMIT].includes(row.stateCode)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button @click="doDelete(row)" size="mini" type="primary"
|
||||
v-if="[proposal.UNSUBMIT].includes(row.stateCode)&&row.stateCode!==proposal.FINISH">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-input clearable placeholder="请输入姓名或者工号" v-model="pageForm2.searchKeyword">
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select @change="jdhChange" clearable filterable placeholder="请选择届次" v-model="pageForm2.jdhid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in jdhList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="请选择代表团"
|
||||
v-model="pageForm2.dbtid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.dbtname"
|
||||
:value="item.id"
|
||||
v-for="item in delegations">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select
|
||||
@change="unitList = allUnitList.filter(v => pageForm2.unionid?v.unionid === pageForm2.unionid:true)"
|
||||
clearable filterable placeholder="请选择工会"
|
||||
v-model="pageForm2.unionid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id"
|
||||
v-for="item in unionList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择单位" v-model="pageForm2.unitid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group tool-button ">
|
||||
<el-radio-group @change="queryDb" v-model="pageForm2.isAudit">
|
||||
<el-radio-button :label="true">已邀请 <span style="color: red">({{secondedNum}})</span>
|
||||
</el-radio-button>
|
||||
<el-radio-button :label="false">待邀请</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="queryDb" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="邀请附议人">
|
||||
|
||||
<template #label_end>
|
||||
<el-button @click="addSeconded(0)" class="ml20" plain type="primary" v-if="!pageForm2.isAudit">
|
||||
批量邀请
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
<template #func>
|
||||
<span>
|
||||
温馨提醒:请选择
|
||||
<span style="color:red;font-size: 16px;font-weight: bold">
|
||||
{{config.seconderNum ? config.seconderNum : 0}}
|
||||
</span>
|
||||
位附议人,否则无法提交提案!
|
||||
</span>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="dBTableData" :size="tableSize" @selection-change="handleSelectionChange"
|
||||
class="vi-table" ref="multipleTable" row-key="id" style="width: 100%"
|
||||
v-loading="dBTableDataLoading">
|
||||
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm2.pageNumber - 1) * pageForm2.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in dBTableColumns"
|
||||
>
|
||||
<template scope="{row:{isAgree}}" v-if="column.prop=='isAgree'">
|
||||
<template v-if="typeof isAgree === 'undefined'">
|
||||
<span class="text-success">待邀请</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span class="text-info" v-if="isAgree == null">未附议</span>
|
||||
<span class="text-danger" v-if="isAgree == false">不通过</span>
|
||||
<span class="text-success" v-if="isAgree == true">通过</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" v-if="!pageForm2.isAudit"
|
||||
width="100">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="addSeconded(row.id)" size="mini">邀请</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-row class="el-pagination-container" style="margin-bottom: 0px">
|
||||
<el-pagination
|
||||
:current-page="pageForm2.pageNumber"
|
||||
:page-size="pageForm2.pageSize"
|
||||
:page-sizes="[5,10, 20, 30, 50]"
|
||||
:total="pageForm2.totalCount"
|
||||
@current-change="pageNumberChange2"
|
||||
@size-change="pageSizeChange2"
|
||||
layout="total, sizes, prev, pager, next">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="importVisible"
|
||||
title="提案导入"
|
||||
width="50%"
|
||||
>
|
||||
<el-timeline>
|
||||
<el-timeline-item placement="top" timestamp="下载模板">
|
||||
<el-card>
|
||||
<el-button
|
||||
@click="location.href='/platform/basics/downloadTemplate?filePath=Proposal/proposal.xlsx&fileName=教职工代表大会提案表.xlsx'"
|
||||
icon="el-icon-download" size="medium"
|
||||
style="width: 200px"
|
||||
type="">下载模板
|
||||
</el-button>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
<el-timeline-item placement="top" timestamp="上传文件">
|
||||
<el-card>
|
||||
<el-upload
|
||||
:auto-upload="false"
|
||||
:file-list="importData.fileList"
|
||||
:limit="1"
|
||||
:on-change="(file, fileList) => {
|
||||
importData.fileList = fileHandleChange(file, fileList,{type:['xlsx']})
|
||||
}"
|
||||
:on-remove="(file, fileList) => {
|
||||
importData.fileList = fileHandleRemove(file, fileList)
|
||||
}"
|
||||
name="file"
|
||||
ref="upload">
|
||||
<el-button icon="el-icon-upload" size="medium" style="width: 200px" type="">选择文件
|
||||
</el-button>
|
||||
</el-upload>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button :disabled="importLoading" @click="importVisible = false">取 消</el-button>
|
||||
<el-button :loading="importLoading" @click="doImport" type="primary">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
:close-on-click-modal="false"
|
||||
:visible.sync="composeDialogVisible"
|
||||
title="温馨提醒" width="30%"
|
||||
|
||||
>
|
||||
<div v-html="tipsContent"></div>
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="composeDialogVisible = false" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("/platform/proposal/include/proposal_include.js"){}#-->
|
||||
|
||||
let E = window.wangEditor
|
||||
let briefEditor, measuresEditor = null
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
let validBrief = (rule, value, callback) => {
|
||||
if (!this.formData.brief || !dd3s.html2txt(this.formData.brief)) {
|
||||
callback(new Error('请填写提案内容、案由和案据'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
let validMeasures = (rule, value, callback) => {
|
||||
if (!this.formData.measures || !dd3s.html2txt(this.formData.measures)) {
|
||||
callback(new Error('请填写提案实施的可行性建议'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
composeDialogVisible: false,
|
||||
importLoading: false,
|
||||
importVisible: false,
|
||||
importData: {},
|
||||
secondedNum: 0,
|
||||
jdhList: [],
|
||||
delegations: [],
|
||||
unitList: [],
|
||||
allUnitList: [],
|
||||
unionList: [],
|
||||
dBTableData: [],
|
||||
dbUserSelection: [],
|
||||
dBTableDataLoading: false,
|
||||
secondedTableData: [],
|
||||
secondedDialog: false,
|
||||
secondedFormData: {users: []},
|
||||
delegationOptions: [],
|
||||
committeeOptions: [],
|
||||
unitOptions: [],
|
||||
typeOptions: [],
|
||||
mannerOptions: [],
|
||||
meetingOptions: [],
|
||||
pageForm2: {
|
||||
searchName: 'u.username',
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
isAudit: false,
|
||||
jdhid: '',
|
||||
dbtid: '',
|
||||
unionid: '',
|
||||
unitid: ''
|
||||
},
|
||||
|
||||
pageForm: {searchName: 'proposalName'},
|
||||
formRules: {
|
||||
username: [{required: true, message: '请填写提案人', trigger: ['blur', 'change']}],
|
||||
createTime: [{required: true, message: '请填写提案时间', trigger: ['blur', 'change']}],
|
||||
proposalName: [{required: true, message: '请填写提案名称', trigger: ['blur', 'change']}],
|
||||
mannerCode: [{required: true, message: '请选择提案方式', trigger: ['blur', 'change']}],
|
||||
delegationId: [{required: true, message: '请选择所属代表团', trigger: ['blur', 'change']}],
|
||||
teacherMeetingId: [{required: true, message: '请选择所属教代会', trigger: ['blur', 'change']}],
|
||||
committeeId: [{required: true, message: '请选择所属委员会', trigger: ['blur', 'change']}],
|
||||
typeId: [{required: true, message: '请选择提案类型', trigger: ['blur', 'change']}],
|
||||
implementUnitId: [{required: true, message: '请选择建以落实部门', trigger: ['blur', 'change']}],
|
||||
brief: [{validator: validBrief, trigger: ['blur', 'change']}],
|
||||
measures: [{validator: validMeasures, trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDisabled: false,
|
||||
userOptions: [],
|
||||
userLoading: false,
|
||||
config: {},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalCode', label: '提案编号', sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', disabled: true},
|
||||
{prop: 'createTime', label: '提案时间', sortable: true},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
{prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'meetingName', label: '届次'},
|
||||
{prop: 'stateId', label: '提案状态', sortable: true},
|
||||
],
|
||||
dBTableColumns: [
|
||||
{prop: 'loginname', label: '工号', sortable: true},
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'sex', label: '性别', sortable: true},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'dbUnitName', label: '所属单位'},
|
||||
{prop: 'dbUnionName', label: '所属工会'},
|
||||
{prop: 'jdhAllName', label: '届次', sortable: true},
|
||||
{prop: 'dbtName', label: '代表团', sortable: true},
|
||||
{prop: 'isAgree', label: '附议状态', sortable: true},
|
||||
],
|
||||
proposalConfig: {},
|
||||
tipsContent: ''
|
||||
}
|
||||
},
|
||||
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'),
|
||||
},
|
||||
methods: {
|
||||
showSubmitBtn(row) {
|
||||
const {alreadySecondedCount, stateCode} = row
|
||||
if (row.mannerCode === 'W01') {
|
||||
if (stateCode !== proposal.INVIRTE) {
|
||||
return false
|
||||
}
|
||||
const {submitMode, seconderNum} = this.proposalConfig
|
||||
if (submitMode === 'AMT' || submitMode === "manual") {
|
||||
return alreadySecondedCount >= seconderNum
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
return stateCode === proposal.UNSUBMIT
|
||||
}
|
||||
|
||||
// [proposal.UNSUBMIT].includes(row.stateCode) && row.mannerCode != 'W01' || (!config.isAutoSubmit && row.mannerCode == 'W01')
|
||||
},
|
||||
openImport() {
|
||||
this.importData = {
|
||||
fileList: []
|
||||
}
|
||||
this.importVisible = true;
|
||||
},
|
||||
doImport() {
|
||||
if (!this.importData.fileList.length) {
|
||||
this.notifyWarning("请选择文件!")
|
||||
return
|
||||
}
|
||||
const data = new FormData();
|
||||
this.importData.fileList.forEach((val) => {
|
||||
data.append("file", val.raw, val.raw.name);
|
||||
});
|
||||
this.importLoading = true
|
||||
$.ajax({
|
||||
url: loc() + "/importProposal",
|
||||
type: "post",
|
||||
data: data,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: (data) => {
|
||||
if (!data.code) {
|
||||
this.notifySuccess(data.msg);
|
||||
this.pageData();
|
||||
this.importVisible = false
|
||||
} else {
|
||||
this.notifyWarning(data.msg)
|
||||
}
|
||||
this.importLoading = false
|
||||
},
|
||||
error: (data) => {
|
||||
this.notifyWarning("导入失败")
|
||||
this.importLoading = false
|
||||
}
|
||||
});
|
||||
},
|
||||
delSeconded(row) {
|
||||
const {proposalId, seconderId} = row
|
||||
this.$confirm('确定要删除该附议人吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
this.$set(row, "loading", true)
|
||||
const resp = await $.post(loc() + "/deleteSeconder", {proposalId, seconderId});
|
||||
requestLaterMsgFun((vue, resp, async () => {
|
||||
await this.secondedData()
|
||||
}))
|
||||
this.$set(row, "loading", false)
|
||||
|
||||
|
||||
}).catch(() => {
|
||||
this.$set(row, "loading", false)
|
||||
});
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data.id)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data)
|
||||
} else if (type === 'seconded') {
|
||||
this.openSeconded(data)
|
||||
} else if (type === 'submit') {
|
||||
this.doSubmit(data)
|
||||
}
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.formData.delegationId = null
|
||||
this.formData.committeeId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
// this.committeeOptions = await proposal.getCommittee(val)
|
||||
},
|
||||
async secondedData() {
|
||||
const {data} = await $.get(loc() + "/getSecondedData", {proposalId: this.secondedFormData.proposalId})
|
||||
this.secondedTableData = data
|
||||
},
|
||||
async addSeconded(id) {
|
||||
const {proposalName, proposalId} = this.pageForm2
|
||||
if (id === 0 && this.dbUserSelection.length === 0) {
|
||||
this.$message.warning('请先选择附议人后再点击邀请按钮')
|
||||
return
|
||||
}
|
||||
|
||||
if (id != 0) this.dbUserSelection = [].concat(id)
|
||||
let aa = "请确认所选代表是否作为本提案的附议人?"
|
||||
if (this.secondedNum >= this.config.seconderNum) aa = "您已邀请了" + this.secondedNum + " 名附议人,是否继续邀请?"
|
||||
const confirm = await this.$confirm(aa + '确定后会有信息通知!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post(loc() + "/addSeconded", {
|
||||
proposalId: proposalId,
|
||||
proposalName: proposalName,
|
||||
users: JSON.stringify(this.dbUserSelection),
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: '邀请附议人成功'});
|
||||
this.$refs.multipleTable.clearSelection();
|
||||
this.pageForm2.searchKeyword = ''
|
||||
this.doSearch()
|
||||
this.queryDb()
|
||||
this.getProposalSecondedNum()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
|
||||
})
|
||||
}
|
||||
/* if (this.secondedFormData.users.length === 0) {
|
||||
this.$message.warning('请先选择附议人后再点击邀请按钮')
|
||||
return
|
||||
}
|
||||
|
||||
this.$confirm('确认邀请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.subDisabled = true
|
||||
const {proposalId, users, proposalName} = this.secondedFormData
|
||||
const resp = await $.post(loc() + "/addSeconded", {
|
||||
proposalId: proposalId,
|
||||
proposalName: proposalName,
|
||||
users: JSON.stringify(users)
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: '邀请附议人成功'});
|
||||
this.userOptions = []
|
||||
this.secondedFormData.users = []
|
||||
this.secondedData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.subDisabled = false
|
||||
})
|
||||
}).catch(() => {
|
||||
|
||||
});*/
|
||||
},
|
||||
async queryUser(proposalId, query) {
|
||||
const {data} = await $.get(loc() + "/queryDelegate", {proposalId, query})
|
||||
return data
|
||||
},
|
||||
async userRemoteMethod(query) {
|
||||
if (query) {
|
||||
this.userLoading = true
|
||||
const arr = await this.queryUser(this.secondedFormData.proposalId, query)
|
||||
this.userOptions = this.userOptions.filter(v => {
|
||||
return this.secondedFormData.users.includes(v.id)
|
||||
}).concat(arr.filter(v => {
|
||||
return !this.secondedFormData.users.includes(v.id)
|
||||
}));
|
||||
|
||||
this.userLoading = false
|
||||
}
|
||||
},
|
||||
pageNumberChange2(val) {
|
||||
this.pageForm2.pageNumber = val;
|
||||
this.queryDb();
|
||||
},
|
||||
pageSizeChange2(val) {
|
||||
this.pageForm2.pageSize = val;
|
||||
this.queryDb();
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.unionList = await getUnions(val)
|
||||
},
|
||||
async jdhChange(val) {
|
||||
this.delegations = await getDbt(val)
|
||||
},
|
||||
async queryDb() {
|
||||
const {jdhid, dbtid, unionid, unitid, proposalId} = this.pageForm2
|
||||
const data = await $.get(loc() + "/queryDb", {
|
||||
...this.pageForm2,
|
||||
pageForm2: this.pageForm2,
|
||||
proposalId: proposalId,
|
||||
jdhid: jdhid,
|
||||
dbtid: dbtid,
|
||||
unionid: unionid,
|
||||
unitid: unitid
|
||||
})
|
||||
sublime.closeLoadingbar();
|
||||
this.dBTableDataLoading = false
|
||||
if (data.code == 0) {
|
||||
this.dBTableData = data.data.list;
|
||||
// if (data.data.list[0].secondedNum != undefined) {
|
||||
// this.secondedNum = data.data.list[0].secondedNum
|
||||
// }
|
||||
this.pageForm2.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
},
|
||||
async getProposalSecondedNum() {
|
||||
const resp = await $.get(loc() + '/getProposalSecondedNum', {proposalId: this.pageForm2.proposalId})
|
||||
this.secondedNum = resp.data
|
||||
},
|
||||
async openSeconded(id, proposalName) {
|
||||
this.pageForm2.proposalId = id
|
||||
this.pageForm2.proposalName = proposalName
|
||||
await this.queryDb()
|
||||
await this.getProposalSecondedNum()
|
||||
this.$refs.guava.public()
|
||||
this.composeDialogVisible = true
|
||||
/* this.secondedFormData = {
|
||||
proposalId: id,
|
||||
proposalName: proposalName,
|
||||
users: [],
|
||||
}
|
||||
this.secondedData()
|
||||
this.userOptions = []
|
||||
this.userLoading = false
|
||||
this.secondedDialog = true*/
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.dbUserSelection = val.map(v => v.id);
|
||||
},
|
||||
doDelete(row) {
|
||||
this.$confirm('此操作将删除【' + row.proposalName + '】提案的所有信息!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await $.post(loc() + "/doDelete", {id: row.id})
|
||||
requestLaterFun(resp, () => {
|
||||
this.pageData()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async doSubmit(row) {
|
||||
this.$confirm('确定要提交此提案吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'info',
|
||||
callback: async (a) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await $.post(loc() + "/doSubmit", {id: row.id, mannerCode: row.mannerCode})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.pageData()
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.warning({title: '警告', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
let data = clone(this.formData)
|
||||
if (data.files) {
|
||||
data.files = JSON.stringify(data.files)
|
||||
}
|
||||
|
||||
const resp = await $.post(loc() + method, {data: JSON.stringify(data), sign: data.sign})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openEdit(id) {
|
||||
window.location.href = "/platform/proposal/transact/writeproposal?proposalId=" + id
|
||||
|
||||
/* const resp = await $.get(loc() + "/findOne", {id})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
if (resp.data.files) {
|
||||
resp.data.files = JSON.parse(resp.data.files)
|
||||
}
|
||||
|
||||
this.formData = resp.data
|
||||
this.$nextTick(() => {
|
||||
$("#briefEditor").html("")
|
||||
$("#measuresEditor").html("")
|
||||
|
||||
briefEditor = new E("#briefEditor")
|
||||
briefEditor.config.onchange = (html) => {
|
||||
this.formData.brief = html
|
||||
}
|
||||
measuresEditor = new E("#measuresEditor")
|
||||
measuresEditor.config.onchange = (html) => {
|
||||
this.formData.measures = html
|
||||
}
|
||||
briefEditor.create()
|
||||
measuresEditor.create()
|
||||
briefEditor.txt.html(resp.data.brief)
|
||||
measuresEditor.txt.html(resp.data.measures)
|
||||
})
|
||||
this.$refs.guava.edit()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})*/
|
||||
},
|
||||
|
||||
async openAdd() {
|
||||
sublime.jumpPagePjax('/platform/proposal/transact/writeproposal')
|
||||
},
|
||||
async initData() {
|
||||
this.config = await proposal.getProposalConfig()
|
||||
this.meetingOptions = await proposal.getOpenMeeting()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.unitOptions = await proposal.getProposalUndertake()
|
||||
this.mannerOptions = await getDictByCode("proposal_manner")
|
||||
this.pageForm.teacherMeetingId = this.meetingOptions ? this.meetingOptions[0].id : null
|
||||
this.delegationOptions = await proposal.getDelegation(this.pageForm.teacherMeetingId)
|
||||
// this.committeeOptions = await proposal.getCommittee(this.pageForm.teacherMeetingId)
|
||||
|
||||
const jgName = await $.post("/platform/proposal/transact/writeproposal/getJgNameByuser")
|
||||
this.committeeOptions = jgName.data
|
||||
//this.jdhList = await getAllJdh()
|
||||
this.jdhList = await getOpenMeeting()
|
||||
if (this.jdhList.length > 0) {
|
||||
this.pageForm2.jdhid = this.jdhList[0].id
|
||||
this.delegations = await getDbt(this.jdhList[0].id)
|
||||
}
|
||||
this.unionList = await getUnion();
|
||||
this.allUnitList = await getUnit();
|
||||
this.unitList = clone(this.allUnitList);
|
||||
},
|
||||
checkOperation() {
|
||||
const operation = GetQueryString("operation")
|
||||
const id = GetQueryString("id")
|
||||
if (operation && operation === 'invite' && id) {
|
||||
this.openSeconded(id, null)
|
||||
}
|
||||
},
|
||||
initTipsContent() {
|
||||
this.tipsContent =
|
||||
`<p> (1)请选择<sapn style="color: red">` + this.proposalConfig.seconderNum + `</sapn>个以上附议人附议,否则,不能进入团长审核环节。</p>` +
|
||||
`<p> (2)如果附议人全部附议后,系统会自动提交该提案;</p>` +
|
||||
`<p> (3)如果该提案已经有<sapn style="color: red">` + this.proposalConfig.seconderNum + `</sapn>个附议人附议,还未全部完成附议,提案人必须手动才能<p>` +
|
||||
`<p> 完成提案提交!一旦邀请附议人成功,系统会发送邀请信息,不可撤销。</p>`
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.initData()
|
||||
this.proposalConfig = await getProposalConfig()
|
||||
this.pageData();
|
||||
if (getLocationVariable("action") === 'add') {
|
||||
this.openAdd()
|
||||
}
|
||||
this.checkOperation()
|
||||
this.initTipsContent()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,254 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="团长审核">
|
||||
<template #func>
|
||||
<!--# if(@shiro.hasRole('sysadmin')){ #-->
|
||||
<el-button @click="oneClickReminder" size="small" type="primary">一键提醒</el-button>
|
||||
<!--# } #-->
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span class="text-success" v-if="row.stateCode!=proposal.DELEGATION">已审核</span>
|
||||
<span class="text-primary" v-if="row.stateCode==proposal.DELEGATION">待审核</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openAudit(row.id)"
|
||||
size="mini"
|
||||
type="primary" v-if="[proposal.DELEGATION].includes(row.stateCode)">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="团长审核" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<!-- <el-button type="danger" :disabled="submitDisabled" @click="doAudit(2)">未通过</el-button>-->
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(0)" type="danger">退回</el-button>
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(1)" type="primary">通 过</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(proposal.DELEGATION)
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
opinion: '同意该提案!',
|
||||
sign: ''
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async oneClickReminder() {
|
||||
const confirm = await this.$confirm('您确定要一键提醒吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm !== 'confirm') return
|
||||
const resp = await $.post(loc() + '/oneClickReminder', {meetingId: this.pageForm.meetingId})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
batchExport() {
|
||||
const {meetingId} = this.pageForm
|
||||
if (!meetingId) {
|
||||
this.$message.warning('请选择教代会届次')
|
||||
return
|
||||
}
|
||||
window.open(loc() + '/batchExport?meetingId=' + meetingId)
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'audit') {
|
||||
this.openAudit(data.id)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openAudit(id) {
|
||||
this.formData.proposalId = id
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit(flag) {
|
||||
this.submitDisabled = true
|
||||
let formValid = true
|
||||
this.$refs["auditForm"].validate((valid) => {
|
||||
formValid = valid
|
||||
})
|
||||
|
||||
if (formValid) {
|
||||
const flagText = flag ? '您是否要通过该提案?' : '该提案将退回至撰写人,修改后需重新邀请附议,请确认是否退回?'
|
||||
this.$confirm(flagText, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
if (!flag) {
|
||||
if (this.formData.opinion === '同意该提案!') {
|
||||
this.formData.opinion = '退回该提案!'
|
||||
}
|
||||
}
|
||||
|
||||
const resp = await $.post(proposal.auditUrl, {
|
||||
audit: JSON.stringify(this.formData),
|
||||
sign: this.formData.sign,
|
||||
flag: flag
|
||||
})
|
||||
|
||||
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(() => {
|
||||
this.submitDisabled = false
|
||||
})
|
||||
|
||||
} else {
|
||||
this.submitDisabled = false
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,469 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style></style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="执委会主任审核">
|
||||
<template #func>
|
||||
|
||||
<el-button @click="doSend()" icon="el-icon-message" size="small" type="primary"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('tamange')}">发送消息
|
||||
</el-button>
|
||||
<el-button @click="batchAudit" icon="el-icon-s-promotion" size="small"
|
||||
type="primary">批量审核
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize"
|
||||
@selection-change="(val)=>{this.batchSelection = val}"
|
||||
@sort-change="pageOrder"
|
||||
align="center" header-align="center">
|
||||
<el-table-column
|
||||
:selectable="(row)=>{return row.executorOpinion==null && row.resultCode!='notGive'}"
|
||||
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
|
||||
: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>
|
||||
<template scope="{row}" v-else-if="column.prop=='laLevelName'">
|
||||
<span>
|
||||
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'? '普通':'否'}}
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin ? 'color: #236eb4' : ''">{{row.isConjoin ? '是' : '否'}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button @click="openAudit(row.id,row)" size="mini"
|
||||
type="primary"
|
||||
v-if="row.executorOpinion==null && row.resultCode!='notGive'">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button @click="rollback(row.id)" size="mini"
|
||||
type="danger"
|
||||
v-if="canRollBack(row)">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
<template #edit>
|
||||
<proposal-info handle label="执委会主任审核" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title :title="proTableData.length > 1 ? '并案信息' : '提案信息'"></vi-title>
|
||||
<el-form-item>
|
||||
<el-table :data="proTableData" style="width: 100%"
|
||||
tooltip-effect="dark">
|
||||
<el-table-column align="left" header-align="left" label="提案编号"
|
||||
prop="proposalCode"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人"
|
||||
prop="username"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName"
|
||||
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 label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <el-form-item prop="other" label="立案建议">
|
||||
<el-radio-group @change="otherChange" v-model="formData.other">
|
||||
<el-radio v-for="item in resultOptions" :label="item.code" border>{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="formData.other === 'determine'">
|
||||
<el-radio label="emphasis" v-model="formData.determineTypeCode">重点</el-radio>
|
||||
<el-radio label="ordinary" v-model="formData.determineTypeCode">普通</el-radio>
|
||||
</template>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button @click="doAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="batchDialog" title="批量批阅" top="50px" width="70%">
|
||||
<vi-title title="已选提案"></vi-title>
|
||||
<el-table :data="batchSelection" max-height="300">
|
||||
<el-table-column label="序号" type="index"></el-table-column>
|
||||
<el-table-column label="提案名称" prop="proposalName"></el-table-column>
|
||||
<el-table-column label="提案人" prop="username"></el-table-column>
|
||||
<el-table-column label="是否并案" prop="isConjoin">
|
||||
<template scope="{row}">
|
||||
<span :style="row.isConjoin ? 'color: #236eb4' : ''">{{row.isConjoin ? '是' : '否'}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="立案结果" prop="resultName"></el-table-column>
|
||||
<el-table-column label="是否重点" prop="laLevelName">
|
||||
<template scope="{row}">
|
||||
<span>
|
||||
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'? '普通':'否'}}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-form :model="formData" :rules="formRules" class="mt20" label-width="120px" ref="auditForm">
|
||||
<vi-title title="执委会建议"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <el-form-item prop="other" label="立案建议">
|
||||
<el-radio-group @change="otherChange" v-model="formData.other">
|
||||
<el-radio v-for="item in resultOptions" :label="item.code" border>{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<template v-if="formData.other === 'determine'">
|
||||
<el-radio label="emphasis" v-model="formData.determineTypeCode">重点</el-radio>
|
||||
<el-radio label="ordinary" v-model="formData.determineTypeCode">普通</el-radio>
|
||||
</template>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button @click="doBatchAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
proTableData: [],
|
||||
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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: '是否并案', sortable: true},
|
||||
{prop: 'laLevelName', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
batchDialog: false,
|
||||
batchSelection: [],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(310)
|
||||
},
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '根据教代会的管理办法之规定,同意',
|
||||
proposalName: '',
|
||||
sign: '',
|
||||
other: '',
|
||||
determineTypeCode: '',
|
||||
proposalCode: '',
|
||||
createUser: ''
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
other: [{required: true, message: '请选择立案意见', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
},
|
||||
resultOptions: [],
|
||||
isNode: false,
|
||||
nextStateCode: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doSend() {
|
||||
const confirm = await this.$confirm('此操作将会给执委会主任发送消息, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doSend", {meetingId: this.pageForm.meetingId})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
},
|
||||
otherChange(code) {
|
||||
if (code === "opinion") {
|
||||
this.$set(this.formData, "opinion", "根据教代会的管理办法之规定,该提案作为意见建议")
|
||||
} else if (code === "notGive") {
|
||||
this.$set(this.formData, "opinion", "根据教代会的管理办法之规定,该提案不予立案")
|
||||
} else {
|
||||
this.$set(this.formData, "opinion", "根据教代会的管理办法之规定,同意该提案")
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openAudit(id, row) {
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
this.formData.proposalId = id
|
||||
this.formData.proposalName = row.proposalName
|
||||
this.formData.other = row.resultCode
|
||||
this.formData.createUser = row.username
|
||||
this.formData.proposalCode = row.proposalCode
|
||||
switch (row.resultCode) {
|
||||
case "notGive": {
|
||||
this.formData.opinion = '根据教代会的管理办法之规定,同意不予立案。'
|
||||
break
|
||||
}
|
||||
case "determine": {
|
||||
this.formData.opinion = '根据教代会的管理办法之规定,同意立案。'
|
||||
break
|
||||
}
|
||||
case "opinion": {
|
||||
this.formData.opinion = '根据教代会的管理办法之规定,同意作为意见建议。'
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.$set(this.formData, 'other', row.resultCode)
|
||||
this.$set(this.formData, 'determineTypeCode', row.determineTypeCode)
|
||||
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)
|
||||
},
|
||||
async batchAudit() {
|
||||
if (this.batchSelection.length === 0) {
|
||||
this.$notify.warning('请选择需要批量审核的记录')
|
||||
return
|
||||
}
|
||||
this.formData.opinion = '根据教代会的管理办法之规定,同意提案委员会意见。'
|
||||
this.batchDialog = true
|
||||
},
|
||||
async doAudit() {
|
||||
const valid = await this.$refs["auditForm"].validate()
|
||||
if (valid) {
|
||||
const confirm = await this.$confirm('您是否提交审核意见?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/audit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
proposalIds: this.formData.proposalId,
|
||||
sign: this.formData.sign,
|
||||
determineTypeCode: this.formData.determineTypeCode
|
||||
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
async doBatchAudit() {
|
||||
const valid = await this.$refs["auditForm"].validate()
|
||||
if (valid) {
|
||||
const confirm = await this.$confirm('您是否提交审核意见?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
})
|
||||
let proposalIds = []
|
||||
if (this.batchSelection && this.batchSelection.length > 0) {
|
||||
proposalIds = this.batchSelection.map(v => v.id)
|
||||
}
|
||||
const resp = await $.post(loc() + "/audit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
proposalIds: JSON.stringify(proposalIds),
|
||||
sign: this.formData.sign,
|
||||
determineTypeCode: this.formData.determineTypeCode
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.batchDialog = false
|
||||
this.batchSelection = []
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
async rollback(id) {
|
||||
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/rollback', {proposalId: id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
canRollBack(row) {
|
||||
if (this.isNode) {
|
||||
return this.nextStateCode === row.stateCode
|
||||
} else {
|
||||
return row.executorOpinion && row.stateCode < proposal.CASEUNIT && row.resultCode !== 'notGive'
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.isNode = await proposal.getProposalIsNodeState(proposal.EXECUTORREAD)
|
||||
this.nextStateCode = await proposal.getProposalNextNode(proposal.EXECUTORREAD)
|
||||
await proposal.initData(this)
|
||||
this.resultOptions = await getDictByCode("proposal_result")
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,292 @@
|
||||
<!--#
|
||||
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 class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="反馈评价">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'?
|
||||
'普通':'否'}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
{{row.isConjoin?'是':'否'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button @click="openFeedback(row)"
|
||||
size="mini" type="primary"
|
||||
v-if="[proposal.FEEDBACKSCORE].includes(row.stateCode)">反馈
|
||||
</el-button>
|
||||
<el-button @click="doExport(row)" size="mini" type="primary"
|
||||
v-if="row.resultCode=='determine'&&row.stateCode==900">
|
||||
导出反馈单
|
||||
</el-button>
|
||||
<el-button @click="doWithdraw(row)" size="mini" type="danger"
|
||||
v-if="row.canRollBack">撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="反馈评分" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="150px" ref="auditForm">
|
||||
<vi-title title="反馈评分信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="反馈人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="反馈时间" prop="feedbackTime">
|
||||
<el-input readonly v-model="formData.feedbackTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="承办满意度" prop="feedbackCode">
|
||||
<el-radio-group v-model="formData.feedbackCode">
|
||||
<el-radio :label="item.code" border v-for="item in feedbackOptions">{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item class="is-required" label="反馈意见" prop="feedbackOpinion">
|
||||
<div id="feedbackEditor"></div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="附件上传" prop="files">
|
||||
<file-upload :files.sync="formData.files" card></file-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="scoreSign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.scoreSign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doFeedback" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
let feedbackEditor = 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.feedbackOpinion || !dd3s.html2txt(this.formData.feedbackOpinion)) {
|
||||
callback(new Error('请填写反馈意见'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(700)
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{prop: 'resultName', label: '立案结果', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true, checked: 0},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true, checked: 0},
|
||||
{prop: 'isConjoin', label: '是否并案'},
|
||||
{prop: 'determineTypeCode', label: '是否重点'},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
],
|
||||
organizerOptions: [],
|
||||
feedbackOptions: [],
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
feedbackTime: moment().format('YYYY-MM-DD'),
|
||||
feedbackCode: 'satisfied',
|
||||
},
|
||||
formRules: {
|
||||
feedbackOpinion: [{validator: replyContentBrief, trigger: ['blur', 'change']}],
|
||||
feedbackCode: [{required: true, message: '请选择承办满意度', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
switch (type) {
|
||||
case 'view':
|
||||
this.openView(data);
|
||||
break;
|
||||
case 'audit':
|
||||
this.openFeedback(data);
|
||||
break;
|
||||
case 'withdraw':
|
||||
this.doWithdraw(data);
|
||||
break;
|
||||
}
|
||||
|
||||
},
|
||||
doExport(row) {
|
||||
window.open(loc() + "/doExport?proposalId=" + row.id)
|
||||
},
|
||||
async doWithdraw(row) {
|
||||
const confirm = await this.$confirm('您是否需要撤回该提案?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
const resp = await $.post(loc() + '/doWithdraw', {
|
||||
proposalId: row.id
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openFeedback(row) {
|
||||
this.formData.proposalId = row.id
|
||||
this.organizerOptions = await proposal.findOrganizer(row.id)
|
||||
this.$nextTick(() => {
|
||||
$("#feedbackEditor").html("")
|
||||
feedbackEditor = new E("#feedbackEditor")
|
||||
feedbackEditor.config.onchange = (html) => {
|
||||
this.formData.feedbackOpinion = html
|
||||
}
|
||||
feedbackEditor.create()
|
||||
})
|
||||
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doFeedback() {
|
||||
this.$refs["auditForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const confirm = await this.$confirm('您是否提交反馈?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.submitDisabled = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + '/doFeedback', {
|
||||
feedback: JSON.stringify(this.formData),
|
||||
scoreSign: this.formData.scoreSign
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
this.feedbackOptions = await getDictByCode("proposal_feedback")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,225 @@
|
||||
<!--#
|
||||
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>
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="承办单位" width="200px">
|
||||
<template scope="{row}">
|
||||
<span>{{row.unitName}}({{row.undertakeType==1?'主办':'协办'}})</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="批示状态" width="80px">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isMakePass">已批示</span>
|
||||
<span class="text-primary" v-else>待批示</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'audit',data:row}"
|
||||
v-if="[proposal.SCHOOL_LEAD_AUDIT].includes(row.stateCode)">
|
||||
批示
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
<template #pagination>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
</proposal-table>
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="分管校领导批示" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分管校领导" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="批示时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="批示意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(false)" type="danger">退 回</el-button>
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(true)" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isSign: false,
|
||||
submitDisabled: false,
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: '',
|
||||
isBack: false
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'audit') {
|
||||
this.openAudit(data)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openAudit(row) {
|
||||
this.formData.proposalId = row.id
|
||||
this.formData.replyUnitId = row.undertakeId
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit(flag) {
|
||||
this.$refs["auditForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.submitDisabled = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(this.auditUrl + "/doAudit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
replyUnitId: this.formData.replyUnitId,
|
||||
sign: this.formData.sign,
|
||||
isBack: flag
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
doBack() {
|
||||
this.formData.isBack = true
|
||||
this.doAudit()
|
||||
},
|
||||
async openTask() {
|
||||
const proposal_id = GetQueryString("proposal_id")
|
||||
const biz_key = GetQueryString("biz_key")
|
||||
if (proposal_id !== '' && biz_key !== '') {
|
||||
const {data} = await $.post('/platform/proposal/common/getProposalStateCode', {proposal_id})
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
|
||||
if (data !== proposal.SCHOOL_LEAD_AUDIT) {
|
||||
this.pageForm.isAudit = true
|
||||
this.pageData()
|
||||
setTimeout(() => {
|
||||
this.openView({id: proposal_id})
|
||||
loading.close()
|
||||
}, 800)
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
this.openAudit({id: proposal_id, undertakeId: biz_key})
|
||||
loading.close()
|
||||
}, 800)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await initData(proposal.SCHOOL_LEAD_AUDIT, this)
|
||||
await this.openTask()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,412 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.pro_table {
|
||||
padding-left: 65px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="分管校领导审批答复">
|
||||
<template #func>
|
||||
<el-button @click="openSendMsg" icon="el-icon-message" size="small" type="primary"
|
||||
v-if="pageForm.isAudit==false && (${@shiro.hasRole('sysadmin')||@shiro.hasRole('tamange')})">
|
||||
发送消息
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center" row-key="replyId">
|
||||
<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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='isLeaderAudit'">
|
||||
<template
|
||||
v-if="!row.caseCheckNeedSecondAudit || (row.caseCheckNeedSecondAudit && row.replyNumber===1)">
|
||||
<span class="text-success" v-if="row.isLeaderAudit">已审核</span>
|
||||
<span class="text-danger" v-else>未审核</span>
|
||||
</template>
|
||||
<template v-if="row.caseCheckNeedSecondAudit && row.replyNumber===2">
|
||||
<span class="text-primary">未审核</span>
|
||||
</template>
|
||||
<template v-if="!row.caseCheckNeedSecondAudit && row.replyNumber===2">
|
||||
<span class="text-primary">无需审核</span>
|
||||
</template>
|
||||
|
||||
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'?
|
||||
'普通':'否'}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
{{row.isConjoin?'是':'否'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
<el-button
|
||||
@click="openAudit(row)"
|
||||
size="mini" type="primary"
|
||||
v-if="(row.replyNumber===1 && !row.isLeaderAudit) || (row.caseCheckNeedSecondAudit && !row.isLeaderAudit && row.replyNumber > 1)">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
@click="rollback(row)"
|
||||
size="mini" type="primary"
|
||||
v-if="[proposal.LEADERAUDIT, proposal.FEEDBACKSCORE].includes(row.stateCode)&&row.isLeaderAudit">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="分管校领导审核" ref="audit">
|
||||
<template #handle>
|
||||
|
||||
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title :title="proTableData.length > 1 ? '并案信息' : '提案信息'"></vi-title>
|
||||
<el-form-item>
|
||||
|
||||
<el-table :data="proTableData" style="width: 100%"
|
||||
tooltip-effect="dark">
|
||||
<el-table-column align="left" header-align="left" label="提案编号"
|
||||
prop="proposalCode"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人"
|
||||
prop="username"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName"
|
||||
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>
|
||||
<div style="text-align: center;margin-top: -40px;"
|
||||
v-if="formData.auditUnderTakeList&&formData.auditUnderTakeList.length>1">
|
||||
<span class="text-danger">温馨提醒:该提案的承办单位【{{formData.auditUnderTakeName}}】是由您来分管的,只需要审批一次即可。</span>
|
||||
</div>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="审核意见" prop="leaderCheckOpinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.leaderCheckOpinion"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="签  字" prop="leaderSign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.leaderSign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doRollBack" type="danger" v-if="isNode">退回
|
||||
</el-button>
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(true)" type="primary">同意
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<el-dialog :visible.syn="msgDialog" title="发送消息提醒">
|
||||
<el-table :data="receiverSmsUserList" max-height="600">
|
||||
<el-table-column label="序号" type="index"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column label="工号" prop="loginname"></el-table-column>
|
||||
<el-table-column label="手机号" prop="mobile"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-row class="mt20" justify="end" type="flex">
|
||||
<el-button @click="msgDialog=false">取消</el-button>
|
||||
<el-button :disabled="receiverSmsUserList.length===0" @click="doSend" type="primary">确定</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("/platform/proposal/include/proposal_include.js"){}#-->
|
||||
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
prevNode: "",
|
||||
proTableData: [],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(600)
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true, checked: 0},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true, checked: 0},
|
||||
|
||||
{prop: 'isConjoin', label: '是否并案'},
|
||||
{prop: 'determineTypeCode', label: '是否重点'},
|
||||
{prop: 'underTakeNameUser', label: '分管校领导'},
|
||||
{prop: 'underTakeName', label: '承办单位', sortable: false},
|
||||
{prop: 'replyNumber', label: '答复次数', width: "80", sortable: false},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'isLeaderAudit', label: '审核状态', sortable: false},
|
||||
],
|
||||
// tableColumns: proposal_include.tableColumns.concat([{prop: 'underTakeName', label: '承办单位'},
|
||||
// {prop: 'replyNumber', label: '答复次数'},
|
||||
// {prop: 'isLeaderAudit', label: '审核状态'}]),
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
leaderCheckOpinion: '',
|
||||
},
|
||||
formRules: {
|
||||
leaderCheckOpinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
},
|
||||
isNode: false,
|
||||
msgDialog: false,
|
||||
receiverSmsUserList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async openSendMsg() {
|
||||
this.msgDialog = true
|
||||
const resp = await $.post(loc() + "/findReceiverSmsUserList", {meetingId: this.pageForm.meetingId})
|
||||
if (resp.code === 0) {
|
||||
this.msgDialog = true
|
||||
this.receiverSmsUserList = resp.data
|
||||
} else {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}
|
||||
},
|
||||
async doSend() {
|
||||
const confirm = await this.$confirm('此操作将会给分管领导发送消息, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doSend", {meetingId: this.pageForm.meetingId})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
},
|
||||
async getLeaderAuditList(replyUnitId, proposalId) {
|
||||
const {data} = await $.get("/platform/proposal/transact/branchLeaderRead/getBranchLeaderAuditList", {
|
||||
replyUnitId: replyUnitId,
|
||||
proposalId: proposalId
|
||||
})
|
||||
return data
|
||||
|
||||
},
|
||||
async rollback(row) {
|
||||
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/rollback', {proposalId: row.id, replyUnitId: row.replyUnitId})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
switch (type) {
|
||||
case 'view':
|
||||
this.openView(data);
|
||||
break;
|
||||
case 'audit':
|
||||
this.openAudit(data);
|
||||
break;
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async doRollBack(row) {
|
||||
const confirm = await this.$confirm('退回该提案到承办单位答复,请确认?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm) {
|
||||
const resp = await $.post(loc() + '/doRollBack', {
|
||||
proposalId: this.formData.proposalId,
|
||||
replyId: this.formData.id,
|
||||
replyUnitId: this.formData.replyUnitId,
|
||||
leaderCheckOpinion: this.formData.leaderCheckOpinion
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
async openAudit(row) {
|
||||
const {id, leaderCheckNumber, replyId, replyUnitId} = row
|
||||
this.formData.proposalId = id
|
||||
this.formData.id = replyId
|
||||
this.formData.leaderCheckNumber = leaderCheckNumber ? leaderCheckNumber : 0
|
||||
this.formData.replyUnitId = replyUnitId
|
||||
|
||||
const leaderAuditList = await this.getLeaderAuditList(replyUnitId, id)
|
||||
const auditUnderTakeIdList = leaderAuditList.map(v => v.underTakeId)
|
||||
const replyUnit = await proposal.findOrganizer(row.id)
|
||||
const auditUnderTakeList = replyUnit.filter(v => auditUnderTakeIdList.includes(v.replyUnitId))
|
||||
const auditUnderTakeName = auditUnderTakeList.map(v => v.unitName).join(",")
|
||||
this.$set(this.formData, "auditUnderTakeName", auditUnderTakeName)
|
||||
this.$set(this.formData, "auditUnderTakeList", auditUnderTakeList)
|
||||
|
||||
|
||||
const resp = await $.get('/platform/proposal/common/findConjoinProposal', {proposalId: row.id})
|
||||
this.proTableData = resp.data.filter(o => {
|
||||
return o.id !== row.id
|
||||
})
|
||||
this.proTableData.unshift(row)
|
||||
|
||||
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit(flag) {
|
||||
let formValid = true
|
||||
this.$refs["auditForm"].validate(valid => {
|
||||
formValid = valid
|
||||
});
|
||||
if (formValid) {
|
||||
let a = this.formData.auditUnderTakeList.length > 1 ? '该提案的承办单位【' + this.formData.auditUnderTakeName + '】是由您来分管的,只需要审批一次即可' : '您是否提交审核意见?'
|
||||
this.$confirm(a, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.submitDisabled = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + '/doAudit', {
|
||||
reply: JSON.stringify(this.formData),
|
||||
leaderSign: this.formData.leaderSign,
|
||||
flag: flag
|
||||
})
|
||||
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()
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.isNode = await proposal.getProposalIsNodeState(600)
|
||||
await proposal.initData(this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,68 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
<template #column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</proposal-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'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() {
|
||||
return {
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await initData(null, this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,76 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="承办单位" width="200px">
|
||||
<template scope="{row}">
|
||||
<span>{{row.underTakeName}}({{row.underTakeType==1?'主办':'协办'}})</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="doExport(row)" size="mini" type="primary">导出</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
<template #pagination>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
</proposal-table>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
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() {
|
||||
return {
|
||||
pageForm: {searchName: 'proposalName'}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
doExport(row) {
|
||||
window.open('/platform/proposal/transact/underTakeRead/oneProposalExport?proposalId=' + row.id)
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,242 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="预审核">
|
||||
<template #func>
|
||||
<!--# if(@shiro.hasRole('jdhdbt01')){ #-->
|
||||
<!-- <el-button v-if="!pageForm.isAudit" type="primary" size="small"-->
|
||||
<!-- @click="batchExport">批量导出-->
|
||||
<!-- </el-button>-->
|
||||
<!--# } #-->
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize" @sort-change="pageOrder"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='auditState'">
|
||||
<span class="text-success" v-if="row.stateCode!=proposal.PREAUDIT">已审核</span>
|
||||
<span class="text-primary" v-if="row.stateCode==proposal.PREAUDIT">待审核</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openAudit(row.id)"
|
||||
size="mini"
|
||||
type="primary" v-if="[proposal.PREAUDIT].includes(row.stateCode)">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="预审核" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(false)" type="danger">退回</el-button>
|
||||
<el-button :disabled="submitDisabled" @click="doAudit(true)" type="primary">通过</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(proposal.DELEGATION)
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'auditState', label: '审核状态', sortable: true},
|
||||
],
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
opinion: '同意该提案!',
|
||||
sign: ''
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
batchExport() {
|
||||
const {meetingId} = this.pageForm
|
||||
if (!meetingId) {
|
||||
this.$message.warning('请选择教代会届次')
|
||||
return
|
||||
}
|
||||
window.open(loc() + '/batchExport?meetingId=' + meetingId)
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'audit') {
|
||||
this.openAudit(data.id)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openAudit(id) {
|
||||
this.formData.proposalId = id
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit(flag) {
|
||||
this.submitDisabled = true
|
||||
let formValid = true
|
||||
this.$refs["auditForm"].validate((valid) => {
|
||||
formValid = valid
|
||||
})
|
||||
|
||||
if (formValid) {
|
||||
const flagText = flag ? '您是否要通过该提案?' : '该提案将退回至撰写人,修改后需重新邀请附议,请确认是否退回?'
|
||||
this.$confirm(flagText, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
if (!flag) {
|
||||
if (this.formData.opinion === '同意该提案!') {
|
||||
this.formData.opinion = '退回该提案!'
|
||||
}
|
||||
}
|
||||
|
||||
const resp = await $.post(loc() + '/audit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
sign: this.formData.sign,
|
||||
isPass: flag,
|
||||
proposalId: this.formData.proposalId
|
||||
})
|
||||
|
||||
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(() => {
|
||||
this.submitDisabled = false
|
||||
})
|
||||
|
||||
} else {
|
||||
this.submitDisabled = false
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,393 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style></style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="校长、书记审核">
|
||||
<template #func>
|
||||
<el-button @click="doSend()" icon="el-icon-message" size="small" type="primary"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('tamange')}">发送消息
|
||||
</el-button>
|
||||
<el-button @click="batchAudit" icon="el-icon-s-promotion" size="small"
|
||||
type="primary">批量审核
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :row-key="(row)=>{row.id}" :size="tableSize"
|
||||
@selection-change="(val)=>{this.batchSelection = val}"
|
||||
@sort-change="pageOrder"
|
||||
align="center" header-align="center">
|
||||
<el-table-column
|
||||
:selectable="(row)=>{return row.secretaryOpinions==null && row.resultCode!='notGive'}"
|
||||
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
|
||||
: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>
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'?
|
||||
'普通':'否'}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
{{row.isConjoin?'是':'否'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button @click="openAudit(row)" size="mini"
|
||||
type="primary"
|
||||
v-if="row.secretaryOpinions==null && row.resultCode!='notGive'">
|
||||
审阅
|
||||
</el-button>
|
||||
<el-button @click="rollback(row.id)" size="mini"
|
||||
type="danger"
|
||||
v-if="canRollBack(row)">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
<template #edit>
|
||||
<proposal-info handle label="校长、书记审阅" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title :title="proTableData.length > 1 ? '并案信息' : '提案信息'"></vi-title>
|
||||
<el-form-item>
|
||||
<el-table :data="proTableData" style="width: 100%"
|
||||
tooltip-effect="dark">
|
||||
<el-table-column align="left" header-align="left" label="提案编号"
|
||||
prop="proposalCode"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人"
|
||||
prop="username"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName"
|
||||
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 label="审阅人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审阅时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <el-form-item prop="other" label="立案建议">-->
|
||||
<!-- <el-radio-group v-model="formData.other">-->
|
||||
<!-- <el-radio v-for="item in resultOptions" :label="item.code" border>{{item.name}}-->
|
||||
<!-- </el-radio>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item label="审阅意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="batchDialog" title="批量批阅" top="50px" width="70%">
|
||||
<vi-title title="已选提案"></vi-title>
|
||||
<el-table :data="batchSelection" class="mb20" max-height="300">
|
||||
<el-table-column label="序号" type="index"></el-table-column>
|
||||
<el-table-column label="提案名称" prop="proposalName"></el-table-column>
|
||||
<el-table-column label="提案人" prop="username"></el-table-column>
|
||||
<el-table-column label="立案结果" prop="resultName"></el-table-column>
|
||||
</el-table>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="校长、书记意见"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <el-form-item prop="other" label="立案建议">-->
|
||||
<!-- <el-radio-group v-model="formData.other">-->
|
||||
<!-- <el-radio v-for="item in resultOptions" :label="item.code" border>{{item.name}}-->
|
||||
<!-- </el-radio>-->
|
||||
<!-- </el-radio-group>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item label="审阅意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的建议" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doBatchAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</el-dialog>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
proTableData: [],
|
||||
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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: 'stateName', label: '提案状态', sortable: true}
|
||||
],
|
||||
batchDialog: false,
|
||||
batchSelection: [],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(330)
|
||||
},
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
submitDisabled: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: '',
|
||||
other: 'ordinary'
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}],
|
||||
other: [{required: true, message: '请选择立案意见', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
},
|
||||
resultOptions: [],
|
||||
isNode: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doSend() {
|
||||
const confirm = await this.$confirm('此操作将会给承办单位分管领导发送消息, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doSend", {meetingId: this.pageForm.meetingId})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.formData.proposalId = row.id
|
||||
this.$set(this.formData, "opinion", "同意该提案" + row.resultName)
|
||||
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)
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
|
||||
|
||||
},
|
||||
async batchAudit() {
|
||||
if (this.batchSelection.length === 0) {
|
||||
this.$notify.warning('请选择需要批量审核的记录')
|
||||
return
|
||||
}
|
||||
this.$set(this.formData, "opinion", "同意!")
|
||||
this.batchDialog = true
|
||||
},
|
||||
async doAudit() {
|
||||
this.submitDisabled = true
|
||||
const valid = await this.$refs["auditForm"].validate()
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/audit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
proposalIds: this.formData.proposalId,
|
||||
sign: this.formData.sign,
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
},
|
||||
async doBatchAudit() {
|
||||
const valid = await this.$refs["auditForm"].validate()
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
})
|
||||
let proposalIds = []
|
||||
if (this.batchSelection && this.batchSelection.length > 0) {
|
||||
proposalIds = this.batchSelection.map(v => v.id)
|
||||
}
|
||||
const resp = await $.post(loc() + "/audit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
proposalIds: JSON.stringify(proposalIds),
|
||||
sign: this.formData.sign,
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.batchDialog = false
|
||||
this.batchSelection = []
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
},
|
||||
async rollback(id) {
|
||||
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/rollback', {id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
canRollBack(row) {
|
||||
if (this.isNode) {
|
||||
return this.nextStateCode === row.stateCode
|
||||
} else {
|
||||
return row.secretaryOpinions && row.stateCode < proposal.CASEUNIT && row.resultCode !== 'notGive'
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.isNode = await proposal.getProposalIsNodeState(proposal.PRINCIPALREAD)
|
||||
this.nextStateCode = await proposal.getProposalNextNode(proposal.PRINCIPALREAD)
|
||||
await proposal.initData(this)
|
||||
this.resultOptions = await getDictByCode("proposal_result")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,484 @@
|
||||
<!--#
|
||||
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 class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="答复列表">
|
||||
<template #tips>
|
||||
<!-- <span>温馨提醒:协</span>-->
|
||||
</template>
|
||||
<template #func>
|
||||
<el-button :disabled="proTableSelection.length===0" @click="forwardReply" size="small"
|
||||
type="primary"
|
||||
v-if="${@shiro.hasRole('T01') || @shiro.hasRole('sysadmin')}">转交答复
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData"
|
||||
:size="tableSize" :tree-props="{children: 'children'}"
|
||||
@selection-change="handleSelectionChange" @sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center"
|
||||
ref="proTable" row-key="replyId">
|
||||
<el-table-column
|
||||
:selectable="(row)=>{return !row.isReply}"
|
||||
reserve-selection
|
||||
type="selection"
|
||||
v-if="${@shiro.hasRole('T01') || @shiro.hasRole('sysadmin')}"
|
||||
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'"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
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>
|
||||
<template scope="{row}" v-else-if="column.prop=='isReply'">
|
||||
<span class="text-success" v-if="row.isReply">已答复</span>
|
||||
<span class="text-danger" v-else>未答复</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
{{row.determineTypeCode === 'emphasis' ? '重点' :row.determineTypeCode === 'ordinary'?
|
||||
'普通':'否'}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
{{row.isConjoin?'是':'否'}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='isForward'">
|
||||
<span class="text-primary" v-if="row.isForward">是({{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 @click="doHandleExport(row)" type="primary" size="mini"-->
|
||||
<!-- v-if="pageForm.isAudit==null">-->
|
||||
<!-- 导出办理单-->
|
||||
<!-- </el-button>-->
|
||||
<el-button @click="openAudit(row)" size="mini" type="primary" v-if="!row.isReply">答复
|
||||
</el-button>
|
||||
<!-- <el-button @click="doReplyExport(row)" type="primary" size="mini"-->
|
||||
<!-- v-if="!pageForm.isAudit&&row.isReply">导出回复书-->
|
||||
<!-- </el-button>-->
|
||||
<el-button
|
||||
@click="doRollBack(row)"
|
||||
size="mini" type="danger"
|
||||
v-if="row.isReply && ([proposal.LEADERAUDIT, proposal.UNITREPLY].includes(row.stateCode)) && row.leaderId == null">
|
||||
撤回
|
||||
</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 handle label="答复信息" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title :title="proTableData.length > 1 ? '并案信息' : '提案信息'"></vi-title>
|
||||
<el-form-item>
|
||||
<el-table :data="proTableData" style="width: 100%"
|
||||
tooltip-effect="dark">
|
||||
<el-table-column align="left" header-align="left" label="提案编号"
|
||||
prop="proposalCode"></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案人"
|
||||
prop="username"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="left" header-align="left" label="提案名称" prop="proposalName"
|
||||
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 label="答复人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="答复时间" prop="replyTime">
|
||||
<el-input readonly v-model="formData.replyTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" v-if="currentRowResultCode==='determine'">
|
||||
<el-form-item label="落实情况" prop="implementState">
|
||||
<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 class="is-required" label="答复内容" prop="replyContent">
|
||||
<div id="replyContentEditor"></div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="附件上传" prop="files">
|
||||
<file-upload :files.sync="formData.replyFiles" card></file-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="replySign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.replySign" prefix="proposal"></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 :close-on-click-modal="false" :visible.sync="forwardDialog" title="转交答复" top="50px" width="60%">
|
||||
<vi-title title="已选提案"></vi-title>
|
||||
<el-table :data="proTableSelection" max-height="350">
|
||||
<el-table-column label="提案编号" prop="proposalCode"></el-table-column>
|
||||
<el-table-column label="提案名称" prop="proposalName"></el-table-column>
|
||||
<el-table-column label="承办单位" prop="underTakeName"></el-table-column>
|
||||
<el-table-column label="承办类型" prop="undertakeType"></el-table-column>
|
||||
<el-table-column label="转交情况" prop="isForward">
|
||||
<template scope="{row}">
|
||||
<span class="text-primary" v-if="row.isForward">是({{row.proxyReplyUserName}})</span>
|
||||
<span v-else>否</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<vi-title class="mt10" title="转交用户"></vi-title>
|
||||
<el-select
|
||||
:remote-method="findSameUnitUser"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="请输入关键词"
|
||||
remote
|
||||
reserve-keyword
|
||||
v-model="forwardUserSelection"
|
||||
>
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')'"
|
||||
:value="item.id"
|
||||
v-for="item in forwardUserList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-row class="mt20" justify="end" type="flex">
|
||||
<el-button @click="forwardDialog = false">取消</el-button>
|
||||
<el-button @click="confirmForwardReply" type="primary">确定</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("/platform/proposal/include/proposal_include.js"){}#-->
|
||||
|
||||
let E = window.wangEditor
|
||||
let replyContentEditor = 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.replyContent || !dd3s.html2txt(this.formData.replyContent)) {
|
||||
callback(new Error('请填写答复内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
implementStates: [],
|
||||
proTableData: [],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(500)
|
||||
},
|
||||
conJoinProposalName: "",
|
||||
conJoinProposal: [],
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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: 'isReply', 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: {
|
||||
replyContent: [{validator: replyContentBrief, trigger: ['blur', 'change']}],
|
||||
implementState: [{required: true, message: '请选择落实情况', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}]
|
||||
},
|
||||
proTableSelection: [],
|
||||
forwardDialog: false,
|
||||
forwardUserList: [],
|
||||
forwardUserSelection: null,
|
||||
currentRowResultCode: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
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)
|
||||
|
||||
}
|
||||
},
|
||||
forwardReply() {
|
||||
this.forwardDialog = true
|
||||
},
|
||||
async confirmForwardReply() {
|
||||
const params = this.proTableSelection.map(v => {
|
||||
return {replyId: v.replyId, proposalId: v.id, proxyReplyUserId: this.forwardUserSelection}
|
||||
})
|
||||
const resp = await $.post(loc() + '/doForwardReply', {data: JSON.stringify(params)})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs['proTable'].clearSelection()
|
||||
this.doSearch()
|
||||
this.forwardDialog = false
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
},
|
||||
rollBack(row) {
|
||||
if (row.isReply && ([proposal.LEADERAUDIT, proposal.UNITREPLY].includes(row.stateCode)) && row.leaderId == null) {
|
||||
return true
|
||||
}
|
||||
},
|
||||
doHandleExport(row) {
|
||||
window.open(loc() + "/doHandleExport?proposalId=" + row.id)
|
||||
},
|
||||
doReplyExport(row) {
|
||||
window.open(loc() + "/doReplyExport?proposalId=" + row.id)
|
||||
},
|
||||
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()
|
||||
}
|
||||
}
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
switch (type) {
|
||||
case 'view':
|
||||
this.openView(data)
|
||||
break
|
||||
case 'audit':
|
||||
this.openAudit(data)
|
||||
break
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async checkCanReply(proposalId, underTakeId) {
|
||||
return await $.get(loc() + '/checkCanReply', {proposalId, underTakeId})
|
||||
},
|
||||
|
||||
async openAudit(row) {
|
||||
const {id, replyNumber, replyId, replyUnitId, leaderId, resultCode, replyContent, implementState} = row
|
||||
this.currentRowResultCode = resultCode
|
||||
const resp = await this.checkCanReply(id, replyUnitId)
|
||||
if (resp.data.valid !== 0) {
|
||||
this.notifyWarning(resp.data.msg)
|
||||
return
|
||||
}
|
||||
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
|
||||
/*if (!leaderId && resultCode == "determine") {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '校领导暂未批示,领导批示后方可答复',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}*/
|
||||
|
||||
this.formData.proposalId = id
|
||||
this.formData.id = replyId
|
||||
this.formData.replyNumber = replyNumber
|
||||
this.formData.implementState = implementState
|
||||
this.formData.replyContent = replyContent
|
||||
this.formData.replyUnitId = replyUnitId
|
||||
this.formData.proposalName = row.proposalName
|
||||
this.formData.createUser = row.username
|
||||
this.formData.proposalCode = row.proposalCode
|
||||
this.$nextTick(() => {
|
||||
$("#replyContentEditor").html("")
|
||||
replyContentEditor = new E("#replyContentEditor")
|
||||
replyContentEditor.config.onchange = (html) => {
|
||||
this.formData.replyContent = html
|
||||
}
|
||||
replyContentEditor.create()
|
||||
if (replyContent) {
|
||||
replyContentEditor.txt.html(replyContent)
|
||||
} else {
|
||||
if (resultCode === 'opinion') {
|
||||
replyContentEditor.txt.html('建议已收悉,将作为相关工作的建议或参考')
|
||||
this.formData.replyContent = '建议已收悉,将作为相关工作的建议或参考'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
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)
|
||||
params.isSave = isSave
|
||||
|
||||
const resp = await $.post(loc() + "/audit", params)
|
||||
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")
|
||||
await proposal.initData(this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,244 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-table__expand-icon {
|
||||
color: #de194f;
|
||||
}
|
||||
|
||||
.el-table__expand-icon > .el-icon-arrow-right {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :has_seconded="false" :page="pageForm" @search="doSearch" title="附议"></proposal-search>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="附议提案">
|
||||
<template #func>
|
||||
<!--# if(@shiro.hasRole('sysadmin')){ #-->
|
||||
<el-button @click="oneClickReminder" size="small" type="primary">一键提醒</el-button>
|
||||
<!--# } #-->
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :key="tableKey" :size="tableSize" :tree-props="{children: 'children'}"
|
||||
@sort-change="pageOrder"
|
||||
row-key="secondedId"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading"
|
||||
|
||||
>
|
||||
<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>
|
||||
<template scope="{row}" v-else-if="column.prop=='isAgree'">
|
||||
<span class="text-primary" v-if="row.isAgree==undefined">未附议</span>
|
||||
<span class="text-danger" v-if="row.isAgree==false">不同意</span>
|
||||
<span class="text-success" v-if="row.isAgree==true">同意</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="150">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openAudit(row)" size="mini" type="primary"
|
||||
v-if="[proposal.UNSUBMIT,150].includes(row.stateCode) && row.isAgree==null">
|
||||
附议
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<!-- <template #edit_func>
|
||||
<el-button :disabled="subDis" icon="el-icon-close" @click="doAudit(false)">拒绝</el-button>
|
||||
<el-button type="primary" :disabled="subDis" icon="el-icon-check" @click="doAudit(true)">同意</el-button>
|
||||
</template>-->
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="附议" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input readonly v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="签 字" prop="seconderSign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.seconderSign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="subDis" @click="doAudit(false)" icon="el-icon-close">拒绝</el-button>
|
||||
<el-button :disabled="subDis" @click="doAudit(true)" icon="el-icon-check" type="primary">
|
||||
同意
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true,},
|
||||
{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: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'meetingName', label: '届次', sortable: true},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
{prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'secondedUserName', label: '附议人', sortable: true},
|
||||
{prop: 'isAgree', label: '附议状态', sortable: true},
|
||||
],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(proposal.INVIRTE)
|
||||
},
|
||||
subDis: false,
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
seconderSign: ""
|
||||
},
|
||||
formRules: {
|
||||
implementUnitId: [{required: true, message: '请选择建议落实部门', trigger: ['blur', 'change']}],
|
||||
seconderSign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async oneClickReminder() {
|
||||
const confirm = await this.$confirm('您确定要一键提醒吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm !== 'confirm') return
|
||||
const resp = await $.post(loc() + '/oneClickReminder', {meetingId: this.pageForm.meetingId})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
async load(tree, treeNode, resolve) {
|
||||
const {id, secondedId} = tree
|
||||
const resp = await $.get(loc() + "/getSecondedList", {id: id, secondedId: secondedId})
|
||||
if (resp.code === 0) {
|
||||
resolve(resp.data)
|
||||
} else {
|
||||
resolve([])
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openAudit(row) {
|
||||
this.formData.secondedId = row.secondedId
|
||||
this.formData.proposalId = row.id
|
||||
this.formData.delegationId = row.delegationId
|
||||
this.formData.proposalName = row.proposalName
|
||||
this.formData.createUser = row.createUser
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
},
|
||||
async doAudit(flag) {
|
||||
const flagText = flag ? '同意' : '拒绝'
|
||||
const msgRes = await this.$confirm('您是否要' + flagText + '该提案?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (msgRes === 'confirm') {
|
||||
this.subDis = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(loc() + "/doAudit", {
|
||||
secondedId: this.formData.secondedId,
|
||||
proposalId: this.formData.proposalId,
|
||||
proposalName: this.formData.proposalName,
|
||||
createUser: this.formData.createUser,
|
||||
flag: flag,
|
||||
seconderSign: this.formData.seconderSign
|
||||
})
|
||||
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.subDis = false
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,271 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">教代会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="meetingChange" filterable placeholder="请选择教代会"
|
||||
style="width: 80%" v-model="pageForm.meetingId">
|
||||
<el-option
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 110px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="提案名称" value="proposalName"></el-option>
|
||||
<el-option label="编号" value="proposalCode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 90%" v-model="pageForm.searchKeyword2">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
|
||||
v-model="pageForm.searchName2">
|
||||
<el-option label="提案人" value="su.username"></el-option>
|
||||
<!-- <el-option label="附议人" value="seconded.username"></el-option>-->
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="提案信息">
|
||||
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" align="center"
|
||||
header-align="center"
|
||||
row-key="id"
|
||||
>
|
||||
<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-column fixed="right" header-align="center" label="操作"
|
||||
label="操作" width="130px">
|
||||
<template scope="{row}">
|
||||
<!-- <el-button @click="oneProposalExport(row.id)" icon="el-icon-printer" size="mini"
|
||||
type="primary">导出提案
|
||||
</el-button>-->
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
resultOptions: [],
|
||||
typeOptions: [],
|
||||
meetingOptions: [],
|
||||
stateOptions: [],
|
||||
delegationOptions: [],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
searchName: "proposalName",
|
||||
searchName2: "su.username",
|
||||
searchKeyword2: '',
|
||||
stateCode: '',
|
||||
meetingId: '',
|
||||
delegationId: '',
|
||||
proposalResult: [],
|
||||
proposalTypes: [],
|
||||
levyStates: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{prop: 'proposalCode', label: '提案编号', width: "120", sortable: true, disabled: true},
|
||||
{prop: 'proposalName', label: '提案名称', width: "300", disabled: true},
|
||||
{prop: 'username', label: '提案人', disabled: true},
|
||||
{prop: 'mobile', label: '联系方式', disabled: true},
|
||||
{prop: 'unitname', label: '单位', disabled: true},
|
||||
{prop: 'delegationName', label: '代表团', sortable: true},
|
||||
// {prop: 'delegationCode', label: '代表团编码', sortable: true, checked: 0},
|
||||
{prop: 'typeName', label: '提案类型', sortable: true},
|
||||
// {prop: 'typeCode', label: '提案类型编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提交方式', sortable: true},
|
||||
{prop: 'secondedNum', label: '附议人数量', sortable: true},
|
||||
{prop: 'secondedAgreeNum', label: '已附议', sortable: true},
|
||||
{prop: 'delegationAudit', label: '团长审核', sortable: true},
|
||||
],
|
||||
levyAuditOptions: [
|
||||
{label: '未提交', value: 0},
|
||||
{label: '未附议', value: 1},
|
||||
{label: '附议中', value: 2},
|
||||
{label: '待团长审核', value: 3},
|
||||
{label: '团长已审核', value: 4},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue'),
|
||||
},
|
||||
methods: {
|
||||
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.doSearch()
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.pageForm.unionId = null
|
||||
this.unionOptions = await getUnions(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await getUnits(val)
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalResult(result) {
|
||||
let idx = this.pageForm.proposalResult.indexOf(result)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalResult.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalResult.push(result)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkProposalType(type) {
|
||||
let idx = this.pageForm.proposalTypes.indexOf(type)
|
||||
if (idx !== -1) {
|
||||
this.pageForm.proposalTypes.splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm.proposalTypes.push(type)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
checkLevyState(type) {
|
||||
this.pageForm.levyStates = [type]
|
||||
|
||||
// let idx = this.pageForm.levyStates.indexOf(type)
|
||||
// if (idx !== -1) {
|
||||
// this.pageForm.levyStates.splice(idx, 1)
|
||||
// } else {
|
||||
// this.pageForm.levyStates.push(type)
|
||||
// }
|
||||
this.doSearch()
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.proposalTypes = JSON.stringify(pageForm.proposalTypes)
|
||||
pageForm.proposalResult = JSON.stringify(pageForm.proposalResult)
|
||||
pageForm.levyStates = JSON.stringify(pageForm.levyStates)
|
||||
|
||||
$.post(loc() + "/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.meetingOptions = await getAllJdh()
|
||||
this.pageForm.meetingId = this.meetingOptions.length ? this.meetingOptions[0].id : ''
|
||||
|
||||
this.stateOptions = await getOpenProposalState()
|
||||
this.typeOptions = await getProposalType()
|
||||
this.resultOptions = await getDictOptions("proposal_result")
|
||||
|
||||
this.delegationOptions = await getDelegation(this.pageForm.meetingId)
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,232 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<proposal-search :audit="false" :page="pageForm" @search="doSearch"></proposal-search>
|
||||
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool :app="this" label="承办单位阅览">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :key="tableKey" :load="load"
|
||||
:size="tableSize"
|
||||
:tree-props="{hasChildren: 'hasUnderTakeRead'}"
|
||||
@sort-change="pageOrder"
|
||||
lazy
|
||||
row-key="prId"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<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>
|
||||
<template scope="{row}" v-else-if="column.prop=='underTakeOpinion'">
|
||||
<i class="fa fa-circle text-danger ml5" v-if="row.canTake==0"></i>
|
||||
<i class="fa fa-circle text-success ml5" v-else></i>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='underTakeName'">
|
||||
<span>{{row.underTakeName}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='underTakeType'">
|
||||
<span>{{row.underTakeType==1?'主办':'协办'}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='isConjoin'">
|
||||
<span :style="row.isConjoin ? 'color: #236eb4' : ''">{{[proposal.CASE].includes(row.stateCode) ? '暂无' : row.isConjoin ? '是' : '否'}}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='determineTypeCode'">
|
||||
<span>
|
||||
{{[proposal.CASE].includes(row.stateCode) ? '暂无' : !row.determineTypeCode ? '否' : row.determineTypeCode === 'emphasis' ? '重点' : '普通'}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" fixed header-align="center" label="操作" width="250">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary" v-if="row.stateCode <= 400">
|
||||
承办意见
|
||||
</el-button>
|
||||
<el-button @click="doExport(row)" size="mini" type="primary">导出</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="承办单位提出意见" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-form-item label="承办单位">
|
||||
<el-input readonly v-model="formData.underTakeName"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="承办意向" prop="resultCode">
|
||||
<el-radio-group @change="resultCodeChange" v-model="formData.resultCode">
|
||||
<el-radio :label="true" border>可以承办</el-radio>
|
||||
<el-radio :label="false" border>无法承办</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="理由" prop="opinion">
|
||||
<el-input maxlength="500" placeholder="请填写您的理由" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button @click="$refs.guava.index()">返回</el-button>
|
||||
<el-button @click="doAudit" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
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() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'oldProposalCode', label: '草案编号', width: "120", checked: 0, sortable: true},
|
||||
{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},
|
||||
{prop: 'mannerCode', label: '提案方式编码', sortable: true, checked: 0},
|
||||
{prop: 'mannerName', label: '提案方式', sortable: true},
|
||||
{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: '是否并案', sortable: true},
|
||||
{prop: 'determineTypeCode', label: '是否重点', sortable: true},
|
||||
{prop: 'stateName', label: '提案状态', sortable: true},
|
||||
{prop: 'underTakeName', label: '承办单位', sortable: false},
|
||||
{prop: 'underTakeType', label: '承办类型', sortable: false},
|
||||
{prop: 'underTakeOpinion', label: '承办意见', sortable: false},
|
||||
],
|
||||
pageForm: {searchName: 'proposalName'},
|
||||
formData: {},
|
||||
formRules: {
|
||||
resultCode: [{required: true, message: '请选择承办意向', trigger: ['blur', 'change']}],
|
||||
opinion: [{required: true, message: '请输入承办意见', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async load(tree, treeNode, resolve) {
|
||||
const {id, prId} = tree
|
||||
const resp = await $.get(loc() + "/getUnderTakeReadList", {id: id, prId: prId})
|
||||
requestLaterFun(resp, (data) => {
|
||||
resolve(data)
|
||||
}, () => {
|
||||
resolve([])
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
async openEdit(row) {
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
this.formData.id = row.id
|
||||
this.formData.underTakeId = row.underTakeId
|
||||
this.formData.underTakeName = row.underTakeName
|
||||
const opinionData = await $.get(loc() + '/getUnderTakeFirstOpinion', {
|
||||
proposalId: row.id,
|
||||
underTakeId: row.underTakeId
|
||||
})
|
||||
if (opinionData.data) {
|
||||
this.$set(this.formData, 'opinion', opinionData.data.opinion)
|
||||
this.$set(this.formData, 'resultCode', opinionData.data.canTake)
|
||||
} else {
|
||||
this.$set(this.formData, 'opinion', null)
|
||||
this.$set(this.formData, 'resultCode', null)
|
||||
}
|
||||
},
|
||||
async resultCodeChange() {
|
||||
if (this.formData.resultCode) {
|
||||
this.formRules.opinion[0].required = false
|
||||
} else {
|
||||
this.formRules.opinion[0].required = true
|
||||
}
|
||||
const valid = await this.$refs['auditForm'].validate()
|
||||
},
|
||||
async doAudit() {
|
||||
const valid = await this.$refs['auditForm'].validate()
|
||||
if (valid) {
|
||||
const confirm = await this.$confirm('您确定要提交吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/doAudit', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
doExport(row) {
|
||||
window.open('/platform/proposal/statistics/summary/oneProposalExport?proposalId=' + row.id)
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await proposal.initData(this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,189 @@
|
||||
<!--#
|
||||
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>
|
||||
|
||||
<proposal-table :data="tableData" :loading="tableLoading" :page="pageForm"
|
||||
@order="pageOrder" @view="openView">
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="承办单位" width="200px">
|
||||
<template scope="{row}">
|
||||
<span>{{row.unitName}}({{row.undertakeType==1?'主办':'协办'}})</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="签署状态" width="80px">
|
||||
<template scope="{row}">
|
||||
<span class="text-success" v-if="row.isMakePass">已签署</span>
|
||||
<span class="text-primary" v-else>待签署</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'audit',data:row}"
|
||||
v-if="[proposal.SCHOOL_LEAD_UNDERSIGN].includes(row.stateCode)">
|
||||
签署
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</proposal-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<proposal-info handle label="校领导签署意见" ref="audit">
|
||||
<template #handle>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="auditForm">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username">
|
||||
<el-input disabled v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime">
|
||||
<el-input disabled v-model="formData.auditTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="审核意见" prop="opinion">
|
||||
<el-input maxlength="1000" placeholder="请填写您的审核意见" rows="4" type="textarea"
|
||||
v-model="formData.opinion"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签  字" prop="sign" v-if="isSign">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button :disabled="submitDisabled" @click="doAudit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</proposal-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<proposal-info ref="info"></proposal-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'proposal-info': httpVueLoader('/components/proposal/ProposalInfo.vue'),
|
||||
'proposal-search': httpVueLoader('/components/proposal/ProposalSearch.vue'),
|
||||
'proposal-table': httpVueLoader('/components/proposal/ProposalTable.vue')
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isSign: false,
|
||||
submitDisabled: false,
|
||||
auditUrl: base + '/platform/proposal/transact/audit',
|
||||
pageForm: {searchName: 'proposalName', isAudit: false},
|
||||
formData: {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
opinion: '',
|
||||
sign: ''
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请输入审核意见', trigger: ['blur', 'change']}]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'audit') {
|
||||
this.openAudit(data)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.info.openView(row.id)
|
||||
},
|
||||
openAudit(row) {
|
||||
this.formData.proposalId = row.id
|
||||
this.formData.replyUnitId = row.undertakeId
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.audit.openView(row.id)
|
||||
|
||||
if (this.$refs['auditForm']) {
|
||||
this.$refs['auditForm'].resetFields()
|
||||
}
|
||||
},
|
||||
async doAudit() {
|
||||
this.$refs["auditForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
this.submitDisabled = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.post(this.auditUrl + "/doAudit", {
|
||||
audit: JSON.stringify(this.formData),
|
||||
replyUnitId: this.formData.replyUnitId,
|
||||
sign: this.formData.sign
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
this.submitDisabled = false
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await initData(proposal.SCHOOL_LEAD_UNDERSIGN, this)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,783 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.remindTextArea textarea {
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.remindClass {
|
||||
width: 100%;
|
||||
white-space: break-spaces;
|
||||
font-size: 14px;
|
||||
line-height: 25px;
|
||||
background-color: white;
|
||||
max-height: 600px;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<h3 style="color: #1867b0">撰写提案</h3>
|
||||
</template>
|
||||
<template>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="addForm">
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="代表姓名" prop="username">
|
||||
<el-input readonly type="text" v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案时间" prop="createTime">
|
||||
<el-input readonly type="text" v-model="formData.createTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案名称" prop="proposalName">
|
||||
<el-input maxlength="100" placeholder="提案名称"
|
||||
v-model="formData.proposalName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="撰写提案方式" prop="mannerCode">
|
||||
<el-radio :key="item.id" :label="item.code" border
|
||||
size="medium"
|
||||
v-for="item in mannerList" v-model="formData.mannerCode">
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" type="flex" v-if="false">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属教代会" prop="teacherMeetingId">
|
||||
<el-select @change="meetingChange" clearable filterable
|
||||
placeholder="所属教代会"
|
||||
v-model="formData.teacherMeetingId">
|
||||
<el-option :key="item.id" :label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in meetingOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属代表团" prop="delegationId" v-if="formData.mannerCode!='W03'">
|
||||
<el-select clearable filterable placeholder="所属代表团" v-model="formData.delegationId">
|
||||
<el-option :key="item.id" :label="item.dbtname"
|
||||
:value="item.id"
|
||||
v-for="item in delegationOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="所属委员会" prop="committeeId" v-if="formData.mannerCode=='W03'">
|
||||
<el-select clearable filterable placeholder="所属委员会" v-model="formData.committeeId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in committeeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="提案类型" prop="typeId">
|
||||
<el-select clearable filterable placeholder="提案类型"
|
||||
v-model="formData.typeId">
|
||||
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id"
|
||||
v-for="item in typeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<!-- <el-form-item label="建议落实部门" prop="implementUnitId">-->
|
||||
<!-- <el-select clearable filterable placeholder="建议落实部门"-->
|
||||
<!-- v-model="formData.implementUnitId">-->
|
||||
<!-- <el-option-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.unitName"-->
|
||||
<!-- :value="item.id"-->
|
||||
<!-- v-for="item in unitOptions">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item class="is-required" label="案  由" prop="brief">
|
||||
<div id="briefEditor"></div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item class="is-required" label="建议措施" prop="measures">
|
||||
<div id="measuresEditor"></div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="附件上传" prop="files">
|
||||
<file-upload :files.sync="formData.files" card></file-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="签 字" prop="sign" v-if="isSign()">
|
||||
<sign :qz.sync="formData.sign" prefix="proposal"></sign>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-row justify="center" type="flex">
|
||||
<el-button @click="doAdd" type="primary" v-throttle>保存到我的提案</el-button>
|
||||
<el-button @click="openSeconded" type="primary" v-if="formData.mannerCode=='W01'">邀请附议人
|
||||
</el-button>
|
||||
<el-button @click="doSubmit" type="primary" v-if="formData.mannerCode!='W01'">提交
|
||||
</el-button>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
</template>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<!-- <template #public>
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-input clearable placeholder="请输入内容" v-model="pageForm2.searchKeyword">
|
||||
<el-select placeholder="查询" slot="prepend" style="width: 100px;"
|
||||
v-model="pageForm2.searchName">
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select @change="jdhChange" clearable filterable placeholder="请选择届次" v-model="pageForm2.jdhid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.jdhallname"
|
||||
:value="item.id"
|
||||
v-for="item in jdhList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select @change="delegationChange" clearable filterable placeholder="请选择代表团"
|
||||
v-model="pageForm2.dbtid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.dbtname"
|
||||
:value="item.id"
|
||||
v-for="item in delegations">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select
|
||||
@change="unitList = allUnitList.filter(v => pageForm2.unionid?v.unionid === pageForm2.unionid:true)"
|
||||
clearable filterable placeholder="请选择工会"
|
||||
v-model="pageForm2.unionid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id"
|
||||
v-for="item in unionList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择单位" v-model="pageForm2.unitid">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="queryDb" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-radio-group @change="queryDb" v-model="pageForm2.isAudit">
|
||||
<el-radio-button :label="true">已邀请({{secondedNum}})</el-radio-button>
|
||||
<el-radio-button :label="false">待邀请</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="邀请附议人">
|
||||
|
||||
<template #label_end>
|
||||
<el-button @click="addSeconded(0)" class="ml20" plain type="primary" v-if="!pageForm2.isAudit">
|
||||
批量邀请
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
<template #func>
|
||||
<span>
|
||||
温馨提醒:请选择
|
||||
<span style="color:red;font-size: 16px;font-weight: bold">
|
||||
{{config.seconderNum ? config.seconderNum : 0}}
|
||||
</span>
|
||||
位附议人,否则无法提交提案!
|
||||
</span>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="dBTableData" :size="tableSize" @selection-change="handleSelectionChange"
|
||||
class="vi-table" ref="multipleTable" row-key="id" style="width: 100%"
|
||||
v-loading="dBTableDataLoading">
|
||||
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{ scope.$index + (pageForm2.pageNumber - 1) * pageForm2.pageSize + 1 }} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in dBTableColumns"
|
||||
>
|
||||
<template scope="{row:{isAgree}}" v-if="column.prop=='isAgree'">
|
||||
<template v-if="typeof isAgree === 'undefined'">
|
||||
<span class="text-success">待邀请</span>
|
||||
</template>
|
||||
<template v-else>
|
||||
<span class="text-info" v-if="isAgree == null">未附议</span>
|
||||
<span class="text-danger" v-if="isAgree == false">不通过</span>
|
||||
<span class="text-success" v-if="isAgree == true">通过</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" v-if="!pageForm2.isAudit"
|
||||
width="100">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="addSeconded(row.id)" size="mini">邀请</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-row class="el-pagination-container" style="margin-bottom: 0px">
|
||||
<el-pagination
|
||||
:current-page="pageForm2.pageNumber"
|
||||
:page-size="pageForm2.pageSize"
|
||||
:page-sizes="[5,10, 20, 30, 50]"
|
||||
:total="pageForm2.totalCount"
|
||||
@current-change="pageNumberChange2"
|
||||
@size-change="pageSizeChange2"
|
||||
layout="total, sizes, prev, pager, next">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>-->
|
||||
|
||||
</guava>
|
||||
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="writeRemindDialog" title="撰写须知" top="50px" width="60%">
|
||||
<!-- <pre class="remindClass">-->
|
||||
<!-- {{config.writeRemind}}-->
|
||||
<!-- </pre>-->
|
||||
<el-input
|
||||
:autosize="{ minRows: 10, maxRows: 30}"
|
||||
class="remindTextArea"
|
||||
readonly
|
||||
type="textarea"
|
||||
v-model="config.writeRemind">
|
||||
</el-input>
|
||||
<!-- <div v-html="config.writeRemind"></div>-->
|
||||
<div class="text-center" slot="footer">
|
||||
<el-button @click="writeRemindDialog = false" type="primary">我已知晓</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const E = window.wangEditor
|
||||
let briefEditor, measuresEditor = null
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
|
||||
data() {
|
||||
|
||||
const validBrief = (rule, value, callback) => {
|
||||
if (!this.formData.brief || !dd3s.html2txt(this.formData.brief)) {
|
||||
callback(new Error('请填写提案内容、案由和案据'));
|
||||
} else if (dd3s.html2txt(this.formData.brief).length < this.config.words) {
|
||||
callback(new Error('提案内容至少需要' + this.config.words + '字'));
|
||||
// callback();
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
const validMeasures = (rule, value, callback) => {
|
||||
if (!this.formData.measures || !dd3s.html2txt(this.formData.measures)) {
|
||||
callback(new Error('请填写提案实施的可行性建议'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
pageForm2: {
|
||||
searchName: 'u.username',
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
isAudit: false,
|
||||
jdhid: '',
|
||||
dbtid: '',
|
||||
unionid: '',
|
||||
unitid: ''
|
||||
},
|
||||
jdhList: [],
|
||||
delegations: [],
|
||||
userOptions: [],
|
||||
unionList: [],
|
||||
unitList: [],
|
||||
secondedNum: 0,
|
||||
dBTableDataLoading: false,
|
||||
dBTableData: [],
|
||||
secondedFormData: {users: []},
|
||||
secondedDialog: false,
|
||||
userLoading: false,
|
||||
subDisabled: false,
|
||||
secondedTableData: [],
|
||||
config: {},
|
||||
formData: {
|
||||
sign: ''
|
||||
},
|
||||
meetingOptions: [],
|
||||
typeOptions: [],
|
||||
unitOptions: [],
|
||||
allMannerList: [],
|
||||
mannerList: [],
|
||||
delegationOptions: [],
|
||||
committeeOptions: [],
|
||||
formRules: {
|
||||
username: [{required: true, message: '请填写提案人', trigger: ['blur', 'change']}],
|
||||
createTime: [{required: true, message: '请填写提案时间', trigger: ['blur', 'change']}],
|
||||
proposalName: [{required: true, message: '请填写提案名称', trigger: ['blur', 'change']}],
|
||||
mannerCode: [{required: true, message: '请选择提案方式', trigger: ['blur', 'change']}],
|
||||
delegationId: [{required: true, message: '请选择所属代表团', trigger: ['blur', 'change']}],
|
||||
teacherMeetingId: [{required: true, message: '请选择所属教代会', trigger: ['blur', 'change']}],
|
||||
committeeId: [{required: true, message: '请选择所属委员会', trigger: ['blur', 'change']}],
|
||||
/*typeId: [{required: true, message: '请选择提案类型', trigger: ['blur', 'change']}],*/
|
||||
implementUnitId: [{required: false, message: '请选择建以落实部门', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '请扫描二维码进行签字', trigger: ['blur', 'change']}],
|
||||
brief: [{validator: validBrief, trigger: ['blur', 'change']}],
|
||||
measures: [{validator: validMeasures, trigger: ['blur', 'change']}],
|
||||
},
|
||||
dBTableColumns: [
|
||||
{prop: 'loginname', label: '工号', sortable: true},
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'sex', label: '性别', sortable: true},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'dbUnitName', label: '所属单位'},
|
||||
{prop: 'dbUnionName', label: '所属工会'},
|
||||
{prop: 'jdhAllName', label: '届次', sortable: true},
|
||||
{prop: 'dbtName', label: '代表团', sortable: true},
|
||||
{prop: 'isAgree', label: '附议状态', sortable: true},
|
||||
],
|
||||
isSign: () => {
|
||||
return proposal.needSignState.map(v => v.stateCode).includes(proposal.UNSUBMIT)
|
||||
},
|
||||
writeRemindDialog: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue')
|
||||
},
|
||||
methods: {
|
||||
async doAdd() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
let data = clone(this.formData)
|
||||
if (data.files) {
|
||||
data.files = JSON.stringify(data.files)
|
||||
}
|
||||
|
||||
$.post('/platform/proposal/transact/compose' + method, {
|
||||
data: JSON.stringify(data),
|
||||
sign: data.sign
|
||||
}).then(res => {
|
||||
if (res.code == 0) {
|
||||
loading.close()
|
||||
this.$notify.success({title: '成功', message: res.msg});
|
||||
sublime.jumpPagePjax('/platform/proposal/transact/compose')
|
||||
} else {
|
||||
this.$notify.error({title: '失败', message: res.msg});
|
||||
}
|
||||
})
|
||||
loading.close()
|
||||
}
|
||||
});
|
||||
},
|
||||
async doSubmit() {
|
||||
const valid = await this.$refs["addForm"].validate()
|
||||
if (valid) {
|
||||
|
||||
const confirm = await this.$confirm('确定要提交此提案吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'info',
|
||||
})
|
||||
if ("confirm" === confirm) {
|
||||
|
||||
let data = clone(this.formData)
|
||||
if (data.files) {
|
||||
data.files = JSON.stringify(data.files)
|
||||
}
|
||||
const resp = await $.post(loc() + "/doSubmit", {
|
||||
data: JSON.stringify(data)
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg})
|
||||
sublime.jumpPagePjax('/platform/proposal/transact/compose')
|
||||
}, () => {
|
||||
this.$notify.warning({title: '警告', message: resp.msg})
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.dbUserSelection = val.map(v => v.id);
|
||||
},
|
||||
pageNumberChange2(val) {
|
||||
this.pageForm2.pageNumber = val;
|
||||
this.queryDb();
|
||||
},
|
||||
pageSizeChange2(val) {
|
||||
this.pageForm2.pageSize = val;
|
||||
this.queryDb();
|
||||
},
|
||||
async delegationChange(val) {
|
||||
this.unionList = await getUnions(val)
|
||||
},
|
||||
async jdhChange(val) {
|
||||
this.delegations = await getDbt(val)
|
||||
},
|
||||
async queryDb() {
|
||||
const {jdhid, dbtid, unionid, unitid, proposalId} = this.pageForm2
|
||||
const data = await $.get("/platform/proposal/transact/compose/queryDb", {
|
||||
...this.pageForm2,
|
||||
pageForm2: this.pageForm2,
|
||||
proposalId: proposalId,
|
||||
jdhid: jdhid,
|
||||
dbtid: dbtid,
|
||||
unionid: unionid,
|
||||
unitid: unitid
|
||||
})
|
||||
sublime.closeLoadingbar();
|
||||
this.dBTableDataLoading = false
|
||||
if (data.code == 0) {
|
||||
this.dBTableData = data.data.list;
|
||||
if (data.data.list[0].secondedNum != undefined) {
|
||||
this.secondedNum = data.data.list[0].secondedNum
|
||||
}
|
||||
this.pageForm2.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
},
|
||||
async openSeconded() {
|
||||
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
const valid = await this.$refs["addForm"].validate()
|
||||
if (valid) {
|
||||
|
||||
let data = clone(this.formData)
|
||||
if (data.files) {
|
||||
data.files = JSON.stringify(data.files)
|
||||
}
|
||||
const resp = await $.post('/platform/proposal/transact/compose' + method, {
|
||||
data: JSON.stringify(data),
|
||||
sign: data.sign
|
||||
})
|
||||
sublime.jumpPagePjax('/platform/proposal/transact/compose?operation=invite&id=' + resp.data)
|
||||
}
|
||||
|
||||
|
||||
// if (this.formData.id == "") {
|
||||
// this.$notify.warning({title: '警告', message: "请先保存后在邀请附议人"});
|
||||
// return
|
||||
// }
|
||||
// this.pageForm2.proposalId = this.formData.id
|
||||
// this.pageForm2.proposalName = this.formData.proposalName
|
||||
// await this.queryDb()
|
||||
// this.$refs.guava.public()
|
||||
|
||||
/* this.secondedFormData = {
|
||||
proposalId: this.formData.id,
|
||||
users: [],
|
||||
}
|
||||
this.secondedData()
|
||||
this.userOptions = []
|
||||
this.userLoading = false
|
||||
this.secondedDialog = true*/
|
||||
|
||||
|
||||
},
|
||||
async secondedData() {
|
||||
const {data} = await $.get("/platform/proposal/transact/compose/getSecondedData", {proposalId: this.secondedFormData.proposalId})
|
||||
this.secondedTableData = data
|
||||
},
|
||||
async userRemoteMethod(query) {
|
||||
if (query) {
|
||||
this.userLoading = true
|
||||
const arr = await this.queryUser(this.secondedFormData.proposalId, query)
|
||||
this.userOptions = this.userOptions.filter(v => {
|
||||
return this.secondedFormData.users.includes(v.id)
|
||||
}).concat(arr.filter(v => {
|
||||
return !this.secondedFormData.users.includes(v.id)
|
||||
}));
|
||||
|
||||
this.userLoading = false
|
||||
}
|
||||
},
|
||||
async queryUser(proposalId, query) {
|
||||
const {data} = await $.get("/platform/proposal/transact/compose/queryDelegate", {proposalId, query})
|
||||
return data
|
||||
},
|
||||
async addSeconded(id) {
|
||||
const {proposalName, proposalId} = this.pageForm2
|
||||
if (id === 0 && this.dbUserSelection.length === 0) {
|
||||
this.$message.warning('请先选择附议人后再点击邀请按钮')
|
||||
return
|
||||
}
|
||||
|
||||
if (id != 0) this.dbUserSelection = [].concat(id)
|
||||
let aa = "请确认所选代表是否作为本提案的附议人?"
|
||||
if (this.dBTableData[0].secondedNum >= this.config.seconderNum) aa = "您已邀请了" + this.dBTableData[0].secondedNum + " 名附议人,是否继续邀请?"
|
||||
const confirm = await this.$confirm(aa + '确定后会有信息通知!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/proposal/transact/compose/addSeconded", {
|
||||
proposalId: proposalId,
|
||||
proposalName: proposalName,
|
||||
users: JSON.stringify(this.dbUserSelection),
|
||||
})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: '邀请附议人成功'});
|
||||
this.$refs.multipleTable.clearSelection();
|
||||
this.queryDb()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
|
||||
})
|
||||
}
|
||||
/* if (this.secondedFormData.users.length === 0) {
|
||||
this.$message.warning('请先选择附议人后再点击邀请按钮')
|
||||
return
|
||||
}
|
||||
|
||||
this.$confirm('确认邀请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.subDisabled = true
|
||||
const {proposalId, users, proposalName} = this.secondedFormData
|
||||
const resp = await $.post(loc() + "/addSeconded", {
|
||||
proposalId: proposalId,
|
||||
proposalName: proposalName,
|
||||
users: JSON.stringify(users)
|
||||
})
|
||||
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: '邀请附议人成功'});
|
||||
this.userOptions = []
|
||||
this.secondedFormData.users = []
|
||||
this.secondedData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.subDisabled = false
|
||||
})
|
||||
}).catch(() => {
|
||||
|
||||
});*/
|
||||
},
|
||||
async getDictByCode() {
|
||||
const {data} = await $.get("/platform/proposal/basics/config/getDictByCode", {code: "proposal_manner"})
|
||||
return data
|
||||
},
|
||||
async initData() {
|
||||
this.config = await proposal.getProposalConfig()
|
||||
this.meetingOptions = await proposal.getOpenMeeting()
|
||||
this.typeOptions = await proposal.getProposalType()
|
||||
this.unitOptions = await proposal.getProposalUndertake()
|
||||
this.allMannerList = await this.getDictByCode("proposal_manner");
|
||||
this.pageForm.teacherMeetingId = this.meetingOptions ? this.meetingOptions[0].id : null
|
||||
this.jdhList = await getAllJdh()
|
||||
if (this.jdhList.length > 0) {
|
||||
this.pageForm2.jdhid = this.jdhList[0].id
|
||||
this.delegations = await getDbt(this.jdhList[0].id)
|
||||
}
|
||||
this.unionList = await getUnion();
|
||||
this.allUnitList = await getUnit();
|
||||
this.unitList = clone(this.allUnitList);
|
||||
if (this.meetingOptions.length === 0) {
|
||||
this.notifyWarning('当前没有开启的教代会,无法撰写提案!')
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
this.delegationOptions = await proposal.getDelegation(this.pageForm.teacherMeetingId)
|
||||
// this.committeeOptions = await proposal.getCommittee(this.pageForm.teacherMeetingId)
|
||||
|
||||
const {teacherMeetingId} = this.pageForm
|
||||
const data = await proposal.getDelegationId(teacherMeetingId)
|
||||
|
||||
const jgcy = await $.post(loc() + "/getJdhJgcy", {jdhid: teacherMeetingId})
|
||||
const cbdwFzr = await $.post(loc() + "/getCbdwFzr")
|
||||
if (jgcy.data > 0) {
|
||||
const jgName = await $.post(loc() + "/getJgNameByuser")
|
||||
this.committeeOptions = jgName.data
|
||||
}
|
||||
|
||||
|
||||
if (this.allMannerList.length > 0) {
|
||||
this.config.manner.forEach(v => {
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('jdhdb01')}" === 'true' && v === "W01") {
|
||||
this.mannerList.push(this.allMannerList.find(z => z.code == v))
|
||||
}
|
||||
if ("${@shiro.hasRole('sysadmin')||(@shiro.hasRole('jdhdb01')&&@shiro.hasRole('jdhdbt01'))}" === 'true' && v === "W02") {
|
||||
this.mannerList.push(this.allMannerList.find(z => z.code == v))
|
||||
}
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('jdhdb01')}" === 'true' && v === "W03" && jgcy.data > 0) {
|
||||
this.mannerList.push(this.allMannerList.find(z => z.code == v))
|
||||
}
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('jdhdb01')}" === 'true' && v === "W04" && cbdwFzr.data > 0) {
|
||||
this.mannerList.push(this.allMannerList.find(z => z.code == v))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
this.formData = {
|
||||
username: '${@shiro.getPrincipalProperty("username")}',
|
||||
createTime: moment().format('YYYY-MM-DD'),
|
||||
teacherMeetingId: teacherMeetingId,
|
||||
delegationId: data ? data.dbtid : '',
|
||||
id: '',
|
||||
sign: '',
|
||||
mannerCode: 'W01'
|
||||
}
|
||||
|
||||
|
||||
this.$nextTick(() => {
|
||||
$("#briefEditor").html("")
|
||||
$("#measuresEditor").html("")
|
||||
|
||||
briefEditor = new E("#briefEditor")
|
||||
briefEditor.config.onchange = (html) => {
|
||||
this.formData.brief = html
|
||||
}
|
||||
measuresEditor = new E("#measuresEditor")
|
||||
measuresEditor.config.onchange = (html) => {
|
||||
this.formData.measures = html
|
||||
}
|
||||
briefEditor.create()
|
||||
measuresEditor.create()
|
||||
})
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
|
||||
const id = GetQueryString("proposalId")
|
||||
|
||||
if (id) {
|
||||
await this.editProposal()
|
||||
} else {
|
||||
if (this.config.writeRemind) {
|
||||
this.writeRemindDialog = true
|
||||
}
|
||||
}
|
||||
// await this.editProposal()
|
||||
},
|
||||
async editProposal() {
|
||||
const id = GetQueryString("proposalId")
|
||||
if (id) {
|
||||
const resp = await $.get("/platform/proposal/transact/compose/findOne", {id})
|
||||
if (resp.data.files) {
|
||||
resp.data.files = JSON.parse(resp.data.files)
|
||||
}
|
||||
this.formData = resp.data
|
||||
this.$nextTick(() => {
|
||||
briefEditor.txt.html(resp.data.brief)
|
||||
measuresEditor.txt.html(resp.data.measures)
|
||||
})
|
||||
|
||||
}
|
||||
},
|
||||
async meetingChange(val) {
|
||||
this.formData.delegationId = null
|
||||
this.formData.committeeId = null
|
||||
this.delegationOptions = await proposal.getDelegation(val)
|
||||
// this.committeeOptions = await proposal.getCommittee(val)
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Reference in New Issue
Block a user