Files
medical-mall/unpackage/cache/.app-android/sourcemap/pages/mall/consumer/search.kt.map

1 line
61 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"version":3,"sources":["pages/mall/consumer/search.uvue","pages/user/profile.uvue","uni_modules/ak-req/ak-req.uts","pages/mall/consumer/index.uvue","pages/user/change-password.uvue","pages/user/terms.uvue","pages/user/login.uvue","pages/user/center.uvue"],"sourcesContent":["<template>\r\n\t<view class=\"search-page\">\r\n\t\t<!-- 搜索头部 -->\r\n\t\t<view class=\"search-header\" :style=\"{ paddingTop: statusBarHeight + 'px' }\">\r\n\t\t\t<view class=\"search-bar-container\">\r\n\t\t\t\t<!-- 返回按钮:小于号加粗 -->\r\n\t\t\t\t<view class=\"back-btn\" @click=\"goBack\">\r\n\t\t\t\t\t<text class=\"back-icon\">&lt;</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t\r\n\t\t\t\t<!-- 搜索框 -->\r\n\t\t\t\t<view class=\"search-input-container\">\r\n\t\t\t\t\t<input\r\n\t\t\t\t\t\tclass=\"search-input\"\r\n\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t:value=\"searchKeyword\"\r\n\t\t\t\t\t\t@input=\"onInput\"\r\n\t\t\t\t\t\t@confirm=\"onSearch\"\r\n\t\t\t\t\t\tplaceholder=\"请输入商品名称、店铺\"\r\n\t\t\t\t\t\tplaceholder-class=\"placeholder\"\r\n\t\t\t\t\t\t:focus=\"autoFocus\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<!-- 清除按钮 -->\r\n\t\t\t\t\t<view v-if=\"searchKeyword\" class=\"clear-btn\" @click=\"clearSearch\">\r\n\t\t\t\t\t\t<text class=\"clear-icon\">×</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<!-- 相机图标 -->\r\n\t\t\t\t\t<view class=\"camera-btn\" @click=\"openCamera\">\r\n\t\t\t\t\t\t<text class=\"camera-icon\">📷</text>\r\n\t\t\t\t\t</view>\r\n\r\n\t\t\t\t\t<!-- 搜索按钮:移入输入框内部 -->\r\n\t\t\t\t\t<view class=\"inner-search-btn\" @click=\"onSearch\">\r\n\t\t\t\t\t\t<text class=\"inner-search-text\">搜索</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\r\n\t\t<!-- 错误状态(模拟服务器超时) -->\r\n\t\t<view v-if=\"isError\" class=\"error-state\" @click=\"retryLoad\">\r\n\t\t\t<view class=\"error-content\">\r\n\t\t\t\t<text class=\"error-icon\">⚠️</text>\r\n\t\t\t\t<text class=\"error-title\">加载服务器超时</text>\r\n\t\t\t\t<text class=\"error-desc\">请点击屏幕重试</text>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\r\n\t\t<!-- 主内容区域 -->\r\n\t\t<scroll-view \r\n\t\t\tv-else \r\n\t\t\tdirection=\"vertical\"\r\n\t\t\tclass=\"main-content\" \r\n\t\t\t:style=\"{ height: scrollHeight + 'px' }\"\r\n\t\t\t@scrolltolower=\"loadMore\"\r\n\t\t>\r\n\t\t\t<!-- 初始状态(无搜索词) -->\r\n\t\t\t<view v-if=\"searchKeyword == '' && showResults == false\">\r\n\t\t\t\t<!-- 搜索历史 -->\r\n\t\t\t\t<view v-if=\"searchHistory.length > 0\" class=\"search-history\">\r\n\t\t\t\t\t<view class=\"section-header\">\r\n\t\t\t\t\t\t<text class=\"section-title\">搜索历史</text>\r\n\t\t\t\t\t\t<view class=\"header-right\" @click=\"clearHistory\">\r\n\t\t\t\t\t\t\t<text class=\"clear-text\">清空</text>\r\n\t\t\t\t\t\t\t<text class=\"clear-icon-trash\">🗑️</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"history-tags\">\r\n\t\t\t\t\t\t<view\r\n\t\t\t\t\t\t\tv-for=\"(item, index) in searchHistory\"\r\n\t\t\t\t\t\t\t:key=\"index\"\r\n\t\t\t\t\t\t\tclass=\"history-tag\"\r\n\t\t\t\t\t\t\t@click=\"searchFromHistory(item)\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<text class=\"history-text\">{{ item }}</text>\r\n\t\t\t\t\t\t\t<view class=\"delete-tag-btn\" @click.stop=\"deleteHistoryItem(index)\">\r\n\t\t\t\t\t\t\t\t<text class=\"delete-icon\">×</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\r\n\t\t\t\t<!-- 热门搜索 -->\r\n\t\t\t\t<view class=\"hot-search\">\r\n\t\t\t\t\t<view class=\"section-header\">\r\n\t\t\t\t\t\t<text class=\"section-title\">热门搜索</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<view class=\"hot-tags\">\r\n\t\t\t\t\t\t<view\r\n\t\t\t\t\t\t\tv-for=\"(item, index) in hotSearchList\"\r\n\t\t\t\t\t\t\t:key=\"index\"\r\n\t\t\t\t\t\t\tclass=\"hot-tag\"\r\n\t\t\t\t\t\t\t:class=\"item.hot == true ? 'hot' : ''\"\r\n\t\t\t\t\t\t\t@click=\"searchFromHot(item.keyword)\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<text class=\"hot-rank\" :class=\"index < 3 ? 'top-three' : ''\">{{ index + 1 }}</text>\r\n\t\t\t\t\t\t\t<text class=\"hot-text\">{{ item.keyword }}</text>\r\n\t\t\t\t\t\t\t<text v-if=\"item.hot == true\" class=\"hot-icon\">🔥</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t\r\n\t\t\t\t<!-- 猜你需要 (新增功能) -->\r\n\t\t\t\t<view class=\"guess-you-like\">\r\n\t\t\t\t\t<view class=\"section-header\">\r\n\t\t\t\t\t\t<view class=\"title-with-icon\">\r\n\t\t\t\t\t\t\t<text class=\"section-icon\">✨</text>\r\n\t\t\t\t\t\t\t<text class=\"section-title\">猜你需要</text>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t<text class=\"refresh-btn\" @click=\"refreshGuessList\">换一批</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t\r\n\t\t\t\t\t<view class=\"guess-grid\">\r\n\t\t\t\t\t\t<view \r\n\t\t\t\t\t\t\tv-for=\"item in guessList\" \r\n\t\t\t\t\t\t\t:key=\"item.id\" \r\n\t\t\t\t\t\t\tclass=\"guess-item\"\r\n\t\t\t\t\t\t\t@click=\"viewProductDetail(item)\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<image class=\"guess-img\" :src=\"item.image\" mode=\"aspectFill\" />\r\n\t\t\t\t\t\t\t<text class=\"guess-name\" :lines=\"2\">{{ item.name }}</text>\r\n\t\t\t\t\t\t\t<view class=\"guess-bottom\">\r\n\t\t\t\t\t\t\t\t<text class=\"guess-price\">¥{{ item.price }}</text>\r\n\t\t\t\t\t\t\t\t<view class=\"guess-add-btn\" @click.stop=\"addToCart(item)\">\r\n\t\t\t\t\t\t\t\t\t<text class=\"guess-add-icon\">+</text>\r\n\t\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 搜索建议 -->\r\n\t\t\t<view v-if=\"searchKeyword != '' && showResults == false\" class=\"search-suggestions\">\r\n\t\t\t\t<view class=\"suggestions-list\">\r\n\t\t\t\t\t<view\r\n\t\t\t\t\t\tv-for=\"(suggestion, index) in searchSuggestions\"\r\n\t\t\t\t\t\t:key=\"index\"\r\n\t\t\t\t\t\tclass=\"suggestion-item\"\r\n\t\t\t\t\t\t@click=\"selectSuggestion(suggestion)\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<view class=\"suggestion-icon\">🔍</view>\r\n\t\t\t\t\t\t<text class=\"suggestion-text\">{{ suggestion }}</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 搜索结果 -->\r\n\t\t\t<view v-if=\"showResults\" class=\"search-results\">\r\n\t\t\t\t<!-- 店铺搜索结果 -->\r\n\t\t\t\t<view v-if=\"searchShopResults.length > 0\" class=\"shop-results-section\">\r\n\t\t\t\t\t<view class=\"section-top\">\r\n\t\t\t\t\t\t<text class=\"result-title-sm\">相关店铺</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t\t<scroll-view direction=\"horizontal\" class=\"shop-list-scroll\">\r\n\t\t\t\t\t\t<view class=\"shop-list-row\">\r\n\t\t\t\t\t\t\t<view \r\n\t\t\t\t\t\t\t\tv-for=\"shop in searchShopResults\" \r\n\t\t\t\t\t\t\t\t:key=\"shop.id\" \r\n\t\t\t\t\t\t\t\tclass=\"shop-card\"\r\n\t\t\t\t\t\t\t\t@click=\"viewShopDetail(shop)\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<image class=\"shop-logo\" :src=\"shop.logo\" mode=\"aspectFill\" />\r\n\t\t\t\t\t\t\t\t<view class=\"shop-info\">\r\n\t\t\t\t\t\t\t\t\t<text class=\"shop-name-txt\">{{ shop.name }}</text>\r\n\t\t\t\t\t\t\t\t\t<text class=\"shop-products-txt\">共{{ shop.productCount }}件商品</text>\r\n\t\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</scroll-view>\r\n\t\t\t\t</view>\r\n\r\n\t\t\t\t<view class=\"results-header\">\r\n\t\t\t\t\t<text class=\"results-title\">商品结果</text>\r\n\t\t\t\t\t<view class=\"filter-tabs\">\r\n\t\t\t\t\t\t<text \r\n\t\t\t\t\t\t\tclass=\"filter-tab\" \r\n\t\t\t\t\t\t\t:class=\"{ active: activeSort === 'default' }\"\r\n\t\t\t\t\t\t\t@click=\"switchSort('default')\"\r\n\t\t\t\t\t\t>综合</text>\r\n\t\t\t\t\t\t<text \r\n\t\t\t\t\t\t\tclass=\"filter-tab\" \r\n\t\t\t\t\t\t\t:class=\"{ active: activeSort === 'sales' }\"\r\n\t\t\t\t\t\t\t@click=\"switchSort('sales')\"\r\n\t\t\t\t\t\t>销量</text>\r\n\t\t\t\t\t\t<text \r\n\t\t\t\t\t\t\tclass=\"filter-tab\" \r\n\t\t\t\t\t\t\t:class=\"{ active: activeSort === 'price' }\"\r\n\t\t\t\t\t\t\t@click=\"switchSort('price')\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t价格 {{ activeSort === 'price' ? (priceSortAsc ? '↑' : '↓') : '' }}\r\n\t\t\t\t\t\t</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t\r\n\t\t\t\t<view v-if=\"searchResults.length > 0\" class=\"results-list\">\r\n\t\t\t\t\t<view\r\n\t\t\t\t\t\tv-for=\"product in searchResults\"\r\n\t\t\t\t\t\t:key=\"product.id\"\r\n\t\t\t\t\t\tclass=\"result-item\"\r\n\t\t\t\t\t\t@click=\"viewProductDetail(product)\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<image class=\"product-image\" :src=\"product.image\" mode=\"aspectFill\" />\r\n\t\t\t\t\t\t<text class=\"product-name\" :lines=\"2\">{{ product.name }}</text>\r\n\t\t\t\t\t\t<view class=\"product-bottom\">\r\n\t\t\t\t\t\t\t<text class=\"product-price\">¥{{ product.price }}</text>\r\n\t\t\t\t\t\t\t<view class=\"product-add-btn\" @click.stop=\"addToCart(product)\">\r\n\t\t\t\t\t\t\t\t<text class=\"add-icon\">+</text>\r\n\t\t\t\t\t\t\t</view>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t\r\n\t\t\t\t<!-- 空结果 - 仅在非加载状态且无结果时显示 -->\r\n\t\t\t\t<view v-if=\"!loading && searchResults.length === 0\" class=\"empty-result\">\r\n\t\t\t\t\t<text class=\"empty-icon\">🤔</text>\r\n\t\t\t\t\t<text class=\"empty-text\">未找到相关商品</text>\r\n\t\t\t\t\t<text class=\"empty-sub\">换个关键词试试吧</text>\r\n\t\t\t\t</view>\r\n\r\n\t\t\t\t<!-- 加载更多/加载中 - 在加载状态或有更多数据时显示 -->\r\n\t\t\t\t<view v-if=\"loading\" class=\"loading-more\">\r\n\t\t\t\t\t<view class=\"loading-spinner\"></view>\r\n\t\t\t\t\t<text class=\"loading-text\">加载中...</text>\r\n\t\t\t\t</view>\r\n\t\t\t\t\r\n\t\t\t\t<view v-if=\"!hasMore && searchResults.length > 0\" class=\"no-more\">\r\n\t\t\t\t\t<text class=\"no-more-text\">--- 到底了 ---</text>\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\r\n\t\t\t<!-- 底部安全区域 -->\r\n\t\t\t<view class=\"safe-area\"></view>\r\n\t\t</scroll-view>\r\n\t</view>\r\n</template>\r\n\r\n<script setup lang=\"uts\">\r\nimport { ref, reactive, onMounted, computed } from 'vue'\r\nimport { supabaseService } from '@/utils/supabaseService.uts'\r\nimport type { Product } from '@/utils/supabaseService.uts'\r\n\r\n// 状态定义\r\nconst statusBarHeight = ref(0)\r\nconst scrollHeight = ref(0)\r\nconst searchKeyword = ref('')\r\nconst showResults = ref(false)\r\nconst loading = ref(false)\r\nconst hasMore = ref(true)\r\nconst isError = ref(false) // 错误状态控制\r\nconst autoFocus = ref(true)\r\nconst activeSort = ref('default') // 当前排序方式: default, sales, price\r\nconst priceSortAsc = ref(false) // 价格排序是否为升序\r\n\r\ntype HotSearchItemType = {\r\n\tkeyword: string\r\n\thot: boolean\r\n}\r\n\r\ntype GuessItemType = {\r\n\tid: string\r\n\tname: string\r\n\tprice: number\r\n\timage: string\r\n\tsales: number\r\n\tmerchant_id: string\r\n}\r\n\r\ntype SearchResultType = {\r\n\tid: string\r\n\tname: string\r\n\timage: string\r\n\tprice: number\r\n\tspecification: string\r\n\ttag: string\r\n\tsales: number\r\n\tmerchant_id: string\r\n}\r\n\r\ntype ShopResultType = {\r\n\tid: string\r\n\tname: string\r\n\tlogo: string\r\n\tproductCount: number\r\n}\r\n\r\nconst searchHistory = ref<Array<string>>([])\r\nconst hotSearchList = ref<Array<HotSearchItemType>>([])\r\nconst guessList = ref<Array<GuessItemType>>([])\r\nconst allGuessItems = ref<Array<GuessItemType>>([])\r\nconst searchResults = ref<Array<SearchResultType>>([])\r\nconst searchShopResults = ref<Array<ShopResultType>>([])\r\n\r\nconst loadSearchHistory = () => {\r\n\tconst history = uni.getStorageSync('searchHistory')\r\n\tif (history != null) {\r\n\t\ttry {\r\n\t\t\tconst parsed = JSON.parse(history as string)\r\n\t\t\tif (Array.isArray(parsed)) {\r\n\t\t\t\tsearchHistory.value = parsed as string[]\r\n\t\t\t}\r\n\t\t} catch (e) {\r\n\t\t\tsearchHistory.value = []\r\n\t\t}\r\n\t}\r\n}\r\n\r\nconst saveSearchHistory = () => {\r\n\tuni.setStorageSync('searchHistory', JSON.stringify(searchHistory.value))\r\n}\r\n\r\nconst addToHistory = (keyword: string) => {\r\n\tif (keyword == '') return\r\n\tconst index = searchHistory.value.indexOf(keyword)\r\n\tif (index > -1) {\r\n\t\tsearchHistory.value.splice(index, 1)\r\n\t}\r\n\tsearchHistory.value.unshift(keyword)\r\n\tif (searchHistory.value.length > 10) searchHistory.value.pop()\r\n\tsaveSearchHistory()\r\n}\r\n\r\nconst clearHistory = () => {\r\n\tuni.showModal({\r\n\t\ttitle: '提示',\r\n\t\tcontent: '确定清空搜索历史吗?',\r\n\t\tsuccess: (res) => {\r\n\t\t\tif (res.confirm) {\r\n\t\t\t\tsearchHistory.value = []\r\n\t\t\t\tuni.removeStorageSync('searchHistory')\r\n\t\t\t}\r\n\t\t}\r\n\t})\r\n}\r\n\r\nconst deleteHistoryItem = (index: number) => {\r\n\tsearchHistory.value.splice(index, 1)\r\n\tsaveSearchHistory()\r\n}\r\n\r\nconst refreshGuessListItems = () => {\r\n if (allGuessItems.value.length > 0) {\r\n const arr: Array<GuessItemType> = []\r\n for (let i: number = 0; i < allGuessItems.value.length; i++) {\r\n arr.push(allGuessItems.value[i])\r\n }\r\n for (let i: number = arr.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1))\r\n const temp = arr[i]\r\n arr[i] = arr[j]\r\n arr[j] = temp\r\n }\r\n const result: Array<GuessItemType> = []\r\n const limit = arr.length < 6 ? arr.length : 6\r\n for (let i: number = 0; i < limit; i++) {\r\n result.push(arr[i])\r\n }\r\n guessList.value = result\r\n }\r\n}\r\n\r\nconst loadData = async (): Promise<void> => {\r\n\tisError.value = false\r\n\t\r\n\ttry {\r\n loadSearchHistory()\r\n \r\n // 获取热销商品,失败时使用空数组\r\n let hotProducts: Product[] = []\r\n try {\r\n const hotResult = await supabaseService.getHotProducts(30)\r\n hotProducts = hotResult as Product[]\r\n } catch (hotError) {\r\n console.error('获取热销商品失败,使用空列表:', hotError)\r\n hotProducts = []\r\n }\r\n \r\n const hotList: Array<HotSearchItemType> = []\r\n const limit1 = hotProducts.length < 10 ? hotProducts.length : 10\r\n for (let i: number = 0; i < limit1; i++) {\r\n const p = hotProducts[i]\r\n const item: HotSearchItemType = {\r\n keyword: p.name ?? '',\r\n hot: true\r\n }\r\n hotList.push(item)\r\n }\r\n hotSearchList.value = hotList\r\n \r\n const allItems: Array<GuessItemType> = []\r\n for (let i: number = 0; i < hotProducts.length; i++) {\r\n const p = hotProducts[i]\r\n const saleCount = p.sale_count\r\n const item: GuessItemType = {\r\n id: p.id ?? '',\r\n name: p.name ?? '',\r\n price: p.base_price ?? 0,\r\n image: p.main_image_url ?? '/static/default.jpg',\r\n sales: saleCount != null ? saleCount : 0,\r\n merchant_id: p.merchant_id ?? ''\r\n }\r\n allItems.push(item)\r\n }\r\n allGuessItems.value = allItems\r\n \r\n refreshGuessListItems()\r\n\r\n\t} catch (e) {\r\n\t\tconsole.error('Load data failed', e)\r\n\t\t// 不再显示错误页面,允许使用空数据\r\n\t\tisError.value = false\r\n\t}\r\n}\r\n\r\nconst retryLoad = () => {\r\n\tuni.showLoading({ title: '重新加载中' })\r\n\tsetTimeout(() => {\r\n\t\tuni.hideLoading()\r\n\t\tloadData()\r\n\t}, 1000)\r\n}\r\n\r\nconst searchSuggestions = ref<Array<string>>([])\r\nlet suggestTimer: number = 0\r\n\r\nconst fetchSuggestions = async (kw: string): Promise<void> => {\r\n if (kw == '' || showResults.value) return\r\n \r\n try {\r\n const res = await supabaseService.searchProducts(kw.trim(), 1, 5)\r\n if (res.data != null && res.data.length > 0) {\r\n const names: Array<string> = []\r\n for (let i: number = 0; i < res.data.length; i++) {\r\n const p = res.data[i]\r\n let name = ''\r\n if (p instanceof UTSJSONObject) {\r\n name = p.getString('name') ?? ''\r\n } else {\r\n const pObj = p as UTSJSONObject\r\n name = pObj.getString('name') ?? ''\r\n }\r\n let found = false\r\n for (let j: number = 0; j < names.length; j++) {\r\n if (names[j] === name) {\r\n found = true\r\n break\r\n }\r\n }\r\n if (found === false && name !== '') {\r\n names.push(name)\r\n }\r\n }\r\n searchSuggestions.value = names\r\n } else {\r\n searchSuggestions.value = []\r\n }\r\n } catch(e) {\r\n searchSuggestions.value = []\r\n }\r\n}\r\n\r\nconst currentPage = ref<number>(1)\r\n\r\nconst performSearch = async (): Promise<void> => {\r\n\tshowResults.value = true\r\n\tloading.value = true\r\n\tcurrentPage.value = 1\r\n\t\r\n\tconst keyword = searchKeyword.value.trim()\r\n\tif (keyword == '') {\r\n\t\tloading.value = false\r\n\t\treturn\r\n\t}\r\n\t\r\n\tlet sortBy = 'sales'\r\n\tlet ascending = false\r\n\tif (activeSort.value === 'price') {\r\n\t\tsortBy = 'price'\r\n\t\tascending = priceSortAsc.value\r\n\t} else if (activeSort.value === 'default') {\r\n sortBy = 'default'\r\n }\r\n\t\r\n try {\r\n const prodResp = await supabaseService.searchProducts(keyword, currentPage.value, 20, sortBy, ascending)\r\n \r\n let shopList: Array<ShopResultType> = []\r\n if (currentPage.value === 1 && activeSort.value === 'default') {\r\n const shopResp = await supabaseService.searchShops(keyword)\r\n if (shopResp.data != null && shopResp.data.length > 0) {\r\n for (let i: number = 0; i < shopResp.data.length; i++) {\r\n const s = shopResp.data[i]\r\n const shopItem: ShopResultType = {\r\n id: s.id ?? '',\r\n name: s.shop_name ?? '',\r\n logo: s.shop_logo ?? '/static/shop_logo_default.png',\r\n productCount: s.product_count ?? 0\r\n }\r\n shopList.push(shopItem)\r\n }\r\n }\r\n }\r\n searchShopResults.value = shopList\r\n\r\n const prodData = prodResp.data != null ? prodResp.data : []\r\n const resultList: Array<SearchResultType> = []\r\n for (let i: number = 0; i < prodData.length; i++) {\r\n const p = prodData[i] as Product\r\n let tag = ''\r\n const tagsRaw = p.tags\r\n if (tagsRaw != null) {\r\n try {\r\n const tagsStr = p.tags\r\n if (tagsStr != null) {\r\n const tags = JSON.parse(tagsStr as string)\r\n if (Array.isArray(tags) && tags.length > 0) {\r\n const firstTag = tags[0]\r\n tag = firstTag != null ? (firstTag as string) : ''\r\n }\r\n }\r\n } catch(e) {}\r\n }\r\n \r\n const searchItem: SearchResultType = {\r\n id: p.id ?? '',\r\n name: p.name ?? '',\r\n image: p.main_image_url ?? '/static/default.jpg',\r\n price: p.base_price ?? 0,\r\n specification: p.specification ?? '标准规格',\r\n tag: tag,\r\n sales: p.sale_count ?? 0,\r\n merchant_id: p.merchant_id ?? ''\r\n }\r\n resultList.push(searchItem)\r\n }\r\n searchResults.value = resultList\r\n \r\n hasMore.value = prodResp.hasmore\r\n } catch(e) {\r\n console.error('Search failed', e)\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst initPage = () => {\r\n\ttry {\r\n\t\tconst systemInfo = uni.getSystemInfoSync()\r\n\t\tstatusBarHeight.value = systemInfo.statusBarHeight ?? 0\r\n\t\tconst windowHeight = systemInfo.windowHeight\r\n\t\tscrollHeight.value = windowHeight - (60 + statusBarHeight.value)\r\n\t\t\r\n\t\tloadData()\r\n\t\t\r\n\t\tconst pages = getCurrentPages()\r\n\t\tif (pages.length > 0) {\r\n\t\t\tconst currentPageObj = pages[pages.length - 1]\r\n\t\t\t// @ts-ignore\r\n\t\t\tconst options = currentPageObj.options\r\n\t\t\tif (options != null) {\r\n\t\t\t\tconst optObj = options as UTSJSONObject\r\n\t\t\t\tconst kwRaw = optObj.getString('keyword')\r\n\t\t\t\tif (kwRaw != null && kwRaw !== '') {\r\n\t\t\t\t\tconst decoded = decodeURIComponent(kwRaw)\r\n\t\t\t\t\tconst keyword = decoded != null ? decoded : kwRaw\r\n\t\t\t\t\tsearchKeyword.value = keyword\r\n\t\t\t\t\t\r\n\t\t\t\t\tconst typeVal = optObj.getString('type')\r\n\t\t\t\t\tif (typeVal === 'family' || typeVal === 'brand') {\r\n\t\t\t\t\t\tif (typeVal === 'family') {\r\n\t\t\t\t\t\t addToHistory(keyword)\r\n }\r\n\t\t\t\t\t\tshowResults.value = true\r\n\t\t\t\t\t\tloading.value = true\r\n\t\t\t\t\t\tperformSearch()\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t} catch (e) {\r\n\t\tconsole.error('初始化失败', e)\r\n\t\tisError.value = true\r\n\t}\r\n}\r\n\r\nonMounted(() => {\r\n\tinitPage()\r\n})\r\n\r\nconst onInput = (e: any) => {\r\n\ttry {\r\n\t\tlet val = ''\r\n\t\t// 处理 input 事件的不同事件对象格式\r\n\t\tif (e != null) {\r\n\t\t\t// UTSJSONObject 格式 (e.detail.value)\r\n\t\t\tif (e instanceof UTSJSONObject) {\r\n\t\t\t\tconst eObj = e as UTSJSONObject\r\n\t\t\t\tconst detailObj = eObj.get('detail')\r\n\t\t\t\tif (detailObj != null && detailObj instanceof UTSJSONObject) {\r\n\t\t\t\t\tconst detail = detailObj as UTSJSONObject\r\n\t\t\t\t\tconst v = detail.get('value')\r\n\t\t\t\t\tval = v != null ? (v as string) : ''\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// 尝试转换为 UTSJSONObject\r\n\t\t\t\tconst eObj = JSON.parse(JSON.stringify(e)) as UTSJSONObject\r\n\t\t\t\tconst detailObj = eObj.get('detail')\r\n\t\t\t\tif (detailObj != null) {\r\n\t\t\t\t\tconst detail = detailObj as UTSJSONObject\r\n\t\t\t\t\tconst v = detail.get('value')\r\n\t\t\t\t\tval = v != null ? (v as string) : ''\r\n\t\t\t\t} else {\r\n\t\t\t\t\tconst v = eObj.get('value')\r\n\t\t\t\t\tval = v != null ? (v as string) : ''\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsearchKeyword.value = val\r\n\t\tif (val == '') {\r\n\t\t\tshowResults.value = false\r\n\t\t\tsearchSuggestions.value = []\r\n\t\t\treturn\r\n\t\t}\r\n\t\t\r\n\t\tif (suggestTimer > 0) clearTimeout(suggestTimer)\r\n\t\tsuggestTimer = setTimeout(() => {\r\n\t\t\tfetchSuggestions(val)\r\n\t\t}, 300)\r\n\t} catch (err) {\r\n\t\tconsole.error('onInput error:', err)\r\n\t}\r\n}\r\n\r\nconst clearSearch = () => {\r\n\tsearchKeyword.value = ''\r\n\tshowResults.value = false\r\n}\r\n\r\nconst onSearch = () => {\r\n\tif (searchKeyword.value.trim() == '') return\r\n\taddToHistory(searchKeyword.value.trim())\r\n\tperformSearch()\r\n}\r\n\r\nconst searchFromHistory = (keyword: string) => {\r\n\tsearchKeyword.value = keyword\r\n\tperformSearch()\r\n}\r\n\r\nconst searchFromHot = (keyword: string) => {\r\n\tsearchKeyword.value = keyword\r\n\taddToHistory(keyword)\r\n\tperformSearch()\r\n}\r\n\r\nconst selectSuggestion = (suggestion: string) => {\r\n\tsearchKeyword.value = suggestion\r\n\taddToHistory(suggestion)\r\n\tperformSearch()\r\n}\r\n\r\nconst switchSort = (type: string) => {\r\n\tif (type === 'price') {\r\n\t\tif (activeSort.value === 'price') {\r\n\t\t\tpriceSortAsc.value = !priceSortAsc.value\r\n\t\t} else {\r\n\t\t\tactiveSort.value = 'price'\r\n\t\t\tpriceSortAsc.value = true // 默认升序\r\n\t\t}\r\n\t} else {\r\n\t\tactiveSort.value = type\r\n\t}\r\n\t// 重新执行搜索以获取正确排序的数据\r\n\tperformSearch()\r\n}\r\n\r\nconst loadMore = async (): Promise<void> => {\r\n\tif (loading.value || hasMore.value == false || searchKeyword.value.trim() == '') return\r\n\tloading.value = true\r\n\t\r\n\tcurrentPage.value++\r\n\t\r\n\tconst keyword = searchKeyword.value.trim()\r\n\tlet sortBy = 'sales'\r\n\tlet ascending = false\r\n\tif (activeSort.value === 'price') {\r\n\t\tsortBy = 'price'\r\n\t\tascending = priceSortAsc.value\r\n\t} else if (activeSort.value === 'default') {\r\n sortBy = 'default'\r\n }\r\n\t\r\n try {\r\n const response = await supabaseService.searchProducts(keyword, currentPage.value, 20, sortBy, ascending)\r\n const respData = response.data != null ? response.data : []\r\n for (let i: number = 0; i < respData.length; i++) {\r\n const p = respData[i] as UTSJSONObject\r\n let tag = ''\r\n const tagsRaw = p.get('tags')\r\n if (tagsRaw != null) {\r\n try {\r\n const tagsStr = p.getString('tags')\r\n if (tagsStr != null) {\r\n const tags = JSON.parse(tagsStr)\r\n if (Array.isArray(tags) && tags.length > 0) {\r\n const firstTag = tags[0]\r\n tag = firstTag != null ? (firstTag as string) : ''\r\n }\r\n }\r\n } catch(e) {}\r\n }\r\n \r\n const searchItem: SearchResultType = {\r\n id: p.getString('id') ?? '',\r\n name: p.getString('name') ?? '',\r\n image: p.getString('main_image_url') ?? '/static/default.jpg',\r\n price: p.getNumber('base_price') ?? 0,\r\n specification: p.getString('specification') ?? '标准规格',\r\n tag: tag,\r\n sales: p.getNumber('sale_count') ?? 0,\r\n merchant_id: p.getString('merchant_id') ?? ''\r\n }\r\n searchResults.value.push(searchItem)\r\n }\r\n hasMore.value = response.hasmore\r\n } catch(e) {\r\n console.error('Load more failed', e)\r\n hasMore.value = false\r\n } finally {\r\n loading.value = false\r\n }\r\n}\r\n\r\nconst refreshGuessList = () => {\r\n\tuni.showLoading({ title: '刷新中' })\r\n setTimeout(() => {\r\n refreshGuessListItems()\r\n uni.hideLoading()\r\n }, 500)\r\n}\r\n\r\nconst viewProductDetail = (item: SearchResultType | GuessItemType) => {\r\n\tconst id = (item as GuessItemType).id\r\n\tconst price = (item as GuessItemType).price\r\n\tconst name = (item as GuessItemType).name\r\n\tuni.navigateTo({\r\n\t\turl: `/pages/mall/consumer/product-detail?productId=${id}&price=${price}&name=${encodeURIComponent(name)}`\r\n\t})\r\n}\r\n\r\nconst viewShopDetail = (shop: ShopResultType) => {\r\n uni.navigateTo({\r\n url: `/pages/mall/consumer/shop-detail?id=${shop.id}`\r\n })\r\n}\r\n\r\nconst addToCart = async (product: SearchResultType | GuessItemType) => {\r\n uni.showLoading({ title: '检查商品...' })\r\n try {\r\n // 统一转换为 UTSJSONObject 访问属性\r\n const prodObj = JSON.parse(JSON.stringify(product)) as UTSJSONObject\r\n const productId = prodObj.getString('id') ?? ''\r\n const merchantId = prodObj.getString('merchant_id') ?? ''\r\n \r\n // 检查商品是否有SKU\r\n const skus = await supabaseService.getProductSkus(productId)\r\n uni.hideLoading()\r\n \r\n if (skus.length > 0) {\r\n // 有规格,提示并跳转到商品详情页选择规格\r\n uni.showToast({ title: '请选择规格', icon: 'none' })\r\n setTimeout(() => {\r\n uni.navigateTo({\r\n url: '/pages/mall/consumer/product-detail?id=' + productId\r\n })\r\n }, 500)\r\n } else {\r\n // 无规格,直接加入购物车\r\n uni.showLoading({ title: '添加中...' })\r\n const success = await supabaseService.addToCart(productId, 1, '', merchantId)\r\n uni.hideLoading()\r\n if (success) {\r\n uni.showToast({ title: '已添加到购物车', icon: 'success' })\r\n } else {\r\n uni.showToast({ title: '添加失败,请先登录', icon: 'none' })\r\n }\r\n }\r\n } catch (e) {\r\n console.error('添加到购物车异常', e)\r\n uni.hideLoading()\r\n uni.showToast({ title: '操作异常', icon: 'none' })\r\n }\r\n}\r\n\r\nconst openCamera = () => {\r\n\tuni.chooseImage({\r\n\t\tcount: 1,\r\n\t\tsourceType: ['camera'],\r\n\t\tsuccess: (res) => {\r\n\t\t\tconsole.log('拍摄图片路径:', res.tempFilePaths[0])\r\n\t\t\tuni.showToast({ title: '已启用相机', icon: 'none' })\r\n\t\t},\r\n\t\tfail: (err) => {\r\n\t\t\tconsole.error('启用相机失败', err)\r\n\t\t}\r\n\t})\r\n}\r\n\r\nconst goBack = () => {\r\n\tif (showResults.value) {\r\n\t\t// 如果在搜索结果页,先返回到搜索初始页\r\n\t\tshowResults.value = false\r\n\t\tsearchKeyword.value = ''\r\n\t} else {\r\n\t\t// 如果在搜索初始页,则返回上一页\r\n const pages = getCurrentPages()\r\n if (pages.length > 1) {\r\n\t\t uni.navigateBack()\r\n } else {\r\n // 如果只有一页(由于深链接或重定向),返回首页\r\n uni.switchTab({\r\n url: '/pages/mall/consumer/index'\r\n })\r\n }\r\n\t}\r\n}\r\n</script>\r\n\r\n<style>\r\n.search-page {\r\n\twidth: 100%;\r\n\tflex: 1; /* Fixed 100vh */\r\n\tbackground-color: #f5f5f5;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n}\r\n\r\n/* 店铺搜索结果 */\r\n.shop-results-section {\r\n background-color: #fff;\r\n margin-bottom: 10px;\r\n padding: 10px 0;\r\n}\r\n\r\n.section-top {\r\n padding: 0 12px 10px;\r\n}\r\n\r\n.result-title-sm {\r\n font-size: 14px;\r\n font-weight: bold;\r\n color: #333;\r\n}\r\n\r\n.shop-list-scroll {\r\n width: 100%;\r\n white-space: nowrap;\r\n}\r\n\r\n.shop-list-row {\r\n display: flex;\r\n flex-direction: row;\r\n padding: 0 12px;\r\n}\r\n\r\n.shop-card {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n width: 80px;\r\n margin-right: 15px;\r\n background-color: #f9f9f9;\r\n padding: 10px 5px;\r\n border-radius: 8px;\r\n}\r\n\r\n.shop-logo {\r\n width: 48px;\r\n height: 48px;\r\n border-radius: 24px;\r\n margin-bottom: 5px;\r\n border: 1px solid #f0f0f0;\r\n background-color: white;\r\n}\r\n\r\n.shop-info {\r\n width: 100%;\r\n text-align: center;\r\n}\r\n\r\n.shop-name-txt {\r\n font-size: 12px;\r\n color: #333;\r\n width: 100%;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n /* display: block; REMOVED */\r\n margin-bottom: 2px;\r\n}\r\n\r\n.shop-products-txt {\r\n font-size: 10px;\r\n color: #999;\r\n}\r\n\r\n/* 头部样式 */\r\n.search-header {\r\n\tbackground-color: #ffffff;\r\n\tpadding-bottom: 10px;\r\n\r\n\r\n\r\n}\r\n\r\n.search-bar-container {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 必须显式设置 row */\r\n\talign-items: center;\r\n\tpadding: 10px 16px;\r\n\twidth: 100%; /* 确保占满宽度 */\r\n}\r\n\r\n.back-btn {\r\n\tpadding: 4px;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\twidth: 32px; /* 固定宽度防止压缩 */\r\n\theight: 32px;\r\n\tmargin-right: 12px;\r\n}\r\n\r\n.back-icon {\r\n\tfont-size: 24px;\r\n\tcolor: #333;\r\n\tfont-weight: bold;\r\n\tfont-family: monospace;\r\n}\r\n\r\n.search-input-container {\r\n\tflex: 1; /* 占据剩余空间 */\r\n\theight: 40px; /*稍微增高一点以容纳按钮*/\r\n\tbackground-color: #f0f0f0;\r\n\tborder-radius: 20px;\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 必须显式设置 row */\r\n\talign-items: center;\r\n\tpadding: 0 4px 0 12px;\r\n}\r\n\r\n.search-input {\r\n\tflex: 1;\r\n\tfont-size: 14px;\r\n\tcolor: #333;\r\n\theight: 100%;\r\n\tbackground-color: transparent; /* 确保背景透明 */\r\n}\r\n\r\n.placeholder {\r\n\tcolor: #999;\r\n}\r\n\r\n.clear-btn {\r\n\tpadding: 4px;\r\n\tmargin-right: 2px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.clear-icon {\r\n\tfont-size: 16px;\r\n\tcolor: #999;\r\n}\r\n\r\n.camera-btn {\r\n\tpadding: 4px 8px 4px 4px;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tborder-right-width: 1px; /* UVUE 边框写法 */\r\n\tborder-right-style: solid;\r\n\tborder-right-color: #ddd;\r\n\tmargin-right: 8px;\r\n}\r\n\r\n.camera-icon {\r\n\tfont-size: 20px;\r\n}\r\n\r\n/* 内部搜索按钮样式 */\r\n.inner-search-btn {\r\n\tpadding: 0 16px;\r\n\tbackground-color: #87CEEB;\r\n\tborder-radius: 16px;\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\theight: 32px;\r\n}\r\n\r\n.inner-search-text {\r\n\tfont-size: 13px;\r\n\tcolor: #ffffff;\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* 内容区域 */\r\n.main-content {\r\n\tflex: 1;\r\n\tpadding: 12px;\r\n\tbox-sizing: border-box;\r\n}\r\n\r\n/* 模块通用头部 */\r\n.section-header {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 显式设置 row */\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 12px;\r\n\tmargin-top: 8px;\r\n\twidth: 100%;\r\n}\r\n\r\n.section-title {\r\n\tfont-size: 15px;\r\n\tfont-weight: bold;\r\n\tcolor: #333;\r\n\tflex: 1; /* 占据左侧空间 */\r\n}\r\n\r\n.header-right {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 显式设置 row */\r\n\talign-items: center;\r\n\t/* gap: 4px; REMOVED */\r\n\tflex-shrink: 0; /* 防止被压缩 */\r\n}\r\n\r\n.clear-text {\r\n margin-right: 4px; /* REPLACED gap */\r\n\tfont-size: 12px;\r\n\tcolor: #999;\r\n}\r\n\r\n.clear-icon-trash {\r\n\tfont-size: 14px;\r\n}\r\n\r\n/* 搜索历史 */\r\n.search-history {\r\n\tmargin-bottom: 24px;\r\n\tpadding: 0 4px; /* 微调内边距 */\r\n}\r\n\r\n.history-tags {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 显式设置 row */\r\n\t/* gap: 10px; REMOVED */\r\n\tflex-wrap: wrap; /* 允许换行 */\r\n\tpadding: 0 4px;\r\n\talign-items: center;\r\n}\r\n\r\n.history-tag {\r\n\tbackground-color: #fff;\r\n\tpadding: 6px 12px;\r\n\tborder-radius: 16px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\t/* gap: 6px; REMOVED */\r\n\tflex-shrink: 0; /* 防止被压缩 */\r\n margin-right: 10px; /* REPLACED gap */\r\n margin-bottom: 10px; /* REPLACED gap */\r\n}\r\n\r\n.history-text {\r\n\tfont-size: 13px;\r\n\tcolor: #666;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\twhite-space: nowrap;\r\n margin-right: 6px; /* REPLACED gap */\r\n}\r\n\r\n.delete-tag-btn {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\twidth: 16px;\r\n\theight: 16px;\r\n\tborder-radius: 8px;\r\n\tbackground-color: #f0f0f0;\r\n}\r\n\r\n.delete-icon {\r\n\tfont-size: 12px;\r\n\tcolor: #999;\r\n\tline-height: 1;\r\n}\r\n\r\n/* 热门搜索 */\r\n.hot-search {\r\n\tmargin-bottom: 24px;\r\n}\r\n\r\n.hot-tags {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 显式设置 row */\r\n\tflex-wrap: wrap; /* 允许换行 */\r\n\t/* gap: 10px; REMOVED */\r\n\tpadding: 0 4px;\r\n}\r\n\r\n.hot-tag {\r\n /* ... existing styles ... */\r\n margin-right: 10px; /* REPLACED gap */\r\n margin-bottom: 10px; /* REPLACED gap */\r\n}\r\n\r\n.hot-tag {\r\n\tbackground-color: #fff;\r\n\tpadding: 6px 12px;\r\n\tborder-radius: 16px; /* 增加圆角,像胶囊一样 */\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\talign-items: center;\r\n\tflex-shrink: 0; /* 防止被压缩 */\r\n\tmargin-right: 10px; /* REPLACED gap */\r\n margin-bottom: 10px; /* REPLACED gap */\r\n}\r\n\r\n.hot-tag.hot {\r\n\tbackground-color: #fff0f0;\r\n}\r\n\r\n.hot-rank {\r\n\tfont-size: 12px;\r\n\tcolor: #999;\r\n\tfont-weight: bold;\r\n\tmargin-right: 6px;\r\n}\r\n\r\n.hot-rank.top-three {\r\n\tcolor: #ff5000;\r\n}\r\n\r\n.hot-text {\r\n\tfont-size: 13px;\r\n\tcolor: #333;\r\n}\r\n\r\n.hot-icon {\r\n\tfont-size: 12px;\r\n\tmargin-left: 4px;\r\n}\r\n\r\n/* 猜你需要 */\r\n.guess-you-like {\r\n\tmargin-bottom: 20px;\r\n}\r\n\r\n.title-with-icon {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n}\r\n\r\n.section-icon {\r\n\tfont-size: 16px;\r\n\tmargin-right: 6px;\r\n}\r\n\r\n.refresh-btn {\r\n\tfont-size: 12px;\r\n\tcolor: #4CAF50;\r\n}\r\n\r\n.guess-grid {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex-wrap: wrap;\r\n\tjustify-content: space-between;\r\n\tpadding: 0 4px;\r\n}\r\n\r\n.guess-item {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tbackground: #fff;\r\n\tborder-radius: 8px;\r\n\toverflow: hidden;\r\n\twidth: 48%;\r\n\tmargin-bottom: 12px;\r\n}\r\n\r\n.guess-img {\r\n\twidth: 100%;\r\n\theight: 170px;\r\n\tborder-radius: 8px;\r\n\tmargin-bottom: 8px;\r\n\tbackground: #f5f5f5;\r\n}\r\n\r\n.guess-name {\r\n\tfont-size: 13px;\r\n\tcolor: #333;\r\n\tmargin-bottom: 5px;\r\n\tline-height: 1.4;\r\n\theight: 36px;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\tpadding: 0 8px;\r\n}\r\n\r\n.guess-bottom {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tpadding: 0 8px 8px;\r\n}\r\n\r\n.guess-price {\r\n\tfont-size: 15px;\r\n\tcolor: #ff5000;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.guess-add-btn {\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tbackground-color: #ff5000;\r\n\tborder-radius: 12px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.guess-add-icon {\r\n\tcolor: #fff;\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* 搜索建议列表 */\r\n.search-suggestions {\r\n\tbackground-color: #fff;\r\n\tborder-radius: 8px;\r\n\tpadding: 0 12px;\r\n}\r\n\r\n.suggestion-item {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\theight: 44px;\r\n\tborder-bottom: 1px solid #f5f5f5;\r\n}\r\n\r\n.suggestion-icon {\r\n\tmargin-right: 10px;\r\n\tfont-size: 14px;\r\n\tcolor: #999;\r\n}\r\n\r\n.suggestion-text {\r\n\tfont-size: 14px;\r\n\tcolor: #333;\r\n}\r\n\r\n/* 搜索结果 */\r\n.search-results {\r\n\tpadding-bottom: 20px;\r\n}\r\n\r\n.results-header {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 显式设置 row */\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tmargin-bottom: 12px;\r\n\tflex-wrap: wrap; /* 允许换行以适应小屏 */\r\n}\r\n\r\n.results-title {\r\n\tfont-size: 15px;\r\n\tfont-weight: bold;\r\n\tcolor: #333;\r\n margin-right: 8px;\r\n}\r\n\r\n.filter-tabs {\r\n\tdisplay: flex;\r\n\tflex-direction: row; /* UVUE 显式设置 row */\r\n\tflex: 1; /* 自适应填充剩余空间 */\r\n\tjustify-content: flex-end; /* 靠右对齐 */\r\n}\r\n\r\n.filter-tab {\r\n\tfont-size: 13px;\r\n\tcolor: #666;\r\n\tpadding: 4px 8px; /* 增加点击区域 */\r\n\tmargin-left: 16px;\r\n}\r\n\r\n.filter-tab.active {\r\n\tcolor: #4CAF50;\r\n\tfont-weight: bold; /* REPLACED 500 */\r\n}\r\n\r\n.results-list {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tflex-wrap: wrap;\r\n\tjustify-content: space-between;\r\n\tpadding: 0 4px;\r\n}\r\n\r\n/* 响应式布局 */\r\n/* 平板设备 (768px以上) */\r\n@media screen and (min-width: 768px) {\r\n\t.results-list {\r\n\t\tpadding: 0 16px;\r\n\t}\r\n\t\r\n .result-item {\r\n width: 32%;\r\n }\r\n\r\n\t.guess-item {\r\n\t\twidth: 24%; /* 猜你喜欢在平板上显示4列 */\r\n\t}\r\n}\r\n\r\n/* 桌面设备 (1024px以上) */\r\n@media screen and (min-width: 1024px) {\r\n\t.results-list {\r\n\t\tpadding: 0 24px;\r\n\t}\r\n \r\n .result-item {\r\n width: 24%;\r\n }\r\n\t\r\n\t.guess-item {\r\n\t\twidth: 16%; /* 猜你喜欢在桌面上显示6列 */\r\n\t}\r\n\t\r\n\t/* 桌面端调整图片高度 */\r\n\t.product-image {\r\n\t\theight: 160px;\r\n\t}\r\n}\r\n\r\n.result-item {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\tbackground: #fff;\r\n\tborder-radius: 8px;\r\n\toverflow: hidden;\r\n\twidth: 48%;\r\n\tmargin-bottom: 12px;\r\n}\r\n\r\n.product-image {\r\n\twidth: 100%;\r\n\theight: 170px;\r\n\tborder-radius: 8px;\r\n\tmargin-bottom: 8px;\r\n\tbackground: #f5f5f5;\r\n}\r\n\r\n.product-name {\r\n\tfont-size: 13px;\r\n\tcolor: #333;\r\n\tmargin-bottom: 5px;\r\n\tline-height: 1.4;\r\n\theight: 36px;\r\n\toverflow: hidden;\r\n\ttext-overflow: ellipsis;\r\n\tpadding: 0 8px;\r\n}\r\n\r\n.product-bottom {\r\n\tdisplay: flex;\r\n\tflex-direction: row;\r\n\tjustify-content: space-between;\r\n\talign-items: center;\r\n\tpadding: 0 8px 8px;\r\n}\r\n\r\n.product-price {\r\n\tfont-size: 15px;\r\n\tcolor: #ff5000;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.product-add-btn {\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tbackground-color: #ff5000;\r\n\tborder-radius: 12px;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n}\r\n\r\n.add-icon {\r\n\tcolor: #fff;\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* 错误状态 */\r\n.error-state {\r\n\tflex: 1;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tbackground-color: #fff;\r\n}\r\n\r\n.error-content {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n}\r\n\r\n.error-icon {\r\n\tfont-size: 48px;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.error-title {\r\n\tfont-size: 16px;\r\n\tfont-weight: bold;\r\n\tcolor: #333;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.error-desc {\r\n\tfont-size: 14px;\r\n\tcolor: #999;\r\n}\r\n\r\n/* 加载更多 */\r\n.loading-more {\r\n\tpadding: 20px 0;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n}\r\n\r\n.loading-spinner {\r\n\twidth: 24px;\r\n\theight: 24px;\r\n\tborder: 2px solid #f0f0f0;\r\n\tborder-top-color: #4CAF50;\r\n\tborder-radius: 12px;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.loading-text {\r\n\tfont-size: 12px;\r\n\tcolor: #999;\r\n}\r\n\r\n.no-more {\r\n\tpadding: 20px 0;\r\n\ttext-align: center;\r\n}\r\n\r\n.no-more-text {\r\n\tfont-size: 12px;\r\n\tcolor: #ccc;\r\n}\r\n\r\n.empty-result {\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\talign-items: center;\r\n\tpadding: 40px 0;\r\n}\r\n\r\n.empty-icon {\r\n\tfont-size: 40px;\r\n\tmargin-bottom: 12px;\r\n}\r\n\r\n.empty-text {\r\n\tfont-size: 14px;\r\n\tcolor: #666;\r\n\tmargin-bottom: 4px;\r\n}\r\n\r\n.empty-sub {\r\n\tfont-size: 12px;\r\n\tcolor: #999;\r\n}\r\n\r\n.safe-area {\r\n\theight: 20px;\r\n}\r\n</style>\r\n\r\n",null,null,null,null,null,null,null],"names":[],"mappings":"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"}