添加api文件

This commit is contained in:
xianyi
2025-11-24 14:41:00 +08:00
parent 3c984f3b68
commit 63500e2e68

303
src/api/hisApi.ts Normal file
View File

@@ -0,0 +1,303 @@
import axios, { AxiosInstance } from "axios";
// API配置
const API_CONFIG = {
// 内网URL
INTERNAL_URL:
"http://10.1.5.118:8077/platform-api/api/his-web/self-service-machine/",
// 外网URL
EXTERNAL_URL:
"http://apihis.circleharmonyhospital.cn:8982/platform-api/api/his-web/self-service-machine/",
};
// 响应数据类型
export interface ApiResponse<T = any> {
Status: number;
Message: string | null;
Data: T;
CopyRight: string;
}
// 患者基本信息
export interface PatientInfo {
name: string;
gender: number;
gender_name: string;
age: string;
IdCard: string;
phone: string;
marital: number;
marital_name: string;
}
// VIP认证结果
export interface VipResult {
is_vip: number; // 0-否 1-是
}
// 可选项目列表 - 套餐信息
export interface PackageInfo {
physical_exam_id: number;
is_optional_package: number;
is_optional_package_name: string;
package_code: number;
package_name: string;
registration_time: string;
}
// 可选项目
export interface OptionalItem {
combination_name: string;
combination_code: number;
physical_exam_id: number;
package_code: number;
}
// 可选项目列表响应
export interface OptionalItemListResponse {
packageInfo: PackageInfo;
listOptionalItem: OptionalItem[];
}
// 已预约套餐信息
export interface PackagItemInfo {
patient_name: string;
appointment_datetime: string;
package_code: number;
package_name: string;
registration_time: string;
}
// 套餐详情
export interface PackDetail {
department_id: number;
department_name: string;
project_id: string;
project_name: string;
}
// 已预约套餐详情响应
export interface PackagItemDetailResponse {
packagItemInfo: PackagItemInfo;
listPackDetail: PackDetail[];
}
// PDF响应
export interface PdfResponse {
pdf_url: string;
message: string | null;
}
// 解析后的PDF响应接口8返回的pdf_url可能是JSON字符串
export interface ParsedPdfResponse {
pdfUrl: string;
message: string;
}
// 创建axios实例
function createAxiosInstance(baseURL: string): AxiosInstance {
const instance = axios.create({
baseURL,
timeout: 30000, // 30秒超时
headers: {
"Content-Type": "application/json; charset=UTF-8",
},
});
// 请求拦截器
instance.interceptors.request.use(
(config) => {
return config;
},
(error) => {
return Promise.reject(error);
}
);
// 响应拦截器
instance.interceptors.response.use(
(response) => {
return response;
},
(error) => {
return Promise.reject(error);
}
);
return instance;
}
// 默认使用外网URL可以通过环境变量或配置切换
let currentBaseURL = API_CONFIG.EXTERNAL_URL;
let axiosInstance = createAxiosInstance(currentBaseURL);
/**
* 设置API基础URL
* @param useInternal 是否使用内网URL
*/
export function setApiBaseUrl(useInternal: boolean = false) {
currentBaseURL = useInternal
? API_CONFIG.INTERNAL_URL
: API_CONFIG.EXTERNAL_URL;
axiosInstance = createAxiosInstance(currentBaseURL);
}
/**
* 1. 通过身份证号查询基本信息
*/
export async function getPatientInfo(
id_no: string
): Promise<ApiResponse<PatientInfo>> {
const response = await axiosInstance.post<ApiResponse<PatientInfo>>(
"patient-info",
{
id_no,
}
);
return response.data;
}
/**
* 2. 获取VIP客户认证结果
*/
export async function getVipStatus(
id_no: string
): Promise<ApiResponse<VipResult>> {
const response = await axiosInstance.post<ApiResponse<VipResult>>("is-vip", {
id_no,
});
return response.data;
}
/**
* 3. 通过身份证号获取体检选项项目列表
*/
export async function getOptionalItemList(
id_no: string
): Promise<ApiResponse<OptionalItemListResponse>> {
const response = await axiosInstance.post<
ApiResponse<OptionalItemListResponse>
>("optional-item-list", {
id_no,
});
return response.data;
}
/**
* 4. 查询已预约的体检套餐详情
* 注意此接口与接口3使用相同的路径但返回数据不同
* 如果后端需要区分,可能需要额外的参数或不同的路径
*/
export async function getPackagItemDetail(
id_no: string
): Promise<ApiResponse<PackagItemDetailResponse>> {
const response = await axiosInstance.post<
ApiResponse<PackagItemDetailResponse>
>("optional-item-list", {
id_no,
});
return response.data;
}
/**
* 5. 获取体检知情同意书PDF
*/
export async function getTongyishuPdf(
exam_id: number
): Promise<ApiResponse<PdfResponse>> {
const response = await axiosInstance.post<ApiResponse<PdfResponse>>(
"tongyishu-get",
{
exam_id,
}
);
return response.data;
}
/**
* 6. 体检知情同意书签名返回生成的知情同意书PDF
* @param exam_id 体检ID
* @param sign_file 签名图片文件File对象或Blob
*/
export async function submitTongyishuSign(
exam_id: number,
sign_file: File | Blob
): Promise<ApiResponse<PdfResponse>> {
const formData = new FormData();
formData.append("exam_id", exam_id.toString());
formData.append("sign_file", sign_file);
const response = await axiosInstance.post<ApiResponse<PdfResponse>>(
"tongyishu-sign-submit",
formData,
{
headers: {
"Content-Type": "multipart/form-data",
},
}
);
return response.data;
}
/**
* 7. 获取体检导检单PDF
*/
export async function getDaojiandanPdf(
exam_id: number
): Promise<ApiResponse<PdfResponse>> {
const response = await axiosInstance.post<ApiResponse<PdfResponse>>(
"daojiandan-get",
{
exam_id,
}
);
return response.data;
}
/**
* 8. 提交体检导检单签名返回生成的导检单PDF
* @param exam_id 体检ID
* @param sign_file 签名图片文件File对象或Blob
* @returns 注意返回的Data.pdf_url可能是JSON字符串需要解析
*/
export async function submitDaojiandanSign(
exam_id: number,
sign_file: File | Blob
): Promise<ApiResponse<PdfResponse>> {
const formData = new FormData();
formData.append("exam_id", exam_id.toString());
formData.append("sign_file", sign_file);
const response = await axiosInstance.post<ApiResponse<PdfResponse>>(
"daojiandan-sign-submit",
formData,
{
headers: {
"Content-Type": "multipart/form-data",
},
}
);
return response.data;
}
/**
* 解析接口8返回的pdf_url JSON字符串
* @param pdfUrlJsonString JSON字符串
* @returns 解析后的PDF响应对象
*/
export function parsePdfUrlResponse(
pdfUrlJsonString: string
): ParsedPdfResponse {
try {
return JSON.parse(pdfUrlJsonString);
} catch (error) {
// 如果不是JSON字符串直接返回
return {
pdfUrl: pdfUrlJsonString,
message: "",
};
}
}
// 导出axios实例以便需要时进行自定义配置
export { axiosInstance };