index.vue 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <wrapper
  3. class="c-debug"
  4. fill
  5. margin
  6. padding
  7. background
  8. >
  9. <div class="l-flex__none l-flex--row has-bottom-padding">
  10. <div class="l-flex__auto l-flex--row c-sibling-item">
  11. <span>开启</span>
  12. <el-switch
  13. v-model="opend"
  14. class="l-flex__none c-sibling-item"
  15. active-color="#13ce66"
  16. inactive-color="#ff4949"
  17. @change="onChange"
  18. />
  19. <button
  20. class="l-flex__none c-sibling-item o-button"
  21. @click="publish"
  22. >
  23. <i class="o-button__icon el-icon-share" />
  24. 发送消息
  25. </button>
  26. </div>
  27. <el-select
  28. v-model="device"
  29. class="l-flex__none c-sibling-item"
  30. placeholder="请选择设备"
  31. >
  32. <el-option
  33. v-for="item in devices"
  34. :key="item.id"
  35. :label="item.name"
  36. :value="item.id"
  37. />
  38. </el-select>
  39. <button
  40. class="l-flex__none c-sibling-item o-button"
  41. @click="clear"
  42. >
  43. <i class="o-button__icon el-icon-delete" />
  44. 清空
  45. </button>
  46. </div>
  47. <div class="l-flex__auto u-overflow-y--auto">
  48. <div
  49. v-for="message in messages"
  50. :key="message.id"
  51. >
  52. <div v-if="message.topic">
  53. {{ message.time }} {{ message.topic }}
  54. </div>
  55. <div>{{ message.desc }}</div>
  56. </div>
  57. </div>
  58. <el-dialog
  59. title="发送消息"
  60. :visible.sync="mqtt.show"
  61. custom-class="c-dialog mini"
  62. >
  63. <div class="c-grid-form u-align-self--center">
  64. <span class="c-grid-form__label required">topic</span>
  65. <el-input v-model.trim="mqtt.topic" />
  66. <span class="c-grid-form__label">message</span>
  67. <el-input
  68. v-model.trim="mqtt.message"
  69. type="textarea"
  70. :rows="6"
  71. />
  72. <span class="c-grid-form__label">加密</span>
  73. <div class="l-flex--row c-grid-form__option">
  74. <el-switch
  75. v-model="mqtt.encode"
  76. active-color="#13ce66"
  77. inactive-color="#ff4949"
  78. />
  79. </div>
  80. </div>
  81. <template #footer>
  82. <button
  83. class="o-button"
  84. @click="send"
  85. >
  86. 发送
  87. </button>
  88. </template>
  89. </el-dialog>
  90. </wrapper>
  91. </template>
  92. <script>
  93. import {
  94. devices,
  95. deviceMessage,
  96. opend,
  97. start,
  98. stop,
  99. clear,
  100. send
  101. } from './debug'
  102. export default {
  103. name: 'Debug',
  104. data () {
  105. return {
  106. opend,
  107. devices,
  108. deviceMessage,
  109. device: 'all',
  110. mqtt: {
  111. show: false,
  112. topic: '',
  113. message: '',
  114. encode: true
  115. }
  116. }
  117. },
  118. computed: {
  119. messages () {
  120. if (this.device === 'all') {
  121. return this.deviceMessage.map(item => {
  122. return {
  123. id: item.id,
  124. desc: `${item.name}共${item.list.length}条消息`
  125. }
  126. })
  127. }
  128. return this.deviceMessage.find(item => item.id === this.device).list
  129. }
  130. },
  131. methods: {
  132. onChange () {
  133. if (this.opend) {
  134. start()
  135. } else {
  136. stop()
  137. }
  138. },
  139. clear () {
  140. clear()
  141. },
  142. publish () {
  143. this.mqtt = {
  144. show: true,
  145. topic: '',
  146. message: '',
  147. encode: true
  148. }
  149. },
  150. send () {
  151. if (!this.mqtt.topic) {
  152. this.$message({
  153. type: 'warning',
  154. message: '请填写topic'
  155. })
  156. return
  157. }
  158. send(this.mqtt.topic, this.mqtt.message, this.mqtt.encode).then(() => {
  159. this.$message({
  160. type: 'success',
  161. message: '发送成功'
  162. })
  163. }, () => {
  164. this.$message({
  165. type: 'error',
  166. message: '发送失败'
  167. })
  168. })
  169. }
  170. }
  171. }
  172. </script>
  173. <style lang="scss" scoped>
  174. .c-debug {
  175. color: $black;
  176. font-size: 14px;
  177. line-height: 24px;
  178. word-break: break-all;
  179. }
  180. </style>