@arim-aisdc/public-components 2.3.92 → 2.3.94
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/BaseInfo/BaseInfo.d.ts +1 -1
- package/dist/components/TableMax/components/Export/index copy.d.ts +48 -0
- package/dist/components/TableMax/components/Export/index copy.js +789 -0
- package/dist/components/TableMax/components/Export/index.d.ts +37 -3
- package/dist/components/TableMax/components/Export/index.js +768 -23
- package/dist/components/TableMax/components/Export/useTableExport copy.d.ts +19 -0
- package/dist/components/TableMax/components/Export/useTableExport copy.js +538 -0
- package/dist/components/TableMax/components/Export/useTableExport.d.ts +9 -11
- package/dist/components/TableMax/components/Export/useTableExport.js +438 -127
- package/dist/components/TableMax/type.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,789 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
7
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
9
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
10
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
11
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
12
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
13
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
15
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
16
|
+
// index.tsx
|
|
17
|
+
import { Spin, Tooltip, message } from "antd";
|
|
18
|
+
import React, { useCallback, useState, useRef } from "react";
|
|
19
|
+
import { useTableExport } from "./useTableExport";
|
|
20
|
+
import { debounce } from 'lodash';
|
|
21
|
+
|
|
22
|
+
// 分页请求配置
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
26
|
+
var DEFAULT_PAGE_SIZE = 1000;
|
|
27
|
+
var DEFAULT_MAX_CONCURRENT = 3;
|
|
28
|
+
var DEFAULT_RETRY_COUNT = 2;
|
|
29
|
+
var MAX_PAGE_SIZE_LIMIT = 1000; // 接口单次最大限制
|
|
30
|
+
var DefaultPageParams = {
|
|
31
|
+
skipCount: 0,
|
|
32
|
+
maxResultCount: 1000
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* 带重试功能的请求
|
|
37
|
+
*/
|
|
38
|
+
function fetchWithRetry(_x) {
|
|
39
|
+
return _fetchWithRetry.apply(this, arguments);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 并行获取所有数据(支持已知总条数或自动获取)
|
|
43
|
+
* 注意:此函数会将所有数据加载到内存,仅适用于小数据量(< 10000条)
|
|
44
|
+
*/
|
|
45
|
+
function _fetchWithRetry() {
|
|
46
|
+
_fetchWithRetry = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(fn) {
|
|
47
|
+
var retryCount,
|
|
48
|
+
signal,
|
|
49
|
+
lastError,
|
|
50
|
+
_loop,
|
|
51
|
+
_ret,
|
|
52
|
+
attempt,
|
|
53
|
+
_args9 = arguments;
|
|
54
|
+
return _regeneratorRuntime().wrap(function _callee8$(_context9) {
|
|
55
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
56
|
+
case 0:
|
|
57
|
+
retryCount = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : 2;
|
|
58
|
+
signal = _args9.length > 2 ? _args9[2] : undefined;
|
|
59
|
+
lastError = null;
|
|
60
|
+
_loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
|
|
61
|
+
var delay;
|
|
62
|
+
return _regeneratorRuntime().wrap(function _loop$(_context8) {
|
|
63
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
64
|
+
case 0:
|
|
65
|
+
if (!(signal !== null && signal !== void 0 && signal.aborted)) {
|
|
66
|
+
_context8.next = 2;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
throw new Error('请求已取消');
|
|
70
|
+
case 2:
|
|
71
|
+
_context8.prev = 2;
|
|
72
|
+
_context8.next = 5;
|
|
73
|
+
return fn();
|
|
74
|
+
case 5:
|
|
75
|
+
_context8.t0 = _context8.sent;
|
|
76
|
+
return _context8.abrupt("return", {
|
|
77
|
+
v: _context8.t0
|
|
78
|
+
});
|
|
79
|
+
case 9:
|
|
80
|
+
_context8.prev = 9;
|
|
81
|
+
_context8.t1 = _context8["catch"](2);
|
|
82
|
+
lastError = _context8.t1;
|
|
83
|
+
if (!(attempt < retryCount)) {
|
|
84
|
+
_context8.next = 16;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
delay = Math.pow(2, attempt) * 1000;
|
|
88
|
+
_context8.next = 16;
|
|
89
|
+
return new Promise(function (resolve) {
|
|
90
|
+
return setTimeout(resolve, delay);
|
|
91
|
+
});
|
|
92
|
+
case 16:
|
|
93
|
+
case "end":
|
|
94
|
+
return _context8.stop();
|
|
95
|
+
}
|
|
96
|
+
}, _loop, null, [[2, 9]]);
|
|
97
|
+
});
|
|
98
|
+
attempt = 0;
|
|
99
|
+
case 5:
|
|
100
|
+
if (!(attempt <= retryCount)) {
|
|
101
|
+
_context9.next = 13;
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
return _context9.delegateYield(_loop(), "t0", 7);
|
|
105
|
+
case 7:
|
|
106
|
+
_ret = _context9.t0;
|
|
107
|
+
if (!_ret) {
|
|
108
|
+
_context9.next = 10;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
return _context9.abrupt("return", _ret.v);
|
|
112
|
+
case 10:
|
|
113
|
+
attempt++;
|
|
114
|
+
_context9.next = 5;
|
|
115
|
+
break;
|
|
116
|
+
case 13:
|
|
117
|
+
throw lastError;
|
|
118
|
+
case 14:
|
|
119
|
+
case "end":
|
|
120
|
+
return _context9.stop();
|
|
121
|
+
}
|
|
122
|
+
}, _callee8);
|
|
123
|
+
}));
|
|
124
|
+
return _fetchWithRetry.apply(this, arguments);
|
|
125
|
+
}
|
|
126
|
+
function getAllDataParallel(_x2, _x3, _x4) {
|
|
127
|
+
return _getAllDataParallel.apply(this, arguments);
|
|
128
|
+
}
|
|
129
|
+
function _getAllDataParallel() {
|
|
130
|
+
_getAllDataParallel = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(getDatasFn, pageSize, knownTotalCount) {
|
|
131
|
+
var initialPageSize,
|
|
132
|
+
maxConcurrent,
|
|
133
|
+
onProgress,
|
|
134
|
+
retryCount,
|
|
135
|
+
signal,
|
|
136
|
+
totalCount,
|
|
137
|
+
firstPageItems,
|
|
138
|
+
firstPage,
|
|
139
|
+
safePageSize,
|
|
140
|
+
totalPages,
|
|
141
|
+
tasks,
|
|
142
|
+
page,
|
|
143
|
+
startIndex,
|
|
144
|
+
results,
|
|
145
|
+
errors,
|
|
146
|
+
loadedCount,
|
|
147
|
+
currentIndex,
|
|
148
|
+
activeCount,
|
|
149
|
+
_args11 = arguments;
|
|
150
|
+
return _regeneratorRuntime().wrap(function _callee10$(_context11) {
|
|
151
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
152
|
+
case 0:
|
|
153
|
+
initialPageSize = _args11.length > 3 && _args11[3] !== undefined ? _args11[3] : pageSize;
|
|
154
|
+
maxConcurrent = _args11.length > 4 && _args11[4] !== undefined ? _args11[4] : DEFAULT_MAX_CONCURRENT;
|
|
155
|
+
onProgress = _args11.length > 5 ? _args11[5] : undefined;
|
|
156
|
+
retryCount = _args11.length > 6 && _args11[6] !== undefined ? _args11[6] : DEFAULT_RETRY_COUNT;
|
|
157
|
+
signal = _args11.length > 7 ? _args11[7] : undefined;
|
|
158
|
+
if (!(signal !== null && signal !== void 0 && signal.aborted)) {
|
|
159
|
+
_context11.next = 7;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
throw new Error('请求已取消');
|
|
163
|
+
case 7:
|
|
164
|
+
firstPageItems = []; // 如果已知总条数,直接构建任务
|
|
165
|
+
if (!(knownTotalCount !== undefined && knownTotalCount > 0)) {
|
|
166
|
+
_context11.next = 13;
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
totalCount = knownTotalCount;
|
|
170
|
+
onProgress === null || onProgress === void 0 || onProgress(0, totalCount);
|
|
171
|
+
_context11.next = 21;
|
|
172
|
+
break;
|
|
173
|
+
case 13:
|
|
174
|
+
_context11.next = 15;
|
|
175
|
+
return fetchWithRetry(function () {
|
|
176
|
+
return getDatasFn({
|
|
177
|
+
maxResultCount: Math.min(initialPageSize, MAX_PAGE_SIZE_LIMIT),
|
|
178
|
+
skipCount: 0
|
|
179
|
+
});
|
|
180
|
+
}, retryCount, signal);
|
|
181
|
+
case 15:
|
|
182
|
+
firstPage = _context11.sent;
|
|
183
|
+
totalCount = firstPage.totalCount;
|
|
184
|
+
firstPageItems = firstPage.items;
|
|
185
|
+
onProgress === null || onProgress === void 0 || onProgress(firstPageItems.length, totalCount);
|
|
186
|
+
|
|
187
|
+
// 如果总条数小于等于 initialPageSize,直接返回
|
|
188
|
+
if (!(totalCount <= initialPageSize)) {
|
|
189
|
+
_context11.next = 21;
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
return _context11.abrupt("return", firstPageItems);
|
|
193
|
+
case 21:
|
|
194
|
+
if (!(totalCount === 0)) {
|
|
195
|
+
_context11.next = 23;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
return _context11.abrupt("return", []);
|
|
199
|
+
case 23:
|
|
200
|
+
// 限制 pageSize 不超过最大限制
|
|
201
|
+
safePageSize = Math.min(pageSize, MAX_PAGE_SIZE_LIMIT); // 计算总页数
|
|
202
|
+
totalPages = Math.ceil(totalCount / safePageSize); // 构建任务列表
|
|
203
|
+
tasks = [];
|
|
204
|
+
for (page = 0; page < totalPages; page++) {
|
|
205
|
+
tasks.push({
|
|
206
|
+
pageIndex: page,
|
|
207
|
+
skipCount: page * safePageSize,
|
|
208
|
+
maxResultCount: Math.min(safePageSize, totalCount - page * safePageSize)
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// 如果已知总条数,需要并发获取所有页
|
|
213
|
+
// 如果不知道总条数,第一页已经获取了,只需要获取剩余页
|
|
214
|
+
startIndex = knownTotalCount !== undefined ? 0 : 1;
|
|
215
|
+
results = knownTotalCount !== undefined ? [] : [firstPageItems];
|
|
216
|
+
errors = [];
|
|
217
|
+
loadedCount = knownTotalCount !== undefined ? 0 : firstPageItems.length;
|
|
218
|
+
currentIndex = startIndex;
|
|
219
|
+
activeCount = 0;
|
|
220
|
+
return _context11.abrupt("return", new Promise(function (resolve, reject) {
|
|
221
|
+
var executeNext = /*#__PURE__*/function () {
|
|
222
|
+
var _ref14 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
|
|
223
|
+
var task, taskIndex, _response;
|
|
224
|
+
return _regeneratorRuntime().wrap(function _callee9$(_context10) {
|
|
225
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
226
|
+
case 0:
|
|
227
|
+
if (!(signal !== null && signal !== void 0 && signal.aborted)) {
|
|
228
|
+
_context10.next = 3;
|
|
229
|
+
break;
|
|
230
|
+
}
|
|
231
|
+
reject(new Error('请求已取消'));
|
|
232
|
+
return _context10.abrupt("return");
|
|
233
|
+
case 3:
|
|
234
|
+
if (!(currentIndex >= tasks.length && activeCount === 0)) {
|
|
235
|
+
_context10.next = 9;
|
|
236
|
+
break;
|
|
237
|
+
}
|
|
238
|
+
if (!(errors.length > 0)) {
|
|
239
|
+
_context10.next = 7;
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
reject(new Error("\u90E8\u5206\u8BF7\u6C42\u5931\u8D25: ".concat(errors[0].error.message)));
|
|
243
|
+
return _context10.abrupt("return");
|
|
244
|
+
case 7:
|
|
245
|
+
resolve(results.flat());
|
|
246
|
+
return _context10.abrupt("return");
|
|
247
|
+
case 9:
|
|
248
|
+
if (!(currentIndex < tasks.length && activeCount < maxConcurrent)) {
|
|
249
|
+
_context10.next = 31;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
task = tasks[currentIndex];
|
|
253
|
+
taskIndex = currentIndex;
|
|
254
|
+
currentIndex++;
|
|
255
|
+
activeCount++;
|
|
256
|
+
_context10.prev = 14;
|
|
257
|
+
_context10.next = 17;
|
|
258
|
+
return fetchWithRetry(function () {
|
|
259
|
+
return getDatasFn({
|
|
260
|
+
maxResultCount: task.maxResultCount,
|
|
261
|
+
skipCount: task.skipCount
|
|
262
|
+
});
|
|
263
|
+
}, retryCount, signal);
|
|
264
|
+
case 17:
|
|
265
|
+
_response = _context10.sent;
|
|
266
|
+
results[taskIndex] = _response.items;
|
|
267
|
+
loadedCount += _response.items.length;
|
|
268
|
+
onProgress === null || onProgress === void 0 || onProgress(loadedCount, totalCount);
|
|
269
|
+
_context10.next = 26;
|
|
270
|
+
break;
|
|
271
|
+
case 23:
|
|
272
|
+
_context10.prev = 23;
|
|
273
|
+
_context10.t0 = _context10["catch"](14);
|
|
274
|
+
errors.push({
|
|
275
|
+
pageIndex: task.pageIndex,
|
|
276
|
+
error: _context10.t0
|
|
277
|
+
});
|
|
278
|
+
case 26:
|
|
279
|
+
_context10.prev = 26;
|
|
280
|
+
activeCount--;
|
|
281
|
+
executeNext();
|
|
282
|
+
return _context10.finish(26);
|
|
283
|
+
case 30:
|
|
284
|
+
if (currentIndex < tasks.length) {
|
|
285
|
+
executeNext();
|
|
286
|
+
}
|
|
287
|
+
case 31:
|
|
288
|
+
case "end":
|
|
289
|
+
return _context10.stop();
|
|
290
|
+
}
|
|
291
|
+
}, _callee9, null, [[14, 23, 26, 30]]);
|
|
292
|
+
}));
|
|
293
|
+
return function executeNext() {
|
|
294
|
+
return _ref14.apply(this, arguments);
|
|
295
|
+
};
|
|
296
|
+
}();
|
|
297
|
+
|
|
298
|
+
// 启动并发执行器
|
|
299
|
+
for (var i = 0; i < Math.min(maxConcurrent, tasks.length - startIndex); i++) {
|
|
300
|
+
executeNext();
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
// 如果没有任务需要执行,直接返回结果
|
|
304
|
+
if (tasks.length === startIndex) {
|
|
305
|
+
resolve(results.flat());
|
|
306
|
+
}
|
|
307
|
+
}));
|
|
308
|
+
case 34:
|
|
309
|
+
case "end":
|
|
310
|
+
return _context11.stop();
|
|
311
|
+
}
|
|
312
|
+
}, _callee10);
|
|
313
|
+
}));
|
|
314
|
+
return _getAllDataParallel.apply(this, arguments);
|
|
315
|
+
}
|
|
316
|
+
var ExportComp = function ExportComp(_ref) {
|
|
317
|
+
var _pageFetcher$maxConcu, _pageFetcher$pageSize, _pageFetcher$retryCou, _pageFetcher$initialP;
|
|
318
|
+
var tableTitle = _ref.tableTitle,
|
|
319
|
+
canExport = _ref.canExport,
|
|
320
|
+
columns = _ref.columns,
|
|
321
|
+
datas = _ref.datas,
|
|
322
|
+
exportConfig = _ref.exportConfig,
|
|
323
|
+
hasTotalRow = _ref.hasTotalRow,
|
|
324
|
+
totalDatas = _ref.totalDatas;
|
|
325
|
+
var _ref2 = exportConfig || {},
|
|
326
|
+
pageFetcher = _ref2.pageFetcher,
|
|
327
|
+
getExportDataList = _ref2.getExportDataList;
|
|
328
|
+
|
|
329
|
+
// 从 pageFetcher 中获取配置,使用默认值,并限制 pageSize 最大为 1000
|
|
330
|
+
var maxConcurrent = (_pageFetcher$maxConcu = pageFetcher === null || pageFetcher === void 0 ? void 0 : pageFetcher.maxConcurrent) !== null && _pageFetcher$maxConcu !== void 0 ? _pageFetcher$maxConcu : DEFAULT_MAX_CONCURRENT;
|
|
331
|
+
var rawPageSize = (_pageFetcher$pageSize = pageFetcher === null || pageFetcher === void 0 ? void 0 : pageFetcher.pageSize) !== null && _pageFetcher$pageSize !== void 0 ? _pageFetcher$pageSize : DEFAULT_PAGE_SIZE;
|
|
332
|
+
var pageSize = Math.min(rawPageSize, MAX_PAGE_SIZE_LIMIT);
|
|
333
|
+
var retryCount = (_pageFetcher$retryCou = pageFetcher === null || pageFetcher === void 0 ? void 0 : pageFetcher.retryCount) !== null && _pageFetcher$retryCou !== void 0 ? _pageFetcher$retryCou : DEFAULT_RETRY_COUNT;
|
|
334
|
+
var initialPageSize = Math.min((_pageFetcher$initialP = pageFetcher === null || pageFetcher === void 0 ? void 0 : pageFetcher.initialPageSize) !== null && _pageFetcher$initialP !== void 0 ? _pageFetcher$initialP : pageSize, MAX_PAGE_SIZE_LIMIT);
|
|
335
|
+
var knownTotalCount = pageFetcher === null || pageFetcher === void 0 ? void 0 : pageFetcher.totalCount;
|
|
336
|
+
var _useTableExport = useTableExport(),
|
|
337
|
+
exporting = _useTableExport.exporting,
|
|
338
|
+
exportTableData = _useTableExport.exportTableData,
|
|
339
|
+
streamExport = _useTableExport.streamExport;
|
|
340
|
+
var _useState = useState(0),
|
|
341
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
342
|
+
progress = _useState2[0],
|
|
343
|
+
setProgress = _useState2[1];
|
|
344
|
+
var _useState3 = useState(false),
|
|
345
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
346
|
+
showProgress = _useState4[0],
|
|
347
|
+
setShowProgress = _useState4[1];
|
|
348
|
+
var abortControllerRef = useRef(null);
|
|
349
|
+
var progressMessageRef = useRef(null);
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* 将 pageFetcher 配置转换为标准的 getDatas 函数
|
|
353
|
+
*/
|
|
354
|
+
var createGetDatasFromPageFetcher = useCallback(function () {
|
|
355
|
+
if (!pageFetcher) return null;
|
|
356
|
+
var apiFn = pageFetcher.apiFn,
|
|
357
|
+
extractItems = pageFetcher.extractItems,
|
|
358
|
+
extractTotalCount = pageFetcher.extractTotalCount,
|
|
359
|
+
extraParams = pageFetcher.extraParams;
|
|
360
|
+
return /*#__PURE__*/function () {
|
|
361
|
+
var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(params) {
|
|
362
|
+
var _ref4, _ref5;
|
|
363
|
+
var safeMaxResultCount, requestParams, response;
|
|
364
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
365
|
+
while (1) switch (_context.prev = _context.next) {
|
|
366
|
+
case 0:
|
|
367
|
+
// 确保单次请求不超过最大限制
|
|
368
|
+
safeMaxResultCount = Math.min(params.maxResultCount, MAX_PAGE_SIZE_LIMIT); // 合并参数:额外参数 + 分页参数
|
|
369
|
+
requestParams = _objectSpread(_objectSpread(_objectSpread({}, extraParams), params), {}, {
|
|
370
|
+
maxResultCount: safeMaxResultCount
|
|
371
|
+
});
|
|
372
|
+
_context.next = 4;
|
|
373
|
+
return apiFn(requestParams);
|
|
374
|
+
case 4:
|
|
375
|
+
response = _context.sent;
|
|
376
|
+
return _context.abrupt("return", {
|
|
377
|
+
items: extractItems ? extractItems(response) : (response === null || response === void 0 ? void 0 : response.items) || [],
|
|
378
|
+
totalCount: (_ref4 = (_ref5 = knownTotalCount !== null && knownTotalCount !== void 0 ? knownTotalCount : extractTotalCount === null || extractTotalCount === void 0 ? void 0 : extractTotalCount(response)) !== null && _ref5 !== void 0 ? _ref5 : response === null || response === void 0 ? void 0 : response.totalCount) !== null && _ref4 !== void 0 ? _ref4 : 0
|
|
379
|
+
});
|
|
380
|
+
case 6:
|
|
381
|
+
case "end":
|
|
382
|
+
return _context.stop();
|
|
383
|
+
}
|
|
384
|
+
}, _callee);
|
|
385
|
+
}));
|
|
386
|
+
return function (_x5) {
|
|
387
|
+
return _ref3.apply(this, arguments);
|
|
388
|
+
};
|
|
389
|
+
}();
|
|
390
|
+
}, [pageFetcher, knownTotalCount]);
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* 数据源1: 通过 pageFetcher 并行获取(仅用于小数据量)
|
|
394
|
+
*/
|
|
395
|
+
var fetchDataByPageFetcher = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
|
|
396
|
+
var getDatasFn, allData;
|
|
397
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
398
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
399
|
+
case 0:
|
|
400
|
+
if (pageFetcher) {
|
|
401
|
+
_context2.next = 2;
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
404
|
+
return _context2.abrupt("return", null);
|
|
405
|
+
case 2:
|
|
406
|
+
getDatasFn = createGetDatasFromPageFetcher();
|
|
407
|
+
if (getDatasFn) {
|
|
408
|
+
_context2.next = 5;
|
|
409
|
+
break;
|
|
410
|
+
}
|
|
411
|
+
return _context2.abrupt("return", null);
|
|
412
|
+
case 5:
|
|
413
|
+
// 取消之前的请求
|
|
414
|
+
if (abortControllerRef.current) {
|
|
415
|
+
abortControllerRef.current.abort();
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// 创建新的 AbortController
|
|
419
|
+
abortControllerRef.current = new AbortController();
|
|
420
|
+
setShowProgress(true);
|
|
421
|
+
setProgress(0);
|
|
422
|
+
_context2.prev = 9;
|
|
423
|
+
_context2.next = 12;
|
|
424
|
+
return getAllDataParallel(getDatasFn, pageSize, knownTotalCount, initialPageSize, maxConcurrent, function (current, total) {
|
|
425
|
+
var percent = Math.floor(current / total * 100);
|
|
426
|
+
setProgress(percent);
|
|
427
|
+
}, retryCount, abortControllerRef.current.signal);
|
|
428
|
+
case 12:
|
|
429
|
+
allData = _context2.sent;
|
|
430
|
+
if (!(allData.length === 0)) {
|
|
431
|
+
_context2.next = 16;
|
|
432
|
+
break;
|
|
433
|
+
}
|
|
434
|
+
message.warning('未获取到数据');
|
|
435
|
+
return _context2.abrupt("return", null);
|
|
436
|
+
case 16:
|
|
437
|
+
return _context2.abrupt("return", allData);
|
|
438
|
+
case 19:
|
|
439
|
+
_context2.prev = 19;
|
|
440
|
+
_context2.t0 = _context2["catch"](9);
|
|
441
|
+
if (!((_context2.t0 === null || _context2.t0 === void 0 ? void 0 : _context2.t0.message) === '请求已取消')) {
|
|
442
|
+
_context2.next = 24;
|
|
443
|
+
break;
|
|
444
|
+
}
|
|
445
|
+
console.log('请求已取消');
|
|
446
|
+
return _context2.abrupt("return", null);
|
|
447
|
+
case 24:
|
|
448
|
+
console.error('获取数据失败:', _context2.t0);
|
|
449
|
+
message.error("\u83B7\u53D6\u6570\u636E\u5931\u8D25\uFF1A".concat((_context2.t0 === null || _context2.t0 === void 0 ? void 0 : _context2.t0.message) || '未知错误'));
|
|
450
|
+
return _context2.abrupt("return", null);
|
|
451
|
+
case 27:
|
|
452
|
+
_context2.prev = 27;
|
|
453
|
+
setShowProgress(false);
|
|
454
|
+
setProgress(0);
|
|
455
|
+
abortControllerRef.current = null;
|
|
456
|
+
return _context2.finish(27);
|
|
457
|
+
case 32:
|
|
458
|
+
case "end":
|
|
459
|
+
return _context2.stop();
|
|
460
|
+
}
|
|
461
|
+
}, _callee2, null, [[9, 19, 27, 32]]);
|
|
462
|
+
})), [pageFetcher, createGetDatasFromPageFetcher, pageSize, knownTotalCount, initialPageSize, maxConcurrent, retryCount]);
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* 数据源2: 通过 getExportDataList 获取
|
|
466
|
+
*/
|
|
467
|
+
var fetchDataByGetExportDataList = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
|
|
468
|
+
var exportData;
|
|
469
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
470
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
471
|
+
case 0:
|
|
472
|
+
if (getExportDataList) {
|
|
473
|
+
_context3.next = 2;
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
return _context3.abrupt("return", null);
|
|
477
|
+
case 2:
|
|
478
|
+
_context3.prev = 2;
|
|
479
|
+
_context3.next = 5;
|
|
480
|
+
return getExportDataList(DefaultPageParams);
|
|
481
|
+
case 5:
|
|
482
|
+
exportData = _context3.sent;
|
|
483
|
+
if (Array.isArray(exportData) && exportData.length > 0) {
|
|
484
|
+
_context3.next = 9;
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
message.warning('通过 getExportDataList 未获取到数据');
|
|
488
|
+
return _context3.abrupt("return", null);
|
|
489
|
+
case 9:
|
|
490
|
+
return _context3.abrupt("return", exportData);
|
|
491
|
+
case 12:
|
|
492
|
+
_context3.prev = 12;
|
|
493
|
+
_context3.t0 = _context3["catch"](2);
|
|
494
|
+
console.error('getExportDataList 获取数据失败:', _context3.t0);
|
|
495
|
+
message.error("\u901A\u8FC7 getExportDataList \u83B7\u53D6\u6570\u636E\u5931\u8D25\uFF1A".concat((_context3.t0 === null || _context3.t0 === void 0 ? void 0 : _context3.t0.message) || '未知错误'));
|
|
496
|
+
return _context3.abrupt("return", null);
|
|
497
|
+
case 17:
|
|
498
|
+
case "end":
|
|
499
|
+
return _context3.stop();
|
|
500
|
+
}
|
|
501
|
+
}, _callee3, null, [[2, 12]]);
|
|
502
|
+
})), [getExportDataList]);
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* 数据源3: 直接使用 datas
|
|
506
|
+
*/
|
|
507
|
+
var getDataFromDatas = useCallback(function () {
|
|
508
|
+
if (datas && Array.isArray(datas) && datas.length > 0) {
|
|
509
|
+
return datas;
|
|
510
|
+
}
|
|
511
|
+
return null;
|
|
512
|
+
}, [datas]);
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* 获取导出数据的核心函数(仅用于小数据量)
|
|
516
|
+
*/
|
|
517
|
+
var getExportData = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
|
|
518
|
+
var dataFromPageFetcher, dataFromGetExportDataList, dataFromDatas;
|
|
519
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
520
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
521
|
+
case 0:
|
|
522
|
+
_context4.next = 2;
|
|
523
|
+
return fetchDataByPageFetcher();
|
|
524
|
+
case 2:
|
|
525
|
+
dataFromPageFetcher = _context4.sent;
|
|
526
|
+
if (!dataFromPageFetcher) {
|
|
527
|
+
_context4.next = 5;
|
|
528
|
+
break;
|
|
529
|
+
}
|
|
530
|
+
return _context4.abrupt("return", dataFromPageFetcher);
|
|
531
|
+
case 5:
|
|
532
|
+
_context4.next = 7;
|
|
533
|
+
return fetchDataByGetExportDataList();
|
|
534
|
+
case 7:
|
|
535
|
+
dataFromGetExportDataList = _context4.sent;
|
|
536
|
+
if (!dataFromGetExportDataList) {
|
|
537
|
+
_context4.next = 10;
|
|
538
|
+
break;
|
|
539
|
+
}
|
|
540
|
+
return _context4.abrupt("return", dataFromGetExportDataList);
|
|
541
|
+
case 10:
|
|
542
|
+
// 优先级3: 使用 datas
|
|
543
|
+
dataFromDatas = getDataFromDatas();
|
|
544
|
+
if (!dataFromDatas) {
|
|
545
|
+
_context4.next = 13;
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
return _context4.abrupt("return", dataFromDatas);
|
|
549
|
+
case 13:
|
|
550
|
+
message.warning('未配置数据源或无数据可导出');
|
|
551
|
+
return _context4.abrupt("return", []);
|
|
552
|
+
case 15:
|
|
553
|
+
case "end":
|
|
554
|
+
return _context4.stop();
|
|
555
|
+
}
|
|
556
|
+
}, _callee4);
|
|
557
|
+
})), [fetchDataByPageFetcher, fetchDataByGetExportDataList, getDataFromDatas]);
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* 流式导出 - 适用于大数据量(> 10000条)
|
|
561
|
+
*/
|
|
562
|
+
// index.tsx 中修改 handleStreamExport
|
|
563
|
+
var handleStreamExport = useCallback( /*#__PURE__*/function () {
|
|
564
|
+
var _ref9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(totalCount) {
|
|
565
|
+
var _ref11, _exportConfig$fileNam, _exportConfig$sheetNa;
|
|
566
|
+
var getBatchData, lastPercent;
|
|
567
|
+
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
568
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
569
|
+
case 0:
|
|
570
|
+
getBatchData = /*#__PURE__*/function () {
|
|
571
|
+
var _ref10 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(skipCount, batchSize) {
|
|
572
|
+
var getDatasFn, response;
|
|
573
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
574
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
575
|
+
case 0:
|
|
576
|
+
getDatasFn = createGetDatasFromPageFetcher();
|
|
577
|
+
if (getDatasFn) {
|
|
578
|
+
_context5.next = 3;
|
|
579
|
+
break;
|
|
580
|
+
}
|
|
581
|
+
return _context5.abrupt("return", []);
|
|
582
|
+
case 3:
|
|
583
|
+
_context5.next = 5;
|
|
584
|
+
return getDatasFn({
|
|
585
|
+
maxResultCount: Math.min(batchSize, MAX_PAGE_SIZE_LIMIT),
|
|
586
|
+
skipCount: skipCount
|
|
587
|
+
});
|
|
588
|
+
case 5:
|
|
589
|
+
response = _context5.sent;
|
|
590
|
+
return _context5.abrupt("return", response.items || []);
|
|
591
|
+
case 7:
|
|
592
|
+
case "end":
|
|
593
|
+
return _context5.stop();
|
|
594
|
+
}
|
|
595
|
+
}, _callee5);
|
|
596
|
+
}));
|
|
597
|
+
return function getBatchData(_x7, _x8) {
|
|
598
|
+
return _ref10.apply(this, arguments);
|
|
599
|
+
};
|
|
600
|
+
}();
|
|
601
|
+
lastPercent = 0;
|
|
602
|
+
_context6.next = 4;
|
|
603
|
+
return streamExport(getBatchData, totalCount, columns, {
|
|
604
|
+
fileName: (_ref11 = (_exportConfig$fileNam = exportConfig === null || exportConfig === void 0 ? void 0 : exportConfig.fileName) !== null && _exportConfig$fileNam !== void 0 ? _exportConfig$fileNam : tableTitle) !== null && _ref11 !== void 0 ? _ref11 : '数据导出',
|
|
605
|
+
sheetName: (_exportConfig$sheetNa = exportConfig === null || exportConfig === void 0 ? void 0 : exportConfig.sheetName) !== null && _exportConfig$sheetNa !== void 0 ? _exportConfig$sheetNa : 'Sheet1',
|
|
606
|
+
maxConcurrent: maxConcurrent,
|
|
607
|
+
// 使用配置的并发数,默认3
|
|
608
|
+
onProgress: function onProgress(current, total, percent) {
|
|
609
|
+
// 每5%更新一次进度,避免频繁刷新
|
|
610
|
+
if (percent - lastPercent >= 5 || percent === 100) {
|
|
611
|
+
lastPercent = percent;
|
|
612
|
+
if (progressMessageRef.current) {
|
|
613
|
+
progressMessageRef.current();
|
|
614
|
+
}
|
|
615
|
+
progressMessageRef.current = message.loading("\u6B63\u5728\u5BFC\u51FA\u6570\u636E... ".concat(percent, "% (").concat(current, "/").concat(total, ")"), 0);
|
|
616
|
+
}
|
|
617
|
+
setProgress(percent);
|
|
618
|
+
},
|
|
619
|
+
onBatchComplete: function onBatchComplete(batchIndex, totalBatches) {
|
|
620
|
+
console.log("\u5DF2\u5B8C\u6210 ".concat(batchIndex, "/").concat(totalBatches, " \u6279\u6570\u636E\u5BFC\u51FA"));
|
|
621
|
+
}
|
|
622
|
+
}, hasTotalRow, totalDatas, retryCount);
|
|
623
|
+
case 4:
|
|
624
|
+
if (progressMessageRef.current) {
|
|
625
|
+
progressMessageRef.current();
|
|
626
|
+
progressMessageRef.current = null;
|
|
627
|
+
}
|
|
628
|
+
case 5:
|
|
629
|
+
case "end":
|
|
630
|
+
return _context6.stop();
|
|
631
|
+
}
|
|
632
|
+
}, _callee6);
|
|
633
|
+
}));
|
|
634
|
+
return function (_x6) {
|
|
635
|
+
return _ref9.apply(this, arguments);
|
|
636
|
+
};
|
|
637
|
+
}(), [createGetDatasFromPageFetcher, streamExport, columns, exportConfig, tableTitle, hasTotalRow, totalDatas, maxConcurrent, retryCount]);
|
|
638
|
+
/**
|
|
639
|
+
* 主导出函数 - 自动选择小数据量或流式导出
|
|
640
|
+
*/
|
|
641
|
+
var handleExport = useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
|
|
642
|
+
var hideLoading, _ref13, _exportConfig$fileNam2, totalCount, getDatasFn, firstPage, USE_STREAM_THRESHOLD, exportData;
|
|
643
|
+
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
644
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
645
|
+
case 0:
|
|
646
|
+
hideLoading = null;
|
|
647
|
+
_context7.prev = 1;
|
|
648
|
+
hideLoading = message.loading('正在准备导出数据...', 0);
|
|
649
|
+
|
|
650
|
+
// 获取总条数
|
|
651
|
+
totalCount = knownTotalCount; // 如果不知道总条数且配置了 pageFetcher,先获取总条数
|
|
652
|
+
if (!(totalCount === undefined && pageFetcher)) {
|
|
653
|
+
_context7.next = 11;
|
|
654
|
+
break;
|
|
655
|
+
}
|
|
656
|
+
getDatasFn = createGetDatasFromPageFetcher();
|
|
657
|
+
if (!getDatasFn) {
|
|
658
|
+
_context7.next = 11;
|
|
659
|
+
break;
|
|
660
|
+
}
|
|
661
|
+
_context7.next = 9;
|
|
662
|
+
return getDatasFn({
|
|
663
|
+
maxResultCount: Math.min(initialPageSize, MAX_PAGE_SIZE_LIMIT),
|
|
664
|
+
skipCount: 0
|
|
665
|
+
});
|
|
666
|
+
case 9:
|
|
667
|
+
firstPage = _context7.sent;
|
|
668
|
+
totalCount = firstPage.totalCount;
|
|
669
|
+
case 11:
|
|
670
|
+
// 判断是否使用流式导出(数据量超过10000条)
|
|
671
|
+
USE_STREAM_THRESHOLD = 5000;
|
|
672
|
+
if (!(totalCount && totalCount > USE_STREAM_THRESHOLD && pageFetcher)) {
|
|
673
|
+
_context7.next = 21;
|
|
674
|
+
break;
|
|
675
|
+
}
|
|
676
|
+
// 使用流式导出
|
|
677
|
+
if (hideLoading) {
|
|
678
|
+
hideLoading();
|
|
679
|
+
hideLoading = null;
|
|
680
|
+
}
|
|
681
|
+
setShowProgress(true);
|
|
682
|
+
setProgress(0);
|
|
683
|
+
_context7.next = 18;
|
|
684
|
+
return handleStreamExport(totalCount);
|
|
685
|
+
case 18:
|
|
686
|
+
setShowProgress(false);
|
|
687
|
+
setProgress(0);
|
|
688
|
+
return _context7.abrupt("return");
|
|
689
|
+
case 21:
|
|
690
|
+
_context7.next = 23;
|
|
691
|
+
return getExportData();
|
|
692
|
+
case 23:
|
|
693
|
+
exportData = _context7.sent;
|
|
694
|
+
if (hideLoading) {
|
|
695
|
+
hideLoading();
|
|
696
|
+
hideLoading = null;
|
|
697
|
+
}
|
|
698
|
+
if (!(!exportData || exportData.length === 0)) {
|
|
699
|
+
_context7.next = 28;
|
|
700
|
+
break;
|
|
701
|
+
}
|
|
702
|
+
message.warning('没有数据可导出');
|
|
703
|
+
return _context7.abrupt("return");
|
|
704
|
+
case 28:
|
|
705
|
+
_context7.next = 30;
|
|
706
|
+
return exportTableData(exportData, columns, hasTotalRow, totalDatas, _objectSpread(_objectSpread({}, exportConfig), {}, {
|
|
707
|
+
fileName: (_ref13 = (_exportConfig$fileNam2 = exportConfig === null || exportConfig === void 0 ? void 0 : exportConfig.fileName) !== null && _exportConfig$fileNam2 !== void 0 ? _exportConfig$fileNam2 : tableTitle) !== null && _ref13 !== void 0 ? _ref13 : '数据导出'
|
|
708
|
+
}));
|
|
709
|
+
case 30:
|
|
710
|
+
_context7.next = 38;
|
|
711
|
+
break;
|
|
712
|
+
case 32:
|
|
713
|
+
_context7.prev = 32;
|
|
714
|
+
_context7.t0 = _context7["catch"](1);
|
|
715
|
+
if (hideLoading) {
|
|
716
|
+
hideLoading();
|
|
717
|
+
}
|
|
718
|
+
if (progressMessageRef.current) {
|
|
719
|
+
progressMessageRef.current();
|
|
720
|
+
progressMessageRef.current = null;
|
|
721
|
+
}
|
|
722
|
+
console.error('导出失败:', _context7.t0);
|
|
723
|
+
message.error("\u5BFC\u51FA\u5931\u8D25\uFF1A".concat((_context7.t0 === null || _context7.t0 === void 0 ? void 0 : _context7.t0.message) || '未知错误'));
|
|
724
|
+
case 38:
|
|
725
|
+
_context7.prev = 38;
|
|
726
|
+
setShowProgress(false);
|
|
727
|
+
setProgress(0);
|
|
728
|
+
return _context7.finish(38);
|
|
729
|
+
case 42:
|
|
730
|
+
case "end":
|
|
731
|
+
return _context7.stop();
|
|
732
|
+
}
|
|
733
|
+
}, _callee7, null, [[1, 32, 38, 42]]);
|
|
734
|
+
})), [getExportData, columns, hasTotalRow, totalDatas, exportConfig, tableTitle, exportTableData, pageFetcher, knownTotalCount, initialPageSize, createGetDatasFromPageFetcher, handleStreamExport]);
|
|
735
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
736
|
+
children: [canExport && /*#__PURE__*/_jsx(Tooltip, {
|
|
737
|
+
placement: "top",
|
|
738
|
+
title: '导出',
|
|
739
|
+
children: /*#__PURE__*/_jsx("span", {
|
|
740
|
+
style: {
|
|
741
|
+
position: 'relative',
|
|
742
|
+
display: 'inline-block'
|
|
743
|
+
},
|
|
744
|
+
children: exporting ? /*#__PURE__*/_jsx(Spin, {}) : /*#__PURE__*/_jsx("i", {
|
|
745
|
+
className: "iconfont-table icon-table-download handleRightItem",
|
|
746
|
+
style: {
|
|
747
|
+
fontSize: '16px',
|
|
748
|
+
marginRight: 0,
|
|
749
|
+
cursor: 'pointer'
|
|
750
|
+
},
|
|
751
|
+
onClick: debounce(handleExport, 500)
|
|
752
|
+
})
|
|
753
|
+
})
|
|
754
|
+
}), showProgress && /*#__PURE__*/_jsxs("div", {
|
|
755
|
+
style: {
|
|
756
|
+
position: 'fixed',
|
|
757
|
+
top: 60,
|
|
758
|
+
right: 20,
|
|
759
|
+
zIndex: 1000,
|
|
760
|
+
background: '#fff',
|
|
761
|
+
padding: '8px 16px',
|
|
762
|
+
borderRadius: 4,
|
|
763
|
+
boxShadow: '0 2px 8px rgba(0,0,0,0.15)',
|
|
764
|
+
fontSize: 12,
|
|
765
|
+
minWidth: 150
|
|
766
|
+
},
|
|
767
|
+
children: [/*#__PURE__*/_jsxs("div", {
|
|
768
|
+
children: ["\u6B63\u5728", progress > 0 ? '导出' : '获取', "\u6570\u636E..."]
|
|
769
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
770
|
+
style: {
|
|
771
|
+
marginTop: 4,
|
|
772
|
+
display: 'flex',
|
|
773
|
+
alignItems: 'center',
|
|
774
|
+
gap: 8
|
|
775
|
+
},
|
|
776
|
+
children: [/*#__PURE__*/_jsx("progress", {
|
|
777
|
+
value: progress,
|
|
778
|
+
max: 100,
|
|
779
|
+
style: {
|
|
780
|
+
flex: 1
|
|
781
|
+
}
|
|
782
|
+
}), /*#__PURE__*/_jsxs("span", {
|
|
783
|
+
children: [progress, "%"]
|
|
784
|
+
})]
|
|
785
|
+
})]
|
|
786
|
+
})]
|
|
787
|
+
});
|
|
788
|
+
};
|
|
789
|
+
export var ExportTableData = /*#__PURE__*/React.memo(ExportComp);
|