From 21b7dd16211b96960338c8f869959bcf08933562 Mon Sep 17 00:00:00 2001 From: user Date: Mon, 14 Apr 2025 23:33:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor(style-edit):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E7=BC=96=E8=BE=91=E7=95=8C=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E7=BC=96=E8=BE=91=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 `styleNumber` 字段,简化 `StyleDtl` 实体类 - 修改表格编辑配置,支持手动触发编辑模式 - 新增 `addDtlEvent`、`editDtlEvent`、`saveDtlEvent` 和 `cancelDtlEvent` 方法,增强编辑功能 - 修复排序逻辑,默认按 `sortNo` 排序 --- .../java/com/vxnet/pms/domain/StyleDtl.java | 14 -- .../vxnet/pms/service/StyleDtlService.java | 1 - .../app/orders/style/style-edit.component.ts | 132 +++++++++++++++--- .../webapp/app/orders/style/style-edit.vue | 44 ++++-- .../app/orders/style/style.component.ts | 2 +- 5 files changed, 148 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/vxnet/pms/domain/StyleDtl.java b/src/main/java/com/vxnet/pms/domain/StyleDtl.java index 4bfe478..665cbd0 100644 --- a/src/main/java/com/vxnet/pms/domain/StyleDtl.java +++ b/src/main/java/com/vxnet/pms/domain/StyleDtl.java @@ -23,9 +23,6 @@ public class StyleDtl extends AbstractAuditingEntity implements Serializab @Column("name") private String name; - @Column("style_number") - private String styleNumber; - @Column("quality") private String quality; @@ -101,14 +98,6 @@ public class StyleDtl extends AbstractAuditingEntity implements Serializab this.name = name; } - public String getStyleNumber() { - return styleNumber; - } - - public void setStyleNumber(String styleNumber) { - this.styleNumber = styleNumber; - } - public String getQuality() { return quality; } @@ -257,9 +246,6 @@ public class StyleDtl extends AbstractAuditingEntity implements Serializab ", name='" + getName() + "'" + - ", styleNumber='" + - getStyleNumber() + - "'" + ", quality='" + getQuality() + "'" + diff --git a/src/main/java/com/vxnet/pms/service/StyleDtlService.java b/src/main/java/com/vxnet/pms/service/StyleDtlService.java index 9add522..af507e6 100644 --- a/src/main/java/com/vxnet/pms/service/StyleDtlService.java +++ b/src/main/java/com/vxnet/pms/service/StyleDtlService.java @@ -50,7 +50,6 @@ public class StyleDtlService { .flatMap(existingStyleDtl -> { existingStyleDtl.setNumber(styleDtl.getNumber()); existingStyleDtl.setName(styleDtl.getName()); - existingStyleDtl.setStyleNumber(styleDtl.getStyleNumber()); existingStyleDtl.setQuality(styleDtl.getQuality()); existingStyleDtl.setSetGroup(styleDtl.getSetGroup()); existingStyleDtl.setProcess(styleDtl.getProcess()); diff --git a/src/main/webapp/app/orders/style/style-edit.component.ts b/src/main/webapp/app/orders/style/style-edit.component.ts index f8880fb..59b1d4c 100644 --- a/src/main/webapp/app/orders/style/style-edit.component.ts +++ b/src/main/webapp/app/orders/style/style-edit.component.ts @@ -3,6 +3,7 @@ import type { VxeFormInstance } from 'vxe-table'; import { useI18n } from 'vue-i18n'; import { useAlertService } from '@/shared/alert/alert.service'; import { useRoute, useRouter } from 'vue-router'; +import buildPaginationQuery from '@/shared/sort/sorts'; import axios from 'axios'; import type { VxeTableInstance } from 'vxe-table'; import JhiCamera from '@/shared/components/jhi_camera.vue'; @@ -25,6 +26,8 @@ export default defineComponent({ const settingDtls = ref([]); const removeRow = ref(null); const showDelete = ref(false); + const propOrder = ref('sortNo'); + const reverse = ref(false); const activeTab = ref('base'); const styleForm = ref(); const baseRef = ref(); @@ -57,8 +60,12 @@ export default defineComponent({ const baseColumns = [ { field: 'id', title: 'jewpmsApp.style.base.id', visible: false }, { field: 'number', title: 'jewpmsApp.style.base.number', visible: false }, - { field: 'process', title: 'jewpmsApp.style.base.process', editRender: { name: 'select', options: processTypes } }, - { field: 'material', title: 'jewpmsApp.style.base.material', editRender: { name: 'input' } }, + { + field: 'process', + title: 'jewpmsApp.style.base.process', + editRender: { name: 'select', options: processTypes, optionProps: { value: 'number', label: 'name' } }, + }, + { field: 'material', title: 'jewpmsApp.style.base.material', editRender: { name: 'input', autoSelect: true } }, { field: 'setGroup', title: 'jewpmsApp.style.base.setGroup', editRender: { name: 'input' } }, { field: 'quantity', title: 'jewpmsApp.style.base.quantity', editRender: { name: 'input', props: { type: 'number' } } }, { field: 'weight', title: 'jewpmsApp.style.base.weight', editRender: { name: 'input', props: { type: 'number' } } }, @@ -74,8 +81,12 @@ export default defineComponent({ const settingColumns = [ { field: 'id', title: 'jewpmsApp.style.setting.id', visible: false }, { field: 'number', title: 'jewpmsApp.style.setting.number', visible: false }, - { field: 'process', title: 'jewpmsApp.style.setting.process', editRender: { name: 'select', options: settingTypes } }, - { field: 'material', title: 'jewpmsApp.style.setting.material', editRender: { name: 'input' } }, + { + field: 'process', + title: 'jewpmsApp.style.setting.process', + editRender: { name: 'select', options: settingTypes, optionProps: { value: 'number', label: 'name' } }, + }, + { field: 'material', title: 'jewpmsApp.style.setting.material', editRender: { name: 'input', autoSelect: true } }, { field: 'setGroup', title: 'jewpmsApp.style.setting.setGroup', editRender: { name: 'input' } }, { field: 'quantity', title: 'jewpmsApp.style.setting.quantity', editRender: { name: 'input', props: { type: 'number' } } }, { field: 'weight', title: 'jewpmsApp.style.setting.weight', editRender: { name: 'input', props: { type: 'number' } } }, @@ -88,6 +99,11 @@ export default defineComponent({ { title: 'entity.action.actions', width: 100 }, ]; + const sort = () => { + const result = [`${propOrder.value},${reverse.value ? 'desc' : 'asc'}`]; + return result; + }; + const loadData = async () => { loading.value = true; try { @@ -141,10 +157,6 @@ export default defineComponent({ } }; - const previousState = () => { - router.push({ name: 'Style' }); - }; - const save = async () => { const valid = await styleForm.value?.validate(); if (valid) { @@ -185,7 +197,7 @@ export default defineComponent({ try { if (style.value.number) { const [baseRes, settingRes] = await Promise.all([ - axios.get('api/styledtls', { + axios.get(`api/styledtls?${buildPaginationQuery({ sort: sort() })}`, { params: { id: { name: '' }, number: { name: '', op: '=', value: style.value.number }, @@ -205,11 +217,11 @@ export default defineComponent({ property: { name: '' }, remark: { name: '' }, sortNo: { name: '' }, - status: { op: '=', value: '1' }, + status: { name: '', op: '=', value: '1' }, version: { name: '' }, }, }), - axios.get('api/styledtls', { + axios.get(`api/styledtls?${buildPaginationQuery({ sort: sort() })}`, { params: { id: { name: '' }, number: { name: '', op: '=', value: style.value.number }, @@ -229,7 +241,7 @@ export default defineComponent({ property: { name: '' }, remark: { name: '' }, sortNo: { name: '' }, - status: { op: '=', value: '1' }, + status: { name: '', op: '=', value: '1' }, version: { name: '' }, }, }), @@ -242,22 +254,97 @@ export default defineComponent({ } }; - const openAddEvent = () => { - activeTab.value = 'base'; - console.log(baseDtls.value); + const hasEditStatus = row => { + if (activeTab.value === 'setting') { + return settingRef.value?.isEditByRow(row); + } else { + return baseRef.value?.isEditByRow(row); + } }; - const openEditEvent = async row => { - //activeTab.value = 'base'; - console.log(activeTab.value); + + const addDtlEvent = () => { + if (!style.value.number) { + alertService.showError(t$('entity.validation.required')); + return; + } + + let newRow = { + number: style.value.number, + name: '', + process: '', + material: '', + setGroup: 'B', + quantity: 0, + weight: 0, + custPrice: 0, + costPrice: 0, + custLabor: 0, + costLabor: 0, + unitHour: 0, + remark: '', + sortNo: 0, + status: '1', + }; + + if (activeTab.value === 'setting') { + newRow.setGroup = 'S'; + settingDtls.value.push(newRow); + } else { + baseDtls.value.push(newRow); + } + // 保存新行到数据库 + axios + .post('api/styledtls', newRow) + .then(response => { + // 刷新数据 + loadStyleDtls(); + alertService.showSuccess(t$('jewpmsApp.style.created')); + }) + .catch(e => { + alertService.showHttpError(e); + }); + }; + + const editDtlEvent = async row => { let $table = baseRef.value; if (activeTab.value === 'setting') $table = settingRef.value; if ($table) { - console.log(row); await $table.setEditRow(row); } }; + const saveDtlEvent = async row => { + try { + // 保存行数据到数据库 + console.log(row); + await axios.put(`api/styledtls/${row.id}`, row); + // 提交编辑状态 + let $table = baseRef.value; + if (activeTab.value === 'setting') $table = settingRef.value; + if ($table) { + await $table.clearEdit(); + } + alertService.showInfo(t$('jewpmsApp.style.updated', { param: row.name || row.process })); + // 刷新数据 + await loadStyleDtls(); + } catch (e) { + alertService.showHttpError(e); + } + }; + + const cancelDtlEvent = row => { + let $table = baseRef.value; + if (activeTab.value === 'setting') $table = settingRef.value; + console.log($table); + if ($table) { + $table.clearEdit(); + $table.revertData(row); + alertService.showInfo(t$('jewpmsApp.style.reverted')); + } + }; + const prepareDelete = row => { + console.log('prepareDelete'); removeRow.value = { ...row }; showDelete.value = true; }; @@ -292,8 +379,11 @@ export default defineComponent({ activeTab, baseColumns, settingColumns, - openAddEvent, - openEditEvent, + hasEditStatus, + addDtlEvent, + editDtlEvent, + saveDtlEvent, + cancelDtlEvent, prepareDelete, showDelete, removeRow, diff --git a/src/main/webapp/app/orders/style/style-edit.vue b/src/main/webapp/app/orders/style/style-edit.vue index d16c874..5c2751f 100644 --- a/src/main/webapp/app/orders/style/style-edit.vue +++ b/src/main/webapp/app/orders/style/style-edit.vue @@ -129,7 +129,14 @@ - + - + diff --git a/src/main/webapp/app/orders/style/style.component.ts b/src/main/webapp/app/orders/style/style.component.ts index 3eb617d..2a684e6 100644 --- a/src/main/webapp/app/orders/style/style.component.ts +++ b/src/main/webapp/app/orders/style/style.component.ts @@ -27,7 +27,7 @@ export default defineComponent({ const removeRow = ref(null); const showDelete = ref(false); const showFilter = ref(false); - const propOrder = ref('id'); + const propOrder = ref('sortNo'); const reverse = ref(false); const scannerActive = ref(false); const selectedId = ref(null);