【采购管理】物料需求计划及采购订单替换物料远程搜索

pull/4/head
qiuhongwu 8 months ago
parent 46b1e5c28b
commit 68326e7250

@ -1,17 +1,6 @@
<template> <template>
<!-- 物料选择 --> <!-- 物料选择 -->
<el-select <el-select v-model="valueName" placeholder="请输入物料" :remote-method="remoteMethod" remote-show-suffix remote clearable reserve-keyword filterable :loading="Loading" @change="onSelectChange" @visible-change="onVisibleChange">
v-model="valueName"
placeholder="请输入物料"
:remote-method="remoteMethod"
remote-show-suffix
remote
clearable
reserve-keyword
filterable
:loading="Loading"
@change="onSelectChange"
>
<el-option v-for="item in materialSelectList" :key="item.id" :label="item.code+' '+item.name" :value="item.id" /> <el-option v-for="item in materialSelectList" :key="item.id" :label="item.code+' '+item.name" :value="item.id" />
</el-select> </el-select>
</template> </template>
@ -25,46 +14,92 @@ const emit = defineEmits(['update:newValue'])
const materialList = ref<MaterialApi.MaterialVO[]>([]) // const materialList = ref<MaterialApi.MaterialVO[]>([]) //
const materialSelectList = ref<MaterialApi.MaterialVO[]>([]) const materialSelectList = ref<MaterialApi.MaterialVO[]>([])
const Loading = ref(false) 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 = { const queryParams = {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
code: undefined, code: undefined,
brief: 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 { try {
if (query) {
queryParams.codeAndName = query
const data = await MaterialApi.getMaterialPage(queryParams) const data = await MaterialApi.getMaterialPage(queryParams)
materialList.value = data.list materialList.value = data.list
// materialSelectList.value = data.list
remoteMethod('') } else {
gitlist()
}
} catch (error) {
console.error(error)
} finally {
materialSelectLoading.value = false
}
}
//
onMounted(async () => {
try {
await gitlist()
} catch (error) { } catch (error) {
console.error(error) console.error(error)
} }
}) })
const remoteMethod = (query: any) => { const onVisibleChange = (isVisible: boolean) => {
if (query) { if (!isVisible) {
Loading.value = true //
setTimeout(() => { queryParams.codeAndName = undefined
Loading.value = false materialList.value = []
materialSelectList.value = materialList.value materialSelectList.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 onSelectChange = (newValue: any) => { 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) emit('update:newValue', valueNameObject.value)
} }
</script> </script>

@ -65,6 +65,7 @@ const gitlist = async () => {
for (const user of userList.value) { for (const user of userList.value) {
if (user.id === initialUser.id) { if (user.id === initialUser.id) {
propsmodelValue.value=initialUser.username+' '+initialUser.nickname propsmodelValue.value=initialUser.username+' '+initialUser.nickname
foundInitialUserInList = true foundInitialUserInList = true
break break
} }
@ -73,6 +74,7 @@ const gitlist = async () => {
if (!foundInitialUserInList && !userSelectList.value.length) { if (!foundInitialUserInList && !userSelectList.value.length) {
userList.value.unshift(initialUser) userList.value.unshift(initialUser)
propsmodelValue.value=initialUser.username+' '+initialUser.nickname propsmodelValue.value=initialUser.username+' '+initialUser.nickname
} }
// loading.value = false // loading.value = false
} }

@ -25,8 +25,7 @@
<el-row> <el-row>
<el-col :span="80"> <el-col :span="80">
<el-form-item label="备注" prop="description"> <el-form-item label="备注" prop="description">
<el-input class="!w-713px" type="textarea" v-model="formData.description" show-word-limit <el-input class="!w-713px" type="textarea" v-model="formData.description" show-word-limit maxlength="200" disabled />
maxlength="200" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -36,8 +35,7 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="单据日期" prop="createTime"> <el-form-item label="单据日期" prop="createTime">
<el-date-picker class="!w-265px" v-model="formData.createTime" value-format="x" placeholder="单据日期" <el-date-picker class="!w-265px" v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled />
disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -72,8 +70,7 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="单据状态" prop="status"> <el-form-item label="单据状态" prop="status">
<el-select v-model="formData.status" placeholder="单据状态" clearable class="!w-265px" disabled> <el-select v-model="formData.status" placeholder="单据状态" clearable class="!w-265px" disabled>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -96,34 +93,32 @@
<el-col> <el-col>
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem" v-if="false"></el-button> <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem" v-if="false"></el-button>
</el-col> </el-col>
<el-form ref="subFormRef" :model="formData.matItemDOList" :rules="subFormRules" <el-form ref="subFormRef" :model="formData.matItemDOList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table"> <el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column type="index" label="序号" :width="80" /> <el-table-column type="index" label="序号" :width="80" />
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" /> <!-- <el-table-column prop="matCode" label="物料编码" min-width="120" align="center" /> -->
<el-table-column prop="matId" min-width="140" align="center"> <el-table-column prop="matId" min-width="140" align="center">
<template #header> <span class="hl-table_header">*</span>物料名称 </template> <template #header> <span class="hl-table_header">*</span>物料编码/名称 </template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!">
<el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatNameSearch" disabled <!-- <el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatNameSearch" disabled
remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading" remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading"
@change="(val) => handleMatName(scope, val)" class="!w-180px"> @change="(val) => handleMatName(scope, val)" class="!w-180px">
<el-option v-for="item in matList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in matList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select> -->
<MaterialSelect v-model="scope.row.matId" disabled @update:newValue="handleSelectedMaterial(scope.$index,$event)" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="matType" label="物料类型" min-width="120" align="center"> <el-table-column prop="matType" label="物料类型" min-width="120" align="center">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType" <dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType" v-if="scope.row.matType ? true : false" />
v-if="scope.row.matType ? true : false" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" /> <el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matUnit" label="系统单位" min-width="120" align="center"> <el-table-column prop="matUnit" label="系统单位" min-width="120" align="center">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" <dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" v-if="scope.row.matUnit ? true : false" />
v-if="scope.row.matUnit ? true : false" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="requireAmount" min-width="120" align="center"> <el-table-column prop="requireAmount" min-width="120" align="center">
@ -138,8 +133,7 @@
<template #header> <span class="hl-table_header">*</span>需求到货日期 </template> <template #header> <span class="hl-table_header">*</span>需求到货日期 </template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.requireArriveTime`" :rules="subFormRules.requireArriveTime" class="mb-0px!"> <el-form-item :prop="`${$index}.requireArriveTime`" :rules="subFormRules.requireArriveTime" class="mb-0px!">
<el-date-picker class="!w-265px" v-model="row.requireArriveTime" type="date" value-format="x" <el-date-picker class="!w-265px" v-model="row.requireArriveTime" type="date" value-format="x" placeholder="需求到货日期" disabled />
placeholder="需求到货日期" disabled/>
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
@ -148,8 +142,7 @@
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.projectSubId`" :rules="subFormRules.projectSubId" class="mb-0px!"> <el-form-item :prop="`${$index}.projectSubId`" :rules="subFormRules.projectSubId" class="mb-0px!">
<el-select class="!w-265px" v-model="row.projectSubId" filterable clearable disabled> <el-select class="!w-265px" v-model="row.projectSubId" filterable clearable disabled>
<el-option v-for="dict in formData.projectOrderSubs" :key="dict.projectSubId" <el-option v-for="dict in formData.projectOrderSubs" :key="dict.projectSubId" :label="dict.projectSubCode" :value="dict.projectSubId" />
:label="dict.projectSubCode" :value="dict.projectSubId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</template> </template>
@ -182,12 +175,10 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col> <el-col>
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl" <el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl" :headers="{
:headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" }" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader">
:on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader">
<el-button type="primary" v-if="false"> <el-button type="primary" v-if="false">
<Icon icon="ep:upload-filled" />上传 <Icon icon="ep:upload-filled" />上传
</el-button> </el-button>
@ -204,12 +195,10 @@
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template #default="scope"> <template #default="scope">
<el-button link type="danger" size="small" v-if="false" <el-button link type="danger" size="small" v-if="false" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除 删除
</el-button> </el-button>
<el-button link type="primary" size="small" <el-button link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)">
@click="downloadAttachment(scope.row.name, scope.row.url)">
下载 下载
</el-button> </el-button>
</template> </template>
@ -283,6 +272,7 @@ import download from '@/utils/download'
import { getAccessToken, getTenantId } from '@/utils/auth' import { getAccessToken, getTenantId } from '@/utils/auth'
import { dateFormatter, formatDate } from '@/utils/formatTime' import { dateFormatter, formatDate } from '@/utils/formatTime'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
const reload = inject('reload') const reload = inject('reload')
const { t } = useI18n() // const { t } = useI18n() //
@ -308,13 +298,13 @@ const formData = ref({
attachments: [] attachments: []
}) })
const formRules = reactive({ const formRules = reactive({
projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }], projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }]
}) })
const subFormRules = reactive({ const subFormRules = reactive({
matId: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }], matId: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }],
requireAmount: [{ required: true, message: '需求数量不能为空', trigger: 'blur' }], requireAmount: [{ required: true, message: '需求数量不能为空', trigger: 'blur' }],
requireArriveTime: [{ 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 formRef = ref() // Ref
const subFormRef = ref() // Ref const subFormRef = ref() // Ref
@ -405,7 +395,6 @@ const downloadAttachment = async (name, url) => {
} }
// ==================== ======================================= // ==================== =======================================
// //
const getMatList = async (name) => { const getMatList = async (name) => {
// //
@ -419,7 +408,6 @@ const getMatList = async (name) => {
} }
const dataMat = await MaterialApi.getMaterialPage(matParams) const dataMat = await MaterialApi.getMaterialPage(matParams)
matList.value = dataMat.list matList.value = dataMat.list
} }
const matList = ref<MaterialApi.MaterialVO[]>([]) // const matList = ref<MaterialApi.MaterialVO[]>([]) //
const matSelectLoading = ref(false) const matSelectLoading = ref(false)
@ -463,8 +451,9 @@ const handleDelete2 = (index: number) => {
} }
const handleInitPlanSub = async () => { const handleInitPlanSub = async () => {
// //
formData.value.projectOrderSubs = formData.value.projectOrderSubs = await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(
await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(formData.value.projectId) formData.value.projectId
)
// //
const queryParams = reactive({ const queryParams = reactive({
@ -473,12 +462,11 @@ const handleInitPlanSub = async () => {
projectPlanId: query.id projectPlanId: query.id
}) })
formData.value.projectPlanSubs = formData.value.projectPlanSubs = (await PlanSubApi.getPlanSubPage(queryParams)).list
(await PlanSubApi.getPlanSubPage(queryParams)).list
formData.value.projectOrderSubs.forEach(item => { formData.value.projectOrderSubs.forEach((item) => {
if (formData.value.projectPlanSubs.filter(sub => sub.projectSubId == item.id).length > 0) { if (formData.value.projectPlanSubs.filter((sub) => sub.projectSubId == item.id).length > 0) {
var subTemp = formData.value.projectPlanSubs.find(sub => sub.projectSubId == item.id) var subTemp = formData.value.projectPlanSubs.find((sub) => sub.projectSubId == item.id)
item.projectSubId = subTemp.projectSubId item.projectSubId = subTemp.projectSubId
item.projectSubCode = subTemp.projectSubCode item.projectSubCode = subTemp.projectSubCode
} }
@ -486,7 +474,7 @@ const handleInitPlanSub = async () => {
} }
// //
const saveMaterials = async () => { const saveMaterials = async () => {
formData.value.matItemDOList.forEach(item => { formData.value.matItemDOList.forEach((item) => {
var subData = item as unknown as MaterialPlanDetailApi.MaterialPlanDetailVO var subData = item as unknown as MaterialPlanDetailApi.MaterialPlanDetailVO
subData.materialId = item.matId subData.materialId = item.matId
subData.projectMaterialPlanId = formData.value.id subData.projectMaterialPlanId = formData.value.id
@ -496,11 +484,10 @@ const saveMaterials = async () =>{
MaterialPlanDetailApi.updateMaterialPlanDetail(subData) MaterialPlanDetailApi.updateMaterialPlanDetail(subData)
} }
}) })
formData.value.matItemRemoveList.forEach(item =>{ formData.value.matItemRemoveList.forEach((item) => {
if (item.id != undefined) { if (item.id != undefined) {
MaterialPlanDetailApi.deleteMaterialPlanDetail(item.id) MaterialPlanDetailApi.deleteMaterialPlanDetail(item.id)
} }
}) })
} }
// //
@ -554,7 +541,7 @@ const projectInit = ref()
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 99, pageSize: 99,
projectMaterialPlanId: query.id, projectMaterialPlanId: query.id
}) })
// //
onMounted(async () => { onMounted(async () => {
@ -570,10 +557,11 @@ onMounted(async () => {
formData.value.projectCode = projectInit.value.code formData.value.projectCode = projectInit.value.code
// //
formData.value.matItemDOList = (await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams)).list formData.value.matItemDOList = (
formData.value.matItemDOList.forEach(item=>{ await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams)
).list
formData.value.matItemDOList.forEach((item) => {
matList.value.push({ id: item.matId, name: item.matName }) matList.value.push({ id: item.matId, name: item.matName })
}) })
formData.value.matItemRemoveList = [] formData.value.matItemRemoveList = []
// //

@ -25,8 +25,7 @@
<el-row> <el-row>
<el-col :span="80"> <el-col :span="80">
<el-form-item label="备注" prop="description"> <el-form-item label="备注" prop="description">
<el-input class="!w-713px" type="textarea" v-model="formData.description" show-word-limit <el-input class="!w-713px" type="textarea" v-model="formData.description" show-word-limit maxlength="200" />
maxlength="200" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -36,8 +35,7 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="单据日期" prop="createTime"> <el-form-item label="单据日期" prop="createTime">
<el-date-picker class="!w-265px" v-model="formData.createTime" value-format="x" placeholder="单据日期" <el-date-picker class="!w-265px" v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled />
disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -72,8 +70,7 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="单据状态" prop="status"> <el-form-item label="单据状态" prop="status">
<el-select v-model="formData.status" placeholder="单据状态" clearable class="!w-265px" disabled> <el-select v-model="formData.status" placeholder="单据状态" clearable class="!w-265px" disabled>
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
:key="dict.value" :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -96,34 +93,33 @@
<el-col> <el-col>
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"></el-button> <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"></el-button>
</el-col> </el-col>
<el-form ref="subFormRef" :model="formData.matItemDOList" :rules="subFormRules" <el-form ref="subFormRef" :model="formData.matItemDOList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table"> <el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column type="index" label="序号" :width="80" /> <el-table-column type="index" label="序号" :width="80" />
<el-table-column prop="matCode" label="物料编码" min-width="120" align="center" /> <!-- <el-table-column prop="matCode" label="物料编码" min-width="120" align="center" /> -->
<el-table-column prop="matId" min-width="140" align="center"> <el-table-column prop="matId" min-width="140" align="center">
<template #header> <span class="hl-table_header">*</span>物料名称 </template> <template #header> <span class="hl-table_header">*</span>物料编码/名称 </template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!">
<el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatNameSearch" <!-- <el-select v-model="scope.row.matId" placeholder="物料编码/名称" :remote-method="remoteMatNameSearch"
remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading" remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading"
@change="(val) => handleMatName(scope, val)" class="!w-180px"> @change="(val) => handleMatName(scope, val)" class="!w-180px">
<el-option v-for="item in matList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in matList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select> -->
<MaterialSelect v-model="scope.row.matId" @update:newValue="handleSelectedMaterial(scope.$index,$event)" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="matType" label="物料类型" min-width="120" align="center"> <el-table-column prop="matType" label="物料类型" min-width="120" align="center">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType" <dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType" v-if="scope.row.matType ? true : false" />
v-if="scope.row.matType ? true : false" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" /> <el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
<el-table-column prop="matUnit" label="系统单位" min-width="120" align="center"> <el-table-column prop="matUnit" label="系统单位" min-width="120" align="center">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" <dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" v-if="scope.row.matUnit ? true : false" />
v-if="scope.row.matUnit ? true : false" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="requireAmount" min-width="120" align="center"> <el-table-column prop="requireAmount" min-width="120" align="center">
@ -138,8 +134,7 @@
<template #header> <span class="hl-table_header">*</span>需求到货日期 </template> <template #header> <span class="hl-table_header">*</span>需求到货日期 </template>
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.requireArriveTime`" :rules="subFormRules.requireArriveTime" class="mb-0px!"> <el-form-item :prop="`${$index}.requireArriveTime`" :rules="subFormRules.requireArriveTime" class="mb-0px!">
<el-date-picker class="!w-265px" v-model="row.requireArriveTime" type="date" value-format="x" <el-date-picker class="!w-265px" v-model="row.requireArriveTime" type="date" value-format="x" placeholder="需求到货日期" />
placeholder="需求到货日期" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
@ -148,8 +143,7 @@
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-form-item :prop="`${$index}.projectSubId`" :rules="subFormRules.projectSubId" class="mb-0px!"> <el-form-item :prop="`${$index}.projectSubId`" :rules="subFormRules.projectSubId" class="mb-0px!">
<el-select class="!w-265px" v-model="row.projectSubId" filterable clearable> <el-select class="!w-265px" v-model="row.projectSubId" filterable clearable>
<el-option v-for="dict in formData.projectOrderSubs" :key="dict.projectSubId" <el-option v-for="dict in formData.projectOrderSubs" :key="dict.projectSubId" :label="dict.projectSubCode" :value="dict.projectSubId" />
:label="dict.projectSubCode" :value="dict.projectSubId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</template> </template>
@ -182,12 +176,10 @@
<el-col> <el-col>
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-col> <el-col>
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl" <el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl" :headers="{
:headers="{
Authorization: 'Bearer ' + getAccessToken(), Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId() 'tenant-id': getTenantId()
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" }" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader">
:on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader">
<el-button type="primary"> <el-button type="primary">
<Icon icon="ep:upload-filled" />上传 <Icon icon="ep:upload-filled" />上传
</el-button> </el-button>
@ -204,12 +196,10 @@
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template #default="scope"> <template #default="scope">
<el-button link type="danger" size="small" <el-button link type="danger" size="small" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
删除 删除
</el-button> </el-button>
<el-button link type="primary" size="small" <el-button link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)">
@click="downloadAttachment(scope.row.name, scope.row.url)">
下载 下载
</el-button> </el-button>
</template> </template>
@ -286,14 +276,15 @@ import download from '@/utils/download'
import { getAccessToken, getTenantId } from '@/utils/auth' import { getAccessToken, getTenantId } from '@/utils/auth'
import { dateFormatter, formatDate } from '@/utils/formatTime' import { dateFormatter, formatDate } from '@/utils/formatTime'
import { useUserStore } from '@/store/modules/user' 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 reload = inject('reload')
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const { query } = useRoute() const { query } = useRoute()
const router = useRouter() const router = useRouter()
const tagsViewStore = useTagsViewStore(); const tagsViewStore = useTagsViewStore()
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
@ -313,13 +304,13 @@ const formData = ref({
attachments: [] attachments: []
}) })
const formRules = reactive({ const formRules = reactive({
projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }], projectPlanId: [{ required: true, message: '生产计划单号不能为空', trigger: 'blur' }]
}) })
const subFormRules = reactive({ const subFormRules = reactive({
matId: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }], matId: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }],
requireAmount: [{ required: true, message: '需求数量不能为空', trigger: 'blur' }], requireAmount: [{ required: true, message: '需求数量不能为空', trigger: 'blur' }],
requireArriveTime: [{ 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 formRef = ref() // Ref
const subFormRef = ref() // Ref const subFormRef = ref() // Ref
@ -410,41 +401,43 @@ const downloadAttachment = async (name, url) => {
} }
// ==================== ======================================= // ==================== =======================================
// //
const getMatList = async (name) => { // const getMatList = async (name) => {
// // //
let matParams = { // let matParams = {
pageNo: 1, // pageNo: 1,
pageSize: 10, // pageSize: 10,
status: '1' // status: '1'
} // }
if (name.length > 0) { // if (name.length > 0) {
matParams.name = name // matParams.name = name
} // }
const dataMat = await MaterialApi.getMaterialPage(matParams) // const dataMat = await MaterialApi.getMaterialPage(matParams)
matList.value = dataMat.list // matList.value = dataMat.list
// }
} // const matList = ref<MaterialApi.MaterialVO[]>([]) //
const matList = ref<MaterialApi.MaterialVO[]>([]) // // const matSelectLoading = ref(false)
const matSelectLoading = ref(false) // const remoteMatNameSearch = async (name) => {
const remoteMatNameSearch = async (name) => { // matSelectLoading.value = true
matSelectLoading.value = true // //
// // await getMatList(name)
await getMatList(name) // matSelectLoading.value = false
matSelectLoading.value = false // }
} // const handleMatName = async (scope, matid) => {
const handleMatName = async (scope, matid) => { // scope.row.matId = matList.value.find((item) => item.id === matid)?.id
scope.row.matId = matList.value.find((item) => item.id === matid)?.id // scope.row.matName = matList.value.find((item) => item.id === matid)?.name
scope.row.matName = matList.value.find((item) => item.id === matid)?.name // scope.row.matCode = matList.value.find((item) => item.id === matid)?.code
scope.row.matCode = matList.value.find((item) => item.id === matid)?.code // scope.row.matSpec = matList.value.find((item) => item.id === matid)?.spec
scope.row.matSpec = matList.value.find((item) => item.id === matid)?.spec // scope.row.matType = matList.value.find((item) => item.id === matid)?.materialType
scope.row.matType = matList.value.find((item) => item.id === matid)?.materialType // scope.row.matUnit = matList.value.find((item) => item.id === matid)?.unit
scope.row.matUnit = matList.value.find((item) => item.id === matid)?.unit // }
}
// //
const onAddItem = () => { const onAddItem = () => {
if (formData.value) {
if (!formData.value.matItemDOList) {
formData.value.matItemDOList = [] // matItemDOList
}
const newData = { const newData = {
// //
stockId: 0, stockId: 0,
@ -459,7 +452,11 @@ const onAddItem = () => {
projectSubId: '', projectSubId: '',
description: '' description: ''
} }
formData.value.matItemDOList.push(newData) formData.value.matItemDOList.push(newData)
} else {
console.error('formData.value 或 formData.value.matItemDOList 未正确初始化')
}
} }
// //
const handleDelete2 = (index: number) => { const handleDelete2 = (index: number) => {
@ -468,8 +465,9 @@ const handleDelete2 = (index: number) => {
} }
const handleInitPlanSub = async () => { const handleInitPlanSub = async () => {
// //
formData.value.projectOrderSubs = formData.value.projectOrderSubs = await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(
await ProjectOrderApi.getProjectOrderSubListByProjectOrderId(formData.value.projectId) formData.value.projectId
)
// //
const queryParams = reactive({ const queryParams = reactive({
@ -478,12 +476,11 @@ const handleInitPlanSub = async () => {
projectPlanId: query.id projectPlanId: query.id
}) })
formData.value.projectPlanSubs = formData.value.projectPlanSubs = (await PlanSubApi.getPlanSubPage(queryParams)).list
(await PlanSubApi.getPlanSubPage(queryParams)).list
formData.value.projectOrderSubs.forEach(item => { formData.value.projectOrderSubs.forEach((item) => {
if (formData.value.projectPlanSubs.filter(sub => sub.projectSubId == item.id).length > 0) { if (formData.value.projectPlanSubs.filter((sub) => sub.projectSubId == item.id).length > 0) {
var subTemp = formData.value.projectPlanSubs.find(sub => sub.projectSubId == item.id) var subTemp = formData.value.projectPlanSubs.find((sub) => sub.projectSubId == item.id)
item.projectSubId = subTemp.projectSubId item.projectSubId = subTemp.projectSubId
item.projectSubCode = subTemp.projectSubCode item.projectSubCode = subTemp.projectSubCode
} }
@ -491,7 +488,7 @@ const handleInitPlanSub = async () => {
} }
// //
const saveMaterials = async () => { const saveMaterials = async () => {
formData.value.matItemDOList.forEach(item => { formData.value.matItemDOList.forEach((item) => {
var subData = item as unknown as MaterialPlanDetailApi.MaterialPlanDetailVO var subData = item as unknown as MaterialPlanDetailApi.MaterialPlanDetailVO
subData.materialId = item.matId subData.materialId = item.matId
subData.projectMaterialPlanId = formData.value.id subData.projectMaterialPlanId = formData.value.id
@ -501,16 +498,15 @@ const saveMaterials = async () =>{
MaterialPlanDetailApi.updateMaterialPlanDetail(subData) MaterialPlanDetailApi.updateMaterialPlanDetail(subData)
} }
}) })
formData.value.matItemRemoveList.forEach(item =>{ formData.value.matItemRemoveList.forEach((item) => {
if (item.id != undefined) { if (item.id != undefined) {
MaterialPlanDetailApi.deleteMaterialPlanDetail(item.id) MaterialPlanDetailApi.deleteMaterialPlanDetail(item.id)
} }
}) })
} }
const closeForm = async () => { const closeForm = async () => {
router.push({ path: '/purchase/materialplan' }) router.push({ path: '/purchase/materialplan' })
tagsViewStore.delVisitedView(router.currentRoute.value); tagsViewStore.delVisitedView(router.currentRoute.value)
} }
const deleteForm = async () => { const deleteForm = async () => {
// //
@ -518,7 +514,7 @@ const deleteForm = async () =>{
await MaterialPlanApi.deleteMaterialPlan(formData.value.id) await MaterialPlanApi.deleteMaterialPlan(formData.value.id)
router.push({ path: '/purchase/materialplan' }) router.push({ path: '/purchase/materialplan' })
tagsViewStore.delVisitedView(router.currentRoute.value); tagsViewStore.delVisitedView(router.currentRoute.value)
} }
// //
const saveForm = async () => { const saveForm = async () => {
@ -571,7 +567,7 @@ const projectInit = ref()
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 99, pageSize: 99,
projectMaterialPlanId: query.id, projectMaterialPlanId: query.id
}) })
// //
onMounted(async () => { onMounted(async () => {
@ -587,10 +583,11 @@ onMounted(async () => {
formData.value.projectCode = projectInit.value.code formData.value.projectCode = projectInit.value.code
// //
formData.value.matItemDOList = (await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams)).list formData.value.matItemDOList = (
formData.value.matItemDOList.forEach(item=>{ await MaterialPlanDetailApi.getMaterialPlanDetailPage(queryParams)
).list
formData.value.matItemDOList.forEach((item) => {
matList.value.push({ id: item.matId, name: item.matName }) matList.value.push({ id: item.matId, name: item.matName })
}) })
formData.value.matItemRemoveList = [] formData.value.matItemRemoveList = []
// //
@ -608,4 +605,15 @@ onMounted(async () => {
// //
userList.value = await UserApi.getSimpleUserList() userList.value = await UserApi.getSimpleUserList()
}) })
//
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
}
</script> </script>

@ -154,19 +154,20 @@
v-loading="subFormLoading" label-width="0"> v-loading="subFormLoading" label-width="0">
<el-table :data="formData.matItemDOList" class="hl-table"> <el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column type="index" label="序号" :width="80" /> <el-table-column type="index" label="序号" :width="80" />
<el-table-column prop="matId" min-width="140" align="center"> <el-table-column prop="matId" min-width="180" align="center">
<template #header> <span class="hl-table_header">*</span>物料编码 </template> <template #header> <span class="hl-table_header">*</span>物料编码/名称 </template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!">
<el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatNameSearch" <!-- <el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatNameSearch"
remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading" remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading"
@change="(val) => handleMatName(scope, val)" class="!w-180px" disabled> @change="(val) => handleMatName(scope, val)" class="!w-180px" disabled>
<el-option v-for="item in matList" :key="item.id" :label="item.code" :value="item.id" /> <el-option v-for="item in matList" :key="item.id" :label="item.code" :value="item.id" />
</el-select> </el-select> -->
<MaterialSelect v-model="scope.row.matId" disabled @update:newValue="handleSelectedMaterial(scope.$index,$event)" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="matName" label="物料名称" min-width="120" align="center" /> <!-- <el-table-column prop="matName" label="物料名称" min-width="120" align="center" /> -->
<el-table-column prop="matType" label="物料类型" min-width="120" align="center"> <el-table-column prop="matType" label="物料类型" min-width="120" align="center">
<template #default="scope"> <template #default="scope">
@ -341,6 +342,7 @@ import download from '@/utils/download'
import { getAccessToken, getTenantId } from '@/utils/auth' import { getAccessToken, getTenantId } from '@/utils/auth'
import { dateFormatter, formatDate } from '@/utils/formatTime' import { dateFormatter, formatDate } from '@/utils/formatTime'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue'
const reload = inject('reload') const reload = inject('reload')

@ -155,18 +155,19 @@
<el-table :data="formData.matItemDOList" class="hl-table"> <el-table :data="formData.matItemDOList" class="hl-table">
<el-table-column type="index" label="序号" :width="80" /> <el-table-column type="index" label="序号" :width="80" />
<el-table-column prop="matId" min-width="140" align="center"> <el-table-column prop="matId" min-width="140" align="center">
<template #header> <span class="hl-table_header">*</span>物料编码 </template> <template #header> <span class="hl-table_header">*</span>物料编码/名称 </template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.matId`" :rules="subFormRules.matId" class="mb-0px!">
<el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatNameSearch" <!-- <el-select v-model="scope.row.matId" placeholder="物料名称" :remote-method="remoteMatNameSearch"
remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading" remote-show-suffix remote clearable reserve-keyword filterable :loading="matSelectLoading"
@change="(val) => handleMatName(scope, val)" class="!w-180px"> @change="(val) => handleMatName(scope, val)" class="!w-180px">
<el-option v-for="item in matList" :key="item.id" :label="item.code" :value="item.id" /> <el-option v-for="item in matList" :key="item.id" :label="item.code" :value="item.id" />
</el-select> </el-select> -->
<MaterialSelect v-model="scope.row.matId" @update:newValue="handleSelectedMaterial(scope.$index,$event)" />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="matName" label="物料名称" min-width="120" align="center" /> <!-- <el-table-column prop="matName" label="物料名称" min-width="120" align="center" /> -->
<el-table-column prop="matType" label="物料类型" min-width="120" align="center"> <el-table-column prop="matType" label="物料类型" min-width="120" align="center">
<template #default="scope"> <template #default="scope">
@ -345,6 +346,7 @@ import { getAccessToken, getTenantId } from '@/utils/auth'
import { dateFormatter, formatDate } from '@/utils/formatTime' import { dateFormatter, formatDate } from '@/utils/formatTime'
import { useUserStore } from '@/store/modules/user' 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 reload = inject('reload')
@ -671,4 +673,15 @@ onMounted(async () => {
supplierInit.value = await SupplierApi.getSimpList() supplierInit.value = await SupplierApi.getSimpList()
}) })
//
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
}
</script> </script>
Loading…
Cancel
Save