yi hace 1 año
padre
commit
128d7bb2ee

+ 4 - 1
firm-app/angular.json

@@ -126,7 +126,10 @@
     }
     }
   },
   },
   "cli": {
   "cli": {
-    "schematicCollections": ["@ionic/angular-toolkit"]
+    "schematicCollections": [
+      "@ionic/angular-toolkit"
+    ],
+    "analytics": "12382325-a3c4-4521-b2bb-432ab62d1a9f"
   },
   },
   "schematics": {
   "schematics": {
     "@ionic/angular-toolkit:component": {
     "@ionic/angular-toolkit:component": {

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 696 - 29
firm-app/package-lock.json


+ 1 - 0
firm-app/package.json

@@ -27,6 +27,7 @@
     "@capacitor/keyboard": "6.0.3",
     "@capacitor/keyboard": "6.0.3",
     "@capacitor/status-bar": "6.0.2",
     "@capacitor/status-bar": "6.0.2",
     "@ionic/angular": "^8.0.0",
     "@ionic/angular": "^8.0.0",
+    "fmode-ng": "^0.0.62",
     "ionicons": "^7.2.1",
     "ionicons": "^7.2.1",
     "rxjs": "~7.8.0",
     "rxjs": "~7.8.0",
     "tslib": "^2.3.0",
     "tslib": "^2.3.0",

+ 3 - 0
firm-app/src/app/page-personalized/page-personalized.component.html

@@ -0,0 +1,3 @@
+<p>
+  page-personalized works!
+</p>

+ 0 - 0
firm-app/src/app/page-personalized/page-personalized.component.scss


+ 22 - 0
firm-app/src/app/page-personalized/page-personalized.component.spec.ts

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

+ 15 - 0
firm-app/src/app/page-personalized/page-personalized.component.ts

@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+  selector: 'app-page-personalized',
+  templateUrl: './page-personalized.component.html',
+  styleUrls: ['./page-personalized.component.scss'],
+  standalone: true,
+})
+export class PagePersonalizedComponent  implements OnInit {
+
+  constructor() { }
+
+  ngOnInit() {}
+
+}

+ 76 - 12
firm-app/src/app/tab1/tab1.page.html

@@ -1,17 +1,81 @@
 <ion-header [translucent]="true">
 <ion-header [translucent]="true">
-  <ion-toolbar>
-    <ion-title>
-      Tab 1
-    </ion-title>
-  </ion-toolbar>
-</ion-header>
-
-<ion-content [fullscreen]="true">
-  <ion-header collapse="condense">
-    <ion-toolbar>
-      <ion-title size="large">Tab 1</ion-title>
+       <ion-toolbar>
+        <ion-item lines="none">
+          <!-- 图片 -->
+          <ion-avatar slot="start" class="image-container">
+          <img src="/assets/img/3.png" alt="Your Image" class="header-image">
+        </ion-avatar>
+        <!-- 搜索框 -->
+         <ion-searchbar slot="end" expand="with-icon"></ion-searchbar>
+      </ion-item>
     </ion-toolbar>
     </ion-toolbar>
   </ion-header>
   </ion-header>
 
 
-  <app-explore-container name="Tab 1 page"></app-explore-container>
+<ion-content [fullscreen]="true">
+  <div class="scroll-container">
+ <ion-segment (ionChange)="segmentChanged($event)">
+    <ion-segment-button value="popular">
+      <ion-label>热门推荐</ion-label>
+    </ion-segment-button>
+    <ion-segment-button value="personalized">
+      <ion-label>个性化推荐</ion-label>
+    </ion-segment-button>
+    <ion-segment-button value="tv">
+      <ion-label>电视剧</ion-label>
+    </ion-segment-button>
+    <ion-segment-button value="movies">
+      <ion-label>电影</ion-label>
+    </ion-segment-button>
+    <ion-segment-button value="variety">
+      <ion-label>综艺</ion-label>
+    </ion-segment-button>
+    <ion-segment-button value="anime">
+      <ion-label>动画</ion-label>
+    </ion-segment-button>
+  </ion-segment>
+</div>
+
+  <!-- 内容区域 -->
+  <div *ngIf="selectedSegment === 'popular'" class="content-section">
+    <h2>热门推荐内容</h2>
+    <!-- 这里可以添加热门推荐的内容 -->
+  </div>
+  <div *ngIf="selectedSegment === 'personalized'" class="content-section">
+    <h2>个性化推荐内容</h2>
+    <!-- 这里可以添加个性化推荐的内容 -->
+  </div>
+  <div *ngIf="selectedSegment === 'tv'" class="content-section">
+    <h2>电视剧推荐</h2>
+    <ion-list>
+      <ion-item *ngFor="let show of tvShows">
+        <ion-thumbnail slot="start">
+          <img [src]="show.coverImage" />
+        </ion-thumbnail>
+        <ion-label>
+          <h2>{{ show.title }}</h2>
+          <p>
+            <ion-icon name="star" *ngFor="let star of getStars(show.rating)"></ion-icon>
+            <span>{{ show.rating }}</span>
+          </p>
+          <!-- 简介块 -->
+          <p class="description">
+            {{ show.description }}
+          </p>
+        </ion-label>
+      </ion-item>
+    </ion-list>
+  </div>
+  <div *ngIf="selectedSegment === 'movies'" class="content-section">
+    <h2>电影推荐内容</h2>
+    <!-- 这里可以添加电影推荐的内容 -->
+  </div>
+  <div *ngIf="selectedSegment === 'variety'" class="content-section">
+    <h2>综艺推荐内容</h2>
+    <!-- 这里可以添加综艺推荐的内容 -->
+  </div>
+  <div *ngIf="selectedSegment === 'anime'" class="content-section">
+    <h2>动画推荐内容</h2>
+    <!-- 这里可以添加动漫推荐的内容 -->
+  </div>
+
 </ion-content>
 </ion-content>

+ 82 - 0
firm-app/src/app/tab1/tab1.page.scss

@@ -0,0 +1,82 @@
+ion-searchbar {
+padding: 10px; /* 内边距 */
+border-radius: 4px; /* 圆角 */
+font-size: 16px; /* 字体大小 */
+}
+
+ion-avatar {
+width: 50px; /* 或者你需要的任何尺寸 */
+ height: 50px; /* 保持宽高一致,避免变形 */
+}
+
+ion-avatar img {
+ width: 100%; /* 让图片填满avatar */
+height: auto; /* 保持图片比例 */
+}
+header-image {
+width: 100%;
+height: auto; /* 保持图片比例 */
+border-radius: 50%; /* 可选:将图片设置为圆形 */
+ }
+
+ ion-header {
+  background: #f8f9fa; // 设置头部背景色
+}
+
+
+
+
+.content-section {
+  padding: 15px; // 设置内容区域的内边距
+  background-color: #ffffff; // 设置内容区域背景色
+  border-radius: 8px; // 设置圆角
+  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); // 添加阴影效果
+  margin-bottom: 15px; // 设置内容区域的下边距
+}
+
+.scroll-container {
+  display: flex; // 使用Flexbox布局
+  overflow-x: auto; // 允许横向滚动
+  white-space: nowrap; // 防止内容换行
+  -webkit-overflow-scrolling: touch; /* 在移动设备上启用平滑滚动 */
+  padding: 10px 0; // 上下内边距
+}
+ion-segment {
+  display: flex; // 使用Flexbox布局
+ width: 100%;
+}
+
+ion-segment-button {
+  flex: 1,1,auto ;
+  min-width: 100px; /* 可选:设置最小宽度以防止按钮太小 */
+  text-align: center; /* 可选:使标签居中 */
+  box-sizing: border-box; /* 包括内边距和边框在内计算宽度 */
+}
+
+ion-content {
+  --background: #f8f9fa; // 设置背景色
+}
+
+ion-list {
+  --ion-item-background: #ffffff; // 设置列表项背景色
+  --ion-item-border-color: #dee2e6; // 设置列表边框颜色
+}
+
+ion-item {
+  border-radius: 8px; // 设置列表项圆角
+  margin: 5px 0; // 添加列表项的上下外边距
+
+  ion-thumbnail {
+    border-radius: 8px; // 设置缩略图圆角
+  }
+
+  h2 {
+    font-size: 1.2rem; // 设置电视剧名称字体大小
+    color: #333; // 设置电视剧名称颜色
+  }
+
+  p {
+    font-size: 0.9rem; // 设置评分字体大小
+    color: #666; // 设置评分颜色
+  }
+}

+ 46 - 2
firm-app/src/app/tab1/tab1.page.ts

@@ -1,14 +1,58 @@
 import { Component } from '@angular/core';
 import { Component } from '@angular/core';
-import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone';
+import {IonItem, IonHeader, IonToolbar, IonTitle, IonContent, IonSearchbar, IonAvatar, IonLabel, IonSegment, IonSegmentButton, IonList, IonIcon, IonThumbnail } from '@ionic/angular/standalone';
 import { ExploreContainerComponent } from '../explore-container/explore-container.component';
 import { ExploreContainerComponent } from '../explore-container/explore-container.component';
+import { NgFor, NgIf } from '@angular/common';
 
 
 @Component({
 @Component({
   selector: 'app-tab1',
   selector: 'app-tab1',
   templateUrl: 'tab1.page.html',
   templateUrl: 'tab1.page.html',
   styleUrls: ['tab1.page.scss'],
   styleUrls: ['tab1.page.scss'],
   standalone: true,
   standalone: true,
-  imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent],
+  imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent,
+    IonSearchbar,IonAvatar,IonItem,IonLabel,IonSegment,IonSegmentButton,IonList,
+    IonIcon,IonThumbnail,NgIf,NgFor
+  ],
 })
 })
 export class Tab1Page {
 export class Tab1Page {
   constructor() {}
   constructor() {}
+
+  tvShows = [
+    {
+      title: '大梦归离',
+      rating: 5,
+      coverImage: 'assets/img_tab1/dmgl.jpg', // 替换为实际图片路径
+      description: '魑魅魍魉,镜花水月,一切都是梦中虚幻,醒来就好'
+    },
+    {
+      title: '永夜星河',
+      rating: 5,
+      coverImage: 'assets/img_tab1/yyxh.jpg', // 替换为实际图片路径
+      description: '世间万物,皆有其缘法,我们只需顺势而为'
+    },
+    {
+      title: '珠帘玉幕',
+      rating: 4,
+      coverImage: 'assets/img_tab1/zlym.jpg', // 替换为实际图片路径
+      description: '真正的强大,不是永不言败,而是在每次跌倒后,都能勇敢地站起来。'
+    },
+    // 更多电视剧...
+  ];
+
+  // 当前选中的内容类型
+  selectedSegment: string = 'popular';
+
+  // 切换内容类型
+  segmentChanged(event: any) {
+    this.selectedSegment = event.detail.value; // 更新选中的内容类型
+  }
+
+  // 获取星星的数组
+  getStars(rating: number): number[] {
+    return Array(rating).fill(0); // 返回一个包含指定数量星星的数组
+  }
+
+  onSearch(event: any) {
+  const searchTerm = event.target.value; // 获取用户输入的搜索内容
+ // 在这里添加搜索逻辑,例如过滤列表或导航到搜索结果页面
+  }
 }
 }

+ 27 - 10
firm-app/src/app/tab3/tab3.page.html

@@ -1,17 +1,34 @@
 <ion-header [translucent]="true">
 <ion-header [translucent]="true">
   <ion-toolbar>
   <ion-toolbar>
-    <ion-title>
-      Tab 3
-    </ion-title>
+    <ion-avatar slot="start" class="image-container">
+      <img src="/assets/img/3.png" alt="Your Image" class="header-image">
+    </ion-avatar>
+    <ion-buttons slot="start">
+      <ion-menu-button></ion-menu-button>
+    </ion-buttons>
   </ion-toolbar>
   </ion-toolbar>
 </ion-header>
 </ion-header>
 
 
 <ion-content [fullscreen]="true">
 <ion-content [fullscreen]="true">
-  <ion-header collapse="condense">
-    <ion-toolbar>
-      <ion-title size="large">Tab 3</ion-title>
-    </ion-toolbar>
-  </ion-header>
-
-  <app-explore-container name="Tab 3 page"></app-explore-container>
+  <div class="chat-container">
+    <div *ngFor="let message of chatMessages; let i = index" class="message-container" [ngClass]="{'sent': message.sentBy === 'user', 'received': message.sentBy === 'ai'}">
+      <div class="message-content">
+        <p>{{ message.text }}</p>
+      </div>
+    </div>
+  </div>
+ 
+  <!-- 输入框上方选项部分 -->
+  <div class="options-container">
+    
+    <button ion-button class="option-button" (click)="selectChat()">选择聊天</button>
+    <button ion-button class="option-button" (click)="personalizedRecommendations()">个性化推荐</button>
+    <button ion-button class="option-button" (click)="plotInterpretation()">剧情解读</button>
+  </div>
+ 
+  <!-- 输入框部分 -->
+  <div class="input-container">
+    <input placeholder="Enter" >
+    <button ion-button class="send-button" (click)="sendMessage()">发送</button>
+  </div>
 </ion-content>
 </ion-content>

+ 72 - 0
firm-app/src/app/tab3/tab3.page.scss

@@ -0,0 +1,72 @@
+ion-content {
+    --ion-background-color:  #f8f9fa;
+  }
+.image-container{
+    width: 50px; /* 或者你需要的任何尺寸 */
+     height: 50px; /* 保持宽高一致,避免变形 */
+    }
+
+header-img {
+    width: 100%;
+    height: auto; /* 保持图片比例 */
+    border-radius: 50%; /* 可选:将图片设置为圆形 */
+    }
+    
+      .chat-container {
+        padding: 20px;
+        overflow-y: auto;
+        height: calc(100% - 160px); // Adjust based on the height of the logo, options, and input containers
+      }
+      
+      .message-container {
+        margin-bottom: 15px;
+      }
+      
+      .sent .message-content {
+        background-color: #dcf8c6;
+        border-radius: 15px 15px 15px 0;
+        padding: 10px;
+        max-width: 60%;
+        align-self: flex-end;
+      }
+      
+      .received .message-content {
+        background-color: #e2e2e2;
+        border-radius: 15px 15px 0 15px;
+        padding: 10px;
+        max-width: 60%;
+        align-self: flex-start;
+      }
+      
+      .options-container {
+        display: flex;
+        justify-content: space-around;
+        padding: 10px;
+        background-color: #f8f9fa;
+        border-bottom: 1px solid #ddd;
+      }
+      
+      .option-button {
+        width: 30%;
+        padding: 10px;
+        font-size: 16px;
+      }
+      
+      .input-container {
+        display: flex;
+        padding: 10px;
+        background-color: #f8f9fa;
+        align-items: center;
+        justify-content: space-between;
+      }
+      
+      ion-input {
+        flex: 1;
+        padding: 10px;
+        font-size: 16px;
+      }
+      
+      .send-button {
+        padding: 10px 20px;
+        font-size: 16px;
+      }

+ 56 - 4
firm-app/src/app/tab3/tab3.page.ts

@@ -1,14 +1,66 @@
 import { Component } from '@angular/core';
 import { Component } from '@angular/core';
-import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone';
+import { IonHeader, IonToolbar, IonTitle, IonContent, IonItem, IonSegment, IonSegmentButton, IonLabel, IonIcon, IonMenuButton, IonAvatar, IonButton, IonInput, IonButtons } from '@ionic/angular/standalone';
 import { ExploreContainerComponent } from '../explore-container/explore-container.component';
 import { ExploreContainerComponent } from '../explore-container/explore-container.component';
+import { NgClass, NgFor } from '@angular/common';
+import { Router } from '@angular/router';
+
+
 
 
 @Component({
 @Component({
   selector: 'app-tab3',
   selector: 'app-tab3',
   templateUrl: 'tab3.page.html',
   templateUrl: 'tab3.page.html',
   styleUrls: ['tab3.page.scss'],
   styleUrls: ['tab3.page.scss'],
   standalone: true,
   standalone: true,
-  imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent],
+  imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent,
+    IonItem,IonSegment,IonSegmentButton,IonLabel,IonIcon,IonMenuButton,
+    IonAvatar,IonButton,NgFor,NgClass,IonButtons
+  ]
 })
 })
 export class Tab3Page {
 export class Tab3Page {
-  constructor() {}
-}
+  chatMessages: any[] = [
+    { text: 'AI: 你好!我是AI助手。', sentBy: 'ai' },
+    // 初始时没有用户消息
+  ];
+ 
+  // 用户输入
+  userInput: string = '';
+
+ 
+  // 模拟发送消息
+  sendMessage() {
+    if (this.userInput.trim()) {
+      this.chatMessages.push({ text: `你: ${this.userInput}`, sentBy: 'user' });
+      this.simulateAIResponse();
+      this.userInput = '';
+    }
+  }
+ 
+  // 模拟AI响应
+  simulateAIResponse() {
+    const responses = [
+      'AI: 很高兴认识你!',
+      'AI: 你今天过得怎么样?',
+      'AI: 我可以帮助你解答一些问题。'
+    ];
+    const randomResponse = responses[Math.floor(Math.random() * responses.length)];
+    this.chatMessages.push({ text: randomResponse, sentBy: 'ai' });
+  }
+  constructor(private router: Router) { }
+  // 选择聊天(模拟方法)
+  selectChat() {
+    // 这里可以添加逻辑来切换聊天上下文或显示不同的UI元素
+    console.log('选择了聊天');
+  }
+ 
+  // 个性化推荐(模拟方法)
+  personalizedRecommendations() {
+    // 这里可以添加逻辑来显示个性化推荐
+    this.router.navigate(['/tabs/page-personalized'])
+  }
+ 
+  // 剧情解读(模拟方法)
+  plotInterpretation() {
+    // 这里可以添加逻辑来显示剧情解读
+    console.log('剧情解读');
+  }
+  }

+ 70 - 9
firm-app/src/app/tab4/tab4.page.html

@@ -1,17 +1,78 @@
 <ion-header [translucent]="true">
 <ion-header [translucent]="true">
   <ion-toolbar>
   <ion-toolbar>
-    <ion-title>
-      Tab 4
-    </ion-title>
+    <ion-avatar slot="start" class="image-container">
+      <img src="/assets/img/3.png" alt="Your Image" class="header-image">
+    </ion-avatar>
+    <ion-buttons slot="start">
+      <ion-menu-button></ion-menu-button>
+    </ion-buttons>
   </ion-toolbar>
   </ion-toolbar>
 </ion-header>
 </ion-header>
 
 
 <ion-content [fullscreen]="true">
 <ion-content [fullscreen]="true">
-  <ion-header collapse="condense">
-    <ion-toolbar>
-      <ion-title size="large">Tab 4</ion-title>
-    </ion-toolbar>
-  </ion-header>
+  <ion-grid>
+    <ion-row>
+      <ion-col  class="ion-text-center">
+        <div class="avatar-container">
+        <ion-avatar>
+          <img src="assets/img/tx.jpg" alt="Avatar"class="avatar-img">
+        </ion-avatar>
+        <ion-label class="username">{{ userInfo.username }}</ion-label>
+      </div>
+      </ion-col>
+    </ion-row>
+ 
+    <ion-row>
+      <ion-col>
+        <ion-item>
+          <ion-label>历史记录</ion-label>
+          <ion-icon name="history" slot="end"></ion-icon>
+        </ion-item>
+      </ion-col>
+    </ion-row>
+    <ion-row>
+      <ion-col >
+        <ion-item>
+          <ion-label>收藏</ion-label>
+          <ion-icon name="bookmark" slot="end"></ion-icon>
+        </ion-item>
+      </ion-col>
+    </ion-row>
+ 
+    <ion-row>
+      <ion-col >
+        <ion-item>
+          <ion-label>隐私与安全设置</ion-label>
+          <ion-icon name="lock" slot="end"></ion-icon>
+        </ion-item>
+      </ion-col>
+    </ion-row>
 
 
-  <app-explore-container name="Tab 4 page"></app-explore-container>
+
+      <ion-row>
+      <ion-col >
+        <ion-item>
+          <ion-label>个性化偏好设置</ion-label>
+          <ion-icon name="settings" slot="end"></ion-icon>
+        </ion-item>
+      </ion-col>
+    </ion-row>
+ 
+    <ion-row>
+      <ion-col >
+        <ion-item>
+          <ion-label>通知与消息管理</ion-label>
+          <ion-icon name="bell" slot="end"></ion-icon>
+        </ion-item>
+      </ion-col>
+    </ion-row>
+      <ion-row>
+      <ion-col >
+        <ion-item>
+          <ion-label>设置与帮助</ion-label>
+          <ion-icon name="help-circle" slot="end"></ion-icon>
+        </ion-item>
+      </ion-col>
+    </ion-row>
+  </ion-grid>
 </ion-content>
 </ion-content>

+ 46 - 0
firm-app/src/app/tab4/tab4.page.scss

@@ -0,0 +1,46 @@
+ion-content {
+    --ion-background-color:  #f8f9fa;
+  }
+ion-avatar {
+    width: 50px; /* 或者你需要的任何尺寸 */
+     height: 50px; /* 保持宽高一致,避免变形 */
+    }
+
+header-image {
+    width: 100%;
+    height: auto; /* 保持图片比例 */
+    border-radius: 50%; /* 可选:将图片设置为圆形 */
+    }
+    
+
+.avatar-container {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        text-align: center;
+      }
+      
+.avatar-img {
+        width: 50px; /* 或者您想要的任何尺寸 */
+        height: 50px; /* 或者您想要的任何尺寸 */
+        border-radius: 50%; /* 圆形头像 */
+      }
+      
+
+  .username {
+    font-size: 40px;
+    font-weight: bold;
+    margin-top: 10px;
+  }
+  
+  ion-item {
+    --ion-item-background-color: #ffffff;
+    --inner-border-width: 0;
+    margin: 2px 0;
+    padding: 2px;
+    box-shadow: 0 1px 5px rgba(0, 0, 0, 0.1);
+    text-align: left;
+    font-size: 15px;
+    width:100%;
+  }
+  

+ 24 - 4
firm-app/src/app/tab4/tab4.page.ts

@@ -1,14 +1,34 @@
 import { Component } from '@angular/core';
 import { Component } from '@angular/core';
-import { IonHeader, IonToolbar, IonTitle, IonContent } from '@ionic/angular/standalone';
+import { IonHeader, IonToolbar, IonTitle, IonContent,
+   IonItem, IonLabel, IonIcon, IonList, IonItemGroup,
+    IonListHeader, IonGrid, IonAvatar, IonCol, IonRow,
+     IonMenuButton, IonButtons, 
+     IonImg} from '@ionic/angular/standalone';
 import { ExploreContainerComponent } from '../explore-container/explore-container.component';
 import { ExploreContainerComponent } from '../explore-container/explore-container.component';
+import {  Router} from '@angular/router';
 
 
 @Component({
 @Component({
   selector: 'app-tab4',
   selector: 'app-tab4',
   templateUrl: 'tab4.page.html',
   templateUrl: 'tab4.page.html',
   styleUrls: ['tab4.page.scss'],
   styleUrls: ['tab4.page.scss'],
   standalone: true,
   standalone: true,
-  imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent],
+  imports: [IonHeader, IonToolbar, IonTitle, IonContent, ExploreContainerComponent,
+    IonItem,IonLabel,IonIcon,IonList,IonItemGroup,IonListHeader,
+    IonGrid,IonAvatar,IonCol,IonRow,IonMenuButton,IonButtons,IonImg,
+    
+  ],
 })
 })
 export class Tab4Page {
 export class Tab4Page {
-  constructor() {}
-}
+  userInfo: any = {
+    username: 'yi',
+    // 其他用户信息字段...
+  };
+  constructor(private router: Router) {}
+ 
+  editProfile() {
+    // 跳转到编辑个人信息页面
+    this.router.navigate(['/edit-profile']);
+  }
+  }
+
+  

+ 8 - 8
firm-app/src/app/tabs/tabs.page.html

@@ -1,23 +1,23 @@
 <ion-tabs>
 <ion-tabs>
   <ion-tab-bar slot="bottom">
   <ion-tab-bar slot="bottom">
     <ion-tab-button tab="tab1" href="/tabs/tab1">
     <ion-tab-button tab="tab1" href="/tabs/tab1">
-      <ion-icon aria-hidden="true" name="triangle"></ion-icon>
-      <ion-label>Tab 1</ion-label>
+      <ion-icon aria-hidden="true" name="home-outline"></ion-icon>
+      <ion-label>首页</ion-label>
     </ion-tab-button>
     </ion-tab-button>
 
 
     <ion-tab-button tab="tab2" href="/tabs/tab2">
     <ion-tab-button tab="tab2" href="/tabs/tab2">
-      <ion-icon aria-hidden="true" name="ellipse"></ion-icon>
-      <ion-label>Tab 2</ion-label>
+      <ion-icon aria-hidden="true" name="earth-outline"></ion-icon>
+      <ion-label>社区</ion-label>
     </ion-tab-button>
     </ion-tab-button>
 
 
     <ion-tab-button tab="tab3" href="/tabs/tab3">
     <ion-tab-button tab="tab3" href="/tabs/tab3">
-      <ion-icon aria-hidden="true" name="square"></ion-icon>
-      <ion-label>Tab 3</ion-label>
+      <ion-icon aria-hidden="true" name="chatbubble-ellipses-outline"></ion-icon>
+      <ion-label>追剧搭子</ion-label>
     </ion-tab-button>
     </ion-tab-button>
 
 
     <ion-tab-button tab="tab4" href="/tabs/tab4">
     <ion-tab-button tab="tab4" href="/tabs/tab4">
-      <ion-icon aria-hidden="true" name="square"></ion-icon>
-      <ion-label>Tab 4</ion-label>
+      <ion-icon aria-hidden="true" name="person-outline"></ion-icon>
+      <ion-label>我的</ion-label>
     </ion-tab-button>
     </ion-tab-button>
   </ion-tab-bar>
   </ion-tab-bar>
 </ion-tabs>
 </ion-tabs>

+ 2 - 2
firm-app/src/app/tabs/tabs.page.ts

@@ -1,7 +1,7 @@
 import { Component, EnvironmentInjector, inject } from '@angular/core';
 import { Component, EnvironmentInjector, inject } from '@angular/core';
 import { IonTabs, IonTabBar, IonTabButton, IonIcon, IonLabel } from '@ionic/angular/standalone';
 import { IonTabs, IonTabBar, IonTabButton, IonIcon, IonLabel } from '@ionic/angular/standalone';
 import { addIcons } from 'ionicons';
 import { addIcons } from 'ionicons';
-import { triangle, ellipse, square } from 'ionicons/icons';
+import { homeOutline, earthOutline, chatbubbleEllipsesOutline, personOutline } from 'ionicons/icons';
 
 
 @Component({
 @Component({
   selector: 'app-tabs',
   selector: 'app-tabs',
@@ -14,6 +14,6 @@ export class TabsPage {
   public environmentInjector = inject(EnvironmentInjector);
   public environmentInjector = inject(EnvironmentInjector);
 
 
   constructor() {
   constructor() {
-    addIcons({ triangle, ellipse, square });
+    addIcons({homeOutline,earthOutline,chatbubbleEllipsesOutline,personOutline});
   }
   }
 }
 }

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

@@ -26,6 +26,11 @@ export const routes: Routes = [
         loadComponent: () =>
         loadComponent: () =>
           import('../tab4/tab4.page').then((m) => m.Tab4Page),
           import('../tab4/tab4.page').then((m) => m.Tab4Page),
       },
       },
+      {
+        path: ' personalized',
+        loadComponent: () =>
+          import('../page-personalized/page-personalized.component').then((m) => m.PagePersonalizedComponent),
+      },
       {
       {
         path: '',
         path: '',
         redirectTo: '/tabs/tab1',
         redirectTo: '/tabs/tab1',

BIN
firm-app/src/assets/img/3.png


BIN
firm-app/src/assets/img/tx.jpg


BIN
firm-app/src/assets/img_tab1/dmgl.jpg


BIN
firm-app/src/assets/img_tab1/yyxh.jpg


BIN
firm-app/src/assets/img_tab1/zlym.jpg


+ 20 - 0
firm-app/src/main.ts

@@ -5,10 +5,30 @@ import { IonicRouteStrategy, provideIonicAngular } from '@ionic/angular/standalo
 import { routes } from './app/app.routes';
 import { routes } from './app/app.routes';
 import { AppComponent } from './app/app.component';
 import { AppComponent } from './app/app.component';
 
 
+// 引用HttpClient方法
+import { provideHttpClient } from '@angular/common/http';
+// 引用移动端授权检测供应器
+import { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';
+// 设置Parse服务属性
+import Parse from "parse";
+Parse.initialize("ncloudmaster");
+Parse.serverURL = "https://server.fmode.cn/parse";
+localStorage.setItem("NOVA_APIG_SERVER", 'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG')
+
+// 注意:替换Token 根据Token设置Parse服务帐套权限
+Parse.User.become('r:E4KpGvTEto-184707920571733023006')
+
+
+
 bootstrapApplication(AppComponent, {
 bootstrapApplication(AppComponent, {
   providers: [
   providers: [
     { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
     { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
     provideIonicAngular(),
     provideIonicAngular(),
     provideRouter(routes, withPreloading(PreloadAllModules)),
     provideRouter(routes, withPreloading(PreloadAllModules)),
+// 添加HttpClient供应器
+provideHttpClient(),
+// 添加Diagnostic
+Diagnostic,
+
   ],
   ],
 });
 });

+ 1 - 0
firm-app/tsconfig.json

@@ -2,6 +2,7 @@
 {
 {
   "compileOnSave": false,
   "compileOnSave": false,
   "compilerOptions": {
   "compilerOptions": {
+    "allowSyntheticDefaultImports":true,
     "baseUrl": "./",
     "baseUrl": "./",
     "outDir": "./dist/out-tsc",
     "outDir": "./dist/out-tsc",
     "forceConsistentCasingInFileNames": true,
     "forceConsistentCasingInFileNames": true,

+ 0 - 7
test.md

@@ -1,7 +0,0 @@
-<h1>项目标题</h1>
-
-# 项目标题
-# RUNOOB Markdown Test
-## Hello World!
-
-

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio