diff --git a/src/views/mes/materialBom/index.vue b/src/views/mes/materialBom/index.vue index 36f10e7..cc351a8 100644 --- a/src/views/mes/materialBom/index.vue +++ b/src/views/mes/materialBom/index.vue @@ -4,7 +4,7 @@ - + @@ -38,44 +36,66 @@ -
父级物料 + + + - + - + - + + + + + + + + + + + + :disabled="parentMaterialDisabled"/> - + - - - - - + + + + + + + + + + + + + + style="width:200px"/> @@ -89,10 +109,13 @@ + + + -
+ 子级物料 @@ -114,29 +137,29 @@ - - + + + prop="materialBomId"/> + prop="materialTypeCode" :show-overflow-tooltip="true"/> + prop="materialTypeName" :show-overflow-tooltip="true" w/> + prop="materialId" :show-overflow-tooltip="true"/> @@ -199,18 +222,18 @@ - + + style="width:360px"/> + style="width:360px"/> @@ -252,23 +275,28 @@ import { materialBomTreeSelect, listMaterialBomJoinStructure, addBatchMaterialBom, - getUnitInfoList, getMaterialBomVersionList, getParentMaterialBom, deleteMaterialBoms -} from '@/api/mes/materialBom'; + getUnitInfoList, getMaterialBomVersionList, getParentMaterialBom, deleteMaterialBoms, + selectNextMaterialBomVersion +} from "@/api/mes/materialBom"; -import { MaterialBomVO, MaterialBomForm, MaterialBomQuery } from '@/api/mes/materialBom/types'; -import { BaseMaterialTypeVO } from '@/api/mes/baseMaterialType/types'; +import {MaterialBomVO, MaterialBomForm, MaterialBomQuery} from '@/api/mes/materialBom/types'; +import {BaseMaterialTypeVO} from '@/api/mes/baseMaterialType/types'; import MaterialSelect from '@/views/mes/baseMaterialInfo/addMaterial.vue'; -import { to } from 'await-to-js'; -import { nextTick } from 'vue'; -import { MaterialBomVersionVO } from '@/api/mes/materialBomVersion/types'; -import { BaseMeasurementUnitInfoVO } from '@/api/mes/baseMeasurementUnitInfo/types'; -import { BaseStructureBomTreeVO } from '@/api/mes/baseStructureBom/types'; +import {to} from 'await-to-js'; +import {nextTick} from "vue"; +import {MaterialBomVersionVO} from "@/api/mes/materialBomVersion/types"; +import {BaseMeasurementUnitInfoVO} from "@/api/mes/baseMeasurementUnitInfo/types"; +import {BaseStructureBomTreeVO} from "@/api/mes/baseStructureBom/types"; const materialTypeId = ref(0);//此值是传给选择物料信息弹框使用 const router = useRouter(); -const { proxy } = getCurrentInstance() as ComponentInternalInstance; +const {proxy} = getCurrentInstance() as ComponentInternalInstance; + +const { material_bom_active_flag } = toRefs(proxy?.useDict('material_bom_active_flag')); + + const materialBomList = ref(); const saveMaterialBomList = ref([]); const treeLoading = ref(false); @@ -302,18 +330,31 @@ const SELECT_MATERIAL_MODEL = ref({ PARENT_SELECT: '1',//父级物料选择 CHILD_SELECT: '2',//子级物料选择 DIALOG_CHILD_SELECT: '3'//弹窗子级选择 -}); +}) + +const MATERIAL_BOM_ACTIVE_FLAG = ref({ + ACTIVE: '1',//启用 + HISTORY: '2',//历史 + DESIGN: '3'//设计中 +}) + +const addNewMaterialBomVersionBtnText = ref('新增中'); +const addNewMaterialBomVersionBtnDisabled = ref(true); + +const publishBtnDisplay = ref(false); + +const initialMaterialBomVersion = ref('01'); // 列显隐信息 const columns = ref([ - { key: 0, label: `生产BOM_ID`, visible: false, children: [] }, - { key: 1, label: `子物料类型编号`, visible: true, children: [] }, - { key: 2, label: `子物料类型名称`, visible: true, children: [] }, - { key: 3, label: `BOM版本`, visible: false, children: [] }, - { key: 4, label: `子物料ID`, visible: false, children: [] }, - { key: 5, label: `子物料名称`, visible: true, children: [] }, - { key: 6, label: `子物料数量`, visible: true, children: [] }, - { key: 7, label: `子物料单位`, visible: true, children: [] } + {key: 0, label: `生产BOM_ID`, visible: false, children: []}, + {key: 1, label: `子物料类型编号`, visible: true, children: []}, + {key: 2, label: `子物料类型名称`, visible: true, children: []}, + {key: 3, label: `BOM版本`, visible: false, children: []}, + {key: 4, label: `子物料ID`, visible: false, children: []}, + {key: 5, label: `子物料名称`, visible: true, children: []}, + {key: 6, label: `子物料数量`, visible: true, children: []}, + {key: 7, label: `子物料单位`, visible: true, children: []} ]); const materialBomTreeRef = ref(); @@ -347,9 +388,9 @@ const initParentFormData: MaterialBomForm = { assembleTime: undefined, materialClassfication: undefined, attachId: undefined, - activeFlag: '1', + activeFlag: undefined, remark: undefined, - materialTypeName: undefined + materialTypeName: undefined, }; const initFormData: MaterialBomForm = { @@ -371,14 +412,14 @@ const initFormData: MaterialBomForm = { assembleTime: undefined, materialClassfication: undefined, attachId: undefined, - activeFlag: '1', + activeFlag: undefined, remark: undefined, - materialTypeName: undefined + materialTypeName: undefined, }; const data = reactive>({ - form: { ...initFormData }, - parentForm: { ...initParentFormData }, + form: {...initFormData}, + parentForm: {...initParentFormData}, queryParams: { materialBomId: undefined, parentId: undefined, @@ -391,31 +432,31 @@ const data = reactive>({ }, rules: { materialTypeId: [ - { required: true, message: '物料类型不能为空', trigger: 'blur' } + {required: true, message: "物料类型不能为空", trigger: "blur"} ], materialBomVersion: [ - { required: true, message: 'BOM版本不能为空', trigger: 'blur' } + {required: true, message: "BOM版本不能为空", trigger: "blur"} ], materialName: [ - { required: true, message: '物料名称不能为空', trigger: 'blur' } + {required: true, message: "物料名称不能为空", trigger: "blur"} ], standardAmount: [ - { required: true, message: '子物料数量不能为空', trigger: 'blur' } + {required: true, message: "子物料数量不能为空", trigger: "blur"} ] }, parentRules: { parentMaterialName: [ - { required: true, message: '父物料名称不能为空', trigger: 'blur' } + {required: true, message: "父物料名称不能为空", trigger: "blur"} ], materialBomVersion: [ - { required: true, message: 'BOM版本不能为空', trigger: 'blur' } + {required: true, message: "BOM版本不能为空", trigger: "blur"} ], parentStandardAmount: [ - { required: true, message: '父物料数量不能为空', trigger: 'blur' } + {required: true, message: "父物料数量不能为空", trigger: "blur"} ], parentUnitId: [ - { required: true, message: '父物料单位不能为空', trigger: 'blur' } + {required: true, message: "父物料单位不能为空", trigger: "blur"} ] } @@ -430,9 +471,9 @@ const parentQueryParams = ref({ materialName: undefined, materialBomVersion: undefined, params: {} -}); +}) -const { queryParams, form, rules, parentForm, parentRules } = toRefs(data); +const {queryParams, form, rules, parentForm, parentRules} = toRefs(data); /** 通过条件过滤节点 */ const filterNode = (value: string, data: any) => { @@ -461,7 +502,7 @@ const getTreeSelect = async () => { id: virtualTopNodeId,//materialBomId parentId: -1, materialId: 0, - label: '生产BOM', + label: "生产BOM", children: res.data }; materialBomOptions.value.push(initialTree); @@ -469,14 +510,14 @@ const getTreeSelect = async () => { // materialBomOptions.value = res.data; if (!focusKeyNode.value) {//如果之前没有focus - focusKeyNode.value = { treeKey: virtualTopNodeId }; + focusKeyNode.value = {treeKey: virtualTopNodeId}; } else { - const clickNode = findObjectByTreeKey(materialBomOptions.value, focusKeyNode.value.treeKey); + const clickNode = findObjectByTreeKey(materialBomOptions.value, focusKeyNode.value.treeKey) + if (!clickNode) { focusKeyNode.value = undefined; - focusKeyNode.value = { treeKey: virtualTopNodeId }; + focusKeyNode.value = {treeKey: virtualTopNodeId}; } - // if (!allTreeKeys || allTreeKeys.length <= 0) { // focusKeyNode.value = { // treeKey: virtualTopNodeId, @@ -491,9 +532,9 @@ const getTreeSelect = async () => { // const focusKeyNodeIndex = materialBomOptions.value.findIndex((optionItem) => focusKeyNode.value.treeKey === optionItem.treeKey);//有嵌套children的,有可能找不到 } - nextTick(function() { + nextTick(function () { materialBomTreeRef.value?.setCurrentKey(focusKeyNode.value.treeKey, true); - }); + }) loading.value = false; treeLoading.value = false; @@ -504,6 +545,16 @@ const getTreeSelect = async () => { // materialTypeOptions.value[0].children.push(dd); }; +/** 查询生产bom列表 */ +const getNextMaterialBomVersion = async () => { + //顶级节点,如果是重新修改父级物料则重新获取最新版本 + // loading.value = true; + const res = await selectNextMaterialBomVersion(parentForm.value.parentId); + parentForm.value.materialBomVersion = res.data; + // materialBomList.value = res.data; + // loading.value = false; +}; + /** 查询生产bom列表 */ const getList = async () => { //如果是有节点的则加载数据,如果是顶级节点生产BOM则不加载数据 @@ -516,17 +567,21 @@ const getList = async () => { const resetParentQueryParams = () => { parentQueryParams.value.parentId = undefined;//是当前节点的materialId parentQueryParams.value.materialBomVersion = undefined; -}; +} const resetQueryParams = () => { queryParams.value.parentId = undefined;//materialid queryParams.value.parentMaterialTypeId = undefined; -}; +} /** 节点单击事件 */ const handleNodeClick = (data: MaterialBomVO) => { materialBomList.value = []; parentMaterialDisabled.value = true; + publishBtnDisplay.value = false; + addNewMaterialBomVersionBtnDisabled.value = true; + btnLoading.value = true; + resetParentForm(); resetQueryParams(); resetParentQueryParams(); @@ -535,27 +590,39 @@ const handleNodeClick = (data: MaterialBomVO) => { parentQueryParams.value.parentId = data.materialId;//是当前节点的materialId parentQueryParams.value.materialBomVersion = data.materialBomVersion; getParentMaterialBomInfo(); - queryParams.value.parentId = data.materialId; - queryParams.value.parentMaterialTypeId = data.materialTypeId; - queryParams.value.materialBomVersion = data.materialBomVersion; - handleQuery(); + } else { - if (materialBomVersionOptions.value.length > 0) { - parentForm.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion; - queryParams.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion; - } + parentForm.value.activeFlag = MATERIAL_BOM_ACTIVE_FLAG.value.DESIGN; + handleBtnStatus(); + btnLoading.value = false; + // if (materialBomVersionOptions.value.length > 0) { + // parentForm.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion; + // queryParams.value.materialBomVersion = materialBomVersionOptions.value[0].materialBomVersion; + // } } parentMaterialDisabled.value = focusKeyNode.value.treeKey != -1; }; +const handleBtnStatus = () =>{ + if(parentForm.value.materialBomVersion && parentForm.value.materialBomVersion!==''){ + addNewMaterialBomVersionBtnDisabled.value = false; + addNewMaterialBomVersionBtnText.value = "新增版本"; + publishBtnDisplay.value = parentForm.value.activeFlag !== MATERIAL_BOM_ACTIVE_FLAG.value.ACTIVE; + }else{ + addNewMaterialBomVersionBtnDisabled.value = true; + addNewMaterialBomVersionBtnText.value = "新增中"; + publishBtnDisplay.value = false; + } + +}; const clickDisplay = () => { if (queryParams.value.parentId === 0) { parentFormDisplay.value = false; - childTableTitle.value = '顶级物料'; + childTableTitle.value = "顶级物料"; } else { parentFormDisplay.value = true; - childTableTitle.value = '子级物料'; + childTableTitle.value = "子级物料"; } }; @@ -597,7 +664,7 @@ const handleDelete = async (row?: MaterialBomVO) => { }); // alert(JSON.stringify(toDeleteMaterialBoms.value)) if (toDeleteMaterialBoms.value.length > 0) { - await deleteMaterialBoms(toDeleteMaterialBoms.value); + await deleteMaterialBoms(toDeleteMaterialBoms.value) await getTreeSelect(); } @@ -628,7 +695,7 @@ const handleSelectionChange = (selection: MaterialBomVO[]) => { /** 重置操作表单 */ const reset = () => { - form.value = { ...initFormData }; + form.value = {...initFormData}; materialBomFormRef.value?.resetFields(); }; /** 取消按钮 */ @@ -743,7 +810,7 @@ const handleMaterialSelect = (row, selectMode) => { } else if (selectMode === SELECT_MATERIAL_MODEL.value.CHILD_SELECT) {//子级选择物料需要传值materialTypeId materialTypeId.value = row.materialTypeId; } else { - materialTypeId.value = undefined; + materialTypeId.value = undefined } materialOpen.value = true; }; @@ -755,14 +822,15 @@ const submitMaterialForm = () => { //此处只有是父级物料时赋值 if (globalSelectMode.value === SELECT_MATERIAL_MODEL.value.PARENT_SELECT) { + editedRow.value.materialBomVersion = undefined; editedRow.value.parentId = selectedRow.materialId; editedRow.value.parentMaterialName = selectedRow.materialName; editedRow.value.parentMaterialTypeId = selectedRow.materialTypeId; editedRow.value.parentMaterialTypeName = selectedRow.matrialTypeName; - queryParams.value.parentId = selectedRow.materialId; queryParams.value.parentMaterialTypeId = selectedRow.materialTypeId; + getNextMaterialBomVersion(); // alert(JSON.stringify(queryParams.value)) getList(); } else { @@ -796,9 +864,12 @@ const submitBatchSaveMaterialBoms = async () => { item.parentId = parentForm.value.parentId; item.parentUnitId = parentForm.value.parentUnitId; - item.materialBomVersion = parentForm.value.materialBomVersion; item.parentStandardAmount = parentForm.value.parentStandardAmount; item.parentMaterialTypeId = parentForm.value.parentMaterialTypeId; + + item.materialBomDesc = parentForm.value.materialBomDesc; + item.materialBomVersion = parentForm.value.materialBomVersion; + item.activeFlag = parentForm.value.activeFlag; saveMaterialBomList.value.push(item); } } @@ -810,7 +881,9 @@ const submitBatchSaveMaterialBoms = async () => { await addBatchMaterialBom(saveMaterialBomList.value); proxy?.$modal.msgSuccess('操作成功'); - focusKeyNode.value.treeKey = parentForm.value.parentId + '-' + parentForm.value.materialBomVersion; + focusKeyNode.value.treeKey = parentForm.value.parentId + "-" + parentForm.value.materialBomVersion; + focusKeyNode.value.materialId = parentForm.value.parentId; + focusKeyNode.value.materialTypeId = parentForm.value.parentMaterialTypeId focusKeyNode.value.materialBomVersion = parentForm.value.materialBomVersion; focusKeyNode.value.parentUnitId = parentForm.value.parentUnitId; focusKeyNode.value.parentStandardAmount = parentForm.value.parentStandardAmount; @@ -826,13 +899,13 @@ const submitBatchSaveMaterialBoms = async () => { } } }); -}; +} /** 初始化单位数据 */ const initUnitInfoData = async () => { if (unitInfoOptions.value === undefined || unitInfoOptions.value.length <= 0) { - const { data } = await getUnitInfoList(); + const {data} = await getUnitInfoList(); // alert(JSON.stringify(data)) unitInfoOptions.value = data; } @@ -842,7 +915,7 @@ const initUnitInfoData = async () => { const initMaterialBomVersionData = async () => { // alert(JSON.stringify(getMaterialBomVersionList)) if (materialBomVersionOptions.value === undefined || materialBomVersionOptions.value.length <= 0) { - const { data } = await getMaterialBomVersionList(); + const {data} = await getMaterialBomVersionList(); materialBomVersionOptions.value = data; if (materialBomVersionOptions.value.length > 0) { @@ -858,7 +931,18 @@ const initMaterialBomVersionData = async () => { const getParentMaterialBomInfo = async () => { const res = await getParentMaterialBom(parentQueryParams.value); parentForm.value = res.data; + handleBtnStatus(); + if(!parentForm.value.materialBomVersion || parentForm.value.materialBomVersion===''){ + parentForm.value.materialBomVersion = initialMaterialBomVersion.value; + parentForm.value.activeFlag = MATERIAL_BOM_ACTIVE_FLAG.value.DESIGN; + } + + queryParams.value.parentId = parentForm.value.parentId + queryParams.value.parentMaterialTypeId = parentForm.value.parentMaterialTypeId + queryParams.value.materialBomVersion = parentForm.value.materialBomVersion + handleQuery(); + btnLoading.value = false; }; @@ -871,8 +955,19 @@ const findObjectByTreeKey = (list, targetTreeKey) => { } } return null; -}; +} +/** 基于当前父级物料和版本,新增物料bom版本 */ +const addNewMaterialBomVersion = async () => { + loading.value = true; + parentForm.value.activeFlag = MATERIAL_BOM_ACTIVE_FLAG.value.DESIGN; + await getNextMaterialBomVersion(); + materialBomList.value.forEach(childMaterialBom => { + childMaterialBom.materialBomId = undefined; + }); + loading.value = false; + console.log( materialBomList); +}; // const getClickNode = (obj) => { // // 如果当前对象有 id,并且与之前focus的id相同,则收集 @@ -902,8 +997,4 @@ const getColor = (e) => { }; - +