198 lines
6.4 KiB
Vue
198 lines
6.4 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="detail-page">
|
|||
|
|
<view class="detail-header">
|
|||
|
|
<text class="header-title">{{ projectDetail.projectName }}</text>
|
|||
|
|
<text class="header-subtitle">{{ projectDetail.projectNum }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="detail-content">
|
|||
|
|
<view style="display: flex; justify-content: flex-start; gap: 10rpx">
|
|||
|
|
<uni-tag v-if="projectDetail.projectStatus == 1" size="normal" type="success" text="进度完成"></uni-tag>
|
|||
|
|
<uni-tag v-else-if="projectDetail.projectStatus == 0" size="normal" type="warning" text="进行中"></uni-tag>
|
|||
|
|
<uni-tag v-if="projectDetail.tradeType == 0" size="normal" type="warning" text="内贸"></uni-tag>
|
|||
|
|
<uni-tag v-else-if="projectDetail.tradeType == 1" size="normal" type="success" text="外贸"></uni-tag>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">项目类型:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.projectType || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">项目地址:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.address || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">项目总金额:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.funds || '-' }}元</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">负责人:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.functionary || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">项目周期:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.beginTime || '-' }} 至 {{ projectDetail.finishTime || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">交付时间:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.delivery || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">保证期:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.guarantee || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">备注:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.remark || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">延期原因:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.postponeReason || '无' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item" v-if="projectDetail.prePay > 0">
|
|||
|
|
<text class="info-label">预付款:</text>
|
|||
|
|
<text class="info-value">{{ projectDetail.prePay }}元</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<!-- 合同管理 -->
|
|||
|
|
<view class="contract-management">
|
|||
|
|
<text class="contract-title">合同管理</text>
|
|||
|
|
<view v-if="contractDetail && contractDetail.length > 0">
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">合同类型:</text>
|
|||
|
|
<text class="info-value">{{ getContractType(contractDetail.contractType) }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">合同编号:</text>
|
|||
|
|
<text class="info-value">{{ contractDetail.contractNum || '-' }}</text>
|
|||
|
|
</view>
|
|||
|
|
<view class="info-item">
|
|||
|
|
<text class="info-label">合同金额:</text>
|
|||
|
|
<text class="info-value">{{ contractDetail.amount || '-' }}元</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
<view v-else>
|
|||
|
|
暂无合同
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view v-if="projectDetail.projectStatus == 0" style="margin-top: 20px; text-align: center;">
|
|||
|
|
<button @click="handleClosure">结项</button>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import { getProject, updateProject } from '@/api/oa/project.js'; // 确保导入正确的 API 方法
|
|||
|
|
import { selectContractByProjectId } from '@/api/oa/oaContract.js';
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
projectDetail: {}, // 存储项目详情
|
|||
|
|
contractDetail: null, // 存储合同详情
|
|||
|
|
};
|
|||
|
|
},
|
|||
|
|
onLoad(options) {
|
|||
|
|
this.fetchProjectDetail(options.id); // 获取项目 ID
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
fetchProjectDetail(projectId) {
|
|||
|
|
getProject(projectId).then(res => {
|
|||
|
|
if (res.code === 200) {
|
|||
|
|
this.projectDetail = res.data; // 将返回的数据存储到 projectDetail 中
|
|||
|
|
this.fetchContractDetail(projectId); // 获取合同信息
|
|||
|
|
} else {
|
|||
|
|
console.error('获取项目详情失败:', res.msg);
|
|||
|
|
}
|
|||
|
|
}).catch(error => {
|
|||
|
|
console.error('获取项目详情失败:', error);
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
handleClosure() {
|
|||
|
|
// uniapp二次确认
|
|||
|
|
uni.showModal({
|
|||
|
|
title: '提示',
|
|||
|
|
content: '确定要结项吗?',
|
|||
|
|
success: (res) => {
|
|||
|
|
if (res.confirm) {
|
|||
|
|
updateProject({...this.projectDetail, projectStatus: 1}).then(res => {
|
|||
|
|
this.fetchProjectDetail(this.projectDetail.projectId);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
fetchContractDetail(projectId) {
|
|||
|
|
selectContractByProjectId({ projectId }).then(res => {
|
|||
|
|
if (res.code === 200) {
|
|||
|
|
this.contractDetail = res.data; // 将返回的合同信息存储到 contractDetail 中
|
|||
|
|
} else {
|
|||
|
|
console.error('获取合同信息失败:', res.msg);
|
|||
|
|
}
|
|||
|
|
}).catch(error => {
|
|||
|
|
console.error('获取合同信息失败:', error);
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
getContractType(contractType) {
|
|||
|
|
const contractTypes = {
|
|||
|
|
1: '采购合同',
|
|||
|
|
2: '项目合同',
|
|||
|
|
};
|
|||
|
|
return contractTypes[contractType] || '未知类型';
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped>
|
|||
|
|
.detail-page {
|
|||
|
|
padding: 20px; /* 添加内边距 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.detail-header {
|
|||
|
|
margin-bottom: 15px; /* 下边距 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.header-title {
|
|||
|
|
font-size: 24px; /* 标题字号 */
|
|||
|
|
font-weight: bold; /* 加粗 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.header-subtitle {
|
|||
|
|
font-size: 18px; /* 副标题字号 */
|
|||
|
|
color: #666; /* 较淡的字体颜色 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.detail-content {
|
|||
|
|
border: 1px solid #ccc; /* 边框 */
|
|||
|
|
border-radius: 10px; /* 圆角 */
|
|||
|
|
padding: 15px; /* 内边距 */
|
|||
|
|
background-color: #f9f9f9; /* 背景色 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.info-item {
|
|||
|
|
display: flex; /* 使用 Flexbox 布局 */
|
|||
|
|
justify-content: space-between; /* 在一行内均匀分布 */
|
|||
|
|
margin-top: 10px; /* 上边距 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.info-label {
|
|||
|
|
color: #333; /* 标签颜色 */
|
|||
|
|
font-weight: bold; /* 标签加粗 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.info-value {
|
|||
|
|
color: #666; /* 值的颜色 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.contract-management {
|
|||
|
|
margin-top: 20px; /* 上边距 */
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.contract-title {
|
|||
|
|
font-size: 20px; /* 合同标题字号 */
|
|||
|
|
font-weight: bold; /* 加粗 */
|
|||
|
|
margin-bottom: 10px; /* 下边距 */
|
|||
|
|
}
|
|||
|
|
</style>
|