feat(order): 添加批量更新订单明细功能和订单号搜索功能
在OrderDtlService中新增批量更新订单明细的方法,并在OrderDtlResource中添加相应的API接口。同时,在订单编辑页面中实现了订单号的搜索功能,确保用户能够快速查找已存在的订单。更新了相关的国际化文件以支持新功能。
This commit is contained in:
parent
e467de3a75
commit
54bda60541
@ -117,4 +117,15 @@ public class OrderDtlService {
|
|||||||
.map(organization -> orderDtlRepository.getRows(organization, table, params, pageable))
|
.map(organization -> orderDtlRepository.getRows(organization, table, params, pageable))
|
||||||
.flatMapMany(orderDtls -> orderDtls);
|
.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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -101,4 +101,9 @@ public class OrderDtlResource {
|
|||||||
ResponseEntity.ok().header("X-Total-Count", total.toString()).body(orderDtlService.getOrderDtls(table, params, pageable))
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -184,7 +184,7 @@ export default defineComponent({
|
|||||||
const number = `${cost.value.matGroup || ''}${cost.value.matType || ''}${cost.value.process || ''}${cost.value.quality || '*'}`;
|
const number = `${cost.value.matGroup || ''}${cost.value.matType || ''}${cost.value.process || ''}${cost.value.quality || '*'}`;
|
||||||
// 获取流水号
|
// 获取流水号
|
||||||
const serialRes = await axios.get('api/serials/next/' + number);
|
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}`;
|
cost.value.number = `${number}${serial}`;
|
||||||
|
|||||||
@ -29,6 +29,8 @@ export default defineComponent({
|
|||||||
const removeRow = ref(null);
|
const removeRow = ref(null);
|
||||||
const showDelete = ref(false);
|
const showDelete = ref(false);
|
||||||
const propOrder = ref('sortNo');
|
const propOrder = ref('sortNo');
|
||||||
|
const tempPrefix = ref('TEMP');
|
||||||
|
const orderPrefix = ref('ORD');
|
||||||
const reverse = ref(false);
|
const reverse = ref(false);
|
||||||
const activeTab = ref('setting');
|
const activeTab = ref('setting');
|
||||||
const orderForm = ref<VxeFormInstance>();
|
const orderForm = ref<VxeFormInstance>();
|
||||||
@ -252,13 +254,6 @@ export default defineComponent({
|
|||||||
const loadData = async () => {
|
const loadData = async () => {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
try {
|
try {
|
||||||
const id = route.params?.id;
|
|
||||||
if (id) {
|
|
||||||
const res = await axios.get(`api/orders/${id}`);
|
|
||||||
order.value = res.data;
|
|
||||||
loadOrderDtls();
|
|
||||||
}
|
|
||||||
|
|
||||||
const [
|
const [
|
||||||
qualityDictsRes,
|
qualityDictsRes,
|
||||||
processTypesRes,
|
processTypesRes,
|
||||||
@ -358,8 +353,13 @@ export default defineComponent({
|
|||||||
styles.value = stylesRes.data;
|
styles.value = stylesRes.data;
|
||||||
companies.value = companiesRes.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 => {
|
const defaultStatus = statusDicts.value.find(item => {
|
||||||
try {
|
try {
|
||||||
const propertyObj = JSON.parse(item.property || '{}');
|
const propertyObj = JSON.parse(item.property || '{}');
|
||||||
@ -371,13 +371,12 @@ export default defineComponent({
|
|||||||
if (defaultStatus) {
|
if (defaultStatus) {
|
||||||
order.value.status = defaultStatus.number;
|
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) {
|
order.value.number = `${tempPrefix.value}${serial}`;
|
||||||
const { data } = await axios.get(`api/orders/${orderId}`);
|
|
||||||
order.value = data;
|
|
||||||
await loadOrderDtls();
|
|
||||||
}
|
}
|
||||||
// 检查路由参数中是否有拍照数据
|
// 检查路由参数中是否有拍照数据
|
||||||
const photoData = route.query?.photoData;
|
const photoData = route.query?.photoData;
|
||||||
@ -404,6 +403,24 @@ export default defineComponent({
|
|||||||
await axios.put(`api/orders/${order.value.id}`, order.value);
|
await axios.put(`api/orders/${order.value.id}`, order.value);
|
||||||
alertService.showInfo($t('jewpmsApp.order.updated', { param: order.value.name }));
|
alertService.showInfo($t('jewpmsApp.order.updated', { param: order.value.name }));
|
||||||
} else {
|
} 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);
|
await axios.post('api/orders', order.value);
|
||||||
alertService.showSuccess($t('jewpmsApp.order.created'));
|
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 handleStyleChange = async event => {
|
||||||
const styleNo = event.value;
|
const styleNo = event.value;
|
||||||
if (!styleNo) return;
|
if (!styleNo) return;
|
||||||
@ -787,6 +814,7 @@ export default defineComponent({
|
|||||||
processRef,
|
processRef,
|
||||||
settingRef,
|
settingRef,
|
||||||
save,
|
save,
|
||||||
|
searchOrder,
|
||||||
handleStyleChange,
|
handleStyleChange,
|
||||||
handlePrint,
|
handlePrint,
|
||||||
activeTab,
|
activeTab,
|
||||||
|
|||||||
@ -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 :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="{}">
|
<vxe-form-item field="number" :title="$t('jewpmsApp.order.number')" :item-render="{}">
|
||||||
<template #default="{ data }">
|
<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>
|
</template>
|
||||||
</vxe-form-item>
|
</vxe-form-item>
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,8 @@
|
|||||||
"title": "订单管理",
|
"title": "订单管理",
|
||||||
"createLabel": "创建新订单",
|
"createLabel": "创建新订单",
|
||||||
"editLabel": "编辑订单",
|
"editLabel": "编辑订单",
|
||||||
"notFound": "未找到订单"
|
"notFound": "未找到订单",
|
||||||
|
"existsOrder": "订单号已存在"
|
||||||
},
|
},
|
||||||
"created": "创建成功,订单编号为 { param }",
|
"created": "创建成功,订单编号为 { param }",
|
||||||
"updated": "更新成功,订单编号为 { param }",
|
"updated": "更新成功,订单编号为 { param }",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user