diff --git a/pages/bill/bill.js b/pages/bill/bill.js
new file mode 100644
index 0000000..d2afa2b
--- /dev/null
+++ b/pages/bill/bill.js
@@ -0,0 +1,111 @@
+// pages/bill/bill.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    hasBill: false
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+    var that = this;
+    wx.showLoading("加载中");
+    var param = {
+      "pageno": 1
+    }
+    wx.$doPost('/v1/bills', param, function(ok, ret) {
+      wx.hideLoading();
+      if (ok) {
+        ret = ret.data;
+        console.log(ret)
+        if (ret.code == 200) {
+          if (ret.page && ret.page.count > 0) {
+            that.setData({
+              hasBill: true
+            })
+          } else {
+
+            wx.showModal({
+              title: '提示',
+              content: '暂无数据',
+              showCancel: false,
+              success(res) {
+                wx.navigateBack({
+
+                })
+              }
+            })
+
+          }
+
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+            duration: 2000
+          })
+
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.data.status + "，请稍后再试",
+          duration: 2000
+        })
+      }
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/bill/bill.json b/pages/bill/bill.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/bill/bill.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/bill/bill.wxml b/pages/bill/bill.wxml
new file mode 100644
index 0000000..f14622e
--- /dev/null
+++ b/pages/bill/bill.wxml
@@ -0,0 +1,10 @@
+<view class="container">
+  <view class="global-background">
+    <view class="inline-item center" wx:if="{{hasBill}}">
+      <view class="input-desc">
+      ——————暂无数据——————
+      </view>
+    </view>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/bill/bill.wxss b/pages/bill/bill.wxss
new file mode 100644
index 0000000..5ec896b
--- /dev/null
+++ b/pages/bill/bill.wxss
@@ -0,0 +1 @@
+/* pages/bill/bill.wxss */
\ No newline at end of file
diff --git a/pages/bindcard/bindcard.js b/pages/bindcard/bindcard.js
new file mode 100644
index 0000000..dc76332
--- /dev/null
+++ b/pages/bindcard/bindcard.js
@@ -0,0 +1,205 @@
+// pages/bindcard/bindcard.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    index: 0,
+    idno: '',
+    name: '',
+    cardnum: '',
+    array: [
+      '身份证',
+      '驾照',
+      '外国人居留证',
+      '港澳居民来往内地通行证',
+      
+      '军官证',
+      '护照',
+      '户口簿',
+      '其他'
+    ],
+    idtypes: [
+      'idcard',
+      'driving_license',
+      'foreigner_residence_permit',
+      'hk_macau_pass',
+      
+      'military_idcard',
+      'passport',
+      'residence_booklet',
+      'unknown'
+    ],
+    // idtypes: [{
+    //     val: 'driving_license',
+    //     name: '驾照'
+    //   },
+    //   {
+    //     val: 'foreigner_residence_permit',
+    //     name: '外国人居留证'
+    //   },
+    //   {
+    //     val: 'hk_macau_pass',
+    //     name: '港澳居民来往内地通行证'
+    //   },
+    //   {
+    //     val: 'idcard',
+    //     name: '身份证'
+    //   },
+    //   {
+    //     val: 'military_idcard',
+    //     name: '军官证'
+    //   },
+    //   {
+    //     val: 'passport',
+    //     name: '护照'
+    //   },
+    //   {
+    //     val: 'residence_booklet',
+    //     name: '户口簿'
+    //   },
+    //   {
+    //     val: 'unknown',
+    //     name: '其他'
+    //   }
+    // ]
+  },
+  setName: function(e) {
+    this.setData({
+      name: e.detail.value
+    })
+  },
+  bindPickerChange: function(e) {
+    this.setData({
+      index: e.detail.value
+    })
+
+  },
+  setIdCode: function(e) {
+    this.setData({
+      idno: e.detail.value
+    })
+  },
+  setBankcard: function(e) {
+    this.setData({
+      cardnum: e.detail.value
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+  doNext: function() {
+    var name=this.data.name;
+    var idno=this.data.idno;
+    var cardnum=this.data.cardnum;
+
+    if (wx.$isEmpty(name) || wx.$isEmpty(cardnum) || wx.$isEmpty(idno)) {
+      return;
+    }
+    cardnum = cardnum.trim();
+    name = name.trim();
+    idno = idno.trim();
+
+    wx.showLoading({
+      title: '正在处理',
+    })
+    var index=this.data.index;
+    var idtype = this.data.idtypes[index];
+  
+    var param = {
+      "cardno": cardnum,
+      "idtype": idtype,
+      "name": name,
+      "idno": idno
+    }
+    wx.$doPost('/v1/bindcard', param, function(ok, ret) {
+      wx.hideLoading();
+      if (ok) {
+        
+        console.log(ret)
+        if (ret.data.code == 200) {
+          wx.setStorageSync("name", name);
+          wx.setStorageSync("cardno", cardnum);
+          wx.setStorageSync("idtype", idtype);
+          wx.setStorageSync("idno", idno);
+          wx.setStorageSync("phoneX", ret.data.phonex);
+          wx.setStorageSync("personid", ret.data.personid);
+          wx.setStorageSync("signed", ret.data.signed);
+          wx.setStorageSync("paypwdset", ret.data.paypwdset);
+          wx.navigateTo({
+            url: '../bindcheck/bindcheck',
+          })
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+            duration: 2000
+          })
+
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.data.status + "，请稍后再试",
+          duration: 2000
+        })
+      }
+    })
+  }
+
+
+})
\ No newline at end of file
diff --git a/pages/bindcard/bindcard.json b/pages/bindcard/bindcard.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/bindcard/bindcard.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/bindcard/bindcard.wxml b/pages/bindcard/bindcard.wxml
new file mode 100644
index 0000000..bb27689
--- /dev/null
+++ b/pages/bindcard/bindcard.wxml
@@ -0,0 +1,30 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="inline-item center" style="margin-top: 50rpx;">
+      <view class="input-desc">
+        姓名
+      </view>
+      <input  placeholder="请输入真实姓名" style="width: 70%;" bindinput="setName"></input>
+    </view>
+    <view class="inline-item center" >
+      <view class="input-desc">
+        证件类型
+      </view>
+      <picker style="width: 70%;"  bindchange="bindPickerChange" value="{{index}}" range="{{array}}">{{array[index]}}</picker>
+    </view>
+     <view class=" inline-item center ">
+      <view class="input-desc ">
+        证件号
+      </view>
+      <input placeholder="请输入证件号 " style="width: 70%; " bindinput="setIdCode"></input>
+    </view>
+     <view class="inline-item center " >
+      <view class="input-desc ">
+        银行卡号
+      </view>
+      <input placeholder="市民卡对应的银行卡号 " style="width: 70%; " bindinput="setBankcard"></input>
+    </view>
+    <button bindtap="doNext" class="long-btn " style="width: 90%; ">下一步</button>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/bindcard/bindcard.wxss b/pages/bindcard/bindcard.wxss
new file mode 100644
index 0000000..225feef
--- /dev/null
+++ b/pages/bindcard/bindcard.wxss
@@ -0,0 +1 @@
+/* pages/bindcard/bindcard.wxss */
\ No newline at end of file
diff --git a/pages/bindcheck/bindcheck.js b/pages/bindcheck/bindcheck.js
new file mode 100644
index 0000000..3ca4c4c
--- /dev/null
+++ b/pages/bindcheck/bindcheck.js
@@ -0,0 +1,187 @@
+// pages/bindcheck/bindcheck.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    phone: '',
+    code: '',
+    sendTime: '获取验证码',
+    sendColor: 'rgb(124, 255, 112)',
+    snsMsgWait: 30,
+    smsFlag: true,
+   
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+    wx.setNavigationBarTitle({
+      title: '获取验证码',
+    })
+
+    var phone = wx.getStorageSync('phoneX');
+    if (!wx.$isEmpty(phone)) {
+      this.setData({
+        phone: phone
+      })
+    } else {
+      phone = wx.getStorageSync('phone');
+      this.setData({
+        phone: phone
+      })
+    }
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+  setCode:function(e){
+    this.setData({
+      code: e.detail.value
+    })
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+  doNext: function () {
+    var code = this.data.code;
+    if (wx.$isEmpty(code)) {
+      return;
+    }
+
+    var personid = wx.getStorageSync("personid");
+    
+    var param = {
+      "personid": personid,
+      "code": code,
+    }
+    wx.$doPost('/v1/checkcode',param, function (ok, ret) {
+      if (ok) {
+     
+        console.log(ret)
+        if (ret.data.code == 200) {
+          wx.setStorageSync("paypwdtype", "new");
+          wx.setStorageSync("userid", personid);
+          var signed = wx.getStorageSync("signed");
+          var paypwdset = wx.getStorageSync("paypwdset");
+          console.log(paypwdset)
+          if (!paypwdset || 'false' == paypwdset) {
+            wx.navigateTo({
+              url: '../paypwdset/paypwdset',
+            })
+           
+          } else {
+            if (!wx.$isEmpty(signed) && signed == 'yes') {
+              wx.navigateTo({
+                url: '../index/index',
+              })
+          
+            } else {
+              wx.navigateTo({
+                url: '../signxy/signxy',
+              })
+          
+            }
+          }
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.message,
+            duration: 2000
+          })
+
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: ret.data.message,
+          duration: 2000
+        })
+
+      }
+    })
+  },
+  getCode: function() {
+    if (false == this.data.smsFlag) {
+      return;
+    }
+
+    wx.$doCountdown(this);
+
+    var name = wx.getStorageSync("name");
+    var cardno = wx.getStorageSync("cardno");
+    var idtype = wx.getStorageSync("idtype");
+    var idno = wx.getStorageSync("idno");
+
+    var param = {
+      "cardno": cardno,
+      "idtype": idtype,
+      "name": name,
+      "idno": idno
+    }
+    wx.$doPost('/v1/bindcard', param, function(ok, ret) {
+      console.log(ret.data);
+      if (ok) {
+        if (ret.data.code == 200) {} else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+
+            duration: 2000
+          })
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.data.status + "，请稍后再试",
+          duration: 2000
+        })
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/bindcheck/bindcheck.json b/pages/bindcheck/bindcheck.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/bindcheck/bindcheck.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/bindcheck/bindcheck.wxml b/pages/bindcheck/bindcheck.wxml
new file mode 100644
index 0000000..87dbe70
--- /dev/null
+++ b/pages/bindcheck/bindcheck.wxml
@@ -0,0 +1,18 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="" style="margin:20rpx;color:gray;font-size:25rpx">验证码已发送至：{{phone}}</view>
+    <view class="inline-item center" style="">
+      <view class="input-desc">
+        验证码
+      </view>
+      <input placeholder="请输入验证码 " type="number" style="width:70%" bindinput="setCode"></input>
+     
+
+    </view>
+    
+
+    <button bindtap="doNext" class="long-btn" style="width: 90%;">下一步</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/bindcheck/bindcheck.wxss b/pages/bindcheck/bindcheck.wxss
new file mode 100644
index 0000000..57b9c70
--- /dev/null
+++ b/pages/bindcheck/bindcheck.wxss
@@ -0,0 +1 @@
+/* pages/bindcheck/bindcheck.wxss */
\ No newline at end of file
diff --git a/pages/cardlost/cardlost.js b/pages/cardlost/cardlost.js
new file mode 100644
index 0000000..06bbff4
--- /dev/null
+++ b/pages/cardlost/cardlost.js
@@ -0,0 +1,127 @@
+// pages/cardlost/cardlost.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    pwd: ''
+  },
+
+  setPwd: function(e) {
+    this.setData({
+      pwd: e.detail.value
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+  doNext: function() {
+    var pwd = this.data.pwd;
+    if (wx.$isEmpty(pwd)) {
+      return;
+    }
+    wx.showModal({
+      title: '提示',
+      content: '确定要挂失吗',
+      success(res) {
+        if (res.confirm) {
+          var param = {
+            "paypwd": pwd
+          }
+          wx.$doPost('/v1/cardlost', param, function(ok, ret) {
+            if (ok) {
+              // wx.hideLoading();
+              console.log(ret)
+              if (ret.data.status == 200) {
+                wx.showModal({
+                  title: '提示',
+                  content: '注销成功',
+                  showCancel:false,
+                  success(res) {
+                    if (res.confirm) {
+                      wx.navigateTo({
+                        url: '../index/index',
+                      })
+                    }
+                  }
+                })
+               
+              } else {
+                wx.showModal({
+                  title: '错误',
+                  content: ret.data.message,
+                  duration: 2000
+                })
+
+              }
+            } else {
+              wx.showModal({
+                title: '错误',
+                content: ret.data.msg,
+                duration: 2000
+              })
+
+            }
+          })
+
+        }
+      }
+    })
+
+  }
+})
\ No newline at end of file
diff --git a/pages/cardlost/cardlost.json b/pages/cardlost/cardlost.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/cardlost/cardlost.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/cardlost/cardlost.wxml b/pages/cardlost/cardlost.wxml
new file mode 100644
index 0000000..6c7258d
--- /dev/null
+++ b/pages/cardlost/cardlost.wxml
@@ -0,0 +1,17 @@
+<view class="container">
+
+  <view class="global-background">
+ 
+    <view class="inline-item center" style="margin-top:50rpx">
+      <view class="input-desc">
+        支付密码
+      </view>
+      <input placeholder="请输入支付密码 " maxlength="6" password="true" type="number" style="width:60%" bindinput="setPwd"></input>
+
+    </view>
+    
+
+    <button bindtap="doNext" class="long-btn" style="width: 90%;">挂失</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/cardlost/cardlost.wxss b/pages/cardlost/cardlost.wxss
new file mode 100644
index 0000000..14027ec
--- /dev/null
+++ b/pages/cardlost/cardlost.wxss
@@ -0,0 +1 @@
+/* pages/cardlost/cardlost.wxss */
\ No newline at end of file
diff --git a/pages/editpaypwd/editpaypwd.js b/pages/editpaypwd/editpaypwd.js
new file mode 100644
index 0000000..53d217f
--- /dev/null
+++ b/pages/editpaypwd/editpaypwd.js
@@ -0,0 +1,158 @@
+// pages/editpaypwd/editpaypwd.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    newpwd: '',
+    renewpwd: '',
+    oldpwd: ''
+  },
+
+  setPassword: function(e) {
+    this.setData({
+      newpwd: e.detail.value
+    })
+  },
+
+  setPassword2: function(e) {
+    this.setData({
+      renewpwd: e.detail.value
+    })
+  },
+
+  setOriPassword: function(e) {
+    this.setData({
+      oldpwd: e.detail.value
+    })
+  },
+
+  doNext: function() {
+    var oldpwd = this.data.oldpwd;
+    var pwd = this.data.newpwd;
+    var repwd = this.data.renewpwd;
+    if (wx.$isEmpty(pwd) || wx.$isEmpty(repwd) || wx.$isEmpty(oldpwd)) {
+      return;
+    }
+    if (pwd.length < 6) {
+      wx.showModal({
+        title: '提示',
+        content: '密码为6位数字',
+      })
+      return;
+    }
+    if (pwd != repwd) {
+      wx.showModal({
+        title: '提示',
+        content: '两次密码不一致',
+      })
+      return;
+    }
+    wx.showLoading("正在保存");
+    var param = {
+      "pwd": pwd,
+      "repwd": repwd,
+      "type": "renew",
+      "oldpwd": oldpwd
+    }
+    wx.$doPost('/v1/paypwd', param, function(ok, ret) {
+      wx.hideLoading();
+      if (ok) {
+        ret = ret.data;
+
+        if (ret.code == 200) {
+          wx.showModal({
+            title: '提示',
+            content: '修改密码成功',
+            showCancel: false,
+            success(res) {
+              wx.navigateBack({})
+            }
+          })
+        } else {
+          if (ret.code == -1) {
+            wx.removeStorageSync("token");
+            wx.showModal({
+              title: '提示',
+              content: ret.msg,
+              duration: 2000
+            })
+            wx.navigateTo({
+              url: '../wxlogin/wxlogin',
+            })
+          } else {
+            wx.showModal({
+              title: '错误',
+              content: '请求失败，请稍后再试',
+              duration: 4000
+            })
+          }
+        }
+      } else {
+
+        wx.showModal({
+          title: '错误',
+          content: '请求失败，请稍后再试',
+          duration: 4000
+        })
+      }
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/editpaypwd/editpaypwd.json b/pages/editpaypwd/editpaypwd.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/editpaypwd/editpaypwd.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/editpaypwd/editpaypwd.wxml b/pages/editpaypwd/editpaypwd.wxml
new file mode 100644
index 0000000..7b5bb22
--- /dev/null
+++ b/pages/editpaypwd/editpaypwd.wxml
@@ -0,0 +1,27 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="inline-item center" style="margin-top: 50rpx;">
+      <view class="input-desc">
+        原支付密码
+      </view>
+      <input  maxlength="6" placeholder="6位密码" type="number"   password="true" style="width: 70%;" bindinput="setOriPassword"></input>
+    </view>
+
+     <view class="inline-item center"  style="margin-top: 50rpx;">
+      <view class="input-desc">
+        新支付密码
+      </view>
+      <input  maxlength="6" placeholder="6位密码" type="number"  password="true" style="width: 70%;" bindinput="setPassword"></input>
+    </view>
+    <view class="inline-item center" style="">
+      <view class="input-desc">
+        确认密码
+      </view>
+      <input  maxlength="6" placeholder="请再次确认密码" type="number"  password="true" style="width: 70%;" bindinput="setPassword2"></input>
+    </view>
+
+    <button bindtap="doNext" class="long-btn" style="width: 90%;">确认修改</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/editpaypwd/editpaypwd.wxss b/pages/editpaypwd/editpaypwd.wxss
new file mode 100644
index 0000000..9b466c5
--- /dev/null
+++ b/pages/editpaypwd/editpaypwd.wxss
@@ -0,0 +1 @@
+/* pages/editpaypwd/editpaypwd.wxss */
\ No newline at end of file
diff --git a/pages/editpwd/editpwd.js b/pages/editpwd/editpwd.js
new file mode 100644
index 0000000..c5264b6
--- /dev/null
+++ b/pages/editpwd/editpwd.js
@@ -0,0 +1,160 @@
+// pages/editpwd/editpwd.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    newpwd: '',
+    renewpwd: '',
+    oldpwd: ''
+  },
+
+  setPassword: function(e) {
+    this.setData({
+      newpwd: e.detail.value
+    })
+  },
+
+  setPassword2: function(e) {
+    this.setData({
+      renewpwd: e.detail.value
+    })
+  },
+
+  setOriPassword: function(e) {
+    this.setData({
+      oldpwd: e.detail.value
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+    wx.setNavigationBarTitle({
+      title: '修改登录密码',
+    })
+  },
+
+  doNext: function() {
+    var oldpwd = this.data.oldpwd;
+    var pwd = this.data.newpwd;
+    var repwd = this.data.renewpwd;
+    if (wx.$isEmpty(pwd) || wx.$isEmpty(repwd) || wx.$isEmpty(oldpwd)) {
+      return;
+    }
+    if (pwd.length < 6) {
+      wx.showModal({
+        title: '提示',
+        content: '密码为6位以上字符',
+      })
+      return;
+    }
+    if (pwd != repwd) {
+      wx.showModal({
+        title: '提示',
+        content: '两次密码不一致',
+      })
+      return;
+    }
+    wx.showLoading("正在保存");
+    var param = {
+      "newpwd": pwd,
+      "renewpwd": repwd,
+      "oldpwd": oldpwd
+    }
+    wx.$doPost('/v1/pwdset', param, function(ok, ret) {
+      wx.hideLoading();
+      if (ok) {
+        ret = ret.data;
+
+        if (ret.code == 200) {
+          wx.showModal({
+            title: '提示',
+            content: '修改密码成功',
+            showCancel: false,
+            success(res) {
+              wx.navigateBack({})
+            }
+          })
+        } else {
+          if (ret.code == -1) {
+            wx.removeStorageSync("token");
+            wx.showModal({
+              title: '提示',
+              content: ret.msg,
+              duration: 2000
+            })
+            wx.navigateTo({
+              url: '../wxlogin/wxlogin',
+            })
+          } else {
+            wx.showModal({
+              title: '错误',
+              content: ret.msg,
+
+              duration: 4000
+            })
+          }
+        }
+      } else {
+
+        wx.showModal({
+          title: '错误',
+          content: ret.msg,
+          duration: 4000
+        })
+      }
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/editpwd/editpwd.json b/pages/editpwd/editpwd.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/editpwd/editpwd.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/editpwd/editpwd.wxml b/pages/editpwd/editpwd.wxml
new file mode 100644
index 0000000..0cb1d95
--- /dev/null
+++ b/pages/editpwd/editpwd.wxml
@@ -0,0 +1,27 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="inline-item center" style="margin-top: 50rpx;">
+      <view class="input-desc">
+        原登录密码
+      </view>
+      <input  placeholder="6位以上字符"  password="true" style="width: 70%;" bindinput="setOriPassword"></input>
+    </view>
+
+     <view class="inline-item center"  style="margin-top: 50rpx;">
+      <view class="input-desc">
+        新登录密码
+      </view>
+      <input  placeholder="6位以上字符" password="true" style="width: 70%;" bindinput="setPassword"></input>
+    </view>
+    <view class="inline-item center" style="">
+      <view class="input-desc">
+        确认密码
+      </view>
+      <input  placeholder="请再次确认密码" password="true" style="width: 70%;" bindinput="setPassword2"></input>
+    </view>
+
+    <button bindtap="doNext" class="long-btn" style="width: 90%;">确认修改</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/editpwd/editpwd.wxss b/pages/editpwd/editpwd.wxss
new file mode 100644
index 0000000..910232e
--- /dev/null
+++ b/pages/editpwd/editpwd.wxss
@@ -0,0 +1 @@
+/* pages/editpwd/editpwd.wxss */
\ No newline at end of file
diff --git a/pages/findpaypwd/findpaypwd.js b/pages/findpaypwd/findpaypwd.js
new file mode 100644
index 0000000..b01a5bf
--- /dev/null
+++ b/pages/findpaypwd/findpaypwd.js
@@ -0,0 +1,166 @@
+// pages/findpaypwd/findpaypwd.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    phone: '',
+    code: '',
+    sendTime: '获取验证码',
+    sendColor: 'rgb(124, 255, 112)',
+    snsMsgWait: 30,
+    smsFlag: true
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+    wx.setNavigationBarTitle({
+      title: '获取验证码',
+    })
+   
+    var phone = wx.getStorageSync('phoneX');
+    console.log(phone);
+    if (!wx.$isEmpty(phone)) {
+      this.setData({
+        phone: phone
+      })
+    } else {
+      phone = wx.getStorageSync('phone');
+      this.setData({
+        phone: phone
+      })
+    }
+  },
+  setPhone: function (e) {
+    this.setData({
+      phone: e.detail.value
+    })
+  },
+
+  setCode: function(e) {
+    this.setData({
+      code: e.detail.value
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+
+  doNext: function() {
+    var code = this.data.code;
+    if (wx.$isEmpty(code)) {
+      return;
+    }
+    var param = {
+      "code": code,
+    }
+    wx.showLoading({
+      title: '加载中',
+    })
+    wx.$doPost('/v1/checkcode', param, function(ok, ret) {
+      wx.hideLoading();
+      if (ok) {
+        
+        if (ret.data.code == 200) {
+          wx.setStorageSync("randomcode", ret.data.randcode);
+          wx.setStorageSync("paypwdtype", "find");
+        
+            wx.navigateTo({
+              url: '../paypwdset/paypwdset',
+            })
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.message,
+            duration: 2000
+          })
+
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: ret.data.message,
+          duration: 2000
+        })
+
+      }
+    })
+  },
+
+  getCode: function() {
+    if (false == this.data.smsFlag) {
+      return;
+    }
+    wx.$doCountdown(this);
+
+
+    wx.$doPost('/v1/code', {}, function(ok, ret) {
+     
+      if (ok) {
+        if (ret.data.code == 200) {} else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+
+            duration: 2000
+          })
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.data.status + "，请稍后再试",
+          duration: 2000
+        })
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/findpaypwd/findpaypwd.json b/pages/findpaypwd/findpaypwd.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/findpaypwd/findpaypwd.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/findpaypwd/findpaypwd.wxml b/pages/findpaypwd/findpaypwd.wxml
new file mode 100644
index 0000000..3828936
--- /dev/null
+++ b/pages/findpaypwd/findpaypwd.wxml
@@ -0,0 +1,26 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="inline-item center" style="margin-top: 50rpx;">
+      <view class="input-desc">
+        手机号
+      </view>
+      <input value="{{phone}}" maxlength="11" placeholder="请输入市民卡预留的手机号" style="width: 70%;" bindinput="setPhone"></input>
+    </view>
+    <view class="inline-item center">
+
+      <view class="input-desc">
+        验证码
+      </view>
+      <input placeholder="请输入验证码" type="number" style="width:45%" bindinput="setCode"></input>
+      <view class="authcode center" style="color:{{sendColor}}" bindtap="getCode">
+        {{sendTime}}
+      </view>
+
+    </view>
+
+
+    <button bindtap="doNext" class="long-btn" style="width: 90%;">下一步</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/findpaypwd/findpaypwd.wxss b/pages/findpaypwd/findpaypwd.wxss
new file mode 100644
index 0000000..50214de
--- /dev/null
+++ b/pages/findpaypwd/findpaypwd.wxss
@@ -0,0 +1 @@
+/* pages/findpaypwd/findpaypwd.wxss */
\ No newline at end of file
diff --git a/pages/index/index.js b/pages/index/index.js
new file mode 100644
index 0000000..aec3f72
--- /dev/null
+++ b/pages/index/index.js
@@ -0,0 +1,194 @@
+//index.js
+//获取应用实例
+const app = getApp()
+
+Page({
+  data: {
+    bind: '',
+    bindcolor: '',
+    sign: '',
+    signcolor: '',
+    userInfo: {},
+    hasUserInfo: false,
+    canIUse: wx.canIUse('button.open-type.getUserInfo'),
+
+  },
+  tabChange(e) {
+    console.log('tab change', e)
+  },
+
+  //事件处理函数
+  bindViewTap: function() {
+    wx.navigateTo({
+      url: '../logs/logs'
+    })
+  },
+  testButton: function() {
+
+    console.log(app.globalData.userInfo)
+    wx.showModal({
+      title: '提示',
+      content: '该功能暂未完成，完整版请使用大理市民卡app',
+
+      duration: 2000
+    })
+  },
+  onLoad: function() {
+
+    var brightness=wx.getStorageSync("brightness");
+
+    if(!wx.$isEmpty(brightness)){
+      wx.setScreenBrightness({
+        value: brightness,
+      })
+    }
+
+    var userid = wx.getStorageSync("userid");
+    var signed = wx.getStorageSync("signed");
+    if (wx.$isEmpty(userid)) {
+      this.setData({
+        bind: '未绑定',
+        bindcolor: 'red'
+      })
+
+    } else {
+      this.setData({
+        bind: '已绑定',
+        bindcolor: 'green'
+      })
+    }
+    if (wx.$isEmpty(signed) || signed != 'yes') {
+      this.setData({
+        sign: '未签约',
+        signcolor: 'red'
+      })
+    } else {
+      this.setData({
+        sign: '已签约',
+        signcolor: 'green'
+      })
+    }
+
+    // if (app.globalData.userInfo) {
+    //   this.setData({
+    //     userInfo: app.globalData.userInfo,
+    //     hasUserInfo: true
+    //   })
+    // } else if (this.data.canIUse) {
+    //   // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
+    //   // 所以此处加入 callback 以防止这种情况
+    //   app.userInfoReadyCallback = res => {
+    //     this.setData({
+    //       userInfo: res.userInfo,
+    //       hasUserInfo: true
+    //     })
+    //   }
+    // } else {
+    //   // 在没有 open-type=getUserInfo 版本的兼容处理
+    //   wx.getUserInfo({
+    //     success: res => {
+    //       app.globalData.userInfo = res.userInfo
+    //       this.setData({
+    //         userInfo: res.userInfo,
+    //         hasUserInfo: true
+    //       })
+    //     }
+    //   })
+    // }
+  },
+  getUserInfo: function(e) {
+    console.log(e)
+    app.globalData.userInfo = e.detail.userInfo
+    this.setData({
+      userInfo: e.detail.userInfo,
+      hasUserInfo: true
+    })
+  },
+  pageredirect: function(e) {
+    wx.navigateTo({
+      url: '../wxlogin/wxlogin'
+    })
+  },
+  doBind: function() {
+    wx.navigateTo({
+      url: '../bindcard/bindcard'
+    })
+  },
+  doSign: function() {
+    var check = wx.$checkBankcard();
+    if (!check) {
+      return;
+    }
+    wx.navigateTo({
+      url: '../signxy/signxy'
+    })
+  },
+  doCardLost: function() {
+    wx.navigateTo({
+      url: '../cardlost/cardlost'
+    })
+  },
+  doScan: function() {
+    var check = wx.$checkBankcard();
+    if (!check) {
+    
+      return;
+    }
+
+    wx.scanCode({
+      success(ret) {
+        console.log(ret);
+
+        var url = ret.result;
+       
+
+        if (url.indexOf("yy.dlsmk.cn") >= 0) {
+          if (url.indexOf("?") > 0) {
+            url = url + '&userid=' + userid;
+          } else {
+            url = url + '?userid=' + userid;
+          }
+          wx.setStorageSync('trueurl', url);
+          wx.navigateTo({
+            url: '../scan2/scan2'
+          })
+        }
+        wx.setStorageSync('scanurl', url);
+        console.log(url);
+        wx.navigateTo({
+          url: '../scan/scan'
+        })
+        //}
+      }
+    })
+
+  },
+  doGetBill: function() {
+    var check = wx.$checkBankcard();
+    if (!check) {
+      return;
+    }
+    wx.navigateTo({
+      url: '../bill/bill',
+    })
+  },
+  doQrcode: function() {
+    var check = wx.$checkBankcard();
+    if (!check) {
+      return;
+    }
+    wx.navigateTo({
+      url: '../qrcode/qrcode',
+    })
+  },
+  doSafety: function() {
+    // var check = checkBankcard();
+    // if (!check) {
+    //   return;
+    // }
+    wx.navigateTo({
+      url: '../safety/safety',
+    })
+  }
+
+})
\ No newline at end of file
diff --git a/pages/index/index.json b/pages/index/index.json
new file mode 100644
index 0000000..e619f4d
--- /dev/null
+++ b/pages/index/index.json
@@ -0,0 +1,6 @@
+{
+  "usingComponents": {
+    
+  },
+  "navigationBarTitleText": "大理市民卡"
+}
\ No newline at end of file
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
new file mode 100644
index 0000000..257b1c0
--- /dev/null
+++ b/pages/index/index.wxml
@@ -0,0 +1,64 @@
+<view class="container">
+  <view class="page-body">
+    <view class="global-background">
+      <view class="page-top"></view>
+
+      <view class="whitebox">
+        <view class="row-item" style="margin-top:30%">
+          <button class="flexButton" bindtap="doScan">
+            <image src="/weui/images/scan.jpg" class="boximage roundImage"></image>
+            <text class="qrcodeText">扫一扫</text>
+          </button>
+          <button class="flexButton" bindtap="doQrcode">
+            <image src="/weui/images/qrcode.jpg" class="boximage roundImage"></image>
+            <text class="qrcodeText">付款码</text>
+          </button>
+        </view>
+
+
+      </view>
+
+
+      <view class="row-item " style="position:relative;width:100%;background-color:white;padding-top:80rpx">
+
+        <button class="flexButton" hover-class="flexButton-hover" bindtap="doCardLost">
+          <image src="/weui/images/icon_card.png" class="boximage"></image>
+          <text class="btn-text">市民卡挂失</text>
+        </button>
+        <button class="flexButton" hover-class="flexButton-hover" style="border:1px solid #ccc; border-width:0 1px;" bindtap="doGetBill">
+          <image src="/weui/images/icon_bill.png" class="boximage"></image>
+          <text class="btn-text">账单查询</text>
+        </button>
+        <button class="flexButton " hover-class="flexButton-hover" bindtap="doSafety">
+          <image src="/weui/images/icon_securty.png" class="boximage"></image>
+          <text class="btn-text">账户安全</text>
+        </button>
+
+      </view>
+
+      <view class=" center inline-item" bindtap="doBind" style="margin-top:1%;">
+        <view style="float:left">
+          银行卡
+        </view>
+        <view style="float:right;display: block;" style="margin-left:75%;color:{{bindcolor}}">
+          {{bind}}
+        </view>
+        <view class="arrow-icon" style="float:right;">
+          >
+        </view>
+      </view>
+      <view class=" center inline-item" bindtap="doSign" >
+        <view style="float:left">
+          签约代扣免密付
+        </view>
+        <view style="float:right;display: block;" style="margin-left:62%;color:{{signcolor}}">
+          {{sign}}
+        </view>
+        <view class="arrow-icon" style="float:right;">
+          >
+        </view>
+      </view>
+    </view>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
new file mode 100644
index 0000000..f3953e8
--- /dev/null
+++ b/pages/index/index.wxss
@@ -0,0 +1,130 @@
+/**index.wxss**/
+
+
+.btn-text{
+  margin-top: 10rpx;
+  font-size: 22rpx;
+  
+}
+.userinfo {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+
+.userinfo-avatar {
+  width: 128rpx;
+  height: 128rpx;
+  margin: 20rpx;
+  border-radius: 50%;
+  margin-top: 30rpx;
+}
+
+.userinfo-nickname {
+  color: #aaa;
+  z-index: 2;
+}
+
+.usermotto {
+  margin-top: 200px;
+}
+
+.demo-text-1 {
+  background: black;
+}
+
+
+
+.page-section-title {
+  font-size: 20px;
+  margin-left: 10px;
+  font-weight: bold;
+  color: white;
+}
+
+.whitebox {
+  border: 2px solid white;
+  box-shadow: 1px 2px 5px #d6d6d6;
+  border-radius: 5px;
+  width: 80%;
+  height: 27%;
+  top: 8%;
+  left: 10%;
+  background-color: white;
+  position: absolute;
+  z-index: 1;
+}
+
+.boximage {
+  width: 66rpx;
+  height: 66rpx;
+ 
+  margin: 0 auto;
+  margin-top: 25rpx;
+  position: relative;
+}
+
+.flexButton {
+  border-radius: 0px;
+  vertical-align: bottom;
+  height: 150rpx;
+  padding: 0rpx;
+  background-color: white;
+  float: left;
+  /* margin-top: 37%; */
+  padding-bottom: 20rpx;
+  display: flex; /*flex居中排版*/
+  flex-direction: column;
+}
+
+.roundImage{
+ border-radius: 50%;
+ width: 88rpx;
+  margin: 0 auto;
+  height: 88rpx;
+}
+
+
+.flexButton-hover {
+  background-color: #d6d6d6;
+}
+
+.qrcodeText {
+  margin-top: 10rpx;
+  font-size: 22rpx;
+  color: #aaa;
+}
+
+
+.row-item {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-around;
+}
+
+.col-item {
+  display: flex;
+  flex-direction: col;
+  justify-content: space-around;
+}
+
+.text{
+  text-align: justify;
+}
+.text::after{
+  width: 100%;
+  display: inline-block;
+  content: '';  
+}
+.click-bar{
+  position:relative;
+  width:100%;
+  background-color:white;
+  height:2rem;
+  border: 1px solid rgb(240, 240, 240);
+  border-style: solid none none none;
+}
+
+
+
+
diff --git a/pages/loadpage/loadpage.js b/pages/loadpage/loadpage.js
new file mode 100644
index 0000000..642b288
--- /dev/null
+++ b/pages/loadpage/loadpage.js
@@ -0,0 +1,141 @@
+// pages/loadpage/loadpage.js
+function doLogin() {
+
+}
+
+Page({
+
+
+
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    hasSign: true,
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  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.navigateTo({
+            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',
+          // })
+        }
+      }
+    })
+  },
+
+  goRegister: function() {
+    wx.navigateTo({
+      url: '../register/register',
+    })
+  },
+
+  goLogin: function () {
+    wx.navigateTo({
+      url: '../wxlogin/wxlogin',
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/loadpage/loadpage.json b/pages/loadpage/loadpage.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/loadpage/loadpage.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/loadpage/loadpage.wxml b/pages/loadpage/loadpage.wxml
new file mode 100644
index 0000000..b09fd8b
--- /dev/null
+++ b/pages/loadpage/loadpage.wxml
@@ -0,0 +1,25 @@
+<view class="container">
+
+  <view class="global-background loadpage" style="background-color:rgb(21, 106, 180);">
+
+    <image src="/weui/images/dlsmk.jpg" class="center logoimage loadpage" style="margin-top:20%">
+    </image>
+
+   
+      <button wx:if="{{!hasSign}}" bindtap="goRegister" class="long-btn" style="width: 60%;margin-top:60%;)">我要注册</button>
+      <view class="login-btn center " wx:if="{{!hasSign}}" bindtap="goLogin" style="">
+        直接登录
+      </view>
+    
+
+
+    <view class="foot" style="bottom:30rpx">
+      大理市民卡
+    </view>
+    <view class="foot">
+      © 2019 上海树维
+    </view>
+  </view>
+
+
+</view>
\ No newline at end of file
diff --git a/pages/loadpage/loadpage.wxss b/pages/loadpage/loadpage.wxss
new file mode 100644
index 0000000..46d733b
--- /dev/null
+++ b/pages/loadpage/loadpage.wxss
@@ -0,0 +1,36 @@
+/* pages/loadpage/loadpage.wxss */
+
+.foot {
+  color: white;
+  font-size: 25rpx;
+  position: fixed;
+  bottom: 0;
+  display: flex;
+  justify-content: center;
+  margin: 0 auto;
+  width: 100%;
+}
+
+.loadpage{
+  background-color: rgb(21, 106, 180);
+    background-image: linear-gradient(rgb(255,255,255),rgb(21, 106, 180));
+}
+
+.logoimage {
+  width: 266rpx;
+  height: 266rpx;
+   border-radius: 20%;
+  margin: 0 auto;
+  margin-top: 25rpx;
+  position: relative;
+
+  
+}
+.login-btn {
+  margin-top: 30rpx;
+  color: white;
+
+  font-size: 28rpx;
+
+
+}
diff --git a/pages/logs/logs.js b/pages/logs/logs.js
new file mode 100644
index 0000000..b2b967d
--- /dev/null
+++ b/pages/logs/logs.js
@@ -0,0 +1,15 @@
+//logs.js
+const util = require('../../utils/util.js')
+
+Page({
+  data: {
+    logs: []
+  },
+  onLoad: function () {
+    this.setData({
+      logs: (wx.getStorageSync('logs') || []).map(log => {
+        return util.formatTime(new Date(log))
+      })
+    })
+  }
+})
diff --git a/pages/logs/logs.json b/pages/logs/logs.json
new file mode 100644
index 0000000..3ee76c1
--- /dev/null
+++ b/pages/logs/logs.json
@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "查看启动日志",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/logs/logs.wxml b/pages/logs/logs.wxml
new file mode 100644
index 0000000..b5a85ac
--- /dev/null
+++ b/pages/logs/logs.wxml
@@ -0,0 +1,6 @@
+<!--logs.wxml-->
+<view class="container log-list">
+  <block wx:for="{{logs}}" wx:for-item="log">
+    <text class="log-item">{{index + 1}}. {{log}}</text>
+  </block>
+</view>
diff --git a/pages/logs/logs.wxss b/pages/logs/logs.wxss
new file mode 100644
index 0000000..94d4b88
--- /dev/null
+++ b/pages/logs/logs.wxss
@@ -0,0 +1,8 @@
+.log-list {
+  display: flex;
+  flex-direction: column;
+  padding: 40rpx;
+}
+.log-item {
+  margin: 10rpx;
+}
diff --git a/pages/paypwdmng/paypwdmng.js b/pages/paypwdmng/paypwdmng.js
new file mode 100644
index 0000000..8057218
--- /dev/null
+++ b/pages/paypwdmng/paypwdmng.js
@@ -0,0 +1,78 @@
+// pages/paypwdmng/paypwdmng.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  changePayPwd: function () {
+    wx.navigateTo({
+      url: '../editpaypwd/editpaypwd',
+    })
+  },
+
+  findPayPwd: function () {
+    wx.navigateTo({
+      url: '../findpaypwd/findpaypwd',
+    })
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/paypwdmng/paypwdmng.json b/pages/paypwdmng/paypwdmng.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/paypwdmng/paypwdmng.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/paypwdmng/paypwdmng.wxml b/pages/paypwdmng/paypwdmng.wxml
new file mode 100644
index 0000000..a1d7d3d
--- /dev/null
+++ b/pages/paypwdmng/paypwdmng.wxml
@@ -0,0 +1,25 @@
+<view class="container">
+  <view class="global-background">
+  
+    <view class=" center inline-item" bindtap="changePayPwd" style="margin-top:2%;">
+      <view style="float:left">
+        修改支付密码
+      </view>
+      
+      <view class="arrow-icon" style="float:right;margin-left:75%">
+        >
+      </view>
+    </view>
+    <view class=" center inline-item" bindtap="findPayPwd">
+      <view style="float:left">
+        找回支付密码
+      </view>
+      <view class="arrow-icon" style="float:right;margin-left:75%">
+        >
+      </view>
+    </view>
+
+    <button class="long-btn" bindtap="doLogout" style="background-color:red;width:80%;margin-top:100rpx">退出登录</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/paypwdmng/paypwdmng.wxss b/pages/paypwdmng/paypwdmng.wxss
new file mode 100644
index 0000000..5d48832
--- /dev/null
+++ b/pages/paypwdmng/paypwdmng.wxss
@@ -0,0 +1 @@
+/* pages/paypwdmng/paypwdmng.wxss */
\ No newline at end of file
diff --git a/pages/paypwdset/paypwdset.js b/pages/paypwdset/paypwdset.js
new file mode 100644
index 0000000..7cac74b
--- /dev/null
+++ b/pages/paypwdset/paypwdset.js
@@ -0,0 +1,166 @@
+// pages/paypwdset/paypwdset.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    password:'',
+    password2:''
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    wx.setNavigationBarTitle({
+      title: '设置支付密码',
+    })
+  },
+
+  setPassword: function (e) {
+    this.setData({
+      password: e.detail.value
+    })
+  },
+
+  setPassword2: function (e) {
+    this.setData({
+      password2: e.detail.value
+    })
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  },
+  doNext: function () {
+    var pwd = this.data.password;
+    var repwd = this.data.password2;
+    if (wx.$isEmpty(pwd) || wx.$isEmpty(repwd)) {
+      return;
+    }
+    if (pwd.length != 6) {
+      wx.showModal({
+        title: '提示',
+        content: '密码为6位数字',
+      })
+      return;
+    }
+    if (pwd != repwd) {
+      wx.showModal({
+        title: '提示',
+        content: '两次密码不一致',
+      })
+      return;
+    }
+    var paypwdtype = wx.getStorageSync("paypwdtype");
+    if (wx.$isEmpty(paypwdtype)) {
+      paypwdtype = "new"
+    }
+    var randomcode = wx.getStorageSync("randomcode");
+    if (wx.$isEmpty(randomcode)) {
+      randomcode = ""
+    }
+    wx.showLoading({
+      title: '正在保存',
+    })
+    var param = {
+      "pwd": pwd,
+      "repwd": repwd,
+      "type": paypwdtype,
+      "randcode": randomcode
+    }
+    wx.$doPost('/v1/paypwd',param, function (ok, ret) {
+      if (ok) {
+        wx.hideLoading();
+        if (ret.data.code == 200) {
+          wx.removeStorageSync("randomcode");
+       
+          var signed = wx.getStorageSync("signed");
+          wx.setStorageSync("paypwdset", ret.data.paypwdset);
+          wx.removeStorageSync("paypwdtype");
+          if (wx.$isEmpty(signed) || signed != 'yes') {
+            wx.navigateTo({
+              url: '../signxy/signxy',
+            })
+     
+          } else {
+            wx.showModal({
+              title: '提示',
+              content: '支付密码设置成功',
+              showCancel:false,
+              success(res) {
+                wx.navigateTo({
+                  url: '../index/index',
+                })
+              }
+            })
+            $.alert("支付密码设置成功", "提示", function () {
+              if (paypwdtype == 'find') {
+                window.location = 'security.html'
+              } else {
+                window.location = 'main.html'
+              }
+            });
+          }
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+          })
+       
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.data.status + "，请稍后再试",
+        })
+   
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/paypwdset/paypwdset.json b/pages/paypwdset/paypwdset.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/paypwdset/paypwdset.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/paypwdset/paypwdset.wxml b/pages/paypwdset/paypwdset.wxml
new file mode 100644
index 0000000..75e4cb3
--- /dev/null
+++ b/pages/paypwdset/paypwdset.wxml
@@ -0,0 +1,20 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="inline-item center" style="margin-top: 50rpx;">
+      <view class="input-desc">
+        支付密码
+      </view>
+      <input maxlength="6" placeholder="6位密码" type="number"  password="true" style="width: 70%;" bindinput="setPassword"></input>
+    </view>
+    <view class="inline-item center" style="">
+      <view class="input-desc">
+        确认密码
+      </view>
+      <input maxlength="6" placeholder="6位密码" type="number" password="true" style="width: 70%;" bindinput="setPassword2"></input>
+    </view>
+
+    <button bindtap="doNext" class="long-btn" style="width: 90%;">保存</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/paypwdset/paypwdset.wxss b/pages/paypwdset/paypwdset.wxss
new file mode 100644
index 0000000..503d28a
--- /dev/null
+++ b/pages/paypwdset/paypwdset.wxss
@@ -0,0 +1 @@
+/* pages/paypwdset/paypwdset.wxss */
\ No newline at end of file
diff --git a/pages/policy/policy.js b/pages/policy/policy.js
new file mode 100644
index 0000000..6ecebc2
--- /dev/null
+++ b/pages/policy/policy.js
@@ -0,0 +1,66 @@
+// pages/policy/policy.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/policy/policy.json b/pages/policy/policy.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/policy/policy.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/policy/policy.wxml b/pages/policy/policy.wxml
new file mode 100644
index 0000000..dc8f816
--- /dev/null
+++ b/pages/policy/policy.wxml
@@ -0,0 +1,72 @@
+<!--pages/policy/policy.wxml-->
+<text>
+本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务，本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外，在未征得您事先许可的情况下，本应用不会将这些信息对外披露或向第三方提供。本应用会不时更新本隐私权政策。 您在同意本应用服务使用协议之时，即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本应用服务使用协议不可分割的一部分。
+ 
+1. 适用范围 
+
+(a) 在您注册本应用帐号时，您根据本应用要求提供的个人注册信息； 
+
+(b) 在您使用本应用网络服务，或访问本应用平台网页时，本应用自动接收并记录的您的浏览器和计算机上的信息，包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据；
+ 
+(c) 本应用通过合法途径从商业伙伴处取得的用户个人数据。 
+
+您了解并同意，以下信息不适用本隐私权政策： 
+
+(a) 您在使用本应用平台提供的搜索服务时输入的关键字信息； 
+
+(b) 本应用收集到的您在本应用发布的有关信息数据，包括但不限于参与活动、成交信息及评价详情； 
+
+(c) 违反法律规定或违反本应用规则行为及本应用已对您采取的措施。 
+
+2. 信息使用 
+(a)本应用不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息，除非事先得到您的许可，或该第三方和本应用（含本应用关联公司）单独或共同为您提供服务，且在该服务结束后，其将被禁止访问包括其以前能够访问的所有这些资料。
+ 
+(b) 本应用亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何本应用平台用户如从事上述活动，一经发现，本应用有权立即终止与该用户的服务协议。
+ 
+(c) 为服务用户的目的，本应用可能通过使用您的个人信息，向您提供您感兴趣的信息，包括但不限于向您发出产品和服务信息，或者与本应用合作伙伴共享信息以便他们向您发送有关其产品和服务的信息（后者需要您的事先同意）。
+ 
+3. 信息披露 
+
+在如下情况下，本应用将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息：
+ 
+(a) 经您事先同意，向第三方披露；
+ 
+(b)为提供您所要求的产品和服务，而必须和第三方分享您的个人信息；
+ 
+(c) 根据法律的有关规定，或者行政或司法机构的要求，向第三方或者行政、司法机构披露；
+ 
+(d) 如您出现违反中国有关法律、法规或者本应用服务协议或相关规则的情况，需要向第三方披露；
+ 
+(e) 如您是适格的知识产权投诉人并已提起投诉，应被投诉人要求，向被投诉人披露，以便双方处理可能的权利纠纷；
+ 
+(f) 在本应用平台上创建的某一交易中，如交易任何一方履行或部分履行了交易义务并提出信息披露请求的，本应用有权决定向该用户提供其交易对方的联络方式等必要信息，以促成交易的完成或纠纷的解决。
+ 
+(g) 其它本应用根据法律、法规或者网站政策认为合适的披露。
+ 
+4. 信息存储和交换
+ 
+本应用收集的有关您的信息和资料将保存在本应用及（或）其关联公司的服务器上，这些信息和资料可能传送至您所在国家、地区或本应用收集信息和资料所在地的境外并在境外被访问、存储和展示。
+ 
+5. Cookie的使用
+ 
+(a) 在您未拒绝接受cookies的情况下，本应用会在您的计算机上设定或取用cookies ，以便您能登录或使用依赖于cookies的本应用平台服务或功能。本应用使用cookies可为您提供更加周到的个性化服务，包括推广服务。
+ 
+(b) 您有权选择接受或拒绝接受cookies。您可以通过修改浏览器设置的方式拒绝接受cookies。但如果您选择拒绝接受cookies，则您可能无法登录或使用依赖于cookies的本应用网络服务或功能。
+ 
+(c) 通过本应用所设cookies所取得的有关信息，将适用本政策。
+ 
+6. 信息安全
+ 
+(a) 本应用帐号均有安全保护功能，请妥善保管您的用户名及密码信息。本应用将通过对用户密码进行加密等安全措施确保您的信息不丢失，不被滥用和变造。尽管有前述安全措施，但同时也请您注意在信息网络上不存在“完善的安全措施”。
+ 
+(b) 在使用本应用网络服务进行网上交易时，您不可避免的要向交易对方或潜在的交易对
+ 
+7.本隐私政策的更改
+ 
+(a)如果决定更改隐私政策，我们会在本政策中、本公司网站中以及我们认为适当的位置发布这些更改，以便您了解我们如何收集、使用您的个人信息，哪些人可以访问这些信息，以及在什么情况下我们会透露这些信息。
+ 
+(b)本公司保留随时修改本政策的权利，因此请经常查看。如对本政策作出重大更改，本公司会通过网站通知的形式告知。
+ 
+方披露自己的个人信息，如联络方式或者邮政地址。请您妥善保护自己的个人信息，仅在必要的情形下向他人提供。如您发现自己的个人信息泄密，尤其是本应用用户名及密码发生泄露，请您立即联络本应用客服，以便本应用采取相应措施。
+ 
+</text>
diff --git a/pages/policy/policy.wxss b/pages/policy/policy.wxss
new file mode 100644
index 0000000..a9ec6b0
--- /dev/null
+++ b/pages/policy/policy.wxss
@@ -0,0 +1 @@
+/* pages/policy/policy.wxss */
\ No newline at end of file
diff --git a/pages/pwdset/pwdset.js b/pages/pwdset/pwdset.js
new file mode 100644
index 0000000..5b64a28
--- /dev/null
+++ b/pages/pwdset/pwdset.js
@@ -0,0 +1,157 @@
+// pages/paypwdset/paypwdset.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    password: '',
+    password2: ''
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+    wx.setNavigationBarTitle({
+      title: '设置支付密码',
+    })
+  },
+
+  setPassword: function(e) {
+    this.setData({
+      password: e.detail.value
+    })
+  },
+
+  setPassword2: function(e) {
+    this.setData({
+      password2: e.detail.value
+    })
+  },
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+  doNext: function() {
+    var pwd = this.data.password;
+    var repwd = this.data.password2;
+    if (wx.$isEmpty(pwd) || wx.$isEmpty(repwd)) {
+      return;
+    }
+    if (pwd.length < 6) {
+      wx.showModal({
+        title: '提示',
+        content: '密码为6位以上字符',
+      })
+      return;
+    }
+    if (pwd != repwd) {
+      wx.showModal({
+        title: '提示',
+        content: '两次密码不一致',
+      })
+      return;
+    }
+
+    var uid = wx.getStorageSync("uid");
+    var code = wx.getStorageSync("code");
+    wx.showLoading({
+      title: '正在保存',
+    })
+    var param = {
+      "pwd": pwd,
+      "repwd": repwd,
+      "id": uid,
+      "random": code
+    }
+    wx.$doPost('/i/register', param, function(ok, ret) {
+      wx.hideLoading();
+      if (ok) {
+
+        if (ret.data.code == 200) {
+          wx.removeStorageSync("code");
+
+          wx.setStorageSync("phoneX", ret.phone);
+          wx.setStorageSync("token", ret.token);
+          wx.setStorageSync("userid", ret.userid);
+          wx.setStorageSync("tenantid", ret.tenantid);
+          wx.setStorageSync("tokenexpire", ret.expire);
+          wx.setStorageSync("tokentime", ret.now);
+          wx.setStorageSync("signed", ret.signed);
+          wx.setStorageSync("paypwdset", ret.paypwdsetd);
+
+
+          wx.showModal({
+            title: '提示',
+            content: '密码设置成功，您可以登录系统了',
+            showCancel: false,
+            success(res) {
+              wx.navigateTo({
+                url: '../wxlogin/wxlogin',
+              })
+            }
+          })
+
+
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+          })
+
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.data.status + "，请稍后再试",
+        })
+
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/pwdset/pwdset.json b/pages/pwdset/pwdset.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/pwdset/pwdset.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/pwdset/pwdset.wxml b/pages/pwdset/pwdset.wxml
new file mode 100644
index 0000000..5f697c0
--- /dev/null
+++ b/pages/pwdset/pwdset.wxml
@@ -0,0 +1,20 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="inline-item center" style="margin-top: 50rpx;">
+      <view class="input-desc">
+        登录密码
+      </view>
+      <input  placeholder="6位以上字符"  password="true" style="width: 70%;" bindinput="setPassword"></input>
+    </view>
+    <view class="inline-item center" style="">
+      <view class="input-desc">
+        确认密码
+      </view>
+      <input  placeholder="6位以上字符"  password="true" style="width: 70%;" bindinput="setPassword2"></input>
+    </view>
+
+    <button bindtap="doNext" class="long-btn" style="width: 90%;">保存</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/pwdset/pwdset.wxss b/pages/pwdset/pwdset.wxss
new file mode 100644
index 0000000..d332841
--- /dev/null
+++ b/pages/pwdset/pwdset.wxss
@@ -0,0 +1 @@
+/* pages/pwdset/pwdset.wxss */
\ No newline at end of file
diff --git a/pages/qrcode/qrcode.js b/pages/qrcode/qrcode.js
new file mode 100644
index 0000000..12ce792
--- /dev/null
+++ b/pages/qrcode/qrcode.js
@@ -0,0 +1,106 @@
+// pages/qrcode/qrcode.js
+const QR = require('../../utils/weapp-qrcode.js')
+const app = getApp()
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    qrcodeURL: "",
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+    var that = this;
+
+    wx.getScreenBrightness({
+      success:function(e){
+        wx.setStorageSync("brightness", e.value);
+      }
+    })
+    wx.setNavigationBarTitle({
+      title: '付款码',
+    })
+    wx.setScreenBrightness({
+      value: 1,
+    })
+
+    wx.$doPost('/v1/qrcode', {}, function(ok, ret) {
+      console.log(ret);
+      if (ok) {
+        var imgData = QR.drawImg(ret.data.qrcode, {
+          typeNumber: 4,
+          errorCorrectLevel: 'M',
+          size: 500
+        })
+        that.setData({
+          qrcodeURL: imgData
+        })
+      }else{
+        wx.showModal({
+          title: '错误',
+          content: '获取二维码失败，请稍后再试',
+          showCancel: false,
+          success(res) {
+            wx.navigateBack({
+
+            })
+          }
+        })
+      }
+
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/qrcode/qrcode.json b/pages/qrcode/qrcode.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/qrcode/qrcode.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/qrcode/qrcode.wxml b/pages/qrcode/qrcode.wxml
new file mode 100644
index 0000000..50979e2
--- /dev/null
+++ b/pages/qrcode/qrcode.wxml
@@ -0,0 +1,4 @@
+<view class="center" style="flex-direction: column;">
+  <image src="{{qrcodeURL}}" style="width:400rpx;height:400rpx;margin-top:10%;"> </image>
+  <view style="margin-top:30rpx;color:#999">请将二维码对准扫描设备</view>
+</view>
\ No newline at end of file
diff --git a/pages/qrcode/qrcode.wxss b/pages/qrcode/qrcode.wxss
new file mode 100644
index 0000000..539b346
--- /dev/null
+++ b/pages/qrcode/qrcode.wxss
@@ -0,0 +1 @@
+/* pages/qrcode/qrcode.wxss */
\ No newline at end of file
diff --git a/pages/register/register.js b/pages/register/register.js
new file mode 100644
index 0000000..18a0c47
--- /dev/null
+++ b/pages/register/register.js
@@ -0,0 +1,197 @@
+// pages/register/register.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    phone: '',
+    code: '',
+    sendTime: '获取验证码',
+    sendColor: 'rgb(124, 255, 112)',
+    snsMsgWait: 30,
+    smsFlag: true,
+    privacyCheck:''
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+  showPolicy: function() {
+    wx.navigateTo({
+      url: '../policy/policy',
+    })
+  },
+  setPhone: function(e) {
+    this.setData({
+      phone: e.detail.value
+    })
+  },
+  setCode: function(e) {
+    this.setData({
+      code: e.detail.value
+    })
+  },
+  checkboxChange:function(e){
+    console.log(e.detail.value);
+    this.setData({
+      privacyCheck: e.detail.value
+    })
+
+  },
+  doRegister: function() {
+    var phone = this.data.phone;
+    var code=this.data.code;
+    if (wx.$isEmpty(phone)||wx.$isEmpty(code)) {
+      return;
+    }
+    var agree =this.data.privacyCheck;
+    if (wx.$isEmpty(agree)) {
+      wx.showModal({
+        title: '提示',
+        content: '请同意用户协议与隐私条款',
+      })
+      return;
+    }
+    wx.showLoading({
+      title: '加载中',
+    })
+    var name,platform,version;
+    wx.getSystemInfo({
+      success: function(res) {
+        name=res.model;
+        platform=res.platform;
+        version=res.version
+
+      },
+    })
+    
+    var param = {
+      "phone": phone,
+      "code": code,
+      "platform": name + "," + platform + "," + version,
+      "uuid": '123456'
+    }
+    
+    console.log(param);
+    wx.$doPost('/i/checkcode',param, function(ok, ret) {
+      if (ok) {
+        wx.hideLoading();
+        console.log(ret)
+        if (ret.data.code == 200) {
+          wx.setStorageSync("phone", phone);
+          wx.setStorageSync("uid", ret.data.uid);
+          wx.setStorageSync("code", ret.data.randcode);
+          wx.removeStorageSync('name');
+    
+          wx.navigateTo({
+            url: '../pwdset/pwdset',
+          })
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+
+            duration: 2000
+          })
+        }
+      } else {
+        wx.hideLoading();
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了，请稍后再试",
+
+          duration: 2000
+        })
+      }
+    })
+
+  },
+  getCode: function() {
+    var phone = this.data.phone;
+    if (wx.$isEmpty(phone)) {
+      return;
+    }
+    if (false == this.data.smsFlag) {
+      return;
+    }
+
+    wx.$doCountdown(this);
+    
+    var param = {
+      "phone": phone
+    }
+    wx.$doPost('/i/code', param, function(ok, ret) {
+      console.log(ret.data);
+      if (ok) {
+        if (ret.data.code == 200) {
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+
+            duration: 2000
+          })
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.status + "，请稍后再试",
+          duration: 2000
+        })
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/register/register.json b/pages/register/register.json
new file mode 100644
index 0000000..105ebcd
--- /dev/null
+++ b/pages/register/register.json
@@ -0,0 +1,4 @@
+{
+  "usingComponents": {}
+  
+}
\ No newline at end of file
diff --git a/pages/register/register.wxml b/pages/register/register.wxml
new file mode 100644
index 0000000..f52b4f0
--- /dev/null
+++ b/pages/register/register.wxml
@@ -0,0 +1,33 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="inline-item center" style="margin-top: 50rpx;">
+      <view class="input-desc">
+        手机号
+      </view>
+      <input value="{{phone}}" maxlength="11" placeholder="请输入市民卡预留的手机号" style="width: 70%;" bindinput="setPhone"></input>
+    </view>
+    <view class="inline-item center" style="">
+      <view class="input-desc">
+        验证码
+      </view>
+      <input placeholder="请输入验证码 " type="number" style="width:45%" bindinput="setCode"></input>
+      <view class="authcode center" style="color:{{sendColor}}" bindtap="getCode">
+        {{sendTime}}
+      </view>
+
+    </view>
+    <view class="inline-item" style="margin-top:30rpx;background-color:rgb(240, 240, 240)">
+      <checkbox-group bindchange="checkboxChange">
+        <label>
+          <checkbox value="1" class="checkbox" />我已阅读并同意
+        </label>
+      </checkbox-group>
+
+      <view class="policy" bindtap="showPolicy">《用户协议与隐私条款》</view>
+    </view>
+
+    <button bindtap="doRegister" class="long-btn" style="width: 90%;">注册</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/register/register.wxss b/pages/register/register.wxss
new file mode 100644
index 0000000..bb3e2e8
--- /dev/null
+++ b/pages/register/register.wxss
@@ -0,0 +1,8 @@
+/* pages/register/register.wxss */
+
+
+
+
+.policy{
+  color: rgb(82, 178, 243);
+}
\ No newline at end of file
diff --git a/pages/safety/safety.js b/pages/safety/safety.js
new file mode 100644
index 0000000..f3af90c
--- /dev/null
+++ b/pages/safety/safety.js
@@ -0,0 +1,87 @@
+// pages/safety/safety.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  },
+  doLogout:function(){
+    wx.removeStorageSync("token");
+    wx.redirectTo({
+      url: '../wxlogin/wxlogin',
+    })
+  },
+  changeLoginPwd:function(){
+    wx.navigateTo({
+      url: '../editpwd/editpwd',
+    })
+  },
+  changePayPwd: function () {
+    // var check = wx.$checkBankcard();
+    // if(!check){
+    //   return;
+    // }
+
+    wx.navigateTo({
+      url: '../paypwdmng/paypwdmng',
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/safety/safety.json b/pages/safety/safety.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/safety/safety.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/safety/safety.wxml b/pages/safety/safety.wxml
new file mode 100644
index 0000000..de0ab48
--- /dev/null
+++ b/pages/safety/safety.wxml
@@ -0,0 +1,25 @@
+<view class="container">
+  <view class="global-background">
+  
+    <view class=" center inline-item" bindtap="changeLoginPwd" style="margin-top:2%;">
+      <view style="float:left">
+        登录密码
+      </view>
+      
+      <view class="arrow-icon" style="float:right;margin-left:75%">
+        >
+      </view>
+    </view>
+    <view class=" center inline-item" bindtap="changePayPwd">
+      <view style="float:left">
+        支付密码
+      </view>
+      <view class="arrow-icon" style="float:right;margin-left:75%">
+        >
+      </view>
+    </view>
+
+    <button class="long-btn" bindtap="doLogout" style="background-color:red;width:80%;margin-top:100rpx">退出登录</button>
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/safety/safety.wxss b/pages/safety/safety.wxss
new file mode 100644
index 0000000..50a67d6
--- /dev/null
+++ b/pages/safety/safety.wxss
@@ -0,0 +1 @@
+/* pages/safety/safety.wxss */
\ No newline at end of file
diff --git a/pages/scan/scan.js b/pages/scan/scan.js
new file mode 100644
index 0000000..ba210b1
--- /dev/null
+++ b/pages/scan/scan.js
@@ -0,0 +1,89 @@
+// pages/scan/scan.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    scanurl: ''
+
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+    var url = wx.getStorageSync("scanurl");
+    this.setData({
+      scanurl:url
+    })
+
+  },
+
+  getTrueUrl: function(res) {
+    console.log(res.detail.src);
+    var url = res.detail.src;
+    if (url.indexOf("yy.dlsmk.cn") >= 0) {
+      console.log("succ");
+      var userid = wx.getStorageSync("userid");
+      if (url.indexOf("?") > 0) {
+        url = url + '&userid=' + userid;
+      } else {
+        url = url + '?userid=' + userid;
+      }
+      wx.setStorageSync("trueurl", url);
+      wx.navigateTo({
+        url: '../scan2/scan2',
+      })
+    }
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/scan/scan.json b/pages/scan/scan.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/scan/scan.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/scan/scan.wxml b/pages/scan/scan.wxml
new file mode 100644
index 0000000..0051e08
--- /dev/null
+++ b/pages/scan/scan.wxml
@@ -0,0 +1,4 @@
+<!--pages/scan/scan.wxml-->
+
+
+  <web-view src='{{scanurl}}' bindload='getTrueUrl'></web-view>
diff --git a/pages/scan/scan.wxss b/pages/scan/scan.wxss
new file mode 100644
index 0000000..7070bfd
--- /dev/null
+++ b/pages/scan/scan.wxss
@@ -0,0 +1 @@
+/* pages/scan/scan.wxss */
\ No newline at end of file
diff --git a/pages/scan2/scan2.js b/pages/scan2/scan2.js
new file mode 100644
index 0000000..ae2fc54
--- /dev/null
+++ b/pages/scan2/scan2.js
@@ -0,0 +1,70 @@
+// pages/scan2/scan2.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    url: '',
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function (options) {
+    var url = wx.getStorageSync("trueurl");
+    this.setData({
+      url: url
+    });
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function () {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function () {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function () {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function () {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function () {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/scan2/scan2.json b/pages/scan2/scan2.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/scan2/scan2.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/scan2/scan2.wxml b/pages/scan2/scan2.wxml
new file mode 100644
index 0000000..36e8b1b
--- /dev/null
+++ b/pages/scan2/scan2.wxml
@@ -0,0 +1,3 @@
+<view>
+<web-view src='{{url}}' ></web-view>
+</view>
diff --git a/pages/scan2/scan2.wxss b/pages/scan2/scan2.wxss
new file mode 100644
index 0000000..27cb8cb
--- /dev/null
+++ b/pages/scan2/scan2.wxss
@@ -0,0 +1 @@
+/* pages/scan2/scan2.wxss */
\ No newline at end of file
diff --git a/pages/signxy/signxy.js b/pages/signxy/signxy.js
new file mode 100644
index 0000000..85cc08b
--- /dev/null
+++ b/pages/signxy/signxy.js
@@ -0,0 +1,144 @@
+// pages/signxy/signxy.js
+Page({
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    url: '',
+    signMsg: '',
+    disabled: false,
+    xy: ''
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+     var signed = wx.getStorageSync("signed");
+     if (wx.$isEmpty(signed) || signed != 'yes') {
+       this.setData({
+         signMsg: '我已阅读并同意该协议',
+         disabled: false
+       })
+     } else {
+       this.setData({
+         signMsg: '您已签约',
+         disabled: true
+       })
+       return;
+     }
+    //  var that = this;
+    //  wx.showLoading("加载中");
+    //  wx.$doPost('/v1/bxy', {}, function(ok, ret, err) {
+    //    wx.hideLoading();
+    
+    //    if (ok) {
+    //      if (ret.data.code == 200) {
+
+    //       //  var text = ret.data.page;
+    //       //  that.setData({
+    //       //    xy: text.replace('/br/g', ' ')
+    //       //  })
+    //        //  this.setData({
+    //        //    url: ret.data.data.url
+    //        //  })
+    //        //  if (wx.$isEmpty(ret.data.signed) || ret.data.data.signed != 'yes') {
+    //        //  } else {
+    //        //  }
+    //      } else {
+    //        wx.showModal({
+    //          title: '错误',
+    //          content: ret.data.msg,
+    //        })
+    //      }
+    //    } else {
+    //      wx.showModal({
+    //        title: '错误',
+    //        content: '',
+    //      })
+    //    }
+    //  })
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+
+  signXY: function() {
+
+    wx.showLoading({
+      title: '正在请求',
+    })
+    var param = {
+      "agree": 'yes'
+    }
+    wx.$doPost('/v1/signbxy', param, function(ok, ret, err) {
+      wx.hideLoading();
+      if (ok) {
+
+        if (ret.data.code == 200) {
+          wx.setStorageSync("signed", ret.data.signed);
+          wx.redirectTo({
+            url: '../index/index',
+          })
+        } else {
+          wx.showModal({
+            title: '错误',
+            content: ret.data.msg,
+          })
+        }
+      } else {
+
+        wx.showModal({
+          title: '错误',
+          content: ret.data.status,
+        })
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/signxy/signxy.json b/pages/signxy/signxy.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/signxy/signxy.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/signxy/signxy.wxml b/pages/signxy/signxy.wxml
new file mode 100644
index 0000000..235e86c
--- /dev/null
+++ b/pages/signxy/signxy.wxml
@@ -0,0 +1,73 @@
+<text>
+
+本应用尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务，本应用会按照本隐私权政策的规定使用和披露您的个人信息。但本应用将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外，在未征得您事先许可的情况下，本应用不会将这些信息对外披露或向第三方提供。本应用会不时更新本隐私权政策。 您在同意本应用服务使用协议之时，即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本应用服务使用协议不可分割的一部分。
+
+1. 适用范围
+
+(a) 在您注册本应用帐号时，您根据本应用要求提供的个人注册信息；
+
+(b) 在您使用本应用网络服务，或访问本应用平台网页时，本应用自动接收并记录的您的浏览器和计算机上的信息，包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据；
+
+(c) 本应用通过合法途径从商业伙伴处取得的用户个人数据。
+
+您了解并同意，以下信息不适用本隐私权政策：
+
+(a) 您在使用本应用平台提供的搜索服务时输入的关键字信息；
+
+(b) 本应用收集到的您在本应用发布的有关信息数据，包括但不限于参与活动、成交信息及评价详情；
+
+(c) 违反法律规定或违反本应用规则行为及本应用已对您采取的措施。
+
+2. 信息使用
+(a)本应用不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息，除非事先得到您的许可，或该第三方和本应用（含本应用关联公司）单独或共同为您提供服务，且在该服务结束后，其将被禁止访问包括其以前能够访问的所有这些资料。
+
+(b) 本应用亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何本应用平台用户如从事上述活动，一经发现，本应用有权立即终止与该用户的服务协议。
+
+(c) 为服务用户的目的，本应用可能通过使用您的个人信息，向您提供您感兴趣的信息，包括但不限于向您发出产品和服务信息，或者与本应用合作伙伴共享信息以便他们向您发送有关其产品和服务的信息（后者需要您的事先同意）。
+
+3. 信息披露
+
+在如下情况下，本应用将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息：
+
+(a) 经您事先同意，向第三方披露；
+
+(b)为提供您所要求的产品和服务，而必须和第三方分享您的个人信息；
+
+(c) 根据法律的有关规定，或者行政或司法机构的要求，向第三方或者行政、司法机构披露；
+
+(d) 如您出现违反中国有关法律、法规或者本应用服务协议或相关规则的情况，需要向第三方披露；
+
+(e) 如您是适格的知识产权投诉人并已提起投诉，应被投诉人要求，向被投诉人披露，以便双方处理可能的权利纠纷；
+
+(f) 在本应用平台上创建的某一交易中，如交易任何一方履行或部分履行了交易义务并提出信息披露请求的，本应用有权决定向该用户提供其交易对方的联络方式等必要信息，以促成交易的完成或纠纷的解决。
+
+(g) 其它本应用根据法律、法规或者网站政策认为合适的披露。
+
+4. 信息存储和交换
+
+本应用收集的有关您的信息和资料将保存在本应用及（或）其关联公司的服务器上，这些信息和资料可能传送至您所在国家、地区或本应用收集信息和资料所在地的境外并在境外被访问、存储和展示。
+
+5. Cookie的使用
+
+(a) 在您未拒绝接受cookies的情况下，本应用会在您的计算机上设定或取用cookies ，以便您能登录或使用依赖于cookies的本应用平台服务或功能。本应用使用cookies可为您提供更加周到的个性化服务，包括推广服务。
+
+(b) 您有权选择接受或拒绝接受cookies。您可以通过修改浏览器设置的方式拒绝接受cookies。但如果您选择拒绝接受cookies，则您可能无法登录或使用依赖于cookies的本应用网络服务或功能。
+
+(c) 通过本应用所设cookies所取得的有关信息，将适用本政策。
+
+6. 信息安全
+
+(a) 本应用帐号均有安全保护功能，请妥善保管您的用户名及密码信息。本应用将通过对用户密码进行加密等安全措施确保您的信息不丢失，不被滥用和变造。尽管有前述安全措施，但同时也请您注意在信息网络上不存在“完善的安全措施”。
+
+(b) 在使用本应用网络服务进行网上交易时，您不可避免的要向交易对方或潜在的交易对
+
+7.本隐私政策的更改
+
+(a)如果决定更改隐私政策，我们会在本政策中、本公司网站中以及我们认为适当的位置发布这些更改，以便您了解我们如何收集、使用您的个人信息，哪些人可以访问这些信息，以及在什么情况下我们会透露这些信息。
+
+(b)本公司保留随时修改本政策的权利，因此请经常查看。如对本政策作出重大更改，本公司会通过网站通知的形式告知。
+
+方披露自己的个人信息，如联络方式或者邮政地址。请您妥善保护自己的个人信息，仅在必要的情形下向他人提供。如您发现自己的个人信息泄密，尤其是本应用用户名及密码发生泄露，请您立即联络本应用客服，以便本应用采取相应措施。
+
+</text>
+ <button class="long-btn" style="width: 90%;margin-bottom:30rpx" disabled="{{disabled}}" bindtap="signXY">{{signMsg}}</button>
\ No newline at end of file
diff --git a/pages/signxy/signxy.wxss b/pages/signxy/signxy.wxss
new file mode 100644
index 0000000..5dc3af7
--- /dev/null
+++ b/pages/signxy/signxy.wxss
@@ -0,0 +1 @@
+/* pages/signxy/signxy.wxss */
\ No newline at end of file
diff --git a/pages/wxlogin/wxlogin.js b/pages/wxlogin/wxlogin.js
new file mode 100644
index 0000000..d830a76
--- /dev/null
+++ b/pages/wxlogin/wxlogin.js
@@ -0,0 +1,139 @@
+// pages/wxlogin/wxlogin.js
+Page({
+
+  /**
+   * 页面的初始数据
+   */
+  data: {
+    phone: '',
+    password: ''
+
+  },
+
+  setPhone: function(e) {
+    this.setData({
+      phone: e.detail.value
+    })
+  },
+  setPassword: function(e) {
+    this.setData({
+      password: e.detail.value
+    })
+  },
+
+  /**
+   * 生命周期函数--监听页面加载
+   */
+  onLoad: function(options) {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面初次渲染完成
+   */
+  onReady: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面显示
+   */
+  onShow: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面隐藏
+   */
+  onHide: function() {
+
+  },
+
+  /**
+   * 生命周期函数--监听页面卸载
+   */
+  onUnload: function() {
+
+  },
+
+  /**
+   * 页面相关事件处理函数--监听用户下拉动作
+   */
+  onPullDownRefresh: function() {
+
+  },
+
+  /**
+   * 页面上拉触底事件的处理函数
+   */
+  onReachBottom: function() {
+
+  },
+
+  /**
+   * 用户点击右上角分享
+   */
+  onShareAppMessage: function() {
+
+  },
+  toRegister: function() {
+    wx.navigateTo({
+      url: '../register/register',
+    })
+  },
+  doLogin: function() {
+    var phone = this.data.phone;
+    var pwd = this.data.password;
+    if (wx.$isEmpty(phone) || wx.$isEmpty(pwd)) {
+      return;
+    }
+    //loadingElement('loginBtn', '登录中...')
+    wx.showLoading({
+      title: '登录中',
+    })
+    var platform = wx.getStorageInfoSync('platform')
+    var param = {
+      "username": phone,
+      "password": pwd,
+      "platform": platform
+    }
+    wx.$doPost('/login', param, function(ok, ret) {
+      wx.hideLoading();
+      
+      if (ok) {
+        if (ret.data.code != 200) {
+          wx.showModal({
+            title: '错误',
+            content:  ret.data.msg ,
+            duration: 2000
+          })
+         
+       
+        } else {
+          console.log(ret.data);
+          wx.setStorageSync("phone", phone);
+          wx.setStorageSync("phoneX", ret.data.phone);
+          wx.setStorageSync("token", ret.data.token);
+          wx.setStorageSync("uid", ret.data.uid);
+          wx.setStorageSync("tenantid", ret.data.tenantid);
+          wx.setStorageSync("tokenexpire", ret.data.expire);
+          wx.setStorageSync("tokentime", ret.data.now);
+          wx.setStorageSync("userid", ret.data.userid);
+          wx.setStorageSync("signed", ret.data.signed);
+          wx.setStorageSync("paypwdset", ret.data.paypwdset);
+          wx.setStorageSync("name", ret.data.name);
+          wx.redirectTo({
+            url: '../index/index',
+          })
+        }
+      } else {
+        wx.showModal({
+          title: '错误',
+          content: "请求失败了" + ret.status + "，请稍后再试",
+          duration: 2000
+        })
+      }
+    })
+
+  }
+})
\ No newline at end of file
diff --git a/pages/wxlogin/wxlogin.json b/pages/wxlogin/wxlogin.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/wxlogin/wxlogin.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/wxlogin/wxlogin.wxml b/pages/wxlogin/wxlogin.wxml
new file mode 100644
index 0000000..5f2d5ba
--- /dev/null
+++ b/pages/wxlogin/wxlogin.wxml
@@ -0,0 +1,16 @@
+<view class="container">
+
+  <view class="global-background">
+    <view class="page-top">
+      <text class="title">大理市民卡</text>
+    </view>
+
+    <input class="weui-input input-bar" bindinput="setPhone" placeholder="请输入手机号" style=""></input>
+    <input class="weui-input input-bar" bindinput="setPassword" placeholder="请输入密码" password="true" style=""></input>
+
+     <button class="long-btn" style="width: 90%;" bindtap="doLogin">登录</button>
+     <view class="signin-btn" bindtap="toRegister">新用户注册</view>
+
+  </view>
+  
+</view>
\ No newline at end of file
diff --git a/pages/wxlogin/wxlogin.wxss b/pages/wxlogin/wxlogin.wxss
new file mode 100644
index 0000000..a05de8b
--- /dev/null
+++ b/pages/wxlogin/wxlogin.wxss
@@ -0,0 +1,27 @@
+/* pages/wxlogin/wxlogin.wxss */
+
+.title {
+  display: flex;
+  justify-content: center;
+  padding-top: 15%;
+  color: white;
+  font-size: 60rpx;
+  margin: 0;
+}
+
+.input-bar {
+  height: 2rem;
+  border: 1px solid rgb(240, 240, 240);
+  border-style: solid none none none;
+  background-color: white;
+}
+
+.signin-btn {
+  margin-top: 30rpx;
+  color: gray;
+  float: right;
+  margin-right: 30rpx;
+  font-size: 28rpx;
+}
+
+
