page-collections.page.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import { Component, OnInit } from '@angular/core';
  2. import {
  3. IonBackButton, IonButtons, IonContent, IonHeader, IonIcon, IonItem,
  4. IonItemOption, IonItemOptions, IonItemSliding, IonLabel, IonList,
  5. IonThumbnail, IonTitle, IonToolbar, IonButton
  6. } from '@ionic/angular/standalone';
  7. import { addIcons } from 'ionicons';
  8. import { heart, heartOutline, trash, timeOutline, refresh } from 'ionicons/icons';
  9. import { CloudObject, CloudQuery } from 'src/lib/ncloud';
  10. import { NavController } from '@ionic/angular';
  11. import { Router } from '@angular/router';
  12. /**
  13. * 收藏项接口定义
  14. * @interface CollectionItem
  15. * @description 定义收藏项的数据结构
  16. */
  17. interface CollectionItem {
  18. /** 收藏项ID */
  19. id: number;
  20. /** 收藏项名称 */
  21. name: string;
  22. /** 收藏项图片URL */
  23. image: string;
  24. /** 收藏时间(可选) */
  25. time?: Date;
  26. }
  27. /**
  28. * 收藏列表页面组件
  29. * @Component 装饰器定义组件元数据
  30. * @description 显示和管理用户收藏的食谱列表
  31. */
  32. @Component({
  33. selector: 'app-page-collections',
  34. templateUrl: './page-collections.page.html',
  35. styleUrls: ['./page-collections.page.scss'],
  36. standalone: false
  37. })
  38. export class PageCollectionsPage implements OnInit {
  39. /**
  40. * 收藏列表数据
  41. * @type {CollectionItem[]}
  42. */
  43. collections: CollectionItem[] = [];
  44. /**
  45. * 构造函数
  46. * @param {NavController} navCtrl Ionic导航控制器
  47. * @param {Router} router Angular路由服务
  48. *
  49. * @description
  50. * 初始化时添加所需图标
  51. */
  52. constructor(private navCtrl: NavController, private router: Router) {
  53. addIcons({ heart, heartOutline, trash });
  54. }
  55. /**
  56. * 组件初始化生命周期钩子
  57. * @returns {void}
  58. */
  59. ngOnInit(): void {
  60. this.loadRecipeFavoriteList();
  61. }
  62. /**
  63. * 食谱收藏列表
  64. * @type {CloudObject[]}
  65. */
  66. recipeFavoriteList: CloudObject[] = [];
  67. /**
  68. * 食谱数据列表
  69. * @type {any[]}
  70. */
  71. recipeDataList: any[] = [];
  72. /**
  73. * 加载用户收藏的食谱列表
  74. * @async
  75. * @returns {Promise<void>}
  76. *
  77. * @description
  78. * 从云端查询用户收藏的食谱,并关联查询完整的食谱数据
  79. */
  80. async loadRecipeFavoriteList(): Promise<void> {
  81. const query = new CloudQuery("RecipeFavorite");
  82. query.include("recipe"); // 关联查询Recipe表
  83. const favorites = await query.find();
  84. console.log('favorites', favorites);
  85. this.recipeFavoriteList = favorites.map(fav => fav.get("recipe"));
  86. console.log("Recipe数据列表:", this.recipeFavoriteList);
  87. }
  88. /**
  89. * 移除收藏项
  90. * @param {number} id 要移除的收藏项ID
  91. * @returns {void}
  92. *
  93. * @description
  94. * 从收藏列表中过滤掉指定ID的项
  95. */
  96. removeCollection(id: number): void {
  97. this.collections = this.collections.filter(item => item.id !== id);
  98. }
  99. /**
  100. * 导航到收藏详情页面
  101. * @param {any} recipeId 食谱ID
  102. * @returns {void}
  103. */
  104. goToDetail(recipeId: any): void {
  105. this.navCtrl.navigateForward(`/tabs/tab3/page-collections/page-collections-detail/${recipeId}`);
  106. console.log('Navigating to page-collections-detail');
  107. }
  108. // 以下是预设数据(已注释)
  109. /**
  110. * @ignore
  111. * 加载模拟收藏数据
  112. * @returns {void}
  113. */
  114. /*
  115. loadCollections(): void {
  116. this.collections = [
  117. {
  118. id: 1,
  119. name: '意大利肉酱面',
  120. image: 'https://images.unsplash.com/photo-1555949258-eb67b1ef0ceb',
  121. time: new Date('2023-05-15')
  122. },
  123. // ...其他模拟数据
  124. ];
  125. }
  126. */
  127. }