Sfoglia il codice sorgente

update 用户状态

warrior 4 mesi fa
parent
commit
07659514d8

+ 4 - 1
projects/live-app/src/moduls/tabs/home/home.component.ts

@@ -160,7 +160,10 @@ export class HomeComponent implements OnInit {
     if (!type) type = this.currentValue;
     let uid = Parse.User.current()?.id;
     let sex = this.viewAnchor == 'all' ? null : this.viewAnchor;
-    const userList = this.connectTask.onlineUserList;
+    if(!this.connectTask.onlineUserList.size){
+      await this.connectTask.getOnlieUserList('user_connect_room')
+    }
+    const userList = Array.from(this.connectTask.onlineUserList)
     console.log(userList);
     switch (type) {
       case 'follow':

+ 28 - 22
projects/live-app/src/moduls/tabs/my/my.component.html

@@ -12,9 +12,7 @@
       <div class="user-right">
         <div class="user-name">
           {{
-            user.get("nickname") ||
-              user.get("mobile") ||
-              user.get("username")
+            user.get("nickname") || user.get("mobile") || user.get("username")
           }}
         </div>
         <div class="user-block">
@@ -37,12 +35,14 @@
             </div>
             <div class="id">ID:{{ user.id }}</div>
           </div>
-          <div class="btn" (click)="toUrl('user/profile/'+user.id)">个人主页</div>
+          <div class="btn" (click)="toUrl('user/profile/' + user.id)">
+            个人主页
+          </div>
         </div>
         <div class="user-footer">
-          <div class="row">{{userObj.fans}} 粉丝</div>
-          <div class="row">{{userObj.follow}} 关注</div>
-          <div class="row">{{userObj.friendly_degree}} 亲密度</div>
+          <div class="row">{{ userObj.fans }} 粉丝</div>
+          <div class="row">{{ userObj.follow }} 关注</div>
+          <div class="row">{{ userObj.friendly_degree }} 亲密度</div>
         </div>
       </div>
     </div>
@@ -73,14 +73,14 @@
           <div class="user-block">
             <div class="user-avatar">
               <img src="/img/2.png" alt="" class="tag" />
-              <img [src]="user.get('avatar')" class="avatar" alt="" />
+              <img [src]="orderList[1]?.avatar" class="avatar" alt="" />
             </div>
             <div class="user-name">
-              {{ user.get("name") }}
+              {{ orderList[1]?.nickname }}
             </div>
           </div>
           <div class="user-detail">
-            <div class="num">7.66</div>
+            <div class="num">{{ orderList[1]?.credit }}</div>
             <div class="pm">TOP2</div>
           </div>
         </div>
@@ -88,44 +88,46 @@
           <div class="user-block">
             <div class="user-avatar">
               <img src="/img/2.png" alt="" class="tag" />
-              <img [src]="user.get('avatar')" class="avatar" alt="" />
+              <img [src]="orderList[0]?.avatar" class="avatar" alt="" />
             </div>
             <div class="user-name">
-              {{ user.get("name") }}
+              {{ orderList[0]?.nickname }}
             </div>
           </div>
           <div class="user-detail">
-            <div class="num">7.66</div>
-            <div class="pm">TOP1</div>
+            <div class="num">{{ orderList[0]?.credit }}</div>
+            <div class="pm">TOP2</div>
           </div>
         </div>
         <div class="top3">
           <div class="user-block">
             <div class="user-avatar">
               <img src="/img/2.png" alt="" class="tag" />
-              <img [src]="user.get('avatar')" class="avatar" alt="" />
+              <img [src]="orderList[2]?.avatar" class="avatar" alt="" />
             </div>
             <div class="user-name">
-              {{ user.get("name") }}
+              {{ orderList[2]?.nickname }}
             </div>
           </div>
           <div class="user-detail">
-            <div class="num">7.66</div>
+            <div class="num">{{ orderList[2]?.credit }}</div>
             <div class="pm">TOP2</div>
           </div>
         </div>
       </div>
     </div>
-    @for (item of [user,user]; track $index) {
+    @for (item of orderList.slice(2,4); track $index) {
     <div class="row">
       <div class="row-left">
         <span class="row-index">4</span>
-        <img [src]="item?.get('avatar')" alt="" class="row-avatar" />
-        <div class="row-name">{{ item?.get("name") }}</div>
+        <img [src]="item.avatar" alt="" class="row-avatar" />
+        <div class="row-name">{{ item?.nickname }}</div>
       </div>
       <div class="row-right">
         <div class="row-tpis">距离第一名</div>
-        <div class="row-tpis-num">3.5w <span></span></div>
+        <div class="row-tpis-num">
+          {{ item.credit - orderList[0].credit }}<span></span>
+        </div>
       </div>
     </div>
     }
@@ -137,7 +139,11 @@
           <ion-icon name="remove-circle-outline"></ion-icon>
           勿扰开关
         </div>
-        <ion-toggle [checked]="profile?.get('isCheck')" (ionChange)="onChange($event)" color="tertiary"></ion-toggle>
+        <ion-toggle
+          [checked]="profile?.get('isCheck')"
+          (ionChange)="onChange($event)"
+          color="tertiary"
+        ></ion-toggle>
       </div>
     </div>
     <div class="list">

+ 4 - 1
projects/live-app/src/moduls/tabs/my/my.component.ts

@@ -61,6 +61,7 @@ export class MyComponent implements OnInit {
     follow: 0,
     friendly_degree: 0,
   };
+  orderList:Array<any> = [];
   ngOnInit() {
     this.activateRoute.paramMap.subscribe(async (params) => {
       this.refresh();
@@ -71,7 +72,9 @@ export class MyComponent implements OnInit {
     this.getProfile();
     this.getAgreement();
     const data = await this.aiServ.getFansAndFollow(this.user.id);
-    console.log(data);
+    // console.log(data);
+    this.orderList = await this.aiServ.getOrderAnchor()
+    console.log(this.orderList);
     const { fans, follow } = data.data[0]
     this.userObj = { fans, follow, friendly_degree: 0 }
   }

+ 16 - 15
projects/live-app/src/moduls/tabs/ranking/ranking.component.html

@@ -10,7 +10,6 @@
   </ion-toolbar>
 </ion-header>
 <ion-content class="content"> 
-
   <div class="order">
     <div class="ladder">
       <div class="top-block">
@@ -18,14 +17,14 @@
           <div class="user-block">
             <div class="user-avatar">
               <img src="/img/2.png" alt="" class="tag" />
-              <img [src]="orderList[1].avatar" class="avatar" alt="" />
+              <img [src]="orderList[1]?.avatar" class="avatar" alt="" />
             </div>
             <div class="user-name">
-              {{ orderList[1].name }}
+              {{ orderList[1]?.nickname }}
             </div>
           </div>
           <div class="user-detail">
-            <div class="num">{{orderList[1].num}}</div>
+            <div class="num">{{ orderList[1]?.credit }}</div>
             <div class="pm">TOP2</div>
           </div>
         </div>
@@ -33,44 +32,46 @@
           <div class="user-block">
             <div class="user-avatar">
               <img src="/img/2.png" alt="" class="tag" />
-              <img [src]="orderList[0].avatar" class="avatar" alt="" />
+              <img [src]="orderList[0]?.avatar" class="avatar" alt="" />
             </div>
             <div class="user-name">
-              {{ orderList[0].name }}
+              {{ orderList[0]?.nickname }}
             </div>
           </div>
           <div class="user-detail">
-            <div class="num">{{orderList[0].num}}</div>
-            <div class="pm">TOP1</div>
+            <div class="num">{{ orderList[0]?.credit }}</div>
+            <div class="pm">TOP2</div>
           </div>
         </div>
         <div class="top3">
           <div class="user-block">
             <div class="user-avatar">
               <img src="/img/2.png" alt="" class="tag" />
-              <img [src]="orderList[2].avatar" class="avatar" alt="" />
+              <img [src]="orderList[2]?.avatar" class="avatar" alt="" />
             </div>
             <div class="user-name">
-              {{ orderList[2].name }}
+              {{ orderList[2]?.nickname }}
             </div>
           </div>
           <div class="user-detail">
-            <div class="num">{{orderList[2].num}}</div>
+            <div class="num">{{ orderList[2]?.credit }}</div>
             <div class="pm">TOP2</div>
           </div>
         </div>
       </div>
     </div>
-    @for (item of orderList.slice(2); track $index) {
+    @for (item of orderList.slice(2,8); track $index) {
     <div class="row">
       <div class="row-left">
-        <span class="row-index">{{$index}}</span>
+        <span class="row-index">4</span>
         <img [src]="item.avatar" alt="" class="row-avatar" />
-        <div class="row-name">{{ item.name }}</div>
+        <div class="row-name">{{ item?.nickname }}</div>
       </div>
       <div class="row-right">
         <div class="row-tpis">距离第一名</div>
-        <div class="row-tpis-num">{{item.num}} <span></span></div>
+        <div class="row-tpis-num">
+          {{ item.credit - orderList[0].credit }}<span></span>
+        </div>
       </div>
     </div>
     }

+ 9 - 64
projects/live-app/src/moduls/tabs/ranking/ranking.component.ts

@@ -1,6 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { IonicModule } from '@ionic/angular';
 import * as Parse from 'parse';
+import { AiChatService } from '../../../services/aichart.service';
 
 @Component({
   selector: 'app-ranking',
@@ -11,69 +12,13 @@ import * as Parse from 'parse';
 })
 export class RankingComponent implements OnInit {
   user?: Parse.Object = Parse.User.current();
-  orderList: Array<any> = [
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-    {
-      name: '甜心宝贝',
-      avatar: 'https://file-cloud.fmode.cn/Qje9D4bqol/20241109/2t1lp0032258601.png',
-      num: 94.5,
-    },
-  ];
-  constructor() {}
+  orderList: Array<any> = [];
+  constructor(
+    private aiServ: AiChatService
+  ) {}
 
-  ngOnInit() {}
+  async ngOnInit() {
+    this.orderList = await this.aiServ.getOrderAnchor()
+    console.log(this.orderList);
+  }
 }

+ 18 - 13
projects/live-app/src/moduls/user/profile/profile.component.html

@@ -38,9 +38,15 @@
         <div class="user-status">
           <span class="id">爱聊ID:{{ user?.id }}</span>
           @if (profiel?.get('isCheck')) {
-          <span class="tag">·勿扰</span>
+          <div class="state">
+            <span class="spot"></span>
+            <span class="tag">勿扰</span>
+          </div>
           }@else {
-          <!-- <span class="tag"></span> -->
+          <div class="state">
+            <span class="spot" [style.background]="state.color"></span>
+            <span class="tag">{{ state.val }}</span>
+          </div>
           }
         </div>
       </div>
@@ -183,17 +189,16 @@
   [toUid]="this.uid"
 ></app-gift-modal>
 @if (iscall) {
-  <div class="loading-box">
-    <div class="animation-loading">
-      <div class="container">
-        <span></span>
-        <span></span>
-        <span></span>
-        <span></span>
-      </div>
+<div class="loading-box">
+  <div class="animation-loading">
+    <div class="container">
+      <span></span>
+      <span></span>
+      <span></span>
+      <span></span>
     </div>
-    <div class="loading-title">正在呼叫</div>
-    <div class="close" (click)="onCloseCall()">取消</div>
   </div>
+  <div class="loading-title">正在呼叫</div>
+  <div class="close" (click)="onCloseCall()">取消</div>
+</div>
 }
-

+ 15 - 5
projects/live-app/src/moduls/user/profile/profile.component.scss

@@ -92,12 +92,22 @@
           .id {
             color: #1e1e1e;
           }
-          .tag {
-            color: white;
-            background: #fe454e;
-            padding: 2px 10px;
-            border-radius: 10px;
+          .state{
+            display: flex;
+            align-items: center;
             margin-left: 10px;
+            .spot{
+              width: 8px;
+              height: 8px;
+              border-radius: 50%;
+              background: #f1ac16;
+            }
+            .tag {
+              // color: white;
+              padding: 2px;
+              border-radius: 10px;
+              // margin-left: 10px;
+            }
           }
         }
       }

+ 21 - 1
projects/live-app/src/moduls/user/profile/profile.component.ts

@@ -71,7 +71,27 @@ export class ProfileComponent implements OnInit {
       this.inviteCallback(data);
     });
   }
-
+  get state(){
+    let map:any = {
+      "ONLINE":{
+        val:'在线',
+        color:'#28bb50',
+      },
+      "OFFLINE":{
+        val:'离线',
+        color:'#a1a1a1',
+      },
+      "CONNECTING":{
+        val:'忙碌',
+        color:'#cf1b24',
+      },
+      "":{
+        val:'离线',
+        color:'#a1a1a1',
+      },
+    }
+    return map[this.userStatus]
+  }
   ngOnInit() {
     this.activateRoute.paramMap.subscribe(async (params) => {
       let id: any = params.get('id');

+ 14 - 0
projects/live-app/src/services/aichart.service.ts

@@ -119,4 +119,18 @@ export class AiChatService {
     const data = await this.http.httpRequst(baseurl, params, 'POST');
     return data?.data
   }
+
+  async getOrderAnchor(limit?:number){
+    let sql = `SELECT us."objectId",us."nickname",us."avatar",
+    COALESCE(SUM(llog.gold ),0) AS "credit"
+    FROM "LoveRender" AS llog
+    LEFT JOIN "_User" us
+    ON us."objectId" = llog."toUser"
+    WHERE llog.company = 'Qje9D4bqol'
+    AND llog."isDeleted" IS NOT TRUE
+    GROUP BY us."objectId",us."username"
+    ORDER BY "credit" DESC LIMIT ${limit ?? 10}`
+    let res:any = await this.http.customSQL(sql);
+    return res.data
+  }
 }

+ 4 - 4
projects/live-app/src/services/connectTask.service.ts

@@ -7,7 +7,7 @@ import * as Parse from 'parse';
 export class ConnectTaskService {
   anchorChannelName?: string;
   msChannelName: string = 'user_connect_room'; // 主播在线上报频道
-  onlineUserList: Array<string> = []; // 在线用户列表
+  onlineUserList = new Set(); // 在线用户列表
   isSubscribe: boolean = false;
   constructor(private msgSer: MessageService) {}
 
@@ -18,7 +18,7 @@ export class ConnectTaskService {
     this.getOnlieUserList(this.msChannelName, 'MESSAGE');
   }
   reset() {
-    this.onlineUserList = [];
+    this.onlineUserList = new Set();
     this.isSubscribe = false;
   }
   /* 主播上线 */
@@ -93,7 +93,7 @@ export class ConnectTaskService {
     page?: string,
     channelType?: string
   ) {
-    if (this.onlineUserList.length > 0) return;
+    if (!channelType && this.onlineUserList.size) return;
     const options: any = {
       includedUserId: true,
       includedState: true,
@@ -110,7 +110,7 @@ export class ConnectTaskService {
       const { totalOccupancy, occupants, nextPage } = result;
       occupants.forEach((userInfo: any) => {
         const { states, userId, statesCount } = userInfo;
-        this.onlineUserList.push(userId);
+        this.onlineUserList.add(userId);
       });
       console.log('获取在线用户列表:',this.onlineUserList);
       if (nextPage) this.getOnlieUserList(channelName, nextPage, channelType);