PoverTimeLine.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <div
  3. class="j-pover-step"
  4. @mouseenter="isHover = true"
  5. @mouseleave="isHover = false"
  6. >
  7. <el-popover
  8. :popper-class="poperClass"
  9. :placement="poperPlacement"
  10. :open-delay="300"
  11. :append-to-body="false"
  12. :width="poperWidth"
  13. @show="show"
  14. :trigger="trigger"
  15. v-model="popoverShow"
  16. >
  17. <slot name="content" slot="reference"></slot>
  18. <slot name="main">
  19. <el-card class="project-content" v-show="stepList.length !== 0">
  20. <div slot="header" class="p-h-title">{{ title }}</div>
  21. <div class="p-c-main">
  22. <TimeLine
  23. poverType="card"
  24. :custom-event="customEvent"
  25. :stepList="stepList"
  26. @open="$emit('open', $event)"
  27. />
  28. </div>
  29. </el-card>
  30. </slot>
  31. </el-popover>
  32. </div>
  33. </template>
  34. <script>
  35. import { Button, Popover, Card } from 'element-ui'
  36. import TimeLine from '@/components/time-line/TimeLine.vue'
  37. export default {
  38. name: 'pover-time-line',
  39. components: {
  40. [Button.name]: Button,
  41. [Popover.name]: Popover,
  42. [Card.name]: Card,
  43. TimeLine
  44. },
  45. props: {
  46. trigger: {
  47. type: String,
  48. default: 'hover'
  49. },
  50. title: {
  51. type: String,
  52. default: '项目公告'
  53. },
  54. stepList: {
  55. type: Array,
  56. default() {
  57. return []
  58. }
  59. },
  60. poperWidth: {
  61. type: String,
  62. default() {
  63. return '720'
  64. }
  65. },
  66. poperClass: {
  67. type: String,
  68. default() {
  69. return 'poverStep fixed-left'
  70. }
  71. },
  72. poperPlacement: {
  73. type: String,
  74. default() {
  75. return 'bottom-start'
  76. }
  77. },
  78. customEvent: {
  79. type: Boolean,
  80. default: false
  81. }
  82. },
  83. data() {
  84. return {
  85. popoverShow: false,
  86. isHover: false
  87. }
  88. },
  89. methods: {
  90. show() {
  91. this.$emit('show')
  92. },
  93. doChangePopover(state) {
  94. if (this.isHover) {
  95. return
  96. }
  97. this.popoverShow = state
  98. }
  99. }
  100. }
  101. </script>
  102. <style lang="scss">
  103. .el-popover.poverStep {
  104. padding: 0;
  105. border: 0;
  106. &.fixed-left {
  107. .popper__arrow {
  108. left: 100px !important;
  109. }
  110. }
  111. }
  112. </style>
  113. <style lang="scss" scoped>
  114. .project-content {
  115. max-height: 516px;
  116. overflow-y: auto;
  117. width: 100%;
  118. padding: 0 20px;
  119. .p-h-title {
  120. color: #1d1d1d;
  121. font-size: 18px;
  122. line-height: 28px;
  123. }
  124. ::v-deep {
  125. .el-card__header {
  126. padding: 12px 0 0;
  127. border: 0;
  128. }
  129. .el-card__body {
  130. padding: 0 20px 20px;
  131. }
  132. }
  133. }
  134. </style>