feat(editor): 数据源字段选择按钮在对比模式与禁用态下禁止切换

- 按钮新增 disabled 绑定 (props.disabled || mForm?.isCompare)

- 抽取 onToggleDataSourceFieldSelectHandler 增加 guard 防御

- 补充对应单元测试
This commit is contained in:
roymondchen 2026-05-26 21:05:01 +08:00
parent b1193b909e
commit ff810d09e4
2 changed files with 68 additions and 1 deletions

View File

@ -35,7 +35,8 @@
<TMagicButton
:type="showDataSourceFieldSelect ? 'primary' : 'default'"
:size="size"
@click="showDataSourceFieldSelect = !showDataSourceFieldSelect"
:disabled="disabled || mForm?.isCompare"
@click="onToggleDataSourceFieldSelectHandler"
><MIcon :icon="Coin"></MIcon
></TMagicButton>
</TMagicTooltip>
@ -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;
};
</script>

View File

@ -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);
});
});