diff --git a/src/hooks/usePagination.ts b/src/hooks/usePagination.ts
new file mode 100644
index 0000000..9edd1f3
--- /dev/null
+++ b/src/hooks/usePagination.ts
@@ -0,0 +1,43 @@
+import { reactive } from "vue"
+
+interface IDefaultPaginationData {
+  total: number
+  currentPage: number
+  pageSizes: number[]
+  pageSize: number
+  layout: string
+}
+
+interface IPaginationData {
+  total?: number
+  currentPage?: number
+  pageSizes?: number[]
+  pageSize?: number
+  layout?: string
+}
+
+/** 默认的分页参数 */
+const defaultPaginationData: IDefaultPaginationData = {
+  total: 0,
+  currentPage: 1,
+  pageSizes: [10, 20, 50],
+  pageSize: 10,
+  layout: "total, sizes, prev, pager, next, jumper"
+}
+
+export const usePagination = (_paginationData: IPaginationData = {}) => {
+  /** 合并分页参数 */
+  const paginationData = reactive(Object.assign({ ...defaultPaginationData }, _paginationData))
+
+  /** 改变当前页码 */
+  const handleCurrentChange = (value: number) => {
+    paginationData.currentPage = value
+  }
+
+  /** 改变页面大小 */
+  const handleSizeChange = (value: number) => {
+    paginationData.pageSize = value
+  }
+
+  return { paginationData, handleCurrentChange, handleSizeChange }
+}
diff --git a/src/views/table/element-plus/index.vue b/src/views/table/element-plus/index.vue
index 6ea722d..f26b5ff 100644
--- a/src/views/table/element-plus/index.vue
+++ b/src/views/table/element-plus/index.vue
@@ -1,10 +1,12 @@
 <script lang="ts" setup>
-import { reactive, ref } from "vue"
+import { reactive, ref, watch } from "vue"
 import { createTableDataApi, deleteTableDataApi, updateTableDataApi, getTableDataApi } from "@/api/table"
 import { type FormInstance, type FormRules, ElMessage, ElMessageBox } from "element-plus"
 import { Search, Refresh, CirclePlus, Delete, Download, RefreshRight } from "@element-plus/icons-vue"
+import { usePagination } from "@/hooks/usePagination"
 
 const loading = ref<boolean>(false)
+const { paginationData, handleCurrentChange, handleSizeChange } = usePagination()
 
 //#region 增
 const dialogVisible = ref<boolean>(false)
@@ -83,16 +85,11 @@ const searchData = reactive({
   username: "",
   phone: ""
 })
-const paginationData = reactive({
-  total: 0,
-  currentPage: 1,
-  size: 10
-})
 const getTableData = () => {
   loading.value = true
   getTableDataApi({
     currentPage: paginationData.currentPage,
-    size: paginationData.size,
+    size: paginationData.pageSize,
     username: searchData.username === "" ? undefined : searchData.username,
     phone: searchData.phone === "" ? undefined : searchData.phone
   })
@@ -107,29 +104,26 @@ const getTableData = () => {
       loading.value = false
     })
 }
-const handleSizeChange = (value: number) => {
-  paginationData.size = value
-  getTableData()
-}
-const handleCurrentChange = (value: number) => {
-  paginationData.currentPage = value
-  getTableData()
-}
 const handleSearch = () => {
+  if (paginationData.currentPage === 1) {
+    getTableData()
+  }
   paginationData.currentPage = 1
-  getTableData()
 }
 const resetSearch = () => {
   searchFormRef.value?.resetFields()
+  if (paginationData.currentPage === 1) {
+    getTableData()
+  }
   paginationData.currentPage = 1
-  getTableData()
 }
-const handRefresh = () => {
+const handleRefresh = () => {
   getTableData()
 }
 //#endregion
 
-getTableData()
+/** 监听分页参数的变化 */
+watch([() => paginationData.currentPage, () => paginationData.pageSize], getTableData, { immediate: true })
 </script>
 
 <template>
@@ -159,7 +153,7 @@ getTableData()
             <el-button type="primary" :icon="Download" circle />
           </el-tooltip>
           <el-tooltip content="刷新表格">
-            <el-button type="primary" :icon="RefreshRight" circle @click="handRefresh" />
+            <el-button type="primary" :icon="RefreshRight" circle @click="handleRefresh" />
           </el-tooltip>
         </div>
       </div>
@@ -181,7 +175,7 @@ getTableData()
               <el-tag v-else type="danger" effect="plain">禁用</el-tag>
             </template>
           </el-table-column>
-          <el-table-column prop="creatTime" label="创建时间" align="center" />
+          <el-table-column prop="createTime" label="创建时间" align="center" />
           <el-table-column fixed="right" label="操作" width="150" align="center">
             <template #default="scope">
               <el-button type="primary" text bg size="small" @click="handleUpdate(scope.row)">修改</el-button>
@@ -193,21 +187,22 @@ getTableData()
       <div class="pager-wrapper">
         <el-pagination
           background
-          layout="total, sizes, prev, pager, next, jumper"
-          :page-sizes="[10, 20, 50]"
+          :layout="paginationData.layout"
+          :page-sizes="paginationData.pageSizes"
           :total="paginationData.total"
-          :page-size="paginationData.size"
+          :page-size="paginationData.pageSize"
           :currentPage="paginationData.currentPage"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
         />
       </div>
     </el-card>
-    <!-- 新增/编辑 -->
+    <!-- 新增/修改 -->
     <el-dialog
       v-model="dialogVisible"
-      :title="currentUpdateId === undefined ? '新增用户' : '修改服用户'"
+      :title="currentUpdateId === undefined ? '新增用户' : '修改用户'"
       @close="resetForm"
+      width="30%"
     >
       <el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" label-position="left">
         <el-form-item prop="username" label="用户名">