update 机台料罐明细关联字段

master
yinq 5 days ago
parent 378b35add2
commit 0f18acf6f2

@ -9,11 +9,21 @@ export interface MachineTankDetailVO {
*/
machineId: string | number;
/**
*
*/
machineName?: string;
/**
*
*/
tankTypeId: string | number;
/**
*
*/
tankType?: string;
/**
*
*/
@ -24,6 +34,16 @@ export interface MachineTankDetailVO {
*/
materialId: string | number;
/**
*
*/
materialCode?: string;
/**
*
*/
materialName?: string;
/**
*
*/
@ -102,6 +122,16 @@ export interface MachineTankDetailForm extends BaseEntity {
*/
materialId?: string | number;
/**
*
*/
materialCode?: string;
/**
*
*/
materialName?: string;
/**
*
*/

@ -5,13 +5,34 @@
<div v-show='showSearch' class='mb-[10px]'>
<el-card shadow='hover'>
<el-form ref='queryFormRef' :model='queryParams' :inline='true'>
<el-form-item label='料罐类型' prop='tankTypeId'>
<el-input v-model='queryParams.tankTypeId' placeholder='请输入料罐类型' clearable
@keyup.enter='handleQuery' />
<el-form-item label='机台名称' prop='machineId'>
<el-select
v-model='queryParams.machineId'
placeholder='请选择机台名称'
clearable
@change='handleQuery'
>
<el-option
v-for='item in machineOptions'
:key='item.machineId'
:label='item.machineName'
:value='item.machineId'
/>
</el-select>
</el-form-item>
<el-form-item label='状态(0正常1停用)' prop='status'>
<el-select v-model='queryParams.status' placeholder='请选择状态(0正常1停用)' clearable>
<el-option v-for='dict in sys_show_hide' :key='dict.value' :label='dict.label' :value='dict.value' />
<el-form-item label='料罐类型' prop='tankTypeId'>
<el-select
v-model='queryParams.tankTypeId'
placeholder='请选择料罐类型'
clearable
@change='handleQuery'
>
<el-option
v-for='item in tankTypeOptions'
:key='item.tankTypeId'
:label='getTankTypeOptionLabel(item)'
:value='item.tankTypeId'
/>
</el-select>
</el-form-item>
<el-form-item>
@ -53,25 +74,37 @@
<el-table v-loading='loading' :data='machineTankDetailList' @selection-change='handleSelectionChange'>
<el-table-column type='selection' width='55' align='center' />
<el-table-column label='料罐明细ID' align='center' prop='tankDetailId' v-if='columns[0].visible' />
<el-table-column label='机台名称' align='center' prop='machineId' v-if='columns[2].visible' />
<el-table-column label='料罐类型' align='center' prop='tankTypeId' v-if='columns[3].visible' />
<el-table-column label='仓位序号' align='center' prop='wareNum' v-if='columns[4].visible' />
<el-table-column label='物料ID' align='center' prop='materialId' v-if='columns[5].visible' />
<el-table-column label='料仓优先级' align='center' prop='materPriority' v-if='columns[6].visible' />
<el-table-column label='${comment}' align='center' prop='materUsed' v-if='columns[7].visible' />
<el-table-column label='${comment}' align='center' prop='mkindCode' v-if='columns[8].visible' />
<el-table-column label='称重编号' align='center' prop='weighNum' v-if='columns[9].visible' />
<el-table-column label='最小称重限额' align='center' prop='weighLimitMin' v-if='columns[10].visible' />
<el-table-column label='最大称重限额' align='center' prop='weighLimitMax' v-if='columns[11].visible' />
<el-table-column label='状态(0正常1停用)' align='center' prop='status' v-if='columns[12].visible'>
<el-table-column label='机台名称' align='center' prop='machineName' min-width='120' show-overflow-tooltip />
<el-table-column label='料罐类型' align='center' prop='tankType' min-width='100'>
<template #default='scope'>
<dict-tag :options='sys_show_hide' :value='scope.row.status' />
<dict-tag v-if='scope.row.tankType' :options='tank_type' :value='scope.row.tankType' />
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label='备注' align='center' prop='remark' v-if='columns[13].visible' />
<el-table-column label='仓库ID' align='center' prop='workshopId' v-if='columns[19].visible' />
<el-table-column label='工位ID' align='center' prop='stationId' v-if='columns[20].visible' />
<el-table-column label='料仓序号' align='center' prop='wareNum' width='90' />
<el-table-column label='物料编码' align='center' prop='materialCode' min-width='120' show-overflow-tooltip>
<template #default='scope'>
{{ scope.row.materialCode || scope.row.materialId || '-' }}
</template>
</el-table-column>
<el-table-column label='物料名称' align='center' prop='materialName' min-width='140' show-overflow-tooltip>
<template #default='scope'>
{{ scope.row.materialName || '-' }}
</template>
</el-table-column>
<el-table-column label='料仓优先级' align='center' prop='materPriority' width='100' />
<!-- <el-table-column label='称重编号' align='center' prop='weighNum' width='90' />-->
<!-- <el-table-column label='称重限额' align='center' width='120'>-->
<!-- <template #default='scope'>-->
<!-- {{ scope.row.weighLimitMin ?? '-' }} ~ {{ scope.row.weighLimitMax ?? '-' }}-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label='状态' align='center' prop='status' width='80'>-->
<!-- <template #default='scope'>-->
<!-- <dict-tag :options='sys_show_hide' :value='scope.row.status' />-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label='备注' align='center' prop='remark' min-width='100' show-overflow-tooltip />
<el-table-column label='操作' align='center' class-name='small-padding fixed-width'>
<template #default='scope'>
<el-tooltip content='修改' placement='top'>
@ -92,58 +125,66 @@
<!-- 添加或修改机台料罐明细对话框 -->
<el-dialog :title='dialog.title' v-model='dialog.visible' width='500px' append-to-body>
<el-form ref='machineTankDetailFormRef' :model='form' :rules='rules' label-width='120px'>
<el-form-item label='料罐明细ID' prop='tankDetailId'>
<el-input v-model='form.tankDetailId' placeholder='请输入料罐明细ID' />
<el-form-item label='料罐类型' prop='tankTypeId'>
<el-select
v-model='form.tankTypeId'
placeholder='请选择料罐类型'
clearable
style='width: 100%'
@change='onTankTypeChange'
>
<el-option
v-for='item in tankTypeOptions'
:key='item.tankTypeId'
:label='getTankTypeOptionLabel(item)'
:value='item.tankTypeId'
/>
</el-select>
</el-form-item>
<el-form-item label='机台名称' prop='machineId'>
<el-input v-model='form.machineId' placeholder='请输入机台名称' />
<el-input :model-value='formMachineDisplay' placeholder='根据料罐类型自动带出' readonly />
</el-form-item>
<el-form-item label='料罐类型' prop='tankTypeId'>
<el-input v-model='form.tankTypeId' placeholder='请输入料罐类型' />
<el-form-item label='料仓序号' prop='wareNum'>
<el-input-number v-model='form.wareNum' placeholder='请输入料仓序号' />
</el-form-item>
<el-form-item label='仓位序号' prop='wareNum'>
<el-input v-model='form.wareNum' placeholder='请输入仓位序号' />
</el-form-item>
<el-form-item label='物料ID' prop='materialId'>
<el-input v-model='form.materialId' placeholder='请输入物料ID' />
<el-form-item label='物料' prop='materialId'>
<el-input
:model-value='formMaterialDisplay'
placeholder='请选择物料'
readonly
@click='openMaterialSelect'
>
<template #append>
<el-button icon='Search' @click.stop='openMaterialSelect'>选择</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item label='料仓优先级' prop='materPriority'>
<el-input v-model='form.materPriority' placeholder='请输入料仓优先级' />
</el-form-item>
<el-form-item label='${comment}' prop='materUsed'>
<el-input v-model='form.materUsed' placeholder='请输入${comment}' />
</el-form-item>
<el-form-item label='${comment}' prop='mkindCode'>
<el-input v-model='form.mkindCode' placeholder='请输入${comment}' />
</el-form-item>
<el-form-item label='称重编号' prop='weighNum'>
<el-input v-model='form.weighNum' placeholder='请输入称重编号' />
</el-form-item>
<el-form-item label='最小称重限额' prop='weighLimitMin'>
<el-input v-model='form.weighLimitMin' placeholder='请输入最小称重限额' />
</el-form-item>
<el-form-item label='最大称重限额' prop='weighLimitMax'>
<el-input v-model='form.weighLimitMax' placeholder='请输入最大称重限额' />
</el-form-item>
<el-form-item label='状态(0正常1停用)' prop='status'>
<el-radio-group v-model='form.status'>
<el-radio
v-for='dict in sys_show_hide'
:key='dict.value'
:value='dict.value'
>{{ dict.label }}
</el-radio>
</el-radio-group>
<el-input-number v-model='form.materPriority' placeholder='请输入料仓优先级' />
</el-form-item>
<!-- <el-form-item label='称重编号' prop='weighNum'>-->
<!-- <el-input v-model='form.weighNum' placeholder='请输入称重编号' />-->
<!-- </el-form-item>-->
<!-- <el-form-item label='最小称重限额' prop='weighLimitMin'>-->
<!-- <el-input v-model='form.weighLimitMin' placeholder='请输入最小称重限额' />-->
<!-- </el-form-item>-->
<!-- <el-form-item label='最大称重限额' prop='weighLimitMax'>-->
<!-- <el-input v-model='form.weighLimitMax' placeholder='请输入最大称重限额' />-->
<!-- </el-form-item>-->
<!-- <el-form-item label='状态' prop='status'>-->
<!-- <el-radio-group v-model='form.status'>-->
<!-- <el-radio-->
<!-- v-for='dict in sys_show_hide'-->
<!-- :key='dict.value'-->
<!-- :value='dict.value'-->
<!-- >{{ dict.label }}-->
<!-- </el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<el-form-item label='备注' prop='remark'>
<el-input v-model='form.remark' placeholder='请输入备注' />
</el-form-item>
<el-form-item label='仓库ID' prop='workshopId'>
<el-input v-model='form.workshopId' placeholder='请输入仓库ID' />
</el-form-item>
<el-form-item label='工位ID' prop='stationId'>
<el-input v-model='form.stationId' placeholder='请输入工位ID' />
</el-form-item>
</el-form>
<template #footer>
<div class='dialog-footer'>
@ -152,6 +193,14 @@
</div>
</template>
</el-dialog>
<!-- 选择物料对话框 -->
<el-dialog title='选择物料' v-model='materialSelectVisible' width='700px' append-to-body>
<MaterialSelect ref='materialSelectRef' v-if='materialSelectVisible' />
<template #footer>
<el-button type='primary' @click='confirmMaterialSelect'> </el-button>
<el-button @click='materialSelectVisible = false'> </el-button>
</template>
</el-dialog>
</div>
</template>
@ -163,12 +212,37 @@ import {
addMachineTankDetail,
updateMachineTankDetail
} from '@/api/mes/machineTankDetail';
import { getProdMachineTankTypeList } from '@/api/mes/machineTankType';
import { getProdBaseMachineInfoList } from '@/api/mes/prodBaseMachineInfo';
import { MachineTankDetailVO, MachineTankDetailQuery, MachineTankDetailForm } from '@/api/mes/machineTankDetail/types';
import type { MachineTankTypeVO } from '@/api/mes/machineTankType/types';
import type { ProdBaseMachineInfoVO } from '@/api/mes/prodBaseMachineInfo/types';
import MaterialSelect from '@/views/mes/recipeInfo/components/MaterialSelect.vue';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_show_hide } = toRefs<any>(proxy?.useDict('sys_show_hide'));
const { tank_type } = toRefs<any>(proxy?.useDict('tank_type'));
const machineTankDetailList = ref<MachineTankDetailVO[]>([]);
const tankTypeOptions = ref<MachineTankTypeVO[]>([]);
const machineOptions = ref<ProdBaseMachineInfoVO[]>([]);
const materialSelectVisible = ref(false);
const materialSelectRef = ref<InstanceType<typeof MaterialSelect>>();
const materialMap = ref<Record<string, { materialCode: string; materialName: string }>>({});
const formMachineDisplay = computed(() => {
const tid = form.value.tankTypeId;
if (tid == null || tid === '') return '';
const item = tankTypeOptions.value.find((t) => t.tankTypeId === tid || String(t.tankTypeId) === String(tid));
return item ? (item.machineName || item.machineId || '') : '';
});
const formMaterialDisplay = computed(() => {
const id = form.value.materialId;
if (id == null || id === '') return '';
const m = materialMap.value[String(id)];
return m ? `${m.materialName}`.trim() : String(id);
});
const buttonLoading = ref(false);
const loading = ref(true);
const showSearch = ref(true);
@ -185,30 +259,18 @@ const dialog = reactive<DialogOption>({
title: ''
});
//
// right-toolbar
const columns = ref<FieldOption[]>([
{ key: 0, label: `料罐明细ID`, visible: false },
{ key: 1, label: `租户编号`, visible: true },
{ key: 2, label: `机台名称`, visible: true },
{ key: 3, label: `料罐类型`, visible: true },
{ key: 4, label: `仓位序号`, visible: true },
{ key: 5, label: `物料ID`, visible: true },
{ key: 6, label: `料仓优先级`, visible: true },
{ key: 7, label: `comment`, visible: true },
{ key: 8, label: `comment`, visible: true },
{ key: 9, label: `称重编号`, visible: true },
{ key: 10, label: `最小称重限额`, visible: true },
{ key: 11, label: `最大称重限额`, visible: true },
{ key: 12, label: `状态(0正常1停用)`, visible: true },
{ key: 13, label: `备注`, visible: true },
{ key: 14, label: `创建部门`, visible: true },
{ key: 15, label: `创建者`, visible: true },
{ key: 16, label: `创建时间`, visible: true },
{ key: 17, label: `更新者`, visible: true },
{ key: 18, label: `更新时间`, visible: true },
{ key: 19, label: `仓库ID`, visible: true },
{ key: 20, label: `工位ID`, visible: true },
{ key: 21, label: `删除标志`, visible: true }
{ key: 0, label: '机台名称', visible: true },
{ key: 1, label: '料罐类型', visible: true },
{ key: 2, label: '料仓序号', visible: true },
{ key: 3, label: '物料编码', visible: true },
{ key: 4, label: '物料名称', visible: true },
{ key: 5, label: '料仓优先级', visible: true },
{ key: 6, label: '称重编号', visible: false },
{ key: 7, label: '称重限额', visible: false },
{ key: 8, label: '状态', visible: true },
{ key: 9, label: '备注', visible: true }
]);
const initFormData: MachineTankDetailForm = {
@ -250,23 +312,76 @@ const data = reactive<PageData<MachineTankDetailForm, MachineTankDetailQuery>>({
params: {}
},
rules: {
machineId: [
{ required: true, message: '机台名称不能为空', trigger: 'blur' }
],
tankTypeId: [
{ required: true, message: '料罐类型不能为空', trigger: 'blur' }
],
wareNum: [
{ required: true, message: '仓位序号不能为空', trigger: 'blur' }
{ required: true, message: '请选择料罐类型', trigger: 'change' }
],
materialId: [
{ required: true, message: '物料ID不能为空', trigger: 'blur' }
{ required: true, message: '请选择物料', trigger: 'change' }
],
wareNum: [
{ required: true, message: '料仓序号不能为空', trigger: 'blur' }
]
}
});
const { queryParams, form, rules } = toRefs(data);
/** 加载料罐类型下拉列表 */
const getTankTypeOptions = async () => {
try {
const res = await getProdMachineTankTypeList({});
tankTypeOptions.value = res.data || res.rows || [];
} catch {
tankTypeOptions.value = [];
}
};
/** 加载机台下拉列表 */
const getMachineOptions = async () => {
try {
const res = await getProdBaseMachineInfoList({});
machineOptions.value = res.data || [];
} catch {
machineOptions.value = [];
}
};
/** 料罐类型下拉选项展示文案 */
function getTankTypeOptionLabel(item: MachineTankTypeVO): string {
const machineLabel = item.machineName || item.machineId || '';
const tankLabel = tank_type.value?.find((d: any) => d.value === item.tankType)?.label || item.tankType || '';
return `${machineLabel} - ${tankLabel}`;
}
/** 料罐类型选择变化时,回填 machineId */
function onTankTypeChange(val: string | number) {
if (val == null || val === '') return;
const item = tankTypeOptions.value.find((t) => t.tankTypeId === val || String(t.tankTypeId) === String(val));
if (item) {
form.value.machineId = item.machineId != null ? String(item.machineId) : undefined;
}
}
function openMaterialSelect() {
materialSelectVisible.value = true;
}
function confirmMaterialSelect() {
const row = materialSelectRef.value?.getSelected();
if (!row) {
proxy?.$modal.msgWarning('请先选择一条物料');
return;
}
form.value.materialId = row.materialId;
const id = String(row.materialId);
materialMap.value = {
...materialMap.value,
[id]: { materialCode: row.materialCode ?? '', materialName: row.materialName ?? '' }
};
materialSelectVisible.value = false;
}
/** 查询机台料罐明细列表 */
const getList = async () => {
loading.value = true;
@ -308,8 +423,9 @@ const handleSelectionChange = (selection: MachineTankDetailVO[]) => {
};
/** 新增按钮操作 */
const handleAdd = () => {
const handleAdd = async () => {
reset();
await getTankTypeOptions();
dialog.visible = true;
dialog.title = '添加机台料罐明细';
};
@ -317,9 +433,17 @@ const handleAdd = () => {
/** 修改按钮操作 */
const handleUpdate = async (row?: MachineTankDetailVO) => {
reset();
await getTankTypeOptions();
const _tankDetailId = row?.tankDetailId || ids.value[0];
const res = await getMachineTankDetail(_tankDetailId);
Object.assign(form.value, res.data);
const d = res.data as any;
if (d?.materialId != null && (d?.materialCode || d?.materialName)) {
materialMap.value = {
...materialMap.value,
[String(d.materialId)]: { materialCode: d.materialCode ?? '', materialName: d.materialName ?? '' }
};
}
dialog.visible = true;
dialog.title = '修改机台料罐明细';
};
@ -358,6 +482,8 @@ const handleExport = () => {
};
onMounted(() => {
getTankTypeOptions();
getMachineOptions();
getList();
});
</script>

Loading…
Cancel
Save