参数对比优化
This commit is contained in:
parent
81e69dc7b2
commit
0cee08a479
|
|
@ -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");
|
||||
|
||||
// 接收props和定义emit
|
||||
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 = [];
|
||||
|
|
|
|||
Loading…
Reference in New Issue