小程序頁面動態配置實現

功能描述

小程序能夠根據管理後臺配置動態更新展現內容,如實現下面新鮮事欄目圖片的來源的可配置,點擊跳轉url的可配置。 前端

image

實現方案

1後端建立一個map結構的數據表,表結構以下: vue

image
2 管理後臺根據不一樣業務設定不一樣的key和value,更新數據庫

如key:ad1url value:a.pngios

若是須要更新頁面圖片,只需更新ad1url對應的valueweb

3 小程序根據對應業務key獲取對應的配置項,更新頁面顯示sql

技術棧

後端接口服務:SpringBoot Mybatis MySql數據庫

管理後臺:vuejson

前端:小程序axios

代碼實現

後端接口

爲了保證key的惟一性,key在數據庫設置爲unique屬性,新增和更新功能經過如下sql語句實現,主要經過replace into實現配置項的惟一小程序

@Insert("<script>"  +
         "REPLACE INTO `rental`.`t_config`(`key`, `value`) VALUES" +
         "<foreach" +
         " collection=\"list\" item=\"item1\" index=\"index\" separator=\",\">" +
         "(#{item1.key}, #{item1.value})" +
         "</foreach>" +
       "</script>")
 @Options(useGeneratedKeys = true, keyProperty = "configId", keyColumn = "configId")
複製代碼

api設計後端

一開始想經過傳如list數據給後端實現配置項的批量插入功能,發現後端數據一直接受不到,故而退而求其次,經過json字符串實現vue(網絡庫使用axios)調用後端接口

@ApiOperation(value = "新增或更新配置列表")
@RequestMapping(value = "/add_or_update_config_list", method = RequestMethod.POST, 
                produces =    MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseBean<String> addOrUpdateConfigList(String list) {
    long result =  configService.batchInsertOrUpdate(JSONObject.parseArray(
        list,Config.class));
    ......
}
複製代碼

管理平臺

管理平臺用vue開發,網絡框架採用axios,列表數據經過json字符串傳遞給後端

let config1 = {key: "ad1Url", value: this.formData.ad1Url};
let config2 = {key: "ad2Url", value: this.formData.ad2Url};
let config3 = {key: "adClick1", value: this.formData.adClick1};
let config4 = {key: "adClick2", value: this.formData.adClick2};
let configList = [config1, config2, config3, config4];
let result = await addConfigList({list: JSON.stringify(co
nfigList)});
......
複製代碼

小程序

小程序調用後端接口返回全部配置項,具體業務根據具體業務key獲取配置項

getConfigList: function () {
    var that = this;
    wx.request({
      url: constant.HOST + '/config/get_config_list',
      method: 'GET',
      header: {
        'content-type': 'application/json'
      },
      complete: function (res) {
  
      },
      success: function (res) {
        console.log("config list response:" + JSON.stringify(res));
        that.setData({ configList: res.data.data});
      }
    });
 },
     
goAd1: function(){
    wx.navigateTo({
      url: '/pages/webview/webview?url=' + this.data.configList.adClick1
    })
},

複製代碼

總結

這個功能我在本身的小程序開發過程當中設計的頁面配置實現思路,主要遇到了兩個小問題:1 若是保證key的惟一性 2 先後端批量數據的傳輸問題;但願能給遇到一樣問題的小夥伴一些啓示,若是有更好的方案,歡迎一塊兒討論

相關文章
相關標籤/搜索