vue进度条异步请求

vue页面上有一个需求,点击文件的名称就能自动弹出浏览器那个保存文件的窗口,然后选好下载路径,文件就会下载,进度显示在浏览器的左下角(我的Chrome是这样的)
但是感觉不太直观,万一客户没看到重复点击,浏览器的窗口会一直弹出,影响使用感受,所以添加一个进度条,查了一下element-ui里面有个el-progress,使用了,但是有几个对于小菜来说的难点
思路是点击文件——浏览器弹出窗口,选择保存路径,点击保存——页面中间出现实时进度条,下载期间不能进行其他操作,下载后有个类似于message的弹窗提示“文件下载完成”
进度条的出现设定了一个变量showProgress,点击下载的时候等于true,下载完毕关闭弹窗,每次点开的时候都是false,但是现在进度条比浏览器的窗口出来的快,这个是要用到异步axios吗?
怎么才能让进度条最后出现呢?怎么让文件的下载跟进度条同步呢??
请教一下各位!

img

img


<template>
  <div>
    <button @click="downloadFile">下载文件</button>
    <el-progress v-if="showProgress" :percentage="progress" :status="progressStatus"></el-progress>
  </div>
</template>

<script>
import axios from 'axios';
import { ElMessage } from 'element-plus';

export default {
  data() {
    return {
      showProgress: false,
      progress: 0,
      progressStatus: 'success',
    }
  },
  methods: {
    downloadFile() {
      this.showProgress = true;
      axios({
        url: 'url_to_your_file',
        method: 'GET',
        responseType: 'blob', // This is important
        onDownloadProgress: (progressEvent) => {
          // Calculate the percentage
          this.progress = Math.round((progressEvent.loaded * 100) / progressEvent.total);
        },
      })
      .then((response) => {
        // Create a blob link
        const url = window.URL.createObjectURL(new Blob([response.data]));
        const link = document.createElement('a');
        link.href = url;
        link.setAttribute('download', 'file_name');
        document.body.appendChild(link);
        link.click();
        // Notify the user
        ElMessage.success('文件下载完成!');
        this.showProgress = false;
      })
      .catch((error) => {


这个应该不行吧,要能获取到浏览器文件下载进度,那浏览器下载列表基本也能获取到,浏览器应该不允许吧