123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { defineStore } from "pinia";
- import { categoryActions } from "./actions";
- import { ListController } from "@/controllers/ListController";
- import { request } from "../../objects";
- import loading from "@/components/Provider/Loading";
- import { message } from "ant-design-vue";
- import Modal from "@/components/Provider/Modal";
- function parseTreeData(categoryList: any) {
- const list = [...categoryList];
- let roots = list.filter((item) => item.pid == "top");
- function findChild(root: CategoryItem, list: CategoryItem[]) {
- root.children = [];
- list.forEach((it) => {
- if (it.pid == root._id) {
- root.children?.push(it);
- }
- });
- root.children.forEach((child) => findChild(child, list));
- }
- roots.forEach((item) => findChild(item, list));
- function parseTreeItem(item: CategoryItem) {
- let ret: any = {
- _id: item._id,
- name: item.name,
- type: item.type,
- };
- if (item.children?.length) {
- ret.children = [];
- item.children.forEach((it) => {
- ret.children.push(parseTreeItem(it));
- });
- }
- return ret;
- }
- return roots.map((item) => parseTreeItem(item));
- }
- export const useCategory = defineStore("category", {
- state: () => ({
- // categories: [],
- listController: new ListController<CategoryItem, any>(request),
- }),
- getters: {
- categories(state) {
- return state.listController.state.list;
- },
- categoryTree() {
- const tree = parseTreeData(this.categories);
- return tree;
- },
- },
- actions: {
- async initCategories() {
- this.listController.setCrudPrefix("/category");
- await this.listController.loadPage(1, 200);
- },
- async addCategoryItem(pid = "top") {
- const base = await categoryActions.EditCategoryItem();
- const item = { pid, ...base };
- loading.show("保存中");
- await this.listController.addItem(item);
- loading.hidden();
- message.success("添加成功");
- },
- async updateCategoryItem(item: any) {
- const res = await this.listController.itemDetail(item._id);
- if (res.errorNo != 200) {
- message.warn("未查询到数据!");
- return;
- }
- const base = await categoryActions.EditCategoryItem(res.result);
- loading.show("保存中");
- await this.listController.saveItem(base);
- loading.hidden();
- message.success("更新成功");
- },
- async deleteCategoryItem(item: any) {
- const ok = await Modal.confirm({
- title: "删除确认",
- content: `删除后数据无法恢复,确认删除菜单:${item.name}?`,
- type: "danger",
- });
- if (ok) {
- loading.show("删除中");
- await this.listController.deleteItem(item._id);
- loading.hidden();
- message.success("删除成功");
- }
- },
- },
- });
|