Files
xh-medical-sign-web/patient-h5/src/api/index.ts
T

82 lines
2.3 KiB
TypeScript

import { unwrapApiResponse } from '@/utils/api-response'
import { request } from '@/utils/request'
import type {
ApiResponse,
SignatureUploadInput,
SignatureUploadResponse,
SigningProof,
SigningFormState,
PatientAnswer,
SigningContextResponse,
TokenConsumeRequest,
TokenConsumeResponse,
} from './types'
export function consumeSigningToken(
payload: TokenConsumeRequest,
idempotencyKey: string,
): Promise<TokenConsumeResponse> {
return request
.post<ApiResponse<TokenConsumeResponse>>('/v1/sign-deliveries/token/consume', payload, {
headers: {
'Idempotency-Key': idempotencyKey,
},
})
.then(unwrapApiResponse)
}
/**
* 读取本次签署的完整上下文:患者信息 / 签署人 / 文书正文 / 医生已填结果。
*
* Context 使用已消费凭证,不再把原始一次性 Token 放进请求 URL、日志或后续请求。
*/
export function fetchSigningContext(proof: SigningProof): Promise<SigningContextResponse> {
return request
.post<ApiResponse<SigningContextResponse>>('/v1/sign-deliveries/token/context', proof)
.then(unwrapApiResponse)
}
export function uploadSigningSignature(
payload: SignatureUploadInput,
): Promise<SignatureUploadResponse> {
const formData = new FormData()
formData.append('file', payload.file, 'signature.png')
formData.append('deliveryId', payload.deliveryId)
formData.append('uploadToken', payload.uploadToken)
formData.append(
'metadata',
new Blob([JSON.stringify(payload.metadata)], { type: 'application/json' }),
)
formData.append(
'signer',
new Blob([JSON.stringify(payload.signer)], { type: 'application/json' }),
)
return request
.post<ApiResponse<SignatureUploadResponse>>(
`/v1/sign-deliveries/${encodeURIComponent(payload.taskId)}/signature`,
formData,
{
headers: {
'Idempotency-Key': payload.idempotencyKey,
},
},
)
.then(unwrapApiResponse)
}
export function saveSigningForm(
proof: SigningProof,
expectedRevision: number,
answers: Record<string, PatientAnswer>,
): Promise<SigningFormState> {
return request
.post<ApiResponse<SigningFormState>>('/v1/sign-deliveries/token/form', {
...proof,
expectedRevision,
answers,
})
.then(unwrapApiResponse)
}