wode-changjian-wenti.vue
9.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
<template>
<view class="faq-page">
<!-- FAQ 列表 -->
<view class="faq-container">
<view v-for="category in faqCategories" :key="category.id" class="category-block">
<!-- 分类标题 -->
<view class="category-header">
<text class="category-dot"></text>
<text class="category-title">{{ category.title }}</text>
</view>
<!-- 问题列表 -->
<view class="faq-list">
<view
v-for="(item, index) in category.items"
:key="item.id"
class="faq-item"
:class="{ 'faq-item-last': index === category.items.length - 1 }"
>
<view class="faq-question" @click="toggleItem(category.id, item.id)">
<text class="question-text">{{ item.question }}</text>
<text class="arrow-icon" :class="{ expanded: isExpanded(category.id, item.id) }">▼</text>
</view>
<view class="faq-answer" :class="{ show: isExpanded(category.id, item.id) }">
<view class="answer-divider"></view>
<text class="answer-text">{{ item.answer }}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
expandedItems: {},
faqCategories: [
{
id: 1,
title: '训练相关',
items: [
{
id: 11,
question: '新手应该怎么制定训练计划?',
answer: '建议从每周3-4次训练开始,每次45-60分钟。前两周以熟悉动作为主,选择较轻的重量,每个动作做3组,每组12-15次。优先选择复合动作(如深蹲、卧推、硬拉),逐步建立动作模式后再提升强度。'
},
{
id: 12,
question: '一周训练几次比较合适?',
answer: '初学者建议每周3-4次,中级训练者每周4-5次,高级训练者每周5-6次。关键是保证训练质量而非数量,确保每组有足够的恢复时间。建议采用"练一休一"或"练二休一"的节奏。'
},
{
id: 13,
question: '每组应该做几个,做几组?',
answer: '增肌目标:每组8-12次,每个动作3-4组;力量增长:每组3-6次,每个动作4-5组;耐力训练:每组15-20次,每个动作2-3组。组间休息时间:增肌60-90秒,力量训练2-3分钟。'
},
{
id: 14,
question: '有氧运动和力量训练怎么安排?',
answer: '如果目标是增肌,建议力量训练后进行20-30分钟低强度有氧,或将有氧安排在休息日。如果目标是减脂,可以在力量训练后做30-45分钟中等强度有氧。不建议在力量训练前做长时间有氧,以免影响训练表现。'
},
{
id: 15,
question: '训练后肌肉酸痛怎么办?',
answer: '延迟性肌肉酸痛(DOMS)是正常现象,通常在训练后24-72小时内出现。可以通过充分拉伸、轻度活动、热敷、充足睡眠和补充蛋白质来缓解。如果疼痛异常剧烈或持续时间超过5天,建议就医检查。'
}
]
},
{
id: 2,
title: '饮食营养',
items: [
{
id: 21,
question: '健身期间应该怎么吃?',
answer: '遵循"高蛋白、适量碳水、低脂肪"原则。每餐应有优质蛋白(鸡胸肉、鱼、蛋、豆制品),搭配复合碳水(糙米、红薯、全麦面包)和蔬菜。每日蛋白质摄入建议为体重(kg)x 1.6-2.2克。'
},
{
id: 22,
question: '要不要喝蛋白粉?',
answer: '蛋白粉是方便的蛋白质补充方式,但不是必需品。优先通过食物摄取蛋白质,如果日常饮食难以满足蛋白质需求(尤其是训练后30分钟内),可以使用蛋白粉作为补充。建议选择乳清蛋白或植物蛋白粉。'
},
{
id: 23,
question: '训练前需要吃东西吗?',
answer: '建议训练前1-2小时摄入一顿含碳水和蛋白质的轻餐,例如:全麦面包+鸡蛋、香蕉+酸奶。训练前30分钟可以补充一根香蕉或一小把坚果。避免在训练前立即进食大量食物,以免引起胃部不适。'
}
]
},
{
id: 3,
title: '功能使用',
items: [
{
id: 31,
question: '如何添加自定义训练动作?',
answer: '进入"动作管理"页面,点击"新增动作",填写动作名称、选择目标肌群、设置动作类型后保存即可。添加后的动作会出现在您的动作库中,可在创建训练模板时选择使用。'
},
{
id: 32,
question: '怎么创建训练模板?',
answer: '进入"我的模板"页面,点击"新建模板",为模板命名后添加训练动作。可以设置每个动作的组数、次数和组间休息时间。创建完成后,每次训练可以直接使用模板,快速开始训练。'
},
{
id: 33,
question: '训练数据会自动保存吗?',
answer: '训练过程中数据会实时暂存,完成训练后请点击"结束训练"按钮以确保数据被完整保存到服务器。如果中途意外退出,系统会尝试恢复未完成的训练记录。'
},
{
id: 34,
question: '如何查看历史训练记录?',
answer: '在首页或训练日历中,可以按日期查看历史训练记录。点击具体日期可查看当天的训练详情,包括完成的动作、组数、重量和训练时长等信息。'
}
]
},
{
id: 4,
title: '其他问题',
items: [
{
id: 41,
question: '训练多久能看到效果?',
answer: '每个人情况不同,一般在坚持规律训练和合理饮食的前提下:4-6周开始感觉力量提升,8-12周可以看到体型变化,3-6个月出现较为明显的变化。请保持耐心,健身是一场长期旅程。'
},
{
id: 42,
question: '经期/生病期间可以训练吗?',
answer: '经期可以进行低强度训练(如散步、瑜伽),但应避免高强度力量训练和高冲击动作。生病期间建议充分休息,待身体完全康复后再逐步恢复训练,尤其是发烧时绝对不要训练。'
},
{
id: 43,
question: '遇到问题如何联系我们?',
answer: '如有任何问题或建议,可通过"我的-意见反馈"提交,或发送邮件至客服邮箱。我们会在1-3个工作日内回复处理,感谢您的支持与理解。'
}
]
}
]
};
},
methods: {
goBack() {
uni.navigateBack();
},
toggleItem(categoryId, itemId) {
const key = `${categoryId}_${itemId}`;
if (this.expandedItems[key]) {
this.$delete(this.expandedItems, key);
} else {
this.$set(this.expandedItems, key, true);
}
},
isExpanded(categoryId, itemId) {
const key = `${categoryId}_${itemId}`;
return !!this.expandedItems[key];
}
}
};
</script>
<style scoped>
.faq-page {
width: 100%;
min-height: 100vh;
background-color: #1a1a1a;
color: #ffffff;
padding-bottom: 40rpx;
}
/* 分类区块 */
.faq-container {
padding: 20rpx;
}
.category-block {
margin-bottom: 30rpx;
}
/* 分类标题 */
.category-header {
display: flex;
align-items: center;
gap: 16rpx;
margin-bottom: 20rpx;
padding-left: 10rpx;
}
.category-dot {
width: 12rpx;
height: 12rpx;
border-radius: 50%;
background-color: #007aff;
flex-shrink: 0;
}
.category-title {
font-size: 32rpx;
font-weight: bold;
color: #ffffff;
}
/* FAQ 列表 */
.faq-list {
background-color: rgba(255, 255, 255, 0.06);
border-radius: 16rpx;
overflow: hidden;
}
.faq-item {
border-bottom: 1rpx solid rgba(255, 255, 255, 0.08);
}
.faq-item-last {
border-bottom: none;
}
/* 问题行 */
.faq-question {
display: flex;
align-items: center;
justify-content: space-between;
padding: 28rpx 24rpx;
cursor: pointer;
}
.question-text {
flex: 1;
font-size: 28rpx;
color: #e0e0e0;
line-height: 1.5;
padding-right: 20rpx;
}
/* 展开/收起箭头 */
.arrow-icon {
font-size: 22rpx;
color: #999;
flex-shrink: 0;
transition: transform 0.3s ease;
}
.arrow-icon.expanded {
transform: rotate(180deg);
color: #007aff;
}
/* 答案区域 */
.faq-answer {
max-height: 0;
overflow: hidden;
transition: max-height 0.35s ease, padding 0.35s ease;
}
.faq-answer.show {
max-height: 1200rpx;
}
.answer-divider {
height: 1rpx;
background-color: rgba(255, 255, 255, 0.06);
margin: 0 24rpx;
}
.answer-text {
display: block;
padding: 24rpx 24rpx 32rpx 24rpx;
font-size: 26rpx;
color: #b0b0b0;
line-height: 1.8;
}
</style>