refactor: 代码生成案例-主子表标准模式

pull/75/head
puhui999 2025-04-17 18:41:21 +08:00
parent 35d7419015
commit d5422b570f
3 changed files with 20 additions and 11 deletions

View File

@ -176,8 +176,8 @@ export function useGridColumns(
}
// ==================== 子表(学生课程) ====================
/** 列表的字段 */
export function useDemo03CourseGridColumns(
/** 新增/修改的列表的字段 */
export function useDemo03CourseGridEditColumns(
onActionClick?: OnActionClickFn<Demo03StudentApi.Demo03Course>,
): VxeTableGridOptions<Demo03StudentApi.Demo03Course>['columns'] {
return [

View File

@ -10,7 +10,7 @@ import { getDemo03CourseListByStudentId } from '#/api/infra/demo/demo03/normal';
import { $t } from '#/locales';
import { h, nextTick, watch } from 'vue';
import { useDemo03CourseGridColumns } from '../data';
import { useDemo03CourseGridEditColumns } from '../data';
const props = defineProps<{
studentId?: any; //
@ -28,7 +28,7 @@ function onActionClick({ code, row }: OnActionClickParams<Demo03StudentApi.Demo0
const [Demo03CourseGrid, demo03CourseGridApi] = useVbenVxeGrid({
gridOptions: {
columns: useDemo03CourseGridColumns(onActionClick),
columns: useDemo03CourseGridEditColumns(onActionClick),
border: true,
showOverflow: true,
autoResize: true,
@ -58,13 +58,21 @@ const handleAdd = async () => {
/** 提供获取表格数据的方法供父组件调用 */
defineExpose({
getData: (): Demo03StudentApi.Demo03Course[] => {
return [
...demo03CourseGridApi.grid.getData(),
...demo03CourseGridApi.grid.getInsertRecords().map((row) => {
delete row.id;
return row;
}),
];
//
const allData = demo03CourseGridApi.grid.getData();
const removedData = demo03CourseGridApi.grid.getRemoveRecords();
const removedIds = new Set(removedData.map((row) => row.id));
//
const currentData = allData.filter((row) => !removedIds.has(row.id));
// id
const insertedData = demo03CourseGridApi.grid.getInsertRecords().map((row) => {
delete row.id;
return row;
});
return [...currentData, ...insertedData];
},
});

View File

@ -63,6 +63,7 @@ const [Modal, modalApi] = useVbenModal({
},
async onOpenChange(isOpen: boolean) {
if (!isOpen) {
formData.value = undefined;
return;
}