| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- /**
- * 属相(生肖)计算工具
- */
- // 十二生肖数组
- const ZODIACS = ['鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊', '猴', '鸡', '狗', '猪']
- // 生肖对应的emoji
- const ZODIAC_EMOJIS = {
- '鼠': '🐭',
- '牛': '🐮',
- '虎': '🐯',
- '兔': '🐰',
- '龙': '🐲',
- '蛇': '🐍',
- '马': '🐴',
- '羊': '🐑',
- '猴': '🐵',
- '鸡': '🐔',
- '狗': '🐶',
- '猪': '🐷'
- }
- // 生肖性格特征
- const ZODIAC_TRAITS = {
- '鼠': {
- name: '鼠',
- emoji: '🐭',
- personality: '机智灵活,善于社交,聪明伶俐',
- loveStyle: '浪漫细腻,善于制造惊喜',
- advantage: '头脑灵活、适应力强、幽默风趣',
- weakness: '有时过于谨慎、容易多疑',
- luckyColor: '蓝色、金色',
- luckyNumber: '2、3',
- compatibility: {
- best: ['龙', '猴', '牛'],
- good: ['鼠', '虎', '蛇'],
- avoid: ['马', '羊', '鸡']
- }
- },
- '牛': {
- name: '牛',
- emoji: '🐮',
- personality: '踏实稳重,勤劳努力,值得信赖',
- loveStyle: '专一深情,默默付出',
- advantage: '勤奋踏实、责任心强、值得依靠',
- weakness: '有时固执己见、不够浪漫',
- luckyColor: '黄色、绿色',
- luckyNumber: '1、9',
- compatibility: {
- best: ['鼠', '蛇', '鸡'],
- good: ['牛', '兔', '猪'],
- avoid: ['马', '羊', '龙']
- }
- },
- '虎': {
- name: '虎',
- emoji: '🐯',
- personality: '勇敢自信,充满激情,领导力强',
- loveStyle: '热情主动,保护欲强',
- advantage: '勇敢果断、充满魅力、正义感强',
- weakness: '容易冲动、有时过于强势',
- luckyColor: '橙色、蓝色',
- luckyNumber: '1、3、4',
- compatibility: {
- best: ['马', '狗', '猪'],
- good: ['龙', '羊'],
- avoid: ['蛇', '猴']
- }
- },
- '兔': {
- name: '兔',
- emoji: '🐰',
- personality: '温柔善良,优雅细腻,懂得生活',
- loveStyle: '温柔体贴,浪漫优雅',
- advantage: '温柔善良、审美出众、善解人意',
- weakness: '有时过于敏感、缺乏安全感',
- luckyColor: '粉色、白色',
- luckyNumber: '3、4、9',
- compatibility: {
- best: ['羊', '狗', '猪'],
- good: ['虎', '龙', '蛇'],
- avoid: ['鸡', '鼠']
- }
- },
- '龙': {
- name: '龙',
- emoji: '🐲',
- personality: '自信大方,富有理想,魅力十足',
- loveStyle: '浪漫大气,懂得制造惊喜',
- advantage: '自信魅力、理想远大、慷慨大方',
- weakness: '有时过于自我、不够耐心',
- luckyColor: '金色、银色',
- luckyNumber: '1、6、7',
- compatibility: {
- best: ['鼠', '猴', '鸡'],
- good: ['虎', '兔', '蛇'],
- avoid: ['狗', '龙']
- }
- },
- '蛇': {
- name: '蛇',
- emoji: '🐍',
- personality: '智慧深沉,神秘优雅,洞察力强',
- loveStyle: '深情专一,神秘诱人',
- advantage: '智慧深邃、优雅迷人、直觉敏锐',
- weakness: '有时过于冷静、不易亲近',
- luckyColor: '红色、黄色',
- luckyNumber: '2、8、9',
- compatibility: {
- best: ['牛', '鸡'],
- good: ['龙', '兔', '羊'],
- avoid: ['虎', '猪']
- }
- },
- '马': {
- name: '马',
- emoji: '🐴',
- personality: '热情开朗,积极乐观,充满活力',
- loveStyle: '热烈奔放,追求自由',
- advantage: '热情开朗、活力四射、乐观向上',
- weakness: '有时缺乏耐心、容易三分钟热度',
- luckyColor: '红色、紫色',
- luckyNumber: '2、3、7',
- compatibility: {
- best: ['虎', '羊', '狗'],
- good: ['龙', '蛇', '猴'],
- avoid: ['鼠', '牛', '马']
- }
- },
- '羊': {
- name: '羊',
- emoji: '🐑',
- personality: '温和善良,富有同情心,艺术气质',
- loveStyle: '温柔依赖,需要呵护',
- advantage: '温柔善良、富有创意、同情心强',
- weakness: '有时过于依赖、优柔寡断',
- luckyColor: '绿色、红色',
- luckyNumber: '3、4、9',
- compatibility: {
- best: ['兔', '马', '猪'],
- good: ['蛇', '猴', '鸡'],
- avoid: ['牛', '狗']
- }
- },
- '猴': {
- name: '猴',
- emoji: '🐵',
- personality: '聪明机智,活泼开朗,适应力强',
- loveStyle: '幽默风趣,善于讨喜',
- advantage: '聪明机智、幽默风趣、多才多艺',
- weakness: '有时过于浮躁、不够专注',
- luckyColor: '白色、蓝色',
- luckyNumber: '1、7、8',
- compatibility: {
- best: ['鼠', '龙'],
- good: ['牛', '兔', '马'],
- avoid: ['虎', '猪']
- }
- },
- '鸡': {
- name: '鸡',
- emoji: '🐔',
- personality: '自信独立,追求完美,时尚品味',
- loveStyle: '忠诚专一,追求完美',
- advantage: '自信独立、追求完美、有品味',
- weakness: '有时过于挑剔、爱面子',
- luckyColor: '金色、棕色',
- luckyNumber: '5、7、8',
- compatibility: {
- best: ['牛', '龙', '蛇'],
- good: ['羊', '猴', '猪'],
- avoid: ['兔', '鸡', '狗']
- }
- },
- '狗': {
- name: '狗',
- emoji: '🐶',
- personality: '忠诚可靠,正直善良,责任感强',
- loveStyle: '忠诚专一,保护欲强',
- advantage: '忠诚可靠、正直善良、责任心强',
- weakness: '有时过于固执、容易焦虑',
- luckyColor: '红色、绿色',
- luckyNumber: '3、4、9',
- compatibility: {
- best: ['虎', '兔', '马'],
- good: ['蛇', '猴', '猪'],
- avoid: ['龙', '羊', '鸡']
- }
- },
- '猪': {
- name: '猪',
- emoji: '🐷',
- personality: '真诚善良,乐观豁达,享受生活',
- loveStyle: '真诚浪漫,包容大度',
- advantage: '真诚善良、乐观豁达、宽容大度',
- weakness: '有时过于天真、容易受骗',
- luckyColor: '黄色、灰色',
- luckyNumber: '2、5、8',
- compatibility: {
- best: ['虎', '兔', '羊'],
- good: ['鼠', '龙', '鸡'],
- avoid: ['蛇', '猴', '猪']
- }
- }
- }
- /**
- * 根据公历年份计算生肖
- * @param {Number} year - 公历年份
- * @returns {String} 生肖名称
- */
- export function getZodiacByYear(year) {
- // 1900年是鼠年,以此为基准计算
- const baseYear = 1900
- const index = (year - baseYear) % 12
- return ZODIACS[index]
- }
- /**
- * 根据生日计算生肖
- * 注意:这里简化处理,实际应该考虑农历新年
- * @param {String} birthday - 生日,格式:YYYY-MM-DD
- * @returns {String} 生肖名称
- */
- export function getZodiacByBirthday(birthday) {
- const year = parseInt(birthday.split('-')[0])
- const month = parseInt(birthday.split('-')[1])
-
- // 简化处理:2月4日前算上一年的生肖
- let zodiacYear = year
- if (month === 1 || (month === 2 && parseInt(birthday.split('-')[2]) < 4)) {
- zodiacYear = year - 1
- }
-
- return getZodiacByYear(zodiacYear)
- }
- /**
- * 获取生肖emoji
- * @param {String} zodiac - 生肖名称
- * @returns {String} emoji
- */
- export function getZodiacEmoji(zodiac) {
- return ZODIAC_EMOJIS[zodiac] || '🐷'
- }
- /**
- * 获取生肖详细信息
- * @param {String} zodiac - 生肖名称
- * @returns {Object} 生肖详细信息
- */
- export function getZodiacInfo(zodiac) {
- return ZODIAC_TRAITS[zodiac] || ZODIAC_TRAITS['猪']
- }
- /**
- * 计算两个生肖的配对指数
- * @param {String} zodiac1 - 生肖1
- * @param {String} zodiac2 - 生肖2
- * @returns {Object} 配对结果 {level: 'best'|'good'|'normal'|'avoid', score: 85}
- *
- * 注意:基于传统生肖配对理论,仅供参考
- */
- export function getZodiacCompatibility(zodiac1, zodiac2) {
- const info = ZODIAC_TRAITS[zodiac1]
- if (!info) return {
- level: 'normal',
- score: 65,
- desc: '需要了解更多信息',
- disclaimer: '仅供参考,真正的契合需要双方共同努力'
- }
-
- if (info.compatibility.best.includes(zodiac2)) {
- return {
- level: 'best',
- score: Math.floor(Math.random() * 8) + 85, // 85-92(避免100%)
- desc: '根据传统理论,相处较为融洽',
- disclaimer: '配对仅供参考,感情需要经营'
- }
- } else if (info.compatibility.good.includes(zodiac2)) {
- return {
- level: 'good',
- score: Math.floor(Math.random() * 12) + 70, // 70-81
- desc: '互相欣赏,可以和谐相处',
- disclaimer: '配对仅供参考,感情需要经营'
- }
- } else if (info.compatibility.avoid.includes(zodiac2)) {
- return {
- level: 'avoid',
- score: Math.floor(Math.random() * 15) + 50, // 50-64
- desc: '可能需要更多磨合和包容',
- disclaimer: '配对仅供参考,感情需要经营'
- }
- } else {
- return {
- level: 'normal',
- score: Math.floor(Math.random() * 10) + 60, // 60-69
- desc: '各有特色,需要互相理解',
- disclaimer: '配对仅供参考,感情需要经营'
- }
- }
- }
- /**
- * 获取今日运势
- * @param {String} zodiac - 生肖名称
- * @returns {Object} 今日运势
- *
- * 注意:当前版本为示例数据,建议接入专业API或建立专家数据库
- * 推荐API:聚合数据、天行数据、阿凡提数据
- */
- export function getTodayFortune(zodiac) {
- // ⚠️ 警告:当前为模拟数据,仅供演示
- // TODO: 接入专业API或后端数据库
-
- const fortunes = ['较好', '平稳', '一般']
- const randomIndex = Math.floor(Math.random() * fortunes.length)
-
- // 生成相对保守的分数(避免极端值)
- const generateScore = () => Math.floor(Math.random() * 20) + 70 // 70-89
-
- const yiList = ['保持微笑', '积极社交', '主动沟通', '关心他人']
- const jiList = ['过度焦虑', '冲动决定', '熬夜晚睡', '情绪化']
-
- return {
- overall: fortunes[randomIndex],
- love: generateScore(),
- career: generateScore(),
- wealth: generateScore(),
- health: generateScore(),
- tips: `根据传统理论建议:${yiList[Math.floor(Math.random() * yiList.length)]},避免${jiList[Math.floor(Math.random() * jiList.length)]}(仅供参考)`,
- source: 'local_demo', // 标记数据来源
- disclaimer: '此数据为示例,建议接入专业API'
- }
- }
- export default {
- getZodiacByYear,
- getZodiacByBirthday,
- getZodiacEmoji,
- getZodiacInfo,
- getZodiacCompatibility,
- getTodayFortune,
- ZODIACS,
- ZODIAC_EMOJIS
- }
|