feat(order): 添加批量更新订单明细功能和订单号搜索功能

在OrderDtlService中新增批量更新订单明细的方法,并在OrderDtlResource中添加相应的API接口。同时,在订单编辑页面中实现了订单号的搜索功能,确保用户能够快速查找已存在的订单。更新了相关的国际化文件以支持新功能。
This commit is contained in:
user 2025-06-08 14:43:17 +08:00
parent e467de3a75
commit 54bda60541
6 changed files with 70 additions and 18 deletions

View File

@ -117,4 +117,15 @@ public class OrderDtlService {
.map(organization -> orderDtlRepository.getRows(organization, table, params, pageable))
.flatMapMany(orderDtls -> orderDtls);
}
// 批量更新OrderDtl
public Flux<OrderDtl> updateOrderDtls(java.util.List<OrderDtl> orderDtls) {
return Flux.fromIterable(orderDtls).flatMap(orderDtl -> {
if (orderDtl.getId() != null) {
return updateOrderDtl(orderDtl.getId(), orderDtl);
} else {
return Mono.empty();
}
});
}
}

View File

@ -101,4 +101,9 @@ public class OrderDtlResource {
ResponseEntity.ok().header("X-Total-Count", total.toString()).body(orderDtlService.getOrderDtls(table, params, pageable))
);
}
@PutMapping("/orderdtls")
public Flux<OrderDtl> updateOrderDtls(@RequestBody java.util.List<OrderDtl> orderDtls) {
return orderDtlService.updateOrderDtls(orderDtls);
}
}

View File

@ -184,7 +184,7 @@ export default defineComponent({
const number = `${cost.value.matGroup || ''}${cost.value.matType || ''}${cost.value.process || ''}${cost.value.quality || '*'}`;
// 获取流水号
const serialRes = await axios.get('api/serials/next/' + number);
const serial = serialRes.data.serialNumber.toString().padStart(5, '0');
const serial = serialRes.data.serialNumber.toString(36).toUpperCase().padStart(5, '0');
// 生成编号
cost.value.number = `${number}${serial}`;

View File

@ -29,6 +29,8 @@ export default defineComponent({
const removeRow = ref(null);
const showDelete = ref(false);
const propOrder = ref('sortNo');
const tempPrefix = ref('TEMP');
const orderPrefix = ref('ORD');
const reverse = ref(false);
const activeTab = ref('setting');
const orderForm = ref<VxeFormInstance>();
@ -252,13 +254,6 @@ export default defineComponent({
const loadData = async () => {
loading.value = true;
try {
const id = route.params?.id;
if (id) {
const res = await axios.get(`api/orders/${id}`);
order.value = res.data;
loadOrderDtls();
}
const [
qualityDictsRes,
processTypesRes,
@ -358,8 +353,13 @@ export default defineComponent({
styles.value = stylesRes.data;
companies.value = companiesRes.data;
const orderId = route.params?.id;
if (orderId) {
const { data } = await axios.get(`api/orders/${orderId}`);
order.value = data;
await loadOrderDtls();
} else {
// 如果是新建订单,设置默认状态
if (!route.params?.id) {
const defaultStatus = statusDicts.value.find(item => {
try {
const propertyObj = JSON.parse(item.property || '{}');
@ -371,13 +371,12 @@ export default defineComponent({
if (defaultStatus) {
order.value.status = defaultStatus.number;
}
}
// 获取流水号
const serialRes = await axios.get('api/serials/next/' + tempPrefix.value);
const serial = serialRes.data.serialNumber.toString(36).toUpperCase().padStart(10, '0');
const orderId = route.params?.id;
if (orderId) {
const { data } = await axios.get(`api/orders/${orderId}`);
order.value = data;
await loadOrderDtls();
// 生成订单临时编号
order.value.number = `${tempPrefix.value}${serial}`;
}
// 检查路由参数中是否有拍照数据
const photoData = route.query?.photoData;
@ -404,6 +403,24 @@ export default defineComponent({
await axios.put(`api/orders/${order.value.id}`, order.value);
alertService.showInfo($t('jewpmsApp.order.updated', { param: order.value.name }));
} else {
if (order.value.number.startsWith(tempPrefix.value)) {
// 获取流水号
const serialRes = await axios.get('api/serials/next/' + orderPrefix.value);
const serial = serialRes.data.serialNumber.toString(36).toUpperCase().padStart(10, '0');
const orderNumber = `${orderPrefix.value}${serial}`;
//更新orderdtl 的number
const orderDtls = await axios.get(`api/orderdtls`, {
params: {
number: { op: '=', value: order.value.number },
},
});
orderDtls.data.forEach(item => {
item.number = orderNumber;
});
await axios.put(`api/orderdtls`, orderDtls.data);
//更新为正式订单号后,再保存
order.value.number = orderNumber;
}
await axios.post('api/orders', order.value);
alertService.showSuccess($t('jewpmsApp.order.created'));
}
@ -474,6 +491,16 @@ export default defineComponent({
}
};
const searchOrder = async event => {
if (!order.value.id && !order.value.number) {
const { data } = await axios.get('api/orders', {
params: { number: { name: '', op: '=', value: order.value.number } },
});
} else {
alertService.showWarn($t('jewpmsApp.order.home.existsOrder'));
}
};
const handleStyleChange = async event => {
const styleNo = event.value;
if (!styleNo) return;
@ -787,6 +814,7 @@ export default defineComponent({
processRef,
settingRef,
save,
searchOrder,
handleStyleChange,
handlePrint,
activeTab,

View File

@ -27,7 +27,14 @@
<vxe-form :data="order" custom-layout class="vxe-form-group" title-align="left" title-width="120" :rules="formRules" ref="orderForm">
<vxe-form-item field="number" :title="$t('jewpmsApp.order.number')" :item-render="{}">
<template #default="{ data }">
<vxe-input v-model="data.number" type="text" :readonly="!!order.id" data-cy="number" :clearable="!order.id" />
<vxe-input
v-model="data.number"
type="text"
:readonly="!!order.id"
data-cy="number"
:clearable="!order.id"
@search-click="searchOrder"
/>
</template>
</vxe-form-item>

View File

@ -5,7 +5,8 @@
"title": "订单管理",
"createLabel": "创建新订单",
"editLabel": "编辑订单",
"notFound": "未找到订单"
"notFound": "未找到订单",
"existsOrder": "订单号已存在"
},
"created": "创建成功,订单编号为 { param }",
"updated": "更新成功,订单编号为 { param }",