From b64e2767c226edcb7099ea110fe53e733bf716f1 Mon Sep 17 00:00:00 2001 From: Timi Date: Sat, 20 Dec 2025 14:45:42 +0800 Subject: [PATCH] add fiilter for travel location list --- .../pages/main/travel-detail/index.less | 21 ++++++++++ miniprogram/pages/main/travel-detail/index.ts | 41 ++++++++++++++++--- .../pages/main/travel-detail/index.wxml | 10 ++++- 3 files changed, 66 insertions(+), 6 deletions(-) diff --git a/miniprogram/pages/main/travel-detail/index.less b/miniprogram/pages/main/travel-detail/index.less index 21c6b27..2f4473d 100644 --- a/miniprogram/pages/main/travel-detail/index.less +++ b/miniprogram/pages/main/travel-detail/index.less @@ -42,6 +42,27 @@ .header { padding: 16rpx 32rpx; + + .left-actions { + gap: 16rpx; + display: flex; + align-items: center; + + .type-picker { + + .picker-button { + gap: 8rpx; + color: var(--theme-wx); + border: 1px solid var(--theme-wx); + display: flex; + padding: 14rpx 24rpx 14rpx 32rpx; + font-size: 26rpx; + background: var(--theme-bg-card); + align-items: center; + border-radius: 16rpx; + } + } + } } .location { diff --git a/miniprogram/pages/main/travel-detail/index.ts b/miniprogram/pages/main/travel-detail/index.ts index 46d28f6..ce705d5 100644 --- a/miniprogram/pages/main/travel-detail/index.ts +++ b/miniprogram/pages/main/travel-detail/index.ts @@ -3,7 +3,7 @@ import Time from "../../../utils/Time"; import { TravelApi } from "../../../api/TravelApi"; import { TravelLocationApi } from "../../../api/TravelLocationApi"; -import { Travel, TravelStatusLabel, TravelStatusIcon, TransportationTypeLabel, TravelLocation, TravelLocationTypeLabel, TravelLocationTypeIcon, TransportationTypeIcon } from "../../../types/Travel"; +import { Travel, TravelStatusLabel, TravelStatusIcon, TransportationTypeLabel, TravelLocation, TravelLocationTypeLabel, TravelLocationTypeIcon, TransportationTypeIcon, TravelLocationType } from "../../../types/Travel"; interface TravelDetailData { /** 出行详情 */ @@ -28,6 +28,10 @@ interface TravelDetailData { locationTypeLabels: typeof TravelLocationTypeLabel; /** 地点类型图标映射 */ locationTypeIcons: typeof TravelLocationTypeIcon; + /** 地点类型选项 */ + locationTypes: string[]; + /** 选中的地点类型索引 */ + selectedLocationTypeIndex: number; /** 删除对话框可见性 */ deleteDialogVisible: boolean; /** 删除确认文本 */ @@ -47,6 +51,8 @@ Page({ transportIcons: TransportationTypeIcon, locationTypeLabels: TravelLocationTypeLabel, locationTypeIcons: TravelLocationTypeIcon, + locationTypes: ["全部", ...Object.values(TravelLocationTypeLabel)], + selectedLocationTypeIndex: 0, deleteDialogVisible: false, deleteConfirmText: "" }, @@ -109,12 +115,29 @@ Page({ this.setData({ isLoadingLocations: true }); try { + const { selectedLocationTypeIndex, locationTypes } = this.data; + + // 构建查询条件 + const equalsExample: { [key: string]: number | string } = { + travelId: Number(travelId) + }; + + // 添加类型过滤(索引 0 表示"全部") + if (0 < selectedLocationTypeIndex) { + const selectedTypeLabel = locationTypes[selectedLocationTypeIndex]; + const selectedType = Object.keys(TravelLocationTypeLabel).find( + key => TravelLocationTypeLabel[key as TravelLocationType] === selectedTypeLabel + ) as TravelLocationType | undefined; + + if (selectedType) { + equalsExample.type = selectedType; + } + } + const result = await TravelLocationApi.getList({ index: 0, - size: 100, - equalsExample: { - travelId: Number(travelId) - } + size: 999, + equalsExample }); this.setData({ locations: result.list }); @@ -125,6 +148,14 @@ Page({ } }, + /** 地点类型改变 */ + onLocationTypeChange(e: WechatMiniprogram.PickerChange) { + const index = Number(e.detail.value); + this.setData({ selectedLocationTypeIndex: index }); + // 重新从接口获取过滤后的数据 + this.fetchLocations(this.data.travelId); + }, + /** 编辑出行 */ toEdit() { const { travel } = this.data; diff --git a/miniprogram/pages/main/travel-detail/index.wxml b/miniprogram/pages/main/travel-detail/index.wxml index dbe53d5..dabbc14 100644 --- a/miniprogram/pages/main/travel-detail/index.wxml +++ b/miniprogram/pages/main/travel-detail/index.wxml @@ -52,7 +52,15 @@ 地点列表 - 地图浏览 + + 地图浏览 + + + {{locationTypes[selectedLocationTypeIndex]}} + + + +