feat: implement composite debounced search with prepended select and wipe out duplicate root permission nodes

This commit is contained in:
DXC
2026-03-20 10:26:45 +08:00
parent 3bb3975022
commit 71e5f075d2
7 changed files with 344 additions and 126 deletions

View File

@ -3,13 +3,24 @@
<div class="filter-container">
<el-input
v-model="listQuery.keyword"
placeholder="单号/姓名/SKU/名称/规格"
placeholder="请输入关键词"
style="width: 250px;"
class="filter-item"
clearable
@input="debouncedSearch"
@clear="handleClearSearch"
/>
>
<template #prepend>
<el-select v-model="listQuery.search_type" placeholder="搜索类型" style="width: 110px" @change="debouncedSearch">
<el-option label="全部" value="all" />
<el-option label="单号" value="no" />
<el-option label="姓名" value="name" />
<el-option label="SKU" value="sku" />
<el-option label="物料名称" value="material_name" />
<el-option label="规格型号" value="spec_model" />
</el-select>
</template>
</el-input>
<el-date-picker
v-model="listQuery.dateRange"
type="daterange"
@ -187,6 +198,7 @@ const listQuery = reactive({
page: 1,
limit: 10,
keyword: '',
search_type: 'all',
dateRange: []
})

View File

@ -7,14 +7,25 @@
<el-radio-button label="returned">已归还</el-radio-button>
</el-radio-group>
<el-input
v-model="keyword"
placeholder="单号/借用人/SKU/名称/规格"
style="width: 250px"
<el-input
v-model="keyword"
placeholder="请输入关键词"
style="width: 250px"
clearable
@input="debouncedSearch"
@clear="handleClearSearch"
/>
>
<template #prepend>
<el-select v-model="searchType" placeholder="类型" style="width: 110px" @change="debouncedSearch">
<el-option label="全部" value="all" />
<el-option label="单号" value="no" />
<el-option label="借用人" value="name" />
<el-option label="SKU" value="sku" />
<el-option label="物料名称" value="material_name" />
<el-option label="规格型号" value="spec_model" />
</el-select>
</template>
</el-input>
<el-button type="primary" @click="fetchData">查询</el-button>
</div>
@ -171,6 +182,7 @@ const total = ref(0)
// ★ 修改点:默认状态改为 'borrowed' (未归还)
const status = ref('borrowed')
const keyword = ref('')
const searchType = ref('all')
const page = ref(1)
const loading = ref(false)
@ -183,7 +195,8 @@ const fetchData = async () => {
params: {
page: page.value,
status: status.value,
keyword: keyword.value
keyword: keyword.value,
search_type: searchType.value
}
})
list.value = res.data.items