| @ -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> | |||