import { ref } from "vue"; import { defineStore } from "pinia"; import type { Category, CategoryRootType } from "../type"; export const useCategoryStore = defineStore("category", () => { const list = ref<CategoryRootType[]>([]); const selectedCategory = ref(""); // 选中的一级类别 const selectedSubCategory = ref(""); // 选中的二级类别 const selectedFuncCategory = ref(""); const categoryVisible = ref(true); let resetFuncValue = ""; let resetCategoryValue = ""; const getList = async () => { const config = useRuntimeConfig(); // 在SSR中,数据仅在服务器端获取并传递到客户端。 const { data } = await useAsyncData( "category", () => $fetch("/shop/product/category", { method: "GET", }), { server: true, // 仅在服务器端获取数据 } ); const rootList = data.value.data.rootCategoryList; list.value = rootList || []; resetCategoryValue = selectedCategory.value = rootList[0].categoryDisplayName; selectedSubCategory.value = rootList[0].list[0].id; resetFuncValue = selectedFuncCategory.value = rootList[0].productFunctions[0].id; }; const updateCategory = (value: string) => { selectedCategory.value = value; updateFuncCategory(value === resetCategoryValue ? resetFuncValue : ""); }; const updateSubCategory = (value: string) => { selectedSubCategory.value = value; }; const updateFuncCategory = (value?: string) => { selectedFuncCategory.value = value || ""; }; const updateDisplay = (visible: boolean) => { categoryVisible.value = visible; }; return { list, selectedCategory, selectedSubCategory, selectedFuncCategory, resetCategoryValue, categoryVisible, getList, updateCategory, updateSubCategory, updateFuncCategory, updateDisplay, }; });