fix:采购订单雨采购计划添加单价和总价汇总

This commit is contained in:
shijing 2024-07-31 19:38:53 +08:00
parent 28bea49629
commit 1861f6406b
7 changed files with 480 additions and 231 deletions

View File

@ -47,14 +47,12 @@
v-for="item in scope.row.materials_" v-for="item in scope.row.materials_"
v-bind:key="item.id" v-bind:key="item.id"
> >
<span <span>{{ item.full_name }}</span>
>{{ item.name }}[{{ item.specification }}][{{
item.model
}}]</span
>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="总价(元)" prop="total_price">
</el-table-column>
<el-table-column label="截止到货日期" prop="delivery_date"> <el-table-column label="截止到货日期" prop="delivery_date">
</el-table-column> </el-table-column>
<el-table-column label="状态" prop="state"> <el-table-column label="状态" prop="state">

View File

@ -1,25 +1,54 @@
<template> <template>
<el-dialog :title="titleMap[mode]" v-model="visible" :size="1000" destroy-on-close @closed="$emit('closed')"> <el-dialog
:title="titleMap[mode]"
v-model="visible"
:size="1000"
destroy-on-close
@closed="$emit('closed')"
>
<el-container v-loading="loading"> <el-container v-loading="loading">
<el-main style="padding: 0 20px 20px 20px"> <el-main style="padding: 0 20px 20px 20px">
<el-form ref="dialogForm" :model="form" :rules="rules" label-width="120px"> <el-form
ref="dialogForm"
:model="form"
:rules="rules"
label-width="120px"
>
<el-row> <el-row>
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="订单编号" prop="number"> <el-form-item label="订单编号" prop="number">
<el-input v-model="form.number" placeholder="订单编号" /> <el-input
v-model="form.number"
placeholder="订单编号"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="供应商" prop="supplier"> <el-form-item label="供应商" prop="supplier">
<el-select v-model="form.supplier" placeholder="供应商" clearable style="width:100%"> <el-select
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id"></el-option> v-model="form.supplier"
placeholder="供应商"
clearable
style="width: 100%"
>
<el-option
v-for="item in options"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="截止到货日期"> <el-form-item label="截止到货日期">
<el-date-picker v-model="form.delivery_date" type="date" placeholder="截止到货日期" value-format="YYYY-MM-DD" <el-date-picker
style="width:100%"> v-model="form.delivery_date"
type="date"
placeholder="截止到货日期"
value-format="YYYY-MM-DD"
style="width: 100%"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -27,7 +56,9 @@
</el-form> </el-form>
</el-main> </el-main>
<el-footer> <el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit">保存</el-button> <el-button type="primary" :loading="isSaveing" @click="submit"
>保存</el-button
>
<el-button @click="visible = false">取消</el-button> <el-button @click="visible = false">取消</el-button>
</el-footer> </el-footer>
</el-container> </el-container>
@ -47,7 +78,20 @@ export default {
}, },
form: {}, form: {},
rules: { rules: {
number: [{ required: true, message: "请输入采购订单编号", trigger: "blur" }] number: [
{
required: true,
message: "请输入采购订单编号",
trigger: "blur",
},
],
supplier: [
{
required: true,
message: "请选择供应商",
trigger: "blur",
},
],
}, },
visible: false, visible: false,
isSaveing: false, isSaveing: false,
@ -66,9 +110,9 @@ export default {
return this; return this;
}, },
getList() { getList() {
this.$API.pum.supplier.list.req({ page: 0 }).then(res => { this.$API.pum.supplier.list.req({ page: 0 }).then((res) => {
this.options = res; this.options = res;
}) });
}, },
// //
submit() { submit() {
@ -78,9 +122,14 @@ export default {
try { try {
var res; var res;
if (this.mode == "add") { if (this.mode == "add") {
res = await this.$API.pum.order.create.req(this.form); res = await this.$API.pum.order.create.req(
this.form
);
} else if (this.mode == "edit") { } else if (this.mode == "edit") {
res = await this.$API.pum.order.update.req(this.form.id, this.form); res = await this.$API.pum.order.update.req(
this.form.id,
this.form
);
} }
this.isSaveing = false; this.isSaveing = false;
this.$emit("success", this.form, this.mode); this.$emit("success", this.form, this.mode);

View File

@ -60,6 +60,8 @@
:query="query" :query="query"
hidePagination hidePagination
hideDo hideDo
:summary-method="getSummaries"
show-summary
> >
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column <el-table-column
@ -80,6 +82,10 @@
prop="delivered_count" prop="delivered_count"
> >
</el-table-column> </el-table-column>
<el-table-column label="物料单价" prop="unit_price">
</el-table-column>
<el-table-column label="总价" prop="total_price">
</el-table-column>
<el-table-column <el-table-column
label="创建时间" label="创建时间"
prop="create_time" prop="create_time"
@ -245,6 +251,38 @@ export default {
}) })
.catch(() => {}); .catch(() => {});
}, },
getSummaries({ columns, data }) {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
if (index == 5) {
const values = data.map((item) =>
Number(item[column.property])
);
if (!values.every((value) => Number.isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr); //Number
let sum = Number(
Number(prev) + Number(curr)
).toFixed(2); //toFixed(2)
if (!isNaN(value)) {
return sum;
} else {
return prev;
}
}, 0);
sums[index] += "元"; //
} else {
sums[index] = "0元";
}
}
});
return sums;
},
// //
handleSaveSuccess(data, mode) { handleSaveSuccess(data, mode) {
if (mode == "add") { if (mode == "add") {

View File

@ -34,14 +34,49 @@
</el-col> </el-col>
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="所需数量" prop="place"> <el-form-item label="所需数量" prop="place">
<el-input-number v-model="form.count" :precision="0" :min="0" controls-position="right" placeholder="所需数量" style="width:100%"/> <el-input-number
v-model="form.count"
:precision="0"
:min="0"
controls-position="right"
placeholder="所需数量"
style="width: 100%"
@change="handleChange"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="物料单价" prop="unit_price">
<el-input-number
v-model="form.unit_price"
:precision="2"
:min="0"
controls-position="right"
placeholder="物料单价"
style="width: 100%"
@change="handleChange"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="物料总价">
<el-input-number
v-model="form.total_price"
:precision="2"
:min="0"
controls-position="right"
placeholder="物料总价"
style="width: 100%"
/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
</el-main> </el-main>
<el-footer> <el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit">保存</el-button> <el-button type="primary" :loading="isSaveing" @click="submit"
>保存</el-button
>
<el-button @click="visible = false">取消</el-button> <el-button @click="visible = false">取消</el-button>
</el-footer> </el-footer>
</el-container> </el-container>
@ -51,7 +86,7 @@
export default { export default {
emits: ["success", "closed"], emits: ["success", "closed"],
props: { props: {
puOrder: { type: String, default: '' }, puOrder: { type: String, default: "" },
}, },
data() { data() {
return { return {
@ -64,7 +99,16 @@ export default {
}, },
form: {}, form: {},
rules: { rules: {
material: [{required: true, message: "请选择物料", trigger: "blur"}], material: [
{ required: true, message: "请选择物料", trigger: "blur" },
],
unit_price: [
{
required: true,
message: "请输入物料单价",
trigger: "blur",
},
],
}, },
visible: false, visible: false,
isSaveing: false, isSaveing: false,
@ -83,9 +127,27 @@ export default {
return this; return this;
}, },
getList() { getList() {
this.$API.mtm.material.list.req({page:0}).then(res=>{ this.$API.mtm.material.list.req({ page: 0 }).then((res) => {
this.options = res; this.options = res;
}) });
},
handleChange() {
if (
this.form.unit_price !== 0 &&
this.form.unit_price !== "" &&
this.form.unit_price !== null
) {
if (
this.form.count !== 0 &&
this.form.count !== "" &&
this.form.count !== null
) {
this.form.total_price =
Number(this.form.count) * Number(this.form.unit_price);
}
} else {
this.form.total_price = "";
}
}, },
// //
submit() { submit() {
@ -96,9 +158,14 @@ export default {
var res; var res;
this.form.pu_order = this.puOrder; this.form.pu_order = this.puOrder;
if (this.mode == "add") { if (this.mode == "add") {
res = await this.$API.pum.orderitem.create.req(this.form); res = await this.$API.pum.orderitem.create.req(
this.form
);
} else if (this.mode == "edit") { } else if (this.mode == "edit") {
res = await this.$API.pum.orderitem.update.req(this.form.id,this.form); res = await this.$API.pum.orderitem.update.req(
this.form.id,
this.form
);
} }
this.isSaveing = false; this.isSaveing = false;
this.$emit("success", this.form, this.mode); this.$emit("success", this.form, this.mode);
@ -125,5 +192,4 @@ export default {
}; };
</script> </script>
<style> <style></style>
</style>

View File

@ -41,6 +41,8 @@
</el-table-column> </el-table-column>
<el-table-column label="计划编号" prop="number"> <el-table-column label="计划编号" prop="number">
</el-table-column> </el-table-column>
<el-table-column label="总价(元)" prop="total_price">
</el-table-column>
<el-table-column label="状态" prop="state"> <el-table-column label="状态" prop="state">
<template #default="scope"> <template #default="scope">
<span <span

View File

@ -44,6 +44,9 @@
:query="query" :query="query"
hidePagination hidePagination
hideDo hideDo
:summary-method="getSummaries"
:span-method="arraySpanMethod"
show-summary
> >
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column <el-table-column
@ -59,6 +62,10 @@
</el-table-column> </el-table-column>
<el-table-column label="采购数量" prop="need_count"> <el-table-column label="采购数量" prop="need_count">
</el-table-column> </el-table-column>
<el-table-column label="物料单价" prop="unit_price">
</el-table-column>
<el-table-column label="总价" prop="total_price">
</el-table-column>
<el-table-column <el-table-column
label="需求日期" label="需求日期"
prop="need_date" prop="need_date"
@ -93,7 +100,7 @@
type="primary" type="primary"
@click="table_edit(scope.row)" @click="table_edit(scope.row)"
v-auth="'pu_planitem.update'" v-auth="'pu_planitem.update'"
v-if="orderObj == 10" v-if="orderObj.state == 10"
> >
编辑 编辑
</el-button> </el-button>
@ -102,7 +109,7 @@
type="danger" type="danger"
@click="table_del(scope.row)" @click="table_del(scope.row)"
v-auth="'pu_planitem.delete'" v-auth="'pu_planitem.delete'"
v-if="orderObj == 10" v-if="orderObj.state == 10"
> >
删除 删除
</el-button> </el-button>
@ -213,7 +220,44 @@ export default {
}) })
.catch(() => {}); .catch(() => {});
}, },
arraySpanMethod({ rowIndex, columnIndex }) {
console.log(rowIndex, columnIndex);
if (rowIndex === 0) {
// return [1, 2];
}
},
getSummaries({ columns, data }) {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
if (index == 4) {
const values = data.map((item) =>
Number(item[column.property])
);
if (!values.every((value) => Number.isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr); //Number
let sum = Number(
Number(prev) + Number(curr)
).toFixed(2); //toFixed(2)
if (!isNaN(value)) {
return sum;
} else {
return prev;
}
}, 0);
sums[index] += "元"; //
} else {
sums[index] = "0元";
}
}
});
return sums;
},
// //
handleSaveSuccess(data, mode) { handleSaveSuccess(data, mode) {
if (mode == "add") { if (mode == "add") {

View File

@ -52,6 +52,32 @@
controls-position="right" controls-position="right"
placeholder="所需数量" placeholder="所需数量"
style="width: 100%" style="width: 100%"
@change="handleChange"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="物料单价" prop="unit_price">
<el-input-number
v-model="form.unit_price"
:precision="2"
:min="0"
controls-position="right"
placeholder="物料单价"
style="width: 100%"
@change="handleChange"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="物料总价">
<el-input-number
v-model="form.total_price"
:precision="2"
:min="0"
controls-position="right"
placeholder="物料总价"
style="width: 100%"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -149,6 +175,13 @@ export default {
trigger: "blur", trigger: "blur",
}, },
], ],
unit_price: [
{
required: true,
message: "请输入物料单价",
trigger: "blur",
},
],
}, },
formMaterialName: "", formMaterialName: "",
materialType: "planitem", materialType: "planitem",
@ -195,6 +228,25 @@ export default {
this.options = res; this.options = res;
}); });
}, },
handleChange() {
if (
this.form.unit_price !== 0 &&
this.form.unit_price !== "" &&
this.form.unit_price !== null
) {
if (
this.form.need_count !== 0 &&
this.form.need_count !== "" &&
this.form.need_count !== null
) {
this.form.total_price =
Number(this.form.need_count) *
Number(this.form.unit_price);
}
} else {
this.form.total_price = "";
}
},
// //
submit() { submit() {
this.$refs.dialogForm.validate(async (valid) => { this.$refs.dialogForm.validate(async (valid) => {