feat(task): 添加质检标志字段及相关查询功能

在生产任务和工艺路线工序中新增质检标志字段 `checkFlag`,并更新相关查询逻辑以支持根据该字段进行过滤。此变更旨在增强任务管理的灵活性和准确性。
pull/871/MERGE
YunaiV 2026-04-08 18:01:06 +08:00
parent 5fa959662b
commit 52eb55107c
13 changed files with 59 additions and 19 deletions

View File

@ -33,6 +33,7 @@ export interface ProTaskVO {
finishDate: Date // 完成日期 finishDate: Date // 完成日期
cancelDate: Date // 取消日期 cancelDate: Date // 取消日期
status: number // 任务状态 status: number // 任务状态
checkFlag: boolean // 是否质检(派生自工艺路线工序)
remark: string // 备注 remark: string // 备注
} }

View File

@ -40,6 +40,15 @@
class="!w-220px" class="!w-220px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="英文名称">
<el-input
v-model="queryParams.englishName"
placeholder="请输入客户英文名称"
clearable
@keyup.enter="handleQuery"
class="!w-220px"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"> <el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索 <Icon icon="ep:search" class="mr-5px" /> 搜索
@ -93,6 +102,7 @@
</el-table-column> </el-table-column>
<el-table-column label="联系人" align="center" prop="contact1Name" width="100" /> <el-table-column label="联系人" align="center" prop="contact1Name" width="100" />
<el-table-column label="联系电话" align="center" prop="telephone" width="130" /> <el-table-column label="联系电话" align="center" prop="telephone" width="130" />
<el-table-column label="联系人-电话" align="center" prop="contact1Telephone" width="130" />
<el-table-column label="状态" align="center" prop="status" width="80"> <el-table-column label="状态" align="center" prop="status" width="80">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" /> <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
@ -185,6 +195,7 @@ const queryParams = reactive({
code: undefined as string | undefined, // code: undefined as string | undefined, //
name: undefined as string | undefined, // name: undefined as string | undefined, //
nickname: undefined as string | undefined, // nickname: undefined as string | undefined, //
englishName: undefined as string | undefined, //
status: CommonStatusEnum.ENABLE as number | undefined // status: CommonStatusEnum.ENABLE as number | undefined //
}) })
@ -237,6 +248,7 @@ const resetQuery = () => {
queryParams.code = undefined queryParams.code = undefined
queryParams.name = undefined queryParams.name = undefined
queryParams.nickname = undefined queryParams.nickname = undefined
queryParams.englishName = undefined
queryParams.status = CommonStatusEnum.ENABLE queryParams.status = CommonStatusEnum.ENABLE
handleQuery() handleQuery()
} }
@ -268,6 +280,7 @@ const open = async (selectedIds?: number[]) => {
queryParams.code = undefined queryParams.code = undefined
queryParams.name = undefined queryParams.name = undefined
queryParams.nickname = undefined queryParams.nickname = undefined
queryParams.englishName = undefined
queryParams.status = CommonStatusEnum.ENABLE queryParams.status = CommonStatusEnum.ENABLE
queryParams.pageNo = 1 queryParams.pageNo = 1
// //

View File

@ -289,7 +289,7 @@ const open = async (selectedIds?: number[]) => {
queryParams.code = undefined queryParams.code = undefined
queryParams.name = undefined queryParams.name = undefined
queryParams.itemTypeId = undefined queryParams.itemTypeId = undefined
queryParams.status = 0 queryParams.status = CommonStatusEnum.ENABLE
queryParams.pageNo = 1 queryParams.pageNo = 1
// + // +
typeTreeRef.value?.reset() typeTreeRef.value?.reset()

View File

@ -109,6 +109,11 @@
<el-table-column label="工作站编码" align="center" prop="workstationCode" width="140" /> <el-table-column label="工作站编码" align="center" prop="workstationCode" width="140" />
<el-table-column label="工作站名称" align="center" prop="workstationName" width="140" /> <el-table-column label="工作站名称" align="center" prop="workstationName" width="140" />
<el-table-column label="工序" align="center" prop="processName" width="120" /> <el-table-column label="工序" align="center" prop="processName" width="120" />
<el-table-column label="是否质检" align="center" prop="checkFlag" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.checkFlag" />
</template>
</el-table-column>
<el-table-column label="物料编码" align="center" prop="itemCode" width="140" /> <el-table-column label="物料编码" align="center" prop="itemCode" width="140" />
<el-table-column label="物料名称" align="center" prop="itemName" width="140" /> <el-table-column label="物料名称" align="center" prop="itemName" width="140" />
<el-table-column label="规格型号" align="center" prop="itemSpec" width="120" /> <el-table-column label="规格型号" align="center" prop="itemSpec" width="120" />

View File

@ -396,6 +396,12 @@ export const MesWmSalesNoticeStatusEnum = {
APPROVED: MesOrderStatusConstants.APPROVED APPROVED: MesOrderStatusConstants.APPROVED
} }
/** MES 仓库常量 */
export const MesWmWarehouseConstants = {
/** 虚拟线边仓编码关键字(对应后端 MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE */
WIP_VIRTUAL: 'WIP_VIRTUAL'
} as const
/** MES 装箱单状态枚举 */ /** MES 装箱单状态枚举 */
export const MesWmPackageStatusEnum = { export const MesWmPackageStatusEnum = {
PREPARE: MesOrderStatusConstants.DRAFT, PREPARE: MesOrderStatusConstants.DRAFT,

View File

@ -62,14 +62,14 @@
:warehouse-id="areaWarehouseId" :warehouse-id="areaWarehouseId"
@change="handleAreaLocationChange" @change="handleAreaLocationChange"
class="!w-1/1" class="!w-1/1"
placeholder="请选择库" placeholder="请选择库"
/> />
<WmWarehouseAreaSelect <WmWarehouseAreaSelect
v-model="formData.bizId" v-model="formData.bizId"
:warehouse-id="areaWarehouseId" :location-id="areaLocationId"
@change="handleBizSelect" @change="handleBizSelect"
class="!w-1/1" class="!w-1/1"
placeholder="请选择库" placeholder="请选择库"
/> />
</div> </div>
</el-form-item> </el-form-item>

View File

@ -7,7 +7,7 @@
itemId 按物料 ID 过滤库存可选透传给弹窗 itemId 按物料 ID 过滤库存可选透传给弹窗
batchId 按批次 ID 过滤库存可选透传给弹窗 batchId 按批次 ID 过滤库存可选透传给弹窗
warehouseId 按仓库 ID 过滤库存可选透传给弹窗 warehouseId 按仓库 ID 过滤库存可选透传给弹窗
excludeVirtual 是否排除虚拟线边仓库存默认 true virtualFilter 虚拟线边仓过滤模式'exclude' 排除虚拟仓默认'only' 只看虚拟仓'all' 不过滤
disabled 是否禁用 disabled 是否禁用
clearable 是否允许清空鼠标悬停时显示清除图标 clearable 是否允许清空鼠标悬停时显示清除图标
placeholder 占位文字 placeholder 占位文字
@ -52,7 +52,7 @@
:item-id="itemId" :item-id="itemId"
:batch-id="batchId" :batch-id="batchId"
:warehouse-id="warehouseId" :warehouse-id="warehouseId"
:exclude-virtual="excludeVirtual" :virtual-filter="virtualFilter"
@selected="handleSelected" @selected="handleSelected"
/> />
</template> </template>
@ -74,13 +74,13 @@ const props = withDefaults(
itemId?: number // ID itemId?: number // ID
batchId?: number // ID batchId?: number // ID
warehouseId?: number // ID warehouseId?: number // ID
excludeVirtual?: boolean // 线 true virtualFilter?: 'exclude' | 'only' | 'all' // 'exclude' 'only' 'all'
disabled?: boolean // disabled?: boolean //
clearable?: boolean // clearable?: boolean //
placeholder?: string // placeholder?: string //
}>(), }>(),
{ {
excludeVirtual: true, virtualFilter: 'exclude',
disabled: false, disabled: false,
clearable: true, clearable: true,
placeholder: '请选择库存' placeholder: '请选择库存'

View File

@ -6,7 +6,7 @@
itemId 按物料 ID 过滤库存可选 itemId 按物料 ID 过滤库存可选
batchId 按批次 ID 过滤库存可选 batchId 按批次 ID 过滤库存可选
warehouseId 按仓库 ID 过滤库存可选 warehouseId 按仓库 ID 过滤库存可选
excludeVirtual 是否排除虚拟线边仓库存默认 true virtualFilter 虚拟线边仓过滤模式'exclude' 排除虚拟仓默认'only' 只看虚拟仓'all' 不过滤
Events: Events:
selected(rows: WmMaterialStockVO[]) 确认选择后触发单选时数组长度为 1 selected(rows: WmMaterialStockVO[]) 确认选择后触发单选时数组长度为 1
Expose: Expose:
@ -159,6 +159,7 @@ import MdVendorSelect from '@/views/mes/md/vendor/components/MdVendorSelect.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'
import { MesWmWarehouseConstants } from '@/views/mes/utils/constants'
defineOptions({ name: 'WmMaterialStockSelectDialog' }) defineOptions({ name: 'WmMaterialStockSelectDialog' })
@ -168,11 +169,11 @@ const props = withDefaults(
itemId?: number // ID itemId?: number // ID
batchId?: number // ID batchId?: number // ID
warehouseId?: number // ID warehouseId?: number // ID
excludeVirtual?: boolean // 线 true virtualFilter?: 'exclude' | 'only' | 'all' // 'exclude' 'only' 'all'
}>(), }>(),
{ {
multiple: true, multiple: true,
excludeVirtual: true virtualFilter: 'exclude'
} }
) )
@ -265,10 +266,16 @@ const getList = async () => {
loading.value = true loading.value = true
try { try {
const data = await WmMaterialStockApi.getMaterialStockPage(queryParams) const data = await WmMaterialStockApi.getMaterialStockPage(queryParams)
// 线 warehouseCode WIP_VIRTUAL // 线
if (props.excludeVirtual) { if (props.virtualFilter === 'only') {
//
list.value = data.list.filter((row: WmMaterialStockVO) =>
row.warehouseCode?.includes(MesWmWarehouseConstants.WIP_VIRTUAL)
)
} else if (props.virtualFilter === 'exclude') {
//
list.value = data.list.filter( list.value = data.list.filter(
(row: WmMaterialStockVO) => !row.warehouseCode?.includes('WIP_VIRTUAL') (row: WmMaterialStockVO) => !row.warehouseCode?.includes(MesWmWarehouseConstants.WIP_VIRTUAL)
) )
} else { } else {
list.value = data.list list.value = data.list
@ -380,15 +387,21 @@ defineExpose({ open })
/** 拼装 el-alert 提示文字 */ /** 拼装 el-alert 提示文字 */
const alertTitle = computed(() => { const alertTitle = computed(() => {
const parts: string[] = [] const parts: string[] = []
if (props.batchId != null) parts.push('批次') if (props.batchId != null) {
if (props.warehouseId != null) parts.push('仓库') parts.push('批次')
if (props.excludeVirtual) parts.push('排除虚拟仓') }
if (props.warehouseId != null) {
parts.push('仓库')
}
if (props.virtualFilter === 'only') {
parts.push('只看虚拟仓')
}
return `已按${parts.join('/')}预过滤` return `已按${parts.join('/')}预过滤`
}) })
/** 是否显示 alert 提示 */ /** 是否显示 alert 提示 */
const showAlert = computed(() => { const showAlert = computed(() => {
return props.batchId != null || props.warehouseId != null return props.batchId != null || props.warehouseId != null || props.virtualFilter === 'only'
}) })
</script> </script>

View File

@ -78,7 +78,7 @@
v-model="formData.materialStockId" v-model="formData.materialStockId"
placeholder="请选择库存" placeholder="请选择库存"
class="!w-1/1" class="!w-1/1"
:exclude-virtual="false" virtual-filter="only"
@change="handleStockChange" @change="handleStockChange"
/> />
</el-form-item> </el-form-item>

View File

@ -19,6 +19,7 @@
<WmMaterialStockSelect <WmMaterialStockSelect
v-model="formData.materialStockId" v-model="formData.materialStockId"
:item-id="formData.itemId" :item-id="formData.itemId"
virtual-filter="only"
@change="handleStockChange" @change="handleStockChange"
/> />
</el-form-item> </el-form-item>

View File

@ -88,6 +88,7 @@
v-model="formData.materialStockId" v-model="formData.materialStockId"
placeholder="请选择库存" placeholder="请选择库存"
class="!w-1/1" class="!w-1/1"
virtual-filter="only"
@change="handleStockChange" @change="handleStockChange"
/> />
</el-form-item> </el-form-item>