Files
oci-portal-dash/src/components/tenant/SubscribeRegionModal.vue
T
Wang Defa 5464d2dfea
CI / test (push) Successful in 27s
Release / release (push) Successful in 26s
发布 0.1.0:通知渠道、告警规则与多项体验修复
2026-07-10 17:31:19 +08:00

90 lines
2.6 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script setup lang="ts">
import { NCheckbox, NSelect } from 'naive-ui'
import { computed, ref, watch } from 'vue'
import { listRegions, subscribeRegion } from '@/api/configs'
import FormField from '@/components/FormField.vue'
import FormModal from '@/components/FormModal.vue'
import { useAsync } from '@/composables/useAsync'
import { useToast } from '@/composables/useToast'
const props = defineProps<{
show: boolean
cfgId: number
subscribedKeys: string[]
/** 从区域列表行内发起时预选并锁定该区域 */
presetKey?: string | null
}>()
const emit = defineEmits<{ 'update:show': [boolean]; subscribed: [] }>()
const message = useToast()
const submitting = ref(false)
const regionKey = ref<string | null>(null)
const acknowledged = ref(false)
const regions = useAsync(listRegions, false)
watch(
() => props.show,
(v) => {
if (v) {
regionKey.value = props.presetKey ?? null
acknowledged.value = false
void regions.run()
}
},
)
const options = computed(
() =>
regions.data.value
?.filter((r) => !props.subscribedKeys.includes(r.key))
.map((r) => ({ label: `${r.alias}${r.name}`, value: r.key })) ?? [],
)
async function submit() {
if (!regionKey.value) return
submitting.value = true
try {
await subscribeRegion(props.cfgId, regionKey.value)
message.success('订阅请求已提交,生效需数分钟(状态 IN_PROGRESS')
emit('update:show', false)
emit('subscribed')
} catch (e) {
message.error(e instanceof Error ? e.message : '订阅失败')
} finally {
submitting.value = false
}
}
</script>
<template>
<FormModal
:show="show"
title="订阅新区域"
:submitting="submitting"
:submit-disabled="!regionKey || !acknowledged"
submit-text="确认订阅"
danger
@update:show="emit('update:show', $event)"
@submit="submit"
>
<div
class="mb-3.5 rounded-md border border-err/30 bg-err/10 px-3.5 py-2.5 text-[12.5px] leading-relaxed text-err"
>
区域订阅一经创建<strong>永久不可取消</strong>会永久占用该租户的区域配额并可能产生跨区域数据驻留影响请确认业务确实需要后再操作
</div>
<FormField label="目标区域" required :hint="presetKey ? undefined : '已订阅的区域不在列表中'">
<NSelect
v-model:value="regionKey"
filterable
:disabled="!!presetKey"
:options="options"
:loading="regions.loading.value"
placeholder="选择要订阅的区域"
/>
</FormField>
<NCheckbox v-model:checked="acknowledged">我已知晓区域订阅不可取消</NCheckbox>
</FormModal>
</template>