feat: add verified badge for email field in profile detail page (#5783)

#### What type of PR is this?

/area ui
/kind improvement
/milestone 2.15.x

#### What this PR does / why we need it:

在个人中心的个人资料页面添加邮箱已验证的标识,方便用户知晓。

<img width="596" alt="image" src="https://github.com/halo-dev/halo/assets/21301288/77cd83e1-cefe-453c-ad12-689ee893c8ee">

#### Does this PR introduce a user-facing change?

```release-note
在个人中心的个人资料页面添加邮箱已验证的标识。
```
pull/5787/head
Ryan Wang 2024-04-26 12:36:59 +08:00 committed by GitHub
parent 5a0f735efb
commit f2b883f2e9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 49 additions and 3 deletions

View File

@ -1,5 +1,6 @@
<script lang="ts" setup>
import {
IconInformation,
IconUserSettings,
VDescription,
VDescriptionItem,
@ -8,6 +9,7 @@ import {
import type { DetailedUser } from "@halo-dev/api-client";
import { rbacAnnotations } from "@/constants/annotations";
import { formatDatetime } from "@/utils/date";
import RiVerifiedBadgeLine from "~icons/ri/verified-badge-line";
withDefaults(defineProps<{ user?: DetailedUser }>(), {
user: undefined,
@ -28,9 +30,27 @@ withDefaults(defineProps<{ user?: DetailedUser }>(), {
/>
<VDescriptionItem
:label="$t('core.user.detail.fields.email')"
:content="user?.user.spec.email || $t('core.common.text.none')"
class="!px-2"
/>
>
<div v-if="user?.user.spec.email" class="flex items-center space-x-2">
<span>
{{ user?.user.spec.email }}
</span>
<RiVerifiedBadgeLine
v-if="user?.user.spec.emailVerified"
v-tooltip="$t('core.user.detail.fields.email_verified.tooltip')"
class="text-xs text-blue-600"
/>
<IconInformation
v-else
v-tooltip="$t('core.user.detail.fields.email_not_verified.tooltip')"
class="text-xs text-red-500"
/>
</div>
<span v-else>
{{ $t("core.common.text.none") }}
</span>
</VDescriptionItem>
<VDescriptionItem
:label="$t('core.user.detail.fields.roles')"
class="!px-2"

View File

@ -975,6 +975,10 @@ core:
bio: Bio
creation_time: Creation time
identity_authentication: Identity authentication
email_verified:
tooltip: Verified
email_not_verified:
tooltip: Not verified
role:
title: Roles
common:
@ -1079,6 +1083,8 @@ core:
Your email address has not been verified yet, click the button below
to verify it
title: Verify email
email_verified:
tooltip: Verified
pat:
operations:
delete:

View File

@ -928,6 +928,10 @@ core:
bio: 描述
creation_time: 注册时间
identity_authentication: 登录方式
email_verified:
tooltip: 已验证
email_not_verified:
tooltip: 未验证
role:
title: 角色
common:
@ -1024,6 +1028,8 @@ core:
email_not_verified:
title: 验证电子邮箱
description: 电子邮箱地址还未验证,点击下方按钮进行验证
email_verified:
tooltip: 已验证
pat:
operations:
delete:

View File

@ -908,6 +908,10 @@ core:
bio: 描述
creation_time: 註冊時間
identity_authentication: 登入方式
email_verified:
tooltip: 已驗證
email_not_verified:
tooltip: 未驗證
role:
title: 角色
common:
@ -1004,6 +1008,8 @@ core:
email_not_verified:
description: 電子郵件地址尚未驗證,點擊下方按鈕進行驗證
title: 驗證電子郵件信箱
email_verified:
tooltip: 已驗證
pat:
operations:
delete:

View File

@ -17,6 +17,7 @@ import { apiClient } from "@/utils/api-client";
import axios from "axios";
import { useI18n } from "vue-i18n";
import EmailVerifyModal from "../components/EmailVerifyModal.vue";
import RiVerifiedBadgeLine from "~icons/ri/verified-badge-line";
withDefaults(defineProps<{ user?: DetailedUser }>(), { user: undefined });
@ -103,7 +104,14 @@ const emailVerifyModal = ref(false);
</VAlert>
<div v-else>
<span>{{ user.user.spec.email }}</span>
<div class="flex items-center space-x-2">
<span>{{ user.user.spec.email }}</span>
<RiVerifiedBadgeLine
v-if="user.user.spec.emailVerified"
v-tooltip="$t('core.uc_profile.detail.email_verified.tooltip')"
class="text-xs text-blue-600"
/>
</div>
<div v-if="!user.user.spec.emailVerified" class="mt-3">
<VAlert
:title="$t('core.uc_profile.detail.email_not_verified.title')"