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

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

@ -205,7 +205,7 @@
<ApprovalRecord ref="approvalRecordRef" /> <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 v-if="historyDrawer.list && historyDrawer.list.length > 0">
<el-timeline-item <el-timeline-item
v-for="(item, index) in historyDrawer.list" v-for="(item, index) in historyDrawer.list"
@ -216,11 +216,17 @@
size="large" size="large"
> >
<el-card shadow="hover"> <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;"> <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> <el-tag
<span style="color: #606266;">{{ msg.desc }}</span> :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>
<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-card>
</el-timeline-item> </el-timeline-item>
</el-timeline> </el-timeline>
@ -430,7 +436,7 @@ const historyDrawer = reactive({
}); });
const handleViewHistory = async (row: any) => { const handleViewHistory = async (row: any) => {
historyDrawer.title = `每一次变更历史记录(${row.projectName}`; historyDrawer.title = `变更历史记录(${row.projectName}`;
historyDrawer.visible = true; historyDrawer.visible = true;
historyDrawer.list = []; historyDrawer.list = [];
@ -440,9 +446,14 @@ const handleViewHistory = async (row: any) => {
if (res.data) { if (res.data) {
const records = res.data; const records = res.data;
const historyList = []; const historyList = [];
const previousBudget: Record<string, number> = {}; const previousBudget: Record<string, number> = {};
const previousProgressContent: Record<string, any> = {}; const previousProgressContent: Record<string, any> = {};
const previousBasicInfo: Record<string, string> = {
currentStatus: '',
changeReason: '',
followUpWork: ''
};
for (let i = 0; i < records.length; i++) { for (let i = 0; i < records.length; i++) {
const item = records[i]; const item = records[i];
@ -470,7 +481,7 @@ const handleViewHistory = async (row: any) => {
// 2. // 2.
if (item.progressList && item.progressList.length > 0) { if (item.progressList && item.progressList.length > 0) {
item.progressList.forEach((progress: any) => { item.progressList.forEach((progress: any) => {
const phaseKey = progress.projectPhases; const phaseKey = progress.planStageId; // 使IDKey
const prev = previousProgressContent[phaseKey] || { const prev = previousProgressContent[phaseKey] || {
start: progress.originalStart, start: progress.originalStart,
end: progress.originalEnd, end: progress.originalEnd,
@ -483,12 +494,16 @@ const handleViewHistory = async (row: any) => {
// //
if (prev.start && progress.changedStart && prev.start !== progress.changedStart) { 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; startChanged = true;
} }
// //
if (prev.end && progress.changedEnd && prev.end !== progress.changedEnd) { 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; endChanged = true;
} }
// //
@ -503,13 +518,13 @@ const handleViewHistory = async (row: any) => {
const phaseLabel = proxy?.selectDictLabel(project_phases.value, progress.projectPhases) || progress.projectPhases || '未知'; const phaseLabel = proxy?.selectDictLabel(project_phases.value, progress.projectPhases) || progress.projectPhases || '未知';
const diffStr = diffs.join(''); const diffStr = diffs.join('');
let finalDescText = diffStr; let finalDescText = diffStr;
if (finalDescText && msDiff) { if (finalDescText && msDiff) {
finalDescText += `,同时将${msDiff}`; finalDescText += `,同时将${msDiff}`;
} else if (msDiff) { } else if (msDiff) {
finalDescText = `${msDiff}`; finalDescText = `${msDiff}`;
} }
messages.push({ messages.push({
type: '进度变更', type: '进度变更',
desc: `将进度变更中【${phaseLabel}】阶段的 ` + finalDescText desc: `将进度变更中【${phaseLabel}】阶段的 ` + finalDescText
@ -524,7 +539,34 @@ 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({ historyList.push({
changeNumber: item.changeNumber, changeNumber: item.changeNumber,
createTime: item.createTime, createTime: item.createTime,
@ -535,7 +577,7 @@ const handleViewHistory = async (row: any) => {
historyDrawer.list = historyList; historyDrawer.list = historyList;
} }
} catch (error) { } catch (error) {
console.error("加载变更历史记录失败", error); console.error('加载变更历史记录失败', error);
} finally { } finally {
proxy?.$modal.closeLoading(); proxy?.$modal.closeLoading();
} }

Loading…
Cancel
Save