商務樓宇小程式迭代更新覆盤總結

張尊娟發表於2021-02-02

商務樓宇小程式迭代更新覆盤總結

登陸頁面

登陸頁面有4個埠:公眾端,監管端,物業採集端,黨建採集端

  • 需求:點選任意一端都進入到登入頁面輸入正確賬號進入到相關頁面

    思路:點選對應的埠進入到登入介面時帶一個type引數,為了確定是那個埠的,點選登入按鈕呼叫介面 在成功的函式里根據type調轉到對應的頁面。

  • 實現:每個埠上面對應後臺引數要求都繫結有type引數,為了點選進入登入頁面時確保登入成功時跳轉對應的介面(登入介面共用一套,登入方法也共用一套)

示例程式碼:

wxml

<view class="menu-item" bindtap="menuClicked" data-type="4">
      <image class="icon" src="./image/icon-home.png"></image>
      <text>公眾端</text>
    </view>
    <view class="menu-item" bindtap="menuClicked" data-type="5">
      <image class="icon" src="./image/icon-building.png"></image>
      <text>監管端</text>
</view>

js 包括動態設定登入狀態當前頁面的標題

// 選擇進入哪個端
  menuClicked:function(e){
    var type = e.currentTarget.dataset.type;
    wx.setStorageSync("atype", type);
    this.setData({
      atype: type
    });
    // 物業採集端
    if (type === '1') {
      this.setData({
        isShowHome:false,
        hregister:false,
        isShowSignButtton: false, // 隱藏註冊1按鈕
        isShowsgin: false, // 隱藏註冊2按鈕
      });
      wx.setNavigationBarTitle({ title: '物業採集平臺' })  //動態設定當前頁面標題
      return false
    }

新的需求:

  1. 對公眾端單獨進行註冊功能的實現
  2. 四個端前臺增加登陸次數過多限制登陸功能的增加
  3. 註冊時密碼複雜度校驗

思路:因為四個埠的登入頁面是公用的一個,需求是隻有公眾端有註冊頁面,可以對註冊1按鈕做一個wx:if判斷,如果帶的引數是公眾端,則顯示,此時這個註冊1按鈕只是一個切換按鈕,並無呼叫介面的功能,點選時切換到真正的註冊2按鈕上,此時頁面只有一個註冊2按鈕,登入1按鈕消失,點選註冊2時呼叫介面成功後返回起初的登入1,註冊1狀態,這一操作因為涉及到登入1按鈕狀態的改變,為了避免影響到其他埠的正常顯示,這裡也將登入1和其他頁面的登入2做區分,

登入錯誤次數過多限制登陸,

思路:點選登陸1/登陸2 呼叫介面在失敗函式中做判斷,進行一個計數,數量滿足時,將登陸按鈕替換為另一個登陸(errlogin)這個按鈕點選時將會有一個彈框提示,提示錯誤次數過多,請30分鐘後重試等然後做一個延遲函式,30分鐘後將登陸的狀態進行改變即可

實現:

 /**鎖定登入按鈕提示 */
  errLogin (){
    wx.showToast({
      icon:'none',
      duration:2000,
      title: '錯誤次數太多,已被鎖定,請30分鐘後重試',
    })
  },
// 失敗回撥
  onFailed: function (msg) { //onFailed回撥
    wx.hideLoading();
    if (msg) {
      wx.showToast({
        title: msg,
        icon: "none"
      })
      // 判斷輸錯次數
      // 獲取data 中的值
         this.setData({
           num:(this.data.num)+1
         })
      // 如果輸錯次數達到5
      if(this.data.num===5){
        this.setData({
          login:false,
          login2: true,
          isShowSignButtton2: true
        })
        // // 倒數計時   暫時不用
        // this.setData({
        //   timer:setInterval(() => {
        //     this.setData({
        //       count:(this.data.count)-1
        //     })
        //   }, 1000)
        // })
        // // 清除定時器
        // setTimeout(() => {
        //   if(this.data.count===0){
        //     clearInterval(this.data.timer)
        //   }
        // }, 6000);

        setTimeout(()=>{
          this.setData({
            num:0,
            login:true,
            isShowSignButtton: true,
            login2: false,
            isShowSignButtton2: false,
            isShowsgin: false
          })
        // },1000*60*30)
        },1000)
      }
    }else{
      wx.showToast({
        title:'使用者名稱或密碼有誤,請仔細檢查或者聯絡系統管理員',
        icon: "none"
      })
    }
  },
 reg = /^(?![A-Za-z]+$)(?![A-Z\d]+$)(?![A-Z\W]+$)(?![a-z\d]+$)(?![a-z\W]+$)(?![\d\W]+$)\S{8,}$/
//密碼至少8位,包括數字、大小寫字母和特殊字元三種及以上

公眾端頁面

啊哦,好像不能寫啊,內容保密哦,

那就寫一下公共的進行梳理吧

關於路徑

單獨寫一個apis.js檔案,然後引用,你懂的,前期內容清晰,後期維護方便,強烈建議加註釋,後期會感謝當時的自己的

示例:

// 資訊查詢-->樓宇查詢
var jgdQueryBuilding = '/app/jgdQueryBuilding.xhtml'
// 資訊查詢--->企業查詢
var jgdQueryEntIn = '/app/jgdQueryEntIn.xhtml'
// 企業認領狀態
var doEditin = '/app/doEditin.xhtml'
//匯出模組
module.exports = {
  doEditin,
  jgdQueryEntIn,
  jgdQueryBuilding,
}

在js檔案中記得引用哦

//引
var apis = require("../../../utils/apis.js");
//用
var urlgzfw = app.baseurlgzfw + apis.xiaoDoAdd;

關於介面

單獨封裝一個network.js檔案

示例:

/**
 * 供外部post請求呼叫
 */
function post(url, params, onStart, onSuccess, onFailed) {
  request(url, params, "POST", onStart, onSuccess, onFailed);
}

/**
 * 供外部get請求呼叫
 */
function get(url, params, onStart, onSuccess, onFailed) {
  request(url, params, "GET", onStart, onSuccess, onFailed);
}

/**
 * function: 封裝網路請求
 * @url URL地址
 * @params 請求引數
 * @method 請求方式:GET/POST
 * @onStart 開始請求,初始載入loading等處理
 * @onSuccess 成功回撥
 * @onFailed  失敗回撥
 */
function request(url, params, method, onStart, onSuccess, onFailed) {
  onStart(); //request start
  wx.request({
    url: url,
    data: dealParams(params),
    method: method,
    header: { 'content-type': 'application/json' },
    success: function (res) {
      console.log(res);
      if (res.data == '') {
        wx.showToast({
          title: "未查詢到相關資訊,請聯絡系統管理員",
          icon:"none",
          duration: 2000
        })
        return
      }
      if (res.data) {
        console.log(res.data);
        console.log(res.data.fCode);
        /** start 根據需求 介面的返回狀態碼進行處理 */
        if (res.data.fCode == '01' || res.data.fCode == '05' || res.data.fCode == '04') {
          onSuccess(res.data); //request success
        }
        else if(res.data.fCode == '00'){    //    新介面  錯誤登陸返回的攔截資訊
          onFailed(res.data.fMsg); //request failed
        } else if(res.data.moduleName !==''){    //    新介面  其他頁面判斷返回的資訊
            onSuccess(res.data)
        }else{                                  //老介面  錯誤資料返回的資訊
          onFailed(res.data.fMsg); //request failed
        }
        /** end 處理結束*/
      }
    },

    fail: function (error) {
      onFailed(""); //failure for other reasons
    }
  })
}

/**
 * function: 根據需求處理請求引數:新增固定引數配置等
 * @params 請求引數
 */
function dealParams(params) {
  return params;
}

module.exports = {
  postRequest: post,
  getRequest: get,
}

這個檔案中在成功回撥時做的判斷有點多,因為寫後臺介面的不是一個人,後期又增加了新的後臺路徑,然後就有點亂,可能是後臺的寫法標準不一樣??我們也不知道,反正給哈都能寫,沒得怕的,哈哈

其中有個問題,看文件的時候每個字都看進去了。但是寫的時候真的是不栽跟頭記不住啊。就是跳轉頁面的,wx.navigateTo wx.switchTab,謹記啊,這個專案裡每個埠進去都又是一個完整的小系統,系統裡的首頁都是有tabBar的,所以跳轉到這個頁面的時候要用 wx.switchTab,別頁面跳轉不過去一遍一遍的檢查路徑的問題了,真的是求求我自己了

wx.navigateTo

保留當前頁面,跳轉到應用內的某個頁面。但是不能跳到 tabbar 頁面。使用 wx.navigateBack 可以返回到原頁面。小程式中頁面棧最多十層。

在小程式外掛中使用時,只能在當前外掛的頁面中呼叫

提到這個就想到了wx.navigateBack

wx.navigateBack(Object object)

關閉當前頁面,返回上一頁面或多級頁面。可通過 getCurrentPages 獲取當前的頁面棧,決定需要返回幾層。

在小程式外掛中使用時,只能在當前外掛的頁面中呼叫

返回上一頁不傳參

// 注意:呼叫 navigateTo 跳轉時,呼叫該方法的頁面會被加入堆疊,而 redirectTo 方法則不會。見下方示例程式碼

// 此處是A頁面
wx.navigateTo({
  url: 'B?id=1'
})

// 此處是B頁面
wx.navigateTo({
  url: 'C?id=1'
})

// 在C頁面內 navigateBack,將返回A頁面
wx.navigateBack({
  delta: 2
})

返回上一頁傳參

  let pages = getCurrentPages(); // 當前頁,
  let prevPage = pages[pages.length - 2]; // 上一頁
  prevPage.setData({
    subPageResult: "我是結果",
  })

  wx.navigateBack({ //返回
    delta: 1
  })

我常用的就這幾個

需要跳轉的應用內非 tabBar 的頁面的路徑 (程式碼包路徑), 路徑後可以帶引數。引數與路徑之間使用 ? 分隔,引數鍵與引數值用 = 相連,不同引數用 & 分隔;如 'path?key=value&key2=value2

先到這,後續有時間再加

相關文章