|
|
@@ -209,7 +209,7 @@
|
|
|
</el-tab-pane>
|
|
|
|
|
|
<!-- Tab5:审批记录 -->
|
|
|
- <!-- <el-tab-pane label="审批记录" name="history">
|
|
|
+ <el-tab-pane label="审批记录" name="history">
|
|
|
<el-timeline>
|
|
|
<el-timeline-item
|
|
|
v-for="record in selectedProject.approvalRecords || []"
|
|
|
@@ -236,7 +236,7 @@
|
|
|
:image-size="60"
|
|
|
/>
|
|
|
</el-timeline>
|
|
|
- </el-tab-pane> -->
|
|
|
+ </el-tab-pane>
|
|
|
</el-tabs>
|
|
|
|
|
|
<!-- 审批操作区 -->
|
|
|
@@ -355,19 +355,35 @@ const selectProject = async (project: any) => {
|
|
|
}
|
|
|
|
|
|
// ========== 步骤条 ==========
|
|
|
-/**
|
|
|
- * 根据项目当前状态动态生成步骤
|
|
|
- * - 预审中:只显示 预审节点
|
|
|
- * - 预审通过 + 未提交正式:显示 预审完成 + 正式待提交
|
|
|
- * - 正式中:预审完成 + 正式的各级节点
|
|
|
- */
|
|
|
+
|
|
|
const flowSteps = computed(() => {
|
|
|
const p = selectedProject.value
|
|
|
if (!p) return []
|
|
|
|
|
|
const steps: any[] = []
|
|
|
+ const records = p.approvalRecords || []
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取某节点"最终有效"的审批记录
|
|
|
+ * - 只取通过(1)/驳回(2),排除提交(4)、撤回(3)
|
|
|
+ * - 多条时取最后一条(按 approveTime / id 排序)
|
|
|
+ */
|
|
|
+ const getFinalRecord = (stage: number, node: number) => {
|
|
|
+ const matched = records
|
|
|
+ .filter(
|
|
|
+ (r: any) => r.stage === stage && r.node === node && (r.result === 1 || r.result === 2)
|
|
|
+ )
|
|
|
+ // 用 approveTime 排序,没有就退回 id
|
|
|
+ .sort((a: any, b: any) => {
|
|
|
+ const ta = a.approveTime ? new Date(a.approveTime).getTime() : 0
|
|
|
+ const tb = b.approveTime ? new Date(b.approveTime).getTime() : 0
|
|
|
+ if (ta !== tb) return ta - tb
|
|
|
+ return (a.id || 0) - (b.id || 0)
|
|
|
+ })
|
|
|
+ return matched.length ? matched[matched.length - 1] : null
|
|
|
+ }
|
|
|
|
|
|
- // ---------- 预审阶段 ----------
|
|
|
+ // ---------- 1. 提交预审 ----------
|
|
|
steps.push({
|
|
|
name: '提交预审',
|
|
|
handler: p.projectLeader || '',
|
|
|
@@ -375,34 +391,24 @@ const flowSteps = computed(() => {
|
|
|
state: p.preSubmitTime ? 'done' : 'pending'
|
|
|
})
|
|
|
|
|
|
- // 预审二级
|
|
|
- const preSecondRecord = (p.approvalRecords || []).find(
|
|
|
- (r: any) => r.stage === STAGE_PRE && r.node === NODE_PRE_SECOND && r.result !== 4
|
|
|
- )
|
|
|
+ // ---------- 2. 预审审批 ----------
|
|
|
+ const preRecord = getFinalRecord(STAGE_PRE, NODE_PRE_SECOND)
|
|
|
if (p.preAuditStatus === AUDIT_PROCESSING && p.preCurrentNode === NODE_PRE_SECOND) {
|
|
|
+ // 当前正在预审
|
|
|
+ steps.push({ name: '预审审批', handler: '当前节点', date: '', state: 'current' })
|
|
|
+ } else if (preRecord) {
|
|
|
+ // 有最终记录:通过 or 驳回
|
|
|
steps.push({
|
|
|
name: '预审审批',
|
|
|
- handler: '当前节点',
|
|
|
- date: '',
|
|
|
- state: 'current'
|
|
|
- })
|
|
|
- } else if (preSecondRecord) {
|
|
|
- steps.push({
|
|
|
- name: '预审审批',
|
|
|
- handler: preSecondRecord.approverName,
|
|
|
- date: formatDateTime(preSecondRecord.approveTime),
|
|
|
- state: preSecondRecord.result === 1 ? 'done' : 'fail'
|
|
|
+ handler: preRecord.approverName || '',
|
|
|
+ date: formatDateTime(preRecord.approveTime),
|
|
|
+ state: preRecord.result === 1 ? 'done' : 'fail'
|
|
|
})
|
|
|
} else {
|
|
|
steps.push({ name: '预审审批', handler: '待处理', date: '', state: 'pending' })
|
|
|
}
|
|
|
|
|
|
- // 如果预审还没通过,后面的不显示
|
|
|
- if (p.preAuditStatus !== 2) {
|
|
|
- return steps
|
|
|
- }
|
|
|
-
|
|
|
- // ---------- 正式立项阶段 ----------
|
|
|
+ // ---------- 3. 正式立项阶段:永远显示完整流程 ----------
|
|
|
const formalNodes = [
|
|
|
{ node: NODE_FORMAL_FIRST, name: '专业公司审批' },
|
|
|
{ node: NODE_FORMAL_SECOND, name: '科技发展部审批' }
|
|
|
@@ -412,15 +418,13 @@ const flowSteps = computed(() => {
|
|
|
}
|
|
|
|
|
|
for (const n of formalNodes) {
|
|
|
- const record = (p.approvalRecords || []).find(
|
|
|
- (r: any) => r.stage === STAGE_FORMAL && r.node === n.node && r.result !== 4
|
|
|
- )
|
|
|
+ const record = getFinalRecord(STAGE_FORMAL, n.node)
|
|
|
if (p.formalAuditStatus === AUDIT_PROCESSING && p.formalCurrentNode === n.node) {
|
|
|
steps.push({ name: n.name, handler: '当前节点', date: '', state: 'current' })
|
|
|
} else if (record) {
|
|
|
steps.push({
|
|
|
name: n.name,
|
|
|
- handler: record.approverName,
|
|
|
+ handler: record.approverName || '',
|
|
|
date: formatDateTime(record.approveTime),
|
|
|
state: record.result === 1 ? 'done' : 'fail'
|
|
|
})
|