国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ant-Design-Pro-V5: ProTable前端導出excel表格。

這篇具有很好參考價值的文章主要介紹了Ant-Design-Pro-V5: ProTable前端導出excel表格。。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Prtable表格中根據搜索條件實現(xiàn)excel表格導出。
antdesign table 導出,Ant Design,前端,react.js
代碼展示:

index.jsx

import React, { useRef, useState, Fragment, useEffect } from 'react';
import { getLecturerList, lecturerExportExcel } from '@/services/train/personnel';
import { getOrgList, getSelectType } from '@/services/globalServices';
import { PlusOutlined, EditTwoTone, ExportOutlined } from '@ant-design/icons';
import { PageContainer, ProTable, ProFormSelect } from '@ant-design/pro-components';
import { Button, message, Form, Space, Tooltip, Spin } from 'antd';
import { FormattedMessage } from 'umi';

const InsideLecturer = () => {
  const [orgList, setOrgList] = useState([]); // 管理機構
  const [downloadParams, setDownloadParams] = useState({}); //導出參數
  const [downloadTotal, setDownloadTotal] = useState({}); //導出數量總數以及頁碼
  const [exportExcelLoading, setExportExcelLoading] = useState(false); //導出loading
  const actionRef = useRef(); // 表格組件ProTable ref
  const [form] = Form.useForm(); // 創(chuàng)建表單
  const formRef = useRef();
  const [currentRow, setCurrentRow] = useState(); // 當前行數據
  const [teacherstateArray, setTeacherstateArray] = useState([]); // 在崗狀態(tài)
  const [teacherstateObj, setTeacherstateObj] = useState({}); // 在崗狀態(tài)
  const [teacherTypeArray, setTeacherTypeArray] = useState([]); // 講師類型
  const [teacherTypeObj, setTeacherTypeObj] = useState({}); // 講師類型
  const [idtypeArray, setIdtypeArray] = useState([]); // 證件類型

  const teacherType = 2; // 內勤講師類型
  useEffect(() => {
    getSelectTypeFun();
  }, []);
  const getSelectTypeFun = async () => {
    await getSelectType('teacherstate').then((res) => {
      if (res && res.data) {
        setTeacherstateArray(res.data);
        let Obj = {};
        res.data.forEach((item) => {
          Obj[item.code] = item.codeName;
        });
        setTeacherstateObj(Obj);
      }
    });
    await getSelectType('teachertype').then((res) => {
      if (res && res.data && res.data.length > 0) {
        let removedArr = res.data.filter((item) => {
          return item.code != '1' && item.code != '3';
        });
        setTeacherTypeArray(removedArr);
        let Obj = {};
        removedArr.forEach((item) => {
          Obj[item.code] = item.codeName;
        });
        setTeacherTypeObj(Obj);
      }
    });
    await getSelectType('idnotype').then((res) => {
      if (res && res.data) {
        setIdtypeArray(res.data);
      }
    });
  };
  const fieldNames = {
    label: 'codeName',
    value: 'code',
  };
  const columns = [
    {
      title: '姓名',
      dataIndex: 'name',
    },
    {
      title: '講師類別',
      dataIndex: 'teacherType',
      valueType: 'select',
      fieldProps: {
        options: teacherTypeArray,
        fieldNames,
      },
    },
    {
      title: '證件號碼',
      dataIndex: 'idNo',
    },
    {
      title: '工號',
      dataIndex: 'staffCode',
      search: false,
      editable: false,
    },
    {
      title: '講師狀態(tài)',
      dataIndex: 'state',
      valueType: 'select',
      fieldProps: {
        options: teacherstateArray,
        fieldNames,
      },
    },
    {
      title: '移動電話',
      dataIndex: 'mobile',
      search: false,
      width: 150,
    },

    {
      title: <FormattedMessage id="pages.searchTable.titleOption" />,
      dataIndex: 'option',
      valueType: 'option',
      width: 100,
      render: (_, record) => [
        <div key={record.staffCode}>
          <Fragment>
            <a
              onClick={() => {
                setCurrentRow(record);
              }}
            >
              <EditTwoTone />
              <FormattedMessage id="pages.searchTable.edit" />
            </a>
            <span style={{ marginRight: '10px' }}></span>
          </Fragment>
        </div>,
      ],
    },
  ];

  return (
    <Spin spinning={exportExcelLoading} tip="數據導出中...">
      <PageContainer breadcrumb={false}>
        <ProTable
          headerTitle="查詢列表"
          rowKey={'staffCode'}
          actionRef={actionRef}
          options={false}
          formRef={formRef}
          search={{
            labelWidth: 120,
          }}
          params={{
            teacherType: 2,
          }}
          pagination={{
            pageSize: 10,
          }}
          tableAlertOptionRender={() => {
            return false;
          }}
          toolBarRender={() => [
            <Tooltip placement="topLeft" title="點擊導出內容">
              <Button
                type="default"
                key="export"
                loading={exportExcelLoading}
                onClick={() => {
                  lecturerExportExcel({
                    downloadTotal,
                    downloadParams,  //  ...formRef.current?.getFieldsValue(), 
                    orgObj2,
                    teacherstateObj,
                    teacherType,
                    teacherTypeObj,
                    setExportExcelLoading,
                  });
                }}
              >
                <ExportOutlined /> 導出數據
              </Button>
            </Tooltip>,
          ]}
          revalidateOnFocus={false}
          onSubmit={(params) => {
            // 導出參數設置
            setDownloadParams(params);
          }}
          onReset={() => setDownloadParams(undefined)}
          request={(params) => {
            const res = getLecturerList({ ...params });
            res.then((value) => {
              // 設置導出總數以及頁碼
              setDownloadTotal({
                current: 1,
                pageSize: value?.total || 100000,
              });
            });
            return res;
          }}
          columns={columns}
        />
      </PageContainer>
    </Spin>
  );
};

export default InsideLecturer;

數據字典格式返回:
antdesign table 導出,Ant Design,前端,react.js
以 teacherTypeObj 為例 向services.js中 lecturerExportExcel 方法中傳入的格式為:
antdesign table 導出,Ant Design,前端,react.js

services.js中 lecturerExportExcel 導出方法:

import { request } from 'umi';
import { paramsFilter } from '../../utils/utils';
import ExportJsonExcel from 'js-export-excel';
import { message } from 'antd';


export async function lecturerExportExcel(params) {
  const { downloadTotal, downloadParams, orgObj2, teacherstateObj, teacherType, teacherTypeObj, setExportExcelLoading } = params;
  setExportExcelLoading(true);
  // 參數合并
  let newParams = Object.assign(downloadTotal, downloadParams);
  newParams.teacherType = teacherType;
  const result = await request('/api/Info/list2', {
    params: paramsFilter(newParams),
  });
  // 根據實際情況注釋不需要導出的字段
  const allowExportColumns = [
    'manageCom',
    'name',
    'staffCode',
    'idNo',
    'mobile',
    "state",
    "teacherType"
  ];
  const TableItemObject = {
    manageCom: "管理機構",
    name: "姓名",
    staffCode: "工號",
    idNo: "證件號碼",
    mobile: "移動電話",
    state: "講師狀態(tài)",
    teacherType: '講師類別'
  };

  const cnColumns = allowExportColumns.map(kk => TableItemObject[kk]);
  if (Array.isArray(result?.data) && result?.data.length > 0) {
    const tableData = [];
    result?.data.forEach((item) => {
      const kv = {};
      Object.keys(item).map(vv => {
        if (allowExportColumns.includes(vv)) {
          // 數據字典字段漢化
          if (vv === 'manageCom') {
            kv[TableItemObject[vv]] = orgObj2[item[vv]] || '';
          } else if (vv === 'state') {
            kv[TableItemObject[vv]] = teacherstateObj[item[vv]] || '';
          } else if (vv === 'teacherType') {
            kv[TableItemObject[vv]] = teacherTypeObj[item[vv]] || '';
          } else {
            // 不用漢化直接輸出
            kv[TableItemObject[vv]] = item[vv];
          }
        }
      })
      tableData.push(kv);
    });
    const option = {
      fileName: "講師信息",
      datas: [
        {
          sheetData: tableData,// 數據
          sheetName: 'sheet1',
          sheetFilter: cnColumns,// 表頭
          sheetHeader: cnColumns,// 表頭
        }
      ]
    }
    const toExcel = new ExportJsonExcel(option);
    toExcel.saveExcel();
    setExportExcelLoading(false);
    return true;
  }
  message.error('數據為空!');
  setExportExcelLoading(false);
  return false;
}

utils 中 paramsFilter 方法:過濾無用參數文章來源地址http://www.zghlxwxcb.cn/news/detail-701167.html

// 接口請求參數中 刪除對象中值為空或null或undefined或者為空的所有屬性
export function paramsFilter(requestParams) {
  let newParams = Object.keys(requestParams)
    .filter((key) => requestParams[key] !== null && requestParams[key] !== undefined && requestParams[key] !== '')
    .reduce((acc, key) => ({ ...acc, [key]: requestParams[key] }), {});
  return newParams;
}

到了這里,關于Ant-Design-Pro-V5: ProTable前端導出excel表格。的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • [紹棠] Ant Design Pro of Vue打包有前綴靜態(tài)資源訪問不到

    缺點:需要和部署的路徑保持一致,不是很靈活 1、在環(huán)境變量.env中定義url前綴 2、定義vue路由前綴路徑router/index.js 3、vue配置公共路徑前綴vue.config.js 4、打包部署到nginx或其他中間件,此時要保證前綴和部署的前綴保持一致 nginx 1、使用history模式 2、定義vue路由前綴路徑rout

    2024年02月11日
    瀏覽(30)
  • ant design pro v5 - 03 動態(tài)菜單 動態(tài)路由(配置路由 動態(tài)登錄路由 登錄菜單)

    1 動態(tài)菜單 ? ? ? ? 技術思路:配置路由,用戶登錄后根據用戶信息獲取后臺菜單。 2 動態(tài)路由+動態(tài)菜單 ? ? ? ? 技術思路: 使用umijs的運行時修改路由 patchRoutes({?routes?})??UMIJS 參考文檔?,react umi 沒有守護路由的功能 直接在 app.tsx? 的?layout 下的?childrenRender 添加守護路

    2023年04月09日
    瀏覽(19)
  • ant-design-pro-cli 運行pro create myapp報錯Error [ERR_REQUIRE_ESM]: require() of ES Module是什么原因?

    根據官方文檔全局安裝了npm i @ant-design/pro-cli -g,然后運行pro create myapp,命令行出現(xiàn): 這是什么原因導致的?

    2024年02月12日
    瀏覽(35)
  • 前端實現(xiàn)真實可動態(tài)變化進度條,axios+ Ant Design Vue實現(xiàn).

    前端實現(xiàn)真實可動態(tài)變化進度條,axios+ Ant Design Vue實現(xiàn).

    最近有一個新需求,要求在前端實現(xiàn)真實的進度條展示,我首先想到了 ?Ant Design Vue的upload組件, 在antd官網里upload組件不僅有上傳功能,并且還附帶了 Progress?進度條組件, 還擁有上傳成功和失敗的兩種狀態(tài)的區(qū)分,可以說是十分貼心了,如圖 ?但是很可惜這個組件上傳文件的話,你要

    2024年02月09日
    瀏覽(39)
  • ant design pro集成阿里低代碼引擎lowcode-engine,并實現(xiàn)與數據庫結合實現(xiàn)低代碼模塊的創(chuàng)建、設計、發(fā)布等功能

    阿里低代碼引擎是一款為低代碼平臺開發(fā)者提供的,具備強大定制擴展能力的低代碼設計器研發(fā)框架。 本文主要介紹如何在ant design pro項目中集成阿里低代碼引擎lowcode-engine。 根據官方文檔,已有項目要集成低代碼引擎,至少需要三步,以下我們以ant desigin pro5項目為例,來集

    2024年02月22日
    瀏覽(24)
  • 【ArcGIS Pro二次開發(fā)】(56):界址點導出Excel

    【ArcGIS Pro二次開發(fā)】(56):界址點導出Excel

    界址點成果表是地籍測繪中的一種表格,用于記錄地塊的界址點坐標和相關屬性信息。 這個工具的目的就是為了將地塊要素導出為界址點成果表。 如上圖所示,在【數據處理】組—【Excel相關】面板下,點擊【界址點導出Excel】工具。 在彈出的工具框中,分別輸入參數: 1、

    2024年02月14日
    瀏覽(21)
  • 前端導出word文件的多種方式、前端導出excel文件

    前端導出word文件的多種方式、前端導出excel文件

    先看效果: 這是頁面中的table 這是導出后的效果: 需要的依賴: npm 自行安裝,需要看官網的具體參數自行去github上面找對應的參數 具體代碼:(先看word模板,在看代碼,word中的變量和代碼中 doc.setData() 是一一對應的) 包依賴: 代碼 導出效果: 需要的依賴: node-xlsx 代碼

    2024年03月24日
    瀏覽(39)
  • vue 前端導出Excel表格(基礎版 + 多級標題)純前端導出

    vue 前端導出Excel表格(基礎版 + 多級標題)純前端導出

    先看效果 ? 1、安裝依賴 2、在項目的入口 main.js? 引入 3、直接使用 4、完整代碼直接復制即可 ------------------------------------分割-------------------------------------------- 1、還是npm下載依賴 2、要新建一個文件,Export2Excel.js 文件,我是從某個網址下載的,我給忘了,這里我直接復制過

    2024年02月12日
    瀏覽(25)
  • 前端excel導出圖片

    前端excel導出圖片

    有了上一次的excel導出文字,客戶還是不滿足,又要把所有圖片放到excel里,一目了然。 還好,上一次的插件exceljs支持導出圖片。 1、放在全局 2、獲取圖片資源 這里一定要用同步代碼async await等圖片回來了,我們再去操作導出。 sort就是數組排序,要按后端返回的document_nam

    2024年04月29日
    瀏覽(15)
  • 前端實現(xiàn)導出Excel

    1. 創(chuàng)建excel文件夾 2. Blob.js 文件夾內容 ↓ Export2Excel.js 文件夾內容 ↓

    2024年02月10日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包