Files
cn-rdms-web/src/views/feedback/modules/feedback-search.vue

56 lines
1.6 KiB
Vue
Raw Normal View History

2026-06-27 08:55:33 +08:00
<script setup lang="ts">
2026-06-29 09:53:24 +08:00
import { computed, onMounted, ref } from 'vue';
import { fetchGetUserSimpleList } from '@/service/api';
2026-06-27 08:55:33 +08:00
import TableSearchFields, { type SearchField } from '@/components/custom/table-search-fields.vue';
defineOptions({ name: 'FeedbackSearch' });
const emit = defineEmits<{
reset: [];
search: [];
}>();
const model = defineModel<Api.Feedback.FeedbackSearchParams>('model', { required: true });
2026-06-29 09:53:24 +08:00
// 提交人下拉选项全员简易列表value 取用户 idID 铁律 string
const userOptions = ref<{ label: string; value: string }[]>([]);
// 分类 / 状态筛选已迁移至左侧分面面板,搜索区保留标题关键词 + 提交人
const fields = computed<SearchField[]>(() => [
{ key: 'title', label: '标题', type: 'input', placeholder: '请输入标题关键词' },
{
key: 'creator',
label: '提交人',
type: 'select',
placeholder: '请选择提交人',
filterable: true,
options: userOptions.value
}
]);
async function loadUserOptions() {
const { data, error } = await fetchGetUserSimpleList();
if (!error && data) {
userOptions.value = data.map(item => ({ label: item.nickname, value: item.id }));
}
}
2026-06-27 08:55:33 +08:00
function reset() {
emit('reset');
}
function search() {
// 输入期不实时 trim避免受控 input 吃掉词间空格);提交前规整一次,空串归一为 undefined
model.value.title = model.value.title?.trim() || undefined;
emit('search');
}
2026-06-29 09:53:24 +08:00
onMounted(loadUserOptions);
2026-06-27 08:55:33 +08:00
</script>
<template>
2026-06-29 09:53:24 +08:00
<TableSearchFields v-model="model" :fields="fields" :columns="4" @reset="reset" @search="search" />
2026-06-27 08:55:33 +08:00
</template>
<style scoped></style>