0225138 11 місяців тому
батько
коміт
714f6ee624

+ 4 - 2
src/app/app-routing.module.ts

@@ -48,8 +48,10 @@ const routes: Routes = [
     path: 'contact-list',
     loadChildren: () => import('./contact-list/contact-list.module').then( m => m.ContactListPageModule)
   },
-
-
+  {
+    path:'dynamic',
+    loadChildren:()=>import('./dynamic/dynamic.module').then(m=>m.DynamicPageModule)
+  }
 ];
 @NgModule({
   imports: [

+ 1 - 2
src/app/contact-list/contact-list.page.html

@@ -65,6 +65,5 @@
       </ion-item>
     </ng-container>
   </ion-list>
-  <ion-button type="button" (click)="clicked()">Click me!</ion-button>
-    <span>{{ clickMsg }}</span>
+    <!-- <span>{{ clickMsg }}</span> -->
 </ion-content>

+ 17 - 0
src/app/dynamic/dynamic-routing.module.ts

@@ -0,0 +1,17 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+
+import { DynamicPage } from './dynamic.page';
+
+const routes: Routes = [
+  {
+    path: '',
+    component: DynamicPage
+  }
+];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule],
+})
+export class DynamicPageRoutingModule {}

+ 20 - 0
src/app/dynamic/dynamic.module.ts

@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule } from '@angular/forms';
+
+import { IonicModule } from '@ionic/angular';
+
+import { DynamicPageRoutingModule } from './dynamic-routing.module';
+
+import { DynamicPage } from './dynamic.page';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    IonicModule,
+    DynamicPageRoutingModule
+  ],
+  declarations: [DynamicPage]
+})
+export class DynamicPageModule {}

+ 38 - 0
src/app/dynamic/dynamic.page.html

@@ -0,0 +1,38 @@
+<ion-header>
+  <ion-toolbar>
+    <ion-title>动态发布</ion-title>
+  </ion-toolbar>
+</ion-header>
+
+<ion-content>
+  <ion-searchbar [(ngModel)]="searchKeyword" (ionInput)="searchDongTai()"></ion-searchbar>
+  
+  <ion-list>
+    <ion-item *ngFor="let dongtai of dongtais">
+      <ion-label>
+        <h2>{{ dongtai.get('biaoti') }}</h2>
+        <p>{{ dongtai.get('neirong') }}</p>
+        <p>{{ dongtai.get('time') }}</p>
+      </ion-label>
+      <ion-button (click)="deleteDongTai(dongtai.id)">删除</ion-button>
+    </ion-item>
+  </ion-list>
+  
+  <ion-item>
+    <ion-label>标题</ion-label>
+    <ion-input [(ngModel)]="newBiaoti"></ion-input>
+  </ion-item>
+  <ion-item>
+    <ion-label>内容</ion-label>
+    <ion-input [(ngModel)]="newNeirong"></ion-input>
+  </ion-item>
+  <ion-item>
+    <ion-label>时间</ion-label>
+    <ion-input [(ngModel)]="newTime"></ion-input>
+  </ion-item>
+  <ion-item>
+    <ion-label>上传图片</ion-label>
+    <input type="file" (change)="onFileSelected($event)" />
+  </ion-item>
+  <ion-button expand="block" (click)="submitDongTai()">提交动态</ion-button>
+</ion-content>

+ 0 - 0
src/app/dynamic/dynamic.page.scss


+ 17 - 0
src/app/dynamic/dynamic.page.spec.ts

@@ -0,0 +1,17 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { DynamicPage } from './dynamic.page';
+
+describe('DynamicPage', () => {
+  let component: DynamicPage;
+  let fixture: ComponentFixture<DynamicPage>;
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DynamicPage);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});

+ 63 - 0
src/app/dynamic/dynamic.page.ts

@@ -0,0 +1,63 @@
+import { Component, OnInit } from '@angular/core';
+import { ParseService } from '../../server/parse.service';  // 确保路径正确
+Parse.initialize("dev");
+(Parse as any).serverURL = 'http://web2023.fmode.cn:9999/parse'
+import * as Parse from 'parse';
+import { NavController } from '@ionic/angular';
+
+import { Router } from '@angular/router';  
+
+// constructor(private Router: Router) {}
+@Component({
+  selector: 'app-dynamic',
+  templateUrl: './dynamic.page.html',
+  styleUrls: ['./dynamic.page.scss'],
+})
+export class DynamicPage implements OnInit {
+  dongtais: Parse.Object[] = [];
+  searchKeyword: string = '';
+  newBiaoti: string = '';  // 新增的属性
+  newNeirong: string = ''; // 新增的属性
+  newTime: string = '';    // 新增的属性
+  navCtrl: any;
+  navController: any;
+  
+
+  constructor(private parseService: ParseService) { }
+
+  ngOnInit() {
+    this.loadDongTai();
+  }
+
+  async loadDongTai() {
+    this.dongtais = await this.parseService.getDongTai();
+  }
+
+  async searchDongTai() {
+    this.dongtais = await this.parseService.searchDongTai(this.searchKeyword);
+  }
+
+  async deleteDongTai(id: string) {
+    await this.parseService.deleteDongTai(id);
+    this.loadDongTai();
+  }
+
+  async createDongTai(biaoti: string, neirong: string, time: string, imageFile: File) {
+    await this.parseService.createDongTai(biaoti, neirong, time, imageFile);
+    this.loadDongTai();
+  }
+
+  onFileSelected(event: any) {
+    const file: File = event.target.files[0];
+    if (file) {
+      this.createDongTai(this.newBiaoti, this.newNeirong, this.newTime, file);
+    }
+  }
+  async submitDongTai() {
+    console.log(111);
+    // this.navCtrl.navigateForward('../../app/tab3');
+    this.navController.back();
+  }
+}
+  
+

+ 1 - 1
src/app/tab3/tab3.page.html

@@ -94,7 +94,7 @@
   </div>
 
   <ion-fab vertical="bottom" horizontal="end" slot="fixed">
-    <ion-fab-button>
+    <ion-fab-button (click)="gotoDynamic()">
       <ion-icon name="camera-outline"></ion-icon>
     </ion-fab-button>
   </ion-fab>

+ 4 - 1
src/app/tab3/tab3.page.ts

@@ -42,8 +42,11 @@ export class Tab3Page {
   }
    
   goToLogin() {
-    
     this.navCtrl.navigateForward('/login');
     console.log('Navigating to Login page');
   }
+
+  gotoDynamic(){
+    this.navCtrl.navigateForward('/dynamic');
+  }
 }

+ 9 - 5
src/app/tabs/tabs-routing.module.ts

@@ -19,6 +19,10 @@ const routes: Routes = [
         path: 'tab3',
         loadChildren: () => import('../tab3/tab3.module').then(m => m.Tab3PageModule)
       },
+      {
+      path:'dynamic',
+      loadChildren:()=>import('../dynamic/dynamic.module').then(m=>m.DynamicPageModule)
+      },
       {
         path: '',
         redirectTo: '/tabs/tab1',
@@ -26,11 +30,11 @@ const routes: Routes = [
       }
     ]
   },
-  {
-    path: '',
-    redirectTo: '/tabs/tab1',
-    pathMatch: 'full'
-  }
+  // {
+  //   path: '',
+  //   redirectTo: '/tabs/tab1',
+  //   pathMatch: 'full'
+  // }
 ];
 
 @NgModule({

+ 11 - 0
src/app/tabs/tabs.page.html

@@ -1,11 +1,22 @@
 <ion-tabs>
 
+  <!-- 新增的Tab -->
+ <!-- <ion-tab-button tab="home">
+    <ion-icon name="home"></ion-icon>
+    <ion-label>Home</ion-label>
+    </ion-tab-button> -->
+
   <ion-tab-bar slot="bottom">
     <ion-tab-button tab="tab1" href="/tabs/tab1">
       <ion-icon aria-hidden="true" name="triangle"></ion-icon>
       <ion-label>Tab 1</ion-label>
     </ion-tab-button>
 
+    <ion-tab-button tab="dynamic" href="../../app/dynamic/dynamic.page.html">
+      <ion-icon aria-hidden="true" name="ellipse"></ion-icon>
+      <ion-label>dynamic</ion-label>
+    </ion-tab-button>
+
     <ion-tab-button tab="tab2" href="/tabs/tab2">
       <ion-icon aria-hidden="true" name="ellipse"></ion-icon>
       <ion-label>Tab 2</ion-label>

+ 48 - 0
src/server/parse.service.ts

@@ -0,0 +1,48 @@
+import { Injectable } from '@angular/core';
+import * as Parse from 'parse';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ParseService {
+serverURL = "http://web2023.fmode.cn:9999/parse"
+  constructor() { }
+
+  async getDongTai(): Promise<Parse.Object[]> {
+    const DongTai = Parse.Object.extend('DongTai');
+    const query = new Parse.Query(DongTai);
+    query.descending('time');
+    return await query.find();
+  }
+
+  async searchDongTai(keyword: string): Promise<Parse.Object[]> {
+    const DongTai = Parse.Object.extend('DongTai');
+    const query = new Parse.Query(DongTai);
+    query.contains('biaoti', keyword);
+    query.descending('time');
+    return await query.find();
+  }
+
+  async createDongTai(biaoti: string, neirong: string, time: string, imageFile?: File): Promise<Parse.Object> {
+    const DongTai = Parse.Object.extend('DongTai');
+    const dongtai = new DongTai();
+    dongtai.set('biaoti', biaoti);
+    dongtai.set('neirong', neirong);
+    dongtai.set('time', time);
+
+    if (imageFile) {
+      const parseFile = new Parse.File(imageFile.name, imageFile);
+      await parseFile.save();
+      dongtai.set('image', parseFile);
+    }
+
+    return await dongtai.save();
+  }
+
+  async deleteDongTai(id: string): Promise<void> {
+    const DongTai = Parse.Object.extend('DongTai');
+    const query = new Parse.Query(DongTai);
+    const dongtai = await query.get(id);
+    await dongtai.destroy();
+  }
+}