|
10 | 10 | show-status |
11 | 11 | actionLeft="4px" |
12 | 12 | :show-account-icon="false" |
| 13 | + :time-sort="params.timeSort" |
13 | 14 | @jump="jumpContent" |
14 | 15 | @refresh-before="refreshBefore" |
15 | 16 | :type="'all-email'" |
|
87 | 88 | <script setup> |
88 | 89 | import {starAdd, starCancel} from "@/request/star.js"; |
89 | 90 | import emailScroll from "@/components/email-scroll/index.vue" |
90 | | -import {computed, defineOptions, reactive, ref, watch} from "vue"; |
| 91 | +import {computed, defineOptions, reactive, ref, watch, onMounted} from "vue"; |
91 | 92 | import {useEmailStore} from "@/store/email.js"; |
92 | 93 | import { |
93 | 94 | allEmailList, |
94 | 95 | allEmailDelete, |
95 | | - allEmailBatchDelete |
| 96 | + allEmailBatchDelete, |
| 97 | + allEmailLatest |
96 | 98 | } from "@/request/all-email.js"; |
97 | 99 | import {Icon} from "@iconify/vue"; |
98 | 100 | import router from "@/router/index.js"; |
99 | 101 | import {useI18n} from 'vue-i18n'; |
100 | 102 | import {toUtc} from "@/utils/day.js"; |
| 103 | +import {AutoRefreshEnum} from "@/enums/setting-enum.js"; |
| 104 | +import {sleep} from "@/utils/time-utils.js"; |
| 105 | +import {useSettingStore} from "@/store/setting.js"; |
| 106 | +import { useRoute } from 'vue-router' |
101 | 107 |
|
102 | 108 | defineOptions({ |
103 | 109 | name: 'all-email' |
104 | 110 | }) |
105 | 111 |
|
| 112 | +const route = useRoute() |
106 | 113 | const {t} = useI18n(); |
107 | 114 | const emailStore = useEmailStore(); |
| 115 | +const settingStore = useSettingStore(); |
108 | 116 | const clearTime = ref('') |
109 | 117 | const sysEmailScroll = ref({}) |
110 | 118 | const searchValue = ref('') |
111 | 119 | const mySelect = ref() |
112 | 120 | const showBathDelete = ref(false) |
113 | 121 | const clearLoading = ref(false) |
114 | 122 |
|
| 123 | +onMounted(() => { |
| 124 | + latest(); |
| 125 | +}) |
| 126 | +
|
115 | 127 | const openSelect = () => { |
116 | 128 | mySelect.value.toggleMenu() |
117 | 129 | } |
@@ -272,6 +284,67 @@ function jumpContent(email) { |
272 | 284 | function getEmailList(emailId, size) { |
273 | 285 | return allEmailList({emailId, size, ...params}) |
274 | 286 | } |
| 287 | +
|
| 288 | +async function latest() { |
| 289 | +
|
| 290 | + while (true) { |
| 291 | +
|
| 292 | + await sleep(1000) |
| 293 | +
|
| 294 | + const latestId = sysEmailScroll.value.latestEmail?.emailId |
| 295 | +
|
| 296 | + if (settingStore.settings.autoRefresh === AutoRefreshEnum.DISABLED) { |
| 297 | + continue |
| 298 | + } |
| 299 | +
|
| 300 | + if (!latestId && latestId !== 0) { |
| 301 | + continue |
| 302 | + } |
| 303 | +
|
| 304 | + if (route.name !== 'all-email') { |
| 305 | + continue |
| 306 | + } |
| 307 | +
|
| 308 | +
|
| 309 | + if (params.type !== 'receive') { |
| 310 | + continue |
| 311 | + } |
| 312 | +
|
| 313 | + try { |
| 314 | +
|
| 315 | + const curTimeSort = params.timeSort |
| 316 | + let list = await allEmailLatest(latestId) |
| 317 | +
|
| 318 | + if (list.length === 0) { |
| 319 | + continue |
| 320 | + } |
| 321 | +
|
| 322 | + if (params.type !== 'receive') { |
| 323 | + continue |
| 324 | + } |
| 325 | +
|
| 326 | + // 确保回来之后条件没变 |
| 327 | + if (params.timeSort !== curTimeSort) { |
| 328 | + continue |
| 329 | + } |
| 330 | +
|
| 331 | + for (let email of list) { |
| 332 | +
|
| 333 | + sysEmailScroll.value.addItem(email) |
| 334 | + await sleep(50) |
| 335 | +
|
| 336 | + } |
| 337 | +
|
| 338 | + } catch (e) { |
| 339 | + if (e.code === 401) { |
| 340 | + settingStore.settings.autoRefresh = AutoRefreshEnum.DISABLED; |
| 341 | + } |
| 342 | + console.error(e) |
| 343 | + } |
| 344 | +
|
| 345 | + } |
| 346 | +} |
| 347 | +
|
275 | 348 | </script> |
276 | 349 | <style> |
277 | 350 |
|
|
0 commit comments