吉安感知网项目-前端
张含笑
2026-01-20 766c7dca5967f7c29d92e2c5d4dfba5c06a5d56a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<template>
  <div class="audit-record-container">
    <div class="label">审批记录</div>
    <el-steps :active="activeStep" direction="vertical" align-center>
      <el-step v-for="(step, index) in steps" :key="index" :title="step.title">
        <template #description>
          <div class="step-person">{{ step.person }}</div>
          <div class="step-time">{{ step.time }}</div>
        </template>
      </el-step>
    </el-steps>
  </div>
</template>
 
<script setup>
import { ref, watch } from 'vue'
import { gdSupplyDemandAuditListApi } from '@/views/orderView/orderDataManage/supplyAdd/supplyAddApi'
 
const props = defineProps({
  demandId: {
    type: [String, Number],
    required: true
  }
})
const detailDemandStatus = inject('detailDemandStatus')
// 步骤条数据
const steps = ref([
  { title: '需求申请', person: '', time: '' },
  { title: '审核通过', person: '', time: '' }
])
 
// 当前激活步骤
const activeStep = ref(0)
 
// 监听 demandId 变化
watch(() => props.demandId, (newVal) => {
  if (newVal) {
    loadAuditRecords(newVal)
  }
}, { immediate: true })
 
// 加载审核记录
async function loadAuditRecords(demandId) {
  try {
    const res = await gdSupplyDemandAuditListApi({ demandId })
    const auditRecords = res?.data?.data ?? []
    
    // 处理审核记录为步骤格式
    processAuditRecords(auditRecords)
  } catch (error) {
    console.error('加载审核记录失败:', error)
    // 保持默认步骤
    activeStep.value = 0
  }
}
 
// 处理审核记录为步骤格式
function processAuditRecords(records) {
  // 重置为默认步骤结构
  steps.value = [
    { title: '需求申请', person: '', time: '' },
    { title: '审核通过', person: '', time: '' }
  ]
  
  if (!records || records.length === 0) {
    // 没有审核记录,保持默认步骤
    activeStep.value = 0
    return
  }
  
  // 按创建时间排序(最新的在最后)
  const sortedRecords = [...records].sort((a, b) => new Date(a.createTime) - new Date(b.createTime))
  
  // 处理需求申请步骤(第一个步骤)
  const demandRecord = sortedRecords.find(record => record.auditStatus === '0') || sortedRecords[0]
  if (demandRecord) {
    steps.value[0] = {
      title: '需求申请',
      person: demandRecord.createUser ? `${demandRecord.createUser}` : '',
      time: demandRecord.createTime ? demandRecord.createTime : ''
    }
  }
  
  // 处理审核步骤(第二个步骤)
  const latestRecord = sortedRecords[sortedRecords.length - 1]
  if (latestRecord) {
    // 根据最新审核结果设置标题
    let auditTitle = '审核通过'
    if (latestRecord.auditStatus === '2') {
      auditTitle = '拒绝申请'
      // 更新第二个步骤的标题为拒绝申请
      steps.value[1].title = auditTitle
    }
    
    // 添加审核意见(如果有)
    if (latestRecord.auditOpinion) {
      steps.value[1].title += ` - ${latestRecord.auditOpinion}`
    }
    
    // 更新审核步骤的信息
    steps.value[1].person = latestRecord.createUser ? `${latestRecord.createUser}` : ''
    steps.value[1].time = latestRecord.createTime ? latestRecord.createTime : ''
    
    // 根据最新审核结果设置activeStep
    switch (latestRecord.auditStatus) {
      case '0':
        // 审核中,高亮第一个步骤
        activeStep.value = 0
        break
      case '1':
        // 审核通过,高亮第二个步骤
        activeStep.value = 1
        break
      case '2':
        // 拒绝申请,高亮第二个步骤
        activeStep.value = 1
        break
      default:
        // 默认高亮第一个步骤
        activeStep.value = 0
    }
  }
}
 
defineExpose({
  loadAuditRecords
})
</script>
 
<style scoped lang="scss">
.audit-record-container {
  .label {
    font-weight: 500;
    margin-bottom: 8px;
    color: #333;
  }
}
 
/* 步骤条样式 */
:deep(.el-steps) {
  align-items: flex-start;
}
 
:deep(.el-step) {
  margin-bottom: 90px;
}
 
:deep(.el-step__title) {
  font-size: 14px;
  font-weight: 500;
  margin-bottom: 8px;
}
 
/* 步骤描述 */
.step-person {
  font-size: 13px;
  color: #333;
  margin-bottom: 4px;
}
 
.step-time {
  font-size: 12px;
  color: #909399;
}
</style>