feat(mes): 新增待检任务列表页 + IqcForm 支持预填
- 新增 pendinginspect/index.vue 待检任务列表页 - 新增 api/mes/qc/pendinginspect/index.ts API 定义 - 搜索栏:来源单据编号、产品物料(MdItemSelect)、检验类型 - 表格列:来源单据编号、检验类型/名称、物料编码/名称、规格型号、待检数量、单位 - IQC 行显示"创建检验单"按钮,打开 IqcForm 并预填来源数据 - IqcForm.vue: open() 增加 prefillData 参数,isFromPendingTask 控制来源字段只读 - 新增菜单 SQL(mes_qc_pending_inspect.sql) - 新增待检任务测试数据(mes_wm_arrival_notice.sql id=100~102)pull/871/MERGE
parent
3b52a8a2ad
commit
f2dd52706b
|
|
@ -0,0 +1,28 @@
|
|||
import request from '@/config/axios'
|
||||
|
||||
// MES 待检任务 VO
|
||||
export interface QcPendingInspectVO {
|
||||
sourceDocId: number
|
||||
sourceDocType: number
|
||||
sourceDocCode: string
|
||||
sourceLineId: number
|
||||
qcType: number
|
||||
qcTypeName: string
|
||||
itemId: number
|
||||
itemCode: string
|
||||
itemName: string
|
||||
specification: string
|
||||
unitName: string
|
||||
quantityToCheck: number
|
||||
vendorId: number
|
||||
vendorName: string
|
||||
recordTime: string
|
||||
}
|
||||
|
||||
// MES 待检任务 API
|
||||
export const QcPendingInspectApi = {
|
||||
// 查询待检任务分页
|
||||
getPendingInspectPage: async (params: any) => {
|
||||
return await request.get({ url: '/mes/qc/pending-inspect/page', params })
|
||||
}
|
||||
}
|
||||
|
|
@ -37,12 +37,22 @@
|
|||
<el-row :gutter="16">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="产品物料" prop="itemId">
|
||||
<MdItemSelect v-model="formData.itemId" placeholder="请选择产品物料" class="!w-1/1" />
|
||||
<MdItemSelect
|
||||
v-model="formData.itemId"
|
||||
placeholder="请选择产品物料"
|
||||
class="!w-1/1"
|
||||
:disabled="isFromPendingTask"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="供应商" prop="vendorId">
|
||||
<MdVendorSelect v-model="formData.vendorId" placeholder="请选择供应商" class="!w-1/1" />
|
||||
<MdVendorSelect
|
||||
v-model="formData.vendorId"
|
||||
placeholder="请选择供应商"
|
||||
class="!w-1/1"
|
||||
:disabled="isFromPendingTask"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
|
|
@ -62,6 +72,7 @@
|
|||
:precision="2"
|
||||
placeholder="请输入"
|
||||
class="!w-1/1"
|
||||
:disabled="isFromPendingTask"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
@ -95,6 +106,7 @@
|
|||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
placeholder="请选择来料日期"
|
||||
class="!w-1/1"
|
||||
:disabled="isFromPendingTask"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
|
@ -228,6 +240,11 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
|||
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
||||
const activeTab = ref('line') // 当前激活的标签页
|
||||
|
||||
/** 是否来自待检任务(有预填的来源单据信息) */
|
||||
const isFromPendingTask = computed(
|
||||
() => formType.value === 'create' && formData.value.sourceDocId != null
|
||||
)
|
||||
|
||||
const formData = ref({
|
||||
id: undefined as number | undefined,
|
||||
code: undefined,
|
||||
|
|
@ -274,7 +291,8 @@ const generateCode = () => {
|
|||
}
|
||||
|
||||
/** 打开弹窗 */
|
||||
const open = async (type: string, id?: number) => {
|
||||
// TODO @AI:Partial 是不是可以不用?变量是不是可以叫 data;
|
||||
const open = async (type: string, id?: number, prefillData?: Partial<QcIqcVO>) => {
|
||||
dialogVisible.value = true
|
||||
dialogTitle.value = t('action.' + type)
|
||||
formType.value = type
|
||||
|
|
@ -288,6 +306,9 @@ const open = async (type: string, id?: number) => {
|
|||
} finally {
|
||||
formLoading.value = false
|
||||
}
|
||||
} else if (prefillData) {
|
||||
// 预填模式:来自待检任务(pending inspect)
|
||||
Object.assign(formData.value, prefillData)
|
||||
}
|
||||
}
|
||||
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
||||
|
|
|
|||
|
|
@ -0,0 +1,156 @@
|
|||
<!-- MES 待检任务列表 -->
|
||||
<template>
|
||||
<ContentWrap>
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form
|
||||
class="-mb-15px"
|
||||
:model="queryParams"
|
||||
ref="queryFormRef"
|
||||
:inline="true"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item label="来源单据编号" prop="sourceDocCode">
|
||||
<el-input
|
||||
v-model="queryParams.sourceDocCode"
|
||||
placeholder="请输入来源单据编号"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品物料" prop="itemId">
|
||||
<MdItemSelect
|
||||
v-model="queryParams.itemId"
|
||||
placeholder="请选择产品物料"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="检验类型" prop="qcType">
|
||||
<el-select
|
||||
v-model="queryParams.qcType"
|
||||
placeholder="请选择检验类型"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
|
||||
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 列表 -->
|
||||
<ContentWrap>
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="来源单据编号" align="center" prop="sourceDocCode" width="160" />
|
||||
<el-table-column label="检验类型" align="center" prop="qcType" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.MES_QC_TYPE" :value="scope.row.qcType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="检验类型名称" align="center" prop="qcTypeName" width="120" />
|
||||
<el-table-column label="物料编码" align="center" prop="itemCode" width="130" />
|
||||
<el-table-column label="物料名称" align="center" prop="itemName" min-width="150" />
|
||||
<el-table-column label="规格型号" align="center" prop="specification" width="130" />
|
||||
<el-table-column label="待检数量" align="center" prop="quantityToCheck" width="100" />
|
||||
<el-table-column label="单位" align="center" prop="unitName" width="80" />
|
||||
<el-table-column label="操作" align="center" fixed="right" width="130">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="handleCreateIqc(scope.row)"
|
||||
v-if="scope.row.qcType === MesQcTypeEnum.IQC"
|
||||
v-hasPermi="['mes:qc-iqc:create']"
|
||||
>
|
||||
创建检验单
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- IQC 表单弹窗 -->
|
||||
<IqcForm ref="iqcFormRef" @success="getList" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
||||
import { QcPendingInspectApi, QcPendingInspectVO } from '@/api/mes/qc/pendinginspect'
|
||||
import { MesQcTypeEnum } from '@/views/mes/utils/constants'
|
||||
import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
|
||||
import IqcForm from '@/views/mes/qc/iqc/IqcForm.vue'
|
||||
|
||||
defineOptions({ name: 'MesQcPendingInspect' })
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const total = ref(0) // 列表的总页数
|
||||
const list = ref<QcPendingInspectVO[]>([]) // 列表的数据
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
sourceDocCode: undefined,
|
||||
qcType: undefined,
|
||||
itemId: undefined
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
|
||||
/** 查询列表 */
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const data = await QcPendingInspectApi.getPendingInspectPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
/** 创建 IQC 检验单 */
|
||||
const iqcFormRef = ref()
|
||||
const handleCreateIqc = (row: QcPendingInspectVO) => {
|
||||
iqcFormRef.value.open('create', undefined, {
|
||||
sourceDocId: row.sourceDocId,
|
||||
sourceDocType: row.sourceDocType,
|
||||
sourceLineId: row.sourceLineId,
|
||||
vendorId: row.vendorId,
|
||||
itemId: row.itemId,
|
||||
receivedQuantity: row.quantityToCheck,
|
||||
receiveDate: row.recordTime,
|
||||
name: row.sourceDocCode + ' 来料检验单'
|
||||
})
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
Loading…
Reference in New Issue