美文网首页
在线商城项目14-阶段性自测与bug修复

在线商城项目14-阶段性自测与bug修复

作者: love丁酥酥 | 来源:发表于2018-04-23 17:34 被阅读20次

    简介

    前面把商品列表页的查询展示逻辑基本完成了。每个功能单独测试是没有问题了,但是连在一起呢?新增的功能是否会对以前的功能产生影响。

    测试与修复

    很遗憾,确实有bug。加入商品分页功能以后,我们试着点击价格筛选和排序,发现页面都错乱了。所以我们需要对GoodsList.vue进行如下修改:

    <template>
      <div>
        <PageHeader></PageHeader>
        <PageBread>
          <span>Goods</span>
        </PageBread>
        <div class="accessory-result-page accessory-page">
          <div class="container">
            <div class="filter-nav">
              <span class="sortby">Sort by:</span>
              <a href="javascript:void(0)" class="default" :class="{'cur': sortChecked === 'default'}" @click="checkSort('default')">Default</a>
              <a href="javascript:void(0)" class="price" :class="{'cur': sortChecked === 'priceUp' ||  sortChecked === 'priceDown'}" @click="checkSort(isPriceUp?'priceDown':'priceUp')">Price
                <span v-if="isPriceArrowUp">↑</span>
                <span v-else>↓</span>
                <!--<svg class="icon icon-arrow-short">-->
                  <!--<symbol id="icon-arrow-short" viewBox="0 0 25 32">-->
                    <!--<title>arrow-short</title>-->
                    <!--<path class="path1" d="M24.487 18.922l-1.948-1.948-8.904 8.904v-25.878h-2.783v25.878l-8.904-8.904-1.948 1.948 12.243 12.243z"></path>-->
                  <!--</symbol>-->
                  <!--<use xlink:href="#icon-arrow-short"></use>-->
                <!--</svg>-->
              </a>
              <a href="javascript:void(0)" class="filterby stopPop" @click="showFilterBy">Filter by</a>
            </div>
            <div class="accessory-result">
              <!-- filter -->
              <div class="filter stopPop" id="filter" :class="{'filterby-show': isShowFilterBy}">
                <dl class="filter-price">
                  <dt>Price:</dt>
                  <dd><a href="javascript:void(0)" :class="{'cur': priceChecked === 'all'}" @click="checkPriceFilter('all')">All</a></dd>
                  <dd v-for="(item, index) in priceFilterList" :key="index">
                    <a v-if="item.endPrice" href="javascript:void(0)" :class="{'cur': priceChecked === index}" @click="checkPriceFilter(index)">{{item.startPrice}} - {{item.endPrice}}</a>
                    <a v-else href="javascript:void(0)" :class="{'cur': priceChecked === index}" @click="checkPriceFilter(index)">> {{item.startPrice}}</a>
                  </dd>
                </dl>
              </div>
    
              <!-- search result accessories list -->
              <div class="accessory-list-wrap">
                <div class="accessory-list col-4">
                  <ul>
                    <li v-for="item in prdList" :key="item.productId">
                      <div class="pic">
                        <a href="#"><img v-lazy="`../../../static/${item.productImage}`" alt=""></a>
                      </div>
                      <div class="main">
                        <div class="name">{{item.productName}}</div>
                        <div class="price">{{item.salePrice}}</div>
                        <div class="btn-area">
                          <a href="javascript:;" class="btn btn--m">加入购物车</a>
                        </div>
                      </div>
                    </li>
                  </ul>
                </div>
                <infinite-loading @infinite="infiniteHandler" ref="infiniteLoading">
                  <span slot="no-results">
                  </span>
                  <span slot="no-more">
                    No more ...
                  </span>
                </infinite-loading>
              </div>
            </div>
          </div>
        </div>
        <div class="md-overlay" v-show="isShowOverLay" @click="closeFilterBy"></div>
        <PageFooter></PageFooter>
      </div>
    </template>
    
    <script>
    import PageHeader from '../../components/PageHeader'
    import PageBread from '../../components/PageBread'
    import PageFooter from '../../components/PageFooter'
    import axios from 'axios'
    import InfiniteLoading from 'vue-infinite-loading'
    
    let queryPrdObj = {}
    
    export default {
      data () {
        return {
          prdList: [], // 产品列表
          // 价格过滤列表
          priceFilterList: [
            {
              startPrice: 0,
              endPrice: 100
            },
            {
              startPrice: 100,
              endPrice: 500
            },
            {
              startPrice: 500,
              endPrice: 2000
            },
            {
              startPrice: 2000
            }
          ],
          priceChecked: 'all', // 选中的价格过滤列表项
          filterPrice: null, // 选中的价格过滤列表对象
          isShowFilterBy: false, // 是否展示过滤列表弹窗
          isShowOverLay: false, // 是否展示遮罩层
          page: 1,
          pageSize: 8,
          sortChecked: 'default',
          isPriceUp: true
        }
      },
      computed: {
        isPriceArrowUp () {
          return !this.isPriceUp
        }
      },
      components: {
        PageHeader,
        PageBread,
        PageFooter,
        InfiniteLoading
      },
      created () {
        // this.getPrdList()
      },
      methods: {
        // 请求接口获取产品列表数据
        getPrdList ($state) {
          queryPrdObj = Object.assign({}, this.filterPrice, {page: this.page, pageSize: this.pageSize, sort: this.sortChecked})
          axios.get('/api/goods', {params: queryPrdObj}).then((res) => {
            console.log('res', res)
            this.page++
            let data = (res && res.data) || {}
            if (data.code === '000') {
              let result = data.result || {}
              this.prdList = this.prdList.concat(result.list || [])
              if (result.count === this.pageSize) {
                $state.loaded()
              } else {
                $state.complete()
              }
            } else {
              alert(`err:${data.msg || '系统错误'}`)
              $state.complete()
            }
          })
        },
        // 选取价格过滤列表项
        checkPriceFilter (index) {
          this.priceChecked = index
          this.filterPrice = index === 'all' ? null : this.priceFilterList[index]
          this.prdList = []
          this.page = 1
          this.$nextTick(() => {
            this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset')
          })
          this.closeFilterBy()
        },
        // 展示过滤列表弹窗
        showFilterBy () {
          this.isShowFilterBy = true
          this.isShowOverLay = true
        },
        // 关闭过滤列表弹窗
        closeFilterBy () {
          this.isShowFilterBy = false
          this.isShowOverLay = false
        },
        checkSort (val) {
          this.sortChecked = val
          if (val === 'priceUp' || val === 'priceDown') {
            this.isPriceUp = !this.isPriceUp
          } else {
            this.isPriceUp = true
          }
          this.prdList = []
          this.page = 1
          this.$nextTick(() => {
            this.$refs.infiniteLoading.$emit('$InfiniteLoading:reset')
          })
        },
        infiniteHandler ($state) {
          this.getPrdList($state)
        }
      }
    }
    </script>
    

    再看一看,是不是就正常了。这一章我就不上太多的图了,大家可以试着到处点一下,看看是否仍然有问题。

    总结

    提交代码:
    six-tao

    git status
    git diff
    git commit -am 'fix bugs caused by pagination'
    git push
    

    相关文章

      网友评论

          本文标题:在线商城项目14-阶段性自测与bug修复

          本文链接:https://www.haomeiwen.com/subject/qvvllftx.html