operate-line.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <template>
  2. <!-- -->
  3. <el-popover
  4. v-model="show"
  5. class="operate-module-line"
  6. popper-class="liu-popover-line"
  7. placement="top"
  8. width="104"
  9. trigger="manual"
  10. >
  11. <div class="operate-wrap">
  12. <div class="operate-list" v-for="(item, index) in data.children" :key="index">
  13. <i class="iconfont iconcaozuojihuo" @click.stop="listDel(index)"></i>
  14. <div class="btn-text" @click="listClick(item, index)">{{ item.name }}</div>
  15. </div>
  16. <div
  17. class="operate-list operate-list-add"
  18. @click="addFn()"
  19. >
  20. <i class="iconfont icontupiantianjia icon-add"></i>
  21. </div>
  22. </div>
  23. <el-button type="text" icon="el-icon-s-fold" slot="reference" class="operate-btn">{{
  24. data.name
  25. }}</el-button>
  26. </el-popover>
  27. </template>
  28. <script>
  29. export default {
  30. name: 'operate-module',
  31. data() {
  32. return {};
  33. },
  34. props: {
  35. show: {
  36. type: Boolean,
  37. default: false
  38. },
  39. // 触发后传入的数据
  40. data: {
  41. type: Object,
  42. default: () => {}
  43. }
  44. },
  45. mounted() {
  46. // console.log(this.data);
  47. },
  48. methods: {
  49. showFn() {
  50. this.$emit('show', this.data);
  51. },
  52. listClick(item, index) {
  53. this.$emit('click', {...item, ...{index: index}});
  54. },
  55. listDel(index) {
  56. this.$emit('del', index);
  57. },
  58. addFn() {
  59. this.$emit('add');
  60. }
  61. }
  62. };
  63. </script>
  64. <style lang="scss">
  65. .liu-popover-line {
  66. min-width: 100px !important;
  67. padding: 0 !important;
  68. .operate-wrap {
  69. border-radius: 10px;
  70. .operate-list {
  71. width: 104px;
  72. height: 50px;
  73. line-height: 50px;
  74. flex-shrink: 0;
  75. text-align: center;
  76. position: relative;
  77. border-top: 1px solid #f7f7f7;
  78. &:first-child {
  79. border-top: none;
  80. }
  81. .iconfont {
  82. font-size: 16px;
  83. cursor: pointer;
  84. &:hover {
  85. color: $mainColor;
  86. }
  87. }
  88. .iconcaozuojihuo {
  89. position: absolute;
  90. top: -12px;
  91. right: 6px;
  92. font-size: 16px;
  93. }
  94. .btn-text {
  95. // margin-top: 2px;
  96. cursor: pointer;
  97. &:hover {
  98. color: $mainColor;
  99. background-color: $backColor;
  100. }
  101. }
  102. }
  103. .operate-list-add {
  104. cursor: pointer;
  105. &:hover {
  106. color: $mainColor;
  107. background-color: $backColor;
  108. .iconfont {
  109. color: $mainColor;
  110. }
  111. }
  112. }
  113. }
  114. }
  115. .operate-module-line {
  116. .operate-btn {
  117. color: #666;
  118. font-size: 16px;
  119. &:hover {
  120. color: $mainColor;
  121. }
  122. }
  123. }
  124. </style>