deviceList.vue 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <template>
  2. <div class="ota-edit-module-container">
  3. <el-dialog :title="'设备详情'" v-model="isShowDialog" width="769px">
  4. <div class="search">
  5. <el-form :inline="true" ref="queryRef">
  6. <el-form-item label="设备名称:" prop="name">
  7. <el-input v-model="tableData.param.deviceName" placeholder="请输入设备名称" clearable size="default" style="width: 240px" @submit.prevent />
  8. </el-form-item>
  9. <el-form-item>
  10. <el-button size="default" type="primary" class="ml10" @click="getDetail">
  11. <el-icon>
  12. <ele-Search />
  13. </el-icon>
  14. 查询
  15. </el-button>
  16. </el-form-item>
  17. </el-form>
  18. </div>
  19. <el-table :data="tableData.data" style="width: 100%" row-key="id" v-loading="tableData.loading">
  20. <el-table-column prop="id" label="ID" width="100" show-overflow-tooltip></el-table-column>
  21. <el-table-column prop="deviceName" label="设备名称" show-overflow-tooltip></el-table-column>
  22. <el-table-column prop="status" label="状态" show-overflow-tooltip>
  23. <template #default="scope">
  24. <el-tag size="small" v-if="scope.row.status == 0">待推送</el-tag>
  25. <el-tag size="small" v-if="scope.row.status == 1">已推送</el-tag>
  26. <el-tag size="small" v-if="scope.row.status == 2">升级中</el-tag>
  27. <el-tag size="small" v-if="scope.row.status == 3">升级成功</el-tag>
  28. <el-tag size="small" v-if="scope.row.status == 4">升级失败</el-tag>
  29. <el-tag size="small" v-if="scope.row.status == 5">已取消</el-tag>
  30. </template>
  31. </el-table-column>
  32. <el-table-column prop="step" label="升级进度" show-overflow-tooltip>
  33. <template #default="scope">
  34. <el-tag size="small" type="success" v-if="scope.row.step > 0">{{ scope.row.step }}%</el-tag>
  35. <el-tag size="small" v-else>{{ scope.row.step }}</el-tag>
  36. </template>
  37. </el-table-column>
  38. <el-table-column prop="fail" label="失败原因" width="100" align="center">
  39. <template #default="scope">
  40. <el-tag size="small" type="danger" v-if="scope.row.fail == -1">升级失败</el-tag>
  41. <el-tag size="small" type="danger" v-if="scope.row.fail == -2">下载失败</el-tag>
  42. <el-tag size="small" type="danger" v-if="scope.row.fail == -3">校验失败</el-tag>
  43. <el-tag size="small" type="danger" v-if="scope.row.fail == -4">烧写失败</el-tag>
  44. </template>
  45. </el-table-column>
  46. <el-table-column prop="createdAt" label="时间" min-width="100" align="center"></el-table-column>
  47. </el-table>
  48. <pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="getDetail" />
  49. </el-dialog>
  50. </div>
  51. </template>
  52. <script lang="ts">
  53. import api from '/@/api/ota';
  54. import {defineComponent, reactive, toRefs} from 'vue';
  55. interface TableDataRow {
  56. id: number;
  57. name: string;
  58. typo: string;
  59. productName: number;
  60. moduleName: string;
  61. checkres: string;
  62. createdAt: string;
  63. }
  64. interface TableDataState {
  65. ids: number[];
  66. tableData: {
  67. data: Array<TableDataRow>;
  68. total: number;
  69. loading: boolean;
  70. param: {
  71. pageNum: number;
  72. pageSize: number;
  73. deviceName: string;
  74. devOtaStrategy: number;
  75. };
  76. };
  77. isShowDialog: boolean;
  78. }
  79. export default defineComponent({
  80. setup(prop) {
  81. const state = reactive<TableDataState>({
  82. ids: [],
  83. tableData: {
  84. data: [],
  85. total: 0,
  86. loading: false,
  87. param: {
  88. pageNum: 1,
  89. pageSize: 10,
  90. deviceName: '',
  91. devOtaStrategy: 0,
  92. },
  93. },
  94. isShowDialog: false,
  95. });
  96. // 打开弹窗
  97. const openDialog = (row: any) => {
  98. state.tableData.loading = true;
  99. state.tableData.param.devOtaStrategy = Number(row.id);
  100. api.device.getList(state.tableData.param).then((res: any) => {
  101. state.tableData.data = res.Data;
  102. state.tableData.total = res.Total;
  103. }).finally(() => (state.tableData.loading = false));
  104. state.isShowDialog = true;
  105. };
  106. // 关闭弹窗
  107. const closeDialog = () => {
  108. state.isShowDialog = false;
  109. };
  110. // 取消
  111. const onCancel = () => {
  112. closeDialog();
  113. };
  114. const getDetail = () => {
  115. state.tableData.loading = true;
  116. api.device.getList(state.tableData.param).then((res: any) => {
  117. state.tableData.data = res.Data;
  118. state.tableData.total = res.Total;
  119. }).finally(() => (state.tableData.loading = false));
  120. };
  121. return {
  122. getDetail,
  123. openDialog,
  124. closeDialog,
  125. onCancel,
  126. ...toRefs(state),
  127. };
  128. },
  129. });
  130. </script>
  131. <style lang="scss" scoped>
  132. .width100 {
  133. width: 100%;
  134. }
  135. </style>