fix:1、提案查看的流程节点,增加排序
2、场地预约关闭按钮无法关闭的bug修复
This commit is contained in:
@@ -36,7 +36,7 @@ layout("/layouts/platform.html"){
|
||||
新增场地
|
||||
</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" :size="tableSize">
|
||||
<el-table v-loading="tableLoading" :data="tableData" @sort-change="pageOrder" :size="tableSize">
|
||||
<el-table-column label="序号" type="index" :index="indexMethod" width="60"></el-table-column>
|
||||
<el-table-column
|
||||
v-for="column in tableColumns"
|
||||
@@ -152,11 +152,23 @@ layout("/layouts/platform.html"){
|
||||
.catch(() => {})
|
||||
},
|
||||
switchChange(row) {
|
||||
this.$axios.post("/platform/siteCug/manage/submit", row).then((res) => {
|
||||
const previousState = !row.state
|
||||
this.tableLoading = true
|
||||
this.$axios.post("/platform/siteCug/manage/switchState", {
|
||||
id: row.id,
|
||||
state: row.state
|
||||
}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
// 状态更新失败时恢复开关,避免页面显示与数据库实际状态不一致。
|
||||
this.$set(row, "state", previousState)
|
||||
this.$message.warning(res.msg)
|
||||
}
|
||||
}).catch(() => {
|
||||
this.$set(row, "state", previousState)
|
||||
}).finally(() => {
|
||||
this.tableLoading = false
|
||||
})
|
||||
},
|
||||
querySiteType() {
|
||||
|
||||
@@ -110,10 +110,10 @@ const PROPOSAL_INFO = {
|
||||
</el-dialog>
|
||||
|
||||
<!--审核信息支持按需同时展开多条记录,初次加载和切换提案时仍保持全部折叠。-->
|
||||
<template v-if="doneTasks.length">
|
||||
<template v-if="displayDoneTasks.length">
|
||||
<div class="process-title">审核信息</div>
|
||||
<el-collapse v-model="activeTaskIds">
|
||||
<el-collapse-item v-for="task in doneTasks" :key="task.id" :name="task.id">
|
||||
<el-collapse-item v-for="task in displayDoneTasks" :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">
|
||||
@@ -125,8 +125,28 @@ const PROPOSAL_INFO = {
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<!--同一提案可能存在多个承办单位答复任务,查看时合并为一个流程节点,节点内保留每条答复。-->
|
||||
<template v-if="task.replyTasks">
|
||||
<el-descriptions v-for="replyTask in task.replyTasks" border class="flow-task-form"
|
||||
:column="3" :key="replyTask.id">
|
||||
<el-descriptions-item label="承办单位" :span="3">
|
||||
{{replyTask.ext.underTakeName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="办理用户">
|
||||
{{replyTask.taskFormData.userName}}({{replyTask.taskFormData.loginName}})
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="办理时间">{{replyTask.finishTime}}</el-descriptions-item>
|
||||
<el-descriptions-item label="办理结果">
|
||||
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
|
||||
:value="replyTask.ext.submitType"></dict-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="办理意见" :span="3">
|
||||
<div v-html="replyTask.taskFormData.tf_opinion"></div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</template>
|
||||
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
|
||||
v-if="task.ext.isFirstTaskNode">
|
||||
v-else-if="task.ext.isFirstTaskNode">
|
||||
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName
|
||||
}}({{task.ext.initiatorAccount}})
|
||||
</el-descriptions-item>
|
||||
@@ -233,6 +253,7 @@ const PROPOSAL_INFO = {
|
||||
tableLoading: false,
|
||||
viewData: {},
|
||||
doneTasks: [],
|
||||
displayDoneTasks: [],
|
||||
activeTaskIds: [],
|
||||
row: null,
|
||||
viewDialogVisible: false
|
||||
@@ -258,6 +279,7 @@ const PROPOSAL_INFO = {
|
||||
this.$set(this, "tableLoading", true)
|
||||
// 切换提案时先清空上一条提案的审核记录和展开状态,避免异步加载期间展示旧数据。
|
||||
this.doneTasks = []
|
||||
this.displayDoneTasks = []
|
||||
this.activeTaskIds = []
|
||||
let pendingRequestCount = 2
|
||||
const handleRequestComplete = () => {
|
||||
@@ -293,15 +315,94 @@ const PROPOSAL_INFO = {
|
||||
return this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
const tasks = res.data || []
|
||||
this.doneTasks = tasks
|
||||
// 提案历史按业务阶段展示,避免较晚完成的附议记录被排到团长审核之后。
|
||||
const sortedTasks = this.sortDoneTasks(tasks)
|
||||
this.$set(this, "doneTasks", sortedTasks)
|
||||
// 参考历史系统的展示方式,将多个单位的答复收纳在一个流程节点内。
|
||||
this.$set(this, "displayDoneTasks", this.groupReplyTasks(sortedTasks))
|
||||
// 审核记录加载完成后默认全部折叠,由用户按需展开查看。
|
||||
this.activeTaskIds = []
|
||||
// 通知外层页面已办节点数据已加载完成,便于当前环节做表单回显。
|
||||
this.$emit("done-tasks", tasks)
|
||||
this.$emit("done-tasks", this.doneTasks)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
/**
|
||||
* 按提案业务阶段对审核历史排序。
|
||||
*
|
||||
* @param tasks doneTasks 接口返回的已办任务数组
|
||||
* @return 排序后的新数组;同一阶段按办理时间、任务 ID 保持稳定顺序
|
||||
*/
|
||||
sortDoneTasks(tasks) {
|
||||
return (tasks || []).map((task, index) => ({task, index})).sort((left, right) => {
|
||||
const stageDiff = this.getTaskStageOrder(left.task) - this.getTaskStageOrder(right.task)
|
||||
if (stageDiff !== 0) {
|
||||
return stageDiff
|
||||
}
|
||||
const leftTime = String(left.task.finishTime || "")
|
||||
const rightTime = String(right.task.finishTime || "")
|
||||
if (leftTime !== rightTime) {
|
||||
if (!leftTime) return 1
|
||||
if (!rightTime) return -1
|
||||
return leftTime.localeCompare(rightTime)
|
||||
}
|
||||
const idDiff = Number(left.task.id || 0) - Number(right.task.id || 0)
|
||||
return idDiff !== 0 ? idDiff : left.index - right.index
|
||||
}).map((item) => item.task)
|
||||
},
|
||||
|
||||
/**
|
||||
* 将同一提案的承办单位答复任务合并成一个展示节点。
|
||||
*
|
||||
* @param tasks 已按业务阶段排好顺序的任务数组
|
||||
* @return 仅用于查看页面的展示数组;原始任务及每条答复内容均保存在 replyTasks 中
|
||||
*/
|
||||
groupReplyTasks(tasks) {
|
||||
const replyTaskNames = ["opinion_unit_reply", "unit_reply", "two_unit_reply", "master_reply", "slave_reply"]
|
||||
const replyTasks = (tasks || []).filter((task) => replyTaskNames.includes(task.taskName))
|
||||
if (!replyTasks.length) {
|
||||
return tasks || []
|
||||
}
|
||||
|
||||
const firstReplyTask = replyTasks[0]
|
||||
const replyTaskIds = new Set(replyTasks.map((task) => task.id))
|
||||
return (tasks || []).reduce((displayTasks, task) => {
|
||||
if (!replyTaskIds.has(task.id)) {
|
||||
displayTasks.push(task)
|
||||
} else if (task.id === firstReplyTask.id) {
|
||||
displayTasks.push({
|
||||
id: "reply-group-" + firstReplyTask.id,
|
||||
taskName: "replyGroup",
|
||||
displayName: "承办单位答复",
|
||||
replyTasks: replyTasks
|
||||
})
|
||||
}
|
||||
return displayTasks
|
||||
}, [])
|
||||
},
|
||||
|
||||
/**
|
||||
* 获取提案任务所属的展示阶段。
|
||||
* 未单列的预审核、委员审议、确认承办单位和复核记录统一放在委员会立案阶段,
|
||||
* 答复后的校领导审批通过 legacyStage 标识排在承办单位答复之后。
|
||||
*
|
||||
* @param task 单条已办任务
|
||||
* @return 数字类型的阶段顺序
|
||||
*/
|
||||
getTaskStageOrder(task) {
|
||||
const taskName = task.taskName
|
||||
const legacyStage = task.ext ? task.ext.legacyStage : ""
|
||||
if (taskName === "startTask") return 10
|
||||
if (taskName === "invite") return 15
|
||||
if (taskName === "second") return 20
|
||||
if (taskName === "delegation") return 30
|
||||
if (["opinion_unit_reply", "unit_reply", "two_unit_reply", "master_reply", "slave_reply"].includes(taskName)) return 50
|
||||
if (taskName === "schoolLeader" && legacyStage === "replyLeaderAudit") return 55
|
||||
if (taskName === "feedback") return 60
|
||||
return 40
|
||||
},
|
||||
|
||||
openChart(){
|
||||
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user