82 lines
2.3 KiB
TypeScript
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)
|
|
}
|