|
|
|
|
@ -401,7 +401,24 @@
|
|
|
|
|
<!-- 合同基本信息 -->
|
|
|
|
|
<el-descriptions v-if="contractDetail" :column="2" border size="small" style="margin-bottom: 12px;">
|
|
|
|
|
<el-descriptions-item label="合同编号">
|
|
|
|
|
{{ contractDetail.contract_no || '-' }}
|
|
|
|
|
<template v-if="contractDetail.id">
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
:underline="false"
|
|
|
|
|
@click="openContractDrawer(contractDetail.id, contractDetail.title || contractDetail.contract_no)"
|
|
|
|
|
>
|
|
|
|
|
{{ contractDetail.contract_no || '-' }}
|
|
|
|
|
</el-link>
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
:underline="false"
|
|
|
|
|
style="margin-left: 8px;"
|
|
|
|
|
@click="openContractDrawer(contractDetail.id, contractDetail.title || contractDetail.contract_no)"
|
|
|
|
|
>
|
|
|
|
|
查看详情
|
|
|
|
|
</el-link>
|
|
|
|
|
</template>
|
|
|
|
|
<span v-else>{{ contractDetail.contract_no || '-' }}</span>
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="合同名称">
|
|
|
|
|
{{ contractDetail.title || '-' }}
|
|
|
|
|
@ -844,6 +861,80 @@
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else style="color:#909399;">未获取到会议纪要数据</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<!-- 合同详情:请求数据展示 -->
|
|
|
|
|
<div v-else-if="rightDrawerType === 'contract'" v-loading="loadingContractDrawer">
|
|
|
|
|
<div v-if="contractDrawerDetail">
|
|
|
|
|
<el-descriptions :column="2" border>
|
|
|
|
|
<el-descriptions-item label="合同编号">
|
|
|
|
|
{{ contractDrawerDetail.contract_no || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="合同名称">
|
|
|
|
|
{{ contractDrawerDetail.title || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="甲方">
|
|
|
|
|
{{ contractDrawerDetail.party_a || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="乙方">
|
|
|
|
|
{{ contractDrawerDetail.party_b || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="合同总额">
|
|
|
|
|
<span style="color: #F56C6C; font-weight: bold;">¥{{ formatAmount(contractDrawerDetail.amount_total) }}</span>
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="金额类型">
|
|
|
|
|
{{ contractDrawerDetail.amount_type === 'open' ? '开口' : (contractDrawerDetail.amount_type === 'fixed' ? '闭口' : '-') }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="合同主要内容" :span="2">
|
|
|
|
|
{{ contractDrawerDetail.main_content || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="签订日期">
|
|
|
|
|
{{ contractDrawerDetail.sign_date || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="申请日期">
|
|
|
|
|
{{ contractDrawerDetail.apply_date || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="履行期限">
|
|
|
|
|
{{ contractDrawerDetail.perform_period || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="付款方式">
|
|
|
|
|
{{ contractDrawerDetail.pay_method || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="资金来源">
|
|
|
|
|
{{ contractDrawerDetail.fund_source || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="采购方式">
|
|
|
|
|
{{ contractDrawerDetail.purchase_method || '-' }}
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
<el-descriptions-item label="合同附件" :span="2">
|
|
|
|
|
<template v-if="contractDrawerDetail.attachment && contractDrawerDetail.attachment.url">
|
|
|
|
|
<el-link
|
|
|
|
|
type="primary"
|
|
|
|
|
:underline="false"
|
|
|
|
|
:href="contractDrawerDetail.attachment.url"
|
|
|
|
|
target="_blank"
|
|
|
|
|
>
|
|
|
|
|
{{ contractDrawerDetail.attachment.original_name || contractDrawerDetail.attachment.name || '查看附件' }}
|
|
|
|
|
</el-link>
|
|
|
|
|
</template>
|
|
|
|
|
<span v-else>-</span>
|
|
|
|
|
</el-descriptions-item>
|
|
|
|
|
</el-descriptions>
|
|
|
|
|
|
|
|
|
|
<div v-if="contractDrawerDetail.pay_plans && contractDrawerDetail.pay_plans.length" style="margin-top: 16px;">
|
|
|
|
|
<div style="font-weight: 600; margin-bottom: 10px;">付款计划</div>
|
|
|
|
|
<el-table :data="contractDrawerDetail.pay_plans" border size="small" style="width: 100%;">
|
|
|
|
|
<el-table-column prop="phase_no" label="期次" width="100" />
|
|
|
|
|
<el-table-column prop="due_date" label="计划日期" width="140" />
|
|
|
|
|
<el-table-column label="计划金额" min-width="160" align="right">
|
|
|
|
|
<template slot-scope="scope">
|
|
|
|
|
<span style="color: #F56C6C; font-weight: bold;">¥{{ formatAmount(scope.row.amount_plan) }}</span>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else style="color:#909399;">未获取到合同详情</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-drawer>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
@ -963,6 +1054,8 @@ export default {
|
|
|
|
|
rightDrawerUrl: '',
|
|
|
|
|
meetingMinutesDetail: null,
|
|
|
|
|
loadingMeetingMinutes: false,
|
|
|
|
|
contractDrawerDetail: null,
|
|
|
|
|
loadingContractDrawer: false,
|
|
|
|
|
// fill_flow_title 自动填充:专用 watcher(避免 deep watcher oldVal/newVal 引用问题)
|
|
|
|
|
_unwatchFillFlowTitle: null,
|
|
|
|
|
};
|
|
|
|
|
@ -1992,6 +2085,7 @@ export default {
|
|
|
|
|
this.rightDrawerTitle = '查看会议纪要';
|
|
|
|
|
this.rightDrawerUrl = '';
|
|
|
|
|
this.meetingMinutesDetail = null;
|
|
|
|
|
this.contractDrawerDetail = null;
|
|
|
|
|
this.rightDrawerVisible = true;
|
|
|
|
|
this.loadingMeetingMinutes = true;
|
|
|
|
|
try {
|
|
|
|
|
@ -2007,6 +2101,29 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
async openContractDrawer(contractId, title = '') {
|
|
|
|
|
const cid = Number(contractId);
|
|
|
|
|
if (!cid || Number.isNaN(cid)) return;
|
|
|
|
|
|
|
|
|
|
this.rightDrawerType = 'contract';
|
|
|
|
|
this.rightDrawerTitle = title || '查看合同详情';
|
|
|
|
|
this.rightDrawerUrl = '';
|
|
|
|
|
this.meetingMinutesDetail = null;
|
|
|
|
|
this.contractDrawerDetail = null;
|
|
|
|
|
this.rightDrawerVisible = true;
|
|
|
|
|
this.loadingContractDrawer = true;
|
|
|
|
|
try {
|
|
|
|
|
const detail = await getBudgetContractDetail(cid);
|
|
|
|
|
this.contractDrawerDetail = detail || null;
|
|
|
|
|
this.rightDrawerTitle = detail?.title || detail?.contract_no || title || '查看合同详情';
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('加载合同详情失败:', e);
|
|
|
|
|
this.contractDrawerDetail = null;
|
|
|
|
|
} finally {
|
|
|
|
|
this.loadingContractDrawer = false;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 通用只读展示
|
|
|
|
|
formatReadonlyValue(val) {
|
|
|
|
|
if (val === undefined || val === null || val === '') return '-';
|
|
|
|
|
|