diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/materialSelect.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/materialSelect.vue index 41ccd9f4..0745e67c 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/materialSelect.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/materialSelect.vue @@ -1,17 +1,6 @@ @@ -25,46 +14,92 @@ const emit = defineEmits(['update:newValue']) const materialList = ref([]) // 用户列表 const materialSelectList = ref([]) const Loading = ref(false) +const materialSelectLoading = ref(false) + + +const props = defineProps({ + modelValue: { + type: [Number, String], + required: true // 如果是必需的属性,可以设置为true + } +}) +const propsmodelValue = toRefs(props).modelValue // 获取 props 中的 modelValue +const initialValue: any = ref(null) // 存储初始选中的用户 ID + -// 初始化用户列表 -onMounted(async () => { const queryParams = { pageNo: 1, pageSize: 10, code: undefined, brief: undefined, - status: undefined + status: 1, + codeAndName: undefined } +const gitlist = async () => { + const data = await MaterialApi.getMaterialPage(queryParams) + materialList.value = [...materialList.value, ...data.list] + // 设置初始值 + if (propsmodelValue.value) { + valueName.value = propsmodelValue.value + const initialmaterial = await MaterialApi.getMaterial(valueName.value) + // 查找初始用户是否已经在 materialList 中 + let foundInitialmaterialInList = false + for (const material of materialList.value) { + if (material.id === initialmaterial.id) { + valueName.value=initialmaterial.code+' '+initialmaterial.name + foundInitialmaterialInList = true + break + } + } + // 如果初始用户不在列表中,则将其添加到列表开头 + if (!foundInitialmaterialInList && !materialSelectList.value.length) { + materialList.value.unshift(initialmaterial) + propsmodelValue.value=initialmaterial.code+' '+initialmaterial.name + } + // loading.value = false + } + materialSelectList.value = materialList.value + Loading.value = false +} + +const remoteMethod = async (query: any) => { + materialSelectLoading.value = true + materialSelectList.value = [] + try { + if (query) { + queryParams.codeAndName = query + const data = await MaterialApi.getMaterialPage(queryParams) + materialList.value = data.list + materialSelectList.value = data.list + } else { + gitlist() + } + } catch (error) { + console.error(error) + } finally { + materialSelectLoading.value = false + } +} +// 初始化用户列表 +onMounted(async () => { try { - const data = await MaterialApi.getMaterialPage(queryParams) - materialList.value = data.list - // 设置初始值,如果需要的话 - remoteMethod('') + await gitlist() } catch (error) { console.error(error) } }) -const remoteMethod = (query: any) => { - if (query) { - Loading.value = true - setTimeout(() => { - Loading.value = false - materialSelectList.value = materialList.value - .filter( - (item) => - item.code.toLowerCase().includes(query.toLowerCase()) || - item.name.toLowerCase().includes(query.toLowerCase()) - ) - .slice(0, 10) //只显示前10个 - }, 200) - } else { - materialSelectList.value = materialList.value.slice(0, 10) +const onVisibleChange = (isVisible: boolean) => { + if (!isVisible) { + // 下拉框关闭时,重置查询参数和下拉框列表 + queryParams.codeAndName = undefined + materialList.value = [] + materialSelectList.value = [] } } const onSelectChange = (newValue: any) => { - valueNameObject.value = materialList.value.find( material => material.id === newValue); // 更新选中的完整用户对象 + valueNameObject.value = materialList.value.find((material) => material.id === newValue) // 更新选中的完整用户对象 emit('update:newValue', valueNameObject.value) } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue index 124d1179..12ef4e44 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/hlvuestyle/userSelect.vue @@ -65,6 +65,7 @@ const gitlist = async () => { for (const user of userList.value) { if (user.id === initialUser.id) { propsmodelValue.value=initialUser.username+' '+initialUser.nickname + foundInitialUserInList = true break } @@ -73,6 +74,7 @@ const gitlist = async () => { if (!foundInitialUserInList && !userSelectList.value.length) { userList.value.unshift(initialUser) propsmodelValue.value=initialUser.username+' '+initialUser.nickname + } // loading.value = false } diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/detail.vue index f985181e..4af9e8ce 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/detail.vue @@ -25,8 +25,7 @@ - + @@ -36,8 +35,7 @@ - + @@ -72,8 +70,7 @@ - + @@ -96,41 +93,39 @@ 新增 - + - + - + @@ -138,8 +133,7 @@ @@ -148,15 +142,14 @@ @@ -182,14 +175,12 @@ - + }" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader"> - 上传 + 上传 @@ -204,12 +195,10 @@ @@ -283,6 +272,7 @@ import download from '@/utils/download' import { getAccessToken, getTenantId } from '@/utils/auth' import { dateFormatter, formatDate } from '@/utils/formatTime' import { useUserStore } from '@/store/modules/user' +import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue' const reload = inject('reload') const { t } = useI18n() // 国际化 @@ -308,13 +298,13 @@ const formData = ref({ attachments: [] }) const formRules = reactive({ - projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }], + projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }] }) const subFormRules = reactive({ matId: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }], requireAmount: [{ required: true, message: '需求数量不能为空', trigger: 'blur' }], requireArriveTime: [{ required: true, message: '需求到货日期不能为空', trigger: 'blur' }], - projectSubId: [{ required: true, message: '子项目编号不能为空', trigger: 'blur' }], + projectSubId: [{ required: true, message: '子项目编号不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref const subFormRef = ref() // 表单 Ref @@ -405,7 +395,6 @@ const downloadAttachment = async (name, url) => { } // ====================附件信息 结束======================================= - // 远程数据筛选物料 const getMatList = async (name) => { // 获得物料列表 @@ -419,7 +408,6 @@ const getMatList = async (name) => { } const dataMat = await MaterialApi.getMaterialPage(matParams) matList.value = dataMat.list - } const matList = ref([]) // 物料列表 const matSelectLoading = ref(false) @@ -463,8 +451,9 @@ const handleDelete2 = (index: number) => { } const handleInitPlanSub = async () => { // 项目子项列表 - formData.value.projectOrderSubs = - await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(formData.value.projectId) + formData.value.projectOrderSubs = await ProjectOrderApi.getProjectOrderSubListByProjectOrderId( + formData.value.projectId + ) // 生产计划子项列表 const queryParams = reactive({ @@ -473,20 +462,19 @@ const handleInitPlanSub = async () => { projectPlanId: query.id }) - formData.value.projectPlanSubs = - (await PlanSubApi.getPlanSubPage(queryParams)).list + formData.value.projectPlanSubs = (await PlanSubApi.getPlanSubPage(queryParams)).list - formData.value.projectOrderSubs.forEach(item => { - if (formData.value.projectPlanSubs.filter(sub => sub.projectSubId == item.id).length > 0) { - var subTemp = formData.value.projectPlanSubs.find(sub => sub.projectSubId == item.id) + formData.value.projectOrderSubs.forEach((item) => { + if (formData.value.projectPlanSubs.filter((sub) => sub.projectSubId == item.id).length > 0) { + var subTemp = formData.value.projectPlanSubs.find((sub) => sub.projectSubId == item.id) item.projectSubId = subTemp.projectSubId item.projectSubCode = subTemp.projectSubCode } }) } // 保存物料信息 -const saveMaterials = async () =>{ - formData.value.matItemDOList.forEach(item => { +const saveMaterials = async () => { + formData.value.matItemDOList.forEach((item) => { var subData = item as unknown as MaterialPlanDetailApi.MaterialPlanDetailVO subData.materialId = item.matId subData.projectMaterialPlanId = formData.value.id @@ -496,11 +484,10 @@ const saveMaterials = async () =>{ MaterialPlanDetailApi.updateMaterialPlanDetail(subData) } }) - formData.value.matItemRemoveList.forEach(item =>{ + formData.value.matItemRemoveList.forEach((item) => { if (item.id != undefined) { MaterialPlanDetailApi.deleteMaterialPlanDetail(item.id) } - }) } // 保存按钮数据提交 @@ -532,13 +519,13 @@ const saveForm = async () => { } } // 送审按钮数据提交 -const submitForm = async () => { - if(formData.value.matItemDOList.length ==0){ +const submitForm = async () => { + if (formData.value.matItemDOList.length == 0) { message.alertWarning('请添加物料信息!') return } - // 校验子表单 - try { + // 校验子表单 + try { await subFormRef.value.validate() } catch (e) { return @@ -554,7 +541,7 @@ const projectInit = ref() const queryParams = reactive({ pageNo: 1, pageSize: 99, - projectMaterialPlanId: query.id, + projectMaterialPlanId: query.id }) // 页面数据加载初始化 onMounted(async () => { @@ -570,10 +557,11 @@ onMounted(async () => { formData.value.projectCode = projectInit.value.code // 获取物料需求计划的物料列表 - formData.value.matItemDOList = (await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams)).list - formData.value.matItemDOList.forEach(item=>{ - matList.value.push({id:item.matId,name:item.matName}) - + formData.value.matItemDOList = ( + await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams) + ).list + formData.value.matItemDOList.forEach((item) => { + matList.value.push({ id: item.matId, name: item.matName }) }) formData.value.matItemRemoveList = [] // 获取生产计划单中子项目编号 diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/edit.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/edit.vue index 2cd21369..23ad7ac2 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/edit.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/materialplan/edit.vue @@ -25,8 +25,7 @@ - + @@ -36,8 +35,7 @@ - + @@ -72,8 +70,7 @@ - + @@ -96,34 +93,33 @@ 新增 - + - + - + @@ -138,8 +134,7 @@ @@ -148,8 +143,7 @@ @@ -182,12 +176,10 @@ - + }" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader"> 上传 @@ -204,12 +196,10 @@ @@ -286,14 +276,15 @@ import download from '@/utils/download' import { getAccessToken, getTenantId } from '@/utils/auth' import { dateFormatter, formatDate } from '@/utils/formatTime' import { useUserStore } from '@/store/modules/user' -import { useTagsViewStore } from "@/store/modules/tagsView" +import { useTagsViewStore } from '@/store/modules/tagsView' +import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue' const reload = inject('reload') const { t } = useI18n() // 国际化 const message = useMessage() // 消息弹窗 const { query } = useRoute() const router = useRouter() -const tagsViewStore = useTagsViewStore(); +const tagsViewStore = useTagsViewStore() const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 @@ -313,13 +304,13 @@ const formData = ref({ attachments: [] }) const formRules = reactive({ - projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }], + projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }] }) const subFormRules = reactive({ matId: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }], requireAmount: [{ required: true, message: '需求数量不能为空', trigger: 'blur' }], requireArriveTime: [{ required: true, message: '需求到货日期不能为空', trigger: 'blur' }], - projectSubId: [{ required: true, message: '子项目编号不能为空', trigger: 'blur' }], + projectSubId: [{ required: true, message: '子项目编号不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref const subFormRef = ref() // 表单 Ref @@ -410,56 +401,62 @@ const downloadAttachment = async (name, url) => { } // ====================附件信息 结束======================================= - // 远程数据筛选物料 -const getMatList = async (name) => { - // 获得物料列表 - let matParams = { - pageNo: 1, - pageSize: 10, - status: '1' - } - if (name.length > 0) { - matParams.name = name - } - const dataMat = await MaterialApi.getMaterialPage(matParams) - matList.value = dataMat.list - -} -const matList = ref([]) // 物料列表 -const matSelectLoading = ref(false) -const remoteMatNameSearch = async (name) => { - matSelectLoading.value = true - // 获得物料列表 - await getMatList(name) - matSelectLoading.value = false -} -const handleMatName = async (scope, matid) => { - scope.row.matId = matList.value.find((item) => item.id === matid)?.id - scope.row.matName = matList.value.find((item) => item.id === matid)?.name - scope.row.matCode = matList.value.find((item) => item.id === matid)?.code - scope.row.matSpec = matList.value.find((item) => item.id === matid)?.spec - scope.row.matType = matList.value.find((item) => item.id === matid)?.materialType - scope.row.matUnit = matList.value.find((item) => item.id === matid)?.unit -} +// const getMatList = async (name) => { +// // 获得物料列表 +// let matParams = { +// pageNo: 1, +// pageSize: 10, +// status: '1' +// } +// if (name.length > 0) { +// matParams.name = name +// } +// const dataMat = await MaterialApi.getMaterialPage(matParams) +// matList.value = dataMat.list +// } +// const matList = ref([]) // 物料列表 +// const matSelectLoading = ref(false) +// const remoteMatNameSearch = async (name) => { +// matSelectLoading.value = true +// // 获得物料列表 +// await getMatList(name) +// matSelectLoading.value = false +// } +// const handleMatName = async (scope, matid) => { +// scope.row.matId = matList.value.find((item) => item.id === matid)?.id +// scope.row.matName = matList.value.find((item) => item.id === matid)?.name +// scope.row.matCode = matList.value.find((item) => item.id === matid)?.code +// scope.row.matSpec = matList.value.find((item) => item.id === matid)?.spec +// scope.row.matType = matList.value.find((item) => item.id === matid)?.materialType +// scope.row.matUnit = matList.value.find((item) => item.id === matid)?.unit +// } //新增物料信息 const onAddItem = () => { - const newData = { - // 新数据的属性 - stockId: 0, - matId: '', - matName: '', - matCode: '', - matType: '', - matSpec: '', - matUnit: '', - requireAmount: '', - requireArriveTime: '', - projectSubId: '', - description: '' + if (formData.value) { + if (!formData.value.matItemDOList) { + formData.value.matItemDOList = [] // 确保matItemDOList被初始化为空数组 + } + const newData = { + // 新数据的属性 + stockId: 0, + matId: '', + matName: '', + matCode: '', + matType: '', + matSpec: '', + matUnit: '', + requireAmount: '', + requireArriveTime: '', + projectSubId: '', + description: '' + } + + formData.value.matItemDOList.push(newData) + } else { + console.error('formData.value 或 formData.value.matItemDOList 未正确初始化') } - formData.value.matItemDOList.push(newData) } //删除新增物料信息 const handleDelete2 = (index: number) => { @@ -468,8 +465,9 @@ const handleDelete2 = (index: number) => { } const handleInitPlanSub = async () => { // 项目子项列表 - formData.value.projectOrderSubs = - await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(formData.value.projectId) + formData.value.projectOrderSubs = await ProjectOrderApi.getProjectOrderSubListByProjectOrderId( + formData.value.projectId + ) // 生产计划子项列表 const queryParams = reactive({ @@ -478,20 +476,19 @@ const handleInitPlanSub = async () => { projectPlanId: query.id }) - formData.value.projectPlanSubs = - (await PlanSubApi.getPlanSubPage(queryParams)).list + formData.value.projectPlanSubs = (await PlanSubApi.getPlanSubPage(queryParams)).list - formData.value.projectOrderSubs.forEach(item => { - if (formData.value.projectPlanSubs.filter(sub => sub.projectSubId == item.id).length > 0) { - var subTemp = formData.value.projectPlanSubs.find(sub => sub.projectSubId == item.id) + formData.value.projectOrderSubs.forEach((item) => { + if (formData.value.projectPlanSubs.filter((sub) => sub.projectSubId == item.id).length > 0) { + var subTemp = formData.value.projectPlanSubs.find((sub) => sub.projectSubId == item.id) item.projectSubId = subTemp.projectSubId item.projectSubCode = subTemp.projectSubCode } }) } // 保存物料信息 -const saveMaterials = async () =>{ - formData.value.matItemDOList.forEach(item => { +const saveMaterials = async () => { + formData.value.matItemDOList.forEach((item) => { var subData = item as unknown as MaterialPlanDetailApi.MaterialPlanDetailVO subData.materialId = item.matId subData.projectMaterialPlanId = formData.value.id @@ -501,24 +498,23 @@ const saveMaterials = async () =>{ MaterialPlanDetailApi.updateMaterialPlanDetail(subData) } }) - formData.value.matItemRemoveList.forEach(item =>{ + formData.value.matItemRemoveList.forEach((item) => { if (item.id != undefined) { MaterialPlanDetailApi.deleteMaterialPlanDetail(item.id) } - }) } -const closeForm = async () =>{ +const closeForm = async () => { router.push({ path: '/purchase/materialplan' }) - tagsViewStore.delVisitedView(router.currentRoute.value); + tagsViewStore.delVisitedView(router.currentRoute.value) } -const deleteForm = async () =>{ - // 提示用户是否保存入库信息 - await message.confirm('确认删除当前物料需求计划?') +const deleteForm = async () => { + // 提示用户是否保存入库信息 + await message.confirm('确认删除当前物料需求计划?') - await MaterialPlanApi.deleteMaterialPlan(formData.value.id) - router.push({ path: '/purchase/materialplan' }) - tagsViewStore.delVisitedView(router.currentRoute.value); + await MaterialPlanApi.deleteMaterialPlan(formData.value.id) + router.push({ path: '/purchase/materialplan' }) + tagsViewStore.delVisitedView(router.currentRoute.value) } // 保存按钮数据提交 const saveForm = async () => { @@ -549,13 +545,13 @@ const saveForm = async () => { } } // 送审按钮数据提交 -const submitForm = async () => { - if(formData.value.matItemDOList.length ==0){ +const submitForm = async () => { + if (formData.value.matItemDOList.length == 0) { message.alertWarning('请添加物料信息!') return } - // 校验子表单 - try { + // 校验子表单 + try { await subFormRef.value.validate() } catch (e) { return @@ -571,7 +567,7 @@ const projectInit = ref() const queryParams = reactive({ pageNo: 1, pageSize: 99, - projectMaterialPlanId: query.id, + projectMaterialPlanId: query.id }) // 页面数据加载初始化 onMounted(async () => { @@ -587,10 +583,11 @@ onMounted(async () => { formData.value.projectCode = projectInit.value.code // 获取物料需求计划的物料列表 - formData.value.matItemDOList = (await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams)).list - formData.value.matItemDOList.forEach(item=>{ - matList.value.push({id:item.matId,name:item.matName}) - + formData.value.matItemDOList = ( + await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams) + ).list + formData.value.matItemDOList.forEach((item) => { + matList.value.push({ id: item.matId, name: item.matName }) }) formData.value.matItemRemoveList = [] // 获取生产计划单中子项目编号 @@ -608,4 +605,15 @@ onMounted(async () => { //用户信息,用于底部数据展示 userList.value = await UserApi.getSimpleUserList() }) - \ No newline at end of file + +//接收物料传递的数据 +const handleSelectedMaterial = (currentIndex: number, newValue: any) => { + // console.log(currentIndex,'接收物料对应的数据:', newValue) + formData.value.matItemDOList[currentIndex].matId = newValue?.id + formData.value.matItemDOList[currentIndex].matName = newValue?.name + formData.value.matItemDOList[currentIndex].matCode = newValue?.code + formData.value.matItemDOList[currentIndex].matSpec = newValue?.spec + formData.value.matItemDOList[currentIndex].matType = newValue?.materialType + formData.value.matItemDOList[currentIndex].matUnit = newValue?.unit +} + diff --git a/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorder/detail.vue b/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorder/detail.vue index 94dca278..3ecf6677 100644 --- a/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorder/detail.vue +++ b/mes-ui/mes-ui-admin-vue3/src/views/heli/purchaseorder/detail.vue @@ -154,19 +154,20 @@ v-loading="subFormLoading" label-width="0"> - - + + - +