pagetype列表页过滤栏增加ID字段,并实现模糊匹配
This commit is contained in:
parent
4e9ec53543
commit
9e468f9f13
@ -895,8 +895,12 @@ async function loadData() {
|
|||||||
const fieldMeta = metaFields.value.find(f => f.fieldname === fieldName)
|
const fieldMeta = metaFields.value.find(f => f.fieldname === fieldName)
|
||||||
const fieldType = fieldMeta?.fieldtype || ''
|
const fieldType = fieldMeta?.fieldtype || ''
|
||||||
|
|
||||||
|
// 特殊处理:name字段(ID)始终使用模糊搜索
|
||||||
|
if (fieldName === 'name' && typeof value === 'string') {
|
||||||
|
filterConditions.push([fieldName, 'like', `%${value}%`])
|
||||||
|
}
|
||||||
// Link字段类型:需要同时匹配字段值和title_field
|
// Link字段类型:需要同时匹配字段值和title_field
|
||||||
if (fieldType === 'Link' && typeof value === 'string' && fieldMeta?.options) {
|
else if (fieldType === 'Link' && typeof value === 'string' && fieldMeta?.options) {
|
||||||
// 收集Link字段过滤条件,稍后处理
|
// 收集Link字段过滤条件,稍后处理
|
||||||
linkFieldFilters.push({ fieldName, value: value as string, fieldMeta })
|
linkFieldFilters.push({ fieldName, value: value as string, fieldMeta })
|
||||||
} else if (['Data', 'Text', 'Long Text', 'Comment'].includes(fieldType)) {
|
} else if (['Data', 'Text', 'Long Text', 'Comment'].includes(fieldType)) {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<FilterBar
|
<FilterBar
|
||||||
v-if="fields.length > 0"
|
v-if="fieldsWithId.length > 0"
|
||||||
:fields="fields"
|
:fields="fieldsWithId"
|
||||||
:model-value="filters"
|
:model-value="filters"
|
||||||
@update:model-value="handleUpdateFilters"
|
@update:model-value="handleUpdateFilters"
|
||||||
@filter-change="handleFilterChange"
|
@filter-change="handleFilterChange"
|
||||||
@ -9,6 +9,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue'
|
||||||
import FilterBar from '@/core/components/FilterBar.vue'
|
import FilterBar from '@/core/components/FilterBar.vue'
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@ -24,6 +25,30 @@ interface Emits {
|
|||||||
const props = defineProps<Props>()
|
const props = defineProps<Props>()
|
||||||
const emit = defineEmits<Emits>()
|
const emit = defineEmits<Emits>()
|
||||||
|
|
||||||
|
// 确保ID字段在第一位
|
||||||
|
const fieldsWithId = computed(() => {
|
||||||
|
const existingFields = props.fields || []
|
||||||
|
|
||||||
|
// 检查是否已经有name字段
|
||||||
|
const hasNameField = existingFields.some(f => f.fieldname === 'name')
|
||||||
|
|
||||||
|
if (hasNameField) {
|
||||||
|
// 如果已经有name字段,将其移到第一位
|
||||||
|
const nameField = existingFields.find(f => f.fieldname === 'name')
|
||||||
|
const otherFields = existingFields.filter(f => f.fieldname !== 'name')
|
||||||
|
return [nameField, ...otherFields]
|
||||||
|
} else {
|
||||||
|
// 如果没有name字段,添加一个ID字段到第一位
|
||||||
|
const idField = {
|
||||||
|
fieldname: 'name',
|
||||||
|
label: 'ID',
|
||||||
|
fieldtype: 'Data',
|
||||||
|
in_standard_filter: 1
|
||||||
|
}
|
||||||
|
return [idField, ...existingFields]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
function handleUpdateFilters(value: Record<string, any>) {
|
function handleUpdateFilters(value: Record<string, any>) {
|
||||||
emit('update:filters', value)
|
emit('update:filters', value)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user