【修复】申请证书中CA强制邮箱关联的问题

This commit is contained in:
chudong
2025-05-23 17:46:02 +08:00
parent 85ff88c502
commit febe33dfd6
74 changed files with 128 additions and 96 deletions

View File

@@ -21,15 +21,18 @@ import { $t } from '@locales/index'
* path="form.eabId"
* v-model:value="formValue.eabId"
* v-model:ca="formValue.ca"
* v-model:email="formValue.email"
* />
*
* @property {string} path - 表单路径,用于表单校验。
* @property {string} value - 当前选中的值 (通过 v-model:value 绑定)。
* @property {string} ca - 当前选中的CA类型 (通过 v-model:ca 绑定)。
* @property {string} email - 邮箱地址 (通过 v-model:email 绑定),当 value 不为空时会被自动赋值。
* @property {boolean} [disabled=false] - 是否禁用。
* @property {string} [customClass] - 自定义CSS类名。
*
* @emits update:value - (value: { value: string; ca: string }) 当选择的CA授权变更时触发传递值和CA类型。
* @emits update:email - (email: string) 当 value 不为空时触发,传递邮箱地址。
*/
export default defineComponent<CAProviderSelectProps>({
name: 'CAProviderSelect',
@@ -47,6 +50,10 @@ export default defineComponent<CAProviderSelectProps>({
type: String,
required: true,
},
email: {
type: String,
required: true,
},
disabled: {
type: Boolean,
default: false,
@@ -58,6 +65,7 @@ export default defineComponent<CAProviderSelectProps>({
},
emits: {
'update:value': (value: { value: string; ca: string }) => true,
'update:email': (email: string) => true,
},
setup(props: CAProviderSelectProps, { emit }: { emit: CAProviderSelectEmits }) {
const {

View File

@@ -6,6 +6,7 @@ export interface CAProviderOption {
label: string
value: string
ca: string
email: string
}
/**
@@ -28,6 +29,11 @@ export interface CAProviderSelectProps {
* @description 当前选中的CA类型
*/
ca: string
/**
* @property email
* @description 邮箱地址,当 value 不为空时会被赋值
*/
email: string
/**
* @property disabled
* @description 是否禁用选择器
@@ -46,7 +52,8 @@ export interface CAProviderSelectProps {
* @description CAProviderSelect 组件的 Emits 定义
*/
export interface CAProviderSelectEmits {
(e: 'update:value', value: { value: string; ca: string }): void
(e: 'update:value', value: { value: string; ca: string; email: string }): void
(e: 'update:email', email: string): void
}
/**

View File

@@ -22,6 +22,7 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
label: '',
value: '',
ca: '',
email: '',
})
const caProviderRef = ref<CAProviderOption[]>([])
const isLoading = ref(false)
@@ -47,6 +48,7 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
label: selectedProvider.label,
value: selectedProvider.value,
ca: selectedProvider.ca,
email: selectedProvider.email,
}
} else if (caProviderRef.value.length > 0 && param.value.value === '') {
// 如果 param.value 为空(例如初始状态或清空后),且 caProviderRef 列表不为空,则默认选中第一个
@@ -54,9 +56,16 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
label: caProviderRef.value[0]?.label || '',
value: caProviderRef.value[0]?.value || '',
ca: caProviderRef.value[0]?.ca || '',
email: caProviderRef.value[0]?.email || '',
}
}
emit('update:value', { value: param.value.value, ca: param.value.ca })
// 当 value 不为空时,将其赋值给 email 字段
if (param.value.value !== '') {
emit('update:email', param.value.email)
}
emit('update:value', { value: param.value.value, ca: param.value.ca, email: param.value.email })
}
/**
@@ -82,6 +91,7 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
label: "Let's Encrypt",
value: '',
ca: 'letsencrypt',
email: '',
}
// 获取其他CA授权列表
@@ -90,6 +100,7 @@ export function useCAProviderSelectController(props: CAProviderSelectProps, emit
label: item.name,
value: item.id.toString(),
ca: item.ca,
email: item.mail,
}))
// 合并选项Let's Encrypt在首位

View File

@@ -113,6 +113,7 @@ nodeOptions[APPLY] = () =>
provider: '',
provider_id: '',
algorithm: 'RSA2048',
skip_check: 0,
},
childNode: null,
},