| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <template>
- <template v-if="getShow">
- <LoginFormTitle class="enter-x" />
- <div class="enter-x min-w-64 min-h-64">
- <QrCode :value="qrCodeUrl" class="enter-x flex justify-center xl:justify-start" :width="280" />
- <Divider class="enter-x">{{ scanContent }}</Divider>
- <Button size="large" block class="mt-4 enter-x" @click="handleBackLogin">
- {{ t('sys.login.backSignIn') }}
- </Button>
- </div>
- </template>
- </template>
- <script lang="ts" setup>
- import { computed, onMounted, unref, ref, watch } from 'vue';
- import LoginFormTitle from './LoginFormTitle.vue';
- import { Button, Divider } from 'ant-design-vue';
- import { QrCode } from '/@/components/Qrcode/index';
- import { useUserStore } from '/@/store/modules/user';
- import { useI18n } from '/@/hooks/web/useI18n';
- import { useLoginState, LoginStateEnum } from './useLogin';
- import { getLoginQrcode, getQrcodeToken } from '/@/api/sys/user';
- const qrCodeUrl = ref('');
- let timer: IntervalHandle;
- const { t } = useI18n();
- const userStore = useUserStore();
- const { handleBackLogin, getLoginState } = useLoginState();
- const state = ref('0');
- const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE);
- const scanContent = computed(() => {
- return unref(state) === '0' ? t('sys.login.scanSign') : t('sys.login.scanSuccess');
- });
- //加载二维码信息
- function loadQrCode() {
- state.value = '0';
- getLoginQrcode().then((res) => {
- qrCodeUrl.value = res.qrcodeId;
- if (res.qrcodeId) {
- openTimer(res.qrcodeId);
- }
- });
- }
- //监控扫码状态
- function watchQrcodeToken(qrcodeId) {
- getQrcodeToken({ qrcodeId: qrcodeId }).then((res) => {
- let token = res.token;
- if (token == '-2') {
- //二维码过期重新获取
- loadQrCode();
- clearInterval(timer);
- }
- //扫码成功
- if (res.success) {
- state.value = '2';
- clearInterval(timer);
- setTimeout(() => {
- userStore.qrCodeLogin(token);
- }, 500);
- }
- });
- }
- /** 开启定时器 */
- function openTimer(qrcodeId) {
- watchQrcodeToken(qrcodeId);
- closeTimer();
- timer = setInterval(() => {
- watchQrcodeToken(qrcodeId);
- }, 1500);
- }
- /** 关闭定时器 */
- function closeTimer() {
- if (timer) clearInterval(timer);
- }
- watch(getShow, (v) => {
- if (v) {
- loadQrCode();
- } else {
- closeTimer();
- }
- });
- </script>
|