vueのantdのExcelテーブルのインポートとエクスポート

要件: バックエンド管理システムの特定のテーブルをインポートおよびエクスポートする必要があります。

この記事は vue と antdesign に基づいています

  1. テーブルのインポート:

まず、インポート テンプレートをダウンロードする必要があります。インポートされたテーブルがプロジェクト内のテーブルに対応しない場合、バックエンドに渡した後、バックエンドはそのテーブルを認識しません。

インポート テンプレートをダウンロードすると、リクエストがバックエンドに直接送信され、リクエスト時にデータが BLOB ストリームに変換されます (重要な手順)。

上記のコードの一部:

let url = window.URL.createObjectURL(new Blob([res.data], { type: '.xlsx' }));
            let a = document.createElement('a');
            a.style.display = 'none';
            a.href = url;
            a.setAttribute('download', ``);
            document.body.appendChild(a);
            a.click();
            url = window.URL.revokeObjectURL(url);
            document.body.removeChild(a)
            this.$message.success('下载成功', 3)
1.2. インポートテンプレートをダウンロードした後、このファイルをプロジェクトフォームにインポートします

antd コンポーネント ライブラリには、a-upload アップロード コンポーネントがあります。注意すべき重要な点はアクションです。このプロパティの値は、action="requested Base path (axios.defaults.baseURL + import Interface)" である必要があります。動的には、アクションの前にコロンを追加する必要があります

html:
<a-upload name="file" :action="actionURL+''" @change="handleChange":showUploadList="false" method="post" :data="file.file" :headers="headers">
 <a>导入</a>
 </a-upload>
js:
      handleChange(info) { // 导入
         this.file['file'] = info.file.name
         if (info.file.status !== 'uploading') {
            //   console.log(info.file, info.fileList);
         }
         if (info.file.status === 'done') {
            this.$message.success('导入成功', 3)
         } else if (info.file.status === 'error') {
            this.$message.error('文件导入失败', 3);
            this.isImportExcel = false
         }
      },
1.3. コンポーネントを使用せずに、通常どおりインターフェイスを呼び出すだけでファイルをインポートすることもできます (1.2 および 1.3 ではオプション)
  importExcel(info) {
      let input = document.createElement("input");
      input.type = "file";
      input.onchange = this.handleUpload;
      input.click();
    },
    handleUpload(event) {
        let file = event.target.files[0];
        POST_IMPORT_FILE(file).then((res) => {
          console.log(res)
            if (res.data.code === 0) {
                this.$message.success('导入成功', 3);
                this.pagination.current = 1
                this.getList();
            } else {
                this.$message.error('导入失败', 3);
            }
        });
    },

//  axios请求封装
export const POST_IMPORT_FILE = (data) => {
  let formData=new FormData()
  formData.append('file',data);
  formData.append('type',0);
  return axios.post(`接口`, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  });
}

2. テーブルのエクスポート

html:
            <a-button type="primary" style="margin-left:20px"
               loading>导出</a-button>     
js:

      async exportExcel() { // 导出
         axios({
            method: '',
            url: '/',
            params: {},
            responseType: "blob"
         }).then((res) => {
            let url = window.URL.createObjectURL(new Blob([res.data], { type: '.xlsx' }));
            let a = document.createElement('a');
            a.style.display = 'none';
            a.href = url;
            a.setAttribute('download', `维护.xlsx`);
            document.body.appendChild(a);
            a.click();
            url = window.URL.revokeObjectURL(url);
            document.body.removeChild(a)
            this.$message.success('导出成功', 3)
         }).catch(error => {
            this.$message.error('导出失败', 3)
         });
         }
      }

これでインポートとエクスポートが完了するので、上記のコードを貼り付けてコピーし、要求された内容を自分で変更することができます。

要約:

ニーズを分析し、解決策を見つけ、徐々に改善していきます。矛盾がある場合は、他の人に誤解を与えないように、お知らせください。ありがとうございます。

おすすめ

転載: blog.csdn.net/weixin_42234899/article/details/128801385