|
@@ -13,8 +13,8 @@
|
|
|
<span>{{ filename }}</span>
|
|
|
<span>{{ percent }}%</span>
|
|
|
</div>
|
|
|
- <div>
|
|
|
- <el-slider :disabled="true" v-model="percent" :show-tooltip="false" />
|
|
|
+ <div style="pointer-events: none">
|
|
|
+ <el-slider v-model="percent" :show-tooltip="false" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div v-else-if="state === State.readDown">
|
|
@@ -27,12 +27,11 @@
|
|
|
import { computed, onMounted, onUnmounted, ref } from "vue";
|
|
|
import saveAs from "@/util/file-serve";
|
|
|
import { checkHasDownload, getDownloadProcess, downloadScene, axios } from "@/request";
|
|
|
-import { ElMessage } from "element-plus";
|
|
|
+import { ElLoading, ElMessage } from "element-plus";
|
|
|
import { QuoteScene, SceneType } from "@/store/scene";
|
|
|
import { QuiskExpose } from "@/helper/mount";
|
|
|
|
|
|
const props = defineProps<{ scene: QuoteScene }>();
|
|
|
-console.log(props);
|
|
|
enum State {
|
|
|
uncreate,
|
|
|
package,
|
|
@@ -50,7 +49,6 @@ const getState = (type: number) => {
|
|
|
);
|
|
|
};
|
|
|
|
|
|
-const show = ref(false);
|
|
|
const state = ref<State>(State.uncreate);
|
|
|
const count = ref<number>(0);
|
|
|
const filename = ref<string>(props.scene.title + ".zip");
|
|
@@ -85,13 +83,10 @@ const initial = async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- show.value = true;
|
|
|
- console.log(state.value === State.readDown);
|
|
|
if (state.value === State.package) {
|
|
|
- refreshPercent();
|
|
|
+ await new Promise<void>((resolve) => requestUpdateURL(resolve));
|
|
|
} else {
|
|
|
downloadURL.value = res.data.downloadUrl;
|
|
|
- download();
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -101,29 +96,38 @@ const download = () => {
|
|
|
ElMessage.error("下载链接未生成,请稍等!");
|
|
|
throw "下载链接未生成,请稍等!";
|
|
|
} else {
|
|
|
- saveAs(downloadURL.value, filename.value);
|
|
|
+ return saveAs(downloadURL.value, filename.value);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 进度请求
|
|
|
let timer: any;
|
|
|
-const refreshPercent = async () => {
|
|
|
+const requestUpdateURL = async (callback: () => void) => {
|
|
|
const res = await axios.get(getDownloadProcess, { params });
|
|
|
|
|
|
percent.value = parseInt(res.data.percent);
|
|
|
downloadURL.value = res.data.url;
|
|
|
if (downloadURL.value) {
|
|
|
state.value = State.readDown;
|
|
|
- download();
|
|
|
+ callback();
|
|
|
} else {
|
|
|
- timer = setTimeout(refreshPercent, 1000);
|
|
|
+ timer = setTimeout(() => requestUpdateURL(callback), 1000);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
onUnmounted(() => clearTimeout(timer));
|
|
|
-onMounted(initial);
|
|
|
|
|
|
defineExpose<QuiskExpose>({
|
|
|
- submit: download
|
|
|
+ submit: async () => {
|
|
|
+ await initial();
|
|
|
+ const loading = ElLoading.service({
|
|
|
+ lock: true,
|
|
|
+ text: "下载中",
|
|
|
+ background: "rgba(255, 255, 255, 0.4)",
|
|
|
+ });
|
|
|
+ await download();
|
|
|
+ loading.close();
|
|
|
+ ElMessage.success("下载完成");
|
|
|
+ },
|
|
|
});
|
|
|
</script>
|