DeviceInfo.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div class="c-info">
  3. <div class="l-flex--row has-bottom-padding u-bold">
  4. <span class="c-sibling-item">设备信息</span>
  5. <permission :access="[Access.MANAGE_DEVICES, Access.MANAGE_DEVICE]">
  6. <span
  7. class="c-sibling-item c-info__edit u-pointer"
  8. @click="onEdit"
  9. >
  10. <i class="el-icon-edit" />
  11. 编辑
  12. </span>
  13. </permission>
  14. </div>
  15. <div class="l-flex--row c-info__block">
  16. <div class="l-flex--row l-flex__fill c-info__item">
  17. <div class="l-flex__none c-info__title">设备名称</div>
  18. <div class="l-flex__fill c-info__value">{{ device.name }}</div>
  19. </div>
  20. <div class="l-flex--row l-flex__fill c-info__item">
  21. <div class="l-flex__none c-info__title">产品</div>
  22. <div class="l-flex__fill c-info__value">{{ device.productName }}</div>
  23. </div>
  24. </div>
  25. <div class="l-flex--row c-info__block">
  26. <div class="l-flex--row l-flex__fill c-info__item">
  27. <div class="l-flex__none c-info__title">MAC</div>
  28. <div class="l-flex__fill c-info__value">{{ device.mac }}</div>
  29. </div>
  30. <div class="l-flex--row l-flex__fill c-info__item">
  31. <div class="l-flex__none c-info__title">序列号</div>
  32. <div class="l-flex__fill c-info__value">{{ device.serialNumber }}</div>
  33. </div>
  34. </div>
  35. <div class="l-flex--row c-info__block">
  36. <div class="l-flex--row l-flex__fill c-info__item">
  37. <div class="l-flex__none c-info__title">分辨率</div>
  38. <div class="l-flex__fill c-info__value">{{ device.resolutionRatio }}</div>
  39. </div>
  40. <div class="l-flex--row l-flex__fill c-info__item">
  41. <div class="l-flex__none c-info__title">创建时间</div>
  42. <div class="l-flex__fill c-info__value">{{ device.createTime }}</div>
  43. </div>
  44. </div>
  45. <div class="l-flex--row c-info__block">
  46. <div class="l-flex--row l-flex__fill c-info__item">
  47. <div class="l-flex__none c-info__title">地址</div>
  48. <div class="l-flex__fill c-info__value primary">{{ device.remark }}</div>
  49. </div>
  50. </div>
  51. <el-dialog
  52. title="编辑"
  53. :visible.sync="show"
  54. custom-class="c-dialog"
  55. :close-on-click-modal="false"
  56. >
  57. <div class="c-form">
  58. <div class="c-form__section">
  59. <span class="c-form__label required">名称:</span>
  60. <el-input
  61. v-model.trim="info.name"
  62. class="c-form__item"
  63. maxlength="50"
  64. show-word-limit
  65. />
  66. </div>
  67. <div class="c-form__section">
  68. <span class="c-form__label required">地址:</span>
  69. <el-input
  70. v-model="info.remark"
  71. class="c-form__item"
  72. type="textarea"
  73. :rows="3"
  74. maxlength="100"
  75. show-word-limit
  76. />
  77. </div>
  78. </div>
  79. <template #footer>
  80. <button
  81. class="o-button"
  82. @click="save"
  83. >
  84. 确定
  85. </button>
  86. <button
  87. class="o-button cancel"
  88. @click="close"
  89. >
  90. 取消
  91. </button>
  92. </template>
  93. </el-dialog>
  94. </div>
  95. </template>
  96. <script>
  97. import { updateDevice } from '@/api/device'
  98. export default {
  99. name: 'DeviceInfo',
  100. props: {
  101. device: {
  102. type: Object,
  103. default: null
  104. }
  105. },
  106. data () {
  107. return {
  108. show: false,
  109. info: {}
  110. }
  111. },
  112. methods: {
  113. onEdit () {
  114. this.info = {
  115. name: this.device.name,
  116. remark: this.device.remark
  117. }
  118. this.show = true
  119. },
  120. close () {
  121. this.show = false
  122. },
  123. save () {
  124. if (!this.info.name) {
  125. this.$message({
  126. type: 'warning',
  127. message: '名称不能为空'
  128. })
  129. return
  130. }
  131. if (!this.info.remark) {
  132. this.$message({
  133. type: 'warning',
  134. message: '地址不能为空'
  135. })
  136. return
  137. }
  138. if (this.info.name === this.device.name && this.info.remark === this.device.remark) {
  139. this.close()
  140. return
  141. }
  142. updateDevice({
  143. id: this.device.id,
  144. ...this.info
  145. }).then(() => {
  146. Object.assign(this.device, this.info)
  147. this.close()
  148. })
  149. }
  150. }
  151. }
  152. </script>