| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- const util = require('../../utils/util')
- Component({
- properties: {
- show: {
- type: Boolean,
- value: false
- },
- goods: { // 商品
- type: Object
- }
- },
- data: {
- curSpec: {},
- specName: [],
- specValue: []
- },
- observers: {
- goods: function(val) {
- if (val) {
- const { products, curSpec } = val
- let result = []
- const specs = products.map(p => p.specifications.join())
- const specName = specs[0].split(',').map(s => s.split(':')[0])
- const vList = specs.map(sp => sp.split(',').map(s => s.split(':')[1] ))
-
- vList.forEach(v => {
- v.forEach((d, i) => {
- const a = (result[i] = result[i] || [])
- if (a.findIndex(a => a == d) == -1) a.push(d)
- })
- })
- const curSpecValue = curSpec.specifications[0].split(',').map(s => s.split(':')[1])
-
- const specValue = result.map(res => res.map(name => ({ name, is_active: curSpecValue.findIndex(c => c == name) != -1 ? true : false })))
- this.setData({ specName, specValue, curSpec })
- }
- }
- },
- methods: {
- prevent() {
- return false
- },
-
- changeSpec({ currentTarget }) {
- const { index, nameindex } = currentTarget.dataset
- this.data.specValue[nameindex].map((spec, spec_i) => {
- spec.is_active = spec_i == index ? true : false
- return spec
- })
- this.setData({ specValue: this.data.specValue })
- const spec = this.data.specName.map((name, spec_index) => name + ':' + this.data.specValue[spec_index].filter(val => val.is_active)[0].name).join(',')
- const i = this.data.goods.products.findIndex(p => p.specifications.join() == spec)
- this.setData({ curSpec: this.data.goods.products[i] })
- },
- hideSpec() {
- this.setData({ goods: this.data.goods })
- this.triggerEvent('hideSpec')
- }
- }
- })
|