核心功能稳定版 v1 - 完成12个主流牌阵,优化卡牌布局和动画

This commit is contained in:
huanglimeng 2026-02-04 20:46:57 +08:00
parent a9b583fd37
commit d9edbf0562
3 changed files with 92 additions and 32 deletions

View File

@ -99,14 +99,6 @@ const SPREADS = [
"description": "聚焦关键问题,找出当下最可行的应对方式。", "description": "聚焦关键问题,找出当下最可行的应对方式。",
"aiSchema": ["core_theme", "current_state", "action_advice"] "aiSchema": ["core_theme", "current_state", "action_advice"]
}, },
{
"id": "five_situation_analysis",
"name": "现状分析",
"cardCount": 5,
"positions": ["现状", "内在因素", "外在影响", "行动方向", "可能结果"],
"description": "从内外层面拆解局势,明确下一步行动。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{ {
"id": "two_choice_decision", "id": "two_choice_decision",
"name": "二选一抉择", "name": "二选一抉择",
@ -115,6 +107,14 @@ const SPREADS = [
"description": "对比两种选择的潜在走向,辅助理性决策。", "description": "对比两种选择的潜在走向,辅助理性决策。",
"aiSchema": ["core_theme", "potential_influence", "action_advice"] "aiSchema": ["core_theme", "potential_influence", "action_advice"]
}, },
{
"id": "five_situation_analysis",
"name": "现状分析",
"cardCount": 5,
"positions": ["现状", "内在因素", "外在影响", "行动方向", "可能结果"],
"description": "从内外层面拆解局势,明确下一步行动。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{ {
"id": "relationship_spread", "id": "relationship_spread",
"name": "关系洞察", "name": "关系洞察",
@ -122,6 +122,54 @@ const SPREADS = [
"positions": ["你的位置", "对方的位置", "关系现状", "隐藏影响", "未来趋势"], "positions": ["你的位置", "对方的位置", "关系现状", "隐藏影响", "未来趋势"],
"description": "理解一段关系中的互动模式与发展方向。", "description": "理解一段关系中的互动模式与发展方向。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"] "aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{
"id": "timeline_spread",
"name": "时间之流",
"cardCount": 5,
"positions": ["远古根源", "过去影响", "当下状态", "近期发展", "未来趋势"],
"description": "追溯事件的时间线,看清发展脉络。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{
"id": "diamond_spread",
"name": "钻石牌阵",
"cardCount": 5,
"positions": ["问题本质", "过去原因", "未来发展", "外部资源", "最佳行动"],
"description": "多角度剖析问题,找到解决之道。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{
"id": "spiritual_guidance",
"name": "灵性指引",
"cardCount": 7,
"positions": ["当前能量", "内在阻碍", "潜在天赋", "灵性课题", "指导建议", "未来机遇", "最高指引"],
"description": "深入探索内在世界,获得灵性层面的启发。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{
"id": "horseshoe_spread",
"name": "马蹄铁牌阵",
"cardCount": 7,
"positions": ["过去", "现在", "未来", "你的态度", "他人影响", "障碍", "最终结果"],
"description": "全面了解情况的来龙去脉与未来走向。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{
"id": "celtic_cross",
"name": "凯尔特十字",
"cardCount": 10,
"positions": ["现状", "挑战", "根基", "过去", "可能性", "近期未来", "你的态度", "外部影响", "希望与恐惧", "最终结果"],
"description": "最经典的综合牌阵,深度解析生命议题。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
},
{
"id": "tree_of_life",
"name": "生命之树",
"cardCount": 10,
"positions": ["王冠", "智慧", "理解", "慈悲", "严厉", "美丽", "胜利", "荣耀", "基础", "王国"],
"description": "基于卡巴拉生命之树的深度灵性探索。",
"aiSchema": ["core_theme", "current_state", "potential_influence", "action_advice"]
} }
]; ];
@ -526,21 +574,8 @@ Page({
// --- 导航优化:统一返回逻辑 --- // --- 导航优化:统一返回逻辑 ---
handleBack: function () { handleBack: function () {
const pages = getCurrentPages();
if (pages.length > 1) {
wx.navigateBack({ wx.navigateBack({
delta: 1 delta: 1
}); });
} else {
// 兜底逻辑:如果是在第一层,则跳转回首页
wx.switchTab({
url: '/pages/home/home'
}).catch(() => {
// 如果不是 tabBar则使用 reLaunch
wx.reLaunch({
url: '/pages/home/home'
});
});
}
} }
}) })

View File

@ -64,10 +64,31 @@
module.exports.getTransform = function(indices, currentIdx, count) { module.exports.getTransform = function(indices, currentIdx, count) {
var pos = indices.indexOf(currentIdx); var pos = indices.indexOf(currentIdx);
if (pos !== -1) { if (pos !== -1) {
var itemWidth = 140 + 20; // 每排最多5张牌
var centerOffset = (pos - (count - 1) / 2) * itemWidth; var maxPerRow = 5;
// 位移到上方槽位 (向上位移以对准 slots-container) var row = Math.floor(pos / maxPerRow); // 第几排0或1
return 'translate(' + centerOffset + 'rpx, -450rpx) rotate(0deg)'; var col = pos % maxPerRow; // 该排的第几个
var cardsInRow = (row === 0) ? Math.min(count, maxPerRow) : (count - maxPerRow);
// 槽位宽100rpx + gap 20rpx = 120rpx 间距
var slotWidth = 100;
var gap = 20;
var slotSpacing = slotWidth + gap;
// 计算该排槽位的水平居中偏移
// 从该排中间位置开始计算
var centerOffset = (col - (cardsInRow - 1) / 2) * slotSpacing;
// 垂直偏移计算
// 第一排槽位:向上 -520rpx已验证接近正确
// 第二排:需要减少向上的距离
// 槽位高度160 + gap 20 = 180但实际可能需要微调
var firstRowY = -520;
var secondRowOffset = 200; // 增加偏移量让第二排更接近fan-deck
var yOffset = firstRowY + (row * secondRowOffset); // row=0: -520, row=1: -320
// 位移并缩小到0.65
return 'translate(' + centerOffset + 'rpx, ' + yOffset + 'rpx) scale(0.65) rotate(0deg)';
} else { } else {
// 保持在牌堆中的放射状 // 保持在牌堆中的放射状
return 'rotate(' + ((currentIdx - 10) * 8) + 'deg)'; return 'rotate(' + ((currentIdx - 10) * 8) + 'deg)';

View File

@ -151,17 +151,21 @@ page {
.slots-container { .slots-container {
display: flex; display: flex;
flex-wrap: wrap; /* 允许换行 */
justify-content: center; justify-content: center;
gap: 20rpx; gap: 20rpx; /* 保持20rpx间距与计算一致 */
height: 240rpx; min-height: 240rpx; /* 改为最小高度 */
max-height: 480rpx; /* 最多两排的高度 */
margin-bottom: 60rpx; margin-bottom: 60rpx;
width: 100%; width: 100%;
padding: 0 30rpx; /* 增加左右padding确保居中 */
} }
.slot-item { .slot-item {
width: 140rpx; width: 100rpx; /* 与WXS计算的宽度一致 */
height: 220rpx; height: 160rpx; /* 与WXS计算的高度一致 */
position: relative; position: relative;
flex-shrink: 0; /* 防止收缩 */
} }
.slot-placeholder { .slot-placeholder {