ソースを参照

Merge branch 'master' of http://git.fmode.cn:3000/0225273/APPmy

0225268 4 ヶ月 前
コミット
2b0dea761f

+ 93 - 12
src/app/tab1/tab1.page.html

@@ -10,7 +10,38 @@
 <ion-content>
 
   <!-- 顶部搜索栏 -->
-  <ion-searchbar></ion-searchbar>
+  <div class="searchbar">
+    <div class="searchbar-wrapper">
+        <div class="searchbar-left">
+            <div class="search-icon-wrapper">
+                <span class="search-icon searchbar-icon">
+                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+                        <path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z">
+                        </path>
+                    </svg>
+                </span>
+            </div>
+        </div>
+
+        <div class="searchbar-center">
+            <div class="searchbar-input-spacer"></div>
+
+            <input type="text" class="searchbar-input" maxlength="2048" name="q" autocapitalize="off" autocomplete="off" title="Search" role="combobox" placeholder="Search">
+        </div>
+
+        <div class="searchbar-right">
+            <svg class="voice-search" role="button" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
+                <path fill="#4285f4" d="m12 15c1.66 0 3-1.31 3-2.97v-7.02c0-1.66-1.34-3.01-3-3.01s-3 1.34-3 3.01v7.02c0 1.66 1.34 2.97 3 2.97z">
+                </path>
+                <path fill="#34a853" d="m11 18.08h2v3.92h-2z"></path>
+                <path fill="#fbbc05" d="m7.05 16.87c-1.27-1.33-2.05-2.83-2.05-4.87h2c0 1.45 0.56 2.42 1.47 3.38v0.32l-1.15 1.18z">
+                </path>
+                <path fill="#ea4335" d="m12 16.93a4.97 5.25 0 0 1 -3.54 -1.55l-1.41 1.49c1.26 1.34 3.02 2.13 4.95 2.13 3.87 0 6.99-2.92 6.99-7h-1.99c0 2.92-2.24 4.93-5 4.93z">
+                </path>
+            </svg>
+        </div>
+    </div>
+</div>
 
   <!-- 导航栏 -->
   <ion-toolbar>
@@ -74,8 +105,8 @@
   <!-- 发现页 -->
   <div *ngIf="selectedSegment === 'explore'">
     <!-- 装修锦囊块 -->
-    <ion-card>
-      <ion-card-header>
+    <ion-card class="card__content">
+      <ion-card-header class="card-title">
         装修锦囊
       </ion-card-header>
       <ion-card-content>
@@ -84,8 +115,8 @@
           <ion-row>
             <!-- 空间设计块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="dice-outline"></ion-icon>
                     空间设计
@@ -121,8 +152,8 @@
             </ion-col>
             <!-- 装前必看块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="send-outline"></ion-icon>
                     装前必看
@@ -157,8 +188,8 @@
             </ion-col>
             <!-- 家具家电块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="desktop-outline"></ion-icon>
                     家具家电
@@ -193,8 +224,8 @@
             </ion-col>
             <!-- 家居软装块 -->
             <ion-col>
-              <ion-card>
-                <ion-card-header>
+              <ion-card class="card">
+                <ion-card-header class="card-title">
                   <ion-label>
                     <ion-icon name="bed-outline"></ion-icon>
                     家居软装
@@ -241,7 +272,32 @@
         </ion-thumbnail>
         <ion-label>
           <h2>{{item.title}}</h2>
-          <p>{{item.user}} - {{item.likes}} Likes</p>
+          <p>{{item.user}}</p>
+          <div class="like-wrapper">
+            <input class="check" type="checkbox" id="like-toggle" />
+            <label class="container" for="like-toggle">
+              <svg
+                viewBox="0 0 512 512"
+                xmlns="http://www.w3.org/2000/svg"
+                class="icon inactive"
+              >
+                <path
+                  d="M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8v-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5v3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20c0 0-.1-.1-.1-.1c0 0 0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5v3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2v-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z"
+                ></path>
+              </svg>
+              <svg
+                viewBox="0 0 512 512"
+                xmlns="http://www.w3.org/2000/svg"
+                class="icon active"
+              >
+                <path
+                  d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"
+                ></path>
+              </svg>
+              <div class="checkmark"></div>
+              <span class="like-text">{{item.likes}}</span>
+            </label>
+          </div>
           <p>{{item.comments}} Comments</p>
           <p>{{item.tags}}</p>
         </ion-label>
@@ -252,6 +308,31 @@
   <!-- 视频页 -->
   <div *ngIf="selectedSegment === 'video'">
     <!-- 视频内容 -->
+    <div class="like-wrapper">
+      <input class="check" type="checkbox" id="like-toggle" />
+      <label class="container" for="like-toggle">
+        <svg
+          viewBox="0 0 512 512"
+          xmlns="http://www.w3.org/2000/svg"
+          class="icon inactive"
+        >
+          <path
+            d="M225.8 468.2l-2.5-2.3L48.1 303.2C17.4 274.7 0 234.7 0 192.8v-3.3c0-70.4 50-130.8 119.2-144C158.6 37.9 198.9 47 231 69.6c9 6.4 17.4 13.8 25 22.3c4.2-4.8 8.7-9.2 13.5-13.3c3.7-3.2 7.5-6.2 11.5-9c0 0 0 0 0 0C313.1 47 353.4 37.9 392.8 45.4C462 58.6 512 119.1 512 189.5v3.3c0 41.9-17.4 81.9-48.1 110.4L288.7 465.9l-2.5 2.3c-8.2 7.6-19 11.9-30.2 11.9s-22-4.2-30.2-11.9zM239.1 145c-.4-.3-.7-.7-1-1.1l-17.8-20c0 0-.1-.1-.1-.1c0 0 0 0 0 0c-23.1-25.9-58-37.7-92-31.2C81.6 101.5 48 142.1 48 189.5v3.3c0 28.5 11.9 55.8 32.8 75.2L256 430.7 431.2 268c20.9-19.4 32.8-46.7 32.8-75.2v-3.3c0-47.3-33.6-88-80.1-96.9c-34-6.5-69 5.4-92 31.2c0 0 0 0-.1 .1s0 0-.1 .1l-17.8 20c-.3 .4-.7 .7-1 1.1c-4.5 4.5-10.6 7-16.9 7s-12.4-2.5-16.9-7z"
+          ></path>
+        </svg>
+        <svg
+          viewBox="0 0 512 512"
+          xmlns="http://www.w3.org/2000/svg"
+          class="icon active"
+        >
+          <path
+            d="M47.6 300.4L228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6 0 115.2 0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"
+          ></path>
+        </svg>
+        <div class="checkmark"></div>
+        <span class="like-text">like</span>
+      </label>
+    </div>
     <img src="assets\img\customer-avatar.jpg" alt="Example 0">
   </div>
 

+ 264 - 0
src/app/tab1/tab1.page.scss

@@ -28,3 +28,267 @@ p {
   color: #777;
   margin-bottom: 3px;
 }
+
+.like-wrapper {
+  --gap: 0.5em;
+  --radius: 0.35em;
+  
+  display: flex;
+  align-items: center; /* 垂直居中 */
+  justify-content: center; /* 按钮靠右 */
+  --dot-bg: #212121;
+  --dot-color: #313131;
+  --dot-size: 1px;
+  --dot-space: 11px;
+  background: linear-gradient(
+        90deg,
+        var(--dot-bg) calc(var(--dot-space) - var(--dot-size)),
+        transparent 1%
+      )
+      center / var(--dot-space) var(--dot-space),
+    linear-gradient(
+        var(--dot-bg) calc(var(--dot-space) - var(--dot-size)),
+        transparent 1%
+      )
+      center / var(--dot-space) var(--dot-space),
+    var(--dot-color);
+  border: 0.1em solid #313131;
+  padding: 0.5em;
+  border-radius: var(--radius);
+  box-shadow: 0 0 1em 0.5em rgba(0, 0, 0, 0.1);
+  cursor: pointer;
+  max-width: 25%; /* 按钮最大宽度为50% */
+  margin-left: auto; /* 靠右对齐 */
+}
+
+
+.check[type="checkbox"] {
+  display: none;
+}
+
+.container {
+  display: flex;
+  align-items: center;
+  cursor: pointer;
+  margin-top: -0.25em;
+  margin-bottom: -0.25em;
+}
+
+.icon {
+  width: 1.5em;
+  height: 1.5em;
+  margin-left: 0.5em;
+  fill: white;
+  transition: opacity 0.3s ease-in-out;
+}
+
+.icon.active {
+  display: none;
+  fill: #f52121;
+}
+
+.check[type="checkbox"]:checked + .container .icon.active {
+  display: inline-block;
+  animation: wiggle 0.5s ease-in-out;
+}
+
+.check[type="checkbox"]:checked + .container .icon.inactive {
+  display: none;
+}
+
+.like-text {
+  margin-left: 0.5em;
+  padding: 0.5em;
+  color: white;
+  font-family: Arial, sans-serif;
+  font-weight: bolder;
+}
+
+@keyframes wiggle {
+  0%,
+  100% {
+    transform: rotate(0deg);
+  }
+  25% {
+    transform: rotate(-10deg);
+  }
+  50% {
+    transform: rotate(10deg);
+  }
+  75% {
+    transform: rotate(-10deg);
+  }
+}
+
+.searchbar {
+  font-size: 14px;
+  font-family: arial, sans-serif;
+  color: #202124;
+  display: flex;
+  z-index: 3;
+  height: 44px;
+  background: white;
+  border: 1px solid #dfe1e5;
+  box-shadow: none;
+  border-radius: 24px;
+  margin: 10px auto;
+  width: auto;
+  max-width: 90%;
+}
+
+.searchbar:hover {
+  box-shadow: 0 1px 6px rgb(32 33 36 / 28%);
+  border-color: rgba(223,225,229,0);
+}
+
+.searchbar-wrapper {
+  flex: 1;
+  display: flex;
+  padding: 5px 8px 0 14px;
+}
+
+.searchbar-left {
+  font-size: 14px;
+  font-family: arial, sans-serif;
+  color: #202124;
+  display: flex;
+  align-items: center;
+  padding-right: 13px;
+  margin-top: -5px;
+}
+
+.search-icon-wrapper {
+  margin: auto;
+}
+
+.search-icon {
+  margin-top: 3px;
+  color: #9aa0a6;
+  height: 20px;
+  line-height: 20px;
+  width: 20px;
+}
+
+.searchbar-icon {
+  display: inline-block;
+  fill: currentColor;
+  height: 24px;
+  line-height: 24px;
+  position: relative;
+  width: 24px;
+}
+
+.searchbar-center {
+  display: flex;
+  flex: 1;
+  flex-wrap: wrap;
+}
+
+.searchbar-input-spacer {
+  color: transparent;
+  flex: 100%;
+  white-space: pre;
+  height: 34px;
+  font-size: 16px;
+}
+
+.searchbar-input {
+  background-color: transparent;
+  border: none;
+  margin: 0;
+  padding: 0;
+  color: rgba(0, 0, 0, .87);
+  word-wrap: break-word;
+  outline: none;
+  display: flex;
+  flex: 100%;
+  margin-top: -37px;
+  height: 34px;
+  font-size: 16px;
+  max-width: 100%;
+  width: 100%;
+}
+
+.searchbar-right {
+  display: flex;
+  flex: 0 0 auto;
+  margin-top: -5px;
+  align-items: stretch;
+  flex-direction: row
+}
+
+.searchbar-clear-icon {
+  margin-right: 12px
+}
+
+.voice-search {
+  flex: 1 0 auto;
+  display: flex;
+  cursor: pointer;
+  align-items: center;
+  border: 0;
+  background: transparent;
+  outline: none;
+  padding: 0 8px;
+  width: 2.8em;
+}
+
+.card {
+  //width: 190px;
+  //height: 254px;
+  border-radius: 20px;
+  padding: 5px;
+  box-shadow: rgba(151, 65, 252, 0.2) 0 15px 30px -5px;
+  background-image: linear-gradient(144deg,#af40ff76, #5a42f37c 50%,#00dbeb7c);
+}
+
+.card__content {
+  background: rgba(5, 6, 45, 0.125);
+  border-radius: 17px;
+  width: auto;
+  height: auto;
+}
+
+.card-title {
+  color: #333;
+  font-size: 1.5em;
+  font-weight: 600;
+  line-height: 2rem;
+ }
+
+ .card1 {
+  width: 190px;
+  height: 254px;
+  background-image: linear-gradient(163deg, #00ff75 0%, #3700ff 100%);
+  border-radius: 20px;
+  transition: all .3s;
+ }
+ 
+ .card2 {
+  width: 190px;
+  height: 254px;
+  background-color: #1a1a1a;
+  //border-radius:;
+  transition: all .2s;
+ }
+ 
+ .card2:hover {
+  transform: scale(0.98);
+  border-radius: 20px;
+ }
+ 
+ .card:hover {
+  box-shadow: 0px 0px 30px 1px rgba(0, 255, 117, 0.30);
+ }
+
+ .header {
+  display: flex;
+  flex-direction: column;
+}
+
+.price {
+  font-size: 3.75rem;
+  line-height: 1;
+  font-weight: 700;
+  color: #fff
+}

+ 1 - 1
src/app/tab1/tab1.page.ts

@@ -17,7 +17,7 @@ export class Tab1Page {
 
   // 在此处定义和初始化数据
   contentList = [
-    { image: 'assets/images/example1.jpghttps://img.zcool.cn/community/01df555d65edcea8012187f4e41c2f.jpg@2o.jpg', title: '示例标题1', user: '用户A', likes: 10, comments: 5, tags: '标签1, 标签2' },
+    { image: 'https://img.zcool.cn/community/01df555d65edcea8012187f4e41c2f.jpg@2o.jpg', title: '示例标题1', user: '用户A', likes: 10, comments: 5, tags: '标签1, 标签2' },
     { image: 'https://img.zcool.cn/community/01df555d65edcea8012187f4e41c2f.jpg@2o.jpg', title: '示例标题2', user: '用户B', likes: 20, comments: 8, tags: '标签3, 标签4' },
     // 添加更多示例数据
   ];

+ 8 - 7
src/app/tab2/tab2.page.html

@@ -28,8 +28,8 @@
   <div class="details-container">
     <!-- 装修公司详情页 -->
     <div *ngIf="selectedSegment === 'company'">
-      <!-- 装修公司详情页 -->
-      <ion-card *ngFor="let company of companies">
+      <div *ngFor="let company of companies">
+      <ion-card class="Company-card">
         <ion-card-header><ion-card-title> {{ company.name }}</ion-card-title>
       </ion-card-header>
         <ion-card-content>
@@ -46,7 +46,7 @@
             <ion-text>{{ company.description }}</ion-text>
           </ion-item>
           <!-- 公司服务 -->
-          <ion-card class="concept-card">
+          <ion-card class="company-card">
             <ion-card-header>
               公司服务:
             </ion-card-header>
@@ -55,7 +55,7 @@
             </ion-card-content>
           </ion-card>
           <!-- 公司优势 -->
-          <ion-card class="concept-card">
+          <ion-card class="company-card">
             <ion-card-header>
               公司优势:
             </ion-card-header>
@@ -64,12 +64,12 @@
             </ion-card-content>
           </ion-card>
           <!-- 公司案例 -->
-          <ion-card class="concept-card">
+          <ion-card class="company-card">
             <ion-card-header>
               公司案例:
             </ion-card-header>
             <ion-card-content>
-              <ion-text>{{ company.cases }}</ion-text>
+              <ion-text [innerHTML]="formatHtmlContent(company.cases)"></ion-text>
             </ion-card-content>
           </ion-card>
           <!-- 底部按钮 -->
@@ -80,11 +80,12 @@
         </ion-card-content>
       </ion-card>
     </div>
+    </div>
 
     <!-- 设计机构详情页 -->
     <div *ngIf="selectedSegment === 'design'">
     <div *ngFor="let designCompany of designCompanies">
-      <ion-card class="company-card">
+      <ion-card class="Angency-card">
         <ion-card-header>
           <ion-card-title>{{ designCompany.name }}</ion-card-title>
           <ion-card-subtitle>星级评分: {{ designCompany.starRating }} | 评价数量: {{ designCompany.reviewCount }}</ion-card-subtitle>

+ 20 - 3
src/app/tab2/tab2.page.scss

@@ -1,3 +1,20 @@
-.details-container {
-    padding: 20px;
-  }
+
+  .company-card ion-card-header {
+    color: rgb(52, 160, 255); /* 将文字颜色设置为黑色 */
+  }
+  
+  .company-card ion-card-header{
+    font-size: 1.4em; /* 增大字号至1.2em(根据需要调整大小) */
+  }
+  .company-card {
+    background-color: #e0ffd2; /* 设置ion-card的背景颜色为灰色(根据需要调整颜色) */
+    color: rgb(0, 0, 0); /* 设置文本颜色为黑色 */
+  }
+  .Company-card {
+    background-color: #f9ffdb; /* 设置ion-card的背景颜色为灰色(根据需要调整颜色) */
+    color: rgb(0, 0, 0); /* 设置文本颜色为黑色 */
+  }
+  .info-item {
+  background-color: #f9ffdb; /* 设置info-item的背景颜色为灰色(根据需要调整颜色) */
+  color: rgb(0, 0, 0); /* 设置文本颜色为黑色 */
+}