采购收货前端

This commit is contained in:
z 2025-11-13 11:31:36 +08:00
parent 6054051690
commit 8fda766aea
3 changed files with 129 additions and 139 deletions

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chanko.yunxi</groupId>
<artifactId>mes</artifactId>
<version>2.0.0-jdk8-snapshot</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
<description>芋道项目基础脚手架</description>
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
<modules>
<module>mes-dependencies</module>
<module>mes-framework</module>
<module>mes-server</module>
<module>mes-module-system</module>
<module>mes-module-infra</module>
<module>mes-module-heli</module>
</modules>
<properties>
<lombok.version>1.18.30</lombok.version>
<java.version>1.8</java.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
<maven.compiler.target>${java.version}</maven.compiler.target>
<mapstruct.version>1.5.5.Final</mapstruct.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
<revision>2.0.0-jdk8-snapshot</revision>
<spring.boot.version>2.7.17</spring.boot.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.chanko.yunxi</groupId>
<artifactId>mes-dependencies</artifactId>
<version>2.0.0-jdk8-snapshot</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>huaweicloud</id>
<name>huawei</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</repository>
<repository>
<id>aliyunmaven</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/repository/public</url>
</repository>
</repositories>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>${spring.boot.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>${flatten-maven-plugin.version}</version>
<executions>
<execution>
<id>flatten</id>
<phase>process-resources</phase>
<goals>
<goal>flatten</goal>
</goals>
</execution>
<execution>
<id>flatten.clean</id>
<phase>clean</phase>
<goals>
<goal>clean</goal>
</goals>
</execution>
</executions>
<configuration>
<flattenMode>resolveCiFriendliesOnly</flattenMode>
<updatePomFile>true</updatePomFile>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@ -257,7 +257,7 @@ public interface PurchaseOrderNoDetailMapper extends BaseMapperX<PurchaseOrderNo
MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>(); MPJLambdaWrapper<PurchaseOrderNoDetailDO> query = new MPJLambdaWrapper<>();
query.selectAll(PurchaseOrderNoDetailDO.class) query.selectAll(PurchaseOrderNoDetailDO.class)
.select("t.composition as compositionName","t.purchase_rem_amount as purchaseRemAmounts","mat.code as matCode","pro.name as procedureName","bom.blueprint_no as blueprintNo","psub.id as projectSubId") .select("t.composition as compositionName","t.purchase_rem_amount as purchaseRemAmounts","mat.code as matCode","pro.name as procedureName","bom.blueprint_no as blueprintNo","psub.id as projectSubId")
.select("ROUND(t.estimated_price / t.purchase_amount, 1) as unitPrice","bom.spec as matSpec") .select("ROUND(t.estimated_price / t.purchase_amount, 2) as unitPrice","bom.spec as matSpec")
.select("s.brief as supplierName") .select("s.brief as supplierName")
.leftJoin(PurchaseOrderNoDO.class, "pb", PurchaseOrderNoDO::getId, PurchaseOrderBoomDO::getPurchaseOrderId) .leftJoin(PurchaseOrderNoDO.class, "pb", PurchaseOrderNoDO::getId, PurchaseOrderBoomDO::getPurchaseOrderId)
.leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId) .leftJoin(SupplierDO.class, "s", SupplierDO::getId, PurchaseOrderNoDO::getSupplierId)

View File

@ -64,7 +64,7 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
<el-form-item label="收货状态" prop="receivingStatus"> <el-form-item label="收货状态" prop="receivingStatus">
<el-select v-model="queryParams.receivingStatus" placeholder="下拉选择" clearable class="!w-240px"> <el-select v-model="queryParams.receivingStatus" placeholder="下拉选择" clearable class="!w-240px">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS)" :key="dict.value" v-for="dict in getIntDictOptions(DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS).filter(item=>item.value!=2)" :key="dict.value"
:label="dict.label" :value="dict.value" /> :label="dict.label" :value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -92,13 +92,13 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
<el-card class="hl-incard"> <el-card class="hl-incard">
<el-form ref="subFormRef" :model="list" v-loading="formLoading" label-width="0" > <el-form ref="subFormRef" :model="list" v-loading="formLoading" label-width="0" >
<el-table <el-table
v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" class="hl-table" ref="multipleTableRef" @selection-change="handleSelectionChange"> v-loading="loading" :data="list" :show-overflow-tooltip="true" class="hl-table" ref="multipleTableRef" show-summary :summary-method="getSummaries" @selection-change="handleSelectionChange" :row-class-name="tableRowClassName">
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="80" />
<el-table-column label="收货状态" align="center" prop="receivingStatus" min-width="120"> <!-- <el-table-column label="收货状态" align="center" prop="receivingStatus" min-width="120">-->
<template #default="scope"> <!-- <template #default="scope">-->
<dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.receivingStatus" /> <!-- <dict-tag :type="DICT_TYPE.HELI_PURCHASE_RECEIVING_STATUS" :value="scope.row.receivingStatus" />-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column prop="projectSubCode" min-width="150" label="子项目编码" align="center"/> <el-table-column prop="projectSubCode" min-width="150" label="子项目编码" align="center"/>
<el-table-column prop="blueprintNo" min-width="100" label="图号" align="center"/> <el-table-column prop="blueprintNo" min-width="100" label="图号" align="center"/>
<el-table-column prop="boomName" min-width="120" label="零件名称" align="center"/> <el-table-column prop="boomName" min-width="120" label="零件名称" align="center"/>
@ -106,8 +106,8 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
<el-table-column prop="procedureName" min-width="120" label="工序" align="center"/> <el-table-column prop="procedureName" min-width="120" label="工序" align="center"/>
<el-table-column prop="compositionName" min-width="100" label="材质" align="center"/> <el-table-column prop="compositionName" min-width="100" label="材质" align="center"/>
<el-table-column prop="purchaseAmount" min-width="100" label="采购数量" align="center" /> <el-table-column prop="purchaseAmount" min-width="100" label="采购数量" align="center" />
<el-table-column prop="purchaseRemAmount" min-width="100" label="剩余数量" align="center"/> <!-- <el-table-column prop="purchaseRemAmount" min-width="100" label="剩余数量" align="center"/>-->
<el-table-column prop="purchaseAmount" min-width="180" align="center"> <el-table-column prop="purchaseRemAmounts" min-width="180" align="center">
<template #header><span class="hl-table_header">*</span>入库数量</template> <template #header><span class="hl-table_header">*</span>入库数量</template>
<template #default="scope"> <template #default="scope">
<el-form-item :prop="`${scope.$index}.purchaseRemAmounts`" class="mb-0px!"> <el-form-item :prop="`${scope.$index}.purchaseRemAmounts`" class="mb-0px!">
@ -115,6 +115,18 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="estimatedPrice" min-width="180" label="单价" align="center">
<template #header>单价</template>
<template #default="scope">
<el-form-item :prop="`${scope.$index}.unitPrice`" class="mb-0px!">
<el-input-number
style="width: 100%" v-model="scope.row.unitPrice" placeholder="单价" :min="0" :precision="2"
@change="changeUnitPrice(scope.row)"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column prop="estimatedPrice" min-width="180" label="预估总价(元)" align="center"> <el-table-column prop="estimatedPrice" min-width="180" label="预估总价(元)" align="center">
<template #header><span class="hl-table_header">*</span>预估总价()</template> <template #header><span class="hl-table_header">*</span>预估总价()</template>
<template #default="scope"> <template #default="scope">
@ -123,20 +135,21 @@ v-model="queryParams.supplierName" placeholder="供应商" clearable @keyup.ente
style="width: 100%" v-model="scope.row.estimatedPrice" placeholder="预估总价" :min="0" :precision="2" style="width: 100%" v-model="scope.row.estimatedPrice" placeholder="预估总价" :min="0" :precision="2"
@input="(val)=>handleInput(val,scope.row)" @input="(val)=>handleInput(val,scope.row)"
@keyup.enter="(e)=>handleEnter(e,scope.row)" @keyup.enter="(e)=>handleEnter(e,scope.row)"
@change="changeEstimatedPrice(scope.row)"
:id="'estimatedPrice'+scope.row.id" :id="'estimatedPrice'+scope.row.id"
/> />
</el-form-item> </el-form-item>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="createTime" min-width="150" label="订单生成日期" align="center" :formatter="dateFormatter1"/> <el-table-column prop="createTime" min-width="150" label="订单生成日期" align="center" :formatter="dateFormatter1"/>
<el-table-column prop="requireTime" min-width="150" label="需要完成日期" align="center" :formatter="dateFormatter1"/> <!-- <el-table-column prop="requireTime" min-width="150" label="需要完成日期" align="center" :formatter="dateFormatter1"/>-->
<!-- <el-table-column prop="arriveTime" min-width="150" label="收货日期" align="center" :formatter="dateFormatter1" />--> <el-table-column prop="arriveTime" min-width="150" label="收货日期" align="center" :formatter="dateFormatter1" />
<el-table-column prop="description" min-width="150" label="技术要求" align="center"/> <el-table-column prop="description" min-width="150" label="技术要求" align="center"/>
<el-table-column prop="theWeight" min-width="100" label="理论重量" align="center"/> <!-- <el-table-column prop="theWeight" min-width="100" label="理论重量" align="center"/>-->
<el-table-column label="操作" align="center" fixed="right" min-width="200"> <el-table-column label="操作" align="center" fixed="right" min-width="200">
<template #default="scope"> <template #default="scope">
<el-button link type="primary" v-if="scope.row.receivingStatus!=3" @click="receiveGood(scope.row)"> <el-button link type="danger" v-if="scope.row.receivingStatus!=3" @click="receiveGood(scope.row)">
收货 收货
</el-button> </el-button>
<el-button link type="primary" @click="updateFrom(scope.row)" v-if="scope.row.receivingStatus==3"> <el-button link type="primary" @click="updateFrom(scope.row)" v-if="scope.row.receivingStatus==3">
总价修改 总价修改
@ -210,6 +223,13 @@ const queryParams = reactive({
}) })
const queryFormRef = ref() // const queryFormRef = ref() //
const exportLoading = ref(false) // const exportLoading = ref(false) //
const changeUnitPrice =(row:any)=>{
row.estimatedPrice=parseFloat((row.unitPrice* row.purchaseAmount).toFixed(2))
}
const changeEstimatedPrice =(row:any)=>{
row.unitPrice=parseFloat((row.estimatedPrice/row.purchaseAmount).toFixed(2))
}
const handleInput = (val: number, row: PurchaseOrderNoDetailApi.PurchaseOrderNoDetailVO) => { const handleInput = (val: number, row: PurchaseOrderNoDetailApi.PurchaseOrderNoDetailVO) => {
console.log(val, 'val'); console.log(val, 'val');
// //
@ -239,6 +259,75 @@ const handleEnter = (e: KeyboardEvent, row: PurchaseOrderNoDetailApi.PurchaseOrd
console.log(input, 'input'); console.log(input, 'input');
}
const getSummaries = (param: SummaryMethodProps) => {
const summaryField = ["purchaseRemAmounts"];
const { columns, data } = param;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计';
return;
}
if (!summaryField.includes(column.property)) {
sums[index] = '';
return;
}
const values = data.map(item => Number(item[column.property]));
if (!values.every(value => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return floatAdd(prev, curr);
} else {
return prev;
}
}, 0);
const thousandsField = [];
if (thousandsField.includes(column.property)) {
sums[index] = thousandsFormat(sums[index]);
}
} else {
sums[index] = '';
}
});
// const sumValue = computed(() => {
// return list.value.reduce((sum, item) => sum + item.quantityLent, 0);
// });
// const sums = ['','','','','','','','',sumValue];
return sums;
}
const floatAdd = (a, b) => {
var c, d, e;
if (undefined === a || null === a || "" === a || isNaN(a)) { a = 0; }
if (undefined === b || null === b || "" === b || isNaN(b)) { b = 0; }
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
e = Math.pow(10, Math.max(c, d));
return (floatMul(a, e) + floatMul(b, e)) / e;
};
const floatMul = (a, b) => {
var c = 0,
d = a.toString(),
e = b.toString();
try {
c += d.split(".")[1].length;
} catch (f) {}
try {
c += e.split(".")[1].length;
} catch (f) {}
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
const tableRowClassName = ({ row }) => {
return row.isSelected ? 'selected-row' : '';
} }
/** 查询列表 */ /** 查询列表 */
const getList = async () => { const getList = async () => {
@ -246,7 +335,9 @@ const getList = async () => {
try { try {
queryParams.ids = undefined queryParams.ids = undefined
const data = await PurchaseOrderNoDetailApi.getReceiveGoodDetail(queryParams) const data = await PurchaseOrderNoDetailApi.getReceiveGoodDetail(queryParams)
list.value.forEach(item=>{
item.isSelected=false
})
list.value = data.list list.value = data.list
total.value = data.total total.value = data.total
} finally { } finally {
@ -279,6 +370,19 @@ const multipleTableRef: any = ref<InstanceType<typeof ElTable>>()
const multipleSelection: any = ref([]) const multipleSelection: any = ref([])
const handleSelectionChange = (val: PurchaseOrderApi.PurchaseOrderVO[]) => { const handleSelectionChange = (val: PurchaseOrderApi.PurchaseOrderVO[]) => {
// isSelected false
list.value.forEach(row => {
row.isSelected = false;
});
// isSelected true
val.forEach(selectedRow => {
//
const targetRow = list.value.find(row => row.id === selectedRow.id);
if (targetRow) {
targetRow.isSelected = true;
}
});
multipleSelection.value = val multipleSelection.value = val
} }
@ -339,3 +443,9 @@ onMounted(async () => {
getList() getList()
}) })
</script> </script>
<style>
.selected-row {
background-color: #ffe6cc !important;
}
</style>