fiee-official-website/src/views/press-releases/size1920/index.vue

189 lines
4.7 KiB
Vue
Raw Normal View History

2025-05-23 00:50:08 +00:00
<template>
<div class="press-releases-page">
2025-05-30 17:21:02 +00:00
<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-[60px]"
>
{{ 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>
2025-05-30 17:21:02 +00:00
<div class="news-item-content">
{{
item.content.length > 230
? item.content.substring(0, 230) + "..."
: item.content
}}
</div>
2025-05-30 17:21:02 +00:00
</div>
</div>
</main>
2025-05-23 00:50:08 +00:00
</div>
</template>
2025-05-23 00:50:08 +00:00
<script setup>
2025-05-30 11:19:12 +00:00
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";
2025-05-30 11:19:12 +00:00
import { useRouter } from "vue-router";
const router = useRouter();
const { t } = useI18n();
const state = reactive({
2025-05-30 11:19:12 +00:00
selectedValue: "all_years", //选中值
selectOptions: [
{
2025-05-30 11:19:12 +00:00
label: "All Years",
value: "all_years",
},
...Array.from({ length: 2025 - 1990 + 1 }, (_, i) => {
2025-05-30 11:19:12 +00:00
const year = 2025 - i;
return { label: String(year), value: String(year) };
}),
], //下拉选项
2025-05-30 11:19:12 +00:00
inputValue: "", //输入值
newsData: [
{
date: "May 30, 2025",
2025-05-30 14:46:08 +00:00
title: "FiEE, Inc. Announces Relisting on Nasdaq",
2025-05-30 11:19:12 +00:00
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 = () => {
2025-05-30 11:19:12 +00:00
// 手动触发筛选(保留这个函数以保持兼容性)
handleFilter();
console.log("筛选结果:", state.filterNewsData);
};
const handleNewClick = (item) => {
router.push({
path: "/news",
query: {
date: item.date,
},
});
};
2025-05-23 00:50:08 +00:00
</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>