diff --git a/src/components/charts/horizontal-bar/icon.png b/src/components/charts/horizontal-bar/icon.png new file mode 100644 index 0000000..1e2736d Binary files /dev/null and b/src/components/charts/horizontal-bar/icon.png differ diff --git a/src/components/charts/horizontal-bar/index.html b/src/components/charts/horizontal-bar/index.html new file mode 100644 index 0000000..d60fced --- /dev/null +++ b/src/components/charts/horizontal-bar/index.html @@ -0,0 +1 @@ +
diff --git a/src/components/charts/horizontal-bar/index.js b/src/components/charts/horizontal-bar/index.js new file mode 100644 index 0000000..6b44938 --- /dev/null +++ b/src/components/charts/horizontal-bar/index.js @@ -0,0 +1,201 @@ +import * as echarts from 'echarts'; +import elementResizeDetectorMaker from 'element-resize-detector'; +export default { + props: { + id: { + type: String, + default: 'horizontal-bar' + }, + data: { + type: Array, + default: function () { + return [ + { + name: '闲置', + value: '10' + }, + { + name: '出租/出借', + value: '19' + } + ]; + } + }, + unit: { + type: String, + default: '单位:万元' + }, + color: { + type: Array, + default: function () { + return ['rgba(15, 252, 252, 1)', 'rgba(53, 197, 124, 1)'] + } + } + }, + data () { + return { + icon: require('./icon.png'), + chart: null + }; + }, + mounted () { + this.initChart(); + }, + computed: { + }, + methods: { + // 设置监听器 页面尺寸变化重新绘制图表 + initResizeCallBack () { + const erd = elementResizeDetectorMaker(); + erd.listenTo(document.getElementById(this.id), () => { + this.$nextTick(() => { + this.chart.resize(); + }); + }); + }, + initChart () { + this.chart = echarts.init(document.getElementById(this.id)); + this.chartSetOption(); + }, + chartSetOption () { + let yAxis1 = []; + let yAxis2 = []; + let data = []; + + let pictorialBarData = []; + this.data.forEach((item, index) => { + yAxis1.push(item.name) + yAxis2.push(item.value + '亩') + data.push( + { + value: item.value, + itemStyle: { + color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [ + { + offset: 0, + color: index === 0 ? 'rgba(134, 91, 252, 1)' : 'rgba(15, 252, 252, 1)', + }, + { + offset: 1, + color: index === 0 ? 'rgba(49, 129, 246, 1)' : 'rgba(194, 255, 255, 1)', + }, + ]), + }, + } + ) + + + pictorialBarData.push({ + value: item.value, + itemStyle: { + color: "rgba(255, 255, 255, 1)", + }, + }) + }); + const option = { + tooltip: { + trigger: "axis", + axisPointer: { + type: "shadow", + }, + formatter: function (objs, index) { + let obj = objs[0]; + return `${obj.name}
${obj.marker}${obj.seriesName} : ${obj.value}%`; + }, + }, + grid: { + top: "3%", + left: "3%", + right: "4%", + bottom: "3%", + containLabel: true, + }, + xAxis: { + show: false, + type: "value", + boundaryGap: [0, 0.01], + interval: 20, + min: 0, + max: 100, + splitLine: { + lineStyle: { + type: "dashed", + }, + }, + axisLine: { + show: false, + lineStyle: { + color: "#909396", + }, + }, + axisLabel: { + formatter: function (value, index) { + return value + "%"; + }, + color: "#303439", + }, + axisTick: { + show: false, + }, + }, + yAxis: [ + { + type: "category", + boundaryGap: true, + axisLabel: { + formatter: "{value}", + textStyle: { + color: "rgba(185, 211, 235, 1)", + }, + }, + axisLine: { + show: false + }, + axisTick: { + show: false, + }, + data: yAxis1, + }, + { + type: "category", + boundaryGap: true, + axisLabel: { + formatter: "{value}", + textStyle: { + color: "rgba(185, 211, 235, 1)", + }, + }, + axisLine: { + show: false + }, + axisTick: { + show: false, + }, + data: yAxis2, + } + ], + series: [ + { + name: "", + barMaxWidth: 6, + type: "bar", + data: data, + }, + { + name: "2", + barMaxWidth: 10, + type: "pictorialBar", + symbol: 'rect', + symbolSize: [4, 14], + symbolOffset: [4, 0], + symbolPosition: 'end', + data: pictorialBarData, + } + ], + }; + this.chart.setOption(option); + this.initResizeCallBack(); + + } + } +}; diff --git a/src/components/charts/horizontal-bar/index.scss b/src/components/charts/horizontal-bar/index.scss new file mode 100644 index 0000000..b89d9dc --- /dev/null +++ b/src/components/charts/horizontal-bar/index.scss @@ -0,0 +1,6 @@ +.chart { + overflow: visible; + width: 100%; + height: 100%; + z-index: 2; +} \ No newline at end of file diff --git a/src/components/charts/horizontal-bar/index.vue b/src/components/charts/horizontal-bar/index.vue new file mode 100644 index 0000000..5ca257a --- /dev/null +++ b/src/components/charts/horizontal-bar/index.vue @@ -0,0 +1,3 @@ +