项目修改插入时不按照序号排列异常
This commit is contained in:
@@ -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 => {
|
||||
|
||||
Reference in New Issue
Block a user