✨ feat(mes): 优化杂项出库单表单,移除提交功能并调整字段逻辑
移除杂项出库单表单中的提交按钮,简化用户操作流程。调整表单字段逻辑,确保在编辑和查看模式下的字段状态一致,提升用户体验。pull/871/MERGE
parent
e954777753
commit
6e58d4d73f
|
|
@ -104,10 +104,7 @@
|
||||||
保 存
|
保 存
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-if="
|
v-if="isEditable && formData.id && formData.status === MesWmMiscIssueStatusEnum.PREPARE"
|
||||||
(isEditable && formData.id && formData.status === MesWmMiscIssueStatusEnum.PREPARE) ||
|
|
||||||
isSubmit
|
|
||||||
"
|
|
||||||
@click="handleSubmit"
|
@click="handleSubmit"
|
||||||
type="warning"
|
type="warning"
|
||||||
:disabled="formLoading"
|
:disabled="formLoading"
|
||||||
|
|
@ -135,17 +132,15 @@ const emit = defineEmits(['success'])
|
||||||
const message = useMessage() // 消息弹窗
|
const message = useMessage() // 消息弹窗
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
const formLoading = ref(false) // 表单的加载中
|
const formLoading = ref(false) // 表单的加载中
|
||||||
const formType = ref<string>('create') // 表单的类型:create / update / submit / finish / detail
|
const formType = ref<string>('create') // 表单的类型:create / update / finish / detail
|
||||||
const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式
|
const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式
|
||||||
const isSubmit = computed(() => formType.value === 'submit') // 是否为提交模式
|
|
||||||
const isFinish = computed(() => formType.value === 'finish') // 是否为执行出库模式
|
const isFinish = computed(() => formType.value === 'finish') // 是否为执行出库模式
|
||||||
const isDetail = computed(() => ['detail', 'submit', 'finish'].includes(formType.value)) // 是否为详情模式
|
const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) // 是否为详情模式
|
||||||
const isHeaderReadonly = computed(() => ['submit', 'detail', 'finish'].includes(formType.value)) // 是否只读
|
const isHeaderReadonly = computed(() => ['detail', 'finish'].includes(formType.value)) // 是否只读
|
||||||
const dialogTitle = computed(() => {
|
const dialogTitle = computed(() => {
|
||||||
const titles = {
|
const titles = {
|
||||||
create: '新增杂项出库单',
|
create: '新增杂项出库单',
|
||||||
update: '编辑杂项出库单',
|
update: '编辑杂项出库单',
|
||||||
submit: '提交杂项出库单',
|
|
||||||
finish: '执行出库',
|
finish: '执行出库',
|
||||||
detail: '杂项出库单详情'
|
detail: '杂项出库单详情'
|
||||||
}
|
}
|
||||||
|
|
@ -183,7 +178,7 @@ const open = async (type: string, id?: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
formType.value = type
|
formType.value = type
|
||||||
resetForm()
|
resetForm()
|
||||||
// 修改/提交/执行出库/详情时,加载数据
|
// 修改/执行出库/详情时,加载数据
|
||||||
if (id) {
|
if (id) {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,13 @@
|
||||||
v-loading="formLoading"
|
v-loading="formLoading"
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
<!-- TODO @AI:WmMaterialStockSelect,/Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/mes/wm/productsales -->
|
|
||||||
<!-- TODO @AI:库存物资选择;选择后,物料、批次号、仓库位置就自动选上;他们都是 disabled disabled; -->
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="物料" prop="itemId">
|
<el-form-item label="库存物资" prop="materialStockId">
|
||||||
<MdItemSelect v-model="formData.itemId" placeholder="请选择物料" class="!w-1/1" />
|
<WmMaterialStockSelect
|
||||||
|
v-model="formData.materialStockId"
|
||||||
|
:item-id="formData.itemId"
|
||||||
|
@change="handleStockChange"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -68,14 +70,14 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="批次号" prop="batchCode">
|
<el-form-item label="批次号" prop="batchCode">
|
||||||
<el-input v-model="formData.batchCode" placeholder="请输入批次号" />
|
<el-input v-model="formData.batchCode" placeholder="批次号" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="仓库" prop="warehouseId">
|
<el-form-item label="仓库" prop="warehouseId">
|
||||||
<WmWarehouseSelect v-model="formData.warehouseId" @change="handleWarehouseChange" />
|
<WmWarehouseSelect v-model="formData.warehouseId" disabled />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -83,13 +85,17 @@
|
||||||
<WmWarehouseLocationSelect
|
<WmWarehouseLocationSelect
|
||||||
v-model="formData.locationId"
|
v-model="formData.locationId"
|
||||||
:warehouse-id="formData.warehouseId"
|
:warehouse-id="formData.warehouseId"
|
||||||
@change="handleLocationChange"
|
disabled
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="库位" prop="areaId">
|
<el-form-item label="库位" prop="areaId">
|
||||||
<WmWarehouseAreaSelect v-model="formData.areaId" :location-id="formData.locationId" />
|
<WmWarehouseAreaSelect
|
||||||
|
v-model="formData.areaId"
|
||||||
|
:location-id="formData.locationId"
|
||||||
|
disabled
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
@ -110,7 +116,8 @@
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { WmMiscIssueLineApi, WmMiscIssueLineVO } from '@/api/mes/wm/miscissue/line'
|
import { WmMiscIssueLineApi, WmMiscIssueLineVO } from '@/api/mes/wm/miscissue/line'
|
||||||
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
|
import { WmMaterialStockVO } from '@/api/mes/wm/materialstock'
|
||||||
|
import WmMaterialStockSelect from '@/views/mes/wm/materialstock/components/WmMaterialStockSelect.vue'
|
||||||
import WmWarehouseSelect from '@/views/mes/wm/warehouse/components/WmWarehouseSelect.vue'
|
import WmWarehouseSelect from '@/views/mes/wm/warehouse/components/WmWarehouseSelect.vue'
|
||||||
import WmWarehouseLocationSelect from '@/views/mes/wm/warehouse/components/WmWarehouseLocationSelect.vue'
|
import WmWarehouseLocationSelect from '@/views/mes/wm/warehouse/components/WmWarehouseLocationSelect.vue'
|
||||||
import WmWarehouseAreaSelect from '@/views/mes/wm/warehouse/components/WmWarehouseAreaSelect.vue'
|
import WmWarehouseAreaSelect from '@/views/mes/wm/warehouse/components/WmWarehouseAreaSelect.vue'
|
||||||
|
|
@ -168,6 +175,7 @@ const lineFormType = ref('') // 行表单的类型
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
id: undefined,
|
id: undefined,
|
||||||
issueId: undefined as number | undefined,
|
issueId: undefined as number | undefined,
|
||||||
|
materialStockId: undefined as number | undefined,
|
||||||
itemId: undefined,
|
itemId: undefined,
|
||||||
quantity: undefined,
|
quantity: undefined,
|
||||||
batchCode: undefined,
|
batchCode: undefined,
|
||||||
|
|
@ -177,7 +185,7 @@ const formData = ref({
|
||||||
remark: undefined
|
remark: undefined
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
itemId: [{ required: true, message: '物料不能为空', trigger: 'change' }],
|
materialStockId: [{ required: true, message: '请选择库存物资', trigger: 'change' }],
|
||||||
quantity: [
|
quantity: [
|
||||||
{ required: true, message: '出库数量不能为空', trigger: 'blur' },
|
{ required: true, message: '出库数量不能为空', trigger: 'blur' },
|
||||||
{ type: 'number', min: 0.01, message: '出库数量必须大于等于0.01', trigger: 'blur' }
|
{ type: 'number', min: 0.01, message: '出库数量必须大于等于0.01', trigger: 'blur' }
|
||||||
|
|
@ -185,15 +193,21 @@ const formRules = reactive({
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
/** 仓库变化时,清空库区和库位 */
|
/** 库存物资选择变化时,自动回填物料、批次号、仓库位置 */
|
||||||
const handleWarehouseChange = () => {
|
const handleStockChange = (stock: WmMaterialStockVO | undefined) => {
|
||||||
formData.value.locationId = undefined
|
if (stock) {
|
||||||
formData.value.areaId = undefined
|
formData.value.itemId = stock.itemId
|
||||||
}
|
formData.value.batchCode = stock.batchCode
|
||||||
|
formData.value.warehouseId = stock.warehouseId
|
||||||
/** 库区变化时,清空库位 */
|
formData.value.locationId = stock.locationId
|
||||||
const handleLocationChange = () => {
|
formData.value.areaId = stock.areaId
|
||||||
formData.value.areaId = undefined
|
} else {
|
||||||
|
formData.value.itemId = undefined
|
||||||
|
formData.value.batchCode = undefined
|
||||||
|
formData.value.warehouseId = undefined
|
||||||
|
formData.value.locationId = undefined
|
||||||
|
formData.value.areaId = undefined
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 打开表单弹窗 */
|
/** 打开表单弹窗 */
|
||||||
|
|
@ -237,6 +251,7 @@ const resetForm = () => {
|
||||||
formData.value = {
|
formData.value = {
|
||||||
id: undefined,
|
id: undefined,
|
||||||
issueId: undefined,
|
issueId: undefined,
|
||||||
|
materialStockId: undefined,
|
||||||
itemId: undefined,
|
itemId: undefined,
|
||||||
quantity: undefined,
|
quantity: undefined,
|
||||||
batchCode: undefined,
|
batchCode: undefined,
|
||||||
|
|
|
||||||
|
|
@ -149,16 +149,6 @@
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- TODO @AI:提交,合并到“编辑”里。因为打开后,就能看到【提交】呀 -->
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="warning"
|
|
||||||
@click="openForm('submit', scope.row.id)"
|
|
||||||
v-hasPermi="['mes:wm-misc-issue:update']"
|
|
||||||
v-if="scope.row.status === MesWmMiscIssueStatusEnum.PREPARE"
|
|
||||||
>
|
|
||||||
提交
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="danger"
|
type="danger"
|
||||||
|
|
|
||||||
|
|
@ -108,8 +108,8 @@ const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
const formLoading = ref(false) // 表单的加载中
|
const formLoading = ref(false) // 表单的加载中
|
||||||
const formType = ref<string>('create') // 表单的类型:create / update / submit / stock / finish / detail
|
const formType = ref<string>('create') // 表单的类型:create / update / stock / finish / detail
|
||||||
const isEditable = computed(() => ['create', 'update', 'submit'].includes(formType.value)) // 是否为编辑模式
|
const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式
|
||||||
const isStock = computed(() => formType.value === 'stock') // 是否为拣货模式
|
const isStock = computed(() => formType.value === 'stock') // 是否为拣货模式
|
||||||
const isFinish = computed(() => formType.value === 'finish') // 是否为完成出库模式
|
const isFinish = computed(() => formType.value === 'finish') // 是否为完成出库模式
|
||||||
const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) // 是否为详情模式(表单禁用)
|
const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) // 是否为详情模式(表单禁用)
|
||||||
|
|
@ -120,7 +120,6 @@ const dialogTitle = computed(() => {
|
||||||
const titles = {
|
const titles = {
|
||||||
create: '新增领料出库单',
|
create: '新增领料出库单',
|
||||||
update: '编辑领料出库单',
|
update: '编辑领料出库单',
|
||||||
submit: '提交领料出库单',
|
|
||||||
stock: '执行拣货',
|
stock: '执行拣货',
|
||||||
finish: '完成领料出库',
|
finish: '完成领料出库',
|
||||||
detail: '领料出库单详情'
|
detail: '领料出库单详情'
|
||||||
|
|
@ -158,7 +157,7 @@ const open = async (type: string, id?: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
formType.value = type
|
formType.value = type
|
||||||
resetForm()
|
resetForm()
|
||||||
// 修改/提交/拣货/完成/详情时,加载数据
|
// 修改/拣货/完成/详情时,加载数据
|
||||||
if (id) {
|
if (id) {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
|
|
@ -171,7 +170,7 @@ const open = async (type: string, id?: number) => {
|
||||||
originalFormData.value = JSON.stringify(formData.value)
|
originalFormData.value = JSON.stringify(formData.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 提交表单(create/update/submit 模式的保存按钮) */
|
/** 保存表单(create/update 模式的保存按钮) */
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
// 校验表单
|
// 校验表单
|
||||||
await formRef.value.validate()
|
await formRef.value.validate()
|
||||||
|
|
|
||||||
|
|
@ -127,8 +127,8 @@ const message = useMessage() // 消息弹窗
|
||||||
|
|
||||||
const dialogVisible = ref(false) // 弹窗的是否展示
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
const formLoading = ref(false) // 表单的加载中
|
const formLoading = ref(false) // 表单的加载中
|
||||||
const formType = ref<string>('create') // 表单的类型:create / update / submit / stock / finish / detail
|
const formType = ref<string>('create') // 表单的类型:create / update / stock / finish / detail
|
||||||
const isEditable = computed(() => ['create', 'update', 'submit'].includes(formType.value)) // 是否为编辑模式
|
const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式
|
||||||
const isStock = computed(() => formType.value === 'stock') // 是否为入库上架模式
|
const isStock = computed(() => formType.value === 'stock') // 是否为入库上架模式
|
||||||
const isFinish = computed(() => formType.value === 'finish') // 是否为执行退料模式
|
const isFinish = computed(() => formType.value === 'finish') // 是否为执行退料模式
|
||||||
const isHeaderReadonly = computed(() =>
|
const isHeaderReadonly = computed(() =>
|
||||||
|
|
@ -138,7 +138,6 @@ const dialogTitle = computed(() => {
|
||||||
const titles = {
|
const titles = {
|
||||||
create: '新增生产退料单',
|
create: '新增生产退料单',
|
||||||
update: '编辑生产退料单',
|
update: '编辑生产退料单',
|
||||||
submit: '提交生产退料单',
|
|
||||||
stock: '入库上架',
|
stock: '入库上架',
|
||||||
finish: '执行退料',
|
finish: '执行退料',
|
||||||
detail: '生产退料单详情'
|
detail: '生产退料单详情'
|
||||||
|
|
@ -177,7 +176,7 @@ const open = async (type: string, id?: number) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
formType.value = type
|
formType.value = type
|
||||||
resetForm()
|
resetForm()
|
||||||
// 修改/提交/上架/完成/详情时,加载数据
|
// 修改/上架/完成/详情时,加载数据
|
||||||
if (id) {
|
if (id) {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
|
|
@ -190,7 +189,7 @@ const open = async (type: string, id?: number) => {
|
||||||
originalFormData.value = JSON.stringify(formData.value)
|
originalFormData.value = JSON.stringify(formData.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 保存表单(create/update/submit 模式的保存按钮) */
|
/** 保存表单(create/update 模式的保存按钮) */
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
// 校验表单
|
// 校验表单
|
||||||
await formRef.value.validate()
|
await formRef.value.validate()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue