fix: 修复列表筛选空参与树数据展示
将后端 status/audit_status 筛选从 has() 改为 filled(),避免空字符串导致列表被误筛空;修复预定 status=0 筛选失效;前端兼容财务分类树形返回与菜单/字典数组返回,解决新增成功但列表空。
This commit is contained in:
@@ -1,6 +1,30 @@
|
||||
import axios from 'axios'
|
||||
import { ElMessage } from 'element-plus'
|
||||
|
||||
function normalizeParams(params) {
|
||||
if (!params || typeof params !== 'object') return params
|
||||
|
||||
const p = { ...params }
|
||||
|
||||
// Normalize pagination params (some endpoints use per_page, some use page_size)
|
||||
if (p.per_page !== undefined && p.per_page !== null && p.page_size === undefined) {
|
||||
p.page_size = p.per_page
|
||||
}
|
||||
if (p.page_size !== undefined && p.page_size !== null && p.per_page === undefined) {
|
||||
p.per_page = p.page_size
|
||||
}
|
||||
|
||||
// Remove empty filters to avoid backend `has('status')` treating '' as a real filter
|
||||
for (const key of Object.keys(p)) {
|
||||
const v = p[key]
|
||||
if (v === '' || v === null || v === undefined) {
|
||||
delete p[key]
|
||||
}
|
||||
}
|
||||
|
||||
return p
|
||||
}
|
||||
|
||||
const request = axios.create({
|
||||
baseURL: '/api/v1',
|
||||
timeout: 15000,
|
||||
@@ -17,6 +41,11 @@ request.interceptors.request.use(
|
||||
if (token) {
|
||||
config.headers['Authorization'] = `Bearer ${token}`
|
||||
}
|
||||
|
||||
if (config.params) {
|
||||
config.params = normalizeParams(config.params)
|
||||
}
|
||||
|
||||
return config
|
||||
},
|
||||
(error) => {
|
||||
|
||||
@@ -25,7 +25,7 @@ async function fetchList() {
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await financeCategoryApi.getList({ ...searchForm, ...pagination })
|
||||
tableData.value = res.data?.list || res.data?.data || []
|
||||
tableData.value = Array.isArray(res.data) ? res.data : (res.data?.list || res.data?.data || [])
|
||||
total.value = res.data?.total || 0
|
||||
} finally { loading.value = false }
|
||||
}
|
||||
|
||||
@@ -73,7 +73,8 @@ async function fetchTypeList() {
|
||||
keyword: typeSearch.keyword,
|
||||
...typePagination
|
||||
})
|
||||
typeList.value = res.data?.list || []
|
||||
const types = Array.isArray(res.data) ? res.data : (res.data?.list || res.data?.data || [])
|
||||
typeList.value = types
|
||||
typeTotal.value = res.data?.total || 0
|
||||
// Auto-select first type
|
||||
if (!selectedType.value && typeList.value.length > 0) {
|
||||
|
||||
@@ -64,8 +64,8 @@ async function fetchTree() {
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await menuApi.getList({ per_page: 500 })
|
||||
const flat = res.data?.list || res.data?.data || []
|
||||
treeData.value = buildTree(flat)
|
||||
const raw = Array.isArray(res.data) ? res.data : (res.data?.list || res.data?.data || [])
|
||||
treeData.value = buildTree(raw)
|
||||
} catch {
|
||||
//
|
||||
} finally {
|
||||
|
||||
Reference in New Issue
Block a user