|  | @@ -5,6 +5,15 @@ import { IonCard, IonItem, IonLabel, IonList } from '@ionic/angular/standalone';
 | 
	
		
			
				|  |  |  import { IonButton, IonButtons, IonContent, IonHeader, IonTitle, IonToolbar, ModalController } from '@ionic/angular/standalone';
 | 
	
		
			
				|  |  |  import { CloudObject, CloudQuery } from 'src/lib/ncloud';
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 定义 ContentItem 接口
 | 
	
		
			
				|  |  | +interface ContentItem {
 | 
	
		
			
				|  |  | +  role: string;
 | 
	
		
			
				|  |  | +  content: string;
 | 
	
		
			
				|  |  | +  createdAt?: string; // 可选属性
 | 
	
		
			
				|  |  | +  hidden?: boolean;   // 可选属性
 | 
	
		
			
				|  |  | +  complete?: boolean; // 可选属性
 | 
	
		
			
				|  |  | +  cid?: string;      // 可选属性
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  @Component({
 | 
	
		
			
				|  |  |    selector: 'app-report-modal',
 | 
	
		
			
				|  |  |    templateUrl: './report-modal.component.html',
 | 
	
	
		
			
				|  | @@ -17,6 +26,7 @@ import { CloudObject, CloudQuery } from 'src/lib/ncloud';
 | 
	
		
			
				|  |  |  export class ReportModalComponent  implements OnInit {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    constructor(private modalCtrl: ModalController,private router: Router) {}
 | 
	
		
			
				|  |  | +  userFeelings: Array<{ content: string, score: number, label: string }> = []; // 存储用户内容和情感分析结果
 | 
	
		
			
				|  |  |    closeModal() {
 | 
	
		
			
				|  |  |      this.router.navigate(['tabs/tab3']);
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -24,9 +34,69 @@ export class ReportModalComponent  implements OnInit {
 | 
	
		
			
				|  |  |    async loadChatRecordList(){
 | 
	
		
			
				|  |  |      let query = new CloudQuery("ChatRecord");
 | 
	
		
			
				|  |  |      this.chatrecordList = await query.find()
 | 
	
		
			
				|  |  | -    
 | 
	
		
			
				|  |  | +    // 遍历 chatrecordList,去除每个记录中 user 的第一条 content
 | 
	
		
			
				|  |  | +    this.chatrecordList.forEach(chatrecord => {
 | 
	
		
			
				|  |  | +      const contentArray = chatrecord.get('content');
 | 
	
		
			
				|  |  | +      if (contentArray && contentArray.length > 0) {
 | 
	
		
			
				|  |  | +        // 找到第一条 role 为 user 的内容并移除
 | 
	
		
			
				|  |  | +        const userIndex = contentArray.findIndex((item: ContentItem) => item.role === 'user');
 | 
	
		
			
				|  |  | +        if (userIndex !== -1) {
 | 
	
		
			
				|  |  | +          contentArray.splice(userIndex, 1); // 移除第一条 user 内容
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  analyzeUserFeeling(content: string): { score: number; label: string } {
 | 
	
		
			
				|  |  | +    const moodScores = {
 | 
	
		
			
				|  |  | +      positive: {
 | 
	
		
			
				|  |  | +        words: ['开心', '高兴', '喜欢', '快乐', '棒', '兴奋', '满足', '美好'],
 | 
	
		
			
				|  |  | +        score: 2
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      neutral: {
 | 
	
		
			
				|  |  | +        words: ['一般', '还好', '可以', '无所谓', '正常'],
 | 
	
		
			
				|  |  | +        score: 0
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      negative: {
 | 
	
		
			
				|  |  | +        words: ['难过', '生气', '失望', '讨厌', '悲伤', '烦恼', '痛苦', '沮丧'],
 | 
	
		
			
				|  |  | +        score: -2
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    let totalScore = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 分析内容并计算分数
 | 
	
		
			
				|  |  | +    const contentWords = content.split(/\s+/);
 | 
	
		
			
				|  |  | +    contentWords.forEach(word => {
 | 
	
		
			
				|  |  | +      for (const mood in moodScores) {
 | 
	
		
			
				|  |  | +        if ((moodScores as any)[mood].words.includes(word)) {
 | 
	
		
			
				|  |  | +          totalScore += (moodScores as any)[mood].score;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 判断心情状态
 | 
	
		
			
				|  |  | +    let label = '中性';
 | 
	
		
			
				|  |  | +    if (totalScore > 0) {
 | 
	
		
			
				|  |  | +      label = '积极';
 | 
	
		
			
				|  |  | +    } else if (totalScore < 0) {
 | 
	
		
			
				|  |  | +      label = '消极';
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    return { score: totalScore, label };
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  ngOnInit() {
 | 
	
		
			
				|  |  | -    this.loadChatRecordList()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  async ngOnInit() {
 | 
	
		
			
				|  |  | +    await this.loadChatRecordList();
 | 
	
		
			
				|  |  | +    // 在这里可以遍历 chatrecordList 中的用户内容并进行情感分析
 | 
	
		
			
				|  |  | +    this.chatrecordList.forEach(chatrecord => {
 | 
	
		
			
				|  |  | +      const contentArray = chatrecord.get('content');
 | 
	
		
			
				|  |  | +      contentArray.forEach((contentItem: ContentItem) => {
 | 
	
		
			
				|  |  | +        if (contentItem.role === 'user') {
 | 
	
		
			
				|  |  | +          const analysis = this.analyzeUserFeeling(contentItem.content);
 | 
	
		
			
				|  |  | +          this.userFeelings.push({ content: contentItem.content, score: analysis.score, label: analysis.label });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 |