From fe1a1181320fd40427d2f7b273a74e7dfc192b3b Mon Sep 17 00:00:00 2001 From: wlkjyy Date: Wed, 7 Jan 2026 17:27:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B7=A5=E5=8D=95=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=85=B3=E9=94=AE=E8=AF=8D=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加关键词搜索输入框,支持搜索工单标题/内容 - 300ms 防抖优化搜索性能 - 支持与用户筛选同时使用 --- src/api/ticket.js | 3 ++- src/views/ticket/TicketList.vue | 34 ++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/api/ticket.js b/src/api/ticket.js index 5f2c459..87d4701 100644 --- a/src/api/ticket.js +++ b/src/api/ticket.js @@ -5,12 +5,13 @@ import request from "@/utils/request.js"; * @returns {Promise} */ -export function getTickerList(count, page, status, orderBy, order, userId) { +export function getTickerList(count, page, status, orderBy, order, userId, keyword) { const params = { count, page } if (status !== undefined && status !== '') params.status = status if (orderBy) params.orderBy = orderBy if (order) params.order = order if (userId) params.user_id = userId + if (keyword) params.keyword = keyword console.log('工单列表请求参数:', params) // 调试日志 return request.get('/api/v1/admin/work_order/list', params) } diff --git a/src/views/ticket/TicketList.vue b/src/views/ticket/TicketList.vue index bcb3956..d918b57 100644 --- a/src/views/ticket/TicketList.vue +++ b/src/views/ticket/TicketList.vue @@ -46,6 +46,19 @@ + + + + 刷新 @@ -187,6 +200,10 @@ const isLoading = ref(false) const ticketList = ref([]) const activeStatus = ref('pending') // 默认选中"待处理" +// 关键词搜索 +const searchKeyword = ref('') +const keywordSearchTimer = ref(null) + // 用户搜索 const userSearchKeyword = ref('') const userList = ref([]) @@ -248,7 +265,8 @@ const fetchTicketList = async () => { statusParam, sortBy.value, sortOrder.value, - selectedUser.value?.user_id + selectedUser.value?.user_id, + searchKeyword.value.trim() ) if (res.code === 200) { @@ -348,6 +366,17 @@ const clearUserFilter = () => { fetchTicketList() } +// 关键词搜索 +const handleKeywordSearch = () => { + if (keywordSearchTimer.value) { + clearTimeout(keywordSearchTimer.value) + } + keywordSearchTimer.value = setTimeout(() => { + currentPage.value = 1 + fetchTicketList() + }, 300) +} + // 按状态过滤 const filterByStatus = (status) => { if (activeStatus.value === status) return @@ -479,6 +508,9 @@ onBeforeUnmount(() => { if (userSearchTimer.value) { clearTimeout(userSearchTimer.value) } + if (keywordSearchTimer.value) { + clearTimeout(keywordSearchTimer.value) + } })