|
|
@@ -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>
|
|
|
|