import { Injectable, inject } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable, map, BehaviorSubject } from 'rxjs'; import { MenuItem, MenuResponse, SessionIdsResponse, SessionMenuMappingResponse } from '../models/menu.model'; import { AuthService } from './auth.service'; @Injectable({ providedIn: 'root' }) export class MenuService { private http = inject(HttpClient); private authService = inject(AuthService); private topMenuSubject = new BehaviorSubject([]); topMenu$ = this.topMenuSubject.asObservable(); // 获取顶部菜单 getTopMenu(): Observable { console.log('getTopMenu: 发送请求到 /api/menu/top'); return this.http.get('/api/menu/top').pipe( map(response => { console.log('getTopMenu响应:', response); if (response.success && response.data) { console.log('获取到菜单项数据:', response.data); console.log('菜单项数量:', response.data.length); if (response.data.length > 0) { console.log('第一个菜单项结构:', response.data[0]); console.log('第一个菜单项ID值:', response.data[0].id); console.log('第一个菜单项ID类型:', typeof response.data[0].id); } this.topMenuSubject.next(response.data); return response.data; } else { console.error('获取菜单失败:', response.message || response.error); throw new Error(response.message || response.error || '获取菜单失败'); } }) ); } // 获取菜单项的所有会话ID getSessionIdsByMenuItem(menuItemId: string): Observable { console.log('getSessionIdsByMenuItem被调用,参数menuItemId:', menuItemId); console.log('参数类型:', typeof menuItemId); console.log('参数是否为空:', !menuItemId); console.log('参数去除空格后是否为空:', menuItemId ? menuItemId.trim() === '' : 'N/A'); // 验证参数 if (!menuItemId || menuItemId.trim() === '') { console.error('参数 menu_item_id 不能为空,当前值:', menuItemId); throw new Error(`参数 menu_item_id 不能为空`); } console.log(`发送请求到 /api/menu/sessions/${menuItemId}`); return this.http.get(`/api/menu/sessions/${menuItemId}`).pipe( map(response => { console.log('getSessionIdsByMenuItem响应:', response); if (response.success) { const data = response.data || []; console.log('返回会话ID列表:', data); return data; } else { console.error('获取会话ID列表失败:', response.message || response.error); throw new Error(response.message || response.error || '获取会话ID列表失败'); } }) ); } // 获取会话的菜单项ID getMenuItemBySessionId(sessionId: string): Observable { return this.http.get('/api/session/menu', { params: { session_id: sessionId } }).pipe( map(response => { if (response.success && response.data !== undefined) { return response.data; } else { throw new Error(response.message || response.error || '获取会话菜单项失败'); } }) ); } // 获取所有菜单项(缓存) getCachedTopMenu(): MenuItem[] { return this.topMenuSubject.value; } // 根据ID获取菜单项 getMenuItemById(id: string): MenuItem | undefined { return this.topMenuSubject.value.find(item => item.id === id); } }