From 6448ec15bfe0b65fb822a662105bceddc23b58d8 Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期一, 06 四月 2026 21:34:44 +0800
Subject: [PATCH] feat(user): 新增员工档案管理视图组件
---
src/views/login/index.vue | 224 ++++++++++++++++++++++++++++++--------------------------
1 files changed, 120 insertions(+), 104 deletions(-)
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 134c5c1..df7e7ad 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -1,126 +1,139 @@
<template>
<div class="login-container">
- <div class="login-info">
- <div class="title">中保亚太人力资源管理系统</div>
- <img class="zbyt-login" src="../../assets/login/zbyt-login.png" width='' />
+ <div class="login-title">
+ <img src="../../assets/login/pic02.png">
</div>
- <el-form ref="loginForm" :model="loginForm" :rules="rules" class="login-form" autocomplete="off" label-position="left">
-
- <span v-if="login.type === 'up'">
- <el-form-item prop="username">
- <el-input
- ref="username"
- v-model="loginForm.username"
- :placeholder="$t('login.username')"
- prefix-icon="el-icon-user"
- name="username"
- type="text"
- autocomplete="off"
- @keyup.enter.native="handleLogin"
- />
- </el-form-item>
- <el-form-item prop="password">
- <el-input
- ref="password"
- v-model="loginForm.password"
- prefix-icon="el-icon-key"
- type="password"
- :placeholder="$t('login.password')"
- name="password"
- autocomplete="off"
- :show-password="true"
- @keyup.enter.native="handleLogin"
- />
- </el-form-item>
- <el-form-item prop="code" class="code-input">
- <el-input
- ref="code"
- v-model="loginForm.code"
- prefix-icon="el-icon-lock"
- :placeholder="$t('login.code')"
- name="code"
- type="text"
- autocomplete="off"
- style="width: 70%"
- @keyup.enter.native="handleLogin"
- />
- </el-form-item>
- <img :src="imageCode" alt="codeImage" class="code-image" @click="getCodeImage">
- <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:14px;" @click.native.prevent="handleLogin">
- {{ $t('login.logIn') }}
- </el-button>
- </span>
- <span v-if="login.type === 'social'">
- {{ $t('login.chooseToSignIn') }}
- <div>
- <template v-for="(l, index) in logo">
- <div :key="index" class="logo-wrapper">
- <img :src="resolveLogo(l.img)" alt="" :class="{ 'radius': l.radius }" @click="socialLogin(l.name)">
- </div>
- </template>
+ <div class="login-main">
+ <div class="login-main-left">
+ <img src="../../assets/login/pic03.png">
+ <img src="../../assets/login/pic04.png">
+ </div>
+
+ <div class="login-main-right">
+ <div id="form-biao-dan">
+ <div>
+ <span>登录</span>
+ <span />
+ </div>
+
</div>
- </span>
- <span v-if="login.type === 'bind'" style="margin-top: -1rem">
- <el-tabs v-model="tabActiveName" @tab-click="handleTabClick">
- <el-tab-pane :label="$t('common.bindLogin')" name="bindLogin">
- <el-form-item prop="bindUsername">
+ <el-form ref="loginForm" :model="loginForm" :rules="rules" class="login-form-new" autocomplete="off" label-position="left">
+ <span v-if="login.type === 'up'">
+ <el-form-item prop="username" style="width: 26vw;">
<el-input
- ref="bindUsername"
- v-model="loginForm.bindUsername"
+ ref="username"
+ v-model="loginForm.username"
:placeholder="$t('login.username')"
prefix-icon="el-icon-user"
- name="bindUsername"
+ name="username"
type="text"
autocomplete="off"
+ @keyup.enter.native="handleLogin"
/>
</el-form-item>
- <el-form-item prop="bindPassword">
+ <el-form-item prop="password" style="width: 26vw;">
<el-input
- ref="bindPassword"
- v-model="loginForm.bindPassword"
- :placeholder="$t('login.password')"
+ ref="password"
+ v-model="loginForm.password"
prefix-icon="el-icon-key"
- name="bindPassword"
type="password"
- :show-password="true"
+ :placeholder="$t('login.password')"
+ name="password"
autocomplete="off"
+ @keyup.enter.native="handleLogin"
/>
</el-form-item>
- <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:14px;" @click.native.prevent="bindLogin">
- {{ $t('common.bindLogin') }}
- </el-button>
- </el-tab-pane>
- <el-tab-pane :label="$t('common.signLogin')" name="signLogin">
- <el-form-item prop="signUsername">
+ <el-form-item prop="code" style="width: 26vw;">
<el-input
- ref="signUsername"
- v-model="loginForm.signUsername"
- :placeholder="$t('login.username')"
- prefix-icon="el-icon-user"
- name="signUsername"
+ ref="code"
+ v-model="loginForm.code"
+ prefix-icon="el-icon-lock"
+ :placeholder="$t('login.code')"
+ name="code"
type="text"
autocomplete="off"
+ style="width: 70%"
+ @keyup.enter.native="handleLogin"
/>
+ <img :src="imageCode" alt="codeImage" class="code-image" @click="getCodeImage">
</el-form-item>
- <el-form-item prop="signPassword">
- <el-input
- ref="signPassword"
- v-model="loginForm.signPassword"
- :placeholder="$t('login.password')"
- prefix-icon="el-icon-key"
- name="signPassword"
- type="password"
- :show-password="true"
- autocomplete="off"
- />
- </el-form-item>
- <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:14px;" @click.native.prevent="signLogin">
- {{ $t('common.signLogin') }}
+ <el-button :loading="loading" type="primary" class="submit-but" @click.native.prevent="handleLogin">
+ {{ $t('login.logIn') }}
</el-button>
- </el-tab-pane>
- </el-tabs>
- </span>
- </el-form>
+ </span>
+ <span v-if="login.type === 'social'">
+ {{ $t('login.chooseToSignIn') }}
+ <div>
+ <template v-for="(l, index) in logo">
+ <div :key="index" class="logo-wrapper">
+ <img :src="resolveLogo(l.img)" alt="" :class="{ 'radius': l.radius }" @click="socialLogin(l.name)">
+ </div>
+ </template>
+ </div>
+ </span>
+ <span v-if="login.type === 'bind'" style="margin-top: -1rem">
+ <el-tabs v-model="tabActiveName" @tab-click="handleTabClick">
+ <el-tab-pane :label="$t('common.bindLogin')" name="bindLogin">
+ <el-form-item prop="bindUsername">
+ <el-input
+ ref="bindUsername"
+ v-model="loginForm.bindUsername"
+ :placeholder="$t('login.username')"
+ prefix-icon="el-icon-user"
+ name="bindUsername"
+ type="text"
+ autocomplete="off"
+ />
+ </el-form-item>
+ <el-form-item prop="bindPassword">
+ <el-input
+ ref="bindPassword"
+ v-model="loginForm.bindPassword"
+ :placeholder="$t('login.password')"
+ prefix-icon="el-icon-key"
+ name="bindPassword"
+ type="password"
+ :show-password="true"
+ autocomplete="off"
+ />
+ </el-form-item>
+ <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:14px;background-color: rgba(163, 44, 48, 1);border-color: rgba(163, 44, 48, 1);border-radius: 20px;margin-top: 10%;" @click.native.prevent="bindLogin">
+ {{ $t('common.bindLogin') }}
+ </el-button>
+ </el-tab-pane>
+ <el-tab-pane :label="$t('common.signLogin')" name="signLogin">
+ <el-form-item prop="signUsername">
+ <el-input
+ ref="signUsername"
+ v-model="loginForm.signUsername"
+ :placeholder="$t('login.username')"
+ prefix-icon="el-icon-user"
+ name="signUsername"
+ type="text"
+ autocomplete="off"
+ />
+ </el-form-item>
+ <el-form-item prop="signPassword">
+ <el-input
+ ref="signPassword"
+ v-model="loginForm.signPassword"
+ :placeholder="$t('login.password')"
+ prefix-icon="el-icon-key"
+ name="signPassword"
+ type="password"
+ :show-password="true"
+ autocomplete="off"
+ />
+ </el-form-item>
+ <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:14px;background-color: rgba(163, 44, 48, 1);border-color: rgba(163, 44, 48, 1);border-radius: 20px;margin-top: 10%;" @click.native.prevent="signLogin">
+ {{ $t('common.signLogin') }}
+ </el-button>
+ </el-tab-pane>
+ </el-tabs>
+ </span>
+ </el-form>
+ </div>
+ </div>
<span class="login-footer">
© 2021 <a target="_blank" href="">版权所有:深圳市太阳帆信息技术开发有限公司</a>客服电话: 0755-26491738
</span>
@@ -338,23 +351,26 @@
const expireTime = current.setTime(current.getTime() + 1000 * data.expires_in)
this.$store.commit('account/setExpireTime', expireTime)
},
- getUserDetailInfo() {
- this.$get('auth/user').then((r) => {
+ async getUserDetailInfo() {
+ try {
+ const r = await this.$get('auth/user')
this.$store.commit('account/setUser', r.data.principal)
+ // 预加载字典数据到缓存
+ await this.$store.dispatch('dict/LoadAllDicts')
this.$message({
message: this.$t('tips.loginSuccess'),
type: 'success'
})
this.loading = false
this.$router.push('/')
- }).catch((error) => {
+ } catch (error) {
this.$message({
message: this.$t('tips.loginFail'),
type: 'error'
})
console.error(error)
this.loading = false
- })
+ }
},
loginSuccessCallback() {
this.$get('system/user/success').catch((e) => { console.log(e) })
--
Gitblit v1.8.0