feat:产品入库-关联任务单改成关联生产计划

main
黄伟杰 1 day ago
parent c853bdbe55
commit c9a9af0bf7

@ -843,8 +843,8 @@ export default {
relatedOrder: 'Related Order',
relatedRepairOrder: 'Related Repair Order',
relatedMaintainRecord: 'Related Maintenance Record',
relatedTask: 'Related Task',
taskOrder: 'Task Order',
relatedTask: 'Related Production Plan',
taskOrder: 'Production Plan',
palletCode: 'Pallet Code',
availablePallets: 'Available Pallets',
selectedPallets: 'Selected Pallets',
@ -864,7 +864,7 @@ export default {
packageItemCount: 'Package Item Count',
selectRelatedRepairOrder: 'Select Repair Order',
selectRelatedMaintainRecord: 'Select Maintenance Record',
selectTaskOrder: 'Select Task Order',
selectTaskOrder: 'Select Production Plan',
selectPalletCode: 'Select Pallet Code',
inputUnitType: 'Unit Input Type',
inputCount: 'Purchase Unit Quantity',
@ -887,7 +887,7 @@ export default {
placeholderOutboundPurpose: 'Please select outbound purpose',
placeholderRelatedRepairOrder: 'Please select related repair order',
placeholderRelatedMaintainRecord: 'Please select related maintenance record',
placeholderTaskOrder: 'Please select task order',
placeholderTaskOrder: 'Please select production plan',
placeholderPalletCode: 'Please select pallet code',
placeholderInputUnitType: 'Please select',
placeholderCode: 'Please enter code',
@ -895,7 +895,7 @@ export default {
validatorWarehouseRequired: 'Warehouse is required',
validatorAreaRequired: 'Please select area',
validatorProductRequired: 'Product is required',
validatorTaskRequired: 'Task order is required',
validatorTaskRequired: 'Production plan is required',
validatorPalletRequired: 'Pallet code is required',
validatorPackageCountRequired: 'Package count is required and must be greater than 0',
validatorOutboundPurposeRequired: 'Outbound purpose is required',
@ -4816,6 +4816,7 @@ export default {
tablePlanStartTimeColumn: 'Plan Start Time',
tablePlanEndTimeColumn: 'Plan End Time',
tableStatusColumn: 'Status',
tableRemarkColumn: 'Remark',
tableIsZjColumn: 'Inspected',
tableOperateColumn: 'Operate',

@ -843,8 +843,8 @@ export default {
relatedOrder: '关联单据',
relatedRepairOrder: '关联维修单',
relatedMaintainRecord: '关联保养记录',
relatedTask: '关联任务单',
taskOrder: '任务单',
relatedTask: '关联生产计划',
taskOrder: '生产计划',
palletCode: '托盘码',
availablePallets: '可选托盘',
selectedPallets: '已选托盘',
@ -864,7 +864,7 @@ export default {
packageItemCount: '每包个数',
selectRelatedRepairOrder: '选择维修单',
selectRelatedMaintainRecord: '选择保养记录',
selectTaskOrder: '选择任务单',
selectTaskOrder: '选择生产计划',
selectPalletCode: '选择托盘码',
inputUnitType: '单位输入方式',
inputCount: '采购单位数量',
@ -887,7 +887,7 @@ export default {
placeholderOutboundPurpose: '请选择出库用途',
placeholderRelatedRepairOrder: '请选择关联维修单',
placeholderRelatedMaintainRecord: '请选择关联保养记录',
placeholderTaskOrder: '请选择任务单',
placeholderTaskOrder: '请选择生产计划',
placeholderPalletCode: '请选择托盘码',
placeholderInputUnitType: '请选择',
placeholderCode: '请输入编码',
@ -895,7 +895,7 @@ export default {
validatorWarehouseRequired: '仓库不能为空',
validatorAreaRequired: '请选择库区',
validatorProductRequired: '产品不能为空',
validatorTaskRequired: '任务单不能为空',
validatorTaskRequired: '生产计划不能为空',
validatorPalletRequired: '托盘码不能为空',
validatorPackageCountRequired: '包数不能为空且必须大于0',
validatorOutboundPurposeRequired: '出库用途不能为空',
@ -4665,6 +4665,7 @@ export default {
tablePlanStartTimeColumn: '计划开始时间',
tablePlanEndTimeColumn: '计划结束时间',
tableStatusColumn: '状态',
tableRemarkColumn: '备注',
tableIsZjColumn: '是否检验',
tableOperateColumn: '操作',

@ -316,14 +316,31 @@
<div class="task-select-dialog">
<div class="task-select-dialog__section-title">{{ t('ErpStock.Item.selectTaskOrder') }}</div>
<el-form :model="taskQueryParams" :inline="true" class="-mb-15px">
<el-form-item :label="t('ProductionPlan.Task.searchCodeLabel')">
<el-form-item :label="t('ProductionPlan.Plan.searchCodeLabel')">
<el-input
v-model="taskQueryParams.code"
clearable
:placeholder="t('ProductionPlan.Task.searchCodePlaceholder')"
:placeholder="t('ProductionPlan.Plan.searchCodePlaceholder')"
@keyup.enter="handleTaskDialogQuery"
/>
</el-form-item>
<el-form-item :label="t('ProductionPlan.Plan.tableStatusColumn')">
<el-select
v-model="taskQueryParams.status"
clearable
filterable
:placeholder="t('common.selectText')"
class="!w-160px"
@change="handleTaskDialogQuery"
>
<el-option
v-for="item in planStatusOptions"
:key="item.value"
:label="item.label"
:value="String(item.value)"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleTaskDialogQuery">
<Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}
@ -343,15 +360,18 @@
<el-radio v-model="selectedTaskId" :label="row.id">&nbsp;</el-radio>
</template>
</el-table-column>
<el-table-column :label="t('ProductionPlan.Task.tableCodeColumn')" prop="code" min-width="160" />
<el-table-column :label="t('ProductionPlan.Task.tableOrderDateColumn')" prop="orderDate" :formatter="dateFormatter2" min-width="120" />
<el-table-column :label="t('ProductionPlan.Task.tableDeliveryDateColumn')" prop="deliveryDate" :formatter="dateFormatter2" min-width="120" />
<el-table-column :label="t('ProductionPlan.Task.tableStatusColumn')" prop="status" min-width="100">
<el-table-column :label="t('ProductionPlan.Plan.tableCodeColumn')" prop="code" min-width="160" />
<el-table-column :label="t('ProductionPlan.Plan.tableTaskCodeColumn')" prop="taskCode" min-width="140" />
<el-table-column :label="t('ProductionPlan.Plan.tableProductColumn')" prop="productName" min-width="160" />
<el-table-column :label="t('ProductionPlan.Plan.tablePlanNumberColumn')" prop="planNumber" min-width="100" />
<el-table-column :label="t('ProductionPlan.Plan.tableStatusColumn')" prop="status" min-width="100">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.MES_TASK_STATUS" :value="row.status" />
<dict-tag :type="DICT_TYPE.MES_PLAN_STATUS" :value="row.status" />
</template>
</el-table-column>
<el-table-column :label="t('ProductionPlan.Task.tableRemarkColumn')" prop="remark" min-width="160" />
<el-table-column :label="t('ProductionPlan.Plan.tablePlanStartTimeColumn')" prop="planStartTime" :formatter="dateFormatter2" min-width="140" />
<el-table-column :label="t('ProductionPlan.Plan.tablePlanEndTimeColumn')" prop="planEndTime" :formatter="dateFormatter2" min-width="140" />
<el-table-column :label="t('ProductionPlan.Plan.tableRemarkColumn')" prop="remark" min-width="160" />
</el-table>
<div class="product-dialog-pagination">
<Pagination
@ -368,7 +388,7 @@
row-key="productId"
:stripe="true"
:show-overflow-tooltip="true"
empty-text="请先选择任务单"
empty-text="请先选择生产计划"
@row-click="handleTaskProductDialogRowClick"
>
<el-table-column width="55" align="center">
@ -557,12 +577,12 @@ import { ProductApi, ProductVO } from '@/api/erp/product/product'
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
import { WarehouseAreaApi, WarehouseAreaVO } from '@/api/erp/stock/warehousearea'
import { StockApi } from '@/api/erp/stock/stock'
import { TaskApi, TaskVO } from '@/api/mes/task'
import { PlanApi, PlanVO } from '@/api/mes/plan'
import { PalletApi, PalletVO } from '@/api/erp/stock/pallet'
import { SupplierApi } from '@/api/erp/purchase/supplier'
import PalletForm from '../../pallet/PalletForm.vue'
import SupplierForm from '../../../purchase/supplier/SupplierForm.vue'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
import { dateFormatter2 } from '@/utils/formatTime'
import { erpPriceMultiply } from '@/utils'
@ -646,12 +666,13 @@ const supplierQueryParams = reactive({
const taskDialogVisible = ref(false)
const taskDialogLoading = ref(false)
const taskSchemeLoading = ref(false)
const taskDialogList = ref<TaskVO[]>([])
const taskDialogList = ref<PlanVO[]>([])
const taskDialogTotal = ref(0)
const taskQueryParams = reactive({
pageNo: 1,
pageSize: 10,
code: undefined
code: undefined,
status: '1'
})
const selectedTaskId = ref<number>()
const selectedTaskProductId = ref<number>()
@ -678,6 +699,7 @@ const palletFormRef = ref()
const palletStatusOptions = computed(() =>
getIntDictOptions(DICT_TYPE.STORAGE_PALLET_STATUS).filter((dict) => Number(dict.value) !== 3)
)
const planStatusOptions = computed(() => getStrDictOptions(DICT_TYPE.MES_PLAN_STATUS))
const availablePalletList = computed(() => {
const selectedIds = new Set(selectedPalletRows.value.map((item) => item.id))
return palletDialogList.value.filter((item) => !selectedIds.has(item.id))
@ -1090,10 +1112,11 @@ const openTaskSelectDialog = async (row: any) => {
taskProductDialogList.value = getTaskProductOptions(row)
taskQueryParams.pageNo = 1
taskQueryParams.code = undefined
taskQueryParams.status = '1'
taskDialogVisible.value = true
await getTaskDialogList()
if (row.taskId) {
await loadTaskProductDialogList({ id: row.taskId, code: row.taskCode } as TaskVO)
await loadTaskProductDialogList({ id: row.taskId, code: row.taskCode, productId: row.productId, productName: row.productName } as PlanVO)
}
}
@ -1105,7 +1128,10 @@ const handleTaskInputClick = (row: any) => {
const getTaskDialogList = async () => {
taskDialogLoading.value = true
try {
const data = await TaskApi.getTaskPage(taskQueryParams)
const data = await PlanApi.getPlanPage({
...taskQueryParams,
status: taskQueryParams.status || undefined
})
taskDialogList.value = data?.list || []
taskDialogTotal.value = data?.total || 0
} finally {
@ -1122,7 +1148,7 @@ const handleTaskDialogQuery = () => {
getTaskDialogList()
}
const handleTaskDialogRowClick = async (row: TaskVO) => {
const handleTaskDialogRowClick = async (row: PlanVO) => {
selectedTaskId.value = row.id
selectedTaskProductId.value = undefined
await loadTaskProductDialogList(row)
@ -1131,7 +1157,7 @@ const handleTaskDialogRowClick = async (row: TaskVO) => {
const confirmTaskSelect = async () => {
if (props.disabled) return
const task = taskDialogList.value.find((item) => item.id === selectedTaskId.value)
|| ({ id: selectedTaskData.value?.taskId, code: selectedTaskData.value?.taskName } as TaskVO)
|| ({ id: selectedTaskData.value?.taskId, code: selectedTaskData.value?.taskName } as PlanVO)
const product = taskProductDialogList.value.find((item) => item.productId === selectedTaskProductId.value)
const data = selectedTaskData.value
if (!task || !product || !data || !currentSelectRow.value) return
@ -1140,12 +1166,36 @@ const confirmTaskSelect = async () => {
taskDialogVisible.value = false
}
const loadTaskProductDialogList = async (task: TaskVO) => {
const loadTaskProductDialogList = async (task: PlanVO) => {
taskSchemeLoading.value = true
try {
const data = await TaskApi.getTaskDefaultPackagingSchemes(task.id)
const productId = task.productId ?? currentSelectRow.value?.productId
const product = productId ? await ProductApi.getProduct(productId) : undefined
const productOption = product
? {
...product,
productId: product.id,
productCode: product.barCode,
productName: product.name,
taskDetailIds: task.taskDetailId
}
: {
productId: task.productId,
productCode: undefined,
productName: task.productName,
taskDetailIds: task.taskDetailId,
packagingSchemes: []
}
const data = {
taskId: task.id,
taskName: task.code,
products: productOption.productId ? [productOption] : []
}
selectedTaskData.value = data
taskProductDialogList.value = Array.isArray(data?.products) ? data.products : []
taskProductDialogList.value = data.products
if (data.products.length === 1) {
selectedTaskProductId.value = data.products[0].productId
}
} finally {
taskSchemeLoading.value = false
}
@ -1155,7 +1205,7 @@ const handleTaskProductDialogRowClick = (row: any) => {
selectedTaskProductId.value = row.productId
}
const fillRowByTask = (row: any, task: TaskVO, data: any) => {
const fillRowByTask = (row: any, task: PlanVO, data: any) => {
const products = Array.isArray(data?.products) ? data.products : []
row.relateTask = true
row.relatedTask = undefined

Loading…
Cancel
Save