Files
gr_report_web/src/views/Login/Login.vue

212 lines
5.3 KiB
Vue
Raw Normal View History

2026-02-02 23:17:44 +08:00
<template>
<div
:class="prefixCls"
class="relative h-[100%]"
:style="{ backgroundImage: 'url(' + localImage + ')', backgroundSize: 'cover' }"
>
<div class="relative mx-auto h-full flex" style="margin: 0 auto">
2026-02-02 23:17:44 +08:00
<div
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"
2026-02-02 23:17:44 +08:00
>
<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 class="tags">
<div class="module cockpit">
<img :src="jsc" />
驾驶舱
</div>
<div class="module iot">
<img :src="wlzt" />
物联中台
</div>
<div class="module data-center">
<img :src="sjzt" />
数据中台
</div>
<div class="module report">
<img :src="znbb" />
智能报表
</div>
<div class="module digital-twin">
<img :src="szls" />
数字孪生
</div>
</div>
2026-02-02 23:17:44 +08:00
</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-23 14:48:02 +08:00
import jsc from '@/assets/imgs/jsc.png'
import sjzt from '@/assets/imgs/sjzt.png'
import szls from '@/assets/imgs/szls.png'
import wlzt from '@/assets/imgs/wlzt.png'
import znbb from '@/assets/imgs/znbb.png'
2026-02-12 14:25:27 +08:00
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 }
})
onMounted(() => {
const queryParams = new URLSearchParams(window.location.search);
const paramValue = queryParams.get('url'); // 获取查询参数值,例如 ?paramName=value 中的 value
debugger
});
2026-02-02 23:17:44 +08:00
const newClass = computed(() => {
const mobile = appStore.getMobile ? 'is-mobile' : ''
const toggle = appStore.getFullscreen ? 'is-toggle' : ''
2026-02-02 23:17:44 +08:00
return toggle ? toggle : mobile
})
2026-02-12 14:25:27 +08:00
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);
}
2026-02-27 14:00:45 +08:00
.tags {
position: absolute;
bottom: 20px;
left: 50%;
display: grid;
width: 1000px;
transform: translateX(-50%);
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: auto auto;
gap: 20px;
2026-02-23 14:48:02 +08:00
.module {
display: flex;
padding: 20px;
font-size: 26px;
font-weight: 600;
color: #fff;
text-align: center;
border-radius: 4px;
align-items: center;
justify-content: center;
flex-direction: column;
2026-02-23 14:48:02 +08:00
}
2026-02-27 14:00:45 +08:00
2026-02-23 14:48:02 +08:00
.module img {
width: 72px;
height: 72px;
margin-bottom: 16px;
object-fit: contain;
2026-02-23 14:48:02 +08:00
}
2026-02-27 14:00:45 +08:00
2026-02-23 14:48:02 +08:00
.module.iot,
.module.data-center,
.module.report,
.module.digital-twin {
flex-direction: row;
gap: 50px; /* 图标和文字之间的间距 */
img {
margin: 0;
2026-02-23 14:48:02 +08:00
}
}
2026-02-27 14:00:45 +08:00
2026-02-23 14:48:02 +08:00
/* 驾驶舱:深蓝色渐变 */
.module.cockpit {
grid-row: 1 / 3;
background: linear-gradient(180deg, rgb(109 147 245 / 75%), rgb(7 38 111 / 75%));
2026-02-27 14:00:45 +08:00
img {
width: 130px;
height: 130px;
}
2026-02-23 14:48:02 +08:00
}
2026-02-27 14:00:45 +08:00
2026-02-23 14:48:02 +08:00
/* 物联中台:中蓝色渐变 */
.module.iot {
background: linear-gradient(180deg, rgb(130 156 223 / 75%), rgb(7 38 111 / 75%));
2026-02-23 14:48:02 +08:00
}
2026-02-27 14:00:45 +08:00
2026-02-23 14:48:02 +08:00
/* 数据中台:青绿色渐变 */
.module.data-center {
background: linear-gradient(180deg, rgb(46 192 182 / 75%), rgb(40 180 170 / 75%));
2026-02-23 14:48:02 +08:00
}
2026-02-27 14:00:45 +08:00
2026-02-23 14:48:02 +08:00
/* 智能报表:绿色渐变 */
.module.report {
background: linear-gradient(180deg, rgb(77 212 122 / 75%), rgb(60 180 100 / 75%));
2026-02-23 14:48:02 +08:00
}
2026-02-27 14:00:45 +08:00
2026-02-23 14:48:02 +08:00
/* 数字孪生:浅蓝色渐变 */
.module.digital-twin {
background: linear-gradient(180deg, rgb(111 181 235 / 75%), rgb(60 140 200 / 75%));
2026-02-23 14:48:02 +08:00
}
}
2026-02-02 23:17:44 +08:00
</style>