参数对比优化

This commit is contained in:
JenniferW 2025-11-25 18:02:07 +08:00
parent 81e69dc7b2
commit 0cee08a479
1 changed files with 62 additions and 12 deletions

View File

@ -405,7 +405,7 @@
</template>
<script setup>
import { ref, computed, watch, onMounted, nextTick } from "vue";
import { ref, computed, watch, onMounted, nextTick, getCurrentInstance } from "vue";
import {
searchHint,
search as searchProducts,
@ -415,6 +415,9 @@ import {
import { ElMessage, ElEmpty, ElDialog } from "element-plus";
import { Search, RefreshLeft, Microphone } from "@element-plus/icons-vue";
const { proxy } = getCurrentInstance();
const { display_field } = proxy.useDict("display_field");
// propsemit
const props = defineProps({
form: Object,
@ -529,21 +532,48 @@ const sortedCompareList = computed(() => {
});
const compareTableData = ref([]);
const diffFieldKeys = ref(new Set());
const updateParameterDifferenceFlags = (rows) => {
const getDictLabel = (dictRef, value) => {
if (!dictRef) return null;
const list = dictRef.value ?? [];
const target = list.find((item) => item.value === value);
return target ? target.label : null;
};
const getFieldLabelByKey = (key) => {
if (!key) return "-";
const dictLabel = getDictLabel(display_field, key);
if (dictLabel) return dictLabel;
const field = allFields.value.find((item) => item.key === key);
return field?.label || key;
};
const updateParameterDifferenceFlags = (entries) => {
const differences = {};
rows.forEach((row) => {
if (!row || !row.param) return;
const values = sortedCompareList.value.map((item) => row[item.partNumber]);
const baseline = values.find(
(val) => val !== undefined && val !== null && val !== "-"
);
differences[row.param] =
baseline !== undefined && values.some((val) => val !== baseline);
entries.forEach((entry) => {
differences[entry.label] = diffFieldKeys.value.has(entry.key);
});
parameterDifferences.value = differences;
};
const getCompareFieldEntries = () => {
const dictList = display_field?.value ?? [];
if (dictList.length > 0) {
return dictList
.filter((item) => item.value)
.map((item) => ({
key: item.value,
label: item.label || item.value,
}));
}
return allFields.value.map((field) => ({
key: field.key,
label: field.label || field.key,
}));
};
// ""
const filteredCompareTableData = computed(() => {
if (!showOnlyDifferences.value) {
@ -1385,13 +1415,33 @@ const fetchCompareTable = async () => {
}
try {
const res = await compare({ ids });
const rows = Array.isArray(res?.data)
const fieldList = Array.isArray(res?.data)
? res.data
: Array.isArray(res)
? res
: [];
const responseKeys = fieldList
.map((item) => item.fieldKey || item.key || item.param)
.filter(Boolean);
diffFieldKeys.value = new Set(responseKeys);
const fieldEntries = getCompareFieldEntries();
const rows = fieldEntries.map((entry) => {
const row = { param: entry.label };
sortedCompareList.value.forEach((product) => {
const value = product[entry.key];
row[product.partNumber] =
value !== undefined && value !== null && value !== ""
? value
: "-";
});
return row;
});
compareTableData.value = rows;
updateParameterDifferenceFlags(rows);
updateParameterDifferenceFlags(fieldEntries);
} catch (error) {
console.error("compare error:", error);
compareTableData.value = [];