fiee-official-website/src/views/press-releases/size1440/index.vue
2025-05-31 01:21:02 +08:00

189 lines
4.5 KiB
Vue
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.

<template>
<div class="press-releases-page">
<main class="p-[35px] max-w-[1200px] mx-auto">
<div class="title mb-[20px]">
{{ t("press_releases.title") }}
</div>
<div class="search-container">
<n-select
:options="state.selectOptions"
v-model:value="state.selectedValue"
class="search-select"
/>
<n-input
v-model:value="state.inputValue"
type="text"
:placeholder="t('press_releases.search.placeholder')"
class="search-input"
/>
<n-button
type="primary"
@click="handleSearch"
class="search-button w-[80px]"
>
{{ t("press_releases.search.button") }}
</n-button>
</div>
<div v-for="(item, idx) in state.filterNewsData" :key="idx">
<div class="news-item mt-[10px]">
<div class="news-item-date">{{ item.date }}</div>
<div
class="news-item-title text-[#0078d7] overflow-hidden whitespace-nowrap text-ellipsis cursor-pointer"
@click="handleNewClick(item)"
>
{{ item.title }}
</div>
<div class="news-item-content">
{{
item.content.length > 230
? item.content.substring(0, 230) + "..."
: item.content
}}
</div>
</div>
</div>
</main>
</div>
</template>
<script setup>
import customDefaultPage from "@/components/customDefaultPage/index.vue";
import { reactive, onMounted, watch } from "vue";
import { NSelect, NInput, NButton } from "naive-ui";
import { useI18n } from "vue-i18n";
import { useRouter } from "vue-router";
const router = useRouter();
const { t } = useI18n();
const state = reactive({
selectedValue: "all_years", //选中值
selectOptions: [
{
label: "All Years",
value: "all_years",
},
...Array.from({ length: 2025 - 1990 + 1 }, (_, i) => {
const year = 2025 - i;
return { label: String(year), value: String(year) };
}),
], //下拉选项
inputValue: "", //输入值
newsData: [
{
date: "May 30, 2025",
title: "FiEE, Inc. Announces Relisting on Nasdaq",
content:
'Hong Kong, May 30, 2025 — FiEE, Inc. ("FiEE, Inc." or the "Company"), a technology company integrating IoT, connectivity and AI to redefine brand management solutions...',
},
],
filterNewsData: [],
});
onMounted(() => {
state.filterNewsData = state.newsData;
});
const handleFilter = () => {
// 筛选逻辑
let filteredData = [...state.newsData];
// 按年份筛选
if (state.selectedValue !== "all_years") {
filteredData = filteredData.filter((item) => {
// 从日期字符串中提取年份,假设日期格式为 "May 30, 2025"
const dateMatch = item.date.match(/\b\d{4}\b/);
if (dateMatch) {
const year = dateMatch[0];
return year === state.selectedValue;
}
return false;
});
}
// 按输入内容进行模糊查询title 和 content
if (state.inputValue && state.inputValue.trim() !== "") {
const searchText = state.inputValue.toLowerCase().trim();
filteredData = filteredData.filter((item) => {
const titleMatch = item.title.toLowerCase().includes(searchText);
const contentMatch = item.content.toLowerCase().includes(searchText);
return titleMatch || contentMatch;
});
}
state.filterNewsData = filteredData;
};
// 添加 watcher 来实现自动筛选
watch(
() => [state.selectedValue, state.inputValue],
() => {
handleFilter();
},
{ immediate: true }
);
const handleSearch = () => {
// 手动触发筛选(保留这个函数以保持兼容性)
handleFilter();
console.log("筛选结果:", state.filterNewsData);
};
const handleNewClick = (item) => {
router.push({
path: "/news",
query: {
date: item.date,
},
});
};
</script>
<style scoped lang="scss">
.title {
font-size: 40px;
color: #333;
}
.search-container {
margin-bottom: 20px;
display: flex;
flex-direction: row;
align-items: center;
justify-content: flex-start;
gap: 10px;
}
.search-select {
width: 7rem;
:deep(.n-base-selection) {
padding: 4px 0;
}
}
.search-input {
width: 240px;
}
:deep(.n-input) {
.n-input__input {
padding: 4px 0;
// border: 1px solid #ccc;
border-radius: 4px;
}
}
:deep(.n-select) {
.n-select__input {
padding: 8px 12px;
border: 1px solid #ccc;
border-radius: 4px;
}
}
:deep(.n-button) {
padding: 20px 16px;
border-radius: 4px;
}
</style>