UNPKG

qt-public-ui

Version:

新设计规范下业务组件库

213 lines (212 loc) 10.2 kB
"use strict"; 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;