This commit is contained in:
2026-07-14 16:28:22 +08:00
parent 24e2d9e826
commit f39735f1f2
37 changed files with 468 additions and 251 deletions
@@ -276,11 +276,12 @@ layout("/layouts/platform.html"){
if (resp.code === 0) {
this.$message.success(resp.msg)
this.updateDialog = false
this.pageData()
}
})
})
.finally(() => {
this.updateLoading = false
.finally(() => {
this.updateLoading = false
})
})
},
listUnit() {
@@ -12,6 +12,7 @@ const PROPOSAL_INFO = {
</h3>
<el-descriptions :column="3" border>
<el-descriptions-item label="提案编号">{{ viewData.code }}</el-descriptions-item>
<el-descriptions-item label="立案编号">{{ viewData.caseFilingCode || '暂无' }}</el-descriptions-item>
<el-descriptions-item label="提案人">{{viewData.createUserName }}</el-descriptions-item>
<el-descriptions-item label="提案时间">{{ viewData.createTime }}</el-descriptions-item>
<el-descriptions-item label="教代会届次"> {{ viewData.sessionName || '暂无' }}</el-descriptions-item>
@@ -87,7 +88,8 @@ const PROPOSAL_INFO = {
<div style="display: flex;justify-content: center">
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="row.caseFilingResult"></dict-tag>
<template v-if="row.caseFilingType">
<!-- 普通提案/重点提案暂不展示,历史数据仍保留。 -->
<template v-if="false">
(
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_TYPE"
:value="row.caseFilingType"></dict-tag>
@@ -107,9 +109,22 @@ const PROPOSAL_INFO = {
</div>
</el-dialog>
<template v-for="task in doneTasks">
<div class="mt10">
<div class="process-title">{{ task.displayName }}</div>
<!--审核信息采用手风琴展示,同一时间最多展开一条记录,避免流程较长时页面内容一次性全部铺开。-->
<template v-if="doneTasks.length">
<div class="process-title">审核信息</div>
<el-collapse v-model="activeTaskId" accordion>
<el-collapse-item v-for="task in doneTasks" :key="task.id" :name="task.id">
<template slot="title">
<!--折叠标题使用独立的单行布局,避免复用 process-title 后产生外边距和高度冲突。-->
<div style="display: flex;align-items: center;justify-content: space-between;width: 100%;min-width: 0;padding-left: 10px">
<span style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;font-size: 15px;font-weight: 600">
{{ task.displayName }}
</span>
<span style="flex-shrink: 0;margin-right: 8px;color: var(--color-primary);font-weight: 400">
{{ activeTaskId === task.id ? '收起' : '展开' }}
</span>
</div>
</template>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName
@@ -154,7 +169,8 @@ const PROPOSAL_INFO = {
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="task.ext.tf_caseFilingResult"></dict-tag>
<template v-if="task.ext.tf_caseFilingType">
<!-- 普通提案/重点提案暂不展示,历史流程变量仍保留。 -->
<template v-if="false">
(
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_TYPE"
:value="task.ext.tf_caseFilingType"></dict-tag>
@@ -200,7 +216,8 @@ const PROPOSAL_INFO = {
<div v-html="task.taskFormData.tf_opinion"></div>
</el-descriptions-item>
</el-descriptions>
</div>
</el-collapse-item>
</el-collapse>
</template>
<slot></slot>
@@ -215,6 +232,7 @@ const PROPOSAL_INFO = {
return {
viewData: {},
doneTasks: [],
activeTaskId: null,
row: null,
viewDialogVisible: false
}
@@ -224,6 +242,9 @@ const PROPOSAL_INFO = {
onOpen(row) {
this.row = row
this.visible = true
// 切换提案时先清空上一条提案的审核记录和展开状态,避免异步加载期间展示旧数据。
this.doneTasks = []
this.activeTaskId = null
this.getInfo()
this.getDoneTasks()
},
@@ -249,9 +270,12 @@ const PROPOSAL_INFO = {
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
const tasks = res.data || []
this.doneTasks = tasks
// 审核记录加载完成后默认全部折叠,由用户按需展开查看。
this.activeTaskId = null
// 通知外层页面已办节点数据已加载完成,便于当前环节做表单回显。
this.$emit("done-tasks", res.data)
this.$emit("done-tasks", tasks)
}
})
},
@@ -99,14 +99,14 @@ layout("/layouts/platform.html"){
</el-radio>
</el-radio-group>
<span class="text-primary ml10" v-if="formData.tf_caseCheckNeedSecondReply">
(请选择需要进入二次答复的办单位,可多选)
(请选择需要进入二次答复的办单位,可多选)
</span>
</el-form-item>
<el-form-item
label="答复单位"
prop="tf_secondReplyUnitIds"
v-if="formData.tf_caseCheckNeedSecondReply"
:rules="[{required:formData.tf_caseCheckNeedSecondReply === 1,message:'请选择需要二次答复的办单位',trigger:['change','blur']}]"
:rules="[{required:formData.tf_caseCheckNeedSecondReply === 1,message:'请选择需要二次答复的办单位',trigger:['change','blur']}]"
>
<el-select v-model="formData.tf_secondReplyUnitIds" clearable filterable multiple style="width: 100%">
<el-option
@@ -123,7 +123,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<!-- <el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>-->
<!-- <el-button @click="handleTaskAction(2)" size="small" type="danger">不同意</el-button>-->
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
@@ -242,7 +242,7 @@ layout("/layouts/platform.html"){
})
},
// 二次答复只能选择当前提案已配置的办单位,避免误选到别的单位。
// 二次答复只能选择当前提案已配置的办单位,避免误选到别的单位。
loadReplyUnits(proposalId) {
this.$axios.post("/platform/proposal/case/check/listReplyUnits", { proposalId: proposalId }).then((res) => {
if (res.code === 0) {
@@ -100,7 +100,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="doSubmit" size="small" type="primary">提交</el-button>
</el-row>
</div>
@@ -120,7 +120,8 @@ layout("/layouts/platform.html"){
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="['CONFIRM_FILING'].includes(formData.tf_caseFilingResult)" label="立案类型"
<!-- 普通提案/重点提案暂不展示,保留原字段和处理逻辑,便于兼容历史流程数据。 -->
<el-form-item v-if="false" label="立案类型"
prop="tf_caseFilingType"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.tf_caseFilingType" size="small">
@@ -130,9 +131,9 @@ layout("/layouts/platform.html"){
</el-radio-group>
</el-form-item>
<el-form-item
:label="formData.tf_caseFilingResult === 'SUGGESTION' ? '办单位' : '主办单位'"
:label="formData.tf_caseFilingResult === 'SUGGESTION' ? '办单位' : '主办单位'"
v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)"
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:formData.tf_caseFilingResult === 'SUGGESTION' ? '请选择办单位' : '请选择主办单位',trigger:['change','blur']}]"
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:formData.tf_caseFilingResult === 'SUGGESTION' ? '请选择办单位' : '请选择主办单位',trigger:['change','blur']}]"
prop="tf_masterUnitIds"
>
<el-select v-model="formData.tf_masterUnitIds" filterable clearable multiple
@@ -167,7 +168,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">提交</el-button>
</el-row>
@@ -228,7 +229,7 @@ layout("/layouts/platform.html"){
},
methods: {
/**
* “作为建议”不再区分主办/协办,只保留办单位;
* “作为建议”不再区分主办/协办,只保留办单位;
* 切到“不予立案”等结果时,同时清空已选单位,避免旧值被误提交。
*/
handleCaseFilingResultChange(caseFilingResult) {
@@ -271,7 +272,7 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消",
type: "warning"
}).then(() => {
// “作为建议”统一按办单位处理,提交时不再携带协办单位数据。
// “作为建议”统一按办单位处理,提交时不再携带协办单位数据。
const masterUnitIds = this.formData.tf_masterUnitIds || []
const slaveUnitIds = this.formData.tf_caseFilingResult === "CONFIRM_FILING" ? (this.formData.tf_slaveUnitIds || []) : []
// 是否有协办单位
@@ -411,7 +412,7 @@ layout("/layouts/platform.html"){
})
},
// 查询办单位
// 查询办单位
listUnderTake() {
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
if (res.code === 0) {
@@ -31,7 +31,8 @@ const merge = {
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="['CONFIRM_FILING'].includes(formData.tf_caseFilingResult)" label="立案类型"
<!-- 普通提案/重点提案暂不展示,保留原字段和处理逻辑,便于兼容历史流程数据。 -->
<el-form-item v-if="false" label="立案类型"
prop="tf_caseFilingType"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.tf_caseFilingType" size="small">
@@ -41,9 +42,9 @@ const merge = {
</el-radio-group>
</el-form-item>
<el-form-item
:label="formData.tf_caseFilingResult === 'SUGGESTION' ? '办单位' : '主办单位'"
:label="formData.tf_caseFilingResult === 'SUGGESTION' ? '办单位' : '主办单位'"
v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)"
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:formData.tf_caseFilingResult === 'SUGGESTION' ? '请选择办单位' : '请选择主办单位',trigger:['change','blur']}]"
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:formData.tf_caseFilingResult === 'SUGGESTION' ? '请选择办单位' : '请选择主办单位',trigger:['change','blur']}]"
prop="tf_masterUnitIds"
>
<el-select v-model="formData.tf_masterUnitIds" filterable clearable multiple style="width: 100%">
@@ -77,7 +78,7 @@ const merge = {
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$emit('close')" size="small">取消</el-button>
<el-button @click="$emit('close')" size="small">返回</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">提交</el-button>
</el-row>
@@ -104,7 +105,7 @@ const merge = {
methods: {
/**
* 并案审核与单案审核保持同一口径:
* “作为建议”只录入办单位,不再区分协办单位。
* “作为建议”只录入办单位,不再区分协办单位。
*/
handleCaseFilingResultChange(caseFilingResult) {
if (caseFilingResult !== "CONFIRM_FILING") {
@@ -132,7 +133,7 @@ const merge = {
}
this.selection.splice(index, 1)
},
// 查询办单位
// 查询办单位
listUnderTake() {
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
if (res.code === 0) {
@@ -121,7 +121,15 @@ layout("/layouts/platform.html"){
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="['CONFIRM_FILING'].includes(formData.tf_caseFilingResult)" label="立案类型"
<!-- 立案编号由审核人手工填写,仅确定立案时参与校验和保存。 -->
<el-form-item v-if="formData.tf_caseFilingResult === 'CONFIRM_FILING'"
label="立案编号"
prop="tf_caseFilingCode"
:rules="[{required:true,message:'请填写立案编号',trigger:['change','blur']}]">
<el-input v-model="formData.tf_caseFilingCode" clearable maxlength="20"
show-word-limit placeholder="请输入立案编号"></el-input>
</el-form-item>
<!-- <el-form-item v-if="['CONFIRM_FILING'].includes(formData.tf_caseFilingResult)" label="立案类型"
prop="tf_caseFilingType"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.tf_caseFilingType" size="small">
@@ -129,11 +137,11 @@ layout("/layouts/platform.html"){
{{item.label}}
</el-radio>
</el-radio-group>
</el-form-item>
</el-form-item>-->
<el-form-item
:label="formData.tf_caseFilingResult === 'SUGGESTION' ? '办单位' : '主办单位'"
:label="formData.tf_caseFilingResult === 'SUGGESTION' ? '办单位' : '主办单位'"
v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)"
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:formData.tf_caseFilingResult === 'SUGGESTION' ? '请选择办单位' : '请选择主办单位',trigger:['change','blur']}]"
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:formData.tf_caseFilingResult === 'SUGGESTION' ? '请选择办单位' : '请选择主办单位',trigger:['change','blur']}]"
prop="tf_masterUnitIds"
>
<el-select v-model="formData.tf_masterUnitIds" filterable clearable multiple
@@ -168,7 +176,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">提交</el-button>
</el-row>
@@ -223,11 +231,12 @@ layout("/layouts/platform.html"){
},
methods: {
/**
* “作为建议”场景下只保留办单位,协办单位和立案类型都要及时清空,
* “作为建议”场景下只保留办单位,协办单位和立案类型都要及时清空,
* 避免旧表单值跟着一起提交到流程里。
*/
handleCaseFilingResultChange(caseFilingResult) {
if (caseFilingResult !== "CONFIRM_FILING") {
this.$set(this.formData, "tf_caseFilingCode", "")
this.$set(this.formData, "tf_caseFilingType", "")
}
if (caseFilingResult === "SUGGESTION") {
@@ -281,9 +290,10 @@ layout("/layouts/platform.html"){
if (!val || !val.length) {
return
}
// 当前页面需要回显上一环节“提案委员会立案”保存的主办/协办单位或办单位。
// 当前页面需要回显上一环节“提案委员会立案”保存的主办/协办单位或办单位。
var data = val[val.length - 1]
this.$set(this.formData, "tf_caseFilingResult", data.ext.tf_caseFilingResult)
this.$set(this.formData, "tf_caseFilingCode", data.ext.tf_caseFilingCode || "")
this.$set(this.formData, "tf_caseFilingType", data.ext.tf_caseFilingType)
this.$set(this.formData, "tf_masterUnitIds", this.normalizeUnitIds(data.ext.tf_masterUnitIds))
this.$set(this.formData, "tf_slaveUnitIds", this.normalizeUnitIds(data.ext.tf_slaveUnitIds))
@@ -296,6 +306,7 @@ layout("/layouts/platform.html"){
proposalId: row.id,
processTaskId: row.taskId,
taskName: row.curTaskName,
tf_caseFilingCode: "",
tf_masterUnitIds: [],
tf_slaveUnitIds: []
}
@@ -311,7 +322,7 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消",
type: "warning"
}).then(() => {
// “作为建议”统一按办单位处理,提交时不再携带协办单位数据。
// “作为建议”统一按办单位处理,提交时不再携带协办单位数据。
const masterUnitIds = this.formData.tf_masterUnitIds || []
const slaveUnitIds = this.formData.tf_caseFilingResult === "CONFIRM_FILING" ? (this.formData.tf_slaveUnitIds || []) : []
// 是否有协办单位
@@ -436,7 +447,7 @@ layout("/layouts/platform.html"){
})
},
// 查询办单位
// 查询办单位
listUnderTake() {
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
if (res.code === 0) {
@@ -64,7 +64,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<span slot="footer">
<el-button size="small" @click="jumpDialogVisible = false">取消</el-button>
<el-button size="small" @click="jumpDialogVisible = false">返回</el-button>
<el-button size="small" type="primary" @click="doJump">确定</el-button>
</span>
</el-dialog>
@@ -81,7 +81,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">不同意</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
@@ -94,7 +94,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">提交</el-button>
</el-row>
</div>
@@ -85,7 +85,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="handleTaskAction(4)" size="small" type="info">退回到提案人(不审核)</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人(审核)</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">不同意</el-button>
@@ -119,7 +119,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="handleTaskAction('back')" size="small" type="danger">退回提委会立案</el-button>
<el-button @click="handleTaskAction('agree')" size="small" type="primary">同意</el-button>
</el-row>
@@ -146,7 +146,7 @@ layout("/layouts/platform.html"){
{label: "提案编号", prop: "code"},
{label: "提案名称", prop: "name", width: "200px"},
{label: "提案类别", prop: "typeName"},
{label: "办单位", prop: "undertakeUnits", width: "260px"},
{label: "办单位", prop: "undertakeUnits", width: "260px"},
{label: "是否并案", prop: "merge"},
{label: "当前节点", prop: "curTaskName"},
{label: "审核人", prop: "auditUser"},
@@ -164,8 +164,8 @@ layout("/layouts/platform.html"){
},
methods: {
/**
* 校领导审批列表需要按立案结果切换办单位展示口径:
* 确定立案显示主办/协办,作为建议只显示办单位。
* 校领导审批列表需要按立案结果切换办单位展示口径:
* 确定立案显示主办/协办,作为建议只显示办单位。
*/
getUndertakeDisplay(row) {
var masterUnitNames = this.formatUnitNames(row.masterUnitName)
@@ -81,12 +81,12 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end" v-if="row.curTaskCode ==='second'">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回返回</el-button>
<el-button @click="handleTaskAction(20)" size="small" type="danger">不同意</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
</el-row>
<el-row type="flex" justify="end" v-else>
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="updateSecond(2)" size="small" type="danger">不同意</el-button>
<el-button @click="updateSecond(1)" size="small" type="primary">同意</el-button>
</el-row>
@@ -143,7 +143,7 @@ layout("/layouts/platform.html"){
<proposal-info ref="proposalInfoRef">
<div v-if="showApprovalForm">
<div class="process-title">
办单位意见
单位意见
</div>
<el-form :model="formData" ref="formRef" label-width="80px" :rules="formRules" label-suffix="">
<el-form-item label="承办意向" prop="result"
@@ -160,7 +160,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="onAudit()" size="small" type="primary">提交</el-button>
</el-row>
</div>
@@ -208,7 +208,7 @@ layout("/layouts/platform.html"){
{label: "提案类别", prop: "typeName"},
{label: "届次", prop: "sessionName"},
{label: "代表团", prop: "delegationName"},
{label: "建议办单位", prop: "suggestUnits"},
{label: "建议办单位", prop: "suggestUnits"},
{label: "意见数", prop: "count"},
{label: "当前节点", prop: "curTaskName"},
{label: "流程状态", prop: "instanceState"}
@@ -83,7 +83,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到提案人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">不同意</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意</el-button>
@@ -75,7 +75,7 @@ layout("/layouts/platform.html"){
<el-tag v-else size="mini" type="info"></el-tag>
</template>
</el-table-column>
<el-table-column label="办单位" prop="underTakeName" show-overflow-tooltip></el-table-column>
<el-table-column label="办单位" prop="underTakeName" show-overflow-tooltip></el-table-column>
<el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" fixed="right" width="100px">
<template scope="{row}">
@@ -105,7 +105,7 @@ layout("/layouts/platform.html"){
<el-divider></el-divider>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="办单位">
<el-form-item label="办单位">
<el-input :value="formData.underTakeName" disabled></el-input>
</el-form-item>
<el-form-item label="能否承办" prop="canTake" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
@@ -128,7 +128,7 @@ layout("/layouts/platform.html"){
<!-- </el-form-item>-->
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button plain @click="$refs.guava.index()">返回</el-button>
<el-button type="primary" @click="doApproval('DYNAMIC')">提交</el-button>
</el-row>
</div>
@@ -148,7 +148,7 @@ layout("/layouts/platform.html"){
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
<!--办单位领导、超级管理员才能转办-->
<!--单位领导、超级管理员才能转办-->
<el-button v-if="!pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')"
@click="openTransfer(row)" size="mini" type="primary">转交
</el-button>
@@ -165,7 +165,7 @@ layout("/layouts/platform.html"){
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" label-width="80px" :rules="formRules" label-suffix="">
<el-form-item label="办单位">
<el-form-item label="办单位">
<el-input :value="formData.underTakeName" disabled></el-input>
</el-form-item>
<el-form-item label="落实情况" prop="tf_implementState"
@@ -200,7 +200,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="$refs.guava.index()" size="small">返回</el-button>
<!-- <el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>-->
<el-button @click="handleTaskAction(1)" size="small" type="primary">提交</el-button>
</el-row>
@@ -246,7 +246,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="showTransferDialog = false" size="small">取消</el-button>
<el-button @click="showTransferDialog = false" size="small">返回</el-button>
<el-button @click="handleTransfer" size="small" type="primary">提交</el-button>
</el-row>
</el-dialog>
@@ -265,7 +265,7 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="showReplyEditDialog = false" size="small">取消</el-button>
<el-button @click="showReplyEditDialog = false" size="small">返回</el-button>
<el-button @click="handleReplyEdit" size="small" type="primary">保存</el-button>
</el-row>
</el-dialog>
@@ -291,7 +291,7 @@ layout("/layouts/platform.html"){
{label: "提案类别", prop: "typeName"},
{label: "立案结果", prop: "caseFilingResult"},
{label: "是否并案", prop: "merge"},
{label: "办单位", prop: "underTakeName"},
{label: "办单位", prop: "underTakeName"},
{label: "承办类型", prop: "underTakeIsMaster"},
{label: "当前节点", prop: "curTaskName"},
{label: "审核人", prop: "auditUser"},
@@ -134,9 +134,9 @@ layout("/layouts/platform.html"){
<!-- ></el-input>-->
<!-- </el-form-item>-->
<el-form-item label="建议办单位" prop="suggestUnits" v-if="false">
<el-form-item label="建议办单位" prop="suggestUnits" v-if="false">
<el-select v-model="formData.suggestUnits" multiple filterable style="width: 100%"
placeholder="请选择建议办单位">
placeholder="请选择建议办单位">
<el-option :key="item.id" :label="item.name" :value="item.name"
v-for="item in suggestUnitOptions"></el-option>
</el-select>
@@ -270,7 +270,7 @@ layout("/layouts/platform.html"){
sessionId: [{required: true, message: "请选择所属教代会", trigger: ["blur", "change"]}],
committeeId: [{required: true, message: "请选择所属委员会", trigger: ["blur", "change"]}],
typeId: [{required: true, message: "请选择提案类别", trigger: ["blur", "change"]}],
suggestUnits: [{required: true, message: "请选择建议办单位", trigger: ["blur", "change"]}],
suggestUnits: [{required: true, message: "请选择建议办单位", trigger: ["blur", "change"]}],
sign: [{required: true, message: "请扫描二维码进行签字", trigger: ["blur", "change"]}],
excerpt: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
researchFindings: [{required: true, message: "请填写", trigger: ["blur", "change"]}],
@@ -285,7 +285,7 @@ layout("/layouts/platform.html"){
isWriteTime: true,
// 建议办单位
// 建议办单位
suggestUnitOptions: []
}
},
@@ -474,7 +474,7 @@ layout("/layouts/platform.html"){
},
// 建议办单位
// 建议办单位
listSuggestUnit() {
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
if (res.code === 0) {
@@ -34,15 +34,32 @@ const BASIC_TABLE_COMPONENT = {
<el-dialog :visible.sync="dialogFormVisible" :title="isEdit ? '编辑' : '新增'" width="40%">
<el-form :model="formData" ref="formRef" :rules="rules" label-width="100px">
<el-form-item label="上级机构名称">
<el-input :value="parentName || '-'" disabled></el-input>
</el-form-item>
<el-form-item label="机构名称" prop="name">
<el-input placeholder="请输入机构名称" v-model="formData.name"></el-input>
</el-form-item>
<el-form-item label="机构代码" prop="code">
<el-input placeholder="请输入机构代码" v-model="formData.code" :disabled="isEdit"></el-input>
</el-form-item>
<template v-if="!isEdit">
<el-form-item label="机构名称" prop="institutionPath">
<el-cascader
v-model="formData.institutionPath"
:options="treeList"
:props="cascaderProps"
@change="institutionChange"
placeholder="请选择机构"
style="width: 100%"
></el-cascader>
</el-form-item>
<el-form-item label="机构代码">
<el-input :value="formData.code" disabled placeholder="选择机构后自动带出"></el-input>
</el-form-item>
</template>
<template v-else>
<el-form-item label="上级机构名称">
<el-input :value="parentName || '-'" disabled></el-input>
</el-form-item>
<el-form-item label="机构名称" prop="name">
<el-input placeholder="请输入机构名称" v-model="formData.name"></el-input>
</el-form-item>
<el-form-item label="机构代码" prop="code">
<el-input placeholder="请输入机构代码" v-model="formData.code" disabled></el-input>
</el-form-item>
</template>
<el-form-item label="排序编码" prop="location">
<el-input-number v-model="formData.location" :min="0" :step="1" style="width: 100%"></el-input-number>
</el-form-item>
@@ -75,6 +92,7 @@ const BASIC_TABLE_COMPONENT = {
data() {
return {
rules: {
institutionPath: [{ type: "array", required: true, message: "请选择机构", trigger: "change" }],
name: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
code: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
parentId: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
@@ -82,6 +100,14 @@ const BASIC_TABLE_COMPONENT = {
},
parentData: {},
parentIds: [],
treeList: [],
treeFlat: [],
cascaderProps: {
checkStrictly: true,
multiple: false,
label: "name",
value: "id"
},
dialogFormVisible: false,
isEdit: false
}
@@ -105,9 +131,11 @@ const BASIC_TABLE_COMPONENT = {
this.isEdit = false
this.dialogFormVisible = true
this.formData = {
institutionPath: [],
parentId: this.parentId,
location: 0
}
this.listFormTree()
},
openEdit(row) {
this.isEdit = true
@@ -117,6 +145,29 @@ const BASIC_TABLE_COMPONENT = {
location: row.location || 0
}
},
/**
* 加载双代会固定机构字典树新增机构只能从该树中选择
* 接口返回 treeList 用于级联展示treeFlat 用于按所选字典ID回填名称和代码
*/
listFormTree() {
this.$axios.post("/platform/teacherCongress/institution/formTree", {
sessionId: this.sessionId
}).then((res) => {
if (res.code === 0) {
this.treeList = res.data.treeList || []
this.treeFlat = res.data.treeFlat || []
}
})
},
/**
* 固定机构选择变化后回填业务名称和机构代码清空选择时同步清空旧值
*/
institutionChange(institutionPath) {
const institutionId = institutionPath.length ? institutionPath[institutionPath.length - 1] : null
const institution = this.treeFlat.find(item => item.id === institutionId)
this.$set(this.formData, "name", institution ? institution.name : "")
this.$set(this.formData, "code", institution ? institution.code : "")
},
isBasicInstitution(index) {
const pageNumber = this.pageForm.pageNumber || 1
const pageSize = this.pageForm.pageSize || 10
@@ -127,12 +178,18 @@ const BASIC_TABLE_COMPONENT = {
if (!valid) {
return
}
this.formData.sessionId = this.sessionId
const params = {
...this.formData,
sessionId: this.sessionId
}
if (!this.isEdit) {
this.formData.parentId = this.parentId
const institutionPath = this.formData.institutionPath || []
// 下级机构先提交固定字典中的父级ID,由后端转换为当前届次的实际父机构ID。
params.parentId = institutionPath.length > 1 ? institutionPath[institutionPath.length - 2] : this.parentId
delete params.institutionPath
}
const url = this.isEdit ? loc() + "/update" : loc() + "/insert"
this.$axios.post(url, this.formData).then((res) => {
this.$axios.post(url, params).then((res) => {
if (res.code === 0) {
this.dialogFormVisible = false
this.$message.success(res.msg)
@@ -49,8 +49,9 @@ layout("/layouts/platform.html"){
"basic-table": BASIC_TABLE_COMPONENT
},
computed: {
// 根节点即使尚无子机构也要展示机构列表,确保空届次可以创建第一条机构。
hasChildInstitution() {
return this.currentTreeData && this.currentTreeData.children && this.currentTreeData.children.length > 0
return this.currentTreeData && (this.currentTreeData.id === "0" || (this.currentTreeData.children && this.currentTreeData.children.length > 0))
}
},
data() {
@@ -35,6 +35,7 @@ layout("/layouts/platform.html"){
<el-table-column prop="year" label="年份" sortable></el-table-column>
<el-table-column prop="j" label="届数" sortable></el-table-column>
<el-table-column prop="c" label="次数" sortable></el-table-column>
<el-table-column prop="proposalType" label="提案类型" show-overflow-tooltip></el-table-column>
<el-table-column prop="description" label="描述"></el-table-column>
<el-table-column prop="startDate" label="开启时间"></el-table-column>
<el-table-column prop="enable" label="开启状态">
@@ -78,6 +79,15 @@ layout("/layouts/platform.html"){
<dict-select v-model="formData.c" code="TEACHER_CONGRESS_C"></dict-select>
</el-form-item>
<!-- 支持复用历史类型,也允许直接输入并创建新的届次提案类型。 -->
<el-form-item prop="proposalType" label="提案类型">
<el-select v-model="formData.proposalType" clearable filterable allow-create default-first-option
placeholder="请选择或输入提案类型" style="width: 100%">
<el-option v-for="item in proposalTypeOptions" :key="item.proposalType"
:label="item.proposalType" :value="item.proposalType"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="description" label="描述">
<el-input type="textarea" :rows="2" style="width: 100%" placeholder="请输入教代会描述"
v-model="formData.description"></el-input>
@@ -139,12 +149,17 @@ layout("/layouts/platform.html"){
year: [{required: true, message: "必填", trigger: ["change", "blur"]}],
j: [{required: true, message: "必填", trigger: ["change", "blur"]}],
c: [{required: true, message: "必填", trigger: ["change", "blur"]}],
proposalType: [
{required: true, message: "请选择或输入提案类型", trigger: ["change", "blur"]},
{max: 50, message: "提案类型最多50个字", trigger: ["change", "blur"]}
],
enable: [{required: true, message: "必填", trigger: ["change", "blur"]}],
description: [{required: true, message: "必填", trigger: ["change", "blur"]}],
isExtend: [{required: true, message: "必填", trigger: ["change", "blur"]}],
collectStartTime: [{required: true, message: "必填", trigger: ["change", "blur"]}],
collectEndTime: [{required: true, message: "必填", trigger: ["change", "blur"]}]
}
},
proposalTypeOptions: []
}
},
methods: {
@@ -152,6 +167,7 @@ layout("/layouts/platform.html"){
this.dialogFormVisible = true
this.$nextTick(() => {
this.formData = {}
this.$set(this.formData, "proposalType", "")
})
},
openEdit(id) {
@@ -173,6 +189,7 @@ layout("/layouts/platform.html"){
this.dialogFormVisible = false
this.$message.success(res.msg)
this.doSearch()
this.listProposalTypes()
}
}).finally(() => {
loading.close()
@@ -194,10 +211,20 @@ layout("/layouts/platform.html"){
}
})
})
},
// 查询历史届次已保存的提案类型,作为可输入下拉框的候选项。
listProposalTypes() {
this.$axios.post(loc() + "/listProposalTypes").then((res) => {
if (res.code === 0) {
this.proposalTypeOptions = res.data || []
}
})
}
},
created() {
this.pageData()
this.listProposalTypes()
}
})
</script>
@@ -65,6 +65,7 @@ layout("/layouts/platform.html"){
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
ref="table" row-key="id" style="width: 100%"
v-loading="tableLoading"
:summary-method="getSummaries" :show-summary="showSummary">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"
fixed="left"></el-table-column>
@@ -10,6 +10,7 @@ const PROPOSAL_INFO = {
</div>
</van-cell>
<van-cell title="提案编号">{{ viewData.code }}</van-cell>
<van-cell title="立案编号">{{ viewData.caseFilingCode || '暂无' }}</van-cell>
<van-cell title="提案人">{{ viewData.createUserName }}</van-cell>
<van-cell title="提案时间">{{ viewData.createTime }}</van-cell>
<van-cell title="教代会届次">{{ viewData.fullName }}</van-cell>