Files
medical-mall/stores/useMockData.js
2026-02-26 09:50:58 +08:00

93 lines
2.3 KiB
JavaScript

// ⚠ Mock 数据,后续请替换成真实接口。
import { reactive, watch } from "vue";
export const useMockData = () => {
// 从本地存储读取初始数据,如果没有则使用默认值
const initialCategories = uni.getStorageSync("mockCategories") || [
{ id: 101, name: "分类 A", status: 1, sort: 1 },
{ id: 102, name: "分类 B", status: 1, sort: 2 },
];
const initialArticles = uni.getStorageSync("mockArticles") || [
{
id: 1,
title: "文章 1",
summary: "摘要 1",
cover: "",
categoryId: 101,
content: "<p>富文本内容 1</p>",
},
{
id: 2,
title: "文章 2",
summary: "摘要 2",
cover: "",
categoryId: 102,
content: "<p>富文本内容 2</p>",
},
];
const mockCategories = reactive(initialCategories);
const mockArticles = reactive(initialArticles);
// 监听数据变化并保存到本地存储
watch(
mockCategories,
(newVal) => {
uni.setStorageSync("mockCategories", JSON.parse(JSON.stringify(newVal)));
},
{ deep: true },
);
watch(
mockArticles,
(newVal) => {
uni.setStorageSync("mockArticles", JSON.parse(JSON.stringify(newVal)));
},
{ deep: true },
);
const addCategory = (category) => {
const newId =
mockCategories.length > 0
? Math.max(...mockCategories.map((c) => c.id)) + 1
: 101;
mockCategories.push({ ...category, id: newId });
};
const updateCategory = (id, category) => {
const index = mockCategories.findIndex((c) => c.id === id);
if (index !== -1) {
Object.assign(mockCategories[index], category);
}
};
const addArticle = (article) => {
const newId =
mockArticles.length > 0
? Math.max(...mockArticles.map((a) => a.id)) + 1
: 1;
mockArticles.push({ ...article, id: newId });
};
const updateArticle = (id, article) => {
const index = mockArticles.findIndex((a) => a.id === id);
if (index !== -1) {
Object.assign(mockArticles[index], article);
}
};
return {
mockCategories,
mockArticles,
addCategory,
updateCategory,
addArticle,
updateArticle,
};
};
// 单例模式,确保全局共享状态
const mockStore = useMockData();
export default mockStore;