123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- import { Component, OnInit, ViewChild, ElementRef, AfterViewChecked } from '@angular/core';
- import { trigger, transition, style, animate } from '@angular/animations';
- interface ChatMessage {
- content: string;
- isAI: boolean;
- time: string;
- status?: 'sending' | 'sent' | 'error';
- }
- @Component({
- selector: 'app-page-aichat',
- templateUrl: './page-aichat.page.html',
- styleUrls: ['./page-aichat.page.scss'],
- standalone: false,
- animations: [
- trigger('messageAnim', [
- transition(':enter', [
- style({ opacity: 0, transform: 'translateY(20px)' }),
- animate('300ms cubic-bezier(0.4, 0, 0.2, 1)',
- style({ opacity: 1, transform: 'translateY(0)' }))
- ])
- ])
- ]
- })
- export class PageAichatPage implements OnInit, AfterViewChecked {
- @ViewChild('messagesContainer') private messagesContainer!: ElementRef;
- @ViewChild('messageInput') messageInput!: ElementRef;
- messages: ChatMessage[] = [];
- newMessage = '';
- isInputFocused = false;
- get canSend(): boolean {
- return this.newMessage.trim().length > 0;
- }
- ngOnInit() {
- this.addAIMessage('您好!我是您的智能食谱助手,您可以输入食材名称,我会为您推荐相关食谱。例如:"番茄"、"鸡肉"');
- }
- ngAfterViewChecked() {
- this.scrollToBottom();
- }
- async sendMessage() {
- if (!this.canSend) return;
- const userMessage = this.newMessage.trim();
- this.addUserMessage(userMessage);
-
- // 模拟发送过程
- await this.simulateSendDelay();
-
- // 添加AI回复
- this.addAIMessage(await this.generateAIReply(userMessage));
-
- this.newMessage = '';
- this.messageInput.nativeElement.focus();
- }
- private addUserMessage(content: string) {
- this.messages.push({
- content,
- isAI: false,
- time: this.getCurrentTime(),
- status: 'sending'
- });
- // 更新发送状态
- setTimeout(() => {
- const index = this.messages.length - 1;
- this.messages[index].status = Math.random() > 0.1 ? 'sent' : 'error';
- }, 1000);
- }
- private addAIMessage(content: string) {
- this.messages.push({
- content,
- isAI: true,
- time: this.getCurrentTime()
- });
- }
- private scrollToBottom() {
- try {
- setTimeout(() => {
- this.messagesContainer.nativeElement.scrollTop =
- this.messagesContainer.nativeElement.scrollHeight;
- }, 100);
- } catch(err) { /* 处理滚动错误 */ }
- }
- private getCurrentTime(): string {
- return new Date().toLocaleTimeString([], {
- hour: '2-digit',
- minute: '2-digit'
- });
- }
- private async simulateSendDelay(): Promise<void> {
- return new Promise(resolve => setTimeout(resolve, 500));
- }
- private async generateAIReply(input: string): Promise<string> {
- // 模拟AI回复逻辑
- await new Promise(resolve => setTimeout(resolve, 800));
- return this.getRecipeRecommendations(input);
- }
- private getRecipeRecommendations(input: string): string {
- const recipes: { [key: string]: string[] } = {
- 番茄: [
- "番茄炒蛋:将番茄切块,鸡蛋炒熟后加入番茄一起翻炒,调味即可。",
- "番茄汤:番茄去皮切块,加水煮开后调味,可加入鸡蛋液做成番茄蛋汤。",
- "番茄意大利面:番茄炒成酱,加入煮好的意大利面拌匀。"
- ],
- 鸡肉: [
- "宫保鸡丁:鸡肉切丁,与花生米、青椒等一起炒制。",
- "香煎鸡胸肉:鸡胸肉用调料腌制后,放入锅中煎至两面金黄。",
- "鸡汤:鸡肉加水炖煮,加入姜片、葱段等调料。"
- ],
- 土豆: [
- "土豆丝:土豆切成丝,清炒或酸辣口味都很不错。",
- "土豆炖牛肉:土豆与牛肉一起炖煮,口感软糯。",
- "薯条:土豆切成条,炸至金黄,可搭配番茄酱食用。"
- ]
- };
- for (const [ingredient, recipeList] of Object.entries(recipes)) {
- if (input.includes(ingredient)) {
- const randomIndex = Math.floor(Math.random() * recipeList.length);
- return `为您推荐使用 ${ingredient} 的食谱:${recipeList[randomIndex]}`;
- }
- }
-
- return `很抱歉,暂时没有找到与 "${input}" 相关的食谱。您可以尝试输入其他食材。`;
- }
- }
|