卡片显示优化
This commit is contained in:
parent
1fc7bcb5f2
commit
9b6931d1ad
|
|
@ -720,7 +720,7 @@ const updateParameterDifferenceFlags = (entries) => {
|
|||
parameterDifferences.value = differences;
|
||||
};
|
||||
|
||||
const getCompareFieldEntries = () => {
|
||||
const getCompareFieldEntries = (fallbackFieldList = []) => {
|
||||
const dictList = display_field?.value ?? [];
|
||||
if (dictList.length > 0) {
|
||||
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) => ({
|
||||
key: field.key,
|
||||
label: field.label || field.key,
|
||||
|
|
@ -2334,7 +2350,52 @@ const fetchCompareTable = async () => {
|
|||
.filter(Boolean);
|
||||
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 row = { param: entry.label };
|
||||
|
|
|
|||
Loading…
Reference in New Issue