|
|
|
@ -25,8 +25,7 @@
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="80">
|
|
|
|
|
<el-form-item label="备注" prop="description">
|
|
|
|
|
<el-input class="!w-713px" type="textarea" v-model="formData.description" show-word-limit
|
|
|
|
|
maxlength="200" />
|
|
|
|
|
<el-input class="!w-713px" type="textarea" v-model="formData.description" show-word-limit maxlength="200" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
@ -36,8 +35,7 @@
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item label="单据日期" prop="createTime">
|
|
|
|
|
<el-date-picker class="!w-265px" v-model="formData.createTime" value-format="x" placeholder="单据日期"
|
|
|
|
|
disabled />
|
|
|
|
|
<el-date-picker class="!w-265px" v-model="formData.createTime" value-format="x" placeholder="单据日期" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
@ -72,8 +70,7 @@
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item label="单据状态" prop="status">
|
|
|
|
|
<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)"
|
|
|
|
|
:key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
|
|
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_MATERIAL_PLAN_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
@ -96,34 +93,33 @@
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem">新增</el-button>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-form ref="subFormRef" :model="formData.matItemDOList" :rules="subFormRules"
|
|
|
|
|
v-loading="subFormLoading" label-width="0">
|
|
|
|
|
<el-form ref="subFormRef" :model="formData.matItemDOList" :rules="subFormRules" v-loading="subFormLoading" label-width="0">
|
|
|
|
|
<el-table :data="formData.matItemDOList" class="hl-table">
|
|
|
|
|
<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">
|
|
|
|
|
<template #header> <span class="hl-table_header">*</span>物料名称 </template>
|
|
|
|
|
<template #header> <span class="hl-table_header">*</span>物料编码/名称 </template>
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<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"
|
|
|
|
|
@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-select>
|
|
|
|
|
</el-select> -->
|
|
|
|
|
<MaterialSelect v-model="scope.row.matId" @update:newValue="handleSelectedMaterial(scope.$index,$event)" />
|
|
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="matType" label="物料类型" min-width="120" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType"
|
|
|
|
|
v-if="scope.row.matType ? true : false" />
|
|
|
|
|
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_TYPE" :value="scope.row.matType" v-if="scope.row.matType ? true : false" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" />
|
|
|
|
|
<el-table-column prop="matUnit" label="系统单位" min-width="120" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit"
|
|
|
|
|
v-if="scope.row.matUnit ? true : false" />
|
|
|
|
|
<dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" v-if="scope.row.matUnit ? true : false" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="requireAmount" min-width="120" align="center">
|
|
|
|
@ -138,8 +134,7 @@
|
|
|
|
|
<template #header> <span class="hl-table_header">*</span>需求到货日期 </template>
|
|
|
|
|
<template #default="{ row, $index }">
|
|
|
|
|
<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"
|
|
|
|
|
placeholder="需求到货日期" />
|
|
|
|
|
<el-date-picker class="!w-265px" v-model="row.requireArriveTime" type="date" value-format="x" placeholder="需求到货日期" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
@ -148,8 +143,7 @@
|
|
|
|
|
<template #default="{ row, $index }">
|
|
|
|
|
<el-form-item :prop="`${$index}.projectSubId`" :rules="subFormRules.projectSubId" class="mb-0px!">
|
|
|
|
|
<el-select class="!w-265px" v-model="row.projectSubId" filterable clearable>
|
|
|
|
|
<el-option v-for="dict in formData.projectOrderSubs" :key="dict.projectSubId"
|
|
|
|
|
:label="dict.projectSubCode" :value="dict.projectSubId" />
|
|
|
|
|
<el-option v-for="dict in formData.projectOrderSubs" :key="dict.projectSubId" :label="dict.projectSubCode" :value="dict.projectSubId" />
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
@ -182,12 +176,10 @@
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-card class="hl-incard">
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl"
|
|
|
|
|
:headers="{
|
|
|
|
|
<el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :limit="10" :action="uploadUrl" :headers="{
|
|
|
|
|
Authorization: 'Bearer ' + getAccessToken(),
|
|
|
|
|
'tenant-id': getTenantId()
|
|
|
|
|
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData"
|
|
|
|
|
:on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader">
|
|
|
|
|
}" name="files" :show-file-list="false" :auto-upload="false" :data="matUploadData" :on-change="matUploadChange" :on-error="UpError" class="upload-file-uploader">
|
|
|
|
|
<el-button type="primary">
|
|
|
|
|
<Icon icon="ep:upload-filled" />上传
|
|
|
|
|
</el-button>
|
|
|
|
@ -204,12 +196,10 @@
|
|
|
|
|
|
|
|
|
|
<el-table-column label="操作" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button link type="danger" size="small"
|
|
|
|
|
@click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
|
|
|
|
|
<el-button link type="danger" size="small" @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)">
|
|
|
|
|
删除
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button link type="primary" size="small"
|
|
|
|
|
@click="downloadAttachment(scope.row.name, scope.row.url)">
|
|
|
|
|
<el-button link type="primary" size="small" @click="downloadAttachment(scope.row.name, scope.row.url)">
|
|
|
|
|
下载
|
|
|
|
|
</el-button>
|
|
|
|
|
</template>
|
|
|
|
@ -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,41 +401,43 @@ 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<MaterialApi.MaterialVO[]>([]) // 物料列表
|
|
|
|
|
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<MaterialApi.MaterialVO[]>([]) // 物料列表
|
|
|
|
|
// 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 = () => {
|
|
|
|
|
if (formData.value) {
|
|
|
|
|
if (!formData.value.matItemDOList) {
|
|
|
|
|
formData.value.matItemDOList = [] // 确保matItemDOList被初始化为空数组
|
|
|
|
|
}
|
|
|
|
|
const newData = {
|
|
|
|
|
// 新数据的属性
|
|
|
|
|
stockId: 0,
|
|
|
|
@ -459,7 +452,11 @@ const onAddItem = () => {
|
|
|
|
|
projectSubId: '',
|
|
|
|
|
description: ''
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
formData.value.matItemDOList.push(newData)
|
|
|
|
|
} else {
|
|
|
|
|
console.error('formData.value 或 formData.value.matItemDOList 未正确初始化')
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//删除新增物料信息
|
|
|
|
|
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,12 +476,11 @@ 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
|
|
|
|
|
}
|
|
|
|
@ -491,7 +488,7 @@ const handleInitPlanSub = async () => {
|
|
|
|
|
}
|
|
|
|
|
// 保存物料信息
|
|
|
|
|
const saveMaterials = async () => {
|
|
|
|
|
formData.value.matItemDOList.forEach(item => {
|
|
|
|
|
formData.value.matItemDOList.forEach((item) => {
|
|
|
|
|
var subData = item as unknown as MaterialPlanDetailApi.MaterialPlanDetailVO
|
|
|
|
|
subData.materialId = item.matId
|
|
|
|
|
subData.projectMaterialPlanId = formData.value.id
|
|
|
|
@ -501,16 +498,15 @@ 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 () => {
|
|
|
|
|
router.push({ path: '/purchase/materialplan' })
|
|
|
|
|
tagsViewStore.delVisitedView(router.currentRoute.value);
|
|
|
|
|
tagsViewStore.delVisitedView(router.currentRoute.value)
|
|
|
|
|
}
|
|
|
|
|
const deleteForm = async () => {
|
|
|
|
|
// 提示用户是否保存入库信息
|
|
|
|
@ -518,7 +514,7 @@ const deleteForm = async () =>{
|
|
|
|
|
|
|
|
|
|
await MaterialPlanApi.deleteMaterialPlan(formData.value.id)
|
|
|
|
|
router.push({ path: '/purchase/materialplan' })
|
|
|
|
|
tagsViewStore.delVisitedView(router.currentRoute.value);
|
|
|
|
|
tagsViewStore.delVisitedView(router.currentRoute.value)
|
|
|
|
|
}
|
|
|
|
|
// 保存按钮数据提交
|
|
|
|
|
const saveForm = async () => {
|
|
|
|
@ -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=>{
|
|
|
|
|
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()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
//接收物料传递的数据
|
|
|
|
|
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>
|