s202226701053 5 месяцев назад
Родитель
Сommit
a206904f77

+ 6 - 1
E-Cover-app/src/agent/tasks/generate/generate-picture.ts

@@ -19,7 +19,7 @@ export function TaskGeneratePicture(options: {
             let imagineWork = new ImagineWork();
             // 图片生成
             const designPrompt = JSON.stringify(options.shareData.designPrompt);
-            let cloth=options.shareData.designPrompt['schemeList'];
+            let cloth = options.shareData.designPrompt['schemeList'];
             const clothPrompt = JSON.stringify(cloth);
             let PicturePrompt = `您是一名服装搭配师,请根据客户信息,搭配出穿搭效果图。
                 以下是穿搭和信息:${designPrompt}
@@ -46,6 +46,11 @@ export function TaskGeneratePicture(options: {
                     //将图片url导入数据库
                     let currentUser = new CloudUser();
                     let image = options.shareData.images[0];
+                    //options.shareData.designPrompt中的字段取:前面的所有字符,若没有:则不截取
+                    options.shareData.designPrompt['区域风格'] = options.shareData.designPrompt['区域风格'].split(':')[0];
+                    options.shareData.designPrompt['功能'] = options.shareData.designPrompt['功能'].split(':')[0];
+                    options.shareData.designPrompt['设计理念'] = options.shareData.designPrompt['设计理念'].split(':')[0];
+                    options.shareData.designPrompt['艺术风格'] = options.shareData.designPrompt['艺术风格'].split(':')[0];
                     let designPrompt = JSON.stringify(options.shareData.designPrompt);
                     let content = designPrompt
                     let newImageUrl = new CloudObject("GenerateResult");

+ 3 - 4
E-Cover-app/src/app/eco-fashion/eco-fashion.component.ts

@@ -17,10 +17,9 @@ import { HttpClient } from '@angular/common/http';
 export class EcoFashionComponent implements OnInit {
   constructor(private http: HttpClient) { }
   async ngOnInit() {
-    // await this.getLocation();
-    // await this.handleLocation();
-    // await this.getMap();
-    await this.search('旧衣改造');
+    await this.getLocation();
+    await this.handleLocation();
+    await this.getMap();
   }
   /**
    * @内置函数逻辑

+ 0 - 29
E-Cover-app/src/app/eco-fashion/server.mjs

@@ -23,15 +23,10 @@ app.get('/proxy', async (req, res) => {
     const response = await fetch(targetUrl, {
       method: 'GET',
       headers: {
-        // 您可能需要转发一些特定的请求头
         'User-Agent': req.headers['User-Agent'], // 例如,转发User-Agent头
-        'Referer': req.headers['Referer'], // 例如,转发Referer头
       },
     });
 
-    const text = await response.text(); // 获取文本内容
-    console.log(text); // 输出文本内容以便调试(可选)
-
     res.status(response.status).json(await response.json());
   } catch (error) {
     console.error('Error fetching target URL:', error); // 打印错误信息
@@ -39,30 +34,6 @@ app.get('/proxy', async (req, res) => {
   }
 });
 
-//小红书代理路由
-app.get('/scrape', async (req, res) => {
-  const keyword = req.query.keyword;
-  const url = `https://www.xiaohongshu.com/search_result?keyword=${keyword}`;
-
-  try {
-    const response = await axios.get(url);
-    console.log(response.data);
-    const $ = cheerio.load(response.data);
-    const posts = [];
-
-    $('div.post-class').each((index, element) => {
-      const title = $(element).find('h2').text();
-      const link = $(element).find('a').attr('href');
-      posts.push({ title, link });
-      console.log(title, link);
-    });
-
-    res.json(posts);
-  } catch (error) {
-    res.status(500).send('Error occurred while scraping');
-  }
-});
-
 
 app.listen(port, () => {
   console.log(`Proxy server is running on http://localhost:${port}`);

+ 5 - 5
E-Cover-app/src/app/tab3/tab3.page.html

@@ -54,25 +54,25 @@
   border-bottom-right-radius: 0;top:-20px;">
     <div class="card">
       <img class="img-background"
-        [src]="(likedPostsImage!='') ? (likedPostsImage) : ('/assets/icon/favicon.png')">
+        [src]="likedPostsImage ||'/assets/icon/favicon.png'">
       <img class="img-shade" />
       <p>赞过帖子<br />{{likedPostsNumber}}</p>
     </div>
     <div class="card" (click)="goMyStyleList()">
       <img class="img-background"
-        [src]="(myStyleImage!='') ? (myStyleImage) : ('/assets/icon/favicon.png')">
+        [src]="myStyleImage || '/assets/icon/favicon.png'">
       <img class="img-shade"/>
       <p>我的风格<br />{{myStyleNumber}}</p>
     </div>
     <div class="card">
       <img class="img-background"
-        [src]="(likedPostsImage!='') ? (likedPostsImage) : ('/assets/icon/favicon.png')">
+        [src]="likedPostsImage || '/assets/icon/favicon.png'">
       <img class="img-shade" />
       <p>收藏帖子<br />{{likedPostsNumber}}</p>
     </div>
     <div class="card" (click)="goGenerateHistory()">
       <img class="img-background"
-        [src]="(generateHistoryImage!='') ? (generateHistoryImage) : ('/assets/icon/favicon.png')">
+        [src]="generateHistoryImage || '/assets/icon/favicon.png'">
       <img class="img-shade" />
       <p>生成历史<br />{{generateHistoryCount}}</p>
     </div>
@@ -89,7 +89,7 @@
   <ion-segment-view>
     <ion-segment-content id="myPost">
       <ion-card class="post" *ngFor="let post of posts" (click)="goPostDetail(post)">
-        <ion-img [src]="post?.get('image')[0] || 'assets/icon/favicon.png'" />
+        <img [src]="post?.get('image')[0] || 'assets/icon/favicon.png'" />
         <ion-title>{{post?.get('title')}}</ion-title>
         <div id="author">
           <ion-avatar><img [src]="currentUser?.get('avatar') || 'assets/icon/default_avatar.jpg'" /></ion-avatar>

+ 36 - 1
E-Cover-app/src/global.scss

@@ -34,4 +34,39 @@
 
 /* @import "@ionic/angular/css/palettes/dark.always.css"; */
 /* @import "@ionic/angular/css/palettes/dark.class.css"; */
-//@import '@ionic/angular/css/palettes/dark.system.css';
+//@import '@ionic/angular/css/palettes/dark.system.css';
+/* 自定义提示框样式 */
+.custom-alert {
+    --background: white;
+    --color: #000;
+    /* 设置文字颜色 */
+    border: none;
+    /* 去除边框 */
+    box-shadow: none;
+    /* 去除阴影 */
+}
+
+.custom-alert .alert-title {
+    font-size: 18px;
+    /* 标题字体大小 */
+    font-weight: bold;
+    /* 加粗标题 */
+    color: black;
+    /* 标题颜色 */
+    letter-spacing: 2px;
+    margin-bottom: 10px;
+}
+
+.custom-alert .alert-message {
+    font-size: 17px;
+    /* 消息字体大小 */
+    color: #555;
+    /* 消息颜色 */
+    letter-spacing: 2px;
+}
+
+.custom-alert .alert-button {
+    color: black;
+    /* 按钮颜色 */
+    font-size: 18px;
+}

+ 27 - 1
E-Cover-app/src/lib/component/post-detail/post-detail.component.html

@@ -1,5 +1,11 @@
 <!--头部-->
-<app-custom-header [param]="['帖子详情','    ']"></app-custom-header>
+<ion-header id="header">
+  <div class="header-container">
+    <ion-icon name="chevron-back-outline" size="large" (click)="goBack()"></ion-icon>
+    <p class="header-title">帖子详情</p>
+    <p class="right-text" (click)="openMoreModal()"><ion-icon name="ellipsis-horizontal"></ion-icon></p>
+  </div>
+</ion-header>
 <!--正文内容-->
 <ion-content (click)="notcomment()">
     <!--帖子-->
@@ -82,6 +88,26 @@
       </ion-content>
     </ng-template>
   </ion-modal>
+
+  <!-- 更多模拟框 -->
+<ion-modal [isOpen]="isMoreModalOpen" (didDismiss)="closeMoreModal()" [initialBreakpoint]="0.3" [breakpoints]="[0, 0.3]" 
+handleBehavior="cycle">
+  <ng-template>
+    <ion-header>
+        <ion-title fill="clear" class="modalTitle" lines="none">-<span>更多</span>-</ion-title>
+    </ion-header>
+    <ion-content class="content">
+      <ion-button fill="clear" (click)="confirmDelete()" class="delete-button" *ngIf="isdelete">
+        <div class="delete-icon-container">
+          <ion-icon name="trash-outline" class="delete-icon"></ion-icon>
+          <span class="delete-text">删除</span>
+        </div>
+      </ion-button>
+    </ion-content>
+  </ng-template>
+</ion-modal>
+
+
   
   
    <!-- 评论输入框 -->

+ 95 - 0
E-Cover-app/src/lib/component/post-detail/post-detail.component.scss

@@ -1,3 +1,43 @@
+ion-header {
+  background-color: #f8f8f8;
+  color: black;
+  box-shadow: none;
+  height: 70px;
+
+  .header-container {
+      padding:0 10px;
+      height: 70px;
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+  }
+
+}
+
+.header-title {
+  position: absolute;
+  font-size: 22px;
+
+  @font-face {
+      font-family: 'header-font';
+      src: url(/assets/fonts/header.TTF);
+  }
+
+  font-family: 'header-font';
+  top: 24px;
+  left:10vw;
+  width: 80vw;
+  text-align: center;
+  margin:0 0;
+}
+
+.right-text {
+  font-family: 'header-font';
+  font-size: 25px;
+  margin-right: 10px;
+}
+
+
 .post {
     padding: 10px; /* 设置内边距 */
     background-color: white; /* 背景色 */
@@ -277,6 +317,7 @@
   .comment-buttons {
     display: flex; /* 使用 Flexbox 布局 */
     align-items: center; /* 垂直居中 */
+   
   }
   
   .comment-button {
@@ -352,3 +393,57 @@
   --outline: none; /* 去掉轮廓 */
   border: none; /* 去掉边框 */
 }
+
+
+
+.modalTitle{
+  background-color: #f7f7f7; 
+  font-size: 22px;
+  color:black;
+  font-family:'header-font' ;
+  font-weight: normal;
+  letter-spacing: 2px;
+
+  span{
+    margin:0 8px;
+  }
+}
+.content{
+  --background: transparent; 
+  background-color: #f7f7f7; 
+}
+
+
+.delete-button {
+  background: transparent; /* 背景透明 */
+  border: none; /* 去掉边框 */
+}
+
+.delete-button-container {
+  display: flex;
+  justify-content: center; /* 居中对齐 */
+  align-items: center; /* 垂直居中 */
+}
+
+.delete-icon {
+  background-color:white; /* 白色圆形背景 */
+  border-radius: 50%; /* 圆形 */
+  padding: 10px; /* 圆形内边距 */
+  font-size: 38px; /* 图标大小 */
+  color: black; /* 图标颜色 */
+
+}
+
+.delete-text {
+  color: black; /* 字体颜色为灰色 */
+  margin-top: 10px; /* 图标与文字之间的间距 */
+  font-size: 16px; /* 字体大小 */
+  display: flex;
+  justify-content: center; /* 居中对齐 */
+  letter-spacing: 2px;
+}
+
+
+
+
+

+ 68 - 5
E-Cover-app/src/lib/component/post-detail/post-detail.component.ts

@@ -1,9 +1,9 @@
 import { CommonModule } from '@angular/common';
 import { Component, OnInit } from '@angular/core';
 import { ActivatedRoute, ParamMap } from '@angular/router';
-import { IonButton, IonContent, IonFooter, IonIcon, IonTextarea } from '@ionic/angular/standalone';
+import { AlertController, IonAlert, IonButton, IonButtons, IonContent, IonFooter, IonHeader, IonIcon, IonTextarea, IonTitle, IonToolbar } from '@ionic/angular/standalone';
 import { addIcons } from 'ionicons';
-import { bookmarkOutline, chatbubbleEllipsesOutline, ellipsisHorizontal, happyOutline, heartOutline, shareSocialOutline } from 'ionicons/icons';
+import { bookmarkOutline, chatbubbleEllipsesOutline, ellipsisHorizontal, happyOutline, heartOutline, shareSocialOutline, trashOutline } from 'ionicons/icons';
 import { CustomHeaderComponent } from '../custom-header/custom-header.component';
 import { CloudQuery, CloudUser } from 'src/lib/ncloud';
 import { map, switchMap } from 'rxjs/operators';
@@ -11,7 +11,9 @@ import { CloudObject } from 'src/lib/ncloud';
 import { FormsModule } from '@angular/forms';
 import { IonModal } from '@ionic/angular/standalone';
 
-addIcons({ ellipsisHorizontal, bookmarkOutline, heartOutline, shareSocialOutline, happyOutline, chatbubbleEllipsesOutline })
+
+
+addIcons({ ellipsisHorizontal, bookmarkOutline, heartOutline, shareSocialOutline, happyOutline, chatbubbleEllipsesOutline,trashOutline })
 
 
 @Component({
@@ -19,7 +21,9 @@ addIcons({ ellipsisHorizontal, bookmarkOutline, heartOutline, shareSocialOutline
   templateUrl: './post-detail.component.html',
   styleUrls: ['./post-detail.component.scss'],
   standalone: true,
-  imports: [IonContent, IonIcon, IonButton, CommonModule, CustomHeaderComponent, IonTextarea, IonFooter, FormsModule, IonModal]
+  imports: [IonContent, IonIcon, IonButton, CommonModule, CustomHeaderComponent, IonTextarea, IonFooter, FormsModule, IonModal,
+    IonHeader,IonToolbar,IonTitle,IonButtons,IonAlert
+  ]
 })
 export class PostDetailComponent implements OnInit {
   postId: string | any;
@@ -28,7 +32,9 @@ export class PostDetailComponent implements OnInit {
   isfooter: boolean = true; // 控制底部栏的样式
   comments: CloudObject[] = []; // 存储评论的数组
   isFollowed: boolean = false; // 初始状态为未关注
-  constructor(private route: ActivatedRoute) { }
+  isMoreModalOpen: boolean = false; // 控制更多模态框的打开状态
+  isdelete: boolean = false; // 控制删除按钮的显示
+  constructor(private route: ActivatedRoute, private alertController: AlertController) { }
   /**
    * @从路由参数中获取帖子ID,并初始化帖子详情页面。
    */
@@ -88,6 +94,7 @@ console.log('关注记录已保存:');
     query.equalTo("objectId", this.postId);
     let result = await query.find();
     this.post = result[0];
+    //console.log(this.post.get('UserID').objectId);
      // 判断用户有没有点赞过该帖子
      const Query = new CloudQuery('postLikesRecord'); // 创建查询对象
      Query.equalTo('UserID', new CloudUser().toPointer()); // 根据用户ID查询
@@ -325,7 +332,63 @@ async updateCommentLikeCount(Id:any, count:number,Table:any){
     this.newComment += emoji; // 将选中的表情添加到输入框
     this.closeEmojiPicker(); // 关闭模态框
   }
+  goBack() {
+    window.history.back();
+  }
 
+  // 打开更多模态框
+openMoreModal() {
+  this.isMoreModalOpen = true;
+  const User=new CloudUser().toPointer(); // 获取当前用户指针
+  const UserID=User.objectId; // 获取当前用户ID
+  if(UserID==this.post.get('UserID').objectId){
+    this.isdelete=true; // 显示删除按钮
+  }
+}
+
+// 关闭更多模态框
+closeMoreModal() {
+  this.isMoreModalOpen = false;
+}
+
+// 确认删除操作
+async confirmDelete() {
+  const alert = await this.alertController.create({
+    header: '是否确认删除该动态',
+    message: '删除后将不可恢复,请谨慎操作。',
+    cssClass: 'custom-alert', // 添加自定义类
+    buttons: [
+      {
+        text: '暂不',
+        role: 'cancel',
+        handler: () => {
+          console.log('用户选择暂不');
+        }
+      },
+      {
+        text: '确认',
+        handler: () => {
+          this.deletePost(); // 调用删除函数
+        }
+      }
+    ]
+  });
+  await alert.present();
+}
+
+
+// 删除帖子函数
+async deletePost() {
+    const query = new CloudQuery('post')
+    query.equalTo('objectId', this.postId); // 查询帖子ID
+    const post = await query.first(); // 获取帖子对象
+    if (post) {
+      await post.destroy(); // 删除帖子
+      this.closeMoreModal(); // 关闭模态框
+      window.history.back(); // 返回上一页
+    }
+  
+}
 
 
 }