|
@ -0,0 +1,175 @@ |
|
|
|
|
|
<template> |
|
|
|
|
|
<view class="page"> |
|
|
|
|
|
<view class="submit-unit"> |
|
|
|
|
|
<view class="title"> |
|
|
|
|
|
颜色选择 |
|
|
|
|
|
</view> |
|
|
|
|
|
<view class="list"> |
|
|
|
|
|
<view :class="{act : unitKey.startsWith(item)}" |
|
|
|
|
|
v-for="(item, index) in colorList" |
|
|
|
|
|
@click="selectUnit(item, index, 0)" :key="index"> |
|
|
|
|
|
{{ item }} |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
|
|
|
|
<view class="submit-unit"> |
|
|
|
|
|
<view class="title"> |
|
|
|
|
|
尺寸选择 |
|
|
|
|
|
</view> |
|
|
|
|
|
<view class="list"> |
|
|
|
|
|
<view |
|
|
|
|
|
:class="{act : unitKey.endsWith(item), |
|
|
|
|
|
del : getUnitClassDel(item, index)}" |
|
|
|
|
|
v-for="(item, index) in sizeList" |
|
|
|
|
|
@click="selectUnit(item, index, 1)" :key="index"> |
|
|
|
|
|
{{ item }} |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</view> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
|
let defaultKey = '默认' |
|
|
|
|
|
export default { |
|
|
|
|
|
props : { |
|
|
|
|
|
list : { |
|
|
|
|
|
default : [] |
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
|
|
|
computed : { |
|
|
|
|
|
unitMap(){ |
|
|
|
|
|
let map = {} |
|
|
|
|
|
|
|
|
|
|
|
this.list.forEach(n => { |
|
|
|
|
|
|
|
|
|
|
|
let color = n.colour || defaultKey |
|
|
|
|
|
let title = n.title || defaultKey |
|
|
|
|
|
|
|
|
|
|
|
let key = color + ':' + title |
|
|
|
|
|
|
|
|
|
|
|
n.unitKeyName = color + ',' + title |
|
|
|
|
|
|
|
|
|
|
|
map[key] = n |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
return map |
|
|
|
|
|
}, |
|
|
|
|
|
// 颜色列表 |
|
|
|
|
|
sizeList(){ |
|
|
|
|
|
return [...new Set(this.list.map(n => n.title || defaultKey))] |
|
|
|
|
|
}, |
|
|
|
|
|
// 尺寸列表 |
|
|
|
|
|
colorList(){ |
|
|
|
|
|
return [...new Set(this.list.map(n => n.colour || defaultKey))] |
|
|
|
|
|
}, |
|
|
|
|
|
}, |
|
|
|
|
|
data() { |
|
|
|
|
|
return { |
|
|
|
|
|
unitKey : '', |
|
|
|
|
|
colorIndex : 0, |
|
|
|
|
|
sizeIndex : 0, |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
mounted() { |
|
|
|
|
|
if(!this.unitKey && this.list.length > 0){ |
|
|
|
|
|
this.selectUnit(this.colorList[0], 0, 0) |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
methods: { |
|
|
|
|
|
selectUnit(item, index, type){ |
|
|
|
|
|
if(type == 0){ |
|
|
|
|
|
let color = this.colorList[index] |
|
|
|
|
|
for(let key in this.unitMap){ |
|
|
|
|
|
if(key.startsWith(color)){ |
|
|
|
|
|
this.unitKey = key |
|
|
|
|
|
break |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
}else{ |
|
|
|
|
|
// 判断是否有货 |
|
|
|
|
|
if(this.getUnitClassDel(item, index, type)){ |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
let color = this.colorList[this.colorIndex] |
|
|
|
|
|
let size = this.sizeList[index] |
|
|
|
|
|
this.unitKey = color + ':' + item |
|
|
|
|
|
} |
|
|
|
|
|
this.updateIndexAll() |
|
|
|
|
|
this.$emit('selectUnit', this.unitMap[this.unitKey]) |
|
|
|
|
|
}, |
|
|
|
|
|
getUnitClassDel(item, index, type){ |
|
|
|
|
|
let key = this.colorList[this.colorIndex] + ':' + item |
|
|
|
|
|
return this.unitMap[key] ? false : true |
|
|
|
|
|
}, |
|
|
|
|
|
updateIndexAll(){ |
|
|
|
|
|
let key = this.unitKey |
|
|
|
|
|
|
|
|
|
|
|
this.colorList.forEach((n, i) => { |
|
|
|
|
|
if(key.startsWith(n)){ |
|
|
|
|
|
this.colorIndex = i |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
this.sizeList.forEach((n, i) => { |
|
|
|
|
|
if(key.endsWith(n)){ |
|
|
|
|
|
this.sizeIndex = i |
|
|
|
|
|
} |
|
|
|
|
|
}) |
|
|
|
|
|
}, |
|
|
|
|
|
setUnitById(id){ |
|
|
|
|
|
for(let key in this.unitMap){ |
|
|
|
|
|
if(this.unitMap[key].id == id){ |
|
|
|
|
|
this.unitKey = key |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
this.updateIndexAll() |
|
|
|
|
|
}, |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss"> |
|
|
|
|
|
.page{ |
|
|
|
|
|
.submit-unit { |
|
|
|
|
|
padding: 30rpx; |
|
|
|
|
|
background-color: #fff; |
|
|
|
|
|
|
|
|
|
|
|
.title { |
|
|
|
|
|
font-size: 28rpx; |
|
|
|
|
|
font-weight: 600; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.list { |
|
|
|
|
|
display: flex; |
|
|
|
|
|
flex-wrap: wrap; |
|
|
|
|
|
font-size: 22rpx; |
|
|
|
|
|
|
|
|
|
|
|
.act { |
|
|
|
|
|
color: $uni-color; |
|
|
|
|
|
border: 1px solid $uni-color; |
|
|
|
|
|
background-color: #F9E7DE; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.del{ |
|
|
|
|
|
opacity: 0.3; |
|
|
|
|
|
&::after{ |
|
|
|
|
|
content: '【无货】'; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
view { |
|
|
|
|
|
border-radius: 15rpx; |
|
|
|
|
|
width: 320rpx; |
|
|
|
|
|
background-color: #eee; |
|
|
|
|
|
border: 1px solid #eee; |
|
|
|
|
|
margin: 10rpx; |
|
|
|
|
|
display: flex; |
|
|
|
|
|
justify-content: center; |
|
|
|
|
|
padding: 15rpx 0; |
|
|
|
|
|
overflow: hidden; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
</style> |