神仙都没用 b84785f5e6 1
2024-07-01 12:22:01 +08:00

88 lines
1.7 KiB
TypeScript

import { ElMessage } from "element-plus";
import type { EpsModule } from "../types";
import { service } from "/@/cool";
import { useCode } from "./code";
export function useMenu() {
const { createVue } = useCode();
// 创建菜单、权限、文件
function create(data: EpsModule): Promise<() => void> {
return new Promise((resolve, reject) => {
// 视图文件路径
data.viewPath = `modules/${data.module}/views${data.router?.replace(
`/${data.module}`,
""
)}.vue`;
// 添加菜单
service.base.sys.menu
.add({
type: 1,
isShow: true,
keepAlive: true,
...data,
api: undefined,
code: undefined,
columns: undefined
})
.then((res) => {
// 权限列表
const perms = data.api?.map((e) => {
const d = {
type: 2,
parentId: res.id,
name: e.summary || e.path,
perms: [e.path]
};
if (e.path == "/update") {
if (data.api?.find((a) => a.path == "/info")) {
d.perms.push("/info");
}
}
return {
...d,
perms: d.perms
.map((e) =>
(data.prefix?.replace("/admin/", "") + e).replace(/\//g, ":")
)
.join(",")
};
});
console.log(data);
// 批量插入权限
service.base.sys.menu.add(perms).then(() => {
resolve(() => {
service
.request({
url: "/__cool_createMenu",
method: "POST",
proxy: false,
data: {
code: createVue(data),
...data
}
})
.then(() => {
location.reload();
});
});
});
})
.catch((err) => {
ElMessage.error(err.message);
reject();
});
});
}
return {
create,
createVue
};
}