yf 3 luni în urmă
părinte
comite
5ed29826ce
32 a modificat fișierele cu 1119 adăugiri și 115 ștergeri
  1. BIN
      .DS_Store
  2. 4 1
      dream-app/angular.json
  3. 569 93
      dream-app/package-lock.json
  4. 3 0
      dream-app/package.json
  5. 7 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.html
  6. 10 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.scss
  7. 22 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.spec.ts
  8. 49 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.ts
  9. 3 0
      dream-app/src/app/components/edit-tag/README.md
  10. 7 0
      dream-app/src/app/components/edit-tag/edit-tag.component.html
  11. 0 0
      dream-app/src/app/components/edit-tag/edit-tag.component.scss
  12. 22 0
      dream-app/src/app/components/edit-tag/edit-tag.component.spec.ts
  13. 42 0
      dream-app/src/app/components/edit-tag/edit-tag.component.ts
  14. 36 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.html
  15. 0 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.scss
  16. 22 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.spec.ts
  17. 127 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.ts
  18. 3 0
      dream-app/src/app/page-rxjs/page-rxjs.component.html
  19. 0 0
      dream-app/src/app/page-rxjs/page-rxjs.component.scss
  20. 22 0
      dream-app/src/app/page-rxjs/page-rxjs.component.spec.ts
  21. 19 0
      dream-app/src/app/page-rxjs/page-rxjs.component.ts
  22. 3 0
      dream-app/src/app/page-test/page-test.component.html
  23. 0 0
      dream-app/src/app/page-test/page-test.component.scss
  24. 22 0
      dream-app/src/app/page-test/page-test.component.spec.ts
  25. 15 0
      dream-app/src/app/page-test/page-test.component.ts
  26. 34 1
      dream-app/src/app/tab1/tab1.page.html
  27. 34 16
      dream-app/src/app/tab1/tab1.page.ts
  28. 4 2
      dream-app/src/app/tabs/tabs.page.html
  29. 7 1
      dream-app/src/app/tabs/tabs.page.ts
  30. 10 0
      dream-app/src/app/tabs/tabs.routes.ts
  31. 21 0
      dream-app/src/main.ts
  32. 2 1
      dream-app/tsconfig.json

BIN
.DS_Store


+ 4 - 1
dream-app/angular.json

@@ -126,7 +126,10 @@
     }
   },
   "cli": {
-    "schematicCollections": ["@ionic/angular-toolkit"]
+    "schematicCollections": [
+      "@ionic/angular-toolkit"
+    ],
+    "analytics": "726acedd-3712-45f1-8f30-4aebe82eca64"
   },
   "schematics": {
     "@ionic/angular-toolkit:component": {

Fișier diff suprimat deoarece este prea mare
+ 569 - 93
dream-app/package-lock.json


+ 3 - 0
dream-app/package.json

@@ -27,7 +27,10 @@
     "@capacitor/keyboard": "6.0.3",
     "@capacitor/status-bar": "6.0.2",
     "@ionic/angular": "^8.0.0",
+    "@types/parse": "^3.0.9",
+    "fmode-ng": "^0.0.62",
     "ionicons": "^7.2.1",
+    "parse": "^5.3.0",
     "rxjs": "~7.8.0",
     "tslib": "^2.3.0",
     "zone.js": "~0.14.2"

+ 7 - 0
dream-app/src/app/components/edit-rating-star/edit-rating-star.component.html

@@ -0,0 +1,7 @@
+<div class="star-list">
+  <ion-icon
+    *ngFor="let star of starList; let i = index"
+    [name]="star"
+    (click)="rate(i + 1)"
+  ></ion-icon>
+</div>

+ 10 - 0
dream-app/src/app/components/edit-rating-star/edit-rating-star.component.scss

@@ -0,0 +1,10 @@
+.star-list {
+  display: flex;
+  gap: 5px;
+  align-items: center;
+}
+
+ion-icon {
+  font-size: 24px;
+  cursor: pointer;
+}

+ 22 - 0
dream-app/src/app/components/edit-rating-star/edit-rating-star.component.spec.ts

@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+
+import { EditRatingStarComponent } from './edit-rating-star.component';
+
+describe('EditRatingStarComponent', () => {
+  let component: EditRatingStarComponent;
+  let fixture: ComponentFixture<EditRatingStarComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      imports: [EditRatingStarComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(EditRatingStarComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 49 - 0
dream-app/src/app/components/edit-rating-star/edit-rating-star.component.ts

@@ -0,0 +1,49 @@
+import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
+import { IonicModule } from '@ionic/angular';
+import { CommonModule } from '@angular/common';
+import{ addIcons } from 'ionicons';
+import{ star } from 'ionicons/icons';
+import{ starOutline } from 'ionicons/icons';
+addIcons ({star,starOutline})
+
+@Component({
+  selector: 'app-edit-rating-star',
+  templateUrl: './edit-rating-star.component.html',
+  styleUrls: ['./edit-rating-star.component.scss'],
+  standalone: true,
+  imports: [IonicModule, CommonModule],
+})
+export class EditRatingStarComponent implements OnInit, OnChanges {
+  @Input() score: number = 0;
+  @Input() scoreMax: number = 5;
+  @Output() onScoreChange: EventEmitter<number> = new EventEmitter<number>();
+
+  starList: string[] = [];
+
+  ngOnInit(): void {
+    this.updateStarList();
+  }
+
+  ngOnChanges(changes: SimpleChanges): void {
+    if (changes['score']) {
+      this.updateStarList();
+    }
+  }
+
+  private updateStarList(): void {
+    // 确保分值合法
+    if (this.score < 0) this.score = 0;
+    if (this.score > this.scoreMax) this.score = this.scoreMax;
+
+    // 根据分值生成星星图标名称
+    this.starList = Array.from({ length: this.scoreMax }, (_, i) =>
+      i < this.score ? 'star' : 'star-outline'
+    );
+  }
+
+  rate(newScore: number): void {
+    this.score = newScore;
+    this.updateStarList();
+    this.onScoreChange.emit(this.score);
+  }
+}

+ 3 - 0
dream-app/src/app/components/edit-tag/README.md

@@ -0,0 +1,3 @@
+# 标签编辑组件
+-上面:输入框和确认按钮
+-下面:字符串数组,每个字符串一个标签

+ 7 - 0
dream-app/src/app/components/edit-tag/edit-tag.component.html

@@ -0,0 +1,7 @@
+<ion-input [value]="userInputText" (ionInput)="userInput($event)" type="text" placeholder="请输入标签"></ion-input>
+<p>当前输入:{{userInputText}}</p>
+<ion-button (click)="addTag()">添加标签</ion-button>
+
+@for(tag of tags;track tag;){
+<<ion-chip>{{tag}}<span (click)="deleteTag(tag)">&nbsp;&nbsp;X</span></ion-chip>
+}

+ 0 - 0
dream-app/src/app/components/edit-tag/edit-tag.component.scss


+ 22 - 0
dream-app/src/app/components/edit-tag/edit-tag.component.spec.ts

@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+
+import { EditTagComponent } from './edit-tag.component';
+
+describe('EditTagComponent', () => {
+  let component: EditTagComponent;
+  let fixture: ComponentFixture<EditTagComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      imports: [EditTagComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(EditTagComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 42 - 0
dream-app/src/app/components/edit-tag/edit-tag.component.ts

@@ -0,0 +1,42 @@
+import { Component, EventEmitter, OnInit, Output } from '@angular/core';
+import { IonButton, IonChip, IonInput } from '@ionic/angular/standalone';
+
+@Component({
+  selector: 'app-edit-tag',
+  templateUrl: './edit-tag.component.html',
+  styleUrls: ['./edit-tag.component.scss'],
+  imports:[
+    IonInput,IonButton,IonChip
+  ],
+  standalone: true,
+})
+export class EditTagComponent  implements OnInit {
+
+// 用户输入
+  userInputText:string = ""
+  userInput(ev:any){
+    console.log(ev)
+    this.userInputText = ev.detail.value
+  }
+
+
+//标签列表
+  tags: Array<string> = []
+  addTag(){
+    this.tags.push(this.userInputText)
+    this.userInputText = ""
+    this.onTagChange.emit(this.tags)
+  }
+  deleteTag(tag:string){
+    let idx = this.tags.findIndex(item=>item==tag) ;
+    this.tags.splice(idx,1);
+  }
+
+  @Output()
+  onTagChange: EventEmitter<Array<string>> = new EventEmitter<Array<string>>()
+
+  constructor() { }
+
+  ngOnInit() {}
+
+}

+ 36 - 0
dream-app/src/app/page-dream-analysis/page-dream-analysis.component.html

@@ -0,0 +1,36 @@
+
+<ion-content>
+
+  <h1>梦境背景</h1>
+  <ion-input [value]="background" (ionInput)="backgroundInput($event)"></ion-input>
+<!-- 文本域:生成提示词 -->
+ <h1>梦境描述</h1>
+<ion-textarea [value]="userPrompt" (ionInput)="promptInput($event)" placeholder="请描述您的梦境" autoGrow="true"></ion-textarea>
+
+<!-- 按钮:执行消息生成函数 -->
+<ion-button (click)="sendMessage()" expand="block">梦境分析</ion-button>
+  
+<!-- 展示:返回消息内容 -->
+<div>{{responseMsg}}</div>
+</ion-content>
+
+
+
+<!-- <ion-list>
+  <ion-item>梦境标签</ion-item>
+  <ion-item>
+    <app-edit-tag (onTagChange)="setTagsValue($event)"></app-edit-tag>
+  </ion-item>
+  <ion-item>
+    <ion-textarea [value]="dreamDesc" (ionInput)="userInput($event)" label="梦境描述" placeholder="具体描述你的感受、场景、人物、物品、事件" [autoGrow]="true"></ion-textarea>
+  </ion-item>
+  <ion-item>
+    <ion-button expand = "block" (click) = "analysisDream()">解析梦境</ion-button>
+  </ion-item>
+</ion-list>
+<div style="font-size: 18px">
+  {{dreamResult}}
+</div> -->
+
+
+

+ 0 - 0
dream-app/src/app/page-dream-analysis/page-dream-analysis.component.scss


+ 22 - 0
dream-app/src/app/page-dream-analysis/page-dream-analysis.component.spec.ts

@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+
+import { PageDreamAnalysisComponent } from './page-dream-analysis.component';
+
+describe('PageDreamAnalysisComponent', () => {
+  let component: PageDreamAnalysisComponent;
+  let fixture: ComponentFixture<PageDreamAnalysisComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      imports: [PageDreamAnalysisComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(PageDreamAnalysisComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 127 - 0
dream-app/src/app/page-dream-analysis/page-dream-analysis.component.ts

@@ -0,0 +1,127 @@
+import { Component, OnInit } from '@angular/core';
+import { IonButton, IonContent, IonHeader, IonInput, IonTextarea, IonTitle, IonToolbar } from '@ionic/angular/standalone';
+/** 引用:从fmode-ng库引用FmodeChatCompletion类 */
+import { FmodeChatCompletion } from 'fmode-ng';
+@Component({
+  selector: 'app-page-dream-analysis',
+  templateUrl: './page-dream-analysis.component.html',
+  styleUrls: ['./page-dream-analysis.component.scss'],
+  standalone: true,
+  imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonButton,
+    IonTextarea,IonInput
+  ],
+})
+export class PageDreamAnalysisComponent  implements OnInit {
+  constructor() {}
+  ngOnInit(): void {
+    
+  }
+    // 用户输入提示词
+    background:string = "梦境背景"
+    backgroundInput(ev:any){
+      this.background = ev.detail.value;
+    }
+  // 用户输入提示词
+   userPrompt:string = "请描述您的梦境内容"
+  promptInput(ev:any){
+    this.userPrompt = ev.detail.value;
+  }
+  // 属性:组件内用于展示消息内容的变量
+  responseMsg:any = ""
+  // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
+  sendMessage() {
+    console.log("创建消息模板");
+  
+    let PromptTemplate = `
+    对于最近发生的${this.background},请你作为一名解梦师,请根据用户对于梦境的描述,给用户一些解释和建议。
+    以下是用户的梦境:${this.userPrompt}
+    `;
+  
+    console.log('PromptTemplate:', PromptTemplate); // 添加日志
+  
+    let completion = new FmodeChatCompletion([
+      { role: "system", content: "你是一名专业的解梦师。" }, // 可选的系统提示
+      { role: "user", content: PromptTemplate }
+    ]);
+  
+    completion.sendCompletion().subscribe((message: any) => {
+      // 打印消息体
+      console.log("AI 回复:", message.content);
+      // 赋值消息内容给组件内属性
+      this.responseMsg = message.content;
+    }, (error: any) => {
+      console.error("发送消息时发生错误:", error);
+      this.responseMsg = "抱歉,分析过程中出现了问题。请稍后再试。";
+    });
+  }
+}
+
+
+// import { Component, OnInit } from '@angular/core';
+// import { EditTagComponent } from '../components/edit-tag/edit-tag.component';
+// import { IonButton, IonItem, IonList, IonTextarea } from '@ionic/angular/standalone';
+// import { FmodeChatCompletion } from 'fmode-ng';
+// @Component({
+//   selector: 'app-page-dream-analysis',
+//   templateUrl: './page-dream-analysis.component.html',
+//   styleUrls: ['./page-dream-analysis.component.scss'],
+//   imports:[
+//     EditTagComponent,
+//     IonList,IonItem,IonTextarea,IonButton
+//   ],
+//   standalone: true,
+// })
+// export class PageDreamAnalysisComponent  implements OnInit {
+
+//   // 梦境关键词
+//   dreamTags: Array<string> = []
+//   setTagsValue(ev:any){
+//     this.dreamTags = ev;
+//   }
+//   // 梦境描述
+//   dreamDesc:string = ""
+//   userInput(ev:any){
+//     this.dreamDesc = ev.detail.value
+//   }
+
+//   //解析梦境
+//   async analysisDream(){
+//     console.log("关键词",this.dreamTags)
+//     console.log("描述",this.dreamDesc)
+//     console.log("开始解析梦境")
+//     let prompt = `您作为一名专业的梦境解析大师,请帮我解析以下梦境。关键词:${this.dreamTags.join(",")},梦境描述:${this.dreamDesc}`
+
+
+//     let TOKEN = `r:e20ef91b23e2c21d45cb50cd5ec1a122`;
+//     localStorage.setItem("token",TOKEN)
+
+//     let messageList:any = [
+//       {
+//         role:"system",content:`${new Date().toLocaleString()}`
+//       },
+//       {
+//         role:"user",content:prompt
+//       }
+//     ]
+
+//     FmodeChatCompletion
+
+//     // 创建并发起一条新的消息补全
+//     let completion = new FmodeChatCompletion(messageList)
+//     // 持续更新事件推送的消息体内容绑定至消息变量
+//     completion.sendCompletion().subscribe((message:any)=>{
+//       this.dreamDesc= message
+//     })
+
+//     setInterval(()=>{
+//       console.log(messageList)
+//       this.dreamDesc = messageList[messageList.length-1]?.content;
+//     },1000)
+//   }
+  
+
+//   constructor() { }
+
+//   ngOnInit() {}
+
+// }

+ 3 - 0
dream-app/src/app/page-rxjs/page-rxjs.component.html

@@ -0,0 +1,3 @@
+<p>
+  page-rxjs works!
+</p>

+ 0 - 0
dream-app/src/app/page-rxjs/page-rxjs.component.scss


+ 22 - 0
dream-app/src/app/page-rxjs/page-rxjs.component.spec.ts

@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+
+import { PageRxjsComponent } from './page-rxjs.component';
+
+describe('PageRxjsComponent', () => {
+  let component: PageRxjsComponent;
+  let fixture: ComponentFixture<PageRxjsComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      imports: [PageRxjsComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(PageRxjsComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 19 - 0
dream-app/src/app/page-rxjs/page-rxjs.component.ts

@@ -0,0 +1,19 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-page-rxjs',
+  templateUrl: './page-rxjs.component.html',
+  styleUrls: ['./page-rxjs.component.scss'],
+  standalone: true,
+})
+export class PageRxjsComponent  implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {}
+
+  testRxjs(){
+    
+  }
+
+}

+ 3 - 0
dream-app/src/app/page-test/page-test.component.html

@@ -0,0 +1,3 @@
+<p>
+  page-test works!
+</p>

+ 0 - 0
dream-app/src/app/page-test/page-test.component.scss


+ 22 - 0
dream-app/src/app/page-test/page-test.component.spec.ts

@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+
+import { PageTestComponent } from './page-test.component';
+
+describe('PageTestComponent', () => {
+  let component: PageTestComponent;
+  let fixture: ComponentFixture<PageTestComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      imports: [PageTestComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(PageTestComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 15 - 0
dream-app/src/app/page-test/page-test.component.ts

@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-page-test',
+  templateUrl: './page-test.component.html',
+  styleUrls: ['./page-test.component.scss'],
+  standalone: true,
+})
+export class PageTestComponent  implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {}
+
+}

+ 34 - 1
dream-app/src/app/tab1/tab1.page.html

@@ -16,7 +16,7 @@
     <div class="function-cards">
       <!-- 梦境分析 -->
       <ion-card
-        (click)="navigateTo('analysis')"
+        (click)="navigateTo('dream/analysis')"
         style="background-image: url('assets/images/dream-analysis-bg.png'); background-size: cover; background-position: center;"
       >
         <ion-card-header>
@@ -43,4 +43,37 @@
       </ion-card>
     </div>
   </div>
+
+<ion-button (click)="goTestPage()">进入测试页</ion-button>
+
+  <!-- 星星评分 -->
+  <h1>星星评分</h1>
+  <div class="dream-list">
+    <!-- 使用 *ngFor 实现梦境循环 -->
+    <div class="dream-item" *ngFor="let dream of recentDreams; trackBy: trackByDream">
+      <h3>{{ dream.title }}</h3>
+      <p>{{ dream.date | date: 'yyyy-MM-dd' }}</p>
+      <ion-icon [name]="getEmotionIcon(dream.emotion)"></ion-icon>
+      <app-edit-rating-star
+        [score]="dream.rating || 0"
+        [scoreMax]="5"
+        (onScoreChange)="updateDreamRating(dream, $event)"
+      ></app-edit-rating-star>
+    </div>
+  </div>
+
+  <!-- 编辑标签 -->
+  <h1>编辑标签</h1>
+  <app-edit-tag (onTagChange)="setTagsValue($event)"></app-edit-tag>
+
+
+
+
+  <!-- 父级页面:从子组件输出事件获取属性 -->
+  <h1>父级页面:从子组件输出事件获取属性</h1>
+  <ul>
+    <li *ngFor="let tag of editTags">
+      {{ tag }}
+    </li>
+  </ul>
 </ion-content>

+ 34 - 16
dream-app/src/app/tab1/tab1.page.ts

@@ -1,60 +1,78 @@
 import { Component } from '@angular/core';
-import { IonicModule } from '@ionic/angular';
-import { CommonModule, DatePipe } from '@angular/common';
 import { Router } from '@angular/router';
+import { EditTagComponent } from '../components/edit-tag/edit-tag.component';
+import { EditRatingStarComponent } from '../components/edit-rating-star/edit-rating-star.component';
+import { IonicModule } from '@ionic/angular';
+import { CommonModule } from '@angular/common';
 
 @Component({
   selector: 'app-tab1',
   templateUrl: './tab1.page.html',
   styleUrls: ['./tab1.page.scss'],
   standalone: true,
-  imports: [IonicModule, CommonModule, DatePipe],
+  imports: [IonicModule, CommonModule, EditTagComponent, EditRatingStarComponent],
 })
 export class Tab1Page {
+  // 存储当前评分的梦境列表
   recentDreams = [
     {
       title: '飞翔的城市',
       date: new Date('2023-10-20'),
       emotion: '愉悦',
+      rating: 4, // 默认评分
     },
     {
       title: '迷失的森林',
       date: new Date('2023-10-18'),
       emotion: '恐惧',
+      rating: 2, // 默认评分
     },
-    // 更多示例梦境
   ];
 
+  // 存储编辑的标签列表
+  editTags: string[] = [];
+
   constructor(private router: Router) {}
+  goTestPage(){
+    this.router.navigate(['/tabs/test']);
+  }
 
-  // 导航到指定页面
-  navigateTo(page: string) {
-    this.router.navigate([`/tabs/${page}`]);
+
+  // 更新梦境评分
+  updateDreamRating(dream: any, newRating: number): void {
+    console.log(`梦境 "${dream.title}" 的评分更新为:`, newRating);
+    dream.rating = newRating;
   }
 
-  // 打开设置页面
-  openSettings() {
-    this.router.navigate(['/settings']);
+  // 更新标签值
+  setTagsValue(ev: string[]): void {
+    console.log('标签更新:', ev);
+    this.editTags = ev;
   }
 
-  // 打开梦境详情页
-  openDreamDetail(dream: any) {
-    this.router.navigate(['/dream-detail'], { state: { dream } });
+  // 导航到指定页面
+  navigateTo(page: string): void {
+    this.router.navigate([`/tabs/${page}`]);
   }
 
-  // 根据情感获取对应的图标名称
+  // 获取情感图标
   getEmotionIcon(emotion: string): string {
     switch (emotion) {
       case '愉悦':
         return 'happy-outline';
-      case '悲伤':
-        return 'sad-outline';
       case '恐惧':
         return 'alert-circle-outline';
       case '平静':
         return 'leaf-outline';
+      case '悲伤':
+        return 'sad-outline';
       default:
         return 'help-outline';
     }
   }
+
+  // 可选:用于 *ngFor 的 trackBy 函数
+  trackByDream(index: number, dream: any): any {
+    return dream.title;
+  }
 }

+ 4 - 2
dream-app/src/app/tabs/tabs.page.html

@@ -1,3 +1,5 @@
+<!-- tabs.page.html -->
+
 <ion-tabs>
   <ion-tab-bar slot="bottom">
     <!-- 好梦 -->
@@ -8,13 +10,13 @@
 
     <!-- 探索 -->
     <ion-tab-button tab="tab2" href="/tabs/tab2">
-      <ion-icon name="compass-outline"></ion-icon>
+      <ion-icon name="aperture-outline"></ion-icon>
       <ion-label>探索</ion-label>
     </ion-tab-button>
 
     <!-- 我的 -->
     <ion-tab-button tab="tab3" href="/tabs/tab3">
-      <ion-icon name="person-outline"></ion-icon>
+      <ion-icon name="accessibility-outline"></ion-icon>
       <ion-label>我的</ion-label>
     </ion-tab-button>
   </ion-tab-bar>

+ 7 - 1
dream-app/src/app/tabs/tabs.page.ts

@@ -1,6 +1,12 @@
 import { Component } from '@angular/core';
 import { IonicModule } from '@ionic/angular';
-
+import { addIcons } from 'ionicons';
+import { moonOutline, apertureOutline, accessibilityOutline } from 'ionicons/icons';
+addIcons({
+  'moon-outline': moonOutline,
+  'aperture-outline': apertureOutline,
+  'accessibility-outline': accessibilityOutline,
+});
 @Component({
   selector: 'app-tabs',
   templateUrl: './tabs.page.html',

+ 10 - 0
dream-app/src/app/tabs/tabs.routes.ts

@@ -21,6 +21,16 @@ export const routes: Routes = [
         loadComponent: () =>
           import('../tab3/tab3.page').then((m) => m.Tab3Page),
       },
+      {
+        path: 'test',
+        loadComponent: () =>
+          import('../page-test/page-test.component').then ((m) => m. PageTestComponent),
+      },
+      {
+        path: 'dream/analysis',
+        loadComponent: () =>
+        import ('../page-dream-analysis/page-dream-analysis.component').then ((m) => m.PageDreamAnalysisComponent),
+      },
       {
         path: '',
         redirectTo: '/tabs/tab1',

+ 21 - 0
dream-app/src/main.ts

@@ -5,10 +5,31 @@ import { IonicRouteStrategy, provideIonicAngular } from '@ionic/angular/standalo
 import { routes } from './app/app.routes';
 import { AppComponent } from './app/app.component';
 
+
+// 引用HttpClient方法
+import { provideHttpClient } from '@angular/common/http';
+// 引用移动端授权检测供应器
+import { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';
+// 设置Parse服务属性
+import Parse from "parse";
+Parse.initialize("ncloudmaster");
+Parse.serverURL = "https://server.fmode.cn/parse";
+localStorage.setItem("NOVA_APIG_SERVER", 'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG')
+
+// 注意:替换Token 根据Token设置Parse服务帐套权限
+Parse.User.become("r:e20ef91b23e2c21d45cb50cd5ec1a122")
+
+
 bootstrapApplication(AppComponent, {
   providers: [
     { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
     provideIonicAngular(),
     provideRouter(routes, withPreloading(PreloadAllModules)),
+
+        // 添加HttpClient供应器
+        provideHttpClient(),
+        // 添加Diagnostic
+        Diagnostic,
+        
   ],
 });

+ 2 - 1
dream-app/tsconfig.json

@@ -2,6 +2,7 @@
 {
   "compileOnSave": false,
   "compilerOptions": {
+    "allowSyntheticDefaultImports":true,
     "baseUrl": "./",
     "outDir": "./dist/out-tsc",
     "forceConsistentCasingInFileNames": true,
@@ -19,7 +20,7 @@
     "target": "es2022",
     "module": "es2020",
     "lib": ["es2018", "dom"],
-    "useDefineForClassFields": false
+    "useDefineForClassFields": false,
   },
   "angularCompilerOptions": {
     "enableI18nLegacyMessageIdFormat": false,

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff