This commit is contained in:
caoqianming 2024-08-01 08:36:34 +08:00
commit 947832ce0a
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,109 +1,158 @@
<template> <template>
<el-dialog :title="titleMap[mode]" v-model="visible" :size="1000" destroy-on-close @closed="$emit('closed')"> <el-dialog
<el-container v-loading="loading"> :title="titleMap[mode]"
<el-main style="padding: 0 20px 20px 20px"> v-model="visible"
<el-form ref="dialogForm" :model="form" :rules="rules" label-width="120px"> :size="1000"
<el-row> destroy-on-close
<el-col :md="12" :sm="24"> @closed="$emit('closed')"
<el-form-item label="订单编号" prop="number"> >
<el-input v-model="form.number" placeholder="订单编号" /> <el-container v-loading="loading">
</el-form-item> <el-main style="padding: 0 20px 20px 20px">
</el-col> <el-form
<el-col :md="12" :sm="24"> ref="dialogForm"
<el-form-item label="供应商" prop="supplier"> :model="form"
<el-select v-model="form.supplier" placeholder="供应商" clearable style="width:100%"> :rules="rules"
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id"></el-option> label-width="120px"
</el-select> >
</el-form-item> <el-row>
</el-col> <el-col :md="12" :sm="24">
<el-col :md="12" :sm="24"> <el-form-item label="订单编号" prop="number">
<el-form-item label="截止到货日期"> <el-input
<el-date-picker v-model="form.delivery_date" type="date" placeholder="截止到货日期" value-format="YYYY-MM-DD" v-model="form.number"
style="width:100%"> placeholder="订单编号"
</el-date-picker> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :md="12" :sm="24">
</el-form> <el-form-item label="供应商" prop="supplier">
</el-main> <el-select
<el-footer> v-model="form.supplier"
<el-button type="primary" :loading="isSaveing" @click="submit">保存</el-button> placeholder="供应商"
<el-button @click="visible = false">取消</el-button> clearable
</el-footer> style="width: 100%"
</el-container> >
</el-dialog> <el-option
v-for="item in options"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="截止到货日期">
<el-date-picker
v-model="form.delivery_date"
type="date"
placeholder="截止到货日期"
value-format="YYYY-MM-DD"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-main>
<el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit"
>保存</el-button
>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-container>
</el-dialog>
</template> </template>
<script> <script>
export default { export default {
emits: ["success", "closed"], emits: ["success", "closed"],
data() { data() {
return { return {
loading: false, loading: false,
mode: "add", mode: "add",
titleMap: { titleMap: {
add: "新增采购订单", add: "新增采购订单",
edit: "编辑采购订单", edit: "编辑采购订单",
show: "查看采购订单", show: "查看采购订单",
}, },
form: {}, form: {},
rules: { rules: {
number: [{ required: true, message: "请输入采购订单编号", trigger: "blur" }] number: [
}, {
visible: false, required: true,
isSaveing: false, message: "请输入采购订单编号",
options: [], trigger: "blur",
setFiltersVisible: false, },
}; ],
}, supplier: [
mounted() { {
this.getList(); required: true,
}, message: "请选择供应商",
methods: { trigger: "blur",
// },
open(mode = "add", type) { ],
this.mode = mode; },
this.visible = true; visible: false,
return this; isSaveing: false,
}, options: [],
getList() { setFiltersVisible: false,
this.$API.pum.supplier.list.req({ page: 0 }).then(res => { };
this.options = res; },
}) mounted() {
}, this.getList();
// },
submit() { methods: {
this.$refs.dialogForm.validate(async (valid) => { //
if (valid) { open(mode = "add", type) {
this.isSaveing = true; this.mode = mode;
try { this.visible = true;
var res; return this;
if (this.mode == "add") { },
res = await this.$API.pum.order.create.req(this.form); getList() {
} else if (this.mode == "edit") { this.$API.pum.supplier.list.req({ page: 0 }).then((res) => {
res = await this.$API.pum.order.update.req(this.form.id, this.form); this.options = res;
} });
this.isSaveing = false; },
this.$emit("success", this.form, this.mode); //
this.visible = false; submit() {
this.$message.success("操作成功"); this.$refs.dialogForm.validate(async (valid) => {
} catch (err) { if (valid) {
// this.isSaveing = true;
this.isSaveing = false; try {
return err; var res;
} if (this.mode == "add") {
} res = await this.$API.pum.order.create.req(
}); this.form
}, );
// } else if (this.mode == "edit") {
setData(data) { res = await this.$API.pum.order.update.req(
Object.assign(this.form, data); this.form.id,
}, this.form
// );
setFilters(filters) { }
this.selectionFilters = filters; this.isSaveing = false;
this.setFiltersVisible = true; this.$emit("success", this.form, this.mode);
}, this.visible = false;
}, this.$message.success("操作成功");
} catch (err) {
//
this.isSaveing = false;
return err;
}
}
});
},
//
setData(data) {
Object.assign(this.form, data);
},
//
setFilters(filters) {
this.selectionFilters = filters;
this.setFiltersVisible = true;
},
},
}; };
</script> </script>
<style></style> <style></style>

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

@ -1,129 +1,195 @@
<template> <template>
<el-dialog <el-dialog
:title="titleMap[mode]" :title="titleMap[mode]"
v-model="visible" v-model="visible"
:size="1000" :size="1000"
destroy-on-close destroy-on-close
@closed="$emit('closed')" @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 <el-form
ref="dialogForm" ref="dialogForm"
:model="form" :model="form"
:rules="rules" :rules="rules"
label-width="100px" label-width="100px"
> >
<el-row> <el-row>
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="物料" prop="material"> <el-form-item label="物料" prop="material">
<el-select <el-select
v-model="form.material" v-model="form.material"
placeholder="物料" placeholder="物料"
clearable clearable
style="width:100%" style="width: 100%"
> >
<el-option <el-option
v-for="item in options" v-for="item in options"
:key="item.id" :key="item.id"
:label="item.name" :label="item.name"
:value="item.id" :value="item.id"
></el-option> ></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="所需数量" 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
</el-form-item> v-model="form.count"
</el-col> :precision="0"
</el-row> :min="0"
</el-form> controls-position="right"
</el-main> placeholder="所需数量"
<el-footer> style="width: 100%"
<el-button type="primary" :loading="isSaveing" @click="submit">保存</el-button> @change="handleChange"
<el-button @click="visible = false">取消</el-button> />
</el-footer> </el-form-item>
</el-container> </el-col>
</el-dialog> <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-col>
</el-row>
</el-form>
</el-main>
<el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit"
>保存</el-button
>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-container>
</el-dialog>
</template> </template>
<script> <script>
export default { export default {
emits: ["success", "closed"], emits: ["success", "closed"],
props:{ props: {
puOrder: { type: String, default: '' }, puOrder: { type: String, default: "" },
}, },
data() { data() {
return { return {
loading: false, loading: false,
mode: "add", mode: "add",
titleMap: { titleMap: {
add: "新增订单详情", add: "新增订单详情",
edit: "编辑订单详情", edit: "编辑订单详情",
show: "查看订单详情", show: "查看订单详情",
}, },
form: {}, form: {},
rules: { rules: {
material: [{required: true, message: "请选择物料", trigger: "blur"}], material: [
}, { required: true, message: "请选择物料", trigger: "blur" },
visible: false, ],
isSaveing: false, unit_price: [
options: [], {
setFiltersVisible: false, required: true,
}; message: "请输入物料单价",
}, trigger: "blur",
mounted() { },
this.getList(); ],
}, },
methods: { visible: false,
// isSaveing: false,
open(mode = "add") { options: [],
this.mode = mode; setFiltersVisible: false,
this.visible = true; };
return this; },
}, mounted() {
getList(){ this.getList();
this.$API.mtm.material.list.req({page:0}).then(res=>{ },
this.options = res; methods: {
}) //
}, open(mode = "add") {
// this.mode = mode;
submit() { this.visible = true;
this.$refs.dialogForm.validate(async (valid) => { return this;
if (valid) { },
this.isSaveing = true; getList() {
try { this.$API.mtm.material.list.req({ page: 0 }).then((res) => {
var res; this.options = res;
this.form.pu_order = this.puOrder; });
if (this.mode == "add") { },
res = await this.$API.pum.orderitem.create.req(this.form); handleChange() {
} else if (this.mode == "edit") { if (
res = await this.$API.pum.orderitem.update.req(this.form.id,this.form); this.form.unit_price !== 0 &&
} this.form.unit_price !== "" &&
this.isSaveing = false; this.form.unit_price !== null
this.$emit("success", this.form, this.mode); ) {
this.visible = false; if (
this.$message.success("操作成功"); this.form.count !== 0 &&
} catch (err) { this.form.count !== "" &&
// this.form.count !== null
this.isSaveing = false; ) {
return err; this.form.total_price =
} Number(this.form.count) * Number(this.form.unit_price);
} }
}); } else {
}, this.form.total_price = "";
// }
setData(data) { },
Object.assign(this.form, data); //
}, submit() {
// this.$refs.dialogForm.validate(async (valid) => {
setFilters(filters) { if (valid) {
this.selectionFilters = filters; this.isSaveing = true;
this.setFiltersVisible = true; try {
}, var res;
}, this.form.pu_order = this.puOrder;
if (this.mode == "add") {
res = await this.$API.pum.orderitem.create.req(
this.form
);
} else if (this.mode == "edit") {
res = await this.$API.pum.orderitem.update.req(
this.form.id,
this.form
);
}
this.isSaveing = false;
this.$emit("success", this.form, this.mode);
this.visible = false;
this.$message.success("操作成功");
} catch (err) {
//
this.isSaveing = false;
return err;
}
}
});
},
//
setData(data) {
Object.assign(this.form, data);
},
//
setFilters(filters) {
this.selectionFilters = filters;
this.setFiltersVisible = true;
},
},
}; };
</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) => {