safety-eval-service-frontend/src/api/enterpriseInfo/http.js

100 lines
2.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import { Get, Post } from "@cqsjjb/jjb-common-lib/http";
import { normalizeQueryIds, withIds, asId } from "./idUtil";
import { buildOrgInfoHeaders } from "./orgContext";
/**
* jjb-common-lib 在 jjbCommonHttpConfig.header 存在时会完全替换请求头、不再读 sessionStorage。
* 因此 token / orgInfoId 都通过每次请求的 headers 参数显式传入。
*
* @param options.includeOrgContext 默认 true机构 getInfo 查询应传 false不带 orgInfoId
*/
function buildRequestHeaders(extraHeaders = {}, options = {}) {
const { includeOrgContext = true } = options;
const headers = { ...extraHeaders };
const token = sessionStorage.getItem("token");
if (token && !headers.token) {
headers.token = token;
}
if (!includeOrgContext) {
return headers;
}
return buildOrgInfoHeaders(headers);
}
function parseHttpError(err) {
const data = err?.response?.data;
if (data && typeof data === "object") {
return {
success: false,
code: data.code ?? data.errCode,
message: data.message || data.errMessage || "操作失败",
data: data.data ?? null,
};
}
return { success: false, message: err?.message || "请求失败" };
}
/** 底层 HTTP供 adapter 层组合调用(不可嵌套 declareRequest */
export async function apiGet(path, params = {}, headers = {}, options = {}) {
try {
return await Get(path, normalizeQueryIds(params), buildRequestHeaders(headers, options));
}
catch (err) {
return parseHttpError(err);
}
}
/** @ 前缀表示 Post 请求体不包裹 request 字段 */
export async function apiPost(path, data = {}, headers = {}) {
const url = path.startsWith("@") ? path : `@${path}`;
try {
return await Post(url, withIds(data), buildRequestHeaders(headers));
}
catch (err) {
return parseHttpError(err);
}
}
export async function apiPostDelete(path, id) {
const url = `${path}?id=${encodeURIComponent(asId(id) ?? "")}`;
try {
return await Post(url, {}, buildRequestHeaders());
}
catch (err) {
return parseHttpError(err);
}
}
export function safePageResult(mapper) {
return async (params) => {
try {
const res = await mapper(params);
return res;
}
catch (err) {
console.warn("[enterpriseInfo/safePageResult]", err);
return { success: false, data: [], totalCount: 0 };
}
};
}
export function safeAction(mapper) {
return async (params) => {
try {
const res = await mapper(params);
if (res && res.success === false) {
return {
success: false,
message: res.message || res.msg || "操作失败",
code: res.code,
};
}
return res;
}
catch (err) {
console.warn("[enterpriseInfo/safeAction]", err);
return parseHttpError(err);
}
};
}