博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序之 Classify(商品属性分类)
阅读量:7123 次
发布时间:2019-06-28

本文共 10366 字,大约阅读时间需要 34 分钟。

1.项目目录

2.逻辑层

broadcast.js

// pages/broadcast/broadcast.jsPage({  /**   * 页面的初始数据   */  data: {    firstIndex: -1,    //准备数据      //数据结构:以一组一组来进行设定      commodityAttr: [      {        priceId: 1,        price: 35.0,        "stock": 8,        "attrValueList": [          {            "attrKey": "型号",            "attrValue": "2"          },          {            "attrKey": "颜色",            "attrValue": "白色"          },          {            "attrKey": "大小",            "attrValue": "小"          },          {            "attrKey": "尺寸",            "attrValue": "S"          }        ]      },      {        priceId: 2,        price: 35.1,        "stock": 9,        "attrValueList": [          {            "attrKey": "型号",            "attrValue": "1"          },          {            "attrKey": "颜色",            "attrValue": "黑色"          },          {            "attrKey": "大小",            "attrValue": "小"          },          {            "attrKey": "尺寸",            "attrValue": "M"          }        ]      },      {        priceId: 3,        price: 35.2,        "stock": 10,        "attrValueList": [          {            "attrKey": "型号",            "attrValue": "1"          },          {            "attrKey": "颜色",            "attrValue": "绿色"          },          {            "attrKey": "大小",            "attrValue": "大"          },          {            "attrKey": "尺寸",            "attrValue": "L"          }        ]      },      {        priceId: 4,        price: 35.2,        "stock": 10,        "attrValueList": [          {            "attrKey": "型号",            "attrValue": "1"          },          {            "attrKey": "颜色",            "attrValue": "绿色"          },          {            "attrKey": "大小",            "attrValue": "大"          },          {            "attrKey": "尺寸",            "attrValue": "L"          }        ]      }    ],    attrValueList: []  },  /**   * 生命周期函数--监听页面加载   */  onLoad: function (options) {    },  /**   * 生命周期函数--监听页面初次渲染完成   */  onReady: function () {    },  /**   * 生命周期函数--监听页面显示   */  onShow: function () {    this.setData({      includeGroup: this.data.commodityAttr    });    this.distachAttrValue(this.data.commodityAttr);    // 只有一个属性组合的时候默认选中      // console.log(this.data.attrValueList);      if (this.data.commodityAttr.length == 1) {      for (var i = 0; i < this.data.commodityAttr[0].attrValueList.length; i++) {        this.data.attrValueList[i].selectedValue = this.data.commodityAttr[0].attrValueList[i].attrValue;      }      this.setData({        attrValueList: this.data.attrValueList      });    }  },  /* 获取数据 */  distachAttrValue: function (commodityAttr) {    /**       将后台返回的数据组合成类似       {         attrKey:'型号',         attrValueList:['1','2','3']       }     */    // 把数据对象的数据(视图使用),写到局部内      var attrValueList = this.data.attrValueList;    // 遍历获取的数据      for (var i = 0; i < commodityAttr.length; i++) {      for (var j = 0; j < commodityAttr[i].attrValueList.length; j++) {        var attrIndex = this.getAttrIndex(commodityAttr[i].attrValueList[j].attrKey, attrValueList);        // console.log('属性索引', attrIndex);           // 如果还没有属性索引为-1,此时新增属性并设置属性值数组的第一个值;索引大于等于0,表示已存在的属性名的位置          if (attrIndex >= 0) {          // 如果属性值数组中没有该值,push新值;否则不处理            if (!this.isValueExist(commodityAttr[i].attrValueList[j].attrValue, attrValueList[attrIndex].attrValues)) {            attrValueList[attrIndex].attrValues.push(commodityAttr[i].attrValueList[j].attrValue);          }        } else {          attrValueList.push({            attrKey: commodityAttr[i].attrValueList[j].attrKey,            attrValues: [commodityAttr[i].attrValueList[j].attrValue]          });        }      }    }    // console.log('result', attrValueList)      for (var i = 0; i < attrValueList.length; i++) {      for (var j = 0; j < attrValueList[i].attrValues.length; j++) {        if (attrValueList[i].attrValueStatus) {          attrValueList[i].attrValueStatus[j] = true;        } else {          attrValueList[i].attrValueStatus = [];          attrValueList[i].attrValueStatus[j] = true;        }      }    }    this.setData({      attrValueList: attrValueList    });  },    getAttrIndex: function (attrName, attrValueList) {    // 判断数组中的attrKey是否有该属性值      for (var i = 0; i < attrValueList.length; i++) {      if (attrName == attrValueList[i].attrKey) {        break;      }    }    return i < attrValueList.length ? i : -1;  },  isValueExist: function (value, valueArr) {    // 判断是否已有属性值      for (var i = 0; i < valueArr.length; i++) {      if (valueArr[i] == value) {        break;      }    }    return i < valueArr.length;  },  /* 选择属性值事件 */  selectAttrValue: function (e) {    /*     点选属性值,联动判断其他属性值是否可选     {       attrKey:'型号',       attrValueList:['1','2','3'],       selectedValue:'1',       attrValueStatus:[true,true,true]     }     console.log(e.currentTarget.dataset);     */    var attrValueList = this.data.attrValueList;    var index = e.currentTarget.dataset.index;//属性索引      var key = e.currentTarget.dataset.key;    var value = e.currentTarget.dataset.value;    if (e.currentTarget.dataset.status || index == this.data.firstIndex) {      if (e.currentTarget.dataset.selectedvalue == e.currentTarget.dataset.value) {        // 取消选中          this.disSelectValue(attrValueList, index, key, value);      } else {        // 选中          this.selectValue(attrValueList, index, key, value);      }    }  },  /* 选中 */  selectValue: function (attrValueList, index, key, value, unselectStatus) {    // console.log('firstIndex', this.data.firstIndex);      var includeGroup = [];    if (index == this.data.firstIndex && !unselectStatus) { // 如果是第一个选中的属性值,则该属性所有值可选        var commodityAttr = this.data.commodityAttr;      // 其他选中的属性值全都置空        // console.log('其他选中的属性值全都置空', index, this.data.firstIndex, !unselectStatus);        for (var i = 0; i < attrValueList.length; i++) {        for (var j = 0; j < attrValueList[i].attrValues.length; j++) {          attrValueList[i].selectedValue = '';        }      }    } else {      var commodityAttr = this.data.includeGroup;    }    // console.log('选中', commodityAttr, index, key, value);      for (var i = 0; i < commodityAttr.length; i++) {      for (var j = 0; j < commodityAttr[i].attrValueList.length; j++) {        if (commodityAttr[i].attrValueList[j].attrKey == key && commodityAttr[i].attrValueList[j].attrValue == value) {          includeGroup.push(commodityAttr[i]);        }      }    }    attrValueList[index].selectedValue = value;    // 判断属性是否可选      for (var i = 0; i < attrValueList.length; i++) {      for (var j = 0; j < attrValueList[i].attrValues.length; j++) {        attrValueList[i].attrValueStatus[j] = false;      }    }    for (var k = 0; k < attrValueList.length; k++) {      for (var i = 0; i < includeGroup.length; i++) {        for (var j = 0; j < includeGroup[i].attrValueList.length; j++) {          if (attrValueList[k].attrKey == includeGroup[i].attrValueList[j].attrKey) {            for (var m = 0; m < attrValueList[k].attrValues.length; m++) {              if (attrValueList[k].attrValues[m] == includeGroup[i].attrValueList[j].attrValue) {                attrValueList[k].attrValueStatus[m] = true;              }            }          }        }      }    }    // console.log('结果', attrValueList);      this.setData({      attrValueList: attrValueList,      includeGroup: includeGroup    });    var count = 0;    for (var i = 0; i < attrValueList.length; i++) {      for (var j = 0; j < attrValueList[i].attrValues.length; j++) {        if (attrValueList[i].selectedValue) {          count++;          break;        }      }    }    if (count < 2) {// 第一次选中,同属性的值都可选        this.setData({        firstIndex: index      });    } else {      this.setData({        firstIndex: -1      });    }  },  /* 取消选中 */  disSelectValue: function (attrValueList, index, key, value) {    var commodityAttr = this.data.commodityAttr;    attrValueList[index].selectedValue = '';    // 判断属性是否可选      for (var i = 0; i < attrValueList.length; i++) {      for (var j = 0; j < attrValueList[i].attrValues.length; j++) {        attrValueList[i].attrValueStatus[j] = true;      }    }    this.setData({      includeGroup: commodityAttr,      attrValueList: attrValueList    });    for (var i = 0; i < attrValueList.length; i++) {      if (attrValueList[i].selectedValue) {        this.selectValue(attrValueList, i, attrValueList[i].attrKey, attrValueList[i].selectedValue, true);      }    }  },  /* 点击确定 */  submit: function () {    var value = [];    for (var i = 0; i < this.data.attrValueList.length; i++) {      if (!this.data.attrValueList[i].selectedValue) {        break;      }      value.push(this.data.attrValueList[i].selectedValue);    }    if (i < this.data.attrValueList.length) {      wx.showToast({        title: '请完善属性',        icon: 'loading',        duration: 1000      })    } else {      wx.showToast({        title: '选择的属性:' + value.join('-'),        icon: 'sucess',        duration: 1000      })    }  }})

3.页面布局

broadcast.wxml

商品属性值联动选择
{
{attrValueObj.attrKey}}
{
{value}}

4.样式

broadcast.wxss

/* pages/broadcast/broadcast.wxss */.title {    padding: 10rpx 20rpx;    margin: 10rpx 0;    border-left: 4rpx solid #ccc;  }    /*全部属性的主盒子*/  .commodity_attr_list {    background: #fff;    padding: 0 20rpx;    font-size: 26rpx;    overflow: hidden;    width: 100%;  }  /*每组属性的主盒子*/  .attr_box {    width: 100%;    overflow: hidden;    border-bottom: 1rpx solid #ececec;  }  /*属性名*/  .attr_name {    width: 20%;    float: left;    padding: 15rpx 0;  }  /*属性值*/  .attr_value_box {    width: 80%;    float: left;    padding: 15rpx 0;    overflow: hidden;  }  /*每个属性值*/  .attr_value {    float: left;    padding: 0 10rpx;    margin: 0 10rpx;    border: 1rpx solid #ececec;  }  /*每个属性选中的当前样式*/  .attr_value_active {    background: #FFCC00;    border-radius: 10rpx;    color: #fff;    padding: 0 10rpx;  }  /*禁用属性*/  .attr_value_disabled {    color: #ccc;  }    /*button*/  .btn-area {    margin: 1.17647059em 15px 0.3em;  }    .btn {    margin-top: 15px;    background-color:#FFCC00;    color: #fff;  }  .btn:first-child {    margin-top: 0;  }

5.效果图

转载地址:http://qwael.baihongyu.com/

你可能感兴趣的文章
给你任意指定生活中的一件物品,你会怎么测试?
查看>>
Android Studio--gradle:download 过慢甚至超时timeout报错
查看>>
shell的替换运算符和模式匹配运算符
查看>>
通过xml将传入的字符串转成表格列值
查看>>
C++11 新特性,运行时断言与静态断言
查看>>
自己的感悟——面向对象
查看>>
SpringBoot如何编写Springboot示例
查看>>
Windows 8 系列(三):挂起管理(Suspension Management )
查看>>
Linux DHCP Server Configure
查看>>
2015真正运维自动化技术沙龙活动
查看>>
python 正则模块的使用(re)说明
查看>>
用脚本命令迁移复杂NTFS权限的文件夹
查看>>
Tomcat配置及其LNMT/LAMT/LNAMT实现方式
查看>>
服务与计划任务
查看>>
三款搜索引擎评测 中搜搜索结果与众不同
查看>>
我的友情链接
查看>>
Windows 2003 IIS下配置MySQL+PHP+ISAPI_Rewrite+Zend+Xcache
查看>>
我的友情链接
查看>>
Linux下python升级至2.7步骤
查看>>
我的友情链接
查看>>