20260923165454
This commit is contained in:
1 parent
0abe3706c8
commit
e6935b8fa4
173 files changed
+14975
-2295
No files matched your search
@@ -13,23 +13,15 @@ vi.mock('@/stores/auth', () => ({
|
||||
}))
|
||||
|
||||
const {
|
||||
buildDefaultQueryLayout,
|
||||
currentUserId,
|
||||
isEmptyDelta,
|
||||
layoutDelta,
|
||||
loadFieldPower,
|
||||
loadModulePref,
|
||||
mergeQueryLayout,
|
||||
mergeDefaultViewCode,
|
||||
removeModulePref,
|
||||
saveModulePref,
|
||||
viewCodeDelta,
|
||||
} = await import('@/components/fms-module-list/useModulePref')
|
||||
|
||||
const items = [
|
||||
{ field: { b_field: 'b_no' }, config: { b_operator: 'like' } },
|
||||
{ field: { b_field: 'b_name' }, config: { b_operator: 'like' } },
|
||||
{ field: { b_field: 'b_bz' }, config: { b_operator: 'like' } },
|
||||
]
|
||||
|
||||
describe('用户模块偏好', () => {
|
||||
beforeEach(() => {
|
||||
loadDataApi.mockReset()
|
||||
@@ -42,60 +34,23 @@ describe('用户模块偏好', () => {
|
||||
expect(currentUserId()).toBe('u001')
|
||||
})
|
||||
|
||||
it('默认布局:quick 列表中的字段进常用区并靠前排序', () => {
|
||||
const layout = buildDefaultQueryLayout(items, ['b_name', 'b_no'])
|
||||
expect(layout.area).toEqual({ b_name: 'quick', b_no: 'quick', b_bz: 'advanced' })
|
||||
expect(layout.order.b_name).toBeLessThan(layout.order.b_no)
|
||||
})
|
||||
|
||||
it('未配置 quick 列表时,配置了的查询条件全部进常用区(配置了就要能看到)', () => {
|
||||
const layout = buildDefaultQueryLayout(items, [])
|
||||
expect(layout.area).toEqual({ b_no: 'quick', b_name: 'quick', b_bz: 'quick' })
|
||||
})
|
||||
|
||||
it('查询 JSON 节点上的 area 显式配置优先', () => {
|
||||
const configured = [
|
||||
{ field: { b_field: 'b_no' }, node: { area: 'hidden' } },
|
||||
{ field: { b_field: 'b_name' }, node: { area: 'advanced' } },
|
||||
]
|
||||
const layout = buildDefaultQueryLayout(configured, [])
|
||||
expect(layout.area).toEqual({ b_no: 'hidden', b_name: 'advanced' })
|
||||
})
|
||||
|
||||
it('偏好只覆盖布局,无权限字段不得因偏好复活', () => {
|
||||
const defaultLayout = buildDefaultQueryLayout(items, ['b_no'])
|
||||
const pref = {
|
||||
it('个人默认页签:与系统默认一致时不产生覆盖', () => {
|
||||
expect(viewCodeDelta('all', 'all')).toBeNull()
|
||||
expect(viewCodeDelta('', 'all')).toBeNull()
|
||||
expect(viewCodeDelta('pending', 'all')).toEqual({
|
||||
schemaVersion: 1,
|
||||
area: { b_bz: 'quick', b_status: 'quick' },
|
||||
order: { b_bz: 1 },
|
||||
}
|
||||
const merged = mergeQueryLayout(defaultLayout, pref, new Set(['b_no', 'b_name', 'b_bz']))
|
||||
expect(merged.area.b_bz).toBe('quick')
|
||||
expect(merged.area.b_status).toBeUndefined()
|
||||
expect(merged.order.b_status).toBeUndefined()
|
||||
defaultViewCode: 'pending',
|
||||
})
|
||||
})
|
||||
|
||||
it('三层合并:企业层盖系统默认,个人层再盖企业层', () => {
|
||||
const sysDefault = buildDefaultQueryLayout(items, ['b_no']) // b_no 常用,其余靠后
|
||||
const globalPref = { schemaVersion: 1, area: { b_name: 'quick' } }
|
||||
const enterprise = mergeQueryLayout(sysDefault, globalPref, new Set(['b_no', 'b_name', 'b_bz']))
|
||||
expect(enterprise.area.b_name).toBe('quick')
|
||||
// 个人层在企业层之上进一步调整
|
||||
const personalPref = { schemaVersion: 1, area: { b_name: 'hidden' } }
|
||||
const merged = mergeQueryLayout(enterprise, personalPref, new Set(['b_no', 'b_name', 'b_bz']))
|
||||
expect(merged.area.b_name).toBe('hidden')
|
||||
// 企业层没动的字段保持系统默认
|
||||
expect(merged.area.b_bz).toBe(sysDefault.area.b_bz)
|
||||
})
|
||||
|
||||
it('增量覆盖:只保留与基线不同的字段', () => {
|
||||
const base = { area: { a: 'quick', b: 'advanced' }, order: { a: 10, b: 20 } }
|
||||
const current = { area: { a: 'quick', b: 'quick' }, order: { a: 30, b: 20 } }
|
||||
const delta = layoutDelta(current, base)
|
||||
expect(delta.area).toEqual({ b: 'quick' })
|
||||
expect(delta.order).toEqual({ a: 30 })
|
||||
expect(isEmptyDelta(delta)).toBe(false)
|
||||
expect(isEmptyDelta(layoutDelta(base, base))).toBe(true)
|
||||
it('个人默认页签必须仍是当前可用页签,否则回落系统默认', () => {
|
||||
expect(mergeDefaultViewCode('all', { defaultViewCode: 'pending' }, ['all', 'pending'])).toBe(
|
||||
'pending',
|
||||
)
|
||||
expect(mergeDefaultViewCode('all', { defaultViewCode: 'deleted' }, ['all', 'pending'])).toBe(
|
||||
'all',
|
||||
)
|
||||
expect(mergeDefaultViewCode('all', null, ['all'])).toBe('all')
|
||||
})
|
||||
|
||||
it('读取个人偏好时按用户/模块/schema 类型过滤,解析失败返回 null', async () => {
|
||||
|
||||
Reference in new issue
Block a user