功能描述
小程式可以根據管理後臺配置動態更新展示內容,如實現下面新鮮事欄目圖片的來源的可配置,點選跳轉url的可配置。
實現方案
1後端建立一個map結構的資料表,表結構如下:
2 管理後臺根據不同業務設定不同的key和value,更新資料庫如key:ad1url value:a.png
如果需要更新頁面圖片,只需更新ad1url對應的value
3 小程式根據對應業務key獲取對應的配置項,更新頁面顯示
技術棧
後端介面服務:SpringBoot Mybatis MySql
管理後臺:vue
前端:小程式
程式碼實現
後端介面
為了保證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 前後端批量資料的傳輸問題;希望能給遇到同樣問題的小夥伴一些啟示,如果有更好的方案,歡迎一起討論