!109 antd-schema 代码生成时,可选择生成批量删除接口

Merge pull request !109 from puhui999/dev-new
pull/106/MERGE
xingyu 2025-05-19 06:08:14 +00:00 committed by Gitee
commit 1cb00f1470
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
6 changed files with 74 additions and 7 deletions

View File

@ -21,6 +21,7 @@ export namespace InfraCodegenApi {
createTime: Date;
updateTime: Date;
templateType: number;
deleteBatch: boolean;
parentMenuId: number;
}

View File

@ -9,7 +9,7 @@ export namespace Demo01ContactApi {
export interface Demo01Contact {
id: number; // 编号
name?: string; // 名字
sex?: boolean; // 性别
sex?: number; // 性别
birthday?: Dayjs | string; // 出生年
description?: string; // 简介
avatar: string; // 头像
@ -46,6 +46,13 @@ export function deleteDemo01Contact(id: number) {
return requestClient.delete(`/infra/demo01-contact/delete?id=${id}`);
}
// 批量删除示例联系人
export function deleteDemo01ContactByIds(ids: number[]) {
return requestClient.delete(
`/infra/demo01-contact/delete-batch?ids=${ids.join(',')}`,
);
}
/** 导出示例联系人 */
export function exportDemo01Contact(params: any) {
return requestClient.download('/infra/demo01-contact/export-excel', params);

View File

@ -11,6 +11,7 @@ import { useAccess } from '@vben/access';
import { IconifyIcon } from '@vben/icons';
import { handleTree } from '@vben/utils';
import { z } from '#/adapter/form';
import { getDataSourceConfigList } from '#/api/infra/data-source-config';
import { getMenuList } from '#/api/system/menu';
import { $t } from '#/locales';
@ -157,6 +158,17 @@ export function useGenerationInfoBaseFormSchema(): VbenFormSchema[] {
},
rules: 'selectRequired',
},
{
component: 'RadioGroup',
fieldName: 'deleteBatch',
label: '批量删除?',
help: '是否生成批量删除接口',
componentProps: {
options: getDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING, 'boolean'),
class: 'w-full',
},
rules: z.boolean().default(false),
},
{
fieldName: 'parentMenuId',
label: '上级菜单',
@ -350,7 +362,7 @@ export function useGenerationInfoSubTableFormSchema(
},
{
label: '一对一',
value: 'false',
value: false,
},
],
},

View File

@ -103,6 +103,7 @@ export function useGridColumns(
onActionClick?: OnActionClickFn<Demo01ContactApi.Demo01Contact>,
): VxeTableGridOptions<Demo01ContactApi.Demo01Contact>['columns'] {
return [
{ type: 'checkbox', width: 40 },
{
field: 'id',
title: '编号',
@ -150,7 +151,6 @@ export function useGridColumns(
minWidth: 200,
align: 'center',
fixed: 'right',
// TODO @puhui999headerAlign 要使用 headerAlign: 'center' 么?看着现在分成了 align 和 headerAlign 两种
headerAlign: 'center',
showOverflow: false,
cellRender: {

View File

@ -5,17 +5,18 @@ import type {
} from '#/adapter/vxe-table';
import type { Demo01ContactApi } from '#/api/infra/demo/demo01';
import { h } from 'vue';
import { computed, h, ref } from 'vue';
import { Page, useVbenModal } from '@vben/common-ui';
import { Download, Plus } from '@vben/icons';
import { downloadFileFromBlobPart } from '@vben/utils';
import { Download, Plus, Trash2 } from '@vben/icons';
import { downloadFileFromBlobPart, isEmpty } from '@vben/utils';
import { Button, message } from 'ant-design-vue';
import { useVbenVxeGrid } from '#/adapter/vxe-table';
import {
deleteDemo01Contact,
deleteDemo01ContactByIds,
exportDemo01Contact,
getDemo01ContactPage,
} from '#/api/infra/demo/demo01';
@ -55,7 +56,25 @@ async function onDelete(row: Demo01ContactApi.Demo01Contact) {
await deleteDemo01Contact(row.id as number);
message.success($t('ui.actionMessage.deleteSuccess', [row.id]));
onRefresh();
} catch {
} finally {
hideLoading();
}
}
const deleteIds = ref<number[]>([]); // ID
const showDeleteBatchBtn = computed(() => isEmpty(deleteIds.value));
/** 批量删除示例联系人 */
async function onDeleteBatch() {
const hideLoading = message.loading({
content: $t('ui.actionMessage.deleting'),
duration: 0,
key: 'action_process_msg',
});
try {
await deleteDemo01ContactByIds(deleteIds.value);
message.success($t('ui.actionMessage.deleteSuccess'));
onRefresh();
} finally {
hideLoading();
}
}
@ -113,6 +132,22 @@ const [Grid, gridApi] = useVbenVxeGrid({
search: true,
},
} as VxeTableGridOptions<Demo01ContactApi.Demo01Contact>,
gridEvents: {
checkboxAll: ({
records,
}: {
records: Demo01ContactApi.Demo01Contact[];
}) => {
deleteIds.value = records.map((item) => item.id);
},
checkboxChange: ({
records,
}: {
records: Demo01ContactApi.Demo01Contact[];
}) => {
deleteIds.value = records.map((item) => item.id);
},
},
});
</script>
@ -139,6 +174,17 @@ const [Grid, gridApi] = useVbenVxeGrid({
>
{{ $t('ui.actionTitle.export') }}
</Button>
<Button
:icon="h(Trash2)"
type="primary"
danger
class="ml-2"
:disabled="showDeleteBatchBtn"
@click="onDeleteBatch"
v-access:code="['infra:demo01-contact:delete']"
>
批量删除
</Button>
</template>
</Grid>
</Page>

View File

@ -68,6 +68,7 @@ export {
Sun,
SunMoon,
SwatchBook,
Trash2,
Upload,
UserRoundPen,
X,