diff --git a/app.js b/app.js
index 7e7902f..379bea0 100644
--- a/app.js
+++ b/app.js
@@ -40,7 +40,6 @@
   var tenantid = wx.getStorageSync("tenantid") || '';
   var auth = 'Bearer ' + token;
   var tenantid = tenantid;
-
   wx.request({
     url: server + url,
     timeout: 10000,
diff --git a/pages/index/index.js b/pages/index/index.js
index a6dd36f..8320ac1 100644
--- a/pages/index/index.js
+++ b/pages/index/index.js
@@ -35,6 +35,8 @@
   },
   onLoad: function() {
 
+    wx.hideHomeButton();
+
     var brightness=wx.getStorageSync("brightness");
 
     if(!wx.$isEmpty(brightness)){
@@ -139,11 +141,7 @@
     })
   },
   doScan: function() {
-    // var check = wx.$checkBankcard();
-    // if (!check) {
-    
-    //   return;
-    // }
+
 
     wx.scanCode({
       success(ret) {
@@ -154,7 +152,7 @@
         wx.navigateTo({
           url: '../scan/scan'
         })
-        //}
+      
       }
     })
 
diff --git a/pages/loadpage/loadpage.js b/pages/loadpage/loadpage.js
index 62be5f8..2ced581 100644
--- a/pages/loadpage/loadpage.js
+++ b/pages/loadpage/loadpage.js
@@ -20,61 +20,7 @@
    * 生命周期函数--监听页面加载
    */
   onLoad: function(options) {
-    var res = wx.getStorageSync('token');
-    var that = this;
-    if (wx.$isEmpty(res)) {
-      // wx.navigateTo({
-      //   url: '../wxlogin/wxlogin',
-      // })
-      that.setData({
-        hasSign: false
-      })
-      return;
-    }
-    
-    wx.$doPost('/v1/infor', {}, function(ok, ret) {
-
-      if (ok) {
-        if (ret.data.code == 200) {
-         
-          if (!wx.$isEmpty(ret.data.token)) {
-            wx.setStorageSync("token", ret.data.token);
-          }
-          wx.redirectTo({
-            url: '../index/index',
-          })
-
-        } else {
-          // wx.navigateTo({
-          //   url: '../wxlogin/wxlogin',
-          // })
-          // this.setData()
-          that.setData({
-            hasSign: false
-          })
-
-        }
-      } else {
-        //alert('无法请求到服务器，请检查网络并稍后再试');
-        if (ret.data.status == 401) {
-          //need login
-          // wx.navigateTo({
-          //   url: '../wxlogin/wxlogin',
-          // })
-          that.setData({
-            hasSign: false
-          })
-        } else {
-
-          that.setData({
-            hasSign: false
-          })
-          // wx.navigateTo({
-          //   url: '../wxlogin/wxlogin',
-          // })
-        }
-      }
-    })
+    this.doAuth();
   },
 
   goRegister: function() {
@@ -136,5 +82,66 @@
    */
   onShareAppMessage: function() {
 
+  },
+  doAuth:function(){
+    var res = wx.getStorageSync('token');
+    var that = this;
+    if (wx.$isEmpty(res)) {
+      // wx.navigateTo({
+      //   url: '../wxlogin/wxlogin',
+      // })
+      that.setData({
+        hasSign: false
+      })
+      return;
+    }
+    
+    wx.$doPost('/v1/infor', {}, function(ok, ret) {
+
+      if (ok) {
+        if (ret.data.code == 200) {
+         
+          if (!wx.$isEmpty(ret.data.token)) {
+            wx.setStorageSync("token", ret.data.token);
+          }
+          wx.redirectTo({
+            url: '../index/index',
+          })
+
+        } else {
+          // wx.navigateTo({
+          //   url: '../wxlogin/wxlogin',
+          // })
+          // this.setData()
+          that.setData({
+            hasSign: false
+          })
+
+        }
+      } else {
+        that.setData({
+          hasSign: false
+        })
+
+        //alert('无法请求到服务器，请检查网络并稍后再试');
+        // if (ret.data.status == 401) {
+        //   //need login
+        //   // wx.navigateTo({
+        //   //   url: '../wxlogin/wxlogin',
+        //   // })
+        //   that.setData({
+        //     hasSign: false
+        //   })
+        // } else {
+
+        //   that.setData({
+        //     hasSign: false
+        //   })
+        //   // wx.navigateTo({
+        //   //   url: '../wxlogin/wxlogin',
+        //   // })
+        // }
+      }
+    })
   }
 })
\ No newline at end of file
diff --git a/pages/loadpage/loadpage.wxml b/pages/loadpage/loadpage.wxml
index b09fd8b..ab31821 100644
--- a/pages/loadpage/loadpage.wxml
+++ b/pages/loadpage/loadpage.wxml
@@ -11,8 +11,6 @@
         直接登录
       </view>
     
-
-
     <view class="foot" style="bottom:30rpx">
       大理市民卡
     </view>
diff --git a/pages/scan/scan.js b/pages/scan/scan.js
index f3f47fb..849ce65 100644
--- a/pages/scan/scan.js
+++ b/pages/scan/scan.js
@@ -15,41 +15,41 @@
   onLoad: function(options) {
     var url = wx.getStorageSync("scanurl");
     var userid = wx.getStorageSync("userid");
-    // this.setData({
-    //   scanurl:url
-    // })
-    var that=this;
-    if (url.indexOf("dwz.cn") >= 0){
-      console.log('init here');
-      wx.request({
-        url: url,
-        method: 'GET',
-        success: function (res) {
-          var model = res.data;
-          var index = model.indexOf('retcobillno');
-          var index2 = model.indexOf(';');
-          var rowbillno = model.substring(index, index2);
-          var billno = rowbillno.substring(rowbillno.indexOf('=') + 1);
-          var url = 'https://yy.dlsmk.cn/water/api/device/qrcode/pretend?cobillno=' + billno + '&userid=' + userid;
-
-          wx.setStorageSync("trueurl", url);
-          wx.navigateTo({
-            url: '../scan2/scan2',
-          })
-        }
-      })
-    } else{
-      console.log('init there');
-      if (url.indexOf("?") > 0){
-        url = url + '&userid=' + userid;
-      }else{
-        url = url + '?userid=' + userid;
-      }
-      console.log(url);
-      this.setData({
-       scanurl:url
-     })
-    }
+    this.setData({
+      scanurl:url
+    })
+   // var that=this;
+   // if (url.indexOf("dwz.cn") >= 0){
+   //   console.log('init here');
+   //   wx.request({
+   //     url: url,
+   //     method: 'GET',
+   //     success: function (res) {
+   //       var model = res.data;
+   //       var index = model.indexOf('retcobillno');
+   //       var index2 = model.indexOf(';');
+   //       var rowbillno = model.substring(index, index2);
+   //       var billno = rowbillno.substring(rowbillno.indexOf('=') + 1);
+   //       var url = 'https://yy.dlsmk.cn/water/api/device/qrcode/pretend?cobillno=' + billno + '&userid=' + userid;
+//
+   //       wx.setStorageSync("trueurl", url);
+   //       wx.navigateTo({
+   //         url: '../scan2/scan2',
+   //       })
+   //     }
+   //   })
+   // } else{
+   //   console.log('init there');
+   //   if (url.indexOf("?") > 0){
+   //     url = url + '&userid=' + userid;
+   //   }else{
+   //     url = url + '?userid=' + userid;
+   //   }
+   //   console.log(url);
+   //   this.setData({
+   //    scanurl:url
+   //  })
+  //  }
   },
 
   getTrueUrl: function(res) {
@@ -58,7 +58,7 @@
     if (url.indexOf("pretend") < 0){
       return;
     }
-    if (url.indexOf("yy.dlsmk.cn") >= 0) {
+ //   if (url.indexOf("yy.dlsmk.cn") >= 0) {
       console.log("succ");
       var userid = wx.getStorageSync("userid");
       if (url.indexOf("?") > 0) {
@@ -70,7 +70,7 @@
       wx.navigateTo({
         url: '../scan2/scan2',
       })
-    }
+  //  }
   },
 
   /**
diff --git a/pages/scan/scan.wxml b/pages/scan/scan.wxml
index 424bc07..c5db633 100644
--- a/pages/scan/scan.wxml
+++ b/pages/scan/scan.wxml
@@ -1,3 +1,3 @@
 <view>
-<web-view src='{{scanurl}}' bindload='getTrueUrl' ></web-view>
+<web-view src='{{scanurl}}'  bindload='getTrueUrl'  ></web-view>
 </view>
\ No newline at end of file
