index.vue 4.1 KB

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