feat: segmented component global disabled

This commit is contained in:
hb0730 2024-03-31 09:59:33 +08:00
parent 53e3e601fb
commit db2b59ed51
2 changed files with 17 additions and 1 deletions

View File

@ -37,6 +37,11 @@ const props = {
/** 控件尺寸 */ /** 控件尺寸 */
size: { size: {
type: String as PropType<"small" | "default" | "large"> type: String as PropType<"small" | "default" | "large">
},
/** 是否global禁用默认false */
disabled: {
type: Boolean,
default: false
} }
}; };
@ -57,6 +62,7 @@ export default defineComponent({
: ref(0); : ref(0);
function handleChange({ option, index }, event: Event) { function handleChange({ option, index }, event: Event) {
if (props.disabled) return;
if (option.disabled) return; if (option.disabled) return;
event.preventDefault(); event.preventDefault();
isNumber(props.modelValue) isNumber(props.modelValue)
@ -67,6 +73,7 @@ export default defineComponent({
} }
function handleMouseenter({ option, index }, event: Event) { function handleMouseenter({ option, index }, event: Event) {
if (props.disabled) return;
event.preventDefault(); event.preventDefault();
curMouseActive.value = index; curMouseActive.value = index;
if (option.disabled || curIndex.value === index) { if (option.disabled || curIndex.value === index) {
@ -79,6 +86,7 @@ export default defineComponent({
} }
function handleMouseleave(_, event: Event) { function handleMouseleave(_, event: Event) {
if (props.disabled) return;
event.preventDefault(); event.preventDefault();
curMouseActive.value = -1; curMouseActive.value = -1;
} }
@ -124,7 +132,8 @@ export default defineComponent({
ref={`labelRef${index}`} ref={`labelRef${index}`}
class={[ class={[
"pure-segmented-item", "pure-segmented-item",
option?.disabled && "pure-segmented-item-disabled" (props.disabled || option?.disabled) &&
"pure-segmented-item-disabled"
]} ]}
style={{ style={{
background: background:

View File

@ -240,6 +240,13 @@ watch(size, val => (dynamicSize.value = size.value));
<p class="mb-2">禁用</p> <p class="mb-2">禁用</p>
<Segmented :options="optionsDisabled" :size="dynamicSize" /> <Segmented :options="optionsDisabled" :size="dynamicSize" />
<el-divider /> <el-divider />
<p class="mb-2">全局禁用</p>
<Segmented
:options="optionsDisabled"
:size="dynamicSize"
:disabled="true"
/>
<el-divider />
<p class="mb-2">block 属性(将宽度调整为父元素宽度)</p> <p class="mb-2">block 属性(将宽度调整为父元素宽度)</p>
<Segmented :options="optionsBlock" block :size="dynamicSize" /> <Segmented :options="optionsBlock" block :size="dynamicSize" />
<el-divider /> <el-divider />