Scert/frontend/src/views/Dashboard/DomainModal.vue

161 lines
5.0 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>
import HelpTip from "../components/HelpTip/HelpTip.vue";
const props = defineProps({ state: { type: Object, required: true } });
const {
showForm,
formTitle,
closeForm,
saveDomain,
form,
dnsProviders,
servers,
displayLabel,
webServerLabels,
formError,
saving,
} = props.state;
</script>
<template>
<div v-if="showForm" class="modal-backdrop domain-backdrop" @click.self="closeForm">
<section
class="modal-card domain-modal"
role="dialog"
aria-modal="true"
:aria-label="formTitle"
>
<div class="modal-heading">
<div>
<p class="eyebrow">域名配置</p>
<h2>{{ formTitle }}</h2>
</div>
<button
class="close-button"
type="button"
aria-label="关闭"
@click="closeForm"
>
×
</button>
</div>
<form @submit.prevent="saveDomain">
<label class="field" for="domain-name"
><span>主域名</span
><input
id="domain-name"
name="name"
v-model="form.name"
type="text"
placeholder="例如 example.com"
autocomplete="off"
/></label>
<label class="field" for="certificate-type"
><span>证书类型</span
><select
id="certificate-type"
name="certificate_type"
v-model="form.certificate_type"
>
<option value="single">单域名</option>
<option value="wildcard">泛域名</option>
<option value="san">SAN 多域名</option>
</select></label
>
<label
v-if="form.certificate_type === 'san'"
class="field domain-sans-field"
for="domain-sans"
><span>附加域名 <HelpTip>每行一个,也支持逗号分隔</HelpTip></span
><textarea
id="domain-sans"
name="sans"
v-model="form.sans"
rows="2"
:placeholder="'www.example.com\napi.example.com'"
></textarea>
</label>
<div class="form-grid">
<label class="field" for="acme-environment"
><span>ACME 环境</span
><select
id="acme-environment"
name="acme_environment"
v-model="form.acme_environment"
>
<option value="staging">测试环境</option>
<option value="production">生产环境</option>
</select></label
>
<label class="field" for="dns-provider"
><span>DNS 验证服务商</span
><select
id="dns-provider"
name="dns_provider"
v-model="form.dns_provider"
>
<option value="">暂不选择</option>
<option
v-for="provider in dnsProviders"
:key="provider.value"
:value="provider.value"
>
{{ provider.label }}
</option>
</select></label
>
</div>
<label class="switch-field" for="auto-renew"
><input
id="auto-renew"
name="auto_renew"
v-model="form.auto_renew"
type="checkbox"
/><span
><strong>启用自动续期</strong
><HelpTip>证书剩余有效期达到阈值时自动创建续期任务</HelpTip></span
></label
>
<fieldset class="server-picker">
<legend>关联部署服务器</legend>
<label
v-for="server in servers"
:key="server.id"
class="server-option"
><input
v-model="form.server_ids"
type="checkbox"
:value="server.id"
/><span
><strong>{{ server.name }}</strong
><small
>{{ server.address }} ·
{{ displayLabel(webServerLabels, server.web_server) }}</small
></span
></label
>
<p v-if="servers.length === 0" class="muted">
暂无服务器配置,可先保存域名后添加服务器。
</p>
</fieldset>
<p v-if="formError" class="form-error">{{ formError }}</p>
<div class="modal-actions">
<button
class="secondary-button"
type="button"
:disabled="saving"
@click="closeForm"
>
取消</button
><button class="primary-button" type="submit" :disabled="saving">
{{ saving ? "保存中……" : "保存配置" }}
</button>
</div>
</form>
</section>
</div>
</template>
<style scoped src="./Dashboard.css"></style>
<style scoped src="./DomainModal.css"></style>