From d9a780fa538cb7a83aefa04e75cb53185d690d7d Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期五, 30 五月 2025 16:39:07 +0800
Subject: [PATCH] 微封装

---
 sub-pages/community/search-page.vue |  137 +++++++++++++++++++++++++++++++++++++--------
 1 files changed, 113 insertions(+), 24 deletions(-)

diff --git a/sub-pages/community/search-page.vue b/sub-pages/community/search-page.vue
index b87fa31..40eb1df 100644
--- a/sub-pages/community/search-page.vue
+++ b/sub-pages/community/search-page.vue
@@ -2,19 +2,30 @@
     <view class="search-page">
         <!-- 搜索框 -->
         <view class="search-bar">
-            <up-search v-model="searchValue" placeholder="新疆本地小团" show-action @search="onSearch" />
+            <up-search v-model="searchValue" :placeholder="searchPlaceHolder" show-action @search="onSearch"
+                @custom="onSearch" @click-icon="onSearch" />
         </view>
-
         <!-- 历史记录 -->
-        <view class="section">
+        <view class="section"  v-if="historyTags.length">
             <view class="section-title">
                 <text>历史记录</text>
-                <up-icon name="trash" size="20" @click="onClearHistory" class="delete-icon" />
-
+                <view v-if="!showCloseBtn"> <up-icon name="trash" size="20" @click="onClearHistory"
+                        class="delete-icon" /></view>
+                <view v-else class="action-group">
+                    <text class="action-btn" @click="onDeleteAll">全部删除</text>
+                    <text class="action-btn" @click="onClearHistory">完成</text>
+                </view>
             </view>
             <view class="tag-list">
-                <up-tag v-for="(item, index) in historyTags" :key="index" plain size="mini" class="tag" shape="circle"
-                    borderColor="#E9E9E9" color="#333333" textSize="20rpx">{{ item }}</up-tag>
+                <!-- <up-tag v-for="(item, index) in historyTags" :key="index" plain size="mini" class="tag" shape="circle"
+                    borderColor="#E9E9E9" color="#333333" textSize="20rpx">{{ item }}
+                    <up-icon name="close" size="10" @click="handleDeleteHistoryOne(item, index)" />
+                </up-tag> -->
+                <view v-for="(item, index) in historyTags" :key="index" @click.stop class="tag2">
+                    <view class="tag-text">{{ item }}</view>
+                    <up-icon v-if="showCloseBtn" name="close" size="10"
+                        @click.stop="handleDeleteHistoryOne(item, index)" />
+                </view>
             </view>
         </view>
 
@@ -57,9 +68,9 @@
                                     index === 2 ? 'gradient-yellow' : ''
                         ]">{{ index + 1 }}</text>
                         <text class="hot-text">{{ item.title }}</text>
-                        <up-tag v-if="item.tag"
+                        <up-tag v-if="item.tag" 
                             :type="item.tag === '热' ? 'error' : item.tag === '荐' ? 'warning' : 'primary'" size="mini"
-                            class="tag">
+                            class="tag" >
                             {{ item.tag }}
                         </up-tag>
                     </view>
@@ -67,18 +78,29 @@
                 </view>
             </view>
         </view>
+
+
+        <up-modal v-model:show="showModal" title="" showCancelButton confirmText="确定" cancelText="取消" @confirm="onConfirm">
+            <template #default>
+                <text style="color: red;">删除全部搜索历史</text>
+            </template>
+        </up-modal>
+
+
     </view>
 </template>
 
 <script setup lang="ts">
-import { ref } from 'vue'
+import { handleError, ref } from 'vue'
 import { onShow, onPullDownRefresh, onReachBottom } from '@dcloudio/uni-app'
+import { useGlobal } from '@/composables/useGlobal'
+const { $http, $message, $storage } = useGlobal()
 
+import { getSearchHistory, addSearchHistory, clearSearchHistory, removeSearchHistoryByIndex } from '@/sub-pages/utils/storageKeys'
 const searchValue = ref('')
-
-const historyTags = ref<string[]>([
-    '新疆靠谱旅行社', '重庆往返乌鲁木齐', '旅游行程安排文案', '旅游行程安排表'
-])
+const searchPlaceHolder = ref('新疆本地小团')
+const historyTags = ref<string[]>([])
+const showModal = ref(false)
 
 
 const guessList = [
@@ -99,17 +121,48 @@
     { title: '你可能不认识汪 but 一定看过汪', tag: '荐', views: '603.5万' }
 ]
 
-function onSearch(val: string) {
-    console.log('搜索内容:', val)
-}
-
-function onClearHistory() {
-    console.log('清除历史记录')
-    // 这里可以清空 historyTags 或调用实际删除逻辑
-    historyTags.value.length = 0
+const onSearch = () => {
+    // 这里判断,如果输入的内容是空的话,那么将searchPlaceHolder的值赋值给searchValue
+    if (!searchValue.value) {
+        searchValue.value = searchPlaceHolder.value
+    }
+    addSearchHistory(searchValue.value)
+    historyTags.value = getSearchHistory()
+    searchValue.value = ''
+    console.log('搜索内容:', searchValue.value)
+    // TODO 跳转到搜索页面
 
 }
+const showCloseBtn = ref(false) // 控制按钮显示
+const onClearHistory = () => {
+    showCloseBtn.value = !showCloseBtn.value
+}
 
+const onDeleteAll = () => {
+    showModal.value = true
+}
+
+const onConfirm = ()=>{
+  clearSearchHistory()
+  historyTags.value = getSearchHistory()
+  showModal.value = false
+}
+
+/**
+ * 删除一个 historyTags 中的项目
+ * @param item 列表项目
+ * @param index 
+ */
+const handleDeleteHistoryOne = (item: String, index: Number) => {
+    removeSearchHistoryByIndex(index)
+    historyTags.value = getSearchHistory()
+    onClearHistory()
+}
+
+
+onShow(() => {
+    historyTags.value = getSearchHistory()
+});
 </script>
 
 <style lang="scss" scoped>
@@ -138,7 +191,21 @@
             .icon-list {
                 display: flex;
                 gap: 10rpx;
+                color: #999;
             }
+
+            .action-group {
+                display: flex;
+                gap: 24rpx;
+                /* 控制两个按钮之间的间距 */
+
+                .action-btn {
+                    color: #999;
+                    font-size: 24rpx;
+                }
+            }
+
+
         }
 
         .hot-title {
@@ -151,7 +218,28 @@
             gap: 10rpx;
 
             .tag {
-                padding: 6rpx 20rpx;
+                padding: 6rpx;
+                display: flex;
+            }
+
+            .tag2 {
+                display: inline-flex;
+                align-items: center;
+                border: 1px solid #E9E9E9;
+                border-radius: 50rpx;
+                /* 模拟 shape="circle" */
+                padding: 4rpx 10rpx;
+                font-size: 20rpx;
+                /* textSize */
+                color: #333333;
+                /* color */
+                margin: 6rpx;
+                background-color: transparent;
+                /* plain 样式 */
+            }
+
+            .tag-text {
+                margin-right: 6rpx;
             }
         }
 
@@ -189,7 +277,7 @@
 
                 .hot-text {
                     font-weight: bold;
-                    font-size: 28rpx;
+                    font-size: 26rpx;
                     margin-left: 10rpx;
                     max-width: 400rpx;
                     display: inline-block;
@@ -219,6 +307,7 @@
 
                 .tag {
                     margin-left: 10rpx;
+                    font-size: 22rpx;
                 }
 
                 .hot-views {

--
Gitblit v1.9.3