feat(patient-h5): 接入签署令牌与签名上传

This commit is contained in:
yelan
2026-09-01 10:13:45 +08:00
parent e467f03f23
commit 40cd313786
11 changed files with 614 additions and 42 deletions
+51 -5
View File
@@ -1,6 +1,52 @@
import axios from 'axios'
import { unwrapApiResponse } from '@/utils/api-response'
import { request } from '@/utils/request'
export const apiClient = axios.create({
baseURL: import.meta.env.VITE_API_BASE_URL || '/api',
timeout: 10_000,
})
import type {
ApiResponse,
SignatureUploadInput,
SignatureUploadResponse,
TokenConsumeRequest,
TokenConsumeResponse,
} from './types'
export function consumeSigningToken(payload: TokenConsumeRequest): Promise<TokenConsumeResponse> {
return request
.post<ApiResponse<TokenConsumeResponse>>('/v1/sign-deliveries/token/consume', payload)
.then(unwrapApiResponse)
}
function createIdempotencyKey(value?: string) {
if (value) {
return value
}
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
return `patient-h5-${crypto.randomUUID()}`
}
return `patient-h5-${Date.now()}-${Math.random().toString(36).slice(2)}`
}
export function uploadSigningSignature(
payload: SignatureUploadInput,
): Promise<SignatureUploadResponse> {
const formData = new FormData()
formData.append('file', payload.file, 'signature.png')
formData.append('metadata', payload.metadata)
return request
.post<ApiResponse<SignatureUploadResponse>>(
`/v1/sign-deliveries/${encodeURIComponent(payload.taskId)}/signature`,
formData,
{
params: {
deliveryId: payload.deliveryId,
uploadToken: payload.uploadToken,
},
headers: {
'Idempotency-Key': createIdempotencyKey(payload.idempotencyKey),
},
},
)
.then(unwrapApiResponse)
}