微信小程序結(jié)合后臺(tái)數(shù)據(jù)管理實(shí)現(xiàn)商品數(shù)據(jù)的動(dòng)態(tài)展示俯逾、維護(hù)

微信小程序給我們提供了一個(gè)很好的開發(fā)平臺(tái)贸桶,可以用于展現(xiàn)各種數(shù)據(jù)和實(shí)現(xiàn)豐富的功能,本篇隨筆介紹微信小程序結(jié)合后臺(tái)數(shù)據(jù)管理實(shí)現(xiàn)商品數(shù)據(jù)的動(dòng)態(tài)展示桌肴、維護(hù)皇筛,介紹如何實(shí)現(xiàn)商品數(shù)據(jù)在后臺(tái)管理系統(tǒng)中的維護(hù)管理,并通過小程序的請(qǐng)求Web API 平臺(tái)獲取JSON數(shù)據(jù)在小程序界面上進(jìn)行動(dòng)態(tài)展示坠七。

1水醋、整體性的架構(gòu)設(shè)計(jì)

我們整體性的架構(gòu)設(shè)計(jì),包含一個(gè)Web管理后臺(tái)彪置、一個(gè)Web API統(tǒng)一接口層拄踪、當(dāng)然還有數(shù)據(jù)庫什么,另外還有一個(gè)小程序客戶端拳魁。整個(gè)架構(gòu)體系還是以我之前隨筆介紹的《整合微信小程序的Web API接口層的架構(gòu)設(shè)計(jì)》內(nèi)容為藍(lán)本


整個(gè)體系以Web API為主提供服務(wù)惶桐,同時(shí)后臺(tái)管理系統(tǒng)通過各種界面維護(hù)著數(shù)據(jù)的增刪改等基礎(chǔ)管理工作。
Web API的分層潘懊,我們可以通過下圖來了解具體的分層結(jié)構(gòu)姚糊。

Web API 是一個(gè)統(tǒng)一的出口,因此會(huì)整合很多Web API控制器授舟,以提供所有業(yè)務(wù)的接口救恨,因此對(duì)Web API 控制器的管理就顯得很重要,這里建議引入Area區(qū)域進(jìn)行管理控制器類释树,這種各個(gè)模塊就能夠很好分門別類的進(jìn)行管理了忿薇。
如下圖所示是我們的Web API項(xiàng)目的控制器Area區(qū)域分類裙椭,把微信公眾號(hào)、企業(yè)號(hào)署浩、小程序揉燃、基礎(chǔ)框架、第三方接口筋栋、CRM等內(nèi)容進(jìn)行不同的劃分炊汤。

而后臺(tái)管理系統(tǒng),我們通過下面的來了解整體功能弊攘,整個(gè)后臺(tái)管理系統(tǒng)使用了Bootstrap的框架進(jìn)行前端處理抢腐。

各種賬號(hào)的維護(hù)如下所示。

2襟交、后臺(tái)管理系統(tǒng)的數(shù)據(jù)維護(hù)

前面介紹了迈倍,后臺(tái)管理和Web API層是分開的,它們的數(shù)據(jù)最終都是集中在一個(gè)數(shù)據(jù)庫上捣域,實(shí)現(xiàn)我們所要的數(shù)據(jù)集中化管理啼染。
我們言歸正題,介紹如何實(shí)現(xiàn)商品數(shù)據(jù)的后臺(tái)管理焕梅,數(shù)據(jù)數(shù)據(jù)我們分為幾種類型迹鹅,方便在前端界面展示。



商品編輯界面包括對(duì)基礎(chǔ)信息的修改贞言、封面和Banner圖片的維護(hù)斜棚、以及商品多個(gè)展示圖片、商品詳細(xì)介紹的內(nèi)容維護(hù)该窗,如下界面所示弟蚀。



除了商品的封面圖片以及Banne圖片外,我們?cè)谛〕绦虻纳唐吩敿?xì)界面里面酗失,需要在頂端展示多個(gè)可以滾動(dòng)的圖片效果粗梭,那么我們需要維護(hù)商品的圖片,如下界面所示级零。

當(dāng)然商品的詳細(xì)信息需要一個(gè)富文本的編輯器來進(jìn)行圖片文字的編輯處理断医,如下界面所示。

HTML圖文的編輯奏纪,我們這里是用SummerNote插件來進(jìn)行處理鉴嗤,這個(gè)控件的使用非常方便,另外通過修改onImageUpload回調(diào)函數(shù)序调,可以實(shí)現(xiàn)圖片的隨時(shí)上傳處理醉锅。

function initEditor() {
    $('#Note').summernote({
        lang: 'zh-CN',       // default: 'en-US'
        height: 600,         // set editor height                
        minHeight: null,    // set minimum height of editor
        maxHeight: null,    // set maximum height of editor
        focus: true,         // set focus to editable area after initializing summe
        callbacks: {
            onImageUpload: function (files) { //the onImageUpload API  
                img = sendFile(files[0]);
            }
        }
    });
}
//提交文件到服務(wù)器處理
function sendFile(file) {
    data = new FormData();
    data.append("file", file);
    //增加額外的參數(shù)
    data.append("folder", '商品信息');
    data.append("guid", $("#ID").val());

    $.ajax({
        data: data,
        type: "POST",
        url: "/FileUpload/Upload",
        cache: false,
        contentType: false,
        processData: false,
        success: function (json) {
            var data = $.parseJSON(json);
            var url = data.urls[0];
            $("#Note").summernote('insertImage', url, 'image name'); // the insertImage API  
        }
    });
}

3、小程序整合Web API接口實(shí)現(xiàn)數(shù)據(jù)展示

上面介紹了管理后臺(tái)的數(shù)據(jù)維護(hù)发绢,我們就是基于上面的數(shù)據(jù)模型硬耍,在小程序上實(shí)現(xiàn)商品數(shù)據(jù)的展示的垄琐。
下圖是小程序的商品展示首圖,其中包括了頂部Banner欄目经柴、中間的商品分類狸窘、底部的商品信息展示幾部分。



其中Banner欄目的是一個(gè)swiper界面組件坯认,商品類型使用了scroll-view來展示翻擒,而商品信息則是使用普通的View處理即可。
整個(gè)界面的視圖部分代碼如下所示牛哺。

<!--pages/product/index.wxml-->
<!--1px = 750/320 = 2.34rpx;-->
<view class="container">
   <view class="swiper-container">
        <swiper class="swiper_box" 
                    autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}" bindchange="swiperchange">
            <block wx:for="{{banners}}">
                <swiper-item>
                    <image bindtap="tapBanner" data-id="{{item.ID}}" src="{{item.Banner}}" class="slide-image" width="750rpx" height="562.5rpx"/>
                </swiper-item>
            </block>
        </swiper>
        <view class="dots">  
            <block wx:for="{{banners}}" wx:key="unique">  
                <view class="dot{{index == swiperCurrent ? ' active' : ''}}"></view>  
            </block>  
        </view>  
   </view>
   
    <view class="type-container">
        <scroll-view class="type-navbar" scroll-x="true" style="width: 100%">
            <view class="type-box" wx:for-items="{{categories}}">
                <view id="{{item.id}}" class="type-navbar-item {{activeCategoryId == item.id ? 'type-item-on' : ''}}" bindtap="tabClick">
                    {{item.name}}
                </view>
            </view>
        </scroll-view>
    </view>
    <view class="goods-container">
        <view class="goods-box" wx:for-items="{{goods}}" wx:key="{{index}}" bindtap="toDetailsTap" data-id="{{item.ID}}">
           <view class="img-box">
              <image src="{{item.Picture}}" class="image"/>
           </view>
           <view class="goods-title">{{item.ProductName}}</view>
        </view>
    </view>
    <view hidden="{{loadingMoreHidden ? true : false}}" class="no-more-goods">沒有更多啦</view>
</view>

其中小程序的數(shù)據(jù)是通過后臺(tái)的JS文件實(shí)現(xiàn)數(shù)據(jù)的加載綁定的陋气。

  /**
   * 生命周期函數(shù)--監(jiān)聽頁面加載
   */
  onLoad: function (options) {    
    var that = this;

    this.getCategorys();
    this.getTopBanners();
    this.getGoodsList(0);
  },

其中上面的幾個(gè)函數(shù)就是分別通過Web API來獲取對(duì)應(yīng)的JSON數(shù)據(jù)的,函數(shù)代碼如下所示引润。

 //獲取頂部Banner的數(shù)據(jù)
  getTopBanners : function() {
    //獲取產(chǎn)品列表
    var url = config.product_api;//'http://localhost:27206/api/Framework/Product/list'
    var data ={
      status : 1, //推薦
      pageindex : 1,
      pagesize: 10 
    }
    app.utils.get(url, data).then(res=> {
      this.setData({
        banners : res.list
      })
    });
  },
  //獲取商品類型
  getCategorys : function() {
    var url = config.category_api;//'http://localhost:27206/api/Framework/Product/GetProductType'
    app.utils.get(url, {}).then(res=> {
      var that = this;
      var categories = [{id:0, name:"全部"}];
      for(var i=0;i<res.length;i++){
        categories.push(res[i]);
      }
      that.setData({
        categories:categories,
        activeCategoryId:0
      });
    });
  },
  //獲取商品列表
  getGoodsList: function (categoryId) {
    if (categoryId == 0) {
      categoryId = "";
    }
    this.setData({
      goods: [],
      loadingMoreHidden: true
    });
    //獲取產(chǎn)品列表
    var url = config.product_api;//'http://localhost:27206/api/Framework/Product/list'
    var data = {
      type: categoryId,
      status: '', //所有狀態(tài)
      pageindex: 1,
      pagesize: 50
    }
    app.utils.get(url, data).then(res => {
      this.setData({
        goods: res.list,
        loadingMoreHidden: false,
      })
    });
  },

如果你對(duì)上面請(qǐng)求數(shù)據(jù)的代碼'

    app.utils.get(url, data).then(res=> {
      this.setData({
        banners : res.list
      })
    });

有疑問巩趁,你可以參考我的隨筆《在微信小程序的JS腳本中使用Promise來優(yōu)化函數(shù)處理》了解Promise插件的使用過程,這里通過引入Promise以及JS的模塊化方式淳附,可以直接重用這些通用的JS函數(shù)议慰,

而詳細(xì)部分內(nèi)容,則是需要滾動(dòng)展示商品的多個(gè)圖片燃观,另外還需要展示詳細(xì)的HTML內(nèi)容褒脯,HTML內(nèi)容的展示使用富文本轉(zhuǎn)化插件wxParse即可實(shí)現(xiàn)便瑟,這部分在隨筆《在微信小程序中使用富文本轉(zhuǎn)化插件wxParse》有詳細(xì)的使用介紹缆毁。


商品詳細(xì)內(nèi)容的視圖代碼如下所示。

<import src="../../utils/wxParse/wxParse.wxml" />
<view class="container"> 
   <view class="swiper-container">
        <swiper class="swiper_box" 
            autoplay="{{autoplay}}" interval="{{interval}}" duration="{{duration}}" bindchange="swiperchange">
            <block wx:for="{{goodsDetail.pics}}">
                <swiper-item>
                    <image src="{{item.pic}}" class="slide-image" width="355" height="150"/>
                </swiper-item>
            </block>
        </swiper>
        <view class="dots">  
            <block wx:for="{{goodsDetail.pics}}" wx:key="unique">  
                <view class="dot{{index == swiperCurrent ? ' active' : ''}}"></view>  
            </block>  
        </view>  
   </view>
   <view class="goods-info">
        <view class="goods-title">{{goodsDetail.ProductName}}</view>
        <view class="goods-price" hidden="true">¥ {{goodsDetail.Price}}</view>
        <view class="goods-text">{{goodsDetail.Description}}</view>
   </view>
    <view class="goods-des-info">
        <view class="label-title">商品介紹</view>
        <view class="goods-text">
            <template is="wxParse" data="{{wxParseData:article.nodes}}"/>
         </view>
    </view>

</view>

其中后臺(tái)的JS主要負(fù)責(zé)詳細(xì)信息的獲取和綁定工作到涂。

 onLoad: function (e) {
    var that = this;

    //獲取商品詳細(xì)信息
    var url = config.product_detail_api;//'http://localhost:27206/api/Framework/Product/getdetail';
    var data = {id: e.id};
    app.utils.get(url, data).then(res => { 
        console.log(res);
        that.data.goodsDetail = res;
        that.setData({
          goodsDetail:res
        });
        WxParse.wxParse('article', 'html', res.Note, that, 5);
    });
  },

最后來段視頻了解下整體性的功能展示脊框。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市践啄,隨后出現(xiàn)的幾起案子浇雹,更是在濱河造成了極大的恐慌,老刑警劉巖屿讽,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昭灵,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡伐谈,警方通過查閱死者的電腦和手機(jī)烂完,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诵棵,“玉大人抠蚣,你說我怎么就攤上這事÷陌模” “怎么了嘶窄?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵怀跛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我柄冲,道長(zhǎng)吻谋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任羊初,我火速辦了婚禮滨溉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘长赞。我一直安慰自己晦攒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布得哆。 她就那樣靜靜地躺著脯颜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贩据。 梳的紋絲不亂的頭發(fā)上栋操,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音饱亮,去河邊找鬼矾芙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛近上,可吹牛的內(nèi)容都是我干的剔宪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼壹无,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼葱绒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斗锭,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤地淀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后岖是,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帮毁,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年豺撑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烈疚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡前硫,死狀恐怖胞得,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤阶剑,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布跃巡,位于F島的核電站,受9級(jí)特大地震影響牧愁,放射性物質(zhì)發(fā)生泄漏素邪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一猪半、第九天 我趴在偏房一處隱蔽的房頂上張望兔朦。 院中可真熱鬧,春花似錦磨确、人聲如沸沽甥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摆舟。三九已至,卻和暖如春邓了,著一層夾襖步出監(jiān)牢的瞬間恨诱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幕侠。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像亭枷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容