page-edit.component.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { Component, OnInit } from '@angular/core';
  2. import { ModalController } from '@ionic/angular';
  3. import { IonicModule } from '@ionic/angular';
  4. import { FormsModule } from '@angular/forms';
  5. @Component({
  6. selector: 'app-page-edit',
  7. templateUrl: './page-edit.component.html',
  8. styleUrls: ['./page-edit.component.scss'],
  9. imports: [IonicModule, FormsModule],
  10. standalone: true,
  11. })
  12. export class PageEditComponent implements OnInit {
  13. // 初始化表单字段
  14. name: string = '';
  15. email: string = '';
  16. phone: string = '';
  17. address: string = '';
  18. age: number | null = null;
  19. gender: string = '';
  20. height: number | null = null;
  21. weight: number | null = null;
  22. activityLevel: string = '';
  23. dietPreference: string = '';
  24. dietGroup: string = '';
  25. avatar: string | null = null;
  26. // 正则表达式
  27. emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
  28. phonePattern = /^[0-9]{10,15}$/;
  29. heightPattern = /^[1-9][0-9]{1,2}$/;
  30. weightPattern = /^[1-9][0-9]{1,2}$/;
  31. constructor(private modalCtrl: ModalController) {}
  32. ngOnInit(): void {
  33. this.loadSavedData(); // 加载上次保存的数据
  34. }
  35. // 加载上次保存的数据
  36. loadSavedData() {
  37. const savedData = JSON.parse(localStorage.getItem('userData') || '{}');
  38. if (savedData) {
  39. // 使用本地存储的数据填充表单
  40. this.name = savedData.name || '';
  41. this.email = savedData.email || '';
  42. this.phone = savedData.phone || '';
  43. this.address = savedData.address || '';
  44. this.age = savedData.age || null;
  45. this.gender = savedData.gender || '';
  46. this.height = savedData.height || null;
  47. this.weight = savedData.weight || null;
  48. this.activityLevel = savedData.activityLevel || '';
  49. this.dietPreference = savedData.dietPreference || '';
  50. this.dietGroup = savedData.dietGroup || '';
  51. this.avatar = savedData.avatar || null;
  52. }
  53. }
  54. // 保存数据至本地存储
  55. saveData() {
  56. const userData = {
  57. name: this.name,
  58. email: this.email,
  59. phone: this.phone,
  60. address: this.address,
  61. age: this.age,
  62. gender: this.gender,
  63. height: this.height,
  64. weight: this.weight,
  65. activityLevel: this.activityLevel,
  66. dietPreference: this.dietPreference,
  67. dietGroup: this.dietGroup,
  68. avatar: this.avatar
  69. };
  70. localStorage.setItem('userData', JSON.stringify(userData)); // 将数据保存至本地
  71. }
  72. cancel() {
  73. return this.modalCtrl.dismiss(null, 'cancel');
  74. }
  75. confirm() {
  76. // 验证表单内容是否完整
  77. if (!this.name || !this.email || !this.phone || !this.age || !this.gender || !this.height || !this.weight || !this.dietPreference || !this.dietGroup) {
  78. alert("请确保所有必填项已填写!");
  79. return;
  80. }
  81. // 保存用户输入的数据
  82. this.saveData();
  83. // 返回数据给父组件
  84. const userData = {
  85. name: this.name,
  86. email: this.email,
  87. phone: this.phone,
  88. address: this.address,
  89. age: this.age,
  90. gender: this.gender,
  91. height: this.height,
  92. weight: this.weight,
  93. activityLevel: this.activityLevel,
  94. dietPreference: this.dietPreference,
  95. dietGroup: this.dietGroup,
  96. avatar: this.avatar
  97. };
  98. return this.modalCtrl.dismiss(userData, 'confirm');
  99. }
  100. uploadAvatar() {
  101. const input = document.createElement('input');
  102. input.type = 'file';
  103. input.accept = 'image/*';
  104. input.onchange = (event: any) => {
  105. const file = event.target.files[0];
  106. if (file) {
  107. const reader = new FileReader();
  108. reader.onload = (e: any) => {
  109. this.avatar = e.target.result;
  110. };
  111. reader.readAsDataURL(file);
  112. }
  113. };
  114. input.click();
  115. }
  116. }