// 塔罗知识模块 - 本地静态数据 V1.5 // 分类:beginner(新手必看), inspiration(提问灵感), tips(塔罗小知识) // 支持混合内容:type: 'local'(本地文章) | 'web'(外链文章) const knowledgeData = [ // ========== 新手必看 ========== { id: 'beginner_001', category: 'beginner', title: '什么是塔罗牌?', summary: '了解塔罗牌的起源、结构和基本用途', type: 'local', content: `塔罗牌是一套由78张牌组成的占卜工具,起源于15世纪的欧洲。 它分为两部分: • 大阿尔卡那(22张):代表人生重大主题和转折点 • 小阿尔卡那(56张):代表日常生活的细节和事件 塔罗牌不是用来"算命"的,而是一面镜子,帮助你看清内心深处的想法和感受。 它通过象征性的图像,引导你思考问题的不同角度,从而做出更明智的选择。`, url: '' }, { id: 'beginner_002', category: 'beginner', title: '塔罗占卜准吗?', summary: '理解塔罗占卜的本质和正确心态', type: 'local', content: `塔罗牌不是"预测未来"的工具,而是"探索可能性"的方式。 它的准确性取决于: 1. 你的问题是否清晰具体 2. 你是否真诚面对自己的内心 3. 你是否愿意从牌面中获得启发 塔罗牌反映的是当下的能量和趋势,未来始终掌握在你自己手中。 把塔罗当作一个智慧的朋友,它会给你建议,但最终的决定权在你。`, url: '' }, { id: 'beginner_003', category: 'beginner', title: '如何正确提问?', summary: '掌握提问技巧,让占卜更有意义', type: 'local', content: `好的问题决定了占卜的质量。 ❌ 避免的问题类型: • 是非题:"他喜欢我吗?" • 时间预测:"我什么时候能升职?" • 替他人占卜:"他在想什么?" ✅ 推荐的问题方式: • "在这段关系中,我需要注意什么?" • "如果我选择换工作,可能会面临哪些挑战?" • "我该如何改善目前的困境?" 记住:问"如何"比问"会不会"更有价值。`, url: '' }, { id: 'beginner_004', category: 'beginner', title: '正位和逆位是什么意思?', summary: '理解牌面方向的含义', type: 'local', content: `塔罗牌在占卜时可能以两种方向出现: 正位: • 牌面图案正向朝上 • 通常代表该牌的直接含义 • 能量流畅、显现明显 逆位: • 牌面图案倒置 • 可能代表能量受阻、内化或过度 • 需要更深入的反思 逆位不等于"坏",它只是提醒你: 这个能量可能被压抑、延迟,或需要从另一个角度理解。`, url: '' }, { id: 'web_002', category: 'beginner', title: '塔罗牌入门指南', summary: '系统化的塔罗学习路径', type: 'web', content: '', url: 'http://www.90000li.com/tarot/2/999d793fce9f4f3782c9b24769232942.html' }, // ========== 提问灵感 ========== { id: 'inspiration_001', category: 'inspiration', title: '关于感情的提问', summary: '如何更好地探索情感问题', type: 'local', content: `感情类问题是塔罗占卜中最常见的主题。 优质提问示例: • "在这段关系中,我需要学习什么?" • "我该如何处理目前的情感困惑?" • "这段关系对我的成长有什么意义?" • "如何改善我们之间的沟通?" 避免问: • "他/她喜欢我吗?"(过于简单) • "我们会结婚吗?"(预测结果) • "他/她现在在想什么?"(替他人占卜) 把焦点放在自己身上,问题会更有力量。`, url: '' }, { id: 'inspiration_002', category: 'inspiration', title: '关于事业的提问', summary: '探索职业发展和工作选择', type: 'local', content: `事业问题需要更具体的角度。 优质提问示例: • "如果我选择这份工作,可能面临哪些挑战?" • "我该如何提升目前的工作表现?" • "这个项目的潜在风险是什么?" • "我的职业发展方向应该关注什么?" 避免问: • "我会升职吗?"(是非题) • "我什么时候能找到工作?"(时间预测) 把问题聚焦在"如何做得更好",而不是"会不会成功"。`, url: '' }, { id: 'inspiration_003', category: 'inspiration', title: '关于个人成长的提问', summary: '用塔罗探索内在自我', type: 'local', content: `塔罗牌最擅长的,就是帮助你认识自己。 优质提问示例: • "我目前最需要关注的内在课题是什么?" • "如何突破当前的心理困境?" • "我的潜在优势是什么?" • "这段经历想教会我什么?" 这类问题没有"对错",只有"看见"。 通过塔罗,你可以: • 发现盲点 • 理解情绪 • 找到方向 • 获得力量`, url: '' }, { id: 'inspiration_004', category: 'inspiration', title: '关于决策的提问', summary: '在选择中寻找方向', type: 'local', content: `面对选择时,塔罗可以帮你看清不同路径。 优质提问示例: • "选择A和选择B分别会带来什么影响?" • "做这个决定时,我需要考虑什么?" • "这个选择对我的长期发展有何意义?" 建议使用"对比牌阵": • 左边:选择A的可能结果 • 右边:选择B的可能结果 • 中间:核心建议 记住:塔罗给建议,但决定权永远在你手中。`, url: '' }, { id: 'web_003', category: 'inspiration', title: '塔罗占卜实战技巧', summary: '提升占卜准确度的方法', type: 'web', content: '', url: 'http://www.90000li.com/tarot/2/999d793fce9f4f3782c9b24769232942.html' }, // ========== 塔罗小知识 ========== { id: 'tips_001', category: 'tips', title: '为什么要"洗牌"?', summary: '了解洗牌的意义和能量连接', type: 'local', content: `洗牌不只是打乱顺序,它是一个能量连接的过程。 洗牌的作用: 1. 清除上一次占卜的能量残留 2. 让你的意识与牌建立连接 3. 创造一个专注的仪式感 在洗牌时: • 保持内心平静 • 专注于你的问题 • 感受手中牌的重量 这个过程帮助你进入"占卜状态",让解读更准确。`, url: '' }, { id: 'tips_002', category: 'tips', title: '同一个问题可以占卜多次吗?', summary: '理解占卜频率和心态', type: 'local', content: `不建议短时间内反复占卜同一个问题。 原因: • 频繁占卜会让能量混乱 • 你可能只是在寻找"想要的答案" • 过度依赖会削弱你的判断力 建议: • 同一问题至少间隔1-2周 • 如果情况有明显变化,可以重新占卜 • 把塔罗当作参考,而不是唯一依据 记住:塔罗是工具,不是拐杖。`, url: '' }, { id: 'tips_003', category: 'tips', title: '什么时候不适合占卜?', summary: '选择合适的占卜时机', type: 'local', content: `并非所有时刻都适合占卜。 不适合占卜的情况: • 情绪极度激动或崩溃时 • 只想听"好消息"时 • 已经有明确答案,只是不想接受时 • 身体极度疲惫时 最佳占卜时机: • 内心相对平静 • 真诚想要获得启发 • 愿意接受任何答案 • 精神状态良好 占卜需要一颗开放的心。`, url: '' }, { id: 'tips_004', category: 'tips', title: '塔罗牌需要"养牌"吗?', summary: '关于塔罗牌保养的真相', type: 'local', content: `网上有很多"养牌"的说法,但其实没那么复杂。 真正重要的: • 保持牌面清洁 • 避免潮湿和暴晒 • 用心对待你的牌 不必要的仪式: • 不需要"开光" • 不需要特定时间才能用 • 不需要复杂的净化仪式 塔罗牌是工具,你的诚意比仪式更重要。 用心使用,它自然会成为你的好伙伴。`, url: '' }, { id: 'tips_005', category: 'tips', title: '塔罗牌可以借给别人吗?', summary: '关于塔罗牌的使用边界', type: 'local', content: `这是个人选择,没有绝对的对错。 传统观点: • 塔罗牌是私人物品,不宜外借 • 避免能量混杂 现代观点: • 如果你不介意,可以分享 • 用后可以简单整理一下 建议: • 如果你很在意,就不要借 • 如果借出后感觉不舒服,可以重新洗牌 • 最重要的是尊重自己的感受 你的感受才是最重要的边界。`, url: '' }, { id: 'web_001', category: 'tips', title: '塔罗牌基础知识介绍', summary: '来自外部知识库的深度解析', type: 'web', content: '', url: 'http://www.90000li.com/tarot/2/999d793fce9f4f3782c9b24769232942.html' }, { id: 'web_004', category: 'tips', title: '大阿卡那与小阿卡那的奥秘', summary: '探索大阿卡那与小阿卡那的神秘世界', type: 'web', content: '', url: 'http://www.90000li.com/tarot/null/4ae0c88e9c34499485250ec9bfa58098.html' } ]; // 获取所有分类 function getCategories() { return [ { id: 'beginner', name: '新手必看', icon: '📖' }, { id: 'inspiration', name: '提问灵感', icon: '💡' }, { id: 'tips', name: '塔罗小知识', icon: '✨' } ]; } // 根据分类获取文章列表 function getArticlesByCategory(category) { return knowledgeData.filter(item => item.category === category); } // 根据ID获取文章详情 function getArticleById(id) { return knowledgeData.find(item => item.id === id); } // 获取随机文章 function getRandomArticle() { const randomIndex = Math.floor(Math.random() * knowledgeData.length); return knowledgeData[randomIndex]; } // 获取随机本地文章(优先本地内容) function getRandomLocalArticle() { const localArticles = knowledgeData.filter(item => item.type === 'local'); if (localArticles.length === 0) { return getRandomArticle(); // 如果没有本地文章,返回任意文章 } const randomIndex = Math.floor(Math.random() * localArticles.length); return localArticles[randomIndex]; } // 基于日期获取今日文章(确保同一天返回相同文章) function getDailyArticle() { try { const today = new Date(); const dateStr = `${today.getFullYear()}-${(today.getMonth() + 1).toString().padStart(2, '0')}-${today.getDate().toString().padStart(2, '0')}`; // 使用日期字符串生成哈希值 let hash = 0; for (let i = 0; i < dateStr.length; i++) { hash = ((hash << 5) - hash) + dateStr.charCodeAt(i); hash = hash & hash; } // 优先使用本地文章 const localArticles = knowledgeData.filter(item => item.type === 'local'); const articles = localArticles.length > 0 ? localArticles : knowledgeData; const index = Math.abs(hash) % articles.length; return articles[index]; } catch (error) { console.error('[每日文章] 获取失败:', error); return knowledgeData[0]; } } module.exports = { knowledgeData, getCategories, getArticlesByCategory, getArticleById, getRandomArticle, getRandomLocalArticle, getDailyArticle };