diff --git a/src/components/dropdown/dropdown-item.vue b/src/components/dropdown/dropdown-item.vue new file mode 100644 index 00000000..978aee00 --- /dev/null +++ b/src/components/dropdown/dropdown-item.vue @@ -0,0 +1,50 @@ + + \ No newline at end of file diff --git a/src/components/dropdown/dropdown-menu.vue b/src/components/dropdown/dropdown-menu.vue new file mode 100644 index 00000000..84c98828 --- /dev/null +++ b/src/components/dropdown/dropdown-menu.vue @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/src/components/dropdown/dropdown.vue b/src/components/dropdown/dropdown.vue new file mode 100644 index 00000000..2582cafa --- /dev/null +++ b/src/components/dropdown/dropdown.vue @@ -0,0 +1,89 @@ + + \ No newline at end of file diff --git a/src/components/dropdown/index.js b/src/components/dropdown/index.js new file mode 100644 index 00000000..6283b523 --- /dev/null +++ b/src/components/dropdown/index.js @@ -0,0 +1,7 @@ +import Dropdown from './dropdown.vue'; +import DropdownMenu from './dropdown-menu.vue'; +import DropdownItem from './dropdown-item.vue'; + +Dropdown.Menu = DropdownMenu; +Dropdown.Item = DropdownItem; +export default Dropdown; \ No newline at end of file diff --git a/src/components/select/dropdown.vue b/src/components/select/dropdown.vue index 2e419b6a..09b00fd6 100644 --- a/src/components/select/dropdown.vue +++ b/src/components/select/dropdown.vue @@ -5,6 +5,12 @@ import Popper from 'popper.js'; export default { + props: { + placement: { + type: String, + default: 'bottom-start' + } + }, data () { return { popper: null @@ -20,7 +26,7 @@ this.$nextTick(() => { this.popper = new Popper(this.$parent.$els.reference, this.$el, { gpuAcceleration: false, - placement: 'bottom-start', + placement: this.placement, boundariesPadding: 0, forceAbsolute: true, boundariesElement: 'body' diff --git a/src/index.js b/src/index.js index 5ce567fc..1d76e175 100644 --- a/src/index.js +++ b/src/index.js @@ -12,6 +12,7 @@ import Cascader from './components/cascader'; import Checkbox from './components/checkbox'; import Circle from './components/circle'; import Collapse from './components/collapse'; +import Dropdown from './components/dropdown'; import Icon from './components/icon'; import Input from './components/input'; import InputNumber from './components/input-number'; @@ -49,6 +50,9 @@ const iview = { Checkbox, CheckboxGroup: Checkbox.Group, Circle, + Dropdown, + DropdownItem: Dropdown.Item, + DropdownMenu: Dropdown.Menu, iCol: Col, Collapse, Icon, diff --git a/src/styles/components/dropdown.less b/src/styles/components/dropdown.less new file mode 100644 index 00000000..c228ab9f --- /dev/null +++ b/src/styles/components/dropdown.less @@ -0,0 +1,17 @@ +@dropdown-prefix-cls: ~"@{css-prefix}dropdown"; +@dropdown-item-prefix-cls: ~"@{dropdown-prefix-cls}-item"; + +.@{dropdown-prefix-cls} { + display: inline-block; + position: relative; + + &-rel{ + display: inline-block; + } + + &-menu{ + min-width: 100px; + } +} + +.select-item(@dropdown-prefix-cls, @dropdown-item-prefix-cls); \ No newline at end of file diff --git a/src/styles/components/index.less b/src/styles/components/index.less index 9836a0b3..d22c9be5 100644 --- a/src/styles/components/index.less +++ b/src/styles/components/index.less @@ -28,4 +28,5 @@ @import "slider"; @import "cascader"; @import "transfer"; -@import "table"; \ No newline at end of file +@import "table"; +@import "dropdown"; \ No newline at end of file diff --git a/src/styles/mixins/input.less b/src/styles/mixins/input.less index 62daa52d..78760364 100644 --- a/src/styles/mixins/input.less +++ b/src/styles/mixins/input.less @@ -27,7 +27,7 @@ .input-small() { padding: @input-padding-vertical-small @input-padding-horizontal; height: @input-height-small; - border-radius: @border-radius-small; + border-radius: @btn-border-radius-small; } .input() { @@ -38,7 +38,7 @@ padding: @input-padding-vertical-base @input-padding-horizontal; font-size: @font-size-small; border: 1px solid @input-border-color; - border-radius: @border-radius-base; + border-radius: @btn-border-radius; color: @input-color; background-color: @input-bg; background-image: none; diff --git a/src/styles/mixins/select.less b/src/styles/mixins/select.less index 9ed592d7..d3a1b903 100644 --- a/src/styles/mixins/select.less +++ b/src/styles/mixins/select.less @@ -37,6 +37,18 @@ &-selected&-focus { background: shade(@selected-color, 10%); } + + &-divided{ + margin-top: 5px; + border-top: 1px solid @border-color-split; + &:before{ + content: ''; + height: 5px; + display: block; + margin: -7px -16px 0; + background-color: #fff; + } + } } .@{size-class}-large .@{item-class} { diff --git a/test/app.vue b/test/app.vue index 12d38274..3d6a6a99 100644 --- a/test/app.vue +++ b/test/app.vue @@ -42,6 +42,7 @@ li + li {
  • Cascader
  • Transfer
  • Table
  • +
  • Dropdown
  • diff --git a/test/main.js b/test/main.js index 982ec29f..c572d57d 100644 --- a/test/main.js +++ b/test/main.js @@ -107,6 +107,11 @@ router.map({ component: function (resolve) { require(['./routers/table.vue'], resolve); } + }, + '/dropdown': { + component: function (resolve) { + require(['./routers/dropdown.vue'], resolve); + } } }); diff --git a/test/routers/dropdown.vue b/test/routers/dropdown.vue new file mode 100644 index 00000000..062970b7 --- /dev/null +++ b/test/routers/dropdown.vue @@ -0,0 +1,33 @@ + + + \ No newline at end of file