| New file | 
 |  |  | 
 |  |  | <template>
 | 
 |  |  |    <view>
 | 
 |  |  |       <!-- 设置 -->
 | 
 |  |  |       <view class="settings">
 | 
 |  |  |          <view class="settings-btn">
 | 
 |  |  |             <uni-icons type="gear" size="30" color="#707070" @click="settings"></uni-icons>
 | 
 |  |  |          </view>
 | 
 |  |  |       </view>
 | 
 |  |  |       <!-- logo -->
 | 
 |  |  |       <view class="logo">
 | 
 |  |  |          <view class="logo-box">
 | 
 |  |  |             <image src="../../static/img/logo.png" mode="aspectFit"></image>
 | 
 |  |  |          </view>
 | 
 |  |  |       </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" placeholder="请输入账号" v-model="user.userName"  | 
 |  |  |                placeholder-style="font-size:14px;color:#ccc;">
 | 
 |  |  |             </view>
 | 
 |  |  |             <view class="box-show"></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 :password="!showPassword" placeholder="请输入密码" v-model="user.password"
 | 
 |  |  |                placeholder-style="font-size:14px;color:#ccc;" >
 | 
 |  |  |             </view>
 | 
 |  |  |             <view class="box-show">
 | 
 |  |  |                <uni-icons type="eye-filled" size="20" color="#707070" v-if="!showPassword" @click="changePassword"></uni-icons>
 | 
 |  |  |                <uni-icons type="eye" size="20" color="#707070" v-if="showPassword" @click="changePassword"></uni-icons>
 | 
 |  |  |             </view>
 | 
 |  |  |          </view>
 | 
 |  |  |          <!-- 记住密码 -->
 | 
 |  |  |          <view class="check">
 | 
 |  |  |             <view class="check-left">
 | 
 |  |  |                <view>记住密码</view>
 | 
 |  |  |             </view>
 | 
 |  |  |             <view class="check-right">
 | 
 |  |  |                <switch :checked='remberPassword' color="#FFCC33" style="zoom:.5" @change="remberChange"/>
 | 
 |  |  |             </view>
 | 
 |  |  |          </view>
 | 
 |  |  |       </view>
 | 
 |  |  |       <!-- 登录按钮 -->
 | 
 |  |  |       <view class="submit">
 | 
 |  |  |          <view class="" style="width: 400rpx;">
 | 
 |  |  |             <button type="primary" @click="onLogin()" :loading="load.loading">{{load.btnText}}</button>
 | 
 |  |  |          </view>
 | 
 |  |  | 		 | 
 |  |  |       </view>
 | 
 |  |  | 		 | 
 |  |  |       <!-- 设置弹窗区域 -->
 | 
 |  |  |       <view>
 | 
 |  |  |          <uni-popup ref="inputDialog" type="dialog">
 | 
 |  |  |             <view class="popup">
 | 
 |  |  |                <!-- 标题 -->
 | 
 |  |  |                <view class="title">配置</view>
 | 
 |  |  |                <view class="popup-item">
 | 
 |  |  |                   <view class="popup-item-left">IP:</view>
 | 
 |  |  |                   <view class="popup-item-right"><input type="text" v-model="url.ip"></view>
 | 
 |  |  |                </view>
 | 
 |  |  |                <view class="popup-item">
 | 
 |  |  |                   <view class="popup-item-left">端口:</view>
 | 
 |  |  |                   <view class="popup-item-right"><input type="text" v-model="url.port"></view>
 | 
 |  |  |                </view>
 | 
 |  |  |                <view class="popup-item">
 | 
 |  |  |                   <view class="popup-item-left">项目:</view>
 | 
 |  |  |                   <view class="popup-item-right"><input type="text" v-model="url.project"></view>
 | 
 |  |  |                </view>
 | 
 |  |  |                <view class="btn">
 | 
 |  |  |                   <view class="btn-left" @click="close">取消</view>
 | 
 |  |  |                   <view class="btn-right" @click="settingConfirm">确认</view>
 | 
 |  |  |                </view>
 | 
 |  |  |             </view>
 | 
 |  |  |          </uni-popup>
 | 
 |  |  |       </view>
 | 
 |  |  | 		 | 
 |  |  |       <view>
 | 
 |  |  |          <!-- 提示窗示例 -->
 | 
 |  |  |          <uni-popup ref="upVersion" type="dialog">
 | 
 |  |  |             <uni-popup-dialog :type="msgType" title="通知" :content="dialogContent" @confirm="dialogConfirm"
 | 
 |  |  |                @close="dialogClose"></uni-popup-dialog>
 | 
 |  |  |          </uni-popup>
 | 
 |  |  |       </view>
 | 
 |  |  | 		 | 
 |  |  |       <!-- 版本号 -->
 | 
 |  |  |       <!-- #ifdef APP-PLUS -->
 | 
 |  |  |       <view class="version">
 | 
 |  |  |          当前版本:{{version}}
 | 
 |  |  |       </view>
 | 
 |  |  |       <!-- #endif -->
 | 
 |  |  |    </view>
 | 
 |  |  | </template>
 | 
 |  |  | 
 | 
 |  |  | <script>
 | 
 |  |  |    import md5 from '../../static/js/md5.js'
 | 
 |  |  |    export default {
 | 
 |  |  |       data() {
 | 
 |  |  |          return {
 | 
 |  |  |             version: '',
 | 
 |  |  |             showPassword: false,
 | 
 |  |  |             value: '',
 | 
 |  |  |             remberPassword: true,
 | 
 |  |  |             url: {
 | 
 |  |  |                ip: '',
 | 
 |  |  |                port: '',
 | 
 |  |  |                project: ''
 | 
 |  |  |             },
 | 
 |  |  |             baseUrl: '',
 | 
 |  |  |             user: {
 | 
 |  |  |                userName: '',
 | 
 |  |  |                password: '',
 | 
 |  |  |             },
 | 
 |  |  |             load: {
 | 
 |  |  |                loading: false,
 | 
 |  |  |                btnText: '登录'
 | 
 |  |  |             },
 | 
 |  |  |             msgType: 'success',
 | 
 |  |  |             filename: '',
 | 
 |  |  |             dialogContent: ''
 | 
 |  |  |          }
 | 
 |  |  |       },
 | 
 |  |  |       onLoad() {
 | 
 |  |  |          this.user = uni.getStorageSync('user')
 | 
 |  |  |          this.url = uni.getStorageSync('url')
 | 
 |  |  |          this.baseUrl = uni.getStorageSync('baseUrl')
 | 
 |  |  |          if (!this.user) {
 | 
 |  |  |             this.user = {userName: '',password: ''}
 | 
 |  |  |          }
 | 
 |  |  |          if (!this.url) {
 | 
 |  |  |             this.url = {ip: '',port: '',project: ''}
 | 
 |  |  |          }
 | 
 |  |  |       },
 | 
 |  |  |       onShow () {
 | 
 |  |  |          this.getVersion()
 | 
 |  |  |       },
 | 
 |  |  |       methods: {
 | 
 |  |  |          // 显示/隐藏密码
 | 
 |  |  |          changePassword() {
 | 
 |  |  |             this.showPassword = !this.showPassword;
 | 
 |  |  |          },
 | 
 |  |  |          remberChange(e) {
 | 
 |  |  |             this.remberPassword = !this.remberPassword
 | 
 |  |  |          },
 | 
 |  |  |          // 设置窗口开启按钮
 | 
 |  |  |          settings() {
 | 
 |  |  |             this.$refs.inputDialog.open()
 | 
 |  |  |          },
 | 
 |  |  |          // 设置窗口确认修改按钮
 | 
 |  |  |          dialogInputConfirm() {
 | 
 |  |  |             this.$refs.inputDialog.close()
 | 
 |  |  |          },
 | 
 |  |  |          // 设置窗口关闭按钮
 | 
 |  |  |          close() {
 | 
 |  |  |             this.$refs.inputDialog.close()
 | 
 |  |  |          },
 | 
 |  |  |          // 保存ip
 | 
 |  |  |          settingConfirm() {
 | 
 |  |  |             this.baseUrl = "http://" + this.url.ip + ':' + this.url.port + '/' + this.url.project
 | 
 |  |  |             uni.setStorageSync('baseUrl', this.baseUrl);
 | 
 |  |  |             uni.setStorageSync('url', this.url);
 | 
 |  |  |             this.$refs.inputDialog.close()
 | 
 |  |  |          },
 | 
 |  |  |          onLogin() {
 | 
 |  |  |             let that = this
 | 
 |  |  |             uni.request({
 | 
 |  |  |                url: that.baseUrl + '/pda/login.action',
 | 
 |  |  |                fail(result) {
 | 
 |  |  |                   uni.showToast({
 | 
 |  |  |                      icon: 'error',
 | 
 |  |  |                      title: '请求失败'
 | 
 |  |  |                   })
 | 
 |  |  |                },
 | 
 |  |  |                data: {
 | 
 |  |  |                   username: that.user.userName,
 | 
 |  |  |                   password: md5.hex_md5(that.user.password)
 | 
 |  |  |                },
 | 
 |  |  |                header: {
 | 
 |  |  |                   "content-type": "application/json"
 | 
 |  |  |                },
 | 
 |  |  |                success(result) {
 | 
 |  |  |                   if (result.statusCode === 404) {
 | 
 |  |  |                      uni.showToast({
 | 
 |  |  |                         title: '登录失败',
 | 
 |  |  |                         icon: "error"
 | 
 |  |  |                      })
 | 
 |  |  |                      return
 | 
 |  |  |                   }
 | 
 |  |  |                   let res = result.data
 | 
 |  |  |                   if (res.code === 200) {
 | 
 |  |  |                      that.load.loading = true;
 | 
 |  |  |                      that.load.btnText = '登录中';
 | 
 |  |  |                      uni.setStorageSync('token', res.data.token);
 | 
 |  |  |                      if(that.remberPassword){
 | 
 |  |  |                         uni.setStorageSync('user', that.user);
 | 
 |  |  |                      }else{
 | 
 |  |  |                         uni.removeStorageSync('user');
 | 
 |  |  |                      }
 | 
 |  |  |                      setTimeout(() => {
 | 
 |  |  |                         uni.showToast({
 | 
 |  |  |                            title: '登录成功'
 | 
 |  |  |                         })
 | 
 |  |  |                         setTimeout(() => {
 | 
 |  |  |                            uni.reLaunch({
 | 
 |  |  |                               url: '../home/home'
 | 
 |  |  |                            });
 | 
 |  |  |                         }, 300)
 | 
 |  |  |                      }, 700)
 | 
 |  |  |                   } else {
 | 
 |  |  |                      uni.showToast({
 | 
 |  |  |                         title: res.msg
 | 
 |  |  |                      })
 | 
 |  |  |                   }
 | 
 |  |  |                },
 | 
 |  |  |             })
 | 
 |  |  |          },
 | 
 |  |  |          //检测当前平台,如果是安卓则启动安卓更新
 | 
 |  |  |          getVersion() {
 | 
 |  |  |             let that = this;
 | 
 |  |  |             uni.getSystemInfo({
 | 
 |  |  |                success: (res) => {
 | 
 |  |  |                   if (res.platform == "android") {
 | 
 |  |  |                      that.AndroidCheckUpdate();
 | 
 |  |  |                   }
 | 
 |  |  |                }
 | 
 |  |  |             })
 | 
 |  |  |          },
 | 
 |  |  |          // 获取当前版本号
 | 
 |  |  |          AndroidCheckUpdate() {
 | 
 |  |  |             let that = this;
 | 
 |  |  |             plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {
 | 
 |  |  |                that.version = wgtinfo.version //客户端版本号
 | 
 |  |  |             })
 | 
 |  |  |             setTimeout(()=>{
 | 
 |  |  |                that.getUpdateVersion()
 | 
 |  |  |             },100)
 | 
 |  |  |          },
 | 
 |  |  |          // 校验版本
 | 
 |  |  |          getUpdateVersion() {
 | 
 |  |  |             let that = this
 | 
 |  |  |             let type = 0
 | 
 |  |  |             if (that.baseUrl == 'http://undefined:undefined/undefined') {
 | 
 |  |  |                return
 | 
 |  |  |             }
 | 
 |  |  | 				 | 
 |  |  |             let url = that.baseUrl + '/appVersion/checkUpdate/' + that.version + '/' + type
 | 
 |  |  |             uni.request({
 | 
 |  |  |                url: url,
 | 
 |  |  |                method: 'GET',
 | 
 |  |  |                success(res) {
 | 
 |  |  |                   console.log(res);
 | 
 |  |  |                   var res = res.data
 | 
 |  |  |                   if (res.data) {
 | 
 |  |  |                      that.filename = res.data.path
 | 
 |  |  |                      that.dialogContent = '发现新版本:' + res.data.version + ', 是否立即更新'
 | 
 |  |  |                      that.$refs.upVersion.open()
 | 
 |  |  |                   } else {
 | 
 |  |  |                      uni.showToast({
 | 
 |  |  |                         title: res.msg,
 | 
 |  |  |                         icon: "none",
 | 
 |  |  |                         position: 'top'
 | 
 |  |  |                      })
 | 
 |  |  |                   }
 | 
 |  |  | 						 | 
 |  |  |                }
 | 
 |  |  |             })
 | 
 |  |  |          },
 | 
 |  |  |          dialogConfirm() {
 | 
 |  |  |             this.$refs.upVersion.close()
 | 
 |  |  |             this.downWgt()
 | 
 |  |  |          },
 | 
 |  |  |          dialogClose() {
 | 
 |  |  |             this.$refs.upVersion.close()
 | 
 |  |  |          },
 | 
 |  |  |          downWgt() {
 | 
 |  |  |             let that = this;
 | 
 |  |  |             const downloadUrl = that.baseUrl + "/appVersion/downloadApp/" + that.filename
 | 
 |  |  |             uni.showLoading({
 | 
 |  |  |                title: '更新中……'
 | 
 |  |  |             })
 | 
 |  |  |             const downloadTask = uni.downloadFile({ //执行下载
 | 
 |  |  |                url: downloadUrl, //下载地址
 | 
 |  |  |                timeout: 1000 * 30, //30秒超时时间
 | 
 |  |  |                success: downloadResult => { //下载成功
 | 
 |  |  |                   console.log(downloadResult);
 | 
 |  |  |                   that.showdownLine = false
 | 
 |  |  |                   uni.hideLoading();
 | 
 |  |  |                   if (downloadResult.statusCode == 200) {
 | 
 |  |  |                      uni.showModal({
 | 
 |  |  |                         title: '',
 | 
 |  |  |                         content: '更新成功,确定现在重启吗?',
 | 
 |  |  |                         confirmText: '重启',
 | 
 |  |  |                         confirmColor: '#EE8F57',
 | 
 |  |  |                         success: function(res) {
 | 
 |  |  |                            if (res.confirm == true) {
 | 
 |  |  |                               plus.runtime.install( //安装
 | 
 |  |  |                                  downloadResult.tempFilePath, {
 | 
 |  |  |                                     force: true
 | 
 |  |  |                                  },
 | 
 |  |  |                                  function(res) {
 | 
 |  |  |                                     utils.showToast('更新成功,重启中');
 | 
 |  |  |                                     plus.runtime.restart();
 | 
 |  |  |                                  }
 | 
 |  |  |                               );
 | 
 |  |  |                            }
 | 
 |  |  |                         }
 | 
 |  |  |                      });
 | 
 |  |  |                   } else {
 | 
 |  |  |                      uni.hideLoading();
 | 
 |  |  |                      that.showdownLine = false
 | 
 |  |  |                      uni.showToast({
 | 
 |  |  |                         title:'请先上传安装包',
 | 
 |  |  |                         icon: 'error'
 | 
 |  |  |                      })
 | 
 |  |  |                   }
 | 
 |  |  |                },
 | 
 |  |  |                fail: err => {
 | 
 |  |  |                   uni.hideLoading();
 | 
 |  |  |                   that.showdownLine = false
 | 
 |  |  |                   that.$u.toast(downloadResult.errMsg)
 | 
 |  |  |                },
 | 
 |  |  |                complete: com => {
 | 
 |  |  | 						 | 
 |  |  |                   console.log(com)
 | 
 |  |  |                }
 | 
 |  |  |             });
 | 
 |  |  | 			 | 
 |  |  |             // 下载进度
 | 
 |  |  |             downloadTask.onProgressUpdate(res => {
 | 
 |  |  |                that.downloadNum = res.progress
 | 
 |  |  |                console.log('下载进度' + that.downloadNum);
 | 
 |  |  |             });
 | 
 |  |  |          },
 | 
 |  |  | 			 | 
 |  |  |       }
 | 
 |  |  |    }
 | 
 |  |  | </script>
 | 
 |  |  | <style>
 | 
 |  |  |    @import url('../../static/css/wms.css/wms.css');
 | 
 |  |  |    /* 设置区域 */
 | 
 |  |  |    .settings {
 | 
 |  |  |       min-height: 100rpx;
 | 
 |  |  |    }
 | 
 |  |  |    .settings-btn {
 | 
 |  |  |       float: right;
 | 
 |  |  |       margin-right: 10rpx;
 | 
 |  |  |    }
 | 
 |  |  |    .logo {
 | 
 |  |  |       height: 25%;
 | 
 |  |  |       width: 100%;
 | 
 |  |  |       display: flex;
 | 
 |  |  |       justify-content: center;
 | 
 |  |  |    }
 | 
 |  |  |    .logo-box {
 | 
 |  |  |       margin: auto 0;
 | 
 |  |  |    }
 | 
 |  |  |    image {
 | 
 |  |  |       height: 300rpx;
 | 
 |  |  |    }
 | 
 |  |  |    /* 输入框区域 */
 | 
 |  |  |    .content {
 | 
 |  |  |       min-height: 250rpx;
 | 
 |  |  |       /* background-color: coral; */
 | 
 |  |  |       width: 100%;
 | 
 |  |  |       display: flex;
 | 
 |  |  |       flex-direction: column;
 | 
 |  |  |       align-items: center;
 | 
 |  |  |       color: #606266;
 | 
 |  |  |    }
 | 
 |  |  |    .box {
 | 
 |  |  |       width: 80%;
 | 
 |  |  |       height: 100rpx;
 | 
 |  |  |       margin-top: 30rpx;
 | 
 |  |  |       background-color: white;  | 
 |  |  |       display: flex;
 | 
 |  |  |       font-size: 14px;
 | 
 |  |  |       align-items: center;
 | 
 |  |  | 		 | 
 |  |  |    }
 | 
 |  |  |    .box-icon {
 | 
 |  |  |       width: 80rpx;
 | 
 |  |  |       text-align: center;
 | 
 |  |  |    }
 | 
 |  |  |    .box-text {
 | 
 |  |  |       width: 100rpx;
 | 
 |  |  |       text-align: center;
 | 
 |  |  |    }
 | 
 |  |  |    .box-show {
 | 
 |  |  |       margin-left: auto;
 | 
 |  |  |       /* margin-right: 10rpx; */
 | 
 |  |  |       width: 60rpx;
 | 
 |  |  |       text-align: center;
 | 
 |  |  |    }
 | 
 |  |  |    input {
 | 
 |  |  |       padding-left: 10rpx;
 | 
 |  |  |       font-size: 14px;
 | 
 |  |  |       color: #303133;
 | 
 |  |  |    }
 | 
 |  |  | 	 | 
 |  |  |    .check {
 | 
 |  |  |       width: 78%;
 | 
 |  |  |       display: flex;
 | 
 |  |  |       font-size: 12px;
 | 
 |  |  |       color: #606266;
 | 
 |  |  |       margin-top: 10rpx;
 | 
 |  |  |    }
 | 
 |  |  |    .check-right {
 | 
 |  |  |       margin-left: auto;
 | 
 |  |  |    }
 | 
 |  |  |    .submit {
 | 
 |  |  |       display: flex;
 | 
 |  |  |       justify-content: center;
 | 
 |  |  |       position: fixed;
 | 
 |  |  |       width: 100%;
 | 
 |  |  |       bottom: 100rpx;
 | 
 |  |  |    }
 | 
 |  |  |    .version {
 | 
 |  |  |       position: fixed;
 | 
 |  |  |       width: 100%;
 | 
 |  |  |       bottom: 0;
 | 
 |  |  |       text-align: center;
 | 
 |  |  |       font-size: 12px;
 | 
 |  |  |       color: #909399;
 | 
 |  |  |    }
 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 
 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  | 	 | 
 |  |  |    /* ------ */
 | 
 |  |  | 	 | 
 |  |  |    .shadow-warp {
 | 
 |  |  |       position: relative;
 | 
 |  |  |       box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1);
 | 
 |  |  |    }
 | 
 |  |  | 	 | 
 |  |  |    .shadow-warp:before,
 | 
 |  |  |    .shadow-warp:after {
 | 
 |  |  |       position: absolute;
 | 
 |  |  |       content: "";
 | 
 |  |  |       top: 20upx;
 | 
 |  |  |       bottom: 30upx;
 | 
 |  |  |       left: 20upx;
 | 
 |  |  |       width: 50%;
 | 
 |  |  |       box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2);
 | 
 |  |  |       transform: rotate(-3deg);
 | 
 |  |  |       z-index: -1;
 | 
 |  |  |    }
 | 
 |  |  | 	 | 
 |  |  |    .shadow-warp:after {
 | 
 |  |  |       right: 20upx;
 | 
 |  |  |       left: auto;
 | 
 |  |  |       transform: rotate(3deg);
 | 
 |  |  |    }
 | 
 |  |  | </style> |