From f323fc354625965a73c5231423b93b6ab0152a58 Mon Sep 17 00:00:00 2001 From: toesbieya <1647775459@qq.com> Date: Sat, 23 May 2020 11:38:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E9=99=86=E5=8A=A0=E5=85=A5=E6=8B=BC?= =?UTF-8?q?=E5=9B=BE=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vue/src/assets/{403_images => images}/403.gif | Bin vue/src/assets/{404_images => images}/404.png | Bin .../{404_images => images}/404_cloud.png | Bin vue/src/assets/images/sprite.1.2.4.png | Bin 0 -> 15178 bytes vue/src/assets/styles/transition.scss | 220 +++++++- vue/src/components/PuzzleVerify/index.js | 20 + vue/src/components/PuzzleVerify/index.vue | 370 ------------- vue/src/components/PuzzleVerify/main.vue | 519 ++++++++++++++++++ vue/src/main.js | 2 + vue/src/router/modules/example.js | 6 - vue/src/views/app/403.vue | 2 +- vue/src/views/app/404.vue | 8 +- vue/src/views/app/login.vue | 8 +- vue/src/views/example/components/verify.vue | 20 - 14 files changed, 758 insertions(+), 417 deletions(-) rename vue/src/assets/{403_images => images}/403.gif (100%) rename vue/src/assets/{404_images => images}/404.png (100%) rename vue/src/assets/{404_images => images}/404_cloud.png (100%) create mode 100644 vue/src/assets/images/sprite.1.2.4.png create mode 100644 vue/src/components/PuzzleVerify/index.js delete mode 100644 vue/src/components/PuzzleVerify/index.vue create mode 100644 vue/src/components/PuzzleVerify/main.vue delete mode 100644 vue/src/views/example/components/verify.vue diff --git a/vue/src/assets/403_images/403.gif b/vue/src/assets/images/403.gif similarity index 100% rename from vue/src/assets/403_images/403.gif rename to vue/src/assets/images/403.gif diff --git a/vue/src/assets/404_images/404.png b/vue/src/assets/images/404.png similarity index 100% rename from vue/src/assets/404_images/404.png rename to vue/src/assets/images/404.png diff --git a/vue/src/assets/404_images/404_cloud.png b/vue/src/assets/images/404_cloud.png similarity index 100% rename from vue/src/assets/404_images/404_cloud.png rename to vue/src/assets/images/404_cloud.png diff --git a/vue/src/assets/images/sprite.1.2.4.png b/vue/src/assets/images/sprite.1.2.4.png new file mode 100644 index 0000000000000000000000000000000000000000..eca4e8dc5cc43445787259b3bf50e3e5a93b9e42 GIT binary patch literal 15178 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 MSyh>0X*1OS0vDEVp8x;= literal 0 HcmV?d00001 diff --git a/vue/src/assets/styles/transition.scss b/vue/src/assets/styles/transition.scss index 8280e50..fca3e72 100644 --- a/vue/src/assets/styles/transition.scss +++ b/vue/src/assets/styles/transition.scss @@ -1,3 +1,5 @@ +$transition-easing: cubic-bezier(0.215, 0.61, 0.355, 1); + .right-out, .left-out { &-leave-active, @@ -30,15 +32,46 @@ } } +.breadcrumb-enter-active, +.breadcrumb-leave-active, +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-leave-active { + position: absolute; +} + .slide-right, -.slide-left { - &-enter-active, +.slide-left, +.slide-up, +.slide-down, +.jump-right, +.jump-left, +.jump-up, +.jump-down, +.fade, +.scale, +.rotate, +.flip { &-leave-active { - transition: transform .3s cubic-bezier(0.215, 0.61, 0.355, 1) + position: absolute } +} +.slide-right, +.slide-left, +.slide-up, +.slide-down { + &-enter-active, &-leave-active { - position: absolute; + transition: transform .3s $transition-easing } } @@ -62,19 +95,178 @@ } } +.slide-up { + &-enter { + transform: translate3d(0, 100%, 0) + } -.breadcrumb-enter-active, -.breadcrumb-leave-active, -.breadcrumb-move { - transition: all .5s; + &-leave-to { + transform: translate3d(0, -100%, 0) + } } -.breadcrumb-enter, -.breadcrumb-leave-active { - opacity: 0; - transform: translateX(20px); +.slide-down { + &-enter { + transform: translate3d(0, -100%, 0) + } + + &-leave-to { + transform: translate3d(0, 100%, 0) + } } -.breadcrumb-leave-active { - position: absolute; +.jump-right, +.jump-left, +.jump-up, +.jump-down { + &-enter-active, + &-leave-active { + transition: opacity .3s, transform .3s + } + + &-enter, + &-leave-to { + opacity: 0 + } +} + +.jump-right { + &-enter { + transform: translate3d(-15px, 0, 0) + } + + &-leave-to { + transform: translate3d(15px, 0, 0) + } +} + +.jump-left { + &-enter { + transform: translate3d(15px, 0, 0) + } + + &-leave-to { + transform: translateX(-15px) + } +} + +.jump-up { + &-enter { + transform: translate3d(0, 15px, 0) + } + + &-leave-to { + transform: translate3d(0, -15px, 0) + } +} + +.jump-down { + &-enter { + transform: translate3d(0, -15px, 0) + } + + &-leave-to { + transform: translate3d(15px, 0, 0) + } +} + +.fade { + &-enter-active, + &-leave-active { + transition: opacity .3s ease-out + } + + &-enter, + &-leave, + &-leave-to { + opacity: 0 + } +} + +.scale { + &-enter-active, + &-leave-active { + transition: opacity .3s, transform .3s $transition-easing + } + + &-enter, + &-leave, + &-leave-to { + opacity: 0; + transform: scale3d(0, 0, 1) + } +} + +.rotate { + &-enter-active, + &-leave-active { + transition: opacity .3s, transform .3s $transition-easing; + transform-style: preserve-3d + } + + &-enter, + &-leave, + &-leave-to { + opacity: 0; + transform: scale3d(0, 0, 1) rotate3d(0, 0, 1, 90deg) + } +} + +.flip-right, +.flip-left, +.flip-up, +.flip-down { + &-enter-active, + &-leave-active { + transition: transform .3s; + backface-visibility: hidden + } + + &-enter-to, + &-leave { + transform: perspective(400px) rotate3d(1, 1, 0, 0deg) + + } +} + +.flip-right { + &-enter { + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + + } + + &-leave-to { + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + + } +} + +.flip-left { + &-enter { + transform: perspective(400px) rotate3d(0, 1, 0, 180deg) + } + + &-leave-to { + transform: perspective(400px) rotate3d(0, 1, 0, -180deg) + } +} + +.flip-up { + &-enter { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + } + + &-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + } +} + +.flip-down { + &-enter { + transform: perspective(400px) rotate3d(1, 0, 0, 180deg) + } + + &-leave-to { + transform: perspective(400px) rotate3d(1, 0, 0, -180deg) + } } diff --git a/vue/src/components/PuzzleVerify/index.js b/vue/src/components/PuzzleVerify/index.js new file mode 100644 index 0000000..bcec2e7 --- /dev/null +++ b/vue/src/components/PuzzleVerify/index.js @@ -0,0 +1,20 @@ +import Vue from 'vue' +import Main from './main.vue' +import {PopupManager} from 'element-ui/src/utils/popup' + +let Constructor = Vue.extend(Main) + +const PuzzleVerify = function ({left = 0, top = 0} = {}) { + const instance = new Constructor({data: {positionLeft: left}}) + instance.positionTop = top - Math.round((instance.height + 130) / 2) + instance.$mount() + document.body.appendChild(instance.$el) + instance.$el.style.zIndex = PopupManager.nextZIndex() + instance.visible = true + return new Promise((resolve, reject) => { + instance.resolve = resolve + instance.reject = reject + }) +} + +export default PuzzleVerify diff --git a/vue/src/components/PuzzleVerify/index.vue b/vue/src/components/PuzzleVerify/index.vue deleted file mode 100644 index 1738d88..0000000 --- a/vue/src/components/PuzzleVerify/index.vue +++ /dev/null @@ -1,370 +0,0 @@ - - - - - diff --git a/vue/src/components/PuzzleVerify/main.vue b/vue/src/components/PuzzleVerify/main.vue new file mode 100644 index 0000000..cc95f42 --- /dev/null +++ b/vue/src/components/PuzzleVerify/main.vue @@ -0,0 +1,519 @@ + + + + + diff --git a/vue/src/main.js b/vue/src/main.js index b59da2f..441d685 100644 --- a/vue/src/main.js +++ b/vue/src/main.js @@ -13,6 +13,7 @@ import BottomTip from '@/components/BottomTip' import Guide from '@/components/Guide' import ImageViewer from '@/components/ImageViewer' import Message from '@/components/Message' +import PuzzleVerify from '@/components/PuzzleVerify' Vue.use(Element) @@ -29,6 +30,7 @@ Vue.prototype.$bottomTip = BottomTip Vue.prototype.$guide = Guide Vue.prototype.$image = ImageViewer Vue.prototype.$message = Message +Vue.prototype.$puzzleVerify = PuzzleVerify Vue.config.productionTip = false diff --git a/vue/src/router/modules/example.js b/vue/src/router/modules/example.js index c835873..fac8317 100644 --- a/vue/src/router/modules/example.js +++ b/vue/src/router/modules/example.js @@ -59,12 +59,6 @@ const router = { component: () => import('@/views/example/components/picturePreview'), meta: {title: '图片预览'} }, - { - path: 'verify', - name: 'verify', - component: () => import('@/views/example/components/verify'), - meta: {title: '滑块验证'} - }, { path: 'skeleton', name: 'skeleton', diff --git a/vue/src/views/app/403.vue b/vue/src/views/app/403.vue index 7876ce0..2b928e1 100644 --- a/vue/src/views/app/403.vue +++ b/vue/src/views/app/403.vue @@ -2,7 +2,7 @@
- 403 + 403
Oops!
diff --git a/vue/src/views/app/404.vue b/vue/src/views/app/404.vue index 9780d42..b728522 100644 --- a/vue/src/views/app/404.vue +++ b/vue/src/views/app/404.vue @@ -2,10 +2,10 @@
- 404 - 404 - 404 - 404 + 404 + 404 + 404 + 404
Oops!
diff --git a/vue/src/views/app/login.vue b/vue/src/views/app/login.vue index 976cc6a..7f9047c 100644 --- a/vue/src/views/app/login.vue +++ b/vue/src/views/app/login.vue @@ -96,12 +96,16 @@ this.passwordType = this.passwordType === 'password' ? '' : 'password' this.$nextTick(() => this.$refs.password.focus()) }, - login() { + login({pageX, pageY}) { if (this.loading) return this.$refs.form.validate(valid => { if (!valid) return this.loading = true - this.$store.dispatch('user/login', {...this.form, password: md5(this.form.password)}) + this.$puzzleVerify({left: pageX, top: pageY}) + .then(() => this.$store.dispatch('user/login', { + ...this.form, + password: md5(this.form.password) + })) .then(() => this.success()) .catch(() => this.loading = false) }) diff --git a/vue/src/views/example/components/verify.vue b/vue/src/views/example/components/verify.vue deleted file mode 100644 index 1e3115e..0000000 --- a/vue/src/views/example/components/verify.vue +++ /dev/null @@ -1,20 +0,0 @@ - -