新增混炼示方选择弹窗及相关功能,支持规格选择与参照新增,优化用户交互体验。

This commit is contained in:
geht
2026-05-26 10:21:56 +08:00
parent a579f0e15c
commit 51cac2c17a
3 changed files with 390 additions and 17 deletions

View File

@@ -20,7 +20,15 @@
<tr>
<th class="formTitle required" rowspan="3">规格</th>
<td class="formValue" colspan="3" rowspan="3">
<a-input v-model:value="sheetForm.specName" :disabled="!showFooter" :bordered="false" class="form-input" />
<a-input
:value="sheetForm.specName"
readonly
placeholder="请点击选择混炼示方"
:disabled="!showFooter"
:bordered="false"
:class="['form-input', 'mixing-picker-input', { 'is-filled': !!sheetForm.specName }]"
@click="openSpecPicker"
/>
</td>
<th class="formTitle" colspan="2">机台</th>
<th class="formTitle" colspan="1">制作日期</th>
@@ -421,6 +429,7 @@
<MesXslMixerPsCompileSelectModal @register="registerIssueNumberModal" @select="onIssueNumberSelect" />
<MesXslMixingMaterialSelectModal @register="registerMixingMaterialModal" @select="onMixingMaterialSelect" />
<MesXslMixingSpecStepHistorySelectModal @register="registerHistoryStepModal" @select="onHistoryStepSelect" />
<MesXslMixingSpecSelectModal @register="registerSpecPickerModal" @edit="onSpecPickerEdit" @referenceAdd="onSpecPickerReferenceAdd" />
</template>
<script lang="ts" setup>
@@ -471,6 +480,7 @@ import {
calcMixingFillVolume,
resolveMixingSpecificGravity,
cloneMixingHistoryStepRows,
cloneMixingSpecPageForReferenceAdd,
MIXING_MATERIAL_ROW_NUMBER_WIDTH,
MIXING_MATERIAL_FOOTER_ROW_HEIGHT,
MIXING_MATERIAL_MIN_COLUMN_WIDTH,
@@ -488,6 +498,7 @@ import { queryById as queryEquipmentById } from '/@/views/xslmes/mesXslEquipment
import MesXslMixerPsCompileSelectModal from '/@/views/xslmes/mesXslMixerPsCompile/components/MesXslMixerPsCompileSelectModal.vue';
import MesXslMixingMaterialSelectModal from './MesXslMixingMaterialSelectModal.vue';
import MesXslMixingSpecStepHistorySelectModal from './MesXslMixingSpecStepHistorySelectModal.vue';
import MesXslMixingSpecSelectModal from './MesXslMixingSpecSelectModal.vue';
const emit = defineEmits(['register', 'success']);
const { createMessage } = useMessage();
@@ -895,6 +906,9 @@ const [registerMixingMaterialModal, { openModal: openMixingMaterialModalInner, c
//update-begin---author:cursor ---date:20260526 for【XSLMES-20260526-A58】参照历史混合步骤选择弹窗-----------
const [registerHistoryStepModal, { openModal: openHistoryStepModalInner, closeModal: closeHistoryStepModal, setModalProps: setHistoryStepModalProps }] = useModal();
//update-end---author:cursor ---date:20260526 for【XSLMES-20260526-A58】参照历史混合步骤选择弹窗-----------
//update-begin---author:cursor ---date:20260526 for【XSLMES-20260526-A59】规格点击选择混炼示方-----------
const [registerSpecPickerModal, { openModal: openSpecPickerModalInner, closeModal: closeSpecPickerModal, setModalProps: setSpecPickerModalProps }] = useModal();
//update-end---author:cursor ---date:20260526 for【XSLMES-20260526-A59】规格点击选择混炼示方-----------
//update-begin---author:cursor ---date:20260525 for【XSLMES-20260525-A52】关闭混炼示方弹窗时同步关闭嵌套选料弹窗-----------
function closeNestedPickers() {
@@ -902,6 +916,7 @@ function closeNestedPickers() {
closeMachineModal();
closeIssueNumberModal();
closeHistoryStepModal();
closeSpecPickerModal();
materialPickerRow.value = null;
}
//update-end---author:cursor ---date:20260525 for【XSLMES-20260525-A52】关闭混炼示方弹窗时同步关闭嵌套选料弹窗-----------
@@ -931,6 +946,80 @@ function openIssueNumberPicker() {
openIssueNumberModalInner(true, { psCompileId: mixerPsCompilePickerId.value || '' });
}
//update-begin---author:cursor ---date:20260526 for【XSLMES-20260526-A59】规格点击选择混炼示方-----------
function openSpecPicker() {
if (!showFooter.value) {
return;
}
setSpecPickerModalProps({ zIndex: 1500 });
openSpecPickerModalInner(true, { machineId: sheetForm.machineId || '' });
}
async function applyMixingSpecPageData(row: Recordable, mode: 'edit' | 'referenceAdd') {
const pageData = mode === 'referenceAdd' ? cloneMixingSpecPageForReferenceAdd(row) : row;
isUpdate.value = mode === 'edit';
Object.assign(sheetForm, pageData || {});
if (mode === 'referenceAdd') {
sheetForm.id = '';
const userInfo = userStore.getUserInfo || {};
refreshSignDisplay({
createBy_dictText: userInfo.realname,
createBy: userInfo.username,
});
} else {
refreshSignDisplay(pageData || {});
}
await loadMachineEffectiveVolume(sheetForm.machineId);
await loadMixerStepOptions(sheetForm.machineId);
await syncSheetToForm();
materialData.value = ensureMixingDetailRows(pageData?.materialList || [], DEFAULT_MIXING_MATERIAL_ROW_COUNT);
convertFactorApplying.value = true;
initMaterialBaseUnitWeights(materialData.value, sheetForm.convertFactor, true);
lastConvertFactor.value = normalizeMixingConvertFactor(sheetForm.convertFactor);
applyMaterialAccumWeight(materialData.value);
convertFactorApplying.value = false;
stepData.value = ensureMixingDetailRows(pageData?.stepList || [], DEFAULT_MIXING_STEP_ROW_COUNT);
downStepData.value = ensureMixingDetailRows(pageData?.downStepList || [], DEFAULT_MIXING_DOWN_STEP_ROW_COUNT);
tcuData.value = ensureTcuDefaultRows(pageData?.tcuList || []);
}
async function onSpecPickerEdit(payload: Recordable | null) {
if (!payload?.mixingSpecId) {
return;
}
try {
const raw = await queryById({ id: payload.mixingSpecId });
const row = (raw as Recordable)?.specName != null ? raw : (raw as Recordable)?.result;
if (!row?.id) {
createMessage.warning('未找到混炼示方数据');
return;
}
await applyMixingSpecPageData(row, 'edit');
createMessage.success(`已加载示方「${row.specName || ''}`);
} catch {
createMessage.error('加载混炼示方失败');
}
}
async function onSpecPickerReferenceAdd(payload: Recordable | null) {
if (!payload?.mixingSpecId) {
return;
}
try {
const raw = await queryById({ id: payload.mixingSpecId });
const row = (raw as Recordable)?.specName != null ? raw : (raw as Recordable)?.result;
if (!row?.id) {
createMessage.warning('未找到混炼示方数据');
return;
}
await applyMixingSpecPageData(row, 'referenceAdd');
createMessage.success(`已参照示方「${row.specName || ''}」新增`);
} catch {
createMessage.error('参照混炼示方失败');
}
}
//update-end---author:cursor ---date:20260526 for【XSLMES-20260526-A59】规格点击选择混炼示方-----------
function onIssueNumberSelect(payload: Recordable | null) {
if (!payload) {
return;
@@ -1075,22 +1164,7 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data
if (isUpdate.value && data?.record?.id) {
const raw = await queryById({ id: data.record.id });
const row = raw?.result || raw;
Object.assign(sheetForm, row || {});
refreshSignDisplay(row || {});
await loadMachineEffectiveVolume(sheetForm.machineId);
await loadMixerStepOptions(sheetForm.machineId);
await syncSheetToForm();
//update-begin---author:cursor ---date:20260522 for【XSLMES-20260522-A39】编辑页明细补齐默认空行与新增一致-----------
materialData.value = ensureMixingDetailRows(row?.materialList || [], DEFAULT_MIXING_MATERIAL_ROW_COUNT);
convertFactorApplying.value = true;
initMaterialBaseUnitWeights(materialData.value, sheetForm.convertFactor, true);
lastConvertFactor.value = normalizeMixingConvertFactor(sheetForm.convertFactor);
applyMaterialAccumWeight(materialData.value);
convertFactorApplying.value = false;
stepData.value = ensureMixingDetailRows(row?.stepList || [], DEFAULT_MIXING_STEP_ROW_COUNT);
downStepData.value = ensureMixingDetailRows(row?.downStepList || [], DEFAULT_MIXING_DOWN_STEP_ROW_COUNT);
//update-end---author:cursor ---date:20260522 for【XSLMES-20260522-A39】编辑页明细补齐默认空行与新增一致-----------
tcuData.value = ensureTcuDefaultRows(row?.tcuList || []);
await applyMixingSpecPageData(row, 'edit');
} else {
const userInfo = userStore.getUserInfo || {};
//update-begin---author:cursor ---date:20260522 for【XSLMES-20260522-A33】新增混炼示方制作日期默认当天-----------
@@ -1270,6 +1344,10 @@ async function handleSubmit() {
cursor: pointer;
}
:deep(.mixing-picker-input:not(.is-filled) input::placeholder) {
color: #bfbfbf;
}
:deep(.mixing-picker-input.is-filled) {
color: #262626;
}