diff --git a/src/components/Subscription/SubscriptionContent.js b/src/components/Subscription/SubscriptionContent.js index 45f18a95..2075b4ae 100644 --- a/src/components/Subscription/SubscriptionContent.js +++ b/src/components/Subscription/SubscriptionContent.js @@ -32,6 +32,8 @@ import { Input, InputGroup, InputRightElement, + Checkbox, + Link as ChakraLink, } from '@chakra-ui/react'; import React, { useState, useEffect } from 'react'; import { logger } from '../../utils/logger'; @@ -55,6 +57,12 @@ import { } from 'react-icons/fa'; import { getApiBase } from '../../utils/apiConfig'; +// 会员协议 URL 配置 +const AGREEMENT_URLS = { + pro: 'https://valuefrontier.cn/htmls/pro-member-agreement.html', + max: 'https://valuefrontier.cn/htmls/max-member-agreement.html', +}; + export default function SubscriptionContent() { // Auth context const { user } = useAuth(); @@ -97,6 +105,9 @@ export default function SubscriptionContent() { const [validatingPromo, setValidatingPromo] = useState(false); const [priceInfo, setPriceInfo] = useState(null); // 价格信息(包含升级计算) + // 会员协议确认状态 + const [agreementChecked, setAgreementChecked] = useState(false); + // 加载订阅套餐数据 useEffect(() => { fetchSubscriptionPlans(); @@ -286,6 +297,9 @@ export default function SubscriptionContent() { setSelectedPlan(plan); + // 切换套餐时重置协议勾选状态 + setAgreementChecked(false); + // 计算价格(包含升级判断) await calculatePrice(plan, selectedCycle, promoCodeApplied ? promoCode : null); @@ -1603,11 +1617,45 @@ export default function SubscriptionContent() { )} + {/* 会员协议确认 */} + setAgreementChecked(e.target.checked)} + colorScheme="green" + size="md" + > + + 我已阅读并同意 + e.stopPropagation()} + > + 《{selectedPlan?.name?.toLowerCase() === 'max' ? 'MAX' : 'PRO'}会员服务协议》 + + + +