Files
klp-oa/klp-ui/src/views/wms/order/panels/detail.vue

344 lines
10 KiB
Vue
Raw Normal View History

2025-07-18 15:25:07 +08:00
<template>
<div>
2025-07-21 18:02:26 +08:00
<!-- 订单信息展示区域 -->
<el-descriptions title="订单信息" class="margin-top mb8" :column="4" size="medium" border v-if="orderInfo">
<el-descriptions-item>
<template slot="label">
订单编号
</template>
{{ orderInfo.orderCode }}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">
订单状态
</template>
<dict-tag :options="dict.type.order_status" :value="orderInfo.orderStatus"/>
</el-descriptions-item>
</el-descriptions>
2025-07-18 15:25:07 +08:00
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
2025-07-21 18:02:26 +08:00
:disabled="!canEdit"
2025-07-18 15:25:07 +08:00
@click="handleAdd"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
2025-07-21 18:02:26 +08:00
:disabled="single || !canEdit"
2025-07-18 15:25:07 +08:00
@click="handleUpdate"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
2025-07-21 18:02:26 +08:00
:disabled="multiple || !canEdit"
2025-07-18 15:25:07 +08:00
@click="handleDelete"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button>
</el-col>
</el-row>
2025-07-29 15:00:15 +08:00
<el-table v-loading="loading" :data="orderDetailList">
2025-07-21 18:02:26 +08:00
<el-table-column label="产品" align="center">
2025-07-21 11:55:04 +08:00
<template slot-scope="scope">
2025-07-29 15:00:15 +08:00
<ProductInfo :product-id="scope.row.productId">
<template #default="{ product }">
{{ product.productName }}<span v-if="product.productCode">({{ product.productCode }})</span>
</template>
</ProductInfo>
2025-07-21 11:55:04 +08:00
</template>
</el-table-column>
2025-07-31 18:07:51 +08:00
<el-table-column label="BOM" align="center">
<template slot-scope="scope">
<BomInfoMini item-type="product" :item-id="scope.row.productId" />
</template>
</el-table-column>
2025-07-18 15:25:07 +08:00
<el-table-column label="产品数量" align="center" prop="quantity" />
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
2025-07-21 18:02:26 +08:00
:disabled="!canEdit"
2025-07-18 15:25:07 +08:00
@click="handleUpdate(scope.row)"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
2025-07-21 18:02:26 +08:00
:disabled="!canEdit"
2025-07-18 15:25:07 +08:00
@click="handleDelete(scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改订单明细对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
2025-07-21 10:56:50 +08:00
<!-- <el-form-item label="订单ID" prop="orderId">
2025-07-18 15:25:07 +08:00
<el-input v-model="form.orderId" placeholder="请输入订单ID" :disabled="true" />
2025-07-21 10:56:50 +08:00
</el-form-item> -->
2025-07-21 18:02:26 +08:00
<el-form-item label="产品" prop="productId">
<ProductSelect v-model="form.productId" placeholder="请选择产品" @change="onProductChange" />
</el-form-item>
2025-07-18 15:25:07 +08:00
<el-form-item label="产品数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入产品数量" />
</el-form-item>
<el-form-item label="单位" prop="unit">
2025-07-21 18:02:26 +08:00
<el-input v-model="form.unit" placeholder="单位" :disabled="true" />
2025-07-18 15:25:07 +08:00
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOrderDetail, getOrderDetail, delOrderDetail, addOrderDetail, updateOrderDetail } from "@/api/wms/orderDetail";
2025-07-21 18:02:26 +08:00
import { getOrder } from "@/api/wms/order";
2025-07-18 15:25:07 +08:00
import ProductSelect from '@/components/KLPService/ProductSelect';
2025-07-21 18:02:26 +08:00
import { EOrderStatus } from "@/utils/enums";
2025-07-29 15:00:15 +08:00
import { ProductInfo } from '@/components/KLPService';
2025-07-31 18:07:51 +08:00
import BomInfoMini from '@/components/KLPService/Renderer/BomInfoMini.vue';
2025-07-18 15:25:07 +08:00
export default {
name: "OrderDetailPanel",
2025-07-21 18:02:26 +08:00
dicts: ['order_status'],
2025-07-18 15:25:07 +08:00
props: {
orderId: {
type: [String, Number],
required: true
}
},
2025-07-29 15:00:15 +08:00
components: {
ProductSelect,
2025-07-31 18:07:51 +08:00
ProductInfo,
BomInfoMini
2025-07-29 15:00:15 +08:00
},
2025-07-18 15:25:07 +08:00
data() {
return {
buttonLoading: false,
loading: true,
ids: [],
single: true,
multiple: true,
total: 0,
orderDetailList: [],
2025-07-21 18:02:26 +08:00
orderInfo: null, // 订单信息
2025-07-18 15:25:07 +08:00
title: "",
open: false,
2025-07-21 18:02:26 +08:00
// 订单状态枚举
EOrderStatus,
2025-07-18 15:25:07 +08:00
queryParams: {
pageNum: 1,
pageSize: 10,
orderId: this.orderId,
productId: undefined,
quantity: undefined,
unit: undefined,
},
form: {
orderId: this.orderId
},
rules: {
orderId: [
{ required: true, message: "订单ID不能为空", trigger: "blur" }
],
productId: [
{ required: true, message: "产品ID不能为空", trigger: "blur" }
],
quantity: [
2025-07-21 18:02:26 +08:00
{ required: true, message: "产品数量不能为空", trigger: "blur" },
{ pattern: /^[1-9]\d*$/, message: "产品数量必须为正整数", trigger: "blur" }
2025-07-18 15:25:07 +08:00
],
unit: [
{ required: true, message: "单位不能为空", trigger: "blur" }
],
}
};
},
2025-07-21 18:02:26 +08:00
computed: {
// 是否可以编辑(订单状态为新建时才能编辑)
canEdit() {
return this.orderInfo && this.orderInfo.orderStatus === EOrderStatus.NEW;
}
},
2025-07-18 15:25:07 +08:00
watch: {
orderId(newVal) {
this.queryParams.orderId = newVal;
this.form.orderId = newVal;
2025-07-21 18:02:26 +08:00
this.getOrderInfo();
2025-07-18 15:25:07 +08:00
this.getList();
}
},
created() {
2025-07-21 18:02:26 +08:00
this.getOrderInfo();
2025-07-18 15:25:07 +08:00
this.getList();
},
methods: {
2025-07-21 18:02:26 +08:00
// 获取订单信息
getOrderInfo() {
if (this.orderId) {
getOrder(this.orderId).then(response => {
this.orderInfo = response.data;
}).catch(() => {
this.orderInfo = null;
});
}
},
2025-07-18 15:25:07 +08:00
getList() {
this.loading = true;
listOrderDetail(this.queryParams).then(response => {
this.orderDetailList = response.rows;
this.total = response.total;
this.loading = false;
});
},
cancel() {
this.open = false;
this.reset();
},
reset() {
this.form = {
detailId: undefined,
orderId: this.orderId,
productId: undefined,
quantity: undefined,
unit: undefined,
remark: undefined,
delFlag: undefined,
createTime: undefined,
createBy: undefined,
updateTime: undefined,
updateBy: undefined
};
this.resetForm && this.resetForm("form");
},
handleSelectionChange(selection) {
this.ids = selection.map(item => item.detailId)
this.single = selection.length!==1
this.multiple = !selection.length
},
handleAdd() {
2025-07-21 18:02:26 +08:00
if (!this.canEdit) {
this.$modal && this.$modal.msgError("当前订单状态不允许新增明细");
return;
}
2025-07-18 15:25:07 +08:00
this.reset();
this.open = true;
this.title = "添加订单明细";
},
handleUpdate(row) {
2025-07-21 18:02:26 +08:00
if (!this.canEdit) {
this.$modal && this.$modal.msgError("当前订单状态不允许修改明细");
return;
}
2025-07-18 15:25:07 +08:00
this.loading = true;
this.reset();
const detailId = row.detailId || this.ids
getOrderDetail(detailId).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改订单明细";
});
},
2025-07-21 18:02:26 +08:00
onProductChange(product) {
if (product) {
this.form.unit = product.unit;
} else {
this.form.unit = undefined;
}
},
2025-07-18 15:25:07 +08:00
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.detailId != null) {
updateOrderDetail(this.form).then(response => {
this.$modal && this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addOrderDetail(this.form).then(response => {
this.$modal && this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
handleDelete(row) {
2025-07-21 18:02:26 +08:00
if (!this.canEdit) {
this.$modal && this.$modal.msgError("当前订单状态不允许删除明细");
return;
}
2025-07-18 15:25:07 +08:00
const detailIds = row.detailId || this.ids;
this.$modal && this.$modal.confirm('是否确认删除订单明细编号为"' + detailIds + '"的数据项?').then(() => {
this.loading = true;
return delOrderDetail(detailIds);
}).then(() => {
this.loading = false;
this.getList();
this.$modal && this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
handleExport() {
this.download && this.download('wms/orderDetail/export', {
...this.queryParams
}, `orderDetail_${new Date().getTime()}.xlsx`)
}
},
};
</script>
2025-07-21 18:02:26 +08:00
<style scoped>
</style>