Files
AOUN/README.md
2025-11-27 17:50:44 +08:00

92 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AounApp - 个人资源付费系统
这是一个基于 Next.js 全栈开发的个人资源付费与会员系统。支持文章/资源发布、会员订阅、积分充值、以及支付宝/微信支付集成。
## 🛠 技术栈 (Tech Stack)
### 核心框架
- **Framework**: [Next.js 16](https://nextjs.org/) (Pages Router)
- **Language**: [TypeScript](https://www.typescriptlang.org/)
- **Database**: [MongoDB](https://www.mongodb.com/) (via [Mongoose](https://mongoosejs.com/))
### 前端 UI & 交互
- **UI Library**: [Shadcn UI](https://ui.shadcn.com/) (基于 Radix UI)
- **Styling**: [Tailwind CSS v4](https://tailwindcss.com/)
- **Icons**: [Lucide React](https://lucide.dev/)
- **Forms**: [React Hook Form](https://react-hook-form.com/) + [Zod](https://zod.dev/) (验证)
- **Notifications**: [Sonner](https://sonner.emilkowal.ski/)
- **Editor**: [Tiptap](https://tiptap.dev/) (Headless 富文本编辑器)
### 后端 & 工具
- **Authentication**: JWT (JSON Web Tokens) - 自定义实现,存储于 HttpOnly Cookie
- **Payment**: Native Alipay Integration (Node.js `crypto` 实现,无第三方 SDK 依赖)
- **Markdown Processing**:
- `unified`, `remark`, `rehype` (服务端处理)
- `shiki` (代码高亮)
- **Date Handling**: `date-fns`
## ✨ 核心功能 (Key Features)
1. **用户系统**
- 注册/登录 (JWT)
- 个人中心 (Dashboard):查看订单、会员状态、积分
- 钱包系统:积分充值与消费
2. **内容管理 (CMS)**
- **文章/资源发布**:支持 Markdown 编辑 (Tiptap),支持设置价格(积分/现金)、隐藏内容(下载链接/提取码)。
- **分类与标签**:灵活的内容组织。
- **评论系统**:支持多级评论。
3. **会员与支付**
- **会员订阅**:不同等级会员享受不同折扣和每日下载限制。
- **支付集成**
- **支付宝**:原生集成,支持当面付/电脑网站支付(根据配置)。
- **积分支付**:站内虚拟货币支付。
- **订单系统**:完整的订单创建、支付回调、状态流转。
4. **管理后台 (Admin)**
- 仪表盘:数据概览。
- 用户管理、文章管理、订单管理、会员套餐管理。
- 系统设置:全局 SEO、支付参数配置。
## ⚠️ 关键架构与注意事项 (Architecture & Notes)
### 1. Markdown 渲染架构
* **服务端渲染 (SSR)**:为了解决 `rehype-pretty-code` 在客户端运行时的兼容性问题,并将繁重的 Markdown 解析逻辑移出前端 bundle我们采用了**服务端预处理**方案。
* **流程**
1. API (`/api/articles/[id]`) 接收请求。
2. 后端读取 Markdown 内容,使用 `unified` + `remark` + `rehype` + `shiki` 转换为 HTML。
3. API 返回预渲染好的 HTML 字符串。
4. 前端 (`pages/article/[id].tsx`) 使用 `dangerouslySetInnerHTML` 直接渲染。
### 2. 编辑器 (Tiptap)
* **SSR 兼容性**Tiptap 在 Next.js 中使用时,必须在 `useEditor` 中设置 `immediatelyRender: false`,以避免服务端渲染与客户端水合不匹配 (Hydration Mismatch) 导致的运行时错误。
* **Markdown 支持**:集成了 `tiptap-markdown` 扩展,确保编辑器内容可以作为 Markdown 格式保存到数据库,保持数据格式的通用性。
### 3. 支付系统
* **去 SDK 化**:为了避免 `alipay-sdk` 等库的潜在依赖问题和体积,我们使用 Node.js 原生 `crypto` 模块实现了支付宝的签名和验签逻辑 (`src/lib/alipay.ts`)。
* **安全性**:支付回调 (`notify`) 必须严格验证签名,防止伪造请求。
### 4. 样式系统
* **Tailwind v4**:项目配置了 Tailwind CSS v4。
* **Typography**:使用了 `@tailwindcss/typography` 插件来美化文章详情页的 HTML 内容渲染 (`prose` 类)。
## 🚀 快速开始 (Getting Started)
1. **安装依赖**
```bash
pnpm install
```
2. **配置环境变量**
复制 `.env.example` 到 `.env.local` 并填入 MongoDB URI 和 JWT Secret 等信息。
3. **运行开发服务器**
```bash
pnpm run dev
```
4. **访问**
- 前台: `http://localhost:3000`
- 后台: `http://localhost:3000/admin`