UNPKG

wetrade-design

Version:

一款多语言支持Vue3的UI框架

198 lines (197 loc) 7.23 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.LegendProps = void 0; var _vue = require("vue"); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _lodash = _interopRequireDefault(require("lodash")); var _bignumber = _interopRequireDefault(require("bignumber.js")); var _useConfigInject2 = _interopRequireDefault(require("../../_util/hooks/useConfigInject")); var _scrollbar = _interopRequireDefault(require("../../scrollbar")); var _classNames3 = _interopRequireDefault(require("../../_util/classNames")); var _wetradeTools = require("wetrade-tools"); var _chartsColors = require("../../_util/chartsColors"); var LegendProps = function LegendProps() { return { // 画布高度 height: { type: [Number, String], default: '300px' }, // 图例数据 legendList: { type: Array, default: function _default() { return []; } }, // 保留小数位n位 digits: { type: Number, default: 2 }, // 图例是否可以点击 selectedMode: { type: Boolean, default: false }, // 图例选中状态表,动态配置图例显示项,selectedMode=true时生效 selectedModel: { type: Object, default: function _default() { return {}; } }, // 是否需要截断,不要的字符放在[]里;例:有的银行名称一致,需要加(卡号)区分,显示时需要截断 isLabelRemoveId: { type: Boolean, default: false }, // 颜色队列 colors: { type: Array, default: function _default() { return []; } }, legendWidth: { type: String, default: '' }, // 图例的值是数值型还是百分比 isLegendRatio: { type: Boolean, default: false }, // 是否显示千位符 showThousandSign: { type: Boolean, default: false }, // 数据总值 totalValue: { type: Number, default: null }, // 数值是否需要换算,单位有万,亿,万亿,默认不换算 isConversion: { type: [Boolean, Array], default: false }, unit: { type: [String, Array], default: '' }, // 0和null显示为0还是-- valueIsNumber: { type: Boolean, default: false }, legendMarginLeft: { type: String, default: '' }, onLegendChange: { type: Function }, isValueComputed: { type: Boolean, default: false } }; }; exports.LegendProps = LegendProps; var WdPieChartLegend = (0, _vue.defineComponent)({ name: 'WdPieChartLegend', props: LegendProps(), setup: function setup(props, _ref) { var emit = _ref.emit, slots = _ref.slots; var _useConfigInject = (0, _useConfigInject2.default)('pie-chart-legend', props), prefixCls = _useConfigInject.prefixCls, configProvider = _useConfigInject.configProvider; return function () { var list = props.legendList || []; var legendClass = (0, _classNames3.default)((0, _defineProperty2.default)({}, prefixCls.value, true)); // 点击图例 var handleClick = function handleClick(t, index) { emit('legendChange', t, index); }; // 截取图例多余文字 var showName = function showName(value) { var findIndexs = value === null || value === void 0 ? void 0 : value.indexOf('['); if (findIndexs > -1) { var seriesName = value.substring(0, findIndexs); return seriesName; } return value; }; // 数值 var valueFormatter = function valueFormatter(item, index) { // 显示比例 if (props.isLegendRatio) { if (![null, undefined].includes(item.percent)) return item.percent; if (props.totalValue) { // 如果值已计算好,直接显示 // 如果值未计算,用本项/总值 = 占比 var ratio = props.isValueComputed ? item.value : new _bignumber.default(item.value).div(props.totalValue).times(100).toNumber(); return (0, _wetradeTools.inThanMinOrMax)({ value: ratio || 0, decimal: props.digits, isPercent: true }); } return props.valueIsNumber ? '0.00%' : '--'; } // 显示数值,及是否要转换 var isConversion = typeof props.isConversion === 'boolean' ? props.isConversion : props.isConversion[index]; var unit = typeof props.unit === 'string' ? props.unit : props.unit[index]; return item.value < 0.01 && item.value > 0 ? '<0.01' : (0, _wetradeTools.numberFormat)(item.value, { decimal: props.digits, t: props.showThousandSign, os: isConversion }) + (!_lodash.default.isNil(item.value) ? unit : ''); }; var boxStyle = { marginLeft: props.legendMarginLeft, maxWidth: props.legendWidth }; return (0, _vue.createVNode)("div", { "class": legendClass, "style": boxStyle }, [(0, _vue.createVNode)(_scrollbar.default, { "maxHeight": props.height, "class": "".concat(prefixCls.value, "__scroll") }, { default: function _default() { return [list.map(function (item, index) { var _classNames2, _slots$mark; var listClass = (0, _classNames3.default)((_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, prefixCls.value + '__list', true), (0, _defineProperty2.default)(_classNames2, prefixCls.value + '__list-no-select', props.selectedMode && !props.selectedModel[item.name]), _classNames2)); var colors = (0, _chartsColors.getColors)(configProvider === null || configProvider === void 0 ? void 0 : configProvider.mode); var nColor = props.colors.length > 0 ? props.colors : colors.COMMONCOLOR; var symbolStyle = { backgroundColor: nColor[index % nColor.length] || '' }; return (0, _vue.createVNode)("div", { "class": listClass, "onClick": function onClick() { return handleClick(item, index); } }, [(0, _vue.createVNode)("span", { "style": symbolStyle, "class": "".concat(prefixCls.value, "__list-dot") }, null), (0, _vue.createVNode)("span", { "class": "".concat(prefixCls.value, "__list-label") }, [props.isLabelRemoveId ? showName((item === null || item === void 0 ? void 0 : item.name) || item) : (item === null || item === void 0 ? void 0 : item.name) || (typeof item === 'string' ? item : '')]), (_slots$mark = slots.mark) === null || _slots$mark === void 0 ? void 0 : _slots$mark.call(slots, item), (0, _vue.createVNode)("span", { "class": "".concat(prefixCls.value, "__list-value") }, [valueFormatter(item, index)])]); })]; } })]); }; } }); var _default2 = WdPieChartLegend; exports.default = _default2;