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
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();
|
|
});
|
|
}
|
|
|