fix(biz): 修复入库退料相关功能

This commit is contained in:
zxy 2026-06-02 10:32:08 +08:00
parent 437033b41e
commit 3525457c2e
10 changed files with 111 additions and 130 deletions

View File

@ -73,4 +73,6 @@ public class RawStorageMatSaveReqVO {
@Schema(description = "存货账单号") @Schema(description = "存货账单号")
private String inventBillNo; private String inventBillNo;
private BigDecimal returnQty;
} }

View File

@ -23,7 +23,7 @@ public class RawStoragePageReqVO extends PageParam {
private String billNo; private String billNo;
@Schema(description = "操作类型 1为入库2为出库", example = "1") @Schema(description = "操作类型 1为入库2为出库", example = "1")
private Boolean operatorType; private String operatorType;
@Schema(description = "业务类型 (10 采购入库11 盘盈入库12 其它入库 21 生产领料 22 盘亏出库 23采购退料)", example = "1") @Schema(description = "业务类型 (10 采购入库11 盘盈入库12 其它入库 21 生产领料 22 盘亏出库 23采购退料)", example = "1")
private Integer businessType; private Integer businessType;

View File

@ -84,4 +84,8 @@ public class RawStorageMatPageReqVO extends PageParam {
private String billNo; private String billNo;
private String operatorType;
private String status;
} }

View File

@ -36,8 +36,9 @@ public interface RawStorageMapper extends BaseMapperX<RawStorageDO> {
.orderByDesc(RawStorageDO::getId)); .orderByDesc(RawStorageDO::getId));
} }
default String selectMaxPurReceiptNo() { default String selectMaxPurReceiptNo(String operatorType) {
RawStorageDO rawStorageDO = selectOne(new LambdaQueryWrapperX<RawStorageDO>() RawStorageDO rawStorageDO = selectOne(new LambdaQueryWrapperX<RawStorageDO>()
.eq(RawStorageDO::getOperatorType, operatorType)
.orderByDesc(RawStorageDO::getBillNo) .orderByDesc(RawStorageDO::getBillNo)
.last("LIMIT 1")); .last("LIMIT 1"));
return rawStorageDO != null ? rawStorageDO.getBillNo() : null; return rawStorageDO != null ? rawStorageDO.getBillNo() : null;

View File

@ -26,6 +26,7 @@ public interface RawStorageMatMapper extends BaseMapperX<RawStorageMatDO> {
MPJLambdaWrapper<RawStorageMatDO> wrapper = new MPJLambdaWrapper<RawStorageMatDO>() MPJLambdaWrapper<RawStorageMatDO> wrapper = new MPJLambdaWrapper<RawStorageMatDO>()
// 选择子表字段 // 选择子表字段
.selectAll(RawStorageMatDO.class) .selectAll(RawStorageMatDO.class)
.selectAs(RawStorageMatDO::getOperatorQty, RawStorageMatRespVO::getSourceQty)
// 选择主表字段 // 选择主表字段
.selectAs(RawStorageDO::getBillNo, RawStorageMatRespVO::getBillNo) .selectAs(RawStorageDO::getBillNo, RawStorageMatRespVO::getBillNo)
.selectAs(RawStorageDO::getOperatorType, RawStorageMatRespVO::getOperatorType) .selectAs(RawStorageDO::getOperatorType, RawStorageMatRespVO::getOperatorType)
@ -44,6 +45,9 @@ public interface RawStorageMatMapper extends BaseMapperX<RawStorageMatDO> {
.eq(StringUtils.isNotBlank(reqVO.getMatCode()), RawStorageMatDO::getMatCode, reqVO.getMatCode()) .eq(StringUtils.isNotBlank(reqVO.getMatCode()), RawStorageMatDO::getMatCode, reqVO.getMatCode())
.eq(StringUtils.isNotBlank(reqVO.getInventBillNo()), RawStorageMatDO::getInventBillNo, reqVO.getInventBillNo()) .eq(StringUtils.isNotBlank(reqVO.getInventBillNo()), RawStorageMatDO::getInventBillNo, reqVO.getInventBillNo())
// 查询条件 - 主表 // 查询条件 - 主表
.apply("operator_qty - return_qty > 0")
.eq(StringUtils.isNotBlank(reqVO.getStatus()), RawStorageDO::getStatus, reqVO.getStatus())
.eq(StringUtils.isNotBlank(reqVO.getOperatorType()), RawStorageDO::getOperatorType, reqVO.getOperatorType())
.like(StringUtils.isNotBlank(reqVO.getBillNo()), RawStorageDO::getBillNo, reqVO.getBillNo()) .like(StringUtils.isNotBlank(reqVO.getBillNo()), RawStorageDO::getBillNo, reqVO.getBillNo())
.orderByDesc(RawStorageMatDO::getId); .orderByDesc(RawStorageMatDO::getId);

View File

@ -62,8 +62,7 @@ public class RawStorageServiceImpl implements RawStorageService {
public Integer createRawStorage(RawStorageSaveReqVO createReqVO) { public Integer createRawStorage(RawStorageSaveReqVO createReqVO) {
// 插入主表 // 插入主表
RawStorageDO rawStorage = BeanUtils.toBean(createReqVO, RawStorageDO.class); RawStorageDO rawStorage = BeanUtils.toBean(createReqVO, RawStorageDO.class);
rawStorage.setBillNo(getBillNo()); rawStorage.setBillNo(getBillNo(createReqVO.getOperatorType()));
rawStorage.setOperatorType("1");
// 操作人 // 操作人
Long userId = getLoginUserId(); Long userId = getLoginUserId();
AdminUserDO adminUserDO = adminUserService.getUser(userId); AdminUserDO adminUserDO = adminUserService.getUser(userId);
@ -72,16 +71,9 @@ public class RawStorageServiceImpl implements RawStorageService {
rawStorageMapper.insert(rawStorage); rawStorageMapper.insert(rawStorage);
// 插入子表 // 插入子表
if (createReqVO.getItems() != null && !createReqVO.getItems().isEmpty()) { saveMat(rawStorage.getId(), createReqVO);
for (RawStorageMatSaveReqVO matVO : createReqVO.getItems()) {
RawStorageMatDO mat = BeanUtils.toBean(matVO, RawStorageMatDO.class);
mat.setStockId(rawStorage.getId());
mat.setId(null);
rawStorageMatMapper.insert(mat);
}
}
if (createReqVO.getStatus().equals("2")) { if ("2".equals(createReqVO.getStatus())) {
saveStorageLog(rawStorage); saveStorageLog(rawStorage);
} }
@ -96,14 +88,25 @@ public class RawStorageServiceImpl implements RawStorageService {
for (RawStorageMatDO rawStorageMatDO : rawStorageMatDOS) { for (RawStorageMatDO rawStorageMatDO : rawStorageMatDOS) {
RawStorageInventoryDO rawStorageInventoryDO = rawStorageInventoryService.selectByMatCodeAndBatchNo(rawStorageMatDO); RawStorageInventoryDO rawStorageInventoryDO = rawStorageInventoryService.selectByMatCodeAndBatchNo(rawStorageMatDO);
if (rawStorageInventoryDO != null) { if (rawStorageInventoryDO != null) {
rawStorageInventoryDO.setYardQty(rawStorageInventoryDO.getYardQty().add(rawStorageMatDO.getOperatorQty())); if ("1".equals(rawStorage.getOperatorType())) {
rawStorageInventoryDO.setUseQty(rawStorageInventoryDO.getUseQty().add(rawStorageMatDO.getOperatorQty())); rawStorageInventoryDO.setYardQty(rawStorageInventoryDO.getYardQty().add(rawStorageMatDO.getOperatorQty()));
rawStorageInventoryDO.setUseQty(rawStorageInventoryDO.getUseQty().add(rawStorageMatDO.getOperatorQty()));
} else if ("2".equals(rawStorage.getOperatorType())) {
rawStorageInventoryDO.setYardQty(rawStorageInventoryDO.getYardQty().subtract(rawStorageMatDO.getOperatorQty()));
rawStorageInventoryDO.setUseQty(rawStorageInventoryDO.getUseQty().subtract(rawStorageMatDO.getOperatorQty()));
}
rawStorageInventoryService.updateRawStorageInventory(rawStorageInventoryDO); rawStorageInventoryService.updateRawStorageInventory(rawStorageInventoryDO);
} else { } else {
rawStorageInventoryDO = getRawStorageInventoryDO(rawStorageMatDO); rawStorageInventoryDO = getRawStorageInventoryDO(rawStorageMatDO);
} }
rawStorageMatDO.setInventBillNo(rawStorageInventoryDO.getInventBillNo()); rawStorageMatDO.setInventBillNo(rawStorageInventoryDO.getInventBillNo());
rawStorageMatMapper.updateById(rawStorageMatDO); rawStorageMatMapper.updateById(rawStorageMatDO);
//更新源表
if ("2".equals(rawStorage.getOperatorType())) {
RawStorageMatDO sourceRawStorageMatDO = rawStorageMatMapper.selectById(rawStorageMatDO.getRelarionId());
sourceRawStorageMatDO.setReturnQty(sourceRawStorageMatDO.getReturnQty() != null ? sourceRawStorageMatDO.getReturnQty().add(rawStorageMatDO.getOperatorQty()) : rawStorageMatDO.getOperatorQty());
rawStorageMatMapper.updateById(sourceRawStorageMatDO);
}
saveStorageLog(rawStorage, rawStorageMatDO, dpstNo, rawStorageInventoryDO); saveStorageLog(rawStorage, rawStorageMatDO, dpstNo, rawStorageInventoryDO);
} }
} }
@ -142,7 +145,7 @@ public class RawStorageServiceImpl implements RawStorageService {
RawStorageLogDO rawStorageLogDO = new RawStorageLogDO(); RawStorageLogDO rawStorageLogDO = new RawStorageLogDO();
// rawStorageLogDO.setStockId(); // rawStorageLogDO.setStockId();
// rawStorageLogDO.setDescription(); // rawStorageLogDO.setDescription();
rawStorageLogDO.setStatus("1"); rawStorageLogDO.setStatus("2");
rawStorageLogDO.setStoreHouseId(rawStorageMatDO.getStoreHouseId()); rawStorageLogDO.setStoreHouseId(rawStorageMatDO.getStoreHouseId());
rawStorageLogDO.setStoreAreaId(rawStorageMatDO.getStoreAreaId()); rawStorageLogDO.setStoreAreaId(rawStorageMatDO.getStoreAreaId());
rawStorageLogDO.setStoreHouseCd(rawStorageMatDO.getStoreHouseCd()); rawStorageLogDO.setStoreHouseCd(rawStorageMatDO.getStoreHouseCd());
@ -156,8 +159,9 @@ public class RawStorageServiceImpl implements RawStorageService {
rawStorageLogDO.setUnit(rawStorageMatDO.getUnit()); rawStorageLogDO.setUnit(rawStorageMatDO.getUnit());
rawStorageLogDO.setLotNo(rawStorageMatDO.getLotNo()); rawStorageLogDO.setLotNo(rawStorageMatDO.getLotNo());
rawStorageLogDO.setOperatorQty(rawStorageMatDO.getOperatorQty()); rawStorageLogDO.setOperatorQty(rawStorageMatDO.getOperatorQty());
rawStorageLogDO.setOperatorType("1"); rawStorageLogDO.setOperatorType(rawStorage.getOperatorType());
rawStorageLogDO.setBusinessType(rawStorage.getBusinessType()); rawStorageLogDO.setBusinessType(rawStorage.getBusinessType());
// rawStorageLogDO.setStorageAft(); // rawStorageLogDO.setStorageAft();
// rawStorageLogDO.setStorageBef(); // rawStorageLogDO.setStorageBef();
// rawStorageLogDO.setStockItemId(rawStorageMatDO.getId()); // rawStorageLogDO.setStockItemId(rawStorageMatDO.getId());
@ -193,22 +197,25 @@ public class RawStorageServiceImpl implements RawStorageService {
if (updateReqVO.getItems() != null) { if (updateReqVO.getItems() != null) {
// 删除旧子表数据 // 删除旧子表数据
rawStorageMatMapper.deleteByStockId(updateReqVO.getId()); rawStorageMatMapper.deleteByStockId(updateReqVO.getId());
saveMat(updateObj.getId(), updateReqVO);
// 插入新子表数据
if (!updateReqVO.getItems().isEmpty()) {
for (RawStorageMatSaveReqVO matVO : updateReqVO.getItems()) {
RawStorageMatDO mat = BeanUtils.toBean(matVO, RawStorageMatDO.class);
mat.setStockId(updateReqVO.getId());
mat.setId(null);
rawStorageMatMapper.insert(mat);
}
}
} }
if ("2".equals(updateReqVO.getStatus())) { if ("2".equals(updateReqVO.getStatus())) {
saveStorageLog(updateObj); saveStorageLog(updateObj);
} }
} }
private void saveMat(Integer id, RawStorageSaveReqVO updateReqVO) {
// 插入新子表数据
if (!updateReqVO.getItems().isEmpty()) {
for (RawStorageMatSaveReqVO matVO : updateReqVO.getItems()) {
RawStorageMatDO mat = BeanUtils.toBean(matVO, RawStorageMatDO.class);
mat.setStockId(id);
mat.setId(null);
rawStorageMatMapper.insert(mat);
}
}
}
@Override @Override
public void deleteRawStorage(Integer id) { public void deleteRawStorage(Integer id) {
// 校验存在 // 校验存在
@ -385,7 +392,7 @@ public class RawStorageServiceImpl implements RawStorageService {
private String saveRawStorage(PurReceiptDO purReceipt, String supplierNo) { private String saveRawStorage(PurReceiptDO purReceipt, String supplierNo) {
RawStorageSaveReqVO saveReqVO = new RawStorageSaveReqVO(); RawStorageSaveReqVO saveReqVO = new RawStorageSaveReqVO();
saveReqVO.setBillNo(getBillNo()); saveReqVO.setBillNo(getBillNo("1"));
saveReqVO.setOperatorType("1"); saveReqVO.setOperatorType("1");
saveReqVO.setBusinessType("1"); saveReqVO.setBusinessType("1");
saveReqVO.setRemark(""); saveReqVO.setRemark("");
@ -407,8 +414,12 @@ public class RawStorageServiceImpl implements RawStorageService {
// 生成订单号 // 生成订单号
// 生成入库单号 // 生成入库单号
private String getBillNo() { private String getBillNo(String operatorType) {
String maxPurReceiptNo = rawStorageMapper.selectMaxPurReceiptNo(); String prefix = "RK";
return CodeGenerateUtils.generateBillNo("RK", maxPurReceiptNo); if ("2".equals(operatorType)) {
prefix = "CKD";
}
String maxPurReceiptNo = rawStorageMapper.selectMaxPurReceiptNo(operatorType);
return CodeGenerateUtils.generateBillNo(prefix, maxPurReceiptNo);
} }
} }

View File

@ -189,6 +189,7 @@ const queryParams = reactive({
billNo: undefined, billNo: undefined,
billDate: getCurrentSimMonthRange(), billDate: getCurrentSimMonthRange(),
status: undefined, status: undefined,
operatorType: "1",
}) })
const queryFormRef = ref() // const queryFormRef = ref() //
const exportLoading = ref(false) // const exportLoading = ref(false) //

View File

@ -1,5 +1,5 @@
<template> <template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="70%"> <Dialog :title="dialogTitle" v-model="dialogVisible" width="90%">
<el-form <el-form
ref="formRef" ref="formRef"
:model="formData" :model="formData"
@ -17,7 +17,7 @@
<el-select <el-select
v-model="formData.businessType" v-model="formData.businessType"
placeholder="请选择" placeholder="请选择"
:disabled="formType === 'detail'" :disabled="formType !== 'create'"
class="!w-full" class="!w-full"
> >
<el-option label="标准采购退料" value="3" /> <el-option label="标准采购退料" value="3" />
@ -58,7 +58,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="16"> <el-col :span="8">
<el-form-item label="其它入库单" prop="relarionNo"> <el-form-item label="其它入库单" prop="relarionNo">
<el-input <el-input
v-model="formData.relarionNo" v-model="formData.relarionNo"
@ -73,7 +73,7 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24"> <el-col :span="16">
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input <el-input
v-model="formData.remark" v-model="formData.remark"
@ -122,13 +122,13 @@
</el-table-column> </el-table-column>
<el-table-column label="已退料数量" min-width="100px" align="center"> <el-table-column label="已退料数量" min-width="100px" align="center">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.returnedQty || '0' }}</span> <span>{{ scope.row.returnQty || '0' }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="*退料数量" min-width="120px" align="center" > <el-table-column label="*退料数量" min-width="120px" align="center" >
<template #default="scope" > <template #default="scope" >
<MoneyInput <MoneyInput
v-model="scope.row.returnQty" v-model="scope.row.operatorQty"
:decimal-places="2" :decimal-places="2"
:allow-negative="false" :allow-negative="false"
:show-prefix="false" :show-prefix="false"
@ -184,7 +184,6 @@
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button <el-button
v-if="formType !== 'detail'" v-if="formType !== 'detail'"
type="primary" type="primary"
@ -201,6 +200,8 @@
> >
确认 确认
</el-button> </el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</template> </template>
</Dialog> </Dialog>
@ -238,6 +239,7 @@ const formData = reactive({
relarionNo: undefined, relarionNo: undefined,
relarionId: undefined, relarionId: undefined,
remark: undefined, remark: undefined,
operatorType: "2",
}) })
// //
@ -249,9 +251,6 @@ const formRules = reactive({
// //
const detailList = ref<any[]>([]) const detailList = ref<any[]>([])
//
const warehouseOptions = ref([])
// Ref // Ref
const storageSelectRef = ref() const storageSelectRef = ref()
@ -269,8 +268,6 @@ const open = async (type: string, id?: number) => {
formType.value = type formType.value = type
resetForm() resetForm()
await loadWarehouseList()
if (id) { if (id) {
formLoading.value = true formLoading.value = true
try { try {
@ -284,16 +281,6 @@ const open = async (type: string, id?: number) => {
} }
defineExpose({ open }) defineExpose({ open })
/** 加载仓储列表 */
const loadWarehouseList = async () => {
try {
const data = await RawStorageApi.getWarehouseSelect()
warehouseOptions.value = data.list || []
} catch (error) {
console.error('加载仓储列表失败:', error)
}
}
/** 打开入库单选择弹窗 */ /** 打开入库单选择弹窗 */
const openStorageSelect = () => { const openStorageSelect = () => {
storageSelectRef.value.open() storageSelectRef.value.open()
@ -325,13 +312,13 @@ const handleStorageConfirm = (storages: any[]) => {
spec: storage.spec, spec: storage.spec,
unit: storage.unit, unit: storage.unit,
lotNo: storage.lotNo, lotNo: storage.lotNo,
returnQty: undefined, returnQty: storage.returnQty || 0,
sourceQty: storage.operatorQty || 0, operatorQty: (storage.sourceQty || 0) - (storage.returnQty || 0),
returnedQty: storage.returnedQty || 0, sourceQty: storage.sourceQty || 0,
inDate: storage.billDate, inDate: storage.billDate,
inventBillNo: storage.inventBillNo, inventBillNo: storage.inventBillNo,
sourceId: storage.stockId, sourceId: storage.stockId,
relarionId: storage.stockId, relarionId: storage.id,
areaOptions: [], areaOptions: [],
}) })
}) })
@ -342,45 +329,6 @@ const handleDeleteDetail = (index: number) => {
detailList.value.splice(index, 1) detailList.value.splice(index, 1)
} }
/** 处理仓储变化,重新加载库区 */
const handleWarehouseChange = async (row: any) => {
row.storeAreaId = undefined
row.storeAreaName = undefined
row.storeAreCd = undefined
if (row.storeHouseId) {
const warehouse = warehouseOptions.value.find((w: any) => w.id === row.storeHouseId)
if (warehouse) {
row.storeHouseCd = warehouse.storeHouseCd
row.storeHouseName = warehouse.storeHouseName
}
try {
const list = await AreaApi.getStoreArea(row.storeHouseId)
row.areaOptions = (list || []).map((area: any) => ({
...area,
id: Number(area.id)
}))
} catch (error) {
console.error('加载库区列表失败:', error)
row.areaOptions = []
}
} else {
row.areaOptions = []
row.storeHouseCd = undefined
row.storeHouseName = undefined
}
}
/** 处理库区变化 */
const handleAreaChange = (row: any) => {
const area = row.areaOptions?.find((a: any) => a.id === row.storeAreaId)
if (area) {
row.storeAreCd = area.storeAreCd
row.storeAreaName = area.storeAreaName
}
}
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success', 'close']) const emit = defineEmits(['success', 'close'])
@ -396,46 +344,40 @@ const handleSubmit = async (action: string) => {
// 退 // 退
for (const item of detailList.value) { for (const item of detailList.value) {
if (!item.returnQty || item.returnQty <= 0) { // 退0
message.error('请完善退料数量') if (!item.operatorQty || item.operatorQty <= 0) {
message.error(`该物料(${item.matCode}退料数量不能为0请确认`)
return return
} }
// 退 + 退 <= // 退 + 退 <=
const totalReturn = (item.returnQty || 0) + (item.returnedQty || 0) const totalReturn = (item.operatorQty || 0) + (item.returnQty || 0)
if (totalReturn > (item.sourceQty || 0)) { if (totalReturn > (item.sourceQty || 0)) {
message.error(`退料数量 + 已退料数量不能大于入库数量(${item.matName}`) message.error(`物料(${item.matCode})退料数量>入库数量,请确认!`)
return return
} }
} }
formLoading.value = true formLoading.value = true
try { try {
// status
const status = action === 'save' ? '1' : '2'
const submitData = { const submitData = {
...formData, ...formData,
status,
items: detailList.value.map(item => ({ items: detailList.value.map(item => ({
...item, ...item,
areaOptions: undefined // areaOptions: undefined //
})) }))
} }
if (action === 'save') { if (formType.value === 'create') {
if (formType.value === 'create') { await RawStorageApi.createRawStorage(submitData)
await RawStorageApi.createRawStorage(submitData) message.success(t('common.createSuccess'))
message.success(t('common.createSuccess'))
} else {
await RawStorageApi.updateRawStorage(submitData)
message.success(t('common.updateSuccess'))
}
} else { } else {
// await RawStorageApi.updateRawStorage(submitData)
if (formType.value === 'create') { message.success(t('common.updateSuccess'))
await RawStorageApi.confirmRawStorage(submitData)
message.success('确认成功')
} else {
await RawStorageApi.confirmRawStorage(submitData)
message.success('确认成功')
}
} }
dialogVisible.value = false dialogVisible.value = false
@ -458,6 +400,7 @@ const resetForm = () => {
relarionNo: undefined, relarionNo: undefined,
relarionId: undefined, relarionId: undefined,
remark: undefined, remark: undefined,
operatorType: "2",
}) })
detailList.value = [] detailList.value = []
formRef.value?.resetFields() formRef.value?.resetFields()

View File

@ -1,5 +1,5 @@
<template> <template>
<Dialog :title="'选择入库单'" v-model="dialogVisible" width="90%"> <Dialog :title="'选择入库单'" v-model="dialogVisible" width="80%">
<el-form :model="queryParams" inline label-width="80px"> <el-form :model="queryParams" inline label-width="80px">
<el-form-item label="入库单号"> <el-form-item label="入库单号">
<el-input <el-input
@ -27,6 +27,7 @@
<div style="max-height: 500px; overflow-y: auto; margin-top: 15px;"> <div style="max-height: 500px; overflow-y: auto; margin-top: 15px;">
<el-table <el-table
ref="tableRef"
v-loading="loading" v-loading="loading"
:data="list" :data="list"
:stripe="true" :stripe="true"
@ -34,6 +35,7 @@
border border
:highlight-current-row="true" :highlight-current-row="true"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
@row-click="handleRowClick"
@row-dblclick="handleRowDoubleClick" @row-dblclick="handleRowDoubleClick"
style="width: 100%;" style="width: 100%;"
> >
@ -51,7 +53,7 @@
<el-table-column label="入库日期" align="center" prop="billDate" width="110px" /> <el-table-column label="入库日期" align="center" prop="billDate" width="110px" />
<el-table-column label="物料编码" align="center" prop="matCode" /> <el-table-column label="物料编码" align="center" prop="matCode" />
<el-table-column label="物料名称" align="center" prop="matName" /> <el-table-column label="物料名称" align="center" prop="matName" />
<el-table-column label="入库数量" align="center" prop="operatorQty" /> <el-table-column label="入库数量" align="center" prop="sourceQty" />
<el-table-column label="已退货数量" align="center" prop="returnQty" /> <el-table-column label="已退货数量" align="center" prop="returnQty" />
<el-table-column label="规格型号" align="center" prop="spec" /> <el-table-column label="规格型号" align="center" prop="spec" />
<el-table-column label="批次号" align="center" prop="lotNo" /> <el-table-column label="批次号" align="center" prop="lotNo" />
@ -71,8 +73,8 @@
</div> </div>
<template #footer> <template #footer>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="handleConfirm" :disabled="selectedItems.length === 0">保存</el-button> <el-button type="primary" @click="handleConfirm" :disabled="selectedItems.length === 0">保存</el-button>
<el-button @click="dialogVisible = false">取消</el-button>
</template> </template>
</Dialog> </Dialog>
</template> </template>
@ -88,10 +90,13 @@ const loading = ref(false)
const list = ref([]) const list = ref([])
const total = ref(0) const total = ref(0)
const selectedItems = ref([]) const selectedItems = ref([])
const tableRef = ref() //
const queryParams = reactive({ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
status: '2',
operatorType: '1',
billNo: undefined, billNo: undefined,
matName: undefined, matName: undefined,
}) })
@ -131,6 +136,11 @@ const handleSelectionChange = (val: any[]) => {
selectedItems.value = val selectedItems.value = val
} }
const handleRowClick = (row: any) => {
//
tableRef.value?.toggleRowSelection(row)
}
const handleRowDoubleClick = (row: any) => { const handleRowDoubleClick = (row: any) => {
selectedItems.value = [row] selectedItems.value = [row]
emit('confirm', [row]) emit('confirm', [row])

View File

@ -72,24 +72,24 @@
max-height="100%" max-height="100%"
> >
<el-table-column label="序号" align="center" type="index" width="60px"/> <el-table-column label="序号" align="center" type="index" width="60px"/>
<el-table-column label="单据类型" align="center" prop="businessType" > <el-table-column label="业务类型" align="center" prop="businessType" >
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.businessType === '23'">标准采购退料</span> <span v-if="scope.row.businessType === '3'">标准采购退料</span>
<span v-else>-</span> <span v-if="scope.row.businessType === '4'">设备采购退料</span>
<span v-else></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="退料单号" align="center" prop="billNo" /> <el-table-column label="退料单号" align="center" prop="billNo" />
<el-table-column label="供应商" align="center" prop="supplierName" />
<el-table-column label="单据状态" align="center" prop="status" > <el-table-column label="单据状态" align="center" prop="status" >
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.status === '1'" class="text-blue">已创建</span> <span v-if="scope.row.status === '1'" class="text-blue">已创建</span>
<span v-else-if="scope.row.status === '2'" class="text-green">已提交</span> <span v-else-if="scope.row.status === '2'" class="text-green">已提交</span>
<span v-else>-</span> <span v-else></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="退料日期" align="center" prop="billDate" /> <el-table-column label="退料日期" align="center" prop="billDate" />
<el-table-column label="退料人员" align="center" prop="operatorName" /> <el-table-column label="退料人员" align="center" prop="operatorName" />
<el-table-column label="采购入库单号" align="center" prop="relarionNo" /> <el-table-column label="其他入库单号" align="center" prop="relarionNo" />
<el-table-column label="操作" align="center" > <el-table-column label="操作" align="center" >
<template #default="scope"> <template #default="scope">
<el-button <el-button
@ -150,8 +150,8 @@
<el-table-column label="物料编码" align="center" prop="matCode" /> <el-table-column label="物料编码" align="center" prop="matCode" />
<el-table-column label="物料名称" align="center" prop="matName" /> <el-table-column label="物料名称" align="center" prop="matName" />
<el-table-column label="规格型号" align="center" prop="spec" /> <el-table-column label="规格型号" align="center" prop="spec" />
<el-table-column label="收货数量" align="center" prop="sourceQty" /> <el-table-column label="来源数量" align="center" prop="operatorQty" />
<el-table-column label="已退料数量" align="center" prop="returnedQty" /> <el-table-column label="已退料数量" align="center" prop="returnQty" />
<el-table-column label="退料数量" align="center" prop="returnQty" /> <el-table-column label="退料数量" align="center" prop="returnQty" />
<el-table-column label="批次号" align="center" prop="lotNo" /> <el-table-column label="批次号" align="center" prop="lotNo" />
<el-table-column label="仓储名称" align="center" prop="storeHouseName" /> <el-table-column label="仓储名称" align="center" prop="storeHouseName" />
@ -170,6 +170,7 @@ import { ref, reactive, onMounted } from 'vue'
import * as RawStorageApi from '@/api/biz/rawstorage' import * as RawStorageApi from '@/api/biz/rawstorage'
import ReturnStorageForm from './ReturnStorageForm.vue' import ReturnStorageForm from './ReturnStorageForm.vue'
import { getUnitName } from '@/utils/dict' import { getUnitName } from '@/utils/dict'
import { getCurrentSimMonthRange } from '@/utils/formatTime'
defineOptions({ name: 'RawStorage' }) defineOptions({ name: 'RawStorage' })
@ -186,8 +187,9 @@ const queryParams = reactive({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
billNo: undefined, billNo: undefined,
billDate: [], billDate: getCurrentSimMonthRange(),
status: undefined, status: undefined,
operatorType: "2",
}) })
const queryFormRef = ref() // const queryFormRef = ref() //
@ -198,8 +200,11 @@ const getList = async () => {
const data = await RawStorageApi.getRawStoragePage(queryParams) const data = await RawStorageApi.getRawStoragePage(queryParams)
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
// //
if (list.value.length > 0) { if (list.value.length === 0) {
detailList.value = []
} else {
//
handleRowClick(list.value[0]) handleRowClick(list.value[0])
} }
} finally { } finally {