| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- <template>
- <div class="aui-content">
- <div class="aui-container">
- <div class="aui-form">
- <div class="aui-image">
- <div class="aui-image-text">
- <img :src="adTextImg" alt="" />
- </div>
- </div>
- <div class="aui-formBox aui-formEwm">
- <div class="aui-formWell">
- <form>
- <div class="aui-flex aui-form-nav investment_title" style="padding-bottom: 19px">
- <div class="aui-flex-box activeNav">{{t('sys.login.qrSignInFormTitle')}}</div>
- </div>
- <div class="aui-form-box">
- <div class="aui-account" style="padding: 30px 0">
- <div class="aui-ewm">
- <QrCode :value="qrCodeUrl" class="enter-x flex justify-center xl:justify-start" :width="280" />
- </div>
- </div>
- </div>
- <div class="aui-formButton">
- <a class="aui-linek-code aui-link-register" @click="goBackHandleClick">{{t('sys.login.backSignIn')}}</a>
- </div>
- </form>
- </div>
- <div class="aui-flex aui-third-text">
- <div class="aui-flex-box aui-third-border">
- <span>{{ t('sys.login.otherSignIn') }}</span>
- </div>
- </div>
- <div class="aui-flex" :class="`${prefixCls}-sign-in-way`">
- <div class="aui-flex-box">
- <div class="aui-third-login">
- <a href="" title="github" @click="onThirdLogin('github')"><GithubFilled /></a>
- </div>
- </div>
- <div class="aui-flex-box">
- <div class="aui-third-login">
- <a href="" title="企业微信" @click="onThirdLogin('wechat_enterprise')"><icon-font class="item-icon" type="icon-qiyeweixin3" /></a>
- </div>
- </div>
- <div class="aui-flex-box">
- <div class="aui-third-login">
- <a href="" title="钉钉" @click="onThirdLogin('dingtalk')"><DingtalkCircleFilled /></a>
- </div>
- </div>
- <div class="aui-flex-box">
- <div class="aui-third-login">
- <a href="" title="微信" @click="onThirdLogin('wechat_open')"><WechatFilled /></a>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <!-- 第三方登录相关弹框 -->
- <ThirdModal ref="thirdModalRef"></ThirdModal>
- </template>
- <script lang="ts" setup name="mini-code-login">
- import { ref, onUnmounted } from 'vue';
- import { getLoginQrcode, getQrcodeToken } from '/@/api/sys/user';
- import { useUserStore } from '/@/store/modules/user';
- import { QrCode } from '/@/components/Qrcode/index';
- import ThirdModal from '/@/views/sys/login/ThirdModal.vue';
- import logoImg from '/@/assets/loginmini/icon/jeecg_logo.png';
- import adTextImg from '/@/assets/loginmini/icon/jeecg_ad_text.png';
- import { useI18n } from '/@/hooks/web/useI18n';
- import { useDesign } from "/@/hooks/web/useDesign";
- import { GithubFilled, WechatFilled, DingtalkCircleFilled, createFromIconfontCN } from '@ant-design/icons-vue';
- const IconFont = createFromIconfontCN({
- scriptUrl: '//at.alicdn.com/t/font_2316098_umqusozousr.js',
- });
- const { prefixCls } = useDesign('minilogin');
- const { t } = useI18n();
- const qrCodeUrl = ref<string>('');
- let timer: IntervalHandle;
- const state = ref('0');
- const thirdModalRef = ref();
- const userStore = useUserStore();
- const emit = defineEmits(['go-back', 'success', 'register']);
- //加载二维码信息
- 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);
- }
- /**
- * 第三方登录
- * @param type
- */
- function onThirdLogin(type) {
- thirdModalRef.value.onThirdLogin(type);
- }
- /**
- * 初始化表单
- */
- function initFrom() {
- loadQrCode();
- }
- /**
- * 返回
- */
- function goBackHandleClick() {
- emit('go-back');
- closeTimer();
- }
- onUnmounted(() => {
- closeTimer();
- });
- defineExpose({
- initFrom,
- });
- </script>
- <style lang="less" scoped>
- @import '/@/assets/loginmini/style/home.less';
- @import '/@/assets/loginmini/style/base.less';
- </style>
|