feat: 新增估值报告获取与展示功能,并在审计详情页添加计算流程tab。

This commit is contained in:
Wei_佳 2025-11-27 15:49:18 +08:00
parent 99f411b31a
commit 64334ba4e3
3 changed files with 34 additions and 5 deletions

View File

@ -68,5 +68,6 @@ export default {
request.post(`/valuations/${data.valuation_id || data.id}/reject`, { admin_notes: data.admin_notes }),
updateValuationNotes: (data = {}) =>
request.put(`/valuations/${data.valuation_id || data.id}/admin-notes`, { admin_notes: data.admin_notes }),
getValuationReport: (params = {}) => request.get(`/valuations/${params.valuation_id || params.id}/report`, { isRaw: true }),
sendSmsReport: (data = {}) => request.post('/sms/send-report', data),
}

View File

@ -21,7 +21,10 @@ export function reqReject(error) {
}
export function resResolve(response) {
const { data, status, statusText } = response
const { data, status, statusText, config } = response
if (config?.isRaw) {
return Promise.resolve(data)
}
if (data?.code !== 200) {
const code = data?.code ?? status
/** 根据code处理对应的操作并返回处理后的message */

View File

@ -42,6 +42,8 @@ const emit = defineEmits(['back', 'approve', 'reject'])
const $message = useMessage()
const activeDetailTab = ref('audit')
const reportLoading = ref(false)
const reportContent = ref('')
const pickFilledValue = (...values) => values.find((val) => val !== undefined && val !== null && val !== '')
const formatEnumField = (key, ...values) => formatEnumByKey(pickFilledValue(...values), key)
@ -55,9 +57,34 @@ watch(
() => props.detailData?.id,
() => {
activeDetailTab.value = 'audit'
reportContent.value = ''
}
)
// tab
watch(activeDetailTab, async (newTab) => {
if (newTab === 'flow' && props.detailData?.id && !reportContent.value) {
await fetchReport()
}
})
//
const fetchReport = async () => {
if (!props.detailData?.id) return
reportLoading.value = true
try {
const response = await api.getValuationReport({ valuation_id: props.detailData.id })
reportContent.value = response.data || response || ''
} catch (error) {
console.error('获取报告失败:', error)
$message.error('获取报告失败')
reportContent.value = '# 获取报告失败\n\n请稍后重试'
} finally {
reportLoading.value = false
}
}
const detailSections = computed(() => {
const detail = props.detailData
if (!detail) return []
@ -232,10 +259,8 @@ const calcFlow = computed(() => props.detailData?.calculation_result?.flow || []
const mockFlowHtml = ref(mockReportMarkdown)
const renderedFlowHtml = computed(() => {
return marked.parse(mockFlowHtml.value)
return marked.parse(reportContent.value || mockReportMarkdown)
})
@ -351,7 +376,7 @@ const handleCertificateConfirm = async (data) => {
</NSpin>
</NTabPane>
<NTabPane name="flow" tab="计算流程">
<NSpin :show="loading">
<NSpin :show="reportLoading">
<div class="markdown-body" v-html="renderedFlowHtml"></div>
</NSpin>
</NTabPane>