expoHead.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <script lang="ts">
  2. import Vue from 'vue'
  3. import { getMyExpoInfo } from '@/api/expo'
  4. export default Vue.extend({
  5. name: "expoPopover",
  6. data() {
  7. return {
  8. ossUrl: process.env.VUE_APP_OSS_DOMAIN
  9. }
  10. },
  11. props: {
  12. popover_data: Object,
  13. },
  14. mounted() {
  15. setTimeout(()=>{
  16. console.log(this.popover_data)
  17. },2000)
  18. },
  19. methods: {
  20. goto(url) {
  21. window.open(url, '_blank')
  22. },
  23. }
  24. })
  25. </script>
  26. <template>
  27. <div class="expo-info">
  28. <div class="cover loading">
  29. <img v-if="popover_data.images" :src="ossUrl+popover_data.images[0]">
  30. <div v-permission="'exhibitor.copyLink'" v-if="popover_data.form_template_id && popover_data.urla" @click="copyUrl()" class="button">复制表单地址</div>
  31. </div>
  32. <div class="info-body">
  33. <div class="avatar-name">
  34. <div class="avatar loading">
  35. <img v-if="popover_data.logo" :src="ossUrl+popover_data.logo">
  36. </div>
  37. <div class="name-cont">
  38. <div :class="['name',popover_data.expo_name!==undefined?'':'loading']">{{ popover_data.expo_name }}</div>
  39. <div :class="['sub-name',popover_data.organizer!==undefined?'':'loading']">{{ popover_data.organizer }}</div>
  40. <div class="contact">
  41. <div class="phone">
  42. <i class="icon el-icon-mobile-phone" />
  43. <div :class="['phone-num link',popover_data.contact_phone!==undefined?'':'loading']" @click="goto('tel:'+popover_data.contact_phone)">{{ popover_data.contact_phone }}</div>
  44. </div>
  45. <div class="email">
  46. <i class="icon el-icon-message" />
  47. <div :class="['email-addr link',popover_data.contact_email!==undefined?'':'loading']" @click="goto('mailto:'+popover_data.contact_email)">{{ popover_data.contact_email }}</div>
  48. </div>
  49. <div class="date">
  50. <i class="icon el-icon-date" />
  51. <div :class="['date-range',popover_data.start_date!==undefined?'':'loading']">{{ popover_data.start_date }} - {{ popover_data.end_date }}</div>
  52. </div>
  53. </div>
  54. </div>
  55. </div>
  56. <div :class="['desc',popover_data.content!==undefined?'':'loading']">
  57. {{ popover_data.content }}
  58. </div>
  59. <div v-if="popover_data.social_links" class="social_links">
  60. <div class="social-title">社交媒体</div>
  61. <div class="social-list">
  62. <div v-if="popover_data.social_links.facebook" class="social-item">
  63. <span>facebook:</span><span class="link" @click="goto(popover_data.social_links.facebook)">{{ popover_data.social_links.facebook }}</span>
  64. </div>
  65. <div v-if="popover_data.social_links.twitter" class="social-item">
  66. <span>twitter:</span><span class="link" @click="goto(popover_data.social_links.twitter)">{{ popover_data.social_links.twitter }}</span>
  67. </div>
  68. <div v-if="popover_data.social_links.linkedin" class="social-item">
  69. <span>linkedin:</span><span class="link" @click="goto(popover_data.social_links.linkedin)">{{ popover_data.social_links.linkedin }}</span>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. </template>
  76. <style scoped lang="scss">
  77. .expo-info{
  78. position: relative;
  79. width: 100%;
  80. .link{
  81. cursor: pointer;
  82. text-decoration: underline;
  83. }
  84. .info-body{
  85. margin: auto;
  86. max-width: 800px;
  87. padding: 16px;
  88. .social_links{
  89. margin-top: 12px;
  90. .social-title{
  91. font-weight: bold;
  92. }
  93. .social-list{
  94. display: flex;
  95. flex-wrap: wrap;
  96. gap: 4px 16px;
  97. }
  98. }
  99. .desc{
  100. margin-top: 12px;
  101. &.loading{
  102. height: 60px;
  103. width: 100%;
  104. }
  105. }
  106. .avatar-name{
  107. display: flex;
  108. grid-gap: 8px;
  109. .name-cont{
  110. flex: 1;
  111. .name{
  112. font-size: 20px;
  113. font-weight: bold;
  114. &.loading{
  115. height: 26px;
  116. width: 120px;
  117. }
  118. }
  119. .sub-name{
  120. color: gray;
  121. &.loading{
  122. margin-top: 8px;
  123. margin-bottom: 8px;
  124. height: 20px;
  125. width: 160px;
  126. }
  127. }
  128. .contact{
  129. flex-wrap: wrap;
  130. display: flex;
  131. grid-gap: 0 12px;
  132. .phone,.email,.date{
  133. display: flex;
  134. align-items: center;
  135. grid-gap: 4px;
  136. div{
  137. &.loading{
  138. height: 16px;
  139. width: 120px;
  140. }
  141. }
  142. }
  143. }
  144. }
  145. .avatar{
  146. width: 70px;
  147. height: 70px;
  148. border-radius: 50%;
  149. overflow: hidden;
  150. img{
  151. display: block;
  152. object-fit: cover;
  153. width: 100%;
  154. height: 100%;
  155. }
  156. }
  157. }
  158. }
  159. .cover{
  160. position: relative;
  161. width: 100%;
  162. height: 300px;
  163. .button{
  164. cursor: pointer;
  165. background: #00000044;
  166. padding: 4px 12px;
  167. border-radius: 24px;
  168. border: 2px solid white;
  169. color: white;
  170. position: absolute;
  171. right: 16px;
  172. top: 16px;
  173. }
  174. img{
  175. display: block;
  176. object-fit: cover;
  177. width: 100%;
  178. height: 100%;
  179. }
  180. }
  181. }
  182. </style>