优化商品规格,在添加新规格后将不会清除掉原有规格属性。

master
lhd 5 years ago
parent a562473301
commit 1d3332712a

@ -63,6 +63,7 @@
<prod-transport v-show="dataForm.deliveryMode.hasShopDelivery" <prod-transport v-show="dataForm.deliveryMode.hasShopDelivery"
v-model="dataForm.deliveryTemplateId"></prod-transport> v-model="dataForm.deliveryTemplateId"></prod-transport>
<sku-tag ref="skuTag" <sku-tag ref="skuTag"
:skuList="dataForm.skuList"
@change="skuTagChangeSkuHandler"></sku-tag> @change="skuTagChangeSkuHandler"></sku-tag>
<sku-table ref="skuTable" <sku-table ref="skuTable"
v-model="dataForm.skuList" v-model="dataForm.skuList"

@ -8,11 +8,11 @@
<br/> <br/>
<el-tag <el-tag
v-for="(tagItem, tagItemIndex) in tag.tagItems" v-for="(tagItem, tagItemIndex) in tag.tagItems"
:key="tagItem" :key="tagItem.valueId"
closable closable
:disable-transitions="false" :disable-transitions="false"
@close="handleTagClose(tagIndex, tagItemIndex)"> @close="handleTagClose(tagIndex, tagItemIndex)">
{{tagItem}} {{tagItem.propValue}}
</el-tag> </el-tag>
<el-input <el-input
class="input-new-tag" class="input-new-tag"
@ -54,6 +54,8 @@
<el-button size="mini" type="primary" @click="addTag()" v-show="isShowTagInput"></el-button> <el-button size="mini" type="primary" @click="addTag()" v-show="isShowTagInput"></el-button>
<el-button size="mini" @click="hideTagInput()" v-show="isShowTagInput"></el-button> <el-button size="mini" @click="hideTagInput()" v-show="isShowTagInput"></el-button>
</el-form-item> </el-form-item>
</div> </div>
</template> </template>
@ -87,12 +89,16 @@
this.dbTags = data this.dbTags = data
}) })
}, },
// props: { props: {
// tags: { // sku // tags: { // sku
// default: [], // default: [],
// type: Array // type: Array
// } // }
// }, // },
skuList: {
default: []
}
},
computed: { computed: {
// 使, // 使,
unUseTags () { unUseTags () {
@ -122,26 +128,84 @@
return return
} }
let skuList = [] let skuList = []
if (this.type === 4) {
//
this.skuList.forEach(sku => {
let propertiesArray = sku.properties.split(';')
if (this.tagItemName !== propertiesArray[this.tagNameIndex].split(':')[1]) {
skuList.push(sku)
}
})
} else if (this.type === 2) {
//
var properties = this.tagName + ':' + this.tagItemName
//
let tempSkuList = [] let tempSkuList = []
val.forEach(tag => { val.forEach(tag => {
if (skuList.length === 0) { if (skuList.length === 0) {
if (this.tagName === tag.tagName) {
let sku = Object.assign({}, this.defalutSku)
sku.properties = properties //
skuList.push(sku)
} else {
tag.tagItems.forEach(tagItem => { tag.tagItems.forEach(tagItem => {
let sku = Object.assign({}, this.defalutSku) let sku = Object.assign({}, this.defalutSku)
sku.properties = `${tag.tagName}:${tagItem}` // sku.properties = `${tag.tagName}:${tagItem.propValue}` //
skuList.push(sku) skuList.push(sku)
}) })
}
if (val.length === 1) {
skuList = this.skuList.concat(skuList)
}
} else { } else {
tempSkuList = [] tempSkuList = []
if (this.tagName === tag.tagName) {
skuList.forEach(sku => {
if (sku.properties.indexOf(this.tagName) === -1) {
let newSku = Object.assign({}, sku)
newSku.properties = `${sku.properties};${properties}`
tempSkuList.push(newSku)
}
})
} else {
tag.tagItems.forEach(tagItem => { tag.tagItems.forEach(tagItem => {
skuList.forEach(sku => { skuList.forEach(sku => {
if (sku.properties.indexOf(tag.tagName) === -1) {
let newSku = Object.assign({}, sku) let newSku = Object.assign({}, sku)
newSku.properties = `${sku.properties};${tag.tagName}:${tagItem}` newSku.properties = `${sku.properties};${tag.tagName}:${tagItem.propValue}`
tempSkuList.push(newSku)
}
})
})
}
skuList = this.skuList.concat(tempSkuList)
console.log('skuList', skuList)
}
})
} else {
//
let tempSkuList = []
val.forEach(tag => {
// console.log('tag', tag)
if (skuList.length === 0) {
tag.tagItems.forEach(tagItem => {
let sku = Object.assign({}, this.defalutSku)
sku.properties = `${tag.tagName}:${tagItem.propValue}` //
skuList.push(sku)
})
} else {
tempSkuList = []
tag.tagItems.forEach(tagItem => {
skuList.forEach(sku => {
let newSku = Object.assign({}, sku)
newSku.properties = `${sku.properties};${tag.tagName}:${tagItem.propValue}`
tempSkuList.push(newSku) tempSkuList.push(newSku)
}) })
}) })
skuList = tempSkuList skuList = tempSkuList
} }
}) })
}
if (!skuList.length) { if (!skuList.length) {
skuList.push(Object.assign({}, this.defalutSku)) skuList.push(Object.assign({}, this.defalutSku))
} }
@ -155,6 +219,7 @@
init (skuList) { init (skuList) {
this.value = skuList this.value = skuList
if (!skuList || !skuList.length) { if (!skuList || !skuList.length) {
this.skuTags = []
this.$emit('change', [Object.assign({}, this.defalutSku)]) this.$emit('change', [Object.assign({}, this.defalutSku)])
return return
} }
@ -165,17 +230,18 @@
if (!sku.properties) break if (!sku.properties) break
let propertiesArray = sku.properties.split(';') let propertiesArray = sku.properties.split(';')
for (let j in propertiesArray) { for (let j in propertiesArray) {
let cnProperties = propertiesArray[j].split(':') let properties = propertiesArray[j].split(':')
if (!skuTags[j]) { if (!skuTags[j]) {
skuTags[j] = { skuTags[j] = {
tagName: cnProperties[0], tagName: properties[0],
tagItems: [] tagItems: []
} }
this.tagItemInputs.push({ visible: false, value: '' }) this.tagItemInputs.push({ visible: false, value: '' })
} }
let tagItemNameIndex = skuTags[j].tagItems.findIndex((tagItemName) => tagItemName === cnProperties[1]) let tagItemNameIndex = skuTags[j].tagItems.findIndex((tagItemName) => tagItemName.propValue === properties[1])
if (tagItemNameIndex === -1) { if (tagItemNameIndex === -1) {
skuTags[j].tagItems.push(cnProperties[1]) // skuTags[j].tagItems.push(properties[1])
skuTags[j].tagItems.push({propValue: properties[1]})
} }
} }
} }
@ -183,7 +249,7 @@
}, },
// //
shopTagInput () { shopTagInput () {
this.isShowTagInput = true this.isShowTagInput = !this.isShowTagInput
}, },
// //
hideTagInput () { hideTagInput () {
@ -201,16 +267,31 @@
return return
} }
this.isShowTagInput = false this.isShowTagInput = false
for (let i = 0; i < selectValues.length; i++) {
const element = selectValues[i]
let is = Object.prototype.toString.call(element) === '[object Object]'
if (!is) {
this.maxPropId = this.maxPropId + 1
break
}
}
let tagItems = [] let tagItems = []
for (let i = 0; i < selectValues.length; i++) { for (let i = 0; i < selectValues.length; i++) {
const element = selectValues[i] const element = selectValues[i]
let is = Object.prototype.toString.call(element) === '[object Object]'
if (is) {
tagItems.push(element) tagItems.push(element)
} else {
this.maxValueId = this.maxValueId + 1
tagItems.push({propId: this.maxPropId, propValue: element, valueId: this.maxValueId})
}
} }
// //
this.$store.commit('prod/addSkuTag', { this.$store.commit('prod/addSkuTag', {
tagName: this.addTagInput.propName, tagName: this.addTagInput.propName,
tagItems tagItems
}) })
this.type = 1
this.cleanTagInput() this.cleanTagInput()
}, },
// //
@ -219,6 +300,7 @@
propName: '', propName: '',
selectValues: [] selectValues: []
} }
this.dbTagValues = []
}, },
// //
handleTagClick () { handleTagClick () {
@ -238,21 +320,32 @@
this.dbTagValues = data this.dbTagValues = data
}) })
}, },
// // --
handleTagClose (tagIndex, tagItemIndex) { handleTagClose (tagIndex, tagItemIndex) {
if (this.skuTags[tagIndex].tagItems.length === 1) { if (this.skuTags[tagIndex].tagItems.length === 1) {
return return
} }
this.type = 4
this.$store.commit('prod/removeSkuTagItem', { tagIndex, tagItemIndex }) this.$store.commit('prod/removeSkuTagItem', { tagIndex, tagItemIndex })
}, },
// //
handleInputConfirm (tagIndex) { handleInputConfirm (tagIndex) {
let tagItem = this.tagItemInputs[tagIndex].value if (this.checkTagItem(tagIndex)) {
return
}
var tagItems = this.skuTags[tagIndex].tagItems
var itemValue = this.tagItemInputs[tagIndex].value
let index = tagItems.length - 1
this.tagName = this.skuTags[tagIndex].tagName
this.tagItemName = this.tagItemInputs[tagIndex].value
let maxValue = this.getMaxValueId(this.skuTags[tagIndex].tagItems)
let tagItem = {propId: index === -1 ? 0 : this.skuTags[tagIndex].tagItems[index].propId, propValue: itemValue, valueId: index === -1 ? 0 : (maxValue + 1)}
if (tagItem) { if (tagItem) {
this.$store.commit('prod/addSkuTagItem', { tagIndex, tagItem }) this.$store.commit('prod/addSkuTagItem', { tagIndex, tagItem })
} }
this.tagItemInputs[tagIndex].visible = false this.tagItemInputs[tagIndex].visible = false
this.tagItemInputs[tagIndex].value = '' this.tagItemInputs[tagIndex].value = ''
this.type = 2
}, },
// //
showTagInput (tagIndex) { showTagInput (tagIndex) {
@ -262,15 +355,44 @@
this.$refs[`saveTagInput${tagIndex}`][0].$refs.input.focus() this.$refs[`saveTagInput${tagIndex}`][0].$refs.input.focus()
}) })
}, },
//
getMaxValueId (list) {
let value = Math.max.apply(Math, list.map(item => { return item.valueId }))
return value
},
//
removeTag (tagIndex) { removeTag (tagIndex) {
this.type = 3
this.$store.commit('prod/removeSkuTag', tagIndex) this.$store.commit('prod/removeSkuTag', tagIndex)
},
/**
* 新增规格值时判断是否存在同名的规格值
*/
checkTagItem (tagIndex) {
let tagItem = this.tagItemInputs[tagIndex].value
if (!tagItem) {
this.tagItemInputs[tagIndex].visible = false
this.tagItemInputs[tagIndex].value = ''
return true
}
var isSame = false
this.skuTags.forEach(tag => {
let arr = tag.tagItems.map((item, index) => {
return item.propValue
})
if (arr.indexOf(tagItem) > -1) {
isSame = true
this.$message.error('product.specificationValue')
return false
}
})
return isSame
} }
} }
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.mod-prod-sku-tag { .mod-prod-sku-tag {
.el-tag + .el-tag { .el-tag + .el-tag {
margin-left: 10px; margin-left: 10px;
@ -288,4 +410,30 @@
vertical-align: bottom; vertical-align: bottom;
} }
} }
//
.sku-border{
border: 1px solid #EBEEF5;
width:70%
}
.sku-background{
background-color: #F6f6f6;
margin: 12px 12px;
.el-button{
margin-left: 10px;
span{
color:#000 !important;
}
}
.el-form-item__label{
padding:0 24px 0 0
}
}
.sku-tag{
margin: 12px 12px;
}
.tagTree{
margin-left: 18px;
padding-bottom:8px;
}
</style> </style>

Loading…
Cancel
Save