新增: 登录页 UI 重构 + 品牌 logo 与 Lottie 启动动画
视觉与品牌 - public/logo.svg、public/login-illustration.svg、favicon 替换为 logo.svg。 - preferences.ts 新增 logo.source 指向 /logo.svg。 - packages/effects/layouts 导出 LoginIllustration 共享组件(浮动插画,加载失败自动隐藏)。 Auth 布局重构 - layouts/auth.vue 替换默认 AuthPageLayout:主题色渐变背景 + 左侧浮动插画 + 品牌卡片 + 右上 LanguageToggle + 圆角登录卡片;KeepAlive 仅缓存 Login (CodeLogin/QrCodeLogin 需要每次刷新验证码/二维码)。 - 表单样式通过 :deep(.login-form-container) 覆盖输入框、选择框、主按钮, 全部走 --primary 变量,与主题色联动。 登录组件 - views/_core/authentication/login.vue: 关闭默认 codeLogin/qrcodeLogin/ thirdPartyLogin/register/docLink,改为手机 / 二维码 / 企微三按钮(IconifyIcon); 三方登录前检查租户,缺失时 message.warning + validateField。 - packages/effects/common-ui/authentication/login.vue + types.ts: 新增 showDocLink prop(默认 true),替代原本 HTML 注释掉 DocLink 的做法。 - sso-callback.vue: 等待提示改为 LottieLoading 动画。 Lottie 启动动画 - 新增 loading.html(注入进 index.html)+ public/loading.json + 运行时拷贝的 public/lottie_light.min.js(.gitignore 忽略)。 - 新增 public/lottie-tint.js:共享主题色适配器(LIGHTNESSES / SHADE_MAP / hslToRgb / patchColors / readPrimary),同时被启动白屏脚本与 Vue 组件使用, 消除两份几乎一致的实现。 - 新增 src/components/lottie-loading/LottieLoading.vue:按需加载 lottie-tint.js 并根据 CSS 变量 --primary 重新上色。 - vite.config.mts 新增 copyLottiePlayer 插件:configResolved 时无条件把 node_modules/lottie-web/.../lottie_light.min.js 拷到 public/,避免 mtime 误判。 - package.json 新增 lottie-web ^5.13.0 依赖。 i18n - 新增 otherLoginMethods / contactSupport / weComLogin 三个文案(zh-CN / en-US)。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
|
||||
defineOptions({
|
||||
name: 'LoginIllustration',
|
||||
});
|
||||
|
||||
defineProps<{
|
||||
alt?: string;
|
||||
}>();
|
||||
|
||||
// 加载失败时隐藏(避免显示破图图标)
|
||||
// 用户可以往 apps/web-antd/public/login-illustration.svg 放自己的插画
|
||||
const hasError = ref(false);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div v-if="!hasError" class="login-illustration-container">
|
||||
<img
|
||||
src="/login-illustration.svg"
|
||||
:alt="alt || 'Login Illustration'"
|
||||
class="animate-float w-full opacity-40"
|
||||
style="max-width: none; height: auto"
|
||||
@error="hasError = true"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
@keyframes float-smooth {
|
||||
0%,
|
||||
100% {
|
||||
transform: scale(1) translateY(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: scale(1) translateY(-12px);
|
||||
}
|
||||
}
|
||||
|
||||
.login-illustration-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.login-illustration-container img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
object-fit: contain;
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
/* 覆盖 Tailwind 的 animate-float,使用更快速流畅的动画 */
|
||||
.login-illustration-container img.animate-float {
|
||||
animation: float-smooth 3s ease-in-out 0ms infinite;
|
||||
}
|
||||
</style>
|
||||
@@ -1,2 +1,3 @@
|
||||
export { default as AuthPageLayout } from './authentication.vue';
|
||||
export { default as LoginIllustration } from './icons/login-illustration.vue';
|
||||
export * from './types';
|
||||
|
||||
Reference in New Issue
Block a user