Capital/components/dev/BotTokenCreate.vue
2024-08-26 00:58:47 +08:00

84 lines
2.5 KiB
Vue

<template>
<v-dialog max-width="640">
<template v-slot:activator="{ props }">
<slot name="activator" v-bind="{ props }" />
</template>
<template v-slot:default="{ isActive }">
<v-card title="Create Bot Key" :subtitle="`for bot @${props.item.name}`">
<v-form @submit.prevent="(evt) => { submit(evt).then(() => isActive.value = false) }">
<v-card-text class="pt-0 px-5">
<v-expand-transition>
<v-alert v-if="error" variant="tonal" type="error" class="text-xs mb-5">
{{ t("errorOccurred", [error]) }}
</v-alert>
</v-expand-transition>
<v-row>
<v-col cols="12" md="6">
<v-text-field label="Name" name="name" variant="outlined" hide-details />
</v-col>
<v-col cols="12" md="6">
<v-textarea auto-grow rows="1" label="Description" name="description" variant="outlined" hide-details />
</v-col>
<v-col cols="12">
<v-text-field type="number" label="Lifecycle" name="lifecycle" variant="outlined"
hint="How long will this key last (in seconds)" clearable persistent-hint />
</v-col>
</v-row>
</v-card-text>
<v-card-actions>
<v-spacer />
<v-btn
text="Cancel"
color="grey"
@click="isActive.value = false"
/>
<v-btn
text="Create"
type="submit"
/>
</v-card-actions>
</v-form>
</v-card>
</template>
</v-dialog>
</template>
<script setup lang="ts">
const props = defineProps<{ item: any }>()
const emits = defineEmits(["completed"])
const { t } = useI18n()
const error = ref<null | string>(null)
const submitting = ref(false)
async function submit(evt: SubmitEvent) {
const data: any = Object.fromEntries(new FormData(evt.target as HTMLFormElement).entries())
if (!data.name) return
data.lifecycle = parseInt(data.lifecycle)
if (Number.isNaN(data.lifecycle)) delete data.lifecycle
submitting.value = true
const res = await solarFetch(`/cgi/id/dev/bots/${props.item.id}/keys`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
})
if (res.status != 200) {
error.value = await res.text()
throw new Error(error.value)
} else {
emits("completed")
}
submitting.value = false
}
</script>