From 6738e8f5a78431e41fed28e6b795e70c2396070a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 03 九月 2026 17:27:23 +0800
Subject: [PATCH] refactor(mes): 优化工艺路线配置与工单表单功能
---
src/views/mes/process-design/route/modules/product-form.vue | 107 ++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 77 insertions(+), 30 deletions(-)
diff --git a/src/views/mes/process-design/route/modules/product-form.vue b/src/views/mes/process-design/route/modules/product-form.vue
index a3b0e5d..e20baa6 100644
--- a/src/views/mes/process-design/route/modules/product-form.vue
+++ b/src/views/mes/process-design/route/modules/product-form.vue
@@ -5,7 +5,7 @@
import { useVbenModal } from '@vben/common-ui';
-import { Divider, message } from 'ant-design-vue';
+import { message } from 'ant-design-vue';
import { useVbenForm } from '#/adapter/form';
import {
@@ -16,17 +16,17 @@
import { $t } from '#/locales';
import { useRouteProductFormSchema } from '../data';
-import ProductBomList from './product-bom-list.vue';
const emit = defineEmits(['success']);
const formData = ref<MesProRouteProductApi.RouteProduct>();
+const boundItemIds = ref<number[]>([]); // 宸茬粦瀹氭湰璺嚎鐨勪骇鍝佺墿鏂欑紪鍙凤紙鏂板澶氶�夋椂璺宠繃锛�
const getTitle = computed(() =>
formData.value?.id
? $t('ui.actionTitle.edit', ['宸ヨ壓璺嚎浜у搧'])
: $t('ui.actionTitle.create', ['宸ヨ壓璺嚎浜у搧']),
);
-/** MdItemSelect change 鍥炶皟锛氭妸鐗╂枡缂栫爜/鍚嶇О/瑙勬牸/鍗曚綅鍥炲~鍒� form */
+/** MdItemSelect 鍗曢�� change 鍥炶皟锛氭妸鐗╂枡缂栫爜/鍚嶇О/瑙勬牸/鍗曚綅鍥炲~鍒� form */
async function handleItemChange(item?: any) {
if (!item) {
return;
@@ -58,22 +58,62 @@
return;
}
modalApi.lock();
- // 鎻愪氦琛ㄥ崟
- const data =
- (await formApi.getValues()) as MesProRouteProductApi.RouteProduct;
+ const data = (await formApi.getValues()) as MesProRouteProductApi.RouteProduct & {
+ itemIds?: number[];
+ };
try {
+ // 缂栬緫妯″紡锛氭洿鏂板崟涓骇鍝�
if (formData.value?.id) {
await updateRouteProduct(data);
- // 鐢ㄦ渶鏂拌〃鍗曞�煎悓姝� formData锛岀‘淇濅骇鍝� BOM 瀛愯〃缁戝畾鐨� itemId 涓庤〃鍗曚竴鑷�
- formData.value = { ...formData.value, ...data };
- } else {
- // 鏂板鎴愬姛鍚庡垏鎹㈠埌缂栬緫妯″紡锛屾柟渚跨户缁淮鎶や骇鍝� BOM
- const id = await createRouteProduct(data);
- formData.value = { ...data, id };
- await formApi.setFieldValue('id', id);
+ await modalApi.close();
+ emit('success');
+ message.success($t('ui.actionMessage.operationSuccess'));
+ return;
}
- emit('success');
- message.success($t('ui.actionMessage.operationSuccess'));
+ // 鏂板妯″紡锛氬閫変骇鍝佷竴娆℃�х粦瀹氾紝璺宠繃宸插湪璺嚎涓殑浜у搧
+ const itemIds = Array.isArray(data.itemIds) ? data.itemIds : [];
+ if (itemIds.length === 0) {
+ message.warning('璇疯嚦灏戦�夋嫨涓�涓骇鍝�');
+ return;
+ }
+ let created = 0;
+ let skipped = 0;
+ const failedIds: number[] = [];
+ for (const itemId of itemIds) {
+ if (itemId == null) {
+ continue;
+ }
+ if (boundItemIds.value.includes(itemId)) {
+ skipped++;
+ continue;
+ }
+ try {
+ await createRouteProduct({
+ routeId: data.routeId,
+ itemId,
+ quantity: data.quantity,
+ productionTime: data.productionTime,
+ timeUnitType: data.timeUnitType,
+ remark: data.remark,
+ });
+ created++;
+ } catch {
+ failedIds.push(itemId);
+ }
+ }
+ if (skipped > 0) {
+ message.warning(`宸茶烦杩� ${skipped} 涓凡缁戝畾鐨勪骇鍝乣);
+ }
+ if (failedIds.length > 0) {
+ message.error(
+ `鏈� ${failedIds.length} 涓骇鍝佺粦瀹氬け璐ワ紙鍙兘宸茶鍏跺畠宸ヨ壓璺嚎鍗犵敤锛塦,
+ );
+ }
+ if (created > 0) {
+ message.success(`鎴愬姛缁戝畾 ${created} 涓骇鍝乣);
+ await modalApi.close();
+ emit('success');
+ }
} finally {
modalApi.unlock();
}
@@ -81,24 +121,42 @@
async onOpenChange(isOpen: boolean) {
if (!isOpen) {
formData.value = undefined;
+ boundItemIds.value = [];
return;
}
// 鍔犺浇鏁版嵁
const data = modalApi.getData<{
id?: number;
routeId: number;
+ boundItemIds?: number[];
}>();
if (!data) {
return;
}
+ boundItemIds.value = data.boundItemIds || [];
if (!data.id) {
- await formApi.setValues({ routeId: data.routeId });
+ // 鏂板妯″紡锛氬閫変骇鍝佺粦瀹�
+ formData.value = undefined;
+ await formApi.setState({
+ schema: useRouteProductFormSchema(handleItemChange, true),
+ });
+ await formApi.setValues({
+ routeId: data.routeId,
+ itemIds: [],
+ quantity: 1,
+ productionTime: 1,
+ timeUnitType: 'MINUTE',
+ remark: undefined,
+ });
return;
}
+ // 缂栬緫妯″紡锛氬姞杞藉崟涓骇鍝佸洖濉�
modalApi.lock();
try {
formData.value = await getRouteProduct(data.id);
- // 璁剧疆鍒� values
+ await formApi.setState({
+ schema: useRouteProductFormSchema(handleItemChange, false),
+ });
await formApi.setValues(formData.value);
} finally {
modalApi.unlock();
@@ -108,18 +166,7 @@
</script>
<template>
- <Modal :title="getTitle" class="w-3/5">
+ <Modal :title="getTitle" class="w-2/5">
<Form class="mx-4" />
- <!-- 缂栬緫妯″紡涓嬪睍绀轰骇鍝� BOM 瀛愯〃锛屾柊澧炴ā寮忎笅闅愯棌 -->
- <template v-if="formData?.id && formData?.itemId">
- <Divider class="!my-3" orientation="left">浜у搧 BOM 閰嶇疆</Divider>
- <div class="mx-4">
- <ProductBomList
- :route-id="formData.routeId!"
- :product-id="formData.itemId"
- :product-name="formData.itemName"
- />
- </div>
- </template>
</Modal>
-</template>
+</template>
\ No newline at end of file
--
Gitblit v1.9.3