feat(ui): add series filter to topics search area
Adds column/category filter dropdown in topics.html search form, with seriesOptions computed and filteredTopics logic Ultraworked with Sisyphus Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -65,8 +65,9 @@
|
|||||||
<el-form :model="searchForm" size="small" label-width="70px" @submit.prevent>
|
<el-form :model="searchForm" size="small" label-width="70px" @submit.prevent>
|
||||||
<el-row :gutter="12">
|
<el-row :gutter="12">
|
||||||
<el-col :span="6"><el-form-item label="选题ID"><el-input v-model="searchForm.id" placeholder="如 A07" clearable @input="doSearch"></el-input></el-form-item></el-col>
|
<el-col :span="6"><el-form-item label="选题ID"><el-input v-model="searchForm.id" placeholder="如 A07" clearable @input="doSearch"></el-input></el-form-item></el-col>
|
||||||
<el-col :span="10"><el-form-item label="标题"><el-input v-model="searchForm.title" placeholder="关键词" clearable @input="doSearch"></el-input></el-form-item></el-col>
|
<el-col :span="8"><el-form-item label="标题"><el-input v-model="searchForm.title" placeholder="关键词" clearable @input="doSearch"></el-input></el-form-item></el-col>
|
||||||
<el-col :span="8"><el-form-item label="领域"><el-input v-model="searchForm.field" placeholder="如 科技前沿" clearable @input="doSearch"></el-input></el-form-item></el-col>
|
<el-col :span="5"><el-form-item label="领域"><el-input v-model="searchForm.field" placeholder="如 科技前沿" clearable @input="doSearch"></el-input></el-form-item></el-col>
|
||||||
|
<el-col :span="5"><el-form-item label="栏目"><el-select v-model="searchForm.series" clearable placeholder="全部" style="width:100%;" @change="doSearch"><el-option v-for="s in seriesOptions" :key="s" :label="s" :value="s"></el-option></el-select></el-form-item></el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="12">
|
<el-row :gutter="12">
|
||||||
<el-col :span="12"><el-form-item label="创建时间">
|
<el-col :span="12"><el-form-item label="创建时间">
|
||||||
@@ -333,7 +334,7 @@ const TopicsApp = {
|
|||||||
currentPage: 1, pageSize: 10,
|
currentPage: 1, pageSize: 10,
|
||||||
sortField: 'created_at', sortOrder: 'ascending',
|
sortField: 'created_at', sortOrder: 'ascending',
|
||||||
showSearch: false,
|
showSearch: false,
|
||||||
searchForm: { id: '', title: '', field: '', createdStart: null, createdEnd: null, generatedStart: null, generatedEnd: null, reviewedStart: null, reviewedEnd: null, publishedStart: null, publishedEnd: null },
|
searchForm: { id: '', title: '', field: '', series: '', createdStart: null, createdEnd: null, generatedStart: null, generatedEnd: null, reviewedStart: null, reviewedEnd: null, publishedStart: null, publishedEnd: null },
|
||||||
createDialogVisible: false, createStep: 1, analyzing: false, saving: false,
|
createDialogVisible: false, createStep: 1, analyzing: false, saving: false,
|
||||||
fieldOptions: [],
|
fieldOptions: [],
|
||||||
createForm: { raw_input: '', reference_links: '', field_id: null },
|
createForm: { raw_input: '', reference_links: '', field_id: null },
|
||||||
@@ -341,9 +342,14 @@ const TopicsApp = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
seriesOptions() {
|
||||||
|
const s = new Set();
|
||||||
|
for (const t of this.topics) { if (t.series) s.add(t.series); }
|
||||||
|
return [...s].sort();
|
||||||
|
},
|
||||||
searchActive() {
|
searchActive() {
|
||||||
const f = this.searchForm;
|
const f = this.searchForm;
|
||||||
return !!(f.id || f.title || f.field || f.createdStart || f.createdEnd || f.generatedStart || f.generatedEnd || f.reviewedStart || f.reviewedEnd || f.publishedStart || f.publishedEnd);
|
return !!(f.id || f.title || f.field || f.series || f.createdStart || f.createdEnd || f.generatedStart || f.generatedEnd || f.reviewedStart || f.reviewedEnd || f.publishedStart || f.publishedEnd);
|
||||||
},
|
},
|
||||||
filteredTopics() {
|
filteredTopics() {
|
||||||
let list;
|
let list;
|
||||||
@@ -356,11 +362,12 @@ const TopicsApp = {
|
|||||||
}
|
}
|
||||||
// 搜索过滤
|
// 搜索过滤
|
||||||
const sf = this.searchForm;
|
const sf = this.searchForm;
|
||||||
if (sf.id || sf.title || sf.field || sf.createdStart || sf.createdEnd || sf.generatedStart || sf.generatedEnd || sf.reviewedStart || sf.reviewedEnd || sf.publishedStart || sf.publishedEnd) {
|
if (sf.id || sf.title || sf.field || sf.series || sf.createdStart || sf.createdEnd || sf.generatedStart || sf.generatedEnd || sf.reviewedStart || sf.reviewedEnd || sf.publishedStart || sf.publishedEnd) {
|
||||||
list = list.filter(t => {
|
list = list.filter(t => {
|
||||||
if (sf.id && !t.id.toLowerCase().includes(sf.id.toLowerCase())) return false;
|
if (sf.id && !t.id.toLowerCase().includes(sf.id.toLowerCase())) return false;
|
||||||
if (sf.title && !t.title.toLowerCase().includes(sf.title.toLowerCase())) return false;
|
if (sf.title && !t.title.toLowerCase().includes(sf.title.toLowerCase())) return false;
|
||||||
if (sf.field && !(t.field || '').toLowerCase().includes(sf.field.toLowerCase())) return false;
|
if (sf.field && !(t.field || '').toLowerCase().includes(sf.field.toLowerCase())) return false;
|
||||||
|
if (sf.series && (t.series || '') !== sf.series) return false;
|
||||||
const inRange = (val, start, end) => {
|
const inRange = (val, start, end) => {
|
||||||
if (!val) return !start && !end;
|
if (!val) return !start && !end;
|
||||||
const d = val.slice(0, 10);
|
const d = val.slice(0, 10);
|
||||||
|
|||||||
Reference in New Issue
Block a user