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
+41
View File
@@ -0,0 +1,41 @@
import { createRequestError } from './request-client.js'
const referralResponseError = (message) =>
createRequestError(message, 'REFERRAL_RESPONSE_INVALID')
const normalizeReferralText = (value, field, { required = false } = {}) => {
if (value === undefined || value === null) {
if (required) throw referralResponseError(`推广关系响应缺少 ${field}`)
return ''
}
if (typeof value !== 'string') throw referralResponseError(`推广关系响应 ${field} 无效`)
const normalized = value.trim()
if (required && !normalized) throw referralResponseError(`推广关系响应缺少 ${field}`)
return normalized
}
export const normalizeReferralProfile = (value) => {
if (!value || typeof value !== 'object' || Array.isArray(value)) {
throw referralResponseError('推广关系响应无效')
}
const referralCode = normalizeReferralText(value.referralCode, 'referralCode', { required: true })
if (!/^[A-Za-z0-9_-]{4,64}$/.test(referralCode)) {
throw referralResponseError('推广关系响应 referralCode 格式无效')
}
if (!Number.isSafeInteger(value.referredUserCount) || value.referredUserCount < 0) {
throw referralResponseError('推广关系响应 referredUserCount 无效')
}
const shareUrl = normalizeReferralText(value.shareUrl, 'shareUrl', { required: true })
if (!/^https:\/\/[^\s]+$/i.test(shareUrl)) {
throw referralResponseError('推广关系响应 shareUrl 必须是 HTTPS 链接')
}
return {
enabled: true,
disabledReason: '',
referralCode,
referredUserCount: value.referredUserCount,
shareTitle: normalizeReferralText(value.shareTitle, 'shareTitle', { required: true }),
shareDescription: normalizeReferralText(value.shareText, 'shareText', { required: true }),
shareUrl
}
}