diff --git a/yudao-ui-admin-vue3/src/components/XTable/src/XTable.vue b/yudao-ui-admin-vue3/src/components/XTable/src/XTable.vue
index a4875abc0..aed80c887 100644
--- a/yudao-ui-admin-vue3/src/components/XTable/src/XTable.vue
+++ b/yudao-ui-admin-vue3/src/components/XTable/src/XTable.vue
@@ -276,7 +276,7 @@ const reload = () => {
 }
 
 // 删除
-const deleteData = async (ids: string | number) => {
+const deleteData = async (id: string | number) => {
   const g = unref(xGrid)
   if (!g) {
     return
@@ -288,7 +288,7 @@ const deleteData = async (ids: string | number) => {
   }
   return new Promise(async () => {
     message.delConfirm().then(async () => {
-      await (options?.deleteApi && options?.deleteApi(ids))
+      await (options?.deleteApi && options?.deleteApi(id))
       message.success(t('common.delSuccess'))
       // 刷新列表
       reload()
@@ -296,6 +296,49 @@ const deleteData = async (ids: string | number) => {
   })
 }
 
+// 批量删除
+const deleteList = async () => {
+  const g = unref(xGrid)
+  if (!g) {
+    return
+  }
+  const rows = g.getCheckboxRecords() || g.getRadioRecord()
+  let ids: any[] = []
+  if (rows.length == 0) {
+    message.error('请选择数据')
+    return
+  } else {
+    rows.forEach((row) => {
+      ids.push(row.id)
+    })
+  }
+  const options = innerProps.value || props.options
+  if (options.deleteListApi) {
+    return new Promise(async () => {
+      message.delConfirm().then(async () => {
+        await (options?.deleteListApi && options?.deleteListApi(ids))
+        message.success(t('common.delSuccess'))
+        // 刷新列表
+        reload()
+      })
+    })
+  } else if (options.deleteApi) {
+    return new Promise(async () => {
+      message.delConfirm().then(async () => {
+        ids.forEach(async (id) => {
+          await (options?.deleteApi && options?.deleteApi(id))
+        })
+        message.success(t('common.delSuccess'))
+        // 刷新列表
+        reload()
+      })
+    })
+  } else {
+    console.error('未传入delListApi')
+    return
+  }
+}
+
 // 导出
 const exportList = async (fileName?: string) => {
   const g = unref(xGrid)
@@ -360,6 +403,7 @@ emit('register', {
   getSearchData,
   setProps,
   deleteData,
+  deleteList,
   exportList,
   getCurrentColumn,
   getRadioRecord,
diff --git a/yudao-ui-admin-vue3/src/components/XTable/src/type.ts b/yudao-ui-admin-vue3/src/components/XTable/src/type.ts
index 5214d62e4..5e5251e48 100644
--- a/yudao-ui-admin-vue3/src/components/XTable/src/type.ts
+++ b/yudao-ui-admin-vue3/src/components/XTable/src/type.ts
@@ -10,6 +10,7 @@ export type XTableProps<D = any> = VxeGridProps<D> & {
   getListApi?: Function // 获取列表接口
   getAllListApi?: Function // 获取全部数据接口 用于 vxe 导出
   deleteApi?: Function // 删除接口
+  deleteListApi?: Function // 批量删除接口
   exportListApi?: Function // 导出接口
   exportName?: string // 导出文件夹名称
   params?: any // 其他查询参数
diff --git a/yudao-ui-admin-vue3/src/hooks/web/useXTable.ts b/yudao-ui-admin-vue3/src/hooks/web/useXTable.ts
index 0dbda77e6..dee259753 100644
--- a/yudao-ui-admin-vue3/src/hooks/web/useXTable.ts
+++ b/yudao-ui-admin-vue3/src/hooks/web/useXTable.ts
@@ -4,7 +4,8 @@ import { XTableProps } from '@/components/XTable/src/type'
 export interface tableMethod {
   reload: () => void // 刷新表格
   setProps: (props: XTableProps) => void
-  deleteData: (ids: string | number) => void // 删除数据
+  deleteData: (id: string | number) => void // 删除数据
+  deleteList: () => void // 批量删除
   exportList: (fileName?: string) => void // 导出列表
   getCurrentColumn: () => void // 获取当前列
   getRadioRecord: () => void // 获取当前选中列,redio
@@ -28,7 +29,8 @@ export const useXTable = (props: XTableProps): [Function, tableMethod] => {
   const methods: tableMethod = {
     reload: () => getInstance().reload(),
     setProps: (props) => getInstance().setProps(props),
-    deleteData: (ids: string | number) => getInstance().deleteData(ids),
+    deleteData: (id: string | number) => getInstance().deleteData(id),
+    deleteList: () => getInstance().deleteList(),
     exportList: (fileName?: string) => getInstance().exportList(fileName),
     getCurrentColumn: () => getInstance().getCheckboxRecords(),
     getRadioRecord: () => getInstance().getRadioRecord(),