diff --git a/devui/slider/__tests__/slider.spec.ts b/devui/slider/__tests__/slider.spec.ts index 9f9d66806dfb0162d5cb95122cdbc10fc8b8df7e..146a319fc1aa214826bf92ea70ecb37621306b74 100644 --- a/devui/slider/__tests__/slider.spec.ts +++ b/devui/slider/__tests__/slider.spec.ts @@ -1,2 +1,56 @@ import { mount } from '@vue/test-utils'; -import DSlider from '../src/slider' \ No newline at end of file +import { nextTick, ref } from 'vue'; +import DSlider from '../src/slider'; + +describe('d-slider', () => { + it('slider maxValue && minValue work', () => { + const wrapper = mount(DSlider, { + props: { + max: 50, + min: 2, + }, + }); + const max = wrapper.find('.devui-max_count'); + const min = wrapper.find('.devui-min_count'); + expect(min.text()).toBe('2'); + expect(max.text()).toBe('50'); + }); + it('slider v-model work', async () => { + const value = ref(5); + const wrapper = mount({ + components: { DSlider }, + template: ` + + `, + setup() { + return { + modelValue: value, + }; + }, + }); + const input = wrapper.find('input'); + expect(input.element.value).toBe('5'); + input.setValue(10); + await nextTick(); + expect(value.value).toBe(10); + }); + it('slider showInput work', () => { + const wrapper = mount(DSlider, { + props: { + showInput: true, + }, + }); + const dInput = wrapper.find('.devui-input__out-wrap'); + expect(dInput.exists()).toBeTruthy(); + }); + + it('slider disabled work', () => { + const wrapper = mount(DSlider, { + props: { + disabled: true, + }, + }); + const slider = wrapper.find('.devui-slider__runway'); + expect(slider.classes()).toContain('disabled'); + }); +}); diff --git a/devui/slider/src/slider.scss b/devui/slider/src/slider.scss index 998b18c053769a0fd45369602ae68b19d9fe1729..756f164a1f507a1fa5abe07262dd0a616d91c9f4 100644 --- a/devui/slider/src/slider.scss +++ b/devui/slider/src/slider.scss @@ -89,7 +89,8 @@ color: $devui-text; } - .devui-input__wrap { + .devui-input__out-wrap { + font-size: $devui-font-size; position: absolute; right: -60px; top: -12px; @@ -99,6 +100,7 @@ input { width: 40px; + text-align: center; } } } diff --git a/devui/slider/src/slider.tsx b/devui/slider/src/slider.tsx index 46bc6d70760c7089023c2480b6d735d25b10743f..35975ec450eca20885d09ce36141b68b88e32320 100644 --- a/devui/slider/src/slider.tsx +++ b/devui/slider/src/slider.tsx @@ -22,7 +22,13 @@ export default defineComponent({ //当前的位置以百分比显示 const percentDispaly = ref(''); const renderShowInput = () => { - return props.showInput ? : ''; + return props.showInput ? ( +
+ +
+ ) : ( + '' + ); }; //当传入modelValue时用以定位button的位置 @@ -142,6 +148,7 @@ export default defineComponent({ const re = /^(?:[1-9]?\d|100)$/; if (re.test(`${inputValue.value}`)) { percentDispaly.value = ((inputValue.value - props.min) * 100) / (props.max - props.min) + '%'; + ctx.emit('update:modelValue', inputValue.value); } } }