运行截图和后台表数据

原来的listmall部分截图                    右面为listmall表的数据                                           最右面为listmalldetail表   

绿宝食果蔬商城  listmall部分和频道部分_json     绿宝食果蔬商城  listmall部分和频道部分_数据_02         绿宝食果蔬商城  listmall部分和频道部分_数组_03 

 

 

请求的接口和返回的json数据

 后台请求的接口地址ctl_index.fsp?proc=getlistmall,返回的json数据格式如下:listmall表有几条记录,json数组就有几条数据,下图仅截取2条。

绿宝食果蔬商城  listmall部分和频道部分_json数据_04

 

 

 mallbanner和malldata展开后分别如红色箭头和绿色椭圆框所示。

后台形成json数据的过程(前台用mydata数组来保存该json)

 绿宝食果蔬商城  listmall部分和频道部分_json_05     绿宝食果蔬商城  listmall部分和频道部分_小程序商城_06  绿宝食果蔬商城  listmall部分和频道部分_json数据_07

 

 

 1、左图为形成mallnum,mallbanner和showarrow的过程。右图为形成malldata数据的过程。每个ochannel对象,都包括mallnum,mallbanner(对象),showarror和malldata(数组)四部分,右图再将每个ochannel对象,添加到oRows数组中,最后形成的json数组如上面所示,该json数组的条数和表listmall记录条数相同,

2、

前台展示对应数据

绿宝食果蔬商城  listmall部分和频道部分_json_08   绿宝食果蔬商城  listmall部分和频道部分_json_09           绿宝食果蔬商城  listmall部分和频道部分_json数据_10 

 绿宝食果蔬商城  listmall部分和频道部分_数据_11   绿宝食果蔬商城  listmall部分和频道部分_数据_12

 

 

1、根据后台返回的json数据格式,返回的数据存放于mydata数组中(mydata=await qiyuajax.qiyu_ajax_request(url)),再根据json的数据格式可知,listmall表中有几条数据,说明就想展示几条商城列表。

2、可以看到listmall表中有4条数据,index.vue页面中根据代码可知,使用了list-mall组件也展示了4个列表。mydata[0]就是第1个列表,也就是json中的第1个ochannel对象。根据上面的截图可知,mydata[0]的数据为:mallnum=3,mallbanner.title='全球热卖',mallbanner.link='更多',mallbanner.id=1,malldata数组中,第1个元素为:title='测试商品',skuid=28,以及url等。

3、对每个list-mall组件,传递的数据有serverurl,showarrow,num,banner和list。

list-mall.vue子组件分析

父组件index.vue展示商城列表数据时,使用list-mall子组件

<!-- 因为listmall有4条数据,所以使用了4次list-mall子组件,下面代码仅是第1个 -->
<list-mall :serverurl="serverurl" @press="press" :showarrow="true" 
    :num='listmall1.mallnum' :banner='listmall1.mallbanner' 
    :list='listmall1.malldata'></list-mall>

list-mall中的banner部分,展示listmall中的标题等

绿宝食果蔬商城  listmall部分和频道部分_json数据_13绿宝食果蔬商城  listmall部分和频道部分_json数据_14
<!--①根据props可知,传递的参数是severurl(字符串),banner(对象),num(字符串)和list(数组类型的对象)
    ②severurl是服务器地址,banner是要显示的标题等,num决定从listmalldetail表中取几个图片固定显示
    ③banner绑定的数据为listmall.mallbanner,其数据格式为:
        {
            "title":"全球热卖",     //banner.title
            "link":"更多",
            "pageurl":null,
            "id":1              //click时,传递该id
        }     -->     
<view class="multi-head" v-if="banner !== undefined">
    <view class="multi-head-left"> 
        <text class="multi-topic">{{banner.title}}</text>
    </view>
    <view v-if="list.length>0 && showarrow"  @click="press(banner.id)"> 
        <!-- 点击后,向父组件提交一个press方法,并传递参数id -->
        <text class="multi-link">{{banner.link}}</text>
        <!-- arrow.png是右箭头的图标 -->
        <image  class="multi-arrow" src="/static/arrow.png"></image>
    </view>
</view>
<!--1、因为子组件list-mall点击右箭头时,提交了press方法, 所以父组件index.vue
    可以监听到该press方法,其代码为:
    press:function(id){
           this.$jump('/pages/listmall/listmall?id='+id+"&type=banner")
    } 可见,该方法直接跳转到listmall页面,并传递id和type=banner两个参数
    2、再到listmall.vue页面中,可知其请求的接口为
    ctl_subtype.fsp?proc=getlistmallByBanner&count=3&id="+this.id
    3、比如这里的banner.id=1,这个1就会作为this.id参数的值传入上面的接口
    4、也就是说,点击该右箭头,直接跳转到该listmall标题对应的商品列表中  -->
View Code

list-mall中的list部分,展示listmall表中,每条记录里面的明细商品

绿宝食果蔬商城  listmall部分和频道部分_json数据_13绿宝食果蔬商城  listmall部分和频道部分_json数据_14
<!-- ④根据父组件可知,list绑定的数据为listmall1.malldata,其数据格式为:     
      {
        "uri":"images\/goods\/20200504110916156307.jpg",
        "title":"测试商品",
        "specialprice":16,
        "originprice":"原价20",
        "skuid":28
      }       
-->
<view class="multi-list" v-if="num === 1">    
    <view v-for='(item,index) in list' :key='index' @click="detail(item)">
        <!-- 这里展示的是商城中的商品列表,点击后,执行detail方法,传递item -->
        <image class="multi-image1" :src="serverurl+item.uri"></image>
        <view class="multi-description"> 
            <text class="multi-title">{{item.title}}</text> 
            <text class="multi-subtitle">{{item.subtitle}}</text>
            <view> 
                <text class="multi-specialprice">{{item.specialprice}}</text> 
                <text class="multi-originprice">{{item.originprice}}</text>
            </view>
        </view>
    </view>
</view>
<!-- 根据detail方法可知,该方法是跳转到页面pages/goods/detail/detail?id='+item.skuid
也就是展示该skuid对应的商品详情,比如这里的skuid为28。  -->
list部分的代码

 

频道列表展示

绿宝食果蔬商城  listmall部分和频道部分_小程序商城_17 绿宝食果蔬商城  listmall部分和频道部分_数据_18 绿宝食果蔬商城  listmall部分和频道部分_小程序商城_19  绿宝食果蔬商城  listmall部分和频道部分_数组_20

 

 按上面list-mall的逻辑,点击橙色的箭头,应该展示该频道对应的商品列表。

 

 

 

 

getlistmall返回的完整JSON数据

[
    {
        "mallnum":3,
        "mallbanner":{
            "title":"全球热卖",
            "link":"更多",
            "pageurl":null,
            "id":1
        },
        "showarrow":true,
        "malldata":[
            {
                "uri":"images\/goods\/20200504110916156307.jpg",
                "title":"测试商品",
                "specialprice":16,
                "originprice":"原价20",
                "skuid":28
            }
        ]
    },
    {
        "mallnum":1,
        "mallbanner":{
            "title":"全球热卖2",
            "link":"更多",
            "pageurl":null,
            "id":2
        },
        "showarrow":true,
        "malldata":[

        ]
    },
    {
        "mallnum":3,
        "mallbanner":{
            "title":"干果零食",
            "link":"更多",
            "pageurl":"",
            "id":3
        },
        "showarrow":true,
        "malldata":[

        ]
    },
    {
        "mallnum":2,
        "mallbanner":{
            "title":"想要吗",
            "link":"更多",
            "pageurl":"",
            "id":5
        },
        "showarrow":true,
        "malldata":[
            {
                "uri":"images\/goods\/20200528103427067037.png",
                "title":"华为手机",
                "specialprice":0.01,
                "originprice":"原价1",
                "skuid":41
            }
        ]
    }
]