diff --git a/frontend/src/views/website/website/group/index.vue b/frontend/src/views/website/website/group/index.vue
index 587bfa94f..b2fe5ab6e 100644
--- a/frontend/src/views/website/website/group/index.vue
+++ b/frontend/src/views/website/website/group/index.vue
@@ -14,13 +14,17 @@
                         {{ row.name }}
                         <span v-if="row.default">({{ $t('website.default') }})</span>
                     </span>
-                    <el-input v-if="row.edit" v-model="row.name"></el-input>
+                    <el-form ref="groupForm" :model="row" :rules="rules">
+                        <el-form-item prop="name" v-if="row.edit">
+                            <el-input v-model="row.name"></el-input>
+                        </el-form-item>
+                    </el-form>
                 </template>
             </el-table-column>
             <el-table-column :label="$t('commons.table.operate')">
                 <template #default="{ row, $index }">
                     <div>
-                        <el-button link v-if="row.edit" type="primary" @click="saveGroup(row, false)">
+                        <el-button link v-if="row.edit" type="primary" @click="saveGroup(groupForm, row, false)">
                             {{ $t('commons.button.save') }}
                         </el-button>
                         <el-button link v-if="!row.edit" type="primary" @click="editGroup($index)">
@@ -38,7 +42,12 @@
                         <el-button link v-if="row.edit" type="primary" @click="cancelEdit($index)">
                             {{ $t('commons.button.cancel') }}
                         </el-button>
-                        <el-button link v-if="!row.edit && !row.default" type="primary" @click="saveGroup(row, true)">
+                        <el-button
+                            link
+                            v-if="!row.edit && !row.default"
+                            type="primary"
+                            @click="saveGroup(groupForm, row, true)"
+                        >
                             {{ $t('website.setDefault') }}
                         </el-button>
                     </div>
@@ -54,6 +63,8 @@ import ComplexTable from '@/components/complex-table/index.vue';
 import { ListGroups, CreateGroup, DeleteGroup, UpdateGroup } from '@/api/modules/website';
 import Header from '@/components/drawer-header/index.vue';
 import { MsgSuccess } from '@/utils/message';
+import { Rules } from '@/global/form-rules';
+import { FormInstance } from 'element-plus';
 
 interface groupData {
     id: number;
@@ -62,6 +73,11 @@ interface groupData {
     default: boolean;
 }
 
+let rules = ref<any>({
+    name: [Rules.name],
+});
+const groupForm = ref<FormInstance>();
+
 let open = ref(false);
 let data = ref<groupData[]>([]);
 const handleClose = () => {
@@ -84,26 +100,32 @@ const search = () => {
     });
 };
 
-const saveGroup = (create: groupData, isDefault: boolean) => {
-    const group = {
-        name: create.name,
-        id: create.id,
-        default: create.default,
-    };
-    if (isDefault) {
-        group.default = isDefault;
-    }
-    if (create.id == 0) {
-        CreateGroup(group).then(() => {
-            MsgSuccess(i18n.global.t('commons.msg.createSuccess'));
-            search();
-        });
-    } else {
-        UpdateGroup(group).then(() => {
-            MsgSuccess(i18n.global.t('commons.msg.updateSuccess'));
-            search();
-        });
-    }
+const saveGroup = async (formEl: FormInstance, create: groupData, isDefault: boolean) => {
+    if (!formEl) return;
+    await formEl.validate((valid) => {
+        if (!valid) {
+            return;
+        }
+        const group = {
+            name: create.name,
+            id: create.id,
+            default: create.default,
+        };
+        if (isDefault) {
+            group.default = isDefault;
+        }
+        if (create.id == 0) {
+            CreateGroup(group).then(() => {
+                MsgSuccess(i18n.global.t('commons.msg.createSuccess'));
+                search();
+            });
+        } else {
+            UpdateGroup(group).then(() => {
+                MsgSuccess(i18n.global.t('commons.msg.updateSuccess'));
+                search();
+            });
+        }
+    });
 };
 
 const acceptParams = async () => {
@@ -160,6 +182,7 @@ const cancelEdit = (index: number) => {
         data.value.splice(index, 1);
     } else {
         data.value[index].edit = false;
+        search();
     }
 };