20260916172703

This commit is contained in:
oneao committed 2026-09-16 17:27:04 +08:00
1 parent dce29f250e
commit de05498552
25 files changed
+1141 -1315

No files matched your search

@@ -4,6 +4,7 @@ import { beforeEach, describe, expect, it } from 'vitest'
import FmsQueryControl from '@/components/fms-module-list/FmsQueryControl.vue'
import FmsQueryToolbar from '@/components/fms-module-list/FmsQueryToolbar.vue'
import FmsAdvancedQueryPanel from '@/components/fms-module-list/FmsAdvancedQueryPanel.vue'
import FmsField from '@/components/fms-field/FmsField.vue'
/** 构造一个查询条件项(字段 + 配置),供工具栏布局用例复用 */
const queryItem = (field) => ({
@@ -11,6 +12,12 @@ const queryItem = (field) => ({
config: { b_operator: 'like', b_component: 'input' },
})
/** 构造一个区间条件项:字段类型决定两端控件的形态 */
const rangeQueryItem = (bType) => ({
field: { b_field: 'created', b_type: bType },
config: { b_operator: 'between', b_component: bType },
})
describe('fms-module-list components', () => {
beforeEach(() => setActivePinia(createPinia()))
@@ -98,4 +105,71 @@ describe('fms-module-list components', () => {
expect(wrapper.find('.filter-row').exists()).toBe(true)
wrapper.unmount()
})
it('日期区间拆成两个独立控件加分隔符,控件类型随字段类型走', () => {
const dateRange = mount(FmsQueryControl, {
props: { item: rangeQueryItem('date'), modelValue: ['', ''] },
})
const dateFields = dateRange.findAllComponents(FmsField)
expect(dateFields.map((field) => field.props('type'))).toEqual(['date', 'date'])
// date 只到日,不需要覆盖控件自身的 format
expect(dateFields[0].props('controlProps').format).toBeUndefined()
expect(dateRange.find('.fms-query-control__separator').exists()).toBe(true)
dateRange.unmount()
const datetimeRange = mount(FmsQueryControl, {
props: { item: rangeQueryItem('datetime'), modelValue: ['', ''] },
})
const datetimeFields = datetimeRange.findAllComponents(FmsField)
expect(datetimeFields.map((field) => field.props('type'))).toEqual(['datetime', 'datetime'])
// datetime 端点必须到秒:分钟精度下「当天末」表达不出来,结束端默认时间会被归零成 23:59
expect(datetimeFields.map((field) => field.props('controlProps').format)).toEqual([
'YYYY-MM-DD HH:mm:ss',
'YYYY-MM-DD HH:mm:ss',
])
datetimeRange.unmount()
})
it('日期区间两端各自只受另一端约束,并带当天起 / 当天末的默认时间', () => {
const wrapper = mount(FmsQueryControl, {
props: { item: rangeQueryItem('date'), modelValue: ['2026-01-10', '2026-01-20'] },
})
const [start, end] = wrapper.findAllComponents(FmsField)
const startProps = start.props('controlProps')
const endProps = end.props('controlProps')
expect(startProps.timeDefault).toBe('start')
expect(endProps.timeDefault).toBe('end')
// 开始端:只禁晚于结束端,往前扩区间不受限
expect(startProps.disabledDate(new Date('2026-01-25'))).toBe(true)
expect(startProps.disabledDate(new Date('2026-01-05'))).toBe(false)
// 结束端:只禁早于开始端,往后扩区间不受限
expect(endProps.disabledDate(new Date('2026-01-05'))).toBe(true)
expect(endProps.disabledDate(new Date('2026-01-25'))).toBe(false)
wrapper.unmount()
})
it('日期区间单端变更只写对应下标,另一端保持', () => {
const wrapper = mount(FmsQueryControl, {
props: { item: rangeQueryItem('date'), modelValue: ['2026-01-10', '2026-01-20'] },
})
const [start, end] = wrapper.findAllComponents(FmsField)
start.vm.$emit('update:modelValue', '2026-01-05')
expect(wrapper.emitted('update:modelValue').at(-1)[0]).toEqual(['2026-01-05', '2026-01-20'])
end.vm.$emit('update:modelValue', '2026-01-31')
expect(wrapper.emitted('update:modelValue').at(-1)[0]).toEqual(['2026-01-10', '2026-01-31'])
wrapper.unmount()
})
it('数值区间仍是两个输入框加分隔符', () => {
const wrapper = mount(FmsQueryControl, {
props: { item: rangeQueryItem('number'), modelValue: ['', ''] },
})
expect(wrapper.findAll('input')).toHaveLength(2)
expect(wrapper.find('.fms-query-control__separator').exists()).toBe(true)
wrapper.unmount()
})
})