登录页修改
This commit is contained in:
		
							parent
							
								
									85477dbeb9
								
							
						
					
					
						commit
						9bdb41d40c
					
				| 
						 | 
					@ -1,10 +1,10 @@
 | 
				
			||||||
import Vue from 'vue'
 | 
					import Vue from "vue";
 | 
				
			||||||
import Router from 'vue-router'
 | 
					import Router from "vue-router";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Vue.use(Router)
 | 
					Vue.use(Router);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Layout */
 | 
					/* Layout */
 | 
				
			||||||
import Layout from '@/layout'
 | 
					import Layout from "@/layout";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Note: 路由配置项
 | 
					 * Note: 路由配置项
 | 
				
			||||||
| 
						 | 
					@ -31,168 +31,168 @@ import Layout from '@/layout'
 | 
				
			||||||
// 公共路由
 | 
					// 公共路由
 | 
				
			||||||
export const constantRoutes = [
 | 
					export const constantRoutes = [
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/redirect',
 | 
					    path: "/redirect",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: true,
 | 
					    hidden: true,
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: '/redirect/:path(.*)',
 | 
					        path: "/redirect/:path(.*)",
 | 
				
			||||||
        component: () => import('@/views/redirect')
 | 
					        component: () => import("@/views/redirect"),
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/login',
 | 
					    path: "/login",
 | 
				
			||||||
    component: () => import('@/views/login1'),
 | 
					    component: () => import("@/views/newLogin"),
 | 
				
			||||||
    hidden: true
 | 
					    hidden: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/register',
 | 
					    path: "/register",
 | 
				
			||||||
    component: () => import('@/views/register1'),
 | 
					    component: () => import("@/views/register1"),
 | 
				
			||||||
    hidden: true
 | 
					    hidden: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/404',
 | 
					    path: "/404",
 | 
				
			||||||
    component: () => import('@/views/error/404'),
 | 
					    component: () => import("@/views/error/404"),
 | 
				
			||||||
    hidden: true
 | 
					    hidden: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/401',
 | 
					    path: "/401",
 | 
				
			||||||
    component: () => import('@/views/error/401'),
 | 
					    component: () => import("@/views/error/401"),
 | 
				
			||||||
    hidden: true
 | 
					    hidden: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '',
 | 
					    path: "",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    redirect: 'index',
 | 
					    redirect: "index",
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: 'index',
 | 
					        path: "index",
 | 
				
			||||||
        component: () => import('@/views/index'),
 | 
					        component: () => import("@/views/index"),
 | 
				
			||||||
        name: 'Index',
 | 
					        name: "Index",
 | 
				
			||||||
        meta: { title: '首页', icon: 'dashboard', affix: true }
 | 
					        meta: { title: "首页", icon: "dashboard", affix: true },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/user',
 | 
					    path: "/user",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: true,
 | 
					    hidden: true,
 | 
				
			||||||
    redirect: 'noredirect',
 | 
					    redirect: "noredirect",
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: 'profile',
 | 
					        path: "profile",
 | 
				
			||||||
        component: () => import('@/views/system/user/profile/index'),
 | 
					        component: () => import("@/views/system/user/profile/index"),
 | 
				
			||||||
        name: 'Profile',
 | 
					        name: "Profile",
 | 
				
			||||||
        meta: { title: '个人中心', icon: 'user' }
 | 
					        meta: { title: "个人中心", icon: "user" },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  }
 | 
					  },
 | 
				
			||||||
]
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 动态路由,基于用户权限动态去加载
 | 
					// 动态路由,基于用户权限动态去加载
 | 
				
			||||||
export const dynamicRoutes = [
 | 
					export const dynamicRoutes = [
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/system/user-auth',
 | 
					    path: "/system/user-auth",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: true,
 | 
					    hidden: true,
 | 
				
			||||||
    permissions: ['system:user:edit'],
 | 
					    permissions: ["system:user:edit"],
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: 'role/:userId(\\d+)',
 | 
					        path: "role/:userId(\\d+)",
 | 
				
			||||||
        component: () => import('@/views/system/user/authRole'),
 | 
					        component: () => import("@/views/system/user/authRole"),
 | 
				
			||||||
        name: 'AuthRole',
 | 
					        name: "AuthRole",
 | 
				
			||||||
        meta: { title: '分配角色', activeMenu: '/system/user' }
 | 
					        meta: { title: "分配角色", activeMenu: "/system/user" },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/system/role-auth',
 | 
					    path: "/system/role-auth",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: true,
 | 
					    hidden: true,
 | 
				
			||||||
    permissions: ['system:role:edit'],
 | 
					    permissions: ["system:role:edit"],
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: 'user/:roleId(\\d+)',
 | 
					        path: "user/:roleId(\\d+)",
 | 
				
			||||||
        component: () => import('@/views/system/role/authUser'),
 | 
					        component: () => import("@/views/system/role/authUser"),
 | 
				
			||||||
        name: 'AuthUser',
 | 
					        name: "AuthUser",
 | 
				
			||||||
        meta: { title: '分配用户', activeMenu: '/system/role' }
 | 
					        meta: { title: "分配用户", activeMenu: "/system/role" },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/system/dict-data',
 | 
					    path: "/system/dict-data",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: true,
 | 
					    hidden: true,
 | 
				
			||||||
    permissions: ['system:dict:list'],
 | 
					    permissions: ["system:dict:list"],
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: 'index/:dictId(\\d+)',
 | 
					        path: "index/:dictId(\\d+)",
 | 
				
			||||||
        component: () => import('@/views/system/dict/data'),
 | 
					        component: () => import("@/views/system/dict/data"),
 | 
				
			||||||
        name: 'Data',
 | 
					        name: "Data",
 | 
				
			||||||
        meta: { title: '字典数据', activeMenu: '/system/dict' }
 | 
					        meta: { title: "字典数据", activeMenu: "/system/dict" },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/face/face-data',
 | 
					    path: "/face/face-data",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: false, // 或者删除此属性以确保显示
 | 
					    hidden: false, // 或者删除此属性以确保显示
 | 
				
			||||||
    permissions: ['face:data:list'],
 | 
					    permissions: ["face:data:list"],
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        // 只需要 ':groupCode' 来匹配字符串
 | 
					        // 只需要 ':groupCode' 来匹配字符串
 | 
				
			||||||
        path: 'index/:groupCode',
 | 
					        path: "index/:groupCode",
 | 
				
			||||||
        component: () => import('@/views/face/faceData/index'),
 | 
					        component: () => import("@/views/face/faceData/index"),
 | 
				
			||||||
        name: 'Data',
 | 
					        name: "Data",
 | 
				
			||||||
        meta: { title: '人脸库', activeMenu: '/face/face-data' }
 | 
					        meta: { title: "人脸库", activeMenu: "/face/face-data" },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/monitor/job-log',
 | 
					    path: "/monitor/job-log",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: true,
 | 
					    hidden: true,
 | 
				
			||||||
    permissions: ['monitor:job:list'],
 | 
					    permissions: ["monitor:job:list"],
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: 'index/:jobId(\\d+)',
 | 
					        path: "index/:jobId(\\d+)",
 | 
				
			||||||
        component: () => import('@/views/monitor/job/log'),
 | 
					        component: () => import("@/views/monitor/job/log"),
 | 
				
			||||||
        name: 'JobLog',
 | 
					        name: "JobLog",
 | 
				
			||||||
        meta: { title: '调度日志', activeMenu: '/monitor/job' }
 | 
					        meta: { title: "调度日志", activeMenu: "/monitor/job" },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    path: '/tool/gen-edit',
 | 
					    path: "/tool/gen-edit",
 | 
				
			||||||
    component: Layout,
 | 
					    component: Layout,
 | 
				
			||||||
    hidden: true,
 | 
					    hidden: true,
 | 
				
			||||||
    permissions: ['tool:gen:edit'],
 | 
					    permissions: ["tool:gen:edit"],
 | 
				
			||||||
    children: [
 | 
					    children: [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        path: 'index/:tableId(\\d+)',
 | 
					        path: "index/:tableId(\\d+)",
 | 
				
			||||||
        component: () => import('@/views/tool/gen/editTable'),
 | 
					        component: () => import("@/views/tool/gen/editTable"),
 | 
				
			||||||
        name: 'GenEdit',
 | 
					        name: "GenEdit",
 | 
				
			||||||
        meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
 | 
					        meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
 | 
				
			||||||
      }
 | 
					      },
 | 
				
			||||||
    ]
 | 
					    ],
 | 
				
			||||||
  }
 | 
					  },
 | 
				
			||||||
]
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 防止连续点击多次路由报错
 | 
					// 防止连续点击多次路由报错
 | 
				
			||||||
let routerPush = Router.prototype.push
 | 
					let routerPush = Router.prototype.push;
 | 
				
			||||||
let routerReplace = Router.prototype.replace
 | 
					let routerReplace = Router.prototype.replace;
 | 
				
			||||||
// push
 | 
					// push
 | 
				
			||||||
Router.prototype.push = function push(location) {
 | 
					Router.prototype.push = function push(location) {
 | 
				
			||||||
  return routerPush.call(this, location).catch(err => err)
 | 
					  return routerPush.call(this, location).catch((err) => err);
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
// replace
 | 
					// replace
 | 
				
			||||||
Router.prototype.replace = function push(location) {
 | 
					Router.prototype.replace = function push(location) {
 | 
				
			||||||
  return routerReplace.call(this, location).catch(err => err)
 | 
					  return routerReplace.call(this, location).catch((err) => err);
 | 
				
			||||||
}
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default new Router({
 | 
					export default new Router({
 | 
				
			||||||
  mode: 'history', // 去掉url中的#
 | 
					  mode: "history", // 去掉url中的#
 | 
				
			||||||
  scrollBehavior: () => ({ y: 0 }),
 | 
					  scrollBehavior: () => ({ y: 0 }),
 | 
				
			||||||
  routes: constantRoutes
 | 
					  routes: constantRoutes,
 | 
				
			||||||
})
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,645 @@
 | 
				
			||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="container">
 | 
				
			||||||
 | 
					    <div class="login">
 | 
				
			||||||
 | 
					      <div class="login-left">背景--</div>
 | 
				
			||||||
 | 
					      <div class="login-right"></div>
 | 
				
			||||||
 | 
					      <!-- <div class="login-form">
 | 
				
			||||||
 | 
					        <el-form
 | 
				
			||||||
 | 
					          ref="loginForm"
 | 
				
			||||||
 | 
					          :model="loginForm"
 | 
				
			||||||
 | 
					          :rules="loginRules"
 | 
				
			||||||
 | 
					          class="login-form"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <h3 class="title">博诺思后台管理系统--</h3>
 | 
				
			||||||
 | 
					          <template v-if="loginMethod === 'password'">
 | 
				
			||||||
 | 
					            <el-form-item prop="username">
 | 
				
			||||||
 | 
					              <el-input
 | 
				
			||||||
 | 
					                v-model="loginForm.username"
 | 
				
			||||||
 | 
					                type="text"
 | 
				
			||||||
 | 
					                auto-complete="off"
 | 
				
			||||||
 | 
					                :placeholder="`用户名${
 | 
				
			||||||
 | 
					                  config.loginConfig.phonePassword ? '/手机号' : ''
 | 
				
			||||||
 | 
					                }${config.loginConfig.emailPassword ? '/邮箱' : ''}`"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <svg-icon
 | 
				
			||||||
 | 
					                  slot="prefix"
 | 
				
			||||||
 | 
					                  icon-class="user"
 | 
				
			||||||
 | 
					                  class="el-input__icon input-icon"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-input>
 | 
				
			||||||
 | 
					            </el-form-item>
 | 
				
			||||||
 | 
					            <el-form-item prop="password">
 | 
				
			||||||
 | 
					              <el-input
 | 
				
			||||||
 | 
					                v-model="loginForm.password"
 | 
				
			||||||
 | 
					                type="password"
 | 
				
			||||||
 | 
					                auto-complete="off"
 | 
				
			||||||
 | 
					                placeholder="密码"
 | 
				
			||||||
 | 
					                @keyup.enter.native="handleLogin"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <svg-icon
 | 
				
			||||||
 | 
					                  slot="prefix"
 | 
				
			||||||
 | 
					                  icon-class="password"
 | 
				
			||||||
 | 
					                  class="el-input__icon input-icon"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-input>
 | 
				
			||||||
 | 
					            </el-form-item>
 | 
				
			||||||
 | 
					            <el-form-item prop="code" v-if="captchaEnabled">
 | 
				
			||||||
 | 
					              <el-input
 | 
				
			||||||
 | 
					                v-model="loginForm.code"
 | 
				
			||||||
 | 
					                auto-complete="off"
 | 
				
			||||||
 | 
					                placeholder="验证码"
 | 
				
			||||||
 | 
					                style="width: 63%"
 | 
				
			||||||
 | 
					                @keyup.enter.native="handleLogin"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <svg-icon
 | 
				
			||||||
 | 
					                  slot="prefix"
 | 
				
			||||||
 | 
					                  icon-class="validCode"
 | 
				
			||||||
 | 
					                  class="el-input__icon input-icon"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-input>
 | 
				
			||||||
 | 
					              <div class="login-code">
 | 
				
			||||||
 | 
					                <img :src="codeUrl" @click="getCode" class="login-code-img" />
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </el-form-item>
 | 
				
			||||||
 | 
					            <el-form-item v-show="isAdmin" prop="verificationCode">
 | 
				
			||||||
 | 
					              <el-input
 | 
				
			||||||
 | 
					                v-model="loginForm.verificationCode"
 | 
				
			||||||
 | 
					                placeholder="请输入验证码"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <template slot="append">
 | 
				
			||||||
 | 
					                  <el-button
 | 
				
			||||||
 | 
					                    type="primary"
 | 
				
			||||||
 | 
					                    @click="sendAdminCode"
 | 
				
			||||||
 | 
					                    :disabled="
 | 
				
			||||||
 | 
					                      isSendingCode || captchaEnabled ? !loginForm.code : false
 | 
				
			||||||
 | 
					                    "
 | 
				
			||||||
 | 
					                    class="send-code-button"
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                    {{ countdown === 0 ? "获取验证码" : `${countdown}s` }}
 | 
				
			||||||
 | 
					                  </el-button>
 | 
				
			||||||
 | 
					                </template>
 | 
				
			||||||
 | 
					                <svg-icon
 | 
				
			||||||
 | 
					                  slot="prefix"
 | 
				
			||||||
 | 
					                  icon-class="message"
 | 
				
			||||||
 | 
					                  class="el-input__icon input-icon"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-input>
 | 
				
			||||||
 | 
					            </el-form-item>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template v-else>
 | 
				
			||||||
 | 
					            <el-form-item prop="mobile">
 | 
				
			||||||
 | 
					              <el-input
 | 
				
			||||||
 | 
					                v-model="loginForm.mobile"
 | 
				
			||||||
 | 
					                type="text"
 | 
				
			||||||
 | 
					                auto-complete="off"
 | 
				
			||||||
 | 
					                :placeholder="`${
 | 
				
			||||||
 | 
					                  config.loginConfig.phoneCode ? '手机号' : '/'
 | 
				
			||||||
 | 
					                }${config.loginConfig.emailCode ? '邮箱' : ''}`"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <svg-icon
 | 
				
			||||||
 | 
					                  slot="prefix"
 | 
				
			||||||
 | 
					                  icon-class="user"
 | 
				
			||||||
 | 
					                  class="el-input__icon input-icon"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-input>
 | 
				
			||||||
 | 
					            </el-form-item>
 | 
				
			||||||
 | 
					            <el-form-item prop="code" v-if="captchaEnabled">
 | 
				
			||||||
 | 
					              <el-input
 | 
				
			||||||
 | 
					                v-model="loginForm.code"
 | 
				
			||||||
 | 
					                auto-complete="off"
 | 
				
			||||||
 | 
					                placeholder="验证码"
 | 
				
			||||||
 | 
					                style="width: 63%"
 | 
				
			||||||
 | 
					                @keyup.enter.native="handleLogin"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <svg-icon
 | 
				
			||||||
 | 
					                  slot="prefix"
 | 
				
			||||||
 | 
					                  icon-class="validCode"
 | 
				
			||||||
 | 
					                  class="el-input__icon input-icon"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-input>
 | 
				
			||||||
 | 
					              <div class="login-code">
 | 
				
			||||||
 | 
					                <img :src="codeUrl" @click="getCode" class="login-code-img" />
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </el-form-item>
 | 
				
			||||||
 | 
					            <el-form-item prop="verificationCode">
 | 
				
			||||||
 | 
					              <el-input
 | 
				
			||||||
 | 
					                v-model="loginForm.verificationCode"
 | 
				
			||||||
 | 
					                placeholder="请输入验证码"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <template slot="append">
 | 
				
			||||||
 | 
					                  <el-button
 | 
				
			||||||
 | 
					                    type="primary"
 | 
				
			||||||
 | 
					                    @click="sendCode"
 | 
				
			||||||
 | 
					                    :disabled="
 | 
				
			||||||
 | 
					                      isSendingCode || captchaEnabled ? !loginForm.code : false
 | 
				
			||||||
 | 
					                    "
 | 
				
			||||||
 | 
					                    class="send-code-button"
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                    {{ countdown === 0 ? "获取验证码" : `${countdown}s` }}
 | 
				
			||||||
 | 
					                  </el-button>
 | 
				
			||||||
 | 
					                </template>
 | 
				
			||||||
 | 
					                <svg-icon
 | 
				
			||||||
 | 
					                  slot="prefix"
 | 
				
			||||||
 | 
					                  icon-class="message"
 | 
				
			||||||
 | 
					                  class="el-input__icon input-icon"
 | 
				
			||||||
 | 
					                />
 | 
				
			||||||
 | 
					              </el-input>
 | 
				
			||||||
 | 
					            </el-form-item>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <div class="login-form-center">
 | 
				
			||||||
 | 
					            <el-link
 | 
				
			||||||
 | 
					              v-if="
 | 
				
			||||||
 | 
					                config.loginConfig.emailCode || config.loginConfig.phoneCode
 | 
				
			||||||
 | 
					              "
 | 
				
			||||||
 | 
					              @click="toggleLoginMethod"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              {{ loginMethod === "password" ? "短信登录" : "密码登录" }}
 | 
				
			||||||
 | 
					            </el-link>
 | 
				
			||||||
 | 
					            <router-link
 | 
				
			||||||
 | 
					              v-if="
 | 
				
			||||||
 | 
					                config.registersConfig.emailRegisters ||
 | 
				
			||||||
 | 
					                config.registersConfig.phoneRegisters
 | 
				
			||||||
 | 
					              "
 | 
				
			||||||
 | 
					              to="/register"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <el-link>注册账号</el-link>
 | 
				
			||||||
 | 
					            </router-link>
 | 
				
			||||||
 | 
					            <el-checkbox v-model="loginForm.rememberMe">记住密码</el-checkbox>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <el-form-item style="width: 100%">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              v-if="!isAdmin"
 | 
				
			||||||
 | 
					              :loading="loading"
 | 
				
			||||||
 | 
					              size="medium"
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              style="width: 100%"
 | 
				
			||||||
 | 
					              @click="loginMethod === 'password' ? IsAdmin() : handleLogin()"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <span v-if="!loading">登 录</span>
 | 
				
			||||||
 | 
					              <span v-else>登 录 中...</span>
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              v-if="isAdmin"
 | 
				
			||||||
 | 
					              :loading="loading"
 | 
				
			||||||
 | 
					              size="medium"
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              style="width: 100%"
 | 
				
			||||||
 | 
					              @click="handleLogin()"
 | 
				
			||||||
 | 
					            >
 | 
				
			||||||
 | 
					              <span v-if="!loading">登 录</span>
 | 
				
			||||||
 | 
					              <span v-else>登 录 中...</span>
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item>
 | 
				
			||||||
 | 
					            <div class="login-divider">第三方登录</div>
 | 
				
			||||||
 | 
					            <div class="login-icons">
 | 
				
			||||||
 | 
					              <div class="login-icon">
 | 
				
			||||||
 | 
					                <img :src="dingding" alt="Weibo" />
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div class="login-icon">
 | 
				
			||||||
 | 
					                <img :src="wx" alt="WeChat" />
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div class="login-icon">
 | 
				
			||||||
 | 
					                <img :src="qq" alt="QQ" />
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					        </el-form>
 | 
				
			||||||
 | 
					      </div> -->
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import { getCodeImg } from "@/api/login";
 | 
				
			||||||
 | 
					import Cookies from "js-cookie";
 | 
				
			||||||
 | 
					import { decrypt, encrypt } from "@/utils/jsencrypt";
 | 
				
			||||||
 | 
					import dingding from "@/assets/images/dingding.svg";
 | 
				
			||||||
 | 
					import wx from "@/assets/images/wx.svg";
 | 
				
			||||||
 | 
					import qq from "@/assets/images/QQ.svg";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "Login",
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      dingding: dingding,
 | 
				
			||||||
 | 
					      wx: wx,
 | 
				
			||||||
 | 
					      qq: qq,
 | 
				
			||||||
 | 
					      codeUrl: "",
 | 
				
			||||||
 | 
					      isAdmin: false,
 | 
				
			||||||
 | 
					      loginForm: {
 | 
				
			||||||
 | 
					        username: "",
 | 
				
			||||||
 | 
					        password: "",
 | 
				
			||||||
 | 
					        rememberMe: false,
 | 
				
			||||||
 | 
					        code: "",
 | 
				
			||||||
 | 
					        mobile: "",
 | 
				
			||||||
 | 
					        verificationCode: "",
 | 
				
			||||||
 | 
					        uuid: "",
 | 
				
			||||||
 | 
					        loginType: "",
 | 
				
			||||||
 | 
					        phoneUuid: "",
 | 
				
			||||||
 | 
					        mobileCodeType: "LOGIN",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      passwordLoginRules: {
 | 
				
			||||||
 | 
					        username: [
 | 
				
			||||||
 | 
					          { required: true, trigger: "blur", message: "请输入您的账号" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        password: [
 | 
				
			||||||
 | 
					          { required: true, trigger: "blur", message: "请输入您的密码" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        code: [{ required: true, trigger: "change", message: "请输入验证码" }],
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      mobileLoginRules: {
 | 
				
			||||||
 | 
					        mobile: [
 | 
				
			||||||
 | 
					          { required: true, trigger: "blur", message: "请输入您的手机号" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        verificationCode: [
 | 
				
			||||||
 | 
					          { required: true, trigger: "blur", message: "请输入验证码" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      loading: false,
 | 
				
			||||||
 | 
					      captchaEnabled: true,
 | 
				
			||||||
 | 
					      redirect: undefined,
 | 
				
			||||||
 | 
					      isSendingCode: false,
 | 
				
			||||||
 | 
					      countdown: 0,
 | 
				
			||||||
 | 
					      loginMethod: "password", // 'password' or 'mobile'
 | 
				
			||||||
 | 
					      supportsPhoneLogin: false,
 | 
				
			||||||
 | 
					      supportsEmailLogin: false,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    config() {
 | 
				
			||||||
 | 
					      return (
 | 
				
			||||||
 | 
					        JSON.parse(localStorage.getItem("systemConfig")) || {
 | 
				
			||||||
 | 
					          loginConfig: {
 | 
				
			||||||
 | 
					            phonePassword: true,
 | 
				
			||||||
 | 
					            emailPassword: true,
 | 
				
			||||||
 | 
					            phoneCode: false,
 | 
				
			||||||
 | 
					            emailCode: false,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          registersConfig: {
 | 
				
			||||||
 | 
					            phoneRegisters: true,
 | 
				
			||||||
 | 
					            emailRegisters: true,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ); // 获取 JSON 对象
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    loginRules() {
 | 
				
			||||||
 | 
					      return this.loginMethod === "password"
 | 
				
			||||||
 | 
					        ? this.passwordLoginRules
 | 
				
			||||||
 | 
					        : this.mobileLoginRules;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  watch: {
 | 
				
			||||||
 | 
					    $route: {
 | 
				
			||||||
 | 
					      handler(route) {
 | 
				
			||||||
 | 
					        this.redirect = route.query && route.query.redirect;
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      immediate: true,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.getCode();
 | 
				
			||||||
 | 
					    this.getCookie();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getCode() {
 | 
				
			||||||
 | 
					      getCodeImg().then((res) => {
 | 
				
			||||||
 | 
					        this.captchaEnabled =
 | 
				
			||||||
 | 
					          res.captchaEnabled !== undefined ? res.captchaEnabled : true;
 | 
				
			||||||
 | 
					        if (this.captchaEnabled) {
 | 
				
			||||||
 | 
					          this.codeUrl = "data:image/gif;base64," + res.img;
 | 
				
			||||||
 | 
					          this.loginForm.uuid = res.uuid;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getCookie() {
 | 
				
			||||||
 | 
					      const username = Cookies.get("username");
 | 
				
			||||||
 | 
					      const password = Cookies.get("password");
 | 
				
			||||||
 | 
					      const rememberMe = Cookies.get("rememberMe");
 | 
				
			||||||
 | 
					      this.loginForm.username = username || "";
 | 
				
			||||||
 | 
					      this.loginForm.password = password ? decrypt(password) : "";
 | 
				
			||||||
 | 
					      this.loginForm.rememberMe = rememberMe === "true";
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    handleLogin() {
 | 
				
			||||||
 | 
					      this.$refs.loginForm.validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.loading = true;
 | 
				
			||||||
 | 
					          if (this.loginForm.rememberMe) {
 | 
				
			||||||
 | 
					            Cookies.set("username", this.loginForm.username, { expires: 30 });
 | 
				
			||||||
 | 
					            Cookies.set("password", encrypt(this.loginForm.password), {
 | 
				
			||||||
 | 
					              expires: 30,
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            Cookies.set("rememberMe", this.loginForm.rememberMe, {
 | 
				
			||||||
 | 
					              expires: 30,
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            Cookies.remove("username");
 | 
				
			||||||
 | 
					            Cookies.remove("password");
 | 
				
			||||||
 | 
					            Cookies.remove("rememberMe");
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          this.loginForm.loginMethod = this.loginMethod;
 | 
				
			||||||
 | 
					          this.$store
 | 
				
			||||||
 | 
					            .dispatch("Login", this.loginForm)
 | 
				
			||||||
 | 
					            .then((res) => {
 | 
				
			||||||
 | 
					              console.log(res);
 | 
				
			||||||
 | 
					              if (res.code === 200) {
 | 
				
			||||||
 | 
					                if (res.isLogin) {
 | 
				
			||||||
 | 
					                  this.$modal
 | 
				
			||||||
 | 
					                    .confirm("账号已在其他地方登录是否继续登录!!!!")
 | 
				
			||||||
 | 
					                    .then(function () {
 | 
				
			||||||
 | 
					                      return this.$router.push({ path: this.redirect || "/" });
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                    .then(() => {
 | 
				
			||||||
 | 
					                      this.loading = false;
 | 
				
			||||||
 | 
					                    })
 | 
				
			||||||
 | 
					                    .catch(() => {
 | 
				
			||||||
 | 
					                      this.loading = false;
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                  this.$router.push({ path: this.redirect || "/" });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .catch(() => {
 | 
				
			||||||
 | 
					              this.loading = false;
 | 
				
			||||||
 | 
					              if (this.captchaEnabled) this.getCode();
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    IsAdmin() {
 | 
				
			||||||
 | 
					      this.loginForm.loginMethod = this.loginMethod;
 | 
				
			||||||
 | 
					      this.$store.dispatch("IsAdmin", this.loginForm).then((res) => {
 | 
				
			||||||
 | 
					        if (res.data) {
 | 
				
			||||||
 | 
					          this.isAdmin = res.data;
 | 
				
			||||||
 | 
					          this.$message.success("检测到您是超级管理账号,需进行手机检验");
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          this.handleLogin();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    isLogin() {
 | 
				
			||||||
 | 
					      this.$refs.loginForm.validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.loading = true;
 | 
				
			||||||
 | 
					          let that = this;
 | 
				
			||||||
 | 
					          this.loginForm.loginMethod = this.loginMethod;
 | 
				
			||||||
 | 
					          this.$store
 | 
				
			||||||
 | 
					            .dispatch("IsLogin", this.loginForm)
 | 
				
			||||||
 | 
					            .then((res) => {
 | 
				
			||||||
 | 
					              if (res.data) {
 | 
				
			||||||
 | 
					                this.$modal
 | 
				
			||||||
 | 
					                  .confirm("账号已在其他地方登录是否继续登录!!!!")
 | 
				
			||||||
 | 
					                  .then(function () {
 | 
				
			||||||
 | 
					                    return that.handleLogin();
 | 
				
			||||||
 | 
					                  })
 | 
				
			||||||
 | 
					                  .then(() => {
 | 
				
			||||||
 | 
					                    this.loading = false;
 | 
				
			||||||
 | 
					                  })
 | 
				
			||||||
 | 
					                  .catch(() => {
 | 
				
			||||||
 | 
					                    this.loading = false;
 | 
				
			||||||
 | 
					                  });
 | 
				
			||||||
 | 
					              } else {
 | 
				
			||||||
 | 
					                that.handleLogin();
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .catch(() => {
 | 
				
			||||||
 | 
					              this.loading = false;
 | 
				
			||||||
 | 
					              if (this.captchaEnabled) this.getCode();
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    sendAdminCode() {
 | 
				
			||||||
 | 
					      this.loginForm.mobile = this.loginForm.username;
 | 
				
			||||||
 | 
					      this.$store
 | 
				
			||||||
 | 
					        .dispatch("GetPhoneCode", this.loginForm)
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code === 200) {
 | 
				
			||||||
 | 
					            this.loginForm.phoneUuid = res.data;
 | 
				
			||||||
 | 
					            this.$message.success("验证码发送成功");
 | 
				
			||||||
 | 
					            this.isSendingCode = true;
 | 
				
			||||||
 | 
					            this.countdown = 60;
 | 
				
			||||||
 | 
					            const timer = setInterval(() => {
 | 
				
			||||||
 | 
					              this.countdown -= 1;
 | 
				
			||||||
 | 
					              if (this.countdown <= 0) {
 | 
				
			||||||
 | 
					                clearInterval(timer);
 | 
				
			||||||
 | 
					                this.isSendingCode = false;
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            }, 1000);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .catch(() => {
 | 
				
			||||||
 | 
					          this.loading = false;
 | 
				
			||||||
 | 
					          // 如果启用了验证码,则重新获取验证码
 | 
				
			||||||
 | 
					          if (this.captchaEnabled) {
 | 
				
			||||||
 | 
					            this.getCode();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          // 其他失败处理逻辑
 | 
				
			||||||
 | 
					          this.isSendingCode = false;
 | 
				
			||||||
 | 
					          this.countdown = 0;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    sendCode() {
 | 
				
			||||||
 | 
					      if (this.captchaEnabled ? !this.loginForm.code : false) {
 | 
				
			||||||
 | 
					        this.$message.error("请先填写验证码");
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (!this.loginForm.mobile) {
 | 
				
			||||||
 | 
					        this.$message.error(
 | 
				
			||||||
 | 
					          "请先填写" + this.config.loginConfig.phoneCode
 | 
				
			||||||
 | 
					            ? "手机号"
 | 
				
			||||||
 | 
					            : "/" + this.config.loginConfig.emailCode
 | 
				
			||||||
 | 
					            ? "邮箱"
 | 
				
			||||||
 | 
					            : ""
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.$store
 | 
				
			||||||
 | 
					        .dispatch("GetPhoneCode", this.loginForm)
 | 
				
			||||||
 | 
					        .then(() => {
 | 
				
			||||||
 | 
					          this.isSendingCode = true;
 | 
				
			||||||
 | 
					          this.countdown = 60;
 | 
				
			||||||
 | 
					          const timer = setInterval(() => {
 | 
				
			||||||
 | 
					            this.countdown -= 1;
 | 
				
			||||||
 | 
					            if (this.countdown <= 0) {
 | 
				
			||||||
 | 
					              clearInterval(timer);
 | 
				
			||||||
 | 
					              this.isSendingCode = false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          }, 1000);
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .catch(() => {
 | 
				
			||||||
 | 
					          this.loading = false;
 | 
				
			||||||
 | 
					          // 如果启用了验证码,则重新获取验证码
 | 
				
			||||||
 | 
					          if (this.captchaEnabled) {
 | 
				
			||||||
 | 
					            this.getCode();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          // 其他失败处理逻辑
 | 
				
			||||||
 | 
					          this.isSendingCode = false;
 | 
				
			||||||
 | 
					          this.countdown = 0;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    toggleLoginMethod() {
 | 
				
			||||||
 | 
					      this.loginMethod =
 | 
				
			||||||
 | 
					        this.loginMethod === "password" ? "mobile" : "password";
 | 
				
			||||||
 | 
					      this.loginForm.username = "";
 | 
				
			||||||
 | 
					      this.loginForm.password = "";
 | 
				
			||||||
 | 
					      this.loginForm.code = "";
 | 
				
			||||||
 | 
					      this.loginForm.verificationCode = "";
 | 
				
			||||||
 | 
					      this.loginForm.loginMethod = "";
 | 
				
			||||||
 | 
					      this.isAdmin = false;
 | 
				
			||||||
 | 
					      this.getCode();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss">
 | 
				
			||||||
 | 
					.container {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  // justify-content: flex-end;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  background: linear-gradient(to bottom, #8252fd, #3880fe, #fff);
 | 
				
			||||||
 | 
					  // background-image: url("../assets/images/bg.png");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  background-size: cover;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login {
 | 
				
			||||||
 | 
					  width: 42%;
 | 
				
			||||||
 | 
					  background-color: #ecf5ff;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  // justify-content: center;
 | 
				
			||||||
 | 
					  // align-items: center;
 | 
				
			||||||
 | 
					  height: 50%;
 | 
				
			||||||
 | 
					  border-radius: 6px;
 | 
				
			||||||
 | 
					  box-sizing: border-box;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .login-left {
 | 
				
			||||||
 | 
					    width: 35%;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .login-right {
 | 
				
			||||||
 | 
					    flex: 1;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.title {
 | 
				
			||||||
 | 
					  margin: 0 auto 30px;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  color: #707070;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-form {
 | 
				
			||||||
 | 
					  border-radius: 6px;
 | 
				
			||||||
 | 
					  background: #ffffff;
 | 
				
			||||||
 | 
					  width: 400px;
 | 
				
			||||||
 | 
					  padding: 25px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .el-input {
 | 
				
			||||||
 | 
					    height: 38px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    input {
 | 
				
			||||||
 | 
					      height: 38px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .input-icon {
 | 
				
			||||||
 | 
					    height: 39px;
 | 
				
			||||||
 | 
					    width: 14px;
 | 
				
			||||||
 | 
					    margin-left: 2px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .login-form-center {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: space-between;
 | 
				
			||||||
 | 
					    align-items: flex-start;
 | 
				
			||||||
 | 
					    padding: 1%;
 | 
				
			||||||
 | 
					    margin-bottom: 5%;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-tip {
 | 
				
			||||||
 | 
					  font-size: 13px;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  color: #bfbfbf;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-code {
 | 
				
			||||||
 | 
					  width: 33%;
 | 
				
			||||||
 | 
					  float: right;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  img {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    vertical-align: middle;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.el-login-footer {
 | 
				
			||||||
 | 
					  height: 40px;
 | 
				
			||||||
 | 
					  line-height: 40px;
 | 
				
			||||||
 | 
					  position: fixed;
 | 
				
			||||||
 | 
					  bottom: 0;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  color: #fff;
 | 
				
			||||||
 | 
					  font-family: Arial;
 | 
				
			||||||
 | 
					  font-size: 12px;
 | 
				
			||||||
 | 
					  letter-spacing: 1px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-code-img {
 | 
				
			||||||
 | 
					  height: 38px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-container {
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  margin-top: 50px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-divider {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  text-align: center;
 | 
				
			||||||
 | 
					  margin: 20px 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-divider::before,
 | 
				
			||||||
 | 
					.login-divider::after {
 | 
				
			||||||
 | 
					  content: "";
 | 
				
			||||||
 | 
					  flex: 1;
 | 
				
			||||||
 | 
					  border-bottom: 1px solid #ccc;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-divider:not(:empty)::before {
 | 
				
			||||||
 | 
					  margin-right: 0.25em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-divider:not(:empty)::after {
 | 
				
			||||||
 | 
					  margin-left: 0.25em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-icons {
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  gap: 20px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-icon {
 | 
				
			||||||
 | 
					  width: 50px;
 | 
				
			||||||
 | 
					  height: 50px;
 | 
				
			||||||
 | 
					  border-radius: 50%;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.login-icon img {
 | 
				
			||||||
 | 
					  width: 50px;
 | 
				
			||||||
 | 
					  height: 50px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
		Loading…
	
		Reference in New Issue