182 lines
4.8 KiB
Vue
182 lines
4.8 KiB
Vue
<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:(852)2532 1580 传真 Fax:(852)2537 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> |