Browse Source

Merge branch 'master' of http://git.fmode.cn:3000/csdn1233/s202226701049

未来全栈 3 months ago
parent
commit
f268e19115

+ 71 - 0
AIart-app/src/app/interest-search/interest-search.component.html

@@ -0,0 +1,71 @@
+<ion-header [translucent]="true">
+  <ion-toolbar>
+    <ion-title style="font-family: 'Courier New', Courier, monospace;">
+      <span style="font-weight: bold;">调查问卷</span>
+    </ion-title>
+  </ion-toolbar>
+</ion-header>
+
+<ion-content color="light">
+  <ion-list [inset]="true">
+    <ion-item>
+      <ion-label>一、基本情况</ion-label>
+    </ion-item>
+    <ion-item>
+      <ion-input label="姓名"></ion-input>
+    </ion-item>
+    <ion-item>
+      <span style="margin-right: 30px;">生日</span>
+      <ion-datetime-button datetime="datetime"></ion-datetime-button>
+      <ion-modal [keepContentsMounted]="true">
+        <ng-template>
+          <ion-datetime id="datetime"></ion-datetime>
+        </ng-template>
+      </ion-modal>
+    </ion-item>
+  </ion-list>
+
+  <ion-list [inset]="true">
+    <ion-item>
+      <ion-label>二、工作状况</ion-label>
+    </ion-item>
+    <p style="margin-left: 15px;">工作几年?</p>
+    <ion-radio-group [allowEmptySelection]="true" value="turtles">
+      <ion-radio value="1年-3年" labelPlacement="end" aria-label="Custom checkbox">1年-3年</ion-radio><br />
+      <ion-radio value="3年-5年" labelPlacement="end" aria-label="Custom checkbox">3年-5年</ion-radio><br />
+      <ion-radio value="5年以上" labelPlacement="end" aria-label="Custom checkbox">5年以上</ion-radio><br />
+    </ion-radio-group>
+    <p style="margin-left: 15px;">从事什么职业?</p>
+    <ion-radio-group [allowEmptySelection]="true" value="turtles">
+      <ion-radio value="前端开发" labelPlacement="end" aria-label="Custom checkbox">前端开发</ion-radio><br />
+      <ion-radio value="后端开发" labelPlacement="end" aria-label="Custom checkbox">后端开发</ion-radio><br />
+      <ion-radio value="测试" labelPlacement="end" aria-label="Custom checkbox">测试</ion-radio><br />
+      <ion-radio value="产品经理" labelPlacement="end" aria-label="Custom checkbox">产品经理</ion-radio><br />
+      <ion-radio value="其他" labelPlacement="end" aria-label="Custom checkbox">其他</ion-radio><br />
+      <br />
+    </ion-radio-group>
+  </ion-list>
+
+  <ion-list [inset]="true">
+    <ion-item>
+      <ion-label>三、其他情况</ion-label>
+    </ion-item>
+    <p style="margin-left: 15px;">是否喜欢吃水果?</p>
+    <ion-radio-group [allowEmptySelection]="true" value="turtles">
+      <ion-radio value="是" labelPlacement="end" aria-label="Custom checkbox">是</ion-radio><br />
+      <ion-radio value="否" labelPlacement="end" aria-label="Custom checkbox">否</ion-radio><br />
+    </ion-radio-group>
+    <p style="margin-left: 15px;">喜欢什么运动?</p>
+    <ion-radio-group [allowEmptySelection]="true" value="turtles">
+      <ion-radio value="篮球" labelPlacement="end" aria-label="Custom checkbox">篮球</ion-radio><br />
+      <ion-radio value="足球" labelPlacement="end" aria-label="Custom checkbox">足球</ion-radio><br />
+      <ion-radio value="羽毛球" labelPlacement="end" aria-label="Custom checkbox">羽毛球</ion-radio><br />
+      <ion-radio value="其他" labelPlacement="end" aria-label="Custom checkbox">其他</ion-radio><br />
+      <br />
+    </ion-radio-group>
+  </ion-list>
+  <div style="display: flex;justify-content: space-between;align-items: center;margin: 0 15px 0 15px;">
+    <ion-button style="width: 45%;">保存</ion-button>
+    <ion-button style="width: 45%;">提交</ion-button>
+  </div>
+</ion-content>

+ 45 - 0
AIart-app/src/app/interest-search/interest-search.component.scss

@@ -0,0 +1,45 @@
+ion-checkbox {
+    margin-left: 15px;
+    --size: 20px;
+    --checkbox-background-checked: #1455ce;
+}
+
+ion-checkbox::part(container) {
+    border-radius: 6px;
+    border: 2px solid #1455ce;
+}
+
+
+
+
+ion-radio::part(container) {
+    width: 20px;
+    height: 20px;
+    margin-left: 15px;
+    border-radius: 6px;
+    border: 2px solid #ddd;
+    --checkbox-background-checked: #1455ce;
+}
+
+ion-radio::part(mark) {
+    background: none;
+    transition: none;
+    transform: none;
+    border-radius: 0;
+}
+
+ion-radio.radio-checked::part(container) {
+    background: #1455ce;
+    border-color: transparent;
+}
+
+ion-radio.radio-checked::part(mark) {
+    width: 6px;
+    height: 10px;
+
+    border-width: 0px 2px 2px 0px;
+    border-style: solid;
+    border-color: #fff;
+
+    transform: rotate(45deg);
+}

+ 22 - 0
AIart-app/src/app/interest-search/interest-search.component.spec.ts

@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
+
+import { InterestSearchComponent } from './interest-search.component';
+
+describe('InterestSearchComponent', () => {
+  let component: InterestSearchComponent;
+  let fixture: ComponentFixture<InterestSearchComponent>;
+
+  beforeEach(waitForAsync(() => {
+    TestBed.configureTestingModule({
+      imports: [InterestSearchComponent],
+    }).compileComponents();
+
+    fixture = TestBed.createComponent(InterestSearchComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  }));
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 21 - 0
AIart-app/src/app/interest-search/interest-search.component.ts

@@ -0,0 +1,21 @@
+import { Component, OnInit } from '@angular/core';
+import { IonTextarea, IonCheckbox, IonList, IonButton, IonContent, IonHeader, IonInput, IonTitle, IonToolbar, IonItem, IonLabel, IonRadioGroup, IonRadio, IonDatetimeButton, IonDatetime, IonModal } from '@ionic/angular/standalone';
+
+@Component({
+  selector: 'app-interest-search',
+  templateUrl: './interest-search.component.html',
+  styleUrls: ['./interest-search.component.scss'],
+  standalone: true,
+  imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonTextarea, IonInput,
+    IonList, IonItem, IonLabel, IonCheckbox, IonRadioGroup, IonRadio, IonDatetimeButton,
+    IonDatetime, IonModal
+  ],
+})
+export class InterestSearchComponent implements OnInit {
+
+  constructor() {
+  }
+
+  ngOnInit() { }
+
+}

+ 1 - 1
AIart-app/src/app/tab1/tab1.page.html

@@ -26,7 +26,7 @@
             <ion-label>首页</ion-label>
           </ion-tab-button>
           <ion-tab-button tab="psychology">
-            <ion-label>心理成长区</ion-label>
+            <ion-label tab="search" (click)="goToInterestSearch()">兴趣调查</ion-label>
           </ion-tab-button>
           <ion-tab-button tab="course">
             <ion-label>课程</ion-label>

+ 3 - 0
AIart-app/src/app/tab1/tab1.page.ts

@@ -30,4 +30,7 @@ export class Tab1Page {
   goToInterestPicture() {
     this.router.navigate(['/tabs/interest-picture'])
   }
+  goToInterestSearch() {
+    this.router.navigate(['/tabs/interest-search'])
+  }
 }

+ 2 - 2
AIart-app/src/app/tab4/tab4.page.html

@@ -13,7 +13,7 @@
   <h1>组件:直接弹出的聊天组件</h1>
   <ion-button (click)="openChat()">开始新聊天</ion-button>
   <ion-button (click)="restoreChat('yHEHqMQDNv')">恢复会话</ion-button>
-  <h1>示例:门诊问诊的智能体示例(ChatPanel组件)</h1>
-  <ion-button (click)="openInquiry()">进入门诊</ion-button>
+  <h1>示例:兴趣分析的智能体示例(ChatPanel组件)</h1>
+  <ion-button (click)="openInquiry()">进入兴趣分析</ion-button>
 
 </ion-content>

+ 19 - 20
AIart-app/src/app/tab4/tab4.page.ts

@@ -28,39 +28,38 @@ export class tab4Page {
       onChatInit: (chat: FmodeChat) => {
         console.log("onChatInit");
         console.log("预设角色", chat.role);
-        chat.role.set("name", "晓晓");
-        chat.role.set("title", "全科医生");
-        chat.role.set("desc", "一名亲切和蔼的门诊全科主任医生,晓晓,年龄36岁");
-        chat.role.set("tags", ["全科", "门诊"]);
+        chat.role.set("name", "明明");
+        chat.role.set("title", "兴趣学习规划师");
+        chat.role.set("desc", "一位经验丰富且极具热情的兴趣学习规划师,明明,年龄 32 岁,擅长根据学生的特点与需求制定个性化学习规划。");
+        chat.role.set("tags", ["兴趣学习规划", "个性化方案"]);
         chat.role.set("avatar", "https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
         chat.role.set("prompt", `
 # 角色设定
-您是一名亲切和蔼的专业的全科医生,晓晓,年龄36岁,需要完成一次完整的门诊服务
+您是一位经验丰富且极具热情的兴趣学习规划师,明明,年龄 32 岁,需要为学生制定个性化的兴趣学习规划
 
 # 对话环节
-0.导诊(根据用户基本情况,引导挂号合适的科室)
-1.预设的问询方式(感冒问呼吸、肚子疼叩诊)
-- 打招呼,以用户自述为主
-- 当信息充足时候,确认用户症状对应的科室,并进入下一个环节
-2.拓展的问询细节
-例如:用户反映呼吸不畅,拓展出:是否咳嗽;是否感觉痛或者痒等其他需要的问题。
-- 当问询细节补充完成后进入下一个环节
-3.初步的诊断结果,并且同时列出检查检验项目
-初步诊断:确定需要有哪些进一步检查
-检查检验:获取医学客观数据
-- 等待用户提交客观数据,进入下一阶段
-4.给出诊断方案并给出处方
-- 完成处方时,请在消息结尾附带: [完成]
+0. 需求了解(与学生沟通,了解学生基本情况与兴趣方向)
+- 打招呼,以学生自述为主
+- 当获取到学生基本信息及兴趣倾向后,进入下一个环节
+1. 兴趣挖掘与拓展
+例如:学生提及对绘画有兴趣,拓展出:喜欢哪种绘画风格;是否有过绘画基础;是否参加过绘画比赛等相关问题。
+- 当兴趣挖掘与拓展完成后进入下一个环节
+2. 学习规划制定
+根据学生情况制定包括学习目标、学习资源、学习进度安排等在内的兴趣学习规划。
+- 等待学生反馈意见,进入下一阶段
+3. 规划调整与完善
+根据反馈对学习规划进行调整优化,并给出最终的详细规划方案。
+- 完成规划方案时,请在消息结尾附带: [完成]
 
 # 开始话语
-当您准备好了,可以以一个医生的身份,向来访的用户打招呼。`);
+当您准备好了,可以以一个兴趣学习规划师的身份,向来访的学生打招呼。`);
       },
       onMessage: (chat: FmodeChat, message: FmodeChatMessage) => {
         console.log("onMessage", message)
         let content: any = message?.content
         if (typeof content == "string") {
           if (content?.indexOf("[完成]") > -1) {
-            console.log("门诊已完成")
+            console.log("兴趣分析已完成")
           }
         }
       },

+ 5 - 0
AIart-app/src/app/tabs/tabs.routes.ts

@@ -46,6 +46,11 @@ export const routes: Routes = [
         loadComponent: () =>
           import('../interest-picture/interest-picture.component').then((m) => m.InterestPictureComponent),
       },
+      {
+        path: 'interest-search',
+        loadComponent: () =>
+          import('../interest-search/interest-search.component').then((m) => m.InterestSearchComponent),
+      },
       {
         path: '',
         redirectTo: '/tabs/tab1',

+ 1 - 1
AIart-app/src/app/view-all/view-all.component.html

@@ -1,3 +1,3 @@
 <p>
   view-all works!
-</p>
+</p>

+ 2 - 2
AIart-app/src/app/view-all/view-all.component.ts

@@ -6,10 +6,10 @@ import { Component, OnInit } from '@angular/core';
   styleUrls: ['./view-all.component.scss'],
   standalone: true,
 })
-export class ViewAllComponent  implements OnInit {
+export class ViewAllComponent implements OnInit {
 
   constructor() { }
 
-  ngOnInit() {}
+  ngOnInit() { }
 
 }