feat(documents): 接入文档库真实接口
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user