UNPKG

qt-public-ui

Version:

新设计规范下业务组件库

156 lines (152 loc) 6.79 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _html2canvas = _interopRequireDefault(require("html2canvas")); var _lodash = require("lodash"); var _globalContext = _interopRequireDefault(require("../UmProvider/globalContext")); var _utils = require("../utils"); 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; } /** * 前端导出 * 支持类型: * 模型组件:指标矩阵模型、金字塔模型 * 图表组件:线图、柱图 * 注: * 1、dom结构匹配严格,目前仅支持QT看板(单个指标模块) * 2、指标卡趋势图:点击导出后,导出组件加载,导致整个指标模块重新渲染,趋势图数据重新加载,导出组件获取dom时,图表数据还没加载完成,导致拿不到canvas */ var scale = 2; var ExportPic = function ExportPic(props) { var gContext = (0, _react.useContext)(_globalContext["default"]); var i18n = gContext.i18n || _utils.i18n; var downPic = props.downPic, exportClassName = props.exportClassName, exportClassNameNum = props.exportClassNameNum, exportPicWidth = props.exportPicWidth, picLoad = props.picLoad, exportPicName = props.exportPicName, _props$filterClassNam = props.filterClassName, filterClassName = _props$filterClassNam === void 0 ? [] : _props$filterClassNam; var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), canvasPic = _useState2[0], setSanvasPic = _useState2[1]; var _useState3 = (0, _react.useState)(0), _useState4 = (0, _slicedToArray2["default"])(_useState3, 2), scaleWidth = _useState4[0], setScaleWidth = _useState4[1]; var getDom = function getDom() { var domWidth = 0; var scaleContent = document.getElementById("scaleContent_".concat(exportClassNameNum)); var htmlDom = document.getElementsByClassName(exportClassName)[exportClassNameNum]; var canvasLength = htmlDom === null || htmlDom === void 0 ? void 0 : htmlDom.getElementsByTagName('canvas'); scaleContent.innerHTML = htmlDom.innerHTML; // 获取看板宽度和高度 if (exportPicWidth) { // 传入宽度 scaleContent.style.width = "".concat(exportPicWidth, "px"); } else { // 获取最大宽度 var widthAry = []; var tagNames = scaleContent === null || scaleContent === void 0 ? void 0 : scaleContent.getElementsByTagName('*'); if (tagNames) { for (var i = 0, l = tagNames.length; i < l; ++i) { if (tagNames[i].scrollWidth) { widthAry.push(tagNames[i].scrollWidth); } } } domWidth = Math.max.apply(Math, widthAry); scaleContent.style.width = "".concat(domWidth, "px"); } // 处理canvas图表不重新加载问题 if (canvasLength.length > 0) { // 获取canvas转成图片 var canvasDom = htmlDom === null || htmlDom === void 0 ? void 0 : htmlDom.getElementsByTagName('canvas')[0].parentNode.parentNode; (0, _html2canvas["default"])(canvasDom, { scale: scale, logging: false, useCORS: true, allowTaint: true }).then(function (canvas) { var dataImg = new Image(); dataImg.src = canvas.toDataURL('image/png'); dataImg.style.width = '100%'; scaleContent.appendChild(dataImg); // 图片追加到dom setSanvasPic(true); }); // 删除复制div中的canvas div var deleCanvasDom = scaleContent === null || scaleContent === void 0 ? void 0 : scaleContent.getElementsByTagName('canvas')[0].parentNode.parentNode; deleCanvasDom && deleCanvasDom.parentNode.removeChild(deleCanvasDom); } else { setSanvasPic(true); } // 删除复制div中的指标操作弹框(特殊定制) var deleIndicatorDom = scaleContent.getElementsByClassName('indicator-action')[0]; deleIndicatorDom && deleIndicatorDom.parentNode.removeChild(deleIndicatorDom); setScaleWidth(domWidth); }; var getImg = function getImg(scaleContent) { (0, _html2canvas["default"])(scaleContent, { scale: scale, logging: false, useCORS: true, allowTaint: true, // canvas: document.querySelector("canvas"), width: exportPicWidth || scaleWidth, height: scaleContent.scrollHeight, ignoreElements: function ignoreElements(element) { if ((0, _lodash.isArray)(filterClassName) && filterClassName.length > 0) { filterClassName.map(function (c) { if (element.className === c) { return true; } return false; }); } return false; } }).then(function (canvas) { // toImage var dataImg = new Image(); dataImg.src = canvas.toDataURL('image/png'); var alink = document.createElement('a'); alink.href = dataImg.src; alink.download = i18n.get(exportPicName ? "".concat(exportPicName, ".jpg") : '导出图片.jpg'); alink.click(); picLoad(false); setSanvasPic(false); }); }; (0, _react.useEffect)(function () { if (downPic) { getDom(); } }, [downPic]); (0, _react.useEffect)(function () { if (canvasPic) { getImg(document.getElementById("scaleContent_".concat(exportClassNameNum))); } }, [canvasPic]); return /*#__PURE__*/_react["default"].createElement("div", { style: { overflow: 'auto', width: '1px', height: '1px' } }, /*#__PURE__*/_react["default"].createElement("div", { id: "scaleContent_".concat(exportClassNameNum), style: { padding: '30px' } })); }; ExportPic.displayName = 'ExportPic'; var _default = exports["default"] = ExportPic;