|
|
@@ -342,7 +342,26 @@ function onShowEditHistory(row: ItemVO) {
|
|
|
editHistoryDialog.type = type;
|
|
|
getEditHistory(row.id, type).then((res) => {
|
|
|
console.log('编辑历史数据:', res.data);
|
|
|
- editHistoryDialog.list = res.data || [];
|
|
|
+ let list = res.data || [];
|
|
|
+ if (type === 1) {
|
|
|
+ // 轮播组过滤掉无selectedFiles的异常数据(第一条保留)
|
|
|
+ list = list.filter((item: any, idx: number, arr: any[]) => {
|
|
|
+ if (idx === 0) return true;
|
|
|
+ try {
|
|
|
+ const curr = JSON.parse(item.operParam || '{}');
|
|
|
+ const prev = idx > 0 ? JSON.parse(arr[idx - 1].operParam || '{}') : {};
|
|
|
+ // 没有selectedFiles字段直接过滤
|
|
|
+ if (!Array.isArray(curr.selectedFiles)) return false;
|
|
|
+ // diff结果为无变化也过滤
|
|
|
+ const diff = diffSelectedFiles({ selectedFiles: prev.selectedFiles || [] }, { selectedFiles: curr.selectedFiles || [] }, 'selectedFiles');
|
|
|
+ return diff && diff !== '无变化';
|
|
|
+ } catch {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ editHistoryDialog.list = list;
|
|
|
+ console.log('编辑历史数据处理后:', list);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -363,11 +382,42 @@ function diffSelectedFiles(prev: any, curr: any, key: string) {
|
|
|
}
|
|
|
|
|
|
function renderOperParam(row: EditHistoryVo, index: number, list: EditHistoryVo[], type: 1 | 2) {
|
|
|
+ // 轮播组和分屏组都采用diff方式展示
|
|
|
+ let curr, prev;
|
|
|
+ // 轮播组只处理selectedFiles字段,分屏组处理每一屏
|
|
|
if (type === 1) {
|
|
|
- return `<span style='white-space:pre-line;'>${row.operParam}</span>`;
|
|
|
+ try {
|
|
|
+ curr = JSON.parse(row.operParam || '{}');
|
|
|
+ } catch {
|
|
|
+ curr = {};
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ prev = index > 0 ? JSON.parse(list[index - 1].operParam || '{}') : {};
|
|
|
+ } catch {
|
|
|
+ prev = {};
|
|
|
+ }
|
|
|
+ // 只要没有selectedFiles字段就视为异常数据,不显示
|
|
|
+ if (!Array.isArray(curr.selectedFiles)) {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ const currFiles = curr.selectedFiles || [];
|
|
|
+ const prevFiles = prev.selectedFiles || [];
|
|
|
+ if (index === 0) {
|
|
|
+ // 第一条记录,全部按“创建”显示
|
|
|
+ return `<span style='color:#409EFF;font-weight:bold;'>创建</span>`;
|
|
|
+ }
|
|
|
+ const diff = diffSelectedFiles({ selectedFiles: prevFiles }, { selectedFiles: currFiles }, 'selectedFiles');
|
|
|
+ if (diff && diff !== '无变化') {
|
|
|
+ let styled = diff
|
|
|
+ .replace(/新增:/g, "<span style='color:#67C23A;font-weight:bold;'>新增:</span>")
|
|
|
+ .replace(/减少:/g, "<span style='color:#F56C6C;font-weight:bold;'>减少:</span>");
|
|
|
+ return `<span style='font-weight:bold;'>文件</span>:${styled}`;
|
|
|
+ }
|
|
|
+ return '';
|
|
|
}
|
|
|
- // 分屏组
|
|
|
- let curr, prev;
|
|
|
+ // 分屏组diff逻辑修正,严格一一对应
|
|
|
+ const screenFields = ['selectedFiles1', 'selectedFiles2', 'selectedFiles3', 'selectedFiles4'];
|
|
|
+ const screenNames = ['第一屏', '第二屏', '第三屏', '第四屏'];
|
|
|
try {
|
|
|
curr = JSON.parse(row.operParam || '{}');
|
|
|
} catch {
|
|
|
@@ -378,25 +428,23 @@ function renderOperParam(row: EditHistoryVo, index: number, list: EditHistoryVo[
|
|
|
} catch {
|
|
|
prev = {};
|
|
|
}
|
|
|
- const screenNames = ['第一屏', '第二屏', '第三屏', '第四屏'];
|
|
|
if (index === 0) {
|
|
|
- // 第一条记录,全部按“创建”显示
|
|
|
+ // 第一条记录,固定显示“创建”
|
|
|
return `<span style='color:#409EFF;font-weight:bold;'>创建</span>`;
|
|
|
}
|
|
|
- const keys = ['selectedFiles1', 'selectedFiles2', 'selectedFiles3', 'selectedFiles4'];
|
|
|
- const diffs = keys
|
|
|
- .map((key, idx) => {
|
|
|
- const diff = diffSelectedFiles(prev, curr, key);
|
|
|
- if (diff && diff !== '无变化') {
|
|
|
- // 仅“新增”“减少”文字加色,文件名不加色
|
|
|
- let styled = diff
|
|
|
- .replace(/新增:/g, "<span style='color:#67C23A;font-weight:bold;'>新增:</span>")
|
|
|
- .replace(/减少:/g, "<span style='color:#F56C6C;font-weight:bold;'>减少:</span>");
|
|
|
- return `<span style='font-weight:bold;'>${screenNames[idx]}</span>:${styled}`;
|
|
|
- }
|
|
|
- return '';
|
|
|
- })
|
|
|
- .filter(Boolean);
|
|
|
+ const diffs = screenFields.map((field, idx) => {
|
|
|
+ const currFiles = curr[field] || [];
|
|
|
+ const prevFiles = prev[field] || [];
|
|
|
+ if (!Array.isArray(currFiles) && !Array.isArray(prevFiles)) return '';
|
|
|
+ const diff = diffSelectedFiles({ selectedFiles: prevFiles }, { selectedFiles: currFiles }, 'selectedFiles');
|
|
|
+ if (diff && diff !== '无变化') {
|
|
|
+ let styled = diff
|
|
|
+ .replace(/新增:/g, "<span style='color:#67C23A;font-weight:bold;'>新增:</span>")
|
|
|
+ .replace(/减少:/g, "<span style='color:#F56C6C;font-weight:bold;'>减少:</span>");
|
|
|
+ return `<span style='font-weight:bold;'>${screenNames[idx]}</span>:${styled}`;
|
|
|
+ }
|
|
|
+ return '';
|
|
|
+ }).filter(Boolean);
|
|
|
return diffs.length ? diffs.join('<br/>') : '';
|
|
|
}
|
|
|
|
|
|
@@ -663,10 +711,16 @@ const submitForm = async () => {
|
|
|
buttonLoading.value = true;
|
|
|
try {
|
|
|
if (form.value.id) {
|
|
|
+ if (form.value.itemType === 1) {
|
|
|
+ form.value.selectedFiles = selectedFiles.value;
|
|
|
+ form.value.fileIdList = selectedFiles.value.map(f => f.id);
|
|
|
+ form.value.itemName = itemName.value;
|
|
|
+ }
|
|
|
await updateItem(form.value);
|
|
|
} else {
|
|
|
if (form.value.itemType === 1) {
|
|
|
form.value.selectedFiles = selectedFiles.value;
|
|
|
+ form.value.fileIdList = selectedFiles.value.map(f => f.id);
|
|
|
form.value.itemName = itemName.value;
|
|
|
}
|
|
|
await addItem(form.value);
|