Blame view

Yi.Vben5.Vue3/packages/effects/common-ui/src/ui/authentication/qrcode-login.vue 1.86 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  <script setup lang="ts">
  import { $t } from '@vben/locales';
  import { VbenButton } from '@vben-core/shadcn-ui';
  import { useQRCode } from '@vueuse/integrations/useQRCode';
  import { ref } from 'vue';
  import { useRouter } from 'vue-router';
  
  import Title from './auth-title.vue';
  
  interface Props {
    /**
     * @zh_CN 是否处于加载处理状态
     */
    loading?: boolean;
    /**
     * @zh_CN 登录路径
     */
    loginPath?: string;
    /**
     * @zh_CN 标题
     */
    title?: string;
    /**
     * @zh_CN 描述
     */
    subTitle?: string;
    /**
     * @zh_CN 按钮文本
     */
    submitButtonText?: string;
    /**
     * @zh_CN 描述
     */
    description?: string;
  }
  
  defineOptions({
    name: 'AuthenticationQrCodeLogin',
  });
  
  const props = withDefaults(defineProps<Props>(), {
    description: '',
    loading: false,
    loginPath: '/auth/login',
    submitButtonText: '',
    subTitle: '',
    title: '',
  });
  
  const router = useRouter();
  
  const text = ref('https://vben.vvbin.cn');
  
  const qrcode = useQRCode(text, {
    errorCorrectionLevel: 'H',
    margin: 4,
  });
  
  function goToLogin() {
    router.push(props.loginPath);
  }
  </script>
  
  <template>
    <div>
      <Title>
        <slot name="title">
          {{ title || $t('authentication.welcomeBack') }} 📱
        </slot>
        <template #desc>
          <span class="text-muted-foreground">
            <slot name="subTitle">
              {{ subTitle || $t('authentication.qrcodeSubtitle') }}
            </slot>
          </span>
        </template>
      </Title>
  
      <div class="flex-col-center mt-6">
        <img :src="qrcode" alt="qrcode" class="w-1/2" />
        <p class="text-muted-foreground mt-4 text-sm">
          <slot name="description">
            {{ description || $t('authentication.qrcodePrompt') }}
          </slot>
        </p>
      </div>
  
      <VbenButton class="mt-4 w-full" variant="outline" @click="goToLogin()">
        {{ $t('common.back') }}
      </VbenButton>
    </div>
  </template>