From 552238172036acf08ccf36134282a06b5e21b936 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 22 五月 2026 18:07:49 +0800
Subject: [PATCH] 代码生成

---
 small-program/pages/storage-point/storage-point.vue |  127 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 110 insertions(+), 17 deletions(-)

diff --git a/small-program/pages/storage-point/storage-point.vue b/small-program/pages/storage-point/storage-point.vue
index ea81ae8..ff80462 100644
--- a/small-program/pages/storage-point/storage-point.vue
+++ b/small-program/pages/storage-point/storage-point.vue
@@ -30,7 +30,7 @@
 					:class="{ active: currentDropdown === item.key }"
 					@click="toggleDropdown(item.key)"
 				>
-					<text>{{ filterLabels[item.key] }}</text>
+					<text :class="{ 'filter-text-bold': isFilterBold(item.key) }">{{ filterLabels[item.key] }}</text>
 					<image :src="currentDropdown === item.key ? '/static/icon/ar_open_sel@2x.png' : '/static/icon/ar_open1@2x.png'" mode="widthFix"></image>
 				</view>
 			</view>
@@ -43,7 +43,7 @@
 					:class="{ active: selectedFilters[currentDropdown] === option.value }"
 					@click="selectDropdownOption(option)"
 				>
-					<text>{{ option.label }}</text>
+					<text>{{ option.label||'' }}</text>
 					<u-icon v-if="selectedFilters[currentDropdown] === option.value" name="checkmark" size="24" color="#2F86F6"></u-icon>
 				</view>
 			</view>
@@ -53,7 +53,7 @@
 
 		<view class="content-wrap">
 			<view v-if="!isMapMode" class="card-list">
-				<view v-for="(item, index) in pointList" :key="index" class="point-card">
+				<view v-for="(item, index) in pointList" :key="index" class="point-card" @click="goShopDetails(item)">
 					<view class="thumb" :class="item.thumbClass">
 						<image :src="item.cover" mode="widthFix"></image>
 					</view>
@@ -62,11 +62,14 @@
 							<text class="point-name">{{ item.name }}</text>
 							<text class="point-distance">{{ item.distance }}</text>
 						</view>
+						<view class="point-tips">
+							<view class="point-tips-item" v-for="(tag, idx) in item.locationTagNames" :key="idx">{{ tag }}</view>
+						</view>
 						<view class="point-address">
 							<image src="/static/icon/home_ic_location3@2x.png" mode="widthFix"></image>
-							<text>{{ item.address }}</text>
+							<text>{{ item.address ||''}}</text>
 						</view>
-						<text class="point-time">{{ item.time }}</text>
+						<text class="point-time">{{ item.time|| '' }}</text>
 					</view>
 				</view>
 			</view>
@@ -103,6 +106,9 @@
 						</swiper>
 						<view class="popup-body">
 						<text class="popup-title">{{ activeStore.name }}</text>
+						<view class="point-tips">
+							<view class="point-tips-item" v-for="(tag, idx) in activeStore.locationTagNames" :key="idx">{{ tag }}</view>
+						</view>
 						<text class="popup-hours">{{ activeStore.time }}</text>
 						<text class="popup-desc" v-if="activeStore.content">{{ activeStore.content }}</text>
 						<view class="popup-address-row" @click="openNavigation">
@@ -118,12 +124,12 @@
 						<view class="popup-gap"></view>
 						<view class="popup-section">
 							<text class="popup-section-title">瀵勫瓨绫诲瀷</text>
-							<text class="popup-section-text">{{ activeStore.depositTypes }}</text>
+							<text class="popup-section-text">{{ activeStore.depositTypes || '' }}</text>
 						</view>
 						<view class="popup-gap"></view>
 						<view class="popup-section no-border">
 							<text class="popup-section-title">鏀惰垂鏍囧噯</text>
-							<text class="popup-section-text">{{ activeStore.feeStandard }}</text>
+							<text class="popup-section-text">{{ activeStore.feeStandard || '' }}</text>
 						</view>
 						</view>
 					</scroll-view>
@@ -134,6 +140,7 @@
 				</view>
 			</view>
 		</view>
+		<auth-login :show="showLogin" @close="showLogin = false"></auth-login>
 	</view>
 </template>
 
@@ -150,7 +157,8 @@
 				selectedFilters: {
 					sortType: '',
 					distance: '',
-					businessType: ''
+					businessType: '',
+					locationTagId: ''
 				},
 				mapCenter: {
 					latitude: 31.86119,
@@ -159,7 +167,8 @@
 				filters: [
 					{ key: 'sortType', label: '缁煎悎鎺掑簭' },
 					{ key: 'distance', label: '浣嶇疆鑼冨洿' },
-					{ key: 'businessType', label: '钀ヤ笟鏃堕棿' }
+					{ key: 'businessType', label: '钀ヤ笟鏃堕棿' },
+					{ key: 'locationTagId', label: '浣嶇疆鏍囩' }
 				],
 				dropdownOptions: {
 					sortType: [
@@ -178,19 +187,22 @@
 						{ label: '钀ヤ笟鏃堕棿', value: '' },
 						{ label: '鍏ㄥぉ钀ヤ笟', value: '1' },
 						{ label: '闄愭椂钀ヤ笟', value: '0' }
-					]
+					],
+					locationTagId: []
 				},
 				pointList: [],
-				isRequest: true
+				isRequest: true,
+				showLogin: false
 			}
 		},
 		computed: {
-			...mapState(['latitude', 'longitude', 'cityId']),
+			...mapState(['latitude', 'longitude', 'cityId', 'token']),
 			filterLabels() {
 				return {
 					sortType: this.getFilterLabel('sortType'),
 					distance: this.getFilterLabel('distance'),
-					businessType: this.getFilterLabel('businessType')
+					businessType: this.getFilterLabel('businessType'),
+					locationTagId: this.getFilterLabel('locationTagId')
 				}
 			},
 			currentOptions() {
@@ -230,12 +242,35 @@
 		},
 		async onLoad() {
 			await this.$onLaunched
+			this.getLocationTagList()
 			this.getNearbyShopList()
 		},
 		onReachBottom() {
 			this.getNearbyShopList()
 		},
 		methods: {
+			async getLocationTagList() {
+				const res = await this.$u.api.getCategoryList({ type: 5 })
+				if (res.code === 200) {
+					const list = (res.data || []).map(item => ({
+						label: item.name,
+						value: item.id
+					}))
+					this.dropdownOptions.locationTagId = [{ label: '浣嶇疆鏍囩', value: '' }, ...list]
+				}
+			},
+			isFilterBold(key) {
+				if (key === 'sortType') {
+					return true
+				}
+				const label = this.filterLabels[key]
+				if (key === 'distance') {
+					return label !== '浣嶇疆鑼冨洿'
+				} else if (key === 'businessType') {
+					return label !== '钀ヤ笟鏃堕棿'
+				}
+				return false
+			},
 			handleSearch() {
 				this.page = 1
 				this.pointList = []
@@ -260,13 +295,19 @@
 						name: this.keyword,
 						cityId: this.cityId,
 						sortType: this.selectedFilters.sortType || 1,
-						businessType: this.selectedFilters.businessType || ''
+						businessType: this.selectedFilters.businessType || '',
+						locationTagId: this.selectedFilters.locationTagId || ''
 					}
 				})
 				if (res.code === 200) {
 					let arr = []
 					res.data.records.forEach(item => {
+						let locationTagNames = []
+						if (item.locationTagNames) {
+							locationTagNames = item.locationTagNames.split(',')
+						}
 						let obj = {
+							id: item.id,
 							shopId: item.id,
 							name: item.name,
 							address: item.address,
@@ -276,7 +317,8 @@
 							latitude: item.latitude,
 							longitude: item.longitude,
 							depositTypes: item.depositTypes,
-							feeStandard: item.feeStandard
+							feeStandard: item.feeStandard,
+							locationTagNames: locationTagNames
 						}
 						arr.push(obj)
 					})
@@ -333,6 +375,9 @@
 					longitude: this.longitude,
 				}).then(res => {
 					if (res.code === 200) {
+						if (res.data.locationTagNames) {
+							res.data.locationTagNames = res.data.locationTagNames.split(',')
+						}
 						this.activeStore = res.data
 					}
 				})
@@ -366,8 +411,19 @@
 				})
 			},
 			storeLuggage() {
+				if (!this.token) {
+					this.showLogin = true
+					return
+				}
+				uni.setStorageSync('selectedStore', this.activeStore)
 				uni.navigateTo({
 					url: '/pages/luggage-storage/luggage-storage'
+				})
+			},
+			goShopDetails(item){
+				console.log(item)
+				uni.navigateTo({
+					url: '/pages/storage-point-detail/storage-point-detail?id='+item.id
 				})
 			}
 		}
@@ -526,7 +582,12 @@
 	.filter-item.active {
 		color: #222222;
 	}
-
+	
+	.filter-text-bold {
+		font-weight: 700;
+		color: #000000;
+	}
+	
 	.card-list {
 		padding: 30rpx;
 		box-sizing: border-box;
@@ -790,6 +851,25 @@
 		justify-content: space-between;
 		gap: 12rpx;
 	}
+	
+	.point-tips {
+		width: 100%;
+		display: flex;
+		align-items: center;
+		margin-top: 12rpx;
+		.point-tips-item {
+			width: 116rpx;
+			height: 36rpx;
+			line-height: 36rpx;
+			text-align: center;
+			border-radius: 8rpx;
+			font-weight: 400;
+			font-size: 20rpx;
+			color: #10B2FA;
+			margin-right: 12rpx;
+			border: 1rpx solid #10B2FA;
+		}
+	}
 
 	.point-name {
 		flex: 1;
@@ -820,10 +900,23 @@
 		width: 24rpx;
 		height: 24rpx;
 		margin-right: 4rpx;
+		flex-shrink: 0;
+	}
+
+	.point-address text {
+		width: 425rpx;
+		display: -webkit-box;
+		-webkit-line-clamp: 2;
+		-webkit-box-orient: vertical;
+		overflow: hidden;
 	}
 
 	.point-time {
-		display: block;
+		width: 425rpx;
+		display: -webkit-box;
+		-webkit-line-clamp: 1;
+		-webkit-box-orient: vertical;
+		overflow: hidden;
 		margin-top: 20rpx;
 		line-height: 1.5;
 		font-weight: 400;

--
Gitblit v1.9.3