Spaces:
Sleeping
Sleeping
Update pages/AIAssistant.tsx
Browse files- pages/AIAssistant.tsx +12 -6
pages/AIAssistant.tsx
CHANGED
|
@@ -2,11 +2,12 @@
|
|
| 2 |
import React, { useState, useEffect } from 'react';
|
| 3 |
import { api } from '../services/api';
|
| 4 |
import { UserRole } from '../types';
|
| 5 |
-
import { Bot, Mic, Loader2, Briefcase } from 'lucide-react';
|
| 6 |
import { AdminPanel } from '../components/ai/AdminPanel';
|
| 7 |
import { ChatPanel } from '../components/ai/ChatPanel';
|
| 8 |
import { AssessmentPanel } from '../components/ai/AssessmentPanel';
|
| 9 |
import { WorkAssistantPanel } from '../components/ai/WorkAssistantPanel';
|
|
|
|
| 10 |
|
| 11 |
export const AIAssistant: React.FC = () => {
|
| 12 |
const currentUser = api.auth.getCurrentUser();
|
|
@@ -14,7 +15,7 @@ export const AIAssistant: React.FC = () => {
|
|
| 14 |
|
| 15 |
const [loading, setLoading] = useState(true);
|
| 16 |
const [isEnabled, setIsEnabled] = useState(false);
|
| 17 |
-
const [activeTab, setActiveTab] = useState<'chat' | 'assessment' | 'work'>('chat');
|
| 18 |
|
| 19 |
useEffect(() => {
|
| 20 |
checkStatus();
|
|
@@ -54,13 +55,16 @@ export const AIAssistant: React.FC = () => {
|
|
| 54 |
<div className="bg-white border-b border-gray-200 px-6 pt-4 flex justify-between shrink-0 shadow-sm z-10 overflow-x-auto">
|
| 55 |
<div className="flex gap-6 min-w-max">
|
| 56 |
<button onClick={() => setActiveTab('chat')} className={`pb-3 text-sm font-bold border-b-2 transition-colors flex items-center gap-2 ${activeTab === 'chat' ? 'border-blue-500 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
| 57 |
-
<Bot size={18} className={activeTab === 'chat' ? 'text-blue-500' : ''}/> AI 助教
|
| 58 |
</button>
|
| 59 |
<button onClick={() => setActiveTab('assessment')} className={`pb-3 text-sm font-bold border-b-2 transition-colors flex items-center gap-2 ${activeTab === 'assessment' ? 'border-purple-500 text-purple-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
| 60 |
-
<Mic size={18} className={activeTab === 'assessment' ? 'text-purple-500' : ''}/>
|
| 61 |
</button>
|
| 62 |
<button onClick={() => setActiveTab('work')} className={`pb-3 text-sm font-bold border-b-2 transition-colors flex items-center gap-2 ${activeTab === 'work' ? 'border-indigo-500 text-indigo-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
| 63 |
-
<Briefcase size={18} className={activeTab === 'work' ? 'text-indigo-500' : ''}/>
|
|
|
|
|
|
|
|
|
|
| 64 |
</button>
|
| 65 |
</div>
|
| 66 |
</div>
|
|
@@ -69,8 +73,10 @@ export const AIAssistant: React.FC = () => {
|
|
| 69 |
<ChatPanel currentUser={currentUser} />
|
| 70 |
) : activeTab === 'assessment' ? (
|
| 71 |
<AssessmentPanel currentUser={currentUser} />
|
| 72 |
-
) : (
|
| 73 |
<WorkAssistantPanel currentUser={currentUser} />
|
|
|
|
|
|
|
| 74 |
)}
|
| 75 |
</div>
|
| 76 |
);
|
|
|
|
| 2 |
import React, { useState, useEffect } from 'react';
|
| 3 |
import { api } from '../services/api';
|
| 4 |
import { UserRole } from '../types';
|
| 5 |
+
import { Bot, Mic, Loader2, Briefcase, HeartHandshake } from 'lucide-react';
|
| 6 |
import { AdminPanel } from '../components/ai/AdminPanel';
|
| 7 |
import { ChatPanel } from '../components/ai/ChatPanel';
|
| 8 |
import { AssessmentPanel } from '../components/ai/AssessmentPanel';
|
| 9 |
import { WorkAssistantPanel } from '../components/ai/WorkAssistantPanel';
|
| 10 |
+
import { CommentGeneratorPanel } from '../components/ai/CommentGeneratorPanel';
|
| 11 |
|
| 12 |
export const AIAssistant: React.FC = () => {
|
| 13 |
const currentUser = api.auth.getCurrentUser();
|
|
|
|
| 15 |
|
| 16 |
const [loading, setLoading] = useState(true);
|
| 17 |
const [isEnabled, setIsEnabled] = useState(false);
|
| 18 |
+
const [activeTab, setActiveTab] = useState<'chat' | 'assessment' | 'work' | 'comments'>('chat');
|
| 19 |
|
| 20 |
useEffect(() => {
|
| 21 |
checkStatus();
|
|
|
|
| 55 |
<div className="bg-white border-b border-gray-200 px-6 pt-4 flex justify-between shrink-0 shadow-sm z-10 overflow-x-auto">
|
| 56 |
<div className="flex gap-6 min-w-max">
|
| 57 |
<button onClick={() => setActiveTab('chat')} className={`pb-3 text-sm font-bold border-b-2 transition-colors flex items-center gap-2 ${activeTab === 'chat' ? 'border-blue-500 text-blue-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
| 58 |
+
<Bot size={18} className={activeTab === 'chat' ? 'text-blue-500' : ''}/> AI 助教
|
| 59 |
</button>
|
| 60 |
<button onClick={() => setActiveTab('assessment')} className={`pb-3 text-sm font-bold border-b-2 transition-colors flex items-center gap-2 ${activeTab === 'assessment' ? 'border-purple-500 text-purple-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
| 61 |
+
<Mic size={18} className={activeTab === 'assessment' ? 'text-purple-500' : ''}/> 测评
|
| 62 |
</button>
|
| 63 |
<button onClick={() => setActiveTab('work')} className={`pb-3 text-sm font-bold border-b-2 transition-colors flex items-center gap-2 ${activeTab === 'work' ? 'border-indigo-500 text-indigo-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
| 64 |
+
<Briefcase size={18} className={activeTab === 'work' ? 'text-indigo-500' : ''}/> 办公
|
| 65 |
+
</button>
|
| 66 |
+
<button onClick={() => setActiveTab('comments')} className={`pb-3 text-sm font-bold border-b-2 transition-colors flex items-center gap-2 ${activeTab === 'comments' ? 'border-amber-500 text-amber-600' : 'border-transparent text-gray-500 hover:text-gray-700'}`}>
|
| 67 |
+
<HeartHandshake size={18} className={activeTab === 'comments' ? 'text-amber-500' : ''}/> 评语
|
| 68 |
</button>
|
| 69 |
</div>
|
| 70 |
</div>
|
|
|
|
| 73 |
<ChatPanel currentUser={currentUser} />
|
| 74 |
) : activeTab === 'assessment' ? (
|
| 75 |
<AssessmentPanel currentUser={currentUser} />
|
| 76 |
+
) : activeTab === 'work' ? (
|
| 77 |
<WorkAssistantPanel currentUser={currentUser} />
|
| 78 |
+
) : (
|
| 79 |
+
<CommentGeneratorPanel currentUser={currentUser} />
|
| 80 |
)}
|
| 81 |
</div>
|
| 82 |
);
|