import React from 'react'; import { buildExportUrl, DEFAULT_EXPORT_TEMPLATE_API, resolveExportAction, resolveExportError, resolveFileName, type ExportTemplateApi, type ExportTemplateOption } from './exportAction'; /** * 列表页统一导出按钮。 * *

导出格式由运维在「导出模板」里配,页面这边只提供 gridKey 和当前筛选条件。 * 一个页面配了几份模板(各客户各一份),这里就出下拉让人挑。

* *

没有模板时走 `legacy`——即页面原来那个硬编码的导出接口。 * 老导出接口保留并存,模板配好之前现场照常能导;模板接口挂了也走这条路。 * 三种形态(老接口 / 单模板 / 多模板)长得一样,只有多模板时右边多一个下拉箭头, * 所以运维配不配模板,操作员那边看到的都是同一个按钮。

* * @author nokecy */ export interface ExportButtonProps { /** * 发请求的函数,约定与 umi 的 `request` 一致:`request(url, { method, params, responseType, getResponse, skipErrorHandler })`, * 传 `getResponse: true` 时返回 `{ data, headers }`。宿主在这里带上自己的鉴权、网关前缀与错误处理。 */ request: (url: string, options?: Record) => Promise; /** 导出模板服务的接口地址,默认 MES 后端的 `/api/mes/export-template/{options,render}` */ templateApi?: ExportTemplateApi; /** 页面标识,取自 `getGridKey(...)`,与导出模板上配的「适用页面」对应 */ gridKey: string; /** 列表当前的 Gridify 筛选串,原样透传给后端 */ filter?: string; /** 没有可用模板时导什么:页面原有导出接口的地址,以及响应头没给文件名时的兜底名 */ legacy?: { url: string; fileName: string; }; /** 按钮文字,默认「导出」 */ children?: React.ReactNode; } declare const ExportButton: React.FC; export default ExportButton; export { buildExportUrl, DEFAULT_EXPORT_TEMPLATE_API, resolveExportAction, resolveExportError, resolveFileName }; export type { ExportTemplateApi, ExportTemplateOption };