mall-app-t/pages/product/js/sku.js

102 lines
2.5 KiB
JavaScript
Raw Normal View History

2024-06-06 02:20:25 +08:00
import { ref, computed } from "vue";
import { onLoad } from "@dcloudio/uni-app";
import peach from "@/peach";
import GoodsApi from "@/peach/api/trade/goods";
import { SPEC_TYPE } from "./config";
2024-06-04 18:43:13 +08:00
2024-06-06 02:20:25 +08:00
const pickerRef = ref(null);
2024-06-04 18:43:13 +08:00
2024-06-07 02:05:33 +08:00
// 多属性商品 sku 列表
const skus = ref([]);
2024-06-06 02:20:25 +08:00
const propertyList = ref([]);
2024-06-05 18:58:12 +08:00
2024-06-06 02:20:25 +08:00
const goodsPropertyList = ref([]);
2024-06-04 18:43:13 +08:00
2024-06-06 02:20:25 +08:00
const propertyListRef = ref(null);
2024-06-04 18:43:13 +08:00
const formData = ref({
2024-06-06 02:20:25 +08:00
specType: true,
specText: SPEC_TYPE[0].label,
});
2024-06-04 18:43:13 +08:00
2024-06-05 18:58:12 +08:00
async function showPropertyList() {
2024-06-06 02:20:25 +08:00
await getGoodsProperty();
propertyListRef.value.onOpen();
2024-06-05 18:58:12 +08:00
}
2024-06-04 18:43:13 +08:00
function onRDPickerConfirm(e) {
2024-06-06 02:20:25 +08:00
peach.$store("trade").specType = SPEC_TYPE[e.value[0]].value;
formData.value.specText = SPEC_TYPE[e.value[0]].label;
formData.value.specType = SPEC_TYPE[e.value[0]].value;
2024-06-04 18:43:13 +08:00
}
2024-06-05 18:58:12 +08:00
function pickerProperty() {
2024-06-07 02:05:33 +08:00
let index = specType.value ? 1 : 0;
2024-06-06 02:20:25 +08:00
pickerRef.value.onOpen([index]);
2024-06-05 18:58:12 +08:00
}
2024-06-07 02:05:33 +08:00
async function onPropertyConfirm(e) {
await getGoodsProperty();
2024-06-06 02:20:25 +08:00
console.log(e);
2024-06-04 18:43:13 +08:00
}
2024-06-05 18:58:12 +08:00
async function getGoodsProperty() {
2024-06-06 02:20:25 +08:00
let { data } = await GoodsApi.getHistoryProperty();
// 把 propertyList 中 id 相同的属性合并,并去重
propertyList.value = peach.$store("trade").selectedProperty;
2024-06-07 02:05:33 +08:00
console.log(propertyList.value);
2024-06-06 02:20:25 +08:00
// 根据已经选择数据,设置默认选中
data.forEach((item) => {
// 判断属性是否已经选中
let propertyParent = propertyList.value.find(
(sitem) => sitem?.id === item.id
);
item.checked = propertyParent ? true : false;
// 如果属性已经选中,查询子类中是否有选中
if (item.checked) {
item.propertyValues.forEach((child) => {
let childResult = propertyParent?.children.some(
2024-06-07 02:05:33 +08:00
(schild) => schild === child.id
2024-06-06 02:20:25 +08:00
);
console.log(childResult);
child.checked = childResult ? true : false;
});
}
});
goodsPropertyList.value = data;
2024-06-05 18:58:12 +08:00
}
2024-06-07 02:05:33 +08:00
const specType = computed(() => peach.$store("trade").goodsInfo.specType);
2024-06-05 18:58:12 +08:00
function initial() {
2024-06-06 02:20:25 +08:00
onLoad(() => {
2024-06-07 02:05:33 +08:00
formData.value.specType = specType.value ? true : false;
formData.value.specText = SPEC_TYPE[specType.value ? 1 : 0].label;
skus.value = peach.$store("trade").skus;
if (specType.value) {
getGoodsProperty();
}
2024-06-06 02:20:25 +08:00
});
2024-06-05 18:58:12 +08:00
}
export {
2024-06-06 02:20:25 +08:00
initial,
2024-06-07 02:05:33 +08:00
skus,
2024-06-06 02:20:25 +08:00
pickerRef,
pickerProperty,
propertyListRef,
formData,
onRDPickerConfirm,
onPropertyConfirm,
propertyList,
showPropertyList,
goodsPropertyList,
};