You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

91 lines
1.5 KiB

import { merge } from "lodash-es";
import { BaseService, service } from "../service";
import { path2Obj } from "../utils";
import { isDev } from "/@/config";
import { eps } from "virtual:eps";
// 读取本地所有 service
const files = import.meta.glob("/service/**/*", {
eager: true,
});
// 数据集合
const services: any[] = [];
// 取值
for (const i in files) {
try {
// @ts-ignore
services.push(new files[i].default());
} catch (e) {
console.error(`[service] ${i} error: `, e);
}
}
export function createEps() {
// 设置 request 方法
function set(d: any) {
if (d.namespace) {
const a: any = new BaseService(d.namespace);
for (const i in d) {
const { path, method = "get" } = d[i];
if (path) {
a.request = a.request;
a[i] = function (data?: any) {
return this.request({
url: path,
method,
[method.toLocaleLowerCase() == "post" ? "data" : "params"]: data,
});
};
}
}
for (const i in a) {
d[i] = a[i];
}
} else {
for (const i in d) {
set(d[i]);
}
}
}
// 遍历每一个方法
set(eps.service);
// 合并 eps
merge(service, eps.service);
// 合并[local]
merge(
service,
path2Obj(
services.map((e) => {
return {
path: (e.namespace || "").replace("app/", ""),
value: e,
};
})
)
);
// 提示
if (isDev) {
console.log("[cool-eps] updated");
}
}
// 监听 vite 触发事件
if (import.meta.hot) {
import.meta.hot.on("eps-update", ({ service }) => {
if (service) {
eps.service = service;
}
createEps();
});
}