diff --git a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue
index 90f429095..c2c7607f7 100644
--- a/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue
+++ b/packages/@core/ui-kit/shadcn-ui/src/ui/tree/tree.vue
@@ -380,7 +380,7 @@ defineExpose({
([]);
-/* 当检索关键词变化时,重置分页 */
-watch(keywordDebounce, () => {
- currentPage.value = 1;
- setCurrentPage(1);
-});
-
watchDebounced(
() => props.prefix,
async (prefix) => {
@@ -122,7 +115,7 @@ const showList = computed(() => {
);
});
-const { paginationList, total, setCurrentPage } = usePagination(
+const { paginationList, total, setCurrentPage, currentPage } = usePagination(
showList,
props.pageSize,
);
@@ -145,7 +138,6 @@ const handleClick = (icon: string) => {
};
const handlePageChange = (page: number) => {
- currentPage.value = page;
setCurrentPage(page);
};
diff --git a/packages/effects/hooks/src/use-pagination.ts b/packages/effects/hooks/src/use-pagination.ts
index 8d7ee78c6..0115606d3 100644
--- a/packages/effects/hooks/src/use-pagination.ts
+++ b/packages/effects/hooks/src/use-pagination.ts
@@ -1,6 +1,6 @@
import type { Ref } from 'vue';
-import { computed, ref, unref } from 'vue';
+import { computed, ref, unref, watch } from 'vue';
/**
* Paginates an array of items
@@ -22,7 +22,11 @@ function pagination(list: T[], pageNo: number, pageSize: number): T[] {
return ret;
}
-export function usePagination(list: Ref, pageSize: number) {
+export function usePagination(
+ list: Ref,
+ pageSize: number,
+ totalChangeToFirstPage = true,
+) {
const currentPage = ref(1);
const pageSizeRef = ref(pageSize);
@@ -38,11 +42,21 @@ export function usePagination(list: Ref, pageSize: number) {
return unref(list).length;
});
+ if (totalChangeToFirstPage) {
+ watch(total, () => {
+ setCurrentPage(1);
+ });
+ }
+
function setCurrentPage(page: number) {
- if (page < 1 || page > unref(totalPages)) {
- throw new Error('Invalid page number');
+ if (page === 1 && unref(totalPages) === 0) {
+ currentPage.value = 1;
+ } else {
+ if (page < 1 || page > unref(totalPages)) {
+ throw new Error('Invalid page number');
+ }
+ currentPage.value = page;
}
- currentPage.value = page;
}
function setPageSize(pageSize: number) {
@@ -54,5 +68,5 @@ export function usePagination(list: Ref, pageSize: number) {
currentPage.value = 1;
}
- return { setCurrentPage, total, setPageSize, paginationList };
+ return { setCurrentPage, total, setPageSize, paginationList, currentPage };
}
diff --git a/playground/src/views/system/menu/modules/form.vue b/playground/src/views/system/menu/modules/form.vue
index 3cf40e356..7d4ae6cfa 100644
--- a/playground/src/views/system/menu/modules/form.vue
+++ b/playground/src/views/system/menu/modules/form.vue
@@ -107,7 +107,7 @@ const schema: VbenFormSchema[] = [
componentProps() {
// 不需要处理多语言时就无需这么做
return {
- addonAfter: titleSuffix.value,
+ ...(titleSuffix.value && { addonAfter: titleSuffix.value }),
onChange({ target: { value } }: ChangeEvent) {
titleSuffix.value = value && $te(value) ? $t(value) : undefined;
},
@@ -442,7 +442,6 @@ const [Form, formApi] = useVbenForm({
showDefaultActions: false,
wrapperClass: 'grid-cols-2 gap-x-4',
});
-
const [Drawer, drawerApi] = useVbenDrawer({
onConfirm: onSubmit,
onOpenChange(isOpen) {