小程序 商城多规格选择 添加 简易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-width: 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;

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容