UNPKG

wetrade-design

Version:

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

201 lines (200 loc) 8.78 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 _useConfigInject2 = _interopRequireDefault(require("../../_util/hooks/useConfigInject")); var _icon = _interopRequireDefault(require("../../icon")); var _vcResizeObserver = _interopRequireDefault(require("../../vc-resize-observer")); var _const = require("./const"); var _classNames6 = _interopRequireDefault(require("../../_util/classNames")); var _chartsColors = require("../../_util/chartsColors"); var LegendProps = function LegendProps() { return { // 图例数据 legendList: { type: Array, default: function _default() { return []; } }, // 大于1行时,是否显示左右箭头 isShowTotal: { type: Boolean, default: false }, // 是否显示手势,可点击的图例需要置为true selectedMode: { type: Boolean, default: false }, // 是否需要截断,不要的字符放在[]里;例:有的银行名称一致,需要加(卡号)区分,显示时需要截断 isLabelRemoveId: { type: Boolean, default: false }, // 颜色队列 colors: { type: Array, default: [] }, // 是柱状图还是折线图,银行图例的形状 'line | bar | circle' scene: { type: [String, Array], default: 'bar' }, /** 边距 * in 图例与文字间的间距 * out 图例与图例间的间距 * */ spacing: { type: Object, default: function _default() { return { in: 10, out: 24 }; } }, onLegendChange: { type: Function } }; }; exports.LegendProps = LegendProps; var ChartLegend = (0, _vue.defineComponent)({ name: 'WdChartLegend', props: LegendProps(), setup: function setup(props, _ref) { var emit = _ref.emit, slots = _ref.slots; var _useConfigInject = (0, _useConfigInject2.default)('chart-legend', props), prefixCls = _useConfigInject.prefixCls, configProvider = _useConfigInject.configProvider; var legendRef = (0, _vue.ref)(); var PageType; (function (PageType) { PageType[PageType["PREV"] = 0] = "PREV"; PageType[PageType["NEXT"] = 1] = "NEXT"; })(PageType || (PageType = {})); var data = (0, _vue.reactive)({ cur: 1, total: 1 }); var _toRefs = (0, _vue.toRefs)(data), cur = _toRefs.cur, total = _toRefs.total; // 点击图例 var handleClick = function handleClick(t, index) { emit('legendChange', t, index); }; // 计算y方向移动距离 var translateTop = (0, _vue.computed)(function () { return !cur.value ? 0 : -((cur.value - 1) * 18); }); // 截取图例多余文字 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 legendListRef = (0, _vue.ref)(); var computedWidth = function computedWidth() { if (!legendListRef.value) return; var listHeight = legendListRef.value; var parentHeight = legendRef.value; total.value = Math.floor(listHeight.clientHeight / parentHeight.clientHeight); cur.value = cur.value > total.value ? total.value > 0 ? total.value : cur.value : cur.value; }; // 翻页 var btnClick = function btnClick(t) { if (t === PageType.PREV) { cur.value = cur.value > 1 ? cur.value - 1 : cur.value; return; } cur.value = cur.value >= total.value ? total.value : cur.value + 1; }; (0, _vue.watch)(function () { return props.legendList; }, function () { (0, _vue.nextTick)(function () { return computedWidth(); }); }); return function () { var _classNames, _classNames2, _classNames3; var list = props.legendList || []; var leftIconClass = (0, _classNames6.default)((_classNames = {}, (0, _defineProperty2.default)(_classNames, prefixCls.value + '__icon-top', true), (0, _defineProperty2.default)(_classNames, prefixCls.value + '__disabled', cur.value === 1), _classNames)); var rightIconClass = (0, _classNames6.default)((_classNames2 = {}, (0, _defineProperty2.default)(_classNames2, prefixCls.value + '__icon-bottom', true), (0, _defineProperty2.default)(_classNames2, prefixCls.value + '__disabled', cur.value === total.value), _classNames2)); var PAGEDOM; // 是否显示翻页 if (props.isShowTotal) { PAGEDOM = (0, _vue.withDirectives)((0, _vue.createVNode)("div", { "class": "".concat(prefixCls.value, "__more-btns") }, [(0, _vue.createVNode)(_icon.default, { "class": leftIconClass, "onClick": function onClick() { return btnClick(PageType.PREV); }, "icon-class": "wd-icon-direction_caret-up" }, null), (0, _vue.createVNode)("span", null, [cur.value, (0, _vue.createTextVNode)("/"), total.value]), (0, _vue.createVNode)(_icon.default, { "class": rightIconClass, "onClick": function onClick() { return btnClick(PageType.NEXT); }, "icon-class": "wd-icon-direction_caret-down" }, null)]), [[_vue.vShow, total.value > 1]]); } var boxClassName = (0, _classNames6.default)((_classNames3 = {}, (0, _defineProperty2.default)(_classNames3, prefixCls.value + '__list', true), (0, _defineProperty2.default)(_classNames3, prefixCls.value + '__has-more', total.value > 1), _classNames3)); return (0, _vue.createVNode)("div", { "ref": legendRef, "class": "".concat(prefixCls.value) }, [(0, _vue.createVNode)(_vcResizeObserver.default, { "onResize": computedWidth }, { default: function _default() { return [(0, _vue.createVNode)("div", { "class": boxClassName, "ref": legendListRef, "style": " transform: translateY(".concat(translateTop.value, "px) ") }, [list.map(function (item, index) { var _classNames4, _classNames5, _slots$mark; var itemClass = (0, _classNames6.default)((_classNames4 = {}, (0, _defineProperty2.default)(_classNames4, prefixCls.value + '__item', true), (0, _defineProperty2.default)(_classNames4, prefixCls.value + '__no-selected', !(item !== null && item !== void 0 && item.isShow) && item.hasOwnProperty('isShow')), _classNames4)); var itemStyle = { cursor: props.selectedMode ? 'pointer' : 'default', margin: '0 ' + props.spacing.out / 2 + 'px' }; var symbolClass = (0, _classNames6.default)((_classNames5 = {}, (0, _defineProperty2.default)(_classNames5, prefixCls.value + '__item-symbol', true), (0, _defineProperty2.default)(_classNames5, prefixCls.value + '__symbol-' + (typeof props.scene === 'string' ? props.scene : props.scene[index]), true), _classNames5)); 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] || '', marginRight: ((props.scene === 'string' ? props.scene : props.scene[index]) === _const.SeriesType.LINE ? props.spacing.in - 1 : props.spacing.in) + 'px' }; return (0, _vue.createVNode)("span", { "class": itemClass, "onClick": function onClick() { return handleClick(item, index); }, "key": (item === null || item === void 0 ? void 0 : item.id) || index, "style": itemStyle }, [(0, _vue.createVNode)("span", { "class": symbolClass, "style": symbolStyle }, null), (0, _vue.createVNode)("span", { "class": "".concat(prefixCls.value, "__item-text") }, [props.isLabelRemoveId ? showName((item === null || item === void 0 ? void 0 : item.name) || item) : (item === null || item === void 0 ? void 0 : item.name) || item]), (_slots$mark = slots.mark) === null || _slots$mark === void 0 ? void 0 : _slots$mark.call(slots, item)]); })])]; } }), PAGEDOM]); }; } }); var _default2 = ChartLegend; exports.default = _default2;