feat(mes): 迁移生产报工 antd/ele 并补齐任务选择器

pull/349/head
YunaiV 2026-05-26 22:27:27 +08:00
parent 5a1100aed4
commit d1e2202e59
4 changed files with 56 additions and 34 deletions

View File

@ -36,6 +36,7 @@ const formType = ref<FormType>('create');
const formData = ref<MesProFeedbackApi.Feedback>();
const userStore = useUserStore();
const subTabsName = ref('itemConsume');
const originalSnapshot = ref(''); // submit
const isEditable = computed(() =>
['create', 'submit', 'update'].includes(formType.value),
@ -100,6 +101,13 @@ function alignQuantity(data: MesProFeedbackApi.Feedback) {
}
}
/** 读取并按提交规则对齐后的表单数据,用于快照和保存 */
async function getAlignedData(): Promise<MesProFeedbackApi.Feedback> {
const data = (await formApi.getValues()) as MesProFeedbackApi.Feedback;
alignQuantity(data);
return data;
}
/** 保存create 后切换为 update 模式 */
async function handleSave() {
const { valid } = await formApi.validate();
@ -108,13 +116,12 @@ async function handleSave() {
}
modalApi.lock();
try {
const data = (await formApi.getValues()) as MesProFeedbackApi.Feedback;
alignQuantity(data);
const data = await getAlignedData();
if (formType.value === 'create') {
const id = await createFeedback(data);
data.id = id;
formData.value = {
...data,
id,
status: MesProFeedbackStatusEnum.PREPARE,
};
formType.value = 'update';
@ -126,13 +133,15 @@ async function handleSave() {
formData.value = { ...formData.value, ...data };
message.success($t('common.updateSuccess'));
}
// id submit
originalSnapshot.value = JSON.stringify(data);
emit('success');
} finally {
modalApi.unlock();
}
}
/** 提交:保存最新内容后调用提交接口 */
/** 提交:仅当表单较快照有变更时才先保存,再调用提交接口 */
async function handleSubmit() {
const { valid } = await formApi.validate();
if (!valid) {
@ -140,15 +149,13 @@ async function handleSubmit() {
}
modalApi.lock();
try {
const data = (await formApi.getValues()) as MesProFeedbackApi.Feedback;
alignQuantity(data);
let id = formData.value?.id;
if (formType.value === 'create' || !id) {
id = await createFeedback(data);
} else {
const data = await getAlignedData();
//
if (JSON.stringify(data) !== originalSnapshot.value) {
await updateFeedback(data);
originalSnapshot.value = JSON.stringify(data);
}
await submitFeedback(id!);
await submitFeedback(formData.value!.id!);
await modalApi.close();
emit('success');
message.success('报工单已提交');
@ -217,6 +224,7 @@ const [Modal, modalApi] = useVbenModal({
if (!isOpen) {
formData.value = undefined;
subTabsName.value = 'itemConsume';
originalSnapshot.value = '';
return;
}
//
@ -242,6 +250,8 @@ const [Modal, modalApi] = useVbenModal({
feedbackTime: Date.now(),
feedbackUserId: userStore.userInfo?.id,
});
// submit
originalSnapshot.value = JSON.stringify(await getAlignedData());
return;
}
modalApi.lock();
@ -253,6 +263,8 @@ const [Modal, modalApi] = useVbenModal({
);
// values
await formApi.setValues({ ...formData.value, checkFlag });
// submit
originalSnapshot.value = JSON.stringify(await getAlignedData());
} finally {
modalApi.unlock();
}

View File

@ -43,12 +43,11 @@ const hovering = ref(false); // 是否悬停
const selectedItem = ref<MesProTaskApi.Task>(); //
const displayLabel = computed(() => selectedItem.value?.code ?? ''); //
const showClear = computed( //
() =>
props.allowClear &&
!props.disabled &&
hovering.value &&
props.modelValue !== undefined,
const showClear = computed(() => //
props.allowClear &&
!props.disabled &&
hovering.value &&
props.modelValue !== undefined,
);
/** 根据任务编号回显选择器 */

View File

@ -42,6 +42,7 @@ const formType = ref<FormType>('create');
const formData = ref<MesProFeedbackApi.Feedback>();
const userStore = useUserStore();
const subTabsName = ref('itemConsume');
const originalSnapshot = ref(''); // submit
const isEditable = computed(() =>
['create', 'submit', 'update'].includes(formType.value),
@ -106,6 +107,13 @@ function alignQuantity(data: MesProFeedbackApi.Feedback) {
}
}
/** 读取并按提交规则对齐后的表单数据,用于快照和保存 */
async function getAlignedData(): Promise<MesProFeedbackApi.Feedback> {
const data = (await formApi.getValues()) as MesProFeedbackApi.Feedback;
alignQuantity(data);
return data;
}
/** 保存create 后切换为 update 模式 */
async function handleSave() {
const { valid } = await formApi.validate();
@ -114,13 +122,12 @@ async function handleSave() {
}
modalApi.lock();
try {
const data = (await formApi.getValues()) as MesProFeedbackApi.Feedback;
alignQuantity(data);
const data = await getAlignedData();
if (formType.value === 'create') {
const id = await createFeedback(data);
data.id = id;
formData.value = {
...data,
id,
status: MesProFeedbackStatusEnum.PREPARE,
};
formType.value = 'update';
@ -132,13 +139,15 @@ async function handleSave() {
formData.value = { ...formData.value, ...data };
ElMessage.success($t('common.updateSuccess'));
}
// id submit
originalSnapshot.value = JSON.stringify(data);
emit('success');
} finally {
modalApi.unlock();
}
}
/** 提交:保存最新内容后调用提交接口 */
/** 提交:仅当表单较快照有变更时才先保存,再调用提交接口 */
async function handleSubmit() {
const { valid } = await formApi.validate();
if (!valid) {
@ -146,15 +155,13 @@ async function handleSubmit() {
}
modalApi.lock();
try {
const data = (await formApi.getValues()) as MesProFeedbackApi.Feedback;
alignQuantity(data);
let id = formData.value?.id;
if (formType.value === 'create' || !id) {
id = await createFeedback(data);
} else {
const data = await getAlignedData();
//
if (JSON.stringify(data) !== originalSnapshot.value) {
await updateFeedback(data);
originalSnapshot.value = JSON.stringify(data);
}
await submitFeedback(id!);
await submitFeedback(formData.value!.id!);
await modalApi.close();
emit('success');
ElMessage.success('报工单已提交');
@ -225,6 +232,7 @@ const [Modal, modalApi] = useVbenModal({
if (!isOpen) {
formData.value = undefined;
subTabsName.value = 'itemConsume';
originalSnapshot.value = '';
return;
}
//
@ -250,6 +258,8 @@ const [Modal, modalApi] = useVbenModal({
feedbackTime: Date.now(),
feedbackUserId: userStore.userInfo?.id,
});
// submit
originalSnapshot.value = JSON.stringify(await getAlignedData());
return;
}
modalApi.lock();
@ -261,6 +271,8 @@ const [Modal, modalApi] = useVbenModal({
);
// values
await formApi.setValues({ ...formData.value, checkFlag });
// submit
originalSnapshot.value = JSON.stringify(await getAlignedData());
} finally {
modalApi.unlock();
}

View File

@ -43,12 +43,11 @@ const hovering = ref(false); // 是否悬停
const selectedItem = ref<MesProTaskApi.Task>(); //
const displayLabel = computed(() => selectedItem.value?.code ?? ''); //
const showClear = computed( //
() =>
props.clearable &&
!props.disabled &&
hovering.value &&
props.modelValue !== undefined,
const showClear = computed(() => //
props.clearable &&
!props.disabled &&
hovering.value &&
props.modelValue !== undefined,
);
/** 根据任务编号回显选择器 */