UNPKG

iep-ui

Version:

An enterprise-class UI design language and Vue-based implementation

168 lines (145 loc) 5.17 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _vueTypes = require('../_util/vue-types'); var _vueTypes2 = _interopRequireDefault(_vueTypes); var _zrender = require('zrender'); var zrender = _interopRequireWildcard(_zrender); var _lodash = require('lodash'); var _elementResizeDetector = require('element-resize-detector'); var _elementResizeDetector2 = _interopRequireDefault(_elementResizeDetector); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } exports['default'] = { name: 'IepDoubleValueProgress', props: { value: _vueTypes2['default'].number.def(0), valueBgColor: _vueTypes2['default'].string.def('#61DDAA'), valueTextColor: _vueTypes2['default'].string.def('#2C3542'), bgColor: _vueTypes2['default'].string.def('#65789B'), textColor: _vueTypes2['default'].string.def('#fff') }, data: function data() { return { isEmpty: _lodash.isEmpty, chart: null }; }, created: function created() { this.handleWindowResize = (0, _lodash.debounce)(this.handleWindowResize, 300); }, mounted: function mounted() { var _this = this; window.addEventListener('resize', this.handleWindowResize); this.addChartResizeListener(); this.watchData = this.$watch('value', function (e) { if (e > 0) { if (_this.chart) { _this.chart.clear(); } var _$refs$chartDom$getBo = _this.$refs.chartDom.getBoundingClientRect(), width = _$refs$chartDom$getBo.width, height = _$refs$chartDom$getBo.height; _this.renderChartView(width, height); } }, { immediate: true, deep: true }); }, beforeDestroy: function beforeDestroy() { window.removeEventListener('resize', this.handleWindowResize); this.watchData(); if (this.chart) { this.chart.dispose(); this.chart = null; } }, methods: { handleWindowResize: function handleWindowResize() { if (!this.chart) return; var _$refs$chartDom$getBo2 = this.$refs.chartDom.getBoundingClientRect(), width = _$refs$chartDom$getBo2.width, height = _$refs$chartDom$getBo2.height; this.renderChartView(width, height); }, addChartResizeListener: function addChartResizeListener() { var _this2 = this; var instance = (0, _elementResizeDetector2['default'])({ strategy: 'scroll', callOnAdd: true }); instance.listenTo(this.$el, function () { if (!_this2.chart) return; var _$refs$chartDom$getBo3 = _this2.$refs.chartDom.getBoundingClientRect(), width = _$refs$chartDom$getBo3.width, height = _$refs$chartDom$getBo3.height; _this2.renderChartView(width, height); }); }, renderChartView: function renderChartView(width, height) { var _$props = this.$props, value = _$props.value, valueBgColor = _$props.valueBgColor, valueTextColor = _$props.valueTextColor, bgColor = _$props.bgColor, textColor = _$props.textColor; var dom = this.$refs.chartDom; if ((0, _lodash.isEmpty)(dom) || !dom) { return false; } this.chart = zrender.init(dom); var scale = width / 100; var rightValue = parseInt(100 * 100 - value * 100) / 100; var panelTop = new zrender.Rect({ shape: { width: width, height: height, r: 3.2 }, style: { fill: bgColor } }); var leftText = new zrender.Text({ style: { text: value + '%', lineHeight: height, x: scale * value / 2 - (value + '%').length * 9 / 2 < 0 ? 0 : scale * value / 2 - (value + '%').length * 9 / 2, z: 2, fontSize: 12, fill: value <= 0 ? 'rgba(0,0,0,0)' : valueTextColor } }); var panelBottom = new zrender.Rect({ shape: { width: scale * value, height: height, r: 3.2 }, style: { fill: valueBgColor } }); var rightText = new zrender.Text({ style: { text: rightValue + '%', x: scale * value + (width - scale * value) / 2 - (rightValue + '%').length * 9 / 2 > width - (rightValue + '%').length * 9 ? width - (rightValue + '%').length * 9 : scale * value + (width - scale * value) / 2 - (rightValue + '%').length * 9 / 2, lineHeight: height, z: 2, fontSize: 12, fill: rightValue <= 0 ? 'rgba(0,0,0,0)' : textColor } }); this.chart.add(panelTop); this.chart.add(panelBottom); this.chart.add(leftText); this.chart.add(rightText); } }, render: function render() { var h = arguments[0]; return h('div', { ref: 'chartDom' }); } };