Browse Source

fix ncloud

lzy 1 year ago
parent
commit
f7e1a86a6c

+ 13 - 8
FilmDraw-app/src/app/tab3/tab3.page.html

@@ -12,14 +12,19 @@
           <ion-card-title>AI陪聊搭子</ion-card-title>
         </ion-card-header>
         <ion-card-content>
-          <div class="chat-partner-area">
-            <img src="assets/avatar.png" alt="头像" class="avatar" />
-            <div class="description">
-              <h2>小嫣</h2>
-              <p>欢迎与我聊天,分享你的想法和感受。</p>
-            </div>
-            <ion-button (click)="opendazi()">开始聊天</ion-button>
-          </div>
+          <ion-list>
+            <ion-item *ngFor="let filmpartner of filmpartnerList" lines="none">
+              <ion-thumbnail slot="start">
+                <img [src]="filmpartner.get('avatar')" [alt]="filmpartner.get('name')" />
+              </ion-thumbnail>
+              <div class="filmpartner-info">
+                <h3>{{ filmpartner.get('name') }}({{ filmpartner.get('age') }}岁)</h3>
+                <p>{{ filmpartner.get('desc') }},{{ filmpartner.get('depart')?.name }}</p>
+                <p>欢迎与我聊天,分享你追剧体验。</p>
+              </div>
+              <ion-button (click)="opendazi(filmpartner)">开始聊天</ion-button>
+            </ion-item>
+          </ion-list>
         </ion-card-content>
       </ion-card>
     </section>

+ 69 - 30
FilmDraw-app/src/app/tab3/tab3.page.ts

@@ -3,11 +3,14 @@ import { Router } from '@angular/router';
 import { CommonModule } from '@angular/common';
 import { IonHeader, IonToolbar, IonTitle, IonContent, ModalController, IonButton,
   IonCard, IonCardHeader, IonCardTitle, IonCardContent,
-  IonList, IonItem, IonLabel, IonAvatar, IonInput, IonIcon
+  IonList, IonItem, IonLabel, IonAvatar, IonInput, IonIcon,
+  IonThumbnail, 
  } from '@ionic/angular/standalone';
 import { ExploreContainerComponent } from '../explore-container/explore-container.component';
 import { ChatPanelOptions, FmChatModalInput, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng';
 // import { ModalAudioMessageComponent } from 'fmode-ng/lib/aigc/chat/chat-modal-input/modal-audio-message/modal-audio-message.component';
+// 引用设计的对象类和查询类
+import { CloudObject, CloudQuery } from 'src/lib/ncloud';
 
 @Component({
   selector: 'app-tab3',
@@ -21,7 +24,8 @@ import { ChatPanelOptions, FmChatModalInput, FmodeChat, FmodeChatMessage, openCh
     FmChatModalInput, 
     // ModalAudioMessageComponent
     CommonModule, IonCard, IonCardHeader, IonCardTitle, IonCardContent,
-  IonList, IonItem, IonLabel, IonAvatar, IonInput, IonIcon
+  IonList, IonItem, IonLabel, IonAvatar, IonInput, IonIcon, IonThumbnail,
+
   ]
 })
 export class Tab3Page {
@@ -48,23 +52,35 @@ export class Tab3Page {
 
   }
 
+
   /** 示例:问诊ChatPanel面板 */
-  opendazi(){
+  opendazi(filmpartner:CloudObject){
     localStorage.setItem("company","E4KpGvTEto")
+    
+    // let chat = new CloudObject("FilmChat")
+    // let now = new Date();
+    // let dateStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
+    
+    // consult.set({
+    //   title:`${doctor.get('depart')?.name || ""}门诊记录${dateStr}-${doctor?.get("name")}`,
+    //   doctor:doctor.toPointer(),
+    //   depart:doctor.get("depart")
+    // })
+    
     let options:ChatPanelOptions = {
       roleId:"2DXJkRsjXK",
       onChatInit:(chat:FmodeChat)=>{
         console.log("onChatInit");
               console.log("预设角色",chat.role);
-              chat.role.set("name","小嫣");
-              chat.role.set("age","20");
+              chat.role.set("name",filmpartner?.get("name"));
+              chat.role.set("age",filmpartner?.get("age"));
               chat.role.set("title","资深剧迷");
-              chat.role.set("desc","资深小剧迷  小嫣");
-              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("desc",filmpartner?.get("desc"));
+              // chat.role.set("tags",["全能","活泼开朗"]);
+              chat.role.set("avatar",filmpartner?.get("avatar") || "https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
               chat.role.set("prompt",`
 # 角色设定
-你是一名全能且活泼开朗的资深影视剧剧迷,小嫣,年龄22岁,需要完成一次轻松愉快的看剧感悟分享的陪聊服务。
+你是${filmpartner?.get("desc")},${filmpartner?.get("name")},年龄${filmpartner?.get("age")}岁,全能且活泼开朗,需要完成一次轻松愉快的看剧感悟分享的陪聊服务。
 
 # 对话环节
 1.开始话题(根据用户最近在看的影视剧,围绕具体情节、角色分析、剧情走向等陪用户聊天)
@@ -88,6 +104,12 @@ export class Tab3Page {
         if(typeof content == "string"){
           if(content?.indexOf("[完成]")>-1){
             console.log("陪聊已完成")
+
+            // chat.set({
+            //   dialogue:content // 处方内容
+            // })
+            // chat.save();
+
           }
         }
       },
@@ -99,31 +121,33 @@ export class Tab3Page {
     openChatPanelModal(this.modalCtrl,options)
   }
 
-  openChat(){
-    let options:ChatPanelOptions = {
-      roleId:"2DXJkRsjXK",
-      onChatSaved:(chat:FmodeChat)=>{
-        // chat?.chatSession?.id 本次会话的 chatId
+
+//   openChat(){
+//     let options:ChatPanelOptions = {
+//       roleId:"2DXJkRsjXK",
+//       onChatSaved:(chat:FmodeChat)=>{
+//         // chat?.chatSession?.id 本次会话的 chatId
       
-console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
+// console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
 
-      },
+//       },
 
-    }
-    openChatPanelModal(this.modalCtrl,options)
-  }
+//     }
+//     openChatPanelModal(this.modalCtrl,options)
+//   }
 
-  restoreChat(chatId:string){
-    let options:ChatPanelOptions = {
-      roleId:"2DXJkRsjXK",
-      chatId:chatId
-    }
-    openChatPanelModal(this.modalCtrl,options)
-  }
+//   restoreChat(chatId:string){
+//     let options:ChatPanelOptions = {
+//       roleId:"2DXJkRsjXK",
+//       chatId:chatId
+//     }
+//     openChatPanelModal(this.modalCtrl,options)
+//   }
+
+//   goChat(){
+//     this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
+//   }
 
-  goChat(){
-    this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
-  }
 
 
   // audioModalHeightPoint:number = 0.35;
@@ -148,4 +172,19 @@ console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
   //   modal.present();
   // }
 
-}
+
+
+  ngOnInit() {
+    // 生命周期:页面加载后,运行医生列表加载函数
+    this.loadFilmPartnerList()
+  }
+
+  // 创建用于数据列表存储的属性
+  filmpartnerList:Array<CloudObject> = []
+  // 查询并加载列表的函数
+  async loadFilmPartnerList(){
+    let query = new CloudQuery("FilmPartner");
+    this.filmpartnerList = await query.find()
+  }
+}
+

+ 193 - 0
FilmDraw-app/src/lib/ncloud.ts

@@ -0,0 +1,193 @@
+export class CloudObject {
+    className: string;
+    id: string | null = null;
+    createdAt:any;
+    updatedAt:any;
+    data: Record<string, any> = {};
+
+    constructor(className: string) {
+        this.className = className;
+    }
+
+    toPointer() {
+        return { "__type": "Pointer", "className": this.className, "objectId": this.id };
+    }
+
+    set(json: Record<string, any>) {
+        Object.keys(json).forEach(key => {
+            if (["objectId", "id", "createdAt", "updatedAt", "ACL"].indexOf(key) > -1) {
+                return;
+            }
+            this.data[key] = json[key];
+        });
+    }
+
+    get(key: string) {
+        return this.data[key] || null;
+    }
+
+    async save() {
+        let method = "POST";
+        let url = `http://dev.fmode.cn:1337/parse/classes/${this.className}`;
+
+        // 更新
+        if (this.id) {
+            url += `/${this.id}`;
+            method = "PUT";
+        }
+
+        const body = JSON.stringify(this.data);
+        const response = await fetch(url, {
+            headers: {
+                "content-type": "application/json;charset=UTF-8",
+                "x-parse-application-id": "dev"
+            },
+            body: body,
+            method: method,
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const result = await response?.json();
+        if (result?.error) {
+            console.error(result?.error);
+        }
+        if (result?.objectId) {
+            this.id = result?.objectId;
+        }
+        return this;
+    }
+
+    async destroy() {
+        if (!this.id) return;
+        const response = await fetch(`http://dev.fmode.cn:1337/parse/classes/${this.className}/${this.id}`, {
+            headers: {
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "DELETE",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const result = await response?.json();
+        if (result) {
+            this.id = null;
+        }
+        return true;
+    }
+}
+
+// CloudQuery.ts
+export class CloudQuery {
+    className: string;
+    whereOptions: Record<string, any> = {};
+
+    constructor(className: string) {
+        this.className = className;
+    }
+
+    greaterThan(key: string, value: any) {
+        if (!this.whereOptions[key]) this.whereOptions[key] = {};
+        this.whereOptions[key]["$gt"] = value;
+    }
+
+    greaterThanAndEqualTo(key: string, value: any) {
+        if (!this.whereOptions[key]) this.whereOptions[key] = {};
+        this.whereOptions[key]["$gte"] = value;
+    }
+
+    lessThan(key: string, value: any) {
+        if (!this.whereOptions[key]) this.whereOptions[key] = {};
+        this.whereOptions[key]["$lt"] = value;
+    }
+
+    lessThanAndEqualTo(key: string, value: any) {
+        if (!this.whereOptions[key]) this.whereOptions[key] = {};
+        this.whereOptions[key]["$lte"] = value;
+    }
+
+    equalTo(key: string, value: any) {
+        this.whereOptions[key] = value;
+    }
+
+    async get(id: string) {
+        const url = `http://dev.fmode.cn:1337/parse/classes/${this.className}/${id}?`;
+
+        const response = await fetch(url, {
+            headers: {
+                "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "GET",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const json = await response?.json();
+        return json || {};
+    }
+
+    async find() {
+        let url = `http://dev.fmode.cn:1337/parse/classes/${this.className}?`;
+
+        if (Object.keys(this.whereOptions).length) {
+            const whereStr = JSON.stringify(this.whereOptions);
+            url += `where=${whereStr}`;
+        }
+
+        const response = await fetch(url, {
+            headers: {
+                "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "GET",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const json = await response?.json();
+        let list = json?.results || []
+        let objList = list.map((item:any)=>this.dataToObj(item))
+        return objList || [];
+    }
+
+    async first() {
+        let url = `http://dev.fmode.cn:1337/parse/classes/${this.className}?`;
+
+        if (Object.keys(this.whereOptions).length) {
+            const whereStr = JSON.stringify(this.whereOptions);
+            url += `where=${whereStr}`;
+        }
+
+        const response = await fetch(url, {
+            headers: {
+                "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
+                "x-parse-application-id": "dev"
+            },
+            body: null,
+            method: "GET",
+            mode: "cors",
+            credentials: "omit"
+        });
+
+        const json = await response?.json();
+        const exists = json?.results?.[0] || null;
+        if (exists) {
+            let existsObject = this.dataToObj(exists)
+            return existsObject;
+        }
+        return null
+    }
+
+    dataToObj(exists:any):CloudObject{
+        let existsObject = new CloudObject(this.className);
+        existsObject.set(exists);
+        existsObject.id = exists.objectId;
+        existsObject.createdAt = exists.createdAt;
+        existsObject.updatedAt = exists.updatedAt;
+        return existsObject;
+    }
+}

+ 14 - 3
FilmDraw-prod/UML.md

@@ -57,14 +57,25 @@ objectId: String (默认)
 createdAt: Date (默认)
 film: Pointer
 name: String
-description: String
+avater: String
+desc: String
 roleTraits: Array
 
-4.FilmChat表
+4.FilmPartner表
+objectId: String (默认)
+createdAt: Date (默认)
+name: String
+age: Number
+avater: String
+desc: String
+
+
+5.FilmChat表
 objectId: String (默认)
 createdAt: Date (默认)
 user: Pointer
-character: Pointer
+filmrole: Pointer
+filmpartner: Pointer
 dialogue: String
 timestamp: Date
 ```

+ 1 - 0
FilmDraw-server/migration/data.js

@@ -0,0 +1 @@
+