123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <template>
- <div class="component">
- <h6 class="title">{{data.title}}</h6>
- <div :id="'dashboard' + index" ref="box"></div>
- </div>
- </template>
-
- <script>
- import G2 from '@antv/g2'
-
- export default {
- name: '',
- props: ['data', 'index'],
- data () {
- return {
- }
- },
- components: {
- G2,
- },
- mounted () {
- this.$nextTick(function () {
- this.init()
- })
- },
- methods: {
- returnValue (val) {
- return String(val).substring(0, 2).split('').join('.') - 0
- },
- init () {
- var _that = this
- var Shape = G2.Shape
- var aValue = _that.returnValue(_that.data.value)
- // 自定义Shape 部分
- Shape.registerShape('point', 'pointer', {
- drawShape: function drawShape (cfg, group) {
- var center = this.parsePoint({ // 获取极坐标系下画布中心点
- x: 0,
- y: 0
- })
- // 绘制指针
- group.addShape('line', {
- attrs: {
- x1: center.x,
- y1: center.y,
- x2: cfg.x,
- y2: cfg.y,
- stroke: cfg.color,
- lineWidth: 5,
- lineCap: 'round'
- }
- })
- return group.addShape('circle', {
- attrs: {
- x: center.x,
- y: center.y,
- r: 8,
- stroke: cfg.color,
- lineWidth: 4.5,
- fill: '#fff'
- }
- })
- }
- })
- var chart = new G2.Chart({
- container: 'dashboard' + _that.index,
- forceFit: true,
- width: _that.$refs.box.clientWidth,
- height: 400,
- padding: [0, 0, 30, 0]
- })
- chart.source([{ value: aValue }])
-
- chart.coord('polar', {
- startAngle: -9 / 8 * Math.PI,
- endAngle: 1 / 8 * Math.PI,
- radius: 0.75
- })
- chart.scale('value', {
- min: 0,
- max: 9,
- tickInterval: 1,
- nice: false
- })
-
- chart.axis('1', false)
- chart.axis('value', {
- zIndex: 2,
- line: null,
- label: {
- offset: -16,
- textStyle: {
- fontSize: 18,
- textAlign: 'center',
- textBaseline: 'middle'
- }
- },
- subTickCount: 4,
- subTickLine: {
- length: -8,
- stroke: '#fff',
- strokeOpacity: 1
- },
- tickLine: {
- length: -17,
- stroke: '#fff',
- strokeOpacity: 1
- },
- grid: null
- })
- chart.legend(false)
- chart.point().position('value*1').shape('pointer').color('#1890FF').active(false)
-
- // 绘制仪表盘背景
- chart.guide().arc({
- zIndex: 0,
- top: false,
- start: [0, 0.945],
- end: [9, 0.945],
- style: { // 底灰色
- stroke: '#CBCBCB',
- lineWidth: 18
- }
- })
- // 绘制指标
- chart.guide().arc({
- zIndex: 1,
- start: [0, 0.945],
- end: [aValue, 0.945],
- style: {
- stroke: '#1890FF',
- lineWidth: 18
- }
- })
- // 绘制指标数字
- chart.guide().html({
- position: ['50%', '100%'],
- html: '<div style="width: 300px;text-align: center;">' + '<p style="font-size: 20px; color: #545454;margin: 0;">' + _that.data.title + '</p>' + '<p style="font-size: 36px;color: #545454;margin: 0;">' + aValue * 10 + '%</p>' + '</div>'
- })
-
- chart.render()
- },
- }
- }
- </script>
-
- <!-- Add "scoped" attribute to limit CSS to this component only -->
- <style lang="scss" scoped>
- @import "page.scss";
- </style>
|