优化混炼示方

This commit is contained in:
geht
2026-05-26 09:52:42 +08:00
parent 72aeee0f10
commit 41f8cef462
7 changed files with 260 additions and 53 deletions

View File

@@ -315,3 +315,19 @@ jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingSpecModal.vue
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingMaterialSelectModal.vue
jeecgboot-vue3/src/views/xslmes/mesXslMixerMaterialKindCfg/MesXslMixerMaterialKindCfgList.vue
-- author:cursor---date:20260525--for: 【XSLMES-20260525-A54】母炼胶明细行绑定已同步密炼物料主数据及种类配置解析 -----------
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
-- author:cursor---date:20260525--for: 【XSLMES-20260525-A55】混炼示方明细新增密炼物料ID字段 -----------
jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/V3.9.2_104__mes_xsl_mixing_spec_material_mixer_material_id.sql
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/entity/MesXslMixingSpecMaterial.java
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslFormulaSpecServiceImpl.java
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/MesXslMixingSpec.data.ts
-- author:cursor---date:20260525--for: 【XSLMES-20260525-A56】混炼示方批量删除性能优化子表批量删+去重同步删密炼物料) -----------
jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/service/impl/MesXslMixingSpecServiceImpl.java
-- author:cursor---date:20260525--for: 【XSLMES-20260525-A57】混合步骤动作/组合下拉最多展示20条 -----------
jeecgboot-vue3/src/views/xslmes/mesXslMixingSpec/components/MesXslMixingStepSelectCell.vue

View File

@@ -40,6 +40,11 @@ public class MesXslMixingSpecMaterial implements Serializable {
@Schema(description = "种类")
private String materialKind;
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细关联密炼物料ID-----------
@Schema(description = "密炼物料ID关联mes_mixer_material.id")
private String mixerMaterialId;
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细关联密炼物料ID-----------
@Schema(description = "密炼物料名称")
private String mixerMaterialName;

View File

@@ -562,7 +562,15 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
String materialStep = resolveMixingMaterialStep(row);
int mixingColumn = resolveMixingColumn(row, formula);
List<MesXslMixingSpecMaterial> materials = buildMixingMaterials(
formula, lines, mixingColumn, materialStep, mixerCache, categoryNameCache, kindLookup);
formula,
lines,
mixingColumn,
materialStep,
mixerCache,
categoryNameCache,
kindLookup,
compoundSpecificGravity,
categoryIdCache);
for (MesXslFormulaMixingGenerateMachineVO machine : row.getMachines()) {
if (machine == null || oConvertUtils.isEmpty(machine.getMachineId())) {
continue;
@@ -935,7 +943,9 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
String materialStep,
Map<String, MesMixerMaterial> mixerCache,
Map<String, String> categoryNameCache,
MesXslMixerMaterialKindLookupVO kindLookup) {
MesXslMixerMaterialKindLookupVO kindLookup,
BigDecimal compoundSpecificGravity,
Map<String, String> categoryIdCache) {
String stepFilter = StringUtils.isNotBlank(materialStep) ? materialStep.trim().toUpperCase() : "A";
List<MesXslMixingSpecMaterial> materials = new ArrayList<>();
int sort = 0;
@@ -947,7 +957,17 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
if (lastBSegment > 0) {
String motherSpecCode = appendFormulaCodeSuffix("B" + lastBSegment + rubberName, codeSuffix);
BigDecimal motherWeight = resolveStageCumulativeTotal(formula, lines, lastBSegment);
materials.add(createMotherRubberMaterial(motherSpecCode, rubberName, motherWeight, materials.size(), kindLookup));
materials.add(
createMotherRubberMaterial(
motherSpecCode,
motherWeight,
materials.size(),
formula,
compoundSpecificGravity,
categoryIdCache,
mixerCache,
categoryNameCache,
kindLookup));
}
appendQStageColumnAgents(lines, stageIndex, materials, mixerCache, categoryNameCache, kindLookup);
reindexMaterialSortNo(materials);
@@ -966,7 +986,17 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
int prevB = bColumn - 1;
String motherSpecCode = appendFormulaCodeSuffix("B" + prevB + rubberName, codeSuffix);
BigDecimal motherWeight = resolveStageCumulativeTotal(formula, lines, prevB);
materials.add(createMotherRubberMaterial(motherSpecCode, rubberName, motherWeight, materials.size(), kindLookup));
materials.add(
createMotherRubberMaterial(
motherSpecCode,
motherWeight,
materials.size(),
formula,
compoundSpecificGravity,
categoryIdCache,
mixerCache,
categoryNameCache,
kindLookup));
appendBStageColumnAgents(lines, bColumn, materials, mixerCache, categoryNameCache, kindLookup);
reindexMaterialSortNo(materials);
return materials;
@@ -1023,26 +1053,103 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
}
}
/** 上一段密炼产出胶料(一条):示方编号 B{n-1}+胶料名,种类读配置表 */
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A54】母炼胶明细行绑定已同步密炼物料主数据-----------
/**
* 上一段密炼产出胶料(一条):示方编号 B{n-1}+胶料名。
* 先确保对应密炼物料主数据存在,再按主数据回填明细(种类走配置表 + 小类 ID
*/
private MesXslMixingSpecMaterial createMotherRubberMaterial(
String motherSpecCode,
String rubberName,
BigDecimal unitWeight,
int sortNo,
MesXslFormulaSpec formula,
BigDecimal compoundSpecificGravity,
Map<String, String> categoryIdCache,
Map<String, MesMixerMaterial> mixerCache,
Map<String, String> categoryNameCache,
MesXslMixerMaterialKindLookupVO kindLookup) {
ensureMotherRubberMixerMaterialSynced(motherSpecCode, formula, compoundSpecificGravity, categoryIdCache);
MesXslMixingSpecMaterial material = new MesXslMixingSpecMaterial();
material.setSortNo(sortNo);
material.setMixerMaterialName(motherSpecCode);
material.setMixerMaterialDesc(StringUtils.isNotBlank(rubberName) ? rubberName : motherSpecCode);
String rubberKind =
kindLookup != null && StringUtils.isNotBlank(kindLookup.getRubberKindName())
? kindLookup.getRubberKindName()
: "胶料";
material.setMaterialKind(rubberKind);
material.setUnitWeight(unitWeight);
MesMixerMaterial mixer = findMixerMaterialByCodeOrName(motherSpecCode.trim());
if (mixer != null) {
fillMixingMaterialFromMixerMaterial(material, mixer, null, mixerCache, categoryNameCache, kindLookup);
return material;
}
log.warn("[混炼示方生成] 未找到上一段密炼物料 {},明细行回退为示方编号展示", motherSpecCode);
material.setMixerMaterialName(motherSpecCode);
material.setMixerMaterialDesc(motherSpecCode);
fillMotherRubberCategoryFallback(material, categoryIdCache, categoryNameCache, kindLookup);
return material;
}
/** 上一段 B 段胶尚未写入主数据时,按母炼胶/A胶分类补建一条密炼物料 */
private void ensureMotherRubberMixerMaterialSynced(
String motherSpecCode,
MesXslFormulaSpec formula,
BigDecimal compoundSpecificGravity,
Map<String, String> categoryIdCache) {
if (StringUtils.isBlank(motherSpecCode)) {
return;
}
String normalized = motherSpecCode.trim();
if (findMixerMaterialByCodeOrName(normalized) != null) {
return;
}
MesXslFormulaMixingGenerateRowVO stub = new MesXslFormulaMixingGenerateRowVO();
stub.setSpecCode(normalized);
stub.setStepType("A");
syncGeneratedRubberMixerMaterial(stub, formula, compoundSpecificGravity, categoryIdCache);
}
/** 按密炼物料主数据回填混炼示方明细行(名称/大小类/种类) */
private void fillMixingMaterialFromMixerMaterial(
MesXslMixingSpecMaterial material,
MesMixerMaterial mixer,
String weighMode,
Map<String, MesMixerMaterial> mixerCache,
Map<String, String> categoryNameCache,
MesXslMixerMaterialKindLookupVO kindLookup) {
if (material == null || mixer == null) {
return;
}
String displayName =
StringUtils.isNotBlank(mixer.getMaterialName()) ? mixer.getMaterialName() : mixer.getMaterialCode();
material.setMixerMaterialName(displayName);
material.setMixerMaterialDesc(
StringUtils.isNotBlank(mixer.getMaterialDesc()) ? mixer.getMaterialDesc() : displayName);
String majorName = resolveCategoryName(mixer.getMajorCategoryId(), categoryNameCache);
String minorName = resolveCategoryName(mixer.getMinorCategoryId(), categoryNameCache);
material.setMaterialMajor(majorName);
material.setMaterialMinor(minorName);
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细回填密炼物料ID-----------
material.setMixerMaterialId(mixer.getId());
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细回填密炼物料ID-----------
material.setMaterialKind(
mesXslMixerMaterialKindCfgService.resolveMixingMaterialKind(
kindLookup, mixer.getMinorCategoryId(), weighMode, minorName));
if (mixerCache != null && StringUtils.isNotBlank(mixer.getId())) {
mixerCache.put(mixer.getId(), mixer);
}
}
/** 未查到密炼物料时,按母炼胶/A胶分类从配置表解析种类 */
private void fillMotherRubberCategoryFallback(
MesXslMixingSpecMaterial material,
Map<String, String> categoryIdCache,
Map<String, String> categoryNameCache,
MesXslMixerMaterialKindLookupVO kindLookup) {
String majorCategoryId = resolveCategoryIdByCode(CATEGORY_MASTER_MAJOR, categoryIdCache);
String minorCategoryId = resolveCategoryIdByCode(CATEGORY_MASTER_MINOR_A, categoryIdCache);
material.setMaterialMajor(resolveCategoryName(majorCategoryId, categoryNameCache));
material.setMaterialMinor(resolveCategoryName(minorCategoryId, categoryNameCache));
material.setMaterialKind(
mesXslMixerMaterialKindCfgService.resolveMixingMaterialKind(
kindLookup, minorCategoryId, null, material.getMaterialMinor()));
}
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A54】母炼胶明细行绑定已同步密炼物料主数据-----------
/** 混合段累计合计:优先主表 stageNTotal否则按明细该列求和 */
private BigDecimal resolveStageCumulativeTotal(MesXslFormulaSpec formula, List<MesXslFormulaSpecLine> lines, int column) {
BigDecimal fromMain = readStageTotalFromMain(formula, column);
@@ -1129,6 +1236,24 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
return material;
}
private void fillMaterialCategory(
MesXslMixingSpecMaterial material,
String mixerMaterialId,
MesXslFormulaSpecLine line,
Map<String, MesMixerMaterial> mixerCache,
Map<String, String> categoryNameCache,
MesXslMixerMaterialKindLookupVO kindLookup) {
if (oConvertUtils.isEmpty(mixerMaterialId)) {
return;
}
MesMixerMaterial mixer = mixerCache.computeIfAbsent(mixerMaterialId, id -> mesMixerMaterialService.getById(id));
if (mixer == null) {
return;
}
String weighMode = line != null ? line.getWeighMode() : null;
fillMixingMaterialFromMixerMaterial(material, mixer, weighMode, mixerCache, categoryNameCache, kindLookup);
}
private BigDecimal readStageValue(MesXslFormulaSpecLine line, int stageIndex) {
if (line == null || stageIndex < 1 || stageIndex > 7) {
return null;
@@ -1145,32 +1270,6 @@ public class MesXslFormulaSpecServiceImpl extends ServiceImpl<MesXslFormulaSpecM
};
}
private void fillMaterialCategory(
MesXslMixingSpecMaterial material,
String mixerMaterialId,
MesXslFormulaSpecLine line,
Map<String, MesMixerMaterial> mixerCache,
Map<String, String> categoryNameCache,
MesXslMixerMaterialKindLookupVO kindLookup) {
if (oConvertUtils.isEmpty(mixerMaterialId)) {
return;
}
MesMixerMaterial mixer = mixerCache.computeIfAbsent(mixerMaterialId, id -> mesMixerMaterialService.getById(id));
if (mixer == null) {
return;
}
String weighMode = line != null ? line.getWeighMode() : null;
String majorName = resolveCategoryName(mixer.getMajorCategoryId(), categoryNameCache);
String minorName = resolveCategoryName(mixer.getMinorCategoryId(), categoryNameCache);
material.setMaterialMajor(majorName);
material.setMaterialMinor(minorName);
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A52】生成混炼示方种类改读密炼物料种类配置-----------
material.setMaterialKind(
mesXslMixerMaterialKindCfgService.resolveMixingMaterialKind(
kindLookup, mixer.getMinorCategoryId(), weighMode, minorName));
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A52】生成混炼示方种类改读密炼物料种类配置-----------
}
private String resolveCategoryName(String categoryId, Map<String, String> cache) {
if (oConvertUtils.isEmpty(categoryId)) {
return null;

View File

@@ -8,11 +8,16 @@ import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.constant.CommonConstant;
@@ -114,14 +119,12 @@ public class MesXslMixingSpecServiceImpl extends ServiceImpl<MesXslMixingSpecMap
@Override
@Transactional(rollbackFor = Exception.class)
public void delMain(String id) {
MesXslMixingSpec main = this.getById(id);
clearChildren(id);
this.removeById(id);
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A49】删除混炼示方时同步删除B/F段胶密炼物料-----------
if (main != null) {
syncDeleteGeneratedRubberMixerMaterial(main.getSpecName());
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A56】混炼示方批量删除性能优化-----------
if (StringUtils.isBlank(id)) {
return;
}
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A49】删除混炼示方时同步删除B/F段胶密炼物料-----------
delBatchMain(Collections.singletonList(id));
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A56】混炼示方批量删除性能优化-----------
}
@Override
@@ -130,11 +133,32 @@ public class MesXslMixingSpecServiceImpl extends ServiceImpl<MesXslMixingSpecMap
if (CollectionUtils.isEmpty(idList)) {
return;
}
for (Serializable id : idList) {
if (id != null) {
delMain(String.valueOf(id));
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A56】混炼示方批量删除性能优化-----------
List<String> ids = idList.stream()
.filter(Objects::nonNull)
.map(String::valueOf)
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (ids.isEmpty()) {
return;
}
List<MesXslMixingSpec> mains = this.listByIds(ids);
if (CollectionUtils.isEmpty(mains)) {
return;
}
clearChildrenBatch(ids);
this.removeByIds(ids);
Set<String> specNames = new LinkedHashSet<>();
for (MesXslMixingSpec main : mains) {
if (main != null && StringUtils.isNotBlank(main.getSpecName())) {
specNames.add(main.getSpecName().trim());
}
}
for (String specName : specNames) {
syncDeleteGeneratedRubberMixerMaterial(specName);
}
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A56】混炼示方批量删除性能优化-----------
}
@Override
@@ -269,6 +293,19 @@ public class MesXslMixingSpecServiceImpl extends ServiceImpl<MesXslMixingSpecMap
}
}
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A56】混炼示方批量删除性能优化-----------
/** 批量删除多个混炼示方的全部子表数据 */
private void clearChildrenBatch(Collection<String> mainIds) {
if (CollectionUtils.isEmpty(mainIds)) {
return;
}
materialMapper.delete(new LambdaQueryWrapper<MesXslMixingSpecMaterial>().in(MesXslMixingSpecMaterial::getMixingSpecId, mainIds));
stepMapper.delete(new LambdaQueryWrapper<MesXslMixingSpecStep>().in(MesXslMixingSpecStep::getMixingSpecId, mainIds));
downStepMapper.delete(new LambdaQueryWrapper<MesXslMixingSpecDownStep>().in(MesXslMixingSpecDownStep::getMixingSpecId, mainIds));
tcuMapper.delete(new LambdaQueryWrapper<MesXslMixingSpecTcu>().in(MesXslMixingSpecTcu::getMixingSpecId, mainIds));
}
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A56】混炼示方批量删除性能优化-----------
private void saveChildren(
String mainId,
List<MesXslMixingSpecMaterial> materialList,
@@ -545,9 +582,12 @@ public class MesXslMixingSpecServiceImpl extends ServiceImpl<MesXslMixingSpecMap
if (row == null) {
return false;
}
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细有效行判断含密炼物料ID-----------
return StringUtils.isNotBlank(row.getMixerMaterialName())
|| StringUtils.isNotBlank(row.getMixerMaterialId())
|| row.getUnitWeight() != null
|| StringUtils.isNotBlank(row.getMaterialKind());
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细有效行判断含密炼物料ID-----------
}
private String normalizeMaterialKind(MesXslMixingSpecMaterial row) {
@@ -634,8 +674,7 @@ public class MesXslMixingSpecServiceImpl extends ServiceImpl<MesXslMixingSpecMap
log.debug("[混炼示方删除] 示方编号 {} 仍有 {} 条混炼示方,跳过密炼物料同步删除", specCode, remainingSpecCount);
return;
}
long referencedCount = materialMapper.selectCount(
new LambdaQueryWrapper<MesXslMixingSpecMaterial>().eq(MesXslMixingSpecMaterial::getMixerMaterialName, specCode));
long referencedCount = countMaterialReference(specCode, null);
if (referencedCount > 0) {
log.info(
"[混炼示方删除] 示方编号 {} 仍被 {} 条混炼示方明细引用,跳过密炼物料同步删除",
@@ -648,6 +687,15 @@ public class MesXslMixingSpecServiceImpl extends ServiceImpl<MesXslMixingSpecMap
log.debug("[混炼示方删除] 未找到示方编号 {} 对应密炼物料,跳过同步删除", specCode);
return;
}
referencedCount = countMaterialReference(specCode, material.getId());
if (referencedCount > 0) {
log.info(
"[混炼示方删除] 密炼物料 id={}, code={} 仍被 {} 条混炼示方明细引用,跳过同步删除",
material.getId(),
specCode,
referencedCount);
return;
}
Map<String, String> categoryIdCache = new HashMap<>();
if (!isGeneratedRubberMixerMaterial(material, isFinalStage, categoryIdCache)) {
log.info(
@@ -706,6 +754,18 @@ public class MesXslMixingSpecServiceImpl extends ServiceImpl<MesXslMixingSpecMap
return expectedMajorId.equals(material.getMajorCategoryId()) && expectedMinorId.equals(material.getMinorCategoryId());
}
/** 统计混炼示方明细对某示方编号/密炼物料 ID 的引用次数 */
private long countMaterialReference(String specCode, String mixerMaterialId) {
LambdaQueryWrapper<MesXslMixingSpecMaterial> qw = new LambdaQueryWrapper<>();
qw.and(wrapper -> {
wrapper.eq(MesXslMixingSpecMaterial::getMixerMaterialName, specCode);
if (StringUtils.isNotBlank(mixerMaterialId)) {
wrapper.or().eq(MesXslMixingSpecMaterial::getMixerMaterialId, mixerMaterialId);
}
});
return materialMapper.selectCount(qw);
}
private String resolveCategoryIdByCode(String categoryCode, Map<String, String> cache) {
if (StringUtils.isBlank(categoryCode)) {
return null;

View File

@@ -0,0 +1,7 @@
-- 混炼示方明细关联密炼物料主数据 ID
SET NAMES utf8mb4;
ALTER TABLE `mes_xsl_mixing_spec_material`
ADD COLUMN `mixer_material_id` varchar(32) DEFAULT NULL COMMENT '密炼物料ID关联mes_mixer_material.id' AFTER `material_kind`;
CREATE INDEX `idx_mxmix_mat_mixer_id` ON `mes_xsl_mixing_spec_material` (`mixer_material_id`);

View File

@@ -88,6 +88,9 @@ export const mainSchema: FormSchema[] = [
//update-begin---author:cursor ---date:20260522 for【XSLMES-20260522-A17】橡胶及配合剂明细列展示设置-----------
export const materialColumns: JVxeColumn[] = [
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细关联密炼物料ID-----------
{ title: '密炼物料ID', key: 'mixerMaterialId', type: JVxeTypes.hidden },
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A55】混炼示方明细关联密炼物料ID-----------
{ title: '物料大类', key: 'materialMajor', type: JVxeTypes.input, width: 100, minWidth: MIXING_MATERIAL_MIN_COLUMN_WIDTH },
{ title: '物料小类', key: 'materialMinor', type: JVxeTypes.input, width: 120, minWidth: MIXING_MATERIAL_MIN_COLUMN_WIDTH },
{ title: '种类', key: 'materialKind', type: JVxeTypes.input, width: 80, minWidth: MIXING_MATERIAL_MIN_COLUMN_WIDTH },
@@ -219,7 +222,7 @@ function isMixingMaterialDataRow(row: Recordable): boolean {
if (!row) {
return false;
}
return !!(row.mixerMaterialName || row.materialKind || row.unitWeight != null && row.unitWeight !== '');
return !!(row.mixerMaterialId || row.mixerMaterialName || row.materialKind || row.unitWeight != null && row.unitWeight !== '');
}
/** 规范化种类字段,用于连续行分组 */
@@ -1100,6 +1103,9 @@ export function applyMixingMaterialFromSelection(row: Recordable, material: Reco
if (!row || !material) {
return;
}
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A55】选料回填密炼物料ID-----------
row.mixerMaterialId = material.id || material.mixerMaterialId || '';
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A55】选料回填密炼物料ID-----------
row.mixerMaterialName = material.materialName || material.materialCode || '';
row.mixerMaterialDesc = material.materialDesc || material.materialName || material.materialCode || '';
row.materialMajor = material.majorCategoryId_dictText || '';

View File

@@ -10,6 +10,7 @@
size="small"
class="mixing-step-select"
popup-class-name="mixing-step-select-dropdown"
:list-height="listHeight"
:placeholder="placeholder"
:get-popup-container="getPopupContainer"
@update:value="handleChange"
@@ -19,9 +20,14 @@
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { computed, ref } from 'vue';
import { useMessage } from '/@/hooks/web/useMessage';
/** 下拉单项高度(与 ant-design-vue small Select 选项行高一致) */
const STEP_SELECT_ITEM_HEIGHT = 32;
/** 下拉最多可见条数 */
const STEP_SELECT_MAX_VISIBLE = 20;
const props = defineProps<{
row: Recordable;
field: string;
@@ -34,6 +40,14 @@
const { createMessage } = useMessage();
const dropdownOpen = ref(false);
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A57】混合步骤动作/组合下拉最多展示20条-----------
const listHeight = computed(() => {
const count = props.options?.length ?? 0;
const visibleCount = count > 0 ? Math.min(count, STEP_SELECT_MAX_VISIBLE) : STEP_SELECT_MAX_VISIBLE;
return visibleCount * STEP_SELECT_ITEM_HEIGHT;
});
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A57】混合步骤动作/组合下拉最多展示20条-----------
function handleChange(value: string | undefined) {
props.row[props.field] = value;
}