index.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. <template>
  2. <div class="viewLogsPage flex-col">
  3. <s-header :name="$t('device.viewLogs')" :noback="false"></s-header>
  4. <div class="block2 flex-row justify-between">
  5. <div class="block3 flex-col"></div>
  6. <span class="info2">{{ $t('device.equipmentName') }}:{{ deviceDetail ? deviceDetail.name : '' }}</span>
  7. </div>
  8. <div class="wrap1 flex-col o-pt-15">
  9. <van-field v-model="logsTime" is-link readonly label="日期" placeholder="点击选择时间" @click="chooseTime()" />
  10. <van-popup v-model:show="showPicker" round position="bottom">
  11. <van-datetime-picker type="date" :min-date="minDate" :max-date="maxDate"
  12. @confirm="selectTime" @cancel="showPicker = false" />
  13. </van-popup>
  14. <van-button v-if="!downloading" round :disabled="logsTime === ''" type="primary" class="volumeChangeButton"
  15. @click="downloadBtn">{{ $t('device.download') }}</van-button>
  16. <van-button v-else disabled loading round class="volumeChangeButton" type="primary"
  17. :loading-text="$t('device.downloading')" />
  18. </div>
  19. </div>
  20. </template>
  21. <script>
  22. import {
  23. onMounted,
  24. computed,
  25. ref
  26. } from 'vue';
  27. import sHeader from "@/components/SimpleHeader.vue";
  28. import {
  29. downloadLog,
  30. getDeviceDetal
  31. } from "@/service/device";
  32. import { $M_ExportFile } from "@/common/js/utils";
  33. import {
  34. Toast
  35. } from "vant";
  36. import {
  37. useRoute
  38. } from "vue-router";
  39. import dateUtil from "@/utils/dateUtil";
  40. import { styleUrl } from '../../../common/js/utils';
  41. // import {useI18n} from "vue-i18n";
  42. export default ({
  43. components: {
  44. sHeader
  45. },
  46. setup() {
  47. // const { t } = useI18n();
  48. const route = useRoute();
  49. const deviceId = route.query.deviceId;
  50. const deviceDetail = ref(null);
  51. const showPicker = ref(false);
  52. const downloading = ref(false);
  53. const logsTime = ref(null);
  54. // const curDate = new Date(); // 获取当前时间日期
  55. // 计算最小日期为当前日期7天前
  56. const minDate = computed(() => {
  57. const minTimestamp = (new Date()).getTime() - 6 * 24 * 3600 * 1000;
  58. const minDate = dateUtil.formateDate(new Date(minTimestamp), "yyyy-MM-dd");
  59. return new Date(minDate);
  60. });
  61. // 计算最大日期为当前日期
  62. const maxDate = computed(() => {
  63. return new Date();
  64. });
  65. // 初始化页面获取列表
  66. onMounted(async () => {
  67. // 加载样式
  68. styleUrl('viewLogs');
  69. await getDeviceDetailFun();
  70. // console.log(deviceDetail.value.name);
  71. });
  72. // 选择时间
  73. const chooseTime = () => {
  74. // console.log('chooseTime function is called');
  75. showPicker.value = true;
  76. console.log(showPicker.value);
  77. };
  78. const selectTime = (time) => {
  79. // console.log('selectTime function is called', time);
  80. logsTime.value = dateUtil.formateDate(time, "yyyy-MM-dd");
  81. showPicker.value = false;
  82. };
  83. const getDeviceDetailFun = async () => {
  84. const {
  85. data
  86. } = await getDeviceDetal({
  87. id: deviceId
  88. });
  89. if (data.code === '00000') {
  90. deviceDetail.value = data.data;
  91. } else {
  92. Toast.fail(data.message);
  93. }
  94. }
  95. const downloadBtn = async () => {
  96. const pattern = /^\d{4}-\d{2}-\d{2}$/;
  97. if (!pattern.test(logsTime.value)) {
  98. Toast.fail('日期格式有误');
  99. return;
  100. }
  101. const formattedDate = logsTime.value.replace(/-/g, '');
  102. downloading.value = true;
  103. try {
  104. const {
  105. headers, data
  106. } = await downloadLog({
  107. equipmentId: deviceId,
  108. day: formattedDate,
  109. });
  110. console.log('请求成功', headers, data);
  111. $M_ExportFile(data, headers);
  112. } catch (error) {
  113. if (error.code === 'ECONNABORTED') {
  114. // 处理请求超时的错误
  115. console.error('请求超时:', error);
  116. Toast.fail("请求超时");
  117. } else {
  118. // 处理其他请求错误
  119. console.error('请求失败:', error);
  120. Toast.fail("请求失败");
  121. }
  122. } finally {
  123. downloading.value = false;
  124. }
  125. }
  126. return {
  127. deviceDetail,
  128. downloadBtn,
  129. chooseTime,
  130. selectTime,
  131. showPicker,
  132. logsTime,
  133. minDate,
  134. maxDate,
  135. downloading,
  136. }
  137. },
  138. });
  139. </script>
  140. <style lang="less" scoped>
  141. @import "../../../common/style/common";
  142. </style>