|
@@ -1,14 +1,130 @@
|
|
|
import { Component } from '@angular/core';
|
|
|
-import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone';
|
|
|
+import { IonHeader, IonToolbar, IonTitle, IonContent, IonItem, IonList, IonSelect, IonSelectOption, IonLabel, IonButton, IonTextarea, AlertController } from '@ionic/angular/standalone';
|
|
|
import { ExploreContainerComponent } from '../explore-container/explore-container.component';
|
|
|
+import { CommonModule } from '@angular/common';
|
|
|
+import { FormsModule } from '@angular/forms'; // 导入 FormsModule
|
|
|
+/** 引用:从fmode-ng库引用FmodeChatCompletion类 */
|
|
|
+import { FmodeChatCompletion, MarkdownPreviewModule } from 'fmode-ng';
|
|
|
+import { Router } from '@angular/router'; // 导入 Router
|
|
|
|
|
|
@Component({
|
|
|
selector: 'app-tab3',
|
|
|
templateUrl: 'tab3.page.html',
|
|
|
styleUrls: ['tab3.page.scss'],
|
|
|
standalone: true,
|
|
|
- imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent],
|
|
|
+ imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent,IonItem,IonList,IonSelect,IonSelectOption,IonButton,CommonModule,IonTextarea,FormsModule,
|
|
|
+ MarkdownPreviewModule,],
|
|
|
})
|
|
|
export class Tab3Page {
|
|
|
- constructor() {}
|
|
|
+ constructor(private alertController: AlertController, private router: Router) {}
|
|
|
+ colors: string[] = [
|
|
|
+ '#FF5733', '#33FF57', '#3357FF', '#F1C40F', '#8E44AD',
|
|
|
+ '#E74C3C', '#3498DB', '#1ABC9C', '#2ECC71', '#9B59B6',
|
|
|
+ '#34495E', '#E67E22', '#F39C12', '#D35400', '#C0392B',
|
|
|
+ '#7F8C8D', '#BDC3C7', '#95A5A6', '#FFB6C1', '#FF4500',
|
|
|
+ '#FFD700', '#ADFF2F', '#00CED1', '#FF69B4', '#8A2BE2',
|
|
|
+ '#A52A2A', '#DEB887', '#5F9EA0', '#4682B4', '#D3D3D3',
|
|
|
+ '#FF1493', '#7FFF00', '#FF6347', '#B22222', '#FF8C00',
|
|
|
+ '#20B2AA', '#C71585', '#FFDAB9', '#F0E68C', '#FFFACD',
|
|
|
+ '#FFE4E1', '#FFF0F5', '#FFF5EE', '#F5F5F5', '#DCDCDC',
|
|
|
+ '#708090', '#778899',
|
|
|
+ ];
|
|
|
+
|
|
|
+ selectedColorFavorite: string = ''; // 第一个颜色选择器的选中颜色
|
|
|
+ selectedColorSecondary: string = ''; // 第二个颜色选择器的选中颜色
|
|
|
+ showColorPickerFavorite: boolean = false; // 控制第一个颜色选择器的显示
|
|
|
+ showColorPickerSecondary: boolean = false; // 控制第二个颜色选择器的显示
|
|
|
+
|
|
|
+ selectedSeason: string = ''; // 存储用户选择的季节
|
|
|
+ selectedGender: string = ''; // 存储用户选择的性别
|
|
|
+ selectedBodyType: string = ''; // 存储用户选择的体型
|
|
|
+ selectedSkinTone: string = ''; // 存储用户选择的皮肤色调
|
|
|
+ styleDescription: string = ''; // 存储用户的风格描述
|
|
|
+ isComplete:boolean = false; // 定义完成状态属性,用来标记是否补全完成
|
|
|
+
|
|
|
+ toggleColorPicker(type: string) {
|
|
|
+ if (type === 'favorite') {
|
|
|
+ this.showColorPickerFavorite = !this.showColorPickerFavorite; // 切换第一个颜色选择器的显示状态
|
|
|
+ this.showColorPickerSecondary = false; // 关闭第二个颜色选择器
|
|
|
+ } else if (type === 'secondary') {
|
|
|
+ this.showColorPickerSecondary = !this.showColorPickerSecondary; // 切换第二个颜色选择器的显示状态
|
|
|
+ this.showColorPickerFavorite = false; // 关闭第一个颜色选择器
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ selectColor(color: string, type: string) {
|
|
|
+ if (type === 'favorite') {
|
|
|
+ this.selectedColorFavorite = color; // 更新第一个颜色选择器的选中颜色
|
|
|
+ } else if (type === 'secondary') {
|
|
|
+ this.selectedColorSecondary = color; // 更新第二个颜色选择器的选中颜色
|
|
|
+ }
|
|
|
+ this.showColorPickerFavorite = false; // 选择颜色后关闭第一个颜色选择器
|
|
|
+ this.showColorPickerSecondary = false; // 选择颜色后关闭第二个颜色选择器
|
|
|
+ }
|
|
|
+
|
|
|
+ // 用户输入提示词
|
|
|
+ //userPrompt:string = '当前的季节是'+this.selectedSeason+',该用户性别是'+this.selectedGender+',体型是'+this.selectedBodyType+',皮肤色调是'+this.selectedSkinTone+',最喜欢的颜色是'+this.selectedColorFavorite+',次喜欢的颜色是'+this.selectedColorSecondary+',该用户的风格描述是'+this.styleDescription+',请你作为一名专业的服装穿搭大师,为该用户给出适合的服装搭配建议。'
|
|
|
+
|
|
|
+ // 属性:组件内用于展示消息内容的变量
|
|
|
+ responseMsg:any = ""
|
|
|
+ // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
|
|
|
+ // 用户输入提示词
|
|
|
+ userPrompt:string = ''
|
|
|
+
|
|
|
+ //评价弹出框
|
|
|
+ async presentAlert() {
|
|
|
+ const alert = await this.alertController.create({
|
|
|
+ header: '希望你对本次AI进行评价',
|
|
|
+ buttons: [
|
|
|
+ {
|
|
|
+ text: '不了',
|
|
|
+ role: 'cancel',
|
|
|
+ handler: () => {
|
|
|
+ console.log('用户选择留在本页面');
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ text: '去评价',
|
|
|
+ handler: () => {
|
|
|
+ // 假设评价页面的路由是'/评价'
|
|
|
+ // 您可以根据实际的路由路径进行调整
|
|
|
+
|
|
|
+ this.router.navigate(['/tabs/evaluate']);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ });
|
|
|
+
|
|
|
+ await alert.present();
|
|
|
+}
|
|
|
+ sendMessage(){
|
|
|
+ // 每次点击按钮时清空之前的内容
|
|
|
+ this.responseMsg = ""; // 清空之前的消息
|
|
|
+ this.isComplete = false; // 重置完成状态
|
|
|
+
|
|
|
+ this.userPrompt = '当前的季节是' + this.selectedSeason + ',该用户性别是' + this.selectedGender + ',体型是' + this.selectedBodyType + ',皮肤色调是' + this.selectedSkinTone + ',最喜欢的颜色是' + this.selectedColorFavorite + ',次喜欢的颜色是' + this.selectedColorSecondary + ',该用户的风格描述是' + this.styleDescription + ',请你作为一名专业的服装穿搭大师,为该用户给出适合的服装搭配建议。';
|
|
|
+
|
|
|
+ console.log("开始生成");
|
|
|
+ let completion = new FmodeChatCompletion([
|
|
|
+ { role: "system", content: "" },
|
|
|
+ { role: "user", content: this.userPrompt }
|
|
|
+ ]);
|
|
|
+
|
|
|
+ completion.sendCompletion().subscribe((message: any) => {
|
|
|
+ // 打印消息体
|
|
|
+ console.log(message.content);
|
|
|
+ // 赋值消息内容给组件内属性
|
|
|
+ this.responseMsg = message.content;
|
|
|
+ if (message?.complete) { // 判断message为完成状态,则设置isComplete为完成
|
|
|
+ this.isComplete = true;
|
|
|
+ this.presentAlert(); // 调用弹出框
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ }
|
|
|
+ goTestPage(){
|
|
|
+ this.router.navigate(['/tabs/test']);}
|
|
|
}
|
|
|
+
|
|
|
+
|