feat(documents): 接入文档库真实接口

This commit is contained in:
xy
2026-09-17 18:46:09 +08:00
parent 81530b5dd6
commit 8b1cbee16f
8 changed files with 136 additions and 59 deletions
+18 -12
View File
@@ -17,6 +17,7 @@ import type {
DocumentRecord,
TemplateResponseDto,
TemplateVersionResponseDto,
UpdateTemplateRequest,
} from './types'
const useMockData = mockFlags.documents
@@ -89,8 +90,9 @@ function normalizeDocumentStatus(status: BackendTemplateStatus | null | undefine
}
function mapDocument(dto: TemplateResponseDto): DocumentRecord {
const versionId = dto.currentVersionId ?? undefined
const version = dto.versionSequence ? `v${dto.versionSequence}` : '—'
const versionId = dto.latestVersionId ?? dto.currentVersionId ?? undefined
const version = dto.latestVersionNo ?? (dto.versionSequence ? `v${dto.versionSequence}` : '—')
const backendStatus = dto.latestVersionStatus ?? dto.status
return {
id: dto.id,
@@ -98,11 +100,12 @@ function mapDocument(dto: TemplateResponseDto): DocumentRecord {
code: dto.templateCode,
category: dto.category ?? '未分类',
version: String(version),
status: normalizeDocumentStatus(dto.status),
backendStatus: dto.status ?? undefined,
status: normalizeDocumentStatus(backendStatus),
backendStatus: backendStatus ?? undefined,
updatedBy: dto.updatedBy ?? dto.createdBy ?? '—',
updatedAt: formatTemplateDateTime(dto.updatedAt ?? dto.createdAt),
versionId,
currentVersionId: dto.currentVersionId ?? undefined,
departmentId: dto.departmentId,
departmentName: dto.departmentId ? undefined : '全院通用',
campusId: dto.campusId,
@@ -143,21 +146,21 @@ export function buildSignatureFieldsPayload(contentHtml: string): unknown[] {
/**
* 读取模板当前版本的正文。
* 模板列表接口只给 currentVersionId 与哈希,不给正文,
* 模板列表接口只给版本指针与哈希,不给正文,
* 因此展示/编辑正文必须再取一次版本详情——这是文档库能否接入的关键一步。
*/
export async function getTemplateContent(templateId: string): Promise<string> {
export async function getTemplateContent(templateId: string, versionId?: string): Promise<string> {
if (useMockData) {
return ''
}
const template = await getDocumentDetail(templateId)
const resolvedVersionId = versionId ?? (await getDocumentDetail(templateId))?.versionId
if (!template?.versionId) {
if (!resolvedVersionId) {
return ''
}
const version = await getTemplateVersionDetail(templateId, template.versionId)
const version = await getTemplateVersionDetail(templateId, resolvedVersionId)
return readVersionContentHtml(version)
}
@@ -235,7 +238,10 @@ async function findContentByVersionId(templateVersionId: string): Promise<string
: []
const candidates = [firstPage, ...remainingPages].flatMap((page) => page.records)
const matched = candidates.find((template) => template.versionId === templateVersionId)
const matched = candidates.find(
(template) =>
template.versionId === templateVersionId || template.currentVersionId === templateVersionId,
)
if (!matched) {
return ''
@@ -376,7 +382,7 @@ export async function createTemplate(payload: CreateTemplateRequest): Promise<Do
export async function updateTemplate(
id: string,
payload: Partial<CreateTemplateRequest>,
payload: UpdateTemplateRequest,
): Promise<DocumentRecord> {
if (useMockData) {
throw new Error('演示模式下请在文档库页面直接编辑文书')
@@ -506,7 +512,7 @@ export async function createTemplateWithContent(
signatureFields: buildSignatureFieldsPayload(version.contentHtml),
})
// 版本创建后模板的 currentVersionId/versionSequence 才更新,重新取一次拿到准确版本号
// 版本创建后模板的 latestVersionId/versionSequence 才更新,重新取一次拿到准确版本号
const detail = await getDocumentDetail(template.id)
return detail ?? template
}
+11
View File
@@ -27,6 +27,8 @@ export interface DocumentRecord {
description?: string
contentHtml?: string
contentSha256?: string
/** 当前已发布版本;发起签署必须使用它,不能误用最新草稿版本。 */
currentVersionId?: string
}
export type DocumentListResponse = PageResult<DocumentRecord>
@@ -51,6 +53,9 @@ export interface TemplateResponseDto {
category?: string | null
status?: BackendTemplateStatus | null
currentVersionId?: string | null
latestVersionId?: string | null
latestVersionNo?: string | null
latestVersionStatus?: BackendTemplateStatus | null
versionSequence?: number | null
createdAt?: string | null
createdBy?: string | null
@@ -93,6 +98,12 @@ export interface CreateTemplateRequest {
category?: string
}
export interface UpdateTemplateRequest {
name: string
description?: string
category?: string
}
export interface CreateTemplateVersionRequest {
versionNo?: string
contentHtml: string