20260923230500
This commit is contained in:
1 parent
e6935b8fa4
commit
0405cd198a
36 files changed
+3668
-911
No files matched your search
@@ -82,70 +82,116 @@ describe('buildQueryRender(query JSON → 查询入口)', () => {
|
||||
{ b_field: 'b_denied', b_name: '无权限字段', b_type: 'input' },
|
||||
]
|
||||
const query = {
|
||||
schemaVersion: 2,
|
||||
defaultViewCode: 'pending',
|
||||
schemaVersion: 3,
|
||||
views: [
|
||||
{ code: 'all', label: '全部', order: 20 },
|
||||
{ code: 'pending', label: '待处理', order: 10, showCount: true,
|
||||
conditions: [{ field: 'b_status', operator: 'eq', value: '1' }] },
|
||||
{ code: 'ghost', label: '幽灵页签', order: 30,
|
||||
conditions: [{ field: 'b_denied', operator: 'eq', value: 'x' }] },
|
||||
{
|
||||
code: 'pending',
|
||||
label: '待处理',
|
||||
order: 10,
|
||||
showCount: true,
|
||||
group: '状态',
|
||||
isDefault: true,
|
||||
},
|
||||
{
|
||||
code: 'audited',
|
||||
label: '已审核',
|
||||
order: 15,
|
||||
group: '审核状态',
|
||||
conditionSql: "b_status = N'2'",
|
||||
},
|
||||
{
|
||||
code: 'ghost',
|
||||
label: '幽灵页签',
|
||||
order: 30,
|
||||
conditions: [{ field: 'b_denied', operator: 'eq', value: 'x' }],
|
||||
},
|
||||
],
|
||||
keywordSearch: { placeholder: '搜索', trigger: 'enter_or_debounce', fields: ['b_no', 'b_denied'] },
|
||||
keywordSearch: { fields: ['b_no', 'b_denied'] },
|
||||
quickFilters: [
|
||||
{ field: 'b_created', order: 20 },
|
||||
{ field: 'b_status', order: 10 },
|
||||
{ field: 'b_denied', order: 30 },
|
||||
],
|
||||
filterGroups: [
|
||||
{ code: 'basic', label: '基础', order: 10, fields: ['b_no', 'b_status', 'b_denied'] },
|
||||
{ code: 'time', label: '时间', order: 20, fields: ['b_created'] },
|
||||
],
|
||||
queryFields: {
|
||||
b_status: { component: 'select', operator: 'eq' },
|
||||
b_created: { component: 'datetime', operator: 'between' },
|
||||
b_denied: { component: 'input', operator: 'eq' },
|
||||
},
|
||||
}
|
||||
|
||||
it('产出页签 / 关键词 / 快捷筛选 / 分组,条目按 order 排序', () => {
|
||||
it('产出分组页签 / 关键词 / 快捷筛选 / 更多筛选,条目按 order 排序', () => {
|
||||
const render = buildQueryRender(query, fields)
|
||||
expect(render.views.map((v) => [v.code, v.showCount])).toEqual([
|
||||
['pending', true],
|
||||
['all', false],
|
||||
['ghost', false],
|
||||
expect(render.views.map((v) => [v.code, v.group, v.showCount, v.conditionSql])).toEqual([
|
||||
['pending', '状态', true, ''],
|
||||
['audited', '审核状态', false, "b_status = N'2'"],
|
||||
['all', '', false, ''],
|
||||
['ghost', '', false, ''],
|
||||
])
|
||||
expect(render.defaultViewCode).toBe('pending')
|
||||
expect(render.defaultViewCodes).toEqual({ 状态: 'pending' })
|
||||
expect(render.quickFilters.map((item) => item.field.b_field)).toEqual(['b_status', 'b_created'])
|
||||
expect(render.filterGroups.map((g) => g.code)).toEqual(['basic', 'time'])
|
||||
expect(render.keywordSearch.items.map((item) => item.field.b_field)).toEqual(['b_no'])
|
||||
// 更多筛选 = 字段查询元数据全集去掉已进快捷筛选的字段(顺序即配置顺序)
|
||||
expect(render.moreFilters.map((item) => item.field.b_field)).toEqual(['b_no', 'b_denied'])
|
||||
expect(render.keywordSearch.items.map((item) => item.field.b_field)).toEqual([
|
||||
'b_no',
|
||||
'b_denied',
|
||||
])
|
||||
})
|
||||
|
||||
it('字段项统一为 FmsQueryControl 消费的形状,算子缺省按字段类型推导', () => {
|
||||
const render = buildQueryRender(query, fields)
|
||||
const statusItem = render.quickFilters[0]
|
||||
expect(statusItem.config).toMatchObject({ b_field: 'b_status', b_component: 'select', b_operator: 'eq' })
|
||||
const createdItem = render.filterGroups[1].items[0]
|
||||
expect(createdItem.config.b_operator).toBe('between')
|
||||
expect(statusItem.config).toMatchObject({
|
||||
b_field: 'b_status',
|
||||
b_component: 'select',
|
||||
b_operator: 'eq',
|
||||
})
|
||||
// 已登记的字段沿用配置算子
|
||||
const deniedItem = render.moreFilters.find((item) => item.field.b_field === 'b_denied')
|
||||
expect(deniedItem.config.b_operator).toBe('eq')
|
||||
// queryFields 未登记的字段按 b_type 推导:input → like
|
||||
const noItem = render.filterGroups[0].items[0]
|
||||
const noItem = render.moreFilters.find((item) => item.field.b_field === 'b_no')
|
||||
expect(noItem.config.b_operator).toBe('like')
|
||||
})
|
||||
|
||||
it('无权限字段不进任何入口;引用它的页签整条丢弃', () => {
|
||||
it('无权限字段不进任何入口;旧结构页签引用它则整条丢弃(SQL 条件无法解析,原样保留)', () => {
|
||||
const render = buildQueryRender(query, fields, new Set(['b_no', 'b_status', 'b_created']))
|
||||
expect(render.views.map((v) => v.code)).toEqual(['pending', 'all'])
|
||||
expect(render.views.map((v) => v.code)).toEqual(['pending', 'audited', 'all'])
|
||||
expect(render.quickFilters.map((item) => item.field.b_field)).toEqual(['b_status', 'b_created'])
|
||||
expect(render.keywordSearch).toBeNull()
|
||||
expect(render.filterGroups[0].items.map((item) => item.field.b_field)).toEqual(['b_no', 'b_status'])
|
||||
expect(render.keywordSearch.items.map((item) => item.field.b_field)).toEqual(['b_no'])
|
||||
expect(render.moreFilters.map((item) => item.field.b_field)).toEqual(['b_no'])
|
||||
})
|
||||
|
||||
it('老数据兼容:顶层 defaultViewCode 落到所属分组,结构化条件原样保留', () => {
|
||||
const legacy = {
|
||||
schemaVersion: 2,
|
||||
defaultViewCode: 'pending',
|
||||
views: [
|
||||
{
|
||||
code: 'pending',
|
||||
label: '待处理',
|
||||
order: 10,
|
||||
conditions: [{ field: 'b_status', operator: 'eq', value: '1' }],
|
||||
},
|
||||
{ code: 'audited', label: '已审核', order: 20, group: '审核状态' },
|
||||
],
|
||||
queryFields: {},
|
||||
}
|
||||
const render = buildQueryRender(legacy, fields)
|
||||
expect(render.defaultViewCodes).toEqual({ '': 'pending' })
|
||||
expect(render.views[0].conditionSql).toBe('')
|
||||
expect(render.views[0].conditions).toEqual([
|
||||
{ field: 'b_status', operator: 'eq', value: '1' },
|
||||
])
|
||||
})
|
||||
|
||||
it('未配置查询时返回空结构', () => {
|
||||
const render = buildQueryRender(null, fields)
|
||||
expect(render.views).toEqual([])
|
||||
expect(render.defaultViewCode).toBe('')
|
||||
expect(render.defaultViewCodes).toEqual({})
|
||||
expect(render.keywordSearch).toBeNull()
|
||||
expect(render.quickFilters).toEqual([])
|
||||
expect(render.filterGroups).toEqual([])
|
||||
expect(render.moreFilters).toEqual([])
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in new issue
Block a user