93 lines
2.9 KiB
Vue
93 lines
2.9 KiB
Vue
<script setup lang="ts">
|
||
const props = defineProps<{
|
||
onSubmit: (data: ZodInfer<typeof schema>) => Promise<void>
|
||
}>()
|
||
|
||
const schema = z.object({
|
||
endPoint: z.string({
|
||
required_error: 'endpoint字段不能为空',
|
||
}),
|
||
accessKey: z.string({
|
||
required_error: 'accesskey字段不能为空',
|
||
}),
|
||
secretKey: z.string({
|
||
required_error: 'secretkey字段不能为空',
|
||
}),
|
||
port: z.number({
|
||
required_error: 'port字段不能为空',
|
||
}).optional(),
|
||
region: z.string().optional(),
|
||
useSSL: z.boolean(),
|
||
})
|
||
|
||
const formValues = {
|
||
endPoint: 'fgws3.jwanfs.ocloud.ihep.ac.cn',
|
||
accessKey: 'NsccczIb9DsAQ7RNMIkv',
|
||
secretKey: 'gBGR9UdhESQntF7wbMqB',
|
||
region: 'us-east-1',
|
||
useSSL: true,
|
||
}
|
||
|
||
const open = ref(false)
|
||
|
||
async function onSubmit(values: ZodInfer<typeof schema>) {
|
||
open.value = false
|
||
await props.onSubmit(values)
|
||
}
|
||
</script>
|
||
|
||
<template>
|
||
<Dialog v-model:open="open">
|
||
<DialogTrigger as-child>
|
||
<Button class="font-bold tracking-wide" size="xs">
|
||
添加资源化技术
|
||
</Button>
|
||
</DialogTrigger>
|
||
<DialogScrollContent class="sm:max-w-[425px]">
|
||
<DialogHeader>
|
||
<DialogTitle>资源化技术信息</DialogTitle>
|
||
<DialogDescription>
|
||
请填写所需要的资源化技术信息等。
|
||
</DialogDescription>
|
||
</DialogHeader>
|
||
<Form class="space-y-4" :schema="schema" :initial-values="formValues" @submit="onSubmit">
|
||
<FormFieldItem v-slot="{ componentField }" label="EndPoint" name="endPoint" required>
|
||
<Input type="text" v-bind="componentField" placeholder="" />
|
||
</FormFieldItem>
|
||
<FormFieldItem v-slot="{ componentField }" label="AccessKey" name="accessKey" required>
|
||
<Input type="text" v-bind="componentField" />
|
||
</FormFieldItem>
|
||
<FormFieldItem v-slot="{ componentField }" label="SecretKey" name="secretKey" required>
|
||
<Input type="text" v-bind="componentField" />
|
||
</FormFieldItem>
|
||
<FormFieldItem v-slot="{ componentField }" label="端口" name="port">
|
||
<Input type="number" v-bind="componentField" />
|
||
</FormFieldItem>
|
||
<FormFieldItem name="useSSL">
|
||
<template #content="{ value, handleChange }">
|
||
<div class="col-span-1" />
|
||
<div class="flex col-span-3 gap-x-3">
|
||
<FormControl>
|
||
<Checkbox :checked="value" @update:checked="handleChange" />
|
||
</FormControl>
|
||
<div class="space-y-1 leading-none">
|
||
<FormLabel>useSSL</FormLabel>
|
||
<FormDescription>
|
||
是否启用安全(HTTPS)认证
|
||
</FormDescription>
|
||
<FormMessage />
|
||
</div>
|
||
</div>
|
||
</template>
|
||
</FormFieldItem>
|
||
|
||
<DialogFooter class="mt-4">
|
||
<Button type="submit" class="font-bold tracking-wide">
|
||
保存
|
||
</Button>
|
||
</DialogFooter>
|
||
</Form>
|
||
</DialogScrollContent>
|
||
</Dialog>
|
||
</template>
|