Files
stock-h5/src/views/common/login.vue
2026-03-19 15:02:23 +08:00

182 lines
4.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="page-div">
<div class="form-container d-flex align-center">
<div class="form">
<div class="text-center pt-20">
<van-image height="100" width="100" src="/img/smallLogo.jpg" round />
</div>
<div class="text-center">
<h2 class="big-title f-b mt-16">第一上海</h2>
<div class="sub-title mt-16">欢迎登录数据管理系统</div>
</div>
<van-form class="control-area" @submit="onSubmit" validate-trigger="onSubmit">
<van-field v-model="username" name="username" placeholder="请输入您的账户" label="账户"
:rules="[{ required: true, message: '请输入您的账户' }]" autocomplete="new-password" />
<van-field v-model="password" name="password" placeholder="请输入您的密码" label="密码"
:rules="[{ required: true, message: '请输入您的密码' }]" type="password" autocomplete="new-password" />
<div class="opr-area">
<van-button round block type="primary" :disabled="submitFlag" native-type="submit">
确定
</van-button>
</div>
</van-form>
</div>
</div>
<div class="company-info">
<div class="text-center mt-16 mb-16">
<div class="mb-16 normal-title">第一上海证券有限公司</div>
<div class="mb-8 sub-title">FIRST SHANGHAI SECURITIES LIMITED</div>
<div class="mb-5 tip">香港中環德輔道中 71 號永安集團大廈 19 樓D</div>
<div class="mb-5 tip">19/F, Wing On House, 71 Des Voeux Road Central, Hong Kong</div>
<div class="mb-5 tip">电话 Tel:8522532 1580 传真 Fax:8522537 6911</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import userInfoStore from '@/stores/userInfo'
const userInfo = userInfoStore()
const router = useRouter()
const route = useRoute()
let username = ref(userInfo.username || '')
let password = ref(userInfo.password || '')
let submitFlag = ref(false)
import { encrypt } from '@/utils/index'
import { sysLogin, sysUserInfo, sysMenuNav } from '@/utils/api'
const onSubmit = async () => {
submitFlag.value = true
const data: any = await sysLogin(
{
username: username.value,
password: encrypt(password.value),
}
)
if (data && data.code === 0) {
userInfo.username = username.value
userInfo.password = password.value
userInfo.token = data.token
getUserInfo()
} else {
submitFlag.value = false
showToast('账号密码错误')
}
}
const getUserInfo = async () => {
const data: any = await sysUserInfo()
userInfo.id = data.user.userId
userInfo.realname = data.user.realname
userInfo.headPic = data.user.headPic
userInfo.roleId = data.user.roleId + ''
getsysMenuNav()
}
const getsysMenuNav = async () => {
const data: any = await sysMenuNav()
userInfo.permissions = data.permissions
let redirect = route.query.redirect || '/'
if (typeof redirect !== 'string') {
redirect = '/'
}
router.replace(redirect)
}
</script>
<style lang='scss' scoped>
.form-container {
flex: 1;
height: 100%;
.form {
width: 100%;
background-color: #fff;
border-radius: 16px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
padding: 16px;
margin: 16px;
@media screen and (min-width: 768px) {
padding: 40px;
margin: 40px;
}
.pt-20 {
padding-top: 20px;
@media screen and (min-width: 768px) {
padding-top: 30px;
}
}
.control-area {
margin: 32px auto;
padding: 0 16px;
width: 100%;
@media screen and (min-width: 768px) {
width: 100%;
margin: 40px auto;
}
.van-cell {
padding: 16px;
font-size: 16px;
margin: 0 0 16px;
width: 100%;
box-shadow: 0 2px 8px 0 rgba(0, 0, 0, .1);
@media screen and (min-width: 768px) {
padding: 20px;
font-size: 18px;
margin-bottom: 20px;
}
&:last-child {
margin-bottom: 0;
}
:deep(.van-field__label) {
padding-right: 16px;
label {
max-width: 5em;
margin-right: 8px;
}
}
}
.opr-area {
padding: 16px 0;
.van-button {
height: 32px;
line-height: 32px;
@media screen and (min-width: 768px) {
height: 40px;
line-height: 40px;
font-size: 16px;
}
}
.van-button--disabled {
color: rgba(0, 0, 0, 0.15);
background-color: rgba(0, 0, 0, 0.05);
height: 32px;
line-height: 32px;
}
}
}
}
}
.company-info {
margin-top: 30px;
width: 100%;
padding: 20px;
@media screen and (min-width: 768px) {
padding: 30px;
}
}
</style>