0235477 před 3 dny
rodič
revize
2774445c31
28 změnil soubory, kde provedl 208 přidání a 11 odebrání
  1. 1 0
      .gitignore
  2. 0 0
      REDEME.md
  3. 0 2
      ai-interview/src/app/app.config.ts
  4. 4 0
      ai-interview/src/app/app.routes.ts
  5. 0 2
      ai-interview/src/app/material.provider.ts
  6. 1 0
      ai-interview/src/moudles/interviewee/interviewee-home/interviewee-home.html
  7. 1 0
      ai-interview/src/moudles/interviewee/interviewee-home/interviewee-home.ts
  8. 1 0
      ai-interview/src/moudles/interviewee/interviewee-interview/interviewee-interview.html
  9. 1 0
      ai-interview/src/moudles/interviewee/interviewee-interview/interviewee-interview.ts
  10. 1 0
      ai-interview/src/moudles/interviewee/interviewee-mine/interviewee-mine.html
  11. 1 0
      ai-interview/src/moudles/interviewee/interviewee-mine/interviewee-mine.ts
  12. 1 1
      ai-interview/src/moudles/interviewee/interviewee.routes.ts
  13. 17 2
      ai-interview/src/moudles/interviewee/nav-interviewee-tabs/nav-interviewee-tabs.html
  14. 30 0
      ai-interview/src/moudles/interviewee/nav-interviewee-tabs/nav-interviewee-tabs.scss
  15. 20 4
      ai-interview/src/moudles/interviewee/nav-interviewee-tabs/nav-interviewee-tabs.ts
  16. 1 0
      ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.html
  17. 0 0
      ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.scss
  18. 23 0
      ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.spec.ts
  19. 11 0
      ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.ts
  20. 1 0
      ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.html
  21. 0 0
      ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.scss
  22. 23 0
      ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.spec.ts
  23. 11 0
      ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.ts
  24. 24 0
      ai-interview/src/moudles/interviewer/interviewer.routes.ts
  25. 1 0
      ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.html
  26. 0 0
      ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.scss
  27. 23 0
      ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.spec.ts
  28. 11 0
      ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.ts

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+node_modules/

+ 0 - 0
REDEME.md


+ 0 - 2
ai-interview/src/app/app.config.ts

@@ -1,13 +1,11 @@
 import { ApplicationConfig } from '@angular/core';
 import { provideRouter } from '@angular/router';
-import { provideAnimations } from '@angular/platform-browser/animations';
 import { provideMaterial } from './material.provider';
 import { routes } from './app.routes';
 
 export const appConfig: ApplicationConfig = {
   providers: [
     provideRouter(routes),
-    provideAnimations(),
     provideMaterial(),
     // 其他 providers...
   ]

+ 4 - 0
ai-interview/src/app/app.routes.ts

@@ -5,5 +5,9 @@ export const routes: Routes = [
     path: 'interviewee',
     loadChildren: () => import('../moudles/interviewee/interviewee.routes').then(m => m.intervieweeRoutes),
   },
+  {
+    path:'interviewer',
+    loadChildren: () => import('../moudles/interviewer/interviewer.routes').then(m => m.interviewerRoutes),
+  }
   // 其他路由...
 ];

+ 0 - 2
ai-interview/src/app/material.provider.ts

@@ -1,11 +1,9 @@
 import { ApplicationConfig } from '@angular/core';
-import { provideAnimations } from '@angular/platform-browser/animations';
 import { provideNativeDateAdapter } from '@angular/material/core';
 import { MAT_TABS_CONFIG, MatTabsConfig } from '@angular/material/tabs';
 
 export function provideMaterial() {
   return [
-    provideAnimations(),
     provideNativeDateAdapter(),
     // 配置 Material 组件
     {

+ 1 - 0
ai-interview/src/moudles/interviewee/interviewee-home/interviewee-home.html

@@ -1 +1,2 @@
 <p>interviewee-home works!</p>
+<router-outlet />

+ 1 - 0
ai-interview/src/moudles/interviewee/interviewee-home/interviewee-home.ts

@@ -4,6 +4,7 @@ import { RouterOutlet } from '@angular/router';
 @Component({
   selector: 'app-interviewee-home',
   imports: [RouterOutlet],
+  standalone: true,
   templateUrl: './interviewee-home.html',
   styleUrl: './interviewee-home.scss'
 })

+ 1 - 0
ai-interview/src/moudles/interviewee/interviewee-interview/interviewee-interview.html

@@ -1 +1,2 @@
 <p>interviewee-interview works!</p>
+<router-outlet />

+ 1 - 0
ai-interview/src/moudles/interviewee/interviewee-interview/interviewee-interview.ts

@@ -4,6 +4,7 @@ import { RouterOutlet } from '@angular/router';
 @Component({
   selector: 'app-interviewee-interview',
   imports: [RouterOutlet],
+  standalone: true,
   templateUrl: './interviewee-interview.html',
   styleUrl: './interviewee-interview.scss'
 })

+ 1 - 0
ai-interview/src/moudles/interviewee/interviewee-mine/interviewee-mine.html

@@ -1 +1,2 @@
 <p>interviewee-mine works!</p>
+<router-outlet />

+ 1 - 0
ai-interview/src/moudles/interviewee/interviewee-mine/interviewee-mine.ts

@@ -4,6 +4,7 @@ import { RouterOutlet } from '@angular/router';
 @Component({
   selector: 'app-interviewee-mine',
   imports: [RouterOutlet],
+  standalone: true,
   templateUrl: './interviewee-mine.html',
   styleUrl: './interviewee-mine.scss'
 })

+ 1 - 1
ai-interview/src/moudles/interviewee/interviewee.routes.ts

@@ -12,7 +12,7 @@ export const intervieweeRoutes: Routes = [
       },
       {
         path: 'interview',
-        loadComponent: () => import('./interviewee-interview/interviewee-interview').then(m => m.IntervieweeInterview),
+        loadComponent: () => import('./interviewee-interview/interviewee-interview').then(m=>m.IntervieweeInterview)
       },
       {
         path: 'mine',

+ 17 - 2
ai-interview/src/moudles/interviewee/nav-interviewee-tabs/nav-interviewee-tabs.html

@@ -1,2 +1,17 @@
-<p>nav-interviewee-tabs works!</p>
-<router-outlet />
+<!-- nav-interviewee-tabs.html -->
+<div class="tabs-container">
+  <mat-tab-nav-panel #tabPanel>
+    <router-outlet></router-outlet>
+  </mat-tab-nav-panel>
+</div>
+
+<nav mat-tab-nav-bar [tabPanel]="tabPanel" class="tabs-nav">
+  <a mat-tab-link
+     *ngFor="let tab of tabs"
+     [routerLink]="tab.path"
+     routerLinkActive #rla="routerLinkActive"
+     [active]="rla.isActive">
+    <mat-icon>{{ tab.icon }}</mat-icon>
+    <span>{{ tab.label }}</span>
+  </a>
+</nav>

+ 30 - 0
ai-interview/src/moudles/interviewee/nav-interviewee-tabs/nav-interviewee-tabs.scss

@@ -0,0 +1,30 @@
+ :host {
+      display: flex;
+      flex-direction: column;
+      height: 100%;
+    }
+    .tabs-container {
+      flex: 1;
+      overflow-y: auto;
+    }
+    .tabs-nav {
+      display: flex;
+      justify-content: space-around;
+      background: white;
+      border-top: 1px solid #e0e0e0;
+    }
+    a[mat-tab-link] {
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      min-width: 80px;
+      padding: 8px 12px;
+      opacity: 0.6;
+    }
+    a[mat-tab-link][active] {
+      opacity: 1;
+    }
+    mat-icon {
+      margin-bottom: 4px;
+    }

+ 20 - 4
ai-interview/src/moudles/interviewee/nav-interviewee-tabs/nav-interviewee-tabs.ts

@@ -1,12 +1,28 @@
+// nav-interviewee-tabs.ts
 import { Component } from '@angular/core';
-import { RouterOutlet } from '@angular/router';
+import { CommonModule } from '@angular/common';
+import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
+import { MatTabsModule } from '@angular/material/tabs';
+import { MatIconModule } from '@angular/material/icon';
 
 @Component({
   selector: 'app-nav-interviewee-tabs',
-  imports: [RouterOutlet],
+  standalone: true,
+  imports: [
+    CommonModule,
+    RouterOutlet,
+    RouterLink,
+    RouterLinkActive,
+    MatTabsModule,
+    MatIconModule
+  ],
   templateUrl: './nav-interviewee-tabs.html',
   styleUrl: './nav-interviewee-tabs.scss'
 })
 export class NavIntervieweeTabs {
-
-}
+  tabs = [
+    { path: 'home', label: '首页', icon: 'home' },
+    { path: 'interview', label: '面试', icon: 'assignment' },
+    { path: 'mine', label: '我的', icon: 'person' },
+  ];
+}

+ 1 - 0
ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.html

@@ -0,0 +1 @@
+<p>interviewer-home works!</p>

+ 0 - 0
ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.scss


+ 23 - 0
ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.spec.ts

@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { InterviewerHome } from './interviewer-home';
+
+describe('InterviewerHome', () => {
+  let component: InterviewerHome;
+  let fixture: ComponentFixture<InterviewerHome>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [InterviewerHome]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(InterviewerHome);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 11 - 0
ai-interview/src/moudles/interviewer/interviewer-home/interviewer-home.ts

@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-interviewer-home',
+  imports: [],
+  templateUrl: './interviewer-home.html',
+  styleUrl: './interviewer-home.scss'
+})
+export class InterviewerHome {
+
+}

+ 1 - 0
ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.html

@@ -0,0 +1 @@
+<p>interviewer-mine works!</p>

+ 0 - 0
ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.scss


+ 23 - 0
ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.spec.ts

@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { InterviewerMine } from './interviewer-mine';
+
+describe('InterviewerMine', () => {
+  let component: InterviewerMine;
+  let fixture: ComponentFixture<InterviewerMine>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [InterviewerMine]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(InterviewerMine);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 11 - 0
ai-interview/src/moudles/interviewer/interviewer-mine/interviewer-mine.ts

@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-interviewer-mine',
+  imports: [],
+  templateUrl: './interviewer-mine.html',
+  styleUrl: './interviewer-mine.scss'
+})
+export class InterviewerMine {
+
+}

+ 24 - 0
ai-interview/src/moudles/interviewer/interviewer.routes.ts

@@ -0,0 +1,24 @@
+import { Routes } from '@angular/router';
+import { NavInterviewerTabs } from './nav-interviewer-tabs/nav-interviewer-tabs';
+
+export const interviewerRoutes: Routes = [
+  {
+    path: '',
+    component: NavInterviewerTabs,
+    children: [
+      {
+        path: 'home',
+        loadComponent: () => import('./interviewer-home/interviewer-home').then(m => m.InterviewerHome),
+      },
+      {
+        path: 'mine',
+        loadComponent: () => import('./interviewer-mine/interviewer-mine').then(m => m.InterviewerMine),
+      },
+      {
+        path: '',
+        redirectTo: 'home',
+        pathMatch: 'full',
+      },
+    ],
+  },
+];

+ 1 - 0
ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.html

@@ -0,0 +1 @@
+<p>nav-interviewer-tabs works!</p>

+ 0 - 0
ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.scss


+ 23 - 0
ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.spec.ts

@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { NavInterviewerTabs } from './nav-interviewer-tabs';
+
+describe('NavInterviewerTabs', () => {
+  let component: NavInterviewerTabs;
+  let fixture: ComponentFixture<NavInterviewerTabs>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [NavInterviewerTabs]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(NavInterviewerTabs);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 11 - 0
ai-interview/src/moudles/interviewer/nav-interviewer-tabs/nav-interviewer-tabs.ts

@@ -0,0 +1,11 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-nav-interviewer-tabs',
+  imports: [],
+  templateUrl: './nav-interviewer-tabs.html',
+  styleUrl: './nav-interviewer-tabs.scss'
+})
+export class NavInterviewerTabs {
+
+}