mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 18:28:43 +08:00 
			
		
		
		
	feat: add qrcode login
This commit is contained in:
		| @@ -124,6 +124,7 @@ export default { | |||||||
|     getSmsCode: 'Get SMS Code', |     getSmsCode: 'Get SMS Code', | ||||||
|     btnMobile: 'Mobile sign in', |     btnMobile: 'Mobile sign in', | ||||||
|     btnQRCode: 'QR code sign in', |     btnQRCode: 'QR code sign in', | ||||||
|  |     qrcode: 'Scan the QR code to log in', | ||||||
|     btnRegister: 'Sign up', |     btnRegister: 'Sign up', | ||||||
|     SmsSendMsg: 'code has been sent' |     SmsSendMsg: 'code has been sent' | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -124,6 +124,7 @@ export default { | |||||||
|     getSmsCode: '获取验证码', |     getSmsCode: '获取验证码', | ||||||
|     btnMobile: '手机登录', |     btnMobile: '手机登录', | ||||||
|     btnQRCode: '二维码登录', |     btnQRCode: '二维码登录', | ||||||
|  |     qrcode: '扫描二维码登录', | ||||||
|     btnRegister: '注册', |     btnRegister: '注册', | ||||||
|     SmsSendMsg: '验证码已发送' |     SmsSendMsg: '验证码已发送' | ||||||
|   }, |   }, | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import { LoginForm, MobileForm, RegisterForm } from './components' | import { LoginForm, MobileForm, RegisterForm, QrCodeForm } from './components' | ||||||
| import { ThemeSwitch } from '@/components/ThemeSwitch' | import { ThemeSwitch } from '@/components/ThemeSwitch' | ||||||
| import { LocaleDropdown } from '@/components/LocaleDropdown' | import { LocaleDropdown } from '@/components/LocaleDropdown' | ||||||
| import { useI18n } from '@/hooks/web/useI18n' | import { useI18n } from '@/hooks/web/useI18n' | ||||||
| @@ -66,6 +66,8 @@ const appStore = useAppStore() | |||||||
|             <LoginForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" /> |             <LoginForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" /> | ||||||
|             <!-- 手机登录 --> |             <!-- 手机登录 --> | ||||||
|             <MobileForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" /> |             <MobileForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" /> | ||||||
|  |             <!-- 二维码登录 --> | ||||||
|  |             <QrCodeForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" /> | ||||||
|             <!-- 注册 --> |             <!-- 注册 --> | ||||||
|             <RegisterForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" /> |             <RegisterForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" /> | ||||||
|           </div> |           </div> | ||||||
|   | |||||||
| @@ -246,7 +246,9 @@ onMounted(async () => { | |||||||
|               </el-button> |               </el-button> | ||||||
|             </el-col> |             </el-col> | ||||||
|             <el-col :span="8"> |             <el-col :span="8"> | ||||||
|               <el-button class="w-[100%]">{{ t('login.btnQRCode') }}</el-button> |               <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.QR_CODE)"> | ||||||
|  |                 {{ t('login.btnQRCode') }} | ||||||
|  |               </el-button> | ||||||
|             </el-col> |             </el-col> | ||||||
|             <el-col :span="8"> |             <el-col :span="8"> | ||||||
|               <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.REGISTER)"> |               <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.REGISTER)"> | ||||||
|   | |||||||
| @@ -0,0 +1,34 @@ | |||||||
|  | <script setup lang="ts"> | ||||||
|  | import { computed, unref } from 'vue' | ||||||
|  | import { ElRow, ElCol, ElCard, ElDivider } from 'element-plus' | ||||||
|  | import { useI18n } from '@/hooks/web/useI18n' | ||||||
|  | import { useLoginState, LoginStateEnum } from './useLogin' | ||||||
|  | import LoginFormTitle from './LoginFormTitle.vue' | ||||||
|  | import { Qrcode } from '@/components/Qrcode' | ||||||
|  | import logoImg from '@/assets/imgs/logo.png' | ||||||
|  |  | ||||||
|  | const { t } = useI18n() | ||||||
|  | const { handleBackLogin, getLoginState } = useLoginState() | ||||||
|  | const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE) | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <template> | ||||||
|  |   <el-row v-show="getShow" style="maring-left: -10px; maring-right: -10px"> | ||||||
|  |     <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> | ||||||
|  |       <LoginFormTitle style="width: 100%" /> | ||||||
|  |     </el-col> | ||||||
|  |     <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> | ||||||
|  |       <el-card shadow="hover" class="mb-10px text-center"> | ||||||
|  |         <Qrcode :logo="logoImg" /> | ||||||
|  |       </el-card> | ||||||
|  |     </el-col> | ||||||
|  |     <el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider> | ||||||
|  |     <el-col :span="24" style="padding-left: 10px; padding-right: 10px"> | ||||||
|  |       <div class="w-[100%] mt-15px"> | ||||||
|  |         <el-button class="w-[100%]" @click="handleBackLogin"> | ||||||
|  |           {{ t('sys.login.backSignIn') }} | ||||||
|  |         </el-button> | ||||||
|  |       </div> | ||||||
|  |     </el-col> | ||||||
|  |   </el-row> | ||||||
|  | </template> | ||||||
| @@ -121,20 +121,20 @@ const loginRegister = async () => { | |||||||
|  |  | ||||||
|     <template #code="form"> |     <template #code="form"> | ||||||
|       <div class="w-[100%] flex"> |       <div class="w-[100%] flex"> | ||||||
|         <ElInput v-model="form['code']" :placeholder="t('login.codePlaceholder')" /> |         <el-input v-model="form['code']" :placeholder="t('login.codePlaceholder')" /> | ||||||
|       </div> |       </div> | ||||||
|     </template> |     </template> | ||||||
|  |  | ||||||
|     <template #register> |     <template #register> | ||||||
|       <div class="w-[100%]"> |       <div class="w-[100%]"> | ||||||
|         <ElButton type="primary" class="w-[100%]" :loading="loading" @click="loginRegister"> |         <el-button type="primary" class="w-[100%]" :loading="loading" @click="loginRegister"> | ||||||
|           {{ t('login.register') }} |           {{ t('login.register') }} | ||||||
|         </ElButton> |         </el-button> | ||||||
|       </div> |       </div> | ||||||
|       <div class="w-[100%] mt-15px"> |       <div class="w-[100%] mt-15px"> | ||||||
|         <ElButton class="w-[100%]" @click="handleBackLogin"> |         <el-button class="w-[100%]" @click="handleBackLogin"> | ||||||
|           {{ t('login.hasUser') }} |           {{ t('login.hasUser') }} | ||||||
|         </ElButton> |         </el-button> | ||||||
|       </div> |       </div> | ||||||
|     </template> |     </template> | ||||||
|   </Form> |   </Form> | ||||||
|   | |||||||
| @@ -2,5 +2,6 @@ import LoginForm from './LoginForm.vue' | |||||||
| import MobileForm from './MobileForm.vue' | import MobileForm from './MobileForm.vue' | ||||||
| import LoginFormTitle from './LoginFormTitle.vue' | import LoginFormTitle from './LoginFormTitle.vue' | ||||||
| import RegisterForm from './RegisterForm.vue' | import RegisterForm from './RegisterForm.vue' | ||||||
|  | import QrCodeForm from './QrCodeForm.vue' | ||||||
|  |  | ||||||
| export { LoginForm, MobileForm, LoginFormTitle, RegisterForm } | export { LoginForm, MobileForm, LoginFormTitle, RegisterForm, QrCodeForm } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 xingyu
					xingyu