|
|
|
|
@ -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"> </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
|
|
|
|
|
|