qt-public-ui
Version:
新设计规范下业务组件库
213 lines (212 loc) • 10.2 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getSuccessTips = exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _reactRouterDom = require("react-router-dom");
var _antd = require("antd");
var _ = require("..");
var _fileSaver = require("file-saver");
var _exportContext = _interopRequireDefault(require("../UmProvider/exportContext"));
var _globalContext = _interopRequireDefault(require("../UmProvider/globalContext"));
var _utils = require("../utils");
require("./style");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
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; }
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) { (0, _defineProperty2["default"])(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; }
var mergeProps = function mergeProps(props, globalProps) {
return _objectSpread(_objectSpread({}, globalProps), props);
};
var resolveBlobError = function resolveBlobError(blob) {
return new Promise(function (resolve) {
var reader = new FileReader();
reader.onload = function (event) {
try {
resolve(JSON.parse(event.target.result));
} catch (e) {
resolve({});
}
};
reader.readAsText(blob);
});
};
var clickInFrame = function clickInFrame() {
window.top.postMessage({
_type: 'frame:export'
}, '*');
};
var getSuccessTips = exports.getSuccessTips = function getSuccessTips() {
var i18n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _utils.i18n;
return function (url, inFrame, existed) {
if (!url) return '导出成功';
var _click = inFrame ? clickInFrame : function () {};
if (existed) {
return /*#__PURE__*/_react["default"].createElement("span", {
className: "umui-export-hint"
}, i18n.get('报表已存在,请前往'), " ", /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Link, {
to: url,
onClick: _click
}, i18n.get('报表中心')), " ", i18n.get('查看'));
} else {
return /*#__PURE__*/_react["default"].createElement("span", {
className: "umui-export-hint"
}, i18n.get('导出成功,请前往'), " ", /*#__PURE__*/_react["default"].createElement(_reactRouterDom.Link, {
to: url,
onClick: _click
}, i18n.get('报表中心')), " ", i18n.get('下载'));
}
};
};
var Export = function Export(props) {
var _useContext = (0, _react.useContext)(_exportContext["default"]),
exportConfig = _useContext.exportConfig;
var gContext = (0, _react.useContext)(_globalContext["default"]);
var i18n = gContext.i18n || _utils.i18n;
var _mergeProps = mergeProps(props, exportConfig),
_mergeProps$placement = _mergeProps.placement,
placement = _mergeProps$placement === void 0 ? 'topRight' : _mergeProps$placement,
params = _mergeProps.params,
exportFn = _mergeProps.exportFn,
blobFileName = _mergeProps.blobFileName,
children = _mergeProps.children,
onExport = _mergeProps.onExport,
_mergeProps$reportCen = _mergeProps.reportCenterURL,
reportCenterURL = _mergeProps$reportCen === void 0 ? '' : _mergeProps$reportCen,
existedCode = _mergeProps.existedCode,
_mergeProps$text = _mergeProps.text,
text = _mergeProps$text === void 0 ? i18n.get('导出数据') : _mergeProps$text;
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
visible = _useState2[0],
setVisible = _useState2[1];
var _useState3 = (0, _react.useState)(''),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
tipContent = _useState4[0],
setTipContent = _useState4[1];
var _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
exporting = _useState6[0],
setExporting = _useState6[1];
var _Frame$useFrame = _.Frame.useFrame(),
inFrame = _Frame$useFrame.inFrame;
var sendExport = function sendExport() {
if (!exportFn) throw ReferenceError('Please set "exportFn" as Axios instance in UmProvider exportConfig props.');
onExport && onExport();
setExporting(true);
var alert = function alert(msg) {
setTipContent(msg);
setVisible(true);
};
exportFn(params).then( /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(resp) {
var data, contentType, blob, defaultFileName, filenameStr, matchFilename, exportInfo;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
if (resp.headers) {
_context.next = 2;
break;
}
throw TypeError('"exportFn" must return a promise resolved a response with http headers.');
case 2:
data = resp.data || {
code: -1
};
contentType = resp.headers['content-type']; // 非 application/json 当 blob 处理
if (contentType.includes('application/json')) {
_context.next = 12;
break;
}
blob = new Blob([resp.data], {
type: contentType
});
defaultFileName = 'export.file';
filenameStr = resp.headers['content-disposition'];
if (filenameStr) {
matchFilename = filenameStr.match(/filename=.+\.[a-zA-Z]+/);
if (matchFilename) {
defaultFileName = matchFilename[0].replace(/filename=/, '');
}
}
(0, _fileSaver.saveAs)(blob, blobFileName || defaultFileName);
setExporting(false);
return _context.abrupt("return");
case 12:
if (!(data instanceof Blob)) {
_context.next = 16;
break;
}
_context.next = 15;
return resolveBlobError(data);
case 15:
data = _context.sent;
case 16:
if (!(data.code === existedCode)) {
_context.next = 19;
break;
}
alert(getSuccessTips(i18n)(reportCenterURL, inFrame, true));
return _context.abrupt("return");
case 19:
if (data.code === 200) {
exportInfo = data.data;
if (typeof exportInfo === 'string' && /^(http|ftp)s?:\/\//.test(exportInfo)) {
(0, _fileSaver.saveAs)(data.data);
} else if (exportInfo) {
alert(getSuccessTips(i18n)(reportCenterURL, inFrame));
}
} else {
alert(data.msg || data.message || i18n.get('导出失败'));
}
setExporting(false);
case 21:
case "end":
return _context.stop();
}
}, _callee);
}));
return function (_x) {
return _ref.apply(this, arguments);
};
}())["catch"](function () {
alert(i18n.get('导出失败'));
setExporting(false);
});
};
(0, _react.useEffect)(function () {
visible && setTimeout(function () {
setTipContent('');
setVisible(false);
}, (exportConfig === null || exportConfig === void 0 ? void 0 : exportConfig.popoverHideTime) || 4000);
}, [visible]);
return /*#__PURE__*/_react["default"].createElement(_antd.Popover, {
visible: visible,
content: tipContent,
placement: placement
}, exporting && !children && /*#__PURE__*/_react["default"].createElement(_antd.Spin, null), children ? /*#__PURE__*/_react["default"].createElement("span", {
onClick: function onClick() {
return sendExport();
},
style: {
pointerEvents: exporting ? 'none' : 'unset'
}
}, children) : !exporting && /*#__PURE__*/_react["default"].createElement("span", {
className: "umui-export",
onClick: function onClick() {
return sendExport();
}
}, /*#__PURE__*/_react["default"].createElement(_.IconSlim, {
type: "umicon-export",
className: "umicon-export-class"
}), text));
};
Export.displayName = 'Export';
var _default = exports["default"] = Export;