Преглед изворни кода

优化域名管理功能,支持批量创建域名并添加域名格式验证,提升用户体验。

wuyi пре 3 месеци
родитељ
комит
956e871a8f
1 измењених фајлова са 53 додато и 12 уклоњено
  1. 53 12
      src/views/DomainView.vue

+ 53 - 12
src/views/DomainView.vue

@@ -216,6 +216,13 @@ const validateForm = () => {
     return false
   }
 
+  // 验证域名格式
+  const domains = domainModel.domain.split('\n').filter(domain => domain.trim())
+  if (domains.length === 0) {
+    toast.add({ severity: 'warn', summary: '警告', detail: '请输入有效的域名', life: 3000 })
+    return false
+  }
+
   // 管理员必须指定teamId
   if (isAdmin.value && !domainModel.teamId) {
     toast.add({ severity: 'warn', summary: '警告', detail: '请选择团队', life: 3000 })
@@ -229,22 +236,56 @@ const onSubmit = async () => {
   if (!validateForm()) return
 
   try {
-    const domainData = {
-      domain: domainModel.domain,
-      description: domainModel.description
-    }
+    if (isEditing.value) {
+      // 编辑模式:只支持单个域名
+      const domainData = {
+        domain: domainModel.domain.trim(),
+        description: domainModel.description
+      }
 
-    // 管理员需要传递teamId
-    if (isAdmin.value) {
-      domainData.teamId = domainModel.teamId
-    }
+      // 管理员需要传递teamId
+      if (isAdmin.value) {
+        domainData.teamId = domainModel.teamId
+      }
 
-    if (isEditing.value) {
       await updateTeamDomain(selectedDomain.value.id, domainData)
       toast.add({ severity: 'success', summary: '成功', detail: '更新域名成功', life: 3000 })
     } else {
-      await createTeamDomain(domainData)
-      toast.add({ severity: 'success', summary: '成功', detail: '创建域名成功', life: 3000 })
+      // 创建模式:支持批量创建
+      const domains = domainModel.domain.split('\n').filter(domain => domain.trim())
+      let successCount = 0
+      let failCount = 0
+
+      for (const domain of domains) {
+        try {
+          const domainData = {
+            domain: domain.trim(),
+            description: domainModel.description
+          }
+
+          // 管理员需要传递teamId
+          if (isAdmin.value) {
+            domainData.teamId = domainModel.teamId
+          }
+
+          await createTeamDomain(domainData)
+          successCount++
+        } catch (error) {
+          console.error(`创建域名 ${domain} 失败:`, error)
+          failCount++
+        }
+      }
+
+      if (successCount > 0) {
+        toast.add({ 
+          severity: 'success', 
+          summary: '成功', 
+          detail: `成功创建 ${successCount} 个域名${failCount > 0 ? `,${failCount} 个失败` : ''}`, 
+          life: 3000 
+        })
+      } else {
+        toast.add({ severity: 'error', summary: '失败', detail: '所有域名创建失败', life: 3000 })
+      }
     }
 
     dialogVisible.value = false
@@ -468,7 +509,7 @@ onMounted(() => {
 
           <div class="flex flex-col gap-2">
             <label class="font-medium">域名</label>
-            <InputText v-model="domainModel.domain" placeholder="请输入域名" />
+            <Textarea v-model="domainModel.domain" placeholder="请输入域名,多个域名请换行输入" rows="4" />
             <small v-if="!domainModel.domain" class="text-red-500">请输入域名</small>
           </div>