#
whycq
2023-02-13 1bea37073f305929215bf2c3f28e2263acb6fc20
pages/login/login.vue
@@ -1,271 +1,288 @@
  <template>
   <view class="zai-box">
        <scroll-view scroll-y class="page">
         <view class="changIP">
            <button @click="changeIP()">设置IP</button>
         </view>
            <view class="text-center" :style="[{animation: 'show ' + 0.4+ 's 1'}]">
            <image src="../../static/logo.png" mode='aspectFit' class="zai-logo "></image>
            <view class="zai-title text-shadow ">Zoneyung</view>
         </view>
            <view class="box padding-lr-xl login-paddingtop" :style="[{animation: 'show ' + 0.6+ 's 1'}]">
            <block v-if="loginWay==1">
               <view class="cu-form-group margin-top  shadow-warp" :class="[shape=='round'?'round':'']">
                  <view class="title"><text class="cuIcon-people margin-right-xs"></text>账号:</view>
                  <input placeholder="请输入账号" name="input" v-model="info.userName"></input>
               </view>
               <view class="cu-form-group margin-top shadow-warp" :class="[shape=='round'?'round':'']">
                  <view class="title"><text class="cuIcon-lock margin-right-xs"></text>密码:</view>
                  <input class="uni-input" placeholder="请输入密码" :password="!showPassword" v-model="info.password" />
                  <view class="action text-lg">
                      <text :class="[showPassword ? 'cuIcon-attention' : 'cuIcon-attentionforbid']" @click="changePassword"></text>
                  </view>
               </view>
               <view>
                  <checkbox-group>
                     <label>
                        <checkbox value="cb" checked="true" style="transform:scale(0.7)" />记住密码
                     </label>
                  </checkbox-group>
               </view>
               <view class="padding text-center margin-top">
                  <button class="cu-btn bg-blue lg margin-right shadow" :loading="loading" :class="[shape=='round'?'round':'']"
                     @tap="onLogin"><text space="emsp">{{loading ? "登录中...":" 登录 "}}</text>
                  </button>
               </view>
            </block>
            <!-- #ifdef APP-PLUS -->
            <view class="padding flex flex-direction  text-center">
               当前版本:{{version}}
            </view>
            <!-- #endif -->
            </view>
        </scroll-view>
      <!-- 登录加载弹窗 -->
      <view class="cu-load load-modal" v-if="loading">
         <!-- <view class="cuIcon-emojifill text-orange"></view> -->
         <image src="../../static/logo1.png" mode="aspectFit" class="round"></image>
         <view class="gray-text">登录中...</view>
<template>
   <!-- 设置 -->
   <label class="settings">
      <uni-icons type="gear" size="30" color="#707070" @click="settings"></uni-icons>
   </label>
   <!-- logo -->
   <view class="head">
      <view class="logo">
         <image src="../../static/img/logo.png" mode="aspectFit"></image>
      </view>
      <view>
         <!-- 输入框示例 -->
         <uni-popup ref="inputDialog" type="dialog">
            <uni-popup-dialog ref="inputClose" mode="input" title="请输入IP" value="http://192.168.4.123:8082/xgmwms"
               placeholder="请输入IP" @confirm="dialogInputConfirm">
            </uni-popup-dialog>
         </uni-popup>
   </view>
   <view class="content">
      <!-- 账号 -->
      <view class="box shadow-warp">
         <view class="box-icon">
            <uni-icons type="person" size="20" color="#707070"></uni-icons>
         </view>
         <view class="box-text">账号:</view>
         <view class="box-input">
            <input type="text">
         </view>
         <view class="box-show"></view>
      </view>
    </view>
      <!-- 密码 -->
      <view class="box shadow-warp">
         <view class="box-icon">
            <uni-icons type="locked" size="20" color="#707070"></uni-icons>
         </view>
         <view class="box-text">密码:</view>
         <view class="box-input">
            <input type="text">
         </view>
         <view class="box-show">
            <uni-icons type="eye-filled" size="20" color="#707070"></uni-icons>
         </view>
      </view>
      <!-- 记住密码 -->
      <view class="check">
         <view class="check-left">
            <view>记住密码</view>
         </view>
         <view class="check-right">
            <switch checked color="#FFCC33" style="zoom:.5"/>
         </view>
      </view>
   </view>
   <!-- 登录按钮 -->
   <view class="submit">
      <view class="" style="width: 400rpx;">
         <button type="primary" size="default">登录</button>
      </view>
   </view>
   <!-- 设置弹窗区域 -->
   <view>
      <uni-popup ref="inputDialog" type="dialog">
         <view class="popup">
            <!-- 标题 -->
            <view class="title title-font">配置</view>
            <view class="input">
               <view class="input-left">ip:</view>
               <view class="input-right"><input type="text"></view>
            </view>
            <view class="input">
               <view class="input-left">端口:</view>
               <view class="input-right"><input type="text"></view>
            </view>
            <view class="input">
               <view class="input-left">项目:</view>
               <view class="input-right"><input type="text"></view>
            </view>
            <view class="btn">
               <view class="btn-left" @click="close">取消</view>
               <view class="btn-right">确认</view>
            </view>
         </view>
      </uni-popup>
   </view>
   <!-- 版本号 -->
   <!-- #ifdef APP-PLUS -->
   <view class="version">
      当前版本:{{version}}
   </view>
   <!-- #endif -->
</template>
<script>
   // import { ACCESS_TOKEN,USER_NAME,USER_INFO } from "@/common/util/constants"
   import { mapActions } from "vuex"
   import md5 from '../../common/md5.js'
    // import configService from '@/common/service/config.service.js';
    export default {
        data() {
            return {
            shape:'',//round 圆形
            loading: false,
            phoneNo: '',
            smsCode: '',
            showPassword: false, //是否显示明文
            loginWay: 1, //1: 账密,2:验证码
            smsCountDown: 0,
            smsCountInterval: null,
            toggleDelay: false,
            version:'',
            //第三方登录相关信息
            thirdType:"",
            thirdLoginInfo:"",
            thirdLoginState:false,
            bindingPhoneModal:false,
            thirdUserUuid:'',
            url: {
               bindingThirdPhone: '/sys/thirdLogin/bindingThirdPhone'
            },
            baseIP:'',
            type:'',
            info:{
               userName:'',
               password:''
            },
            rember:true,
            };
        },
      onLoad:function(){
   export default {
      data() {
         return {
            version: '',
            value: ''
         }
      },
      onLoad() {
         // 手机端版本号
         // #ifdef APP-PLUS
         var that=this
         plus.runtime.getProperty( plus.runtime.appid, function ( wgtinfo ) {
            that.version=wgtinfo.version
         var that = this
         plus.runtime.getProperty(plus.runtime.appid, function(wgtinfo) {
            that.version = wgtinfo.version
         });
         // #endif
      },
      computed: {
            isSendSMSEnable() {
              return this.smsCountDown <= 0 && this.phoneNo.length > 4;
            },
            getSendBtnText() {
              if (this.smsCountDown > 0) {
                return this.smsCountDown + '秒后发送';
              } else {
                return '发送验证码';
              }
            },
            canSMSLogin() {
              return this.info.userName.length > 4 && this.smsCode.length > 4;
            },
            canPwdLogin() {
              return this.info.userName.length > 4 && this.info.password.length > 4;
            },
      },
        methods: {
         changeIP(){
      methods: {
         // 设置窗口开启按钮
         settings() {
            this.$refs.inputDialog.open()
         },
         dialogInputConfirm(type){
            this.baseUrl=type
         // 设置窗口确认修改按钮
         dialogInputConfirm() {
            this.$refs.inputDialog.close()
         },
         chk(e){
            console.log(e)
         },
         onLogin: function (){
            if(!this.info.userName || this.info.userName.length==0){
               uni.showToast({title: '请填写账号',icon: "none"})
               return;
            }
            if(!this.info.password || this.info.password.length==0){
               uni.showToast({title: '请填写密码',icon: "none"})
               return;
            }
            uni.showLoading();
            uni.request({
                url: this.baseUrl + '/login.action',
                data: {
                  mobile:this.info.userName,
                  password:md5.hex_md5(this.info.password)
                },
                header: {
                  "content-type": "application/json"
                },
                success: (result) => {
                  let res = result.data;
                  uni.hideLoading();
                  if (res.code == 200) {
                     uni.showToast({
                        title: '登录成功',
                        position: 'bottom',
                        duration: 1000
                     });
                     uni.setStorageSync('token', res.data.token);
                     setTimeout(() => {
                        uni.navigateBack();      //   小程序用这个  把首页路由放第一个
                        uni.reLaunch({
                           url: '../index/index'
                        });
                     }, 1000);
                  } else {
                     uni.showToast({
                        title: res.msg,
                        icon: "none",
                        position: 'top'
                     })
                  }
                }
            });
         },
         saveClientId(){
            var info = plus.push.getClientInfo();
            var cid = info.clientid;
            this.$http.get("/sys/user/saveClientId",{params:{clientId:cid}}).then(res=>{
               console.log("res::saveClientId>",res)
               this.$tip.success('登录成功!')
               this.$Router.replaceAll({name:'index'})
            })
         },
         changePassword() {
            this.showPassword = !this.showPassword;
         },
         loginSuccess() {
           // 登陆成功,重定向到主页
           this.$Router.replace({name:'index'})
         },
         requestFailed(err) {
           this.$message.warning("登录失败")
         },
        },
      beforeDestroy() {
          if (this.smsCountInterval) {
              clearInterval(this.smsCountInterval);
          }
      },
    }
         // 设置窗口关闭按钮
         close() {
            this.$refs.inputDialog.close()
         }
      }
   }
</script>
<style>
   @import "../../colorui/main.css";
   /* @import "../../colorui/icon.css";
   @import "../../colorui/animation.css"; */
    .login-paddingtop {
        padding-top: 50upx;
    }
    .zai-box {
        /* padding: 0 20upx;
        padding-top: 100upx;
        position: relative; */
    }
    .zai-logo {
        width: 200upx;
        height: 150px;
    }
    .zai-title {
       font-size: 58upx;
       color: #000000;
       text-align: center;
    }
    .input-placeholder, .zai-input {
        color: #94afce;
    }
    .zai-label {
        padding: 60upx 0;
        text-align: center;
        font-size: 30upx;
        color: #a7b6d0;
    }
    .zai-btn {
        background: #ff65a3;
        color: #fff;
        border: 0;
        border-radius: 100upx;
        font-size: 36upx;
    }
    .zai-btn:after {
        border: 0;
    }
    /*按钮点击效果*/
    .zai-btn.button-hover {
        transform: translate(1upx, 1upx);
    }
   .changIP {
      margin-top: 0rpx;
<style lang="less">
   .title-font {
      color: #606266;
      font-size: 18px;
      letter-spacing: 3px;
      font-weight: 500;
   }
   // 设置区域
   .settings {
      width: 100rpx;
      height: 100rpx;
      line-height: 100rpx;
      text-align: center;
      position: fixed;
      // background-color: #007aff;
      right: 0;
      top: 70rpx;
   }
   // 设置区域 - 手机
   <!-- #ifdef APP-PLUS -->
   .settings {
      width: 100rpx;
      height: 100rpx;
      line-height: 100rpx;
      text-align: center;
      position: fixed;
      right: 0rpx;
      top: 0rpx;
   }
   <!-- #endif -->
   .head {
      height: 400rpx;
      width: 100%;
      display: grid;
      grid-template-columns: 1fr;
      // background-color: aqua;
      justify-items: center;
      align-items: center;
      .logo {
         image {
            height: 300rpx;
         }
      }
   }
   // 输入框区域
   .content {
      min-height: 250rpx;
      width: 100%;
      // background-color: bisque;
      display: grid;
      grid-template-columns: 1fr;
      justify-items: center;
      align-items: flex-start;
      // 输入大区
      .box {
         width: 80%;
         height: 80rpx;
         background-color: #FFFFFF;
         display: grid;
         grid-template-columns: 1fr 1fr 5fr 1fr;
         align-items: center;
         font-size: 12px;
         // 图标
         &-icon {
            display: grid;
            justify-items: center;
         }
         // 输入框
         &-input {
            background-color: aquamarine;
         }
         // 隐藏显示密码
         &-show {
            display: grid;
            justify-items: center;
         }
      }
      // 记住密码
      .check {
         width: 80%;
         // background-color: blueviolet;
         display: grid;
         grid-template-columns: 1fr 1fr;
         align-items: center;
         text-align: left;
         &-left {
            display: grid;
            align-items: center;
            font-size: 12px;
            text-indent: 10rpx;
         }
         &-right {
            display: grid;
            align-items: center;
            justify-items: flex-end;
         }
      }
   }
   // 登录按钮
   .submit {
      position: fixed;
      width: 100%;
      bottom: 200rpx;
      display: grid;
      grid-template-columns: 1fr;
      justify-items: center;
   }
   // 弹出层
   .popup {
      width: 650rpx;
      min-height: 400rpx;
      background-color: #FFF;
      border-radius: 25rpx;
      .title {
         width: 100%;
         height: 80rpx;
         line-height: 80rpx;
         text-align: center;
      }
      .input {
         width: 100%;
         height: 80rpx;
         line-height: 80rpx;
         display: grid;
         grid-template-columns: 1fr 3fr;
         align-items: center;
         &-left {
            text-align: right;
         }
         &-right {
            display: grid;
            align-items: center;
            height: 50rpx;
            padding: 5rpx;
            margin-left: 20rpx;
            width: 400rpx;
            border-bottom: 1px solid #e7e6e4;
         }
      }
      .btn {
         margin-top: 20rpx;
         width: 100%;
         height: 80rpx;
         line-height: 80rpx;
         text-align: center;
         display: grid;
         grid-template-columns: 1fr 1fr;
         border-top: 1px solid #e7e6e4;
         &-left {
            border-right: 1px solid #e7e6e4;
         }
         &-right {
            color: #007aff;
         }
      }
   }
   .version {
      position: fixed;
      width: 100%;
      bottom: 0;
      text-align: center;
   }
</style>