UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

265 lines (264 loc) 13.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.StatisticRenderer = exports.Statistic1 = void 0; var tslib_1 = require("tslib"); // Jay // 统计数值组件 var react_1 = (0, tslib_1.__importDefault)(require("react")); var factory_1 = require("../../../factory"); var service_1 = require("../../../store/service"); var tpl_1 = require("../../../utils/tpl"); var classnames_1 = (0, tslib_1.__importDefault)(require("classnames")); var tpl_builtin_1 = require("../../../utils/tpl-builtin"); var api_1 = require("../../../utils/api"); var Scoped_1 = require("../../../Scoped"); var mobx_state_tree_1 = require("mobx-state-tree"); var spark_md5_1 = (0, tslib_1.__importDefault)(require("spark-md5")); var Statistic1 = /** @class */ (function (_super) { (0, tslib_1.__extends)(Statistic1, _super); function Statistic1(props) { var _a; var _this = _super.call(this, props) || this; _this.reload = _this.reload.bind(_this); _this.receive = _this.receive.bind(_this); _this.renderStatistic = _this.renderStatistic.bind(_this); _this.state = { statisticData: ((_a = props.columns) === null || _a === void 0 ? void 0 : _a.map(function (item) { return ({ label: item.label, num: '-', prefix: item.prefix, suffix: item.suffix, level: item.level, }); })) || [], header: null }; return _this; } Statistic1.prototype.componentDidMount = function () { var _a = this.props, api = _a.api, data = _a.data, initFetch = _a.initFetch, source = _a.source, name = _a.name, store = _a.store, setPanelLoading = _a.setPanelLoading; this.mounted = true; if (source && (0, tpl_builtin_1.isPureVariable)(source)) { // const ret = resolveVariableAndFilter(source, data, '| raw'); // ret && this.renderChart(ret); } else if (api && initFetch !== false) { setPanelLoading === null || setPanelLoading === void 0 ? void 0 : setPanelLoading(true); this.reload(); } else if (!api && name && store.data[name]) { this.renderStatistic(store.data[name]); } }; Statistic1.prototype.componentDidUpdate = function (prevProps) { var props = this.props; if ((0, api_1.isApiOutdated)(prevProps.api, props.api, prevProps.data, props.data)) { this.reload(); } // else if (props.source && isPureVariable(props.source)) { // const prevRet = prevProps.source // ? resolveVariableAndFilter(prevProps.source, prevProps.data, '| raw') // : null; // const ret = resolveVariableAndFilter(props.source, props.data, '| raw'); // if (prevRet !== ret) { // this.renderChart(ret || {}); // } // } // else if (props.config !== prevProps.config) { // this.renderChart(props.config || {}); // } // else if ( // props.config && // props.trackExpression && // filter(props.trackExpression, props.data) !== // filter(prevProps.trackExpression, prevProps.data) // ) { // this.renderChart(props.config || {}); // } }; Statistic1.prototype.componentWillUnmount = function () { this.mounted = false; this.timer && clearTimeout(this.timer); }; Statistic1.prototype.reload = function (subpath, query) { var _this = this; var _a = this.props, api = _a.api, env = _a.env, store = _a.store, interval = _a.interval, __ = _a.translate, setPanelLoading = _a.setPanelLoading; if (query) { return this.receive(query); } else if (!env || !env.fetcher || !(0, api_1.isEffectiveApi)(api, store.data)) { return; } this.timer && clearTimeout(this.timer); // 如果上一次的请求还没结束则结束请求 if (this.reloadCancel) { this.reloadCancel(); delete this.reloadCancel; } store.markFetching(true); env .fetcher(api, store.data, { cancelExecutor: function (executor) { return (_this.reloadCancel = executor); } }) .then(function (result) { var resData = result.data; _this.renderStatistic(resData); setPanelLoading === null || setPanelLoading === void 0 ? void 0 : setPanelLoading(false); (0, mobx_state_tree_1.isAlive)(store) && store.markFetching(false); if (!result.ok) { return env.notify('error', result.msg || __('fetchFailed'), result.msgTimeout !== undefined ? { closeButton: true, timeout: result.msgTimeout } : undefined); } delete _this.reloadCancel; interval && _this.mounted && (_this.timer = setTimeout(_this.reload, Math.max(interval, 1000))); }) .catch(function (reason) { setPanelLoading === null || setPanelLoading === void 0 ? void 0 : setPanelLoading(false); if (env.isCancel(reason)) { return; } (0, mobx_state_tree_1.isAlive)(store) && store.markFetching(false); env.notify('error', reason); }); }; Statistic1.prototype.receive = function (data) { var store = this.props.store; store.updateData(data); this.reload(); }; Statistic1.prototype.renderStatistic = function (data) { var _a = this.props, headField = _a.headField, columns = _a.columns, titleDesc = _a.titleDesc; var tempArr = []; columns === null || columns === void 0 ? void 0 : columns.forEach(function (item) { tempArr.push({ label: item.label, num: data[item.name] || '-', prefix: item.prefix, suffix: item.suffix, level: item.level, }); }); this.setState({ statisticData: tempArr }); if (headField) { if (data[headField.name]) { this.setState({ header: { label: headField.label, num: data[headField.name], prefix: headField.prefix, suffix: headField.suffix, level: headField.level, } }); } } if (titleDesc) { this.setState({ titleDescription: (0, tpl_1.filter)(titleDesc, data) }); } }; Statistic1.prototype.render = function () { var _a = this.props, className = _a.className, width = _a.width, height = _a.height, ns = _a.classPrefix, title = _a.title, contentClassName = _a.contentClassName, contentStyle = _a.contentStyle, columnsCount = _a.columnsCount, numOver = _a.numOver, link = _a.link; var style = this.props.style || {}; width && (style.width = width); height && (style.height = height); var _b = this.state, header = _b.header, statisticData = _b.statisticData, titleDescription = _b.titleDescription; // 列数 var columnNum = columnsCount && statisticData.length !== 0 ? columnsCount < statisticData.length ? columnsCount : statisticData.length : statisticData.length !== 0 ? statisticData.length : 1; // 行数 var rows = Math.ceil(statisticData.length / columnNum); // 每列的宽度占比 var widthPercent = Math.floor((1 / columnNum) * 100) + '%'; var splitArr = []; for (var i = 0; i < rows; i++) { splitArr.push(statisticData.slice(i * columnNum, (i + 1) * columnNum)); } var flexCenter = (0, classnames_1.default)('flex', 'justify-center', 'items-center'); return (react_1.default.createElement("div", { className: (0, classnames_1.default)(ns + "Statistic", 'flex', 'flex-col', 'w-full', 'bg-white', className), style: style }, (title || titleDescription) && react_1.default.createElement("div", { className: (0, classnames_1.default)(ns + "Statistic--title", 'flex', 'justify-between') }, react_1.default.createElement("span", { className: 'title' }, title), react_1.default.createElement("div", { className: "flex items-center" }, titleDescription && react_1.default.createElement("span", { className: "title-desc" }, titleDescription), link && react_1.default.createElement("a", { href: "", onClick: function (e) { e.preventDefault(); var hash = spark_md5_1.default.hash(link.schemaApi); if (window.location.hash) { // @ts-ignore // 用于saas-web项目路由判断 window.linkPage = link; // saas-web采用的是hash模式 // #/work/template/是固定的 window.location.hash = "#/work/template/a" + hash; } else { history.pushState(link, '', "/work/template/a" + hash); } } }, "\u66F4\u591A"))), react_1.default.createElement("div", { className: (0, classnames_1.default)(ns + "Statistic--content", contentClassName), style: contentStyle }, header && react_1.default.createElement("div", { className: (0, classnames_1.default)(ns + "Statistic--header", flexCenter) }, react_1.default.createElement("span", { className: "desc" }, header.label), react_1.default.createElement("span", { className: (0, classnames_1.default)("num", header.level) }, react_1.default.createElement("span", { className: "prefix" }, header.prefix), Number(header.num) === Number(header.num) ? Number(header.num).toLocaleString() : header.num, react_1.default.createElement("span", { className: "suffix" }, header.suffix))), splitArr.map(function (row, idx1) { return (react_1.default.createElement("div", { key: idx1, className: 'row' }, row.map(function (col, idx2) { var colNum = Number(col.num); var num = colNum === colNum ? colNum.toLocaleString() : col.num; return (react_1.default.createElement("div", { key: idx2, className: "col", style: { width: widthPercent } }, numOver ? react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("div", { className: (0, classnames_1.default)("num", col.level) }, react_1.default.createElement("span", { className: "prefix" }, col.prefix), num, react_1.default.createElement("span", { className: "suffix" }, col.suffix)), react_1.default.createElement("div", { className: "desc" }, col.label)) : react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement("div", { className: "desc" }, col.label), react_1.default.createElement("div", { className: (0, classnames_1.default)("num", col.level) }, react_1.default.createElement("span", { className: "prefix" }, col.prefix), num, react_1.default.createElement("span", { className: "suffix" }, col.suffix))))); }))); })))); }; Statistic1.propsList = []; return Statistic1; }(react_1.default.Component)); exports.Statistic1 = Statistic1; var StatisticRenderer = /** @class */ (function (_super) { (0, tslib_1.__extends)(StatisticRenderer, _super); function StatisticRenderer(props, context) { var _this = _super.call(this, props) || this; var scoped = context; scoped.registerComponent(_this); return _this; } StatisticRenderer.prototype.componentWillUnmount = function () { var scoped = this.context; scoped.unRegisterComponent(this); _super.prototype.componentWillUnmount.call(this); }; var _a; StatisticRenderer.contextType = Scoped_1.ScopedContext; StatisticRenderer = (0, tslib_1.__decorate)([ (0, factory_1.Renderer)({ type: 'statistic1', storeType: service_1.ServiceStore.name }) // 将ChartRenderer注册到scoped,可以被form通过target、reload(submitToTarget、reloadTarget)等通知到Scoped // Scoped.tsx获取到target或reload中字符串(由组件的name用逗号隔开的字符串)对应的组件,并执行对应组件的receive方法 , (0, tslib_1.__metadata)("design:paramtypes", [Object, typeof (_a = typeof Scoped_1.IScopedContext !== "undefined" && Scoped_1.IScopedContext) === "function" ? _a : Object]) ], StatisticRenderer); return StatisticRenderer; }(Statistic1)); exports.StatisticRenderer = StatisticRenderer; //# sourceMappingURL=./renderers/Lion/Statistic/Statistic1.js.map