diff --git a/packages/opendesign/src/cascader/OCascader.vue b/packages/opendesign/src/cascader/OCascader.vue
index cbe9e9bd6d97c7869b417607d4953b74047f61b6..ebd66fcb7c0804bae3865f8ded7778f9ffd77e80 100644
--- a/packages/opendesign/src/cascader/OCascader.vue
+++ b/packages/opendesign/src/cascader/OCascader.vue
@@ -1,8 +1,12 @@
@@ -28,6 +41,7 @@ const props = defineProps(cascaderProps);
option-width-mode="auto"
:unmount-on-hide="props.unmountOnHide"
:transition="props.transition"
+ :option-wrap-class="wrapClass"
>
diff --git a/packages/opendesign/src/cascader/style/style.scss b/packages/opendesign/src/cascader/style/style.scss
index 1b38647e588151de772bad18f786601ce0511ba0..43b47d28a1012478b216cfe3729bd69b854be27f 100644
--- a/packages/opendesign/src/cascader/style/style.scss
+++ b/packages/opendesign/src/cascader/style/style.scss
@@ -1,10 +1,14 @@
@use '../../_styles/mixin.scss' as *;
@use './var.scss';
+.o-cascader {
+ height: var(--cascader-height);
+}
+
.o-cascader-panel {
position: relative;
display: inline-flex;
- height: 200px;
+ height: calc(var(--cascader-height) - 2 * var(--scroller-padding));
}
.o-cascader-options {
@@ -13,6 +17,7 @@
padding: 0 calc(var(--cascader-options-gap) / 2);
min-width: 144px;
max-width: 192px;
+ height: 100%;
overflow-y: auto;
& + .o-cascader-options {
diff --git a/packages/opendesign/src/cascader/style/var.scss b/packages/opendesign/src/cascader/style/var.scss
index e92e0de17c28a9c52f34b11065d4339388371d55..c4eabe54e7a5f518e155f78eedeb60be12148b74 100644
--- a/packages/opendesign/src/cascader/style/var.scss
+++ b/packages/opendesign/src/cascader/style/var.scss
@@ -1,3 +1,7 @@
+.o-cascader {
+ --cascader-height: 200px;
+}
+
.o-cascader-options {
--cascader-options-bd-clor: var(--o-color-control1-light);
--cascader-options-gap: 8px;
diff --git a/packages/opendesign/src/cascader/types.ts b/packages/opendesign/src/cascader/types.ts
index 3211551f945d524393d5c7d88d84e260465206c8..a338899661ee169b35bb51c1f04c74c607884b9b 100644
--- a/packages/opendesign/src/cascader/types.ts
+++ b/packages/opendesign/src/cascader/types.ts
@@ -68,6 +68,12 @@ export const cascaderProps = {
type: String as PropType,
default: 'bl',
},
+ /**
+ * 下拉容器自定义类
+ */
+ optionWrapClass: {
+ type: [String, Array] as PropType,
+ },
/**
* 是否在结束选择时,卸载下拉选项
*/
diff --git a/packages/opendesign/src/checkbox/OCheckbox.vue b/packages/opendesign/src/checkbox/OCheckbox.vue
index 3c03d9c7c0506d3a710c9bab50b6df7685269df3..7428ae246a823d5b48c4a833693583e40de445bf 100644
--- a/packages/opendesign/src/checkbox/OCheckbox.vue
+++ b/packages/opendesign/src/checkbox/OCheckbox.vue
@@ -1,5 +1,6 @@
diff --git a/packages/opendesign/src/checkbox/provide.ts b/packages/opendesign/src/checkbox/provide.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9fd88ff42de5e0abc868773dfdc07e68c41bd487
--- /dev/null
+++ b/packages/opendesign/src/checkbox/provide.ts
@@ -0,0 +1,6 @@
+import { ComputedRef, InjectionKey, Ref } from 'vue';
+
+export const checkboxInjectKey: InjectionKey<{
+ checked: ComputedRef;
+ disabled: ComputedRef;
+}> = Symbol('provide-checkbox');
diff --git a/packages/opendesign/src/collapse/OCollapseItem.vue b/packages/opendesign/src/collapse/OCollapseItem.vue
index 2b6a6a3f1fbab5094c7021cdd1a84404ed7510fd..904cf5b26b90f93476b28f8bb4b5ef4f57c2760a 100644
--- a/packages/opendesign/src/collapse/OCollapseItem.vue
+++ b/packages/opendesign/src/collapse/OCollapseItem.vue
@@ -58,6 +58,10 @@ const onBeforeEnter = (el: Element) => {
const onEnter = (el: Element) => {
(el as HTMLUListElement).style.height = `${el.scrollHeight}px`;
};
+// 进入动画完成后高度设置为auto,支持嵌套子菜单展开
+const onAfterEnter = (el: Element) => {
+ (el as HTMLUListElement).style.height = 'auto';
+};
const onBeforeLeave = (el: Element) => {
(el as HTMLUListElement).style.height = `${(el as HTMLUListElement).offsetHeight}px`;
};
@@ -76,7 +80,7 @@ const onLeave = (el: Element) => {
{{ props.title }}
-
+
diff --git a/packages/opendesign/src/dialog/style/media.scss b/packages/opendesign/src/dialog/style/media.scss
index ff7efdb77f663be52d947cfe0a81a0e60220d8c5..40f5b9f44fa04b74651f7abe71da2cbc64086d27 100644
--- a/packages/opendesign/src/dialog/style/media.scss
+++ b/packages/opendesign/src/dialog/style/media.scss
@@ -1,10 +1,13 @@
@use '../../_styles/mixin.scss' as *;
.o-dialog-responsive {
+ @include respond-to('>phone') {
+ --layer-origin: center;
+ }
@include respond-to('<=pad') {
--layer-position: fixed;
}
- @include respond-to('phone-v') {
+ @include respond-to('phone') {
--layer-align: flex-end;
--dlg-width: calc(100vw - 48px);
--layer-origin: center bottom;
@@ -13,9 +16,6 @@
flex: 1;
}
}
- @include respond-to('>phone') {
- --layer-origin: center;
- }
}
.o-dialog {
diff --git a/packages/opendesign/src/dropdown/__demo__/DropdownBasic.vue b/packages/opendesign/src/dropdown/__demo__/DropdownBasic.vue
index 3227b4dc823d75258fa630dd0edcdddfafdd0a8d..5a035350d28ce6786cd696bc1c368fc7fa668234 100644
--- a/packages/opendesign/src/dropdown/__demo__/DropdownBasic.vue
+++ b/packages/opendesign/src/dropdown/__demo__/DropdownBasic.vue
@@ -18,7 +18,9 @@ const options = [
Click Me
-
+
+ {{ item.label }}
+
diff --git a/packages/opendesign/src/dropdown/style/index.scss b/packages/opendesign/src/dropdown/style/index.scss
index e08907a90e16584fc4585fd835bd3d80c4c8ed94..6eab681b84481c40d923ac2a6d7cbecd8fd22023 100644
--- a/packages/opendesign/src/dropdown/style/index.scss
+++ b/packages/opendesign/src/dropdown/style/index.scss
@@ -14,7 +14,7 @@
.o-dropdown-item {
display: flex;
align-items: center;
- justify-content: center;
+ justify-content: var(--dropdown-item-justify);
padding: var(--dropdown-item-padding);
background-color: var(--dropdown-item-bg-color);
font-size: var(--dropdown-item-text-size);
diff --git a/packages/opendesign/src/dropdown/style/var.scss b/packages/opendesign/src/dropdown/style/var.scss
index fd619da75cb6333a4896fad7c1585143b72b80ff..069b182b7fe2ec39531b12b7b46ea756f21a1ef6 100644
--- a/packages/opendesign/src/dropdown/style/var.scss
+++ b/packages/opendesign/src/dropdown/style/var.scss
@@ -18,7 +18,9 @@
--dropdown-item-text-size: var(--o-font_size-text1);
--dropdown-item-text-height: var(--o-line_height-text1);
- --dropdown-item-padding: 7px 12px;
+ --dropdown-item-justify: center;
+
+ --dropdown-item-padding: 7px 0px;
--dropdown-item-gap: 2px;
--dropdown-item-radius: var(--o-radius_control-s);
}
diff --git a/packages/opendesign/src/menu/OSubMenu.vue b/packages/opendesign/src/menu/OSubMenu.vue
index 9e2466484127f814bb3fae41148ffe4ea08e01df..d8b99886b20a87f87ee115390a676192fc24502f 100644
--- a/packages/opendesign/src/menu/OSubMenu.vue
+++ b/packages/opendesign/src/menu/OSubMenu.vue
@@ -98,6 +98,10 @@ const onBeforeEnter = (el: Element) => {
const onEnter = (el: Element) => {
(el as HTMLUListElement).style.height = `${el.scrollHeight}px`;
};
+// 进入动画完成后高度设置为auto,支持嵌套子菜单展开
+const onAfterEnter = (el: Element) => {
+ (el as HTMLUListElement).style.height = 'auto';
+};
const onBeforeLeave = (el: Element) => {
(el as HTMLUListElement).style.height = `${(el as HTMLUListElement).offsetHeight}px`;
};
@@ -123,7 +127,7 @@ const onLeave = (el: Element) => {
-
+
diff --git a/packages/opendesign/src/menu/style/style.scss b/packages/opendesign/src/menu/style/style.scss
index 77443491c734bc811177c065f2278d67ee40f180..06282d06b01c3a37c2d6f43a14926e7e3a37c900 100644
--- a/packages/opendesign/src/menu/style/style.scss
+++ b/packages/opendesign/src/menu/style/style.scss
@@ -25,7 +25,6 @@
& > .o-sub-menu-title {
font-weight: 500;
color: var(--sub-menu-color-selected);
- background-color: var(--sub-menu-bg-color-selected);
.o-sub-menu-title-icon {
color: var(--sub-menu-icon-color-selected);
@@ -33,6 +32,10 @@
}
}
+.o-sub-menu-selected {
+ background-color: var(--sub-menu-bg-color-selected);
+}
+
.o-sub-menu-associated-selected {
& > .o-sub-menu-title {
font-weight: 500;
diff --git a/packages/opendesign/src/radio/ORadio.vue b/packages/opendesign/src/radio/ORadio.vue
index 2372e2d1a12a814a5d7697e0e0e14a0c9237af63..71cfe773c61cfb2338127108d2072861d13652a1 100644
--- a/packages/opendesign/src/radio/ORadio.vue
+++ b/packages/opendesign/src/radio/ORadio.vue
@@ -1,5 +1,6 @@
diff --git a/packages/opendesign/src/radio/provide.ts b/packages/opendesign/src/radio/provide.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e5bd66fdce29243ae077ed0b4508b761c47048b5
--- /dev/null
+++ b/packages/opendesign/src/radio/provide.ts
@@ -0,0 +1,6 @@
+import { ComputedRef, InjectionKey, Ref } from 'vue';
+
+export const radioInjectKey: InjectionKey<{
+ checked: ComputedRef;
+ disabled: ComputedRef;
+}> = Symbol('provide-radio');
diff --git a/packages/opendesign/src/toggle/OToggle.vue b/packages/opendesign/src/toggle/OToggle.vue
index ad2b2681c73e5a7a1802df51eca992d3eafde223..9386bb82e49749cec69326fb090bab9f4dcad350 100644
--- a/packages/opendesign/src/toggle/OToggle.vue
+++ b/packages/opendesign/src/toggle/OToggle.vue
@@ -1,8 +1,13 @@
@@ -44,6 +51,7 @@ watch(
'o-toggle-checked': isChecked,
},
]"
+ @click="onClick"
>
diff --git a/packages/opendesign/src/toggle/__demo__/TheIndex.vue b/packages/opendesign/src/toggle/__demo__/TheIndex.vue
index d38f2a4167de5cdd3bcf82377d0a6d0eb5985784..47f5b4287e75ed0cd4af1b6bcf81dad32d911a94 100644
--- a/packages/opendesign/src/toggle/__demo__/TheIndex.vue
+++ b/packages/opendesign/src/toggle/__demo__/TheIndex.vue
@@ -1,11 +1,17 @@
-
+
+
+
+
diff --git a/packages/opendesign/src/toggle/__demo__/ToggleBasic.vue b/packages/opendesign/src/toggle/__demo__/ToggleBasic.vue
deleted file mode 100644
index a4b37722c9c1c14de9c750cc06648e20b136fd30..0000000000000000000000000000000000000000
--- a/packages/opendesign/src/toggle/__demo__/ToggleBasic.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- 基础用法
-
- 筛选条件1
- 筛选条件2
- 筛选条件3
- 筛选条件
-
-
diff --git a/packages/opendesign/src/toggle/__demo__/ToggleCheckbox.vue b/packages/opendesign/src/toggle/__demo__/ToggleCheckbox.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2f06e3895579d553f0ec9004959c2a95cc083707
--- /dev/null
+++ b/packages/opendesign/src/toggle/__demo__/ToggleCheckbox.vue
@@ -0,0 +1,33 @@
+
+
+
+ 多选
+
+
+
+
+ 筛选条件1
+
+
+
+
+ 筛选条件2
+
+
+
+
+ 筛选条件3
+
+
+
+
+ 筛选条件4
+
+
+
+
+
diff --git a/packages/opendesign/src/toggle/__demo__/ToggleMinAndMax.vue b/packages/opendesign/src/toggle/__demo__/ToggleMinAndMax.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ae9861030d182f025d5351bb2109d403d8efbc1c
--- /dev/null
+++ b/packages/opendesign/src/toggle/__demo__/ToggleMinAndMax.vue
@@ -0,0 +1,46 @@
+
+
+
+ 最少选择1个,最多选择3个
+
+
+
+
+ 筛选条件1
+
+
+
+
+ 筛选条件2
+
+
+
+
+ 筛选条件3
+
+
+
+
+ 筛选条件4
+
+
+
+
+ 筛选条件5
+
+
+
+
+
+
+
diff --git a/packages/opendesign/src/toggle/__demo__/ToggleOnly.vue b/packages/opendesign/src/toggle/__demo__/ToggleOnly.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2b83d65c8cb52e0d689a1129b16d2c36f9017d00
--- /dev/null
+++ b/packages/opendesign/src/toggle/__demo__/ToggleOnly.vue
@@ -0,0 +1,14 @@
+
+
+
+ 单独使用
+
+
diff --git a/packages/opendesign/src/toggle/__demo__/ToggleRadio.vue b/packages/opendesign/src/toggle/__demo__/ToggleRadio.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c88b07407f5e64516e9380ce00862e13fb8cdacb
--- /dev/null
+++ b/packages/opendesign/src/toggle/__demo__/ToggleRadio.vue
@@ -0,0 +1,37 @@
+
+
+
+ 单选
+
+
+
+
+ 筛选条件1
+
+
+
+
+ 筛选条件2
+
+
+
+
+ 筛选条件3
+
+
+
+
+ 筛选条件4
+
+
+
+
+
diff --git a/packages/opendesign/src/toggle/style/var.scss b/packages/opendesign/src/toggle/style/var.scss
index 5841c7c18f986687aba03db832fe704cbc1f332f..194b46a03336aa3cf3d73f5da6bccf7e3ad434ab 100644
--- a/packages/opendesign/src/toggle/style/var.scss
+++ b/packages/opendesign/src/toggle/style/var.scss
@@ -11,15 +11,15 @@
--toggle-padding: 0 15px;
- --toggle-color: var(--o-color-info2);
+ --toggle-color: var(--o-color-info1);
--toggle-color-hover: var(--o-color-info1);
--toggle-color-active: var(--o-color-info1);
--toggle-color-disabled: var(--o-color-info4);
- --toggle-bg-color: var(--o-color-fill1);
+ --toggle-bg-color: var(--o-color-control2-light);
--toggle-bg-color-hover: var(--o-color-control2-light);
--toggle-bg-color-active: var(--o-color-control3-light);
- --toggle-bg-color-disabled: var(--o-color-control4-light);
+ --toggle-bg-color-disabled: transparent;
--toggle-bd-color: var(--o-color-fill1);
--toggle-bd-color-hover: transparent;
diff --git a/packages/portal-ak/src/ak/theme/toggle.scss b/packages/portal-ak/src/ak/theme/toggle.scss
index 234f146b9250ffd8038602176f8414819775c002..0eacefcfd5b4acabdab2e481a1ac2933a4dc6a10 100644
--- a/packages/portal-ak/src/ak/theme/toggle.scss
+++ b/packages/portal-ak/src/ak/theme/toggle.scss
@@ -2,10 +2,7 @@
.o-toggle {
--toggle-bg-color: var(--o-color-fill1);
- --toggle-bg-color-hover: var(--o-color-fill3);
-
--toggle-bd-color: var(--o-color-fill1);
- --toggle-bd-color-hover: var(--o-color-fill3);
}
@include respond-to('pad') {