add 入库修改,子表折叠

dev
wanghao 2 months ago
parent 43b07b3f65
commit 271e2354e7

@ -68,6 +68,7 @@
<!--主表--> <!--主表-->
<el-table <el-table
ref="tableRef"
v-loading="loading" v-loading="loading"
border border
:data="inStockBillList" :data="inStockBillList"
@ -85,6 +86,7 @@
<el-table-column prop="inStockAmount" align="center" label="入库数量" /> <el-table-column prop="inStockAmount" align="center" label="入库数量" />
<el-table-column prop="unitName" align="center" label="单位" /> <el-table-column prop="unitName" align="center" label="单位" />
<el-table-column prop="totalPrice" align="center" label="总价" /> <el-table-column prop="totalPrice" align="center" label="总价" />
<el-table-column prop="warehouseName" align="center" label="仓库名称" />
</el-table> </el-table>
</template> </template>
</el-table-column> </el-table-column>
@ -99,7 +101,7 @@
</el-table-column> </el-table-column>
<el-table-column label="项目ID" align="center" prop="projectId" v-if="columns[4].visible" /> <el-table-column label="项目ID" align="center" prop="projectId" v-if="columns[4].visible" />
<el-table-column label="关联单号" align="center" prop="inventoryAmount" v-if="columns[5].visible" /> <el-table-column label="关联单号" align="center" prop="inventoryAmount" v-if="columns[5].visible" />
<el-table-column label="供应商" align="center" prop="supplier" v-if="columns[6].visible" /> <el-table-column label="供应商" align="center" prop="supplierName" v-if="columns[6].visible" />
<el-table-column label="联系人" align="center" prop="contactUser" v-if="columns[7].visible" /> <el-table-column label="联系人" align="center" prop="contactUser" v-if="columns[7].visible" />
<el-table-column label="联系电话" align="center" prop="contactNumber" v-if="columns[8].visible" /> <el-table-column label="联系电话" align="center" prop="contactNumber" v-if="columns[8].visible" />
<el-table-column label="入库说明" align="center" prop="directions" v-if="columns[9].visible" /> <el-table-column label="入库说明" align="center" prop="directions" v-if="columns[9].visible" />
@ -135,7 +137,7 @@
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
</el-card> </el-card>
<!-- 添加物料入库对话框 --> <!-- 添加物料入库对话框 -->
<el-dialog title="添加物料入库" v-model="addDialog.visible" width="1250px" append-to-body> <el-dialog :title="addDialog.title" v-model="addDialog.visible" width="auto" min-width="1500px" append-to-body>
<el-form ref="addFormRef" :model="form" :rules="rules" label-width="120px"> <el-form ref="addFormRef" :model="form" :rules="rules" label-width="120px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@ -220,10 +222,10 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="quantity" label="入库数量" width="140"> <el-table-column prop="inStockAmount" label="入库数量" width="140">
<template #default="scope"> <template #default="scope">
<el-input-number <el-input-number
v-model="scope.row.quantity" v-model="scope.row.inStockAmount"
:min="1" :min="1"
:precision="2" :precision="2"
:step="0.5" :step="0.5"
@ -234,12 +236,25 @@
/> />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="unitName" label="单位" width="70" /> <el-table-column prop="unitName" label="单位" width="50" />
<el-table-column prop="totalPrice" label="总价(元)" width="120"> <el-table-column prop="totalPrice" label="总价(元)" width="120">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.totalPrice || 0 }}</span> <span>{{ scope.row.totalPrice || 0 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!--选择仓库-->
<el-table-column prop="warehouseId" label="选择仓库" width="150">
<template #default="scope">
<el-select v-model="scope.row.warehouseId" placeholder="请选择仓库">
<el-option
v-for="dict in wms_warehouse"
:key="dict.warehouseId"
:label="dict.warehouseName"
:value="dict.warehouseId"
></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="80"> <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="80">
<template #default="scope"> <template #default="scope">
<el-button link type="danger" icon="Delete" @click="removeMaterial(scope.$index)"></el-button> <el-button link type="danger" icon="Delete" @click="removeMaterial(scope.$index)"></el-button>
@ -259,51 +274,6 @@
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 修改物料入库对话框 -->
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
<el-form ref="inStockBillFormRef" :model="form" :rules="rules" label-width="120px">
<el-form-item label="入库单号" prop="inStockCode">
<el-input v-model="form.inStockCode" placeholder="请输入入库单号" />
</el-form-item>
<el-form-item label="入库单类型" prop="inStockType">
<el-select v-model="form.inStockType" placeholder="请选择入库单类型">
<el-option v-for="dict in wms_in_stock_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="关联单号" prop="inventoryAmount">
<el-input v-model="form.inventoryAmount" placeholder="请输入关联单号" />
</el-form-item>
<el-form-item label="供应商" prop="supplier">
<el-input v-model="form.supplierName" placeholder="请输入供应商" />
</el-form-item>
<el-form-item label="联系人" prop="contactUser">
<el-input v-model="form.contactUser" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="联系电话" prop="contactNumber">
<el-input v-model="form.contactNumber" placeholder="请输入联系电话" />
</el-form-item>
<el-form-item label="入库说明" prop="directions">
<el-input v-model="form.directions" placeholder="请输入入库说明" />
</el-form-item>
<el-form-item label="入库单状态" prop="inStockBillStatus">
<el-select v-model="form.inStockBillStatus" placeholder="请选择入库单状态">
<el-option v-for="dict in wms_in_stock_bill_status" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="流程状态" prop="flowStatus">
<el-input v-model="form.flowStatus" placeholder="请输入流程状态" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</template>
</el-dialog>
</div> </div>
</template> </template>
@ -312,7 +282,8 @@ import { addInStockBill, delInStockBill, getInStockBill, listInStockBill, update
import { InStockBillForm, InStockBillQuery, InStockBillVO } from '@/api/wms/inStockBill/types'; import { InStockBillForm, InStockBillQuery, InStockBillVO } from '@/api/wms/inStockBill/types';
import { ref } from 'vue'; // import { ref } from 'vue'; //
import { useRouter } from 'vue-router'; // import { useRouter } from 'vue-router'; //
import { getWmsInStockDetailsList } from '@/api/wms/inStockDetails'; // import { getWmsInStockDetailsList } from '@/api/wms/inStockDetails';
import { getWmsWarehouseInfoList } from '@/api/wms/warehouseInfo'; //
// //
const handleExpandChange = async (row, expandedRows) => { const handleExpandChange = async (row, expandedRows) => {
@ -342,7 +313,7 @@ const single = ref(true);
const multiple = ref(true); const multiple = ref(true);
const total = ref(0); const total = ref(0);
const dateRangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']); const dateRangeCreateTime = ref<[DateModelType, DateModelType]>(['', '']);
const wms_warehouse = ref([]);
const queryFormRef = ref<ElFormInstance>(); const queryFormRef = ref<ElFormInstance>();
const inStockBillFormRef = ref<ElFormInstance>(); const inStockBillFormRef = ref<ElFormInstance>();
@ -360,15 +331,15 @@ const handleMaterialConfirm = (materials) => {
// //
material.unitPrice = material.purchasePrice || 0; material.unitPrice = material.purchasePrice || 0;
material.quantity = 1; // 1 material.inStockAmount = 1; // 1
material.totalPrice = (material.unitPrice * material.quantity).toFixed(2); material.totalPrice = (material.unitPrice * material.inStockAmount).toFixed(2);
}); });
}; };
// //
const calculateTotalPrice = (material) => { const calculateTotalPrice = (material) => {
if (material.unitPrice && material.quantity) { if (material.unitPrice && material.inStockAmount) {
material.totalPrice = (material.unitPrice * material.quantity).toFixed(2); material.totalPrice = (material.unitPrice * material.inStockAmount).toFixed(2);
} else { } else {
material.totalPrice = 0; material.totalPrice = 0;
} }
@ -390,7 +361,8 @@ const dialog = reactive<DialogOption>({
title: '' title: ''
}); });
const addDialog = reactive<DialogOption>({ const addDialog = reactive<DialogOption>({
visible: false visible: false,
title: ''
}); });
// //
@ -477,10 +449,12 @@ const reset = () => {
form.value = { ...initFormData }; form.value = { ...initFormData };
inStockBillFormRef.value?.resetFields(); inStockBillFormRef.value?.resetFields();
}; };
// ref
const tableRef = ref();
/** 搜索按钮操作 */ /** 搜索按钮操作 */
const handleQuery = () => { const handleQuery = () => {
queryParams.value.pageNum = 1; queryParams.value.pageNum = 1;
closeChildTable();
getList(); getList();
}; };
@ -488,8 +462,18 @@ const handleQuery = () => {
const resetQuery = () => { const resetQuery = () => {
dateRangeCreateTime.value = ['', '']; dateRangeCreateTime.value = ['', ''];
queryFormRef.value?.resetFields(); queryFormRef.value?.resetFields();
closeChildTable();
handleQuery(); handleQuery();
}; };
//
const closeChildTable = () => {
if (tableRef.value) {
tableRef.value.store.states.expandRows.value.forEach((row) => {
tableRef.value.toggleRowExpansion(row, false);
});
}
};
/** 多选框选中数据 */ /** 多选框选中数据 */
const handleSelectionChange = (selection: InStockBillVO[]) => { const handleSelectionChange = (selection: InStockBillVO[]) => {
@ -499,11 +483,19 @@ const handleSelectionChange = (selection: InStockBillVO[]) => {
}; };
const router = useRouter(); const router = useRouter();
const getWarehouseList = async () => {
const res = await getWmsWarehouseInfoList();
wms_warehouse.value = res.data;
};
/** 新增按钮操作 */ /** 新增按钮操作 */
const handleAdd = () => { const handleAdd = () => {
reset(); reset();
addFormRef.value?.resetFields(); addFormRef.value?.resetFields();
selectedMaterials.value = [];
addDialog.title = '添加物料入库';
addDialog.visible = true; addDialog.visible = true;
// getWarehouseList();
// dialog.title = ''; // dialog.title = '';
// materialSelectRef.value.open(); // materialSelectRef.value.open();
// router.push('/wms/inStockBill/add'); // router.push('/wms/inStockBill/add');
@ -521,7 +513,7 @@ const handleAddSubmit = () => {
// //
const invalidMaterials = selectedMaterials.value.filter((material) => { const invalidMaterials = selectedMaterials.value.filter((material) => {
return !material.unitPrice || material.unitPrice <= 0 || !material.quantity || material.quantity <= 0; return !material.unitPrice || material.unitPrice <= 0 || !material.inStockAmount || material.inStockAmount <= 0;
}); });
if (invalidMaterials.length > 0) { if (invalidMaterials.length > 0) {
@ -536,28 +528,53 @@ const handleAddSubmit = () => {
...form.value, ...form.value,
// //
inStockDetailsList: selectedMaterials.value.map((material) => ({ inStockDetailsList: selectedMaterials.value.map((material) => ({
inStockDetailsId: material.inStockDetailsId, // ID
materialId: material.materialId, // ID materialId: material.materialId, // ID
batchNumber: material.batchNumber, // batchNumber: material.batchNumber, //
unitPrice: material.unitPrice, // unitPrice: material.unitPrice, //
inStockAmount: material.quantity, // inStockAmount: material.inStockAmount, //
unitName: material.unitName, // unitName: material.unitName, //
totalPrice: material.totalPrice // totalPrice: material.totalPrice, //
warehouseId: material.warehouseId // ID
})) }))
}; };
await addInStockBill(submitData); // inStockBillId
proxy?.$modal.msgSuccess('添加成功'); if (form.value.inStockBillId) {
//
await updateInStockBill(submitData);
closeChildTable();
proxy?.$modal.msgSuccess('修改成功');
} else {
//
await addInStockBill(submitData);
proxy?.$modal.msgSuccess('添加成功');
}
addDialog.visible = false; addDialog.visible = false;
// //
selectedMaterials.value = []; selectedMaterials.value = [];
await getList(); await getList();
} catch (error) { } catch (error) {
console.error('添加入库单失败:', error); console.error('操作失败:', error);
proxy?.$modal.msgError('添加失败,请重试'); proxy?.$modal.msgError(form.value.inStockBillId ? '修改失败,请重试' : '添加失败,请重试');
} finally { } finally {
buttonLoading.value = false; buttonLoading.value = false;
} }
// await addInStockBill(submitData);
// proxy?.$modal.msgSuccess('');
// addDialog.visible = false;
//
// //
// selectedMaterials.value = [];
// await getList();
// } catch (error) {
// console.error(':', error);
// proxy?.$modal.msgError('');
// } finally {
// buttonLoading.value = false;
// }
} }
}); });
}; };
@ -574,8 +591,12 @@ const handleUpdate = async (row?: InStockBillVO) => {
const _inStockBillId = row?.inStockBillId || ids.value[0]; const _inStockBillId = row?.inStockBillId || ids.value[0];
const res = await getInStockBill(_inStockBillId); const res = await getInStockBill(_inStockBillId);
Object.assign(form.value, res.data); Object.assign(form.value, res.data);
dialog.visible = true;
dialog.title = '修改物料入库'; const childList = await getWmsInStockDetailsList({ inStockBillId: row.inStockBillId });
selectedMaterials.value = childList.data;
addDialog.title = '修改物料入库';
addDialog.visible = true;
}; };
/** 提交按钮 */ /** 提交按钮 */
@ -617,5 +638,6 @@ const handleExport = () => {
onMounted(() => { onMounted(() => {
getList(); getList();
getWarehouseList();
}); });
</script> </script>

Loading…
Cancel
Save