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

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

@@ -17,8 +17,8 @@ import com.core.common.core.domain.AjaxResult;
import com.core.common.core.page.TableDataInfo; import com.core.common.core.page.TableDataInfo;
import com.core.common.enums.BusinessType; import com.core.common.enums.BusinessType;
import com.core.common.utils.poi.ExcelUtil; import com.core.common.utils.poi.ExcelUtil;
import com.openhis.domain.DayEndSettlement; import com.openhis.medicationmanagement.domain.DayEndSettlement;
import com.openhis.service.IDayEndSettlementService; import com.openhis.medicationmanagement.service.IDayEndSettlementService;
import com.core.common.core.page.PageDomain; import com.core.common.core.page.PageDomain;
import com.core.common.utils.StringUtils; import com.core.common.utils.StringUtils;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;

View File

@@ -1,4 +1,4 @@
package com.openhis.domain; package com.openhis.medicationmanagement.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;

View File

@@ -1,6 +1,6 @@
package com.openhis.mapper; package com.openhis.medicationmanagement.mapper;
import com.openhis.domain.DayEndSettlement; import com.openhis.medicationmanagement.domain.DayEndSettlement;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/** /**

View File

@@ -1,6 +1,6 @@
package com.openhis.service; package com.openhis.medicationmanagement.service;
import com.openhis.domain.DayEndSettlement; import com.openhis.medicationmanagement.domain.DayEndSettlement;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
/** /**

View File

@@ -1,8 +1,8 @@
package com.openhis.service.impl; package com.openhis.medicationmanagement.service.impl;
import com.openhis.domain.DayEndSettlement; import com.openhis.medicationmanagement.domain.DayEndSettlement;
import com.openhis.mapper.DayEndSettlementMapper; import com.openhis.medicationmanagement.mapper.DayEndSettlementMapper;
import com.openhis.service.IDayEndSettlementService; import com.openhis.medicationmanagement.service.IDayEndSettlementService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -836,30 +836,10 @@ function isChildTypeRow(row) {
return !!p.subRaw; return !!p.subRaw;
} }
// 检验类型表:保持“当前顺序”展示,不在前端根据序号实时重新排序,
// 这样在点击“修改”或编辑序号时,行号不会在编辑过程中发生变化。
const sortedTypeRows = computed(() => { const sortedTypeRows = computed(() => {
// 需求:新增/编辑时不要“实时排序”,避免行在编辑过程中跳动; return [...tableData.value];
// 仅在保存成功后(编辑结束、临时行消失/刷新数据)再按编码排序。
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' });
});
}); });
const pagedTypeRows = computed(() => { const pagedTypeRows = computed(() => {
@@ -895,10 +875,27 @@ const getInspectionTypeList = () => {
// 后端返回的数据格式: {code: 200, msg: "查询成功", data: [检验类型列表]} // 后端返回的数据格式: {code: 200, msg: "查询成功", data: [检验类型列表]}
const inspectionTypeList = data.data || []; const inspectionTypeList = data.data || [];
// 后端实体字段名本身就是 sortOrder这里不再从不存在的 item.order 做映射 // 后端实体字段名本身就是 sortOrder这里不再从不存在的 item.order 做映射
const formattedData = inspectionTypeList.map(item => ({ let formattedData = inspectionTypeList.map(item => ({
...item, ...item,
sortOrder: item.sortOrder 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 // 过滤掉已逻辑删除的记录validFlag为0
tableData.value = formattedData.filter(item => item.validFlag === 1); tableData.value = formattedData.filter(item => item.validFlag === 1);
}).catch(error => { }).catch(error => {