diff --git a/packages/opendesign/src/option/OOptionList.vue b/packages/opendesign/src/option/OOptionList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..bffdf5bd67942c80c3af3d0060ea6105ee6ba7c6
--- /dev/null
+++ b/packages/opendesign/src/option/OOptionList.vue
@@ -0,0 +1,16 @@
+
+
+
+
diff --git a/packages/opendesign/src/option/index.ts b/packages/opendesign/src/option/index.ts
index 45c30c0fb8ec7cb807681e641a31a91cf4e094d0..fe2527d0443e08b4bb0e0db37c5616416b31db0b 100644
--- a/packages/opendesign/src/option/index.ts
+++ b/packages/opendesign/src/option/index.ts
@@ -1,4 +1,5 @@
import _OOption from './OOption.vue';
+import OOptionList from './OOptionList.vue';
import type { App } from 'vue';
const OOption = Object.assign(_OOption, {
@@ -7,6 +8,4 @@ const OOption = Object.assign(_OOption, {
},
});
-export {
- OOption,
-};
+export { OOption, OOptionList };
diff --git a/packages/opendesign/src/option/style/index.ts b/packages/opendesign/src/option/style/index.ts
index 98ff894a052f7befcb69f3aaef90eb86fd33959e..76f1d2a853ed1d2185fd8245bd322fa1868eac6d 100644
--- a/packages/opendesign/src/option/style/index.ts
+++ b/packages/opendesign/src/option/style/index.ts
@@ -1,3 +1,4 @@
import '../../_styles';
import '../../checkbox/style';
+import '../../scroller/style';
import './index.scss';
diff --git a/packages/opendesign/src/option/style/style.scss b/packages/opendesign/src/option/style/style.scss
index 963760e610cbbff65b4e79ec57f8f8c8d46a3936..4cd098a2b91e2b0a05bba522d91cc2429cd7edab 100644
--- a/packages/opendesign/src/option/style/style.scss
+++ b/packages/opendesign/src/option/style/style.scss
@@ -24,9 +24,11 @@
}
}
&.active {
- font-weight: 500;
- color: var(--option-color-active);
- background-color: var(--option-bg-color-active);
+ @include me-hover {
+ font-weight: 500;
+ color: var(--option-color-active);
+ background-color: var(--option-bg-color-active);
+ }
}
}
@@ -40,3 +42,13 @@
background-color: var(--option-bg-color-disabled);
}
}
+// 列表容器
+.o-options-scroller {
+ max-height: var(--option-list-max-height);
+ --scroller-padding: 4px;
+}
+.o-options-container {
+ padding: 4px;
+ max-height: var(--option-list-max-height);
+ overflow: auto;
+}
diff --git a/packages/opendesign/src/option/style/var.scss b/packages/opendesign/src/option/style/var.scss
index e69e398951129c44ff1e230dcf3364d64d8ba3c9..089faaeba6ecb6f0162ccdad58e9d4b5f9892542 100644
--- a/packages/opendesign/src/option/style/var.scss
+++ b/packages/opendesign/src/option/style/var.scss
@@ -19,3 +19,15 @@
.o-option-multiple {
--option-bg-color-active: transparent;
}
+
+.o-options-popup {
+ --popup-shadow: var(--o-shadow-2);
+ --popup-bg-color: var(--o-color-control-light);
+ --popup-radius: var(--o-radius_control-m);
+ --popup-bd: none;
+ --popup-padding: 0;
+ --popup-min-width: 64px;
+}
+.o-option-list {
+ --option-list-max-height: 200px;
+}
diff --git a/packages/opendesign/src/pagination/OPagination.vue b/packages/opendesign/src/pagination/OPagination.vue
index 65af0d5eb4e2d464ea857e43ae78663d6ff336fe..6e10892c89bd10ef4963b28389433a324b0c2f18 100644
--- a/packages/opendesign/src/pagination/OPagination.vue
+++ b/packages/opendesign/src/pagination/OPagination.vue
@@ -9,6 +9,7 @@ import { IconChevronLeft, IconChevronRight, IconEllipsis } from '../_utils/icons
import { paginationProps } from './types';
import { getRoundClass } from '../_utils/style-class';
import { OIcon } from '../icon';
+import { OOptionList } from '../option';
const props = defineProps(paginationProps);
@@ -199,10 +200,17 @@ defineExpose({
>
{{ item.value }}
-