卡片显示优化

This commit is contained in:
JenniferW 2026-01-21 11:07:48 +08:00
parent 1fc7bcb5f2
commit 9b6931d1ad
1 changed files with 63 additions and 2 deletions

View File

@ -720,7 +720,7 @@ const updateParameterDifferenceFlags = (entries) => {
parameterDifferences.value = differences; parameterDifferences.value = differences;
}; };
const getCompareFieldEntries = () => { const getCompareFieldEntries = (fallbackFieldList = []) => {
const dictList = display_field?.value ?? []; const dictList = display_field?.value ?? [];
if (dictList.length > 0) { if (dictList.length > 0) {
return dictList return dictList
@ -731,6 +731,22 @@ const getCompareFieldEntries = () => {
})); }));
} }
// 如果字典还没加载完成,尝试从接口返回的数据中提取字段信息
if (fallbackFieldList.length > 0) {
const fieldMap = new Map();
fallbackFieldList.forEach((item) => {
const key = item.fieldKey || item.key || item.param;
const label = item.fieldName || item.label || item.param || key;
if (key && !fieldMap.has(key)) {
fieldMap.set(key, { key, label });
}
});
if (fieldMap.size > 0) {
return Array.from(fieldMap.values());
}
}
// 最后回退到 allFields
return allFields.value.map((field) => ({ return allFields.value.map((field) => ({
key: field.key, key: field.key,
label: field.label || field.key, label: field.label || field.key,
@ -2334,7 +2350,52 @@ const fetchCompareTable = async () => {
.filter(Boolean); .filter(Boolean);
diffFieldKeys.value = new Set(responseKeys); diffFieldKeys.value = new Set(responseKeys);
const fieldEntries = getCompareFieldEntries(); // 等待字典加载完成,最多等待2秒
let dictLoaded = false;
const dictList = display_field?.value ?? [];
if (dictList.length > 0) {
dictLoaded = true;
} else {
// 如果字典还没加载完成,等待一段时间
await new Promise((resolve) => {
let attempts = 0;
const maxAttempts = 20; // 最多尝试20次,每次100ms,总共2秒
const checkDict = () => {
const currentDictList = display_field?.value ?? [];
if (currentDictList.length > 0) {
dictLoaded = true;
resolve();
} else if (attempts < maxAttempts) {
attempts++;
setTimeout(checkDict, 100);
} else {
resolve(); // 超时后继续执行,使用fallback数据
}
};
checkDict();
});
}
// 使用字典数据或接口返回的数据构建字段列表
const fieldEntries = getCompareFieldEntries(fieldList);
// 如果字段列表为空,说明数据有问题,尝试从产品数据中提取字段
if (fieldEntries.length === 0 && sortedCompareList.value.length > 0) {
// 从第一个产品中提取所有字段
const firstProduct = sortedCompareList.value[0];
const extractedFields = Object.keys(firstProduct)
.filter((key) => {
// 排除一些非字段属性
return !['selected', 'isLatest'].includes(key);
})
.map((key) => ({
key,
label: getFieldLabelByKey(key),
}));
if (extractedFields.length > 0) {
fieldEntries.push(...extractedFields);
}
}
const rows = fieldEntries.map((entry) => { const rows = fieldEntries.map((entry) => {
const row = { param: entry.label }; const row = { param: entry.label };