添加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