2026-02-02 23:17:44 +08:00
|
|
|
<template>
|
2026-02-12 14:25:27 +08:00
|
|
|
<div :class="prefixCls" class="relative h-[100%]" :style="{ backgroundImage: 'url(' + localImage + ')' }">
|
|
|
|
|
<div class="relative mx-auto h-full flex" style="float:left; margin-left: 200px;">
|
2026-02-02 23:17:44 +08:00
|
|
|
<div
|
2026-02-12 14:25:27 +08:00
|
|
|
class="relative flex-1 p-30px lt-sm:p-10px overflow-x-hidden overflow-y-auto"
|
|
|
|
|
:class="`${prefixCls}__right`">
|
2026-02-02 23:17:44 +08:00
|
|
|
<!-- 右边的登录界面 -->
|
|
|
|
|
<Transition appear enter-active-class="animate__animated animate__bounceInRight">
|
|
|
|
|
<div
|
|
|
|
|
:class="newClass"
|
|
|
|
|
class="pos-relative z-2 m-auto h-[calc(100%-60px)] w-[100%] flex items-center at-2xl:max-w-500px at-lg:max-w-500px at-md:max-w-500px at-xl:max-w-500px"
|
|
|
|
|
>
|
|
|
|
|
<div class="bg-#fff dark:bg-[var(--login-bg-color)] b-rounded-20px px-20px">
|
|
|
|
|
<!-- 账号登录 -->
|
|
|
|
|
<LoginForm class="m-auto h-auto p-20px lt-xl:(rounded-3xl light:bg-white)" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</Transition>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
<script lang="ts" setup>
|
|
|
|
|
import { useDesign } from '@/hooks/web/useDesign'
|
|
|
|
|
import { useAppStore } from '@/store/modules/app'
|
|
|
|
|
import { ThemeSwitch } from '@/layout/components/ThemeSwitch'
|
|
|
|
|
import { LocaleDropdown } from '@/layout/components/LocaleDropdown'
|
|
|
|
|
import { useWindowSize } from '@vueuse/core'
|
2026-02-12 14:25:27 +08:00
|
|
|
import { LoginForm } from './components'
|
2026-02-02 23:17:44 +08:00
|
|
|
import * as loginAnimation from '@/assets/json/login_left.json'
|
|
|
|
|
|
2026-02-12 14:25:27 +08:00
|
|
|
// import { useRoute } from 'vue-router';
|
|
|
|
|
import localImage from '@/assets/imgs/background.jpg'
|
|
|
|
|
|
2026-02-02 23:17:44 +08:00
|
|
|
defineOptions({ name: 'Login' })
|
|
|
|
|
|
|
|
|
|
const { t } = useI18n()
|
|
|
|
|
const appStore = useAppStore()
|
|
|
|
|
const { getPrefixCls } = useDesign()
|
|
|
|
|
const prefixCls = getPrefixCls('login')
|
|
|
|
|
const windowSize = useWindowSize()
|
|
|
|
|
const loginAnimationData = ref(loginAnimation['default'])
|
|
|
|
|
|
|
|
|
|
const leftStyle = computed(() => {
|
|
|
|
|
const winW = windowSize.width.value
|
|
|
|
|
const leftW = winW / 2
|
|
|
|
|
|
|
|
|
|
const logo = {
|
|
|
|
|
height: leftW / 16.5 + 'px',
|
|
|
|
|
mt: leftW / 31.9 + 'px'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const lottieMagn = leftW / 435
|
|
|
|
|
const lottie = {
|
|
|
|
|
boxHeight: leftW / 2.39 + 'px',
|
|
|
|
|
height: 335 * lottieMagn,
|
|
|
|
|
width: 434 * lottieMagn,
|
|
|
|
|
left: -(leftW / 38) + 'px',
|
|
|
|
|
top: -(leftW / 5.3) + 'px'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const bottomText = {
|
|
|
|
|
width: leftW / 1.54 + 'px',
|
|
|
|
|
height: leftW / 8.68 + 'px',
|
|
|
|
|
left: -(leftW / 31.54) + 'px',
|
|
|
|
|
linkMT: leftW / 23.87 + 'px',
|
|
|
|
|
textMt: leftW / 16.2 + 'px'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return { lottie, bottomText, logo }
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const newClass = computed(() => {
|
|
|
|
|
const mobile = appStore.getMobile ? 'is-mobile' : ''
|
|
|
|
|
const toggle = appStore.getFullscreen ? 'is-toggle' : ''
|
|
|
|
|
return toggle ? toggle : mobile
|
|
|
|
|
})
|
2026-02-12 14:25:27 +08:00
|
|
|
|
|
|
|
|
// const route = useRoute();
|
|
|
|
|
// console.log(route.query)
|
2026-02-02 23:17:44 +08:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
$prefix-cls: #{$namespace}-login;
|
|
|
|
|
|
|
|
|
|
.#{$prefix-cls} {
|
|
|
|
|
overflow: auto;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.is-mobile {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 50%;
|
|
|
|
|
left: 50%;
|
|
|
|
|
transform: translate(-50%, -50%) scale(2.5, 1.8);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.is-toggle {
|
|
|
|
|
position: absolute;
|
|
|
|
|
top: 50%;
|
|
|
|
|
left: 50%;
|
|
|
|
|
transform: translate(-50%, -50%) scale(0.7, 0.6);
|
|
|
|
|
}
|
|
|
|
|
</style>
|