export interface Section { id: string title: string price: number isFree: boolean filePath: string content?: string createdAt?: string unlockAfterDays?: number } export interface Chapter { id: string title: string sections: Section[] } export interface Part { id: string number: string title: string subtitle: string chapters: Chapter[] } export const BASE_BOOK_PRICE = 9.9 export const SECTION_PRICE = 1 export const PREMIUM_SECTION_PRICE = 1 // 最新版每小节额外价格 // 基础版价格(固定9.9) export function getFullBookPrice(): number { return 9.9 } // 最新完整版价格(基础9.9 + 新增小节数 * 1元) // 假设基础版包含前50个小节,之后每增加一个小节+1元 export const BASE_SECTIONS_COUNT = 50 export function getPremiumBookPrice(): number { const totalSections = getTotalSectionCount() const extraSections = Math.max(0, totalSections - BASE_SECTIONS_COUNT) return BASE_BOOK_PRICE + extraSections * PREMIUM_SECTION_PRICE } // 获取新增小节数量 export function getExtraSectionsCount(): number { const totalSections = getTotalSectionCount() return Math.max(0, totalSections - BASE_SECTIONS_COUNT) } export const bookData: Part[] = [ { id: "part-1", number: "01", title: "真实的人", subtitle: "人性观察与社交逻辑", chapters: [ { id: "chapter-1", title: "人与人之间的底层逻辑", sections: [ { id: "1.1", title: "荷包:电动车出租的被动收入模式", price: 1, isFree: true, filePath: "book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.1 荷包:电动车出租的被动收入模式.md", }, { id: "1.2", title: "老墨:资源整合高手的社交方法", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.2 老墨:资源整合高手的社交方法.md", }, { id: "1.3", title: "笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.3 笑声背后的MBTI:为什么ENTJ适合做资源,INTP适合做系统.md", }, { id: "1.4", title: "人性的三角结构:利益、情感、价值观", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.4 人性的三角结构:利益、情感、价值观.md", }, { id: "1.5", title: "沟通差的问题:为什么你说的别人听不懂", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第1章|人与人之间的底层逻辑/1.5 沟通差的问题:为什么你说的别人听不懂.md", }, ], }, { id: "chapter-2", title: "人性困境案例", sections: [ { id: "2.1", title: "相亲故事:你以为找的是人,实际是在找模式", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第2章|人性困境案例/2.1 相亲故事:你以为找的是人,实际是在找模式.md", }, { id: "2.2", title: "找工作迷茫者:为什么简历解决不了人生", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第2章|人性困境案例/2.2 找工作迷茫者:为什么简历解决不了人生.md", }, { id: "2.3", title: "撸运费险:小钱困住大脑的真实心理", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第2章|人性困境案例/2.3 撸运费险:小钱困住大脑的真实心理.md", }, { id: "2.4", title: "游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第2章|人性困境案例/2.4 游戏上瘾的年轻人:不是游戏吸引他,是生活没吸引力.md", }, { id: "2.5", title: "健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒", price: 1, isFree: false, filePath: "book/第一篇|真实的人/第2章|人性困境案例/2.5 健康焦虑(我的糖尿病经历):疾病是人生的第一次清醒.md", }, ], }, ], }, { id: "part-2", number: "02", title: "真实的行业", subtitle: "社会运作的底层规则", chapters: [ { id: "chapter-3", title: "电商篇", sections: [ { id: "3.1", title: "3000万流水如何跑出来(退税模式解析)", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.1 3000万流水如何跑出来(退税模式解析).md", }, { id: "3.2", title: "供应链之王 vs 打工人:利润不在前端", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.2 供应链之王 vs 打工人:利润不在前端.md", }, { id: "3.3", title: "社区团购的底层逻辑", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.3 社区团购的底层逻辑.md", }, { id: "3.4", title: "跨境电商与退税套利", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第3章|电商篇/3.4 跨境电商与退税套利.md", }, ], }, { id: "chapter-4", title: "内容商业篇", sections: [ { id: "4.1", title: "旅游号:30天10万粉的真实逻辑", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.1 旅游号:30天10万粉的真实逻辑.md", }, { id: "4.2", title: "做号工厂:如何让一个号变成一个机器", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.2 做号工厂:如何让一个号变成一个机器.md", }, { id: "4.3", title: "情绪内容为什么比专业内容更赚钱", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.3 情绪内容为什么比专业内容更赚钱.md", }, { id: "4.4", title: "猫与宠物号:为什么宠物赛道永不过时", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.4 猫与宠物号:为什么宠物赛道永不过时.md", }, { id: "4.5", title: "直播间里的三种人:演员、技术工、系统流", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第4章|内容商业篇/4.5 直播间里的三种人:演员、技术工、系统流.md", }, ], }, { id: "chapter-5", title: "传统行业篇", sections: [ { id: "5.1", title: "拍卖行抱朴:一天240万的摇号生意", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.1 拍卖行抱朴:一天240万的摇号生意.md", }, { id: "5.2", title: "土地拍卖:招拍挂背后的游戏规则", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.2 土地拍卖:招拍挂背后的游戏规则.md", }, { id: "5.3", title: "地摊经济数字化:一个月900块的餐车生意", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.3 地摊经济数字化:一个月900块的餐车生意.md", }, { id: "5.4", title: "不良资产拍卖:我错过的一个亿佣金", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.4 不良资产拍卖:我错过的一个亿佣金.md", }, { id: "5.5", title: "桶装水李总:跟物业合作的轻资产模式", price: 1, isFree: false, filePath: "book/第二篇|真实的行业/第5章|传统行业篇/5.5 桶装水李总:跟物业合作的轻资产模式.md", }, ], }, ], }, { id: "part-3", number: "03", title: "真实的错误", subtitle: "错过机会比失败更贵", chapters: [ { id: "chapter-6", title: "我人生错过的4件大钱", sections: [ { id: "6.1", title: "电商财税窗口:2016年的千万级机会", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.1 电商财税窗口:2016年的千万级机会.md", }, { id: "6.2", title: "供应链金融:我不懂的杠杆游戏", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.2 供应链金融:我不懂的杠杆游戏.md", }, { id: "6.3", title: "内容红利:2019年我为什么没做抖音", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.3 内容红利:2019年我为什么没做抖音.md", }, { id: "6.4", title: "数据资产化:我还在观望的未来机会", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第6章|我人生错过的4件大钱/6.4 数据资产化:我还在观望的未来机会.md", }, ], }, { id: "chapter-7", title: "别人犯的错误", sections: [ { id: "7.1", title: "投资房年轻人的迷茫:资金 vs 能力", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.1 投资房年轻人的迷茫:资金 vs 能力.md", }, { id: "7.2", title: "信息差骗局:永远有人靠卖学习赚钱", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.2 信息差骗局:永远有人靠卖学习赚钱.md", }, { id: "7.3", title: "在Soul找恋爱但想赚钱的人", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.3 在Soul找恋爱但想赚钱的人.md", }, { id: "7.4", title: "创业者的三种死法:冲动、轻信、没结构", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.4 创业者的三种死法:冲动、轻信、没结构.md", }, { id: "7.5", title: "人情生意的终点:关系越多亏得越多", price: 1, isFree: false, filePath: "book/第三篇|真实的错误/第7章|别人犯的错误/7.5 人情生意的终点:关系越多亏得越多.md", }, ], }, ], }, { id: "part-4", number: "04", title: "真实的赚钱", subtitle: "所有行业的杠杆结构", chapters: [ { id: "chapter-8", title: "底层结构", sections: [ { id: "8.1", title: "流量杠杆:抖音、Soul、飞书", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.1 流量杠杆:抖音、Soul、飞书.md", }, { id: "8.2", title: "价格杠杆:供应链与信息差", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.2 价格杠杆:供应链与信息差.md", }, { id: "8.3", title: "时间杠杆:自动化 + AI", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.3 时间杠杆:自动化 + AI.md", }, { id: "8.4", title: "情绪杠杆:咨询、婚恋、生意场", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.4 情绪杠杆:咨询、婚恋、生意场.md", }, { id: "8.5", title: "社交杠杆:认识谁比你会什么更重要", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.5 社交杠杆:认识谁比你会什么更重要.md", }, { id: "8.6", title: "云阿米巴:分不属于自己的钱", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第8章|底层结构/8.6 云阿米巴:分不属于自己的钱.md", }, ], }, { id: "chapter-9", title: "我在Soul上亲访的赚钱案例", sections: [ { id: "9.1", title: "游戏账号私域:账号即资产", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.1 游戏账号私域:账号即资产.md", }, { id: "9.2", title: "健康包模式:高复购、高毛利", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.2 健康包模式:高复购、高毛利.md", }, { id: "9.3", title: "药物私域:长期关系赛道", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.3 药物私域:长期关系赛道.md", }, { id: "9.4", title: "残疾机构合作:退税 × AI × 人力成本", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.4 残疾机构合作:退税 × AI × 人力成本.md", }, { id: "9.5", title: "私域银行:粉丝即小股东", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.5 私域银行:粉丝即小股东.md", }, { id: "9.6", title: "Soul派对房:陌生人成交的最快场景", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.6 Soul派对房:陌生人成交的最快场景.md", }, { id: "9.7", title: "飞书中台:从聊天到成交的流程化体系", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.7 飞书中台:从聊天到成交的流程化体系.md", }, { id: "9.8", title: "餐饮女孩:6万营收、1万利润的死撑生意", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.8 餐饮女孩:6万营收、1万利润的死撑生意.md", }, { id: "9.9", title: "电竞生态:从陪玩到签约到酒店的完整链条", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.9 电竞生态:从陪玩到签约到酒店的完整链条.md", }, { id: "9.10", title: "淘客大佬:损耗30%的白色通道", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.10 淘客大佬:损耗30%的白色通道.md", }, { id: "9.11", title: "蔬菜供应链:农户才是最赚钱的人", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.11 蔬菜供应链:农户才是最赚钱的人.md", }, { id: "9.12", title: "美业整合:一个人的公司如何月入十万", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.12 美业整合:一个人的公司如何月入十万.md", }, { id: "9.13", title: "AI工具推广:一个隐藏的高利润赛道", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.13 AI工具推广:一个隐藏的高利润赛道.md", }, { id: "9.14", title: "大健康私域:一个月150万的70后", price: 1, isFree: false, filePath: "book/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例/9.14 大健康私域:一个月150万的70后.md", }, ], }, ], }, { id: "part-5", number: "05", title: "真实的未来", subtitle: "人与系统的关系", chapters: [ { id: "chapter-10", title: "未来职业的变化趋势", sections: [ { id: "10.1", title: "AI时代:哪些工作会消失,哪些会崛起", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.1 AI时代:哪些工作会消失,哪些会崛起.md", }, { id: "10.2", title: "一人公司:为什么越来越多人选择单干", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.2 一人公司:为什么越来越多人选择单干.md", }, { id: "10.3", title: "为什么链接能力会成为第一价值", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.3 为什么链接能力会成为第一价值.md", }, { id: "10.4", title: "新型公司:Soul-飞书-线下的三位一体", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第10章|未来职业的变化趋势/10.4 新型公司:Soul-飞书-线下的三位一体.md", }, ], }, { id: "chapter-11", title: "中国社会商业生态的未来", sections: [ { id: "11.1", title: "私域经济:为什么流量越来越贵", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.1 私域经济:为什么流量越来越贵.md", }, { id: "11.2", title: "银发经济与孤独经济:两个被忽视的万亿市场", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.2 银发经济与孤独经济:两个被忽视的万亿市场.md", }, { id: "11.3", title: "流量红利的终局", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.3 流量红利的终局.md", }, { id: "11.4", title: "大模型 + 供应链的组合拳", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.4 大模型 + 供应链的组合拳.md", }, { id: "11.5", title: "社会分层的最终逻辑", price: 1, isFree: false, filePath: "book/第五篇|真实的社会/第11章|中国社会商业生态的未来/11.5 社会分层的最终逻辑.md", }, ], }, ], }, ] // 特殊章节:序言、尾声、附录 export const specialSections = { preface: { id: "preface", title: "序言|为什么我每天早上6点在Soul开播?", price: 0, isFree: true, filePath: "book/序言|为什么我每天早上6点在Soul开播?.md", }, epilogue: { id: "epilogue", title: "尾声|这本书的真实目的", price: 0, isFree: true, filePath: "book/尾声|这本书的真实目的.md", }, appendix: [ { id: "appendix-1", title: "附录1|Soul派对房精选对话", price: 0, isFree: true, filePath: "book/附录/附录1|Soul派对房精选对话.md", }, { id: "appendix-2", title: "附录2|创业者自检清单", price: 0, isFree: true, filePath: "book/附录/附录2|创业者自检清单.md", }, { id: "appendix-3", title: "附录3|本书提到的工具和资源", price: 0, isFree: true, filePath: "book/附录/附录3|本书提到的工具和资源.md", }, ], } // 获取总章节数 export function getTotalSectionCount(): number { let count = 0 bookData.forEach((part) => { part.chapters.forEach((chapter) => { count += chapter.sections.length }) }) return count // 64章 } export function getAllSections(): Section[] { const sections: Section[] = [] bookData.forEach((part) => { part.chapters.forEach((chapter) => { sections.push(...chapter.sections) }) }) return sections } export function getSectionById(id: string): Section | undefined { for (const part of bookData) { for (const chapter of part.chapters) { const section = chapter.sections.find((s) => s.id === id) if (section) return section } } // 检查特殊章节 if (id === "preface") return specialSections.preface as Section if (id === "epilogue") return specialSections.epilogue as Section const appendix = specialSections.appendix.find((a) => a.id === id) if (appendix) return appendix as Section return undefined } export function getChapterBySection(sectionId: string): { part: Part; chapter: Chapter } | undefined { for (const part of bookData) { for (const chapter of part.chapters) { if (chapter.sections.some((s) => s.id === sectionId)) { return { part, chapter } } } } return undefined } // 获取下一篇文章 export function getNextSection(currentId: string): Section | undefined { const allSections = getAllSections() const currentIndex = allSections.findIndex((s) => s.id === currentId) if (currentIndex === -1 || currentIndex >= allSections.length - 1) { return undefined } return allSections[currentIndex + 1] } // 获取上一篇文章 export function getPrevSection(currentId: string): Section | undefined { const allSections = getAllSections() const currentIndex = allSections.findIndex((s) => s.id === currentId) if (currentIndex <= 0) { return undefined } return allSections[currentIndex - 1] } export const FULL_BOOK_PRICE = getFullBookPrice()