feat(erp): 优化项目变更历史记录功能

- 添加抽屉点击遮罩关闭功能
- 增加情况说明类型的标签显示支持
- 添加基础信息变更对比逻辑,包括当前情况、变更原因和后续工作
- 修复进度变更中阶段ID使用错误问题
dev
Yangk 2 weeks ago
parent c9de5fe849
commit 87da563901

@ -205,7 +205,7 @@
<ApprovalRecord ref="approvalRecordRef" />
<!-- 项目变更历史记录抽屉 -->
<el-drawer v-model="historyDrawer.visible" :title="historyDrawer.title" size="700px">
<el-drawer v-model="historyDrawer.visible" :title="historyDrawer.title" size="700px" :close-on-click-modal="true">
<el-timeline v-if="historyDrawer.list && historyDrawer.list.length > 0">
<el-timeline-item
v-for="(item, index) in historyDrawer.list"
@ -216,11 +216,17 @@
size="large"
>
<el-card shadow="hover">
<div v-for="(msg, mIndex) in item.messages" :key="mIndex" style="margin-bottom: 15px; font-size: 14px; line-height: 1.5;">
<el-tag :type="msg.type === '预算变更' ? 'success' : 'warning'" size="small" style="margin-right: 10px;" effect="dark">{{ msg.type }}</el-tag>
<span style="color: #606266;">{{ msg.desc }}</span>
<div v-for="(msg, mIndex) in item.messages" :key="mIndex" style="margin-bottom: 15px; font-size: 14px; line-height: 1.5">
<el-tag
:type="msg.type === '预算变更' ? 'success' : msg.type === '情况说明' ? 'info' : 'warning'"
size="small"
style="margin-right: 10px"
effect="dark"
>{{ msg.type }}</el-tag
>
<span style="color: #606266">{{ msg.desc }}</span>
</div>
<div v-if="item.messages.length === 0" style="color: #909399; font-size: 13px;"></div>
<div v-if="item.messages.length === 0" style="color: #909399; font-size: 13px"></div>
</el-card>
</el-timeline-item>
</el-timeline>
@ -430,7 +436,7 @@ const historyDrawer = reactive({
});
const handleViewHistory = async (row: any) => {
historyDrawer.title = `每一次变更历史记录(${row.projectName}`;
historyDrawer.title = `变更历史记录(${row.projectName}`;
historyDrawer.visible = true;
historyDrawer.list = [];
@ -443,6 +449,11 @@ const handleViewHistory = async (row: any) => {
const previousBudget: Record<string, number> = {};
const previousProgressContent: Record<string, any> = {};
const previousBasicInfo: Record<string, string> = {
currentStatus: '',
changeReason: '',
followUpWork: ''
};
for (let i = 0; i < records.length; i++) {
const item = records[i];
@ -470,7 +481,7 @@ const handleViewHistory = async (row: any) => {
// 2.
if (item.progressList && item.progressList.length > 0) {
item.progressList.forEach((progress: any) => {
const phaseKey = progress.projectPhases;
const phaseKey = progress.planStageId; // 使IDKey
const prev = previousProgressContent[phaseKey] || {
start: progress.originalStart,
end: progress.originalEnd,
@ -483,12 +494,16 @@ const handleViewHistory = async (row: any) => {
//
if (prev.start && progress.changedStart && prev.start !== progress.changedStart) {
diffs.push(`原计划时间起的 ${proxy?.parseTime(prev.start, '{y}-{m}-{d}')} 变为变更后时间起的 ${proxy?.parseTime(progress.changedStart, '{y}-{m}-{d}')}`);
diffs.push(
`原计划时间起的 ${proxy?.parseTime(prev.start, '{y}-{m}-{d}')} 变为变更后时间起的 ${proxy?.parseTime(progress.changedStart, '{y}-{m}-{d}')}`
);
startChanged = true;
}
//
if (prev.end && progress.changedEnd && prev.end !== progress.changedEnd) {
diffs.push(`原计划时间止的 ${proxy?.parseTime(prev.end, '{y}-{m}-{d}')} 变为变更后时间止的 ${proxy?.parseTime(progress.changedEnd, '{y}-{m}-{d}')}`);
diffs.push(
`原计划时间止的 ${proxy?.parseTime(prev.end, '{y}-{m}-{d}')} 变为变更后时间止的 ${proxy?.parseTime(progress.changedEnd, '{y}-{m}-{d}')}`
);
endChanged = true;
}
//
@ -525,6 +540,33 @@ const handleViewHistory = async (row: any) => {
});
}
// 3.
const basicDiffs = [];
if (item.currentStatus && item.currentStatus !== previousBasicInfo.currentStatus) {
const oldVal = previousBasicInfo.currentStatus ? `${previousBasicInfo.currentStatus}` : '空白';
basicDiffs.push(`当前情况由 ${oldVal} 变更为 “${item.currentStatus}`);
}
if (item.changeReason && item.changeReason !== previousBasicInfo.changeReason) {
const oldVal = previousBasicInfo.changeReason ? `${previousBasicInfo.changeReason}` : '空白';
basicDiffs.push(`变更原因由 ${oldVal} 变更为 “${item.changeReason}`);
}
if (item.followUpWork && item.followUpWork !== previousBasicInfo.followUpWork) {
const oldVal = previousBasicInfo.followUpWork ? `${previousBasicInfo.followUpWork}` : '空白';
basicDiffs.push(`后续工作由 ${oldVal} 变更为 “${item.followUpWork}`);
}
if (basicDiffs.length > 0) {
messages.push({
type: '情况说明',
desc: basicDiffs.join('')
});
}
// 使
previousBasicInfo.currentStatus = item.currentStatus || previousBasicInfo.currentStatus;
previousBasicInfo.changeReason = item.changeReason || previousBasicInfo.changeReason;
previousBasicInfo.followUpWork = item.followUpWork || previousBasicInfo.followUpWork;
historyList.push({
changeNumber: item.changeNumber,
createTime: item.createTime,
@ -535,7 +577,7 @@ const handleViewHistory = async (row: any) => {
historyDrawer.list = historyList;
}
} catch (error) {
console.error("加载变更历史记录失败", error);
console.error('加载变更历史记录失败', error);
} finally {
proxy?.$modal.closeLoading();
}

Loading…
Cancel
Save