添加api文件
This commit is contained in:
303
src/api/hisApi.ts
Normal file
303
src/api/hisApi.ts
Normal 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 };
|
||||
Reference in New Issue
Block a user