卡片显示优化
This commit is contained in:
parent
1fc7bcb5f2
commit
9b6931d1ad
|
|
@ -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 };
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue