| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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<MenuItem[]>([]);
- topMenu$ = this.topMenuSubject.asObservable();
-
- // 获取顶部菜单
- getTopMenu(): Observable<MenuItem[]> {
- console.log('getTopMenu: 发送请求到 /api/menu/top');
- return this.http.get<MenuResponse>('/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<string[]> {
- 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<SessionIdsResponse>(`/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<string> {
- return this.http.get<SessionMenuMappingResponse>('/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);
- }
- }
|