training.js
1.59 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
import { defineStore } from 'pinia';
import { ref, toRefs } from 'vue';
import { cloneDeep } from 'lodash-es';
// 默认训练状态
const defaultTraining = {
isTraining: false, // 是否正在训练
isMinimized: false, // 是否最小化
exerciseId: null, // 训练的动作ID
unitType: null, // 类型
totalSeconds: 0, // 计时秒数
isTiming: false, // 是否正在计时
setsList: [], // 训练组数据
trainName: '', // 训练名称
};
// 训练状态管理(专门用于最小化、悬浮球、后台运行)
const useTrainingStore = defineStore(
'training',
() => {
// 训练状态
const trainingInfo = ref(cloneDeep(defaultTraining));
// 开始训练 / 保存训练数据
const startTraining = (data) => {
trainingInfo.value = {
...trainingInfo.value,
...data,
isTraining: true,
};
};
// 最小化训练
const minimize = () => {
trainingInfo.value.isMinimized = true;
};
// 恢复训练
const restore = () => {
trainingInfo.value.isMinimized = false;
};
// 结束训练(清空数据)
const finishTraining = () => {
trainingInfo.value = cloneDeep(defaultTraining);
};
// 暴露出去
return {
...toRefs({ trainingInfo }),
startTraining,
minimize,
restore,
finishTraining,
};
},
{
// 持久化:关闭APP再进来,训练还在!
persist: {
enabled: true,
strategies: [{ key: 'training-store' }],
},
},
);
export default useTrainingStore;