Kaynağa Gözat

灵工腾讯验证码

wangxin 5 yıl önce
ebeveyn
işleme
c73a48d710
4 değiştirilmiş dosya ile 276 ekleme ve 4 silme
  1. 2 0
      src/api/index.js
  2. 11 2
      src/router.js
  3. 11 2
      src/utils/util.js
  4. 252 0
      src/view/captcha/captcha-lg.vue

+ 2 - 0
src/api/index.js

@@ -44,4 +44,6 @@ module.exports = {
     checkIns: '/f/api/qdCheckIns/checkIns',
     // 获取验证码
     getCaptchaCode: '/f/api/login/getCaptchaCode',
+    // 获取验证码灵工
+    getAuthCode: '/api/hwuser/getCaptchaCode',
 };

+ 11 - 2
src/router.js

@@ -140,6 +140,14 @@ const routes = [
         }
     },
     {
+        path: '/captcha/captcha-lg',
+        name: 'captchaLg',
+        component: () => import('./view/captcha/captcha-lg'),
+        meta: {
+            title: '获取验证码'
+        }
+    },
+    {
         path: '*',
         name: 'login',
         component: () => import('./view/login/index'),
@@ -167,7 +175,8 @@ const whiteList = [
     'join',
     'xiapu',
     'talentExchange',
-    'captcha'
+    'captcha',
+    'captchaLg',
 ]
 router.beforeEach((to, from, next) => {
     const title = to.meta && to.meta.title;
@@ -181,7 +190,7 @@ router.beforeEach((to, from, next) => {
             body.style.background = '#f5f5f5'
             body.style.height = '100%'
         }
-        if (to.name === 'captcha') {
+        if (to.name === 'captcha'  || to.name === 'captchaLg') {
             var hm = document.createElement("script");
             hm.src = "https://ssl.captcha.qq.com/TCaptcha.js";
             var s = document.getElementsByTagName("script")[0];

+ 11 - 2
src/utils/util.js

@@ -311,9 +311,18 @@ export function cssExpand(css, id) {
 
 export function getAppId() {
     //正式
-    const captcha = '2019232819';
+    // const captcha = '2019232819';
     //测试
-    // const captcha = '2078399419';
+    const captcha = '2078399419';
+
+    return captcha
+}
+
+export function getAppIdLG() {
+    //正式
+    // const captcha = '2019232819';
+    //测试
+    const captcha = '2072736870';
 
     return captcha
 }

+ 252 - 0
src/view/captcha/captcha-lg.vue

@@ -0,0 +1,252 @@
+<template>
+    <div>
+        <!--        <img-->
+        <!--                src="https://happyjob.oss-cn-shanghai.aliyuncs.com/uploadfiles/mina/images/happyjob/login_xiaobai.png"-->
+        <!--                alt=""-->
+        <!--                class="image">-->
+        <!--        <div class="title">-->
+        <!--            <div class="tips">-->
+        <!--                请输入验证码-->
+        <!--            </div>-->
+        <!--            <div class="number">-->
+        <!--                验证码已发送至 {{number}}-->
+        <!--            </div>-->
+        <!--        </div>-->
+        <!--        <div class="captcha">-->
+        <!--            <div class="input">-->
+        <!--                <input-->
+        <!--                        v-for="(val,ind) in captcha"-->
+        <!--                        :key="ind"-->
+        <!--                        maxlength="1"-->
+        <!--                        type="text"-->
+        <!--                        :autofocus="!Boolean(ind)"-->
+        <!--                        placeholder=""-->
+        <!--                        :class="val&&'border'"-->
+        <!--                        v-model="captcha[ind]"-->
+        <!--                        @input="next(ind)"-->
+        <!--                >-->
+        <!--            </div>-->
+        <!--        </div>-->
+        <!--        <div class="time" @click="getCaptcha">-->
+        <!--            {{time_tips}}-->
+        <!--        </div>-->
+    </div>
+</template>
+
+<script>
+    import {getAuthCode} from '@/api/index'
+    import {getAction} from '@/api/manage'
+    import {getAppIdLG} from '@/utils/util'
+
+    export default {
+        name: "captchaLg",
+        data() {
+            return {
+                captcha: ['', '', '', '', '', ''],
+                number: '',
+                time_tips: '发送验证码',
+                time: 60,
+                TencentCaptcha: '',
+                isAndroid: false,
+                isiOS: false,
+                can_jump: false,
+            }
+        },
+        mounted() {
+            const container = document.querySelector("body")
+            container.style.background = 'transparent'
+            container.addEventListener('DOMSubtreeModified', function () {
+                const element = document.querySelector('#tcaptcha_transform')
+                const tcaptcha_iframe = document.querySelector('#tcaptcha_iframe')
+                const t_verify = document.querySelector('#t_verify')
+                const mask = document.querySelector('.t-mask')
+                if (tcaptcha_iframe) {
+                    tcaptcha_iframe.style.background = 'transparent'
+                }
+                if (mask) {
+                    mask.style.display = 'none'
+                }
+                if (t_verify) {
+                    t_verify.style.border = 'transparent'
+                    t_verify.style.background = 'transparent'
+                }
+                if (element) {
+                    if (t_verify) {
+                        t_verify.style.display = 'none'
+                    }
+                    element.style.border = 'transparent'
+                    element.style.background = 'transparent'
+                }
+
+            }, false);
+            this.isAndroid = /(Android)/i.test(navigator.userAgent)
+            this.isiOS = /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)
+
+            this.phone = location.href.split('?')[1].split('&')[0].split('=')[1];
+            this.number = this.phone.substring(0, 3) + ' ' + this.phone.substring(3, 7) + ' ' + this.phone.substring(7, 11);
+            if (window.TencentCaptcha) {
+                this.getTencentCaptcha();
+            } else {
+                const int = setInterval(() => {
+                    if (window.TencentCaptcha) {
+                        clearInterval(int);
+                        this.getTencentCaptcha();
+                    }
+                }, 50)
+            }
+        },
+        methods: {
+            getTencentCaptcha() {
+                const that = this;
+                this.TencentCaptcha = new window.TencentCaptcha(
+                    getAppIdLG(),
+                    function (res) {/* callback */
+                        if (res.ret === 0) {
+                            getAction(getAuthCode, {
+                                ticket: res.ticket,
+                                randstr: res.randstr,
+                                phone: that.phone
+                            }).then(() => {
+                                if (that.isiOS) {
+                                    window.webkit.messageHandlers.returnVerificationCode.postMessage(res.ret.toString());
+                                }
+                                if (that.isAndroid) {
+                                    window.hap.verificationCode(res.ret.toString());
+                                }
+
+                            }).catch(data => {
+                                that.$toast.fail({icon: 'close', message: data.errmsg})
+                                setTimeout(function () {
+                                    if (that.isiOS) {
+                                        window.webkit.messageHandlers.returnVerificationCode.postMessage('2');
+                                    }
+                                    if (that.isAndroid) {
+                                        window.hap.verificationCode('2');
+                                    }
+                                }, 1200)
+                            })
+                        } else {
+                            if (that.isiOS) {
+                                window.webkit.messageHandlers.returnVerificationCode.postMessage(res.ret.toString());
+                            }
+                            if (that.isAndroid) {
+                                window.hap.verificationCode(res.ret.toString());
+                            }
+                        }
+                    },
+                    {
+                        enableDarkMode: true,
+                        sdkOpts: {
+                            width: 0,
+                            height: 0
+                        }
+                    }
+                );
+                this.TencentCaptcha.show();
+            },
+            // next(index) {
+            //     const input = document.querySelectorAll('input');
+            //     if (this.captcha[index]) {
+            //         if (this.captcha.length === index + 1) {
+            //             if (this.can_jump) {
+            //                 if (this.isiOS) {
+            //                     window.webkit.messageHandlers.returnVerificationCode.postMessage('发送成功');
+            //                 }
+            //                 if (this.isAndroid) {
+            //                     // window.webkit.messageHandlers.returnVerificationCode.postMessage(this.captcha.join(''));
+            //                 }
+            //             }
+            //         } else {
+            //             input[index + 1].focus();
+            //         }
+            //     } else {
+            //         if (index > 0) {
+            //             input[index - 1].focus();
+            //         }
+            //     }
+            // },
+            // getCaptcha() {
+            //     this.TencentCaptcha.show();
+            // },
+            // countDown() {
+            //     if (this.time === 60) {
+            //         this.time = --this.time;
+            //         this.time_tips = `${this.time}s 后重新获取验证码`
+            //         const setint = setInterval(() => {
+            //             if (this.time > 0) {
+            //                 this.time = --this.time;
+            //                 this.time_tips = `${this.time}s 后重新获取验证码`
+            //             } else {
+            //                 clearInterval(setint);
+            //                 this.time = 60;
+            //                 this.time_tips = `重新获取验证码`
+            //             }
+            //         }, 1000)
+            //     } else {
+            //         this.$toast({message: '请勿重复点击'})
+            //     }
+            // }
+        }
+    }
+</script>
+
+<style lang="less" scoped>
+    .image {
+        height: 180px;
+        position: fixed;
+        right: 0;
+        top: 24px;
+    }
+
+    .title {
+        padding: 0 45px;
+    }
+
+    .tips {
+        margin-top: 113px;
+        font-size: 27px;
+        color: #000000;
+        font-family: PingFangSC-Semibold, PingFang SC;
+    }
+
+    .number {
+        font-size: 14px;
+        font-family: PingFangSC-Regular, PingFang SC;
+        margin-top: 17px;
+    }
+
+    .captcha {
+        margin-top: 38px;
+    }
+
+    .input {
+        padding: 0 45px;
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+    }
+
+    input {
+        border: none;
+        font-size: 32px;
+        text-align: center;
+        padding-bottom: 10px;
+        width: 10%;
+        border-bottom: 1px solid #eee;
+    }
+
+    .border {
+        border-bottom: 1px solid #ccc;
+    }
+
+    .time {
+        font-size: 14px;
+        text-align: right;
+        padding: 0 45px;
+        margin-top: 15px;
+    }
+
+    /deep/ #t_mask {
+        background: transparent !important;
+    }
+</style>