feat:第二次提交
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
import { request } from '@/api/request'
|
||||
import type { AgreementDetail, AgreementType } from './agreement.types'
|
||||
import type { AgreementDetail } from './agreement.types'
|
||||
|
||||
/** GET /app/auth/agreement/detail — 协议详情 */
|
||||
export function fetchAgreementDetail(type: AgreementType) {
|
||||
/** POST /app/auth/agreement/detail — 协议详情(body: agreementId) */
|
||||
export function fetchAgreementDetail(agreementId: number) {
|
||||
return request<AgreementDetail>({
|
||||
url: '/app/auth/agreement/detail',
|
||||
method: 'POST',
|
||||
data: { type },
|
||||
data: { agreementId },
|
||||
})
|
||||
}
|
||||
|
||||
25
src/pages/agreement/agreement.ids.ts
Normal file
25
src/pages/agreement/agreement.ids.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import type { AgreementType } from './agreement.types'
|
||||
|
||||
function parseEnvId(value: string | undefined): number | undefined {
|
||||
if (value === undefined || value === '') return undefined
|
||||
const n = Number(value)
|
||||
return Number.isFinite(n) && n >= 0 ? n : undefined
|
||||
}
|
||||
|
||||
/** 与后端协议主键对应,可在 .env 中配置 */
|
||||
export function resolveAgreementId(type: AgreementType): number {
|
||||
const fromEnv =
|
||||
type === 'service'
|
||||
? parseEnvId(import.meta.env.VITE_AGREEMENT_ID_SERVICE)
|
||||
: parseEnvId(import.meta.env.VITE_AGREEMENT_ID_PRIVACY)
|
||||
|
||||
if (fromEnv !== undefined) return fromEnv
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
export function parseAgreementIdFromQuery(raw: unknown): number | undefined {
|
||||
if (raw === undefined || raw === null || raw === '') return undefined
|
||||
const n = Number(raw)
|
||||
return Number.isFinite(n) && n >= 0 ? n : undefined
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
import { onLoad } from '@dcloudio/uni-app'
|
||||
import { ref } from 'vue'
|
||||
import { getErrorMessage } from '@/utils/api-error'
|
||||
import { parseAgreementIdFromQuery, resolveAgreementId } from './agreement.ids'
|
||||
import { fetchAgreementDetail } from './agreement.api'
|
||||
import type { AgreementDetail, AgreementType } from './agreement.types'
|
||||
|
||||
@@ -21,12 +22,13 @@ export function useAgreement() {
|
||||
const content = ref('')
|
||||
const loading = ref(false)
|
||||
|
||||
async function loadDetail(agreementType: AgreementType) {
|
||||
async function loadDetail(agreementType: AgreementType, agreementId?: number) {
|
||||
loading.value = true
|
||||
title.value = DEFAULT_TITLE[agreementType]
|
||||
content.value = ''
|
||||
const id = agreementId ?? resolveAgreementId(agreementType)
|
||||
try {
|
||||
const data = await fetchAgreementDetail(agreementType)
|
||||
const data = await fetchAgreementDetail(id)
|
||||
const normalized = normalizeDetail(agreementType, data ?? {})
|
||||
title.value = normalized.title
|
||||
content.value = normalized.content
|
||||
@@ -44,7 +46,8 @@ export function useAgreement() {
|
||||
const t = query?.type as AgreementType
|
||||
const agreementType = t === 'privacy' || t === 'service' ? t : 'service'
|
||||
type.value = agreementType
|
||||
loadDetail(agreementType)
|
||||
const agreementId = parseAgreementIdFromQuery(query?.id)
|
||||
loadDetail(agreementType, agreementId)
|
||||
})
|
||||
|
||||
return { title, content, loading }
|
||||
|
||||
@@ -2,15 +2,25 @@ import { request } from '@/api/request'
|
||||
import type { ForgetPasswordVerifyBody, ForgetPasswordVerifyResult } from '@/types/api'
|
||||
import type { ForgotPasswordForm } from './forgot-password.types'
|
||||
|
||||
/** 后端 data 可能为令牌字符串,或 { resetToken } 对象 */
|
||||
function normalizeResetToken(
|
||||
data: string | ForgetPasswordVerifyResult,
|
||||
): ForgetPasswordVerifyResult {
|
||||
if (typeof data === 'string') {
|
||||
return { resetToken: data }
|
||||
}
|
||||
return data
|
||||
}
|
||||
|
||||
/** POST /app/auth/forgetPassword/verifyCode — 校验手机号与验证码,返回重置令牌 */
|
||||
export function verifyForgetPasswordCode(data: ForgotPasswordForm) {
|
||||
const body: ForgetPasswordVerifyBody = {
|
||||
phonenumber: data.phone.trim(),
|
||||
smsCode: data.code.trim(),
|
||||
}
|
||||
return request<ForgetPasswordVerifyResult>({
|
||||
return request<string | ForgetPasswordVerifyResult>({
|
||||
url: '/app/auth/forgetPassword/verifyCode',
|
||||
method: 'POST',
|
||||
data: body,
|
||||
})
|
||||
}).then(normalizeResetToken)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user