| | |
| | | <template> |
| | | <div id="rose-chart"> |
| | | <div class="rose-chart-title">累计计量资金分布</div> |
| | | <div class="rose-chart-title">每月销售金额 - 总金额:{{ (sum/10000).toFixed(2) }} 万元</div> |
| | | <dv-charts :option="option" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import axios from 'axios' |
| | | |
| | | export default { |
| | | name: 'RoseChart', |
| | | data () { |
| | | data() { |
| | | return { |
| | | option: {} |
| | | option: {}, |
| | | sum: 1000 |
| | | } |
| | | }, |
| | | methods: { |
| | | createData () { |
| | | const { randomExtend } = this |
| | | |
| | | this.option = { |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | radius: '50%', |
| | | roseSort: false, |
| | | data: [ |
| | | { name: '路基', value: randomExtend(40, 70) }, |
| | | { name: '交安设施', value: randomExtend(20, 30) }, |
| | | { name: '日常养护', value: randomExtend(10, 50) }, |
| | | { name: '桥通', value: randomExtend(5, 20) }, |
| | | { name: '交通事故', value: randomExtend(40, 50) }, |
| | | { name: '路面', value: randomExtend(20, 30) }, |
| | | { name: '绿化', value: randomExtend(5, 10) }, |
| | | { name: '计日工', value: randomExtend(20, 35) }, |
| | | { name: '除雪', value: randomExtend(5, 10) } |
| | | ], |
| | | insideLabel: { |
| | | show: false |
| | | }, |
| | | outsideLabel: { |
| | | formatter: '{name} {percent}%', |
| | | labelLineEndLength: 20, |
| | | style: { |
| | | fill: '#fff' |
| | | httpData() { |
| | | const getApiData = async () => { |
| | | return await axios.get(this.baseUrl + "data3", { params: {} }) |
| | | } |
| | | getApiData().then(result => { |
| | | let list = result.data.data; |
| | | let sum = 0; |
| | | for (let i = 0; i < list.length; i++) { |
| | | let item = list[i]; |
| | | sum += item.sum; |
| | | item['name'] = item.month + "月"; |
| | | item['value'] = Number(item.sum.toFixed(2)); |
| | | delete item.month; |
| | | delete item.sum; |
| | | } |
| | | this.option = { |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | radius: '50%', |
| | | roseSort: false, |
| | | data: list, |
| | | insideLabel: { |
| | | show: false |
| | | }, |
| | | labelLineStyle: { |
| | | stroke: '#fff' |
| | | } |
| | | }, |
| | | roseType: true |
| | | } |
| | | ], |
| | | color: ['#da2f00', '#fa3600', '#ff4411', '#ff724c', '#541200', '#801b00', '#a02200', '#5d1400', '#b72700'] |
| | | } |
| | | }, |
| | | randomExtend (minNum, maxNum) { |
| | | if (arguments.length === 1) { |
| | | return parseInt(Math.random() * minNum + 1, 10) |
| | | } else { |
| | | return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10) |
| | | } |
| | | outsideLabel: { |
| | | formatter: '{name} {percent}%', |
| | | labelLineEndLength: 20, |
| | | style: { |
| | | fill: '#fff' |
| | | }, |
| | | labelLineStyle: { |
| | | stroke: '#fff' |
| | | } |
| | | }, |
| | | roseType: true |
| | | } |
| | | ], |
| | | color: ['#da2f00', '#fa3600', '#ff4411', '#ff724c', '#541200', '#801b00', '#a02200', '#5d1400', '#b72700'] |
| | | } |
| | | this.sum = sum; |
| | | }) |
| | | } |
| | | }, |
| | | mounted () { |
| | | const { createData } = this |
| | | |
| | | createData() |
| | | |
| | | setInterval(createData, 30000) |
| | | mounted() { |
| | | const { httpData } = this |
| | | httpData() |
| | | |
| | | setInterval(httpData, 30000) |
| | | } |
| | | } |
| | | </script> |