deviceList.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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="60" 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></el-table-column>
  33. <el-table-column prop="fail" label="失败原因" width="100" align="center">
  34. <template #default="scope">
  35. <el-tag size="small" v-if="scope.row.fail == -1">升级失败</el-tag>
  36. <el-tag size="small" v-if="scope.row.fail == -2">下载失败</el-tag>
  37. <el-tag size="small" v-if="scope.row.fail == -3">校验失败</el-tag>
  38. <el-tag size="small" v-if="scope.row.fail == -4">烧写失败</el-tag>
  39. </template>
  40. </el-table-column>
  41. <el-table-column prop="createdAt" label="时间" min-width="100" align="center"></el-table-column>
  42. </el-table>
  43. <pagination v-show="tableData.total > 0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="getDetail" />
  44. </el-dialog>
  45. </div>
  46. </template>
  47. <script lang="ts">
  48. import api from '/@/api/ota';
  49. import {defineComponent, reactive, toRefs} from 'vue';
  50. interface TableDataRow {
  51. id: number;
  52. name: string;
  53. typo: string;
  54. productName: number;
  55. moduleName: string;
  56. checkres: string;
  57. createdAt: string;
  58. }
  59. interface TableDataState {
  60. ids: number[];
  61. tableData: {
  62. data: Array<TableDataRow>;
  63. total: number;
  64. loading: boolean;
  65. param: {
  66. pageNum: number;
  67. pageSize: number;
  68. deviceName: string;
  69. devOtaStrategy: number;
  70. };
  71. };
  72. isShowDialog: boolean;
  73. }
  74. export default defineComponent({
  75. setup(prop) {
  76. const state = reactive<TableDataState>({
  77. ids: [],
  78. tableData: {
  79. data: [],
  80. total: 0,
  81. loading: false,
  82. param: {
  83. pageNum: 1,
  84. pageSize: 10,
  85. deviceName: '',
  86. devOtaStrategy: 0,
  87. },
  88. },
  89. isShowDialog: false,
  90. });
  91. // 打开弹窗
  92. const openDialog = (row: any) => {
  93. state.tableData.loading = true;
  94. state.tableData.param.devOtaStrategy = Number(row.id);
  95. api.device.getList(state.tableData.param).then((res: any) => {
  96. state.tableData.data = res.Data;
  97. state.tableData.total = res.Total;
  98. }).finally(() => (state.tableData.loading = false));
  99. state.isShowDialog = true;
  100. };
  101. // 关闭弹窗
  102. const closeDialog = () => {
  103. state.isShowDialog = false;
  104. };
  105. // 取消
  106. const onCancel = () => {
  107. closeDialog();
  108. };
  109. const getDetail = () => {
  110. state.tableData.loading = true;
  111. api.device.getList(state.tableData.param).then((res: any) => {
  112. state.tableData.data = res.Data;
  113. state.tableData.total = res.Total;
  114. }).finally(() => (state.tableData.loading = false));
  115. };
  116. return {
  117. getDetail,
  118. openDialog,
  119. closeDialog,
  120. onCancel,
  121. ...toRefs(state),
  122. };
  123. },
  124. });
  125. </script>
  126. <style lang="scss" scoped>
  127. .width100 {
  128. width: 100%;
  129. }
  130. </style>