2.x 版本更新
提示
版本号请查看
package.json
文件的version
字段
2.0.0
优化
- 更通用的落地页模板
- 内置完整的支付需求:月订阅、年订阅、一次性付款
2.1.0
优化
2.2.0
新增特性
- 执行数据库文件
supabase/migrations/20250802164211_users_add_referral.sql
,并更新types.ts
文件 - 执行数据库文件
supabase/migrations/20250803113600_update_my_profile_add_referral.sql
,并更新types.ts
文件 middleware.ts
:根据 URL 参数在 Cookie 记录用户来源components/providers/AuthProvider.tsx
:将用户来源携带到登录参数重app/auth/callback/route.ts
:将用户来源记录到 users 表
- 简化已有的邮件模板,邮件内容仅保留英文,查看更新记录:
emails/invoice-payment-failed.tsx
:删除非英语内容emails/newsletter-welcome.tsx
:删除非英语内容actions/newsletter/index.ts
:更新传入的邮件参数
- 统一邮件发送函数,查看更新记录:
actions/resend/index.ts
:统一处理邮件发送、订阅取消actions/newsletter/index.ts
:调用统一发送邮件的方法lib/stripe/actions.ts
:调用统一发送邮件的方法
- 可配置是否向新用户发送欢迎邮件,查看更新记录
.env.example
:新增环境变量NEXT_PUBLIC_USER_WELCOME
用于配置是否开启新用户欢迎邮件app/auth/callback/route.ts
:在新用户登录时,发送新用户邮件通知emails/user-welcome.tsx
:新用户欢迎邮件模板
优化
- 优化部分组件样式:
components/LanguageDetectionAlert.tsx
components/ui/rainbow-button.tsx
- 优化动态图标的处理方式:
components/DynamicIcon.tsx
- 优化登录弹框关闭时机:
components/auth/LoginForm.tsx
2.2.1
优化
- 优化定价管理表单的
lang_json
字段的 JSON 验证和预览卡片的 JSON 解析
app/[locale]/(protected)/dashboard/(admin)/prices/PricePlanForm.tsx
app/[locale]/(protected)/dashboard/(admin)/prices/PricingCardPreview.tsx
lib/safeJson.ts
2.2.2
优化
- 优化语言切换提示器样式
components/LanguageDetectionAlert.tsx
- 多语言包
LanguageDetection
字段:i18n/messages/en/common.json
i18n/messages/ja/common.json
i18n/messages/zh/common.json
2.3.0
优化用户权益获取链路,并实现可靠的 SSG 方案。
优化
- 将
AuthProvider.tsx
里调用useSearchParams
下移到登录组件,保持 layout 服务端渲染,查看更新记录
- 更新
components/providers/AuthProvider.tsx
- 更新
components/auth/LoginForm.tsx
- 更新
app/[locale]/login/page.tsx
- 原有的用户权益获取链路复杂,对新手不够友好,且会影响 SSG,所以针对权益获取与使用的方式进行优化,查看更新记录
- 安装依赖
swr
:pnpm i swr
- 更新
app/[locale]/layout.tsx
- 更新
actions/usage/benefits.ts
,添加客户端获取用户权益的方法getClientUserBenefits
- 新增
hooks/useUserBenefits.ts
,共享用户权益请求、更新方法和数据状态 - 更新
components/layout/CurrentUserBenefitsDisplay.tsx
,由原来调用@/stores/benefitsStore
修改为调用@/hooks/useUserBenefits
,两个文件提供的方法名一样,所以该文件里其他代码无需修改 - 更新
components/header/UserInfo.tsx
- 更新
app/[locale]/payment/success/page.tsx
,使用重新获取数据的方法mutate(revalidateBenefits)
立即更新权益 - 删除
components/layout/BenefitsErrorBoundary.tsx
- 删除
components/providers/BenefitsProvider.tsx
二开的功能,无论新增积分或者扣除积分,都应当调用 mutate(revalidateBenefits)
立即同步数据库的积分。
- 修复 SSG 实现,查看更新记录
- 更新
app/[locale]/layout.tsx
- 更新
app/[locale]/blogs/[slug]/page.tsx
,从params
取出locale
,而不是使用getLocale()
2.3.1
修复
components/auth/GoogleOneTap.tsx
2.3.2
优化
- 登录按钮、支付按钮重定向到登录页,携带页面路径到 URL,用于登录后重定向,查看更新记录
components/home/PricingCTA.tsx
components/header/UserInfo.tsx
lib/utils.ts
修复
- 修复 URL 参数
next
为空字符串时无法登录的问题,该 bug 由 2.3.0 修改LoginForm.tsx
引起,本次变更做了兜底处理。查看更新记录
app/auth/callback/route.ts
app/auth/confirm/route.ts
2.4.0
优化
- 更新布局,Dashboard 使用 Shadcn Sidebar 组件重构左右布局,其他页面保持原有的上中下布局,查看更新记录
- 执行
pnpm dlx shadcn@latest add sidebar
- 创建文件夹
app/[locale]/(basic-layout)
,新增文件app/[locale]/(basic-layout)/layout.tsx
- 将
app/[locale]
文件夹下,除了app/[localte]/layout.tsx
和app/[locale]/(protected)
,其他文件和文件夹全部移入app/[localte]/(basic-layout)
- 更新
app/[locale]/layout.tsx
,删除其中的Header
和Footer
引用,删除<main>
标签(不要删除<main>
里面的childeen
) - 新增
app/[locale]/(protected)/dashboard/DashboardSidebar.tsx
- 新增
components/header/SidebarInsetHeader.tsx
- 更新
app/[locale]/(protected)/dashboard/layout.tsx
,使用新的 Sidebar - 在
i18n/message/en/common.json
、i18n/message/en/common.json
和i18n/message/en/common.json
给UserMenus
和AdminMenus
新增目录 icon - 删除
app/[locale]/(protected)/dashboard/Sidebar.tsx
- 删除
app/[locale]/(protected)/dashboard/MobileSidebar.tsx
- 组件样式优化:
components/header/UserInfo.tsx
components/header/UserAvatar.tsx
components/header/MobileMenu.tsx
components/header/HeaderLinks.tsx
components/header/Header.tsx
- 优化复制样式
components/mdx/CopyButton.tsx
新增
- 添加管理员 overview 页面,查看更新记录
- 执行
pnpm dlx shadcn@latest add chart
- 迁移新 sql 文件:
supabase/migrations/20250812143117_create_order_stats_function.sql
,supabase/migrations/20250812151308_create_daily_growth_stats_function.sql
,查看更新方法 - 新增 Server Actions
actions/overview
- 新增页面
app/[locale]/(protected)/dashboard/(admin)/overview
- 更新
lib/supabase/middleware.ts
,将/dashboard/overview
添加到管理员权限页面 - 更新
lib/utils.ts
,新增数字格式化方法 - 更新多语言包
- 编辑目录:
i18n/messages/en/common.json
,i18n/messages/ja/common.json
,i18n/messages/zh/common.json
,新增新页面的目录项 - 新增新页面语言包:
i18n/messages/en/Dashboard/Admin/Overview.json
,i18n/messages/ja/Dashboard/Admin/Overview.json
,i18n/messages/zh/Dashboard/Admin/Overview.json
- 编辑
i18n/request.ts
,导入新页面语言包
- 编辑目录:
- 添加管理员查看 orders 页面,查看更新记录
- 新增 Server Actions
actions/orders
- 新增页面
app/[locale]/(protected)/dashboard/(admin)/orders
- 更新
lib/supabase/middleware.ts
,将/dashboard/orders
添加到管理员权限页面 - 更新多语言包
- 编辑目录:
i18n/messages/en/common.json
,i18n/messages/ja/common.json
,i18n/messages/zh/common.json
,新增新页面的目录项 - 新增新页面语言包:
i18n/messages/en/Dashboard/Admin/Orders.json
,i18n/messages/ja/Dashboard/Admin/Orders.json
,i18n/messages/zh/Dashboard/Admin/Orders.json
- 编辑
i18n/request.ts
,导入新页面语言包
- 编辑目录:
2.4.1
修复
- 修复 AI Demo 页面谷歌模型无法
.env.example
config/models.ts
app/api/admin/translate/route.ts
app/api/ai-demo/multi-chat/route.ts
app/api/ai-demo/single-chat/route.ts
- 邮件模板中的网站名称使用
config/site.ts
配置
actions/newsletter/index.ts
app/auth/callback/route.ts
2.4.2
修复
- 修复一次性付款使用 100% 优惠码无法处理权益升级的问题,查看更新记录
lib/stripe/webhook-handlers.ts
app/api/payment/verify-success/route.ts
优化
进行一些样式和细节优化
2.4.3
修复
- 更新认证重定向URL,使用站点URL而非源URL,查看更新记录
app/auth/callback/route.ts
app/auth/confirm/route.ts
2.4.4
webhook 处理升级
- 一次性付款和订阅付款,webhook 处理减少一次
orders
表查询,查看更新记录
lib/stripe/webhook-handlers.ts
- 一次性付款和订阅付款升级权益的
rpc
添加重试机制,查看更新记录
lib/stripe/webhook-handlers.ts
- 添加付款升级权益
rpc
3次重试均失败后的邮件提醒,查看更新记录
emails/credit-upgrade-failed.tsx
邮件通知模板lib/stripe/actions.ts
添加邮件通知的方法lib/stripe/webhook-handlers.ts
重试失败后调用邮件通知方法
其他优化
-
定价卡片 TabsList 自适应
components/home/Pricing.tsx
-
修复
PricePlanForm
错误的多语言 namespace
app/[locale]/(protected)/dashboard/(admin)/prices/PricePlanForm.tsx
2.4.5
.eslintrc.json
修改为.eslintrc.js
2.4.7
- 支持 Magic Link 登录中转确认,避免部分邮件服务扫描页面导致token失效和无法登录的问题
- 新增页面
app/[locale]/(basic-layout)/login/confirm/page.tsx
- 修改
app/auth/confirm/route.ts
- 新增环境变量
MAGIC_LINK_REQUIRE_CONFIRMATION
,只有值为true
时开启中转页面