From 2b532c0116f0c53ac4373e173e3b32ae8a34c23e Mon Sep 17 00:00:00 2001 From: huanglimeng <627513797@qq.com> Date: Fri, 20 Feb 2026 15:10:23 +0800 Subject: [PATCH] V1.6: Zodiac Share Logic, Back Button Fix, Points UI Polish --- app.js | 54 +- app.json | 11 +- .../spread-container/spread-container.js | 105 + .../spread-container/spread-container.json | 4 + .../spread-container/spread-container.wxml | 82 + .../spread-container/spread-container.wxss | 165 + pages/home/home.js | 149 +- pages/home/home.wxml | 72 +- pages/home/home.wxss | 245 +- pages/index/index.js | 326 +- pages/index/index.json | 4 +- pages/index/index.wxml | 96 +- pages/index/index.wxss | 3089 +++++++++-------- pages/knowledge/article.js | 4 + pages/knowledge/article.wxml | 4 + pages/knowledge/article.wxss | 27 +- pages/knowledge/index.js | 7 + pages/knowledge/index.wxml | 4 + pages/knowledge/index.wxss | 27 +- pages/knowledge/list.js | 4 + pages/knowledge/list.wxml | 4 + pages/knowledge/list.wxss | 27 +- pages/mine/mine.js | 6 + pages/mine/mine.json | 3 + pages/mine/mine.wxml | 3 + pages/mine/mine.wxss | 1 + pages/privacy-agree/privacy-agree.js | 19 + pages/privacy-agree/privacy-agree.json | 4 + pages/privacy-agree/privacy-agree.wxml | 25 + pages/privacy-agree/privacy-agree.wxss | 85 + pages/privacy/privacy.wxml | 127 +- pages/privacy/privacy.wxss | 4 + pages/settings/settings.js | 55 + pages/settings/settings.json | 6 + pages/settings/settings.wxml | 39 + pages/settings/settings.wxss | 35 + pages/user-agreement/user-agreement.js | 8 + pages/user-agreement/user-agreement.json | 3 + pages/user-agreement/user-agreement.wxml | 156 + pages/user-agreement/user-agreement.wxss | 112 + pages/zodiac/index.js | 411 +-- pages/zodiac/index.wxml | 158 +- pages/zodiac/index.wxss | 355 +- styles/disclaimer.wxss | 14 + update_index_function.js | 61 + update_spreads.js | 55 + utils/aiRequestManager.js | 30 +- utils/pointsManager.js | 61 + utils/zodiacAI.js | 244 ++ utils/zodiacData.js | 322 ++ 50 files changed, 4732 insertions(+), 2180 deletions(-) create mode 100644 components/spread-container/spread-container.js create mode 100644 components/spread-container/spread-container.json create mode 100644 components/spread-container/spread-container.wxml create mode 100644 components/spread-container/spread-container.wxss create mode 100644 pages/mine/mine.js create mode 100644 pages/mine/mine.json create mode 100644 pages/mine/mine.wxml create mode 100644 pages/mine/mine.wxss create mode 100644 pages/privacy-agree/privacy-agree.js create mode 100644 pages/privacy-agree/privacy-agree.json create mode 100644 pages/privacy-agree/privacy-agree.wxml create mode 100644 pages/privacy-agree/privacy-agree.wxss create mode 100644 pages/settings/settings.js create mode 100644 pages/settings/settings.json create mode 100644 pages/settings/settings.wxml create mode 100644 pages/settings/settings.wxss create mode 100644 pages/user-agreement/user-agreement.js create mode 100644 pages/user-agreement/user-agreement.json create mode 100644 pages/user-agreement/user-agreement.wxml create mode 100644 pages/user-agreement/user-agreement.wxss create mode 100644 styles/disclaimer.wxss create mode 100644 update_index_function.js create mode 100644 update_spreads.js create mode 100644 utils/zodiacAI.js create mode 100644 utils/zodiacData.js diff --git a/app.js b/app.js index f21b53a..8454e2a 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,53 @@ App({ - onLaunch() { - console.log('小程序启动啦!') + + onShow: function (options) { + + // 检查是否从分享卡片进入 (场景值 1007, 1008) + if (options && (options.scene === 1007 || options.scene === 1008)) { + + console.log('[App] 用户通过分享卡片进入'); + + // 获取来源用户ID(保留结构,暂不使用) + const fromUserId = options.query && options.query.fromUserId; + if (fromUserId) { + console.log('[App] 来源用户ID:', fromUserId); + } + + // 只做欢迎提示,不发积分 + wx.showToast({ + title: '欢迎进入今日命运场 ✨', + icon: 'none', + duration: 2000 + }); + } + }, + + onLaunch: function () { + + console.log('小程序启动啦!'); + + // 检查隐私协议同意状态 + const agreed = wx.getStorageSync('privacyAgreed'); + + if (!agreed) { + + wx.onAppRoute((res) => { + + const isAgreed = wx.getStorageSync('privacyAgreed'); + if (isAgreed) return; + + if (res.path !== 'pages/privacy-agree/privacy-agree' && + res.path !== 'pages/privacy/privacy') { + + wx.reLaunch({ + url: '/pages/privacy-agree/privacy-agree' + }); + } + }); + + wx.reLaunch({ + url: '/pages/privacy-agree/privacy-agree' + }); + } } -}) \ No newline at end of file +}); \ No newline at end of file diff --git a/app.json b/app.json index dd75728..1ab5300 100644 --- a/app.json +++ b/app.json @@ -1,15 +1,22 @@ { "pages": [ "pages/home/home", + "pages/zodiac/index", "pages/index/index", "pages/knowledge/index", "pages/knowledge/list", "pages/knowledge/article", "pages/webview/index", - "pages/privacy/privacy" + "pages/privacy/privacy", + "pages/privacy-agree/privacy-agree", + "pages/settings/settings", + "pages/user-agreement/user-agreement" ], "window": { - "navigationBarTitleText": "我的第一个小程序" + "navigationBarTitleText": "塔罗星语", + "navigationBarBackgroundColor": "#1a1a2e", + "navigationBarTextStyle": "white", + "backgroundColor": "#1a1a2e" }, "style": "v2", "sitemapLocation": "sitemap.json" diff --git a/components/spread-container/spread-container.js b/components/spread-container/spread-container.js new file mode 100644 index 0000000..8942c76 --- /dev/null +++ b/components/spread-container/spread-container.js @@ -0,0 +1,105 @@ +Component({ + properties: { + spread: { type: Object, value: null }, + cards: { type: Array, value: [] }, + revealedCount: { type: Number, value: 0 }, + cardWidth: { type: Number, value: 160 } // 安全默认值 160 + }, + + data: { + displayList: [] // 统一渲染列表 (merged with layout info) + }, + + lifetimes: { + attached() { + this.updateLayout(); + } + }, + + observers: { + 'spread, cards, cardWidth': function (spread, cards, cardWidth) { + this.updateLayout(); + } + }, + + methods: { + updateLayout() { + const { spread, cards, cardWidth } = this.data; + if (!spread || !spread.layout || !cards || cards.length === 0) return; + + const layoutType = spread.layout.type; + + // 1. Grid 处理 (简单网格布局,不涉及复杂计算) + if (layoutType === 'grid') { + const list = cards.map((c, i) => ({ + ...c, + _posName: spread.positions[i], + _seq: i + 1, + _index: i, + _style: '' // 无内联样式,交给 grid CSS + })); + this.setData({ displayList: list }); + return; + } + + // 2. Celtic Cross (静止百分比布局 - 600x900rpx 容器适配) + if (layoutType === 'celtic') { + // 容器: 600rpx x 900rpx + // 卡牌: 140rpx x 210rpx + // 安全水平间距: 140/600 = 23.3% -> 中心间距需 > 23.3% + // 安全垂直间距: 210/900 = 23.3% -> 中心间距需 > 23.3% + + // 中轴 X: 38% (228rpx) - 左移给右侧列留空间 + // 左牌 X: 38% - 25% = 13% (78rpx) - 安全 + // 右牌 X: 38% + 25% = 63% (378rpx) - 安全 + // 右侧列 X: 85% (510rpx) - 离右牌 22% = 132rpx > 140rpx 略挤,调整到 87% + + const positions = [ + { left: 38, top: 47 }, // 1 现状 + { left: 38, top: 47, rotate: 'rotate(90deg)' }, // 2 阻碍 (重叠) + { left: 38, top: 73 }, // 3 根基 (47+26=73) + { left: 13, top: 47 }, // 4 过去 + { left: 38, top: 21 }, // 5 可能性 (47-26=21) + { left: 63, top: 47 }, // 6 近期未来 + + // 右侧列 X: 87%, 纵向间距 ~22% of 900 = 198rpx > 210rpx 略挤 + // 调整为 4 张牌均匀分布在 10%-90% 之间 + // 间距: (90-10)/3 = 26.7% = 240rpx > 210rpx ✓ + { left: 87, top: 15 }, // 7 你的态度 + { left: 87, top: 38 }, // 8 外部影响 (15+23=38) + { left: 87, top: 61 }, // 9 希望与恐惧 (38+23=61) + { left: 87, top: 84 }, // 10 最终结果 (61+23=84) + ]; + + // Merge Layout + Card Data + const list = cards.map((c, i) => { + const pos = positions[i] || {}; + // 直接生成内联样式,移除所有动态计算 + const style = `left: ${pos.left}%; top: ${pos.top}%; transform: translate(-50%, -50%) ${pos.rotate || ''};`; + + return { + ...c, + _posName: spread.positions[i], + _seq: i + 1, + _index: i, + _style: style + }; + }); + + this.setData({ displayList: list }); + } + }, + + // 移除多余的 calcCelticLayout 方法,直接在 updateLayout 中处理 + handleCardTap(e) { + const idx = e.currentTarget.dataset.index; + if (idx === undefined) return; + + if (idx === this.data.revealedCount) { + this.triggerEvent('reveal', { index: idx }); + } else if (idx < this.data.revealedCount) { + this.triggerEvent('viewDetail', { index: idx }); + } + } + } +}); diff --git a/components/spread-container/spread-container.json b/components/spread-container/spread-container.json new file mode 100644 index 0000000..7e37c03 --- /dev/null +++ b/components/spread-container/spread-container.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/spread-container/spread-container.wxml b/components/spread-container/spread-container.wxml new file mode 100644 index 0000000..693c9ac --- /dev/null +++ b/components/spread-container/spread-container.wxml @@ -0,0 +1,82 @@ + + + + + + + + + + + +