fix: list query issues
This commit is contained in:
@@ -1,9 +1,13 @@
|
||||
import httpClient from './httpClient';
|
||||
|
||||
export const postService = {
|
||||
getPosts({ page = 1, limit = 10 } = {}) {
|
||||
getPosts({ page = 1, limit = 10, keyword = '' } = {}) {
|
||||
return httpClient.get('/admin/posts', {
|
||||
params: { page, limit }
|
||||
params: {
|
||||
page,
|
||||
limit,
|
||||
keyword: keyword.trim()
|
||||
}
|
||||
});
|
||||
},
|
||||
getPost(id) {
|
||||
|
||||
@@ -38,6 +38,7 @@ const mediaTypeOptions = ref([
|
||||
|
||||
const globalFilterValue = ref('');
|
||||
const loading = ref(false);
|
||||
const searchTimeout = ref(null);
|
||||
|
||||
// Sample data - in a real app, this would come from an API
|
||||
const posts = ref([]);
|
||||
@@ -116,7 +117,7 @@ const calculateDiscountPrice = (price, discount) => {
|
||||
return price * (1 - discount / 100);
|
||||
};
|
||||
|
||||
// Fetch posts data with pagination
|
||||
// Fetch posts data with pagination and search
|
||||
const fetchPosts = async () => {
|
||||
loading.value = true;
|
||||
try {
|
||||
@@ -126,7 +127,8 @@ const fetchPosts = async () => {
|
||||
|
||||
const response = await postService.getPosts({
|
||||
page: currentPage,
|
||||
limit: rows.value
|
||||
limit: rows.value,
|
||||
keyword: globalFilterValue.value
|
||||
});
|
||||
|
||||
posts.value = response.items.map(post => ({
|
||||
@@ -155,6 +157,18 @@ const onPage = (event) => {
|
||||
fetchPosts();
|
||||
};
|
||||
|
||||
// Handle search with debounce
|
||||
const onSearch = (event) => {
|
||||
if (searchTimeout.value) {
|
||||
clearTimeout(searchTimeout.value);
|
||||
}
|
||||
|
||||
searchTimeout.value = setTimeout(() => {
|
||||
first.value = 0; // Reset to first page when searching
|
||||
fetchPosts();
|
||||
}, 300);
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
fetchPosts();
|
||||
});
|
||||
@@ -195,7 +209,7 @@ const formatMediaTypes = (mediaTypes) => {
|
||||
<!-- Posts Table -->
|
||||
<div class="card mt-10">
|
||||
<div class="pb-10 flex">
|
||||
<InputText v-model="globalFilterValue" placeholder="搜索文章..." class="flex-1" />
|
||||
<InputText v-model="globalFilterValue" placeholder="搜索文章..." class="flex-1" @input="onSearch" />
|
||||
</div>
|
||||
|
||||
<DataTable v-model:filters="filters" :value="posts" :paginator="true" :rows="rows" :totalRecords="total"
|
||||
|
||||
Reference in New Issue
Block a user