import { useState, useMemo } from 'react' import Taro from '@tarojs/taro' import { View, ScrollView } from '@tarojs/components' import { Search } from '@antmjs/vantui' import TaskCard from '@/components/TaskCard' import { tasks } from '@/mock/tasks' import './index.less' /** 筛选标签 */ const FILTER_TABS = [ { title: '全部', value: 'all' as const }, { title: '快递代取', value: 'express' as const }, { title: '二手交易', value: 'secondhand' as const }, { title: '求助', value: 'help' as const }, { title: '活动', value: 'activity' as const }, { title: '拼车', value: 'carpool' as const }, ] /** 任务类型 → emoji */ const TYPE_EMOJI: Record = { all: '📋', express: '📦', secondhand: '🛍️', help: '🆘', activity: '🎉', carpool: '🚗', } export default function Tasks() { const [activeFilter, setActiveFilter] = useState(0) const [searchValue, setSearchValue] = useState('') const filteredTasks = useMemo(() => { const filterValue = FILTER_TABS[activeFilter]?.value || 'all' let list = filterValue === 'all' ? tasks : tasks.filter((t) => t.type === filterValue) if (searchValue.trim()) { const kw = searchValue.trim().toLowerCase() list = list.filter( (t) => t.title.toLowerCase().includes(kw) || t.desc.toLowerCase().includes(kw) || t.location.toLowerCase().includes(kw), ) } return list }, [activeFilter, searchValue]) const handleTaskClick = (id: string) => { Taro.navigateTo({ url: `/pages/task-detail/index?id=${id}` }) } return ( {/* 搜索栏 */} setSearchValue(e.detail)} onClear={() => setSearchValue('')} /> {/* 分类标签 */} {FILTER_TABS.map((tab, idx) => ( setActiveFilter(idx)} > {TYPE_EMOJI[tab.value]} {tab.title} ))} {/* 任务列表 */} {filteredTasks.map((task) => ( handleTaskClick(task.id)} > ))} {filteredTasks.length === 0 && ( 暂无相关任务 )} ) }