diff --git a/packages/editor/src/fields/DataSourceFieldSelect/Index.vue b/packages/editor/src/fields/DataSourceFieldSelect/Index.vue index b1cbdc2c..3b9812e5 100644 --- a/packages/editor/src/fields/DataSourceFieldSelect/Index.vue +++ b/packages/editor/src/fields/DataSourceFieldSelect/Index.vue @@ -35,7 +35,8 @@ @@ -185,4 +186,10 @@ const onChangeHandler = (value: string[], eventData?: ContainerChangeEventData) emit('change', [dsId], eventData); } }; + +const onToggleDataSourceFieldSelectHandler = () => { + // 禁用或对比模式下禁止切换 + if (props.disabled || mForm?.isCompare) return; + showDataSourceFieldSelect.value = !showDataSourceFieldSelect.value; +}; diff --git a/packages/editor/tests/unit/fields/DataSourceFieldSelect.spec.ts b/packages/editor/tests/unit/fields/DataSourceFieldSelect.spec.ts index ef0293da..fac98ba6 100644 --- a/packages/editor/tests/unit/fields/DataSourceFieldSelect.spec.ts +++ b/packages/editor/tests/unit/fields/DataSourceFieldSelect.spec.ts @@ -242,4 +242,64 @@ describe('DataSourceFieldSelect Index', () => { }); expect(wrapper.findAll('.fake-cascader').length).toBeGreaterThan(0); }); + + test('disabled 为 true 时切换按钮被禁用,点击不切换 showDataSourceFieldSelect', async () => { + const wrapper = mount(DSFSIndex, { + props: { + config: { fieldConfig: { type: 'text' } }, + model: { v: [] }, + name: 'v', + disabled: true, + } as any, + }); + + const toggleBtn = wrapper.find('.fake-btn'); + expect((toggleBtn.element as HTMLButtonElement).hasAttribute('disabled')).toBe(true); + + // 点击不应切换显示 FieldSelect + await toggleBtn.trigger('click'); + expect(wrapper.findAll('.fake-cascader').length).toBe(0); + }); + + test('对比模式(mForm.isCompare=true)下切换按钮被禁用,点击不切换 showDataSourceFieldSelect', async () => { + const wrapper = mount(DSFSIndex, { + props: { + config: { fieldConfig: { type: 'text' } }, + model: { v: [] }, + name: 'v', + } as any, + global: { + provide: { + mForm: { isCompare: true }, + }, + }, + }); + + const toggleBtn = wrapper.find('.fake-btn'); + expect((toggleBtn.element as HTMLButtonElement).hasAttribute('disabled')).toBe(true); + + await toggleBtn.trigger('click'); + expect(wrapper.findAll('.fake-cascader').length).toBe(0); + }); + + test('非对比模式且未 disabled 时按钮可用,点击可切换', async () => { + const wrapper = mount(DSFSIndex, { + props: { + config: { fieldConfig: { type: 'text' } }, + model: { v: [] }, + name: 'v', + } as any, + global: { + provide: { + mForm: { isCompare: false }, + }, + }, + }); + + const toggleBtn = wrapper.find('.fake-btn'); + expect((toggleBtn.element as HTMLButtonElement).hasAttribute('disabled')).toBe(false); + + await toggleBtn.trigger('click'); + expect(wrapper.findAll('.fake-cascader').length).toBeGreaterThan(0); + }); });