实时显示密码强度指示,帮助用户创建更安全的密码。
<script setup lang="ts">
const password = ref('')
</script>
<template>
<div>
<FaInput v-model="password" type="password" placeholder="请输入密码" />
<FaPasswordStrength :password="password" class="mt-2" />
</div>
</template>| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
password | string | '' | 密码值 |
无
无
密码强度根据以下规则计算(满分 5 分):
<script setup lang="ts">
const password = ref('')
</script>
<template>
<div class="space-y-2">
<FaInput v-model="password" type="password" placeholder="请输入密码" />
<FaPasswordStrength :password="password" />
</div>
</template><script setup lang="ts">
const form = ref({
password: '',
confirmPassword: '',
})
</script>
<template>
<form class="space-y-4">
<div>
<FaLabel label="密码">
<FaInput v-model="form.password" type="password" placeholder="请输入密码" />
</FaLabel>
<FaPasswordStrength :password="form.password" class="mt-2" />
</div>
<FaInput
v-model="form.confirmPassword"
type="password"
placeholder="确认密码"
/>
</form>
</template><script setup lang="ts">
const form = ref({
oldPassword: '',
newPassword: '',
})
function handleChangePassword() {
// 修改密码逻辑
}
</script>
<template>
<FaCard title="修改密码">
<div class="space-y-4">
<FaInput
v-model="form.oldPassword"
type="password"
placeholder="当前密码"
/>
<div>
<FaInput
v-model="form.newPassword"
type="password"
placeholder="新密码"
/>
<FaPasswordStrength :password="form.newPassword" class="mt-2" />
</div>
<FaButton @click="handleChangePassword">确认修改</FaButton>
</div>
</FaCard>
</template><script setup lang="ts">
const { t } = useI18n()
const password = ref('')
const rules = computed(() => [
{ text: t('hasLength'), met: password.value.length >= 8 },
{ text: t('hasUppercase'), met: /[A-Z]/.test(password.value) },
{ text: t('hasLowercase'), met: /[a-z]/.test(password.value) },
{ text: t('hasNumber'), met: /\d/.test(password.value) },
{ text: t('hasSpecialChar'), met: /[^A-Z0-9]/i.test(password.value) },
])
</script>
<template>
<div class="space-y-4">
<FaInput v-model="password" type="password" placeholder="请输入密码" />
<FaPasswordStrength :password="password" />
<div class="text-sm space-y-1">
<div
v-for="(rule, index) in rules"
:key="index"
class="flex items-center gap-2"
:class="rule.met ? 'text-green-600' : 'text-muted-foreground'"
>
<FaIcon :name="rule.met ? 'i-lucide:check-circle' : 'i-lucide:circle'" class="size-4" />
{{ rule.text }}
</div>
</div>
</div>
</template><script setup lang="ts">
const password = ref('')
const strengthTips = [
'非常弱',
'弱',
'一般',
'强',
'非常强',
]
const strength = computed(() => {
let score = 0
if (password.value.length >= 8) score++
if (/[A-Z]/.test(password.value)) score++
if (/[a-z]/.test(password.value)) score++
if (/\d/.test(password.value)) score++
if (/[^A-Z0-9]/i.test(password.value)) score++
return score
})
</script>
<template>
<div class="space-y-2">
<FaInput v-model="password" type="password" placeholder="请输入密码" />
<div class="flex items-center gap-2">
<FaPasswordStrength :password="password" class="flex-1" />
<span class="text-xs text-muted-foreground">
{{ strengthTips[strength - 1] || '' }}
</span>
</div>
</div>
</template>