Browse Source

feat: sso login

master
wangxiang 2 years ago
parent
commit
ff9ffeeee2
No known key found for this signature in database
GPG Key ID: 1BA7946AB6B232E4
  1. BIN
      src/assets/images/sso_kics_login_bg.jpg
  2. BIN
      src/assets/loginmini/icon/login-ad-text.png
  3. BIN
      src/assets/loginmini/icon/login-ad.png
  4. BIN
      src/assets/ssoLogin/kics/icon/icon-code.png
  5. BIN
      src/assets/ssoLogin/kics/icon/icon-eye-g.png
  6. BIN
      src/assets/ssoLogin/kics/icon/icon-eye-k.png
  7. BIN
      src/assets/ssoLogin/kics/icon/icon-line-msg.png
  8. BIN
      src/assets/ssoLogin/kics/icon/icon-line-pad.png
  9. BIN
      src/assets/ssoLogin/kics/icon/icon-line-tel.png
  10. BIN
      src/assets/ssoLogin/kics/icon/icon-line-user.png
  11. BIN
      src/assets/ssoLogin/kics/icon/icon-password.png
  12. BIN
      src/assets/ssoLogin/kics/icon/icon-success.png
  13. BIN
      src/assets/ssoLogin/kics/icon/icon-user.png
  14. BIN
      src/assets/ssoLogin/kics/icon/login-ad-text.png
  15. BIN
      src/assets/ssoLogin/kics/icon/login-ad.png
  16. BIN
      src/assets/ssoLogin/kics/icon/login-bg.png
  17. 143
      src/assets/ssoLogin/kics/style/base.less
  18. 594
      src/assets/ssoLogin/kics/style/home.less
  19. 5
      src/views/core/loginmini/MiniLogin.vue
  20. 298
      src/views/system/ssoLogin/kics/index.vue

BIN
src/assets/images/sso_kics_login_bg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
src/assets/loginmini/icon/login-ad-text.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 88 KiB

BIN
src/assets/loginmini/icon/login-ad.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 997 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-code.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-eye-g.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-eye-k.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-line-msg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-line-pad.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-line-tel.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-line-user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-password.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-success.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
src/assets/ssoLogin/kics/icon/icon-user.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
src/assets/ssoLogin/kics/icon/login-ad-text.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
src/assets/ssoLogin/kics/icon/login-ad.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
src/assets/ssoLogin/kics/icon/login-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

143
src/assets/ssoLogin/kics/style/base.less

@ -0,0 +1,143 @@
::-webkit-input-placeholder {
/* WebKit browsers */
color: #868686;
font-size: 15px;
}
::-moz-placeholder {
/* Mozilla Firefox 19+ */
color: #868686;
font-size: 15px;
}
:-ms-input-placeholder {
/* Internet Explorer 10+ */
color: #868686;
font-size: 15px;
}
input:-webkit-autofill {
transition: background-color 5000s ease-in-out 0s;
}
html {
scroll-behavior: smooth;
}
html,
body {
color: #333;
margin: 0;
height: 100%;
font-family: 'Myriad Set Pro', 'Helvetica Neue', Helvetica, Arial, Verdana, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-weight: normal;
}
* {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
a,
label,
button,
input,
select {
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
html,
body,
div,
dl,
dt,
dd,
ol,
ul,
li,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
button,
fieldset,
form,
input,
legend,
textarea,
th,
td {
margin: 0;
padding: 0;
}
a {
text-decoration: none;
color: #08acee;
}
button {
outline: 0;
}
button,
input,
optgroup,
select,
textarea {
margin: 0;
font: inherit;
color: inherit;
outline: none;
}
.aui-flex {
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
position: relative;
}
.aui-flex-box {
-webkit-box-flex: 1;
-webkit-flex: 1;
flex: 1;
min-width: 0;
font-size: 14px;
color: #333;
}
.icon {
width: 20px;
height: 20px;
display: block;
border: none;
float: left;
background-size: 20px;
background-repeat: no-repeat;
position: relative;
}
.login-background-img {
background-image: url(../icon/login-bg.png);
background-size: cover;
background-position: top center;
background-repeat: no-repeat;
}
@mini-login-prefix-cls: ~'@{namespace}-mini-login';
.@{mini-login-prefix-cls} {
width: 100%;
height: 100%;;
}

594
src/assets/ssoLogin/kics/style/home.less

@ -0,0 +1,594 @@
.aui-content {
width: 100%;
}
.aui-container {
max-width: 1000px;
margin: 0 auto;
box-shadow: 0 4px 8px 1px rgba(0, 0, 0, 0.2);
position: fixed;
top: 50%;
left: 50%;
width: 92%;
height: auto;
z-index: 5;
-webkit-transform: translateX(-50%) translateY(-50%);
-moz-transform: translateX(-50%) translateY(-50%);
-ms-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
-webkit-transform: translateX(-50%) translateY(-50%);
}
.aui-form {
width: 100%;
background: #eee;
display: -webkit-box;
display: -moz-box;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
}
.aui-image {
flex-basis: 60%;
-webkit-flex-basis: 60%;
background-image: url(../icon/login-ad.png);
background-size: cover;
}
.aui-image-text {
background-image: url(../icon/login-ad-text.png);
background-position: center;
background-repeat: repeat-x;
background-size: auto 530px;
width: 100%;
height: 100%;
&-register {
background-size: auto 630px;
}
&-codelogin {
background-size: auto 600px;
}
&-forgotpad {
background-size: auto 550px;
}
}
.aui-formBox {
flex-basis: 40%;
-webkit-flex-basis: 40%;
box-sizing: border-box;
padding: 30px 20px;
background: #fff;
box-shadow: 2px 9px 49px -17px rgba(0, 0, 0, 0.1);
}
.aui-logo {
width: 180px;
height: 80px;
position: absolute;
top: 2%;
left: 8%;
z-index: 4;
}
.aui-account-line {
padding-top: 20px;
padding-bottom: 40px;
}
.aui-code-line {
position: absolute;
right: 0;
top: 0;
border-left: 3px solid #fff;
height: 42px;
padding: 0 15px;
line-height: 40px;
font-size: 14px;
cursor: pointer;
}
.aui-eye {
position: absolute;
right: 20px;
top: 10px;
width: 20px;
cursor: pointer;
}
.aui-input-line {
background: #f5f5f9;
border-radius: 2px;
position: relative;
margin: 12px 0;
}
.aui-input-line input {
width: 100%;
padding: 12px 10px;
border: none;
color: #333333;
font-size: 14px;
background: unset;
padding-left: 40px;
}
.aui-input-line .icon {
position: absolute;
top: 10px;
left: 10px;
}
.icon-line-user {
background-image: url(../icon/icon-line-user.png);
}
.icon-line-tel {
background-image: url(../icon/icon-line-tel.png);
}
.icon-line-msg {
background-image: url(../icon/icon-line-msg.png);
}
.icon-line-pad {
background-image: url(../icon/icon-line-pad.png);
}
.aui-forgot .aui-input-line input {
padding-left: 20px;
}
.aui-forgot .aui-input-line {
background: none;
border: 1px solid #dbdbdb;
border-radius: 2px;
}
.aui-forgot .aui-input-line:focus {
border-color: #1b90ff;
}
.aui-forgot .aui-input-line:hover {
border-color: #1b90ff;
}
.aui-forgot .aui-input-line .aui-code-line {
border-left: 1px solid #dbdbdb;
height: 40px;
color: #1b90ff;
}
.aui-step-box {
width: 100%;
height: auto;
position: relative;
overflow: hidden;
margin-top: 50px;
margin-bottom: 20px;
}
.aui-step-box::after {
position: absolute;
top: 20px;
left: 50%;
width: 76%;
margin-left: -38%;
height: 1px;
background: #bcbcbc;
content: '';
}
.aui-step-item {
width: 33.333%;
float: left;
text-align: center;
position: relative;
z-index: 2;
}
.aui-step-tags em {
width: 40px;
height: 40px;
border: 8px solid #fff;
line-height: 1.3;
border-radius: 100px;
background: #bcbcbc;
display: block;
margin: 0 auto;
font-style: normal;
color: #fff;
font-size: 19px;
font-weight: 500;
}
.aui-step-tags p {
font-size: 14px;
color: #bcbcbc;
}
.activeStep .aui-step-tags em {
background: #1b90ff;
}
.activeStep .aui-step-tags p {
color: #1b90ff;
}
.aui-success {
position: absolute;
top: 50%;
left: 50%;
height: 80px;
width: 100%;
margin-top: -40px;
margin-left: -50%;
}
.aui-success-icon {
width: 40px;
margin: 0 auto;
}
.aui-success h3 {
width: 100%;
text-align: center;
color: #515151;
font-size: 18px;
padding-top: 20px;
}
.aui-form-nav {
text-align: center;
padding-bottom: 20px;
}
.aui-form-nav .aui-flex-box {
color: #040404;
font-size: 18px;
font-weight: 500;
cursor: pointer;
}
.aui-clear-left {
text-align: left;
}
.aui-clear-left .activeNav::after {
left: 18px;
}
.activeNav {
position: relative;
}
.activeNav::after {
content: '';
position: absolute;
z-index: 0;
bottom: -10px;
left: 50%;
margin-left: -15px;
width: 30px;
height: 4px;
background: #1b90ff;
border-radius: 100px;
}
.phone .aui-inputClear {
padding-left: 0;
}
.phone .aui-inputClear input {
//padding-left: 1px;
}
.phone .aui-inputClear .aui-code {
text-align: right;
width: auto;
bottom: 10px;
}
.phone .aui-inputClear .aui-code a {
color: #1b90ff;
font-size: 14px;
}
.aui-ewm {
width: 280px;
margin: 0 auto;
}
.aui-formEwm {
padding: 50px 40px 55px 40px;
}
.aui-inputClear {
width: 100%;
border-bottom: 1px solid #cccccc;
position: relative;
padding-left: 20px;
background: #fff;
margin-bottom: 8px;
margin-top: 20px;
}
.aui-inputClear .icon {
position: absolute;
top: 10px;
left: 0;
}
.aui-inputClear input {
width: 100%;
padding: 10px;
border: none;
color: #333333;
font-size: 14px;
background: none;
}
.aui-code {
position: absolute;
right: 8px;
bottom: 0;
width: 115px;
cursor: pointer;
}
.icon-code {
background-image: url(../icon/icon-user.png);
}
.icon-password {
background-image: url(../icon/icon-password.png);
}
.icon-code {
background-image: url(../icon/icon-code.png);
}
.aui-inputClear:focus {
border-bottom: 1px solid #1b90ff;
}
.aui-inputClear:hover {
border-bottom: 1px solid #1b90ff;
}
.aui-choice {
position: relative;
font-size: 12px;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
position: relative;
color: #040404;
}
.aui-choice input {
width: 14px;
height: 14px;
cursor: pointer;
}
.aui-forget a {
color: #1b90ff;
font-size: 12px;
}
.aui-forget a:hover {
text-decoration: underline;
}
.aui-formButton {
padding-top: 10px;
}
.aui-formButton a {
height: 42px;
padding: 10px 15px;
font-size: 14px;
border-radius: 8px;
border-color: #67b5ff;
background: #1b90ff;
width: 100%;
cursor: pointer;
border: none;
color: #fff;
margin: 8px 0;
display: block;
text-align: center;
}
.aui-formButton a:focus {
opacity: 0.9;
}
.aui-formButton a:hover {
opacity: 0.9;
}
.aui-formButton .aui-linek-code {
background: #fff;
color: #3c3c3c;
border: 1px solid #dbdbdb;
}
.aui-formButton .aui-linek-code:hover {
color: #1b90ff;
border: 1px solid #1b90ff;
}
.aui-third-text {
font-size: 12px;
color: #3c3c3c;
margin-top: 25px;
margin-bottom: 25px;
}
.aui-third-text span {
color: #afafaf;
display: block;
width: 38%;
margin: 0 auto;
text-align: center;
position: relative;
background: #fff;
z-index: 100;
font-size: 12px;
}
.aui-third-border {
position: relative;
}
.aui-third-border::after {
content: '';
position: absolute;
z-index: 0;
top: 8px;
left: 0;
width: 100%;
height: 1px;
border-top: 1px solid #d9d9d9;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
}
.aui-third-login {
width: 30px;
height: 30px;
margin: 0 auto;
border-radius: 100px;
}
.aui-third-login a {
font-size: 22px;
margin: 0 auto;
border-radius: 100px;
display: inline-block;
color: #888;
}
.aui-third-login a:hover {
color: #1b90ff;
cursor: pointer;
}
.aui-third-login:hover {
cursor: pointer;
}
@media (max-width: 320px) {
.aui-form {
flex-direction: column;
}
.aui-image {
order: 2;
display: none;
}
.aui-container {
width: 100%;
max-width: 550px;
margin-top: 10px;
}
.aui-content {
justify-content: initial;
width: 100%;
padding: 20px;
}
}
@media (min-width: 321px) and (max-width: 375px) {
.aui-form {
flex-direction: column;
}
.aui-image {
order: 2;
display: none;
}
.aui-container {
width: 90%;
max-width: 550px;
}
.aui-content {
justify-content: initial;
width: 100%;
padding: 20px;
}
}
@media (min-width: 375px) and (max-width: 425px) {
.aui-form {
flex-direction: column;
}
.aui-image {
order: 2;
display: none;
}
.aui-container {
width: 90%;
max-width: 550px;
}
.aui-content {
justify-content: initial;
width: 100%;
padding: 40px;
}
}
@media (min-width: 425px) and (max-width: 768px) {
.aui-form {
flex-direction: column;
}
.aui-image {
order: 2;
display: none;
}
.aui-container {
width: 90%;
max-width: 550px;
}
.aui-content {
justify-content: initial;
width: 100%;
padding: 40px;
}
.aui-step-box::after {
width: 70%;
margin-left: -35%;
}
}
@media only screen and (max-width: 767px) {
.aui-logo {
top: 3%;
}
}
@media screen and (max-width: 300px) {
.aui-logo {
top: 3%;
}
}

5
src/views/core/loginmini/MiniLogin.vue

@ -80,10 +80,11 @@
</div> </div>
<div class="aui-flex"> <div class="aui-flex">
<div class="aui-flex-box"> <div class="aui-flex-box">
<div class="aui-choice"> <!--默认为记住密码7天内有效不会清除LocalStorage-->
<!--<div class="aui-choice">
<a-input v-model:value="rememberMe" class="fix-auto-fill" type="checkbox"/> <a-input v-model:value="rememberMe" class="fix-auto-fill" type="checkbox"/>
<span style="margin-left: 5px">{{ t('sys.login.rememberMe') }}</span> <span style="margin-left: 5px">{{ t('sys.login.rememberMe') }}</span>
</div> </div>-->
</div> </div>
<div class="aui-forget"> <div class="aui-forget">
<a @click="forgetHandelClick"> {{ t('sys.login.forgetPassword') }}</a> <a @click="forgetHandelClick"> {{ t('sys.login.forgetPassword') }}</a>

298
src/views/system/ssoLogin/kics/index.vue

@ -1,19 +1,17 @@
<template> <template>
<div :class="prefixCls" class="login-background-img"> <div :class="prefixCls" class="login-background-img">
11 <AppLocalePicker v-if="showLocale" class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false"/>
<!-- <AppLocalePicker v-if="showLocale" class="absolute top-4 right-4 enter-x xl:text-gray-600" :showText="false"/>
<AppDarkModeToggle class="absolute top-3 right-10 enter-x"/> <AppDarkModeToggle class="absolute top-3 right-10 enter-x"/>
<div v-if="!getIsMobile" class="aui-logo"> <div v-if="!getIsMobile" class="aui-logo">
<div> <div>
<h3> <h3>
<img :src="logoImg"> <img :src="logoImg" alt="">
</h3> </h3>
</div> </div>
</div> </div>
<div v-else class="aui-phone-logo"> <div v-else class="aui-phone-logo">
<img :src="logoPhoneImg"> <img :src="logoPhoneImg" alt="">
</div> </div>
<div v-show="type === 'login'">
<div class="aui-content"> <div class="aui-content">
<div class="aui-container"> <div class="aui-container">
<div class="aui-form"> <div class="aui-form">
@ -23,20 +21,10 @@
<div class="aui-formBox"> <div class="aui-formBox">
<div class="aui-formWell"> <div class="aui-formWell">
<div class="aui-flex aui-form-nav"> <div class="aui-flex aui-form-nav">
<div <div class="aui-flex-box">登录 | LOGIN</div>
class="aui-flex-box"
:class="activeIndex === 'accountLogin' ? 'activeNav on' : ''"
@click="loginClick('accountLogin')"
>{{ t('sys.login.signInFormTitle') }}</div>
<div
class="aui-flex-box"
:class="activeIndex === 'phoneLogin' ? 'activeNav on' : ''"
@click="loginClick('phoneLogin')"
>{{ t('sys.login.mobileSignInFormTitle') }}</div>
</div> </div>
<div class="aui-form-box" style="height: 180px"> <div class="aui-form-box" style="height: 180px">
<a-form <a-form
v-if="activeIndex === 'accountLogin'"
ref="loginRef" ref="loginRef"
:model="formData" :model="formData"
@keypress.enter="loginHandleClick" @keypress.enter="loginHandleClick"
@ -59,63 +47,6 @@
/> />
</a-form-item> </a-form-item>
</div> </div>
<div class="aui-inputClear">
<i class="icon icon-code"/>
<a-form-item>
<a-input
v-model:value="formData.inputCode"
class="fix-auto-fill"
type="text"
:placeholder="t('sys.login.captcha')"
/>
</a-form-item>
<div class="aui-code">
<img v-if="randCodeData.requestCodeSuccess" :src="randCodeData.randCodeImage" @click="handleChangeCheckCode">
<img
v-else
style="margin-top: 2px; max-width: initial"
:src="defaultCaptchaImg"
@click="handleChangeCheckCode"
>
</div>
</div>
<div class="aui-flex">
<div class="aui-flex-box">
<div class="aui-choice">
<a-input v-model:value="rememberMe" class="fix-auto-fill" type="checkbox"/>
<span style="margin-left: 5px">{{ t('sys.login.rememberMe') }}</span>
</div>
</div>
<div class="aui-forget">
<a @click="forgetHandelClick"> {{ t('sys.login.forgetPassword') }}</a>
</div>
</div>
</div>
</a-form>
<a-form
v-else
ref="phoneFormRef"
:model="phoneFormData"
@keypress.enter="loginHandleClick"
>
<div class="aui-account phone">
<div class="aui-inputClear phoneClear">
<a-input v-model:value="phoneFormData.mobile" class="fix-auto-fill" :placeholder="t('sys.login.mobile')"/>
</div>
<div class="aui-inputClear">
<a-input
v-model:value="phoneFormData.smscode"
class="fix-auto-fill"
:maxlength="6"
:placeholder="t('sys.login.smsCode')"
/>
<div v-if="showInterval" class="aui-code" @click="getLoginCode">
<a>{{ t('component.countdown.normalText') }}</a>
</div>
<div v-else class="aui-code">
<span class="aui-get-code code-shape">{{ t('component.countdown.sendText', [unref(timeRuning)]) }}</span>
</div>
</div>
</div> </div>
</a-form> </a-form>
</div> </div>
@ -128,76 +59,25 @@
@click="loginHandleClick" @click="loginHandleClick"
>{{ t('sys.login.loginButton') }}</a-button> >{{ t('sys.login.loginButton') }}</a-button>
</div> </div>
<div class="aui-flex">
<a class="aui-linek-code aui-flex-box" @click="codeHandleClick">{{ t('sys.login.qrSignInFormTitle') }}</a>
</div>
&lt;!&ndash;<div class="aui-flex">
<a class="aui-linek-code aui-flex-box" @click="registerHandleClick">{{ t('sys.login.registerButton') }}</a>
</div>&ndash;&gt;
</div>
</div>
<a-form>
<div class="aui-flex aui-third-text">
<div class="aui-flex-box aui-third-border">
<span>{{ t('sys.login.otherSignIn') }}</span>
</div>
</div> </div>
<div class="aui-flex" :class="`${prefixCls}-sign-in-way`">
<div class="aui-flex-box">
<div class="aui-third-login">
<a title="github" @click="onThirdLogin('github')"><GithubFilled/></a>
</div>
</div>
<div class="aui-flex-box">
<div class="aui-third-login">
<a title="支付宝" @click="onThirdLogin('alipay')"><AlipayCircleFilled/></a>
</div>
</div>
<div class="aui-flex-box">
<div class="aui-third-login">
<a title="钉钉" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled/></a>
</div>
</div>
<div class="aui-flex-box">
<div class="aui-third-login">
<a title="微信" @click="onThirdLogin('wechat_open')"><WechatFilled/></a>
</div>
</div>
</div>
</a-form>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div v-show="type === 'forgot'" :class="`${prefixCls}-form`">
<MiniForgotpad ref="forgotRef" @go-back="goBack" @success="handleSuccess"/>
</div>
<div v-show="type === 'register'" :class="`${prefixCls}-form`">
<MiniRegister ref="registerRef" @go-back="goBack" @success="handleSuccess"/>
</div>
<div v-show="type === 'codeLogin'" :class="`${prefixCls}-form`">
<MiniCodelogin ref="codeRef" @go-back="goBack" @success="handleSuccess"/>
</div>-->
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
/*/!*import { getCaptcha } from '/@/api/platform/core/controller/user'; import { reactive, ref, toRaw } from 'vue';
import { onMounted, reactive, ref, toRaw, unref } from 'vue';
import defaultCaptchaImg from '/@/assets/images/captcha.jpg';
import { useUserStore } from '/@/store/modules/user'; import { useUserStore } from '/@/store/modules/user';
import { useMessage } from '/@/hooks/web/useMessage'; import { useMessage } from '/@/hooks/web/useMessage';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import MiniForgotpad from './MiniForgotpad.vue';
import MiniRegister from './MiniRegister.vue';
import MiniCodelogin from './MiniCodelogin.vue';
import logoImg from '/@/assets/images/logo-tag.png'; import logoImg from '/@/assets/images/logo-tag.png';
import logoPhoneImg from '/@/assets/images/logo.png'; import logoPhoneImg from '/@/assets/images/logo.png';
import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application'; import { AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
import { useLocaleStore } from '/@/store/modules/locale'; import { useLocaleStore } from '/@/store/modules/locale';
import { useDesign } from '/@/hooks/web/useDesign'; import { useDesign } from '/@/hooks/web/useDesign';
import { useAppInject } from '/@/hooks/web/useAppInject'; import { useAppInject } from '/@/hooks/web/useAppInject';
import { GithubFilled, WechatFilled, AlipayCircleFilled, DingtalkCircleFilled } from '@ant-design/icons-vue';
const { prefixCls } = useDesign('mini-login'); const { prefixCls } = useDesign('mini-login');
const { notification, createMessage } = useMessage(); const { notification, createMessage } = useMessage();
@ -205,14 +85,7 @@
const { t } = useI18n(); const { t } = useI18n();
const localeStore = useLocaleStore(); const localeStore = useLocaleStore();
const showLocale = localeStore.getShowPicker; const showLocale = localeStore.getShowPicker;
const randCodeData = reactive<any>({
randCodeImage: '',
requestCodeSuccess: false,
});
const rememberMe = ref<string>('0');
//
const activeIndex = ref<string>('accountLogin');
const type = ref<string>('login');
// //
const formData = reactive<any>({ const formData = reactive<any>({
realKey: '', realKey: '',
@ -226,52 +99,11 @@
smscode: '', smscode: '',
}); });
const loginRef = ref(); const loginRef = ref();
//
const codeRef = ref();
//
const showInterval = ref<boolean>(true);
// 60s
const timeRuning = ref<number>(60);
//
const timer = ref<any>(null);
//
const forgotRef = ref();
//
const registerRef = ref();
const loginLoading = ref<boolean>(false); const loginLoading = ref<boolean>(false);
const { getIsMobile } = useAppInject(); const { getIsMobile } = useAppInject();
/!**
* 获取验证码
*!/
async function handleChangeCheckCode() {
formData.inputCode = '';
try {
const codeModel = await getCaptcha();
randCodeData.randCodeImage = codeModel.img;
randCodeData.requestCodeSuccess = true;
formData.realKey = codeModel.realKey;
} catch(error) {
randCodeData.requestCodeSuccess = false;
}
}
/!**
* 切换登录方式
*!/
function loginClick(type) {
activeIndex.value = type;
}
/!**
* 账号或者手机登录
*!/
async function loginHandleClick() { async function loginHandleClick() {
if (unref(activeIndex) === 'accountLogin') {
await accountLogin(); await accountLogin();
} else {
await phoneLogin();
}
} }
async function accountLogin() { async function accountLogin() {
@ -305,130 +137,16 @@
} catch (error){ } catch (error){
formData.code=''; formData.code='';
formData.realKey=''; formData.realKey='';
await handleChangeCheckCode();
} finally { } finally {
loginLoading.value = false; loginLoading.value = false;
} }
} }
/!**
* 手机号登录
*!/
async function phoneLogin() {
notification.success({
message: '功能待开发中.',
duration: 3,
});
}
/!**
* 获取手机验证码
*!/
async function getLoginCode() {
/!*if (!phoneFormData.mobile) {
createMessage.warn(t('sys.login.mobilePlaceholder'));
return;
}*!/
const TIME_COUNT = 60;
if (!unref(timer)) {
timeRuning.value = TIME_COUNT;
showInterval.value = false;
timer.value = setInterval(() => {
if (unref(timeRuning) > 0 && unref(timeRuning) <= TIME_COUNT) {
timeRuning.value = timeRuning.value - 1;
} else {
showInterval.value = true;
clearInterval(unref(timer));
timer.value = null;
}
}, 1000);
}
}
/!**
* 第三方登录
* @param type
*!/
function onThirdLogin(type) {
notification.success({
message: '功能待开发中.',
duration: 3,
});
}
/!**
* 忘记密码
*!/
function forgetHandelClick() {
type.value = 'forgot';
setTimeout(() => {
forgotRef.value.initForm();
}, 300);
}
/!**
* 返回登录页面
*!/
function goBack() {
activeIndex.value = 'accountLogin';
type.value = 'login';
}
/!**
* 忘记密码/注册账号回调事件
* @param value
*!/
function handleSuccess(value) {
Object.assign(formData, value);
Object.assign(phoneFormData, { mobile: '', smscode: '' });
type.value = 'login';
activeIndex.value = 'accountLogin';
handleChangeCheckCode();
}
/!**
* 注册
*!/
function registerHandleClick() {
type.value = 'register';
setTimeout(() => {
registerRef.value.initForm();
}, 300);
}
/!**
* 二维码登录
*!/
function codeHandleClick() {
type.value = 'codeLogin';
setTimeout(() => {
codeRef.value.initFrom();
}, 300);
}
onMounted(() => {
//
handleC*!/hangeCheckCode();
});*/
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@import '/@/assets/loginmini/style/home.less';
.login-background-img { @import '/@/assets/loginmini/style/base.less';
background-image: url(../icon/login-bg.png);
background-size: cover;
background-position: top center;
background-repeat: no-repeat;
}
.aui-logo {
width: 180px;
height: 80px;
position: absolute;
top: 2%;
left: 8%;
z-index: 4;
}
:deep(.ant-input:focus) { :deep(.ant-input:focus) {
box-shadow: none; box-shadow: none;

Loading…
Cancel
Save