| <template> | 
|     <view class="template-login"> | 
|         <!-- 顶部自定义导航 --> | 
|         <!-- <tn-nav-bar fixed alpha customBack> | 
|       <view slot="back" class='tn-custom-nav-bar__back' | 
|         @click="goBack"> | 
|         <text class='icon tn-icon-left'></text> | 
|         <text class='icon tn-icon-home-capsule-fill'></text> | 
|       </view> | 
|     </tn-nav-bar> --> | 
|   | 
|         <view class="login"> | 
|             <!-- 顶部背景图片--> | 
|             <view class="login__bg login__bg--top"> | 
|                 <image class="bg" src="/static/login_top2.jpg" mode="widthFix"></image> | 
|             </view> | 
|             <view class="login__bg login__bg--top"> | 
|                 <image class="rocket rocket-sussuspension" src="/static/login_top3.png" mode="widthFix"></image> | 
|             </view> | 
|   | 
|             <view class="login__wrapper"> | 
|   | 
|                 <!-- 输入框内容--> | 
|                 <view class="login__info tn-flex tn-flex-direction-column tn-flex-col-center tn-flex-row-center"> | 
|                     <!-- 登录 --> | 
|                     <block v-if="currentModeIndex === 0"> | 
|                         <view | 
|                             class="login__info__item__input tn-flex tn-flex-direction-row tn-flex-nowrap tn-flex-col-center tn-flex-row-left"> | 
|                             <view class="login__info__item__input__left-icon"> | 
|                                 <view class="tn-icon-my"></view> | 
|                             </view> | 
|                             <view class="login__info__item__input__content"> | 
|                                 <input maxlength="45" placeholder-class="input-placeholder" v-model="user" | 
|                                     placeholder="请输入登录用户名称" /> | 
|                             </view> | 
|                         </view> | 
|   | 
|                         <view | 
|                             class="login__info__item__input tn-flex tn-flex-direction-row tn-flex-nowrap tn-flex-col-center tn-flex-row-left"> | 
|                             <view class="login__info__item__input__left-icon"> | 
|                                 <view class="tn-icon-lock"></view> | 
|                             </view> | 
|                             <view class="login__info__item__input__content"> | 
|                                 <input :password="!showPassword" placeholder-class="input-placeholder" v-model="pass" | 
|                                     placeholder="请输入登录密码" /> | 
|                             </view> | 
|                             <view class="login__info__item__input__right-icon" @click="showPassword = !showPassword"> | 
|                                 <view :class="[showPassword ? 'tn-icon-eye' : 'tn-icon-eye-hide']"></view> | 
|                             </view> | 
|                         </view> | 
|                         <view | 
|                             class="login__info__item__input tn-flex tn-flex-direction-row tn-flex-nowrap tn-flex-col-center tn-flex-row-left"> | 
|                             <view class="login__info__item__input__left-icon"> | 
|                                 <view class="tn-icon-my"></view> | 
|                             </view> | 
|                             <view class="login__info__item__input__content"> | 
|                                 <input maxlength="45" placeholder-class="input-placeholder" v-model="code" | 
|                                     placeholder="请输入验证码" /> | 
|                             </view> | 
|                             <view class="login__info__item__input__right-icon u-border" style="width: 30%;" | 
|                                 @click="getVierificationCode"> | 
|                                 <img v-show="codeImgSrc != ''" :src="codeImgSrc" /> | 
|                             </view> | 
|                         </view> | 
|                     </block> | 
|                     <!-- 注册 --> | 
|                     <view class="login__info__item__input__content" style="margin-top: 20px;"> | 
|                         <uni-data-checkbox multiple v-model="checkbox" :localdata="hobby"></uni-data-checkbox> | 
|                     </view> | 
|                     <view class="login__info__item__button tn-cool-bg-color-7--reverse" | 
|                         @click="currentModeIndex === 0 ? login() : registra()" hover-class="tn-hover" | 
|                         :hover-stay-time="150">{{ currentModeIndex === 0 ? '登录' : '注册'}}</view> | 
|   | 
|                     <!-- <view v-if="currentModeIndex === 0" class="login__info__item__tips">忘记密码?</view> --> | 
|                 </view> | 
|             </view> | 
|   | 
|             <!-- <tn-tips ref="tips" position="top"></tn-tips> --> | 
|             <!-- 底部背景图片--> | 
|             <view class="login__bg login__bg--bottom"> | 
|                 <image src="/static/login_bottom_bg.jpg" mode="widthFix"></image> | 
|             </view> | 
|         </view> | 
|     </view> | 
| </template> | 
|   | 
| <script> | 
|     var app = getApp(); | 
|     export default { | 
|         name: 'login-demo-1', | 
|         // mixins: [template_page_mixin],* | 
|         data() { | 
|             return { | 
|                 // 当前选中的模式 | 
|                 currentModeIndex: 0, | 
|                 // 模式选中滑块 | 
|                 modeSliderStyle: { | 
|                     left: 0 | 
|                 }, | 
|                 // 是否显示密码 | 
|                 showPassword: false, | 
|                 // 倒计时提示文字 | 
|                 tips: '获取验证码', | 
|                 email: '', | 
|                 codeImgSrc: '', | 
|                 pass: '', | 
|                 code: '1234', | 
|                 user: '', | 
|                 isDetail: false, | 
|                 hobby: [{ | 
|                         text: '记住账号', | 
|                         value: 1 | 
|                     }, | 
|                     { | 
|                         text: '记住密码', | 
|                         value: 2 | 
|                     } | 
|                 ], | 
|                 checkbox: [] | 
|             } | 
|         }, | 
|         watch: { | 
|             currentModeIndex(value) { | 
|                 const sliderWidth = uni.upx2px(476 / 2) | 
|                 this.modeSliderStyle.left = `${sliderWidth * value}px` | 
|             } | 
|         }, | 
|         onLoad(options) { | 
|             this.getVierificationCode() | 
|             if (options.id) { | 
|                 this.isDetail = true | 
|             } | 
|         }, | 
|         mounted() { | 
|             var remAcc = uni.getStorageSync('remAcc'); | 
|             if (remAcc) { | 
|                 this.checkbox.push(1); | 
|             } | 
|   | 
|             var remPwd = uni.getStorageSync('remPwd'); | 
|             if (remPwd) { | 
|                 this.checkbox.push(2); | 
|             } | 
|              | 
|             var acc = uni.getStorageSync('acc'); | 
|             if (acc) { | 
|                 this.user = acc;; | 
|             } | 
|   | 
|             var pwd = uni.getStorageSync('pwd'); | 
|             if (pwd) { | 
|                 this.pass = pwd; | 
|             } | 
|              | 
|         }, | 
|         methods: { | 
|             ///获取验证码 | 
|             getVierificationCode() { | 
|                 this.$u.get('/api/User/getVierificationCode', {}).then(res => { | 
|                     if (res.img != null) { | 
|                         this.codeImgSrc = "data:image/png;base64," + res.img; | 
|                         this.email = res.uuid; | 
|                     } else { | 
|                         this.$refs.uToast.show({ | 
|                             title: '获取验证码失败请重新获取', | 
|                             type: 'error', | 
|                         }) | 
|                     } | 
|                 }) | 
|                 // uni.request({ | 
|                 //     url:"http://192.168.0.101:8098/api/User/getVierificationCode", | 
|                 //     success: (res) => { | 
|   | 
|                 //     } | 
|                 // }) | 
|             }, | 
|             login() { | 
|                 if (this.pass == '') { | 
|                     this.$t.message.toast('请输入密码') | 
|                     return; | 
|                 } else if (this.user == '') { | 
|                     this.$t.message.toast('请输入用户名') | 
|                     return; | 
|                 } else if (this.pass.length < 6) { | 
|                     this.$t.message.toast('密码应大于6位') | 
|                     return; | 
|                 } else { | 
|                     var userAcc = this.user; | 
|                     var userPwd = this.pass; | 
|                     var checkValues = this.checkbox; | 
|                     var remAcc = this.checkbox.find(x => x == 1); | 
|                      | 
|                     if (remAcc) { | 
|                         uni.setStorage({ | 
|                             key: "remAcc", | 
|                             data: "1", | 
|                         }) | 
|                     } else { | 
|                         if (uni.getStorageSync('remAcc')) { | 
|                             uni.removeStorageSync('remAcc'); | 
|                         } | 
|                     } | 
|                     var remPwd = this.checkbox.find(x => x == 2); | 
|                     if (remPwd) { | 
|                         uni.setStorage({ | 
|                             key: "remPwd", | 
|                             data: "2", | 
|                         }) | 
|                     } else { | 
|                         if (uni.getStorageSync('remPwd')) { | 
|                             uni.removeStorageSync('remPwd'); | 
|                         } | 
|                     } | 
|                     this.$t.message.loading('正在登录') | 
|                     let userInfo = this.userInfo; | 
|                     let userifno = { | 
|                         UUID: this.email, | 
|                         passWord: this.pass, | 
|                         userName: this.user, | 
|                         verificationCode: this.code | 
|                     } | 
|                     this.$u.post('/api/User/login', { | 
|                         UUID: this.email, | 
|                         passWord: this.pass, | 
|                         userName: this.user, | 
|                         verificationCode: this.code | 
|                     }).then(res => { | 
|                         // this.$u.toast(res.message); | 
|                         this.$t.message.toast(res.message) | 
|                         this.$t.message.closeLoading() | 
|                         uni.setStorage({ | 
|                             key: 'jo_id_token', | 
|                             data: res.data.token, | 
|                         }); | 
|                         uni.setStorage({ | 
|                             key: 'jo_user', | 
|                             data: res.data, | 
|                         }); | 
|                         uni.setStorage({ | 
|                             key: 'jo_userImg', | 
|                             data: res.data.img, | 
|                         }); | 
|                         var acc = checkValues.find(x => x == 1); | 
|                         if (acc) { | 
|                             uni.setStorage({ | 
|                                 key: 'acc', | 
|                                 data: userAcc, | 
|                             }); | 
|                         } else { | 
|                             if (uni.getStorage({ | 
|                                     key: 'acc' | 
|                                 })) { | 
|                                 uni.removeStorage({ | 
|                                     key: 'acc' | 
|                                 }); | 
|                             } | 
|                         } | 
|                         var pwd = checkValues.find(x => x == 2); | 
|                         if (pwd) { | 
|                             uni.setStorage({ | 
|                                 key: 'pwd', | 
|                                 data: userPwd, | 
|                             }); | 
|                         } else { | 
|                             if (uni.getStorage({ | 
|                                     key: 'pwd' | 
|                                 })) { | 
|                                 uni.removeStorage({ | 
|                                     key: 'pwd' | 
|                                 }); | 
|                             } | 
|                         } | 
|   | 
|   | 
|                         setTimeout(() => { | 
|                             this.$u.route({ | 
|                                 type: 'reLaunch', | 
|                                 url: 'pages/index/index' | 
|                             }) | 
|                             // this.$Router.replace({name:"tabbar"}) | 
|                         }, 200) | 
|                     }).catch(res=>{ | 
|                         this.getVierificationCode(); | 
|                     }); | 
|   | 
|                 } | 
|             }, | 
|             codeInput: function(e) { | 
|                 this.code = e.detail.value; | 
|             }, | 
|             passInput: function(e) { | 
|                 this.pass = e.detail.value; | 
|             }, | 
|             userInput: function(e) { | 
|                 this.user = e.detail.value; | 
|             }, | 
|         } | 
|     } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     // @import '@/static/css/templatePage/custom_nav_bar.scss'; | 
|     /* 悬浮 */ | 
|     .rocket-sussuspension { | 
|         animation: suspension 3s ease-in-out infinite; | 
|     } | 
|   | 
|     @keyframes suspension { | 
|   | 
|         0%, | 
|         100% { | 
|             transform: translate(0, 0); | 
|         } | 
|   | 
|         50% { | 
|             transform: translate(-0.8rem, 1rem); | 
|         } | 
|     } | 
|   | 
|     .login { | 
|         position: relative; | 
|         height: 100%; | 
|         z-index: 1; | 
|   | 
|         /* 背景图片 start */ | 
|         &__bg { | 
|             z-index: -1; | 
|             position: fixed; | 
|   | 
|             &--top { | 
|                 top: 0; | 
|                 left: 0; | 
|                 right: 0; | 
|                 width: 100%; | 
|   | 
|                 .bg { | 
|                     width: 750rpx; | 
|                     will-change: transform; | 
|                 } | 
|   | 
|                 .rocket { | 
|                     margin: 50rpx 28%; | 
|                     width: 400rpx; | 
|                     will-change: transform; | 
|                 } | 
|             } | 
|   | 
|             &--bottom { | 
|                 bottom: -10rpx; | 
|                 left: 0; | 
|                 right: 0; | 
|                 width: 100%; | 
|                 // height: 144px; | 
|                 margin-bottom: env(safe-area-inset-bottom); | 
|   | 
|                 image { | 
|                     width: 750rpx; | 
|                     will-change: transform; | 
|                 } | 
|             } | 
|         } | 
|   | 
|         /* 背景图片 end */ | 
|   | 
|         /* 内容 start */ | 
|         &__wrapper { | 
|             margin-top: 250rpx; | 
|             width: 100%; | 
|         } | 
|   | 
|         /* 切换 start */ | 
|         &__mode { | 
|             position: relative; | 
|             margin: 0 auto; | 
|             width: 476rpx; | 
|             height: 77rpx; | 
|             background-color: #FFFFFF; | 
|             box-shadow: 0rpx 10rpx 50rpx 0rpx rgba(0, 3, 72, 0.1); | 
|             border-radius: 39rpx; | 
|   | 
|             &__item { | 
|                 height: 77rpx; | 
|                 width: 100%; | 
|                 line-height: 77rpx; | 
|                 text-align: center; | 
|                 font-size: 31rpx; | 
|                 color: #908f8f; | 
|                 letter-spacing: 1em; | 
|                 text-indent: 1em; | 
|                 z-index: 2; | 
|                 transition: all 0.4s; | 
|   | 
|                 &--active { | 
|                     font-weight: bold; | 
|                     color: #FFFFFF; | 
|                 } | 
|             } | 
|   | 
|             &__slider { | 
|                 position: absolute; | 
|                 height: inherit; | 
|                 width: calc(476rpx); | 
|                 border-radius: inherit; | 
|                 box-shadow: 0rpx 18rpx 72rpx 18rpx rgba(0, 195, 255, 0.1); | 
|                 z-index: 1; | 
|                 transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); | 
|             } | 
|         } | 
|   | 
|         /* 切换 end */ | 
|   | 
|         /* 登录注册信息 start */ | 
|         &__info { | 
|             margin: 0 30rpx; | 
|             margin-top: 105rpx; | 
|             padding: 30rpx 51rpx; | 
|             padding-bottom: 0; | 
|             border-radius: 20rpx; | 
|             background-color: #ffff; | 
|             box-shadow: 0rpx 10rpx 50rpx 0rpx rgba(0, 3, 72, 0.1); | 
|   | 
|             &__item { | 
|   | 
|                 &__input { | 
|                     margin-top: 59rpx; | 
|                     width: 100%; | 
|                     height: 77rpx; | 
|                     border: 1rpx solid #E6E6E6; | 
|                     border-radius: 39rpx; | 
|   | 
|                     &__left-icon { | 
|                         width: 10%; | 
|                         font-size: 44rpx; | 
|                         margin-left: 20rpx; | 
|                         color: #AAAAAA; | 
|                     } | 
|   | 
|                     &__content { | 
|                         width: 80%; | 
|                         padding-left: 10rpx; | 
|   | 
|                         &--verify-code { | 
|                             width: 56%; | 
|                         } | 
|   | 
|                         input { | 
|                             font-size: 24rpx; | 
|                             // letter-spacing: 0.1em; | 
|                         } | 
|                     } | 
|   | 
|                     &__right-icon { | 
|                         width: 10%; | 
|                         font-size: 44rpx; | 
|                         margin-right: 20rpx; | 
|                         color: #AAAAAA; | 
|                     } | 
|   | 
|                     &__right-verify-code { | 
|                         width: 34%; | 
|                         margin-right: 20rpx; | 
|                     } | 
|                 } | 
|   | 
|                 &__button { | 
|                     margin-top: 75rpx; | 
|                     margin-bottom: 39rpx; | 
|                     width: 100%; | 
|                     height: 77rpx; | 
|                     text-align: center; | 
|                     font-size: 31rpx; | 
|                     font-weight: bold; | 
|                     line-height: 77rpx; | 
|                     letter-spacing: 1em; | 
|                     text-indent: 1em; | 
|                     border-radius: 39rpx; | 
|                     box-shadow: 1rpx 10rpx 24rpx 0rpx rgba(60, 129, 254, 0.35); | 
|                 } | 
|   | 
|                 &__tips { | 
|                     margin: 30rpx 0; | 
|                     color: #AAAAAA; | 
|                 } | 
|             } | 
|         } | 
|   | 
|         /* 登录注册信息 end */ | 
|   | 
|         /* 登录方式切换 start */ | 
|         &__way { | 
|             margin: 0 auto; | 
|             margin-top: 110rpx; | 
|   | 
|             &__item { | 
|                 &--icon { | 
|                     width: 77rpx; | 
|                     height: 77rpx; | 
|                     font-size: 50rpx; | 
|                     border-radius: 100rpx; | 
|                     margin-bottom: 18rpx; | 
|                     position: relative; | 
|                     z-index: 1; | 
|   | 
|                     &::after { | 
|                         content: " "; | 
|                         position: absolute; | 
|                         z-index: -1; | 
|                         width: 100%; | 
|                         height: 100%; | 
|                         left: 0; | 
|                         bottom: 0; | 
|                         border-radius: inherit; | 
|                         opacity: 1; | 
|                         transform: scale(1, 1); | 
|                         background-size: 100% 100%; | 
|                         background-image: url(https://tnuiimage.tnkjapp.com/cool_bg_image/icon_bg5.png); | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|   | 
|         /* 登录方式切换 end */ | 
|         /* 内容 end */ | 
|   | 
|     } | 
|   | 
|     /deep/.input-placeholder { | 
|         font-size: 24rpx; | 
|         color: #E6E6E6; | 
|     } | 
| </style> |