Vue.component('choose-goods-class', {
template: `
`,
props: {
'selectedData': {
type: Array,
default: () => {
return []
},
},//已选中的分类
'userType': {
type: Number,
default: 1,
},//1商户 2门店
'storeId': {
type: String,
default: '',
},//门店ID在userType等于2时,并且是商户选择门店商品时可能会传
'isDeep': {
type: Boolean,
default: false,
},//是否选择到最底层
'isDisabled': {
type: Boolean,
default: false,
},//是否禁止修改
},
data() {
return {
goodsClass1: [],
goodsClass2: [],
goodsClass3: [],
id1: '',
id2: '',
id3: '',
isError: false,
}
},
methods: {
getGoodsClass(pid, type, fn) {
$.ajax({
url: "/index.php/Retail/MerCate/getChooseClassList",
data: {
pid: pid,
type: type,
user_type: this.userType,
store_id: this.storeId,
},
type: 'POST',
success: (res) => {
if (res.status == 1) {
this.setClassData(type, res.data);
} else {
this.setClassData(type, []);
}
if (typeof fn == "function") this.$nextTick(() => {
fn();
})
}
})
},
setClassData(type, data) {
switch (type) {
case 1:
this.goodsClass1 = [];
this.goodsClass1 = data;
this.id1 = '';
this.goodsClass2 = [];
this.id2 = '';
this.goodsClass3 = [];
this.id3 = '';
break;
case 2:
this.goodsClass2 = [];
this.goodsClass2 = data;
this.id2 = '';
this.goodsClass3 = [];
this.id3 = '';
break;
case 3:
this.goodsClass3 = [];
this.goodsClass3 = data;
this.id3 = '';
break;
}
},
changeGoodsClass1(val, fn) {
if (!val) {
this.goodsClass2 = [];
this.id2 = '';
this.goodsClass3 = [];
this.id3 = '';
} else {
this.getGoodsClass(val, 2, () => {
if (typeof fn == "function") this.$nextTick(() => {
fn();
})
});
}
this.callback();
},
changeGoodsClass2(val, fn) {
if (!val) {
this.goodsClass3 = [];
this.id3 = '';
} else {
this.getGoodsClass(val, 3, () => {
if (typeof fn == "function") this.$nextTick(() => {
fn();
})
});
}
this.callback();
},
changeGoodsClass3(val, fn) {
if (!val) {
this.id3 = '';
}
if (typeof fn == "function") this.$nextTick(() => {
fn();
})
this.callback();
},
callback() {
let a = this.id1 || !this.id1 && !this.goodsClass1.length;
let b = this.id2 || !this.id2 && !this.goodsClass2.length;
let c = this.id3 || !this.id3 && !this.goodsClass3.length;
if ((this.isDeep && a && b && c) || !this.isDeep) {
this.isError = false;
this.$nextTick(() => {
this.$emit('choose-class', {data: [this.id1, this.id2, this.id3], error: this.isError});
})
} else {
this.isError = true;
}
},
unitClass() {
//已选中一级分类
if (this.selectedData[0]) {
this.id1 = this.selectedData[0];//一级分类赋值
if (this.selectedData[1]) {
//已选中二级分类
//获取二级分类列表
this.changeGoodsClass1(this.selectedData[0], () => {
this.id2 = this.selectedData[1];//二级分类赋值
this.callback();
if (this.selectedData[2]) {
//已选中三级分类
//获取三级分类列表
this.changeGoodsClass2(this.selectedData[1], () => {
this.id3 = this.selectedData[2];//三级分类赋值
this.callback();
});
} else {
this.setClassData(3, []);
}
});
} else {
this.setClassData(2, []);
}
} else {
this.setClassData(1, []);
}
}
},
mounted() {
this.callback();
},
created() {
this.getGoodsClass(0, 1);
if (this.selectedData.length) this.unitClass();
},
watch: {
selectedData: {
deep: true,
handler(n, o) {
this.unitClass();
}
},
isDeep(n, o) {
console.log(n, o);
}
},
});