MessageStream2.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <el-row class="movie-list">
  3. <el-col :md="18">
  4. <div class="movie-list" style="height: 70vh;">
  5. <!-- 注意需要给 el-scrollbar 设置高度,判断是否滚动是看它的height判断的 -->
  6. <el-scrollbar style="width: 100%; height: 100%;">
  7. <el-row class="movie-list">
  8. <div
  9. v-for="(item, index) in dataList"
  10. :key="index"
  11. :md="6"
  12. :sm="12"
  13. :xs="12"
  14. >
  15. <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
  16. <el-card class="box-card">
  17. <el-row>
  18. <el-col :md="20">
  19. <el-row>
  20. <div style="padding: 14px">
  21. <span style="left: 0;margin-bottom: 0px;color: black;">{{ item }}</span>
  22. </div>
  23. </el-row>
  24. </el-col>
  25. </el-row>
  26. </el-card>
  27. </el-row>
  28. </div>
  29. </el-row>
  30. </el-scrollbar>
  31. </div>
  32. </el-col>
  33. <el-col :md="6">
  34. <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
  35. <el-col>
  36. <el-button
  37. size="mini"
  38. type="danger"
  39. class="el-icon-delete"
  40. @click="clear"
  41. >清空</el-button>
  42. </el-col>
  43. </el-row>
  44. <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
  45. <el-card class="box-card">
  46. <el-input
  47. v-model="text"
  48. type="textarea"
  49. :rows="3"
  50. placeholder="有什么新鲜事想分享给大家?"
  51. />
  52. <el-row style="text-align: right">
  53. <el-button
  54. size="mini"
  55. type="submit"
  56. class="el-icon-message"
  57. @click="onSubmit"
  58. >发送</el-button>
  59. </el-row>
  60. </el-card>
  61. </el-row>
  62. </el-col>
  63. </el-row>
  64. </template>
  65. <script>
  66. export default {
  67. name: 'MessageStream',
  68. filters: {
  69. ellipsis(value) {
  70. if (!value) return ''
  71. const max = 50
  72. if (value.length > max) {
  73. return value.slice(0, max) + '...'
  74. }
  75. return value
  76. }
  77. },
  78. data() {
  79. return {
  80. dataList: [],
  81. text: '',
  82. websocket: null
  83. }
  84. },
  85. created() {
  86. document.title = 'EventSource'
  87. // this.init()
  88. },
  89. methods: {
  90. clear() {
  91. this.dataList = []
  92. },
  93. onSubmit() {
  94. this.$notify({
  95. message: this.text,
  96. type: 'info',
  97. duration: 1000
  98. })
  99. this.text = ''
  100. },
  101. init() {
  102. var list = this.dataList
  103. if (typeof (EventSource) !== 'undefined') {
  104. const url = process.env.VUE_APP_SERVER_URL + '/times'
  105. const source = new EventSource(url)
  106. source.addEventListener('test', function(e) {
  107. console.log(e)
  108. })
  109. source.onmessage = function(event) {
  110. console.log(event)
  111. list.push(event.data)
  112. }
  113. } else {
  114. console.log('抱歉,你的浏览器不支持 server-sent 事件...')
  115. }
  116. }
  117. }
  118. }
  119. </script>
  120. <style scoped>
  121. /*处于手机屏幕时*/
  122. @media screen and (max-width: 768px) {
  123. .movie-list {
  124. padding-top: 8px;
  125. padding-left: 0.5%;
  126. padding-right: 0.5%;
  127. }
  128. }
  129. .movie-list {
  130. padding-top: 15px;
  131. padding-left: 6%;
  132. padding-right: 6%;
  133. }
  134. </style>