zoukankan      html  css  js  c++  java
  • 小程序 商城多规格选择 购物车 sku 添加 简易demo

    HTML

    <view id="vmsimulatedDATA">

      <view class='productConten'>

        <view class="productDelcom" wx:for="{{simulatedDATA.specifications}}" wx:for-index='n' wx:for-item="ProductItem">

          <view class='p'>{{ProductItem.name}}</view>

          <ul class="productFooterlist clearfix">

            <li wx:for="{{ProductItem.item}}" wx:for-item="oItem" bindtap="specificationBtn" data-show="{{oItem.isShow}}" class="{{oItem.isShow?'':'noneActive'}} {{subIndex[n] == index?'productActive':''}}" data-ol="{{subIndex[n]}}" data-name="{{oItem.name}}" data-n="{{n}}" data-index="{{index}}">{{oItem.name}}</li>

          </ul>

        </view>

      </view>

      <view wx:if="{{boxArr.id}}">

        {{boxArr.id+'--'+boxArr.price}}

      </view>

    </view>

    js

    Page({

      data: {

        simulatedDATA: {

          difference: [{

              id: "19",

              price: "200.00",

              stock: "19",

              difference: "红色,x"

            },

            {

              id: "20",

              price: "300.00",

              stock: "29",

              difference: "白色,x"

            },

            {

              id: "21",

              price: "300.00",

              stock: "10",

              difference: "黑色,x"

            },

            {

              id: "21",

              price: "300.00",

              stock: "10",

              difference: "黑色,xl"

            },

            {

              id: "24",

              price: "500.00",

              stock: "10",

              difference: "白色,xl"

            }

          ],

          specifications: [{

              name: "颜色",

              item: [{

                  name: "白色"

                },

                {

                  name: "黑色"

                },

                {

                  name: "红色"

                }

              ]

            },

            {

              name: "尺码",

              item: [{

                  name: "x"

                },

                {

                  name: "xl"

                }

              ]

            }

          ]

        },

        selectArr: [], //存放被选中的值

        shopItemInfo: {}, //存放要和选中的值进行匹配的数据

        subIndex: [], //是否选中 因为不确定是多规格还是但规格,所以这里定义数组来判断

        content: "",

        specifications:'',

        boxArr: {},

      },

      onLoad() {

        var self = this

        var simulatedDATA = self.data.simulatedDATA

        var difference = self.data.simulatedDATA.difference

        var shopItemInfo = self.data.shopItemInfo

        var specifications = self.data.simulatedDATA.specifications

        for (var i in difference) {

          shopItemInfo[difference[i].difference] =

            difference[i]; //修改数据结构格式,改成键值对的方式,以方便和选中之后的值进行匹配

        }

        for (var i = 0; i < specifications.length; i++) {

          for (var o = 0; o < specifications[i].item.length; o++) {

            specifications[i].item[o].isShow = true

          }

        }

        simulatedDATA.specifications = specifications

        self.setData({

          simulatedDATA: simulatedDATA,

          shopItemInfo: shopItemInfo,

          specifications: specifications

        })

      },

      onShow() {

      },

      specificationBtn(e) {

        var n=e.currentTarget.dataset.n

        var index = e.currentTarget.dataset.index

        var item = e.currentTarget.dataset.name

        var self = this;

        var selectArr = self.data.selectArr

        var subIndex = self.data.subIndex

        var boxArr = self.data.boxArr

        var shopItemInfo = self.data.shopItemInfo

        if (selectArr[n] != item) {

          selectArr[n] = item;

          subIndex[n] = index;

        } else {

          // self.selectArr[n] = "";

          // self.subIndex[n] = -1; //去掉选中的颜色

        }

        self.checkItem();

        var arr = shopItemInfo[selectArr];

        if (arr) {

          boxArr.id = arr.id;

          boxArr.price = arr.price;

        }

        self.setData({

          selectArr: selectArr, subIndex: subIndex, boxArr: boxArr, shopItemInfo: shopItemInfo

        })

        console.log(boxArr)

      },

      checkItem() {

        var self = this;

        var simulatedDATA=self.data.simulatedDATA

        var option = self.data.simulatedDATA.specifications;

        var result = []; //定义数组存储被选中的值

        for (var i in option) {

          result[i] = self.data.selectArr[i] ? self.data.selectArr[i] : "";

        }

        for (var i in option) {

          var last = result[i]; //把选中的值存放到字符串last去

          for (var k in option[i].item) {

            result[i] = option[i].item[k].name; //赋值,存在直接覆盖,不存在往里面添加name值

            option[i].item[k].isShow = self.isMay(result); //在数据里面添加字段isShow来判断是否可以选择

          }

          result[i] = last; //还原,目的是记录点下去那个值,避免下一次执行循环时避免被覆盖

        }

        simulatedDATA.specifications = option

        self.setData({

          simulatedDATA: simulatedDATA

        })

      },

      isMay(result) {

        for (var i in result) {

          if (result[i] == "") {

            return true; //如果数组里有为空的值,那直接返回true

          }

        }

        return !this.data.shopItemInfo[result] ?

          false :

          this.data.shopItemInfo[result].stock == 0 ?

          false :

          true; //匹配选中的数据的库存,若不为空返回true反之返回false

      },

    })

    css

    #vmsimulatedDATA {

      background: #fff;

    }

    #vmsimulatedDATA .clearfix:after {

      display: block;

      overflow: hidden;

      clear: both;

      height: 0;

      visibility: hidden;

      content: "";

    }

    #vmsimulatedDATA .productConten {

      margin-bottom: 10px;

    }

    #vmsimulatedDATA .productDelcom {

      padding: 5px 20px;

      color: #323232;

      font-size: 12px;

    }

    #vmsimulatedDATA .productDelcom .p {

      padding: 10px 0;

      font-size: 14px;

    }

    #vmsimulatedDATA .productFooterlist li {

      border: 1px solid #f4f4f4;

      border-radius: 2px;

      color: #606060;

      text-align: center;

      float: left;

      min- 30px;

      margin-right: 5px;

      padding: 2px 5px;

      margin-bottom: 5px;

    }

    #vmsimulatedDATA .productFooterlist li.productActive {

      background-color: #c41e3a;

      color: #fff;

      border: 1px solid #c41e3a;

    }

    #vmsimulatedDATA .productFooterlist li.noneActive {

      background-color: #ccc;

      opacity: 0.4;

      color: #000;

      pointer-events: none;

    }

  • 相关阅读:
    冲刺周期会议三
    冲刺周期会议二
    冲刺周期会议一
    日常会议
    总结会议及站立会议(六)
    站立会议(五)
    站立会议(四)
    【自习任我行】
    软件小创意
    团队项目题目拟定
  • 原文地址:https://www.cnblogs.com/wukongz/p/12580903.html
Copyright © 2011-2022 走看看