refactor(mes): 质检指标 resultType 改为 number 类型,resultSpec 重命名为 resultSpecification,result 目录重命名为 indicatorresult
1. indicator/index.ts:resultType 从 string 改为 number,resultSpec 重命名为 resultSpecification 2. IndicatorForm.vue:getStrDictOptions 改为 getIntDictOptions,条件判断改为数字比较(4=DICT, 5=FILE) 3. indicator/index.vue:结果值类型筛选下拉改用 getIntDictOptions 4. qc/result 目录整体重命名为 qc/indicatorresult(views + api),更新 IqcForm.vue 的引用路径pull/871/MERGE
parent
461510786e
commit
47c84d3104
|
|
@ -7,8 +7,8 @@ export interface QcIndicatorVO {
|
||||||
name: string // 检测项名称
|
name: string // 检测项名称
|
||||||
type: string // 检测项类型
|
type: string // 检测项类型
|
||||||
tool: string // 检测工具
|
tool: string // 检测工具
|
||||||
resultType: string // 结果值类型
|
resultType: number // 结果值类型
|
||||||
resultSpec: string // 结果值属性
|
resultSpecification: string // 结果值属性
|
||||||
remark: string // 备注
|
remark: string // 备注
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
import request from '@/config/axios'
|
||||||
|
|
||||||
|
// MES 检验结果 VO
|
||||||
|
export interface QcResultVO {
|
||||||
|
id: number // 编号
|
||||||
|
code: string // 样品编号
|
||||||
|
qcId: number // 关联质检单ID
|
||||||
|
qcType: number // 质检类型
|
||||||
|
itemId: number // 产品物料ID
|
||||||
|
sn: string // 物资SN
|
||||||
|
remark: string // 备注
|
||||||
|
createTime: Date // 创建时间
|
||||||
|
// 关联查询字段
|
||||||
|
qcCode: string // 质检单编号
|
||||||
|
qcName: string // 质检单名称
|
||||||
|
itemCode: string // 产品物料编码
|
||||||
|
itemName: string // 产品物料名称
|
||||||
|
itemSpecification: string // 规格型号
|
||||||
|
unitName: string // 单位名称
|
||||||
|
// 子表
|
||||||
|
items: QcResultDetailVO[] // 检验结果明细列表
|
||||||
|
}
|
||||||
|
|
||||||
|
// MES 检验结果明细 VO
|
||||||
|
export interface QcResultDetailVO {
|
||||||
|
id: number // 编号
|
||||||
|
resultId: number // 关联检验结果ID
|
||||||
|
indicatorId: number // 检测指标ID
|
||||||
|
toolId: number // 检测工具ID
|
||||||
|
unitMeasureId: number // 计量单位ID
|
||||||
|
valueType: number // 质检值类型
|
||||||
|
valueSpecification: string // 值属性
|
||||||
|
valueFloat: number // 浮点值
|
||||||
|
valueInteger: number // 整数值
|
||||||
|
valueText: string // 文字值
|
||||||
|
valueDict: string // 字典项值
|
||||||
|
valueFile: string // 文件值
|
||||||
|
remark: string // 备注
|
||||||
|
// 关联查询字段
|
||||||
|
indicatorCode: string // 检测指标编码
|
||||||
|
indicatorName: string // 检测指标名称
|
||||||
|
indicatorType: string // 检测指标类型
|
||||||
|
toolName: string // 检测工具名称
|
||||||
|
checkMethod: string // 检测方法
|
||||||
|
standardValue: number // 标准值
|
||||||
|
unitMeasureName: string // 计量单位名称
|
||||||
|
maxThreshold: number // 误差上限
|
||||||
|
minThreshold: number // 误差下限
|
||||||
|
}
|
||||||
|
|
||||||
|
// MES 检验结果 API
|
||||||
|
export const QcResultApi = {
|
||||||
|
// 查询检验结果分页
|
||||||
|
getResultPage: async (params: any) => {
|
||||||
|
return await request.get({ url: `/mes/qc/result/page`, params })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 查询检验结果详情(含明细)
|
||||||
|
getResult: async (id: number) => {
|
||||||
|
return await request.get({ url: `/mes/qc/result/get?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 新增检验结果
|
||||||
|
createResult: async (data: any) => {
|
||||||
|
return await request.post({ url: `/mes/qc/result/create`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 修改检验结果
|
||||||
|
updateResult: async (data: any) => {
|
||||||
|
return await request.put({ url: `/mes/qc/result/update`, data })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 删除检验结果
|
||||||
|
deleteResult: async (id: number) => {
|
||||||
|
return await request.delete({ url: `/mes/qc/result/delete?id=` + id })
|
||||||
|
},
|
||||||
|
|
||||||
|
// 获取空值检测项模板(新建结果时用)
|
||||||
|
getDetailTemplate: async (qcId: number, qcType: number) => {
|
||||||
|
return await request.get({ url: `/mes/qc/result/detail-template`, params: { qcId, qcType } })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -277,6 +277,7 @@ export enum DICT_TYPE {
|
||||||
MES_QC_IQC_STATUS = 'mes_qc_iqc_status', // MES 检验单状态
|
MES_QC_IQC_STATUS = 'mes_qc_iqc_status', // MES 检验单状态
|
||||||
MES_QC_CHECK_RESULT = 'mes_qc_check_result', // MES 检测结果
|
MES_QC_CHECK_RESULT = 'mes_qc_check_result', // MES 检测结果
|
||||||
MES_QC_SOURCE_DOC_TYPE = 'mes_qc_source_doc_type', // MES 来源单据类型
|
MES_QC_SOURCE_DOC_TYPE = 'mes_qc_source_doc_type', // MES 来源单据类型
|
||||||
|
MES_IPQC_TYPE = 'mes_ipqc_type', // MES IPQC 检验类型
|
||||||
MES_DV_CYCLE_TYPE = 'mes_dv_cycle_type', // MES 点检保养周期类型
|
MES_DV_CYCLE_TYPE = 'mes_dv_cycle_type', // MES 点检保养周期类型
|
||||||
MES_DV_CHECK_PLAN_STATUS = 'mes_dv_check_plan_status', // MES 点检保养方案状态
|
MES_DV_CHECK_PLAN_STATUS = 'mes_dv_check_plan_status', // MES 点检保养方案状态
|
||||||
MES_MAINTEN_RECORD_STATUS = 'mes_mainten_record_status', // MES 保养记录状态
|
MES_MAINTEN_RECORD_STATUS = 'mes_mainten_record_status', // MES 保养记录状态
|
||||||
|
|
|
||||||
|
|
@ -11,9 +11,7 @@
|
||||||
<el-form-item label="检测项编码" prop="code">
|
<el-form-item label="检测项编码" prop="code">
|
||||||
<el-input v-model="formData.code" placeholder="请输入检测项编码">
|
<el-input v-model="formData.code" placeholder="请输入检测项编码">
|
||||||
<template #append>
|
<template #append>
|
||||||
<el-button @click="generateCode" :disabled="formType === 'update'">
|
<el-button @click="generateCode" :disabled="formType === 'update'"> 生成 </el-button>
|
||||||
生成
|
|
||||||
</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -21,12 +19,8 @@
|
||||||
<el-input v-model="formData.name" placeholder="请输入检测项名称" />
|
<el-input v-model="formData.name" placeholder="请输入检测项名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="检测项类型" prop="type">
|
<el-form-item label="检测项类型" prop="type">
|
||||||
<el-select
|
<el-select v-model="formData.type" placeholder="请选择检测项类型" clearable class="!w-1/1">
|
||||||
v-model="formData.type"
|
<!-- TODO @AI:MES_INDEX_TYPE 改成 MES_INDICATOR_TYPE 类型,然后对应的值,相关的 sql、后端都要改变; -->
|
||||||
placeholder="请选择检测项类型"
|
|
||||||
clearable
|
|
||||||
class="!w-1/1"
|
|
||||||
>
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.MES_INDEX_TYPE)"
|
v-for="dict in getStrDictOptions(DICT_TYPE.MES_INDEX_TYPE)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
|
|
@ -47,31 +41,33 @@
|
||||||
@change="handleResultTypeChange"
|
@change="handleResultTypeChange"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.MES_QC_RESULT_TYPE)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_RESULT_TYPE)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!-- TODO @AI:枚举类判断 -->
|
||||||
<!-- 动态显示:FILE 类型 -->
|
<!-- 动态显示:FILE 类型 -->
|
||||||
<el-form-item
|
<el-form-item v-if="formData.resultType === 5" label="文件类型" prop="resultSpecification">
|
||||||
v-if="formData.resultType === 'FILE'"
|
<el-radio-group v-model="formData.resultSpecification">
|
||||||
label="文件类型"
|
|
||||||
prop="resultSpec"
|
|
||||||
>
|
|
||||||
<el-radio-group v-model="formData.resultSpec">
|
|
||||||
<el-radio label="IMG">图片/照片</el-radio>
|
<el-radio label="IMG">图片/照片</el-radio>
|
||||||
<el-radio label="FILE">文件</el-radio>
|
<el-radio label="FILE">文件</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- 动态显示:DICT 类型 -->
|
<!-- 动态显示:DICT 类型 -->
|
||||||
|
<!-- TODO @AI:枚举类判断 -->
|
||||||
|
<!-- TODO @AI:是不是抽个 dict/components/DictTypeSelect 组件出来;然后这边使用噢 -->
|
||||||
<el-form-item
|
<el-form-item
|
||||||
v-else-if="formData.resultType === 'DICT'"
|
v-else-if="formData.resultType === 4"
|
||||||
label="字典类型"
|
label="字典类型"
|
||||||
prop="resultSpec"
|
prop="resultSpecification"
|
||||||
>
|
>
|
||||||
<el-input v-model="formData.resultSpec" placeholder="请输入字典类型名(如 sys_yes_no)" />
|
<el-input
|
||||||
|
v-model="formData.resultSpecification"
|
||||||
|
placeholder="请输入字典类型名(如 sys_yes_no)"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
|
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
|
||||||
|
|
@ -84,7 +80,7 @@
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
|
import { getStrDictOptions, getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||||
import { QcIndicatorApi, QcIndicatorVO } from '@/api/mes/qc/indicator'
|
import { QcIndicatorApi, QcIndicatorVO } from '@/api/mes/qc/indicator'
|
||||||
import { generateRandomStr } from '@/utils'
|
import { generateRandomStr } from '@/utils'
|
||||||
|
|
||||||
|
|
@ -104,7 +100,7 @@ const formData = ref({
|
||||||
type: undefined,
|
type: undefined,
|
||||||
tool: undefined,
|
tool: undefined,
|
||||||
resultType: undefined,
|
resultType: undefined,
|
||||||
resultSpec: undefined,
|
resultSpecification: undefined,
|
||||||
remark: undefined
|
remark: undefined
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
|
|
@ -123,7 +119,7 @@ const generateCode = () => {
|
||||||
|
|
||||||
/** 结果值类型变更时清空结果值属性 */
|
/** 结果值类型变更时清空结果值属性 */
|
||||||
const handleResultTypeChange = () => {
|
const handleResultTypeChange = () => {
|
||||||
formData.value.resultSpec = undefined
|
formData.value.resultSpecification = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 打开弹窗 */
|
/** 打开弹窗 */
|
||||||
|
|
@ -177,7 +173,7 @@ const resetForm = () => {
|
||||||
type: undefined,
|
type: undefined,
|
||||||
tool: undefined,
|
tool: undefined,
|
||||||
resultType: undefined,
|
resultType: undefined,
|
||||||
resultSpec: undefined,
|
resultSpecification: undefined,
|
||||||
remark: undefined
|
remark: undefined
|
||||||
}
|
}
|
||||||
formRef.value?.resetFields()
|
formRef.value?.resetFields()
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
class="!w-240px"
|
class="!w-240px"
|
||||||
>
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.MES_QC_RESULT_TYPE)"
|
v-for="dict in getIntDictOptions(DICT_TYPE.MES_QC_RESULT_TYPE)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
|
|
@ -144,7 +144,7 @@ import { dateFormatter } from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import { QcIndicatorApi, QcIndicatorVO } from '@/api/mes/qc/indicator'
|
import { QcIndicatorApi, QcIndicatorVO } from '@/api/mes/qc/indicator'
|
||||||
import IndicatorForm from './IndicatorForm.vue'
|
import IndicatorForm from './IndicatorForm.vue'
|
||||||
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
|
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
defineOptions({ name: 'MesQcIndicator' })
|
defineOptions({ name: 'MesQcIndicator' })
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,179 @@
|
||||||
|
<!-- MES 检验结果表单弹窗(含动态检测值输入) -->
|
||||||
|
<!-- TODO @AI:这个文件名,可以更全面一点;另外,放到 components 目录下; -->
|
||||||
|
<template>
|
||||||
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="960px">
|
||||||
|
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
|
||||||
|
<el-row :gutter="16">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="样品编号" prop="code">
|
||||||
|
<el-input v-model="formData.code" placeholder="请输入样品编号" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="物资SN" prop="sn">
|
||||||
|
<el-input v-model="formData.sn" placeholder="请输入物资SN" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注" prop="remark">
|
||||||
|
<el-input v-model="formData.remark" type="textarea" placeholder="请输入备注" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 检测值列表 -->
|
||||||
|
<el-divider content-position="left">检测值</el-divider>
|
||||||
|
<div v-for="(item, index) in formData.items" :key="index">
|
||||||
|
<el-row :gutter="16">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item :label="'检测项' + (index + 1)">
|
||||||
|
<el-input :model-value="item.indicatorName" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<!-- 浮点值 -->
|
||||||
|
<el-form-item v-if="item.valueType === 1" label="检测值">
|
||||||
|
<el-input-number v-model="item.valueFloat" :precision="4" placeholder="请输入" class="!w-1/1" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 整数值 -->
|
||||||
|
<el-form-item v-else-if="item.valueType === 2" label="检测值">
|
||||||
|
<el-input-number v-model="item.valueInteger" :precision="0" placeholder="请输入" class="!w-1/1" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 文本值 -->
|
||||||
|
<el-form-item v-else-if="item.valueType === 3" label="检测值">
|
||||||
|
<el-input v-model="item.valueText" type="textarea" placeholder="请输入检测值" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 字典值 -->
|
||||||
|
<el-form-item v-else-if="item.valueType === 4" label="检测值">
|
||||||
|
<el-select v-model="item.valueDict" placeholder="请选择" class="!w-1/1">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getDictOptions(item.valueSpecification)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 文件值 -->
|
||||||
|
<el-form-item v-else-if="item.valueType === 5" label="检测值">
|
||||||
|
<el-input v-model="item.valueFile" placeholder="请输入文件地址" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 未知类型 -->
|
||||||
|
<el-form-item v-else label="检测值">
|
||||||
|
<el-input v-model="item.valueText" placeholder="请输入" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-divider v-if="index < formData.items.length - 1" />
|
||||||
|
</div>
|
||||||
|
</el-form>
|
||||||
|
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
||||||
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||||
|
</template>
|
||||||
|
</Dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { QcResultApi } from '@/api/mes/qc/indicatorresult'
|
||||||
|
import { getDictOptions } from '@/utils/dict'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ResultForm' })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
qcId: number
|
||||||
|
qcType: number
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
|
const message = useMessage()
|
||||||
|
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const dialogTitle = ref('')
|
||||||
|
const formLoading = ref(false)
|
||||||
|
const formType = ref('')
|
||||||
|
|
||||||
|
const formData = ref({
|
||||||
|
id: undefined as number | undefined,
|
||||||
|
code: undefined as string | undefined,
|
||||||
|
qcId: undefined as number | undefined,
|
||||||
|
qcType: undefined as number | undefined,
|
||||||
|
sn: undefined as string | undefined,
|
||||||
|
remark: undefined as string | undefined,
|
||||||
|
items: [] as any[]
|
||||||
|
})
|
||||||
|
const formRules = reactive({
|
||||||
|
code: [{ required: true, message: '样品编号不能为空', trigger: 'blur' }]
|
||||||
|
})
|
||||||
|
const formRef = ref()
|
||||||
|
|
||||||
|
/** 打开弹窗 */
|
||||||
|
const open = async (type: string, id?: number) => {
|
||||||
|
dialogVisible.value = true
|
||||||
|
dialogTitle.value = t('action.' + type)
|
||||||
|
formType.value = type
|
||||||
|
resetForm()
|
||||||
|
formData.value.qcId = props.qcId
|
||||||
|
formData.value.qcType = props.qcType
|
||||||
|
|
||||||
|
if (type === 'update' && id) {
|
||||||
|
// 修改时加载已有数据(含明细)
|
||||||
|
formLoading.value = true
|
||||||
|
try {
|
||||||
|
const data = await QcResultApi.getResult(id)
|
||||||
|
formData.value = data
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 新增时加载空值检测项模板
|
||||||
|
formLoading.value = true
|
||||||
|
try {
|
||||||
|
formData.value.items = await QcResultApi.getDetailTemplate(props.qcId, props.qcType)
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defineExpose({ open })
|
||||||
|
|
||||||
|
/** 提交表单 */
|
||||||
|
const emit = defineEmits(['success'])
|
||||||
|
const submitForm = async () => {
|
||||||
|
if (!formRef) return
|
||||||
|
const valid = await formRef.value.validate()
|
||||||
|
if (!valid) return
|
||||||
|
formLoading.value = true
|
||||||
|
try {
|
||||||
|
const data = { ...formData.value }
|
||||||
|
if (formType.value === 'create') {
|
||||||
|
await QcResultApi.createResult(data)
|
||||||
|
message.success(t('common.createSuccess'))
|
||||||
|
} else {
|
||||||
|
await QcResultApi.updateResult(data)
|
||||||
|
message.success(t('common.updateSuccess'))
|
||||||
|
}
|
||||||
|
dialogVisible.value = false
|
||||||
|
emit('success')
|
||||||
|
} finally {
|
||||||
|
formLoading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 重置表单 */
|
||||||
|
const resetForm = () => {
|
||||||
|
formData.value = {
|
||||||
|
id: undefined,
|
||||||
|
code: undefined,
|
||||||
|
qcId: undefined,
|
||||||
|
qcType: undefined,
|
||||||
|
sn: undefined,
|
||||||
|
remark: undefined,
|
||||||
|
items: []
|
||||||
|
}
|
||||||
|
formRef.value?.resetFields()
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
@ -0,0 +1,110 @@
|
||||||
|
<!-- MES 检验结果列表子组件(嵌入 IQC 等质检单详情页) -->
|
||||||
|
<!-- TODO @AI:这个文件名,可以更全面一点;另外,放到 components 目录下; -->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain @click="handleAdd">
|
||||||
|
<Icon icon="ep:plus" class="mr-5px" /> 新增
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
|
<!-- 列表 -->
|
||||||
|
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||||
|
<el-table-column label="样品编号" align="center" prop="code" width="200" />
|
||||||
|
<el-table-column label="物资SN" align="center" prop="sn" min-width="200" />
|
||||||
|
<el-table-column label="备注" align="center" prop="remark" min-width="200" />
|
||||||
|
<el-table-column label="操作" align="center" width="150" fixed="right">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button link type="primary" @click="handleUpdate(scope.row)">修改</el-button>
|
||||||
|
<el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页 -->
|
||||||
|
<Pagination
|
||||||
|
:total="total"
|
||||||
|
v-model:page="queryParams.pageNo"
|
||||||
|
v-model:limit="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- 新增/修改弹窗 -->
|
||||||
|
<ResultForm ref="formRef" :qc-id="qcId" :qc-type="qcType" @success="getList" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { QcResultApi, QcResultVO } from '@/api/mes/qc/indicatorresult'
|
||||||
|
import ResultForm from './ResultForm.vue'
|
||||||
|
|
||||||
|
defineOptions({ name: 'ResultList' })
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
qcId: number
|
||||||
|
qcType: number
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const { t } = useI18n()
|
||||||
|
const message = useMessage()
|
||||||
|
|
||||||
|
const loading = ref(false)
|
||||||
|
const list = ref<QcResultVO[]>([])
|
||||||
|
const total = ref(0)
|
||||||
|
const queryParams = reactive({
|
||||||
|
pageNo: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
qcId: undefined as number | undefined,
|
||||||
|
qcType: undefined as number | undefined
|
||||||
|
})
|
||||||
|
const formRef = ref()
|
||||||
|
|
||||||
|
/** 查询列表 */
|
||||||
|
const getList = async () => {
|
||||||
|
if (!props.qcId) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
queryParams.qcId = props.qcId
|
||||||
|
queryParams.qcType = props.qcType
|
||||||
|
loading.value = true
|
||||||
|
try {
|
||||||
|
const data = await QcResultApi.getResultPage(queryParams)
|
||||||
|
list.value = data.list
|
||||||
|
total.value = data.total
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 新增 */
|
||||||
|
const handleAdd = () => {
|
||||||
|
formRef.value.open('create')
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 修改 */
|
||||||
|
const handleUpdate = (row: QcResultVO) => {
|
||||||
|
formRef.value.open('update', row.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 删除 */
|
||||||
|
const handleDelete = async (row: QcResultVO) => {
|
||||||
|
try {
|
||||||
|
await message.delConfirm()
|
||||||
|
await QcResultApi.deleteResult(row.id)
|
||||||
|
message.success(t('common.delSuccess'))
|
||||||
|
await getList()
|
||||||
|
} catch {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 监听 qcId 变化,重新加载列表 */
|
||||||
|
watch(
|
||||||
|
() => props.qcId,
|
||||||
|
() => {
|
||||||
|
queryParams.pageNo = 1
|
||||||
|
getList()
|
||||||
|
},
|
||||||
|
{ immediate: true }
|
||||||
|
)
|
||||||
|
</script>
|
||||||
|
|
@ -214,7 +214,7 @@ import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue'
|
||||||
import UserSelect from '@/views/system/user/components/UserSelect.vue'
|
import UserSelect from '@/views/system/user/components/UserSelect.vue'
|
||||||
import QcTemplateSelect from '@/views/mes/qc/template/components/QcTemplateSelect.vue'
|
import QcTemplateSelect from '@/views/mes/qc/template/components/QcTemplateSelect.vue'
|
||||||
import IqcLineList from './IqcLineList.vue'
|
import IqcLineList from './IqcLineList.vue'
|
||||||
import ResultList from '@/views/mes/qc/result/ResultList.vue'
|
import ResultList from '@/views/mes/qc/indicatorresult/ResultList.vue'
|
||||||
import { MesQcTypeEnum } from '@/views/mes/utils/constants'
|
import { MesQcTypeEnum } from '@/views/mes/utils/constants'
|
||||||
|
|
||||||
defineOptions({ name: 'IqcForm' })
|
defineOptions({ name: 'IqcForm' })
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@
|
||||||
>
|
>
|
||||||
完成
|
完成
|
||||||
</el-button>
|
</el-button>
|
||||||
<!-- TODO @芋艿:查看报表,后续要搞下; -->
|
<!-- TODO 【不要删除】 @芋艿:查看报表,后续要搞下; -->
|
||||||
<el-button
|
<el-button
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
|
|
@ -204,7 +204,6 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
// TODO @AI:参考 /Users/yunai/Java/yudao-all-in-one/yudao-ui-admin-vue3/src/views/system/user/index.vue 写方法、变量注释;
|
|
||||||
import { dateFormatter2 } from '@/utils/formatTime'
|
import { dateFormatter2 } from '@/utils/formatTime'
|
||||||
import download from '@/utils/download'
|
import download from '@/utils/download'
|
||||||
import { QcIqcApi, QcIqcVO } from '@/api/mes/qc/iqc'
|
import { QcIqcApi, QcIqcVO } from '@/api/mes/qc/iqc'
|
||||||
|
|
@ -217,12 +216,12 @@ import { MesQcIqcStatusEnum } from '@/views/mes/utils/constants'
|
||||||
|
|
||||||
defineOptions({ name: 'MesQcIqc' })
|
defineOptions({ name: 'MesQcIqc' })
|
||||||
|
|
||||||
const message = useMessage()
|
const message = useMessage() // 消息弹窗
|
||||||
const { t } = useI18n()
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
const loading = ref(true)
|
const loading = ref(true) // 列表的加载中
|
||||||
const list = ref<QcIqcVO[]>([])
|
const list = ref<QcIqcVO[]>([]) // 列表的数据
|
||||||
const total = ref(0)
|
const total = ref(0) // 列表的总页数
|
||||||
const queryParams = reactive({
|
const queryParams = reactive({
|
||||||
pageNo: 1,
|
pageNo: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
|
@ -235,8 +234,8 @@ const queryParams = reactive({
|
||||||
inspectDate: undefined,
|
inspectDate: undefined,
|
||||||
inspectorUserId: undefined
|
inspectorUserId: undefined
|
||||||
})
|
})
|
||||||
const queryFormRef = ref()
|
const queryFormRef = ref() // 搜索的表单
|
||||||
const exportLoading = ref(false)
|
const exportLoading = ref(false) // 导出的加载中
|
||||||
|
|
||||||
/** 查询列表 */
|
/** 查询列表 */
|
||||||
const getList = async () => {
|
const getList = async () => {
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,12 @@ export const MesQcIqcStatusEnum = {
|
||||||
FINISHED: 1 // 已完成
|
FINISHED: 1 // 已完成
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** MES 过程检验单(IPQC)状态枚举 */
|
||||||
|
export const MesQcIpqcStatusEnum = {
|
||||||
|
PREPARE: 0, // 草稿
|
||||||
|
FINISHED: 1 // 已完成
|
||||||
|
}
|
||||||
|
|
||||||
/** MES 生产报工状态枚举 */
|
/** MES 生产报工状态枚举 */
|
||||||
export const MesProFeedbackStatusEnum = {
|
export const MesProFeedbackStatusEnum = {
|
||||||
PREPARE: 0, // 草稿
|
PREPARE: 0, // 草稿
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue