|  | @@ -0,0 +1,105 @@
 | 
	
		
			
				|  |  | +import { CommonModule } from '@angular/common';
 | 
	
		
			
				|  |  | +import { Component, OnInit } from '@angular/core';
 | 
	
		
			
				|  |  | +import { FormsModule } from '@angular/forms';
 | 
	
		
			
				|  |  | +import { Router } from '@angular/router';
 | 
	
		
			
				|  |  | +import { NavController } from '@ionic/angular';
 | 
	
		
			
				|  |  | +import { IonButton, IonButtons,  IonContent, IonFooter, IonHeader, IonIcon, IonInput, IonItem,  IonTextarea,  IonTitle, IonToolbar,  } from '@ionic/angular/standalone';
 | 
	
		
			
				|  |  | +import { addIcons } from 'ionicons';
 | 
	
		
			
				|  |  | +import { atOutline, chevronBackSharp, closeOutline, happyOutline, imageOutline } from 'ionicons/icons';
 | 
	
		
			
				|  |  | +import { CloudObject, CloudUser } from 'src/lib/ncloud';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +addIcons({chevronBackSharp,imageOutline,atOutline,happyOutline,closeOutline });
 | 
	
		
			
				|  |  | +@Component({
 | 
	
		
			
				|  |  | +  selector: 'app-send-post',
 | 
	
		
			
				|  |  | +  templateUrl: './send-post.component.html',
 | 
	
		
			
				|  |  | +  styleUrls: ['./send-post.component.scss'],
 | 
	
		
			
				|  |  | +  standalone: true,
 | 
	
		
			
				|  |  | +   imports: [IonHeader,IonToolbar,IonTitle,IonContent,IonItem,
 | 
	
		
			
				|  |  | +      IonButton,IonIcon,IonButtons,IonInput,IonFooter,CommonModule,FormsModule,IonTextarea,],
 | 
	
		
			
				|  |  | +})
 | 
	
		
			
				|  |  | +export class SendPostComponent  implements OnInit {
 | 
	
		
			
				|  |  | +  inputText: string = ''; // 用于绑定输入框的内容
 | 
	
		
			
				|  |  | +  title: string = ''; // 帖子标题
 | 
	
		
			
				|  |  | +  showLocationTag: boolean = true; // 控制标签是否显示
 | 
	
		
			
				|  |  | +  remainingChars: number = 20; // 剩余字符数
 | 
	
		
			
				|  |  | +  images: string[] = []; // 存储图片的数组
 | 
	
		
			
				|  |  | +  tags: string[] = []; // 存储标签的数组
 | 
	
		
			
				|  |  | +  ngOnInit() {}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  constructor(private router: Router,private navCtrl: NavController) {}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  goBack() {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    this.navCtrl.back(); // 返回上一页
 | 
	
		
			
				|  |  | +  
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +// 发布帖子
 | 
	
		
			
				|  |  | +publishPost() {
 | 
	
		
			
				|  |  | +   // 检查发布按钮是否处于激活状态
 | 
	
		
			
				|  |  | +   if (this.inputText.length === 0 || this.remainingChars ===20) {
 | 
	
		
			
				|  |  | +    console.warn('按钮处于默认样式,无法发布帖子');
 | 
	
		
			
				|  |  | +    return; // 如果按钮处于默认样式,直接返回,不执行后续逻辑
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 创建一个 CloudObject 实例,表示要保存的帖子
 | 
	
		
			
				|  |  | +  const post = new CloudObject('post'); // 表名为 'post'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 设置帖子内容
 | 
	
		
			
				|  |  | +  post.set({
 | 
	
		
			
				|  |  | +    user: new CloudUser().toPointer(), // 指向当前用户
 | 
	
		
			
				|  |  | +    content: this.inputText, // 帖子内容
 | 
	
		
			
				|  |  | +    title: this.title, // 帖子标题
 | 
	
		
			
				|  |  | +    image: this.images, // 图片数组
 | 
	
		
			
				|  |  | +    tag: this.tags, // 标签数组
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 保存帖子到数据库
 | 
	
		
			
				|  |  | +  post.save()
 | 
	
		
			
				|  |  | +    .then(() => {
 | 
	
		
			
				|  |  | +      console.log('帖子已发布');
 | 
	
		
			
				|  |  | +      // 清空输入框和其他状态
 | 
	
		
			
				|  |  | +      this.inputText = '';
 | 
	
		
			
				|  |  | +      this.title = '';
 | 
	
		
			
				|  |  | +      this.images = [];
 | 
	
		
			
				|  |  | +      this.tags = [];
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +    .catch((error:any) => {
 | 
	
		
			
				|  |  | +      console.error('发布帖子时出错:', error);
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +//  删除标签
 | 
	
		
			
				|  |  | +    removeLocationTag() {
 | 
	
		
			
				|  |  | +      this.showLocationTag = false; // 设置为 false 隐藏标签
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +//  更新标题长度
 | 
	
		
			
				|  |  | +    updateTitleLength() {
 | 
	
		
			
				|  |  | +      this.remainingChars = 20 - this.title.length; // 更新剩余字符数
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +     // 处理文件选择
 | 
	
		
			
				|  |  | +  uploadImage() {
 | 
	
		
			
				|  |  | +    const fileInput = document.querySelector('input[type=file]') as HTMLInputElement; // 使用类型断言;
 | 
	
		
			
				|  |  | +    if (fileInput) {
 | 
	
		
			
				|  |  | +      fileInput.click(); // 点击文件输入框
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  // 处理文件选择后的事件
 | 
	
		
			
				|  |  | +  onFileSelected(event: Event) {
 | 
	
		
			
				|  |  | +    const input = event.target as HTMLInputElement;
 | 
	
		
			
				|  |  | +    if (input.files && input.files.length > 0) {
 | 
	
		
			
				|  |  | +      const file = input.files[0];
 | 
	
		
			
				|  |  | +      const reader = new FileReader();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      reader.onload = (e: any) => {
 | 
	
		
			
				|  |  | +        // 将图片数据存储到 images 数组中
 | 
	
		
			
				|  |  | +        this.images.push(e.target.result); // 将 Base64 编码的图片数据添加到数组
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      reader.readAsDataURL(file); // 读取文件为 Data URL
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +}
 |