191 lines
4.9 KiB
TypeScript
191 lines
4.9 KiB
TypeScript
// 定义活动数据类型
|
|
interface Activity {
|
|
id: number;
|
|
title: string;
|
|
description: string;
|
|
imageUrl: string;
|
|
startTime: string;
|
|
endTime: string;
|
|
participants: number;
|
|
category: string;
|
|
status: 'ongoing' | 'upcoming';
|
|
}
|
|
|
|
// 定义分类数据类型
|
|
interface Category {
|
|
id: string;
|
|
name: string;
|
|
}
|
|
|
|
Page({
|
|
data: {
|
|
// 搜索关键词
|
|
searchKeyword: '',
|
|
|
|
// 当前选中的分类
|
|
currentCategory: 'all',
|
|
|
|
// 活动分类
|
|
categories: [] as Category[],
|
|
|
|
// 所有活动数据
|
|
activities: [] as Activity[],
|
|
|
|
// 过滤后的活动列表
|
|
filteredActivities: [] as Activity[]
|
|
},
|
|
|
|
onLoad() {
|
|
// 初始化分类
|
|
this.initCategories();
|
|
|
|
// 初始化活动数据
|
|
this.initActivities();
|
|
},
|
|
|
|
// 初始化分类
|
|
initCategories() {
|
|
const categories: Category[] = [
|
|
{ id: 'all', name: '全部活动' },
|
|
{ id: 'online', name: '线上活动' },
|
|
{ id: 'offline', name: '线下活动' },
|
|
{ id: 'exhibition', name: '展览活动' },
|
|
{ id: 'lecture', name: '讲座活动' }
|
|
];
|
|
|
|
this.setData({
|
|
categories
|
|
});
|
|
},
|
|
|
|
// 初始化活动数据
|
|
initActivities() {
|
|
const activities: Activity[] = [
|
|
{
|
|
id: 1,
|
|
title: '2023年度科技创新峰会',
|
|
description: '汇聚行业精英,探讨科技创新趋势与未来发展方向',
|
|
imageUrl: 'https://picsum.photos/400/300?random=1',
|
|
startTime: '2023-10-15',
|
|
endTime: '2023-10-17',
|
|
participants: 356,
|
|
category: 'offline',
|
|
status: 'ongoing'
|
|
},
|
|
{
|
|
id: 2,
|
|
title: '数字艺术线上展览',
|
|
description: '探索数字艺术的无限可能,足不出户欣赏艺术盛宴',
|
|
imageUrl: 'https://picsum.photos/400/300?random=2',
|
|
startTime: '2023-10-10',
|
|
endTime: '2023-11-10',
|
|
participants: 1243,
|
|
category: 'online',
|
|
status: 'ongoing'
|
|
},
|
|
{
|
|
id: 3,
|
|
title: '环保志愿者招募活动',
|
|
description: '一起参与环保行动,为城市绿化贡献一份力量',
|
|
imageUrl: 'https://picsum.photos/400/300?random=3',
|
|
startTime: '2023-10-20',
|
|
endTime: '2023-10-20',
|
|
participants: 89,
|
|
category: 'offline',
|
|
status: 'upcoming'
|
|
},
|
|
{
|
|
id: 4,
|
|
title: '现代艺术作品展',
|
|
description: '展示当代艺术家的最新创作,感受艺术的多元魅力',
|
|
imageUrl: 'https://picsum.photos/400/300?random=4',
|
|
startTime: '2023-10-05',
|
|
endTime: '2023-10-25',
|
|
participants: 752,
|
|
category: 'exhibition',
|
|
status: 'ongoing'
|
|
},
|
|
{
|
|
id: 5,
|
|
title: '人工智能前沿讲座',
|
|
description: '知名专家解析AI发展现状与未来应用场景',
|
|
imageUrl: 'https://picsum.photos/400/300?random=5',
|
|
startTime: '2023-10-22',
|
|
endTime: '2023-10-22',
|
|
participants: 156,
|
|
category: 'lecture',
|
|
status: 'upcoming'
|
|
},
|
|
{
|
|
id: 6,
|
|
title: '创意写作工作坊',
|
|
description: '提升写作技巧,激发创作灵感,适合各类写作爱好者',
|
|
imageUrl: 'https://picsum.photos/400/300?random=6',
|
|
startTime: '2023-10-18',
|
|
endTime: '2023-10-25',
|
|
participants: 68,
|
|
category: 'offline',
|
|
status: 'upcoming'
|
|
}
|
|
];
|
|
|
|
this.setData({
|
|
activities,
|
|
filteredActivities: activities
|
|
});
|
|
},
|
|
|
|
// 切换分类
|
|
switchCategory(e: { currentTarget: { dataset: { category: string } } }) {
|
|
const category = e.currentTarget.dataset.category;
|
|
this.setData({
|
|
currentCategory: category
|
|
}, () => {
|
|
this.filterActivities();
|
|
});
|
|
},
|
|
|
|
// 搜索输入变化
|
|
onSearchInput(e: { detail: { value: string } }) {
|
|
const keyword = e.detail.value.trim();
|
|
this.setData({
|
|
searchKeyword: keyword
|
|
}, () => {
|
|
this.filterActivities();
|
|
});
|
|
},
|
|
|
|
// 过滤活动列表
|
|
filterActivities() {
|
|
const { activities, currentCategory, searchKeyword } = this.data;
|
|
|
|
let filtered = [...activities];
|
|
|
|
// 按分类过滤
|
|
if (currentCategory !== 'all') {
|
|
filtered = filtered.filter(activity => activity.category === currentCategory);
|
|
}
|
|
|
|
// 按搜索关键词过滤
|
|
if (searchKeyword) {
|
|
const keyword = searchKeyword.toLowerCase();
|
|
filtered = filtered.filter(activity =>
|
|
activity.title.toLowerCase().includes(keyword) ||
|
|
activity.description.toLowerCase().includes(keyword)
|
|
);
|
|
}
|
|
|
|
this.setData({
|
|
filteredActivities: filtered
|
|
});
|
|
},
|
|
|
|
// 跳转到活动详情页
|
|
navigateToDetail(e: { currentTarget: { dataset: { id: number } } }) {
|
|
const id = e.currentTarget.dataset.id;
|
|
wx.navigateTo({
|
|
url: `/pages/activityDetail/activityDetail?id=${id}`
|
|
});
|
|
}
|
|
});
|
|
|