| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import { defineStore } from "pinia";
- import { ref } from "vue";
- let progressTimer: ReturnType<typeof setInterval> | null = null;
- let activeController: AbortController | null = null;
- function clearProgressTimer() {
- if (progressTimer) {
- clearInterval(progressTimer);
- progressTimer = null;
- }
- }
- export const useSimpleUploadOverlayStore = defineStore("simple-upload-overlay", () => {
- const show = ref(false);
- const percent = ref(0);
- const title = ref("上传中");
- const cancelText = ref("取消上传");
- function beginUpload(opts?: { title?: string }) {
- activeController?.abort();
- clearProgressTimer();
- activeController = new AbortController();
- title.value = opts?.title ?? "上传中";
- percent.value = 3;
- show.value = true;
- progressTimer = setInterval(() => {
- if (percent.value < 88) {
- percent.value = Math.min(88, percent.value + 2 + Math.random() * 6);
- }
- }, 260);
- return activeController.signal;
- }
- function bumpToComplete() {
- clearProgressTimer();
- percent.value = 100;
- }
- function dismiss() {
- clearProgressTimer();
- show.value = false;
- percent.value = 0;
- activeController = null;
- }
- function userCancel() {
- activeController?.abort();
- dismiss();
- }
- return {
- show,
- percent,
- title,
- cancelText,
- beginUpload,
- bumpToComplete,
- dismiss,
- userCancel
- };
- });
|