From dad1afd3d36bd2360122ddbda998876149a1e633 Mon Sep 17 00:00:00 2001 From: weizong song Date: Tue, 7 Apr 2026 13:51:25 +0800 Subject: [PATCH] up --- src/views/flow/create.vue | 294 ++++++++++++++++++++++++++++++-------- 1 file changed, 234 insertions(+), 60 deletions(-) diff --git a/src/views/flow/create.vue b/src/views/flow/create.vue index b0b5725..0bd8e0b 100644 --- a/src/views/flow/create.vue +++ b/src/views/flow/create.vue @@ -796,8 +796,9 @@ :visible.sync="rightDrawerVisible" :title="rightDrawerTitle" direction="rtl" - size="60%" + :size="$store.getters.device === 'mobile' ? '100%' : (rightDrawerType === 'contract' ? '78%' : '60%')" :with-header="true" + custom-class="flow-detail-drawer" >
@@ -865,72 +866,135 @@
- - - {{ contractDrawerDetail.contract_no || '-' }} - - - {{ contractDrawerDetail.title || '-' }} - - - {{ contractDrawerDetail.party_a || '-' }} - - - {{ contractDrawerDetail.party_b || '-' }} - - - ¥{{ formatAmount(contractDrawerDetail.amount_total) }} - - - {{ contractDrawerDetail.amount_type === 'open' ? '开口' : (contractDrawerDetail.amount_type === 'fixed' ? '闭口' : '-') }} - - - {{ contractDrawerDetail.main_content || '-' }} - - - {{ contractDrawerDetail.sign_date || '-' }} - - - {{ contractDrawerDetail.apply_date || '-' }} - - - {{ contractDrawerDetail.perform_period || '-' }} - - - {{ contractDrawerDetail.pay_method || '-' }} - - - {{ contractDrawerDetail.fund_source || '-' }} - - - {{ contractDrawerDetail.purchase_method || '-' }} - - - - - - - +
+ + + {{ contractDrawerDetail.contract_no || '-' }} + + + {{ contractDrawerDetail.title || '-' }} + + + {{ contractDrawerDetail.main_content || '-' }} + + + {{ contractDrawerDetail.party_a || '-' }} + + + {{ contractDrawerDetail.party_b || '-' }} + + + {{ formatAmount(contractDrawerDetail.amount_total) }} + + + {{ formatAmount(contractDrawerDetail.budget_amount) }} + + + 闭口合同 + 开口合同 + - + + + {{ contractDrawerDetail.amount_description || '-' }} + + + {{ formatDate(contractDrawerDetail.sign_date) || '-' }} + + + {{ formatDate(contractDrawerDetail.apply_date) || '-' }} + + + {{ contractDrawerDetail.perform_period || '-' }} + + + {{ contractDrawerDetail.pay_method || '-' }} + + + {{ getContractBudgetYear(contractDrawerDetail) }} + + + {{ getContractPlanFundSource(contractDrawerDetail) }} + + + {{ formatArrayText(contractDrawerDetail.actual_fund_sources) }} + + + {{ (contractDrawerDetail.contractType && contractDrawerDetail.contractType.name) || '-' }} + + + {{ (contractDrawerDetail.purchaseCategory && contractDrawerDetail.purchaseCategory.name) || '-' }} + + + {{ getContractPurchaseMethod(contractDrawerDetail) }} + + + + + + + {{ contractDrawerDetail.tender_agent || '-' }} + + + {{ contractDrawerDetail.perform_status || '-' }} + + + + + + + {{ formatDepartmentNames(contractDrawerDetail.owner_department_ids || contractDrawerDetail.owner_department_id) }} + + + {{ formatUserNames(contractDrawerDetail.handler_admin_ids) }} + + + {{ formatUserNames(contractDrawerDetail.apply_handler_id) }} + + + {{ formatUserNames(contractDrawerDetail.purchase_handler_id) }} + + + + {{ (contractDrawerDetail.payment_stats && contractDrawerDetail.payment_stats.payment_count) || 0 }} 次 + {{ formatAmount((contractDrawerDetail.payment_stats && contractDrawerDetail.payment_stats.paid_amount) || 0) }} + + + + {{ contractDrawerDetail.remark || '-' }} + + + + - + + -
-
付款计划
- + 付款计划 + - + + + + +
+ 暂无付款计划 +
未获取到合同详情
@@ -1615,6 +1679,80 @@ export default { if (!date) return ''; return this.$moment(date).format('YYYY-MM-DD'); }, + formatArrayText(val) { + if (!val) return '-'; + if (Array.isArray(val)) { + const arr = val.map(item => (item === null || item === undefined ? '' : String(item).trim())).filter(Boolean); + return arr.length ? arr.join(' | ') : '-'; + } + if (typeof val === 'string') { + const s = val.trim(); + return s || '-'; + } + return String(val); + }, + parseIdList(val) { + if (val === null || val === undefined || val === '') return []; + if (Array.isArray(val)) { + return val + .map(item => { + if (item && typeof item === 'object') return item.id || item.value || item.user_id || item.department_id || null; + return item; + }) + .filter(item => item !== null && item !== undefined && item !== ''); + } + if (typeof val === 'number') return [val]; + if (typeof val === 'string') { + return val + .split(',') + .map(item => item.trim()) + .filter(Boolean); + } + if (typeof val === 'object') { + const id = val.id || val.value || val.user_id || val.department_id; + return id ? [id] : []; + } + return []; + }, + formatDepartmentNames(val) { + const ids = this.parseIdList(val); + if (!ids.length) return '-'; + return ids + .map(id => this.simpleDepartmentMap?.[id] || this.simpleDepartmentMap?.[Number(id)] || `部门ID: ${id}`) + .join('、'); + }, + formatUserNames(val) { + const ids = this.parseIdList(val); + if (!ids.length) return '-'; + return ids + .map(id => this.simpleUserMap?.[id] || this.simpleUserMap?.[Number(id)] || `用户ID: ${id}`) + .join('、'); + }, + getContractBudgetYear(detail) { + const year = detail?.fund_source_year?.year || detail?.fundSourceYear?.year || detail?.fund_source_budget_data?.budget_year?.year || detail?.fundSourceBudgetData?.budget_year?.year; + return year ? `${year}年` : '-'; + }, + getContractPlanFundSource(detail) { + return detail?.fund_source_budget_data?.name || detail?.fundSourceBudgetData?.name || detail?.fund_source || '-'; + }, + getContractPurchaseMethod(detail) { + const relationValue = detail && detail.purchaseMethod; + if (relationValue && typeof relationValue === 'object') { + return relationValue.name || relationValue.label || relationValue.title || '-'; + } + + const rawValue = detail && detail.purchase_method; + if (!rawValue) return '-'; + if (typeof rawValue === 'string') return rawValue; + if (typeof rawValue === 'object') { + return rawValue.name || rawValue.label || rawValue.title || rawValue.text || '-'; + } + return String(rawValue); + }, + getContractAttachmentUrl(detail) { + const att = detail?.attachment; + return att?.url || att?.path || att?.file_url || att?.download_url || att?.preview_url || ''; + }, // 格式化日期时间 formatDateTime(dateTime) { if (!dateTime) return ''; @@ -2113,7 +2251,11 @@ export default { this.rightDrawerVisible = true; this.loadingContractDrawer = true; try { - const detail = await getBudgetContractDetail(cid); + const [detail] = await Promise.all([ + getBudgetContractDetail(cid), + this.loadSimpleDepartmentMap(), + this.loadSimpleUserMap(), + ]); this.contractDrawerDetail = detail || null; this.rightDrawerTitle = detail?.title || detail?.contract_no || title || '查看合同详情'; } catch (e) { @@ -2929,6 +3071,38 @@ export default { word-break: break-word; } } + +.contract-drawer { + padding: 20px 24px 28px; +} +.contract-drawer-descriptions { + ::v-deep .el-descriptions__table { + width: 100%; + table-layout: fixed; + } + ::v-deep .el-descriptions-item__label { + width: 160px; + white-space: nowrap; + } + ::v-deep .el-descriptions-item__content { + word-break: break-word; + line-height: 1.7; + } +} +.contract-empty-tip { + padding: 18px 4px 8px; + color: #909399; +} + +::v-deep .flow-detail-drawer > .el-drawer__header { + margin-bottom: 0; + padding: 20px 24px 16px; + border-bottom: 1px solid #ebeef5; +} + +::v-deep .flow-detail-drawer > .el-drawer__body { + overflow-y: auto; +}