diff --git a/mayfly_go_web/package.json b/mayfly_go_web/package.json
index 12e5faa1..b6b1eb7b 100644
--- a/mayfly_go_web/package.json
+++ b/mayfly_go_web/package.json
@@ -33,7 +33,7 @@
     "splitpanes": "^3.1.5",
     "sql-formatter": "^14.0.0",
     "uuid": "^9.0.1",
-    "vue": "^3.3.12",
+    "vue": "^3.4.0",
     "vue-router": "^4.2.5",
     "xterm": "^5.3.0",
     "xterm-addon-fit": "^0.8.0",
diff --git a/mayfly_go_web/src/common/utils/date.ts b/mayfly_go_web/src/common/utils/date.ts
index c12b3f00..2de40c3e 100644
--- a/mayfly_go_web/src/common/utils/date.ts
+++ b/mayfly_go_web/src/common/utils/date.ts
@@ -24,7 +24,7 @@ export function dateStrFormat(fmt: string, dateStr: string) {
 }
 
 export function dateFormat(dateStr: string) {
-    if (dateStr.startsWith('0001-01-01', 0)) {
+    if (dateStr?.startsWith('0001-01-01', 0)) {
         return '';
     }
     return dateFormat2('yyyy-MM-dd HH:mm:ss', new Date(dateStr));
diff --git a/mayfly_go_web/src/components/SearchForm/components/SearchFormItem.vue b/mayfly_go_web/src/components/SearchForm/components/SearchFormItem.vue
index 830911ef..5bc68db4 100644
--- a/mayfly_go_web/src/components/SearchForm/components/SearchFormItem.vue
+++ b/mayfly_go_web/src/components/SearchForm/components/SearchFormItem.vue
@@ -28,17 +28,13 @@
 
diff --git a/mayfly_go_web/src/views/ops/db/DbBackupList.vue b/mayfly_go_web/src/views/ops/db/DbBackupList.vue
index ed4409bb..69fa6634 100644
--- a/mayfly_go_web/src/views/ops/db/DbBackupList.vue
+++ b/mayfly_go_web/src/views/ops/db/DbBackupList.vue
@@ -9,11 +9,7 @@
             :searchItems="searchItems"
             :before-query-fn="beforeQueryFn"
             v-model:query-form="query"
-            :data="state.data"
             :columns="columns"
-            :total="state.total"
-            v-model:page-size="query.pageSize"
-            v-model:page-num="query.pageNum"
         >
             
                 
@@ -29,8 +25,8 @@
 
             
                 编辑
-                启用
-                禁用
+                启用
+                禁用
             
         
 
@@ -76,7 +72,7 @@ const columns = [
     TableColumn.new('enabled', '是否启用'),
     TableColumn.new('lastResult', '执行结果'),
     TableColumn.new('lastTime', '执行时间').isTime(),
-    TableColumn.new('action', '操作').isSlot().setMinWidth(220).fixedRight().alignCenter(),
+    TableColumn.new('action', '操作').isSlot().setMinWidth(160).fixedRight().alignCenter(),
 ];
 
 const emptyQuery = {
diff --git a/mayfly_go_web/src/views/ops/db/DbList.vue b/mayfly_go_web/src/views/ops/db/DbList.vue
index b049dffb..e9071fa7 100644
--- a/mayfly_go_web/src/views/ops/db/DbList.vue
+++ b/mayfly_go_web/src/views/ops/db/DbList.vue
@@ -123,7 +123,7 @@
         
 
         
 
         ('visible', {
+    default: false,
+});
 
 const validatePointInTime = (rule: any, value: any, callback: any) => {
     if (!state.histories || state.histories.length == 0) {
@@ -161,9 +163,9 @@ onMounted(async () => {
     await init(props.data);
 });
 
-watch(props, (newValue: any) => {
-    if (newValue.visible) {
-        init(newValue.data);
+watch(visible, (newValue: any) => {
+    if (newValue) {
+        init(props.data);
     }
 });
 
@@ -230,38 +232,40 @@ const getDbNamesWithoutRestore = async () => {
 
 const btnOk = async () => {
     restoreForm.value.validate(async (valid: any) => {
-        if (valid) {
-            if (state.restoreMode == 'point-in-time') {
-                state.form.dbBackupId = 0;
-                state.form.dbBackupHistoryId = 0;
-                state.form.dbBackupHistoryName = '';
-            } else {
-                state.form.pointInTime = '0001-01-01T00:00:00Z';
-            }
-            state.form.repeated = false;
-            const reqForm = { ...state.form };
-            let api = dbApi.createDbRestore;
-            if (props.data) {
-                api = dbApi.saveDbRestore;
-            }
-            api.request(reqForm).then(() => {
-                ElMessage.success('保存成功');
-                emit('val-change', state.form);
-                state.btnLoading = true;
-                setTimeout(() => {
-                    state.btnLoading = false;
-                }, 1000);
-                cancel();
-            });
-        } else {
+        if (!valid) {
             ElMessage.error('请正确填写信息');
             return false;
         }
+
+        if (state.restoreMode == 'point-in-time') {
+            state.form.dbBackupId = 0;
+            state.form.dbBackupHistoryId = 0;
+            state.form.dbBackupHistoryName = '';
+        } else {
+            state.form.pointInTime = '0001-01-01T00:00:00Z';
+        }
+
+        state.form.repeated = false;
+        const reqForm = { ...state.form };
+        let api = dbApi.createDbRestore;
+        if (props.data) {
+            api = dbApi.saveDbRestore;
+        }
+
+        try {
+            state.btnLoading = true;
+            await api.request(reqForm);
+            ElMessage.success('保存成功');
+            emit('val-change', state.form);
+            cancel();
+        } finally {
+            state.btnLoading = false;
+        }
     });
 };
 
 const cancel = () => {
-    emit('update:visible', false);
+    visible.value = false;
     emit('cancel');
 };
 
diff --git a/mayfly_go_web/src/views/ops/db/DbRestoreList.vue b/mayfly_go_web/src/views/ops/db/DbRestoreList.vue
index 8095d078..137f79e6 100644
--- a/mayfly_go_web/src/views/ops/db/DbRestoreList.vue
+++ b/mayfly_go_web/src/views/ops/db/DbRestoreList.vue
@@ -9,11 +9,7 @@
             :searchItems="searchItems"
             :before-query-fn="beforeQueryFn"
             v-model:query-form="query"
-            :data="state.data"
             :columns="columns"
-            :total="state.total"
-            v-model:page-size="query.pageSize"
-            v-model:page-num="query.pageNum"
         >
             
                 
diff --git a/mayfly_go_web/src/views/ops/tag/TagTreeList.vue b/mayfly_go_web/src/views/ops/tag/TagTreeList.vue
index da0c66ad..61ec902f 100644
--- a/mayfly_go_web/src/views/ops/tag/TagTreeList.vue
+++ b/mayfly_go_web/src/views/ops/tag/TagTreeList.vue
@@ -396,7 +396,7 @@ const removeDeafultExpandId = (id: any) => {