<template> <el-card class="hl-card" style="position: relative"> <template #header> <span>编辑页</span> </template> <el-form ref="formRef" :model="formData" :rules="formRules" label-width="160px" v-loading="formLoading"> <!-- 基础信息 --> <el-card class="hl-card-info"> <template #header> <div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span> </template> <el-row> <el-col :span="24"> <el-row> <el-col :span="6"> <el-row> <el-col :span="24"> <el-form-item label="采购编号" prop="purchaseNo"> <el-input class="!w-265px" placeholder="系统自动生成" v-model="formData.purchaseNo" disabled /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="采购单类型" prop="purchaseType" :rules="formRules.purchaseType"> <el-select v-model="formData.purchaseType" clearable class="!w-265px" disabled> <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_ORDER_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="结算币种" prop="currencyType"> <el-select v-model="formData.currencyType" clearable class="!w-265px" disabled> <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_CURRENCY)" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </el-col> </el-row> <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 :disabled="formData.status == 2 || formData.status == 3" maxlength="200" /> </el-form-item> </el-col> </el-row> </el-col> <el-col :span="6"> <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-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="物料需求计划编号" prop="materialPlanNo"> <el-input class="!w-265px" v-model="formData.materialPlanNo" disabled /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="暂估价金额(元)" prop="estimatedPrice"> <el-input class="!w-265px" v-model="formData.estimatedPrice" placeholder="暂估价金额(元)" disabled /> </el-form-item> </el-col> </el-row> </el-col> <el-col :span="6"> <el-row> <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_PURCHASE_ORDER_STATUS)" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="采购物类型" prop="goodsType" :rules="formRules.goodsType"> <el-select v-model="formData.goodsType" placeholder="下拉选择" clearable class="!w-265px" disabled> <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PROJECT_PURCHASE_GOODS_TYPE)" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="实际价金额(元)" prop="actualPrice"> <el-input class="!w-265px" v-model="formData.actualPrice" placeholder="实际价金额(元)" disabled /> </el-form-item> </el-col> </el-row> </el-col> <el-col :span="6"> <el-row> <el-col :span="24"> <el-form-item label="供应商" prop="supplierId" :rules="formRules.supplierId"> <!-- <el-select v-model="formData.supplierId" placeholder="下拉选择" clearable class="!w-265px" disabled> <el-option v-for="dict in supplierInit" :key="dict.id" :label="dict.name" :value="dict.id" /> </el-select> --> <SupplierSelect v-model="formData.supplierId" disabled @update:new-value="handleSelectedSupplier" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="采购合同号" prop="contractNo"> <el-input class="!w-265px" v-model="formData.contractNo" placeholder="采购合同号" disabled/> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> <el-form-item label="税率(%)" prop="taxRatio"> <el-input class="!w-265px" v-model="formData.taxRatio" placeholder="税率" disabled /> </el-form-item> </el-col> </el-row> </el-col> </el-row> </el-col> </el-row> </el-card> <!-- 物料信息-非计划 --> <el-card class="hl-card-info" v-if="(formData.purchaseType == 2||formData.purchaseType == 3) && formData.goodsType == 1"> <template #header> <div class="hl-card-info-icona"></div><span class="hl-card-info-text">物料信息</span> </template> <el-row> <el-col> <el-card class="hl-incard"> <el-col> <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem" disabled>新增</el-button> </el-col> <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="序号" fixed align="center" width="60" /> <!-- <el-table-column prop="matId" fixed min-width="200" align="center"> <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!"> <MaterialSelect :key="scope.row.matId" v-model="scope.row.matId" v-bind:disabled="formData.status == 2 || formData.status == 3" @update:newValue="handleSelectedMaterial(scope.$index, $event)" /> </el-form-item> </template> </el-table-column> --> <!-- <el-table-column prop="matName" label="物料名称" min-width="120" align="center" /> --> <el-table-column prop="matName" label="物料名称" min-width="200" align="center" /> <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" />--> <!-- </template>--> </el-table-column> <el-table-column prop="matSpec" label="规格型号" min-width="120" align="center" /> <el-table-column prop="matRest" label="库存数量" min-width="100" align="center" /> <el-table-column prop="purchaseAmount" min-width="180" align="center"> <template #header><span class="hl-table_header">*</span>采购数量</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.purchaseAmount`" :rules="subFormRules.purchaseAmount" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.purchaseAmount" placeholder="采购数量" @change="handleEstimatedPrice" :min="0" :precision="2" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="estimatedPrice" min-width="200" align="center"> <template #header><span class="hl-table_header">*</span>暂估单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.estimatedPrice`" :rules="subFormRules.estimatedPrice" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.estimatedPrice" placeholder="暂估单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled/> </el-form-item> </template> </el-table-column> <el-table-column prop="actualPrice" min-width="200" align="center"> <template #header>实际单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.actualPrice`" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.actualPrice" placeholder="实际单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled /> </el-form-item> </template> </el-table-column> <el-table-column min-width="180" align="center"> <template #header> <span class="hl-table_header">*</span>预计到货日期 </template> <template #default="{ row, $index }"> <el-form-item :prop="`${$index}.arriveTime`" class="mb-0px!"> <el-date-picker v-model="row.arriveTime" type="date" value-format="x" placeholder="预计到货日期" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="matId" min-width="220" align="center" > <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!"> <!-- <MaterialSelect v-model="scope.row.matId" @update:newValue="handleSelectedMaterial(scope.$index, $event)" v-bind:disabled="ctrView || ctrSave" /> --> <el-input class="!w-265px" placeholder="物料编码" disabled v-model="scope.row.matCode" readonly> <!-- <template #append ><el-button @click="onAddItem" > <Icon icon="ep:search" class="mr-5px" /> </el-button></template> --> </el-input> </el-form-item> </template> </el-table-column> <el-table-column prop="matUnit" label="系统单位" min-width="100" align="center"> <!-- <template #default="scope">--> <!-- <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="description" min-width="180" label="备注" align="center"> <template #default="scope"> <el-input v-model="scope.row.description" disabled /> </template> </el-table-column> <el-table-column label="操作" fixed="right" align="center" min-width="100"> <template #default="scope"> <el-button link type="danger" size="small" @click.prevent="handleDelete2(scope.$index)" disabled> 删除 </el-button> </template> </el-table-column> </el-table> </el-form> </el-card> </el-col> </el-row> </el-card> <!-- 物料信息-计划 --> <el-card class="hl-card-info" v-if="formData.purchaseType == 1 && formData.goodsType == 1"> <template #header> <div class="hl-card-info-icona"></div><span class="hl-card-info-text">物料信息</span> </template> <el-row> <el-col> <el-card class="hl-incard"> <el-col> <el-button class="hl-addbutton" type="primary" size="large" @click="onAddItemOpen" disabled>新增</el-button> </el-col> <el-form ref="subMatPlanFormRef" :model="formData.matItemDOList" :rules="subMatPlanFormRules" v-loading="subFormLoading" label-width="0"> <el-table :data="formData.matItemDOList" class="hl-table"> <el-table-column type="index" label="序号" fixed align="center" min-width="60" /> <el-table-column prop="matId" fixed min-width="200" align="center"> <template #header> <span class="hl-table_header">*</span>物料编码/名称 </template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.matId`" :rules="subMatPlanFormRules.matId" class="mb-0px!"> <MaterialSelect :key="scope.row.matId" v-model="scope.row.matId" disabled @update:new-value="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="typeof scope.row.matUnit === 'number'"/> </template> </el-table-column> <el-table-column prop="matSpec" label="规格/型号" min-width="120" align="center" /> <el-table-column prop="requireAmount" label="需求数量" min-width="100" align="center" /> <el-table-column prop="matRest" label="库存数量" min-width="100" align="center" /> <el-table-column prop="purchaseAmount" min-width="180" align="center"> <template #header><span class="hl-table_header">*</span>采购数量</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.purchaseAmount`" :rules="subMatPlanFormRules.purchaseAmount" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.purchaseAmount" placeholder="采购数量" @change="handleEstimatedPrice" :min="0" :precision="2" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="estimatedPrice" min-width="200" align="center"> <template #header><span class="hl-table_header">*</span>暂估单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.estimatedPrice`" :rules="subMatPlanFormRules.estimatedPrice" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.estimatedPrice" placeholder="暂估单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="actualPrice" min-width="200" align="center"> <template #header>实际单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.actualPrice`" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.actualPrice" placeholder="实际单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled /> </el-form-item> </template> </el-table-column> <el-table-column min-width="180" align="center"> <template #header> <span class="hl-table_header">*</span>预计到货日期 </template> <template #default="{ row, $index }"> <el-form-item :prop="`${$index}.arriveTime`" class="mb-0px!"> <el-date-picker v-model="row.arriveTime" type="date" value-format="x" placeholder="预计到货日期" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="requireArriveTime" label="需求到货日期(最早)" min-width="200" align="center"> <template #default="scope"> {{ formatDate(scope.row.requireArriveTime, 'YYYY-MM-DD') }} </template> </el-table-column> <el-table-column prop="matUnit" label="系统单位" min-width="100" align="center"> <template #default="scope"> <dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.matUnit" v-if="typeof scope.row.matUnit === 'number'"/> </template> </el-table-column> <el-table-column prop="description" min-width="180" label="备注" align="center"> <template #default="scope"> <el-input v-model="scope.row.description" disabled /> </template> </el-table-column> <el-table-column label="操作" fixed="right" align="center" min-width="100"> <template #default="scope"> <el-button link type="danger" size="small" @click.prevent="handleDelete2(scope.$index)" disabled> 删除 </el-button> </template> </el-table-column> </el-table> </el-form> </el-card> </el-col> </el-row> </el-card> <!-- 加工件信息-非计划 --> <el-card class="hl-card-info" v-if="formData.purchaseType == 2 && formData.goodsType == 2"> <template #header> <div class="hl-card-info-icona"></div><span class="hl-card-info-text">采购明细</span> </template> <el-row> <el-col> <el-card class="hl-incard"> <el-col> <el-button class="hl-addbutton" type="primary" size="large" @click="onBoomAddItem" disabled>新增</el-button> </el-col> <el-form ref="subBoomFormRef" :model="formData.boomItemDOList" :rules="subBoomFormRules" v-loading="subBoomFormLoading" label-width="0"> <el-table :data="formData.boomItemDOList" class="hl-table" :stripe="true"> <el-table-column type="index" label="序号" fixed align="center" min-width="60" /> <el-table-column prop="boomName" min-width="180" label="零件名称" align="center"> <template #header><span class="hl-table_header">*</span>零件名称</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.boomName`" class="mb-0px!" :rules="subBoomFormRules.boomName"> <el-input v-model="scope.row.boomName" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="boomSpec" min-width="120" label="规格型号" align="center"> <template #default="scope"> <el-input v-model="scope.row.boomSpec" disabled /> </template> </el-table-column> <el-table-column prop="composition" min-width="180" label="材质" align="center"> <template #header><span class="hl-table_header">*</span>材质</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.composition`" :rules="subBoomFormRules.composition" class="mb-0px!"> <CompositionSelect v-model="scope.row.composition" disabled @update:new-value="(val) => { row.composition = val.id; }" /> </el-form-item> </template> </el-table-column> <el-table-column prop="boomPurchaseAmount" min-width="180" align="center"> <template #header><span class="hl-table_header">*</span>采购数量</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.boomPurchaseAmount`" :rules="subBoomFormRules.boomPurchaseAmount" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.boomPurchaseAmount" placeholder="采购数量" @change="handleEstimatedPrice" :min="0" :precision="2" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="boomEstimatedPrice" min-width="200" align="center"> <template #header><span class="hl-table_header">*</span>暂估单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.boomEstimatedPrice`" :rules="subBoomFormRules.boomEstimatedPrice" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.boomEstimatedPrice" placeholder="暂估单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="boomActualPrice" min-width="200" align="center"> <template #header>实际单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.boomActualPrice`" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.boomActualPrice" placeholder="实际单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled /> </el-form-item> </template> </el-table-column> <el-table-column min-width="180" align="center"> <template #header> <span class="hl-table_header">*</span>预计到货时间 </template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.boomArriveTime`" :rules="subBoomFormRules.boomArriveTime" class="mb-0px!" > <el-date-picker v-model="scope.row.boomArriveTime" type="date" value-format="x" placeholder="预计到货时间" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="boomUnit" label="系统单位" min-width="100" align="center"> <template #default="scope"> <el-select v-model="scope.row.boomUnit" placeholder="下拉选择" clearable disabled> <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </template> </el-table-column> <el-table-column prop="boomDescription" min-width="180" label="备注" align="center"> <template #default="scope"> <el-input v-model="scope.row.boomDescription" disabled/> </template> </el-table-column> <el-table-column label="操作" fixed="right" align="center" min-width="100"> <template #default="scope"> <el-button link type="danger" size="small" @click.prevent="handleDeleteBoom(scope.$index)" disabled> 删除 </el-button> </template> </el-table-column> </el-table> </el-form> </el-card> </el-col> </el-row> </el-card> <!-- 加工件信息-计划 --> <el-card class="hl-card-info" v-if="formData.purchaseType == 1 && formData.goodsType == 2"> <template #header> <div class="hl-card-info-icona"></div><span class="hl-card-info-text">采购明细</span> </template> <el-row> <el-col> <el-card class="hl-incard"> <el-col> <el-button class="hl-addbutton" type="primary" size="large" @click="onBoomAddItemOpen" disabled>新增</el-button> </el-col> <el-form ref="subBoomPlanFormRef" :model="formData.boomItemDOList" :rules="subBoomPlanFormRules" label-width="0"> <el-table :data="formData.boomItemDOList" class="hl-table"> <el-table-column type="index" label="序号" fixed align="center" min-width="60" /> <el-table-column prop="materialName" fixed label="零件名称" min-width="120" align="center" /> <!-- <el-table-column prop="boomName" fixed min-width="200" align="center"> <template #header> <span class="hl-table_header">*</span>零件名称 </template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.boomDetailId`" :rules="subMatPlanFormRules.boomDetailId" class="mb-0px!"> <MaterialSelect :key="scope.row.boomDetailId" v-model="scope.row.boomDetailId" disabled @update:new-value="handleSelectedBoomMaterial(scope.$index, $event)" /> </el-form-item> </template> </el-table-column> --> <el-table-column prop="boomSpec" label="规格型号" min-width="120" align="center" /> <el-table-column prop="compositionName" min-width="180" label="材质" align="center"> <!-- <template #header>材质</template> <template #default="{ row, $index }"> <el-form-item :prop="`${$index}.composition`" class="mb-0px!"> <CompositionSelect v-model="row.composition" disabled @update:new-value="(val) => { row.composition = val.id; }" /> </el-form-item> </template> --> </el-table-column> <el-table-column prop="boomAmount" label="需求数量" min-width="100" align="center" /> <el-table-column prop="purchaseAmount" min-width="180" align="center"> <template #header><span class="hl-table_header">*</span>采购数量</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.purchaseAmount`" :rules="subMatPlanFormRules.purchaseAmount" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.purchaseAmount" placeholder="采购数量" @change="handleEstimatedPrice" :min="0" :precision="2" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="estimatedPrice" min-width="200" align="center"> <template #header><span class="hl-table_header">*</span>暂估单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.estimatedPrice`" :rules="subMatPlanFormRules.estimatedPrice" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.estimatedPrice" placeholder="暂估单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled/> </el-form-item> </template> </el-table-column> <el-table-column prop="actualPrice" min-width="200" align="center"> <template #header>实际单价</template> <template #default="scope"> <el-form-item :prop="`${scope.$index}.actualPrice`" class="mb-0px!"> <el-input-number style="width: 100%" v-model="scope.row.actualPrice" placeholder="实际单价" @change="handleEstimatedPrice" :min="0" :precision="6" disabled /> </el-form-item> </template> </el-table-column> <el-table-column min-width="200" prop="arriveTime" align="center"> <template #header> <span class="hl-table_header">*</span>预计到货日期</template> <template #default="{ row, $index }"> <el-form-item :prop="`${$index}.arriveTime`" class="mb-0px!"> <el-date-picker v-model="row.arriveTime" type="date" value-format="x" placeholder="预计到货日期" disabled /> </el-form-item> </template> </el-table-column> <el-table-column prop="boomArriveDate" label="需求到货日期(最早)" min-width="200" align="center"> <template #default="scope"> {{ formatDate(scope.row.boomArriveDate, 'YYYY-MM-DD') }} </template> </el-table-column> <el-table-column prop="boomUnit" label="系统单位" min-width="100" align="center"> <template #default="scope"> <!-- <el-select v-model="scope.row.boomUnit" placeholder="下拉选择" clearable :disabled="formData.status == 2 || formData.status == 3">--> <!-- <el-option v-for="dict in getIntDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT)" :key="dict.value" :label="dict.label" :value="dict.value" />--> <!-- </el-select>--> <dict-tag :type="DICT_TYPE.HELI_MATERIAL_UNIT" :value="scope.row.boomUnit" v-if="scope.row.boomUnit ? true : false" /> </template> </el-table-column> <el-table-column prop="description" min-width="180" label="备注" align="center"> <template #default="scope"> <el-input v-model="scope.row.description" disabled /> </template> </el-table-column> <el-table-column label="操作" fixed="right" align="center" min-width="100"> <template #default="scope"> <el-button link type="danger" size="small" @click.prevent="handleDeleteBoom(scope.$index)" disabled> 删除 </el-button> </template> </el-table-column> </el-table> </el-form> </el-card> </el-col> </el-row> </el-card> <!-- 附件信息 --> <el-card class="hl-card-info"> <template #header> <div class="hl-card-info-icona"></div><span class="hl-card-info-text">附件信息</span> </template> <el-row> <el-col> <el-card class="hl-incard"> <el-col> <el-upload ref="matUploadRef" :file-list="matUploadFiles" multiple :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="handleError" :on-success="handleSuccess" :before-upload="before" class="upload-file-uploader"> <el-button type="primary" disabled> <Icon icon="ep:upload-filled" />上传 </el-button> </el-upload> </el-col> <el-table :data="formData.attachments" class="hl-table" v-loading.fullscreen.lock="uploading" element-loading-text="附件上传中..." element-loading-background="rgba(122, 122, 122, 0.6)"> <el-table-column prop="name" label="文件名称" align="center"> <!-- <template #default="scope"> <a :href="scope.row.url" target="_blank" style="color: #409eff">{{ scope.row.name }} </a> </template> --> </el-table-column> <el-table-column prop="createTime" align="center" label="上传日期" :formatter="dateFormatter" /> <el-table-column label="操作" align="center"> <template #default="scope"> <el-button link type="danger" size="small" disabled @click="handleDeleteAttachment(scope.$index, scope.row.businessFileType)"> 删除 </el-button> <el-button link type="primary" size="small" disabled @click="downloadAttachment(scope.row.name, scope.row.url)"> 下载 </el-button> </template> </el-table-column> </el-table> </el-card> </el-col> </el-row> </el-card> <!-- 系统信息 --> <el-card class="hl-card-info"> <template #header> <div class="hl-card-info-icona"></div><span class="hl-card-info-text">系统信息</span> </template> <el-row justify="center"> <el-col :span="8"> <el-form-item prop="creator" label="创建人"> {{ userList.find((user) => user.id == formData.creator)?.nickname }} </el-form-item> </el-col> <el-col :span="8"> <el-form-item prop="createTime" label="创建时间"> {{ formatDate(formData.createTime, 'YYYY-MM-DD HH:mm') }} </el-form-item> </el-col> </el-row> <el-row justify="center"> <el-col :span="8"> <el-form-item prop="submitUserId" label="送审人"> {{ userList.find((user) => user.id == formData.submitUserId)?.nickname }} </el-form-item> </el-col> <el-col :span="8"> <el-form-item prop="submitTime" label="送审时间"> {{ formatDate(formData.submitTime, 'YYYY-MM-DD HH:mm') }} </el-form-item> </el-col> </el-row> <el-row justify="center"> <el-col :span="8"> <el-form-item prop="auditor" label="审核人"> {{ userList.find((user) => user.id == formData.auditor)?.nickname }} </el-form-item> </el-col> <el-col :span="8"> <el-form-item prop="auditTime" label="审核时间"> {{ formatDate(formData.auditTime, 'YYYY-MM-DD HH:mm') }} </el-form-item> </el-col> </el-row> </el-card> </el-form> <div class="hl-footer text-center"> <el-button @click="closeForm" size="large">取 消</el-button> </div> </el-card> </template> <script setup lang="ts"> import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' import * as MaterialPlanApi from '@/api/heli/materialplan' import * as PurchaseOrderApi from '@/api/heli/purchaseorder' import * as PurchaseOrderMaterialApi from '@/api/heli/purchaseordermaterial' import * as PurchaseOrderBoomApi from '@/api/heli/purchaseorderboom' import * as UserApi from '@/api/system/user' import * as MaterialApi from '@/api/heli/material' import * as SupplierApi from '@/api/heli/supplier' import { deleteFile, downloadFile, getFilePage } from '@/api/infra/file' 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 MaterialSelect from '@/views/heli/hlvuestyle/materialSelect.vue' import CompositionSelect from '@/views/heli/hlvuestyle/compositionSelect.vue' import materials from '@/views/heli/storage/materials.vue' import MaterialDialog from '@/views/heli/purchaseorder/materialDialog.vue' import BoomDialog from '@/views/heli/purchaseorder/boomDialog.vue' import SupplierSelect from '@/views/heli/hlvuestyle/supplierSelect.vue' import {setFlagsFromString} from "node:v8"; const reload: any = inject('reload') const { t } = useI18n() // 国际化 const message = useMessage() // 消息弹窗 const { query } = useRoute() const router = useRouter() const tagsViewStore = useTagsViewStore() const dialogVisible = ref(false) // 弹窗的是否展示 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 const formData = ref({ id: undefined, purchaseNo: undefined, supplierId: undefined, contractNo: undefined, projectMaterialPlanNo: undefined, projectMaterialPlanId: undefined, goodsType: undefined, currencyType: undefined, estimatedPrice: undefined, actualPrice: undefined, taxRatio: undefined, receivingStatus: undefined, status: undefined, createTime: undefined, description: undefined, matItemDOList: [], matItemRemoveList: [], boomItemDOList: [], boomItemRemoveList: [], attachments: [], creator:undefined, submitUserId:undefined, submitTime:undefined, auditor:undefined, auditTime:undefined, }) const formRules = reactive({ currencyType: [{ required: true, message: '结算币种不能为空', trigger: 'blur' }] }) const subFormRules = reactive({ matId: [{ required: true, message: '物料编码不能为空', trigger: 'blur' }], estimatedPrice: [{ required: true, message: '暂估单价不能为空', trigger: 'blur' }], purchaseAmount: [{ required: true, message: '采购数量不能为空', trigger: 'blur' }] }) const subBoomFormRules = reactive({ boomName: [{ required: true, message: '零件名称不能为空', trigger: 'blur' }], composition: [{ required: true, message: '材质不能为空', trigger: 'blur' }], boomPurchaseAmount: [{ required: true, message: '采购数量不能为空', trigger: 'blur' }], boomEstimatedPrice: [{ required: true, message: '暂估单价不能为空', trigger: 'blur' }], boomArriveTime: [{ required: true, message: '预计到货时间不能为空', trigger: 'blur' }], }) const subMatPlanFormRules = reactive({ purchaseAmount: [{ required: true, message: '采购数量不能为空', trigger: 'blur' }], estimatedPrice: [{ required: true, message: '暂估单价不能为空', trigger: 'blur' }] }) const subBoomPlanFormRules = reactive({ boomName: [{ required: true, message: '零件名称不能为空', trigger: 'blur' }], boomPurchaseAmount: [{ required: true, message: '采购数量不能为空', trigger: 'blur' }], boomEstimatedPrice: [{ required: true, message: '暂估单价不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref const subFormRef = ref() // 表单 Ref const subMatPlanFormRef = ref() const subBoomPlanFormRef = ref() const subBoomFormRef = ref() const subBoomFormLoading = ref(false) const matOpenFormRef = ref() // const handleSelectedMaterialPlanMat = (arr) => { // arr.forEach((item) => { // if (formData.value.matItemDOList.filter((vo) => vo.matId == item.matId).length == 0) { // item.description = '' // formData.value.matItemDOList.push(item) // } // }) // } const handleSelectedMaterialPlanMat = (arr) => { // 创建一个 Set 来存储现有的 matId debugger const existingMatIds = new Set(formData.value.matItemDOList.map(vo => vo.matId)); arr.forEach((item) => { if (!existingMatIds.has(item.matId)) { item.description = ''; item.matType=Number(item.matType) item.matUnit=Number(item.matUnit) formData.value.matItemDOList.push(item); existingMatIds.add(item.matId); // 将新添加的 matId 加入 Set } }); }; const handleSelectedMaterialPlanBoom =async (arrBoom) => { //debugger const existingBoomDetailIds = new Set(formData.value.boomItemDOList.map(boom => boom.boomDetailId)); arrBoom.forEach((item) => { if (!existingBoomDetailIds.has(item.boomDetailId)) { item.description = ''; // formData.value.boomItemDOList.requireTime = item.boomArriveDate // formData.value.boomItemDOList.composition = item.compositionName // formData.value.boomItemDOList.boomName = item.materialName formData.value.boomItemDOList.push(item); existingBoomDetailIds.add(item.boomDetailId); // 将新添加的 boomDetailId 加入 Set } }); } // const getBoomList = async (arrBoom) => { // //formData.value.boomItemDOList = arrBoom // arrBoom.forEach((item) => { // if ( // formData.value.boomItemDOList.filter( // (boom) => // item.materialName == boom.materialName && item.projectSubCode == boom.projectSubCode // ).length == 0 // ) { // formData.value.boomItemDOList.push(item) // } // }) // } const handleEstimatedPrice = () => { let allEstimatePrice = 0 formData.value.matItemDOList.forEach((item) => { allEstimatePrice += ((item.purchaseAmount==null || item.purchaseAmount==undefined)?0:item.purchaseAmount)*((item.estimatedPrice==null || item.estimatedPrice==undefined)?0:item.estimatedPrice) }) formData.value.boomItemDOList.forEach((item) => { allEstimatePrice += ((item.purchaseAmount==null || item.purchaseAmount==undefined)?0:item.purchaseAmount)*((item.estimatedPrice==null || item.estimatedPrice==undefined)?0:item.estimatedPrice) }) formData.value.estimatedPrice = allEstimatePrice let allActualPrice = 0 formData.value.matItemDOList.forEach((item) => { allActualPrice += ((item.purchaseAmount==null || item.purchaseAmount==undefined)?0:item.purchaseAmount)*((item.actualPrice==null || item.actualPrice==undefined)?0:item.actualPrice) }) formData.value.boomItemDOList.forEach((item) => { allActualPrice += ((item.purchaseAmount==null || item.purchaseAmount==undefined)?0:item.purchaseAmount)*((item.actualPrice==null || item.actualPrice==undefined)?0:item.actualPrice) }) formData.value.actualPrice = allActualPrice } const handleActualPrice = () => { } // ====================附件信息 开始======================================= const uploadUrl = ref(import.meta.env.VITE_UPLOAD_BATCH_URL) const matUploadRef = ref() const uploading = ref(false) const matUploadFiles = ref<UploadUserFile[]>([]) const matUploadData = ref({ businessType: 'PURCHASEORDER', businessId: formData.value.id, businessFileType: 'MATERIAL' }) const matUploadChange = (file, files) => { matUploadFiles.value = files refreshAttachments(files, 'MATERIAL') } // 记录待上传、成功上传及失败上传的文件数量 const sumbefore = ref(0) const successfulUploadsCount = ref(0) const failedUploadsCount = ref(0) const failedAttachments = ref<UploadUserFile[]>([]) const failedAttachmentsName = ref() // / 处理单个文件上传成功的情况 const handleSuccess = (response: any, file: UploadUserFile) => { successfulUploadsCount.value++ // 更新附件信息等其他逻辑... // console.log('上传成功数量', successfulUploadsCount.value) } // 处理单个文件上传失败的情况 const handleError = (error: Error, file: UploadUserFile) => { failedUploadsCount.value++ if (failedUploadsCount.value > 0) { // 当有上传错误时 // 将失败的附件添加到failedAttachments.value数组中 failedAttachments.value.push(file) failedAttachmentsName.value = failedAttachments.value.map((value) => value.name) } // console.log('上传失败数量', failedUploadsCount.value) } // 文件上传前的钩子 const before = (rawFile) => { sumbefore.value++ } const refreshAttachments = (files, type) => { formData.value.attachments = formData.value.attachments.filter((value) => value.id) // 避免重复添加 const newFiles = files.filter( (file) => !formData.value.attachments.some((att) => att.name === file.name) ) for (let i = 0; i < newFiles.length; i++) { let file = newFiles[i] file.businessFileType = type file.createTime = new Date() formData.value.attachments.push(file) } // 排序 formData.value.attachments.sort((v1, v2) => v1.createTime - v2.createTime) // 文件上传一遍 上传总数等于要上传文件时 刷新页面 const sum = successfulUploadsCount.value + failedUploadsCount.value // console.log('上传总数', sum) // console.log('要上传文件数量', sumbefore.value) if (sumbefore.value !== sum && sumbefore.value !== 0 && sum !== 0) { // console.log('要上传文件数量不等于上传总数时等待',uploading.value) uploading.value = true } else if (sum == sumbefore.value && sumbefore.value > 0 && sum > 0) { // console.log('要上传文件数量等于上传总数 刷新页面并给出提示') if (failedUploadsCount.value > 0) { ElMessageBox.alert( // 使用错误信息作为提示内容 `文件名为:${failedAttachmentsName.value.join(' / ')}上传失败`, `文件格式不正确或网络问题 请您稍后再试`, { dangerouslyUseHTMLString: false, confirmButtonText: '知道了', center: true } ) } reload() uploading.value = false } } // 删除附件 const handleDeleteAttachment = async (index, type) => { const deletedAttachments = formData.value.attachments.splice(index, 1) for (let i = 0; i < deletedAttachments.length; i++) { const attachment = deletedAttachments[i] if (attachment.id) { // 清理已上传文件 await deleteFile(attachment.id) } // 清理待上传文件 matUploadFiles.value = matUploadFiles.value.filter((file1) => { return file1.name != attachment.name || file1.businessFileType != type }) } } // 下载文件 const downloadAttachment = async (name, url) => { if (url) { const data = await downloadFile(url) download.any(data, name) } } // ====================附件信息 结束======================================= // 远程数据筛选物料 const getMatList = async (name) => { // 获得物料列表 let matParams = { pageNo: 1, pageSize: 10, status: '1' } if (name.length > 0) { matParams.code = 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 = () => { matOpenFormRef.value.open(0,'group') // const newData = { // // 新数据的属性 // purchaseOrderId: 0, // matId: '', // matName: '', // matCode: '', // matType: '', // matSpec: '', // matUnit: '', // purchaseAmount: undefined, // estimatedPrice: undefined, // actualPrice: undefined, // arriveTime: '', // description: '' // } // formData.value.matItemDOList.push(newData) } const getList = async (arrMat) => { arrMat.forEach((row) => { if ( formData.value.matItemDOList.filter((item) => item.matId == row.matId).length == 0) { row.id = undefined formData.value.matItemDOList.push(row) } }) } const materialDialog = ref() const onAddItemOpen = () => { materialDialog.value.open(formData.value.projectMaterialPlanId) } const boomDialog = ref() const onBoomAddItemOpen = () => { boomDialog.value.open(formData.value.projectMaterialPlanId) } //删除新增物料信息 const handleDelete2 = (index: number) => { formData.value.matItemRemoveList.push(formData.value.matItemDOList[index]) formData.value.matItemDOList.splice(index, 1) handleActualPrice() handleEstimatedPrice() } // 保存物料信息 const saveMaterials = async () => { formData.value.matItemDOList.forEach(async (item) => { var subData = item as unknown as PurchaseOrderMaterialApi.PurchaseOrderMaterialVO subData.materialId = item.matId subData.purchaseOrderId = formData.value.id if (subData.id == undefined) { subData.id = await PurchaseOrderMaterialApi.createPurchaseOrderMaterial(subData) } else { await PurchaseOrderMaterialApi.updatePurchaseOrderMaterial(subData) } }) formData.value.matItemRemoveList.forEach(async (item) => { if (item.id != undefined) { await PurchaseOrderMaterialApi.deletePurchaseOrderMaterial(item.id) } }) } //新增物料信息 const onBoomAddItem = () => { const newData = { // 新数据的属性 purchaseOrderId: 0, boomDetailId: undefined, boomName: '', boomSpec: '', composition: '', boomUnit: '', boomAmount: undefined, boomPurchaseAmount: undefined, boomEstimatedPrice: undefined, boomActualPrice: undefined, boomArriveTime: '', boomArriveDate: '', boomDescription: '' } formData.value.boomItemDOList.push(newData) } // 保存加工件信息 const saveBooms = async () => { formData.value.boomItemDOList.forEach(async (item) => { var subData = item as unknown as PurchaseOrderBoomApi.PurchaseOrderBoomVO subData.boomName = item.materialName subData.purchaseAmount = item.purchaseAmount subData.estimatedPrice = item.estimatedPrice subData.actualPrice = item.actualPrice subData.arriveTime = item.arriveTime subData.requireTime = item.boomArriveDate subData.description = item.description subData.composition = item.compositionName subData.purchaseOrderId = formData.value.id if (subData.id == undefined) { subData.id = await PurchaseOrderBoomApi.createPurchaseOrderBoom(subData) } else { await PurchaseOrderBoomApi.updatePurchaseOrderBoom(subData) } }) formData.value.boomItemRemoveList.forEach(async (item) => { if (item.id != undefined) { await PurchaseOrderBoomApi.deletePurchaseOrderBoom(item.id) } }) } //删除新增物料信息 const handleDeleteBoom = (index: number) => { formData.value.boomItemRemoveList.push(formData.value.boomItemDOList[index]) formData.value.boomItemDOList.splice(index, 1) handleActualPrice() handleEstimatedPrice() } const closeForm = async () => { router.push({ path: '/purchase/purchaseorder' }) tagsViewStore.delVisitedView(router.currentRoute.value) } const deleteForm = async () => { // 提示用户是否保存入库信息 await message.confirm('确认删除当前采购订单?') await PurchaseOrderApi.deletePurchaseOrder(formData.value.id) router.push({ path: '/purchase/purchaseorder' }) tagsViewStore.delVisitedView(router.currentRoute.value) } // 保存按钮数据提交 const saveForm = async () => { let validateForm = formData.value.purchaseType + '' + formData.value.goodsType // 校验子表单 try { switch (validateForm) { case "11": //计划+物料 await subMatPlanFormRef.value.validate() break case "12": //计划+加工件 await subBoomPlanFormRef.value.validate() break case "21": //备库+物料 await subFormRef.value.validate() break case "22": //备库+加工件 await subBoomFormRef.value.validate() break default: break } } catch (e) { return } let flag=false if (formData.value.purchaseType==1&&formData.value.goodsType==1){ for (var i=0;i<formData.value.matItemDOList.length;i++){ const requireAmount = formData.value.matItemDOList[i].requireAmount; const purchaseAmount = formData.value.matItemDOList[i].purchaseAmount; if (requireAmount!=purchaseAmount){ flag=true; } } } if (formData.value.purchaseType==1&&formData.value.goodsType==2){ for (var i=0;i<formData.value.boomItemDOList.length;i++){ const requireAmount = formData.value.boomItemDOList[i].boomAmount; const purchaseAmount = formData.value.boomItemDOList[i].purchaseAmount; if (requireAmount!=purchaseAmount){ flag=true; } } } if (flag){ await message.confirm('需求数量和采购数量不一致,是否继续?') } // 提交请求 formLoading.value = true try { const data = formData.value as unknown as PurchaseOrderApi.PurchaseOrderVO var purchaseOrderId = await PurchaseOrderApi.updatePurchaseOrder(data) // 保存物料信息 await saveMaterials() // 保存加工件信息 await saveBooms() //formData.value.matItemDOList if (formData.value.attachments != undefined && formData.value.attachments.length > 0) { //附件信息保存 matUploadData.value.businessId = formData.value.id await matUploadRef.value!.submit() } message.success(t('common.updateSuccess')) dialogVisible.value = false // 发送操作成功的事件 emit('success') } finally { if (sumbefore.value == 0) { reload() } formLoading.value = false } } // 送审按钮数据提交 const submitForm = async () => { if (formData.value.goodsType == 1 && formData.value.matItemDOList.length == 0) { message.alertWarning('请添加物料信息!') return } if (formData.value.goodsType == 2 && formData.value.boomItemDOList.length == 0) { message.alertWarning('请添加加工件信息!') return } let validateForm = formData.value.purchaseType + '' + formData.value.goodsType // 校验子表单 try { switch (validateForm) { case '11': //计划+物料 await subMatPlanFormRef.value.validate() break case '12': //计划+加工件 await subBoomPlanFormRef.value.validate() break case '21': //备库+物料 await subFormRef.value.validate() break case '22': //备库+加工件 await subBoomFormRef.value.validate() break default: break } } catch (e) { return } // 计划状态为已送审 formData.value.receivingStatus = 2 formData.value.status = 2 formData.value.submitUserId = useUserStore().getUser.id await saveForm() } const userList = ref<UserApi.UserVO[]>([]) // 用户列表 const supplierInit = ref() // const matSimpList = ref([]) // 物料基本信息列表 const queryParams = reactive({ pageNo: 1, pageSize: 99, purchaseOrderId: query.id }) const matSimpList = ref([]) // 物料基本信息列表 // 页面数据加载初始化 onMounted(async () => { // 获取采购订单信息 formData.value = await PurchaseOrderApi.getPurchaseOrder(query.id) // 获取物料需求计划编号 if ( formData.value.purchaseType == 1 && formData.value.projectMaterialPlanId != undefined && formData.value.projectMaterialPlanId != '' ) { const matPlanDo = await MaterialPlanApi.getMaterialPlan(formData.value.projectMaterialPlanId) formData.value.materialPlanNo = matPlanDo.projectMaterialPlanNo } // 获取原始物料信息 matSimpList.value = await MaterialApi.getSimpList() // 获取物料需求计划的物料列表 formData.value.matItemDOList = ( await PurchaseOrderMaterialApi.getPurchaseOrderMaterialPage(queryParams) ).list var matTypes = getIntDictOptions(DICT_TYPE.HELI_MATERIAL_TYPE) var matUnits = getIntDictOptions(DICT_TYPE.HELI_MATERIAL_UNIT) formData.value.matItemDOList.forEach((item) => { matList.value.push({ id: item.materialId, code: item.matCode }) item.matType = matTypes.find( op => op.value == matSimpList.value.find((record) => record.id === item.materialId)?.material_type)?.label item.matUnit = matUnits.find( op => op.value == matSimpList.value.find((record) => record.id === item.materialId)?.unit)?.label }) formData.value.matItemRemoveList = [] formData.value.boomItemRemoveList = [] // 获取采购订单数据 formData.value.boomItemDOList = ( await PurchaseOrderBoomApi.getPurchaseOrderBoomPage(queryParams) ).list; // 遍历每个 item,进行属性赋值 formData.value.boomItemDOList.forEach((item) => { if (item) { // 确保 item 存在 item.boomPurchaseAmount = item.purchaseAmount; item.boomEstimatedPrice = item.estimatedPrice; item.boomActualPrice = item.actualPrice; item.boomArriveTime = item.arriveTime; item.boomArriveDate = item.requireTime; item.boomDescription = item.description; item.materialName = item.boomName; item.compositionName = item.composition; // 确保 composition 是一个有效的数组 if (Array.isArray(item.composition) && item.composition.length > 0) { item.composition = Number(item.composition); } } }); // 获取加工件列表 // formData.value.boomItemDOList = ( // await PurchaseOrderBoomApi.getPurchaseOrderBoomPage(queryParams) // ).list // formData.value.boomItemDOList.forEach((item) => { // item.boomPurchaseAmount = item.purchaseAmount // item.boomEstimatedPrice = item.estimatedPrice // item.boomActualPrice = item.actualPrice // item.boomArriveTime = item.arriveTime // item.boomArriveDate = item.requireTime // item.boomDescription = item.description // if (item.composition.length > 0) item.composition = Number(item.composition) // }) // 附件信息 let attParams = { pageNo: 1, pageSize: 99, businessId: query.id, businessType: 'PURCHASEORDER' } formData.value.attachments = (await getFilePage(attParams)).list //用户信息,用于底部数据展示 userList.value = await UserApi.getSimpleUserList() 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 } //接收加工件物料传递的数据 const handleSelectedBoomMaterial = (currentIndex: number, newValue: any) => { // console.log(currentIndex,'接收物料对应的数据:', newValue) formData.value.boomItemDOList[currentIndex].boomDetailId = newValue?.id formData.value.boomItemDOList[currentIndex].materialName = newValue?.name // formData.value.boomItemDOList[currentIndex].matCode = newValue?.code // formData.value.boomItemDOList[currentIndex].matSpec = newValue?.spec // formData.value.boomItemDOList[currentIndex].matType = newValue?.materialType // formData.value.boomItemDOList[currentIndex].matUnit = newValue?.unit } //接收供应商传递的数据 const handleSelectedSupplier = (newValue: any) => { formData.value.supplierId = newValue?.id } </script>