yf 3 hónapja
szülő
commit
3c034ec625
29 módosított fájl, 1329 hozzáadás és 11 törlés
  1. 7 0
      dream-app/angular.json
  2. 705 11
      dream-app/package-lock.json
  3. 7 0
      dream-app/package.json
  4. 8 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.html
  5. 10 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.scss
  6. 22 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.spec.ts
  7. 55 0
      dream-app/src/app/components/edit-rating-star/edit-rating-star.component.ts
  8. 3 0
      dream-app/src/app/components/edit-tag/README.md
  9. 8 0
      dream-app/src/app/components/edit-tag/edit-tag.component.html
  10. 0 0
      dream-app/src/app/components/edit-tag/edit-tag.component.scss
  11. 22 0
      dream-app/src/app/components/edit-tag/edit-tag.component.spec.ts
  12. 45 0
      dream-app/src/app/components/edit-tag/edit-tag.component.ts
  13. 20 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.html
  14. 0 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.scss
  15. 22 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.spec.ts
  16. 127 0
      dream-app/src/app/page-dream-analysis/page-dream-analysis.component.ts
  17. 98 0
      dream-app/src/app/page-dream-analysis/test-chat-completion.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. 18 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. 36 0
      dream-app/src/app/page-test/page-test.component.ts
  26. 14 0
      dream-app/src/app/tab1/tab1.page.html
  27. 14 0
      dream-app/src/app/tab1/tab1.page.ts
  28. 9 0
      dream-app/src/app/tabs/tabs.page.ts
  29. 13 0
      dream-app/src/app/tabs/tabs.routes.ts

+ 7 - 0
dream-app/angular.json

@@ -126,7 +126,14 @@
     }
   },
   "cli": {
+<<<<<<< HEAD
     "schematicCollections": ["@ionic/angular-toolkit"]
+=======
+    "schematicCollections": [
+      "@ionic/angular-toolkit"
+    ],
+    "analytics": false
+>>>>>>> f80a287 (class)
   },
   "schematics": {
     "@ionic/angular-toolkit:component": {

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 705 - 11
dream-app/package-lock.json


+ 7 - 0
dream-app/package.json

@@ -27,7 +27,14 @@
     "@capacitor/keyboard": "6.0.3",
     "@capacitor/status-bar": "6.0.2",
     "@ionic/angular": "^8.0.0",
+<<<<<<< HEAD
     "ionicons": "^7.2.1",
+=======
+    "@types/parse": "^3.0.9",
+    "fmode-ng": "^0.0.52",
+    "ionicons": "^7.2.1",
+    "parse": "^5.3.0",
+>>>>>>> f80a287 (class)
     "rxjs": "~7.8.0",
     "tslib": "^2.3.0",
     "zone.js": "~0.14.2"

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

@@ -0,0 +1,8 @@
+<div class="star-rating">
+    <ng-container *ngFor="let star of starList; let i = index">
+      <ion-icon 
+        [name]="star ? 'star' : 'star-outline'" 
+        (click)="rate(i)">
+      </ion-icon>
+    </ng-container>
+  </div>

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

@@ -0,0 +1,10 @@
+.star-rating {
+    display: flex;
+    cursor: pointer;
+  
+    ion-icon {
+      font-size: 30px; // 调整星星大小
+      color: gold; // 星星颜色
+      margin-right: 5px; // 星星间距
+    }
+  }

+ 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();
+  });
+});

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

@@ -0,0 +1,55 @@
+import { Component, OnInit } from '@angular/core';
+import { Input, Output, EventEmitter } from '@angular/core';
+import { IonIcon } from '@ionic/angular/standalone';
+import { CommonModule } from '@angular/common';
+import { addIcons } from 'ionicons';
+import { star } from 'ionicons/icons';
+import { starOutline } from 'ionicons/icons';
+addIcons({star,starOutline})
+
+@Component({
+  selector: 'edit-rating-star',
+  templateUrl: './edit-rating-star.component.html',
+  styleUrls: ['./edit-rating-star.component.scss'],
+  imports:[IonIcon,CommonModule],
+  standalone: true,
+})
+export class EditRatingStarComponent  implements OnInit {
+  @Input() score: number = 0; // 默认分值为0
+  @Input() scoreMax: number = 5; // 最大分值
+  starList: boolean[] = []; // 星星状态数组
+
+  @Output() onScoreChange: EventEmitter<number> = new EventEmitter<number>();
+
+  constructor() {
+    this.updateStarList();
+  }
+
+  ngOnInit(){
+    this.updateStarList();
+  }
+  ngOnChanges() {
+    this.updateStarList();
+  }
+
+  // 更新星星数组
+  private updateStarList() {
+    this.starList = Array(this.scoreMax).fill(false);
+    for (let i = 0; i < this.score; i++) {
+      this.starList[i] = true;
+    }
+  }
+
+  // 打分方法
+  rate(index: number) {
+    if (this.score === index + 1) {
+      // 如果点击的是当前分值,清零
+      this.score = 0;
+    } else {
+      // 否则更新分值
+      this.score = index + 1;
+    }
+    this.updateStarList();
+    this.onScoreChange.emit(this.score); // 触发分值变化事件
+  }
+}

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

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

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

@@ -0,0 +1,8 @@
+
+<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)">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();
+  });
+});

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

@@ -0,0 +1,45 @@
+import { Component, OnInit,Output, EventEmitter } from '@angular/core';
+import { IonInput,IonButton,IonChip } 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() {}
+
+}

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

@@ -0,0 +1,20 @@
+
+<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-item>
+    {{dreamResult}}
+  </ion-item>
+</ion-list>
+<!-- <div style="font-size: 18px">
+</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 { EditTagComponent } from '../components/edit-tag/edit-tag.component';
+import { IonList } from '@ionic/angular/standalone';
+import { IonItem, IonTextarea,IonButton } from '@ionic/angular/standalone';
+import { TestChatCompletion } from './test-chat-completion';
+// 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
+  }
+
+  // 梦境结果
+  dreamResult:string = ""
+
+  // 解析梦境
+  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
+      }
+    ]
+
+    // 创建并发起一条新的消息补全
+    let completion = new TestChatCompletion(messageList)
+    // 持续更新事件推送的消息体内容绑定至消息变量
+    completion.createCompletionByStream()
+
+    setInterval(()=>{
+      console.log(messageList)
+      this.dreamDesc = messageList[messageList.length-1]?.content;
+    },1000)
+    // let bodyJson = {
+    //   "token": `Bearer ${TOKEN}`,
+    //   "messages": messageList,
+    //   "model": "fmode-4.5-128k",
+    //   "temperature": 0.5,
+    //   "presence_penalty": 0,
+    //   "frequency_penalty": 0,
+    //   "top_p": 1,
+    //   "stream":true
+    // };
+  
+    // let response = await fetch("https://test.fmode.cn/api/apig/aigc/gpt/v1/chat/completions", {
+    //   "headers": {
+    //     "accept": "text/event-stream",
+    //   },
+    //   "body": JSON.stringify(bodyJson),
+    //   "method": "POST",
+    //   "mode": "cors",
+    //   "credentials": "omit"
+    // });
+    // if(response && response.body){
+
+    //   let reader = response.body.getReader();
+
+    //   if (!reader) {
+    //     throw new Error("Failed to get the response reader.");
+    //   }
+
+    //   let decoder = new TextDecoder();
+    
+    //   while (true) {
+    //     let { done, value } = await reader.read();
+    //     if (done) {
+    //       break;
+    //     }
+    
+    //     let data = decoder.decode(value);
+    //     /**
+    //       data: {"id":"chatcmpl-AXgfsaapykrm9oEBVQTwRZAVRQHj7","object":"chat.completion.chunk","created":1732592228,"model":"gpt-4o-mini-2024-07-18","system_fingerprint":"fp_0705bf87c0","choices":[{"index":0,"delta":{"content":"!"},"logprobs":null,"finish_reason":null}],"usage":null}
+    //       data: {"id":"chatcmpl-AXgfsaapykrm9oEBVQTwRZAVRQHj7","object":"chat.completion.chunk","created":1732592228,"model":"gpt-4o-mini-2024-07-18","system_fingerprint":"fp_0705bf87c0","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null}
+    //       data: {"id":"chatcmpl-AXgfsaapykrm9oEBVQTwRZAVRQHj7","object":"chat.completion.chunk","created":1732592228,"model":"gpt-4o-mini-2024-07-18","system_fingerprint":"fp_0705bf87c0","choices":[],"usage":{"prompt_tokens":110,"completion_tokens":240,"total_tokens":350,"prompt_tokens_details":{"cached_tokens":0,"audio_tokens":0},"completion_tokens_details":{"reasoning_tokens":0,"audio_tokens":0,"accepted_prediction_tokens":0,"rejected_prediction_tokens":0}}}
+    //       data: [DONE]
+    //      */
+    //     let messages = data.split("\n");
+    //     messages.forEach(message=>{
+    //       console.log(message)
+    //       let dataStr:string = message.split("data: ")[1]
+    //       if(dataStr&&dataStr.startsWith("{")){
+    //         try{
+    //           let json = JSON.parse(dataStr);
+    //           let content = json.choices[0].delta.content
+    //           console.log(content)
+    //           this.dreamResult =  this.dreamResult + content
+    //         }catch(err){}
+    //       }
+    //     })
+
+    //   }
+    // }
+  }
+
+  constructor() { }
+
+  ngOnInit() {}
+
+}

+ 98 - 0
dream-app/src/app/page-dream-analysis/test-chat-completion.ts

@@ -0,0 +1,98 @@
+export interface TestChatMessage{
+    role:string
+    content:string
+}
+export class TestChatCompletion{
+messageList:Array<TestChatMessage>
+constructor(messageList:Array<TestChatMessage>){
+    this.messageList = messageList
+}
+async createCompletionByStream() {
+
+let token = localStorage.getItem("token");
+let bodyJson = {
+  "token": `Bearer ${token}`,
+  "messages": this.messageList,
+  "model": "fmode-4.5-128k",
+  "temperature": 0.5,
+  "presence_penalty": 0,
+  "frequency_penalty": 0,
+  "top_p": 1,
+  "stream":true
+};
+
+let response = await fetch("https://test.fmode.cn/api/apig/aigc/gpt/v1/chat/completions", {
+  "headers": {
+    "accept": "text/event-stream",
+    "sec-fetch-dest": "empty",
+    "sec-fetch-mode": "cors",
+    "sec-fetch-site": "same-site"
+  },
+  "referrer": "https://ai.fmode.cn/",
+  "body": JSON.stringify(bodyJson),
+  "method": "POST",
+  "mode": "cors",
+  "credentials": "omit"
+});
+
+let messageAiReply = ""
+let messageIndex = this.messageList.length
+let reader = response.body?.getReader();
+if (!reader) {
+  throw new Error("Failed to get the response reader.");
+}
+
+let decoder = new TextDecoder();
+let buffer = "";
+
+while (true) {
+  let { done, value } = await reader.read();
+  if (done) {
+    break;
+  }
+
+  buffer += decoder.decode(value);
+
+  // Split the buffer by newlines to get individual messages
+  let messages = buffer.split("\n");
+
+  // Process each message
+  for (let i = 0; i < messages.length - 1; i++) {
+    let message = messages[i];
+
+    // Process the message as needed
+    /**
+     * data: {"id":"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv","object":"chat.completion.chunk","created":1696770162,"model":"fmode-4.5-128k","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
+     * data: {"id":"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv","object":"chat.completion.chunk","created":1696770162,"model":"fmode-4.5-128k","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
+     * data: [DONE]
+     */
+    let dataText = message.replace("data:\ ","")
+    if(dataText.startsWith("{")){
+      try{
+        let dataJson = JSON.parse(dataText)
+        console.log(dataJson)
+        messageAiReply += dataJson?.choices?.[0]?.delta?.content || ""
+        this.messageList[messageIndex] = {
+          role:"assistant",
+          content:messageAiReply
+        }
+      }catch(err){}
+    }
+    if(dataText.startsWith("[")){
+      console.log(message)
+      console.log("完成")
+      this.messageList[messageIndex] = {
+        role:"assistant",
+        content:messageAiReply
+      }
+      messageAiReply = ""
+    }
+    // Parse the message as JSON
+    // let data = JSON.parse(message);
+
+    // Clear the processed message from the buffer
+    buffer = buffer.slice(message.length + 1);
+  }
+}
+}
+}

+ 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';
+// import { from } from "rxjs"
+@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(){
+    // from
+  }
+
+}

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

@@ -0,0 +1,18 @@
+
+  <h1>星星打分组件演示:分值 {{currentScore}}</h1>
+  <edit-rating-star 
+    [score]="currentScore" 
+    [scoreMax]="5" 
+    (onScoreChange)="handleScoreChange($event)">
+  </edit-rating-star>
+  
+  <h1>编辑标签演示</h1>
+  <app-edit-tag (onTagChange)="setTagsValue($event)"></app-edit-tag>
+
+
+  <h1>父级页面:从子组件输出事件获取属性</h1>
+  <ul>
+    @for(tag of editTags;track tag;){
+      <li>{{tag}}</li>
+    }
+  </ul>

+ 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();
+  });
+});

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

@@ -0,0 +1,36 @@
+import { Component, OnInit } from '@angular/core';
+import { EditTagComponent } from '../components/edit-tag/edit-tag.component';
+import { EditRatingStarComponent } from '../components/edit-rating-star/edit-rating-star.component';
+
+@Component({
+  selector: 'app-page-test',
+  templateUrl: './page-test.component.html',
+  styleUrls: ['./page-test.component.scss'],
+  standalone: true,
+  imports:[
+    EditTagComponent,EditRatingStarComponent
+  ]
+})
+export class PageTestComponent  implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {}
+
+   // 星星打分
+   currentScore: number = 0; // 初始分值
+
+   handleScoreChange(newScore: number) {
+     this.currentScore = newScore;
+     console.log('新分值:', newScore); // 处理分值变化
+   }
+ 
+   // 编辑标签
+   editTags:Array<string> = []
+   setTagsValue(ev:any){
+     console.log("setTagsValue",ev)
+     this.editTags = ev;
+   }
+   
+
+}

+ 14 - 0
dream-app/src/app/tab1/tab1.page.html

@@ -6,7 +6,11 @@
       expand="block"
       size="large"
       color="tertiary"
+<<<<<<< HEAD
       (click)="navigateTo('record')"
+=======
+      (mouseup)="toRecordDream()"
+>>>>>>> f80a287 (class)
     >
       <ion-icon slot="start" name="create-outline"></ion-icon>
       记录梦境
@@ -16,7 +20,11 @@
     <div class="function-cards">
       <!-- 梦境分析 -->
       <ion-card
+<<<<<<< HEAD
         (click)="navigateTo('analysis')"
+=======
+        (click)="navigateTo('dream/analysis')"
+>>>>>>> f80a287 (class)
         style="background-image: url('assets/images/dream-analysis-bg.png'); background-size: cover; background-position: center;"
       >
         <ion-card-header>
@@ -43,4 +51,10 @@
       </ion-card>
     </div>
   </div>
+<<<<<<< HEAD
+=======
+  <ion-button (click)="goTestPage()">进入测试页</ion-button>
+
+
+>>>>>>> f80a287 (class)
 </ion-content>

+ 14 - 0
dream-app/src/app/tab1/tab1.page.ts

@@ -11,6 +11,13 @@ import { Router } from '@angular/router';
   imports: [IonicModule, CommonModule, DatePipe],
 })
 export class Tab1Page {
+<<<<<<< HEAD
+=======
+ 
+  toRecordDream(){
+    alert("开始记录梦境,双击666")
+  }
+>>>>>>> f80a287 (class)
   recentDreams = [
     {
       title: '飞翔的城市',
@@ -26,7 +33,14 @@ export class Tab1Page {
   ];
 
   constructor(private router: Router) {}
+<<<<<<< HEAD
 
+=======
+  // 
+  goTestPage(){
+    this.router.navigate(['/tabs/test']);
+  }
+>>>>>>> f80a287 (class)
   // 导航到指定页面
   navigateTo(page: string) {
     this.router.navigate([`/tabs/${page}`]);

+ 9 - 0
dream-app/src/app/tabs/tabs.page.ts

@@ -1,5 +1,14 @@
 import { Component } from '@angular/core';
 import { IonicModule } from '@ionic/angular';
+<<<<<<< HEAD
+=======
+import { addIcons } from 'ionicons';
+import { moon } from 'ionicons/icons';
+import { compass } from 'ionicons/icons';
+import { person } from 'ionicons/icons';
+import { IonIcon } from '@ionic/angular/standalone';
+addIcons({moon,compass,person})
+>>>>>>> f80a287 (class)
 
 @Component({
   selector: 'app-tabs',

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

@@ -22,6 +22,19 @@ export const routes: Routes = [
           import('../tab3/tab3.page').then((m) => m.Tab3Page),
       },
       {
+<<<<<<< HEAD
+=======
+        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),
+      },
+      {
+>>>>>>> f80a287 (class)
         path: '',
         redirectTo: '/tabs/tab1',
         pathMatch: 'full',

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott