Açıklama Yok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

new-project-modal.component.ts 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';
  2. import { CommonModule } from '@angular/common';
  3. import { Router } from '@angular/router';
  4. import { FormsModule } from '@angular/forms';
  5. import { MatSelectModule } from '@angular/material/select';
  6. import { MatInputModule } from '@angular/material/input';
  7. import { MatFormFieldModule } from '@angular/material/form-field';
  8. import { MatButtonModule } from '@angular/material/button';
  9. import { MatIconModule } from '@angular/material/icon';
  10. import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
  11. import { AgentService } from '../services/agent.service';
  12. import { SessionService } from '../services/session.service';
  13. import { MenuService } from '../services/menu.service';
  14. import { ProjectCreateRequest } from '../models/session.model';
  15. @Component({
  16. selector: 'app-new-project-modal',
  17. standalone: true,
  18. imports: [
  19. CommonModule,
  20. FormsModule,
  21. MatSelectModule,
  22. MatInputModule,
  23. MatFormFieldModule,
  24. MatButtonModule,
  25. MatIconModule,
  26. MatProgressSpinnerModule
  27. ],
  28. templateUrl: './new-project-modal.component.html',
  29. styleUrl: './new-project-modal.component.scss'
  30. })
  31. export class NewProjectModalComponent implements OnInit {
  32. @Input() visible = false;
  33. @Output() visibleChange = new EventEmitter<boolean>();
  34. @Output() projectCreated = new EventEmitter<any>();
  35. agents: {value: string, label: string}[] = [];
  36. projectData: ProjectCreateRequest = {
  37. title: '',
  38. agent_name: '',
  39. description: ''
  40. };
  41. isLoading = false;
  42. constructor(
  43. private agentService: AgentService,
  44. private sessionService: SessionService,
  45. private menuService: MenuService,
  46. private router: Router
  47. ) {}
  48. ngOnInit() {
  49. this.loadAgents();
  50. }
  51. loadAgents() {
  52. this.agentService.getAgentOptions().subscribe({
  53. next: (agents) => {
  54. this.agents = agents;
  55. // 设置默认智能体
  56. if (agents.length > 0 && !this.projectData.agent_name) {
  57. this.projectData.agent_name = agents[0].value;
  58. }
  59. },
  60. error: (error) => {
  61. console.error('加载智能体列表失败:', error);
  62. // 使用本地映射作为备选
  63. this.agents = Object.entries(this.agentService.getAgentDisplayName('')).map(([value, label]) => ({
  64. value,
  65. label
  66. }));
  67. }
  68. });
  69. }
  70. createProject() {
  71. if (!this.projectData.title.trim() || !this.projectData.agent_name) {
  72. return;
  73. }
  74. this.isLoading = true;
  75. // 生成项目ID
  76. const projectId = `proj_${crypto.randomUUID()}`;
  77. const request: ProjectCreateRequest = {
  78. ...this.projectData,
  79. project_id: projectId
  80. };
  81. this.sessionService.createProject(request).subscribe({
  82. next: (session) => {
  83. console.log('项目创建成功:', session);
  84. this.isLoading = false;
  85. // 通知父组件
  86. this.projectCreated.emit(session);
  87. this.close();
  88. this.resetForm();
  89. },
  90. error: (error) => {
  91. console.error('创建项目失败:', error);
  92. alert(`创建项目失败: ${error.message}`);
  93. this.isLoading = false;
  94. }
  95. });
  96. }
  97. close() {
  98. this.visible = false;
  99. this.visibleChange.emit(false);
  100. this.resetForm();
  101. }
  102. resetForm() {
  103. this.projectData = {
  104. title: '',
  105. agent_name: this.agents.length > 0 ? this.agents[0].value : '',
  106. description: ''
  107. };
  108. }
  109. }