feat: 完成前端业务闭环与后端联调

This commit is contained in:
2026-08-24 23:37:56 +08:00
parent c59e36f933
commit 9ad572907b
175 changed files with 10711 additions and 1740 deletions
+3 -38
View File
@@ -45,42 +45,6 @@ export const normalizeArticleCategoryOptions = (value) => {
return categories
}
export const normalizePreviewFamilyArticles = (value, expectedGenealogyId) => {
if (!Array.isArray(value)) {
throw createRequestError('谱文响应不是列表', 'ARTICLE_RESPONSE_INVALID')
}
const rows = value.map((item) => {
if (!item || typeof item !== 'object' || Array.isArray(item)) {
throw createRequestError('谱文响应包含无效条目', 'ARTICLE_RESPONSE_INVALID')
}
const genealogyId = normalizeOptionalNumericId(item.genealogyId, '谱文家谱标识', 'ARTICLE_RESPONSE_INVALID')
if (genealogyId && genealogyId !== expectedGenealogyId) {
throw createRequestError('谱文归属与请求不匹配', 'ARTICLE_RESPONSE_INVALID')
}
const id = normalizeOptionalNumericId(item.id, '谱文标识', 'ARTICLE_RESPONSE_INVALID')
const title = normalizeResponseText(item.title, 'title')
if (!id || !title) {
throw createRequestError('谱文响应缺少标识或标题', 'ARTICLE_RESPONSE_INVALID')
}
return {
id,
genealogyId: expectedGenealogyId,
title,
summary: normalizeResponseText(item.summary, 'summary'),
content: '',
author: normalizeResponseText(item.author, 'author') || '家族成员',
time: normalizeResponseText(item.updatedAt, 'updatedAt'),
category: normalizeResponseText(item.category, 'category'),
coverOssId: normalizeOptionalNumericId(item.coverOssId, 'coverOssId', 'ARTICLE_RESPONSE_INVALID'),
viewCount: normalizeOptionalNonnegativeInteger(item.viewCount, '谱文阅读数', 'ARTICLE_RESPONSE_INVALID')
}
})
if (new Set(rows.map((item) => item.id)).size !== rows.length) {
throw createRequestError('谱文响应包含重复标识', 'ARTICLE_RESPONSE_INVALID')
}
return rows
}
export const normalizeAppArticle = (value, expectedGenealogyId, expectedArticleId = '') => {
if (!value || typeof value !== 'object' || Array.isArray(value)) {
throw createRequestError('谱文响应无效', 'ARTICLE_RESPONSE_INVALID')
@@ -148,8 +112,9 @@ export const normalizeArticleCreatePayload = (payload) => {
}
const sortOrder = normalizeOptionalSafeInteger(payload.sortOrder, 'sortOrder')
if (sortOrder !== undefined) normalizedPayload.sortOrder = sortOrder
if (payload.coverOssId !== undefined && payload.coverOssId !== null && payload.coverOssId !== '') {
normalizedPayload.coverOssId = normalizeOssIdString(payload.coverOssId, 'coverOssId')
if (Object.prototype.hasOwnProperty.call(payload, 'coverOssId')) {
if (payload.coverOssId === null) normalizedPayload.coverOssId = null
else if (payload.coverOssId !== '') normalizedPayload.coverOssId = normalizeOssIdString(payload.coverOssId, 'coverOssId')
}
return normalizedPayload
}