|
@ -472,7 +472,9 @@ export default { |
|
|
creditLimit: [{ required: true, message: this.$t('product.credit_limit_hint'), trigger: 'blur' }] |
|
|
creditLimit: [{ required: true, message: this.$t('product.credit_limit_hint'), trigger: 'blur' }] |
|
|
}, |
|
|
}, |
|
|
integralList: [], |
|
|
integralList: [], |
|
|
integralProportion: '' // 积分兑换金额比例 |
|
|
|
|
|
|
|
|
integralProportion: '', // 积分兑换金额比例 |
|
|
|
|
|
beforeModifySkuIds: '', // 修改之前的sku集合 |
|
|
|
|
|
beforeModifySkuValueIndexs: [] // 修改之前sku的valueCode index值数组 |
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
watch: { |
|
|
watch: { |
|
@ -505,10 +507,10 @@ export default { |
|
|
methods: { |
|
|
methods: { |
|
|
|
|
|
|
|
|
handleChangeCascader() { |
|
|
handleChangeCascader() { |
|
|
console.log(this.form.classifyId) |
|
|
|
|
|
|
|
|
// console.log(this.form.classifyId) |
|
|
}, |
|
|
}, |
|
|
handleChangePlatformCascader() { |
|
|
handleChangePlatformCascader() { |
|
|
console.log(this.form.classifyBusinessId) |
|
|
|
|
|
|
|
|
// console.log(this.form.classifyBusinessId) |
|
|
}, |
|
|
}, |
|
|
async getBrandList() { |
|
|
async getBrandList() { |
|
|
const { data } = await getBrandList() |
|
|
const { data } = await getBrandList() |
|
@ -799,7 +801,51 @@ export default { |
|
|
this.initLangInfo(itemData) |
|
|
this.initLangInfo(itemData) |
|
|
this.initSkuLangInfo(itemData) |
|
|
this.initSkuLangInfo(itemData) |
|
|
this.form = { ...itemData, attrStyle: itemData.skus[0].style } |
|
|
this.form = { ...itemData, attrStyle: itemData.skus[0].style } |
|
|
|
|
|
this.handleBeforeSku() |
|
|
|
|
|
this.beforeModifySkuValueIndexs = this.handleValueCode() |
|
|
|
|
|
console.log("detail--->skus--->", this.form.skus) |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
handleBeforeSku() { |
|
|
|
|
|
let beforeModifySkuIdArr = [] |
|
|
|
|
|
if(this.form.names) { |
|
|
|
|
|
for (let name of this.form.names) { |
|
|
|
|
|
for (let skuValue of name.values){ |
|
|
|
|
|
if (skuValue.langInfoMap) { |
|
|
|
|
|
let skuId = '' |
|
|
|
|
|
if (skuValue.langInfoMap["zh"]) { |
|
|
|
|
|
skuId = skuValue.langInfoMap["zh"].skuUniId.split('-')[0] |
|
|
|
|
|
} else if (skuValue.langInfoMap["en"]) { |
|
|
|
|
|
skuId = skuValue.langInfoMap["en"].skuUniId.split('-')[0] |
|
|
|
|
|
} |
|
|
|
|
|
beforeModifySkuIdArr.push(skuId) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (beforeModifySkuIdArr.length > 0) { |
|
|
|
|
|
this.beforeModifySkuIds = beforeModifySkuIdArr.join(',') |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 处理修改前sku的valueCode值 |
|
|
|
|
|
handleValueCode() { |
|
|
|
|
|
let skuValueIndexs = [] |
|
|
|
|
|
if (this.form.names && this.form.names.length === 1) { |
|
|
|
|
|
// valueCode只对单组规格处理 |
|
|
|
|
|
skuValueIndexs = this.form.names[0].values.map(item => { |
|
|
|
|
|
const valueCodeArr = item.valueCode.split('_') |
|
|
|
|
|
const valueCodeIndex = valueCodeArr[valueCodeArr.length - 1] |
|
|
|
|
|
return valueCodeIndex |
|
|
|
|
|
}) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return skuValueIndexs; |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
initSkuLangInfo(itemData){ |
|
|
initSkuLangInfo(itemData){ |
|
|
if(itemData && itemData.names){ |
|
|
if(itemData && itemData.names){ |
|
|
itemData.names.forEach(nameItemData => { |
|
|
itemData.names.forEach(nameItemData => { |
|
@ -869,9 +915,10 @@ export default { |
|
|
}) |
|
|
}) |
|
|
return data |
|
|
return data |
|
|
}, |
|
|
}, |
|
|
skuFormat() { |
|
|
|
|
|
|
|
|
skuFormat(isMultiChange) { |
|
|
const skuListArray = [] |
|
|
const skuListArray = [] |
|
|
const result = { |
|
|
const result = { |
|
|
|
|
|
skuId: undefined, |
|
|
productId: '', |
|
|
productId: '', |
|
|
isDelete: 0, |
|
|
isDelete: 0, |
|
|
skuAttrCodeDTOList: [ |
|
|
skuAttrCodeDTOList: [ |
|
@ -898,6 +945,7 @@ export default { |
|
|
for (var i = 0; i < arr[depth].length; i++) { |
|
|
for (var i = 0; i < arr[depth].length; i++) { |
|
|
map.arr.push(arr[depth][i]) |
|
|
map.arr.push(arr[depth][i]) |
|
|
const { code, valueCode, attrId } = arr[depth][i] |
|
|
const { code, valueCode, attrId } = arr[depth][i] |
|
|
|
|
|
result.skuId = arr[depth][i].skuId |
|
|
result.skuAttrCodeDTOList[depth] = { |
|
|
result.skuAttrCodeDTOList[depth] = { |
|
|
code, |
|
|
code, |
|
|
valueCode, |
|
|
valueCode, |
|
@ -915,12 +963,39 @@ export default { |
|
|
const values = [] |
|
|
const values = [] |
|
|
//重新生成规格数据 |
|
|
//重新生成规格数据 |
|
|
this.form.names.map((skuItem, index) => { |
|
|
this.form.names.map((skuItem, index) => { |
|
|
|
|
|
let difValueCodeIndexs = [] |
|
|
|
|
|
if (this.form.names.length === 1) { |
|
|
|
|
|
// 单组规格 |
|
|
|
|
|
const currentValueCodeIndexs = this.handleValueCode() |
|
|
|
|
|
// 收集被删除的规格值的valueCode顺序 |
|
|
|
|
|
difValueCodeIndexs = this.beforeModifySkuValueIndexs.filter(x => !currentValueCodeIndexs.includes(x)); |
|
|
|
|
|
// 升序排序 |
|
|
|
|
|
difValueCodeIndexs.sort((a, b) => a - b) |
|
|
|
|
|
} |
|
|
const attrList = [] |
|
|
const attrList = [] |
|
|
skuItem.code = skuItem.code || 'attr_code_' + index |
|
|
skuItem.code = skuItem.code || 'attr_code_' + index |
|
|
const { code } = skuItem |
|
|
const { code } = skuItem |
|
|
skuItem.values && skuItem.values.map((attrItem, index1) => { |
|
|
skuItem.values && skuItem.values.map((attrItem, index1) => { |
|
|
attrItem.valueCode = attrItem.valueCode || code + '_value_' + index1 |
|
|
|
|
|
const skuId = attrItem.skuId |
|
|
|
|
|
|
|
|
if (!attrItem.valueCode) { |
|
|
|
|
|
// 单组规格被删除的规格值。解决删除中间某规格值,然后再新增规格值,保存错乱问题. |
|
|
|
|
|
if (difValueCodeIndexs.length > 0) { |
|
|
|
|
|
// 取出被删除的规格值valueCode顺序,填充到新增的规格值valueCode顺序 |
|
|
|
|
|
attrItem.valueCode = code + '_value_' + difValueCodeIndexs[0] |
|
|
|
|
|
difValueCodeIndexs.splice(0, 1) |
|
|
|
|
|
} else { |
|
|
|
|
|
attrItem.valueCode = code + '_value_' + index1 |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
//attrItem.valueCode = attrItem.valueCode || code + '_value_' + index1 |
|
|
|
|
|
let skuId = undefined |
|
|
|
|
|
if (attrItem.langInfoMap){ |
|
|
|
|
|
if (attrItem.langInfoMap["zh"]) { |
|
|
|
|
|
skuId = attrItem.langInfoMap["zh"].skuUniId.split('-')[0] |
|
|
|
|
|
} else if (attrItem.langInfoMap["en"]) { |
|
|
|
|
|
skuId = attrItem.langInfoMap["en"].skuUniId.split('-')[0] |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// const skuId = attrItem.skuId |
|
|
const attrId = attrItem.attrId |
|
|
const attrId = attrItem.attrId |
|
|
if (attrItem.skuValue_EN || attrItem.skuValue_ZH) { |
|
|
if (attrItem.skuValue_EN || attrItem.skuValue_ZH) { |
|
|
attrList.push({ |
|
|
attrList.push({ |
|
@ -940,15 +1015,23 @@ export default { |
|
|
if (values.length) { |
|
|
if (values.length) { |
|
|
doExchange(values, 0) |
|
|
doExchange(values, 0) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
this.form.skus = skuListArray.map(sku1 => { |
|
|
this.form.skus = skuListArray.map(sku1 => { |
|
|
const findSku = this.form.skus.find(sku2 => { |
|
|
const findSku = this.form.skus.find(sku2 => { |
|
|
|
|
|
|
|
|
|
|
|
if (isMultiChange) { |
|
|
|
|
|
// 多组规格变动,则保持现状,不从原先的sku中取值 |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
if (!sku2.skuAttrCodeDTOList) { |
|
|
if (!sku2.skuAttrCodeDTOList) { |
|
|
return false |
|
|
return false |
|
|
} |
|
|
} |
|
|
if (sku2.skuAttrCodeDTOList.length != sku1.skuAttrCodeDTOList.length) { |
|
|
if (sku2.skuAttrCodeDTOList.length != sku1.skuAttrCodeDTOList.length) { |
|
|
return false |
|
|
return false |
|
|
} |
|
|
} |
|
|
|
|
|
if (!sku1.skuId) { |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
const valueCodeList = sku2.skuAttrCodeDTOList.map(item => item.valueCode) |
|
|
const valueCodeList = sku2.skuAttrCodeDTOList.map(item => item.valueCode) |
|
|
var result = sku1.skuAttrCodeDTOList.every(item => valueCodeList.indexOf(item.valueCode) !== -1) |
|
|
var result = sku1.skuAttrCodeDTOList.every(item => valueCodeList.indexOf(item.valueCode) !== -1) |
|
|
|
|
|
|
|
@ -960,29 +1043,106 @@ export default { |
|
|
return sku1 |
|
|
return sku1 |
|
|
} |
|
|
} |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
showEditSkuAttr(){ |
|
|
showEditSkuAttr(){ |
|
|
this.newSkuAttrList = JSON.parse(JSON.stringify(this.form.names)) |
|
|
this.newSkuAttrList = JSON.parse(JSON.stringify(this.form.names)) |
|
|
this.editSkuAttrDialogVisible = true; |
|
|
this.editSkuAttrDialogVisible = true; |
|
|
}, |
|
|
}, |
|
|
editSkuAttrCancel(){ |
|
|
editSkuAttrCancel(){ |
|
|
console.log('cancel') |
|
|
|
|
|
this.editSkuAttrDialogVisible = false; |
|
|
this.editSkuAttrDialogVisible = false; |
|
|
}, |
|
|
}, |
|
|
editSkuAttrSure(){ |
|
|
editSkuAttrSure(){ |
|
|
console.log('save') |
|
|
|
|
|
this.editSkuAttrDialogVisible = false; |
|
|
|
|
|
this.form.names = JSON.parse(JSON.stringify(this.newSkuAttrList)) |
|
|
|
|
|
console.log(this.form.names) |
|
|
|
|
|
this.skuFormat() |
|
|
|
|
|
|
|
|
const currentSkuIds = this.getCurrentSkuIds(); |
|
|
|
|
|
if (this.isEqual(this.beforeModifySkuIds, currentSkuIds)){ |
|
|
|
|
|
// 规格没有变动 |
|
|
|
|
|
this.editSkuAttrDialogVisible = false; |
|
|
|
|
|
this.form.names = JSON.parse(JSON.stringify(this.newSkuAttrList)) |
|
|
|
|
|
this.skuFormat() |
|
|
|
|
|
} else { |
|
|
|
|
|
// 规格有变动,判断原先的规格有没有库存。若有库存,则不允许修改规格 |
|
|
|
|
|
if (this.form.skus && this.form.skus.length > 0) { |
|
|
|
|
|
for (const sku of this.form.skus) { |
|
|
|
|
|
if (sku.stockNumber > 0) { |
|
|
|
|
|
this.$message.error('之前规格有库存,不允许修改') |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.form.names = JSON.parse(JSON.stringify(this.newSkuAttrList)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (this.form.names.length === 1) { |
|
|
|
|
|
// 单组规格变动处理 |
|
|
|
|
|
const currentSkuArr = currentSkuIds.split(',') |
|
|
|
|
|
const beforeModifySkuArr = this.beforeModifySkuIds.split(',') |
|
|
|
|
|
const differenceArr = beforeModifySkuArr.filter(x => !currentSkuArr.includes(x)); |
|
|
|
|
|
this.form.deletes = differenceArr |
|
|
|
|
|
this.skuFormat() |
|
|
|
|
|
} else { |
|
|
|
|
|
// 多组规格变动处理。后台直接删除原先的所有规格数据,重新保存所有修改规格 |
|
|
|
|
|
this.form.deletes = this.beforeModifySkuIds.split(',') |
|
|
|
|
|
this.skuFormat(true) |
|
|
|
|
|
} |
|
|
|
|
|
this.editSkuAttrDialogVisible = false; |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
// 有逗号分隔的字符串,不分先后顺序判断 |
|
|
|
|
|
isEqual(a, b) { |
|
|
|
|
|
let c = a.split(','), d = b.split(','); |
|
|
|
|
|
if (c.length != d.length) { |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
for (let i = 0; i < c.length; i++) { |
|
|
|
|
|
let isMatch = false; |
|
|
|
|
|
for (let j = 0; j < d.length; j++) { |
|
|
|
|
|
if (c[i] == d[j]) { |
|
|
|
|
|
isMatch = true; |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
if (!isMatch) { |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return true; |
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
getCurrentSkuIds() { |
|
|
|
|
|
let currentChangeSkuIds = '' |
|
|
|
|
|
const currentChangeSkuIdArr = [] |
|
|
|
|
|
if (this.newSkuAttrList) { |
|
|
|
|
|
for (const skuArrItem of this.newSkuAttrList) { |
|
|
|
|
|
for (const skuValue of skuArrItem.values){ |
|
|
|
|
|
if (skuValue.langInfoMap) { |
|
|
|
|
|
let skuId = '' |
|
|
|
|
|
if (skuValue.langInfoMap["zh"]) { |
|
|
|
|
|
skuId = skuValue.langInfoMap["zh"].skuUniId.split('-')[0] |
|
|
|
|
|
} else if (skuValue.langInfoMap["en"]) { |
|
|
|
|
|
skuId = skuValue.langInfoMap["en"].skuUniId.split('-')[0] |
|
|
|
|
|
} |
|
|
|
|
|
currentChangeSkuIdArr.push(skuId) |
|
|
|
|
|
} else { |
|
|
|
|
|
currentChangeSkuIdArr.push(0) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (currentChangeSkuIdArr.length > 0) { |
|
|
|
|
|
currentChangeSkuIds = currentChangeSkuIdArr.join(',') |
|
|
|
|
|
} |
|
|
|
|
|
return currentChangeSkuIds |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
showOneSetting() { |
|
|
showOneSetting() { |
|
|
this.$refs.oneSetting.showOnSetDialog = true |
|
|
this.$refs.oneSetting.showOnSetDialog = true |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
onOnSetting(settingInfo){ |
|
|
|
|
|
console.log('onOnSetting--->', settingInfo) |
|
|
|
|
|
|
|
|
onOnSetting(settingInfo) { |
|
|
this.form.skus.forEach(sku => { |
|
|
this.form.skus.forEach(sku => { |
|
|
sku.price = settingInfo.price |
|
|
sku.price = settingInfo.price |
|
|
sku.originalPrice = settingInfo.originalPrice |
|
|
sku.originalPrice = settingInfo.originalPrice |
|
|