Files
airz-uniapp/packages/finance/report/report.uvue
T

69 lines
6.4 KiB
Plaintext
Raw Normal View History

2026-09-10 10:57:40 +08:00
<template>
<view class="page" :style="pageStyle()">
<AppHeader title="融资资料分析报告" />
<scroll-view scroll-y :style="contentStyle(0, false)">
<view class="report-content">
<text class="report-note">评估记录 · {{ assessmentId }}</text>
<text v-if="loading" class="body-text">正在加载报告…</text>
<view v-if="error.length > 0" class="panel"><text class="body-text">{{ error }}</text><text class="action" @click="loadReport">重新加载</text><text class="action" @click="history">前往融资档案</text></view>
<template v-if="report != null">
<text class="report-note">分析模型:{{ report!.modelCode }}</text>
<template v-if="report!.version == 2">
<view class="panel"><text class="section-title">需求概况</text><view class="fact-row" v-for="fact in report!.demand" :key="fact.label"><text class="fact-label">{{ fact.label }}</text><text class="fact-value">{{ fact.value }}</text></view></view>
<view class="panel"><text class="section-title">资料完整度</text><text class="readiness-value">{{ report!.completenessText }}</text><text class="report-note">仅统计当前适用的自填字段,不代表信用评分或真实性。</text><view class="fact-row" v-for="item in report!.completenessItems" :key="item.label"><text class="fact-label">{{ item.label }}</text><text class="fact-value">{{ item.value }}</text></view></view>
<view class="panel"><text class="section-title">融资准备状态</text><text class="readiness-value">{{ report!.readinessLabel }}</text><text class="body-text" v-for="(item, index) in report!.readinessBasis" :key="index">{{ item }}</text><text class="report-note">资料未经核验;即使完整度达到100%,仍需核对机构要求的材料。</text></view>
</template>
<view class="panel"><text class="section-title">自填资料分析</text><text class="body-text">{{ report!.summary }}</text><text class="report-note">{{ report!.disclaimer }}</text></view>
<view class="panel"><text class="section-title">本次提交的事实</text><text class="report-note">来源:用户自填,未经外部核验;未填写不等于零。</text><view class="fact-row" v-for="fact in report!.facts" :key="fact.label"><text class="fact-label">{{ fact.label }}</text><text class="fact-value">{{ fact.value }}</text></view></view>
<view class="panel"><text class="section-title">{{ report!.version == 2 ? '主要优势' : '资料解读' }}</text><text v-if="report!.observations.length == 0" class="report-note">暂无有充分依据的优势说明。</text><text class="body-text" v-for="(item, index) in report!.observations" :key="index">{{ item }}</text></view>
<view v-if="report!.suggestions.length > 0" class="panel"><text class="section-title">完善建议</text><text class="body-text" v-for="(item, index) in report!.suggestions" :key="index">{{ item }}</text></view>
<view class="panel"><text class="section-title">{{ report!.version == 2 ? '风险提示' : '待补充信息' }}</text><text class="body-text" v-for="(item, index) in report!.warnings" :key="'system-' + index">{{ item }}</text><text class="body-text" v-for="(item, index) in report!.dataGaps" :key="index">{{ item }}</text></view>
<view class="panel"><text class="section-title">产品匹配</text><text class="body-text">{{ report!.matchingMessage }}</text></view>
<text class="action" @click="history">查看历史评估</text>
</template>
</view>
</scroll-view>
</view>
2026-09-10 10:57:40 +08:00
</template>
<script setup lang="uts">
import AppHeader from '@/components/AppHeader.uvue'
import { usePageLayout } from '@/services/layout.uts'
import { getSession } from '@/services/api.uts'
import { AnalysisReport, fetchAnalysisReport } from '@/packages/finance/services/records.uts'
const { contentStyle, pageStyle } = usePageLayout()
const assessmentId = ref(''); const loading = ref(false); const error = ref('')
const report = ref<AnalysisReport | null>(null)
let generation = 0; let visible = false
const loadReport = async () => {
const request = ++generation
report.value = null; error.value = ''
if (assessmentId.value.length == 0) { error.value = '请从融资档案选择已完成的评估记录。'; return }
const session = getSession()
if (session == null) { uni.redirectTo({ url: '/packages/account/login/login' }); return }
const owner = session['token'] as string
loading.value = true
try {
const result = await fetchAnalysisReport(assessmentId.value)
if (visible && request == generation && getSession()?.getString('token') == owner) report.value = result
} catch (err) { if (visible && request == generation) error.value = err instanceof Error ? err.message : '报告加载失败,请重试' }
finally { if (request == generation) loading.value = false }
}
const history = () => { uni.navigateTo({ url: '/packages/finance/archive/archive' }) }
onLoad((options) => { if (options != null) assessmentId.value = options['assessmentId'] ?? '' })
onShow(() => { visible = true; loadReport() })
// 报告只留当前可见页面,账户切换或离开后不能由迟到请求恢复旧资料。
onHide(() => { visible = false; generation++; report.value = null; error.value = '' })
onUnload(() => { visible = false; generation++ })
2026-09-10 10:57:40 +08:00
</script>
<style>
.report-content { padding: 28rpx 30rpx 80rpx; }
.panel { margin-top: 24rpx; padding: 28rpx; border-radius: 18rpx; background-color: #fff; border: 1rpx solid #e7edf6; }
.body-text { margin-top: 20rpx; font-size: 27rpx; color: #42536b; line-height: 44rpx; }
.report-note { font-size: 23rpx; line-height: 38rpx; color: #78889e; margin-top: 18rpx; }
.fact-row { flex-direction: row; padding: 22rpx 0; border-bottom: 1rpx solid #edf1f6; }
.fact-label { flex: 1; font-size: 25rpx; color: #738198; }
.fact-value { flex: 1; text-align: right; font-size: 26rpx; color: #23344e; }
.action { padding: 26rpx 0; color: #0868f7; font-size: 27rpx; }
.readiness-value { margin-top: 20rpx; font-size: 32rpx; line-height: 48rpx; font-weight: bold; color: #23344e; }
2026-09-10 10:57:40 +08:00
</style>