diff --git a/src/views/mes/wm/itemreceipt/index.vue b/src/views/mes/wm/itemreceipt/index.vue
index bf8810485..d792c7ecb 100644
--- a/src/views/mes/wm/itemreceipt/index.vue
+++ b/src/views/mes/wm/itemreceipt/index.vue
@@ -213,10 +213,6 @@ const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
-
-
-
-
/** 取消按钮操作 */
const handleCancel = async (id: number) => {
try {
diff --git a/src/views/mes/wm/returnissue/ReturnIssueForm.vue b/src/views/mes/wm/returnissue/ReturnIssueForm.vue
index f2dca64c7..06d0af6a5 100644
--- a/src/views/mes/wm/returnissue/ReturnIssueForm.vue
+++ b/src/views/mes/wm/returnissue/ReturnIssueForm.vue
@@ -89,13 +89,24 @@
-
- 确 定
+
+ 保 存
+
+
+ 提 交
入库上架
- 取 消
+
+ 执行退料
+
+ 关 闭
@@ -104,22 +115,41 @@
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { WmReturnIssueApi, WmReturnIssueVO } from '@/api/mes/wm/returnissue'
import { AutoCodeRecordApi } from '@/api/mes/md/autocode/record'
-import { MesAutoCodeRuleCode } from '@/views/mes/utils/constants'
+import { MesAutoCodeRuleCode, MesWmReturnIssueStatusEnum } from '@/views/mes/utils/constants'
import ProWorkOrderSelect from '@/views/mes/pro/workorder/components/ProWorkOrderSelect.vue'
import MdWorkstationSelect from '@/views/mes/md/workstation/components/MdWorkstationSelect.vue'
import ReturnIssueLineList from './ReturnIssueLineList.vue'
defineOptions({ name: 'ReturnIssueForm' })
+const emit = defineEmits(['success'])
const message = useMessage() // 消息弹窗
const dialogVisible = ref(false) // 弹窗的是否展示
const formLoading = ref(false) // 表单的加载中
-const formType = ref('create') // 表单的类型:create / update / stock / detail
+const formType = ref('create') // 表单的类型:create / update / submit / stock / finish / detail
+const isEditable = computed(() => ['create', 'update', 'submit'].includes(formType.value)) // 是否为编辑模式
+const isStock = computed(() => formType.value === 'stock') // 是否为入库上架模式
+const isFinish = computed(() => formType.value === 'finish') // 是否为执行退料模式
+const isHeaderReadonly = computed(() =>
+ ['stock', 'detail', 'finish'].includes(formType.value)
+) // 表头是否只读
+const dialogTitle = computed(() => {
+ const titles = {
+ create: '新增生产退料单',
+ update: '编辑生产退料单',
+ submit: '提交生产退料单',
+ stock: '入库上架',
+ finish: '执行退料',
+ detail: '生产退料单详情'
+ }
+ return titles[formType.value] || formType.value
+})
const formData = ref({
id: undefined as number | undefined,
code: undefined,
name: undefined,
+ status: undefined as number | undefined,
workOrderId: undefined,
workstationId: undefined,
type: undefined,
@@ -133,19 +163,7 @@ const formRules = reactive({
workOrderId: [{ required: true, message: '生产工单不能为空', trigger: 'change' }]
})
const formRef = ref() // 表单 Ref
-
-const isUpdate = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式
-const isStock = computed(() => formType.value === 'stock') // 是否为入库上架模式
-const isHeaderReadonly = computed(() => ['stock', 'detail'].includes(formType.value)) // 是否只读
-const dialogTitle = computed(() => {
- const titles = {
- create: '新增生产退料单',
- update: '编辑生产退料单',
- stock: '入库上架',
- detail: '生产退料单详情'
- }
- return titles[formType.value] || formType.value
-})
+const originalFormData = ref('') // 原始表单数据快照,用于脏检查
/** 生成退料单编号 */
const generateCode = async () => {
@@ -159,7 +177,7 @@ const open = async (type: string, id?: number) => {
dialogVisible.value = true
formType.value = type
resetForm()
- // 修改/入库上架/详情时,加载数据
+ // 修改/提交/上架/完成/详情时,加载数据
if (id) {
formLoading.value = true
try {
@@ -168,11 +186,11 @@ const open = async (type: string, id?: number) => {
formLoading.value = false
}
}
+ // 保存原始数据快照
+ originalFormData.value = JSON.stringify(formData.value)
}
-defineExpose({ open })
-/** 提交表单(create/update 模式) */
-const emit = defineEmits(['success'])
+/** 保存表单(create/update/submit 模式的保存按钮) */
const submitForm = async () => {
// 校验表单
await formRef.value.validate()
@@ -183,12 +201,16 @@ const submitForm = async () => {
if (formType.value === 'create') {
const res = await WmReturnIssueApi.createReturnIssue(data)
message.success('新增成功')
+ // 创建成功后,更新表单数据和状态为编辑模式
formData.value.id = res
+ formData.value.status = MesWmReturnIssueStatusEnum.PREPARE
formType.value = 'update'
} else {
await WmReturnIssueApi.updateReturnIssue(data)
message.success('修改成功')
}
+ // 更新快照
+ originalFormData.value = JSON.stringify(formData.value)
// 发送操作成功的事件
emit('success')
} finally {
@@ -196,6 +218,29 @@ const submitForm = async () => {
}
}
+/** 提交操作:表单修改过则先保存,再提交 */
+const handleSubmit = async () => {
+ // 校验表单
+ await formRef.value.validate()
+ try {
+ await message.confirm('确认提交该退料单?【提交后将不能修改】')
+ formLoading.value = true
+ // 1. 表单有修改时,先保存
+ if (JSON.stringify(formData.value) !== originalFormData.value) {
+ const data = formData.value as unknown as WmReturnIssueVO
+ await WmReturnIssueApi.updateReturnIssue(data)
+ }
+ // 2. 提交退料单
+ await WmReturnIssueApi.submitReturnIssue(formData.value.id!)
+ message.success('提交成功')
+ dialogVisible.value = false
+ emit('success')
+ } catch {
+ } finally {
+ formLoading.value = false
+ }
+}
+
/** 入库上架 */
const handleStock = async () => {
try {
@@ -210,12 +255,28 @@ const handleStock = async () => {
}
}
+/** 执行退料 */
+const handleFinish = async () => {
+ try {
+ await message.confirm('确认完成该退料单并执行入库吗?')
+ formLoading.value = true
+ await WmReturnIssueApi.finishReturnIssue(formData.value.id!)
+ message.success('完成成功')
+ dialogVisible.value = false
+ emit('success')
+ } catch {
+ } finally {
+ formLoading.value = false
+ }
+}
+
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
code: undefined,
name: undefined,
+ status: undefined,
workOrderId: undefined,
workstationId: undefined,
type: undefined,
@@ -224,4 +285,6 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
+
+defineExpose({ open })
diff --git a/src/views/mes/wm/returnissue/ReturnIssueLineList.vue b/src/views/mes/wm/returnissue/ReturnIssueLineList.vue
index 5713ad643..dcbdf0e9d 100644
--- a/src/views/mes/wm/returnissue/ReturnIssueLineList.vue
+++ b/src/views/mes/wm/returnissue/ReturnIssueLineList.vue
@@ -115,7 +115,7 @@
-
+
@@ -123,11 +123,6 @@
-
-
-
-
-
@@ -158,6 +153,7 @@ import { DICT_TYPE } from '@/utils/dict'
import { WmReturnIssueLineApi, WmReturnIssueLineVO } from '@/api/mes/wm/returnissue/line'
import { WmMaterialStockVO } from '@/api/mes/wm/materialstock'
import WmMaterialStockSelect from '@/views/mes/wm/materialstock/components/WmMaterialStockSelect.vue'
+import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
import ReturnIssueDetailList from './ReturnIssueDetailList.vue'
import ReturnIssueDetailForm from './ReturnIssueDetailForm.vue'
import { BarcodeDetail } from '@/views/mes/wm/barcode/components'
diff --git a/src/views/mes/wm/returnissue/index.vue b/src/views/mes/wm/returnissue/index.vue
index 2a8f7915c..7a5aa1729 100644
--- a/src/views/mes/wm/returnissue/index.vue
+++ b/src/views/mes/wm/returnissue/index.vue
@@ -98,7 +98,7 @@
-
+
编辑
-
- 提交
-
删除
+
+
+ 执行质检
+
执行上架
-
+
执行退料
-
+
取消
@@ -232,26 +234,6 @@ const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
-/** 提交按钮操作(草稿 → 待检验/待上架) */
-const handleSubmit = async (id: number) => {
- try {
- await message.confirm('确认提交该退料单吗?系统将根据是否需要质检自动流转状态。')
- await WmReturnIssueApi.submitReturnIssue(id)
- message.success('提交成功')
- await getList()
- } catch {}
-}
-
-/** 删除按钮操作 */
-const handleDelete = async (id: number) => {
- try {
- await message.delConfirm()
- await WmReturnIssueApi.deleteReturnIssue(id)
- message.success(t('common.delSuccess'))
- await getList()
- } catch {}
-}
-
/** 取消按钮操作 */
const handleCancel = async (id: number) => {
try {
@@ -262,12 +244,12 @@ const handleCancel = async (id: number) => {
} catch {}
}
-/** 完成按钮操作 */
-const handleFinish = async (id: number) => {
+/** 删除按钮操作 */
+const handleDelete = async (id: number) => {
try {
- await message.confirm('确认完成该退料单并执行入库吗?')
- await WmReturnIssueApi.finishReturnIssue(id)
- message.success('完成成功')
+ await message.delConfirm()
+ await WmReturnIssueApi.deleteReturnIssue(id)
+ message.success(t('common.delSuccess'))
await getList()
} catch {}
}
@@ -285,6 +267,7 @@ const handleExport = async () => {
}
}
+/** 初始化 */
onMounted(() => {
getList()
})