From dfa74184416e745e20fc3a2389814eb6e899b806 Mon Sep 17 00:00:00 2001 From: hzj <1304805162@qq.com> Date: Mon, 15 Dec 2025 15:46:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E9=98=B2=E6=8A=96=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD):=20=E6=96=B0=E5=A2=9E=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E7=8A=B6=E6=80=81=EF=BC=8C=E9=98=B2=E6=AD=A2=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/Invitation/inviteAgency.vue | 38 ++++++++++--------- src/views/Invitation/inviteBD.vue | 30 +++++++++------ src/views/Invitation/inviteBDLeader.vue | 30 +++++++++------ src/views/Invitation/inviteRechargeAgency.vue | 30 +++++++++------ .../RechargeAgency/SellerRecordsView.vue | 20 +++++----- 5 files changed, 86 insertions(+), 62 deletions(-) diff --git a/src/views/Invitation/inviteAgency.vue b/src/views/Invitation/inviteAgency.vue index 335158a..3983485 100644 --- a/src/views/Invitation/inviteAgency.vue +++ b/src/views/Invitation/inviteAgency.vue @@ -38,7 +38,7 @@ name="" id="" :placeholder="t('enter_user_id')" - @keyup.enter="handleEnterPress" + @keyup.enter="debouncedSearch" @input="handleInputChange" style=" width: 100%; @@ -225,13 +225,7 @@ import { useDebounce } from '@/utils/useDebounce' import { handleAvatarImageError } from '@/utils/imageHandler.js' import { searchUser } from '@/api/userInfo' -import { - invitedList, - beInvitedList, - inviteToBeAgency, - handleInvite, - cancelInvite, -} from '@/api/bdCenter.js' +import { invitedList, inviteToBeAgency, cancelInvite } from '@/api/bdCenter.js' import GeneralHeader from '@/components/GeneralHeader.vue' @@ -246,6 +240,8 @@ const searchResults = ref([]) //搜索结果 const disInvite = ref(true) //不可邀请 const selectedUser = ref({}) //选中的用户 +const loading = ref(false) //正在获取数据 + //展示的用户列表 const showUserList = computed(() => { if (searchQuery.value) { @@ -278,27 +274,33 @@ const handleInputChange = () => { // 创建防抖版本的搜索函数 const debouncedSearch = useDebounce( async () => { + if (loading.value) return + + loading.value = true + console.log('搜索用户id:', searchQuery.value) searchResults.value = [] selectedUser.value = {} disInvite.value = true - if (searchQuery.value.trim()) { - const resSearchUser = await searchUser(searchQuery.value) - if (resSearchUser.status && resSearchUser.body) { - let targetUserInfo = { userProfile: resSearchUser.body } - searchResults.value.push(targetUserInfo) + + try { + if (searchQuery.value.trim()) { + const resSearchUser = await searchUser(searchQuery.value) + if (resSearchUser.status && resSearchUser.body) { + let targetUserInfo = { userProfile: resSearchUser.body } + searchResults.value.push(targetUserInfo) + } } + } catch (error) { + showError(error.response?.errorMsg) + } finally { + loading.value = false } }, 500, true ) -// 回车防抖搜索 -const handleEnterPress = async () => { - debouncedSearch() -} - // 选择用户 const toggleUserSelection = (user) => { console.log('选择用户:', user) diff --git a/src/views/Invitation/inviteBD.vue b/src/views/Invitation/inviteBD.vue index a7df7fd..995deac 100644 --- a/src/views/Invitation/inviteBD.vue +++ b/src/views/Invitation/inviteBD.vue @@ -38,7 +38,7 @@ name="" id="" :placeholder="t('enter_user_id')" - @keyup.enter="handleEnterPress" + @keyup.enter="debouncedSearch" @input="handleInputChange" style=" width: 100%; @@ -244,6 +244,8 @@ const searchResults = ref([]) //搜索结果 const disInvite = ref(true) //不可邀请 const selectedUser = ref({}) //选中的用户 +const loading = ref(false) //正在获取数据 + //展示的用户列表 const showUserList = computed(() => { if (searchQuery.value) { @@ -276,27 +278,33 @@ const handleInputChange = () => { // 创建防抖版本的搜索函数 const debouncedSearch = useDebounce( async () => { + if (loading.value) return + + loading.value = true + console.log('搜索用户id:', searchQuery.value) searchResults.value = [] selectedUser.value = {} disInvite.value = true - if (searchQuery.value.trim()) { - const resSearchUser = await searchUser(searchQuery.value) - if (resSearchUser.status && resSearchUser.body) { - let targetUserInfo = { userProfile: resSearchUser.body } - searchResults.value.push(targetUserInfo) + + try { + if (searchQuery.value.trim()) { + const resSearchUser = await searchUser(searchQuery.value) + if (resSearchUser.status && resSearchUser.body) { + let targetUserInfo = { userProfile: resSearchUser.body } + searchResults.value.push(targetUserInfo) + } } + } catch (error) { + showError(error.response?.errorMsg) + } finally { + loading.value = false } }, 500, true ) -// 回车防抖搜索 -const handleEnterPress = async () => { - debouncedSearch() -} - // 选择用户 const toggleUserSelection = (user) => { console.log('选择用户:', user) diff --git a/src/views/Invitation/inviteBDLeader.vue b/src/views/Invitation/inviteBDLeader.vue index 6fc3bf1..1229701 100644 --- a/src/views/Invitation/inviteBDLeader.vue +++ b/src/views/Invitation/inviteBDLeader.vue @@ -38,7 +38,7 @@ name="" id="" :placeholder="t('enter_user_id')" - @keyup.enter="handleEnterPress" + @keyup.enter="debouncedSearch" @input="handleInputChange" style=" width: 100%; @@ -243,6 +243,8 @@ const searchResults = ref([]) //搜索结果 const disInvite = ref(true) //不可邀请 const selectedUser = ref({}) //选中的用户 +const loading = ref(false) //正在获取数据 + //展示的用户列表 const showUserList = computed(() => { if (searchQuery.value) { @@ -275,27 +277,33 @@ const handleInputChange = () => { // 创建防抖版本的搜索函数 const debouncedSearch = useDebounce( async () => { + if (loading.value) return + + loading.value = true + console.log('搜索用户id:', searchQuery.value) searchResults.value = [] selectedUser.value = {} disInvite.value = true - if (searchQuery.value.trim()) { - const resSearchUser = await searchUser(searchQuery.value) - if (resSearchUser.status && resSearchUser.body) { - let targetUserInfo = { userProfile: resSearchUser.body } - searchResults.value.push(targetUserInfo) + + try { + if (searchQuery.value.trim()) { + const resSearchUser = await searchUser(searchQuery.value) + if (resSearchUser.status && resSearchUser.body) { + let targetUserInfo = { userProfile: resSearchUser.body } + searchResults.value.push(targetUserInfo) + } } + } catch (error) { + showError(error.response?.errorMsg) + } finally { + loading.value = false } }, 500, true ) -// 回车防抖搜索 -const handleEnterPress = async () => { - debouncedSearch() -} - // 选择用户 const toggleUserSelection = (user) => { console.log('选择用户:', user) diff --git a/src/views/Invitation/inviteRechargeAgency.vue b/src/views/Invitation/inviteRechargeAgency.vue index 4f2b028..d9e3280 100644 --- a/src/views/Invitation/inviteRechargeAgency.vue +++ b/src/views/Invitation/inviteRechargeAgency.vue @@ -38,7 +38,7 @@ name="" id="" :placeholder="t('enter_user_id')" - @keyup.enter="handleEnterPress" + @keyup.enter="debouncedSearch" @input="handleInputChange" style=" width: 100%; @@ -223,6 +223,8 @@ const searchResults = ref([]) //搜索结果 const disInvite = ref(true) //不可邀请 const selectedUser = ref({}) //选中的用户 +const loading = ref(false) //正在获取数据 + //展示的用户列表 const showUserList = computed(() => { if (searchQuery.value) { @@ -255,27 +257,33 @@ const handleInputChange = () => { // 创建防抖版本的搜索函数 const debouncedSearch = useDebounce( async () => { + if (loading.value) return + + loading.value = true + console.log('搜索用户id:', searchQuery.value) searchResults.value = [] selectedUser.value = {} disInvite.value = true - if (searchQuery.value.trim()) { - const resSearchUser = await searchUser(searchQuery.value) - if (resSearchUser.status && resSearchUser.body) { - let targetUserInfo = { userProfile: resSearchUser.body } - searchResults.value.push(targetUserInfo) + + try { + if (searchQuery.value.trim()) { + const resSearchUser = await searchUser(searchQuery.value) + if (resSearchUser.status && resSearchUser.body) { + let targetUserInfo = { userProfile: resSearchUser.body } + searchResults.value.push(targetUserInfo) + } } + } catch (error) { + showError(error.response?.errorMsg) + } finally { + loading.value = false } }, 500, true ) -// 回车防抖搜索 -const handleEnterPress = () => { - debouncedSearch() -} - // 选择用户 const toggleUserSelection = (user) => { console.log('选择用户:', user) diff --git a/src/views/RechargeAgency/SellerRecordsView.vue b/src/views/RechargeAgency/SellerRecordsView.vue index d93cffe..c679925 100644 --- a/src/views/RechargeAgency/SellerRecordsView.vue +++ b/src/views/RechargeAgency/SellerRecordsView.vue @@ -39,11 +39,11 @@ color: black; padding: 10px 8px; " - @keyup.enter="performSearch" + @keyup.enter="debouncedSearch" /> -
+
{{ t('search') }}
{{ t('cancel') }}
@@ -290,9 +290,8 @@ const incomeLoadmore = ref(null) const expenditureLoadmore = ref(null) const searchQuery = ref('') -const searchResults = ref([]) //搜索结果 -const isSearching = ref(false) const hasSearched = ref(false) +const searchResults = ref([]) //搜索结果 const selectedTab = ref({ id: 0, langKey: 'income' }) const tabItems = ref([]) // 存储标签DOM引用 @@ -396,8 +395,8 @@ const clearSearch = async () => { reSetObserve() // 重新绑定观察器 } -// 执行搜索 -const performSearch = useDebounce( +// 创建防抖版本的搜索函数 +const debouncedSearch = useDebounce( async () => { console.log('searchQuery.value:', searchQuery.value) @@ -406,8 +405,10 @@ const performSearch = useDebounce( return } - isSearching.value = true - hasSearched.value = false + // 使用已有的 loading 状态来防止并发请求 + if (loading.value) return + + hasSearched.value = true // 设置搜索状态 searchResults.value = [] if (searchQuery.value.trim()) { @@ -416,9 +417,6 @@ const performSearch = useDebounce( await fetchRecords() //搜索记录 reSetObserve() // 重新绑定观察器 } - - isSearching.value = false - hasSearched.value = true }, 500, true