|
@@ -1,4 +1,7 @@
|
|
|
-import { Component, OnInit } from '@angular/core';
|
|
|
+import { Component, OnInit, OnDestroy } from '@angular/core';
|
|
|
+import { AlertController, NavController } from '@ionic/angular';
|
|
|
+import { Router } from '@angular/router';
|
|
|
+import * as Parse from 'parse';
|
|
|
|
|
|
@Component({
|
|
|
selector: 'app-home',
|
|
@@ -6,10 +9,203 @@ import { Component, OnInit } from '@angular/core';
|
|
|
styleUrls: ['./home.page.scss'],
|
|
|
})
|
|
|
export class HomePage implements OnInit {
|
|
|
+ initial: number = 0;
|
|
|
+ current: number = 0;
|
|
|
+ target: number = 0;
|
|
|
+ reward: number = 0;
|
|
|
+ username: string = ''; // 当前用户的用户名
|
|
|
+ blueColor: boolean = false;
|
|
|
+
|
|
|
+ constructor(
|
|
|
+ private alertController: AlertController,
|
|
|
+ private router: Router,
|
|
|
+ private navCtrl: NavController,
|
|
|
+ ) {}
|
|
|
|
|
|
- constructor() { }
|
|
|
+ ngOnInit() {}
|
|
|
|
|
|
- ngOnInit() {
|
|
|
+ ionViewDidEnter() {
|
|
|
+ this.loadUserData();
|
|
|
}
|
|
|
|
|
|
+ ngOnDestroy() {}
|
|
|
+
|
|
|
+ async loadUserData() {
|
|
|
+ const currentUser = Parse.User.current();
|
|
|
+ if (currentUser) {
|
|
|
+ this.username = currentUser.getUsername()!;
|
|
|
+ this.loadData();
|
|
|
+ } else {
|
|
|
+ this.username = '未登录';
|
|
|
+ this.loadData();
|
|
|
+ }
|
|
|
+ console.log("tab1:" + this.username);
|
|
|
+ }
|
|
|
+
|
|
|
+ async loadData() {
|
|
|
+ try {
|
|
|
+ const query = new Parse.Query('weight_status');
|
|
|
+ query.equalTo('username', this.username); // 查找当前用户的数据
|
|
|
+ const weightStatus = await query.first();
|
|
|
+ if (weightStatus) {
|
|
|
+ this.initial = weightStatus.get('initial') || 0;
|
|
|
+ this.current = weightStatus.get('current') || 0;
|
|
|
+ this.target = weightStatus.get('target') || 0;
|
|
|
+ this.reward = this.calculateReward(this.initial, this.target);
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error loading data', error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ calculateReward(initial: number, target: number): number {
|
|
|
+ return (initial - target) * 10;
|
|
|
+ }
|
|
|
+
|
|
|
+ async openEditModal() {
|
|
|
+ if (this.username == '未登录') {
|
|
|
+ // 如果用户未登录,则显示登录提示
|
|
|
+ this.presentLoginAlert();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const alert = await this.alertController.create({
|
|
|
+ header: '编辑体重信息',
|
|
|
+ subHeader: '请根据您的需求编辑以下信息',
|
|
|
+ inputs: [
|
|
|
+ {
|
|
|
+ name: 'initial',
|
|
|
+ type: 'number',
|
|
|
+ placeholder: '初始',
|
|
|
+ value: this.initial.toString()
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'current',
|
|
|
+ type: 'number',
|
|
|
+ placeholder: '当前',
|
|
|
+ value: this.current.toString()
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'target',
|
|
|
+ type: 'number',
|
|
|
+ placeholder: '目标',
|
|
|
+ value: this.target.toString()
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: 'reward',
|
|
|
+ type: 'number',
|
|
|
+ placeholder: '赏金',
|
|
|
+ value: this.reward.toString(),
|
|
|
+ disabled: true // 禁用输入框,显示但不能编辑
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ buttons: [
|
|
|
+ {
|
|
|
+ text: '取消',
|
|
|
+ role: 'cancel'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: '保存',
|
|
|
+ handler: async (data) => {
|
|
|
+ try {
|
|
|
+ const query = new Parse.Query('weight_status');
|
|
|
+ query.equalTo('username', this.username); // 查找当前用户的数据
|
|
|
+ let weightStatus = await query.first();
|
|
|
+ if (!weightStatus) {
|
|
|
+ weightStatus = new Parse.Object('weight_status');
|
|
|
+ }
|
|
|
+ const rewardValue = this.calculateReward(Number(data.initial), Number(data.target));
|
|
|
+ weightStatus.set('username', this.username);
|
|
|
+ weightStatus.set('initial', Number(data.initial));
|
|
|
+ weightStatus.set('current', Number(data.current));
|
|
|
+ weightStatus.set('target', Number(data.target));
|
|
|
+ weightStatus.set('reward', rewardValue);
|
|
|
+ await weightStatus.save();
|
|
|
+ this.loadData(); // 更新本地数据
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error updating data', error);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+
|
|
|
+ await alert.present();
|
|
|
+ }
|
|
|
+
|
|
|
+ async presentLoginAlert() {
|
|
|
+ const alert = await this.alertController.create({
|
|
|
+ header: '未登录',
|
|
|
+ message: '请先登录以继续操作',
|
|
|
+ buttons: [
|
|
|
+ {
|
|
|
+ text: '取消',
|
|
|
+ role: 'cancel'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: '去登录',
|
|
|
+ handler: () => {
|
|
|
+ this.navCtrl.navigateForward('/user/login');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+
|
|
|
+ await alert.present();
|
|
|
+ }
|
|
|
+
|
|
|
+ toggleButtonColor(habit: string) {
|
|
|
+ this.blueColor = !this.blueColor;
|
|
|
+ }
|
|
|
+
|
|
|
+ //每日习惯按钮颜色变化
|
|
|
+ buttons = [
|
|
|
+ { text: '足量饮水', color: 'light', icon: 'water' },
|
|
|
+ { text: '干净饮食', color: 'light', icon: 'nutrition' },
|
|
|
+ { text: '健康作息', color: 'light', icon: 'bed' },
|
|
|
+ { text: '有氧', color: 'light', icon: 'bicycle' },
|
|
|
+ { text: '力量', color: 'light', icon: 'barbell' },
|
|
|
+ { text: '拉伸', color: 'light', icon: 'body' }
|
|
|
+ ];
|
|
|
+
|
|
|
+ habitText = '今日习惯待保持';
|
|
|
+
|
|
|
+ onButtonClick(index: number) {
|
|
|
+ const button = this.buttons[index];
|
|
|
+ switch(button.color) {
|
|
|
+ case 'light':
|
|
|
+ button.color = 'success';
|
|
|
+ break;
|
|
|
+ case 'success':
|
|
|
+ button.color = 'danger';
|
|
|
+ break;
|
|
|
+ case 'danger':
|
|
|
+ button.color = 'light';
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.checkHabitText();
|
|
|
+ }
|
|
|
+
|
|
|
+ checkHabitText() {
|
|
|
+ if (this.buttons.every(btn => btn.color === 'success')) {
|
|
|
+ this.habitText = '你成功保持了良好的习惯';
|
|
|
+ } else if (this.buttons.some(btn => btn.color === 'danger')) {
|
|
|
+ this.habitText = '今日好习惯保持失败,再接再厉';
|
|
|
+ } else {
|
|
|
+ this.habitText = '今日习惯待保持';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ get allButtonsSuccess() {
|
|
|
+ return this.buttons.every(btn => btn.color === 'success');
|
|
|
+ }
|
|
|
+
|
|
|
+ get anyButtonFailure() {
|
|
|
+ return this.buttons.some(btn => btn.color === 'danger');
|
|
|
+ }
|
|
|
+
|
|
|
+ navigateToTreePage() {
|
|
|
+ this.router.navigate(['/tabs/timer']);
|
|
|
+ }
|
|
|
}
|