diff --git a/src/views/mes/pro/route/RouteForm.vue b/src/views/mes/pro/route/RouteForm.vue index 8918da4d6..d6984d832 100644 --- a/src/views/mes/pro/route/RouteForm.vue +++ b/src/views/mes/pro/route/RouteForm.vue @@ -7,11 +7,12 @@ :rules="formRules" label-width="100px" v-loading="formLoading" + :disabled="isDetail" > - + @@ -20,12 +21,16 @@ - + - + - + - + @@ -77,14 +103,25 @@ import RouteProcessList from './RouteProcessList.vue' import RouteProductList from './RouteProductList.vue' defineOptions({ name: 'RouteForm' }) +const emit = defineEmits(['success']) -const { t } = useI18n() // 国际化 const message = useMessage() // 消息弹窗 - const dialogVisible = ref(false) // 弹窗的是否展示 -const dialogTitle = ref('') // 弹窗的标题 -const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 -const formType = ref('') // 表单的类型:create - 新增;update - 修改 +const formLoading = ref(false) // 表单的加载中 +const formType = ref('create') // 表单的类型:create / update / enable / detail +const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式 +const isEnable = computed(() => formType.value === 'enable') // 是否为启用模式 +const isDetail = computed(() => ['detail', 'enable'].includes(formType.value)) // 是否为详情模式(只读) +const isHeaderReadonly = computed(() => ['enable', 'detail'].includes(formType.value)) // 是否只读 +const dialogTitle = computed(() => { + const titles: Record = { + create: '新增工艺路线', + update: '编辑工艺路线', + enable: '启用工艺路线', + detail: '工艺路线详情' + } + return titles[formType.value] || formType.value +}) const activeTab = ref('process') // 子表当前激活的 Tab const formData = ref({ id: undefined, @@ -109,10 +146,10 @@ const generateCode = () => { /** 打开弹窗 */ const open = async (type: string, id?: number) => { dialogVisible.value = true - dialogTitle.value = type === 'create' ? '新增工艺路线' : '编辑工艺路线' formType.value = type activeTab.value = 'process' resetForm() + // 修改/启用/详情时,加载数据 if (id) { formLoading.value = true try { @@ -122,26 +159,40 @@ const open = async (type: string, id?: number) => { } } } -defineExpose({ open }) -/** 提交表单 */ -const emit = defineEmits(['success']) +/** 提交表单(create/update 模式) */ const submitForm = async () => { - if (!formRef) return - const valid = await formRef.value.validate() - if (!valid) return + await formRef.value.validate() formLoading.value = true try { const data = { ...formData.value } if (formType.value === 'create') { - await ProRouteApi.createRoute(data) - message.success(t('common.createSuccess')) + const res = await ProRouteApi.createRoute(data) + message.success('新增成功') + // 创建成功后,更新表单数据和状态为编辑模式 + formData.value.id = res + formData.value.status = CommonStatusEnum.DISABLE + formType.value = 'update' } else { await ProRouteApi.updateRoute(data) - message.success(t('common.updateSuccess')) + message.success('修改成功') } + emit('success') + } finally { + formLoading.value = false + } +} + +/** 确认启用 */ +const handleEnable = async () => { + try { + await message.confirm('确认启用"' + formData.value.name + '"工艺路线吗?启用前请确认工序和产品 BOM 配置完整。') + formLoading.value = true + await ProRouteApi.updateRouteStatus(formData.value.id!, CommonStatusEnum.ENABLE) + message.success('启用成功') dialogVisible.value = false emit('success') + } catch { } finally { formLoading.value = false } @@ -159,4 +210,6 @@ const resetForm = () => { } formRef.value?.resetFields() } + +defineExpose({ open }) diff --git a/src/views/mes/pro/route/RouteProcessList.vue b/src/views/mes/pro/route/RouteProcessList.vue index e8a905386..1d41dfe1a 100644 --- a/src/views/mes/pro/route/RouteProcessList.vue +++ b/src/views/mes/pro/route/RouteProcessList.vue @@ -2,7 +2,7 @@ - +