DropdownMenu.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <view class="dropdown-container">
  3. <view class="dropdown-trigger" @tap="toggleDropdown">
  4. <!-- -->
  5. <image src="@/static/icon/more2.png" style="width: 64rpx;height: 64rpx; margin-top: 15rpx;" mode="widthFix"></image>
  6. </view>
  7. <view class="dropdown-menu" v-if="show">
  8. <view
  9. v-for="(item, index) in options"
  10. :key="index"
  11. class="dropdown-item"
  12. @tap="handleSelect(item)"
  13. >
  14. {{ item.label }}
  15. </view>
  16. </view>
  17. </view>
  18. </template>
  19. <script>
  20. export default {
  21. name: 'DropdownMenu',
  22. props: {
  23. options: {
  24. type: Array,
  25. default: () => []
  26. }
  27. },
  28. data() {
  29. return {
  30. show: false
  31. }
  32. },
  33. methods: {
  34. toggleDropdown() {
  35. this.show = !this.show
  36. },
  37. handleSelect(item) {
  38. this.$emit('select', item)
  39. this.show = false
  40. }
  41. }
  42. }
  43. </script>
  44. <style lang="scss" scoped>
  45. .dropdown-container {
  46. position: relative;
  47. .dropdown-trigger {
  48. padding: 10rpx;
  49. cursor: pointer;
  50. }
  51. .dropdown-menu {
  52. position: absolute;
  53. top: 100%;
  54. right: 0;
  55. background: #fff;
  56. border-radius: 8rpx;
  57. box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.1);
  58. z-index: 100;
  59. min-width: 200rpx;
  60. .dropdown-item {
  61. padding: 20rpx 30rpx;
  62. font-size: 28rpx;
  63. color: #333;
  64. text-align: center;
  65. &:hover {
  66. background: #f5f5f5;
  67. }
  68. }
  69. }
  70. }
  71. </style>