#
zhou zhou
2025-11-25 dfb5b38e438628767aeefa7b1d22ee7360072eea
pages/login/login.vue
@@ -1,436 +1,470 @@
  <template>
   <view class="zai-box">
        <scroll-view scroll-y class="page">
            <view class="text-center" :style="[{animation: 'show ' + 0.4+ 's 1'}]">
            <image src="../../static/logo.png" mode='aspectFit' class="zai-logo" @longtap='longpressImg'></image>
         </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-login"><text class="cuIcon-people margin-right-xs"></text>账号:</view>
                  <input placeholder="请输入账号" name="input" v-model="userName"></input>
               </view>
               <view class="cu-form-group margin-top shadow-warp" :class="[shape=='round'?'round':'']">
                  <view class="title-login"><text class="cuIcon-lock margin-right-xs"></text>密码:</view>
                  <input class="uni-input" placeholder="请输入密码" :password="!showPassword" v-model="password" />
                  <view class="action text-lg">
                      <text :class="[showPassword ? 'cuIcon-attention' : 'cuIcon-attentionforbid']" @click="changePassword"></text>
                  </view>
               </view>
               <view class="flex margin-xs justify-between">
                  <checkbox-group class="rember">
                     <label>
                        <checkbox value="cb" :checked="rember"  @tap="rember = !rember" style="transform:scale(0.7)" /><text>记住密码</text>
                     </label>
                  </checkbox-group>
                  <!-- <text class="changeIP" @click="changeIP()">设置IP</text> -->
                  <text class="changeIP" @click="config()">配置</text>
               </view>
               <view class="flex padding justify-center margin-top">
                  <button class="cu-btn bg-blue lg  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" style="position: fixed;width: 80%;bottom: 0;text-align: center;">
               当前版本:{{version}}
            </view>
            <!-- #endif -->
            </view>
        </scroll-view>
      <view>
         <uni-popup ref="popup" type="right">
            <view class="config">
               <view class="config-title"><text >配置</text></view>
               <view class="config-item">
                  <text>ip地址:</text>
                  <input v-model="IP" type="text" placeholder="192.168.1.1" placeholder-style="font-size:16rpx;text-indent: 10rpx;">
               </view>
               <view class="config-item">
                  <text>端口号:</text>
                  <input v-model="PORT" type="text" placeholder="8080" placeholder-style="font-size:16rpx;text-indent: 10rpx;">
               </view>
               <view class="config-item">
                  <text>项目:</text>
                  <input v-model="PROJECT" type="text" placeholder="wms" placeholder-style="font-size:16rpx;text-indent: 10rpx;">
               </view>
               <view class="flex justify-around">
                  <button class="cu-btn bg-blue lg" @click="configConfirm">确认</button>
               </view>
            </view>
         </uni-popup>
      </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>
      </view>
      <view>
         <uni-popup ref="inputDialog" type="dialog">
            <uni-popup-dialog ref="inputClose" mode="input" title="设置IP" v-model="IP"
               placeholder="请输入服务器IP" @confirm="dialogInputConfirm">
            </uni-popup-dialog>
         </uni-popup>
      </view>
      <view style="margin-top: 10rpx;">
         <uni-popup ref="serverPort" type="dialog">
            <uni-popup-dialog ref="inputClose" mode="input" title="设置端口" v-model="PORT"
               placeholder="请输入服务器端口号" @confirm="serverPortConfirm">
            </uni-popup-dialog>
         </uni-popup>
      </view>
    </view>
     <view class="zai-box">
</template>
        <scroll-view scroll-y class="page">
<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'
            },
            type:'',
            userName:'',
            password:'',
            rember:true,
            IP:'10.20.192.200',
            PORT:'',// 默认端口号
            PROJECT:''
            };
        },
      mounted() {
         let that = this;
         //缓存的账号
         const HCuname = uni.getStorageSync('HCuname');
         //缓存的密码
         const HCpassw = uni.getStorageSync('HCpassw');
         //有缓存就赋值给文本没有就清空
         if (HCuname && HCpassw) {
             that.userName = HCuname;
             that.password = HCpassw;
         } else {
             that.userName = '';
             that.password = '';
         }
         const UIP = uni.getStorageSync('UIP');
         if (UIP) {
             that.IP = UIP;
            that.baseIP = UIP;
         } else {
             that.IP = '';
         }
         const UPORT = uni.getStorageSync('UPORT');
         if (UPORT) {
             that.PORT = UPORT;
            that.basePORT = UPORT;
         } else {
             that.PORT = '';
         }
         const PROJ = uni.getStorageSync('UPROJ');
         this.PROJECT = PROJ;
         this.baseUrl = PROJ
      },
      onLoad:function(){
         // #ifdef APP-PLUS
         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.userName.length > 4 && this.smsCode.length > 4;
            },
            canPwdLogin() {
              return this.userName.length > 4 && this.password.length > 4;
            },
      },
        methods: {
         // 配置 URL PORT 项目(jkwms)
         config() {
            this.$refs.popup.open("center")
         },
         // 确认配置
         configConfirm() {
            this.baseIP = this.IP
            uni.setStorageSync('UIP',this.baseIP)
            this.basePORT = this.PORT
            uni.setStorageSync('UPORT',this.basePORT)
            this.baseUrl = this.PROJECT
            uni.setStorageSync('UPROJ',this.baseUrl)
            this.$refs.popup.close()
         },
         longpressImg() { // 长按图片
            this.$refs.serverPort.open()
         },
         serverPortConfirm(type) {
            this.basePORT = type
            // 存入本地缓存
            this.PORT = type
            uni.setStorageSync('UPORT',this.basePORT)
         },
         changeIP(){
            this.$refs.inputDialog.open()
         },
         dialogInputConfirm(type){
            this.baseIP = type
            // 存入本地缓存
            this.IP = type;
            uni.setStorageSync('UIP',this.baseIP)
         },
         checkboxChange: function(e) {
             if (e.detail.value.length == 1) {
                 //获取缓存的账号
                  uni.getStorageSync('HCuname',this.userName);
                  uni.getStorageSync('HCpassw',this.password);
             } else {
                   uni.removeStorageSync('HCuname');
                   uni.removeStorageSync('HCpassw');
             }
         },
         onLogin: function (){
            if(!this.userName || this.userName.length==0){
               uni.showToast({title: '请填写账号',icon: "none"})
               return;
            }
            if(!this.password || this.password.length==0){
               uni.showToast({title: '请填写密码',icon: "none"})
               return;
            }
            if(this.baseIP == undefined || this.baseIP == '' ) {
               uni.showToast({
                  title:'请先设置IP',
                  icon:'none'
               })
               return;
            }
            if(this.basePORT == undefined) {
               uni.showToast({
                  title:'长按图片输入端口号',
                  icon:'none'
               })
               return;
            }
            uni.showLoading();
            setTimeout(function(){
               uni.hideLoading();
               uni.showToast({
                  title: '登录超时',
                  position: 'bottom',
                  duration: 1000
               });
            },6000)
            uni.request({
                url: this.baseHttp + this.baseIP + ':' +this.basePORT +"/" +this.baseUrl + '/login.action',
                data: {
                  username:this.userName,
                  password:md5.hex_md5(this.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
                     });
                     if(this.rember){
                        uni.setStorageSync('HCuname', this.userName);
                        uni.setStorageSync('HCpassw', this.password);
                     }else{
                        uni.removeStorageSync('HCuname');
                        uni.removeStorageSync('HCpassw');
                     }
                     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=>{
               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);
          }
      },
    }
</script>
           <view class="text-center" :style="[{animation: 'show ' + 0.4+ 's 1'}]">
              <image src="../../static/zy_logo.png" mode='aspectFit' class="zai-logo" @longtap='longpressImg'>
              </image>
           </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-login"><text class="cuIcon-people margin-right-xs"></text>账号:</view>
                    <input placeholder="请输入账号" name="input" v-model="userName"></input>
                 </view>
                 <view class="cu-form-group margin-top shadow-warp" :class="[shape=='round'?'round':'']">
                    <view class="title-login"><text class="cuIcon-lock margin-right-xs"></text>密码:</view>
                    <input class="uni-input" placeholder="请输入密码" :password="!showPassword" v-model="password" />
                    <view class="action text-lg">
                       <text :class="[showPassword ? 'cuIcon-attention' : 'cuIcon-attentionforbid']"
                          @click="changePassword"></text>
                    </view>
                 </view>
                 <view class="flex margin-xs justify-between">
                    <checkbox-group class="rember">
                       <label>
                          <checkbox value="cb" :checked="rember" @tap="rember = !rember"
                             style="transform:scale(0.7)" /><text>记住密码</text>
                       </label>
                    </checkbox-group>
                    <!-- <text class="changeIP" @click="changeIP()">设置IP</text> -->
                    <text class="changeIP" @click="config()">配置</text>
                 </view>
                 <view class="flex padding justify-center margin-top">
                    <button class="cu-btn bg-blue lg  shadow" :loading="loading"
                       :class="[shape=='round'?'round':'']" @tap="onLogin"><text
                          space="emsp">{{loading ? "登录中...":" 登录 "}}</text>
                    </button>
                 </view>
              </block>
<style>
   @import "../../colorui/main.css";
   @import "../../colorui/icon.css";
   @import "../../colorui/animation.css";
   .config {
      width: 500rpx;
      height: 500rpx;
      background-color: #fff;
   }
   .config-title {
      height: 100rpx;
      font-size: 32rpx;
      text-align: center;
      line-height: 100rpx;
   }
   .config-item {
      height: 100rpx;
   }
   .config-item text {
      display: inline-block;
      float: left;
      text-indent: 1em;
   }
   .config-item input {
      display: inline-block;
      float: right;
      margin-right: 50rpx;
      width: 300rpx;
      height: 50rpx;
      border: 1px solid #aaaaaa;
      border-radius: 10rpx;
      font-size: 16rpx;
      text-indent: 10rpx;
   }
    .login-paddingtop {
        padding-top: 50upx;
    }
              <!-- #ifdef APP-PLUS -->
              <view class="padding flex flex-direction  text-center"
                 style="position: fixed;width: 80%;bottom: 0;text-align: center;">
                 当前版本:{{version}}
              </view>
              <!-- #endif -->
    .zai-box {
        padding: 0 20upx;
        padding-top: 100upx;
        position: relative;
    }
           </view>
        </scroll-view>
    .zai-logo {
        width: 600upx;
        height: 150px;
    }
        <view>
           <uni-popup ref="popup" type="right">
              <view class="config">
                 <view class="config-title"><text>配置</text></view>
                 <view class="config-item">
                    <text>ip地址:</text>
                    <input v-model="IP" type="text" placeholder="192.168.1.1"
                       placeholder-style="font-size:16rpx;text-indent: 10rpx;">
                 </view>
                 <view class="config-item">
                    <text>端口号:</text>
                    <input v-model="PORT" type="text" placeholder="8080"
                       placeholder-style="font-size:16rpx;text-indent: 10rpx;">
                 </view>
                 <view class="config-item">
                    <text>项目:</text>
                    <input v-model="PROJECT" type="text" placeholder="wms"
                       placeholder-style="font-size:16rpx;text-indent: 10rpx;">
                 </view>
                 <view class="flex justify-around">
                    <button class="cu-btn bg-blue lg" @click="configConfirm">确认</button>
                 </view>
              </view>
           </uni-popup>
        </view>
    .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;
    }
        <!-- 登录加载弹窗 -->
        <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>
        </view>
        <view>
           <uni-popup ref="inputDialog" type="dialog">
              <uni-popup-dialog ref="inputClose" mode="input" title="设置IP" v-model="IP" placeholder="请输入服务器IP"
                 @confirm="dialogInputConfirm">
              </uni-popup-dialog>
           </uni-popup>
        </view>
        <view style="margin-top: 10rpx;">
           <uni-popup ref="serverPort" type="dialog">
              <uni-popup-dialog ref="inputClose" mode="input" title="设置端口" v-model="PORT" placeholder="请输入服务器端口号"
                 @confirm="serverPortConfirm">
              </uni-popup-dialog>
           </uni-popup>
        </view>
     </view>
    .zai-btn:after {
        border: 0;
    }
  </template>
    /*按钮点击效果*/
    .zai-btn.button-hover {
        transform: translate(1upx, 1upx);
    }
   .changeBox {
      margin-top: 20upx;
   }
   .rember {
      display: inline-block;
   }
   .changeIP {
      float: right;
      margin-right: 15upx;
   }
</style>
  <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'
              },
              type: '',
              userName: '',
              password: '',
              rember: true,
              IP: '10.20.192.200',
              PORT: '', // 默认端口号
              PROJECT: ''
           };
        },
        mounted() {
           let that = this;
           //缓存的账号
           const HCuname = uni.getStorageSync('HCuname');
           //缓存的密码
           const HCpassw = uni.getStorageSync('HCpassw');
           //有缓存就赋值给文本没有就清空
           if (HCuname && HCpassw) {
              that.userName = HCuname;
              that.password = HCpassw;
           } else {
              that.userName = '';
              that.password = '';
           }
           const UIP = uni.getStorageSync('UIP');
           if (UIP) {
              that.IP = UIP;
              that.baseIP = UIP;
           } else {
              that.IP = '';
           }
           const UPORT = uni.getStorageSync('UPORT');
           if (UPORT) {
              that.PORT = UPORT;
              that.basePORT = UPORT;
           } else {
              that.PORT = '';
           }
           const PROJ = uni.getStorageSync('UPROJ');
           this.PROJECT = PROJ;
           this.baseUrl = PROJ
        },
        onLoad: function() {
           // #ifdef APP-PLUS
           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.userName.length > 4 && this.smsCode.length > 4;
           },
           canPwdLogin() {
              return this.userName.length > 4 && this.password.length > 4;
           },
        },
        methods: {
           // 配置 URL PORT 项目(jkwms)
           config() {
              this.$refs.popup.open("center")
           },
           // 确认配置
           configConfirm() {
              this.baseIP = this.IP
              uni.setStorageSync('UIP', this.baseIP)
              this.basePORT = this.PORT
              uni.setStorageSync('UPORT', this.basePORT)
              this.baseUrl = this.PROJECT
              uni.setStorageSync('UPROJ', this.baseUrl)
              this.$refs.popup.close()
           },
           longpressImg() { // 长按图片
              this.$refs.serverPort.open()
           },
           serverPortConfirm(type) {
              this.basePORT = type
              // 存入本地缓存
              this.PORT = type
              uni.setStorageSync('UPORT', this.basePORT)
           },
           changeIP() {
              this.$refs.inputDialog.open()
           },
           dialogInputConfirm(type) {
              this.baseIP = type
              // 存入本地缓存
              this.IP = type;
              uni.setStorageSync('UIP', this.baseIP)
           },
           checkboxChange: function(e) {
              if (e.detail.value.length == 1) {
                 //获取缓存的账号
                 uni.getStorageSync('HCuname', this.userName);
                 uni.getStorageSync('HCpassw', this.password);
              } else {
                 uni.removeStorageSync('HCuname');
                 uni.removeStorageSync('HCpassw');
              }
           },
           onLogin: function() {
              if (!this.userName || this.userName.length == 0) {
                 uni.showToast({
                    title: '请填写账号',
                    icon: "none"
                 })
                 return;
              }
              if (!this.password || this.password.length == 0) {
                 uni.showToast({
                    title: '请填写密码',
                    icon: "none"
                 })
                 return;
              }
              if (this.baseIP == undefined || this.baseIP == '') {
                 uni.showToast({
                    title: '请先设置IP',
                    icon: 'none'
                 })
                 return;
              }
              if (this.basePORT == undefined) {
                 uni.showToast({
                    title: '长按图片输入端口号',
                    icon: 'none'
                 })
                 return;
              }
              uni.showLoading();
              setTimeout(function() {
                 uni.hideLoading();
                 // uni.showToast({
                 //    title: '登录超时',
                 //    position: 'bottom',
                 //    duration: 1000
                 // });
              }, 6000)
              uni.request({
                 url: this.baseHttp + this.baseIP + ':' + this.basePORT + "/" + this.baseUrl +
                    '/login.action',
                 data: {
                    username: this.userName,
                    password: md5.hex_md5(this.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
                       });
                       if (this.rember) {
                          uni.setStorageSync('HCuname', this.userName);
                          uni.setStorageSync('HCpassw', this.password);
                       } else {
                          uni.removeStorageSync('HCuname');
                          uni.removeStorageSync('HCpassw');
                       }
                       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 => {
                 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);
           }
        },
     }
  </script>
  <style>
     @import "../../colorui/main.css";
     @import "../../colorui/icon.css";
     @import "../../colorui/animation.css";
     .config {
        width: 500rpx;
        height: 500rpx;
        background-color: #fff;
     }
     .config-title {
        height: 100rpx;
        font-size: 32rpx;
        text-align: center;
        line-height: 100rpx;
     }
     .config-item {
        height: 100rpx;
     }
     .config-item text {
        display: inline-block;
        float: left;
        text-indent: 1em;
     }
     .config-item input {
        display: inline-block;
        float: right;
        margin-right: 50rpx;
        width: 300rpx;
        height: 50rpx;
        border: 1px solid #aaaaaa;
        border-radius: 10rpx;
        font-size: 16rpx;
        text-indent: 10rpx;
     }
     .login-paddingtop {
        padding-top: 50upx;
     }
     .zai-box {
        padding: 0 20upx;
        padding-top: 100upx;
        position: relative;
     }
     .zai-logo {
        width: 600upx;
        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);
     }
     .changeBox {
        margin-top: 20upx;
     }
     .rember {
        display: inline-block;
     }
     .changeIP {
        float: right;
        margin-right: 15upx;
     }
  </style>