index.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <template>
  2. <wrapper
  3. fill
  4. margin
  5. padding
  6. background
  7. horizontal
  8. >
  9. <department-tree
  10. class="c-sibling-item c-sidebar u-width--md"
  11. remember
  12. @change="onGroupChanged"
  13. />
  14. <schema-table
  15. ref="table"
  16. class="c-sibling-item far"
  17. row-key="id"
  18. :schema="schema"
  19. />
  20. </wrapper>
  21. </template>
  22. <script>
  23. import { getDevicesByQuery } from '@/api/device'
  24. export default {
  25. name: 'DeviceList',
  26. data () {
  27. return {
  28. schema: {
  29. keepalive: true,
  30. autoRefreshEachPage: true,
  31. list: this.getDevicesByQuery,
  32. filters: [
  33. { key: 'name', type: 'search', placeholder: '设备名称' },
  34. { type: 'refresh' }
  35. ],
  36. cols: [
  37. { prop: 'name', label: '设备名称', 'min-width': 120 },
  38. { type: 'tag', render: ({ activate, onlineStatus }) => activate
  39. ? onlineStatus === 0
  40. ? { type: 'primary', label: '待接入' }
  41. : onlineStatus === 1
  42. ? { type: 'success', label: '在线' }
  43. : { type: 'danger', label: '离线' }
  44. : { type: 'warning', label: '未激活' }, 'width': 120 },
  45. { label: '运行时间', render: ({ openTime, closeTime }) => openTime && closeTime
  46. ? `${openTime} - ${closeTime}`
  47. : '-', width: 140 },
  48. { prop: 'address', label: '地址', 'min-width': 160 },
  49. { type: 'invoke', render: [
  50. { label: '详情', on: this.onViewDevice }
  51. ] }
  52. ]
  53. }
  54. }
  55. },
  56. methods: {
  57. onGroupChanged (group) {
  58. this.$group = group
  59. this.$refs.table?.pageTo(1)
  60. },
  61. getDevicesByQuery (params) {
  62. if (!this.$group) {
  63. return Promise.resolve({ data: [] })
  64. }
  65. return getDevicesByQuery({
  66. org: this.$group.path,
  67. ...params
  68. })
  69. },
  70. onViewDevice (item) {
  71. this.$router.push({
  72. name: 'device-detail',
  73. params: {
  74. id: item.id
  75. }
  76. })
  77. }
  78. }
  79. }
  80. </script>