项目修改插入时不按照序号排列异常

This commit is contained in:
2026-02-04 17:25:13 +08:00
parent 2c2bb1adb0
commit 3a53837e50
6 changed files with 32 additions and 35 deletions

View File

@@ -836,30 +836,10 @@ function isChildTypeRow(row) {
return !!p.subRaw;
}
// 检验类型表:保持“当前顺序”展示,不在前端根据序号实时重新排序,
// 这样在点击“修改”或编辑序号时,行号不会在编辑过程中发生变化。
const sortedTypeRows = computed(() => {
// 需求:新增/编辑时不要“实时排序”,避免行在编辑过程中跳动;
// 仅在保存成功后(编辑结束、临时行消失/刷新数据)再按编码排序。
const hasTempRow = (tableData.value || []).some(r => isTempId(r?.id));
if (activeNav.value === 0 && (editingRowId.value || hasTempRow)) {
return [...tableData.value];
}
return [...tableData.value].sort((a, b) => {
const aOrder = a?.sortOrder === null || a?.sortOrder === undefined ? Number.POSITIVE_INFINITY : Number(a.sortOrder);
const bOrder = b?.sortOrder === null || b?.sortOrder === undefined ? Number.POSITIVE_INFINITY : Number(b.sortOrder);
if (aOrder !== bOrder) return aOrder - bOrder;
// 同序号:按编码保证稳定性(大类在子类之前,子类按后缀排序)
const pa = parseCodeParts(a?.code);
const pb = parseCodeParts(b?.code);
if (pa.mainRaw !== pb.mainRaw) {
return pa.mainRaw.localeCompare(pb.mainRaw, 'zh-Hans-CN', { numeric: true, sensitivity: 'base' });
}
const aHasSub = !!pa.subRaw;
const bHasSub = !!pb.subRaw;
if (aHasSub !== bHasSub) return aHasSub ? 1 : -1;
return pa.raw.localeCompare(pb.raw, 'zh-Hans-CN', { numeric: true, sensitivity: 'base' });
});
return [...tableData.value];
});
const pagedTypeRows = computed(() => {
@@ -895,10 +875,27 @@ const getInspectionTypeList = () => {
// 后端返回的数据格式: {code: 200, msg: "查询成功", data: [检验类型列表]}
const inspectionTypeList = data.data || [];
// 后端实体字段名本身就是 sortOrder这里不再从不存在的 item.order 做映射
const formattedData = inspectionTypeList.map(item => ({
let formattedData = inspectionTypeList.map(item => ({
...item,
sortOrder: item.sortOrder
}));
// 初始/刷新时:按“序号 + 编码”做一次排序,确保表单整体是按序号从小到大排列
formattedData = formattedData.sort((a, b) => {
const aOrder = a?.sortOrder == null || Number.isNaN(Number(a.sortOrder))
? Number.POSITIVE_INFINITY
: Number(a.sortOrder);
const bOrder = b?.sortOrder == null || Number.isNaN(Number(b.sortOrder))
? Number.POSITIVE_INFINITY
: Number(b.sortOrder);
if (aOrder !== bOrder) return aOrder - bOrder;
// 同序号时按编码作为稳定排序的备用键
const aCode = (a?.code ?? '').toString().trim();
const bCode = (b?.code ?? '').toString().trim();
return aCode.localeCompare(bCode, 'zh-Hans-CN', { numeric: true, sensitivity: 'base' });
});
// 过滤掉已逻辑删除的记录validFlag为0
tableData.value = formattedData.filter(item => item.validFlag === 1);
}).catch(error => {