diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d75c7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules/ +.next/ +.env.local +.DS_Store +.trae/ +*.log diff --git a/.gitignore 2 b/.gitignore 2 new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.gitignore 2 @@ -0,0 +1 @@ +node_modules/ diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md new file mode 100644 index 0000000..eac2e65 --- /dev/null +++ b/DEPLOYMENT.md @@ -0,0 +1,90 @@ +# 部署指南 + +## 生产环境部署步骤 + +### 1. Vercel部署 + +```bash +# 安装Vercel CLI +npm install -g vercel + +# 登录Vercel +vercel login + +# 部署项目 +vercel --prod +``` + +### 2. 环境变量配置 + +在Vercel项目设置中添加以下环境变量: + +**支付宝配置:** +- `ALIPAY_PARTNER_ID`: 2088511801157159 +- `ALIPAY_KEY`: lz6ey1h3kl9zqkgtjz3avb5gk37wzbrp +- `ALIPAY_APP_ID`: wx432c93e275548671 +- `ALIPAY_RETURN_URL`: https://your-domain.com/payment/success +- `ALIPAY_NOTIFY_URL`: https://your-domain.com/api/payment/alipay/notify + +**微信支付配置:** +- `WECHAT_APP_ID`: wx432c93e275548671 +- `WECHAT_APP_SECRET`: 25b7e7fdb7998e5107e242ebb6ddabd0 +- `WECHAT_MCH_ID`: 1318592501 +- `WECHAT_API_KEY`: wx3e31b068be59ddc131b068be59ddc2 +- `WECHAT_NOTIFY_URL`: https://your-domain.com/api/payment/wechat/notify + +**基础配置:** +- `NEXT_PUBLIC_BASE_URL`: https://your-domain.com + +### 3. 域名配置 + +1. 在Vercel项目设置中绑定自定义域名 +2. 配置DNS记录指向Vercel +3. 启用HTTPS(Vercel自动配置SSL证书) + +### 4. 支付回调配置 + +**支付宝配置:** +1. 登录支付宝开放平台 +2. 在应用详情中配置异步通知地址:`https://your-domain.com/api/payment/alipay/notify` +3. 配置同步返回地址:`https://your-domain.com/payment/success` + +**微信支付配置:** +1. 登录微信商户平台 +2. 在产品中心配置支付回调URL:`https://your-domain.com/api/payment/wechat/notify` +3. 添加支付授权域名:`your-domain.com` + +### 5. 测试流程 + +1. 创建测试订单 +2. 使用沙箱环境测试支付宝支付 +3. 使用微信开发者工具测试微信支付 +4. 验证回调接口正常接收 +5. 确认订单状态更新正确 +6. 验证内容解锁功能 + +### 6. 监控和日志 + +- 在Vercel Dashboard查看部署日志 +- 使用Vercel Analytics监控访问数据 +- 配置错误告警通知 + +## 本地开发 + +```bash +# 安装依赖 +npm install + +# 启动开发服务器 +npm run dev + +# 访问 http://localhost:3000 +``` + +## 注意事项 + +1. 生产环境必须使用HTTPS +2. 定期更新支付密钥 +3. 保护环境变量安全 +4. 备份用户数据 +5. 监控支付异常 diff --git a/README.md b/README.md new file mode 100644 index 0000000..abb72cd --- /dev/null +++ b/README.md @@ -0,0 +1,30 @@ +# AI phone branding + +*Automatically synced with your [v0.app](https://v0.app) deployments* + +[![Deployed on Vercel](https://img.shields.io/badge/Deployed%20on-Vercel-black?style=for-the-badge&logo=vercel)](https://vercel.com/fnvtks-projects/v0--ap) +[![Built with v0](https://img.shields.io/badge/Built%20with-v0.app-black?style=for-the-badge)](https://v0.app/chat/tPF15XbLAKD) + +## Overview + +This repository will stay in sync with your deployed chats on [v0.app](https://v0.app). +Any changes you make to your deployed app will be automatically pushed to this repository from [v0.app](https://v0.app). + +## Deployment + +Your project is live at: + +**[https://vercel.com/fnvtks-projects/v0--ap](https://vercel.com/fnvtks-projects/v0--ap)** + +## Build your app + +Continue building your app on: + +**[https://v0.app/chat/tPF15XbLAKD](https://v0.app/chat/tPF15XbLAKD)** + +## How It Works + +1. Create and modify your project using [v0.app](https://v0.app) +2. Deploy your chats from the v0 interface +3. Changes are automatically pushed to this repository +4. Vercel deploys the latest version from this repository diff --git a/SYNC_LOG.md b/SYNC_LOG.md new file mode 100644 index 0000000..27097d7 --- /dev/null +++ b/SYNC_LOG.md @@ -0,0 +1 @@ +Mon Dec 29 18:11:24 CST 2025 diff --git a/addons/Universal_Payment_Module/1_核心设计_通用协议/API接口定义.md b/addons/Universal_Payment_Module/1_核心设计_通用协议/API接口定义.md new file mode 100644 index 0000000..1000824 --- /dev/null +++ b/addons/Universal_Payment_Module/1_核心设计_通用协议/API接口定义.md @@ -0,0 +1,94 @@ +# 通用支付模块 API 接口定义 (Universal Payment API) + +无论后端使用何种语言(Python/Node/Go),请严格实现以下 RESTful 接口。 + +## 1. 核心交易接口 (Core Transaction) + +### 1.1 创建订单 +* **URL**: `POST /api/payment/create_order` +* **Description**: 业务系统通知支付模块创建一个待支付订单。 +* **Request Body**: + \`\`\`json + { + "user_id": "u1001", // 用户ID + "title": "VIP Membership", // 订单标题 + "amount": 99.00, // 金额 (法币单位: 元 / 美元) + "currency": "CNY", // 币种: CNY, USD + "product_id": "vip_01", // 商品ID + "extra_params": {} // 扩展参数 + } + \`\`\` +* **Response**: + \`\`\`json + { + "code": 200, + "data": { + "order_sn": "202310270001", // 支付系统生成的唯一订单号 + "status": "created" + } + } + \`\`\` + +### 1.2 发起支付 (收银台) +* **URL**: `POST /api/payment/checkout` +* **Description**: 用户选择支付方式后,获取支付参数。 +* **Request Body**: + \`\`\`json + { + "order_sn": "202310270001", + "gateway": "alipay_qr", // 支付方式: alipay_qr, wechat_jsapi, paypal, usdt, stripe + "return_url": "https://...", // 支付成功后前端跳转地址 + "openid": "..." // 微信JSAPI支付必填 + } + \`\`\` +* **Response**: + \`\`\`json + { + "code": 200, + "data": { + "type": "url", // url (跳转), qrcode (扫码), json (SDK参数), address (USDT) + "payload": "https://...", // 具体内容 + "expiration": 1800 // 过期时间(秒) + } + } + \`\`\` + +### 1.3 查询订单状态 +* **URL**: `GET /api/payment/status/{order_sn}` +* **Description**: 前端轮询使用。 +* **Response**: + \`\`\`json + { + "code": 200, + "data": { + "status": "paid", // created, paying, paid, closed + "paid_amount": 99.00, + "paid_at": "2023-10-27 10:00:00" + } + } + \`\`\` + +--- + +## 2. 回调通知接口 (Webhook) + +### 2.1 统一回调入口 +* **URL**: `POST /api/payment/notify/{gateway}` +* **Description**: 接收第三方支付平台的异步通知。 +* **Path Params**: + * `gateway`: `alipay`, `wechat`, `paypal`, `stripe`, `nowpayments` +* **Logic**: + 1. 根据 gateway 加载对应驱动。 + 2. 验签 (Verify Signature)。 + 3. 幂等性检查 (Idempotency Check)。 + 4. 更新订单状态。 + 5. 返回平台所需的响应字符串 (e.g. `success`, `200 OK`). + +--- + +## 3. 辅助接口 + +### 3.1 获取汇率 +* **URL**: `GET /api/payment/exchange_rate` +* **Params**: `from=USD&to=CNY` +* **Response**: `{"rate": 7.21}` diff --git a/addons/Universal_Payment_Module/1_核心设计_通用协议/标准配置模板.yaml b/addons/Universal_Payment_Module/1_核心设计_通用协议/标准配置模板.yaml new file mode 100644 index 0000000..03dd6fe --- /dev/null +++ b/addons/Universal_Payment_Module/1_核心设计_通用协议/标准配置模板.yaml @@ -0,0 +1,70 @@ +# 全球支付模块标准配置模板 (Standard Config) + +# 无论你使用 Python, Node.js, Go 还是 Java,请将此配置映射到你的环境(如 .env, config.py, config.js) + +# ------------------------------------------------------------------- +# 1. 基础环境 (Environment) +# ------------------------------------------------------------------- +APP_ENV: "production" # development / production +APP_URL: "https://your-site.com" # 你的网站域名 (用于回调) + +# ------------------------------------------------------------------- +# 2. 数据库 (Database) +# ------------------------------------------------------------------- +# 系统会自动生成 order 和 pay_trade 表 +DB_CONNECTION: "mysql" # mysql / postgres / sqlite +DB_HOST: "127.0.0.1" +DB_PORT: "3306" +DB_DATABASE: "payment_db" +DB_USERNAME: "root" +DB_PASSWORD: "password" + +# ------------------------------------------------------------------- +# 3. 支付宝 (Alipay) - CN +# ------------------------------------------------------------------- +ALIPAY_ENABLED: true +ALIPAY_APP_ID: "20210001..." +ALIPAY_PRIVATE_KEY: "MIIETv..." # 商户私钥 +ALIPAY_PUBLIC_KEY: "MIIBIj..." # 支付宝公钥 + +# ------------------------------------------------------------------- +# 4. 微信支付 (Wechat Pay) - CN +# ------------------------------------------------------------------- +WECHAT_ENABLED: true +WECHAT_APP_ID: "wx123456..." # 公众号/小程序 AppID +WECHAT_MCH_ID: "1234567890" # 商户号 +WECHAT_API_V3_KEY: "abcdef..." # APIv3 密钥 (32位) +WECHAT_CERT_SERIAL: "45F59C..." # 证书序列号 +WECHAT_PRIVATE_KEY_PATH: "./cert/apiclient_key.pem" +WECHAT_CERT_PATH: "./cert/apiclient_cert.pem" + +# ------------------------------------------------------------------- +# 5. PayPal - Global +# ------------------------------------------------------------------- +PAYPAL_ENABLED: true +PAYPAL_MODE: "live" # sandbox / live +PAYPAL_CLIENT_ID: "Af7s8..." +PAYPAL_CLIENT_SECRET: "EKd9..." + +# ------------------------------------------------------------------- +# 6. Stripe - Global +# ------------------------------------------------------------------- +STRIPE_ENABLED: true +STRIPE_PUBLIC_KEY: "pk_live_..." +STRIPE_SECRET_KEY: "sk_live_..." +STRIPE_WEBHOOK_SECRET: "whsec_..." + +# ------------------------------------------------------------------- +# 7. USDT (Crypto) - Web3 +# ------------------------------------------------------------------- +USDT_ENABLED: true +USDT_GATEWAY_TYPE: "nowpayments" # nowpayments / native (原生监听) + +# 选项 A: NOWPayments (第三方网关) +NOWPAYMENTS_API_KEY: "R1G..." +NOWPAYMENTS_IPN_SECRET: "secret..." + +# 选项 B: Native (原生监听 - TRC20) +TRON_NODE_API: "https://api.trongrid.io" +TRON_WALLET_ADDRESS: "T9yD14Nj9..." # 你的收款地址 +TRON_CHECK_INTERVAL: 60 # 轮询间隔 (秒) diff --git a/addons/Universal_Payment_Module/2_智能对接_AI指令/通用集成指令.md b/addons/Universal_Payment_Module/2_智能对接_AI指令/通用集成指令.md new file mode 100644 index 0000000..f89dc28 --- /dev/null +++ b/addons/Universal_Payment_Module/2_智能对接_AI指令/通用集成指令.md @@ -0,0 +1,44 @@ +# 通用支付模块智能对接指令 (AI Integration Prompt) v3.0 + +**角色设定**: 你是一位精通全球支付架构(Alipay/Wechat/PayPal/Stripe/USDT)的资深全栈架构师。 + +**任务目标**: +我提供了一个**完全配置驱动 (Configuration-Driven)** 的通用支付模块设计。 +请你根据我的目标项目环境,将此支付功能无缝集成进去。 + +**核心资源 (Input)**: +1. **标准配置模板**: `1_核心设计_通用协议/标准配置模板.yaml` (所有支付参数的 Key) +2. **API 接口契约**: `1_核心设计_通用协议/API接口定义.md` (标准 RESTful 接口) +3. **核心业务模型**: `1_核心设计_通用协议/业务逻辑与模型.md` (数据库表结构) + +**集成模式 (选择一种)**: + +### 模式 A: 嵌入式集成 (Library Mode) - *推荐* +适用于将支付功能直接写在现有的后端项目中 (如 Django app, NestJS module)。 + +**步骤**: +1. **环境识别**: 检查我的项目语言 (Python/Node/Go/Java)。 +2. **依赖安装**: 根据语言推荐 SDK (e.g. `alipay-sdk-python`, `stripe`). +3. **配置加载**: 创建代码读取 `标准配置模板.yaml` 中的环境变量。 +4. **模型生成**: 根据 `业务逻辑与模型.md` 生成 ORM 代码 (User/Order/PayTrade)。 +5. **接口实现**: 严格按照 `API接口定义.md` 实现 Controller/View。 + * *要求*: 使用工厂模式 (`PaymentFactory`) 管理不同网关。 + +### 模式 B: 微服务集成 (Microservice Mode) +适用于将支付功能独立部署为一个 Docker 容器。 + +**步骤**: +1. **服务生成**: 用 Go (Gin) 或 Node.js (Express) 生成一个独立服务。 +2. **Docker化**: 编写 `Dockerfile` 和 `docker-compose.yml`。 +3. **网关代理**: 配置 Nginx 或 API Gateway 将 `/api/payment` 转发给此服务。 + +--- + +**给 AI 的执行指令 (Prompt)**: + +> "请读取 `Universal_Payment_Module` 目录下的所有设计文档。 +> 我的当前项目是基于 **[你的语言/框架]** 的。 +> 请采用 **[模式 A / 模式 B]** 为我集成支付功能。 +> 1. 首先生成依赖安装命令。 +> 2. 然后生成数据库模型代码。 +> 3. 最后实现符合 `API接口定义.md` 的核心接口代码。" diff --git a/addons/Universal_Payment_Module/3_逻辑参考_通用实现/前端收银台Demo.html b/addons/Universal_Payment_Module/3_逻辑参考_通用实现/前端收银台Demo.html new file mode 100644 index 0000000..3a68421 --- /dev/null +++ b/addons/Universal_Payment_Module/3_逻辑参考_通用实现/前端收银台Demo.html @@ -0,0 +1,141 @@ + + + + + + 通用收银台 Demo + + + + +
+
+
订单支付
+
¥ 99.00
+
订单号: 202310270001
+
+ +
+ +
+ 🔵 支付宝 (Alipay) + +
+ +
+ 🟢 微信支付 (Wechat) + +
+ +
+ 🅿️ PayPal (USD) + +
+ +
+ 🪙 USDT (TRC20) + +
+
+ +
+ QRCode +

请扫描二维码支付

+
+ + +
+ + + + + diff --git a/addons/Universal_Payment_Module/README.md b/addons/Universal_Payment_Module/README.md new file mode 100644 index 0000000..06c4ae2 --- /dev/null +++ b/addons/Universal_Payment_Module/README.md @@ -0,0 +1,58 @@ +# 全球通用支付模块 (Universal Payment Module) v3.0 + +这是一个**配置驱动 (Configuration-Driven)**、**API 优先 (API-First)** 的全球支付解决方案包。 +它通过标准化的协议和 AI 指令,让任何语言的项目都能在 5 分钟内接入支付宝、微信、PayPal、Stripe 和 USDT。 + +## 📂 模块结构 (Directory Structure) + +\`\`\` +Universal_Payment_Module/ +├── 1_核心设计_通用协议/ # [灵魂] 定义了支付的“法律” +│ ├── 标准配置模板.yaml # [新增] 填空即可配置所有支付参数 +│ ├── API接口定义.md # [新增] 无论用什么语言,接口都长这样 +│ ├── 业务逻辑与模型.md # 数据库表结构设计 (Order/PayTrade) +│ └── 接口注册指南.md # 申请 Key 的教程 +│ +├── 2_智能对接_AI指令/ # [工具] AI 编译器 +│ └── 通用集成指令.md # 发给 AI,自动生成代码 +│ +├── 3_逻辑参考_通用实现/ # [参考] +│ ├── 前端收银台Demo.html # [新增] 原生 JS 实现的通用收银台 +│ ├── 后端源码/ # PHP 参考实现 +│ └── 前端模板/ # Twig 参考模板 +│ +└── README.md # 本说明文档 +\`\`\` + +## 🚀 极速对接 (Integration Guide) + +### 第一步:配置 (Config) +1. 打开 `1_核心设计_通用协议/标准配置模板.yaml`。 +2. 将文件内容复制到你项目的配置文件中(如 `.env` 或 `config.py`)。 +3. 填入你申请到的 `APP_ID`, `PRIVATE_KEY` 等参数。 + +### 第二步:生成代码 (Generate) +1. 复制 `2_智能对接_AI指令/通用集成指令.md` 的内容。 +2. 打开 AI 助手,发送指令: + > "我的项目是用 **Python FastAPI** 写的。请根据上述文档,采用 **模式 A (嵌入式)** 为我集成支付功能。" +3. AI 会为你生成: + * `pip install ...` 命令 + * `models.py` (数据库模型) + * `payment_router.py` (API 接口) + +### 第三步:前端接入 (Frontend) +1. 参考 `3_逻辑参考_通用实现/前端收银台Demo.html`。 +2. 将其中的 `API_BASE` 替换为你后端实际的 API 地址。 +3. 即可拥有一个支持 **扫码、跳转、加密货币支付** 的全功能收银台。 + +## 🌍 支持能力 +| 渠道 | 能力 | 适用场景 | +| :--- | :--- | :--- | +| **Alipay / Wechat** | 扫码 / H5 / APP | 中国市场 (CNY) | +| **PayPal / Stripe** | 信用卡 / 订阅 | 全球市场 (USD/EUR...) | +| **USDT (TRC20)** | 链上转账 / 监听 | Web3 / 抗审查支付 | + +## ✨ v3.0 优化亮点 +* **配置驱动**: 不再需要改代码里的硬编码,所有参数通过配置文件注入。 +* **API 契约**: 明确了输入输出格式,前后端对接不再扯皮。 +* **前端 Demo**: 提供了一个不依赖任何框架的原生 JS 收银台,复制即用。 diff --git a/app/about/page.tsx b/app/about/page.tsx new file mode 100644 index 0000000..e8b129e --- /dev/null +++ b/app/about/page.tsx @@ -0,0 +1,152 @@ +"use client" + +import Link from "next/link" +import { ChevronLeft, Clock, MessageCircle, BookOpen, Users, Award, TrendingUp } from "lucide-react" +import { Button } from "@/components/ui/button" +import { useState } from "react" +import { QRCodeModal } from "@/components/modules/marketing/qr-code-modal" +import { useStore } from "@/lib/store" + +export default function AboutPage() { + const [showQRModal, setShowQRModal] = useState(false) + const { settings } = useStore() + const authorInfo = settings?.authorInfo || { + name: "卡若", + description: "连续创业者,私域运营专家", + liveTime: "06:00-09:00", + platform: "Soul派对房", + } + + const milestones = [ + { year: "2012", event: "开始做游戏推广,从魔兽世界外挂代理起步" }, + { year: "2015", event: "转型电商,做天猫虚拟充值,月流水380万" }, + { year: "2017", event: "团队扩张到200人,年流水3000万" }, + { year: "2018", event: "公司破产,负债数百万,开始全国旅行反思" }, + { year: "2019", event: "重新出发,专注私域运营和个人IP" }, + { year: "2024", event: "在Soul派对房每日直播,分享真实商业故事" }, + ] + + const stats = [ + { icon: BookOpen, value: "55+", label: "真实案例" }, + { icon: Users, value: "10000+", label: "派对房听众" }, + { icon: Award, value: "15年", label: "创业经验" }, + { icon: TrendingUp, value: "3000万", label: "最高年流水" }, + ] + + return ( +
+ {/* Header */} +
+
+ + + 返回 + +

关于作者

+
+
+
+ +
+ {/* Author Card */} +
+
+
+ {authorInfo.name.charAt(0)} +
+
+

{authorInfo.name}

+

{authorInfo.description}

+
+ + + 每日 {authorInfo.liveTime} + + + + {authorInfo.platform} + +
+
+ +
+
+ + {/* Stats */} +
+ {stats.map((stat, index) => ( +
+ +

{stat.value}

+

{stat.label}

+
+ ))} +
+ + {/* Introduction */} +
+

关于这本书

+
+

"这不是一本教你成功的鸡汤书。"

+

+ 这是我每天早上6点到9点,在Soul派对房和几百个陌生人分享的真实故事。 有人来找项目,有人来找钱,有人来找方向。 +

+

+ 我见过凌晨四点还在撸运费险的年轻人,见过七十岁还在开滴滴做生意的老人, + 见过一个月赚七八块却拼命倒卖游戏金币的大学生。 +

+

"社会不是靠努力,是靠洞察与选择。"

+

+ 这本书,就是把那些在派对房里讲过的、能让人清醒的故事,整理成文字。每个案例都真实发生过,每个教训都是用钱换来的。 +

+
+
+ + {/* Timeline */} +
+

创业历程

+
+ {milestones.map((item, index) => ( +
+
+
+ {index < milestones.length - 1 &&
} +
+
+

{item.year}

+

{item.event}

+
+
+ ))} +
+
+ + {/* CTA */} +
+

想听更多真实故事?

+

每天早上6-9点,卡若在Soul派对房免费分享

+
+ + + + +
+
+
+ + setShowQRModal(false)} /> +
+ ) +} diff --git a/app/admin/content/loading.tsx b/app/admin/content/loading.tsx new file mode 100644 index 0000000..f15322a --- /dev/null +++ b/app/admin/content/loading.tsx @@ -0,0 +1,3 @@ +export default function Loading() { + return null +} diff --git a/app/admin/content/page.tsx b/app/admin/content/page.tsx new file mode 100644 index 0000000..2da17e9 --- /dev/null +++ b/app/admin/content/page.tsx @@ -0,0 +1,335 @@ +"use client" + +import { useState } from "react" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { Label } from "@/components/ui/label" +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" +import { Textarea } from "@/components/ui/textarea" +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" +import { Badge } from "@/components/ui/badge" +import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog" +import { bookData } from "@/lib/book-data" +import { + FileText, + BookOpen, + Settings2, + ChevronRight, + CheckCircle, + Edit3, + Save, + X, + RefreshCw, + Link2, +} from "lucide-react" + +interface EditingSection { + id: string + title: string + price: number + content?: string +} + +export default function ContentPage() { + const [expandedParts, setExpandedParts] = useState(["part-1"]) + const [editingSection, setEditingSection] = useState(null) + const [isSyncing, setIsSyncing] = useState(false) + const [feishuDocUrl, setFeishuDocUrl] = useState("") + const [showFeishuModal, setShowFeishuModal] = useState(false) + + const togglePart = (partId: string) => { + setExpandedParts((prev) => (prev.includes(partId) ? prev.filter((id) => id !== partId) : [...prev, partId])) + } + + const totalSections = bookData.reduce( + (sum, part) => sum + part.chapters.reduce((cSum, ch) => cSum + ch.sections.length, 0), + 0, + ) + + const handleEditSection = (section: { id: string; title: string; price: number }) => { + setEditingSection({ + id: section.id, + title: section.title, + price: section.price, + content: "", + }) + } + + const handleSaveSection = () => { + if (editingSection) { + // 保存到本地存储或API + console.log("[v0] Saving section:", editingSection) + alert(`已保存章节: ${editingSection.title}`) + setEditingSection(null) + } + } + + const handleSyncFeishu = async () => { + if (!feishuDocUrl) { + alert("请输入飞书文档链接") + return + } + setIsSyncing(true) + // 模拟同步过程 + await new Promise((resolve) => setTimeout(resolve, 2000)) + setIsSyncing(false) + setShowFeishuModal(false) + alert("飞书文档同步成功!") + } + + return ( +
+
+
+

内容管理

+

+ 共 {bookData.length} 篇 · {totalSections} 节内容 +

+
+ +
+ + {/* 飞书同步弹窗 */} + + + + + + 同步飞书文档 + + +
+
+ + setFeishuDocUrl(e.target.value)} + /> +

请确保文档已开启公开访问权限

+
+
+

+ 同步说明:系统将自动解析飞书文档结构,按照标题层级导入为章节内容。 +

+
+
+ + + + +
+
+ + {/* 章节编辑弹窗 */} + setEditingSection(null)}> + + + + + 编辑章节 + + + {editingSection && ( +
+
+ + setEditingSection({ ...editingSection, title: e.target.value })} + /> +
+
+ + setEditingSection({ ...editingSection, price: Number(e.target.value) })} + /> +
+
+ +