feat(mes): 优化入库单表单逻辑和状态管理

调整表单字段和状态管理,简化逻辑处理,确保在创建和编辑模式下正确传递数据。增强了用户体验,提升了代码可读性和维护性。
pull/871/MERGE
YunaiV 2026-03-29 18:24:08 +08:00
parent 63b212c514
commit 43e80f868a
4 changed files with 34 additions and 40 deletions

View File

@ -55,15 +55,13 @@ const props = defineProps<{
const emit = defineEmits(['success'])
const { t } = useI18n() //
const message = useMessage() //
const { t } = useI18n()
const message = useMessage()
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) //
const formType = ref('') // 表单的类型create / update
const currentLineId = ref<number>() // ID
const formRef = ref() // Ref
const formData = ref({
id: undefined as number | undefined,
lineId: undefined as number | undefined,
@ -81,14 +79,15 @@ const formRules = reactive({
areaId: [{ required: true, message: '库位不能为空', trigger: 'change' }],
quantity: [{ required: true, message: '数量不能为空', trigger: 'blur' }]
})
const formRef = ref() // Ref
/** 打开弹窗 */
const open = async (type: string, lineId: number, itemId?: number, detailId?: number) => {
dialogVisible.value = true
dialogTitle.value = type === 'create' ? '添加上架明细' : '编辑上架明细'
formType.value = type
currentLineId.value = lineId
resetForm()
formData.value.lineId = lineId
//
if (detailId) {
formLoading.value = true
@ -101,7 +100,6 @@ const open = async (type: string, lineId: number, itemId?: number, detailId?: nu
formData.value.itemId = itemId
}
}
defineExpose({ open })
/** 提交表单 */
const submitForm = async () => {
@ -112,8 +110,7 @@ const submitForm = async () => {
try {
const data = {
...formData.value,
receiptId: props.receiptId,
lineId: currentLineId.value
receiptId: props.receiptId
} as unknown as WmItemReceiptDetailVO
if (formType.value === 'create') {
await WmItemReceiptDetailApi.createItemReceiptDetail(data)
@ -124,7 +121,7 @@ const submitForm = async () => {
}
dialogVisible.value = false
//
emit('success', currentLineId.value)
emit('success', formData.value.lineId)
} finally {
formLoading.value = false
}
@ -144,4 +141,6 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
defineExpose({ open })
</script>

View File

@ -39,12 +39,13 @@ const props = defineProps<{
const emit = defineEmits(['edit-detail'])
const { t } = useI18n() //
const message = useMessage() //
const { t } = useI18n()
const message = useMessage()
const isStock = computed(() => props.formType === 'stock') //
const loading = ref(false) //
const list = ref<WmItemReceiptDetailVO[]>([]) //
const isStock = computed(() => props.formType === 'stock') //
/** 查询明细列表 */
const getList = async () => {
@ -55,7 +56,6 @@ const getList = async () => {
loading.value = false
}
}
defineExpose({ getList })
/** 删除上架明细 */
const handleDelete = async (detailId: number) => {
@ -67,8 +67,8 @@ const handleDelete = async (detailId: number) => {
} catch {}
}
/** 初始化:延迟加载,展开时才触发 */
onMounted(() => {
getList()
})
defineExpose({ getList })
</script>

View File

@ -107,12 +107,7 @@
<el-button v-if="isStock" @click="handleStock" type="primary" :disabled="formLoading">
执行上架
</el-button>
<el-button
v-if="isFinish"
@click="handleFinish"
type="success"
:disabled="formLoading"
>
<el-button v-if="isFinish" @click="handleFinish" type="success" :disabled="formLoading">
执行入库
</el-button>
<el-button @click="dialogVisible = false"> </el-button>
@ -133,12 +128,27 @@ import {
} from '@/views/mes/utils/constants'
defineOptions({ name: 'ItemReceiptForm' })
const emit = defineEmits(['success'])
const message = useMessage() //
const dialogVisible = ref(false) //
const formLoading = ref(false) //
const formType = ref<string>('create') // 表单的类型create / update / stock / finish / detail
const isEditable = computed(() => ['create', 'update'].includes(formType.value)) //
const isStock = computed(() => formType.value === 'stock') //
const isFinish = computed(() => formType.value === 'finish') //
const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) //
const isHeaderReadonly = computed(() => ['stock', 'detail', 'finish'].includes(formType.value)) //
const dialogTitle = computed(() => {
const titles = {
create: '新增采购入库单',
update: '编辑采购入库单',
stock: '执行上架',
finish: '执行入库',
detail: '采购入库单详情'
}
return titles[formType.value] || formType.value
})
const formData = ref({
id: undefined as number | undefined,
code: undefined,
@ -157,21 +167,6 @@ const formRules = reactive({
vendorId: [{ required: true, message: '供应商不能为空', trigger: 'change' }]
})
const formRef = ref() // Ref
const isEditable = computed(() => ['create', 'update'].includes(formType.value)) //
const isStock = computed(() => formType.value === 'stock') //
const isFinish = computed(() => formType.value === 'finish') //
const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) //
const isHeaderReadonly = computed(() => ['stock', 'detail', 'finish'].includes(formType.value)) //
const dialogTitle = computed(() => {
const titles = {
create: '新增采购入库单',
update: '编辑采购入库单',
stock: '执行上架',
finish: '执行入库',
detail: '采购入库单详情'
}
return titles[formType.value] || formType.value
})
const originalFormData = ref<string>('') //
/** 生成入库单编号 */
@ -181,7 +176,7 @@ const generateCode = async () => {
)
}
/** 到货通知单变化时,自动填充供应商 */
/** 到货通知单变化时,自动填充供应商和采购订单号 */
const handleNoticeChange = (notice: any) => {
if (notice) {
formData.value.vendorId = notice.vendorId
@ -206,10 +201,8 @@ const open = async (type: string, id?: number) => {
//
originalFormData.value = JSON.stringify(formData.value)
}
defineExpose({ open })
/** 提交表单create/update 模式) */
const emit = defineEmits(['success'])
const submitForm = async () => {
//
await formRef.value.validate()
@ -305,4 +298,6 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
defineExpose({ open })
</script>

View File

@ -311,7 +311,7 @@ const setDetailListRef = (lineId: number, el: any) => {
}
// ==================== LineList ====================
const detailFormRef = ref()
const detailFormRef = ref() // Ref
/** 上架:直接打开明细创建表单 */
const handleStock = (lineId: number) => {